<?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>191441</bug_id>
          
          <creation_ts>2018-11-08 15:37:04 -0800</creation_ts>
          <short_desc>[iOS] Implement safe browsing in WebKit</short_desc>
          <delta_ts>2018-11-13 09:16:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1476694</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-08 15:37:04 -0800</bug_when>
    <thetext>[iOS] Implement safe browsing in WebKit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476695</commentid>
    <comment_count>1</comment_count>
      <attachid>354284</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-08 15:38:31 -0800</bug_when>
    <thetext>Created attachment 354284
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476697</commentid>
    <comment_count>2</comment_count>
      <attachid>354284</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-08 15:39:18 -0800</bug_when>
    <thetext>Comment on attachment 354284
Patch

The UI isn&apos;t quite right on this first patch, but it works!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476929</commentid>
    <comment_count>3</comment_count>
      <attachid>354348</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 09:09:00 -0800</bug_when>
    <thetext>Created attachment 354348
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1476930</commentid>
    <comment_count>4</comment_count>
      <attachid>354348</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 09:09:22 -0800</bug_when>
    <thetext>Comment on attachment 354348
Patch

iOS UI still isn&apos;t quite right, but much closer!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477155</commentid>
    <comment_count>5</comment_count>
      <attachid>354402</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 15:58:29 -0800</bug_when>
    <thetext>Created attachment 354402
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477156</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 15:59:51 -0800</bug_when>
    <thetext>So close!  I need to use UIUserInterfaceSizeClass instead of hard-coding a narrow width, listen for orientation transitions, and make it scroll on iOS, but other than that it&apos;s good!  Preliminary reviews welcome.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477237</commentid>
    <comment_count>7</comment_count>
      <attachid>354436</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 21:10:09 -0800</bug_when>
    <thetext>Created attachment 354436
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477243</commentid>
    <comment_count>8</comment_count>
      <attachid>354436</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-11-09 21:50:26 -0800</bug_when>
    <thetext>Comment on attachment 354436
Patch

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

&gt; Source/WebKit/UIProcess/Cocoa/WKSafeBrowsingWarning.mm:279
&gt; +        NSUnderlineStyleAttributeName: @(NSUnderlineStyleSingle),
&gt; +        NSUnderlineColorAttributeName: [UIColor whiteColor],
&gt; +        NSForegroundColorAttributeName: colorForItem(item, warning),

Nit - extra spaces after the :

&gt; Source/WebKit/UIProcess/Cocoa/WKSafeBrowsingWarning.mm:316
&gt; +@interface WKSafeBrowsingTextViewDelegate : NSObject&lt;NSTextViewDelegate&gt;

It&apos;s not common practice in ObjC to create a new instance of a class whose sole purpose is to be a delegate. I would&apos;ve thought that the safe browsing view should be the text view delegate. Then, you wouldn&apos;t need this extra bit of plumbing when handling a click:

[((WKSafeBrowsingTextView *)textView)-&gt;_warning clickedOnLink:link];

&gt; Source/WebKit/UIProcess/Cocoa/WKSafeBrowsingWarning.mm:456
&gt; +    for (ViewType *subview in self.subviews) {

It seems strange to go digging around in the view hierarchy in search of a view that we created and added ourselves. Can we instead store a pointer to the WKSafeBrowsingTextView above and just invalidate its intrinsic content size here?

&gt; Source/WebKit/UIProcess/Cocoa/WKSafeBrowsingWarning.mm:560
&gt; +    constexpr auto noHeightConstraint = 1000000;

Perhaps CGFLOAT_MAX instead of an arbitrary large number?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477246</commentid>
    <comment_count>9</comment_count>
      <attachid>354442</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 22:27:58 -0800</bug_when>
    <thetext>Created attachment 354442
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477254</commentid>
    <comment_count>10</comment_count>
      <attachid>354446</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 23:01:00 -0800</bug_when>
    <thetext>Created attachment 354446
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477257</commentid>
    <comment_count>11</comment_count>
      <attachid>354449</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 23:25:32 -0800</bug_when>
    <thetext>Created attachment 354449
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477258</commentid>
    <comment_count>12</comment_count>
      <attachid>354450</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-09 23:40:08 -0800</bug_when>
    <thetext>Created attachment 354450
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477260</commentid>
    <comment_count>13</comment_count>
      <attachid>354452</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-10 00:28:02 -0800</bug_when>
    <thetext>Created attachment 354452
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477631</commentid>
    <comment_count>14</comment_count>
      <attachid>354452</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-11-12 10:41:56 -0800</bug_when>
    <thetext>Comment on attachment 354452
Patch

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

&gt; Source/WebKit/UIProcess/API/C/mac/WKContextPrivateMac.mm:176
&gt; -    return DEFAULT_SAFE_BROWSING_ENABLED;
&gt; +    return true;

Still don&apos;t understand why this doesn&apos;t follow the preference (or why you have a preference if you&apos;re not going to follow it), but OK

&gt; Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:3604
&gt; +    if (_safeBrowsingWarning)

Why is this not in the Impl? This way it&apos;s going to make the eventual plop harder, and also means WKView doesn&apos;t get it.

And these aren&apos;t used on iOS so they can&apos;t be relevant to this patch.

&gt; Source/WebKit/UIProcess/Cocoa/WKSafeBrowsingWarning.mm:169
&gt; +    [exclamationPoint appendBezierPathWithArcWithCenter: { centerX, lineBottomCenterY } radius:lineRadius startAngle:0 endAngle:180 clockwise:YES];

Choose one space-after-colon style and stick to it (and it should be &quot;no&quot;).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477716</commentid>
    <comment_count>15</comment_count>
      <attachid>354590</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-12 13:51:53 -0800</bug_when>
    <thetext>Created attachment 354590
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477805</commentid>
    <comment_count>16</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-12 17:08:51 -0800</bug_when>
    <thetext>http://trac.webkit.org/r238115</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477806</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-12 17:09:21 -0800</bug_when>
    <thetext>&lt;rdar://problem/46010524&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478016</commentid>
    <comment_count>18</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2018-11-13 09:16:14 -0800</bug_when>
    <thetext>http://trac.webkit.org/r238133</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354284</attachid>
            <date>2018-11-08 15:38:31 -0800</date>
            <delta_ts>2018-11-09 09:08:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181108153830.patch</filename>
            <type>text/plain</type>
            <size>53059</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNiw2ICsxMzUyLDcgQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIC0gKHZvaWQpbGF5b3V0U3Vidmlld3MKIHsKICAgICBb
c3VwZXIgbGF5b3V0U3Vidmlld3NdOworICAgIFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFt
ZTpzZWxmLmJvdW5kc107CiAgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKIH0KIApA
QCAtMzI5MCw2ICszMzA3LDcgQEAgLSAodm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0
KXJlYwogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwogICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkp
OwogfQogCkBAIC0zNTgzLDc2ICszNjAxLDEyMSBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqCiAKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAog
eworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAg
X2ltcGwtPnNjcm9sbFdoZWVsKGV2ZW50KTsKIH0KIAogLSAodm9pZClzd2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAg
ICByZXR1cm47CisKICAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOwogfQogCiAtICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQp
OwogfQogCiAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VE
b3duKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAg
ICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBs
LT5tb3VzZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisg
ICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUVudGVyZWQoZXZlbnQpOwogfQogCiAt
ICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93
c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUV4aXRlZChl
dmVudCk7CiB9CiAKIC0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewor
ICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2lt
cGwtPm90aGVyTW91c2VEb3duKGV2ZW50KTsKIH0KIAogLSAodm9pZClvdGhlck1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwogfQog
CiAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcp
CisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdodE1vdXNlRHJhZ2dlZChldmVudCk7
CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlVXAoZXZlbnQpOwogfQogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAg
IHJldHVybjsKKwogICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5nZVdpdGhFdmVudChldmVudCk7CiB9
CiAKQEAgLTQ2MzUsNyArNDY5OCw3IEBAIC0gKHZvaWQpX3Bhc3RlQXNRdW90YXRpb246KGlkKXNl
bmRlcgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERFRkFV
TFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2b2lk
KV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNj
cmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKQEAgLTY2NjYsMTUgKzY3MjksMTIgQEAgLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZQogCiAjaWYgUExBVEZPUk0oTUFDKQogLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZl
QnJvd3NpbmdXYXJuaW5nKCk7Ci19CiAjZWxzZQogLSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nCisjZW5kaWYKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
c2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKIH0KLSNlbmRpZgogCiAtIChfV0tJbnNwZWN0b3Ig
KilfaW5zcGVjdG9yCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBAQCBjbGFzcyBBdHRhY2htZW50
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2Fk
IDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNsYXNzIFZpZXdTbmFwc2hvdDsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CiB9CiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnNl
cnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpvcHRpb25hbDxCT09MPilfcmVz
b2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKIAogLSAo
V0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKIEBjbGFzcyBX
S1dlYlZpZXc7CiAKQEAgLTQ4LDkgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBOU0ZpbGVXcmFwcGVy
ICphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKICAgICBOU1NldCAqc2Vy
aWFsaXphYmxlRmlsZVdyYXBwZXJDbGFzc2VzKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKKyAgICB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dh
cm5pbmcoKSBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxOSBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvCiAjZW5kaWYKIH0KIAordm9p
ZCBQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZl
QnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAg
ICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOworICAgIGVsc2UKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpObyk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGxDb2NvYTo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKK3sKKyAgICBbbV93ZWJW
aWV3IF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworfQorCiAjaWYgRU5BQkxFKEFUVEFDSE1F
TlRfRUxFTUVOVCkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRJbnNlcnRBdHRhY2ht
ZW50KEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCkBA
IC02OSw3ICs4Miw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6ZGlkUmVtb3ZlQXR0YWMK
IE5TRmlsZVdyYXBwZXIgKlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJbnN0
YW5jZSgpIGNvbnN0CiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjbHMgPSBtX3dl
YlZpZXcuY29uZmlndXJhdGlvbi5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmls
ZVdyYXBwZXIgc2VsZl07CisgICAgQ2xhc3MgY2xzID0gW21fd2ViVmlldyBjb25maWd1cmF0aW9u
XS5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmlsZVdyYXBwZXIgc2VsZl07CiAg
ICAgcmV0dXJuIFtjbHMgYWxsb2NdOwogI2Vsc2UKICAgICByZXR1cm4gbmlsOwpAQCAtODAsNyAr
OTMsNyBAQCBOU1NldCAqUGFnZUNsaWVudEltcGxDb2NvYTo6c2VyaWFsaXphYmxlCiB7CiAgICAg
Q2xhc3MgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MgPSBOU0ZpbGVXcmFwcGVyLnNlbGY7CiAjaWYg
V0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IG1f
d2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzczsKKyAgICBD
bGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IFttX3dlYlZpZXcgY29uZmlndXJhdGlv
bl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOwogICAgIGlmIChjb25maWd1cmVkRmlsZVdy
YXBwZXJDbGFzcyAmJiBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyAhPSBkZWZhdWx0RmlsZVdy
YXBwZXJDbGFzcykKICAgICAgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0czpjb25maWd1
cmVkRmlsZVdyYXBwZXJDbGFzcywgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MsIG5pbF07CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2Fy
bmluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1Nh
ZmVCcm93c2luZ1dhcm5pbmcubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMzMsMzIgKzMzLDM1IEBACiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0
Zi9MYW5ndWFnZS5oPgogCi1jb25zdCBDR0Zsb2F0IGV4Y2xhbWF0aW9uUG9pbnRTaXplID0gMzA7
Ci1jb25zdCBDR0Zsb2F0IHRleHRTaXplID0gMTM7Citjb25zdGV4cHIgQ0dGbG9hdCBleGNsYW1h
dGlvblBvaW50U2l6ZSA9IDMwOworY29uc3RleHByIENHRmxvYXQgdGV4dFNpemUgPSAxMzsKK2Nv
bnN0ZXhwciBDR0Zsb2F0IG1hcmdpblNpemUgPSAyMDsKK2NvbnN0ZXhwciBzaXplX3QgbWF4V2lk
dGggPSA2MDA7CisKICNpZiBQTEFURk9STShNQUMpCi1jb25zdCBDR0Zsb2F0IG1hcmdpblNpemUg
PSAyMDsKLWNvbnN0IHNpemVfdCBtYXhXaWR0aCA9IDYwMDsKIHVzaW5nIENvbG9yVHlwZSA9IE5T
Q29sb3I7CiB1c2luZyBGb250VHlwZSA9IE5TRm9udDsKIHVzaW5nIFZpZXdUeXBlID0gTlNWaWV3
OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBOU0JlemllclBhdGg7CiB1c2luZyBUZXh0Vmlld1R5
cGUgPSBOU1RleHRWaWV3OwordXNpbmcgQnV0dG9uVHlwZSA9IE5TQnV0dG9uOwordXNpbmcgQWxp
Z25tZW50VHlwZSA9IE5TTGF5b3V0QXR0cmlidXRlOwogI2Vsc2UKIHVzaW5nIENvbG9yVHlwZSA9
IFVJQ29sb3I7CiB1c2luZyBGb250VHlwZSA9IFVJRm9udDsKIHVzaW5nIFZpZXdUeXBlID0gVUlW
aWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBVSUJlemllclBhdGg7CiB1c2luZyBUZXh0Vmll
d1R5cGUgPSBVSVRleHRWaWV3OwordXNpbmcgQnV0dG9uVHlwZSA9IFVJQnV0dG9uOwordXNpbmcg
QWxpZ25tZW50VHlwZSA9IFVJU3RhY2tWaWV3QWxpZ25tZW50OwogI2VuZGlmCiAKLXN0YXRpYyBp
ZCBjb25maXJtTWFsd2FyZVNlbnRpbmVsKCkKK3N0YXRpYyBOU1VSTCAqY29uZmlybU1hbHdhcmVT
ZW50aW5lbCgpCiB7Ci0gICAgcmV0dXJuIEAiV0tDb25maXJtTWFsd2FyZVNlbnRpbmVsIjsKKyAg
ICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0NvbmZpcm1NYWx3YXJlU2VudGluZWwi
XTsKIH0KIAotc3RhdGljIGlkIHZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkKK3N0YXRpYyBO
U1VSTCAqdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKQogewotICAgIHJldHVybiBAIldLVmlz
aXRVbnNhZmVXZWJzaXRlU2VudGluZWwiOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAIldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKIH0KIAogc3RhdGljIENvbG9yVHlw
ZSAqY29sb3JOYW1lZChOU1N0cmluZyAqbmFtZSkKQEAgLTc1LDcgKzc4LDYgQEAgc3RhdGljIENv
bG9yVHlwZSAqY29sb3JOYW1lZChOU1N0cmluZyAqbgogI2VuZGlmCiB9CiAKLSNpZiBQTEFURk9S
TShNQUMpCiBzdGF0aWMgdm9pZCByZXBsYWNlKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0
cmluZywgTlNTdHJpbmcgKnRvUmVwbGFjZSwgTlNTdHJpbmcgKnJlcGxhY2VXaXRoKQogewogICAg
IFtzdHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOltzdHJpbmcuc3RyaW5nIHJhbmdlT2ZT
dHJpbmc6dG9SZXBsYWNlXSB3aXRoU3RyaW5nOnJlcGxhY2VXaXRoXTsKQEAgLTkwLDcgKzkyLDYg
QEAgc3RhdGljIHZvaWQgYWRkTGlua0FuZFJlcGxhY2UoTlNNdXRhYmxlQQogICAgIH0gcmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgcmVwbGFjZVdpdGgubGVuZ3RoKV07CiAgICAgW3N0cmluZyByZXBsYWNl
Q2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxhY2Vd
IHdpdGhBdHRyaWJ1dGVkU3RyaW5nOnN0cmluZ1dpdGhMaW5rXTsKIH0KLSNlbmRpZgogCiBAaW50
ZXJmYWNlIFdLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCA6IFZpZXdUeXBlCiBAZW5kCkBA
IC0xMDAsMjEgKzEwMSwzMiBAQCBAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Q
b2luCiAtICh2b2lkKWRyYXdSZWN0OihSZWN0VHlwZSlyZWN0CiB7CiAgICAgW2NvbG9yTmFtZWQo
QCJXS1NhZmVCcm93c2luZ1dhcm5pbmdUaXRsZSIpIHNldF07Ci0jaWYgUExBVEZPUk0oTUFDKQot
I2RlZmluZSBhZGRBcmNXaXRoQ2VudGVyIGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRl
cgotICAgIE5TUmVjdCBzcXVhcmUgPSBOU01ha2VSZWN0KDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRT
aXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSk7CisgICAgY29uc3RleHByIENHRmxvYXQgY2VudGVy
WCA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMjsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBwb2lu
dENlbnRlclkgPSBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDcgLyAzMDsKKyAgICBjb25zdGV4cHIg
Q0dGbG9hdCBwb2ludFJhZGl1cyA9IDIuMjUgKiBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDMwOwor
ICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVCb3R0b21DZW50ZXJZID0gZXhjbGFtYXRpb25Qb2lu
dFNpemUgKiAxMyAvIDMwOyAvLyAxMworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVUb3BDZW50
ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiAyMyAvIDMwOyAvLyAyMworICAgIGNvbnN0ZXhw
ciBDR0Zsb2F0IGxpbmVSYWRpdXMgPSAxLjc1ICogZXhjbGFtYXRpb25Qb2ludFNpemUgLyAzMDsK
KyNpZiBQTEFURk9STShNQUMpCisgICAgTlNCZXppZXJQYXRoICpleGNsYW1hdGlvblBvaW50ID0g
W05TQmV6aWVyUGF0aCBiZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBl
eGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpXTsKKyAgICBbZXhjbGFt
YXRpb25Qb2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwg
bGluZUJvdHRvbUNlbnRlclkgfSByYWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5n
bGU6MTgwIGNsb2Nrd2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemll
clBhdGhXaXRoQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBsaW5lVG9wQ2VudGVyWSB9IHJhZGl1
czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6MTgwIGVuZEFuZ2xlOjM2MCBjbG9ja3dpc2U6WUVTXTsK
KyAgICBbZXhjbGFtYXRpb25Qb2ludCBsaW5lVG9Qb2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1
cywgbGluZUJvdHRvbUNlbnRlclkgfV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYXBwZW5kQmV6
aWVyUGF0aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50Q2VudGVyWSB9IHJhZGl1
czpwb2ludFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOwor
ICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcjog
eyBjZW50ZXJYLCBwb2ludENlbnRlclkgfSByYWRpdXM6cG9pbnRSYWRpdXMgc3RhcnRBbmdsZTox
ODAgZW5kQW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogI2Vsc2UKLSAgICBDR1JlY3Qgc3F1YXJl
ID0gQ0dSZWN0TWFrZSgwLCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2lu
dFNpemUpOworICAgIGF1dG8gZmxpcCA9IFtdIChhdXRvIHkpIHsKKyAgICAgICAgcmV0dXJuIGV4
Y2xhbWF0aW9uUG9pbnRTaXplIC0geTsKKyAgICB9OworICAgIFVJQmV6aWVyUGF0aCAqZXhjbGFt
YXRpb25Qb2ludCA9IFtVSUJlemllclBhdGggYmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OkNHUmVj
dE1ha2UoMCwgMCwgZXhjbGFtYXRpb25Qb2ludFNpemUsIGV4Y2xhbWF0aW9uUG9pbnRTaXplKV07
CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlw
KGxpbmVUb3BDZW50ZXJZKSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6MiAqIHBpRG91
YmxlIGVuZEFuZ2xlOnBpRG91YmxlIGNsb2Nrd2lzZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9p
bnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlwKGxpbmVCb3R0b21DZW50ZXJZKSB9
IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUgZW5kQW5nbGU6MCBjbG9ja3dp
c2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVy
WCwgZmxpcChwb2ludENlbnRlclkpIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6MCBl
bmRBbmdsZTpwaURvdWJsZSBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFk
ZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChwb2ludENlbnRlclkpIH0gcmFkaXVzOnBv
aW50UmFkaXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUgZW5kQW5nbGU6cGlEb3VibGUgKiAyIGNsb2Nr
d2lzZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkTGluZVRvUG9pbnQ6IHsgY2VudGVy
WCArIGxpbmVSYWRpdXMsIGZsaXAobGluZUJvdHRvbUNlbnRlclkpIH1dOworICAgIFtleGNsYW1h
dGlvblBvaW50IGFkZExpbmVUb1BvaW50OiB7IGNlbnRlclggKyBsaW5lUmFkaXVzLCBmbGlwKGxp
bmVUb3BDZW50ZXJZKSB9XTsKICNlbmRpZgotICAgIEJlemllclBhdGhUeXBlICpleGNsYW1hdGlv
blBvaW50ID0gW0JlemllclBhdGhUeXBlIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpzcXVhcmVd
OwotICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Q
b2ludFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDEzIC8gMzAgfSByYWRpdXM6MS43
NSBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOwotICAgIFtleGNsYW1h
dGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2ludFNpemUgLyAyLCBl
eGNsYW1hdGlvblBvaW50U2l6ZSAqIDIzIC8gMzAgfSByYWRpdXM6MS43NSBzdGFydEFuZ2xlOjE4
MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107Ci0gICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRk
QXJjV2l0aENlbnRlcjogeyBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDIsIGV4Y2xhbWF0aW9uUG9p
bnRTaXplICogNyAvIDMwIH0gcmFkaXVzOjIuMjUgc3RhcnRBbmdsZTowIGVuZEFuZ2xlOjE4MCBj
bG9ja3dpc2U6WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7
IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8gMzAg
fSByYWRpdXM6Mi4yNSBzdGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107
CiAgICAgW2V4Y2xhbWF0aW9uUG9pbnQgZmlsbF07Ci0jaWYgUExBVEZPUk0oTUFDKQotI3VuZGVm
IGFkZEFyY1dpdGhDZW50ZXIKLSNlbmRpZgogfQogCiAtIChOU1NpemUpaW50cmluc2ljQ29udGVu
dFNpemUKQEAgLTEyNCw3ICsxMzYsNiBAQCAtIChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUK
IAogQGVuZAogCi0jaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIE5TVVJMICpyZXBvcnRBbkVycm9y
VVJMKGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgcmV0
dXJuIFdlYkNvcmU6OlVSTCh7IH0sIG1ha2VTdHJpbmcocmVzdWx0LnJlcG9ydEFuRXJyb3JVUkxC
YXNlKCksICImdXJsPSIsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMocmVzdWx0LnVybCgp
KSwgIiZobD0iLCBkZWZhdWx0TGFuZ3VhZ2UoKSkpOwpAQCAtMTkxLDEyICsyMDIsMTIzIEBAIHN0
YXRpYyBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpkZXRhaWwKICAgICBBU1NFUlQocmVzdWx0
LmlzVW53YW50ZWRTb2Z0d2FyZSgpKTsKICAgICByZXR1cm4gbWFsd2FyZU9yVW53YW50ZWRTb2Z0
d2FyZURldGFpbHMocmVzdWx0LCBXRUJfVUlfTlNTVFJJTkcoQCJXYXJuaW5ncyBhcmUgc2hvd24g
Zm9yIHdlYnNpdGVzIHdoZXJlIGhhcm1mdWwgc29mdHdhcmUgaGFzIGJlZW4gZGV0ZWN0ZWQuIFlv
dSBjYW4gY2hlY2sgJXRoZS1zdGF0dXMtb2Ytc2l0ZSUgb24gdGhlICVzYWZlQnJvd3NpbmdQcm92
aWRlciUgZGlhZ25vc3RpYyBwYWdlLiIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIGRlc2Ny
aXB0aW9uIiksIEAiJXRoZS1zdGF0dXMtb2Ytc2l0ZSUiLCBmYWxzZSk7CiB9CisKK3N0YXRpYyBC
dXR0b25UeXBlICptYWtlQnV0dG9uKE5TU3RyaW5nICp0aXRsZSwgaWQgdGFyZ2V0LCBTRUwgYWN0
aW9uKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gW05TQnV0dG9uIGJ1dHRvbldp
dGhUaXRsZTp0aXRsZSB0YXJnZXQ6dGFyZ2V0IGFjdGlvbjphY3Rpb25dOworI2Vsc2UKKyAgICBV
SUJ1dHRvbiAqYnV0dG9uID0gW1VJQnV0dG9uIGJ1dHRvbldpdGhUeXBlOlVJQnV0dG9uVHlwZVN5
c3RlbV07CisgICAgW2J1dHRvbiBzZXRUaXRsZTp0aXRsZSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0
ZU5vcm1hbF07CisgICAgW2J1dHRvbiBhZGRUYXJnZXQ6dGFyZ2V0IGFjdGlvbjphY3Rpb24gZm9y
Q29udHJvbEV2ZW50czpVSUNvbnRyb2xFdmVudFRvdWNoVXBJbnNpZGVdOworICAgIHJldHVybiBi
dXR0b247CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgaHVnVmVydGljYWwoU3RhY2tWaWV3VHlw
ZSAqdmlldykKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgW3ZpZXcgc2V0SHVnZ2luZ1ByaW9y
aXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0
cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKKyNlbHNlCisgICAgW3ZpZXcgc2V0Q29udGVudEh1
Z2dpbmdQcmlvcml0eTpVSUxheW91dFByaW9yaXR5UmVxdWlyZWQgZm9yQXhpczpVSUxheW91dENv
bnN0cmFpbnRBeGlzVmVydGljYWxdOwogI2VuZGlmCit9CiAKLUBpbnRlcmZhY2UgV0tTYWZlQnJv
d3NpbmdUZXh0VmlldyA6IFRleHRWaWV3VHlwZSB7CitzdGF0aWMgdm9pZCBodWdUZXh0KFZpZXdU
eXBlICp2aWV3KQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBbdmlldyBzZXRDb250ZW50SHVn
Z2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmllbnRhdGlvbjpOU0xh
eW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKKyAgICBbdmlldyBzZXRDb250ZW50
Q29tcHJlc3Npb25SZXNpc3RhbmNlUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVkIGZv
ck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxdOworI2Vs
c2UKKyAgICBbdmlldyBzZXRDb250ZW50SHVnZ2luZ1ByaW9yaXR5OlVJTGF5b3V0UHJpb3JpdHlS
ZXF1aXJlZCBmb3JBeGlzOlVJTGF5b3V0Q29uc3RyYWludEF4aXNWZXJ0aWNhbF07CisgICAgW3Zp
ZXcgc2V0Q29udGVudENvbXByZXNzaW9uUmVzaXN0YW5jZVByaW9yaXR5OlVJTGF5b3V0UHJpb3Jp
dHlSZXF1aXJlZCBmb3JBeGlzOlVJTGF5b3V0Q29uc3RyYWludEF4aXNWZXJ0aWNhbF07CisjZW5k
aWYKK30KKworc3RhdGljIEFsaWdubWVudFR5cGUgY2VudGVyQWxpZ25tZW50KCkKK3sKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgcmV0dXJuIE5TTGF5b3V0QXR0cmlidXRlQ2VudGVyWDsKKyNlbHNl
CisgICAgcmV0dXJuIFVJU3RhY2tWaWV3QWxpZ25tZW50Q2VudGVyOworI2VuZGlmCit9CisKK3N0
YXRpYyB2b2lkIGFkZEVkZ2VJbnNldHMoU3RhY2tWaWV3VHlwZSAqdmlldykKK3sKKyNpZiBQTEFU
Rk9STShNQUMpCisgICAgdmlldy5lZGdlSW5zZXRzID0geyBtYXJnaW5TaXplLCBtYXJnaW5TaXpl
LCBtYXJnaW5TaXplLCBtYXJnaW5TaXplIH07CisjZWxzZQorICAgIHZpZXcubGF5b3V0TWFyZ2lu
cyA9IFVJRWRnZUluc2V0c01ha2UobWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwg
bWFyZ2luU2l6ZSk7CisgICAgdmlldy5sYXlvdXRNYXJnaW5zUmVsYXRpdmVBcnJhbmdlbWVudCA9
IHRydWU7CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2V0QmFja2dyb3VuZChTdGFja1ZpZXdU
eXBlICp2aWV3LCBDb2xvclR5cGUgKmNvbG9yLCBzaXplX3QgY29ybmVyUmFkaXVzID0gMCkKK3sK
KyNpZiBQTEFURk9STShNQUMpCisgICAgdmlldy53YW50c0xheWVyID0gWUVTOworICAgIHZpZXcu
bGF5ZXIuYmFja2dyb3VuZENvbG9yID0gW2NvbG9yIENHQ29sb3JdOworICAgIGlmIChjb3JuZXJS
YWRpdXMpCisgICAgICAgIHZpZXcubGF5ZXIuY29ybmVyUmFkaXVzID0gY29ybmVyUmFkaXVzOwor
I2Vsc2UKKyAgICBVSVZpZXcgKmJhY2tncm91bmQgPSBbW1VJVmlldyBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBiYWNrZ3JvdW5kLmJhY2tncm91bmRDb2xvciA9IGNvbG9yOworICAgIGJhY2tncm91
bmQudHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHMgPSBOTzsKKyAgICBb
dmlldyBhZGRTdWJ2aWV3OmJhY2tncm91bmRdOworICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0
aXZhdGVDb25zdHJhaW50czpAWworICAgICAgICBbdmlldy5sZWZ0QW5jaG9yIGNvbnN0cmFpbnRF
cXVhbFRvQW5jaG9yOmJhY2tncm91bmQubGVmdEFuY2hvcl0sCisgICAgICAgIFt2aWV3LnJpZ2h0
QW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOmJhY2tncm91bmQucmlnaHRBbmNob3JdLAor
ICAgICAgICBbdmlldy50b3BBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6YmFja2dyb3Vu
ZC50b3BBbmNob3JdLAorICAgICAgICBbdmlldy5ib3R0b21BbmNob3IgY29uc3RyYWludEVxdWFs
VG9BbmNob3I6YmFja2dyb3VuZC5ib3R0b21BbmNob3JdCisgICAgXV07CisgICAgaWYgKGNvcm5l
clJhZGl1cykKKyAgICAgICAgYmFja2dyb3VuZC5sYXllci5jb3JuZXJSYWRpdXMgPSBjb3JuZXJS
YWRpdXM7CisjZW5kaWYKK30KKworc3RhdGljIFN0YWNrVmlld1R5cGUgKm1ha2VTdGFja1ZpZXco
TlNBcnJheSAqdmlld3MpCit7CisgICAgU3RhY2tWaWV3VHlwZSAqc3RhY2tWaWV3ID0gW1tTdGFj
a1ZpZXdUeXBlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGZvciAoVmlld1R5cGUgKnZpZXcgOiB2
aWV3cykKKyAgICAgICAgW3N0YWNrVmlldyBhZGRBcnJhbmdlZFN1YnZpZXc6dmlld107CisgICAg
cmV0dXJuIHN0YWNrVmlldzsKK30KKworc3RhdGljIFZpZXdUeXBlICptYWtlQm94KE5TQXJyYXkg
KnZpZXdzKQoreworICAgIFN0YWNrVmlld1R5cGUgKmJveCA9IFtbU3RhY2tWaWV3VHlwZSBuZXdd
IGF1dG9yZWxlYXNlXTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgc2V0QmFja2dyb3VuZChib3gs
IFtOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl0sIDYpOworI2Vsc2UKKyAgICBib3guYXhp
cyA9IFVJTGF5b3V0Q29uc3RyYWludEF4aXNWZXJ0aWNhbDsKKyAgICBzZXRCYWNrZ3JvdW5kKGJv
eCwgW1VJQ29sb3IgYmx1ZUNvbG9yXSwgNik7IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBub3QgYmUg
Ymx1ZS4KKyNlbmRpZgorICAgIGZvciAoVmlld1R5cGUgKnZpZXcgOiB2aWV3cykKKyAgICAgICAg
W2JveCBhZGRBcnJhbmdlZFN1YnZpZXc6dmlld107CisgICAgYm94LmFsaWdubWVudCA9IGNlbnRl
ckFsaWdubWVudCgpOworICAgIGFkZEVkZ2VJbnNldHMoYm94KTsKKyAgICBodWdWZXJ0aWNhbChi
b3gpOworICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXhX
aWR0aF0uYWN0aXZlID0gdHJ1ZTsKKyAgICByZXR1cm4gYm94OworfQorCisjaWYgUExBVEZPUk0o
TUFDKQorQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgOiBOU09iamVj
dDxOU1RleHRWaWV3RGVsZWdhdGU+CisjZWxzZQorQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgOiBOU09iamVjdDxVSVRleHRWaWV3RGVsZWdhdGU+CisjZW5kaWYKK3sK
IEBwYWNrYWdlCiAgICAgV2Vha09iakNQdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfdGFyZ2V0
OwogfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGFyZ2V0OihXS1NhZmVCcm93c2luZ1dhcm5p
bmcgKil0YXJnZXQ7CitAZW5kCisKK0BpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyA6
IFRleHRWaWV3VHlwZSB7CitAcGFja2FnZQorICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGU+IF9kZWxlZ2F0ZTsKK30KICsgKGluc3RhbmNldHlwZSl2aWV3V2l0aEF0
dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgbGlu
a1RhcmdldDooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopdGFyZ2V0OwogKyAoaW5zdGFuY2V0eXBl
KXZpZXdXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKIEBlbmQKQEAgLTIxMyw1MSArMzM1
LDUzIEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSkKICAgICBfY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsKICAgICBfcmVzdWx0
ID0gbWFrZVJlZihyZXN1bHQpOwogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHNlbGYud2FudHNM
YXllciA9IFlFUzsKLSAgICBzZWxmLmxheWVyLmJhY2tncm91bmRDb2xvciA9IFtjb2xvck5hbWVk
KEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpIENHQ29sb3JdOworICAgIHNldEJh
Y2tncm91bmQoc2VsZiwgY29sb3JOYW1lZChAIldLU2FmZUJyb3dzaW5nV2FybmluZ0JhY2tncm91
bmQiKSk7CiAKLSAgICBOU1N0YWNrVmlldyAqdG9wID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dp
dGhWaWV3czpAWworICAgIFN0YWNrVmlld1R5cGUgKnRvcCA9IG1ha2VTdGFja1ZpZXcoQFsKICAg
ICAgICAgW1tXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbnQgbmV3XSBhdXRvcmVsZWFzZV0s
Ci0gICAgICAgIFtOU1RleHRGaWVsZCBsYWJlbFdpdGhBdHRyaWJ1dGVkU3RyaW5nOltbW05TQXR0
cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGl0bGVUZXh0KHJlc3VsdCkgYXR0
cmlidXRlczpAewotICAgICAgICAgICAgTlNGb250QXR0cmlidXRlTmFtZTpbTlNGb250IHN5c3Rl
bUZvbnRPZlNpemU6ZXhjbGFtYXRpb25Qb2ludFNpemVdLAorICAgICAgICBbV0tTYWZlQnJvd3Np
bmdUZXh0VmlldyB2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzp0aXRsZVRleHQocmVzdWx0KSBhdHRyaWJ1dGVzOkB7Cisg
ICAgICAgICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXpl
OmV4Y2xhbWF0aW9uUG9pbnRTaXplXSwKICAgICAgICAgICAgIE5TRm9yZWdyb3VuZENvbG9yQXR0
cmlidXRlTmFtZTpjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIpCi0gICAg
ICAgIH1dIGF1dG9yZWxlYXNlXV0KLSAgICBdXTsKKyAgICAgICAgfV0gYXV0b3JlbGVhc2VdIGxp
bmtUYXJnZXQ6bmlsXQorICAgIF0pOwogCiAgICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqbWlk
ZGxlID0gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6d2FybmluZ1RleHQo
cmVzdWx0KV07CiAKLSAgICBOU1N0YWNrVmlldyAqYm90dG9tID0gW05TU3RhY2tWaWV3IHN0YWNr
Vmlld1dpdGhWaWV3czpAWwotICAgICAgICBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9V
SV9OU1NUUklORyhAIlNob3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdh
cm5pbmciKSB0YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCld
LAotICAgICAgICBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhAIkdv
IGJhY2siLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIikgdGFyZ2V0OnNlbGYg
YWN0aW9uOkBzZWxlY3Rvcihnb0JhY2tDbGlja2VkKV0KLSAgICBdXTsKLQotICAgIGZvciAoTlNT
dGFja1ZpZXcgKnZpZXcgaW4gQFt0b3AsIGJvdHRvbV0pCi0gICAgICAgIFt2aWV3IHNldEh1Z2dp
bmdQcmlvcml0eTpOU0xheW91dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNMYXlv
dXRDb25zdHJhaW50T3JpZW50YXRpb25WZXJ0aWNhbF07Ci0KLSAgICBTdGFja1ZpZXdUeXBlICpi
b3ggPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3V2l0aFZpZXdzOkBbdG9wLCBtaWRkbGUsIGJvdHRv
bV1dOwotICAgIGJveC53YW50c0xheWVyID0gWUVTOwotICAgIGJveC5sYXllci5iYWNrZ3JvdW5k
Q29sb3IgPSBbW05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9yXSBDR0NvbG9yXTsKLSAgICBi
b3gubGF5ZXIuY29ybmVyUmFkaXVzID0gNjsKLSAgICBib3guYWxpZ25tZW50ID0gTlNMYXlvdXRB
dHRyaWJ1dGVDZW50ZXJYOwotICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWludEVxdWFsVG9D
b25zdGFudDptYXhXaWR0aF0uYWN0aXZlID0gdHJ1ZTsKLSAgICBib3guZWRnZUluc2V0cyA9IHsg
bWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSB9OwotICAgIFti
b3ggc2V0SHVnZ2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmllbnRh
dGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKLSAgICBbc2VsZiBh
ZGRWaWV3OmJveCBpbkdyYXZpdHk6TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVyXTsKLSNlbHNlCi0g
ICAgLy8gRklYTUU6IEdldCB0aGlzIHdvcmtpbmcgb24gaU9TLgotICAgIGNvbXBsZXRpb25IYW5k
bGVyKFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXMpOwotI2VuZGlmCisgICAgU3RhY2tW
aWV3VHlwZSAqYm90dG9tID0gbWFrZVN0YWNrVmlldyhAWworICAgICAgICBtYWtlQnV0dG9uKFdF
Ql9VSV9OU1NUUklORyhAIlNob3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5n
IHdhcm5pbmciKSwgc2VsZiwgQHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCkpLAorICAgICAg
ICBtYWtlQnV0dG9uKFdFQl9VSV9OU1NUUklORyhAIkdvIGJhY2siLCAiQWN0aW9uIGZyb20gc2Fm
ZSBicm93c2luZyB3YXJuaW5nIiksIHNlbGYsIEBzZWxlY3Rvcihnb0JhY2tDbGlja2VkKSkKKyAg
ICBdKTsKKworICAgIGZvciAoU3RhY2tWaWV3VHlwZSAqdmlldyBpbiBAW3RvcCwgYm90dG9tXSkK
KyAgICAgICAgaHVnVmVydGljYWwodmlldyk7CisKKyAgICBzZWxmLmFsaWdubWVudCA9IGNlbnRl
ckFsaWdubWVudCgpOworICAgIGF1dG8gYm94ID0gbWFrZUJveChAW3RvcCwgbWlkZGxlLCBib3R0
b21dKTsKKyAgICBbc2VsZiBhZGRBcnJhbmdlZFN1YnZpZXc6Ym94XTsKKyAgICBbW3NlbGYudG9w
QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gudG9wQW5jaG9yXSBjb25zdHJhaW50
RXF1YWxUb0FuY2hvcjpbYm94LmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6
c2VsZi5ib3R0b21BbmNob3JdXS5hY3RpdmUgPSB0cnVlOwogICAgIHJldHVybiBzZWxmOwogfQog
CistICh2b2lkKWxheW91dFRleHQKK3sKKyAgICBmb3IgKFZpZXdUeXBlICp2aWV3IGluIHNlbGYu
c3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MpCisgICAg
ICAgIFt2aWV3IGludmFsaWRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZV07CisgICAgZm9yIChWaWV3
VHlwZSAqdmlldyBpbiBzZWxmLnN1YnZpZXdzLmZpcnN0T2JqZWN0LnN1YnZpZXdzKQorICAgICAg
ICBbdmlldyBpbnZhbGlkYXRlSW50cmluc2ljQ29udGVudFNpemVdOworfQorCiAjaWYgUExBVEZP
Uk0oTUFDKQogLSAodm9pZClsYXlvdXQKIHsKLSAgICBmb3IgKE5TVmlldyAqdmlldyBpbiBzZWxm
LnN1YnZpZXdzLmZpcnN0T2JqZWN0LnN1YnZpZXdzKQotICAgICAgICBbdmlldyBpbnZhbGlkYXRl
SW50cmluc2ljQ29udGVudFNpemVdOworICAgIFtzZWxmIGxheW91dFRleHRdOwogICAgIFtzdXBl
ciBsYXlvdXRdOwogfQorI2Vsc2UKKy0gKHZvaWQpbGF5b3V0U3Vidmlld3MKK3sKKyAgICBbc2Vs
ZiBsYXlvdXRUZXh0XTsKKyAgICBbc3VwZXIgbGF5b3V0U3Vidmlld3NdOworfQogI2VuZGlmCiAK
IC0gKHZvaWQpZGVhbGxvYwpAQCAtMjczLDcgKzM5Nyw3IEBAIC0gKHZvaWQpZ29CYWNrQ2xpY2tl
ZAogICAgICAgICBfY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6
Ok5vKTsKIH0KIAotLSAodm9pZCljbGlja2VkT25MaW5rOihpZClsaW5rCistICh2b2lkKWNsaWNr
ZWRPbkxpbms6KE5TVVJMICopbGluawogewogICAgIGlmICghX2NvbXBsZXRpb25IYW5kbGVyKQog
ICAgICAgICByZXR1cm47CkBAIC0zMDYsMTYgKzQzMCwxNSBAQCAtICh2b2lkKWNsaWNrZWRPbkxp
bms6KGlkKWxpbmsKIAogLSAodm9pZClzaG93RGV0YWlsc0NsaWNrZWQKIHsKLSNpZiBQTEFURk9S
TShNQUMpCi0gICAgTlNTdGFja1ZpZXcgKmJveCA9IHNlbGYudmlld3MuZmlyc3RPYmplY3Q7Ci0g
ICAgTlNTdGFja1ZpZXcgKmJvdHRvbSA9IGJveC52aWV3cy5sYXN0T2JqZWN0OwotICAgIE5TQnV0
dG9uICpzaG93RGV0YWlsc0J1dHRvbiA9IGJvdHRvbS52aWV3cy5maXJzdE9iamVjdDsKLSAgICBb
Ym90dG9tIHJlbW92ZVZpZXc6c2hvd0RldGFpbHNCdXR0b25dOwotICAgIFdLU2FmZUJyb3dzaW5n
VGV4dFZpZXcgKmRldGFpbHMgPSBbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3V2l0aEF0dHJp
YnV0ZWRTdHJpbmc6ZGV0YWlsc1RleHQoKl9yZXN1bHQpIGxpbmtUYXJnZXQ6c2VsZl07Ci0gICAg
W2JveCBhZGRWaWV3OmRldGFpbHMgaW5HcmF2aXR5Ok5TU3RhY2tWaWV3R3Jhdml0eUNlbnRlcl07
Ci0jZWxzZQotICAgIC8vIEZJWE1FOiBHZXQgdGhpcyB3b3JraW5nIG9uIGlPUy4KLSNlbmRpZgor
ICAgIFN0YWNrVmlld1R5cGUgKmJveCA9IHNlbGYuYXJyYW5nZWRTdWJ2aWV3cy5maXJzdE9iamVj
dDsKKyAgICBTdGFja1ZpZXdUeXBlICpib3R0b20gPSBib3guYXJyYW5nZWRTdWJ2aWV3cy5sYXN0
T2JqZWN0OworICAgIEJ1dHRvblR5cGUgKnNob3dEZXRhaWxzQnV0dG9uID0gYm90dG9tLmFycmFu
Z2VkU3Vidmlld3MuZmlyc3RPYmplY3Q7CisgICAgW2JvdHRvbSByZW1vdmVBcnJhbmdlZFN1YnZp
ZXc6c2hvd0RldGFpbHNCdXR0b25dOworICAgIFtzaG93RGV0YWlsc0J1dHRvbiByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKKyAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICp0ZXh0ID0gZGV0YWls
c1RleHQoKl9yZXN1bHQpOworICAgIFt0ZXh0IGFkZEF0dHJpYnV0ZXM6QHsgTlNGb250QXR0cmli
dXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0gfSByYW5nZTpOU01h
a2VSYW5nZSgwLCB0ZXh0Lmxlbmd0aCldOworICAgIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKmRl
dGFpbHMgPSBbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6
dGV4dCBsaW5rVGFyZ2V0OnNlbGZdOworICAgIFtib3ggYWRkQXJyYW5nZWRTdWJ2aWV3OmRldGFp
bHNdOwogfQogCiBAZW5kCkBAIC0zMjcsNDUgKzQ1MCw3MCBAQCArIChpbnN0YW5jZXR5cGUpdmll
d1dpdGhBdHRyaWJ1dGVkU3RyaW5nCiAgICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqaW5zdGFu
Y2UgPSBbW3NlbGYgbmV3XSBhdXRvcmVsZWFzZV07CiAgICAgaWYgKCFpbnN0YW5jZSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICBpbnN0YW5jZS0+X3RhcmdldCA9IHRhcmdldDsKKyAgICBpbnN0
YW5jZS0+X2RlbGVnYXRlID0gYWRvcHROUyhbW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXdEZWxlZ2F0
ZSBhbGxvY10gaW5pdFdpdGhUYXJnZXQ6dGFyZ2V0XSk7CisgICAgaW5zdGFuY2UuZGVsZWdhdGUg
PSBpbnN0YW5jZS0+X2RlbGVnYXRlLmdldCgpOwogCiAgICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5k
Q29sb3IgPSBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIpOwogICAgIE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFthdHRyaWJ1dGVkU3RyaW5nIG11dGFi
bGVDb3B5XTsKLSAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsKLSAgICAgICAgTlNGb3JlZ3Jv
dW5kQ29sb3JBdHRyaWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yLAotICAgICAgICBOU0ZvbnRB
dHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXQotICAgIH0g
cmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCldOworICAgIFtzdHJpbmcgYWRkQXR0
cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29s
b3IgfSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKV07CiAKKyAgICBodWdUZXh0
KGluc3RhbmNlKTsKICNpZiBQTEFURk9STShNQUMpCisgICAgW2luc3RhbmNlIHNldEJhY2tncm91
bmRDb2xvcjpbTlNDb2xvciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdXTsKKyNlbHNlCisgICAgW2lu
c3RhbmNlIHNldEJhY2tncm91bmRDb2xvcjpjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJu
aW5nQmFja2dyb3VuZCIpXTsgLy8gRklYTUU6IHRoaXMgc2hvdWxkIGJlIGJhc2VkIG9uIHRoZSBz
aXplLgorICAgIC8vIGluc3RhbmNlLnNjcm9sbEVuYWJsZWQgPSBOTzsKKyNlbmRpZgogICAgIFtp
bnN0YW5jZSBzZXRMaW5rVGV4dEF0dHJpYnV0ZXM6QHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH1dOwotICAgIFtpbnN0YW5jZSBzZXRDb250ZW50SHVn
Z2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmllbnRhdGlvbjpOU0xh
eW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKLSAgICBbaW5zdGFuY2Ugc2V0Q29u
dGVudENvbXByZXNzaW9uUmVzaXN0YW5jZVByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJl
ZCBmb3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsK
ICAgICBbaW5zdGFuY2Uud2lkdGhBbmNob3IgY29uc3RyYWludExlc3NUaGFuT3JFcXVhbFRvQ29u
c3RhbnQ6bWF4V2lkdGggLSAyICogbWFyZ2luU2l6ZV0uYWN0aXZlID0gdHJ1ZTsKLSAgICBbaW5z
dGFuY2Ugc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl1d
OwogICAgIFtpbnN0YW5jZS50ZXh0U3RvcmFnZSBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOnN0cmlu
Z107Ci0jZW5kaWYKKyAgICBpbnN0YW5jZS5lZGl0YWJsZSA9IE5POworCiAgICAgcmV0dXJuIGlu
c3RhbmNlOwogfQogCiArIChpbnN0YW5jZXR5cGUpdmlld1dpdGhTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nCiB7Ci0gICAgcmV0dXJuIFtXS1NhZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0
cmlidXRlZFN0cmluZzpbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFN0cmluZzpzdHJpbmddIGF1dG9yZWxlYXNlXSBsaW5rVGFyZ2V0Om5pbF07CisgICAgTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtbW05TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnN0cmluZ10gYXV0b3JlbGVhc2VdOwor
ICAgIFthdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsgTlNGb250QXR0cmlidXRlTmFt
ZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0gfSByYW5nZTpOU01ha2VSYW5n
ZSgwLCBzdHJpbmcubGVuZ3RoKV07CisgICAgcmV0dXJuIFtXS1NhZmVCcm93c2luZ1RleHRWaWV3
IHZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzphdHRyaWJ1dGVkU3RyaW5nIGxpbmtUYXJnZXQ6bmls
XTsKIH0KIAotLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCistIChDR1NpemUpaW50cmlu
c2ljQ29udGVudFNpemUKIHsKICAgICBbc2VsZi5sYXlvdXRNYW5hZ2VyIGVuc3VyZUxheW91dEZv
clRleHRDb250YWluZXI6c2VsZi50ZXh0Q29udGFpbmVyXTsKICAgICBhdXRvIHNpemUgPSBbc2Vs
Zi5sYXlvdXRNYW5hZ2VyIHVzZWRSZWN0Rm9yVGV4dENvbnRhaW5lcjpzZWxmLnRleHRDb250YWlu
ZXJdLnNpemU7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJldHVybiB7IE5TVmlld05vSW50cmlu
c2ljTWV0cmljLCBzaXplLmhlaWdodCB9OwogI2Vsc2UKLSAgICByZXR1cm4geyBVSVZpZXdOb0lu
dHJpbnNpY01ldHJpYywgc2l6ZS5oZWlnaHQgfTsKKyAgICByZXR1cm4geyBzaXplLndpZHRoLCBz
aXplLmhlaWdodCB9OwogI2VuZGlmCiB9CiAKLS0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQpbGlu
ayBhdEluZGV4OihOU1VJbnRlZ2VyKWNoYXJJbmRleAorQGVuZAorCitAaW1wbGVtZW50YXRpb24g
V0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlCisKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aFRhcmdldDooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopdGFyZ2V0Cit7CisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVybiBuaWw7CisgICAgc2VsZi0+X3Rhcmdl
dCA9IHRhcmdldDsKKyAgICByZXR1cm4gc2VsZjsKK30KKworI2lmIFBMQVRGT1JNKE1BQykKKy0g
KEJPT0wpdGV4dFZpZXc6KE5TVGV4dFZpZXcgKil0ZXh0VmlldyBjbGlja2VkT25MaW5rOihpZCls
aW5rIGF0SW5kZXg6KE5TVUludGVnZXIpY2hhckluZGV4CiB7CiAgICAgW190YXJnZXQgY2xpY2tl
ZE9uTGluazpsaW5rXTsKKyAgICByZXR1cm4gWUVTOworfQorI2Vsc2UKKy0gKEJPT0wpdGV4dFZp
ZXc6KFVJVGV4dFZpZXcgKil0ZXh0VmlldyBzaG91bGRJbnRlcmFjdFdpdGhVUkw6KE5TVVJMICop
VVJMIGluUmFuZ2U6KE5TUmFuZ2UpY2hhcmFjdGVyUmFuZ2UgaW50ZXJhY3Rpb246KFVJVGV4dEl0
ZW1JbnRlcmFjdGlvbilpbnRlcmFjdGlvbgoreworICAgIFtfdGFyZ2V0IGNsaWNrZWRPbkxpbms6
VVJMXTsKKyAgICByZXR1cm4gTk87CiB9CisjZW5kaWYKIAogQGVuZApJbmRleDogU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShyZXZpc2lvbiAyMzc4NjMpCisr
KyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0yMjYsOSArMjI2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0Vmlld1NjYWxlKENH
RmxvYXQpOwogICAgIENHRmxvYXQgdmlld1NjYWxlKCkgY29uc3Q7CiAKLSAgICB2b2lkIHNob3dT
YWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoVmFyaWFudDxDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpOwotICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCk7Ci0KICAgICBXS0xheW91
dE1vZGUgbGF5b3V0TW9kZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0TGF5b3V0TW9kZShXS0xheW91
dE1vZGUpOwogICAgIHZvaWQgdXBkYXRlU3VwcG9ydHNBcmJpdHJhcnlMYXlvdXRNb2RlcygpOwpA
QCAtNDcxLDggKzQ2OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNhdmVCYWNrRm9yd2FyZFNuYXBz
aG90Rm9yQ3VycmVudEl0ZW0oKTsKICAgICB2b2lkIHNhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9y
SXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtJik7CiAKLSAgICBXS1NhZmVCcm93c2luZ1dhcm5p
bmcgKnNhZmVCcm93c2luZ1dhcm5pbmcoKSB7IHJldHVybiBtX3NhZmVCcm93c2luZ1dhcm5pbmcu
Z2V0KCk7IH0KLQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogZ2VzdHVyZUNvbnRyb2xsZXIo
KSB7IHJldHVybiBtX2dlc3R1cmVDb250cm9sbGVyLmdldCgpOyB9CiAgICAgVmlld0dlc3R1cmVD
b250cm9sbGVyJiBlbnN1cmVHZXN0dXJlQ29udHJvbGxlcigpOwogICAgIHZvaWQgc2V0QWxsb3dz
QmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMoYm9vbCk7CkBAIC03OTgsNyArNzkzLDYgQEAg
cHJpdmF0ZToKICAgICBib29sIG1fcmVxdWlyZXNVc2VyQWN0aW9uRm9yRWRpdGluZ0NvbnRyb2xz
TWFuYWdlciB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2VkaXRhYmxlRWxlbWVudElzRm9jdXNlZCB7
IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzVGV4dEluc2VydGlvblJlcGxhY2luZ1NvZnRTcGFjZSB7
IGZhbHNlIH07Ci0gICAgUmV0YWluUHRyPFdLU2FmZUJyb3dzaW5nV2FybmluZz4gbV9zYWZlQnJv
d3NpbmdXYXJuaW5nOwogICAgIAogI2lmIEVOQUJMRShEUkFHX1NVUFBPUlQpCiAgICAgTlNJbnRl
Z2VyIG1faW5pdGlhbE51bWJlck9mVmFsaWRJdGVtc0ZvckRyb3AgeyAwIH07CkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQkocmV2aXNpb24gMjM3
ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHdv
cmtpbmcgY29weSkKQEAgLTE1OTksMjQgKzE1OTksNiBAQCBib29sIFdlYlZpZXdJbXBsOjpyZXNp
Z25GaXJzdFJlc3BvbmRlcigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgV2ViVmlld0lt
cGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYgcmVz
dWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBX
ZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV92aWV3
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZ
ZXMpOwotCi0gICAgbV9zYWZlQnJvd3NpbmdXYXJuaW5nID0gYWRvcHROUyhbW1dLU2FmZUJyb3dz
aW5nV2FybmluZyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbbV92aWV3IGJvdW5kc10gc2FmZUJyb3dz
aW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1RoaXMgPSBtYWtlV2Vha1B0
cigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcild
IChhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKHdlYWtUaGlzKQotICAgICAg
ICAgICAgW3N0ZDo6ZXhjaGFuZ2Uod2Vha1RoaXMtPm1fc2FmZUJyb3dzaW5nV2FybmluZywgbnVs
bHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdU
Rk1vdmUocmVzdWx0KSk7Ci0gICAgfV0pOwotICAgIFttX3ZpZXcgYWRkU3VidmlldzptX3NhZmVC
cm93c2luZ1dhcm5pbmcuZ2V0KCldOwotfQotCi12b2lkIFdlYlZpZXdJbXBsOjpjbGVhclNhZmVC
cm93c2luZ1dhcm5pbmcoKQotewotICAgIFtzdGQ6OmV4Y2hhbmdlKG1fc2FmZUJyb3dzaW5nV2Fy
bmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107Ci19Ci0KIGJvb2wgV2ViVmlld0lt
cGw6OmlzRm9jdXNlZCgpIGNvbnN0CiB7CiAgICAgaWYgKG1faW5CZWNvbWVGaXJzdFJlc3BvbmRl
cikKQEAgLTE2NTUsNyArMTYzNyw2IEBAIHZvaWQgV2ViVmlld0ltcGw6OnJlbmV3R1N0YXRlKCkK
IHZvaWQgV2ViVmlld0ltcGw6OnNldEZyYW1lU2l6ZShDR1NpemUpCiB7CiAgICAgW21fbGF5b3V0
U3RyYXRlZ3kgZGlkQ2hhbmdlRnJhbWVTaXplXTsKLSAgICBbbV9zYWZlQnJvd3NpbmdXYXJuaW5n
IHNldEZyYW1lOlttX3ZpZXcgYm91bmRzXV07CiB9CiAKIHZvaWQgV2ViVmlld0ltcGw6OmRpc2Fi
bGVGcmFtZVNpemVVcGRhdGVzKCkKQEAgLTUxNTgsNyArNTEzOSw3IEBAIHZvaWQgV2ViVmlld0lt
cGw6OmZsYWdzQ2hhbmdlZChOU0V2ZW50ICoKICNkZWZpbmUgTkFUSVZFX01PVVNFX0VWRU5UX0hB
TkRMRVJfSU5URVJOQUwoRXZlbnROYW1lKSBcCiAgICAgdm9pZCBXZWJWaWV3SW1wbDo6RXZlbnRO
YW1lKE5TRXZlbnQgKmV2ZW50KSBcCiAgICAgeyBcCi0gICAgICAgIGlmIChtX2lnbm9yZXNOb25X
aGVlbEV2ZW50cyB8fCBtX3NhZmVCcm93c2luZ1dhcm5pbmcpIFwKKyAgICAgICAgaWYgKG1faWdu
b3Jlc05vbldoZWVsRXZlbnRzKSBcCiAgICAgICAgICAgICByZXR1cm47IFwKICAgICAgICAgaWYg
KE5TVGV4dElucHV0Q29udGV4dCAqY29udGV4dCA9IFttX3ZpZXcgaW5wdXRDb250ZXh0XSkgeyBc
CiAgICAgICAgICAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpOyBcCkluZGV4
OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MuaAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw5ICsxMTUsNiBAQCBwcml2YXRlOgog
ICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKFdlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dE
aXNtaXNzYWxBbmltYXRpb24pIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0VGV4dEluZGljYXRvckFu
aW1hdGlvblByb2dyZXNzKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZvaWQgc2hvd1NhZmVCcm93
c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYp
PiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpIG92ZXJy
aWRlOwotCiAgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAgICB2b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRlOwpJbmRleDogU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkocmV2aXNp
b24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBs
SU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBACiAjaW1wb3J0IDxwYWwvc3Bp
L2NvY29hL05TS2V5ZWRBcmNoaXZlclNQSS5oPgogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAK
LSNkZWZpbmUgTUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3Nl
cnRpb24sIG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS5jb25uZWN0aW9uKCkpCisjZGVmaW5l
IE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBt
X3dlYlZpZXcuZ2V0KCktPl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKQogCiBAaW50ZXJm
YWNlIFdLRWRpdENvbW1hbmRPYmpDIDogTlNPYmplY3QKIHsKQEAgLTE2MSwxOCArMTYxLDE4IEBA
IEludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkKIGJvb2wgUGFnZUNsaWVudEltcGw6
OmlzVmlld1dpbmRvd0FjdGl2ZSgpCiB7CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwOTgKLSAgICByZXR1cm4gaXNWaWV3VmlzaWJsZSgp
IHx8IChtX3dlYlZpZXcgJiYgW21fd2ViVmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3Rh
dGVdKTsKKyAgICByZXR1cm4gaXNWaWV3VmlzaWJsZSgpIHx8IFttX3dlYlZpZXcgX2lzUmV0YWlu
aW5nQWN0aXZlRm9jdXNlZFN0YXRlXTsKIH0KIAogYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3
Rm9jdXNlZCgpCiB7CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMzMwOTgKLSAgICByZXR1cm4gaXNWaWV3V2luZG93QWN0aXZlKCkgfHwgKG1f
d2ViVmlldyAmJiBbbV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZV0pOwor
ICAgIHJldHVybiBpc1ZpZXdXaW5kb3dBY3RpdmUoKSB8fCBbbV93ZWJWaWV3IF9pc1JldGFpbmlu
Z0FjdGl2ZUZvY3VzZWRTdGF0ZV07CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zp
c2libGUoKQogewotICAgIGlmIChpc1ZpZXdJbldpbmRvdygpICYmICFtX3dlYlZpZXcuX2lzQmFj
a2dyb3VuZCkKKyAgICBpZiAoaXNWaWV3SW5XaW5kb3coKSAmJiAhW21fd2ViVmlldyBfaXNCYWNr
Z3JvdW5kXSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAgaWYgKFttX3dlYlZpZXcg
X2lzU2hvd2luZ1ZpZGVvUGljdHVyZUluUGljdHVyZV0pCkBAIC0xODcsOCArMTg3LDggQEAgYm9v
bCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3VmlzaWJsZSgpCiBib29sIFBhZ2VDbGllbnRJbXBsOjpp
c1ZpZXdJbldpbmRvdygpCiB7CiAgICAgLy8gRklYTUU6IGluIFdlYktpdFRlc3RSdW5uZXIsIG1f
d2ViVmlldyBpcyBuaWwsIHNvIGNoZWNrIHRoZSBjb250ZW50IHZpZXcgaW5zdGVhZC4KLSAgICBp
ZiAobV93ZWJWaWV3KQotICAgICAgICByZXR1cm4gW21fd2ViVmlldyB3aW5kb3ddOworICAgIGlm
IChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIHJldHVybiBbd2ViVmll
dyB3aW5kb3ddOwogCiAgICAgcmV0dXJuIFttX2NvbnRlbnRWaWV3IHdpbmRvd107CiB9CkBAIC0y
NDgsNyArMjQ4LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ29tcGxldGVTeW50aGV0aQog
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblBlcm1pc3Np
b25SZXF1ZXN0KFdlYkZyYW1lUHJveHkmIGZyYW1lLCBBUEk6OlNlY3VyaXR5T3JpZ2luJiBvcmln
aW4sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBbW3dy
YXBwZXIobV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkpIF9nZW9sb2Nh
dGlvblByb3ZpZGVyXSBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2lu
Om9yaWdpbi5zZWN1cml0eU9yaWdpbigpIGZyYW1lOmZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOnN0
ZDo6ZXhjaGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpIHZpZXc6bV93ZWJWaWV3XTsK
KyAgICBbW3dyYXBwZXIobV93ZWJWaWV3LmdldCgpLT5fcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkpIF9nZW9sb2NhdGlvblByb3ZpZGVyXSBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJl
cXVlc3RGcm9tT3JpZ2luOm9yaWdpbi5zZWN1cml0eU9yaWdpbigpIGZyYW1lOmZyYW1lIGNvbXBs
ZXRpb25IYW5kbGVyOnN0ZDo6ZXhjaGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpIHZp
ZXc6bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlk
U3RhcnRQcm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUoKQpAQCAtNDY5LDE2ICs0NjksNiBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yQW5pCiB7CiB9CiAKLXZvaWQgUGFn
ZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jl
c3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBj
b21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsgLy8gRklY
TUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3Np
bmdXYXJuaW5nKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50LgotfQotCiB2b2lkIFBhZ2VD
bGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7CiB9CkBAIC02OTUsMjMgKzY4NSwyMyBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpzY3JvbGxpbmdOb2RlU2Nyb2xsCiAKIFZlY3RvcjxTdHJpbmc+
IFBhZ2VDbGllbnRJbXBsOjptaW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVycygpCiB7
Ci0gICAgcmV0dXJuIG1fd2ViVmlldy5fY29udGVudFByb3ZpZGVyUmVnaXN0cnkuX21pbWVUeXBl
c1dpdGhDdXN0b21Db250ZW50UHJvdmlkZXJzOworICAgIHJldHVybiBbbV93ZWJWaWV3IF9jb250
ZW50UHJvdmlkZXJSZWdpc3RyeV0uX21pbWVUeXBlc1dpdGhDdXN0b21Db250ZW50UHJvdmlkZXJz
OwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCkK
IHsKICAgICBbbV93ZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luXTsKLSAgICBOYXZp
Z2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2Vz
dHVyZURpZEJlZ2luKCk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJW
aWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpOwogfQogCiB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdh
dGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7Ci0gICAgTmF2aWdhdGlvblN0YXRl
Ojpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5k
KHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgq
bV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZp
Z2F0ZSwgaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJl
RGlkRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQog
ewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5h
dmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgTmF2aWdhdGlv
blN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdl
c3R1cmVEaWRFbmQod2lsbE5hdmlnYXRlLCBpdGVtKTsKICAgICBbbV93ZWJWaWV3IF9uYXZpZ2F0
aW9uR2VzdHVyZURpZEVuZF07CiB9CiAKQEAgLTcyMiwxMiArNzEyLDEyIEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2ls
bFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQog
ewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLndp
bGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpm
cm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRpb25T
bmFwc2hvdChpdGVtKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVtb3ZlTmF2aWdh
dGlvbkdlc3R1cmVTbmFwc2hvdCgpCiB7Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFn
ZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQo
KTsKKyAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXcuZ2V0KCktPl9w
YWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOwogfQogCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUo
KQpAQCAtODQwLDcgKzgzMCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29y
ZEZvclEKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocGFzc3dvcmQpOwogICAgIH0pOwogCi0g
ICAgaWYgKFdLUGFzc3dvcmRWaWV3ICpwYXNzd29yZFZpZXcgPSBtX3dlYlZpZXcuX3Bhc3N3b3Jk
VmlldykgeworICAgIGlmIChXS1Bhc3N3b3JkVmlldyAqcGFzc3dvcmRWaWV3ID0gW21fd2ViVmll
dyBfcGFzc3dvcmRWaWV3XSkgewogICAgICAgICBBU1NFUlQoZmlsZU5hbWUgPT0gU3RyaW5nIHsg
cGFzc3dvcmRWaWV3LmRvY3VtZW50TmFtZSB9KTsKICAgICAgICAgW3Bhc3N3b3JkVmlldyBzaG93
UGFzc3dvcmRGYWlsdXJlQWxlcnRdOwogICAgICAgICBwYXNzd29yZFZpZXcudXNlckRpZEVudGVy
UGFzc3dvcmQgPSBwYXNzd29yZEhhbmRsZXIuZ2V0KCk7CkBAIC04NDgsNyArODM4LDcgQEAgdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6cmVxdWVzdFBhc3N3b3JkRm9yUQogICAgIH0KIAogICAgIFttX3dl
YlZpZXcgX3Nob3dQYXNzd29yZFZpZXdXaXRoRG9jdW1lbnROYW1lOmZpbGVOYW1lIHBhc3N3b3Jk
SGFuZGxlcjpwYXNzd29yZEhhbmRsZXIuZ2V0KCldOwotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJv
bVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLmRpZFJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9v
a0RvY3VtZW50KCk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3
LmdldCgpLT5fcGFnZSkuZGlkUmVxdWVzdFBhc3N3b3JkRm9yUXVpY2tMb29rRG9jdW1lbnQoKTsK
IH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFn
ZUNsaWVudEltcGxNYWMuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNCw4ICsx
MDQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRTZWN1cmVJbnB1dFN0YXRlKCkgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2NhcmRlZENvbXBvc2l0aW9u
KCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZWxlY3Rpb25EaWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9h
ZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNhZmVCcm93
c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKICAgICAKICNpZiBXS19BUElfRU5BQkxFRAogICAgIGJv
b2wgc2hvd1NoYXJlU2hlZXQoY29uc3QgV2ViQ29yZTo6U2hhcmVEYXRhV2l0aFBhcnNlZFVSTCYs
IFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3ZlcnJpZGU7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCShy
ZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4OSwxOCArNDg5LDYgQEAgUmVmPFZhbGlk
YXRpb25CdWJibGU+IFBhZ2VDbGllbnRJbXBsOjpjcgogICAgIHJldHVybiBWYWxpZGF0aW9uQnVi
YmxlOjpjcmVhdGUobV92aWV3LCBtZXNzYWdlLCBzZXR0aW5ncyk7CiB9CiAKLXZvaWQgUGFnZUNs
aWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3Vs
dCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51
ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9uSGFuZGxlcihDb250aW51
ZVVuc2FmZUxvYWQ6Olllcyk7Ci0gICAgbV9pbXBsLT5zaG93U2FmZUJyb3dzaW5nV2FybmluZyhy
ZXN1bHQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50
SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKLXsKLSAgICBtX2ltcGwtPmNsZWFyU2Fm
ZUJyb3dzaW5nV2FybmluZygpOwotfQotCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5k
aWNhdG9yKFJlZjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yLCBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yV2luZG93TGlmZXRpbWUgbGlmZXRpbWUpCiB7CiAgICAgbV9pbXBsLT5zZXRUZXh0SW5k
aWNhdG9yKHRleHRJbmRpY2F0b3IuZ2V0KCksIGxpZmV0aW1lKTsKQEAgLTU2NCw3ICs1NTIsNyBA
QCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2UoCiAjaWYgV0tfQVBJX0VO
QUJMRUQKIGJvb2wgUGFnZUNsaWVudEltcGw6OnNob3dTaGFyZVNoZWV0KGNvbnN0IFNoYXJlRGF0
YVdpdGhQYXJzZWRVUkwmIHNoYXJlRGF0YSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGJv
b2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1faW1wbC0+c2hvd1NoYXJlU2hlZXQo
c2hhcmVEYXRhLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbV93ZWJWaWV3KTsKKyAgICBt
X2ltcGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxl
ciksIG1fd2ViVmlldy5nZXQoKS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAjZW5kaWYK
QEAgLTc1MSwxNiArNzM5LDE2IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0
dXJlRGkKICAgICBtX2ltcGwtPmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRvd3NXaXRo
QW5pbWF0aW9uKHRydWUpOwogCiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3
KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdl
KS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1f
d2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2Vi
Vmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKICNlbmRpZgogfQogCiB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2
aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJM
RUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQ
YWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQod2lsbE5hdmln
YXRlLCBpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgpKQorICAg
ICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCp3ZWJWaWV3LT5fcGFnZSkubmF2aWdh
dGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTSh3aWxsTmF2aWdhdGUpOwogICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKQEAgLTc3MCw4
ICs3NTgsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdpCiB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxOYXZpZ2F0
ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKICNpZiBXS19BUElfRU5BQkxFRAot
ICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2Uo
Km1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwg
aXRlbSk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAg
TmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25H
ZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJB
TSh3aWxsTmF2aWdhdGUpOwogICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKQEAgLTc4NSw4ICs3NzMs
OCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiB2b2lkIFBhZ2VD
bGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQot
ICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS53
aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0pOworICAgIGlmIChhdXRvIHdlYlZpZXcg
PSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2Uo
KndlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0pOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CiAjZW5kaWYKQEAgLTc5NSw4ICs3ODMsOCBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdhdGlvCiB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCkKIHsKICNpZiBXS19BUElf
RU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJv
bVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNS
ZW1vdmVkKCk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAg
ICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRp
b25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CiAjZW5kaWYKIH0KIApJbmRleDogVG9vbHMv
Q2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMjM4MDAz
KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIw
MTgtMTEtMDggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBbaU9TXSBJbXBsZW1lbnQgc2FmZSBicm93c2luZyBpbiBXZWJLaXQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTQ0MQorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW06CisgICAgICAgIChjaGVja1RpdGxlQW5k
Q2xpY2spOgorICAgICAgICAoVEVTVCk6CisKIDIwMTgtMTEtMDggIEppZXdlbiBUYW4gIDxqaWV3
ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBhIHF1aWNrIGJ1aWxkIGZp
eCBmb3IgcjIzNzk4MwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2Nv
YS9TYWZlQnJvd3NpbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0
cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzcsOCArMTM3LDYgQEAgLSAodm9pZClsb29rVXBVUkw6KE5TVVJMICopVVJM
IGNvbXBsZXRpbwogCiBAZW5kCiAKLSNpZiBQTEFURk9STShNQUMpIC8vIEZJWE1FOiBUZXN0IG9u
IGlPUyBvbmNlIGltcGxlbWVudGVkLgotCiBzdGF0aWMgTlNVUkwgKnNpbXBsZVVSTCgpCiB7CiAg
ICAgcmV0dXJuIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUi
IHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0V2ViS2l0QVBJLnJlc291
cmNlcyJdOwpAQCAtMTU3LDI1ICsxNTUsMzggQEAgc3RhdGljIFJldGFpblB0cjxXS1dlYlZpZXc+
IHNhZmVCcm93c2luZwogICAgIHJldHVybiB3ZWJWaWV3OwogfQogCisjaWYgUExBVEZPUk0oTUFD
KQorc3RhdGljIHZvaWQgY2hlY2tUaXRsZUFuZENsaWNrKE5TQnV0dG9uICpidXR0b24sIGNvbnN0
IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgRVhQRUNUX1NUUkVRKGJ1dHRvbi50aXRsZS5V
VEY4U3RyaW5nLCBleHBlY3RlZFRpdGxlKTsKKyAgICBbYnV0dG9uIHBlcmZvcm1DbGljazpuaWxd
OworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGNoZWNrVGl0bGVBbmRDbGljayhVSUJ1dHRvbiAqYnV0
dG9uLCBjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQoreworICAgIEVYUEVDVF9TVFJFUShbYnV0
dG9uIHRpdGxlRm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdLlVURjhTdHJpbmcsIGV4cGVj
dGVkVGl0bGUpOworICAgIFVJVmlldyAqdGFyZ2V0ID0gYnV0dG9uLnN1cGVydmlldy5zdXBlcnZp
ZXcuc3VwZXJ2aWV3OworICAgIFNFTCBzZWxlY3RvciA9IE5TU2VsZWN0b3JGcm9tU3RyaW5nKHN0
cmNtcChleHBlY3RlZFRpdGxlLCAiR28gYmFjayIpID8gQCJzaG93RGV0YWlsc0NsaWNrZWQiIDog
QCJnb0JhY2tDbGlja2VkIik7CisgICAgW3RhcmdldCBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Jd
OworfQorI2VuZGlmCisKIFRFU1QoU2FmZUJyb3dzaW5nLCBHb0JhY2spCiB7CiAgICAgYXV0byB3
ZWJWaWV3ID0gc2FmZUJyb3dzaW5nVmlldygpOwotICAgIE5TVmlldyAqYm90dG9tID0gW3dlYlZp
ZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXS5zdWJ2aWV3cy5maXJzdE9iamVjdC5z
dWJ2aWV3cy5sYXN0T2JqZWN0OwotICAgIE5TQnV0dG9uICpnb0JhY2sgPSAoTlNCdXR0b24gKili
b3R0b20uc3Vidmlld3MubGFzdE9iamVjdDsKLSAgICBFWFBFQ1RfU1RSRVEoZ29CYWNrLnRpdGxl
LlVURjhTdHJpbmcsICJHbyBiYWNrIik7Ci0gICAgW2dvQmFjayBwZXJmb3JtQ2xpY2s6bmlsXTsK
KyAgICBhdXRvIHdhcm5pbmcgPSBbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3Rp
bmddOworICAgIGF1dG8gYm90dG9tID0gd2FybmluZy5zdWJ2aWV3cy5maXJzdE9iamVjdC5zdWJ2
aWV3cy5sYXN0T2JqZWN0OworICAgIGNoZWNrVGl0bGVBbmRDbGljayhib3R0b20uc3Vidmlld3Mu
bGFzdE9iamVjdCwgIkdvIGJhY2siKTsKICAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgX3NhZmVCcm93
c2luZ1dhcm5pbmdGb3JUZXN0aW5nXSwgbmlsKTsKIH0KIAogVEVTVChTYWZlQnJvd3NpbmcsIFZp
c2l0VW5zYWZlV2Vic2l0ZSkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBzYWZlQnJvd3NpbmdWaWV3
KCk7Ci0gICAgTlNWaWV3ICp3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdG
b3JUZXN0aW5nXTsKLSAgICBOU1ZpZXcgKmJveCA9IHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmpl
Y3Q7Ci0gICAgTlNCdXR0b24gKnNob3dEZXRhaWxzID0gKE5TQnV0dG9uICopYm94LnN1YnZpZXdz
Lmxhc3RPYmplY3Quc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX1NUUkVRKHNob3dE
ZXRhaWxzLnRpdGxlLlVURjhTdHJpbmcsICJTaG93IGRldGFpbHMiKTsKKyAgICBhdXRvIHdhcm5p
bmcgPSBbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddOworICAgIGF1dG8g
Ym94ID0gd2FybmluZy5zdWJ2aWV3cy5maXJzdE9iamVjdDsKICAgICBFWFBFQ1RfRVEoYm94LnN1
YnZpZXdzLmNvdW50LCAzdWxsKTsKLSAgICBbc2hvd0RldGFpbHMgcGVyZm9ybUNsaWNrOm5pbF07
CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKGJveC5zdWJ2aWV3cy5sYXN0T2JqZWN0LnN1YnZpZXdz
LmZpcnN0T2JqZWN0LCAiU2hvdyBkZXRhaWxzIik7CiAgICAgRVhQRUNUX0VRKGJveC5zdWJ2aWV3
cy5jb3VudCwgNHVsbCk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbW1pdHRlZE5hdmlnYXRpb24pOwog
ICAgIFt3YXJuaW5nIHBlcmZvcm1TZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhAImNsaWNr
ZWRPbkxpbms6Iikgd2l0aE9iamVjdDpAIldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsK
QEAgLTE5MSw4ICsyMDIsNiBAQCBURVNUKFNhZmVCcm93c2luZywgTmF2aWdhdGlvbkNsZWFyc1dh
cm5pCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CiB9CiAKLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgTnVsbExvb2t1cENvbnRleHQgOiBO
U09iamVjdAogQGVuZAogQGltcGxlbWVudGF0aW9uIE51bGxMb29rdXBDb250ZXh0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354348</attachid>
            <date>2018-11-09 09:09:00 -0800</date>
            <delta_ts>2018-11-09 15:58:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181109090858.patch</filename>
            <type>text/plain</type>
            <size>54929</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNiw2ICsxMzUyLDggQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIC0gKHZvaWQpbGF5b3V0U3Vidmlld3MKIHsKICAgICBb
c3VwZXIgbGF5b3V0U3Vidmlld3NdOworICAgIFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFt
ZTpzZWxmLmJvdW5kc107CisgICAgW19zYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdz
XTsKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogfQogCkBAIC0zMjkwLDYgKzMz
MDgsNyBAQCAtICh2b2lkKXByZXBhcmVDb250ZW50SW5SZWN0OihOU1JlY3QpcmVjCiAtICh2b2lk
KXNldEZyYW1lU2l6ZTooTlNTaXplKXNpemUKIHsKICAgICBbc3VwZXIgc2V0RnJhbWVTaXplOnNp
emVdOworICAgIFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CiAg
ICAgX2ltcGwtPnNldEZyYW1lU2l6ZShOU1NpemVUb0NHU2l6ZShzaXplKSk7CiB9CiAKQEAgLTM1
ODMsNzYgKzM2MDIsMTIxIEBAIC0gKEJPT0wpX3dhbnRzS2V5RG93bkZvckV2ZW50OihOU0V2ZW50
ICoKIAogLSAodm9pZClzY3JvbGxXaGVlbDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+c2Nyb2xs
V2hlZWwoZXZlbnQpOwogfQogCiAtICh2b2lkKXN3aXBlV2l0aEV2ZW50OihOU0V2ZW50ICopZXZl
bnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwog
ICAgIF9pbXBsLT5zd2lwZVdpdGhFdmVudChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VNb3Zl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VNb3ZlZChldmVudCk7CiB9CiAKIC0gKHZv
aWQpbW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dh
cm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZURvd24oZXZlbnQpOwog
fQogCiAtICh2b2lkKW1vdXNlVXA6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJy
b3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlVXAoZXZl
bnQpOwogfQogCiAtICh2b2lkKW1vdXNlRHJhZ2dlZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAg
aWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+
bW91c2VEcmFnZ2VkKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZUVudGVyZWQ6KE5TRXZlbnQg
KilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJu
OworCiAgICAgX2ltcGwtPm1vdXNlRW50ZXJlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VF
eGl0ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykK
KyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlRXhpdGVkKGV2ZW50KTsKIH0KIAog
LSAodm9pZClvdGhlck1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKW90aGVyTW91c2VEcmFnZ2VkOihOU0V2ZW50ICop
ZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsK
KwogICAgIF9pbXBsLT5vdGhlck1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpb3Ro
ZXJNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5p
bmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5vdGhlck1vdXNlVXAoZXZlbnQpOwog
fQogCiAtICh2b2lkKXJpZ2h0TW91c2VEb3duOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlRG93bihldmVudCk7CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZURyYWdnZWQ6KE5TRXZl
bnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0
dXJuOworCiAgICAgX2ltcGwtPnJpZ2h0TW91c2VEcmFnZ2VkKGV2ZW50KTsKIH0KIAogLSAodm9p
ZClyaWdodE1vdXNlVXA6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPnJpZ2h0TW91c2VVcChldmVu
dCk7CiB9CiAKIC0gKHZvaWQpcHJlc3N1cmVDaGFuZ2VXaXRoRXZlbnQ6KE5TRXZlbnQgKilldmVu
dAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAg
ICAgX2ltcGwtPnByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50KGV2ZW50KTsKIH0KIApAQCAtNDYzNSw3
ICs0Njk5LDcgQEAgLSAodm9pZClfcGFzdGVBc1F1b3RhdGlvbjooaWQpc2VuZGVyCiAKICsgKEJP
T0wpX2hhbmRsZXNTYWZlQnJvd3NpbmcKIHsKLSAgICByZXR1cm4gREVGQVVMVF9TQUZFX0JST1dT
SU5HX0VOQUJMRUQ7CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC0gKHZvaWQpX2V2YWx1YXRlSmF2
YVNjcmlwdFdpdGhvdXRVc2VyR2VzdHVyZTooTlNTdHJpbmcgKilqYXZhU2NyaXB0U3RyaW5nIGNv
bXBsZXRpb25IYW5kbGVyOih2b2lkICheKShpZCwgTlNFcnJvciAqKSljb21wbGV0aW9uSGFuZGxl
cgpAQCAtNjY2NiwxNSArNjczMCwxMiBAQCAtICh2b2lkKV9zZXRTaGFyZVNoZWV0Q29tcGxldGVz
SW1tZWRpYXRlCiAKICNpZiBQTEFURk9STShNQUMpCiAtIChOU1ZpZXcgKilfc2FmZUJyb3dzaW5n
V2FybmluZ0ZvclRlc3RpbmcKLXsKLSAgICByZXR1cm4gX2ltcGwtPnNhZmVCcm93c2luZ1dhcm5p
bmcoKTsKLX0KICNlbHNlCiAtIChVSVZpZXcgKilfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3Rp
bmcKKyNlbmRpZgogewotICAgIHJldHVybiBuaWw7CisgICAgcmV0dXJuIF9zYWZlQnJvd3NpbmdX
YXJuaW5nLmdldCgpOwogfQotI2VuZGlmCiAKIC0gKF9XS0luc3BlY3RvciAqKV9pbnNwZWN0b3IK
IHsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXdJbnRl
cm5hbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXdJbnRlcm5hbC5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkod29ya2luZyBjb3B5KQpAQCAt
MzIsOCArMzIsMTAgQEAKICNpbXBvcnQgIldLV2ViVmlld0NvbmZpZ3VyYXRpb24uaCIKICNpbXBv
cnQgIl9XS0F0dGFjaG1lbnRJbnRlcm5hbC5oIgogI2ltcG9ydCAiX1dLV2ViVmlld1ByaW50Rm9y
bWF0dGVySW50ZXJuYWwuaCIKKyNpbXBvcnQgPHd0Zi9Db21wbGV0aW9uSGFuZGxlci5oPgogI2lt
cG9ydCA8d3RmL1JlZlB0ci5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgorI2ltcG9ydCA8
d3RmL1ZhcmlhbnQuaD4KIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAjaW1wb3J0ICJVSUtp
dFNQSS5oIgpAQCAtNjMsMTEgKzY1LDE3IEBAIGNsYXNzIEF0dGFjaG1lbnQ7CiB9CiAKIG5hbWVz
cGFjZSBXZWJLaXQgeworZW51bSBjbGFzcyBDb250aW51ZVVuc2FmZUxvYWQgOiBib29sOworY2xh
c3MgU2FmZUJyb3dzaW5nUmVzdWx0OwogY2xhc3MgVmlld1NuYXBzaG90OwogY2xhc3MgV2ViUGFn
ZVByb3h5Owogc3RydWN0IFByaW50SW5mbzsKIH0KIAorbmFtZXNwYWNlIFdlYkNvcmUgeworY2xh
c3MgVVJMOworfQorCiBAY2xhc3MgV0tXZWJWaWV3Q29udGVudFByb3ZpZGVyUmVnaXN0cnk7CiBA
Y2xhc3MgV0tQYXNzd29yZFZpZXc7CiBAY2xhc3MgX1dLRnJhbWVIYW5kbGU7CkBAIC0xNzEsNiAr
MTc5LDkgQEAgc3RydWN0IFByaW50SW5mbzsKIC0gKHZvaWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6
KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRoU291cmNlOihOU1N0cmluZyAqKXNvdXJj
ZTsKICNlbmRpZgogCistICh2b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZzooY29uc3QgV2Vi
S2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQmKXJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJD
b3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOworLSAodm9pZClfY2xlYXJTYWZlQnJv
d3NpbmdXYXJuaW5nOworCiAtIChzdGQ6Om9wdGlvbmFsPEJPT0w+KV9yZXNvbHV0aW9uRm9yU2hh
cmVTaGVldEltbWVkaWF0ZUNvbXBsZXRpb25Gb3JUZXN0aW5nOwogCiAtIChXS1BhZ2VSZWYpX3Bh
Z2VGb3JUZXN0aW5nOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNs
aWVudEltcGxDb2NvYS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNiw2ICsyNiw3IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlBhZ2VDbGllbnQu
aCIKKyNpbmNsdWRlIDx3dGYvV2Vha09iakNQdHIuaD4KIAogQGNsYXNzIFdLV2ViVmlldzsKIApA
QCAtNDgsOSArNDksMTEgQEAgcHVibGljOgogICAgIE5TRmlsZVdyYXBwZXIgKmFsbG9jRmlsZVdy
YXBwZXJJbnN0YW5jZSgpIGNvbnN0IGZpbmFsOwogICAgIE5TU2V0ICpzZXJpYWxpemFibGVGaWxl
V3JhcHBlckNsYXNzZXMoKSBjb25zdCBmaW5hbDsKICNlbmRpZgorICAgIHZvaWQgc2hvd1NhZmVC
cm93c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+
JiYpPiYmKSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpIGZpbmFs
OwogCiBwcm90ZWN0ZWQ6Ci0gICAgV0tXZWJWaWV3ICptX3dlYlZpZXc7CisgICAgV2Vha09iakNQ
dHI8V0tXZWJWaWV3PiBtX3dlYlZpZXc7CiB9OwogCiB9CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0JKHJldmlzaW9u
IDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBs
Q29jb2EubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDE5IEBAIHZvaWQgUGFnZUNsaWVu
dEltcGxDb2NvYTo6aXNQbGF5aW5nQXVkaW8KICNlbmRpZgogfQogCit2b2lkIFBhZ2VDbGllbnRJ
bXBsQ29jb2E6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3Vs
dCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51
ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgW3dlYlZpZXcg
X3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKV07CisgICAgZWxzZQorICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihDb250aW51ZVVuc2FmZUxvYWQ6Ok5vKTsKK30KKwordm9pZCBQYWdlQ2xpZW50SW1wbENvY29h
OjpjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKQoreworICAgIFttX3dlYlZpZXcgX2NsZWFyU2Fm
ZUJyb3dzaW5nV2FybmluZ107Cit9CisKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQog
CiB2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmRpZEluc2VydEF0dGFjaG1lbnQoQVBJOjpBdHRh
Y2htZW50JiBhdHRhY2htZW50LCBjb25zdCBTdHJpbmcmIHNvdXJjZSkKQEAgLTY5LDcgKzgyLDcg
QEAgdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRSZW1vdmVBdHRhYwogTlNGaWxlV3JhcHBl
ciAqUGFnZUNsaWVudEltcGxDb2NvYTo6YWxsb2NGaWxlV3JhcHBlckluc3RhbmNlKCkgY29uc3QK
IHsKICNpZiBXS19BUElfRU5BQkxFRAotICAgIENsYXNzIGNscyA9IG1fd2ViVmlldy5jb25maWd1
cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzcyA/OiBbTlNGaWxlV3JhcHBlciBzZWxm
XTsKKyAgICBDbGFzcyBjbHMgPSBbbV93ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLl9hdHRhY2htZW50
RmlsZVdyYXBwZXJDbGFzcyA/OiBbTlNGaWxlV3JhcHBlciBzZWxmXTsKICAgICByZXR1cm4gW2Ns
cyBhbGxvY107CiAjZWxzZQogICAgIHJldHVybiBuaWw7CkBAIC04MCw3ICs5Myw3IEBAIE5TU2V0
ICpQYWdlQ2xpZW50SW1wbENvY29hOjpzZXJpYWxpemFibGUKIHsKICAgICBDbGFzcyBkZWZhdWx0
RmlsZVdyYXBwZXJDbGFzcyA9IE5TRmlsZVdyYXBwZXIuc2VsZjsKICNpZiBXS19BUElfRU5BQkxF
RAotICAgIENsYXNzIGNvbmZpZ3VyZWRGaWxlV3JhcHBlckNsYXNzID0gbV93ZWJWaWV3LmNvbmZp
Z3VyYXRpb24uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOworICAgIENsYXNzIGNvbmZpZ3Vy
ZWRGaWxlV3JhcHBlckNsYXNzID0gW21fd2ViVmlldyBjb25maWd1cmF0aW9uXS5fYXR0YWNobWVu
dEZpbGVXcmFwcGVyQ2xhc3M7CiAgICAgaWYgKGNvbmZpZ3VyZWRGaWxlV3JhcHBlckNsYXNzICYm
IGNvbmZpZ3VyZWRGaWxlV3JhcHBlckNsYXNzICE9IGRlZmF1bHRGaWxlV3JhcHBlckNsYXNzKQog
ICAgICAgICByZXR1cm4gW05TU2V0IHNldFdpdGhPYmplY3RzOmNvbmZpZ3VyZWRGaWxlV3JhcHBl
ckNsYXNzLCBkZWZhdWx0RmlsZVdyYXBwZXJDbGFzcywgbmlsXTsKICNlbmRpZgpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJu
aW5nLmgJKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dLU2FmZUJyb3dzaW5nV2FybmluZy5oCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxNiArNDYsMTcg
QEAgZW51bSBjbGFzcyBDb250aW51ZVVuc2FmZUxvYWQgOiBib29sOwogCiAjaWYgUExBVEZPUk0o
TUFDKQogdXNpbmcgUmVjdFR5cGUgPSBOU1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gTlNT
dGFja1ZpZXc7Cit1c2luZyBWaWV3VHlwZSA9IE5TVmlldzsKICNlbHNlCiB1c2luZyBSZWN0VHlw
ZSA9IENHUmVjdDsKLXVzaW5nIFN0YWNrVmlld1R5cGUgPSBVSVN0YWNrVmlldzsKK3VzaW5nIFZp
ZXdUeXBlID0gVUlWaWV3OwogI2VuZGlmCiAKLUBpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdXYXJu
aW5nIDogU3RhY2tWaWV3VHlwZSB7CitAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nV2FybmluZyA6
IFZpZXdUeXBlIHsKIEBwYWNrYWdlCiAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50
PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiBfY29tcGxldGlv
bkhhbmRsZXI7CiAgICAgUmVmUHRyPGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0PiBf
cmVzdWx0OworICAgIFJldGFpblB0cjxOU0xheW91dENvbnN0cmFpbnQ+IF9ib3hCb3R0b21Db25z
dHJhaW50OwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5cGUpZnJh
bWUgc2FmZUJyb3dzaW5nUmVzdWx0Oihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYp
cmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8
V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29tcGxldGlv
bkhhbmRsZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93
c2luZ1dhcm5pbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTMzLDMyICszMywzMyBAQAogI2ltcG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1w
b3J0IDx3dGYvTGFuZ3VhZ2UuaD4KIAotY29uc3QgQ0dGbG9hdCBleGNsYW1hdGlvblBvaW50U2l6
ZSA9IDMwOwotY29uc3QgQ0dGbG9hdCB0ZXh0U2l6ZSA9IDEzOworY29uc3RleHByIENHRmxvYXQg
ZXhjbGFtYXRpb25Qb2ludFNpemUgPSAzMDsKK2NvbnN0ZXhwciBDR0Zsb2F0IHRleHRTaXplID0g
MTM7Citjb25zdGV4cHIgQ0dGbG9hdCBtYXJnaW5TaXplID0gMjA7Citjb25zdGV4cHIgc2l6ZV90
IG1heFdpZHRoID0gNjc1OworCiAjaWYgUExBVEZPUk0oTUFDKQotY29uc3QgQ0dGbG9hdCBtYXJn
aW5TaXplID0gMjA7Ci1jb25zdCBzaXplX3QgbWF4V2lkdGggPSA2MDA7CiB1c2luZyBDb2xvclR5
cGUgPSBOU0NvbG9yOwogdXNpbmcgRm9udFR5cGUgPSBOU0ZvbnQ7Ci11c2luZyBWaWV3VHlwZSA9
IE5TVmlldzsKLXVzaW5nIEJlemllclBhdGhUeXBlID0gTlNCZXppZXJQYXRoOwogdXNpbmcgVGV4
dFZpZXdUeXBlID0gTlNUZXh0VmlldzsKK3VzaW5nIEJ1dHRvblR5cGUgPSBOU0J1dHRvbjsKK3Vz
aW5nIEFsaWdubWVudFR5cGUgPSBOU0xheW91dEF0dHJpYnV0ZTsKICNlbHNlCiB1c2luZyBDb2xv
clR5cGUgPSBVSUNvbG9yOwogdXNpbmcgRm9udFR5cGUgPSBVSUZvbnQ7Ci11c2luZyBWaWV3VHlw
ZSA9IFVJVmlldzsKLXVzaW5nIEJlemllclBhdGhUeXBlID0gVUlCZXppZXJQYXRoOwogdXNpbmcg
VGV4dFZpZXdUeXBlID0gVUlUZXh0VmlldzsKK3VzaW5nIEJ1dHRvblR5cGUgPSBVSUJ1dHRvbjsK
K3VzaW5nIEFsaWdubWVudFR5cGUgPSBVSVN0YWNrVmlld0FsaWdubWVudDsKICNlbmRpZgogCi1z
dGF0aWMgaWQgY29uZmlybU1hbHdhcmVTZW50aW5lbCgpCitzdGF0aWMgTlNVUkwgKmNvbmZpcm1N
YWx3YXJlU2VudGluZWwoKQogewotICAgIHJldHVybiBAIldLQ29uZmlybU1hbHdhcmVTZW50aW5l
bCI7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tDb25maXJtTWFsd2FyZVNl
bnRpbmVsIl07CiB9CiAKLXN0YXRpYyBpZCB2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpCitz
dGF0aWMgTlNVUkwgKnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkKIHsKLSAgICByZXR1cm4g
QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIjsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdp
dGhTdHJpbmc6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIl07CiB9CiAKIHN0YXRpYyBD
b2xvclR5cGUgKmNvbG9yTmFtZWQoTlNTdHJpbmcgKm5hbWUpCkBAIC03NSw3ICs3Niw2IEBAIHN0
YXRpYyBDb2xvclR5cGUgKmNvbG9yTmFtZWQoTlNTdHJpbmcgKm4KICNlbmRpZgogfQogCi0jaWYg
UExBVEZPUk0oTUFDKQogc3RhdGljIHZvaWQgcmVwbGFjZShOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nICpzdHJpbmcsIE5TU3RyaW5nICp0b1JlcGxhY2UsIE5TU3RyaW5nICpyZXBsYWNlV2l0aCkK
IHsKICAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5nLnN0cmluZyBy
YW5nZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aFN0cmluZzpyZXBsYWNlV2l0aF07CkBAIC05MCw3
ICs5MCw2IEBAIHN0YXRpYyB2b2lkIGFkZExpbmtBbmRSZXBsYWNlKE5TTXV0YWJsZUEKICAgICB9
IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHJlcGxhY2VXaXRoLmxlbmd0aCldOwogICAgIFtzdHJpbmcg
cmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOltzdHJpbmcuc3RyaW5nIHJhbmdlT2ZTdHJpbmc6dG9S
ZXBsYWNlXSB3aXRoQXR0cmlidXRlZFN0cmluZzpzdHJpbmdXaXRoTGlua107CiB9Ci0jZW5kaWYK
IAogQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbnQgOiBWaWV3VHlwZQog
QGVuZApAQCAtMTAwLDIxICs5OSwzMiBAQCBAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nRXhjbGFt
YXRpb25Qb2luCiAtICh2b2lkKWRyYXdSZWN0OihSZWN0VHlwZSlyZWN0CiB7CiAgICAgW2NvbG9y
TmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdUaXRsZSIpIHNldF07Ci0jaWYgUExBVEZPUk0o
TUFDKQotI2RlZmluZSBhZGRBcmNXaXRoQ2VudGVyIGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0
aENlbnRlcgotICAgIE5TUmVjdCBzcXVhcmUgPSBOU01ha2VSZWN0KDAsIDAsIGV4Y2xhbWF0aW9u
UG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSk7CisgICAgY29uc3RleHByIENHRmxvYXQg
Y2VudGVyWCA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMjsKKyAgICBjb25zdGV4cHIgQ0dGbG9h
dCBwb2ludENlbnRlclkgPSBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDcgLyAzMDsKKyAgICBjb25z
dGV4cHIgQ0dGbG9hdCBwb2ludFJhZGl1cyA9IDIuMjUgKiBleGNsYW1hdGlvblBvaW50U2l6ZSAv
IDMwOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVCb3R0b21DZW50ZXJZID0gZXhjbGFtYXRp
b25Qb2ludFNpemUgKiAxMyAvIDMwOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVUb3BDZW50
ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiAyMyAvIDMwOworICAgIGNvbnN0ZXhwciBDR0Zs
b2F0IGxpbmVSYWRpdXMgPSAxLjc1ICogZXhjbGFtYXRpb25Qb2ludFNpemUgLyAzMDsKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgTlNCZXppZXJQYXRoICpleGNsYW1hdGlvblBvaW50ID0gW05TQmV6
aWVyUGF0aCBiZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBleGNsYW1h
dGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpXTsKKyAgICBbZXhjbGFtYXRpb25Q
b2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgbGluZUJv
dHRvbUNlbnRlclkgfSByYWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgw
IGNsb2Nrd2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhX
aXRoQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBsaW5lVG9wQ2VudGVyWSB9IHJhZGl1czpsaW5l
UmFkaXVzIHN0YXJ0QW5nbGU6MTgwIGVuZEFuZ2xlOjM2MCBjbG9ja3dpc2U6WUVTXTsKKyAgICBb
ZXhjbGFtYXRpb25Qb2ludCBsaW5lVG9Qb2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1cywgbGlu
ZUJvdHRvbUNlbnRlclkgfV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYXBwZW5kQmV6aWVyUGF0
aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50Q2VudGVyWSB9IHJhZGl1czpwb2lu
dFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOworICAgIFtl
eGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcjogeyBjZW50
ZXJYLCBwb2ludENlbnRlclkgfSByYWRpdXM6cG9pbnRSYWRpdXMgc3RhcnRBbmdsZToxODAgZW5k
QW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogI2Vsc2UKLSAgICBDR1JlY3Qgc3F1YXJlID0gQ0dS
ZWN0TWFrZSgwLCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUp
OworICAgIGF1dG8gZmxpcCA9IFtdIChhdXRvIHkpIHsKKyAgICAgICAgcmV0dXJuIGV4Y2xhbWF0
aW9uUG9pbnRTaXplIC0geTsKKyAgICB9OworICAgIFVJQmV6aWVyUGF0aCAqZXhjbGFtYXRpb25Q
b2ludCA9IFtVSUJlemllclBhdGggYmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OkNHUmVjdE1ha2Uo
MCwgMCwgZXhjbGFtYXRpb25Qb2ludFNpemUsIGV4Y2xhbWF0aW9uUG9pbnRTaXplKV07CisgICAg
W2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlwKGxpbmVU
b3BDZW50ZXJZKSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6MiAqIHBpRG91YmxlIGVu
ZEFuZ2xlOnBpRG91YmxlIGNsb2Nrd2lzZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRk
QXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlwKGxpbmVCb3R0b21DZW50ZXJZKSB9IHJhZGl1
czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUgZW5kQW5nbGU6MCBjbG9ja3dpc2U6Tk9d
OworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxp
cChwb2ludENlbnRlclkpIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6MCBlbmRBbmds
ZTpwaURvdWJsZSBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dp
dGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChwb2ludENlbnRlclkpIH0gcmFkaXVzOnBvaW50UmFk
aXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUgZW5kQW5nbGU6cGlEb3VibGUgKiAyIGNsb2Nrd2lzZTpO
T107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkTGluZVRvUG9pbnQ6IHsgY2VudGVyWCArIGxp
bmVSYWRpdXMsIGZsaXAobGluZUJvdHRvbUNlbnRlclkpIH1dOworICAgIFtleGNsYW1hdGlvblBv
aW50IGFkZExpbmVUb1BvaW50OiB7IGNlbnRlclggKyBsaW5lUmFkaXVzLCBmbGlwKGxpbmVUb3BD
ZW50ZXJZKSB9XTsKICNlbmRpZgotICAgIEJlemllclBhdGhUeXBlICpleGNsYW1hdGlvblBvaW50
ID0gW0JlemllclBhdGhUeXBlIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpzcXVhcmVdOwotICAg
IFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2ludFNp
emUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDEzIC8gMzAgfSByYWRpdXM6MS43NSBzdGFy
dEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOwotICAgIFtleGNsYW1hdGlvblBv
aW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2ludFNpemUgLyAyLCBleGNsYW1h
dGlvblBvaW50U2l6ZSAqIDIzIC8gMzAgfSByYWRpdXM6MS43NSBzdGFydEFuZ2xlOjE4MCBlbmRB
bmdsZTozNjAgY2xvY2t3aXNlOllFU107Ci0gICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0
aENlbnRlcjogeyBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDIsIGV4Y2xhbWF0aW9uUG9pbnRTaXpl
ICogNyAvIDMwIH0gcmFkaXVzOjIuMjUgc3RhcnRBbmdsZTowIGVuZEFuZ2xlOjE4MCBjbG9ja3dp
c2U6WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGV4Y2xh
bWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8gMzAgfSByYWRp
dXM6Mi4yNSBzdGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107CiAgICAg
W2V4Y2xhbWF0aW9uUG9pbnQgZmlsbF07Ci0jaWYgUExBVEZPUk0oTUFDKQotI3VuZGVmIGFkZEFy
Y1dpdGhDZW50ZXIKLSNlbmRpZgogfQogCiAtIChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUK
QEAgLTEyNCw3ICsxMzQsNiBAQCAtIChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUKIAogQGVu
ZAogCi0jaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIE5TVVJMICpyZXBvcnRBbkVycm9yVVJMKGNv
bnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIFdl
YkNvcmU6OlVSTCh7IH0sIG1ha2VTdHJpbmcocmVzdWx0LnJlcG9ydEFuRXJyb3JVUkxCYXNlKCks
ICImdXJsPSIsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMocmVzdWx0LnVybCgpKSwgIiZo
bD0iLCBkZWZhdWx0TGFuZ3VhZ2UoKSkpOwpAQCAtMTkxLDEyICsyMDAsNDkgQEAgc3RhdGljIE5T
TXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmRldGFpbAogICAgIEFTU0VSVChyZXN1bHQuaXNVbndh
bnRlZFNvZnR3YXJlKCkpOwogICAgIHJldHVybiBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJlRGV0
YWlscyhyZXN1bHQsIFdFQl9VSV9OU1NUUklORyhAIldhcm5pbmdzIGFyZSBzaG93biBmb3Igd2Vi
c2l0ZXMgd2hlcmUgaGFybWZ1bCBzb2Z0d2FyZSBoYXMgYmVlbiBkZXRlY3RlZC4gWW91IGNhbiBj
aGVjayAldGhlLXN0YXR1cy1vZi1zaXRlJSBvbiB0aGUgJXNhZmVCcm93c2luZ1Byb3ZpZGVyJSBk
aWFnbm9zdGljIHBhZ2UuIiwgIlVud2FudGVkIHNvZnR3YXJlIHdhcm5pbmcgZGVzY3JpcHRpb24i
KSwgQCIldGhlLXN0YXR1cy1vZi1zaXRlJSIsIGZhbHNlKTsKIH0KKworc3RhdGljIEJ1dHRvblR5
cGUgKm1ha2VCdXR0b24oTlNTdHJpbmcgKnRpdGxlLCBpZCB0YXJnZXQsIFNFTCBhY3Rpb24pCit7
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxl
OnRpdGxlIHRhcmdldDp0YXJnZXQgYWN0aW9uOmFjdGlvbl07CisjZWxzZQorICAgIFVJQnV0dG9u
ICpidXR0b24gPSBbVUlCdXR0b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0b25UeXBlU3lzdGVtXTsK
KyAgICBbYnV0dG9uIHNldFRpdGxlOnRpdGxlIGZvclN0YXRlOlVJQ29udHJvbFN0YXRlTm9ybWFs
XTsKKyAgICBbYnV0dG9uIGFkZFRhcmdldDp0YXJnZXQgYWN0aW9uOmFjdGlvbiBmb3JDb250cm9s
RXZlbnRzOlVJQ29udHJvbEV2ZW50VG91Y2hVcEluc2lkZV07CisgICAgcmV0dXJuIGJ1dHRvbjsK
ICNlbmRpZgorfQogCi1AaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgOiBUZXh0Vmll
d1R5cGUgeworc3RhdGljIHZvaWQgc2V0QmFja2dyb3VuZChWaWV3VHlwZSAqdmlldywgQ29sb3JU
eXBlICpjb2xvciwgc2l6ZV90IGNvcm5lclJhZGl1cyA9IDApCit7CisjaWYgUExBVEZPUk0oTUFD
KQorICAgIHZpZXcud2FudHNMYXllciA9IFlFUzsKKyAgICB2aWV3LmxheWVyLmJhY2tncm91bmRD
b2xvciA9IFtjb2xvciBDR0NvbG9yXTsKKyAgICBpZiAoY29ybmVyUmFkaXVzKQorICAgICAgICB2
aWV3LmxheWVyLmNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1czsKKyNlbHNlCisgICAgdmlldy5i
YWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyAgICBpZiAoY29ybmVyUmFkaXVzKQorICAgICAgICB2
aWV3LmxheWVyLmNvcm5lclJhZGl1cyA9IGNvcm5lclJhZGl1czsKKyNlbmRpZgorfQorCisjaWYg
UExBVEZPUk0oTUFDKQorQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUg
OiBOU09iamVjdDxOU1RleHRWaWV3RGVsZWdhdGU+CisjZWxzZQorQGludGVyZmFjZSBXS1NhZmVC
cm93c2luZ1RleHRWaWV3RGVsZWdhdGUgOiBOU09iamVjdDxVSVRleHRWaWV3RGVsZWdhdGU+Cisj
ZW5kaWYKK3sKIEBwYWNrYWdlCiAgICAgV2Vha09iakNQdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5n
PiBfdGFyZ2V0OwogfQorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoVGFyZ2V0OihXS1NhZmVCcm93
c2luZ1dhcm5pbmcgKil0YXJnZXQ7CitAZW5kCisKK0BpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdU
ZXh0VmlldyA6IFRleHRWaWV3VHlwZSB7CitAcGFja2FnZQorICAgIFJldGFpblB0cjxXS1NhZmVC
cm93c2luZ1RleHRWaWV3RGVsZWdhdGU+IF9kZWxlZ2F0ZTsKK30KICsgKGluc3RhbmNldHlwZSl2
aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRT
dHJpbmcgbGlua1RhcmdldDooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopdGFyZ2V0OwogKyAoaW5z
dGFuY2V0eXBlKXZpZXdXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKIEBlbmQKQEAgLTIx
Myw1MSArMjU5LDc2IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSkK
ICAgICBfY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsKICAg
ICBfcmVzdWx0ID0gbWFrZVJlZihyZXN1bHQpOwogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIHNl
bGYud2FudHNMYXllciA9IFlFUzsKLSAgICBzZWxmLmxheWVyLmJhY2tncm91bmRDb2xvciA9IFtj
b2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpIENHQ29sb3JdOwot
Ci0gICAgTlNTdGFja1ZpZXcgKnRvcCA9IFtOU1N0YWNrVmlldyBzdGFja1ZpZXdXaXRoVmlld3M6
QFsKLSAgICAgICAgW1tXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbnQgbmV3XSBhdXRvcmVs
ZWFzZV0sCi0gICAgICAgIFtOU1RleHRGaWVsZCBsYWJlbFdpdGhBdHRyaWJ1dGVkU3RyaW5nOltb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGl0bGVUZXh0KHJlc3Vs
dCkgYXR0cmlidXRlczpAewotICAgICAgICAgICAgTlNGb250QXR0cmlidXRlTmFtZTpbTlNGb250
IHN5c3RlbUZvbnRPZlNpemU6ZXhjbGFtYXRpb25Qb2ludFNpemVdLAotICAgICAgICAgICAgTlNG
b3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lOmNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dh
cm5pbmdUZXh0IikKLSAgICAgICAgfV0gYXV0b3JlbGVhc2VdXQotICAgIF1dOwotCi0gICAgV0tT
YWZlQnJvd3NpbmdUZXh0VmlldyAqbWlkZGxlID0gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmll
d1dpdGhTdHJpbmc6d2FybmluZ1RleHQocmVzdWx0KV07Ci0KLSAgICBOU1N0YWNrVmlldyAqYm90
dG9tID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dpdGhWaWV3czpAWwotICAgICAgICBbTlNCdXR0
b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhAIlNob3cgZGV0YWlscyIsICJBY3Rp
b24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSB0YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVj
dG9yKHNob3dEZXRhaWxzQ2xpY2tlZCldLAotICAgICAgICBbTlNCdXR0b24gYnV0dG9uV2l0aFRp
dGxlOldFQl9VSV9OU1NUUklORyhAIkdvIGJhY2siLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2lu
ZyB3YXJuaW5nIikgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihnb0JhY2tDbGlja2VkKV0K
LSAgICBdXTsKKyAgICBzZXRCYWNrZ3JvdW5kKHNlbGYsIGNvbG9yTmFtZWQoQCJXS1NhZmVCcm93
c2luZ1dhcm5pbmdCYWNrZ3JvdW5kIikpOwogCi0gICAgZm9yIChOU1N0YWNrVmlldyAqdmlldyBp
biBAW3RvcCwgYm90dG9tXSkKLSAgICAgICAgW3ZpZXcgc2V0SHVnZ2luZ1ByaW9yaXR5Ok5TTGF5
b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmll
bnRhdGlvblZlcnRpY2FsXTsKKyAgICBhdXRvIGV4Y2xhbWF0aW9uUG9pbnQgPSBbW1dLU2FmZUJy
b3dzaW5nRXhjbGFtYXRpb25Qb2ludCBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIHRpdGxl
ID0gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOltbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGl0bGVUZXh0KHJlc3VsdCkg
YXR0cmlidXRlczpAeworICAgICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBib2xk
U3lzdGVtRm9udE9mU2l6ZTpleGNsYW1hdGlvblBvaW50U2l6ZV0sCisgICAgICAgIE5TRm9yZWdy
b3VuZENvbG9yQXR0cmlidXRlTmFtZTpjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5n
VGV4dCIpCisgICAgfV0gYXV0b3JlbGVhc2VdIGxpbmtUYXJnZXQ6bmlsXTsKKyAgICBhdXRvIHdh
cm5pbmcgPSBbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3V2l0aFN0cmluZzp3YXJuaW5nVGV4
dChyZXN1bHQpXTsKKyAgICBhdXRvIHNob3dEZXRhaWxzID0gbWFrZUJ1dHRvbihXRUJfVUlfTlNT
VFJJTkcoQCJTaG93IGRldGFpbHMiLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5n
IiksIHNlbGYsIEBzZWxlY3RvcihzaG93RGV0YWlsc0NsaWNrZWQpKTsKKyAgICBhdXRvIGdvQmFj
ayA9IG1ha2VCdXR0b24oV0VCX1VJX05TU1RSSU5HKEAiR28gYmFjayIsICJBY3Rpb24gZnJvbSBz
YWZlIGJyb3dzaW5nIHdhcm5pbmciKSwgc2VsZiwgQHNlbGVjdG9yKGdvQmFja0NsaWNrZWQpKTsK
KyAgICBhdXRvIGJveCA9IFtbVmlld1R5cGUgbmV3XSBhdXRvcmVsZWFzZV07CiAKLSAgICBTdGFj
a1ZpZXdUeXBlICpib3ggPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3V2l0aFZpZXdzOkBbdG9wLCBt
aWRkbGUsIGJvdHRvbV1dOwotICAgIGJveC53YW50c0xheWVyID0gWUVTOwotICAgIGJveC5sYXll
ci5iYWNrZ3JvdW5kQ29sb3IgPSBbW05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9yXSBDR0Nv
bG9yXTsKLSAgICBib3gubGF5ZXIuY29ybmVyUmFkaXVzID0gNjsKLSAgICBib3guYWxpZ25tZW50
ID0gTlNMYXlvdXRBdHRyaWJ1dGVDZW50ZXJYOwotICAgIFtib3gud2lkdGhBbmNob3IgY29uc3Ry
YWludEVxdWFsVG9Db25zdGFudDptYXhXaWR0aF0uYWN0aXZlID0gdHJ1ZTsKLSAgICBib3guZWRn
ZUluc2V0cyA9IHsgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6
ZSB9OwotICAgIFtib3ggc2V0SHVnZ2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJl
ZCBmb3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsK
LSAgICBbc2VsZiBhZGRWaWV3OmJveCBpbkdyYXZpdHk6TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVy
XTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgTlNDb2xvciAqY29sb3IgPSBbTlNDb2xvciB3aW5k
b3dCYWNrZ3JvdW5kQ29sb3JdOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgd29ya2lu
ZyBvbiBpT1MuCi0gICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxv
YWQ6Olllcyk7CisgICAgVUlDb2xvciAqY29sb3IgPSBbVUlDb2xvciBibHVlQ29sb3JdOyAvLyBG
SVhNRTogVGhpcyBzaG91bGQgbm90IGJlIGJsdWUuCiAjZW5kaWYKKyAgICBzZXRCYWNrZ3JvdW5k
KGJveCwgY29sb3IsIDYpOworCisgICAgZm9yIChWaWV3VHlwZSAqdmlldyBpbiBAW2V4Y2xhbWF0
aW9uUG9pbnQsIHRpdGxlLCB3YXJuaW5nLCBnb0JhY2ssIHNob3dEZXRhaWxzLCBib3hdKQorICAg
ICAgICB2aWV3LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzID0gTk87
CisgICAgZm9yIChWaWV3VHlwZSAqdmlldyBpbiBAW2V4Y2xhbWF0aW9uUG9pbnQsIHRpdGxlLCB3
YXJuaW5nLCBnb0JhY2ssIHNob3dEZXRhaWxzXSkKKyAgICAgICAgW2JveCBhZGRTdWJ2aWV3OnZp
ZXddOworICAgIFtzZWxmIGFkZFN1YnZpZXc6Ym94XTsKKworICAgIF9ib3hCb3R0b21Db25zdHJh
aW50ID0gW1tnb0JhY2suYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gu
Ym90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdOworCisg
ICAgW05TTGF5b3V0Q29uc3RyYWludCBhY3RpdmF0ZUNvbnN0cmFpbnRzOkBbCisgICAgICAgIF9i
b3hCb3R0b21Db25zdHJhaW50LmdldCgpLAorICAgICAgICBbW3NlbGYudG9wQW5jaG9yIGFuY2hv
cldpdGhPZmZzZXRUb0FuY2hvcjpib3gudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hv
cjpbYm94LmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6c2VsZi5ib3R0b21B
bmNob3JdXSwKKyAgICAgICAgW1tzZWxmLmxlZnRBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5j
aG9yOmJveC5sZWZ0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbYm94LnJpZ2h0QW5j
aG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpzZWxmLnJpZ2h0QW5jaG9yXV0sCisKKyAgICAg
ICAgW2JveC53aWR0aEFuY2hvciBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDpt
YXhXaWR0aF0sCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWludExlc3NUaGFuT3JF
cXVhbFRvQW5jaG9yOnNlbGYud2lkdGhBbmNob3JdLAorICAgICAgICBbW2JveC5sZWFkaW5nQW5j
aG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjp3YXJuaW5nLmxlYWRpbmdBbmNob3JdIGNvbnN0
cmFpbnRHcmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBb
W3dhcm5pbmcudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50cmFp
bGluZ0FuY2hvcl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWFyZ2lu
U2l6ZV0sCisgICAgICAgIFtbdGl0bGUudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRv
QW5jaG9yOmJveC50cmFpbGluZ0FuY2hvcl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRv
Q29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisKKyAgICAgICAgW1tib3gudG9wQW5jaG9yIGFuY2hvcldp
dGhPZmZzZXRUb0FuY2hvcjp0aXRsZS50b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3Rh
bnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbdGl0bGUuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhP
ZmZzZXRUb0FuY2hvcjp3YXJuaW5nLnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFu
dDptYXJnaW5TaXplXSwKKyAgICAgICAgW1t0aXRsZS50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNl
dFRvQW5jaG9yOmV4Y2xhbWF0aW9uUG9pbnQudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0Fu
Y2hvcjpbZXhjbGFtYXRpb25Qb2ludC5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5j
aG9yOnRpdGxlLmJvdHRvbUFuY2hvcl1dLAorCisgICAgICAgIFtbYm94LmxlYWRpbmdBbmNob3Ig
YW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmV4Y2xhbWF0aW9uUG9pbnQubGVhZGluZ0FuY2hvcl0g
Y29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tleGNsYW1h
dGlvblBvaW50LnRyYWlsaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjp0aXRsZS5s
ZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAg
ICAgICBbW2dvQmFjay50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94
LnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAor
ICAgICAgICBbW3dhcm5pbmcuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpn
b0JhY2sudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAor
ICAgICAgICBbZ29CYWNrLnRvcEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpzaG93RGV0
YWlscy50b3BBbmNob3JdLAorICAgICAgICBbW3Nob3dEZXRhaWxzLnRyYWlsaW5nQW5jaG9yIGFu
Y2hvcldpdGhPZmZzZXRUb0FuY2hvcjpnb0JhY2subGVhZGluZ0FuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9Db25zdGFudDptYXJnaW5TaXplXQorICAgIF1dOwogICAgIHJldHVybiBzZWxmOwogfQog
CistICh2b2lkKWxheW91dFRleHQKK3sKKyAgICBmb3IgKFZpZXdUeXBlICp2aWV3IGluIHNlbGYu
c3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MpCisgICAgICAgIFt2aWV3IGludmFsaWRhdGVJ
bnRyaW5zaWNDb250ZW50U2l6ZV07Cit9CisKICNpZiBQTEFURk9STShNQUMpCiAtICh2b2lkKWxh
eW91dAogewotICAgIGZvciAoTlNWaWV3ICp2aWV3IGluIHNlbGYuc3Vidmlld3MuZmlyc3RPYmpl
Y3Quc3Vidmlld3MpCi0gICAgICAgIFt2aWV3IGludmFsaWRhdGVJbnRyaW5zaWNDb250ZW50U2l6
ZV07CisgICAgW3NlbGYgbGF5b3V0VGV4dF07CiAgICAgW3N1cGVyIGxheW91dF07CiB9CisjZWxz
ZQorLSAodm9pZClsYXlvdXRTdWJ2aWV3cworeworICAgIFtzZWxmIGxheW91dFRleHRdOworICAg
IFtzdXBlciBsYXlvdXRTdWJ2aWV3c107Cit9CiAjZW5kaWYKIAogLSAodm9pZClkZWFsbG9jCkBA
IC0yNzMsNyArMzQ0LDcgQEAgLSAodm9pZClnb0JhY2tDbGlja2VkCiAgICAgICAgIF9jb21wbGV0
aW9uSGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6Tm8pOwogfQogCi0tICh2b2lk
KWNsaWNrZWRPbkxpbms6KGlkKWxpbmsKKy0gKHZvaWQpY2xpY2tlZE9uTGluazooTlNVUkwgKils
aW5rCiB7CiAgICAgaWYgKCFfY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybjsKQEAg
LTMwNiwxNiArMzc3LDIzIEBAIC0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQpbGluawogCiAtICh2
b2lkKXNob3dEZXRhaWxzQ2xpY2tlZAogewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU1N0YWNr
VmlldyAqYm94ID0gc2VsZi52aWV3cy5maXJzdE9iamVjdDsKLSAgICBOU1N0YWNrVmlldyAqYm90
dG9tID0gYm94LnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKnNob3dEZXRhaWxzQnV0
dG9uID0gYm90dG9tLnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIFtib3R0b20gcmVtb3ZlVmlldzpz
aG93RGV0YWlsc0J1dHRvbl07Ci0gICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqZGV0YWlscyA9
IFtXS1NhZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzpkZXRhaWxz
VGV4dCgqX3Jlc3VsdCkgbGlua1RhcmdldDpzZWxmXTsKLSAgICBbYm94IGFkZFZpZXc6ZGV0YWls
cyBpbkdyYXZpdHk6TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVyXTsKLSNlbHNlCi0gICAgLy8gRklY
TUU6IEdldCB0aGlzIHdvcmtpbmcgb24gaU9TLgotI2VuZGlmCisgICAgVmlld1R5cGUgKmJveCA9
IHNlbGYuc3Vidmlld3MuZmlyc3RPYmplY3Q7CisgICAgQnV0dG9uVHlwZSAqc2hvd0RldGFpbHMg
PSBib3guc3Vidmlld3MubGFzdE9iamVjdDsKKyAgICBbc2hvd0RldGFpbHMgcmVtb3ZlRnJvbVN1
cGVydmlld107CisgICAgVmlld1R5cGUgKmdvQmFjayA9IGJveC5zdWJ2aWV3cy5sYXN0T2JqZWN0
OworCisgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqdGV4dCA9IGRldGFpbHNUZXh0KCpf
cmVzdWx0KTsKKyAgICBbdGV4dCBhZGRBdHRyaWJ1dGVzOkB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6
W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdIH0gcmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgdGV4dC5sZW5ndGgpXTsKKyAgICBXS1NhZmVCcm93c2luZ1RleHRWaWV3ICpkZXRhaWxzID0g
W1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOnRleHQgbGlu
a1RhcmdldDpzZWxmXTsKKyAgICBkZXRhaWxzLnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50
b0NvbnN0cmFpbnRzID0gTk87CisgICAgW2JveCBhZGRTdWJ2aWV3OmRldGFpbHNdOworICAgIFtO
U0xheW91dENvbnN0cmFpbnQgZGVhY3RpdmF0ZUNvbnN0cmFpbnRzOkBbX2JveEJvdHRvbUNvbnN0
cmFpbnQuZ2V0KCldXTsKKyAgICBbTlNMYXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWlu
dHM6QFsKKyAgICAgICAgW1tnb0JhY2suYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0Fu
Y2hvcjpkZXRhaWxzLnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5T
aXplXSwKKyAgICAgICAgW1tkZXRhaWxzLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9B
bmNob3I6Ym94LmJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5T
aXplXSwKKyAgICAgICAgW1tib3gubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNo
b3I6ZGV0YWlscy5sZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5PckVxdWFsVG9D
b25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tkZXRhaWxzLnRyYWlsaW5nQW5jaG9yIGFu
Y2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gudHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRHcmVh
dGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgIF1dOwogfQogCiBAZW5k
CkBAIC0zMjcsNDUgKzQwNSw2NyBAQCArIChpbnN0YW5jZXR5cGUpdmlld1dpdGhBdHRyaWJ1dGVk
U3RyaW5nCiAgICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqaW5zdGFuY2UgPSBbW3NlbGYgbmV3
XSBhdXRvcmVsZWFzZV07CiAgICAgaWYgKCFpbnN0YW5jZSkKICAgICAgICAgcmV0dXJuIG5pbDsK
LSAgICBpbnN0YW5jZS0+X3RhcmdldCA9IHRhcmdldDsKKyAgICBpbnN0YW5jZS0+X2RlbGVnYXRl
ID0gYWRvcHROUyhbW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXdEZWxlZ2F0ZSBhbGxvY10gaW5pdFdp
dGhUYXJnZXQ6dGFyZ2V0XSk7CisgICAgaW5zdGFuY2UuZGVsZWdhdGUgPSBpbnN0YW5jZS0+X2Rl
bGVnYXRlLmdldCgpOwogCiAgICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBjb2xvck5h
bWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIpOwogICAgIE5TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgKnN0cmluZyA9IFthdHRyaWJ1dGVkU3RyaW5nIG11dGFibGVDb3B5XTsKLSAgICBb
c3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsKLSAgICAgICAgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1
dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yLAotICAgICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltG
b250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXQotICAgIH0gcmFuZ2U6TlNNYWtlUmFu
Z2UoMCwgc3RyaW5nLmxlbmd0aCldOworICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlczpAeyBOU0Zv
cmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfSByYW5nZTpOU01h
a2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKV07CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgW2lu
c3RhbmNlIHNldExpbmtUZXh0QXR0cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfV07Ci0gICAgW2luc3RhbmNlIHNldENvbnRlbnRIdWdn
aW5nUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVkIGZvck9yaWVudGF0aW9uOk5TTGF5
b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxdOwotICAgIFtpbnN0YW5jZSBzZXRDb250
ZW50Q29tcHJlc3Npb25SZXNpc3RhbmNlUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVk
IGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxdOwot
ICAgIFtpbnN0YW5jZS53aWR0aEFuY2hvciBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9Db25z
dGFudDptYXhXaWR0aCAtIDIgKiBtYXJnaW5TaXplXS5hY3RpdmUgPSB0cnVlOwogICAgIFtpbnN0
YW5jZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9yXV07
Ci0gICAgW2luc3RhbmNlLnRleHRTdG9yYWdlIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5n
XTsKKyNlbHNlCisgICAgW2luc3RhbmNlIHNldEJhY2tncm91bmRDb2xvcjpjb2xvck5hbWVkKEAi
V0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpXTsgLy8gRklYTUU6IHRoaXMgc2hvdWxk
IGJlIGJhc2VkIG9uIHRoZSBzaXplLgogI2VuZGlmCisgICAgW2luc3RhbmNlIHNldExpbmtUZXh0
QXR0cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5k
Q29sb3IgfV07CisgICAgW2luc3RhbmNlLnRleHRTdG9yYWdlIGFwcGVuZEF0dHJpYnV0ZWRTdHJp
bmc6c3RyaW5nXTsKKyAgICBpbnN0YW5jZS5lZGl0YWJsZSA9IE5POworCiAgICAgcmV0dXJuIGlu
c3RhbmNlOwogfQogCiArIChpbnN0YW5jZXR5cGUpdmlld1dpdGhTdHJpbmc6KE5TU3RyaW5nICop
c3RyaW5nCiB7Ci0gICAgcmV0dXJuIFtXS1NhZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0
cmlidXRlZFN0cmluZzpbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0
aFN0cmluZzpzdHJpbmddIGF1dG9yZWxlYXNlXSBsaW5rVGFyZ2V0Om5pbF07CisgICAgTlNNdXRh
YmxlQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFN0cmluZyA9IFtbW05TTXV0YWJsZUF0dHJp
YnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnN0cmluZ10gYXV0b3JlbGVhc2VdOwor
ICAgIFthdHRyaWJ1dGVkU3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsgTlNGb250QXR0cmlidXRlTmFt
ZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0gfSByYW5nZTpOU01ha2VSYW5n
ZSgwLCBzdHJpbmcubGVuZ3RoKV07CisgICAgcmV0dXJuIFtXS1NhZmVCcm93c2luZ1RleHRWaWV3
IHZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzphdHRyaWJ1dGVkU3RyaW5nIGxpbmtUYXJnZXQ6bmls
XTsKIH0KIAotLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCistIChDR1NpemUpaW50cmlu
c2ljQ29udGVudFNpemUKIHsKICAgICBbc2VsZi5sYXlvdXRNYW5hZ2VyIGVuc3VyZUxheW91dEZv
clRleHRDb250YWluZXI6c2VsZi50ZXh0Q29udGFpbmVyXTsKICAgICBhdXRvIHNpemUgPSBbc2Vs
Zi5sYXlvdXRNYW5hZ2VyIHVzZWRSZWN0Rm9yVGV4dENvbnRhaW5lcjpzZWxmLnRleHRDb250YWlu
ZXJdLnNpemU7CiAjaWYgUExBVEZPUk0oTUFDKQogICAgIHJldHVybiB7IE5TVmlld05vSW50cmlu
c2ljTWV0cmljLCBzaXplLmhlaWdodCB9OwogI2Vsc2UKLSAgICByZXR1cm4geyBVSVZpZXdOb0lu
dHJpbnNpY01ldHJpYywgc2l6ZS5oZWlnaHQgfTsKKyAgICByZXR1cm4geyBVSVZpZXdOb0ludHJp
bnNpY01ldHJpYywgc2l6ZS5oZWlnaHQgKyB0ZXh0U2l6ZSB9OwogI2VuZGlmCiB9CiAKLS0gKHZv
aWQpY2xpY2tlZE9uTGluazooaWQpbGluayBhdEluZGV4OihOU1VJbnRlZ2VyKWNoYXJJbmRleAor
QGVuZAorCitAaW1wbGVtZW50YXRpb24gV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlCisK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aFRhcmdldDooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICop
dGFyZ2V0Cit7CisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgc2VsZi0+X3RhcmdldCA9IHRhcmdldDsKKyAgICByZXR1cm4gc2VsZjsKK30K
KworI2lmIFBMQVRGT1JNKE1BQykKKy0gKEJPT0wpdGV4dFZpZXc6KE5TVGV4dFZpZXcgKil0ZXh0
VmlldyBjbGlja2VkT25MaW5rOihpZClsaW5rIGF0SW5kZXg6KE5TVUludGVnZXIpY2hhckluZGV4
CiB7CiAgICAgW190YXJnZXQgY2xpY2tlZE9uTGluazpsaW5rXTsKKyAgICByZXR1cm4gWUVTOwog
fQorI2Vsc2UKKy0gKEJPT0wpdGV4dFZpZXc6KFVJVGV4dFZpZXcgKil0ZXh0VmlldyBzaG91bGRJ
bnRlcmFjdFdpdGhVUkw6KE5TVVJMICopVVJMIGluUmFuZ2U6KE5TUmFuZ2UpY2hhcmFjdGVyUmFu
Z2UgaW50ZXJhY3Rpb246KFVJVGV4dEl0ZW1JbnRlcmFjdGlvbilpbnRlcmFjdGlvbgoreworICAg
IFtfdGFyZ2V0IGNsaWNrZWRPbkxpbms6VVJMXTsKKyAgICByZXR1cm4gTk87Cit9CisjZW5kaWYK
IAogQGVuZApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9X
ZWJWaWV3SW1wbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsOSArMjI2LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0Vmlld1NjYWxlKENHRmxvYXQpOwogICAgIENHRmxvYXQgdmlld1NjYWxlKCkg
Y29uc3Q7CiAKLSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93
c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxDb250aW51ZVVuc2Fm
ZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpOwotICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdX
YXJuaW5nKCk7Ci0KICAgICBXS0xheW91dE1vZGUgbGF5b3V0TW9kZSgpIGNvbnN0OwogICAgIHZv
aWQgc2V0TGF5b3V0TW9kZShXS0xheW91dE1vZGUpOwogICAgIHZvaWQgdXBkYXRlU3VwcG9ydHNB
cmJpdHJhcnlMYXlvdXRNb2RlcygpOwpAQCAtNDcxLDggKzQ2OCw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNhdmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9yQ3VycmVudEl0ZW0oKTsKICAgICB2b2lkIHNh
dmVCYWNrRm9yd2FyZFNuYXBzaG90Rm9ySXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtJik7CiAK
LSAgICBXS1NhZmVCcm93c2luZ1dhcm5pbmcgKnNhZmVCcm93c2luZ1dhcm5pbmcoKSB7IHJldHVy
biBtX3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0KCk7IH0KLQogICAgIFZpZXdHZXN0dXJlQ29udHJv
bGxlciogZ2VzdHVyZUNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2dlc3R1cmVDb250cm9sbGVyLmdl
dCgpOyB9CiAgICAgVmlld0dlc3R1cmVDb250cm9sbGVyJiBlbnN1cmVHZXN0dXJlQ29udHJvbGxl
cigpOwogICAgIHZvaWQgc2V0QWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMoYm9v
bCk7CkBAIC03OTgsNyArNzkzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVxdWlyZXNVc2Vy
QWN0aW9uRm9yRWRpdGluZ0NvbnRyb2xzTWFuYWdlciB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2Vk
aXRhYmxlRWxlbWVudElzRm9jdXNlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzVGV4dEluc2Vy
dGlvblJlcGxhY2luZ1NvZnRTcGFjZSB7IGZhbHNlIH07Ci0gICAgUmV0YWluUHRyPFdLU2FmZUJy
b3dzaW5nV2FybmluZz4gbV9zYWZlQnJvd3NpbmdXYXJuaW5nOwogICAgIAogI2lmIEVOQUJMRShE
UkFHX1NVUFBPUlQpCiAgICAgTlNJbnRlZ2VyIG1faW5pdGlhbE51bWJlck9mVmFsaWRJdGVtc0Zv
ckRyb3AgeyAwIH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3
SW1wbC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5tbQkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1OTksMjQgKzE1OTksNiBA
QCBib29sIFdlYlZpZXdJbXBsOjpyZXNpZ25GaXJzdFJlc3BvbmRlcigpCiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKLXZvaWQgV2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0
IFNhZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlh
bnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5k
bGVyKQotewotICAgIGlmICghbV92aWV3KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRs
ZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOwotCi0gICAgbV9zYWZlQnJvd3NpbmdXYXJuaW5n
ID0gYWRvcHROUyhbW1dLU2FmZUJyb3dzaW5nV2FybmluZyBhbGxvY10gaW5pdFdpdGhGcmFtZTpb
bV92aWV3IGJvdW5kc10gc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxl
cjpbd2Vha1RoaXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlcildIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAg
ICAgaWYgKHdlYWtUaGlzKQotICAgICAgICAgICAgW3N0ZDo6ZXhjaGFuZ2Uod2Vha1RoaXMtPm1f
c2FmZUJyb3dzaW5nV2FybmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAg
ICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7Ci0gICAgfV0pOwotICAgIFtt
X3ZpZXcgYWRkU3VidmlldzptX3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0KCldOwotfQotCi12b2lk
IFdlYlZpZXdJbXBsOjpjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKQotewotICAgIFtzdGQ6OmV4
Y2hhbmdlKG1fc2FmZUJyb3dzaW5nV2FybmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmll
d107Ci19Ci0KIGJvb2wgV2ViVmlld0ltcGw6OmlzRm9jdXNlZCgpIGNvbnN0CiB7CiAgICAgaWYg
KG1faW5CZWNvbWVGaXJzdFJlc3BvbmRlcikKQEAgLTE2NTUsNyArMTYzNyw2IEBAIHZvaWQgV2Vi
Vmlld0ltcGw6OnJlbmV3R1N0YXRlKCkKIHZvaWQgV2ViVmlld0ltcGw6OnNldEZyYW1lU2l6ZShD
R1NpemUpCiB7CiAgICAgW21fbGF5b3V0U3RyYXRlZ3kgZGlkQ2hhbmdlRnJhbWVTaXplXTsKLSAg
ICBbbV9zYWZlQnJvd3NpbmdXYXJuaW5nIHNldEZyYW1lOlttX3ZpZXcgYm91bmRzXV07CiB9CiAK
IHZvaWQgV2ViVmlld0ltcGw6OmRpc2FibGVGcmFtZVNpemVVcGRhdGVzKCkKQEAgLTUxNTgsNyAr
NTEzOSw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmZsYWdzQ2hhbmdlZChOU0V2ZW50ICoKICNkZWZp
bmUgTkFUSVZFX01PVVNFX0VWRU5UX0hBTkRMRVJfSU5URVJOQUwoRXZlbnROYW1lKSBcCiAgICAg
dm9pZCBXZWJWaWV3SW1wbDo6RXZlbnROYW1lKE5TRXZlbnQgKmV2ZW50KSBcCiAgICAgeyBcCi0g
ICAgICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cyB8fCBtX3NhZmVCcm93c2luZ1dhcm5p
bmcpIFwKKyAgICAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKSBcCiAgICAgICAgICAg
ICByZXR1cm47IFwKICAgICAgICAgaWYgKE5TVGV4dElucHV0Q29udGV4dCAqY29udGV4dCA9IFtt
X3ZpZXcgaW5wdXRDb250ZXh0XSkgeyBcCiAgICAgICAgICAgICBhdXRvIHdlYWtUaGlzID0gbWFr
ZVdlYWtQdHIoKnRoaXMpOyBcCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFn
ZUNsaWVudEltcGxJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9p
b3MvUGFnZUNsaWVudEltcGxJT1MuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTEx
NSw5ICsxMTUsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKFdlYkNv
cmU6OlRleHRJbmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24pIG92ZXJyaWRlOwogICAg
IHZvaWQgc2V0VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KSBvdmVycmlkZTsK
IAotICAgIHZvaWQgc2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVz
dWx0JiwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNh
ZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2Fm
ZUJyb3dzaW5nV2FybmluZygpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVk
Q29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAgICB2
b2lkIGV4aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQg
dXBkYXRlQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYp
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJ
bXBsSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5tbQkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2
Miw3IEBACiAjaW1wb3J0IDxwYWwvc3BpL2NvY29hL05TS2V5ZWRBcmNoaXZlclNQSS5oPgogI2lt
cG9ydCA8d3RmL0Jsb2NrUHRyLmg+CiAKLSNkZWZpbmUgTUVTU0FHRV9DSEVDSyhhc3NlcnRpb24p
IE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24sIG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3Mo
KS5jb25uZWN0aW9uKCkpCisjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdF
X0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLT5wcm9jZXNzKCku
Y29ubmVjdGlvbigpKQogCiBAaW50ZXJmYWNlIFdLRWRpdENvbW1hbmRPYmpDIDogTlNPYmplY3QK
IHsKQEAgLTE2MSwxOCArMTYxLDE4IEBAIEludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXpl
KCkKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCiB7CiAgICAgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwOTgKLSAg
ICByZXR1cm4gaXNWaWV3VmlzaWJsZSgpIHx8IChtX3dlYlZpZXcgJiYgW21fd2ViVmlldyBfaXNS
ZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVdKTsKKyAgICByZXR1cm4gaXNWaWV3VmlzaWJsZSgp
IHx8IFttX3dlYlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlXTsKIH0KIAogYm9v
bCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCiB7CiAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwOTgKLSAgICByZXR1cm4gaXNW
aWV3V2luZG93QWN0aXZlKCkgfHwgKG1fd2ViVmlldyAmJiBbbV93ZWJWaWV3IF9pc1JldGFpbmlu
Z0FjdGl2ZUZvY3VzZWRTdGF0ZV0pOworICAgIHJldHVybiBpc1ZpZXdXaW5kb3dBY3RpdmUoKSB8
fCBbbV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZV07CiB9CiAKIGJvb2wg
UGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGUoKQogewotICAgIGlmIChpc1ZpZXdJbldpbmRv
dygpICYmICFtX3dlYlZpZXcuX2lzQmFja2dyb3VuZCkKKyAgICBpZiAoaXNWaWV3SW5XaW5kb3co
KSAmJiAhW21fd2ViVmlldyBfaXNCYWNrZ3JvdW5kXSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgCiAgICAgaWYgKFttX3dlYlZpZXcgX2lzU2hvd2luZ1ZpZGVvUGljdHVyZUluUGljdHVyZV0p
CkBAIC0xODcsOCArMTg3LDggQEAgYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3VmlzaWJsZSgp
CiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCiB7CiAgICAgLy8gRklYTUU6
IGluIFdlYktpdFRlc3RSdW5uZXIsIG1fd2ViVmlldyBpcyBuaWwsIHNvIGNoZWNrIHRoZSBjb250
ZW50IHZpZXcgaW5zdGVhZC4KLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICByZXR1cm4gW21f
d2ViVmlldyB3aW5kb3ddOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkp
CisgICAgICAgIHJldHVybiBbd2ViVmlldyB3aW5kb3ddOwogCiAgICAgcmV0dXJuIFttX2NvbnRl
bnRWaWV3IHdpbmRvd107CiB9CkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZGlkQ29tcGxldGVTeW50aGV0aQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkZWNpZGVQb2xp
Y3lGb3JHZW9sb2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYkZyYW1lUHJveHkmIGZyYW1lLCBB
UEk6OlNlY3VyaXR5T3JpZ2luJiBvcmlnaW4sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBbW3dyYXBwZXIobV93ZWJWaWV3LT5fcGFnZS0+cHJvY2Vzcygp
LnByb2Nlc3NQb29sKCkpIF9nZW9sb2NhdGlvblByb3ZpZGVyXSBkZWNpZGVQb2xpY3lGb3JHZW9s
b2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOm9yaWdpbi5zZWN1cml0eU9yaWdpbigpIGZyYW1lOmZy
YW1lIGNvbXBsZXRpb25IYW5kbGVyOnN0ZDo6ZXhjaGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIG51
bGxwdHIpIHZpZXc6bV93ZWJWaWV3XTsKKyAgICBbW3dyYXBwZXIobV93ZWJWaWV3LmdldCgpLT5f
cGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQb29sKCkpIF9nZW9sb2NhdGlvblByb3ZpZGVyXSBkZWNp
ZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOm9yaWdpbi5zZWN1cml0eU9y
aWdpbigpIGZyYW1lOmZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOnN0ZDo6ZXhjaGFuZ2UoY29tcGxl
dGlvbkhhbmRsZXIsIG51bGxwdHIpIHZpZXc6bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUo
KQpAQCAtNDY5LDE2ICs0NjksNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNh
dG9yQW5pCiB7CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJu
aW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFy
aWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVl
VW5zYWZlTG9hZDo6WWVzKTsgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKLXsKLSAgICAvLyBGSVhNRTogSW1w
bGVtZW50LgotfQotCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7CiB9
CkBAIC02OTUsMjMgKzY4NSwyMyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzY3JvbGxpbmdOb2Rl
U2Nyb2xsCiAKIFZlY3RvcjxTdHJpbmc+IFBhZ2VDbGllbnRJbXBsOjptaW1lVHlwZXNXaXRoQ3Vz
dG9tQ29udGVudFByb3ZpZGVycygpCiB7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy5fY29udGVudFBy
b3ZpZGVyUmVnaXN0cnkuX21pbWVUeXBlc1dpdGhDdXN0b21Db250ZW50UHJvdmlkZXJzOworICAg
IHJldHVybiBbbV93ZWJWaWV3IF9jb250ZW50UHJvdmlkZXJSZWdpc3RyeV0uX21pbWVUeXBlc1dp
dGhDdXN0b21Db250ZW50UHJvdmlkZXJzOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZp
Z2F0aW9uR2VzdHVyZURpZEJlZ2luKCkKIHsKICAgICBbbV93ZWJWaWV3IF9uYXZpZ2F0aW9uR2Vz
dHVyZURpZEJlZ2luXTsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZp
ZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7CisgICAgTmF2aWdhdGlvblN0
YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1
cmVEaWRCZWdpbigpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVy
ZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0p
CiB7Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSku
bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgTmF2aWdh
dGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlv
bkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNsaWVu
dEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBh
Z2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0
ZSwgaXRlbSk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3Lmdl
dCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQod2lsbE5hdmlnYXRlLCBpdGVtKTsK
ICAgICBbbV93ZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZF07CiB9CiAKQEAgLTcyMiwx
MiArNzEyLDEyIEBAIHZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGkKIAog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBh
Z2UoKm1fd2ViVmlldy0+X3BhZ2UpLndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7
CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFn
ZSkud2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpCiB7Ci0gICAgTmF2
aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdl
c3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQoKTsKKyAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQ
YWdlKCptX3dlYlZpZXcuZ2V0KCktPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2Fz
UmVtb3ZlZCgpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaXJzdFZpc3VhbGx5Tm9u
RW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKQpAQCAtODQwLDcgKzgzMCw3IEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclEKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIo
cGFzc3dvcmQpOwogICAgIH0pOwogCi0gICAgaWYgKFdLUGFzc3dvcmRWaWV3ICpwYXNzd29yZFZp
ZXcgPSBtX3dlYlZpZXcuX3Bhc3N3b3JkVmlldykgeworICAgIGlmIChXS1Bhc3N3b3JkVmlldyAq
cGFzc3dvcmRWaWV3ID0gW21fd2ViVmlldyBfcGFzc3dvcmRWaWV3XSkgewogICAgICAgICBBU1NF
UlQoZmlsZU5hbWUgPT0gU3RyaW5nIHsgcGFzc3dvcmRWaWV3LmRvY3VtZW50TmFtZSB9KTsKICAg
ICAgICAgW3Bhc3N3b3JkVmlldyBzaG93UGFzc3dvcmRGYWlsdXJlQWxlcnRdOwogICAgICAgICBw
YXNzd29yZFZpZXcudXNlckRpZEVudGVyUGFzc3dvcmQgPSBwYXNzd29yZEhhbmRsZXIuZ2V0KCk7
CkBAIC04NDgsNyArODM4LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVxdWVzdFBhc3N3b3Jk
Rm9yUQogICAgIH0KIAogICAgIFttX3dlYlZpZXcgX3Nob3dQYXNzd29yZFZpZXdXaXRoRG9jdW1l
bnROYW1lOmZpbGVOYW1lIHBhc3N3b3JkSGFuZGxlcjpwYXNzd29yZEhhbmRsZXIuZ2V0KCldOwot
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLmRpZFJl
cXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KCk7CisgICAgTmF2aWdhdGlvblN0YXRl
Ojpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkuZGlkUmVxdWVzdFBhc3N3b3Jk
Rm9yUXVpY2tMb29rRG9jdW1lbnQoKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkocmV2aXNpb24gMjM3ODYz
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwNCw4ICsxMDQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRT
ZWN1cmVJbnB1dFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBub3RpZnlJbnB1dENvbnRleHRB
Ym91dERpc2NhcmRlZENvbXBvc2l0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZWxlY3Rpb25E
aWRDaGFuZ2UoKSBvdmVycmlkZTsKLSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNv
bnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxX
ZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKICAgICAKICNp
ZiBXS19BUElfRU5BQkxFRAogICAgIGJvb2wgc2hvd1NoYXJlU2hlZXQoY29uc3QgV2ViQ29yZTo6
U2hhcmVEYXRhV2l0aFBhcnNlZFVSTCYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29s
KT4mJikgb3ZlcnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNs
aWVudEltcGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4
OSwxOCArNDg5LDYgQEAgUmVmPFZhbGlkYXRpb25CdWJibGU+IFBhZ2VDbGllbnRJbXBsOjpjcgog
ICAgIHJldHVybiBWYWxpZGF0aW9uQnViYmxlOjpjcmVhdGUobV92aWV3LCBtZXNzYWdlLCBzZXR0
aW5ncyk7CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5n
KGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYg
Y29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVybiBj
b21wbGV0aW9uSGFuZGxlcihDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7Ci0gICAgbV9pbXBsLT5z
aG93U2FmZUJyb3dzaW5nV2FybmluZyhyZXN1bHQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIp
KTsKLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkK
LXsKLSAgICBtX2ltcGwtPmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpOwotfQotCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yKFJlZjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5k
aWNhdG9yLCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUgbGlmZXRpbWUpCiB7
CiAgICAgbV9pbXBsLT5zZXRUZXh0SW5kaWNhdG9yKHRleHRJbmRpY2F0b3IuZ2V0KCksIGxpZmV0
aW1lKTsKQEAgLTU2NCw3ICs1NTIsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZWxlY3Rpb25E
aWRDaGFuZ2UoCiAjaWYgV0tfQVBJX0VOQUJMRUQKIGJvb2wgUGFnZUNsaWVudEltcGw6OnNob3dT
aGFyZVNoZWV0KGNvbnN0IFNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmIHNoYXJlRGF0YSwgV1RGOjpD
b21wbGV0aW9uSGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAg
IG1faW1wbC0+c2hvd1NoYXJlU2hlZXQoc2hhcmVEYXRhLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5k
bGVyKSwgbV93ZWJWaWV3KTsKKyAgICBtX2ltcGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwg
V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViVmlldy5nZXQoKS5nZXQoKSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAjZW5kaWYKQEAgLTc1MSwxNiArNzM5LDE2IEBAIHZvaWQgUGFnZUNs
aWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGkKICAgICBtX2ltcGwtPmRpc21pc3NDb250ZW50
UmVsYXRpdmVDaGlsZFdpbmRvd3NXaXRoQW5pbWF0aW9uKHRydWUpOwogCiAjaWYgV0tfQVBJX0VO
QUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21X
ZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7Cisg
ICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlv
blN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlk
QmVnaW4oKTsKICNlbmRpZgogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0
ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBO
YXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9u
R2VzdHVyZVdpbGxFbmQod2lsbE5hdmlnYXRlLCBpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3
ID0gbV93ZWJWaWV3LmdldCgpKQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdl
KCp3ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwg
aXRlbSk7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwogICAgIFVOVVNF
RF9QQVJBTShpdGVtKTsKQEAgLTc3MCw4ICs3NTgsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpu
YXZpZ2F0aW9uR2VzdHVyZVdpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVy
ZURpZEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkK
IHsKICNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmln
YXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0
dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1f
d2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2Vi
Vmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7
CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwogICAgIFVOVVNFRF9QQVJB
TShpdGVtKTsKQEAgLTc4NSw4ICs3NzMsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0
aW9uR2VzdHVyZURpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdhdGlvblNu
YXBzaG90KFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJM
RUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQ
YWdlKCptX3dlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0p
OworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmln
YXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CiAjZW5k
aWYKQEAgLTc5NSw4ICs3ODMsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2
aWdhdGlvCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNu
YXBzaG90KCkKIHsKICNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAg
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmln
YXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9
IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgq
d2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CiAj
ZW5kaWYKIH0KIApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0No
YW5nZUxvZwkocmV2aXNpb24gMjM4MDAzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTgtMTEtMDggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hy
aXN0ZW5zZW5Ad2Via2l0Lm9yZz4KKworICAgICAgICBbaU9TXSBJbXBsZW1lbnQgc2FmZSBicm93
c2luZyBpbiBXZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE5MTQ0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW06
CisgICAgICAgIChjaGVja1RpdGxlQW5kQ2xpY2spOgorICAgICAgICAoVEVTVCk6CisKIDIwMTgt
MTEtMDggIEppZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJl
dmlld2VkLCBhIHF1aWNrIGJ1aWxkIGZpeCBmb3IgcjIzNzk4MwpJbmRleDogVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW0JKHJl
dmlzaW9uIDIzNzg2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
U2FmZUJyb3dzaW5nLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOCArMTM3LDYgQEAgLSAodm9p
ZClsb29rVXBVUkw6KE5TVVJMICopVVJMIGNvbXBsZXRpbwogCiBAZW5kCiAKLSNpZiBQTEFURk9S
TShNQUMpIC8vIEZJWE1FOiBUZXN0IG9uIGlPUyBvbmNlIGltcGxlbWVudGVkLgotCiBzdGF0aWMg
TlNVUkwgKnNpbXBsZVVSTCgpCiB7CiAgICAgcmV0dXJuIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0g
VVJMRm9yUmVzb3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rv
cnk6QCJUZXN0V2ViS2l0QVBJLnJlc291cmNlcyJdOwpAQCAtMTU3LDI4ICsxNTUsNDYgQEAgc3Rh
dGljIFJldGFpblB0cjxXS1dlYlZpZXc+IHNhZmVCcm93c2luZwogICAgIHJldHVybiB3ZWJWaWV3
OwogfQogCisjaWYgUExBVEZPUk0oTUFDKQorc3RhdGljIHZvaWQgY2hlY2tUaXRsZUFuZENsaWNr
KE5TQnV0dG9uICpidXR0b24sIGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgRVhQ
RUNUX1NUUkVRKGJ1dHRvbi50aXRsZS5VVEY4U3RyaW5nLCBleHBlY3RlZFRpdGxlKTsKKyAgICBb
YnV0dG9uIHBlcmZvcm1DbGljazpuaWxdOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGNoZWNrVGl0
bGVBbmRDbGljayhVSUJ1dHRvbiAqYnV0dG9uLCBjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQor
eworICAgIEVYUEVDVF9TVFJFUShbYnV0dG9uIHRpdGxlRm9yU3RhdGU6VUlDb250cm9sU3RhdGVO
b3JtYWxdLlVURjhTdHJpbmcsIGV4cGVjdGVkVGl0bGUpOworICAgIFVJVmlldyAqdGFyZ2V0ID0g
YnV0dG9uLnN1cGVydmlldy5zdXBlcnZpZXc7CisgICAgU0VMIHNlbGVjdG9yID0gTlNTZWxlY3Rv
ckZyb21TdHJpbmcoc3RyY21wKGV4cGVjdGVkVGl0bGUsICJHbyBiYWNrIikgPyBAInNob3dEZXRh
aWxzQ2xpY2tlZCIgOiBAImdvQmFja0NsaWNrZWQiKTsKKyAgICBbdGFyZ2V0IHBlcmZvcm1TZWxl
Y3RvcjpzZWxlY3Rvcl07Cit9CisjZW5kaWYKKwogVEVTVChTYWZlQnJvd3NpbmcsIEdvQmFjaykK
IHsKICAgICBhdXRvIHdlYlZpZXcgPSBzYWZlQnJvd3NpbmdWaWV3KCk7Ci0gICAgTlNWaWV3ICpi
b3R0b20gPSBbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddLnN1YnZpZXdz
LmZpcnN0T2JqZWN0LnN1YnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKmdvQmFjayA9
IChOU0J1dHRvbiAqKWJvdHRvbS5zdWJ2aWV3cy5sYXN0T2JqZWN0OwotICAgIEVYUEVDVF9TVFJF
UShnb0JhY2sudGl0bGUuVVRGOFN0cmluZywgIkdvIGJhY2siKTsKLSAgICBbZ29CYWNrIHBlcmZv
cm1DbGljazpuaWxdOworICAgIGF1dG8gd2FybmluZyA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdX
YXJuaW5nRm9yVGVzdGluZ107CisgICAgYXV0byBib3ggPSB3YXJuaW5nLnN1YnZpZXdzLmZpcnN0
T2JqZWN0OworICAgIGNoZWNrVGl0bGVBbmRDbGljayhib3guc3Vidmlld3NbM10sICJHbyBiYWNr
Iik7CiAgICAgRVhQRUNUX0VRKFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGlu
Z10sIG5pbCk7CiB9CiAKIFRFU1QoU2FmZUJyb3dzaW5nLCBWaXNpdFVuc2FmZVdlYnNpdGUpCiB7
CiAgICAgYXV0byB3ZWJWaWV3ID0gc2FmZUJyb3dzaW5nVmlldygpOwotICAgIE5TVmlldyAqd2Fy
bmluZyA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ107Ci0gICAgTlNW
aWV3ICpib3ggPSB3YXJuaW5nLnN1YnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIE5TQnV0dG9uICpz
aG93RGV0YWlscyA9IChOU0J1dHRvbiAqKWJveC5zdWJ2aWV3cy5sYXN0T2JqZWN0LnN1YnZpZXdz
LmZpcnN0T2JqZWN0OwotICAgIEVYUEVDVF9TVFJFUShzaG93RGV0YWlscy50aXRsZS5VVEY4U3Ry
aW5nLCAiU2hvdyBkZXRhaWxzIik7Ci0gICAgRVhQRUNUX0VRKGJveC5zdWJ2aWV3cy5jb3VudCwg
M3VsbCk7Ci0gICAgW3Nob3dEZXRhaWxzIHBlcmZvcm1DbGljazpuaWxdOwotICAgIEVYUEVDVF9F
UShib3guc3Vidmlld3MuY291bnQsIDR1bGwpOworICAgIGF1dG8gd2FybmluZyA9IFt3ZWJWaWV3
IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ107CisgICAgYXV0byBib3ggPSB3YXJuaW5n
LnN1YnZpZXdzLmZpcnN0T2JqZWN0OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBDbGFzcyBidXR0
b25DbGFzcyA9IFtOU0J1dHRvbiBjbGFzc107CisjZWxzZQorICAgIENsYXNzIGJ1dHRvbkNsYXNz
ID0gW1VJQnV0dG9uIGNsYXNzXTsKKyNlbmRpZgorICAgIEVYUEVDVF9UUlVFKFtib3guc3Vidmll
d3MubGFzdE9iamVjdCBpc0tpbmRPZkNsYXNzOmJ1dHRvbkNsYXNzXSk7CisgICAgY2hlY2tUaXRs
ZUFuZENsaWNrKGJveC5zdWJ2aWV3c1s0XSwgIlNob3cgZGV0YWlscyIpOworICAgIEVYUEVDVF9T
VFJFUShOU1N0cmluZ0Zyb21DbGFzcyhbYm94LnN1YnZpZXdzLmxhc3RPYmplY3QgY2xhc3NdKS5V
VEY4U3RyaW5nLCAiV0tTYWZlQnJvd3NpbmdUZXh0VmlldyIpOwogICAgIEVYUEVDVF9GQUxTRShj
b21taXR0ZWROYXZpZ2F0aW9uKTsKLSAgICBbd2FybmluZyBwZXJmb3JtU2VsZWN0b3I6TlNTZWxl
Y3RvckZyb21TdHJpbmcoQCJjbGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6QCJXS1Zpc2l0VW5z
YWZlV2Vic2l0ZVNlbnRpbmVsIl07CisgICAgW3dhcm5pbmcgcGVyZm9ybVNlbGVjdG9yOk5TU2Vs
ZWN0b3JGcm9tU3RyaW5nKEAiY2xpY2tlZE9uTGluazoiKSB3aXRoT2JqZWN0OltOU1VSTCBVUkxX
aXRoU3RyaW5nOkAiV0tWaXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCJdXTsKICAgICBUZXN0V2Vi
S2l0QVBJOjpVdGlsOjpydW4oJmNvbW1pdHRlZE5hdmlnYXRpb24pOwogfQogCkBAIC0xOTEsOCAr
MjA3LDYgQEAgVEVTVChTYWZlQnJvd3NpbmcsIE5hdmlnYXRpb25DbGVhcnNXYXJuaQogICAgICAg
ICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOwogfQogCi0jZW5kaWYgLy8gUExB
VEZPUk0oTUFDKQotCiBAaW50ZXJmYWNlIE51bGxMb29rdXBDb250ZXh0IDogTlNPYmplY3QKIEBl
bmQKIEBpbXBsZW1lbnRhdGlvbiBOdWxsTG9va3VwQ29udGV4dAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354402</attachid>
            <date>2018-11-09 15:58:29 -0800</date>
            <delta_ts>2018-11-09 21:10:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181109155829.patch</filename>
            <type>text/plain</type>
            <size>59030</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNSw2ICsxMzUxLDcgQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIAogLSAodm9pZClsYXlvdXRTdWJ2aWV3cwogeworICAg
IFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CiAgICAgW3N1cGVy
IGxheW91dFN1YnZpZXdzXTsKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogfQpA
QCAtMzI5MCw2ICszMzA3LDcgQEAgLSAodm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0
KXJlYwogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwogICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkp
OwogfQogCkBAIC0zNTgzLDc2ICszNjAxLDEyMSBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqCiAKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAog
eworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAg
X2ltcGwtPnNjcm9sbFdoZWVsKGV2ZW50KTsKIH0KIAogLSAodm9pZClzd2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAg
ICByZXR1cm47CisKICAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOwogfQogCiAtICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQp
OwogfQogCiAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VE
b3duKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAg
ICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBs
LT5tb3VzZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisg
ICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUVudGVyZWQoZXZlbnQpOwogfQogCiAt
ICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93
c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUV4aXRlZChl
dmVudCk7CiB9CiAKIC0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewor
ICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2lt
cGwtPm90aGVyTW91c2VEb3duKGV2ZW50KTsKIH0KIAogLSAodm9pZClvdGhlck1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwogfQog
CiAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcp
CisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdodE1vdXNlRHJhZ2dlZChldmVudCk7
CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlVXAoZXZlbnQpOwogfQogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAg
IHJldHVybjsKKwogICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5nZVdpdGhFdmVudChldmVudCk7CiB9
CiAKQEAgLTQ2MzUsNyArNDY5OCw3IEBAIC0gKHZvaWQpX3Bhc3RlQXNRdW90YXRpb246KGlkKXNl
bmRlcgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERFRkFV
TFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2b2lk
KV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNj
cmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKQEAgLTY2NjYsMTUgKzY3MjksMTIgQEAgLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZQogCiAjaWYgUExBVEZPUk0oTUFDKQogLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZl
QnJvd3NpbmdXYXJuaW5nKCk7Ci19CiAjZWxzZQogLSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nCisjZW5kaWYKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
c2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKIH0KLSNlbmRpZgogCiAtIChfV0tJbnNwZWN0b3Ig
KilfaW5zcGVjdG9yCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBAQCBjbGFzcyBBdHRhY2htZW50
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2Fk
IDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNsYXNzIFZpZXdTbmFwc2hvdDsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CiB9CiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnNl
cnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpvcHRpb25hbDxCT09MPilfcmVz
b2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKIAogLSAo
V0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKIEBjbGFzcyBX
S1dlYlZpZXc7CiAKQEAgLTQ4LDkgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBOU0ZpbGVXcmFwcGVy
ICphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKICAgICBOU1NldCAqc2Vy
aWFsaXphYmxlRmlsZVdyYXBwZXJDbGFzc2VzKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKKyAgICB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dh
cm5pbmcoKSBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxOSBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvCiAjZW5kaWYKIH0KIAordm9p
ZCBQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZl
QnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAg
ICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOworICAgIGVsc2UKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpObyk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGxDb2NvYTo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKK3sKKyAgICBbbV93ZWJW
aWV3IF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworfQorCiAjaWYgRU5BQkxFKEFUVEFDSE1F
TlRfRUxFTUVOVCkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRJbnNlcnRBdHRhY2ht
ZW50KEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCkBA
IC02OSw3ICs4Miw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6ZGlkUmVtb3ZlQXR0YWMK
IE5TRmlsZVdyYXBwZXIgKlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJbnN0
YW5jZSgpIGNvbnN0CiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjbHMgPSBtX3dl
YlZpZXcuY29uZmlndXJhdGlvbi5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmls
ZVdyYXBwZXIgc2VsZl07CisgICAgQ2xhc3MgY2xzID0gW21fd2ViVmlldyBjb25maWd1cmF0aW9u
XS5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmlsZVdyYXBwZXIgc2VsZl07CiAg
ICAgcmV0dXJuIFtjbHMgYWxsb2NdOwogI2Vsc2UKICAgICByZXR1cm4gbmlsOwpAQCAtODAsNyAr
OTMsNyBAQCBOU1NldCAqUGFnZUNsaWVudEltcGxDb2NvYTo6c2VyaWFsaXphYmxlCiB7CiAgICAg
Q2xhc3MgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MgPSBOU0ZpbGVXcmFwcGVyLnNlbGY7CiAjaWYg
V0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IG1f
d2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzczsKKyAgICBD
bGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IFttX3dlYlZpZXcgY29uZmlndXJhdGlv
bl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOwogICAgIGlmIChjb25maWd1cmVkRmlsZVdy
YXBwZXJDbGFzcyAmJiBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyAhPSBkZWZhdWx0RmlsZVdy
YXBwZXJDbGFzcykKICAgICAgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0czpjb25maWd1
cmVkRmlsZVdyYXBwZXJDbGFzcywgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MsIG5pbF07CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2Fy
bmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2Fm
ZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTYgKzQ2LDE3IEBAIGVudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDogYm9vbDsKIAog
I2lmIFBMQVRGT1JNKE1BQykKIHVzaW5nIFJlY3RUeXBlID0gTlNSZWN0OwotdXNpbmcgU3RhY2tW
aWV3VHlwZSA9IE5TU3RhY2tWaWV3OwordXNpbmcgVmlld1R5cGUgPSBOU1ZpZXc7CiAjZWxzZQog
dXNpbmcgUmVjdFR5cGUgPSBDR1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gVUlTdGFja1Zp
ZXc7Cit1c2luZyBWaWV3VHlwZSA9IFVJVmlldzsKICNlbmRpZgogCi1AaW50ZXJmYWNlIFdLU2Fm
ZUJyb3dzaW5nV2FybmluZyA6IFN0YWNrVmlld1R5cGUgeworQGludGVyZmFjZSBXS1NhZmVCcm93
c2luZ1dhcm5pbmcgOiBWaWV3VHlwZSB7CiBAcGFja2FnZQogICAgIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYm
KT4gX2NvbXBsZXRpb25IYW5kbGVyOwogICAgIFJlZlB0cjxjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdD4gX3Jlc3VsdDsKKyAgICBSZXRhaW5QdHI8TlNBcnJheTxOU0xheW91dENvbnN0
cmFpbnQgKj4+IF9jb25zdHJhaW50czsKIH0KIAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJh
bWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93c2luZ1Jlc3VsdDooY29uc3QgV2ViS2l0OjpTYWZl
QnJvd3NpbmdSZXN1bHQmKXJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+
JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbQkocmV2aXNpb24gMjM3
ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJu
aW5nLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw0OSArMzMsMTAwIEBACiAjaW1wb3J0IDx3dGYv
QmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9MYW5ndWFnZS5oPgogCi1jb25zdCBDR0Zsb2F0IGV4
Y2xhbWF0aW9uUG9pbnRTaXplID0gMzA7Ci1jb25zdCBDR0Zsb2F0IHRleHRTaXplID0gMTM7Citj
b25zdGV4cHIgQ0dGbG9hdCBleGNsYW1hdGlvblBvaW50U2l6ZSA9IDMwOworY29uc3RleHByIENH
RmxvYXQgbWFyZ2luU2l6ZSA9IDIwOworY29uc3RleHByIENHRmxvYXQgbWF4V2lkdGggPSA2NzU7
Citjb25zdGV4cHIgQ0dGbG9hdCB0aXRsZVNpemUgPSAyNjsKKwogI2lmIFBMQVRGT1JNKE1BQykK
LWNvbnN0IENHRmxvYXQgbWFyZ2luU2l6ZSA9IDIwOwotY29uc3Qgc2l6ZV90IG1heFdpZHRoID0g
NjAwOworY29uc3RleHByIENHRmxvYXQgdGV4dFNpemUgPSAxNDsKIHVzaW5nIENvbG9yVHlwZSA9
IE5TQ29sb3I7CiB1c2luZyBGb250VHlwZSA9IE5TRm9udDsKLXVzaW5nIFZpZXdUeXBlID0gTlNW
aWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBOU0JlemllclBhdGg7CiB1c2luZyBUZXh0Vmll
d1R5cGUgPSBOU1RleHRWaWV3OwordXNpbmcgQnV0dG9uVHlwZSA9IE5TQnV0dG9uOwordXNpbmcg
QWxpZ25tZW50VHlwZSA9IE5TTGF5b3V0QXR0cmlidXRlOwogI2Vsc2UKK2NvbnN0ZXhwciBDR0Zs
b2F0IHRleHRTaXplID0gMjA7CiB1c2luZyBDb2xvclR5cGUgPSBVSUNvbG9yOwogdXNpbmcgRm9u
dFR5cGUgPSBVSUZvbnQ7Ci11c2luZyBWaWV3VHlwZSA9IFVJVmlldzsKLXVzaW5nIEJlemllclBh
dGhUeXBlID0gVUlCZXppZXJQYXRoOwogdXNpbmcgVGV4dFZpZXdUeXBlID0gVUlUZXh0VmlldzsK
K3VzaW5nIEJ1dHRvblR5cGUgPSBVSUJ1dHRvbjsKK3VzaW5nIEFsaWdubWVudFR5cGUgPSBVSVN0
YWNrVmlld0FsaWdubWVudDsKICNlbmRpZgogCi1zdGF0aWMgaWQgY29uZmlybU1hbHdhcmVTZW50
aW5lbCgpCitlbnVtIGNsYXNzIFdhcm5pbmdJdGVtIDogdWludDhfdCB7CisgICAgQmFja2dyb3Vu
ZCwKKyAgICBCb3hCYWNrZ3JvdW5kLAorICAgIEV4Y2xhbWF0aW9uUG9pbnQsCisgICAgVGl0bGVU
ZXh0LAorICAgIE1lc3NhZ2VUZXh0LAorICAgIFNob3dEZXRhaWxzQnV0dG9uLAorICAgIEdvQmFj
a0J1dHRvbgorfTsKKworc3RhdGljIE5TVVJMICpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCkKIHsK
LSAgICByZXR1cm4gQCJXS0NvbmZpcm1NYWx3YXJlU2VudGluZWwiOworICAgIHJldHVybiBbTlNV
UkwgVVJMV2l0aFN0cmluZzpAIldLQ29uZmlybU1hbHdhcmVTZW50aW5lbCJdOwogfQogCi1zdGF0
aWMgaWQgdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKQorc3RhdGljIE5TVVJMICp2aXNpdFVu
c2FmZVdlYnNpdGVTZW50aW5lbCgpCiB7Ci0gICAgcmV0dXJuIEAiV0tWaXNpdFVuc2FmZVdlYnNp
dGVTZW50aW5lbCI7CisgICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tWaXNpdFVu
c2FmZVdlYnNpdGVTZW50aW5lbCJdOwogfQogCi1zdGF0aWMgQ29sb3JUeXBlICpjb2xvck5hbWVk
KE5TU3RyaW5nICpuYW1lKQorc3RhdGljIENvbG9yVHlwZSAqY29sb3JGb3JJdGVtKFdhcm5pbmdJ
dGVtIGl0ZW0sIFZpZXdUeXBlICp3YXJuaW5nKQogeworICAgIEFTU0VSVChbd2FybmluZyBpc0tp
bmRPZkNsYXNzOltXS1NhZmVCcm93c2luZ1dhcm5pbmcgY2xhc3NdXSk7CiAjaWYgUExBVEZPUk0o
TUFDKQorCisgICAgYXV0byBjb2xvck5hbWVkID0gW10gKE5TU3RyaW5nICpuYW1lKSAtPiBDb2xv
clR5cGUqIHsKICNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCi0gICAgcmV0dXJuIFtOU0NvbG9yIGNv
bG9yTmFtZWQ6bmFtZSBidW5kbGU6W05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29t
LmFwcGxlLldlYktpdCJdXTsKKyAgICAgICAgcmV0dXJuIFtOU0NvbG9yIGNvbG9yTmFtZWQ6bmFt
ZSBidW5kbGU6W05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktp
dCJdXTsKICNlbHNlCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CiAjZW5k
aWYKKyAgICB9OworCisgICAgc3dpdGNoIChpdGVtKSB7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6
QmFja2dyb3VuZDoKKyAgICAgICAgcmV0dXJuIGNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dh
cm5pbmdCYWNrZ3JvdW5kIik7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZDoK
KyAgICAgICAgcmV0dXJuIFtOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl07CisgICAgY2Fz
ZSBXYXJuaW5nSXRlbTo6VGl0bGVUZXh0OgorICAgIGNhc2UgV2FybmluZ0l0ZW06OkV4Y2xhbWF0
aW9uUG9pbnQ6CisgICAgICAgIHJldHVybiBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJu
aW5nVGl0bGUiKTsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dDoKKyAgICAgICAg
cmV0dXJuIGNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdUZXh0Iik7CisgICAgY2Fz
ZSBXYXJuaW5nSXRlbTo6U2hvd0RldGFpbHNCdXR0b246CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6
R29CYWNrQnV0dG9uOgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICB9CiAjZWxzZQotICAgIHJldHVybiBbVUlDb2xvciBjb2xvck5hbWVkOm5h
bWUgaW5CdW5kbGU6W05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldl
YktpdCJdIGNvbXBhdGlibGVXaXRoVHJhaXRDb2xsZWN0aW9uOm5pbF07CisgICAgVUlDb2xvciAq
cmVkID0gW1VJQ29sb3IgY29sb3JXaXRoUmVkOjAuOTk4IGdyZWVuOjAuMjM5IGJsdWU6MC4yMzMg
YWxwaGE6MS4wXTsKKyAgICBVSUNvbG9yICp3aGl0ZSA9IFtVSUNvbG9yIHdoaXRlQ29sb3JdOwor
ICAgIGJvb2wgbmFycm93ID0gd2FybmluZy5mcmFtZS5zaXplLndpZHRoIDwgNTAwOworCisgICAg
c3dpdGNoIChpdGVtKSB7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6QmFja2dyb3VuZDoKKyAgICAg
ICAgcmV0dXJuIHJlZDsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpCb3hCYWNrZ3JvdW5kOgorICAg
ICAgICByZXR1cm4gbmFycm93ID8gcmVkIDogd2hpdGU7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6
VGl0bGVUZXh0OgorICAgIGNhc2UgV2FybmluZ0l0ZW06OkV4Y2xhbWF0aW9uUG9pbnQ6CisgICAg
ICAgIHJldHVybiBuYXJyb3cgPyB3aGl0ZSA6IHJlZDsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpN
ZXNzYWdlVGV4dDoKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpTaG93RGV0YWlsc0J1dHRvbjoKKyAg
ICAgICAgcmV0dXJuIG5hcnJvdyA/IHdoaXRlIDogW1VJQ29sb3IgZGFya1RleHRDb2xvcl07Cisg
ICAgY2FzZSBXYXJuaW5nSXRlbTo6R29CYWNrQnV0dG9uOgorICAgICAgICByZXR1cm4gbmFycm93
ID8gd2hpdGUgOiB3YXJuaW5nLnRpbnRDb2xvcjsKKyAgICB9CiAjZW5kaWYKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbmlsOwogfQogCi0jaWYgUExBVEZPUk0oTUFDKQog
c3RhdGljIHZvaWQgcmVwbGFjZShOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIE5T
U3RyaW5nICp0b1JlcGxhY2UsIE5TU3RyaW5nICpyZXBsYWNlV2l0aCkKIHsKICAgICBbc3RyaW5n
IHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5nLnN0cmluZyByYW5nZU9mU3RyaW5nOnRv
UmVwbGFjZV0gd2l0aFN0cmluZzpyZXBsYWNlV2l0aF07CkBAIC05MCw3ICsxNDEsNiBAQCBzdGF0
aWMgdm9pZCBhZGRMaW5rQW5kUmVwbGFjZShOU011dGFibGVBCiAgICAgfSByYW5nZTpOU01ha2VS
YW5nZSgwLCByZXBsYWNlV2l0aC5sZW5ndGgpXTsKICAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0
ZXJzSW5SYW5nZTpbc3RyaW5nLnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aEF0
dHJpYnV0ZWRTdHJpbmc6c3RyaW5nV2l0aExpbmtdOwogfQotI2VuZGlmCiAKIEBpbnRlcmZhY2Ug
V0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW50IDogVmlld1R5cGUKIEBlbmQKQEAgLTk5LDIy
ICsxNDksMzkgQEAgQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbgogCiAt
ICh2b2lkKWRyYXdSZWN0OihSZWN0VHlwZSlyZWN0CiB7Ci0gICAgW2NvbG9yTmFtZWQoQCJXS1Nh
ZmVCcm93c2luZ1dhcm5pbmdUaXRsZSIpIHNldF07Ci0jaWYgUExBVEZPUk0oTUFDKQotI2RlZmlu
ZSBhZGRBcmNXaXRoQ2VudGVyIGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcgotICAg
IE5TUmVjdCBzcXVhcmUgPSBOU01ha2VSZWN0KDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBl
eGNsYW1hdGlvblBvaW50U2l6ZSk7CisgICAgY29uc3RleHByIENHRmxvYXQgY2VudGVyWCA9IGV4
Y2xhbWF0aW9uUG9pbnRTaXplIC8gMjsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBwb2ludENlbnRl
clkgPSBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDcgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9h
dCBwb2ludFJhZGl1cyA9IDIuMjUgKiBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDMwOworICAgIGNv
bnN0ZXhwciBDR0Zsb2F0IGxpbmVCb3R0b21DZW50ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUg
KiAxMyAvIDMwOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVUb3BDZW50ZXJZID0gZXhjbGFt
YXRpb25Qb2ludFNpemUgKiAyMyAvIDMwOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVSYWRp
dXMgPSAxLjc1ICogZXhjbGFtYXRpb25Qb2ludFNpemUgLyAzMDsKKyAgICBWaWV3VHlwZSAqd2Fy
bmluZyA9IHNlbGYuc3VwZXJ2aWV3LnN1cGVydmlldzsKKyNpZiBQTEFURk9STShNQUMpCisgICAg
W2NvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6RXhjbGFtYXRpb25Qb2ludCwgd2FybmluZykgc2V0
XTsKKyAgICBOU0JlemllclBhdGggKmV4Y2xhbWF0aW9uUG9pbnQgPSBbTlNCZXppZXJQYXRoIGJl
emllclBhdGhXaXRoT3ZhbEluUmVjdDpOU01ha2VSZWN0KDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRT
aXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSldOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVu
ZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBsaW5lQm90dG9tQ2VudGVy
WSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAgY2xvY2t3aXNl
OllFU107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNXaXRo
Q2VudGVyOiB7IGNlbnRlclgsIGxpbmVUb3BDZW50ZXJZIH0gcmFkaXVzOmxpbmVSYWRpdXMgc3Rh
cnRBbmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlv
blBvaW50IGxpbmVUb1BvaW50OiB7IGNlbnRlclggKyBsaW5lUmFkaXVzLCBsaW5lQm90dG9tQ2Vu
dGVyWSB9XTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dp
dGhDZW50ZXI6IHsgY2VudGVyWCwgcG9pbnRDZW50ZXJZIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0
YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAgY2xvY2t3aXNlOllFU107CisgICAgW2V4Y2xhbWF0aW9u
UG9pbnQgYXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50
Q2VudGVyWSB9IHJhZGl1czpwb2ludFJhZGl1cyBzdGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAg
Y2xvY2t3aXNlOllFU107CiAjZWxzZQotICAgIENHUmVjdCBzcXVhcmUgPSBDR1JlY3RNYWtlKDAs
IDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSk7CisgICAgYXV0
byBmbGlwID0gW10gKGF1dG8geSkgeworICAgICAgICByZXR1cm4gZXhjbGFtYXRpb25Qb2ludFNp
emUgLSB5OworICAgIH07CisgICAgW2NvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dy
b3VuZCwgd2FybmluZykgc2V0XTsKKyAgICBhdXRvIHNxdWFyZSA9IENHUmVjdE1ha2UoMCwgMCwg
ZXhjbGFtYXRpb25Qb2ludFNpemUsIGV4Y2xhbWF0aW9uUG9pbnRTaXplKTsKKyAgICBbW1VJQmV6
aWVyUGF0aCBiZXppZXJQYXRoV2l0aFJlY3Q6c3F1YXJlXSBmaWxsXTsKKyAgICAKKyAgICBbY29s
b3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpFeGNsYW1hdGlvblBvaW50LCB3YXJuaW5nKSBzZXRdOwor
ICAgIFVJQmV6aWVyUGF0aCAqZXhjbGFtYXRpb25Qb2ludCA9IFtVSUJlemllclBhdGggYmV6aWVy
UGF0aFdpdGhPdmFsSW5SZWN0OnNxdWFyZV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJj
V2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlwKGxpbmVUb3BDZW50ZXJZKSB9IHJhZGl1czpsaW5l
UmFkaXVzIHN0YXJ0QW5nbGU6MiAqIHBpRG91YmxlIGVuZEFuZ2xlOnBpRG91YmxlIGNsb2Nrd2lz
ZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJY
LCBmbGlwKGxpbmVCb3R0b21DZW50ZXJZKSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6
cGlEb3VibGUgZW5kQW5nbGU6MCBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50
IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChwb2ludENlbnRlclkpIH0gcmFkaXVz
OnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6MCBlbmRBbmdsZTpwaURvdWJsZSBjbG9ja3dpc2U6Tk9d
OworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxp
cChwb2ludENlbnRlclkpIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUg
ZW5kQW5nbGU6cGlEb3VibGUgKiAyIGNsb2Nrd2lzZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9p
bnQgYWRkTGluZVRvUG9pbnQ6IHsgY2VudGVyWCArIGxpbmVSYWRpdXMsIGZsaXAobGluZUJvdHRv
bUNlbnRlclkpIH1dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZExpbmVUb1BvaW50OiB7IGNl
bnRlclggKyBsaW5lUmFkaXVzLCBmbGlwKGxpbmVUb3BDZW50ZXJZKSB9XTsKICNlbmRpZgotICAg
IEJlemllclBhdGhUeXBlICpleGNsYW1hdGlvblBvaW50ID0gW0JlemllclBhdGhUeXBlIGJlemll
clBhdGhXaXRoT3ZhbEluUmVjdDpzcXVhcmVdOwotICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFy
Y1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2ludFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50
U2l6ZSAqIDEzIC8gMzAgfSByYWRpdXM6MS43NSBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNs
b2Nrd2lzZTpZRVNdOwotICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsg
ZXhjbGFtYXRpb25Qb2ludFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDIzIC8gMzAg
fSByYWRpdXM6MS43NSBzdGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107
Ci0gICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBleGNsYW1hdGlvblBv
aW50U2l6ZSAvIDIsIGV4Y2xhbWF0aW9uUG9pbnRTaXplICogNyAvIDMwIH0gcmFkaXVzOjIuMjUg
c3RhcnRBbmdsZTowIGVuZEFuZ2xlOjE4MCBjbG9ja3dpc2U6WUVTXTsKLSAgICBbZXhjbGFtYXRp
b25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhj
bGFtYXRpb25Qb2ludFNpemUgKiA3IC8gMzAgfSByYWRpdXM6Mi4yNSBzdGFydEFuZ2xlOjE4MCBl
bmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107CiAgICAgW2V4Y2xhbWF0aW9uUG9pbnQgZmlsbF07
Ci0jaWYgUExBVEZPUk0oTUFDKQotI3VuZGVmIGFkZEFyY1dpdGhDZW50ZXIKLSNlbmRpZgogfQog
CiAtIChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUKQEAgLTEyNCw3ICsxOTEsNiBAQCAtIChO
U1NpemUpaW50cmluc2ljQ29udGVudFNpemUKIAogQGVuZAogCi0jaWYgUExBVEZPUk0oTUFDKQog
c3RhdGljIE5TVVJMICpyZXBvcnRBbkVycm9yVVJMKGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5n
UmVzdWx0JiByZXN1bHQpCiB7CiAgICAgcmV0dXJuIFdlYkNvcmU6OlVSTCh7IH0sIG1ha2VTdHJp
bmcocmVzdWx0LnJlcG9ydEFuRXJyb3JVUkxCYXNlKCksICImdXJsPSIsIGVuY29kZVdpdGhVUkxF
c2NhcGVTZXF1ZW5jZXMocmVzdWx0LnVybCgpKSwgIiZobD0iLCBkZWZhdWx0TGFuZ3VhZ2UoKSkp
OwpAQCAtMTkxLDIwICsyNTcsNzggQEAgc3RhdGljIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcg
KmRldGFpbAogICAgIEFTU0VSVChyZXN1bHQuaXNVbndhbnRlZFNvZnR3YXJlKCkpOwogICAgIHJl
dHVybiBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJlRGV0YWlscyhyZXN1bHQsIFdFQl9VSV9OU1NU
UklORyhAIldhcm5pbmdzIGFyZSBzaG93biBmb3Igd2Vic2l0ZXMgd2hlcmUgaGFybWZ1bCBzb2Z0
d2FyZSBoYXMgYmVlbiBkZXRlY3RlZC4gWW91IGNhbiBjaGVjayAldGhlLXN0YXR1cy1vZi1zaXRl
JSBvbiB0aGUgJXNhZmVCcm93c2luZ1Byb3ZpZGVyJSBkaWFnbm9zdGljIHBhZ2UuIiwgIlVud2Fu
dGVkIHNvZnR3YXJlIHdhcm5pbmcgZGVzY3JpcHRpb24iKSwgQCIldGhlLXN0YXR1cy1vZi1zaXRl
JSIsIGZhbHNlKTsKIH0KKworc3RhdGljIEJ1dHRvblR5cGUgKm1ha2VCdXR0b24oV2FybmluZ0l0
ZW0gaXRlbSwgV0tTYWZlQnJvd3NpbmdXYXJuaW5nICp3YXJuaW5nLCBTRUwgYWN0aW9uKQorewor
ICAgIE5TU3RyaW5nICp0aXRsZSA9IG5pbDsKKyAgICBpZiAoaXRlbSA9PSBXYXJuaW5nSXRlbTo6
U2hvd0RldGFpbHNCdXR0b24pCisgICAgICAgIHRpdGxlID0gV0VCX1VJX05TU1RSSU5HKEAiU2hv
dyBkZXRhaWxzIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpOworICAgIGVs
c2UKKyAgICAgICAgdGl0bGUgPSBXRUJfVUlfTlNTVFJJTkcoQCJHbyBiYWNrIiwgIkFjdGlvbiBm
cm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpOworICAgIHRpdGxlID0gW3RpdGxlIGNhcGl0YWxp
emVkU3RyaW5nXTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIFtOU0J1dHRvbiBidXR0
b25XaXRoVGl0bGU6dGl0bGUgdGFyZ2V0Ondhcm5pbmcgYWN0aW9uOmFjdGlvbl07CisjZWxzZQor
ICAgIFVJQnV0dG9uICpidXR0b24gPSBbVUlCdXR0b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0b25U
eXBlU3lzdGVtXTsKKyAgICBOU0F0dHJpYnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRUaXRsZSA9IFtb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGl0bGUgYXR0cmlidXRl
czpAeworICAgICAgICBOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFtZTogQChOU1VuZGVybGlu
ZVN0eWxlU2luZ2xlKSwKKyAgICAgICAgTlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWU6IFtV
SUNvbG9yIHdoaXRlQ29sb3JdLAorICAgICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5h
bWU6IGNvbG9yRm9ySXRlbShpdGVtLCB3YXJuaW5nKSwKKyAgICAgICAgTlNGb250QXR0cmlidXRl
TmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0KKyAgICB9XSBhdXRvcmVs
ZWFzZV07CisgICAgW2J1dHRvbiBzZXRBdHRyaWJ1dGVkVGl0bGU6YXR0cmlidXRlZFRpdGxlIGZv
clN0YXRlOlVJQ29udHJvbFN0YXRlTm9ybWFsXTsKKyAgICBbYnV0dG9uIGFkZFRhcmdldDp3YXJu
aW5nIGFjdGlvbjphY3Rpb24gZm9yQ29udHJvbEV2ZW50czpVSUNvbnRyb2xFdmVudFRvdWNoVXBJ
bnNpZGVdOworICAgIHJldHVybiBidXR0b247CisjZW5kaWYKK30KKworc3RhdGljIFZpZXdUeXBl
ICptYWtlVGl0bGVMYWJlbChOU1N0cmluZyAqdGl0bGUsIFZpZXdUeXBlICp3YXJuaW5nKQorewor
ICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10g
aW5pdFdpdGhTdHJpbmc6dGl0bGUgYXR0cmlidXRlczpAeworICAgICAgICBOU0ZvbnRBdHRyaWJ1
dGVOYW1lOltGb250VHlwZSBib2xkU3lzdGVtRm9udE9mU2l6ZTp0aXRsZVNpemVdLAorICAgICAg
ICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVt
OjpUaXRsZVRleHQsIHdhcm5pbmcpCisgICAgfV0gYXV0b3JlbGVhc2VdOworI2lmIFBMQVRGT1JN
KE1BQykKKyAgICByZXR1cm4gW05TVGV4dEZpZWxkIGxhYmVsV2l0aEF0dHJpYnV0ZWRTdHJpbmc6
YXR0cmlidXRlZFN0cmluZ107CisjZWxzZQorICAgIGF1dG8gbGFiZWwgPSBbW1VJTGFiZWwgbmV3
XSBhdXRvcmVsZWFzZV07CisgICAgbGFiZWwuYXR0cmlidXRlZFRleHQgPSBhdHRyaWJ1dGVkU3Ry
aW5nOworICAgIGxhYmVsLmxpbmVCcmVha01vZGUgPSBOU0xpbmVCcmVha0J5V29yZFdyYXBwaW5n
OworICAgIGxhYmVsLm51bWJlck9mTGluZXMgPSAwOworICAgIHJldHVybiBsYWJlbDsKKyNlbmRp
ZgorfQorCitzdGF0aWMgdm9pZCBzZXRCYWNrZ3JvdW5kKFZpZXdUeXBlICp2aWV3LCBDb2xvclR5
cGUgKmNvbG9yKQoreworI2lmIFBMQVRGT1JNKE1BQykKKyAgICB2aWV3LndhbnRzTGF5ZXIgPSBZ
RVM7CisgICAgdmlldy5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBbY29sb3IgQ0dDb2xvcl07Cisj
ZWxzZQorICAgIHZpZXcuYmFja2dyb3VuZENvbG9yID0gY29sb3I7CisjZW5kaWYKK30KKworI2lm
IFBMQVRGT1JNKE1BQykKK0BpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRl
IDogTlNPYmplY3Q8TlNUZXh0Vmlld0RlbGVnYXRlPgorI2Vsc2UKK0BpbnRlcmZhY2UgV0tTYWZl
QnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIDogTlNPYmplY3Q8VUlUZXh0Vmlld0RlbGVnYXRlPgog
I2VuZGlmCitAZW5kCiAKIEBpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyA6IFRleHRW
aWV3VHlwZSB7CiBAcGFja2FnZQotICAgIFdlYWtPYmpDUHRyPFdLU2FmZUJyb3dzaW5nV2Fybmlu
Zz4gX3RhcmdldDsKKyAgICBSZXRhaW5QdHI8V0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRl
PiBfZGVsZWdhdGU7CisgICAgV2Vha09iakNQdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfd2Fy
bmluZzsKIH0KLSsgKGluc3RhbmNldHlwZSl2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0
cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgbGlua1RhcmdldDooV0tTYWZlQnJvd3Np
bmdXYXJuaW5nICopdGFyZ2V0OwotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZzsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6
KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgZm9yV2FybmluZzooV0tTYWZl
QnJvd3NpbmdXYXJuaW5nICopd2FybmluZzsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLU2Fm
ZUJyb3dzaW5nV2FybmluZwogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5
cGUpZnJhbWUgc2FmZUJyb3dzaW5nUmVzdWx0Oihjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jl
c3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZh
cmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpY29t
cGxldGlvbkhhbmRsZXIKIHsKKyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCiAgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0V2l0aEZyYW1lOmZyYW1lXSkpIHsKICAgICAgICAgY29tcGxldGlvbkhh
bmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7CiAgICAgICAgIHJldHVybiBu
aWw7CkBAIC0yMTMsNTAgKzMzNyw3NiBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZToo
UmVjdFR5cGUpCiAgICAgX2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcik7CiAgICAgX3Jlc3VsdCA9IG1ha2VSZWYocmVzdWx0KTsKIAotI2lmIFBMQVRGT1JNKE1B
QykKLSAgICBzZWxmLndhbnRzTGF5ZXIgPSBZRVM7Ci0gICAgc2VsZi5sYXllci5iYWNrZ3JvdW5k
Q29sb3IgPSBbY29sb3JOYW1lZChAIldLU2FmZUJyb3dzaW5nV2FybmluZ0JhY2tncm91bmQiKSBD
R0NvbG9yXTsKLQotICAgIE5TU3RhY2tWaWV3ICp0b3AgPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3
V2l0aFZpZXdzOkBbCi0gICAgICAgIFtbV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW50IG5l
d10gYXV0b3JlbGVhc2VdLAotICAgICAgICBbTlNUZXh0RmllbGQgbGFiZWxXaXRoQXR0cmlidXRl
ZFN0cmluZzpbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxl
VGV4dChyZXN1bHQpIGF0dHJpYnV0ZXM6QHsKLSAgICAgICAgICAgIE5TRm9udEF0dHJpYnV0ZU5h
bWU6W05TRm9udCBzeXN0ZW1Gb250T2ZTaXplOmV4Y2xhbWF0aW9uUG9pbnRTaXplXSwKLSAgICAg
ICAgICAgIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZTpjb2xvck5hbWVkKEAiV0tTYWZl
QnJvd3NpbmdXYXJuaW5nVGV4dCIpCi0gICAgICAgIH1dIGF1dG9yZWxlYXNlXV0KLSAgICBdXTsK
LQotICAgIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKm1pZGRsZSA9IFtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3IHZpZXdXaXRoU3RyaW5nOndhcm5pbmdUZXh0KHJlc3VsdCldOworICAgIHNldEJhY2tn
cm91bmQoc2VsZiwgY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCYWNrZ3JvdW5kLCBzZWxmKSk7
CiAKLSAgICBOU1N0YWNrVmlldyAqYm90dG9tID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dpdGhW
aWV3czpAWwotICAgICAgICBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklO
RyhAIlNob3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSB0
YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCldLAotICAgICAg
ICBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhAIkdvIGJhY2siLCAi
QWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIikgdGFyZ2V0OnNlbGYgYWN0aW9uOkBz
ZWxlY3Rvcihnb0JhY2tDbGlja2VkKV0KLSAgICBdXTsKKyAgICBhdXRvIGV4Y2xhbWF0aW9uUG9p
bnQgPSBbW1dLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCBuZXddIGF1dG9yZWxlYXNlXTsK
KyAgICBhdXRvIHRpdGxlID0gbWFrZVRpdGxlTGFiZWwodGl0bGVUZXh0KHJlc3VsdCksIHNlbGYp
OworICAgIGF1dG8gd2FybmluZyA9IFtbW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgYWxsb2NdIGlu
aXRXaXRoQXR0cmlidXRlZFN0cmluZzpbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOndhcm5pbmdUZXh0KHJlc3VsdCkgYXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1
dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXSB9XSBhdXRvcmVsZWFz
ZV0gZm9yV2FybmluZzpzZWxmXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byBzaG93RGV0YWlscyA9
IG1ha2VCdXR0b24oV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uLCBzZWxmLCBAc2VsZWN0
b3Ioc2hvd0RldGFpbHNDbGlja2VkKSk7CisgICAgYXV0byBnb0JhY2sgPSBtYWtlQnV0dG9uKFdh
cm5pbmdJdGVtOjpHb0JhY2tCdXR0b24sIHNlbGYsIEBzZWxlY3Rvcihnb0JhY2tDbGlja2VkKSk7
CisgICAgYXV0byBib3ggPSBbW1ZpZXdUeXBlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIHNldEJh
Y2tncm91bmQoYm94LCBjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHNl
bGYpKTsKKyAgICBib3gubGF5ZXIuY29ybmVyUmFkaXVzID0gNjsKIAotICAgIGZvciAoTlNTdGFj
a1ZpZXcgKnZpZXcgaW4gQFt0b3AsIGJvdHRvbV0pCi0gICAgICAgIFt2aWV3IHNldEh1Z2dpbmdQ
cmlvcml0eTpOU0xheW91dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNMYXlvdXRD
b25zdHJhaW50T3JpZW50YXRpb25WZXJ0aWNhbF07CisgICAgZm9yIChWaWV3VHlwZSAqdmlldyBp
biBAW2V4Y2xhbWF0aW9uUG9pbnQsIHRpdGxlLCB3YXJuaW5nLCBnb0JhY2ssIHNob3dEZXRhaWxz
XSkgeworICAgICAgICB2aWV3LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFp
bnRzID0gTk87CisgICAgICAgIFtib3ggYWRkU3Vidmlldzp2aWV3XTsKKyAgICB9CisgICAgYm94
LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRzID0gTk87CisgICAgW3Nl
bGYgYWRkU3Vidmlldzpib3hdOwogCi0gICAgU3RhY2tWaWV3VHlwZSAqYm94ID0gW05TU3RhY2tW
aWV3IHN0YWNrVmlld1dpdGhWaWV3czpAW3RvcCwgbWlkZGxlLCBib3R0b21dXTsKLSAgICBib3gu
d2FudHNMYXllciA9IFlFUzsKLSAgICBib3gubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gW1tOU0Nv
bG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl0gQ0dDb2xvcl07Ci0gICAgYm94LmxheWVyLmNvcm5l
clJhZGl1cyA9IDY7Ci0gICAgYm94LmFsaWdubWVudCA9IE5TTGF5b3V0QXR0cmlidXRlQ2VudGVy
WDsKLSAgICBbYm94LndpZHRoQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWF4V2lk
dGhdLmFjdGl2ZSA9IHRydWU7Ci0gICAgYm94LmVkZ2VJbnNldHMgPSB7IG1hcmdpblNpemUsIG1h
cmdpblNpemUsIG1hcmdpblNpemUsIG1hcmdpblNpemUgfTsKLSAgICBbYm94IHNldEh1Z2dpbmdQ
cmlvcml0eTpOU0xheW91dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNMYXlvdXRD
b25zdHJhaW50T3JpZW50YXRpb25WZXJ0aWNhbF07Ci0gICAgW3NlbGYgYWRkVmlldzpib3ggaW5H
cmF2aXR5Ok5TU3RhY2tWaWV3R3Jhdml0eUNlbnRlcl07CisgICAgX2NvbnN0cmFpbnRzID0gQFsK
KyAgICAgICAgW1tzZWxmLnRvcEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LnRv
cEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W2JveC5ib3R0b21BbmNob3IgYW5jaG9y
V2l0aE9mZnNldFRvQW5jaG9yOnNlbGYuYm90dG9tQW5jaG9yXV0sCisgICAgICAgIFtbc2VsZi5s
ZWZ0QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gubGVmdEFuY2hvcl0gY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6W2JveC5yaWdodEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNo
b3I6c2VsZi5yaWdodEFuY2hvcl1dLAorCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29uc3Ry
YWludExlc3NUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWF4V2lkdGhdLAorICAgICAgICBbYm94Lndp
ZHRoQW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0FuY2hvcjpzZWxmLndpZHRoQW5j
aG9yXSwKKworICAgICAgICBbW2JveC5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0Fu
Y2hvcjpleGNsYW1hdGlvblBvaW50LmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29u
c3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbYm94LmxlYWRpbmdBbmNob3IgYW5jaG9yV2l0
aE9mZnNldFRvQW5jaG9yOnRpdGxlLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29u
c3RhbnQ6bWFyZ2luU2l6ZSAqIDEuNSArIGV4Y2xhbWF0aW9uUG9pbnRTaXplXSwKKyAgICAgICAg
W1tib3gubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6d2FybmluZy5sZWFk
aW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorCisgICAg
ICAgIFtbdGl0bGUudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50
cmFpbGluZ0FuY2hvcl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWFy
Z2luU2l6ZV0sCisgICAgICAgIFtbd2FybmluZy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zm
c2V0VG9BbmNob3I6Ym94LnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5PckVx
dWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tnb0JhY2sudHJhaWxpbmdBbmNo
b3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50cmFpbGluZ0FuY2hvcl0gY29uc3RyYWlu
dEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKworICAgICAgICBbW3RpdGxlLnRvcEFuY2hv
ciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZXhjbGFtYXRpb25Qb2ludC50b3BBbmNob3JdIGNv
bnN0cmFpbnRFcXVhbFRvQW5jaG9yOltleGNsYW1hdGlvblBvaW50LmJvdHRvbUFuY2hvciBhbmNo
b3JXaXRoT2Zmc2V0VG9BbmNob3I6dGl0bGUuYm90dG9tQW5jaG9yXV0sCisKKyAgICAgICAgW2dv
QmFjay50b3BBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6c2hvd0RldGFpbHMudG9wQW5j
aG9yXSwKKyAgICAgICAgW1tzaG93RGV0YWlscy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zm
c2V0VG9BbmNob3I6Z29CYWNrLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3Rh
bnQ6bWFyZ2luU2l6ZV0sCisKKyAgICAgICAgW1tib3gudG9wQW5jaG9yIGFuY2hvcldpdGhPZmZz
ZXRUb0FuY2hvcjp0aXRsZS50b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFy
Z2luU2l6ZV0sCisgICAgICAgIFtbdGl0bGUuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRU
b0FuY2hvcjp3YXJuaW5nLnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJn
aW5TaXplXSwKKyAgICAgICAgW1t3YXJuaW5nLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0
VG9BbmNob3I6Z29CYWNrLnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJn
aW5TaXplXSwKKyAgICAgICAgW1tnb0JhY2suYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRU
b0FuY2hvcjpib3guYm90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdp
blNpemVdCisgICAgXTsKKyAgICBbTlNMYXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWlu
dHM6X2NvbnN0cmFpbnRzLmdldCgpXTsKKyAgICByZXR1cm4gc2VsZjsKICNlbHNlCi0gICAgLy8g
RklYTUU6IEdldCB0aGlzIHdvcmtpbmcgb24gaU9TLgotICAgIGNvbXBsZXRpb25IYW5kbGVyKFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXMpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBuaWw7CiAjZW5kaWYKLSAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9p
ZClsYXlvdXRUZXh0Cit7CisgICAgZm9yIChWaWV3VHlwZSAqdmlldyBpbiBzZWxmLnN1YnZpZXdz
LmZpcnN0T2JqZWN0LnN1YnZpZXdzKSB7CisgICAgICAgIGlmIChbdmlldyBpc0tpbmRPZkNsYXNz
OltXS1NhZmVCcm93c2luZ1RleHRWaWV3IGNsYXNzXV0pCisgICAgICAgICAgICBbdmlldyBpbnZh
bGlkYXRlSW50cmluc2ljQ29udGVudFNpemVdOworICAgIH0KIH0KIAogI2lmIFBMQVRGT1JNKE1B
QykKIC0gKHZvaWQpbGF5b3V0CiB7Ci0gICAgZm9yIChOU1ZpZXcgKnZpZXcgaW4gc2VsZi5zdWJ2
aWV3cy5maXJzdE9iamVjdC5zdWJ2aWV3cykKLSAgICAgICAgW3ZpZXcgaW52YWxpZGF0ZUludHJp
bnNpY0NvbnRlbnRTaXplXTsKICAgICBbc3VwZXIgbGF5b3V0XTsKKyAgICBbc2VsZiBsYXlvdXRU
ZXh0XTsKK30KKyNlbHNlCistICh2b2lkKWxheW91dFN1YnZpZXdzCit7CisgICAgW3N1cGVyIGxh
eW91dFN1YnZpZXdzXTsKKyAgICBbc2VsZiBsYXlvdXRUZXh0XTsKIH0KICNlbmRpZgogCkBAIC0y
NzMsNyArNDIzLDcgQEAgLSAodm9pZClnb0JhY2tDbGlja2VkCiAgICAgICAgIF9jb21wbGV0aW9u
SGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6Tm8pOwogfQogCi0tICh2b2lkKWNs
aWNrZWRPbkxpbms6KGlkKWxpbmsKKy0gKHZvaWQpY2xpY2tlZE9uTGluazooTlNVUkwgKilsaW5r
CiB7CiAgICAgaWYgKCFfY29tcGxldGlvbkhhbmRsZXIpCiAgICAgICAgIHJldHVybjsKQEAgLTMw
Niw2NiArNDU2LDc4IEBAIC0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQpbGluawogCiAtICh2b2lk
KXNob3dEZXRhaWxzQ2xpY2tlZAogewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU1N0YWNrVmll
dyAqYm94ID0gc2VsZi52aWV3cy5maXJzdE9iamVjdDsKLSAgICBOU1N0YWNrVmlldyAqYm90dG9t
ID0gYm94LnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKnNob3dEZXRhaWxzQnV0dG9u
ID0gYm90dG9tLnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIFtib3R0b20gcmVtb3ZlVmlldzpzaG93
RGV0YWlsc0J1dHRvbl07Ci0gICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqZGV0YWlscyA9IFtX
S1NhZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzpkZXRhaWxzVGV4
dCgqX3Jlc3VsdCkgbGlua1RhcmdldDpzZWxmXTsKLSAgICBbYm94IGFkZFZpZXc6ZGV0YWlscyBp
bkdyYXZpdHk6TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVyXTsKLSNlbHNlCi0gICAgLy8gRklYTUU6
IEdldCB0aGlzIHdvcmtpbmcgb24gaU9TLgotI2VuZGlmCisgICAgVmlld1R5cGUgKmJveCA9IHNl
bGYuc3Vidmlld3MuZmlyc3RPYmplY3Q7CisgICAgQnV0dG9uVHlwZSAqc2hvd0RldGFpbHMgPSBi
b3guc3Vidmlld3MubGFzdE9iamVjdDsKKyAgICBbc2hvd0RldGFpbHMgcmVtb3ZlRnJvbVN1cGVy
dmlld107CisgICAgVmlld1R5cGUgKmdvQmFjayA9IGJveC5zdWJ2aWV3cy5sYXN0T2JqZWN0Owor
CisgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqdGV4dCA9IGRldGFpbHNUZXh0KCpfcmVz
dWx0KTsKKyAgICBbdGV4dCBhZGRBdHRyaWJ1dGVzOkB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6W0Zv
bnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdIH0gcmFuZ2U6TlNNYWtlUmFuZ2UoMCwg
dGV4dC5sZW5ndGgpXTsKKyAgICBXS1NhZmVCcm93c2luZ1RleHRWaWV3ICpkZXRhaWxzID0gW1tb
V0tTYWZlQnJvd3NpbmdUZXh0VmlldyBhbGxvY10gaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOnRl
eHQgZm9yV2FybmluZzpzZWxmXSBhdXRvcmVsZWFzZV07CisgICAgZGV0YWlscy50cmFuc2xhdGVz
QXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POworICAgIFtib3ggYWRkU3Vidmll
dzpkZXRhaWxzXTsKKyAgICBfY29uc3RyYWludHMuZ2V0KCkubGFzdE9iamVjdC5hY3RpdmUgPSBO
TzsKKyAgICBbTlNMYXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWludHM6QFsKKyAgICAg
ICAgW1tnb0JhY2suYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpkZXRhaWxz
LnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAg
ICAgW1tkZXRhaWxzLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LmJv
dHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAg
ICAgW1tib3gubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZGV0YWlscy5s
ZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAg
ICAgICBbW2RldGFpbHMudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJv
eC50cmFpbGluZ0FuY2hvcl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6
bWFyZ2luU2l6ZV0sCisgICAgXV07CiB9CiAKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLU2Fm
ZUJyb3dzaW5nVGV4dFZpZXcKIAotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoQXR0cmlidXRlZFN0
cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZyBsaW5rVGFyZ2V0OihX
S1NhZmVCcm93c2luZ1dhcm5pbmcgKil0YXJnZXQKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEF0
dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgZm9y
V2FybmluZzooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopd2FybmluZwogewotICAgIFdLU2FmZUJy
b3dzaW5nVGV4dFZpZXcgKmluc3RhbmNlID0gW1tzZWxmIG5ld10gYXV0b3JlbGVhc2VdOwotICAg
IGlmICghaW5zdGFuY2UpCisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAg
IHJldHVybiBuaWw7Ci0gICAgaW5zdGFuY2UtPl90YXJnZXQgPSB0YXJnZXQ7CisgICAgc2VsZi0+
X3dhcm5pbmcgPSB3YXJuaW5nOworICAgIHNlbGYtPl9kZWxlZ2F0ZSA9IGFkb3B0TlMoW1dLU2Fm
ZUJyb3dzaW5nVGV4dFZpZXdEZWxlZ2F0ZSBuZXddKTsKKyAgICBzZWxmLmRlbGVnYXRlID0gc2Vs
Zi0+X2RlbGVnYXRlLmdldCgpOwogCi0gICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBj
b2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIpOworICAgIENvbG9yVHlwZSAq
Zm9yZWdyb3VuZENvbG9yID0gY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dCwg
d2FybmluZyk7CiAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW2F0dHJp
YnV0ZWRTdHJpbmcgbXV0YWJsZUNvcHldOwotICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlczpAewot
ICAgICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3Is
Ci0gICAgICAgIE5TRm9udEF0dHJpYnV0ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6
dGV4dFNpemVdCi0gICAgfSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKV07Cisg
ICAgW3N0cmluZyBhZGRBdHRyaWJ1dGVzOkB7IE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZSA6IGZvcmVncm91bmRDb2xvciB9IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgp
XTsKKyAgICBbc2VsZiBzZXRCYWNrZ3JvdW5kQ29sb3I6Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVt
OjpCb3hCYWNrZ3JvdW5kLCB3YXJuaW5nKV07CisgICAgW3NlbGYgc2V0TGlua1RleHRBdHRyaWJ1
dGVzOkB7IE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSA6IGZvcmVncm91bmRDb2xvciB9
XTsKKyAgICBbc2VsZi50ZXh0U3RvcmFnZSBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOnN0cmluZ107
CisgICAgc2VsZi5lZGl0YWJsZSA9IE5POwogCi0jaWYgUExBVEZPUk0oTUFDKQotICAgIFtpbnN0
YW5jZSBzZXRMaW5rVGV4dEF0dHJpYnV0ZXM6QHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVO
YW1lIDogZm9yZWdyb3VuZENvbG9yIH1dOwotICAgIFtpbnN0YW5jZSBzZXRDb250ZW50SHVnZ2lu
Z1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmllbnRhdGlvbjpOU0xheW91
dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKLSAgICBbaW5zdGFuY2Ugc2V0Q29udGVu
dENvbXByZXNzaW9uUmVzaXN0YW5jZVByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBm
b3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKLSAg
ICBbaW5zdGFuY2Uud2lkdGhBbmNob3IgY29uc3RyYWludExlc3NUaGFuT3JFcXVhbFRvQ29uc3Rh
bnQ6bWF4V2lkdGggLSAyICogbWFyZ2luU2l6ZV0uYWN0aXZlID0gdHJ1ZTsKLSAgICBbaW5zdGFu
Y2Ugc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl1dOwot
ICAgIFtpbnN0YW5jZS50ZXh0U3RvcmFnZSBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOnN0cmluZ107
Ci0jZW5kaWYKLSAgICByZXR1cm4gaW5zdGFuY2U7Ci19Ci0KLSsgKGluc3RhbmNldHlwZSl2aWV3
V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmcKLXsKLSAgICByZXR1cm4gW1dLU2FmZUJyb3dz
aW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOltbW05TTXV0YWJsZUF0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnN0cmluZ10gYXV0b3JlbGVhc2VdIGxpbmtU
YXJnZXQ6bmlsXTsKKyAgICByZXR1cm4gc2VsZjsKIH0KIAotLSAoTlNTaXplKWludHJpbnNpY0Nv
bnRlbnRTaXplCistIChDR1NpemUpaW50cmluc2ljQ29udGVudFNpemUKIHsKKyAgICBhdXRvIHdp
ZHRoID0gc3RkOjptaW48Q0dGbG9hdD4obWF4V2lkdGgsIFtfd2FybmluZyBmcmFtZV0uc2l6ZS53
aWR0aCkgLSAyICogbWFyZ2luU2l6ZTsKKyAgICBjb25zdGV4cHIgYXV0byBub0hlaWdodENvbnN0
cmFpbnQgPSAxMDAwMDAwOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBzZWxmLnRleHRDb250YWlu
ZXIuc2l6ZSA9IHsgd2lkdGgsIG5vSGVpZ2h0Q29uc3RyYWludCB9OwogICAgIFtzZWxmLmxheW91
dE1hbmFnZXIgZW5zdXJlTGF5b3V0Rm9yVGV4dENvbnRhaW5lcjpzZWxmLnRleHRDb250YWluZXJd
OwogICAgIGF1dG8gc2l6ZSA9IFtzZWxmLmxheW91dE1hbmFnZXIgdXNlZFJlY3RGb3JUZXh0Q29u
dGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl0uc2l6ZTsKLSNpZiBQTEFURk9STShNQUMpCiAgICAg
cmV0dXJuIHsgTlNWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIHNpemUuaGVpZ2h0IH07CiAjZWxzZQot
ICAgIHJldHVybiB7IFVJVmlld05vSW50cmluc2ljTWV0cmljLCBzaXplLmhlaWdodCB9OworICAg
IHJldHVybiB7IHdpZHRoLCBbc2VsZiBzaXplVGhhdEZpdHM6IHsgd2lkdGgsIG5vSGVpZ2h0Q29u
c3RyYWludCB9XS5oZWlnaHQgfTsKICNlbmRpZgogfQogCi0tICh2b2lkKWNsaWNrZWRPbkxpbms6
KGlkKWxpbmsgYXRJbmRleDooTlNVSW50ZWdlciljaGFySW5kZXgKK0BlbmQKKworQGltcGxlbWVu
dGF0aW9uIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXdEZWxlZ2F0ZQorCisjaWYgUExBVEZPUk0oTUFD
KQorLSAoQk9PTCl0ZXh0VmlldzooTlNUZXh0VmlldyAqKXRleHRWaWV3IGNsaWNrZWRPbkxpbms6
KGlkKWxpbmsgYXRJbmRleDooTlNVSW50ZWdlciljaGFySW5kZXgKIHsKLSAgICBbX3RhcmdldCBj
bGlja2VkT25MaW5rOmxpbmtdOworICAgIFsoKFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKil0ZXh0
VmlldyktPl93YXJuaW5nIGNsaWNrZWRPbkxpbms6bGlua107CisgICAgcmV0dXJuIFlFUzsKIH0K
KyNlbHNlCistIChCT09MKXRleHRWaWV3OihVSVRleHRWaWV3ICopdGV4dFZpZXcgc2hvdWxkSW50
ZXJhY3RXaXRoVVJMOihOU1VSTCAqKVVSTCBpblJhbmdlOihOU1JhbmdlKWNoYXJhY3RlclJhbmdl
IGludGVyYWN0aW9uOihVSVRleHRJdGVtSW50ZXJhY3Rpb24paW50ZXJhY3Rpb24KK3sKKyAgICBb
KChXS1NhZmVCcm93c2luZ1RleHRWaWV3ICopdGV4dFZpZXcpLT5fd2FybmluZyBjbGlja2VkT25M
aW5rOlVSTF07CisgICAgcmV0dXJuIE5POworfQorI2VuZGlmCiAKIEBlbmQKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjM3ODYz
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjI2LDkgKzIyNiw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdTY2Fs
ZShDR0Zsb2F0KTsKICAgICBDR0Zsb2F0IHZpZXdTY2FsZSgpIGNvbnN0OwogCi0gICAgdm9pZCBz
aG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+
JiYpPiYmKTsKLSAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpOwotCiAgICAgV0tM
YXlvdXRNb2RlIGxheW91dE1vZGUoKSBjb25zdDsKICAgICB2b2lkIHNldExheW91dE1vZGUoV0tM
YXlvdXRNb2RlKTsKICAgICB2b2lkIHVwZGF0ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9kZXMo
KTsKQEAgLTQ3MSw4ICs0NjgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRT
bmFwc2hvdEZvckN1cnJlbnRJdGVtKCk7CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hv
dEZvckl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpOwogCi0gICAgV0tTYWZlQnJvd3NpbmdX
YXJuaW5nICpzYWZlQnJvd3NpbmdXYXJuaW5nKCkgeyByZXR1cm4gbV9zYWZlQnJvd3NpbmdXYXJu
aW5nLmdldCgpOyB9Ci0KICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIqIGdlc3R1cmVDb250cm9s
bGVyKCkgeyByZXR1cm4gbV9nZXN0dXJlQ29udHJvbGxlci5nZXQoKTsgfQogICAgIFZpZXdHZXN0
dXJlQ29udHJvbGxlciYgZW5zdXJlR2VzdHVyZUNvbnRyb2xsZXIoKTsKICAgICB2b2lkIHNldEFs
bG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzKGJvb2wpOwpAQCAtNzk4LDcgKzc5Myw2
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3JlcXVpcmVzVXNlckFjdGlvbkZvckVkaXRpbmdDb250
cm9sc01hbmFnZXIgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3Vz
ZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1RleHRJbnNlcnRpb25SZXBsYWNpbmdTb2Z0U3Bh
Y2UgeyBmYWxzZSB9OwotICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IG1fc2Fm
ZUJyb3dzaW5nV2FybmluZzsKICAgICAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIE5T
SW50ZWdlciBtX2luaXRpYWxOdW1iZXJPZlZhbGlkSXRlbXNGb3JEcm9wIHsgMCB9OwpJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9u
IDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
CSh3b3JraW5nIGNvcHkpCkBAIC0xNTk5LDI0ICsxNTk5LDYgQEAgYm9vbCBXZWJWaWV3SW1wbDo6
cmVzaWduRmlyc3RSZXNwb25kZXIoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYlZp
ZXdJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQm
IHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9h
ZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1f
dmlldykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9h
ZDo6WWVzKTsKLQotICAgIG1fc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVC
cm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W21fdmlldyBib3VuZHNdIHNhZmVC
cm93c2luZ1Jlc3VsdDpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtUaGlzID0gbWFrZVdl
YWtQdHIoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRs
ZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICh3ZWFrVGhpcykKLSAg
ICAgICAgICAgIFtzdGQ6OmV4Y2hhbmdlKHdlYWtUaGlzLT5tX3NhZmVCcm93c2luZ1dhcm5pbmcs
IG51bGxwdHIpIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxl
cihXVEZNb3ZlKHJlc3VsdCkpOwotICAgIH1dKTsKLSAgICBbbV92aWV3IGFkZFN1YnZpZXc6bV9z
YWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpXTsKLX0KLQotdm9pZCBXZWJWaWV3SW1wbDo6Y2xlYXJT
YWZlQnJvd3NpbmdXYXJuaW5nKCkKLXsKLSAgICBbc3RkOjpleGNoYW5nZShtX3NhZmVCcm93c2lu
Z1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZyb21TdXBlcnZpZXddOwotfQotCiBib29sIFdlYlZp
ZXdJbXBsOjppc0ZvY3VzZWQoKSBjb25zdAogewogICAgIGlmIChtX2luQmVjb21lRmlyc3RSZXNw
b25kZXIpCkBAIC0xNjU1LDcgKzE2MzcsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZW5ld0dTdGF0
ZSgpCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRGcmFtZVNpemUoQ0dTaXplKQogewogICAgIFttX2xh
eW91dFN0cmF0ZWd5IGRpZENoYW5nZUZyYW1lU2l6ZV07Ci0gICAgW21fc2FmZUJyb3dzaW5nV2Fy
bmluZyBzZXRGcmFtZTpbbV92aWV3IGJvdW5kc11dOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpk
aXNhYmxlRnJhbWVTaXplVXBkYXRlcygpCkBAIC01MTU4LDcgKzUxMzksNyBAQCB2b2lkIFdlYlZp
ZXdJbXBsOjpmbGFnc0NoYW5nZWQoTlNFdmVudCAqCiAjZGVmaW5lIE5BVElWRV9NT1VTRV9FVkVO
VF9IQU5ETEVSX0lOVEVSTkFMKEV2ZW50TmFtZSkgXAogICAgIHZvaWQgV2ViVmlld0ltcGw6OkV2
ZW50TmFtZShOU0V2ZW50ICpldmVudCkgXAogICAgIHsgXAotICAgICAgICBpZiAobV9pZ25vcmVz
Tm9uV2hlZWxFdmVudHMgfHwgbV9zYWZlQnJvd3NpbmdXYXJuaW5nKSBcCisgICAgICAgIGlmICht
X2lnbm9yZXNOb25XaGVlbEV2ZW50cykgXAogICAgICAgICAgICAgcmV0dXJuOyBcCiAgICAgICAg
IGlmIChOU1RleHRJbnB1dENvbnRleHQgKmNvbnRleHQgPSBbbV92aWV3IGlucHV0Q29udGV4dF0p
IHsgXAogICAgICAgICAgICAgYXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsgXApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9T
LmgJKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdl
Q2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNsZWFyVGV4dEluZGljYXRvcihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2lu
ZG93RGlzbWlzc2FsQW5pbWF0aW9uKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRleHRJbmRpY2F0
b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNob3dTYWZl
QnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5k
bGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJM
PiYmKT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBv
dmVycmlkZTsKLQogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25z
dCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRD
b21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50
SW1wbElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQAogI2ltcG9ydCA8cGFs
L3NwaS9jb2NvYS9OU0tleWVkQXJjaGl2ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5o
PgogCi0jZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0Uo
YXNzZXJ0aW9uLCBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKQorI2Rl
ZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlv
biwgbV93ZWJWaWV3LmdldCgpLT5fcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKSkKIAogQGlu
dGVyZmFjZSBXS0VkaXRDb21tYW5kT2JqQyA6IE5TT2JqZWN0CiB7CkBAIC0xNjEsMTggKzE2MSwx
OCBAQCBJbnRTaXplIFBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSgpCiBib29sIFBhZ2VDbGllbnRJ
bXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQogewogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDk4Ci0gICAgcmV0dXJuIGlzVmlld1Zpc2li
bGUoKSB8fCAobV93ZWJWaWV3ICYmIFttX3dlYlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNl
ZFN0YXRlXSk7CisgICAgcmV0dXJuIGlzVmlld1Zpc2libGUoKSB8fCBbbV93ZWJWaWV3IF9pc1Jl
dGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZV07CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6Omlz
Vmlld0ZvY3VzZWQoKQogewogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTMzMDk4Ci0gICAgcmV0dXJuIGlzVmlld1dpbmRvd0FjdGl2ZSgpIHx8
IChtX3dlYlZpZXcgJiYgW21fd2ViVmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVd
KTsKKyAgICByZXR1cm4gaXNWaWV3V2luZG93QWN0aXZlKCkgfHwgW21fd2ViVmlldyBfaXNSZXRh
aW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVdOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1Zp
ZXdWaXNpYmxlKCkKIHsKLSAgICBpZiAoaXNWaWV3SW5XaW5kb3coKSAmJiAhbV93ZWJWaWV3Ll9p
c0JhY2tncm91bmQpCisgICAgaWYgKGlzVmlld0luV2luZG93KCkgJiYgIVttX3dlYlZpZXcgX2lz
QmFja2dyb3VuZF0pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGlmIChbbV93ZWJW
aWV3IF9pc1Nob3dpbmdWaWRlb1BpY3R1cmVJblBpY3R1cmVdKQpAQCAtMTg3LDggKzE4Nyw4IEBA
IGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGUoKQogYm9vbCBQYWdlQ2xpZW50SW1w
bDo6aXNWaWV3SW5XaW5kb3coKQogewogICAgIC8vIEZJWE1FOiBpbiBXZWJLaXRUZXN0UnVubmVy
LCBtX3dlYlZpZXcgaXMgbmlsLCBzbyBjaGVjayB0aGUgY29udGVudCB2aWV3IGluc3RlYWQuCi0g
ICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuIFttX3dlYlZpZXcgd2luZG93XTsKKyAg
ICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gW3dl
YlZpZXcgd2luZG93XTsKIAogICAgIHJldHVybiBbbV9jb250ZW50VmlldyB3aW5kb3ddOwogfQpA
QCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENvbXBsZXRlU3ludGhl
dGkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJt
aXNzaW9uUmVxdWVzdChXZWJGcmFtZVByb3h5JiBmcmFtZSwgQVBJOjpTZWN1cml0eU9yaWdpbiYg
b3JpZ2luLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAg
W1t3cmFwcGVyKG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2Vv
bG9jYXRpb25Qcm92aWRlcl0gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9y
aWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxl
cjpzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmll
d107CisgICAgW1t3cmFwcGVyKG1fd2ViVmlldy5nZXQoKS0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9j
ZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRp
b25SZXF1ZXN0RnJvbU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSBmcmFtZTpmcmFtZSBj
b21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRy
KSB2aWV3Om1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6
OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkKQEAgLTQ2OSwxNiArNDY5LDYg
QEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRvckFuaQogewogfQogCi12b2lk
IFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3Np
bmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51
ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0g
ICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7IC8v
IEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJy
b3dzaW5nV2FybmluZygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQogdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXll
clRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQogewogfQpAQCAtNjk1LDIzICs2ODUsMjMg
QEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2Nyb2xsaW5nTm9kZVNjcm9sbAogCiBWZWN0b3I8U3Ry
aW5nPiBQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcnMo
KQogewotICAgIHJldHVybiBtX3dlYlZpZXcuX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Ll9taW1l
VHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVyczsKKyAgICByZXR1cm4gW21fd2ViVmlldyBf
Y29udGVudFByb3ZpZGVyUmVnaXN0cnldLl9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3Zp
ZGVyczsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdp
bigpCiB7CiAgICAgW21fd2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbl07Ci0gICAg
TmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlv
bkdlc3R1cmVEaWRCZWdpbigpOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1f
d2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKIH0KIAog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5h
dmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25T
dGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2ls
bEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBh
Z2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxs
TmF2aWdhdGUsIGl0ZW0pOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZURpZEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRl
bSkKIHsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdl
KS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIE5hdmln
YXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRp
b25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiAgICAgW21fd2ViVmlldyBfbmF2
aWdhdGlvbkdlc3R1cmVEaWRFbmRdOwogfQogCkBAIC03MjIsMTIgKzcxMiwxMiBAQCB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6
OndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRl
bSkKIHsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdl
KS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0
ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLndpbGxSZWNvcmROYXZpZ2F0
aW9uU25hcHNob3QoaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbW92ZU5h
dmlnYXRpb25HZXN0dXJlU25hcHNob3QoKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdl
YlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1v
dmVkKCk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgp
LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQoKTsKIH0KIAogdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZy
YW1lKCkKQEAgLTg0MCw3ICs4MzAsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0UGFz
c3dvcmRGb3JRCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHBhc3N3b3JkKTsKICAgICB9KTsK
IAotICAgIGlmIChXS1Bhc3N3b3JkVmlldyAqcGFzc3dvcmRWaWV3ID0gbV93ZWJWaWV3Ll9wYXNz
d29yZFZpZXcpIHsKKyAgICBpZiAoV0tQYXNzd29yZFZpZXcgKnBhc3N3b3JkVmlldyA9IFttX3dl
YlZpZXcgX3Bhc3N3b3JkVmlld10pIHsKICAgICAgICAgQVNTRVJUKGZpbGVOYW1lID09IFN0cmlu
ZyB7IHBhc3N3b3JkVmlldy5kb2N1bWVudE5hbWUgfSk7CiAgICAgICAgIFtwYXNzd29yZFZpZXcg
c2hvd1Bhc3N3b3JkRmFpbHVyZUFsZXJ0XTsKICAgICAgICAgcGFzc3dvcmRWaWV3LnVzZXJEaWRF
bnRlclBhc3N3b3JkID0gcGFzc3dvcmRIYW5kbGVyLmdldCgpOwpAQCAtODQ4LDcgKzgzOCw3IEBA
IHZvaWQgUGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclEKICAgICB9CiAKICAgICBb
bV93ZWJWaWV3IF9zaG93UGFzc3dvcmRWaWV3V2l0aERvY3VtZW50TmFtZTpmaWxlTmFtZSBwYXNz
d29yZEhhbmRsZXI6cGFzc3dvcmRIYW5kbGVyLmdldCgpXTsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6
OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5kaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlj
a0xvb2tEb2N1bWVudCgpOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2Vi
Vmlldy5nZXQoKS0+X3BhZ2UpLmRpZFJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50
KCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFj
L1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQs
OCArMTA0LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92
ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3Np
dGlvbigpIG92ZXJyaWRlOwogICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1
bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2Fm
ZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nKCkgb3ZlcnJpZGU7CiAgICAgCiAjaWYgV0tfQVBJX0VOQUJMRUQKICAg
ICBib29sIHNob3dTaGFyZVNoZWV0KGNvbnN0IFdlYkNvcmU6OlNoYXJlRGF0YVdpdGhQYXJzZWRV
UkwmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwpJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5t
bQkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODksMTggKzQ4OSw2IEBAIFJlZjxW
YWxpZGF0aW9uQnViYmxlPiBQYWdlQ2xpZW50SW1wbDo6Y3IKICAgICByZXR1cm4gVmFsaWRhdGlv
bkJ1YmJsZTo6Y3JlYXRlKG1fdmlldywgbWVzc2FnZSwgc2V0dGluZ3MpOwogfQogCi12b2lkIFBh
Z2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdS
ZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29u
dGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQot
ewotICAgIGlmICghbV9pbXBsKQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29u
dGludWVVbnNhZmVMb2FkOjpZZXMpOwotICAgIG1faW1wbC0+c2hvd1NhZmVCcm93c2luZ1dhcm5p
bmcocmVzdWx0LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgUGFnZUNs
aWVudEltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCi17Ci0gICAgbV9pbXBsLT5jbGVh
clNhZmVCcm93c2luZ1dhcm5pbmcoKTsKLX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4
dEluZGljYXRvcihSZWY8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRvciwgV2ViQ29yZTo6VGV4
dEluZGljYXRvcldpbmRvd0xpZmV0aW1lIGxpZmV0aW1lKQogewogICAgIG1faW1wbC0+c2V0VGV4
dEluZGljYXRvcih0ZXh0SW5kaWNhdG9yLmdldCgpLCBsaWZldGltZSk7CkBAIC01NjQsNyArNTUy
LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKAogI2lmIFdLX0FQ
SV9FTkFCTEVECiBib29sIFBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldChjb25zdCBTaGFy
ZURhdGFXaXRoUGFyc2VkVVJMJiBzaGFyZURhdGEsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9p
ZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX2ltcGwtPnNob3dTaGFyZVNo
ZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViVmlldyk7Cisg
ICAgbV9pbXBsLT5zaG93U2hhcmVTaGVldChzaGFyZURhdGEsIFdURk1vdmUoY29tcGxldGlvbkhh
bmRsZXIpLCBtX3dlYlZpZXcuZ2V0KCkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogI2Vu
ZGlmCkBAIC03NTEsMTYgKzczOSwxNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9u
R2VzdHVyZURpCiAgICAgbV9pbXBsLT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dz
V2l0aEFuaW1hdGlvbih0cnVlKTsKIAogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2Vi
VmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5f
cGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpOworICAgIGlmIChhdXRvIHdlYlZpZXcg
PSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2Uo
KndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7CiAjZW5kaWYKIH0K
IAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2ls
bE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewogI2lmIFdLX0FQSV9F
TkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9t
V2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxO
YXZpZ2F0ZSwgaXRlbSk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkK
KyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5h
dmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBV
TlVTRURfUEFSQU0od2lsbE5hdmlnYXRlKTsKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03
NzAsOCArNzU4LDggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaQog
dm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoYm9vbCB3aWxsTmF2
aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJM
RUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQ
YWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdh
dGUsIGl0ZW0pOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAg
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0
aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURf
UEFSQU0od2lsbE5hdmlnYXRlKTsKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03ODUsOCAr
NzczLDggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaQogdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6d2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJiBpdGVtKQogewogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmll
dykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFn
ZSkud2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJW
aWV3ID0gbV93ZWJWaWV3LmdldCgpKQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQ
YWdlKCp3ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsK
ICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwogI2VuZGlmCkBAIC03OTUsOCArNzgzLDgg
QEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJlY29yZE5hdmlnYXRpbwogdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpCiB7CiAjaWYgV0tf
QVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6
OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90
V2FzUmVtb3ZlZCgpOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisg
ICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZp
Z2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFRv
b2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIz
ODAwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBA
CisyMDE4LTExLTA4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgW2lPU10gSW1wbGVtZW50IHNhZmUgYnJvd3NpbmcgaW4gV2ViS2l0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE0NDEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tOgorICAgICAgICAoY2hlY2tUaXRs
ZUFuZENsaWNrKToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE4LTExLTA4ICBKaWV3ZW4gVGFuICA8
amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYSBxdWljayBidWls
ZCBmaXggZm9yIHIyMzc5ODMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0
Q29jb2EvU2FmZUJyb3dzaW5nLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkv
VGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBU
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTM3LDggKzEzNyw2IEBAIC0gKHZvaWQpbG9va1VwVVJMOihOU1VSTCAq
KVVSTCBjb21wbGV0aW8KIAogQGVuZAogCi0jaWYgUExBVEZPUk0oTUFDKSAvLyBGSVhNRTogVGVz
dCBvbiBpT1Mgb25jZSBpbXBsZW1lbnRlZC4KLQogc3RhdGljIE5TVVJMICpzaW1wbGVVUkwoKQog
ewogICAgIHJldHVybiBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2lt
cGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5y
ZXNvdXJjZXMiXTsKQEAgLTE1NywyOCArMTU1LDQ2IEBAIHN0YXRpYyBSZXRhaW5QdHI8V0tXZWJW
aWV3PiBzYWZlQnJvd3NpbmcKICAgICByZXR1cm4gd2ViVmlldzsKIH0KIAorI2lmIFBMQVRGT1JN
KE1BQykKK3N0YXRpYyB2b2lkIGNoZWNrVGl0bGVBbmRDbGljayhOU0J1dHRvbiAqYnV0dG9uLCBj
b25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQoreworICAgIEVYUEVDVF9TVFJFUShidXR0b24udGl0
bGUuVVRGOFN0cmluZywgZXhwZWN0ZWRUaXRsZSk7CisgICAgW2J1dHRvbiBwZXJmb3JtQ2xpY2s6
bmlsXTsKK30KKyNlbHNlCitzdGF0aWMgdm9pZCBjaGVja1RpdGxlQW5kQ2xpY2soVUlCdXR0b24g
KmJ1dHRvbiwgY29uc3QgY2hhciogZXhwZWN0ZWRUaXRsZSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEo
W2J1dHRvbiBhdHRyaWJ1dGVkVGl0bGVGb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF0uc3Ry
aW5nLlVURjhTdHJpbmcsIGV4cGVjdGVkVGl0bGUpOworICAgIFVJVmlldyAqdGFyZ2V0ID0gYnV0
dG9uLnN1cGVydmlldy5zdXBlcnZpZXc7CisgICAgU0VMIHNlbGVjdG9yID0gTlNTZWxlY3RvckZy
b21TdHJpbmcoc3RyY21wKGV4cGVjdGVkVGl0bGUsICJHbyBCYWNrIikgPyBAInNob3dEZXRhaWxz
Q2xpY2tlZCIgOiBAImdvQmFja0NsaWNrZWQiKTsKKyAgICBbdGFyZ2V0IHBlcmZvcm1TZWxlY3Rv
cjpzZWxlY3Rvcl07Cit9CisjZW5kaWYKKwogVEVTVChTYWZlQnJvd3NpbmcsIEdvQmFjaykKIHsK
ICAgICBhdXRvIHdlYlZpZXcgPSBzYWZlQnJvd3NpbmdWaWV3KCk7Ci0gICAgTlNWaWV3ICpib3R0
b20gPSBbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddLnN1YnZpZXdzLmZp
cnN0T2JqZWN0LnN1YnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKmdvQmFjayA9IChO
U0J1dHRvbiAqKWJvdHRvbS5zdWJ2aWV3cy5sYXN0T2JqZWN0OwotICAgIEVYUEVDVF9TVFJFUShn
b0JhY2sudGl0bGUuVVRGOFN0cmluZywgIkdvIGJhY2siKTsKLSAgICBbZ29CYWNrIHBlcmZvcm1D
bGljazpuaWxdOworICAgIGF1dG8gd2FybmluZyA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJu
aW5nRm9yVGVzdGluZ107CisgICAgYXV0byBib3ggPSB3YXJuaW5nLnN1YnZpZXdzLmZpcnN0T2Jq
ZWN0OworICAgIGNoZWNrVGl0bGVBbmRDbGljayhib3guc3Vidmlld3NbM10sICJHbyBCYWNrIik7
CiAgICAgRVhQRUNUX0VRKFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10s
IG5pbCk7CiB9CiAKIFRFU1QoU2FmZUJyb3dzaW5nLCBWaXNpdFVuc2FmZVdlYnNpdGUpCiB7CiAg
ICAgYXV0byB3ZWJWaWV3ID0gc2FmZUJyb3dzaW5nVmlldygpOwotICAgIE5TVmlldyAqd2Fybmlu
ZyA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ107Ci0gICAgTlNWaWV3
ICpib3ggPSB3YXJuaW5nLnN1YnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIE5TQnV0dG9uICpzaG93
RGV0YWlscyA9IChOU0J1dHRvbiAqKWJveC5zdWJ2aWV3cy5sYXN0T2JqZWN0LnN1YnZpZXdzLmZp
cnN0T2JqZWN0OwotICAgIEVYUEVDVF9TVFJFUShzaG93RGV0YWlscy50aXRsZS5VVEY4U3RyaW5n
LCAiU2hvdyBkZXRhaWxzIik7Ci0gICAgRVhQRUNUX0VRKGJveC5zdWJ2aWV3cy5jb3VudCwgM3Vs
bCk7Ci0gICAgW3Nob3dEZXRhaWxzIHBlcmZvcm1DbGljazpuaWxdOwotICAgIEVYUEVDVF9FUShi
b3guc3Vidmlld3MuY291bnQsIDR1bGwpOworICAgIGF1dG8gd2FybmluZyA9IFt3ZWJWaWV3IF9z
YWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ107CisgICAgYXV0byBib3ggPSB3YXJuaW5nLnN1
YnZpZXdzLmZpcnN0T2JqZWN0OworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBDbGFzcyBidXR0b25D
bGFzcyA9IFtOU0J1dHRvbiBjbGFzc107CisjZWxzZQorICAgIENsYXNzIGJ1dHRvbkNsYXNzID0g
W1VJQnV0dG9uIGNsYXNzXTsKKyNlbmRpZgorICAgIEVYUEVDVF9UUlVFKFtib3guc3Vidmlld3Mu
bGFzdE9iamVjdCBpc0tpbmRPZkNsYXNzOmJ1dHRvbkNsYXNzXSk7CisgICAgY2hlY2tUaXRsZUFu
ZENsaWNrKGJveC5zdWJ2aWV3c1s0XSwgIlNob3cgRGV0YWlscyIpOworICAgIEVYUEVDVF9TVFJF
UShOU1N0cmluZ0Zyb21DbGFzcyhbYm94LnN1YnZpZXdzLmxhc3RPYmplY3QgY2xhc3NdKS5VVEY4
U3RyaW5nLCAiV0tTYWZlQnJvd3NpbmdUZXh0VmlldyIpOwogICAgIEVYUEVDVF9GQUxTRShjb21t
aXR0ZWROYXZpZ2F0aW9uKTsKLSAgICBbd2FybmluZyBwZXJmb3JtU2VsZWN0b3I6TlNTZWxlY3Rv
ckZyb21TdHJpbmcoQCJjbGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6QCJXS1Zpc2l0VW5zYWZl
V2Vic2l0ZVNlbnRpbmVsIl07CisgICAgW3dhcm5pbmcgcGVyZm9ybVNlbGVjdG9yOk5TU2VsZWN0
b3JGcm9tU3RyaW5nKEAiY2xpY2tlZE9uTGluazoiKSB3aXRoT2JqZWN0OltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiV0tWaXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCJdXTsKICAgICBUZXN0V2ViS2l0
QVBJOjpVdGlsOjpydW4oJmNvbW1pdHRlZE5hdmlnYXRpb24pOwogfQogCkBAIC0xOTEsOCArMjA3
LDYgQEAgVEVTVChTYWZlQnJvd3NpbmcsIE5hdmlnYXRpb25DbGVhcnNXYXJuaQogICAgICAgICBU
ZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOwogfQogCi0jZW5kaWYgLy8gUExBVEZP
Uk0oTUFDKQotCiBAaW50ZXJmYWNlIE51bGxMb29rdXBDb250ZXh0IDogTlNPYmplY3QKIEBlbmQK
IEBpbXBsZW1lbnRhdGlvbiBOdWxsTG9va3VwQ29udGV4dAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354436</attachid>
            <date>2018-11-09 21:10:09 -0800</date>
            <delta_ts>2018-11-09 22:27:56 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181109211008.patch</filename>
            <type>text/plain</type>
            <size>60520</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNSw2ICsxMzUxLDcgQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIAogLSAodm9pZClsYXlvdXRTdWJ2aWV3cwogeworICAg
IFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CiAgICAgW3N1cGVy
IGxheW91dFN1YnZpZXdzXTsKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogfQpA
QCAtMzI5MCw2ICszMzA3LDcgQEAgLSAodm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0
KXJlYwogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwogICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkp
OwogfQogCkBAIC0zNTgzLDc2ICszNjAxLDEyMSBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqCiAKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAog
eworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAg
X2ltcGwtPnNjcm9sbFdoZWVsKGV2ZW50KTsKIH0KIAogLSAodm9pZClzd2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAg
ICByZXR1cm47CisKICAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOwogfQogCiAtICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQp
OwogfQogCiAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VE
b3duKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAg
ICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBs
LT5tb3VzZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisg
ICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUVudGVyZWQoZXZlbnQpOwogfQogCiAt
ICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93
c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUV4aXRlZChl
dmVudCk7CiB9CiAKIC0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewor
ICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2lt
cGwtPm90aGVyTW91c2VEb3duKGV2ZW50KTsKIH0KIAogLSAodm9pZClvdGhlck1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwogfQog
CiAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcp
CisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdodE1vdXNlRHJhZ2dlZChldmVudCk7
CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlVXAoZXZlbnQpOwogfQogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAg
IHJldHVybjsKKwogICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5nZVdpdGhFdmVudChldmVudCk7CiB9
CiAKQEAgLTQ2MzUsNyArNDY5OCw3IEBAIC0gKHZvaWQpX3Bhc3RlQXNRdW90YXRpb246KGlkKXNl
bmRlcgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERFRkFV
TFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2b2lk
KV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNj
cmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKQEAgLTY2NjYsMTUgKzY3MjksMTIgQEAgLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZQogCiAjaWYgUExBVEZPUk0oTUFDKQogLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZl
QnJvd3NpbmdXYXJuaW5nKCk7Ci19CiAjZWxzZQogLSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nCisjZW5kaWYKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
c2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKIH0KLSNlbmRpZgogCiAtIChfV0tJbnNwZWN0b3Ig
KilfaW5zcGVjdG9yCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBAQCBjbGFzcyBBdHRhY2htZW50
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2Fk
IDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNsYXNzIFZpZXdTbmFwc2hvdDsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CiB9CiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnNl
cnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpvcHRpb25hbDxCT09MPilfcmVz
b2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKIAogLSAo
V0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKIEBjbGFzcyBX
S1dlYlZpZXc7CiAKQEAgLTQ4LDkgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBOU0ZpbGVXcmFwcGVy
ICphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKICAgICBOU1NldCAqc2Vy
aWFsaXphYmxlRmlsZVdyYXBwZXJDbGFzc2VzKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKKyAgICB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dh
cm5pbmcoKSBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxOSBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvCiAjZW5kaWYKIH0KIAordm9p
ZCBQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZl
QnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAg
ICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOworICAgIGVsc2UKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpObyk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGxDb2NvYTo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKK3sKKyAgICBbbV93ZWJW
aWV3IF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworfQorCiAjaWYgRU5BQkxFKEFUVEFDSE1F
TlRfRUxFTUVOVCkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRJbnNlcnRBdHRhY2ht
ZW50KEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCkBA
IC02OSw3ICs4Miw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6ZGlkUmVtb3ZlQXR0YWMK
IE5TRmlsZVdyYXBwZXIgKlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJbnN0
YW5jZSgpIGNvbnN0CiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjbHMgPSBtX3dl
YlZpZXcuY29uZmlndXJhdGlvbi5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmls
ZVdyYXBwZXIgc2VsZl07CisgICAgQ2xhc3MgY2xzID0gW21fd2ViVmlldyBjb25maWd1cmF0aW9u
XS5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmlsZVdyYXBwZXIgc2VsZl07CiAg
ICAgcmV0dXJuIFtjbHMgYWxsb2NdOwogI2Vsc2UKICAgICByZXR1cm4gbmlsOwpAQCAtODAsNyAr
OTMsNyBAQCBOU1NldCAqUGFnZUNsaWVudEltcGxDb2NvYTo6c2VyaWFsaXphYmxlCiB7CiAgICAg
Q2xhc3MgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MgPSBOU0ZpbGVXcmFwcGVyLnNlbGY7CiAjaWYg
V0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IG1f
d2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzczsKKyAgICBD
bGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IFttX3dlYlZpZXcgY29uZmlndXJhdGlv
bl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOwogICAgIGlmIChjb25maWd1cmVkRmlsZVdy
YXBwZXJDbGFzcyAmJiBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyAhPSBkZWZhdWx0RmlsZVdy
YXBwZXJDbGFzcykKICAgICAgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0czpjb25maWd1
cmVkRmlsZVdyYXBwZXJDbGFzcywgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MsIG5pbF07CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2Fy
bmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2Fm
ZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsMTMgKzQ2LDEzIEBAIGVudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDogYm9vbDsKIAog
I2lmIFBMQVRGT1JNKE1BQykKIHVzaW5nIFJlY3RUeXBlID0gTlNSZWN0OwotdXNpbmcgU3RhY2tW
aWV3VHlwZSA9IE5TU3RhY2tWaWV3OwordXNpbmcgUGFyZW50VHlwZSA9IE5TVmlldzsKICNlbHNl
CiB1c2luZyBSZWN0VHlwZSA9IENHUmVjdDsKLXVzaW5nIFN0YWNrVmlld1R5cGUgPSBVSVN0YWNr
VmlldzsKK3VzaW5nIFBhcmVudFR5cGUgPSBVSVNjcm9sbFZpZXc7CiAjZW5kaWYKIAotQGludGVy
ZmFjZSBXS1NhZmVCcm93c2luZ1dhcm5pbmcgOiBTdGFja1ZpZXdUeXBlIHsKK0BpbnRlcmZhY2Ug
V0tTYWZlQnJvd3NpbmdXYXJuaW5nIDogUGFyZW50VHlwZSB7CiBAcGFja2FnZQogICAgIENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2Vi
Q29yZTo6VVJMPiYmKT4gX2NvbXBsZXRpb25IYW5kbGVyOwogICAgIFJlZlB0cjxjb25zdCBXZWJL
aXQ6OlNhZmVCcm93c2luZ1Jlc3VsdD4gX3Jlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0JKHJldmlz
aW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dz
aW5nV2FybmluZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzMsNDkgKzMzLDEwMyBAQAogI2ltcG9y
dCA8d3RmL0Jsb2NrUHRyLmg+CiAjaW1wb3J0IDx3dGYvTGFuZ3VhZ2UuaD4KIAotY29uc3QgQ0dG
bG9hdCBleGNsYW1hdGlvblBvaW50U2l6ZSA9IDMwOwotY29uc3QgQ0dGbG9hdCB0ZXh0U2l6ZSA9
IDEzOworY29uc3RleHByIENHRmxvYXQgZXhjbGFtYXRpb25Qb2ludFNpemUgPSAzMDsKK2NvbnN0
ZXhwciBDR0Zsb2F0IG1hcmdpblNpemUgPSAyMDsKK2NvbnN0ZXhwciBDR0Zsb2F0IG1heFdpZHRo
ID0gNjc1OworY29uc3RleHByIENHRmxvYXQgdGl0bGVTaXplID0gMjY7Citjb25zdGV4cHIgQ0dG
bG9hdCBib3hDb3JuZXJSYWRpdXMgPSA2OworCiAjaWYgUExBVEZPUk0oTUFDKQotY29uc3QgQ0dG
bG9hdCBtYXJnaW5TaXplID0gMjA7Ci1jb25zdCBzaXplX3QgbWF4V2lkdGggPSA2MDA7Citjb25z
dGV4cHIgQ0dGbG9hdCB0ZXh0U2l6ZSA9IDE0OwogdXNpbmcgQ29sb3JUeXBlID0gTlNDb2xvcjsK
IHVzaW5nIEZvbnRUeXBlID0gTlNGb250OwotdXNpbmcgVmlld1R5cGUgPSBOU1ZpZXc7Ci11c2lu
ZyBCZXppZXJQYXRoVHlwZSA9IE5TQmV6aWVyUGF0aDsKIHVzaW5nIFRleHRWaWV3VHlwZSA9IE5T
VGV4dFZpZXc7Cit1c2luZyBCdXR0b25UeXBlID0gTlNCdXR0b247Cit1c2luZyBBbGlnbm1lbnRU
eXBlID0gTlNMYXlvdXRBdHRyaWJ1dGU7Cit1c2luZyBWaWV3VHlwZSA9IE5TVmlldzsKICNlbHNl
Citjb25zdGV4cHIgQ0dGbG9hdCB0ZXh0U2l6ZSA9IDIwOwogdXNpbmcgQ29sb3JUeXBlID0gVUlD
b2xvcjsKIHVzaW5nIEZvbnRUeXBlID0gVUlGb250OwotdXNpbmcgVmlld1R5cGUgPSBVSVZpZXc7
Ci11c2luZyBCZXppZXJQYXRoVHlwZSA9IFVJQmV6aWVyUGF0aDsKIHVzaW5nIFRleHRWaWV3VHlw
ZSA9IFVJVGV4dFZpZXc7Cit1c2luZyBCdXR0b25UeXBlID0gVUlCdXR0b247Cit1c2luZyBBbGln
bm1lbnRUeXBlID0gVUlTdGFja1ZpZXdBbGlnbm1lbnQ7Cit1c2luZyBWaWV3VHlwZSA9IFVJVmll
dzsKICNlbmRpZgogCi1zdGF0aWMgaWQgY29uZmlybU1hbHdhcmVTZW50aW5lbCgpCitlbnVtIGNs
YXNzIFdhcm5pbmdJdGVtIDogdWludDhfdCB7CisgICAgQmFja2dyb3VuZCwKKyAgICBCb3hCYWNr
Z3JvdW5kLAorICAgIEV4Y2xhbWF0aW9uUG9pbnQsCisgICAgVGl0bGVUZXh0LAorICAgIE1lc3Nh
Z2VUZXh0LAorICAgIFNob3dEZXRhaWxzQnV0dG9uLAorICAgIEdvQmFja0J1dHRvbgorfTsKKwor
c3RhdGljIE5TVVJMICpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCkKIHsKLSAgICByZXR1cm4gQCJX
S0NvbmZpcm1NYWx3YXJlU2VudGluZWwiOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmlu
ZzpAIldLQ29uZmlybU1hbHdhcmVTZW50aW5lbCJdOwogfQogCi1zdGF0aWMgaWQgdmlzaXRVbnNh
ZmVXZWJzaXRlU2VudGluZWwoKQorc3RhdGljIE5TVVJMICp2aXNpdFVuc2FmZVdlYnNpdGVTZW50
aW5lbCgpCiB7Ci0gICAgcmV0dXJuIEAiV0tWaXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCI7Cisg
ICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tWaXNpdFVuc2FmZVdlYnNpdGVTZW50
aW5lbCJdOwogfQogCi1zdGF0aWMgQ29sb3JUeXBlICpjb2xvck5hbWVkKE5TU3RyaW5nICpuYW1l
KQorc3RhdGljIENvbG9yVHlwZSAqY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtIGl0ZW0sIFZpZXdU
eXBlICp3YXJuaW5nKQogeworICAgIEFTU0VSVChbd2FybmluZyBpc0tpbmRPZkNsYXNzOltXS1Nh
ZmVCcm93c2luZ1dhcm5pbmcgY2xhc3NdXSk7CiAjaWYgUExBVEZPUk0oTUFDKQorCisgICAgYXV0
byBjb2xvck5hbWVkID0gW10gKE5TU3RyaW5nICpuYW1lKSAtPiBDb2xvclR5cGUqIHsKICNpZiBI
QVZFKFNBRkVfQlJPV1NJTkcpCi0gICAgcmV0dXJuIFtOU0NvbG9yIGNvbG9yTmFtZWQ6bmFtZSBi
dW5kbGU6W05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJd
XTsKKyAgICAgICAgcmV0dXJuIFtOU0NvbG9yIGNvbG9yTmFtZWQ6bmFtZSBidW5kbGU6W05TQnVu
ZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdXTsKICNlbHNlCi0g
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CiAjZW5kaWYKKyAgICB9OworCisg
ICAgc3dpdGNoIChpdGVtKSB7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6QmFja2dyb3VuZDoKKyAg
ICAgICAgcmV0dXJuIGNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdCYWNrZ3JvdW5k
Iik7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZDoKKyAgICAgICAgcmV0dXJu
IFtOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl07CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6
VGl0bGVUZXh0OgorICAgIGNhc2UgV2FybmluZ0l0ZW06OkV4Y2xhbWF0aW9uUG9pbnQ6CisgICAg
ICAgIHJldHVybiBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGl0bGUiKTsKKyAg
ICBjYXNlIFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dDoKKyAgICAgICAgcmV0dXJuIGNvbG9yTmFt
ZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdUZXh0Iik7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6
U2hvd0RldGFpbHNCdXR0b246CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6R29CYWNrQnV0dG9uOgor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9
CiAjZWxzZQotICAgIHJldHVybiBbVUlDb2xvciBjb2xvck5hbWVkOm5hbWUgaW5CdW5kbGU6W05T
QnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdIGNvbXBhdGli
bGVXaXRoVHJhaXRDb2xsZWN0aW9uOm5pbF07CisgICAgVUlDb2xvciAqcmVkID0gW1VJQ29sb3Ig
Y29sb3JXaXRoUmVkOjAuOTk4IGdyZWVuOjAuMjM5IGJsdWU6MC4yMzMgYWxwaGE6MS4wXTsKKyAg
ICBVSUNvbG9yICp3aGl0ZSA9IFtVSUNvbG9yIHdoaXRlQ29sb3JdOworICAgIGJvb2wgbmFycm93
ID0gd2FybmluZy50cmFpdENvbGxlY3Rpb24uaG9yaXpvbnRhbFNpemVDbGFzcyA9PSBVSVVzZXJJ
bnRlcmZhY2VTaXplQ2xhc3NDb21wYWN0OworCisgICAgc3dpdGNoIChpdGVtKSB7CisgICAgY2Fz
ZSBXYXJuaW5nSXRlbTo6QmFja2dyb3VuZDoKKyAgICAgICAgcmV0dXJuIHJlZDsKKyAgICBjYXNl
IFdhcm5pbmdJdGVtOjpCb3hCYWNrZ3JvdW5kOgorICAgICAgICByZXR1cm4gbmFycm93ID8gcmVk
IDogd2hpdGU7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6VGl0bGVUZXh0OgorICAgIGNhc2UgV2Fy
bmluZ0l0ZW06OkV4Y2xhbWF0aW9uUG9pbnQ6CisgICAgICAgIHJldHVybiBuYXJyb3cgPyB3aGl0
ZSA6IHJlZDsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dDoKKyAgICBjYXNlIFdh
cm5pbmdJdGVtOjpTaG93RGV0YWlsc0J1dHRvbjoKKyAgICAgICAgcmV0dXJuIG5hcnJvdyA/IHdo
aXRlIDogW1VJQ29sb3IgZGFya1RleHRDb2xvcl07CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6R29C
YWNrQnV0dG9uOgorICAgICAgICByZXR1cm4gbmFycm93ID8gd2hpdGUgOiB3YXJuaW5nLnRpbnRD
b2xvcjsKKyAgICB9CiAjZW5kaWYKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gbmlsOwogfQogCi0jaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIHZvaWQgcmVwbGFjZShOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICp0b1JlcGxhY2UsIE5TU3Ry
aW5nICpyZXBsYWNlV2l0aCkKIHsKICAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5n
ZTpbc3RyaW5nLnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aFN0cmluZzpyZXBs
YWNlV2l0aF07CkBAIC05MCw3ICsxNDQsNiBAQCBzdGF0aWMgdm9pZCBhZGRMaW5rQW5kUmVwbGFj
ZShOU011dGFibGVBCiAgICAgfSByYW5nZTpOU01ha2VSYW5nZSgwLCByZXBsYWNlV2l0aC5sZW5n
dGgpXTsKICAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5nLnN0cmlu
ZyByYW5nZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5nV2l0
aExpbmtdOwogfQotI2VuZGlmCiAKIEBpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlv
blBvaW50IDogVmlld1R5cGUKIEBlbmQKQEAgLTk5LDIyICsxNTIsMzkgQEAgQGludGVyZmFjZSBX
S1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbgogCiAtICh2b2lkKWRyYXdSZWN0OihSZWN0VHlw
ZSlyZWN0CiB7Ci0gICAgW2NvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdUaXRsZSIp
IHNldF07Ci0jaWYgUExBVEZPUk0oTUFDKQotI2RlZmluZSBhZGRBcmNXaXRoQ2VudGVyIGFwcGVu
ZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcgotICAgIE5TUmVjdCBzcXVhcmUgPSBOU01ha2VS
ZWN0KDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSk7Cisg
ICAgY29uc3RleHByIENHRmxvYXQgY2VudGVyWCA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMjsK
KyAgICBjb25zdGV4cHIgQ0dGbG9hdCBwb2ludENlbnRlclkgPSBleGNsYW1hdGlvblBvaW50U2l6
ZSAqIDcgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBwb2ludFJhZGl1cyA9IDIuMjUgKiBl
eGNsYW1hdGlvblBvaW50U2l6ZSAvIDMwOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVCb3R0
b21DZW50ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiAxMyAvIDMwOworICAgIGNvbnN0ZXhw
ciBDR0Zsb2F0IGxpbmVUb3BDZW50ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiAyMyAvIDMw
OworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVSYWRpdXMgPSAxLjc1ICogZXhjbGFtYXRpb25Q
b2ludFNpemUgLyAzMDsKKyAgICBWaWV3VHlwZSAqd2FybmluZyA9IHNlbGYuc3VwZXJ2aWV3LnN1
cGVydmlldzsKKyNpZiBQTEFURk9STShNQUMpCisgICAgW2NvbG9yRm9ySXRlbShXYXJuaW5nSXRl
bTo6RXhjbGFtYXRpb25Qb2ludCwgd2FybmluZykgc2V0XTsKKyAgICBOU0JlemllclBhdGggKmV4
Y2xhbWF0aW9uUG9pbnQgPSBbTlNCZXppZXJQYXRoIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpO
U01ha2VSZWN0KDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6
ZSldOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENl
bnRlcjogeyBjZW50ZXJYLCBsaW5lQm90dG9tQ2VudGVyWSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0
YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAgY2xvY2t3aXNlOllFU107CisgICAgW2V4Y2xhbWF0aW9u
UG9pbnQgYXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGxpbmVU
b3BDZW50ZXJZIH0gcmFkaXVzOmxpbmVSYWRpdXMgc3RhcnRBbmdsZToxODAgZW5kQW5nbGU6MzYw
IGNsb2Nrd2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGxpbmVUb1BvaW50OiB7IGNl
bnRlclggKyBsaW5lUmFkaXVzLCBsaW5lQm90dG9tQ2VudGVyWSB9XTsKKyAgICBbZXhjbGFtYXRp
b25Qb2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgcG9p
bnRDZW50ZXJZIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAg
Y2xvY2t3aXNlOllFU107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYXBwZW5kQmV6aWVyUGF0aFdp
dGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50Q2VudGVyWSB9IHJhZGl1czpwb2ludFJh
ZGl1cyBzdGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107CiAjZWxzZQot
ICAgIENHUmVjdCBzcXVhcmUgPSBDR1JlY3RNYWtlKDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXpl
LCBleGNsYW1hdGlvblBvaW50U2l6ZSk7CisgICAgYXV0byBmbGlwID0gW10gKGF1dG8geSkgewor
ICAgICAgICByZXR1cm4gZXhjbGFtYXRpb25Qb2ludFNpemUgLSB5OworICAgIH07CisgICAgW2Nv
bG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZCwgd2FybmluZykgc2V0XTsKKyAg
ICBhdXRvIHNxdWFyZSA9IENHUmVjdE1ha2UoMCwgMCwgZXhjbGFtYXRpb25Qb2ludFNpemUsIGV4
Y2xhbWF0aW9uUG9pbnRTaXplKTsKKyAgICBbW1VJQmV6aWVyUGF0aCBiZXppZXJQYXRoV2l0aFJl
Y3Q6c3F1YXJlXSBmaWxsXTsKKyAgICAKKyAgICBbY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpF
eGNsYW1hdGlvblBvaW50LCB3YXJuaW5nKSBzZXRdOworICAgIFVJQmV6aWVyUGF0aCAqZXhjbGFt
YXRpb25Qb2ludCA9IFtVSUJlemllclBhdGggYmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OnNxdWFy
ZV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBm
bGlwKGxpbmVUb3BDZW50ZXJZKSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6MiAqIHBp
RG91YmxlIGVuZEFuZ2xlOnBpRG91YmxlIGNsb2Nrd2lzZTpOT107CisgICAgW2V4Y2xhbWF0aW9u
UG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlwKGxpbmVCb3R0b21DZW50ZXJZ
KSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUgZW5kQW5nbGU6MCBjbG9j
a3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2Vu
dGVyWCwgZmxpcChwb2ludENlbnRlclkpIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6
MCBlbmRBbmdsZTpwaURvdWJsZSBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50
IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChwb2ludENlbnRlclkpIH0gcmFkaXVz
OnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUgZW5kQW5nbGU6cGlEb3VibGUgKiAyIGNs
b2Nrd2lzZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkTGluZVRvUG9pbnQ6IHsgY2Vu
dGVyWCArIGxpbmVSYWRpdXMsIGZsaXAobGluZUJvdHRvbUNlbnRlclkpIH1dOworICAgIFtleGNs
YW1hdGlvblBvaW50IGFkZExpbmVUb1BvaW50OiB7IGNlbnRlclggKyBsaW5lUmFkaXVzLCBmbGlw
KGxpbmVUb3BDZW50ZXJZKSB9XTsKICNlbmRpZgotICAgIEJlemllclBhdGhUeXBlICpleGNsYW1h
dGlvblBvaW50ID0gW0JlemllclBhdGhUeXBlIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpzcXVh
cmVdOwotICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRp
b25Qb2ludFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDEzIC8gMzAgfSByYWRpdXM6
MS43NSBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOwotICAgIFtleGNs
YW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2ludFNpemUgLyAy
LCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDIzIC8gMzAgfSByYWRpdXM6MS43NSBzdGFydEFuZ2xl
OjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107Ci0gICAgW2V4Y2xhbWF0aW9uUG9pbnQg
YWRkQXJjV2l0aENlbnRlcjogeyBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDIsIGV4Y2xhbWF0aW9u
UG9pbnRTaXplICogNyAvIDMwIH0gcmFkaXVzOjIuMjUgc3RhcnRBbmdsZTowIGVuZEFuZ2xlOjE4
MCBjbG9ja3dpc2U6WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVy
OiB7IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8g
MzAgfSByYWRpdXM6Mi4yNSBzdGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllF
U107CiAgICAgW2V4Y2xhbWF0aW9uUG9pbnQgZmlsbF07Ci0jaWYgUExBVEZPUk0oTUFDKQotI3Vu
ZGVmIGFkZEFyY1dpdGhDZW50ZXIKLSNlbmRpZgogfQogCiAtIChOU1NpemUpaW50cmluc2ljQ29u
dGVudFNpemUKQEAgLTEyNCw3ICsxOTQsNiBAQCAtIChOU1NpemUpaW50cmluc2ljQ29udGVudFNp
emUKIAogQGVuZAogCi0jaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIE5TVVJMICpyZXBvcnRBbkVy
cm9yVVJMKGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQpCiB7CiAgICAg
cmV0dXJuIFdlYkNvcmU6OlVSTCh7IH0sIG1ha2VTdHJpbmcocmVzdWx0LnJlcG9ydEFuRXJyb3JV
UkxCYXNlKCksICImdXJsPSIsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMocmVzdWx0LnVy
bCgpKSwgIiZobD0iLCBkZWZhdWx0TGFuZ3VhZ2UoKSkpOwpAQCAtMTkxLDE0ICsyNjAsNzEgQEAg
c3RhdGljIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmRldGFpbAogICAgIEFTU0VSVChyZXN1
bHQuaXNVbndhbnRlZFNvZnR3YXJlKCkpOwogICAgIHJldHVybiBtYWx3YXJlT3JVbndhbnRlZFNv
ZnR3YXJlRGV0YWlscyhyZXN1bHQsIFdFQl9VSV9OU1NUUklORyhAIldhcm5pbmdzIGFyZSBzaG93
biBmb3Igd2Vic2l0ZXMgd2hlcmUgaGFybWZ1bCBzb2Z0d2FyZSBoYXMgYmVlbiBkZXRlY3RlZC4g
WW91IGNhbiBjaGVjayAldGhlLXN0YXR1cy1vZi1zaXRlJSBvbiB0aGUgJXNhZmVCcm93c2luZ1By
b3ZpZGVyJSBkaWFnbm9zdGljIHBhZ2UuIiwgIlVud2FudGVkIHNvZnR3YXJlIHdhcm5pbmcgZGVz
Y3JpcHRpb24iKSwgQCIldGhlLXN0YXR1cy1vZi1zaXRlJSIsIGZhbHNlKTsKIH0KKworc3RhdGlj
IEJ1dHRvblR5cGUgKm1ha2VCdXR0b24oV2FybmluZ0l0ZW0gaXRlbSwgV0tTYWZlQnJvd3NpbmdX
YXJuaW5nICp3YXJuaW5nLCBTRUwgYWN0aW9uKQoreworICAgIE5TU3RyaW5nICp0aXRsZSA9IG5p
bDsKKyAgICBpZiAoaXRlbSA9PSBXYXJuaW5nSXRlbTo6U2hvd0RldGFpbHNCdXR0b24pCisgICAg
ICAgIHRpdGxlID0gV0VCX1VJX05TU1RSSU5HKEAiU2hvdyBkZXRhaWxzIiwgIkFjdGlvbiBmcm9t
IHNhZmUgYnJvd3Npbmcgd2FybmluZyIpOworICAgIGVsc2UKKyAgICAgICAgdGl0bGUgPSBXRUJf
VUlfTlNTVFJJTkcoQCJHbyBiYWNrIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2Fybmlu
ZyIpOworICAgIHRpdGxlID0gW3RpdGxlIGNhcGl0YWxpemVkU3RyaW5nXTsKKyNpZiBQTEFURk9S
TShNQUMpCisgICAgcmV0dXJuIFtOU0J1dHRvbiBidXR0b25XaXRoVGl0bGU6dGl0bGUgdGFyZ2V0
Ondhcm5pbmcgYWN0aW9uOmFjdGlvbl07CisjZWxzZQorICAgIFVJQnV0dG9uICpidXR0b24gPSBb
VUlCdXR0b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0b25UeXBlU3lzdGVtXTsKKyAgICBOU0F0dHJp
YnV0ZWRTdHJpbmcgKmF0dHJpYnV0ZWRUaXRsZSA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxv
Y10gaW5pdFdpdGhTdHJpbmc6dGl0bGUgYXR0cmlidXRlczpAeworICAgICAgICBOU1VuZGVybGlu
ZVN0eWxlQXR0cmlidXRlTmFtZTogQChOU1VuZGVybGluZVN0eWxlU2luZ2xlKSwKKyAgICAgICAg
TlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWU6IFtVSUNvbG9yIHdoaXRlQ29sb3JdLAorICAg
ICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6IGNvbG9yRm9ySXRlbShpdGVtLCB3
YXJuaW5nKSwKKyAgICAgICAgTlNGb250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9u
dE9mU2l6ZTp0ZXh0U2l6ZV0KKyAgICB9XSBhdXRvcmVsZWFzZV07CisgICAgW2J1dHRvbiBzZXRB
dHRyaWJ1dGVkVGl0bGU6YXR0cmlidXRlZFRpdGxlIGZvclN0YXRlOlVJQ29udHJvbFN0YXRlTm9y
bWFsXTsKKyAgICBbYnV0dG9uIGFkZFRhcmdldDp3YXJuaW5nIGFjdGlvbjphY3Rpb24gZm9yQ29u
dHJvbEV2ZW50czpVSUNvbnRyb2xFdmVudFRvdWNoVXBJbnNpZGVdOworICAgIHJldHVybiBidXR0
b247CisjZW5kaWYKK30KKworc3RhdGljIFZpZXdUeXBlICptYWtlVGl0bGVMYWJlbChOU1N0cmlu
ZyAqdGl0bGUsIFZpZXdUeXBlICp3YXJuaW5nKQoreworICAgIGF1dG8gYXR0cmlidXRlZFN0cmlu
ZyA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGl0bGUgYXR0
cmlidXRlczpAeworICAgICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBib2xkU3lz
dGVtRm9udE9mU2l6ZTp0aXRsZVNpemVdLAorICAgICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWU6Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpUaXRsZVRleHQsIHdhcm5pbmcpCisg
ICAgfV0gYXV0b3JlbGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gW05TVGV4
dEZpZWxkIGxhYmVsV2l0aEF0dHJpYnV0ZWRTdHJpbmc6YXR0cmlidXRlZFN0cmluZ107CisjZWxz
ZQorICAgIGF1dG8gbGFiZWwgPSBbW1VJTGFiZWwgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgbGFi
ZWwuYXR0cmlidXRlZFRleHQgPSBhdHRyaWJ1dGVkU3RyaW5nOworICAgIGxhYmVsLmxpbmVCcmVh
a01vZGUgPSBOU0xpbmVCcmVha0J5V29yZFdyYXBwaW5nOworICAgIGxhYmVsLm51bWJlck9mTGlu
ZXMgPSAwOworICAgIHJldHVybiBsYWJlbDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzZXRC
YWNrZ3JvdW5kKFZpZXdUeXBlICp2aWV3LCBDb2xvclR5cGUgKmNvbG9yKQoreworI2lmIFBMQVRG
T1JNKE1BQykKKyAgICB2aWV3LndhbnRzTGF5ZXIgPSBZRVM7CisgICAgdmlldy5sYXllci5iYWNr
Z3JvdW5kQ29sb3IgPSBjb2xvci5DR0NvbG9yOworI2Vsc2UKKyAgICB2aWV3LmJhY2tncm91bmRD
b2xvciA9IGNvbG9yOwogI2VuZGlmCit9CisKKyNpZiBQTEFURk9STShNQUMpCitAaW50ZXJmYWNl
IFdLU2FmZUJyb3dzaW5nVGV4dFZpZXdEZWxlZ2F0ZSA6IE5TT2JqZWN0PE5TVGV4dFZpZXdEZWxl
Z2F0ZT4KKyNlbHNlCitAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXdEZWxlZ2F0ZSA6
IE5TT2JqZWN0PFVJVGV4dFZpZXdEZWxlZ2F0ZT4KKyNlbmRpZgorQGVuZAogCiBAaW50ZXJmYWNl
IFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgOiBUZXh0Vmlld1R5cGUgewogQHBhY2thZ2UKLSAgICBX
ZWFrT2JqQ1B0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF90YXJnZXQ7CisgICAgUmV0YWluUHRy
PFdLU2FmZUJyb3dzaW5nVGV4dFZpZXdEZWxlZ2F0ZT4gX2RlbGVnYXRlOworICAgIFdlYWtPYmpD
UHRyPFdLU2FmZUJyb3dzaW5nV2FybmluZz4gX3dhcm5pbmc7CiB9Ci0rIChpbnN0YW5jZXR5cGUp
dmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVk
U3RyaW5nIGxpbmtUYXJnZXQ6KFdLU2FmZUJyb3dzaW5nV2FybmluZyAqKXRhcmdldDsKLSsgKGlu
c3RhbmNldHlwZSl2aWV3V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CistIChpbnN0YW5j
ZXR5cGUpaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRy
aWJ1dGVkU3RyaW5nIGZvcldhcm5pbmc6KFdLU2FmZUJyb3dzaW5nV2FybmluZyAqKXdhcm5pbmc7
CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1NhZmVCcm93c2luZ1dhcm5pbmcKQEAgLTIwOSw1
NCArMzM1LDE0OCBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5cGUpCiAg
ICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXMp
OwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KLQogICAgIF9jb21wbGV0aW9uSGFuZGxlciA9
IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwogICAgIF9yZXN1bHQgPSBtYWtlUmVmKHJlc3Vs
dCk7Ci0KKyAgICBzZXRCYWNrZ3JvdW5kKHNlbGYsIGNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6
QmFja2dyb3VuZCwgc2VsZikpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBzZWxmLndhbnRzTGF5
ZXIgPSBZRVM7Ci0gICAgc2VsZi5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBbY29sb3JOYW1lZChA
IldLU2FmZUJyb3dzaW5nV2FybmluZ0JhY2tncm91bmQiKSBDR0NvbG9yXTsKLQotICAgIE5TU3Rh
Y2tWaWV3ICp0b3AgPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3V2l0aFZpZXdzOkBbCi0gICAgICAg
IFtbV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW50IG5ld10gYXV0b3JlbGVhc2VdLAotICAg
ICAgICBbTlNUZXh0RmllbGQgbGFiZWxXaXRoQXR0cmlidXRlZFN0cmluZzpbW1tOU0F0dHJpYnV0
ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxlVGV4dChyZXN1bHQpIGF0dHJpYnV0
ZXM6QHsKLSAgICAgICAgICAgIE5TRm9udEF0dHJpYnV0ZU5hbWU6W05TRm9udCBzeXN0ZW1Gb250
T2ZTaXplOmV4Y2xhbWF0aW9uUG9pbnRTaXplXSwKLSAgICAgICAgICAgIE5TRm9yZWdyb3VuZENv
bG9yQXR0cmlidXRlTmFtZTpjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIp
Ci0gICAgICAgIH1dIGF1dG9yZWxlYXNlXV0KLSAgICBdXTsKKyAgICBbc2VsZiBhZGRDb250ZW50
XTsKKyNlbmRpZgorICAgIHJldHVybiBzZWxmOworfQogCi0gICAgV0tTYWZlQnJvd3NpbmdUZXh0
VmlldyAqbWlkZGxlID0gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6d2Fy
bmluZ1RleHQocmVzdWx0KV07CistICh2b2lkKWFkZENvbnRlbnQKK3sKKyAgICBhdXRvIGV4Y2xh
bWF0aW9uUG9pbnQgPSBbW1dLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBhdXRvIHRpdGxlID0gbWFrZVRpdGxlTGFiZWwodGl0bGVUZXh0KCpfcmVz
dWx0KSwgc2VsZik7CisgICAgYXV0byB3YXJuaW5nID0gW1tbV0tTYWZlQnJvd3NpbmdUZXh0Vmll
dyBhbGxvY10gaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOltbW05TQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6d2FybmluZ1RleHQoKl9yZXN1bHQpIGF0dHJpYnV0ZXM6QHsg
TlNGb250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0g
fV0gYXV0b3JlbGVhc2VdIGZvcldhcm5pbmc6c2VsZl0gYXV0b3JlbGVhc2VdOworICAgIGF1dG8g
c2hvd0RldGFpbHMgPSBtYWtlQnV0dG9uKFdhcm5pbmdJdGVtOjpTaG93RGV0YWlsc0J1dHRvbiwg
c2VsZiwgQHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCkpOworICAgIGF1dG8gZ29CYWNrID0g
bWFrZUJ1dHRvbihXYXJuaW5nSXRlbTo6R29CYWNrQnV0dG9uLCBzZWxmLCBAc2VsZWN0b3IoZ29C
YWNrQ2xpY2tlZCkpOworICAgIGF1dG8gYm94ID0gW1tWaWV3VHlwZSBuZXddIGF1dG9yZWxlYXNl
XTsKKyAgICBzZXRCYWNrZ3JvdW5kKGJveCwgY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCb3hC
YWNrZ3JvdW5kLCBzZWxmKSk7CisgICAgYm94LmxheWVyLmNvcm5lclJhZGl1cyA9IGJveENvcm5l
clJhZGl1czsKKworICAgIGZvciAoVmlld1R5cGUgKnZpZXcgaW4gQFtleGNsYW1hdGlvblBvaW50
LCB0aXRsZSwgd2FybmluZywgZ29CYWNrLCBzaG93RGV0YWlsc10pIHsKKyAgICAgICAgdmlldy50
cmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POworICAgICAgICBb
Ym94IGFkZFN1YnZpZXc6dmlld107CisgICAgfQorICAgIGJveC50cmFuc2xhdGVzQXV0b3Jlc2l6
aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POworICAgIFtzZWxmIGFkZFN1YnZpZXc6Ym94XTsK
IAotICAgIE5TU3RhY2tWaWV3ICpib3R0b20gPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3V2l0aFZp
ZXdzOkBbCi0gICAgICAgIFtOU0J1dHRvbiBidXR0b25XaXRoVGl0bGU6V0VCX1VJX05TU1RSSU5H
KEAiU2hvdyBkZXRhaWxzIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpIHRh
cmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3Ioc2hvd0RldGFpbHNDbGlja2VkKV0sCi0gICAgICAg
IFtOU0J1dHRvbiBidXR0b25XaXRoVGl0bGU6V0VCX1VJX05TU1RSSU5HKEAiR28gYmFjayIsICJB
Y3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSB0YXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKGdvQmFja0NsaWNrZWQpXQorI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKKyAgICBbTlNM
YXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWludHM6QFsKKyAgICAgICAgW1tzZWxmLnRv
cEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LnRvcEFuY2hvcl0gY29uc3RyYWlu
dEVxdWFsVG9BbmNob3I6W2JveC5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9y
OnNlbGYuYm90dG9tQW5jaG9yXSBtdWx0aXBsaWVyOjAuNV0sCisgICAgICAgIFtbc2VsZi5sZWZ0
QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gubGVmdEFuY2hvcl0gY29uc3RyYWlu
dEVxdWFsVG9BbmNob3I6W2JveC5yaWdodEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6
c2VsZi5yaWdodEFuY2hvcl1dLAorCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWlu
dExlc3NUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWF4V2lkdGhdLAorICAgICAgICBbYm94LndpZHRo
QW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0FuY2hvcjpzZWxmLndpZHRoQW5jaG9y
XSwKKworICAgICAgICBbW2JveC5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hv
cjpleGNsYW1hdGlvblBvaW50LmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3Rh
bnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbYm94LmxlYWRpbmdBbmNob3IgYW5jaG9yV2l0aE9m
ZnNldFRvQW5jaG9yOnRpdGxlLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3Rh
bnQ6bWFyZ2luU2l6ZSAqIDEuNSArIGV4Y2xhbWF0aW9uUG9pbnRTaXplXSwKKyAgICAgICAgW1ti
b3gubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6d2FybmluZy5sZWFkaW5n
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorCisgICAgICAg
IFtbdGl0bGUudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50cmFp
bGluZ0FuY2hvcl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWFyZ2lu
U2l6ZV0sCisgICAgICAgIFtbd2FybmluZy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0
VG9BbmNob3I6Ym94LnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5PckVxdWFs
VG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tnb0JhY2sudHJhaWxpbmdBbmNob3Ig
YW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50cmFpbGluZ0FuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKworICAgICAgICBbW3RpdGxlLnRvcEFuY2hvciBh
bmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZXhjbGFtYXRpb25Qb2ludC50b3BBbmNob3JdIGNvbnN0
cmFpbnRFcXVhbFRvQW5jaG9yOltleGNsYW1hdGlvblBvaW50LmJvdHRvbUFuY2hvciBhbmNob3JX
aXRoT2Zmc2V0VG9BbmNob3I6dGl0bGUuYm90dG9tQW5jaG9yXV0sCisKKyAgICAgICAgW2dvQmFj
ay50b3BBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6c2hvd0RldGFpbHMudG9wQW5jaG9y
XSwKKyAgICAgICAgW1tzaG93RGV0YWlscy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0
VG9BbmNob3I6Z29CYWNrLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6
bWFyZ2luU2l6ZV0sCisKKyAgICAgICAgW1tib3gudG9wQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRU
b0FuY2hvcjp0aXRsZS50b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2lu
U2l6ZV0sCisgICAgICAgIFtbdGl0bGUuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0Fu
Y2hvcjp3YXJuaW5nLnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5T
aXplXSwKKyAgICAgICAgW1t3YXJuaW5nLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9B
bmNob3I6Z29CYWNrLnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5T
aXplXSwKKyAgICAgICAgW1tnb0JhY2suYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0Fu
Y2hvcjpib3guYm90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNp
emVdCiAgICAgXV07CisjZWxzZQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworI2VuZGlmCit9
CiAKLSAgICBmb3IgKE5TU3RhY2tWaWV3ICp2aWV3IGluIEBbdG9wLCBib3R0b21dKQotICAgICAg
ICBbdmlldyBzZXRIdWdnaW5nUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVkIGZvck9y
aWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxdOworLSAodm9p
ZClzaG93RGV0YWlsc0NsaWNrZWQKK3sKKyAgICBWaWV3VHlwZSAqYm94ID0gc2VsZi5zdWJ2aWV3
cy5sYXN0T2JqZWN0OworICAgIEJ1dHRvblR5cGUgKnNob3dEZXRhaWxzID0gYm94LnN1YnZpZXdz
Lmxhc3RPYmplY3Q7CisgICAgW3Nob3dEZXRhaWxzIHJlbW92ZUZyb21TdXBlcnZpZXddOworCisg
ICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqdGV4dCA9IGRldGFpbHNUZXh0KCpfcmVzdWx0
KTsKKyAgICBbdGV4dCBhZGRBdHRyaWJ1dGVzOkB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6W0ZvbnRU
eXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdIH0gcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgdGV4
dC5sZW5ndGgpXTsKKyAgICBXS1NhZmVCcm93c2luZ1RleHRWaWV3ICpkZXRhaWxzID0gW1tbV0tT
YWZlQnJvd3NpbmdUZXh0VmlldyBhbGxvY10gaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOnRleHQg
Zm9yV2FybmluZzpzZWxmXSBhdXRvcmVsZWFzZV07CisgICAgVmlld1R5cGUgKmJvdHRvbSA9IFtb
Vmlld1R5cGUgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgc2V0QmFja2dyb3VuZChib3R0b20sIGNv
bG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZCwgc2VsZikpOworICAgIGJvdHRv
bS5sYXllci5jb3JuZXJSYWRpdXMgPSBib3hDb3JuZXJSYWRpdXM7CiAKLSAgICBTdGFja1ZpZXdU
eXBlICpib3ggPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3V2l0aFZpZXdzOkBbdG9wLCBtaWRkbGUs
IGJvdHRvbV1dOwotICAgIGJveC53YW50c0xheWVyID0gWUVTOwotICAgIGJveC5sYXllci5iYWNr
Z3JvdW5kQ29sb3IgPSBbW05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9yXSBDR0NvbG9yXTsK
LSAgICBib3gubGF5ZXIuY29ybmVyUmFkaXVzID0gNjsKLSAgICBib3guYWxpZ25tZW50ID0gTlNM
YXlvdXRBdHRyaWJ1dGVDZW50ZXJYOwotICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWludEVx
dWFsVG9Db25zdGFudDptYXhXaWR0aF0uYWN0aXZlID0gdHJ1ZTsKLSAgICBib3guZWRnZUluc2V0
cyA9IHsgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSB9Owot
ICAgIFtib3ggc2V0SHVnZ2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JP
cmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKLSAgICBb
c2VsZiBhZGRWaWV3OmJveCBpbkdyYXZpdHk6TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVyXTsKKyAg
ICBjb25zdGV4cHIgYXV0byBtYXhZID0ga0NBTGF5ZXJNaW5YTWF4WUNvcm5lciB8IGtDQUxheWVy
TWF4WE1heFlDb3JuZXI7CisgICAgY29uc3RleHByIGF1dG8gbWluWSA9IGtDQUxheWVyTWluWE1p
bllDb3JuZXIgfCBrQ0FMYXllck1heFhNaW5ZQ29ybmVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAg
ICBib3gubGF5ZXIubWFza2VkQ29ybmVycyA9IG1heFk7CisgICAgYm90dG9tLmxheWVyLm1hc2tl
ZENvcm5lcnMgPSBtaW5ZOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgd29ya2luZyBv
biBpT1MuCi0gICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6
Olllcyk7CisgICAgYm94LmxheWVyLm1hc2tlZENvcm5lcnMgPSBtaW5ZOworICAgIGJvdHRvbS5s
YXllci5tYXNrZWRDb3JuZXJzID0gbWF4WTsKKyNlbmRpZgorCisgICAgVmlld1R5cGUgKmxpbmUg
PSBbW1ZpZXdUeXBlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIHNldEJhY2tncm91bmQobGluZSwg
W0NvbG9yVHlwZSBsaWdodEdyYXlDb2xvcl0pOworICAgIGZvciAoVmlld1R5cGUgKnZpZXcgaW4g
QFtkZXRhaWxzLCBib3R0b20sIGxpbmVdKQorICAgICAgICB2aWV3LnRyYW5zbGF0ZXNBdXRvcmVz
aXppbmdNYXNrSW50b0NvbnN0cmFpbnRzID0gTk87CisKKyAgICBbc2VsZiBhZGRTdWJ2aWV3OmJv
dHRvbV07CisgICAgW2JvdHRvbSBhZGRTdWJ2aWV3OmxpbmVdOworICAgIFtib3R0b20gYWRkU3Vi
dmlldzpkZXRhaWxzXTsKKyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgW05TTGF5b3V0Q29u
c3RyYWludCBhY3RpdmF0ZUNvbnN0cmFpbnRzOkBbCisgICAgICAgIFtib3gud2lkdGhBbmNob3Ig
Y29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLndpZHRoQW5jaG9yXSwKKyAgICAgICAgW2Jv
eC5ib3R0b21BbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLnRvcEFuY2hvcl0s
CisgICAgICAgIFtib3gubGVhZGluZ0FuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpib3R0
b20ubGVhZGluZ0FuY2hvcl0sCisgICAgICAgIFtsaW5lLndpZHRoQW5jaG9yIGNvbnN0cmFpbnRF
cXVhbFRvQW5jaG9yOmJvdHRvbS53aWR0aEFuY2hvcl0sCisgICAgICAgIFtsaW5lLmxlYWRpbmdB
bmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLmxlYWRpbmdBbmNob3JdLAorICAg
ICAgICBbbGluZS50b3BBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLnRvcEFu
Y2hvcl0sCisgICAgICAgIFtsaW5lLmhlaWdodEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0NvbnN0
YW50OjFdLAorICAgICAgICBbW2JvdHRvbS50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5j
aG9yOmRldGFpbHMudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNp
emVdLAorICAgICAgICBbW2RldGFpbHMuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0Fu
Y2hvcjpib3R0b20uYm90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdp
blNpemVdLAorICAgICAgICBbW2JvdHRvbS5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRU
b0FuY2hvcjpkZXRhaWxzLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6
bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbZGV0YWlscy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRo
T2Zmc2V0VG9BbmNob3I6Ym90dG9tLnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0Nv
bnN0YW50Om1hcmdpblNpemVdLAorICAgIF1dOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyNlbmRpZgorICAgIFtzZWxmIGxheW91dFRleHRdOworI2lmICFQTEFURk9STShNQUMp
CisgICAgW3NlbGYgbGF5b3V0SWZOZWVkZWRdOworICAgIENHRmxvYXQgaGVpZ2h0ID0gMDsKKyAg
ICBmb3IgKFZpZXdUeXBlICpzdWJ2aWV3IGluIHNlbGYuc3Vidmlld3MpCisgICAgICAgIGhlaWdo
dCArPSBzdWJ2aWV3LmZyYW1lLnNpemUuaGVpZ2h0OworICAgIFtzZWxmIHNldENvbnRlbnRTaXpl
OiB7IHNlbGYuZnJhbWUuc2l6ZS53aWR0aCwgc2VsZi5mcmFtZS5zaXplLmhlaWdodCArIGhlaWdo
dCB9XTsKICNlbmRpZgotICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKWxheW91dFRleHQK
K3sKKyAgICBmb3IgKFZpZXdUeXBlICpzdWJ2aWV3IGluIHNlbGYuc3Vidmlld3MpIHsKKyAgICAg
ICAgZm9yIChWaWV3VHlwZSAqdmlldyBpbiBzdWJ2aWV3LnN1YnZpZXdzKSB7CisgICAgICAgICAg
ICBpZiAoW3ZpZXcgaXNLaW5kT2ZDbGFzczpbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyBjbGFzc11d
KQorICAgICAgICAgICAgICAgIFt2aWV3IGludmFsaWRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZV07
CisgICAgICAgIH0KKyAgICB9CiB9CiAKICNpZiBQTEFURk9STShNQUMpCiAtICh2b2lkKWxheW91
dAogewotICAgIGZvciAoTlNWaWV3ICp2aWV3IGluIHNlbGYuc3Vidmlld3MuZmlyc3RPYmplY3Qu
c3Vidmlld3MpCi0gICAgICAgIFt2aWV3IGludmFsaWRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZV07
CiAgICAgW3N1cGVyIGxheW91dF07CisgICAgW3NlbGYgbGF5b3V0VGV4dF07Cit9CisjZWxzZQor
LSAodm9pZClsYXlvdXRTdWJ2aWV3cworeworICAgIFtzdXBlciBsYXlvdXRTdWJ2aWV3c107Cisg
ICAgW3NlbGYgbGF5b3V0VGV4dF07Cit9CisKKy0gKHZvaWQpZGlkTW92ZVRvV2luZG93Cit7Cisg
ICAgW3NlbGYgYWRkQ29udGVudF07CiB9CiAjZW5kaWYKIApAQCAtMjczLDcgKzQ5Myw3IEBAIC0g
KHZvaWQpZ29CYWNrQ2xpY2tlZAogICAgICAgICBfY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpD
b250aW51ZVVuc2FmZUxvYWQ6Ok5vKTsKIH0KIAotLSAodm9pZCljbGlja2VkT25MaW5rOihpZCls
aW5rCistICh2b2lkKWNsaWNrZWRPbkxpbms6KE5TVVJMICopbGluawogewogICAgIGlmICghX2Nv
bXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47CkBAIC0zMDQsNjggKzUyNCw2MCBAQCAt
ICh2b2lkKWNsaWNrZWRPbkxpbms6KGlkKWxpbmsKICAgICBfY29tcGxldGlvbkhhbmRsZXIoKE5T
VVJMICopbGluayk7CiB9CiAKLS0gKHZvaWQpc2hvd0RldGFpbHNDbGlja2VkCi17Ci0jaWYgUExB
VEZPUk0oTUFDKQotICAgIE5TU3RhY2tWaWV3ICpib3ggPSBzZWxmLnZpZXdzLmZpcnN0T2JqZWN0
OwotICAgIE5TU3RhY2tWaWV3ICpib3R0b20gPSBib3gudmlld3MubGFzdE9iamVjdDsKLSAgICBO
U0J1dHRvbiAqc2hvd0RldGFpbHNCdXR0b24gPSBib3R0b20udmlld3MuZmlyc3RPYmplY3Q7Ci0g
ICAgW2JvdHRvbSByZW1vdmVWaWV3OnNob3dEZXRhaWxzQnV0dG9uXTsKLSAgICBXS1NhZmVCcm93
c2luZ1RleHRWaWV3ICpkZXRhaWxzID0gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhB
dHRyaWJ1dGVkU3RyaW5nOmRldGFpbHNUZXh0KCpfcmVzdWx0KSBsaW5rVGFyZ2V0OnNlbGZdOwot
ICAgIFtib3ggYWRkVmlldzpkZXRhaWxzIGluR3Jhdml0eTpOU1N0YWNrVmlld0dyYXZpdHlDZW50
ZXJdOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgd29ya2luZyBvbiBpT1MuCi0jZW5k
aWYKLX0KLQogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tTYWZlQnJvd3NpbmdUZXh0Vmlldwog
Ci0rIChpbnN0YW5jZXR5cGUpdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRT
dHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nIGxpbmtUYXJnZXQ6KFdLU2FmZUJyb3dzaW5nV2Fybmlu
ZyAqKXRhcmdldAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXR0cmlidXRlZFN0cmluZzooTlNB
dHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZyBmb3JXYXJuaW5nOihXS1NhZmVCcm93
c2luZ1dhcm5pbmcgKil3YXJuaW5nCiB7Ci0gICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqaW5z
dGFuY2UgPSBbW3NlbGYgbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgaWYgKCFpbnN0YW5jZSkKKyAg
ICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICBp
bnN0YW5jZS0+X3RhcmdldCA9IHRhcmdldDsKKyAgICBzZWxmLT5fd2FybmluZyA9IHdhcm5pbmc7
CisgICAgc2VsZi0+X2RlbGVnYXRlID0gYWRvcHROUyhbV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0Rl
bGVnYXRlIG5ld10pOworICAgIHNlbGYuZGVsZWdhdGUgPSBzZWxmLT5fZGVsZWdhdGUuZ2V0KCk7
CiAKLSAgICBDb2xvclR5cGUgKmZvcmVncm91bmRDb2xvciA9IGNvbG9yTmFtZWQoQCJXS1NhZmVC
cm93c2luZ1dhcm5pbmdUZXh0Iik7CisgICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBj
b2xvckZvckl0ZW0oV2FybmluZ0l0ZW06Ok1lc3NhZ2VUZXh0LCB3YXJuaW5nKTsKICAgICBOU011
dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbYXR0cmlidXRlZFN0cmluZyBtdXRhYmxl
Q29weV07Ci0gICAgW3N0cmluZyBhZGRBdHRyaWJ1dGVzOkB7Ci0gICAgICAgIE5TRm9yZWdyb3Vu
ZENvbG9yQXR0cmlidXRlTmFtZSA6IGZvcmVncm91bmRDb2xvciwKLSAgICAgICAgTlNGb250QXR0
cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0KLSAgICB9IHJh
bmdlOk5TTWFrZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgpXTsKLQotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBbaW5zdGFuY2Ugc2V0TGlua1RleHRBdHRyaWJ1dGVzOkB7IE5TRm9yZWdyb3VuZENvbG9y
QXR0cmlidXRlTmFtZSA6IGZvcmVncm91bmRDb2xvciB9XTsKLSAgICBbaW5zdGFuY2Ugc2V0Q29u
dGVudEh1Z2dpbmdQcmlvcml0eTpOU0xheW91dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRp
b246TlNMYXlvdXRDb25zdHJhaW50T3JpZW50YXRpb25WZXJ0aWNhbF07Ci0gICAgW2luc3RhbmNl
IHNldENvbnRlbnRDb21wcmVzc2lvblJlc2lzdGFuY2VQcmlvcml0eTpOU0xheW91dFByaW9yaXR5
UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNMYXlvdXRDb25zdHJhaW50T3JpZW50YXRpb25WZXJ0
aWNhbF07Ci0gICAgW2luc3RhbmNlLndpZHRoQW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1
YWxUb0NvbnN0YW50Om1heFdpZHRoIC0gMiAqIG1hcmdpblNpemVdLmFjdGl2ZSA9IHRydWU7Ci0g
ICAgW2luc3RhbmNlIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciB3aW5kb3dCYWNrZ3JvdW5k
Q29sb3JdXTsKLSAgICBbaW5zdGFuY2UudGV4dFN0b3JhZ2UgYXBwZW5kQXR0cmlidXRlZFN0cmlu
ZzpzdHJpbmddOworICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xv
ckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfSByYW5nZTpOU01ha2VSYW5nZSgwLCBz
dHJpbmcubGVuZ3RoKV07CisgICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9yOmNvbG9yRm9ySXRl
bShXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZCwgd2FybmluZyldOworICAgIFtzZWxmIHNldExp
bmtUZXh0QXR0cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3Jl
Z3JvdW5kQ29sb3IgfV07CisgICAgW3NlbGYudGV4dFN0b3JhZ2UgYXBwZW5kQXR0cmlidXRlZFN0
cmluZzpzdHJpbmddOworICAgIHNlbGYuZWRpdGFibGUgPSBOTzsKKyNpZiAhUExBVEZPUk0oTUFD
KQorICAgIHNlbGYuc2Nyb2xsRW5hYmxlZCA9IE5POwogI2VuZGlmCi0gICAgcmV0dXJuIGluc3Rh
bmNlOwotfQogCi0rIChpbnN0YW5jZXR5cGUpdmlld1dpdGhTdHJpbmc6KE5TU3RyaW5nICopc3Ry
aW5nCi17Ci0gICAgcmV0dXJuIFtXS1NhZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0cmli
dXRlZFN0cmluZzpbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0
cmluZzpzdHJpbmddIGF1dG9yZWxlYXNlXSBsaW5rVGFyZ2V0Om5pbF07CisgICAgcmV0dXJuIHNl
bGY7CiB9CiAKLS0gKE5TU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQorLSAoQ0dTaXplKWludHJp
bnNpY0NvbnRlbnRTaXplCiB7Ci0gICAgW3NlbGYubGF5b3V0TWFuYWdlciBlbnN1cmVMYXlvdXRG
b3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl07Ci0gICAgYXV0byBzaXplID0gW3Nl
bGYubGF5b3V0TWFuYWdlciB1c2VkUmVjdEZvclRleHRDb250YWluZXI6c2VsZi50ZXh0Q29udGFp
bmVyXS5zaXplOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4geyBOU1ZpZXdOb0ludHJp
bnNpY01ldHJpYywgc2l6ZS5oZWlnaHQgfTsKKyAgICBbc2VsZi5sYXlvdXRNYW5hZ2VyIGVuc3Vy
ZUxheW91dEZvclRleHRDb250YWluZXI6c2VsZi50ZXh0Q29udGFpbmVyXTsKKyAgICByZXR1cm4g
eyBOU1ZpZXdOb0ludHJpbnNpY01ldHJpYywgW3NlbGYubGF5b3V0TWFuYWdlciB1c2VkUmVjdEZv
clRleHRDb250YWluZXI6c2VsZi50ZXh0Q29udGFpbmVyXS5zaXplLmhlaWdodCB9OwogI2Vsc2UK
LSAgICByZXR1cm4geyBVSVZpZXdOb0ludHJpbnNpY01ldHJpYywgc2l6ZS5oZWlnaHQgfTsKKyAg
ICBhdXRvIHdpZHRoID0gc3RkOjptaW48Q0dGbG9hdD4obWF4V2lkdGgsIFtfd2FybmluZyBmcmFt
ZV0uc2l6ZS53aWR0aCkgLSAyICogbWFyZ2luU2l6ZTsKKyAgICBjb25zdGV4cHIgYXV0byBub0hl
aWdodENvbnN0cmFpbnQgPSAxMDAwMDAwOworICAgIHJldHVybiB7IHdpZHRoLCBbc2VsZiBzaXpl
VGhhdEZpdHM6IHsgd2lkdGgsIG5vSGVpZ2h0Q29uc3RyYWludCB9XS5oZWlnaHQgfTsKICNlbmRp
ZgogfQogCi0tICh2b2lkKWNsaWNrZWRPbkxpbms6KGlkKWxpbmsgYXRJbmRleDooTlNVSW50ZWdl
ciljaGFySW5kZXgKK0BlbmQKKworQGltcGxlbWVudGF0aW9uIFdLU2FmZUJyb3dzaW5nVGV4dFZp
ZXdEZWxlZ2F0ZQorCisjaWYgUExBVEZPUk0oTUFDKQorLSAoQk9PTCl0ZXh0VmlldzooTlNUZXh0
VmlldyAqKXRleHRWaWV3IGNsaWNrZWRPbkxpbms6KGlkKWxpbmsgYXRJbmRleDooTlNVSW50ZWdl
ciljaGFySW5kZXgKK3sKKyAgICBbKChXS1NhZmVCcm93c2luZ1RleHRWaWV3ICopdGV4dFZpZXcp
LT5fd2FybmluZyBjbGlja2VkT25MaW5rOmxpbmtdOworICAgIHJldHVybiBZRVM7Cit9CisjZWxz
ZQorLSAoQk9PTCl0ZXh0VmlldzooVUlUZXh0VmlldyAqKXRleHRWaWV3IHNob3VsZEludGVyYWN0
V2l0aFVSTDooTlNVUkwgKilVUkwgaW5SYW5nZTooTlNSYW5nZSljaGFyYWN0ZXJSYW5nZSBpbnRl
cmFjdGlvbjooVUlUZXh0SXRlbUludGVyYWN0aW9uKWludGVyYWN0aW9uCiB7Ci0gICAgW190YXJn
ZXQgY2xpY2tlZE9uTGluazpsaW5rXTsKKyAgICBbKChXS1NhZmVCcm93c2luZ1RleHRWaWV3ICop
dGV4dFZpZXcpLT5fd2FybmluZyBjbGlja2VkT25MaW5rOlVSTF07CisgICAgcmV0dXJuIE5POwog
fQorI2VuZGlmCiAKIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dl
YlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2Ev
V2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDkgKzIyNiw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdTY2FsZShDR0Zsb2F0KTsKICAgICBDR0Zsb2F0IHZp
ZXdTY2FsZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25z
dCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8Q29u
dGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKTsKLSAgICB2b2lkIGNsZWFyU2Fm
ZUJyb3dzaW5nV2FybmluZygpOwotCiAgICAgV0tMYXlvdXRNb2RlIGxheW91dE1vZGUoKSBjb25z
dDsKICAgICB2b2lkIHNldExheW91dE1vZGUoV0tMYXlvdXRNb2RlKTsKICAgICB2b2lkIHVwZGF0
ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9kZXMoKTsKQEAgLTQ3MSw4ICs0NjgsNiBAQCBwdWJs
aWM6CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckN1cnJlbnRJdGVtKCk7CiAg
ICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0
SXRlbSYpOwogCi0gICAgV0tTYWZlQnJvd3NpbmdXYXJuaW5nICpzYWZlQnJvd3NpbmdXYXJuaW5n
KCkgeyByZXR1cm4gbV9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpOyB9Ci0KICAgICBWaWV3R2Vz
dHVyZUNvbnRyb2xsZXIqIGdlc3R1cmVDb250cm9sbGVyKCkgeyByZXR1cm4gbV9nZXN0dXJlQ29u
dHJvbGxlci5nZXQoKTsgfQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciYgZW5zdXJlR2VzdHVy
ZUNvbnRyb2xsZXIoKTsKICAgICB2b2lkIHNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdl
c3R1cmVzKGJvb2wpOwpAQCAtNzk4LDcgKzc5Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3Jl
cXVpcmVzVXNlckFjdGlvbkZvckVkaXRpbmdDb250cm9sc01hbmFnZXIgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9p
c1RleHRJbnNlcnRpb25SZXBsYWNpbmdTb2Z0U3BhY2UgeyBmYWxzZSB9OwotICAgIFJldGFpblB0
cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IG1fc2FmZUJyb3dzaW5nV2FybmluZzsKICAgICAKICNp
ZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIE5TSW50ZWdlciBtX2luaXRpYWxOdW1iZXJPZlZh
bGlkSXRlbXNGb3JEcm9wIHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk5LDI0
ICsxNTk5LDYgQEAgYm9vbCBXZWJWaWV3SW1wbDo6cmVzaWduRmlyc3RSZXNwb25kZXIoKQogICAg
IHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2Fy
bmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21w
bGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fdmlldykKLSAgICAgICAgcmV0dXJuIGNvbXBs
ZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKLQotICAgIG1fc2FmZUJyb3dz
aW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRX
aXRoRnJhbWU6W21fdmlldyBib3VuZHNdIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQgY29tcGxl
dGlvbkhhbmRsZXI6W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJs
ZSB7Ci0gICAgICAgIGlmICh3ZWFrVGhpcykKLSAgICAgICAgICAgIFtzdGQ6OmV4Y2hhbmdlKHdl
YWtUaGlzLT5tX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZyb21TdXBlcnZp
ZXddOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwotICAgIH1d
KTsKLSAgICBbbV92aWV3IGFkZFN1YnZpZXc6bV9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpXTsK
LX0KLQotdm9pZCBXZWJWaWV3SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKLXsKLSAg
ICBbc3RkOjpleGNoYW5nZShtX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZy
b21TdXBlcnZpZXddOwotfQotCiBib29sIFdlYlZpZXdJbXBsOjppc0ZvY3VzZWQoKSBjb25zdAog
ewogICAgIGlmIChtX2luQmVjb21lRmlyc3RSZXNwb25kZXIpCkBAIC0xNjU1LDcgKzE2MzcsNiBA
QCB2b2lkIFdlYlZpZXdJbXBsOjpyZW5ld0dTdGF0ZSgpCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRG
cmFtZVNpemUoQ0dTaXplKQogewogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZENoYW5nZUZyYW1l
U2l6ZV07Ci0gICAgW21fc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpbbV92aWV3IGJvdW5k
c11dOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpCkBA
IC01MTU4LDcgKzUxMzksNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpmbGFnc0NoYW5nZWQoTlNFdmVu
dCAqCiAjZGVmaW5lIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSX0lOVEVSTkFMKEV2ZW50TmFt
ZSkgXAogICAgIHZvaWQgV2ViVmlld0ltcGw6OkV2ZW50TmFtZShOU0V2ZW50ICpldmVudCkgXAog
ICAgIHsgXAotICAgICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMgfHwgbV9zYWZlQnJv
d3NpbmdXYXJuaW5nKSBcCisgICAgICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykgXAog
ICAgICAgICAgICAgcmV0dXJuOyBcCiAgICAgICAgIGlmIChOU1RleHRJbnB1dENvbnRleHQgKmNv
bnRleHQgPSBbbV92aWV3IGlucHV0Q29udGV4dF0pIHsgXAogICAgICAgICAgICAgYXV0byB3ZWFr
VGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsgXApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDIzNzg2MykKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xMTUsOSArMTE1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyVGV4dEluZGlj
YXRvcihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uKSBvdmVy
cmlkZTsKICAgICB2b2lkIHNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCkg
b3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVC
cm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNv
bnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKLQogICAgIHZvaWQgZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJp
ZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsK
ICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJl
ZUNvbnRleHQmKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9Q
YWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBjb3B5KQpA
QCAtNjIsNyArNjIsNyBAQAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0tleWVkQXJjaGl2ZXJT
UEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCi0jZGVmaW5lIE1FU1NBR0VfQ0hFQ0so
YXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBtX3dlYlZpZXctPl9wYWdl
LT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKQorI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlv
bikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgbV93ZWJWaWV3LmdldCgpLT5fcGFnZS0+
cHJvY2VzcygpLmNvbm5lY3Rpb24oKSkKIAogQGludGVyZmFjZSBXS0VkaXRDb21tYW5kT2JqQyA6
IE5TT2JqZWN0CiB7CkBAIC0xNjEsMTggKzE2MSwxOCBAQCBJbnRTaXplIFBhZ2VDbGllbnRJbXBs
Ojp2aWV3U2l6ZSgpCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQog
ewogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTMzMDk4Ci0gICAgcmV0dXJuIGlzVmlld1Zpc2libGUoKSB8fCAobV93ZWJWaWV3ICYmIFttX3dl
YlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlXSk7CisgICAgcmV0dXJuIGlzVmll
d1Zpc2libGUoKSB8fCBbbV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZV07
CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQogewogICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDk4Ci0gICAg
cmV0dXJuIGlzVmlld1dpbmRvd0FjdGl2ZSgpIHx8IChtX3dlYlZpZXcgJiYgW21fd2ViVmlldyBf
aXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVdKTsKKyAgICByZXR1cm4gaXNWaWV3V2luZG93
QWN0aXZlKCkgfHwgW21fd2ViVmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVdOwog
fQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkKIHsKLSAgICBpZiAoaXNW
aWV3SW5XaW5kb3coKSAmJiAhbV93ZWJWaWV3Ll9pc0JhY2tncm91bmQpCisgICAgaWYgKGlzVmll
d0luV2luZG93KCkgJiYgIVttX3dlYlZpZXcgX2lzQmFja2dyb3VuZF0pCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIAogICAgIGlmIChbbV93ZWJWaWV3IF9pc1Nob3dpbmdWaWRlb1BpY3R1cmVJ
blBpY3R1cmVdKQpAQCAtMTg3LDggKzE4Nyw4IEBAIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmll
d1Zpc2libGUoKQogYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQogewogICAg
IC8vIEZJWE1FOiBpbiBXZWJLaXRUZXN0UnVubmVyLCBtX3dlYlZpZXcgaXMgbmlsLCBzbyBjaGVj
ayB0aGUgY29udGVudCB2aWV3IGluc3RlYWQuCi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAg
cmV0dXJuIFttX3dlYlZpZXcgd2luZG93XTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJW
aWV3LmdldCgpKQorICAgICAgICByZXR1cm4gW3dlYlZpZXcgd2luZG93XTsKIAogICAgIHJldHVy
biBbbV9jb250ZW50VmlldyB3aW5kb3ddOwogfQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgUGFn
ZUNsaWVudEltcGw6OmRpZENvbXBsZXRlU3ludGhldGkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJGcmFtZVByb3h5
JiBmcmFtZSwgQVBJOjpTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBGdW5jdGlvbjx2b2lkKGJvb2wp
PiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgW1t3cmFwcGVyKG1fd2ViVmlldy0+X3BhZ2Ut
PnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gZGVjaWRlUG9s
aWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4o
KSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25I
YW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlld107CisgICAgW1t3cmFwcGVyKG1fd2ViVmll
dy5nZXQoKS0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Qcm92
aWRlcl0gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpvcmlnaW4u
c2VjdXJpdHlPcmlnaW4oKSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4Y2hh
bmdlKGNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlldy5nZXQoKS5nZXQo
KV07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9y
TWFpbkZyYW1lKCkKQEAgLTQ2OSwxNiArNDY5LDYgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0
VGV4dEluZGljYXRvckFuaQogewogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJy
b3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4m
Jik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0
OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZv
aWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCi17Ci0gICAgLy8g
RklYTUU6IEltcGxlbWVudC4KLX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJBY2NlbGVy
YXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250
ZXh0KQogewogfQpAQCAtNjk1LDIzICs2ODUsMjMgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2Ny
b2xsaW5nTm9kZVNjcm9sbAogCiBWZWN0b3I8U3RyaW5nPiBQYWdlQ2xpZW50SW1wbDo6bWltZVR5
cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcnMoKQogewotICAgIHJldHVybiBtX3dlYlZpZXcu
X2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Ll9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3Zp
ZGVyczsKKyAgICByZXR1cm4gW21fd2ViVmlldyBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldLl9t
aW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVyczsKIH0KIAogdm9pZCBQYWdlQ2xpZW50
SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpCiB7CiAgICAgW21fd2ViVmlldyBfbmF2
aWdhdGlvbkdlc3R1cmVEaWRCZWdpbl07Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFn
ZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpOworICAgIE5h
dmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmln
YXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdh
dGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJ
dGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmll
dy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwor
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2Up
Lm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogfQogCiB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxOYXZpZ2F0
ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6
OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3
aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1f
d2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0
ZSwgaXRlbSk7CiAgICAgW21fd2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmRdOwogfQog
CkBAIC03MjIsMTIgKzcxMiwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZURpCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNo
b3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6
OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBz
aG90KGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5n
ZXQoKS0+X3BhZ2UpLndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7CiB9CiAKIHZv
aWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QoKQog
ewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5h
dmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CisgICAgTmF2aWdhdGlvblN0YXRl
Ojpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVT
bmFwc2hvdFdhc1JlbW92ZWQoKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmlyc3RW
aXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCkKQEAgLTg0MCw3ICs4MzAsNyBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRCiAgICAgICAgIGNvbXBsZXRp
b25IYW5kbGVyKHBhc3N3b3JkKTsKICAgICB9KTsKIAotICAgIGlmIChXS1Bhc3N3b3JkVmlldyAq
cGFzc3dvcmRWaWV3ID0gbV93ZWJWaWV3Ll9wYXNzd29yZFZpZXcpIHsKKyAgICBpZiAoV0tQYXNz
d29yZFZpZXcgKnBhc3N3b3JkVmlldyA9IFttX3dlYlZpZXcgX3Bhc3N3b3JkVmlld10pIHsKICAg
ICAgICAgQVNTRVJUKGZpbGVOYW1lID09IFN0cmluZyB7IHBhc3N3b3JkVmlldy5kb2N1bWVudE5h
bWUgfSk7CiAgICAgICAgIFtwYXNzd29yZFZpZXcgc2hvd1Bhc3N3b3JkRmFpbHVyZUFsZXJ0XTsK
ICAgICAgICAgcGFzc3dvcmRWaWV3LnVzZXJEaWRFbnRlclBhc3N3b3JkID0gcGFzc3dvcmRIYW5k
bGVyLmdldCgpOwpAQCAtODQ4LDcgKzgzOCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlcXVl
c3RQYXNzd29yZEZvclEKICAgICB9CiAKICAgICBbbV93ZWJWaWV3IF9zaG93UGFzc3dvcmRWaWV3
V2l0aERvY3VtZW50TmFtZTpmaWxlTmFtZSBwYXNzd29yZEhhbmRsZXI6cGFzc3dvcmRIYW5kbGVy
LmdldCgpXTsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9w
YWdlKS5kaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudCgpOworICAgIE5hdmln
YXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLmRpZFJlcXVl
c3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlz
aW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1w
bE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDYgQEAgcHJpdmF0ZToKICAgICB2
b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5SW5w
dXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJyaWRlOwogICAgIHZvaWQg
c2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5n
V2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lk
KFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYp
IG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkgb3ZlcnJpZGU7
CiAgICAgCiAjaWYgV0tfQVBJX0VOQUJMRUQKICAgICBib29sIHNob3dTaGFyZVNoZWV0KGNvbnN0
IFdlYkNvcmU6OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVy
PHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
bWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5nIGNv
cHkpCkBAIC00ODksMTggKzQ4OSw2IEBAIFJlZjxWYWxpZGF0aW9uQnViYmxlPiBQYWdlQ2xpZW50
SW1wbDo6Y3IKICAgICByZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRlKG1fdmlldywgbWVz
c2FnZSwgc2V0dGluZ3MpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dz
aW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpV
Ukw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9pbXBsKQotICAgICAg
ICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOwotICAg
IG1faW1wbC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcocmVzdWx0LCBXVEZNb3ZlKGNvbXBsZXRp
b25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dzaW5n
V2FybmluZygpCi17Ci0gICAgbV9pbXBsLT5jbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKTsKLX0K
LQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRvcihSZWY8VGV4dEluZGljYXRv
cj4gdGV4dEluZGljYXRvciwgV2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1lIGxp
ZmV0aW1lKQogewogICAgIG1faW1wbC0+c2V0VGV4dEluZGljYXRvcih0ZXh0SW5kaWNhdG9yLmdl
dCgpLCBsaWZldGltZSk7CkBAIC01NjQsNyArNTUyLDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
c2VsZWN0aW9uRGlkQ2hhbmdlKAogI2lmIFdLX0FQSV9FTkFCTEVECiBib29sIFBhZ2VDbGllbnRJ
bXBsOjpzaG93U2hhcmVTaGVldChjb25zdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJMJiBzaGFyZURh
dGEsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBtX2ltcGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlciksIG1fd2ViVmlldyk7CisgICAgbV9pbXBsLT5zaG93U2hhcmVTaGVldChz
aGFyZURhdGEsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlZpZXcuZ2V0KCkuZ2V0
KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCkBAIC03NTEsMTYgKzczOSwxNiBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiAgICAgbV9pbXBsLT5kaXNt
aXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbih0cnVlKTsKIAogI2lm
IFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0
YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRC
ZWdpbigpOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAg
IE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9u
R2VzdHVyZURpZEJlZ2luKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2
aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExp
c3RJdGVtJiBpdGVtKQogewogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykK
LSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSku
bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgaWYgKGF1
dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpm
cm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxs
TmF2aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRlKTsK
ICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03NzAsOCArNzU4LDggQEAgdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdh
dGlvbkdlc3R1cmVEaWRFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0
ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAg
ICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZp
Z2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIGlmIChhdXRvIHdl
YlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdl
YlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdh
dGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRlKTsKICAgICBV
TlVTRURfUEFSQU0oaXRlbSk7CkBAIC03ODUsOCArNzczLDggQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6bmF2aWdhdGlvbkdlc3R1cmVEaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJlY29yZE5h
dmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewogI2lmIFdL
X0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRl
Ojpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRpb25TbmFw
c2hvdChpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgpKQorICAg
ICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCp3ZWJWaWV3LT5fcGFnZSkud2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGl0
ZW0pOwogI2VuZGlmCkBAIC03OTUsOCArNzgzLDggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2ls
bFJlY29yZE5hdmlnYXRpbwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVtb3ZlTmF2aWdhdGlv
bkdlc3R1cmVTbmFwc2hvdCgpCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJW
aWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9w
YWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOworICAgIGlmIChhdXRv
IHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJv
bVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVt
b3ZlZCgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzODAwMykKKysrIFRvb2xzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE4LTExLTA4ICBBbGV4IENocmlzdGVu
c2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW2lPU10gSW1wbGVtZW50
IHNhZmUgYnJvd3NpbmcgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xOTE0NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJy
b3dzaW5nLm1tOgorICAgICAgICAoY2hlY2tUaXRsZUFuZENsaWNrKToKKyAgICAgICAgKFRFU1Qp
OgorCiAyMDE4LTExLTA4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAg
ICAgICAgVW5yZXZpZXdlZCwgYSBxdWljayBidWlsZCBmaXggZm9yIHIyMzc5ODMKSW5kZXg6IFRv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dz
aW5nLm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1NhZmVCcm93c2luZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM3LDggKzEzNyw2
IEBAIC0gKHZvaWQpbG9va1VwVVJMOihOU1VSTCAqKVVSTCBjb21wbGV0aW8KIAogQGVuZAogCi0j
aWYgUExBVEZPUk0oTUFDKSAvLyBGSVhNRTogVGVzdCBvbiBpT1Mgb25jZSBpbXBsZW1lbnRlZC4K
LQogc3RhdGljIE5TVVJMICpzaW1wbGVVUkwoKQogewogICAgIHJldHVybiBbW05TQnVuZGxlIG1h
aW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIg
c3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKQEAgLTE1NCwzMSArMTUy
LDQ2IEBAIHN0YXRpYyBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzYWZlQnJvd3NpbmcKICAgICBbd2Vi
VmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZVVSTCgp
XV07CiAgICAgd2hpbGUgKCFbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3Rpbmdd
KQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworI2lmICFQTEFU
Rk9STShNQUMpCisgICAgW1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10g
ZGlkTW92ZVRvV2luZG93XTsKKyNlbmRpZgogICAgIHJldHVybiB3ZWJWaWV3OwogfQogCisjaWYg
UExBVEZPUk0oTUFDKQorc3RhdGljIHZvaWQgY2hlY2tUaXRsZUFuZENsaWNrKE5TQnV0dG9uICpi
dXR0b24sIGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgRVhQRUNUX1NUUkVRKGJ1
dHRvbi50aXRsZS5VVEY4U3RyaW5nLCBleHBlY3RlZFRpdGxlKTsKKyAgICBbYnV0dG9uIHBlcmZv
cm1DbGljazpuaWxdOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGNoZWNrVGl0bGVBbmRDbGljayhV
SUJ1dHRvbiAqYnV0dG9uLCBjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQoreworICAgIEVYUEVD
VF9TVFJFUShbYnV0dG9uIGF0dHJpYnV0ZWRUaXRsZUZvclN0YXRlOlVJQ29udHJvbFN0YXRlTm9y
bWFsXS5zdHJpbmcuVVRGOFN0cmluZywgZXhwZWN0ZWRUaXRsZSk7CisgICAgVUlWaWV3ICp0YXJn
ZXQgPSBidXR0b24uc3VwZXJ2aWV3LnN1cGVydmlldzsKKyAgICBTRUwgc2VsZWN0b3IgPSBOU1Nl
bGVjdG9yRnJvbVN0cmluZyhzdHJjbXAoZXhwZWN0ZWRUaXRsZSwgIkdvIEJhY2siKSA/IEAic2hv
d0RldGFpbHNDbGlja2VkIiA6IEAiZ29CYWNrQ2xpY2tlZCIpOworICAgIFt0YXJnZXQgcGVyZm9y
bVNlbGVjdG9yOnNlbGVjdG9yXTsKK30KKyNlbmRpZgorCiBURVNUKFNhZmVCcm93c2luZywgR29C
YWNrKQogewogICAgIGF1dG8gd2ViVmlldyA9IHNhZmVCcm93c2luZ1ZpZXcoKTsKLSAgICBOU1Zp
ZXcgKmJvdHRvbSA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10uc3Vi
dmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MubGFzdE9iamVjdDsKLSAgICBOU0J1dHRvbiAqZ29C
YWNrID0gKE5TQnV0dG9uICopYm90dG9tLnN1YnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgRVhQRUNU
X1NUUkVRKGdvQmFjay50aXRsZS5VVEY4U3RyaW5nLCAiR28gYmFjayIpOwotICAgIFtnb0JhY2sg
cGVyZm9ybUNsaWNrOm5pbF07CisgICAgYXV0byB3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVCcm93
c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBhdXRvIGJveCA9IHdhcm5pbmcuc3Vidmlld3Mu
Zmlyc3RPYmplY3Q7CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKGJveC5zdWJ2aWV3c1szXSwgIkdv
IEJhY2siKTsKICAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JU
ZXN0aW5nXSwgbmlsKTsKIH0KIAogVEVTVChTYWZlQnJvd3NpbmcsIFZpc2l0VW5zYWZlV2Vic2l0
ZSkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBzYWZlQnJvd3NpbmdWaWV3KCk7Ci0gICAgTlNWaWV3
ICp3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKLSAg
ICBOU1ZpZXcgKmJveCA9IHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgTlNCdXR0
b24gKnNob3dEZXRhaWxzID0gKE5TQnV0dG9uICopYm94LnN1YnZpZXdzLmxhc3RPYmplY3Quc3Vi
dmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX1NUUkVRKHNob3dEZXRhaWxzLnRpdGxlLlVU
RjhTdHJpbmcsICJTaG93IGRldGFpbHMiKTsKLSAgICBFWFBFQ1RfRVEoYm94LnN1YnZpZXdzLmNv
dW50LCAzdWxsKTsKLSAgICBbc2hvd0RldGFpbHMgcGVyZm9ybUNsaWNrOm5pbF07Ci0gICAgRVhQ
RUNUX0VRKGJveC5zdWJ2aWV3cy5jb3VudCwgNHVsbCk7CisgICAgYXV0byB3YXJuaW5nID0gW3dl
YlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBFWFBFQ1RfRVEod2Fy
bmluZy5zdWJ2aWV3cy5jb3VudCwgMXVsbCk7CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKHdhcm5p
bmcuc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3NbNF0sICJTaG93IERldGFpbHMiKTsKKyAg
ICBFWFBFQ1RfRVEod2FybmluZy5zdWJ2aWV3cy5jb3VudCwgMnVsbCk7CiAgICAgRVhQRUNUX0ZB
TFNFKGNvbW1pdHRlZE5hdmlnYXRpb24pOwotICAgIFt3YXJuaW5nIHBlcmZvcm1TZWxlY3RvcjpO
U1NlbGVjdG9yRnJvbVN0cmluZyhAImNsaWNrZWRPbkxpbms6Iikgd2l0aE9iamVjdDpAIldLVmlz
aXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKKyAgICBbd2FybmluZyBwZXJmb3JtU2VsZWN0b3I6
TlNTZWxlY3RvckZyb21TdHJpbmcoQCJjbGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6W05TVVJM
IFVSTFdpdGhTdHJpbmc6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIl1dOwogICAgIFRl
c3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY29tbWl0dGVkTmF2aWdhdGlvbik7CiB9CiAKQEAgLTE5
MSw4ICsyMDQsNiBAQCBURVNUKFNhZmVCcm93c2luZywgTmF2aWdhdGlvbkNsZWFyc1dhcm5pCiAg
ICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CiB9CiAKLSNlbmRpZiAv
LyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgTnVsbExvb2t1cENvbnRleHQgOiBOU09iamVj
dAogQGVuZAogQGltcGxlbWVudGF0aW9uIE51bGxMb29rdXBDb250ZXh0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354442</attachid>
            <date>2018-11-09 22:27:58 -0800</date>
            <delta_ts>2018-11-09 23:00:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181109222757.patch</filename>
            <type>text/plain</type>
            <size>60472</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNSw2ICsxMzUxLDcgQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIAogLSAodm9pZClsYXlvdXRTdWJ2aWV3cwogeworICAg
IFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CiAgICAgW3N1cGVy
IGxheW91dFN1YnZpZXdzXTsKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogfQpA
QCAtMzI5MCw2ICszMzA3LDcgQEAgLSAodm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0
KXJlYwogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwogICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkp
OwogfQogCkBAIC0zNTgzLDc2ICszNjAxLDEyMSBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqCiAKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAog
eworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAg
X2ltcGwtPnNjcm9sbFdoZWVsKGV2ZW50KTsKIH0KIAogLSAodm9pZClzd2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAg
ICByZXR1cm47CisKICAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOwogfQogCiAtICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQp
OwogfQogCiAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VE
b3duKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAg
ICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBs
LT5tb3VzZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisg
ICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUVudGVyZWQoZXZlbnQpOwogfQogCiAt
ICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93
c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUV4aXRlZChl
dmVudCk7CiB9CiAKIC0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewor
ICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2lt
cGwtPm90aGVyTW91c2VEb3duKGV2ZW50KTsKIH0KIAogLSAodm9pZClvdGhlck1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwogfQog
CiAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcp
CisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdodE1vdXNlRHJhZ2dlZChldmVudCk7
CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlVXAoZXZlbnQpOwogfQogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAg
IHJldHVybjsKKwogICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5nZVdpdGhFdmVudChldmVudCk7CiB9
CiAKQEAgLTQ2MzUsNyArNDY5OCw3IEBAIC0gKHZvaWQpX3Bhc3RlQXNRdW90YXRpb246KGlkKXNl
bmRlcgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERFRkFV
TFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2b2lk
KV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNj
cmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKQEAgLTY2NjYsMTUgKzY3MjksMTIgQEAgLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZQogCiAjaWYgUExBVEZPUk0oTUFDKQogLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZl
QnJvd3NpbmdXYXJuaW5nKCk7Ci19CiAjZWxzZQogLSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nCisjZW5kaWYKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
c2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKIH0KLSNlbmRpZgogCiAtIChfV0tJbnNwZWN0b3Ig
KilfaW5zcGVjdG9yCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBAQCBjbGFzcyBBdHRhY2htZW50
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2Fk
IDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNsYXNzIFZpZXdTbmFwc2hvdDsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CiB9CiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnNl
cnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpvcHRpb25hbDxCT09MPilfcmVz
b2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKIAogLSAo
V0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKIEBjbGFzcyBX
S1dlYlZpZXc7CiAKQEAgLTQ4LDkgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBOU0ZpbGVXcmFwcGVy
ICphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKICAgICBOU1NldCAqc2Vy
aWFsaXphYmxlRmlsZVdyYXBwZXJDbGFzc2VzKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKKyAgICB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dh
cm5pbmcoKSBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxOSBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvCiAjZW5kaWYKIH0KIAordm9p
ZCBQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZl
QnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAg
ICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOworICAgIGVsc2UKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpObyk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGxDb2NvYTo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKK3sKKyAgICBbbV93ZWJW
aWV3IF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworfQorCiAjaWYgRU5BQkxFKEFUVEFDSE1F
TlRfRUxFTUVOVCkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRJbnNlcnRBdHRhY2ht
ZW50KEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCkBA
IC02OSw3ICs4Miw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6ZGlkUmVtb3ZlQXR0YWMK
IE5TRmlsZVdyYXBwZXIgKlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJbnN0
YW5jZSgpIGNvbnN0CiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjbHMgPSBtX3dl
YlZpZXcuY29uZmlndXJhdGlvbi5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmls
ZVdyYXBwZXIgc2VsZl07CisgICAgQ2xhc3MgY2xzID0gW21fd2ViVmlldyBjb25maWd1cmF0aW9u
XS5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmlsZVdyYXBwZXIgc2VsZl07CiAg
ICAgcmV0dXJuIFtjbHMgYWxsb2NdOwogI2Vsc2UKICAgICByZXR1cm4gbmlsOwpAQCAtODAsNyAr
OTMsNyBAQCBOU1NldCAqUGFnZUNsaWVudEltcGxDb2NvYTo6c2VyaWFsaXphYmxlCiB7CiAgICAg
Q2xhc3MgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MgPSBOU0ZpbGVXcmFwcGVyLnNlbGY7CiAjaWYg
V0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IG1f
d2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzczsKKyAgICBD
bGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IFttX3dlYlZpZXcgY29uZmlndXJhdGlv
bl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOwogICAgIGlmIChjb25maWd1cmVkRmlsZVdy
YXBwZXJDbGFzcyAmJiBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyAhPSBkZWZhdWx0RmlsZVdy
YXBwZXJDbGFzcykKICAgICAgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0czpjb25maWd1
cmVkRmlsZVdyYXBwZXJDbGFzcywgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MsIG5pbF07CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2Fy
bmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2Fm
ZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsMTggKzQ0LDIwIEBAIGNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGVudW0gY2xhc3MgQ29u
dGludWVVbnNhZmVMb2FkIDogYm9vbDsKIH0KIAorT0JKQ19DTEFTUyBXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3OworCiAjaWYgUExBVEZPUk0oTUFDKQogdXNpbmcgUmVjdFR5cGUgPSBOU1JlY3Q7Ci11
c2luZyBTdGFja1ZpZXdUeXBlID0gTlNTdGFja1ZpZXc7CitAaW50ZXJmYWNlIFdLU2FmZUJyb3dz
aW5nV2FybmluZyA6IE5TVmlldzxOU1RleHRWaWV3RGVsZWdhdGU+CiAjZWxzZQogdXNpbmcgUmVj
dFR5cGUgPSBDR1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gVUlTdGFja1ZpZXc7CitAaW50
ZXJmYWNlIFdLU2FmZUJyb3dzaW5nV2FybmluZyA6IFVJU2Nyb2xsVmlldzxVSVRleHRWaWV3RGVs
ZWdhdGU+CiAjZW5kaWYKLQotQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1dhcm5pbmcgOiBTdGFj
a1ZpZXdUeXBlIHsKK3sKIEBwYWNrYWdlCiAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJp
YW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiBfY29tcGxl
dGlvbkhhbmRsZXI7CiAgICAgUmVmUHRyPGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0
PiBfcmVzdWx0OworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3ICo+PiBfdGV4dFZpZXdzOwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFt
ZTooUmVjdFR5cGUpZnJhbWUgc2FmZUJyb3dzaW5nUmVzdWx0Oihjb25zdCBXZWJLaXQ6OlNhZmVC
cm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4m
Jik+JiYpY29tcGxldGlvbkhhbmRsZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCShyZXZpc2lvbiAyMzc4
NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5p
bmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDQ5ICszMywxMDMgQEAKICNpbXBvcnQgPHd0Zi9C
bG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL0xhbmd1YWdlLmg+CiAKLWNvbnN0IENHRmxvYXQgZXhj
bGFtYXRpb25Qb2ludFNpemUgPSAzMDsKLWNvbnN0IENHRmxvYXQgdGV4dFNpemUgPSAxMzsKK2Nv
bnN0ZXhwciBDR0Zsb2F0IGV4Y2xhbWF0aW9uUG9pbnRTaXplID0gMzA7Citjb25zdGV4cHIgQ0dG
bG9hdCBtYXJnaW5TaXplID0gMjA7Citjb25zdGV4cHIgQ0dGbG9hdCBtYXhXaWR0aCA9IDY3NTsK
K2NvbnN0ZXhwciBDR0Zsb2F0IHRpdGxlU2l6ZSA9IDI2OworY29uc3RleHByIENHRmxvYXQgYm94
Q29ybmVyUmFkaXVzID0gNjsKKwogI2lmIFBMQVRGT1JNKE1BQykKLWNvbnN0IENHRmxvYXQgbWFy
Z2luU2l6ZSA9IDIwOwotY29uc3Qgc2l6ZV90IG1heFdpZHRoID0gNjAwOworY29uc3RleHByIENH
RmxvYXQgdGV4dFNpemUgPSAxNDsKIHVzaW5nIENvbG9yVHlwZSA9IE5TQ29sb3I7CiB1c2luZyBG
b250VHlwZSA9IE5TRm9udDsKLXVzaW5nIFZpZXdUeXBlID0gTlNWaWV3OwotdXNpbmcgQmV6aWVy
UGF0aFR5cGUgPSBOU0JlemllclBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBOU1RleHRWaWV3
OwordXNpbmcgQnV0dG9uVHlwZSA9IE5TQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IE5T
TGF5b3V0QXR0cmlidXRlOwordXNpbmcgVmlld1R5cGUgPSBOU1ZpZXc7CiAjZWxzZQorY29uc3Rl
eHByIENHRmxvYXQgdGV4dFNpemUgPSAyMDsKIHVzaW5nIENvbG9yVHlwZSA9IFVJQ29sb3I7CiB1
c2luZyBGb250VHlwZSA9IFVJRm9udDsKLXVzaW5nIFZpZXdUeXBlID0gVUlWaWV3OwotdXNpbmcg
QmV6aWVyUGF0aFR5cGUgPSBVSUJlemllclBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBVSVRl
eHRWaWV3OwordXNpbmcgQnV0dG9uVHlwZSA9IFVJQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlw
ZSA9IFVJU3RhY2tWaWV3QWxpZ25tZW50OwordXNpbmcgVmlld1R5cGUgPSBVSVZpZXc7CiAjZW5k
aWYKIAotc3RhdGljIGlkIGNvbmZpcm1NYWx3YXJlU2VudGluZWwoKQorZW51bSBjbGFzcyBXYXJu
aW5nSXRlbSA6IHVpbnQ4X3QgeworICAgIEJhY2tncm91bmQsCisgICAgQm94QmFja2dyb3VuZCwK
KyAgICBFeGNsYW1hdGlvblBvaW50LAorICAgIFRpdGxlVGV4dCwKKyAgICBNZXNzYWdlVGV4dCwK
KyAgICBTaG93RGV0YWlsc0J1dHRvbiwKKyAgICBHb0JhY2tCdXR0b24KK307CisKK3N0YXRpYyBO
U1VSTCAqY29uZmlybU1hbHdhcmVTZW50aW5lbCgpCiB7Ci0gICAgcmV0dXJuIEAiV0tDb25maXJt
TWFsd2FyZVNlbnRpbmVsIjsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0Nv
bmZpcm1NYWx3YXJlU2VudGluZWwiXTsKIH0KIAotc3RhdGljIGlkIHZpc2l0VW5zYWZlV2Vic2l0
ZVNlbnRpbmVsKCkKK3N0YXRpYyBOU1VSTCAqdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKQog
ewotICAgIHJldHVybiBAIldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiOworICAgIHJldHVy
biBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsK
IH0KIAotc3RhdGljIENvbG9yVHlwZSAqY29sb3JOYW1lZChOU1N0cmluZyAqbmFtZSkKK3N0YXRp
YyBDb2xvclR5cGUgKmNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbSBpdGVtLCBWaWV3VHlwZSAqd2Fy
bmluZykKIHsKKyAgICBBU1NFUlQoW3dhcm5pbmcgaXNLaW5kT2ZDbGFzczpbV0tTYWZlQnJvd3Np
bmdXYXJuaW5nIGNsYXNzXV0pOwogI2lmIFBMQVRGT1JNKE1BQykKKworICAgIGF1dG8gY29sb3JO
YW1lZCA9IFtdIChOU1N0cmluZyAqbmFtZSkgLT4gQ29sb3JUeXBlKiB7CiAjaWYgSEFWRShTQUZF
X0JST1dTSU5HKQotICAgIHJldHVybiBbTlNDb2xvciBjb2xvck5hbWVkOm5hbWUgYnVuZGxlOltO
U0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXV07CisgICAg
ICAgIHJldHVybiBbTlNDb2xvciBjb2xvck5hbWVkOm5hbWUgYnVuZGxlOltOU0J1bmRsZSBidW5k
bGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXV07CiAjZWxzZQotICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBuaWw7CisgICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICByZXR1cm4gbmlsOwogI2VuZGlmCisgICAgfTsKKworICAgIHN3aXRj
aCAoaXRlbSkgeworICAgIGNhc2UgV2FybmluZ0l0ZW06OkJhY2tncm91bmQ6CisgICAgICAgIHJl
dHVybiBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpOworICAg
IGNhc2UgV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiBbTlNDb2xv
ciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdOworICAgIGNhc2UgV2FybmluZ0l0ZW06OlRpdGxlVGV4
dDoKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpFeGNsYW1hdGlvblBvaW50OgorICAgICAgICByZXR1
cm4gY29sb3JOYW1lZChAIldLU2FmZUJyb3dzaW5nV2FybmluZ1RpdGxlIik7CisgICAgY2FzZSBX
YXJuaW5nSXRlbTo6TWVzc2FnZVRleHQ6CisgICAgICAgIHJldHVybiBjb2xvck5hbWVkKEAiV0tT
YWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIpOworICAgIGNhc2UgV2FybmluZ0l0ZW06OlNob3dEZXRh
aWxzQnV0dG9uOgorICAgIGNhc2UgV2FybmluZ0l0ZW06OkdvQmFja0J1dHRvbjoKKyAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQogI2Vsc2UK
LSAgICByZXR1cm4gW1VJQ29sb3IgY29sb3JOYW1lZDpuYW1lIGluQnVuZGxlOltOU0J1bmRsZSBi
dW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXSBjb21wYXRpYmxlV2l0aFRy
YWl0Q29sbGVjdGlvbjpuaWxdOworICAgIFVJQ29sb3IgKnJlZCA9IFtVSUNvbG9yIGNvbG9yV2l0
aFJlZDowLjk5OCBncmVlbjowLjIzOSBibHVlOjAuMjMzIGFscGhhOjEuMF07CisgICAgVUlDb2xv
ciAqd2hpdGUgPSBbVUlDb2xvciB3aGl0ZUNvbG9yXTsKKyAgICBib29sIG5hcnJvdyA9IHdhcm5p
bmcudHJhaXRDb2xsZWN0aW9uLmhvcml6b250YWxTaXplQ2xhc3MgPT0gVUlVc2VySW50ZXJmYWNl
U2l6ZUNsYXNzQ29tcGFjdDsKKworICAgIHN3aXRjaCAoaXRlbSkgeworICAgIGNhc2UgV2Fybmlu
Z0l0ZW06OkJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiByZWQ7CisgICAgY2FzZSBXYXJuaW5n
SXRlbTo6Qm94QmFja2dyb3VuZDoKKyAgICAgICAgcmV0dXJuIG5hcnJvdyA/IHJlZCA6IHdoaXRl
OworICAgIGNhc2UgV2FybmluZ0l0ZW06OlRpdGxlVGV4dDoKKyAgICBjYXNlIFdhcm5pbmdJdGVt
OjpFeGNsYW1hdGlvblBvaW50OgorICAgICAgICByZXR1cm4gbmFycm93ID8gd2hpdGUgOiByZWQ7
CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6TWVzc2FnZVRleHQ6CisgICAgY2FzZSBXYXJuaW5nSXRl
bTo6U2hvd0RldGFpbHNCdXR0b246CisgICAgICAgIHJldHVybiBuYXJyb3cgPyB3aGl0ZSA6IFtV
SUNvbG9yIGRhcmtUZXh0Q29sb3JdOworICAgIGNhc2UgV2FybmluZ0l0ZW06OkdvQmFja0J1dHRv
bjoKKyAgICAgICAgcmV0dXJuIG5hcnJvdyA/IHdoaXRlIDogd2FybmluZy50aW50Q29sb3I7Cisg
ICAgfQogI2VuZGlmCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG5pbDsK
IH0KIAotI2lmIFBMQVRGT1JNKE1BQykKIHN0YXRpYyB2b2lkIHJlcGxhY2UoTlNNdXRhYmxlQXR0
cmlidXRlZFN0cmluZyAqc3RyaW5nLCBOU1N0cmluZyAqdG9SZXBsYWNlLCBOU1N0cmluZyAqcmVw
bGFjZVdpdGgpCiB7CiAgICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmlu
Zy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxhY2VdIHdpdGhTdHJpbmc6cmVwbGFjZVdpdGhd
OwpAQCAtOTAsNyArMTQ0LDYgQEAgc3RhdGljIHZvaWQgYWRkTGlua0FuZFJlcGxhY2UoTlNNdXRh
YmxlQQogICAgIH0gcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgcmVwbGFjZVdpdGgubGVuZ3RoKV07CiAg
ICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VP
ZlN0cmluZzp0b1JlcGxhY2VdIHdpdGhBdHRyaWJ1dGVkU3RyaW5nOnN0cmluZ1dpdGhMaW5rXTsK
IH0KLSNlbmRpZgogCiBAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCA6
IFZpZXdUeXBlCiBAZW5kCkBAIC05OSwyMiArMTUyLDM5IEBAIEBpbnRlcmZhY2UgV0tTYWZlQnJv
d3NpbmdFeGNsYW1hdGlvblBvaW4KIAogLSAodm9pZClkcmF3UmVjdDooUmVjdFR5cGUpcmVjdAog
ewotICAgIFtjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGl0bGUiKSBzZXRdOwot
I2lmIFBMQVRGT1JNKE1BQykKLSNkZWZpbmUgYWRkQXJjV2l0aENlbnRlciBhcHBlbmRCZXppZXJQ
YXRoV2l0aEFyY1dpdGhDZW50ZXIKLSAgICBOU1JlY3Qgc3F1YXJlID0gTlNNYWtlUmVjdCgwLCAw
LCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpOworICAgIGNvbnN0
ZXhwciBDR0Zsb2F0IGNlbnRlclggPSBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDI7CisgICAgY29u
c3RleHByIENHRmxvYXQgcG9pbnRDZW50ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8g
MzA7CisgICAgY29uc3RleHByIENHRmxvYXQgcG9pbnRSYWRpdXMgPSAyLjI1ICogZXhjbGFtYXRp
b25Qb2ludFNpemUgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBsaW5lQm90dG9tQ2VudGVy
WSA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplICogMTMgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9h
dCBsaW5lVG9wQ2VudGVyWSA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplICogMjMgLyAzMDsKKyAgICBj
b25zdGV4cHIgQ0dGbG9hdCBsaW5lUmFkaXVzID0gMS43NSAqIGV4Y2xhbWF0aW9uUG9pbnRTaXpl
IC8gMzA7CisgICAgVmlld1R5cGUgKndhcm5pbmcgPSBzZWxmLnN1cGVydmlldy5zdXBlcnZpZXc7
CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFtjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkV4Y2xh
bWF0aW9uUG9pbnQsIHdhcm5pbmcpIHNldF07CisgICAgTlNCZXppZXJQYXRoICpleGNsYW1hdGlv
blBvaW50ID0gW05TQmV6aWVyUGF0aCBiZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6TlNNYWtlUmVj
dCgwLCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpXTsKKyAg
ICBbZXhjbGFtYXRpb25Qb2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsg
Y2VudGVyWCwgbGluZUJvdHRvbUNlbnRlclkgfSByYWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xl
OjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGFw
cGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBsaW5lVG9wQ2VudGVy
WSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6MTgwIGVuZEFuZ2xlOjM2MCBjbG9ja3dp
c2U6WUVTXTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBsaW5lVG9Qb2ludDogeyBjZW50ZXJYICsg
bGluZVJhZGl1cywgbGluZUJvdHRvbUNlbnRlclkgfV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQg
YXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50Q2VudGVy
WSB9IHJhZGl1czpwb2ludFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lz
ZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0
aENlbnRlcjogeyBjZW50ZXJYLCBwb2ludENlbnRlclkgfSByYWRpdXM6cG9pbnRSYWRpdXMgc3Rh
cnRBbmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogI2Vsc2UKLSAgICBDR1Jl
Y3Qgc3F1YXJlID0gQ0dSZWN0TWFrZSgwLCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFt
YXRpb25Qb2ludFNpemUpOworICAgIGF1dG8gZmxpcCA9IFtdIChhdXRvIHkpIHsKKyAgICAgICAg
cmV0dXJuIGV4Y2xhbWF0aW9uUG9pbnRTaXplIC0geTsKKyAgICB9OworICAgIFtjb2xvckZvckl0
ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHdhcm5pbmcpIHNldF07CisgICAgYXV0byBz
cXVhcmUgPSBDR1JlY3RNYWtlKDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlv
blBvaW50U2l6ZSk7CisgICAgW1tVSUJlemllclBhdGggYmV6aWVyUGF0aFdpdGhSZWN0OnNxdWFy
ZV0gZmlsbF07CisgICAgCisgICAgW2NvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6RXhjbGFtYXRp
b25Qb2ludCwgd2FybmluZykgc2V0XTsKKyAgICBVSUJlemllclBhdGggKmV4Y2xhbWF0aW9uUG9p
bnQgPSBbVUlCZXppZXJQYXRoIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpzcXVhcmVdOworICAg
IFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChsaW5l
VG9wQ2VudGVyWSkgfSByYWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOjIgKiBwaURvdWJsZSBl
bmRBbmdsZTpwaURvdWJsZSBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFk
ZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChsaW5lQm90dG9tQ2VudGVyWSkgfSByYWRp
dXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOnBpRG91YmxlIGVuZEFuZ2xlOjAgY2xvY2t3aXNlOk5P
XTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGZs
aXAocG9pbnRDZW50ZXJZKSB9IHJhZGl1czpwb2ludFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5n
bGU6cGlEb3VibGUgY2xvY2t3aXNlOk5PXTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNX
aXRoQ2VudGVyOiB7IGNlbnRlclgsIGZsaXAocG9pbnRDZW50ZXJZKSB9IHJhZGl1czpwb2ludFJh
ZGl1cyBzdGFydEFuZ2xlOnBpRG91YmxlIGVuZEFuZ2xlOnBpRG91YmxlICogMiBjbG9ja3dpc2U6
Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZExpbmVUb1BvaW50OiB7IGNlbnRlclggKyBs
aW5lUmFkaXVzLCBmbGlwKGxpbmVCb3R0b21DZW50ZXJZKSB9XTsKKyAgICBbZXhjbGFtYXRpb25Q
b2ludCBhZGRMaW5lVG9Qb2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1cywgZmxpcChsaW5lVG9w
Q2VudGVyWSkgfV07CiAjZW5kaWYKLSAgICBCZXppZXJQYXRoVHlwZSAqZXhjbGFtYXRpb25Qb2lu
dCA9IFtCZXppZXJQYXRoVHlwZSBiZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6c3F1YXJlXTsKLSAg
ICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGV4Y2xhbWF0aW9uUG9pbnRT
aXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUgKiAxMyAvIDMwIH0gcmFkaXVzOjEuNzUgc3Rh
cnRBbmdsZTowIGVuZEFuZ2xlOjE4MCBjbG9ja3dpc2U6WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Q
b2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFt
YXRpb25Qb2ludFNpemUgKiAyMyAvIDMwIH0gcmFkaXVzOjEuNzUgc3RhcnRBbmdsZToxODAgZW5k
QW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwotICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dp
dGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2ludFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6
ZSAqIDcgLyAzMCB9IHJhZGl1czoyLjI1IHN0YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAgY2xvY2t3
aXNlOllFU107Ci0gICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBleGNs
YW1hdGlvblBvaW50U2l6ZSAvIDIsIGV4Y2xhbWF0aW9uUG9pbnRTaXplICogNyAvIDMwIH0gcmFk
aXVzOjIuMjUgc3RhcnRBbmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogICAg
IFtleGNsYW1hdGlvblBvaW50IGZpbGxdOwotI2lmIFBMQVRGT1JNKE1BQykKLSN1bmRlZiBhZGRB
cmNXaXRoQ2VudGVyCi0jZW5kaWYKIH0KIAogLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXpl
CkBAIC0xMjQsNyArMTk0LDYgQEAgLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCiAKIEBl
bmQKIAotI2lmIFBMQVRGT1JNKE1BQykKIHN0YXRpYyBOU1VSTCAqcmVwb3J0QW5FcnJvclVSTChj
b25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0KQogewogICAgIHJldHVybiBX
ZWJDb3JlOjpVUkwoeyB9LCBtYWtlU3RyaW5nKHJlc3VsdC5yZXBvcnRBbkVycm9yVVJMQmFzZSgp
LCAiJnVybD0iLCBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHJlc3VsdC51cmwoKSksICIm
aGw9IiwgZGVmYXVsdExhbmd1YWdlKCkpKTsKQEAgLTE5MSwxNCArMjYwLDYzIEBAIHN0YXRpYyBO
U011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpkZXRhaWwKICAgICBBU1NFUlQocmVzdWx0LmlzVW53
YW50ZWRTb2Z0d2FyZSgpKTsKICAgICByZXR1cm4gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2FyZURl
dGFpbHMocmVzdWx0LCBXRUJfVUlfTlNTVFJJTkcoQCJXYXJuaW5ncyBhcmUgc2hvd24gZm9yIHdl
YnNpdGVzIHdoZXJlIGhhcm1mdWwgc29mdHdhcmUgaGFzIGJlZW4gZGV0ZWN0ZWQuIFlvdSBjYW4g
Y2hlY2sgJXRoZS1zdGF0dXMtb2Ytc2l0ZSUgb24gdGhlICVzYWZlQnJvd3NpbmdQcm92aWRlciUg
ZGlhZ25vc3RpYyBwYWdlLiIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIGRlc2NyaXB0aW9u
IiksIEAiJXRoZS1zdGF0dXMtb2Ytc2l0ZSUiLCBmYWxzZSk7CiB9CisKK3N0YXRpYyBCdXR0b25U
eXBlICptYWtlQnV0dG9uKFdhcm5pbmdJdGVtIGl0ZW0sIFdLU2FmZUJyb3dzaW5nV2FybmluZyAq
d2FybmluZywgU0VMIGFjdGlvbikKK3sKKyAgICBOU1N0cmluZyAqdGl0bGUgPSBuaWw7CisgICAg
aWYgKGl0ZW0gPT0gV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uKQorICAgICAgICB0aXRs
ZSA9IFdFQl9VSV9OU1NUUklORyhAIlNob3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJy
b3dzaW5nIHdhcm5pbmciKTsKKyAgICBlbHNlCisgICAgICAgIHRpdGxlID0gV0VCX1VJX05TU1RS
SU5HKEAiR28gYmFjayIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKKyAg
ICB0aXRsZSA9IFt0aXRsZSBjYXBpdGFsaXplZFN0cmluZ107CisjaWYgUExBVEZPUk0oTUFDKQor
ICAgIHJldHVybiBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOnRpdGxlIHRhcmdldDp3YXJuaW5n
IGFjdGlvbjphY3Rpb25dOworI2Vsc2UKKyAgICBVSUJ1dHRvbiAqYnV0dG9uID0gW1VJQnV0dG9u
IGJ1dHRvbldpdGhUeXBlOlVJQnV0dG9uVHlwZVN5c3RlbV07CisgICAgTlNBdHRyaWJ1dGVkU3Ry
aW5nICphdHRyaWJ1dGVkVGl0bGUgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRX
aXRoU3RyaW5nOnRpdGxlIGF0dHJpYnV0ZXM6QHsKKyAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0
dHJpYnV0ZU5hbWU6QChOU1VuZGVybGluZVN0eWxlU2luZ2xlKSwKKyAgICAgICAgTlNVbmRlcmxp
bmVDb2xvckF0dHJpYnV0ZU5hbWU6W1VJQ29sb3Igd2hpdGVDb2xvcl0sCisgICAgICAgIE5TRm9y
ZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZTpjb2xvckZvckl0ZW0oaXRlbSwgd2FybmluZyksCisg
ICAgICAgIE5TRm9udEF0dHJpYnV0ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4
dFNpemVdCisgICAgfV0gYXV0b3JlbGVhc2VdOworICAgIFtidXR0b24gc2V0QXR0cmlidXRlZFRp
dGxlOmF0dHJpYnV0ZWRUaXRsZSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07CisgICAg
W2J1dHRvbiBhZGRUYXJnZXQ6d2FybmluZyBhY3Rpb246YWN0aW9uIGZvckNvbnRyb2xFdmVudHM6
VUlDb250cm9sRXZlbnRUb3VjaFVwSW5zaWRlXTsKKyAgICByZXR1cm4gYnV0dG9uOworI2VuZGlm
Cit9CisKK3N0YXRpYyBWaWV3VHlwZSAqbWFrZVRpdGxlTGFiZWwoTlNTdHJpbmcgKnRpdGxlLCBW
aWV3VHlwZSAqd2FybmluZykKK3sKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxlIGF0dHJpYnV0ZXM6QHsK
KyAgICAgICAgTlNGb250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgYm9sZFN5c3RlbUZvbnRPZlNp
emU6dGl0bGVTaXplXSwKKyAgICAgICAgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lOmNv
bG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6VGl0bGVUZXh0LCB3YXJuaW5nKQorICAgIH1dIGF1dG9y
ZWxlYXNlXTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgcmV0dXJuIFtOU1RleHRGaWVsZCBsYWJl
bFdpdGhBdHRyaWJ1dGVkU3RyaW5nOmF0dHJpYnV0ZWRTdHJpbmddOworI2Vsc2UKKyAgICBhdXRv
IGxhYmVsID0gW1tVSUxhYmVsIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGxhYmVsLmF0dHJpYnV0
ZWRUZXh0ID0gYXR0cmlidXRlZFN0cmluZzsKKyAgICBsYWJlbC5saW5lQnJlYWtNb2RlID0gTlNM
aW5lQnJlYWtCeVdvcmRXcmFwcGluZzsKKyAgICBsYWJlbC5udW1iZXJPZkxpbmVzID0gMDsKKyAg
ICByZXR1cm4gbGFiZWw7CiAjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2V0QmFja2dyb3VuZChW
aWV3VHlwZSAqdmlldywgQ29sb3JUeXBlICpjb2xvcikKK3sKKyNpZiBQTEFURk9STShNQUMpCisg
ICAgdmlldy53YW50c0xheWVyID0gWUVTOworICAgIHZpZXcubGF5ZXIuYmFja2dyb3VuZENvbG9y
ID0gY29sb3IuQ0dDb2xvcjsKKyNlbHNlCisgICAgdmlldy5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xv
cjsKKyNlbmRpZgorfQogCiBAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgOiBUZXh0
Vmlld1R5cGUgewogQHBhY2thZ2UKLSAgICBXZWFrT2JqQ1B0cjxXS1NhZmVCcm93c2luZ1dhcm5p
bmc+IF90YXJnZXQ7CisgICAgV2Vha09iakNQdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfd2Fy
bmluZzsKIH0KLSsgKGluc3RhbmNldHlwZSl2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0
cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgbGlua1RhcmdldDooV0tTYWZlQnJvd3Np
bmdXYXJuaW5nICopdGFyZ2V0OwotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoU3RyaW5nOihOU1N0
cmluZyAqKXN0cmluZzsKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6
KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgZm9yV2FybmluZzooV0tTYWZl
QnJvd3NpbmdXYXJuaW5nICopd2FybmluZzsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLU2Fm
ZUJyb3dzaW5nV2FybmluZwpAQCAtMjA5LDU0ICszMjcsMTYzIEBAIC0gKGluc3RhbmNldHlwZSlp
bml0V2l0aEZyYW1lOihSZWN0VHlwZSkKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0
OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQot
CiAgICAgX2NvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CiAg
ICAgX3Jlc3VsdCA9IG1ha2VSZWYocmVzdWx0KTsKLQorICAgIHNldEJhY2tncm91bmQoc2VsZiwg
Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCYWNrZ3JvdW5kLCBzZWxmKSk7CiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHNlbGYud2FudHNMYXllciA9IFlFUzsKLSAgICBzZWxmLmxheWVyLmJhY2tn
cm91bmRDb2xvciA9IFtjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3Vu
ZCIpIENHQ29sb3JdOwotCi0gICAgTlNTdGFja1ZpZXcgKnRvcCA9IFtOU1N0YWNrVmlldyBzdGFj
a1ZpZXdXaXRoVmlld3M6QFsKLSAgICAgICAgW1tXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9p
bnQgbmV3XSBhdXRvcmVsZWFzZV0sCi0gICAgICAgIFtOU1RleHRGaWVsZCBsYWJlbFdpdGhBdHRy
aWJ1dGVkU3RyaW5nOltbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
dGl0bGVUZXh0KHJlc3VsdCkgYXR0cmlidXRlczpAewotICAgICAgICAgICAgTlNGb250QXR0cmli
dXRlTmFtZTpbTlNGb250IHN5c3RlbUZvbnRPZlNpemU6ZXhjbGFtYXRpb25Qb2ludFNpemVdLAot
ICAgICAgICAgICAgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lOmNvbG9yTmFtZWQoQCJX
S1NhZmVCcm93c2luZ1dhcm5pbmdUZXh0IikKLSAgICAgICAgfV0gYXV0b3JlbGVhc2VdXQotICAg
IF1dOworICAgIFtzZWxmIGFkZENvbnRlbnRdOworI2VuZGlmCisgICAgcmV0dXJuIHNlbGY7Cit9
CiAKLSAgICBXS1NhZmVCcm93c2luZ1RleHRWaWV3ICptaWRkbGUgPSBbV0tTYWZlQnJvd3NpbmdU
ZXh0VmlldyB2aWV3V2l0aFN0cmluZzp3YXJuaW5nVGV4dChyZXN1bHQpXTsKKy0gKHZvaWQpYWRk
Q29udGVudAoreworICAgIGF1dG8gZXhjbGFtYXRpb25Qb2ludCA9IFtbV0tTYWZlQnJvd3NpbmdF
eGNsYW1hdGlvblBvaW50IG5ld10gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gdGl0bGUgPSBtYWtl
VGl0bGVMYWJlbCh0aXRsZVRleHQoKl9yZXN1bHQpLCBzZWxmKTsKKyAgICBhdXRvIHdhcm5pbmcg
PSBbW1tXS1NhZmVCcm93c2luZ1RleHRWaWV3IGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJp
bmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp3YXJuaW5nVGV4
dCgqX3Jlc3VsdCkgYXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBz
eXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXSB9XSBhdXRvcmVsZWFzZV0gZm9yV2FybmluZzpzZWxm
XSBhdXRvcmVsZWFzZV07CisgICAgYXV0byBzaG93RGV0YWlscyA9IG1ha2VCdXR0b24oV2Fybmlu
Z0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uLCBzZWxmLCBAc2VsZWN0b3Ioc2hvd0RldGFpbHNDbGlj
a2VkKSk7CisgICAgYXV0byBnb0JhY2sgPSBtYWtlQnV0dG9uKFdhcm5pbmdJdGVtOjpHb0JhY2tC
dXR0b24sIHNlbGYsIEBzZWxlY3Rvcihnb0JhY2tDbGlja2VkKSk7CisgICAgYXV0byBib3ggPSBb
W1ZpZXdUeXBlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIHNldEJhY2tncm91bmQoYm94LCBjb2xv
ckZvckl0ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHNlbGYpKTsKKyAgICBib3gubGF5
ZXIuY29ybmVyUmFkaXVzID0gYm94Q29ybmVyUmFkaXVzOworICAgIF90ZXh0Vmlld3MgPSBhZG9w
dE5TKFtOU011dGFibGVBcnJheSBuZXddKTsKKyAgICBbX3RleHRWaWV3cyBhZGRPYmplY3Q6d2Fy
bmluZ107CisKKyAgICBmb3IgKFZpZXdUeXBlICp2aWV3IGluIEBbZXhjbGFtYXRpb25Qb2ludCwg
dGl0bGUsIHdhcm5pbmcsIGdvQmFjaywgc2hvd0RldGFpbHNdKSB7CisgICAgICAgIHZpZXcudHJh
bnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHMgPSBOTzsKKyAgICAgICAgW2Jv
eCBhZGRTdWJ2aWV3OnZpZXddOworICAgIH0KKyAgICBib3gudHJhbnNsYXRlc0F1dG9yZXNpemlu
Z01hc2tJbnRvQ29uc3RyYWludHMgPSBOTzsKKyAgICBbc2VsZiBhZGRTdWJ2aWV3OmJveF07CiAK
LSAgICBOU1N0YWNrVmlldyAqYm90dG9tID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dpdGhWaWV3
czpAWwotICAgICAgICBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhA
IlNob3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSB0YXJn
ZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCldLAotICAgICAgICBb
TlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhAIkdvIGJhY2siLCAiQWN0
aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIikgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxl
Y3Rvcihnb0JhY2tDbGlja2VkKV0KKyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgW05TTGF5
b3V0Q29uc3RyYWludCBhY3RpdmF0ZUNvbnN0cmFpbnRzOkBbCisgICAgICAgIFtbc2VsZi50b3BB
bmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50b3BBbmNob3JdIGNvbnN0cmFpbnRF
cXVhbFRvQW5jaG9yOltib3guYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpz
ZWxmLmJvdHRvbUFuY2hvcl0gbXVsdGlwbGllcjowLjVdLAorICAgICAgICBbW3NlbGYubGVmdEFu
Y2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LmxlZnRBbmNob3JdIGNvbnN0cmFpbnRF
cXVhbFRvQW5jaG9yOltib3gucmlnaHRBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOnNl
bGYucmlnaHRBbmNob3JdXSwKKworICAgICAgICBbYm94LndpZHRoQW5jaG9yIGNvbnN0cmFpbnRM
ZXNzVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1heFdpZHRoXSwKKyAgICAgICAgW2JveC53aWR0aEFu
Y2hvciBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9BbmNob3I6c2VsZi53aWR0aEFuY2hvcl0s
CisKKyAgICAgICAgW1tib3gubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6
ZXhjbGFtYXRpb25Qb2ludC5sZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50
Om1hcmdpblNpemVdLAorICAgICAgICBbW2JveC5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZz
ZXRUb0FuY2hvcjp0aXRsZS5sZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50
Om1hcmdpblNpemUgKiAxLjUgKyBleGNsYW1hdGlvblBvaW50U2l6ZV0sCisgICAgICAgIFtbYm94
LmxlYWRpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOndhcm5pbmcubGVhZGluZ0Fu
Y2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKworICAgICAgICBb
W3RpdGxlLnRyYWlsaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gudHJhaWxp
bmdBbmNob3JdIGNvbnN0cmFpbnRHcmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1hcmdpblNp
emVdLAorICAgICAgICBbW3dhcm5pbmcudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRv
QW5jaG9yOmJveC50cmFpbGluZ0FuY2hvcl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRv
Q29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbZ29CYWNrLnRyYWlsaW5nQW5jaG9yIGFu
Y2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gudHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVh
bFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisKKyAgICAgICAgW1t0aXRsZS50b3BBbmNob3IgYW5j
aG9yV2l0aE9mZnNldFRvQW5jaG9yOmV4Y2xhbWF0aW9uUG9pbnQudG9wQW5jaG9yXSBjb25zdHJh
aW50RXF1YWxUb0FuY2hvcjpbZXhjbGFtYXRpb25Qb2ludC5ib3R0b21BbmNob3IgYW5jaG9yV2l0
aE9mZnNldFRvQW5jaG9yOnRpdGxlLmJvdHRvbUFuY2hvcl1dLAorCisgICAgICAgIFtnb0JhY2su
dG9wQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOnNob3dEZXRhaWxzLnRvcEFuY2hvcl0s
CisgICAgICAgIFtbc2hvd0RldGFpbHMudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRv
QW5jaG9yOmdvQmFjay5sZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1h
cmdpblNpemVdLAorCisgICAgICAgIFtbYm94LnRvcEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9B
bmNob3I6dGl0bGUudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNp
emVdLAorICAgICAgICBbW3RpdGxlLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNo
b3I6d2FybmluZy50b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6
ZV0sCisgICAgICAgIFtbd2FybmluZy5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5j
aG9yOmdvQmFjay50b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6
ZV0sCisgICAgICAgIFtbZ29CYWNrLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNo
b3I6Ym94LmJvdHRvbUFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXpl
XQogICAgIF1dOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQog
Ci0gICAgZm9yIChOU1N0YWNrVmlldyAqdmlldyBpbiBAW3RvcCwgYm90dG9tXSkKLSAgICAgICAg
W3ZpZXcgc2V0SHVnZ2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmll
bnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKKy0gKHZvaWQp
c2hvd0RldGFpbHNDbGlja2VkCit7CisgICAgVmlld1R5cGUgKmJveCA9IHNlbGYuc3Vidmlld3Mu
bGFzdE9iamVjdDsKKyAgICBCdXR0b25UeXBlICpzaG93RGV0YWlscyA9IGJveC5zdWJ2aWV3cy5s
YXN0T2JqZWN0OworICAgIFtzaG93RGV0YWlscyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAg
IE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnRleHQgPSBkZXRhaWxzVGV4dCgqX3Jlc3VsdCk7
CisgICAgW3RleHQgYWRkQXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlw
ZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXSB9IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHRleHQu
bGVuZ3RoKV07CisgICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqZGV0YWlscyA9IFtbW1dLU2Fm
ZUJyb3dzaW5nVGV4dFZpZXcgYWxsb2NdIGluaXRXaXRoQXR0cmlidXRlZFN0cmluZzp0ZXh0IGZv
cldhcm5pbmc6c2VsZl0gYXV0b3JlbGVhc2VdOworICAgIFtfdGV4dFZpZXdzIGFkZE9iamVjdDpk
ZXRhaWxzXTsKKyAgICBWaWV3VHlwZSAqYm90dG9tID0gW1tWaWV3VHlwZSBuZXddIGF1dG9yZWxl
YXNlXTsKKyAgICBzZXRCYWNrZ3JvdW5kKGJvdHRvbSwgY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVt
OjpCb3hCYWNrZ3JvdW5kLCBzZWxmKSk7CisgICAgYm90dG9tLmxheWVyLmNvcm5lclJhZGl1cyA9
IGJveENvcm5lclJhZGl1czsKIAotICAgIFN0YWNrVmlld1R5cGUgKmJveCA9IFtOU1N0YWNrVmll
dyBzdGFja1ZpZXdXaXRoVmlld3M6QFt0b3AsIG1pZGRsZSwgYm90dG9tXV07Ci0gICAgYm94Lndh
bnRzTGF5ZXIgPSBZRVM7Ci0gICAgYm94LmxheWVyLmJhY2tncm91bmRDb2xvciA9IFtbTlNDb2xv
ciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdIENHQ29sb3JdOwotICAgIGJveC5sYXllci5jb3JuZXJS
YWRpdXMgPSA2OwotICAgIGJveC5hbGlnbm1lbnQgPSBOU0xheW91dEF0dHJpYnV0ZUNlbnRlclg7
Ci0gICAgW2JveC53aWR0aEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1heFdpZHRo
XS5hY3RpdmUgPSB0cnVlOwotICAgIGJveC5lZGdlSW5zZXRzID0geyBtYXJnaW5TaXplLCBtYXJn
aW5TaXplLCBtYXJnaW5TaXplLCBtYXJnaW5TaXplIH07Ci0gICAgW2JveCBzZXRIdWdnaW5nUHJp
b3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29u
c3RyYWludE9yaWVudGF0aW9uVmVydGljYWxdOwotICAgIFtzZWxmIGFkZFZpZXc6Ym94IGluR3Jh
dml0eTpOU1N0YWNrVmlld0dyYXZpdHlDZW50ZXJdOworI2lmIEhBVkUoU0FGRV9CUk9XU0lORykK
KyAgICBjb25zdGV4cHIgYXV0byBtYXhZID0ga0NBTGF5ZXJNaW5YTWF4WUNvcm5lciB8IGtDQUxh
eWVyTWF4WE1heFlDb3JuZXI7CisgICAgY29uc3RleHByIGF1dG8gbWluWSA9IGtDQUxheWVyTWlu
WE1pbllDb3JuZXIgfCBrQ0FMYXllck1heFhNaW5ZQ29ybmVyOworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBib3gubGF5ZXIubWFza2VkQ29ybmVycyA9IG1heFk7CisgICAgYm90dG9tLmxheWVyLm1h
c2tlZENvcm5lcnMgPSBtaW5ZOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgd29ya2lu
ZyBvbiBpT1MuCi0gICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxv
YWQ6Olllcyk7CisgICAgYm94LmxheWVyLm1hc2tlZENvcm5lcnMgPSBtaW5ZOworICAgIGJvdHRv
bS5sYXllci5tYXNrZWRDb3JuZXJzID0gbWF4WTsKKyNlbmRpZgorI2Vsc2UKKyAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorCisgICAgVmlld1R5cGUgKmxpbmUgPSBbW1ZpZXdUeXBl
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIHNldEJhY2tncm91bmQobGluZSwgW0NvbG9yVHlwZSBs
aWdodEdyYXlDb2xvcl0pOworICAgIGZvciAoVmlld1R5cGUgKnZpZXcgaW4gQFtkZXRhaWxzLCBi
b3R0b20sIGxpbmVdKQorICAgICAgICB2aWV3LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50
b0NvbnN0cmFpbnRzID0gTk87CisKKyAgICBbc2VsZiBhZGRTdWJ2aWV3OmJvdHRvbV07CisgICAg
W2JvdHRvbSBhZGRTdWJ2aWV3OmxpbmVdOworICAgIFtib3R0b20gYWRkU3VidmlldzpkZXRhaWxz
XTsKKyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgW05TTGF5b3V0Q29uc3RyYWludCBhY3Rp
dmF0ZUNvbnN0cmFpbnRzOkBbCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWludEVx
dWFsVG9BbmNob3I6Ym90dG9tLndpZHRoQW5jaG9yXSwKKyAgICAgICAgW2JveC5ib3R0b21BbmNo
b3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLnRvcEFuY2hvcl0sCisgICAgICAgIFti
b3gubGVhZGluZ0FuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpib3R0b20ubGVhZGluZ0Fu
Y2hvcl0sCisgICAgICAgIFtsaW5lLndpZHRoQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9y
OmJvdHRvbS53aWR0aEFuY2hvcl0sCisgICAgICAgIFtsaW5lLmxlYWRpbmdBbmNob3IgY29uc3Ry
YWludEVxdWFsVG9BbmNob3I6Ym90dG9tLmxlYWRpbmdBbmNob3JdLAorICAgICAgICBbbGluZS50
b3BBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLnRvcEFuY2hvcl0sCisgICAg
ICAgIFtsaW5lLmhlaWdodEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50OjFdLAorICAg
ICAgICBbW2JvdHRvbS50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmRldGFpbHMu
dG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAg
ICBbW2RldGFpbHMuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3R0b20u
Ym90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAg
ICAgICBbW2JvdHRvbS5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpkZXRh
aWxzLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0s
CisgICAgICAgIFtbZGV0YWlscy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNo
b3I6Ym90dG9tLnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdp
blNpemVdLAorICAgIF1dOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRp
ZgorICAgIFtzZWxmIGxheW91dFRleHRdOworI2lmICFQTEFURk9STShNQUMpCisgICAgW3NlbGYg
bGF5b3V0SWZOZWVkZWRdOworICAgIENHRmxvYXQgaGVpZ2h0ID0gMDsKKyAgICBmb3IgKFZpZXdU
eXBlICpzdWJ2aWV3IGluIHNlbGYuc3Vidmlld3MpCisgICAgICAgIGhlaWdodCArPSBzdWJ2aWV3
LmZyYW1lLnNpemUuaGVpZ2h0OworICAgIFtzZWxmIHNldENvbnRlbnRTaXplOiB7IHNlbGYuZnJh
bWUuc2l6ZS53aWR0aCwgc2VsZi5mcmFtZS5zaXplLmhlaWdodCArIGhlaWdodCAvIDIgfV07CiAj
ZW5kaWYKLSAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClsYXlvdXRUZXh0Cit7CisgICAg
Zm9yIChXS1NhZmVCcm93c2luZ1RleHRWaWV3ICp2aWV3IGluIF90ZXh0Vmlld3MuZ2V0KCkpCisg
ICAgICAgIFt2aWV3IGludmFsaWRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZV07CiB9CiAKICNpZiBQ
TEFURk9STShNQUMpCistIChCT09MKXRleHRWaWV3OihOU1RleHRWaWV3ICopdGV4dFZpZXcgY2xp
Y2tlZE9uTGluazooaWQpbGluayBhdEluZGV4OihOU1VJbnRlZ2VyKWNoYXJJbmRleAoreworICAg
IFtzZWxmIGNsaWNrZWRPbkxpbms6bGlua107CisgICAgcmV0dXJuIFlFUzsKK30KKwogLSAodm9p
ZClsYXlvdXQKIHsKLSAgICBmb3IgKE5TVmlldyAqdmlldyBpbiBzZWxmLnN1YnZpZXdzLmZpcnN0
T2JqZWN0LnN1YnZpZXdzKQotICAgICAgICBbdmlldyBpbnZhbGlkYXRlSW50cmluc2ljQ29udGVu
dFNpemVdOwogICAgIFtzdXBlciBsYXlvdXRdOworICAgIFtzZWxmIGxheW91dFRleHRdOworfQor
I2Vsc2UKKy0gKHZvaWQpbGF5b3V0U3Vidmlld3MKK3sKKyAgICBbc3VwZXIgbGF5b3V0U3Vidmll
d3NdOworICAgIFtzZWxmIGxheW91dFRleHRdOworfQorCistIChCT09MKXRleHRWaWV3OihVSVRl
eHRWaWV3ICopdGV4dFZpZXcgc2hvdWxkSW50ZXJhY3RXaXRoVVJMOihOU1VSTCAqKVVSTCBpblJh
bmdlOihOU1JhbmdlKWNoYXJhY3RlclJhbmdlIGludGVyYWN0aW9uOihVSVRleHRJdGVtSW50ZXJh
Y3Rpb24paW50ZXJhY3Rpb24KK3sKKyAgICBbc2VsZiBjbGlja2VkT25MaW5rOlVSTF07CisgICAg
cmV0dXJuIE5POworfQorCistICh2b2lkKWRpZE1vdmVUb1dpbmRvdworeworICAgIFtzZWxmIGFk
ZENvbnRlbnRdOwogfQogI2VuZGlmCiAKQEAgLTI3Myw3ICs1MDAsNyBAQCAtICh2b2lkKWdvQmFj
a0NsaWNrZWQKICAgICAgICAgX2NvbXBsZXRpb25IYW5kbGVyKFdlYktpdDo6Q29udGludWVVbnNh
ZmVMb2FkOjpObyk7CiB9CiAKLS0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQpbGluaworLSAodm9p
ZCljbGlja2VkT25MaW5rOihOU1VSTCAqKWxpbmsKIHsKICAgICBpZiAoIV9jb21wbGV0aW9uSGFu
ZGxlcikKICAgICAgICAgcmV0dXJuOwpAQCAtMzA0LDY4ICs1MzEsNDEgQEAgLSAodm9pZCljbGlj
a2VkT25MaW5rOihpZClsaW5rCiAgICAgX2NvbXBsZXRpb25IYW5kbGVyKChOU1VSTCAqKWxpbmsp
OwogfQogCi0tICh2b2lkKXNob3dEZXRhaWxzQ2xpY2tlZAotewotI2lmIFBMQVRGT1JNKE1BQykK
LSAgICBOU1N0YWNrVmlldyAqYm94ID0gc2VsZi52aWV3cy5maXJzdE9iamVjdDsKLSAgICBOU1N0
YWNrVmlldyAqYm90dG9tID0gYm94LnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKnNo
b3dEZXRhaWxzQnV0dG9uID0gYm90dG9tLnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIFtib3R0b20g
cmVtb3ZlVmlldzpzaG93RGV0YWlsc0J1dHRvbl07Ci0gICAgV0tTYWZlQnJvd3NpbmdUZXh0Vmll
dyAqZGV0YWlscyA9IFtXS1NhZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0cmlidXRlZFN0
cmluZzpkZXRhaWxzVGV4dCgqX3Jlc3VsdCkgbGlua1RhcmdldDpzZWxmXTsKLSAgICBbYm94IGFk
ZFZpZXc6ZGV0YWlscyBpbkdyYXZpdHk6TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVyXTsKLSNlbHNl
Ci0gICAgLy8gRklYTUU6IEdldCB0aGlzIHdvcmtpbmcgb24gaU9TLgotI2VuZGlmCi19Ci0KIEBl
bmQKIAogQGltcGxlbWVudGF0aW9uIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcKIAotKyAoaW5zdGFu
Y2V0eXBlKXZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0
cmlidXRlZFN0cmluZyBsaW5rVGFyZ2V0OihXS1NhZmVCcm93c2luZ1dhcm5pbmcgKil0YXJnZXQK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0
cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgZm9yV2FybmluZzooV0tTYWZlQnJvd3NpbmdXYXJuaW5n
ICopd2FybmluZwogewotICAgIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKmluc3RhbmNlID0gW1tz
ZWxmIG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGlmICghaW5zdGFuY2UpCisgICAgaWYgKCEoc2Vs
ZiA9IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgaW5zdGFuY2UtPl90
YXJnZXQgPSB0YXJnZXQ7CisgICAgc2VsZi0+X3dhcm5pbmcgPSB3YXJuaW5nOworICAgIHNlbGYu
ZGVsZWdhdGUgPSB3YXJuaW5nOwogCi0gICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBj
b2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIpOworICAgIENvbG9yVHlwZSAq
Zm9yZWdyb3VuZENvbG9yID0gY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dCwg
d2FybmluZyk7CiAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW2F0dHJp
YnV0ZWRTdHJpbmcgbXV0YWJsZUNvcHldOwotICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlczpAewot
ICAgICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3Is
Ci0gICAgICAgIE5TRm9udEF0dHJpYnV0ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6
dGV4dFNpemVdCi0gICAgfSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKV07Ci0K
LSNpZiBQTEFURk9STShNQUMpCi0gICAgW2luc3RhbmNlIHNldExpbmtUZXh0QXR0cmlidXRlczpA
eyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfV07Ci0g
ICAgW2luc3RhbmNlIHNldENvbnRlbnRIdWdnaW5nUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJl
cXVpcmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGlj
YWxdOwotICAgIFtpbnN0YW5jZSBzZXRDb250ZW50Q29tcHJlc3Npb25SZXNpc3RhbmNlUHJpb3Jp
dHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3Ry
YWludE9yaWVudGF0aW9uVmVydGljYWxdOwotICAgIFtpbnN0YW5jZS53aWR0aEFuY2hvciBjb25z
dHJhaW50TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDptYXhXaWR0aCAtIDIgKiBtYXJnaW5TaXpl
XS5hY3RpdmUgPSB0cnVlOwotICAgIFtpbnN0YW5jZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29s
b3Igd2luZG93QmFja2dyb3VuZENvbG9yXV07Ci0gICAgW2luc3RhbmNlLnRleHRTdG9yYWdlIGFw
cGVuZEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5nXTsKKyAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZXM6
QHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH0gcmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCldOworICAgIFtzZWxmIHNldEJhY2tncm91
bmRDb2xvcjpjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHdhcm5pbmcp
XTsKKyAgICBbc2VsZiBzZXRMaW5rVGV4dEF0dHJpYnV0ZXM6QHsgTlNGb3JlZ3JvdW5kQ29sb3JB
dHRyaWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH1dOworICAgIFtzZWxmLnRleHRTdG9yYWdl
IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5nXTsKKyAgICBzZWxmLmVkaXRhYmxlID0gTk87
CisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBzZWxmLnNjcm9sbEVuYWJsZWQgPSBOTzsKICNlbmRp
ZgotICAgIHJldHVybiBpbnN0YW5jZTsKLX0KIAotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoU3Ry
aW5nOihOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbV0tTYWZlQnJvd3NpbmdUZXh0
VmlldyB2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmlu
ZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6c3RyaW5nXSBhdXRvcmVsZWFzZV0gbGlua1RhcmdldDpu
aWxdOworICAgIHJldHVybiBzZWxmOwogfQogCi0tIChOU1NpemUpaW50cmluc2ljQ29udGVudFNp
emUKKy0gKENHU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQogewotICAgIFtzZWxmLmxheW91dE1h
bmFnZXIgZW5zdXJlTGF5b3V0Rm9yVGV4dENvbnRhaW5lcjpzZWxmLnRleHRDb250YWluZXJdOwot
ICAgIGF1dG8gc2l6ZSA9IFtzZWxmLmxheW91dE1hbmFnZXIgdXNlZFJlY3RGb3JUZXh0Q29udGFp
bmVyOnNlbGYudGV4dENvbnRhaW5lcl0uc2l6ZTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0
dXJuIHsgTlNWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIHNpemUuaGVpZ2h0IH07CisgICAgW3NlbGYu
bGF5b3V0TWFuYWdlciBlbnN1cmVMYXlvdXRGb3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRh
aW5lcl07CisgICAgcmV0dXJuIHsgTlNWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIFtzZWxmLmxheW91
dE1hbmFnZXIgdXNlZFJlY3RGb3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl0uc2l6
ZS5oZWlnaHQgfTsKICNlbHNlCi0gICAgcmV0dXJuIHsgVUlWaWV3Tm9JbnRyaW5zaWNNZXRyaWMs
IHNpemUuaGVpZ2h0IH07CisgICAgYXV0byB3aWR0aCA9IHN0ZDo6bWluPENHRmxvYXQ+KG1heFdp
ZHRoLCBbX3dhcm5pbmcgZnJhbWVdLnNpemUud2lkdGgpIC0gMiAqIG1hcmdpblNpemU7CisgICAg
Y29uc3RleHByIGF1dG8gbm9IZWlnaHRDb25zdHJhaW50ID0gQ0dGTE9BVF9NQVg7CisgICAgcmV0
dXJuIHsgd2lkdGgsIFtzZWxmIHNpemVUaGF0Rml0czogeyB3aWR0aCwgbm9IZWlnaHRDb25zdHJh
aW50IH1dLmhlaWdodCB9OwogI2VuZGlmCiB9CiAKLS0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQp
bGluayBhdEluZGV4OihOU1VJbnRlZ2VyKWNoYXJJbmRleAotewotICAgIFtfdGFyZ2V0IGNsaWNr
ZWRPbkxpbms6bGlua107Ci19Ci0KIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDkg
KzIyNiw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdTY2FsZShDR0Zsb2F0KTsKICAgICBD
R0Zsb2F0IHZpZXdTY2FsZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2Fy
bmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZh
cmlhbnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKTsKLSAgICB2b2lk
IGNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpOwotCiAgICAgV0tMYXlvdXRNb2RlIGxheW91dE1v
ZGUoKSBjb25zdDsKICAgICB2b2lkIHNldExheW91dE1vZGUoV0tMYXlvdXRNb2RlKTsKICAgICB2
b2lkIHVwZGF0ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9kZXMoKTsKQEAgLTQ3MSw4ICs0Njgs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckN1cnJlbnRJ
dGVtKCk7CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckl0ZW0oV2ViQmFja0Zv
cndhcmRMaXN0SXRlbSYpOwogCi0gICAgV0tTYWZlQnJvd3NpbmdXYXJuaW5nICpzYWZlQnJvd3Np
bmdXYXJuaW5nKCkgeyByZXR1cm4gbV9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpOyB9Ci0KICAg
ICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIqIGdlc3R1cmVDb250cm9sbGVyKCkgeyByZXR1cm4gbV9n
ZXN0dXJlQ29udHJvbGxlci5nZXQoKTsgfQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciYgZW5z
dXJlR2VzdHVyZUNvbnRyb2xsZXIoKTsKICAgICB2b2lkIHNldEFsbG93c0JhY2tGb3J3YXJkTmF2
aWdhdGlvbkdlc3R1cmVzKGJvb2wpOwpAQCAtNzk4LDcgKzc5Myw2IEBAIHByaXZhdGU6CiAgICAg
Ym9vbCBtX3JlcXVpcmVzVXNlckFjdGlvbkZvckVkaXRpbmdDb250cm9sc01hbmFnZXIgeyBmYWxz
ZSB9OwogICAgIGJvb2wgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgeyBmYWxzZSB9OwogICAg
IGJvb2wgbV9pc1RleHRJbnNlcnRpb25SZXBsYWNpbmdTb2Z0U3BhY2UgeyBmYWxzZSB9OwotICAg
IFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IG1fc2FmZUJyb3dzaW5nV2FybmluZzsK
ICAgICAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIE5TSW50ZWdlciBtX2luaXRpYWxO
dW1iZXJPZlZhbGlkSXRlbXNGb3JEcm9wIHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTk5LDI0ICsxNTk5LDYgQEAgYm9vbCBXZWJWaWV3SW1wbDo6cmVzaWduRmlyc3RSZXNwb25k
ZXIoKQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzaG93U2FmZUJy
b3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYm
KT4mJiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fdmlldykKLSAgICAgICAgcmV0
dXJuIGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKLQotICAgIG1f
c2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxs
b2NdIGluaXRXaXRoRnJhbWU6W21fdmlldyBib3VuZHNdIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1
bHQgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb21w
bGV0aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3Vs
dCkgbXV0YWJsZSB7Ci0gICAgICAgIGlmICh3ZWFrVGhpcykKLSAgICAgICAgICAgIFtzdGQ6OmV4
Y2hhbmdlKHdlYWtUaGlzLT5tX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZy
b21TdXBlcnZpZXddOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkp
OwotICAgIH1dKTsKLSAgICBbbV92aWV3IGFkZFN1YnZpZXc6bV9zYWZlQnJvd3NpbmdXYXJuaW5n
LmdldCgpXTsKLX0KLQotdm9pZCBXZWJWaWV3SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5n
KCkKLXsKLSAgICBbc3RkOjpleGNoYW5nZShtX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIp
IHJlbW92ZUZyb21TdXBlcnZpZXddOwotfQotCiBib29sIFdlYlZpZXdJbXBsOjppc0ZvY3VzZWQo
KSBjb25zdAogewogICAgIGlmIChtX2luQmVjb21lRmlyc3RSZXNwb25kZXIpCkBAIC0xNjU1LDcg
KzE2MzcsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZW5ld0dTdGF0ZSgpCiB2b2lkIFdlYlZpZXdJ
bXBsOjpzZXRGcmFtZVNpemUoQ0dTaXplKQogewogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZENo
YW5nZUZyYW1lU2l6ZV07Ci0gICAgW21fc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpbbV92
aWV3IGJvdW5kc11dOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpkaXNhYmxlRnJhbWVTaXplVXBk
YXRlcygpCkBAIC01MTU4LDcgKzUxMzksNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpmbGFnc0NoYW5n
ZWQoTlNFdmVudCAqCiAjZGVmaW5lIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSX0lOVEVSTkFM
KEV2ZW50TmFtZSkgXAogICAgIHZvaWQgV2ViVmlld0ltcGw6OkV2ZW50TmFtZShOU0V2ZW50ICpl
dmVudCkgXAogICAgIHsgXAotICAgICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMgfHwg
bV9zYWZlQnJvd3NpbmdXYXJuaW5nKSBcCisgICAgICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2
ZW50cykgXAogICAgICAgICAgICAgcmV0dXJuOyBcCiAgICAgICAgIGlmIChOU1RleHRJbnB1dENv
bnRleHQgKmNvbnRleHQgPSBbbV92aWV3IGlucHV0Q29udGV4dF0pIHsgXAogICAgICAgICAgICAg
YXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsgXApJbmRleDogU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDIzNzg2
MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFy
VGV4dEluZGljYXRvcihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0
aW9uKSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVz
cyhmbG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNv
bnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxX
ZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKLQogICAgIHZv
aWQgZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBv
dmVycmlkZTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0
IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDIzNzg2MykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0tleWVk
QXJjaGl2ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCi0jZGVmaW5lIE1FU1NB
R0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBtX3dlYlZp
ZXctPl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKQorI2RlZmluZSBNRVNTQUdFX0NIRUNL
KGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgbV93ZWJWaWV3LmdldCgp
LT5fcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKSkKIAogQGludGVyZmFjZSBXS0VkaXRDb21t
YW5kT2JqQyA6IE5TT2JqZWN0CiB7CkBAIC0xNjEsMTggKzE2MSwxOCBAQCBJbnRTaXplIFBhZ2VD
bGllbnRJbXBsOjp2aWV3U2l6ZSgpCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dB
Y3RpdmUoKQogewogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTMzMDk4Ci0gICAgcmV0dXJuIGlzVmlld1Zpc2libGUoKSB8fCAobV93ZWJWaWV3
ICYmIFttX3dlYlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlXSk7CisgICAgcmV0
dXJuIGlzVmlld1Zpc2libGUoKSB8fCBbbV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3Vz
ZWRTdGF0ZV07CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQogewog
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMz
MDk4Ci0gICAgcmV0dXJuIGlzVmlld1dpbmRvd0FjdGl2ZSgpIHx8IChtX3dlYlZpZXcgJiYgW21f
d2ViVmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVdKTsKKyAgICByZXR1cm4gaXNW
aWV3V2luZG93QWN0aXZlKCkgfHwgW21fd2ViVmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2Vk
U3RhdGVdOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkKIHsKLSAg
ICBpZiAoaXNWaWV3SW5XaW5kb3coKSAmJiAhbV93ZWJWaWV3Ll9pc0JhY2tncm91bmQpCisgICAg
aWYgKGlzVmlld0luV2luZG93KCkgJiYgIVttX3dlYlZpZXcgX2lzQmFja2dyb3VuZF0pCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIAogICAgIGlmIChbbV93ZWJWaWV3IF9pc1Nob3dpbmdWaWRl
b1BpY3R1cmVJblBpY3R1cmVdKQpAQCAtMTg3LDggKzE4Nyw4IEBAIGJvb2wgUGFnZUNsaWVudElt
cGw6OmlzVmlld1Zpc2libGUoKQogYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3co
KQogewogICAgIC8vIEZJWE1FOiBpbiBXZWJLaXRUZXN0UnVubmVyLCBtX3dlYlZpZXcgaXMgbmls
LCBzbyBjaGVjayB0aGUgY29udGVudCB2aWV3IGluc3RlYWQuCi0gICAgaWYgKG1fd2ViVmlldykK
LSAgICAgICAgcmV0dXJuIFttX3dlYlZpZXcgd2luZG93XTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3
ID0gbV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gW3dlYlZpZXcgd2luZG93XTsKIAog
ICAgIHJldHVybiBbbV9jb250ZW50VmlldyB3aW5kb3ddOwogfQpAQCAtMjQ4LDcgKzI0OCw3IEBA
IHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZENvbXBsZXRlU3ludGhldGkKIAogdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJG
cmFtZVByb3h5JiBmcmFtZSwgQVBJOjpTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBGdW5jdGlvbjx2
b2lkKGJvb2wpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgW1t3cmFwcGVyKG1fd2ViVmll
dy0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0g
ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpvcmlnaW4uc2VjdXJp
dHlPcmlnaW4oKSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4Y2hhbmdlKGNv
bXBsZXRpb25IYW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlld107CisgICAgW1t3cmFwcGVy
KG1fd2ViVmlldy5nZXQoKS0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9j
YXRpb25Qcm92aWRlcl0gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdp
bjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpz
dGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlldy5n
ZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFN0YXJ0UHJvdmlzaW9u
YWxMb2FkRm9yTWFpbkZyYW1lKCkKQEAgLTQ2OSwxNiArNDY5LDYgQEAgdm9pZCBQYWdlQ2xpZW50
SW1wbDo6c2V0VGV4dEluZGljYXRvckFuaQogewogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpz
aG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNv
cmU6OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRs
ZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7IC8vIEZJWE1FOiBJbXBsZW1lbnQu
Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCi17
Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXll
clRyZWVDb250ZXh0KQogewogfQpAQCAtNjk1LDIzICs2ODUsMjMgQEAgdm9pZCBQYWdlQ2xpZW50
SW1wbDo6c2Nyb2xsaW5nTm9kZVNjcm9sbAogCiBWZWN0b3I8U3RyaW5nPiBQYWdlQ2xpZW50SW1w
bDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcnMoKQogewotICAgIHJldHVybiBt
X3dlYlZpZXcuX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Ll9taW1lVHlwZXNXaXRoQ3VzdG9tQ29u
dGVudFByb3ZpZGVyczsKKyAgICByZXR1cm4gW21fd2ViVmlldyBfY29udGVudFByb3ZpZGVyUmVn
aXN0cnldLl9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVyczsKIH0KIAogdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpCiB7CiAgICAgW21fd2Vi
VmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbl07Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpm
cm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigp
OworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3Bh
Z2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1w
bDo6bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2Uo
Km1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUs
IGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQo
KS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwog
fQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdp
bGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0
aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVy
ZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdl
YlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdp
bGxOYXZpZ2F0ZSwgaXRlbSk7CiAgICAgW21fd2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRF
bmRdOwogfQogCkBAIC03MjIsMTIgKzcxMiwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZp
Z2F0aW9uR2VzdHVyZURpCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OndpbGxSZWNvcmROYXZpZ2F0
aW9uU25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0
aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1f
d2ViVmlldy5nZXQoKS0+X3BhZ2UpLndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7
CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25h
cHNob3QoKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+
X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CisgICAgTmF2aWdh
dGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlv
bkdlc3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQoKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCkKQEAgLTg0MCw3ICs4
MzAsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRCiAgICAgICAg
IGNvbXBsZXRpb25IYW5kbGVyKHBhc3N3b3JkKTsKICAgICB9KTsKIAotICAgIGlmIChXS1Bhc3N3
b3JkVmlldyAqcGFzc3dvcmRWaWV3ID0gbV93ZWJWaWV3Ll9wYXNzd29yZFZpZXcpIHsKKyAgICBp
ZiAoV0tQYXNzd29yZFZpZXcgKnBhc3N3b3JkVmlldyA9IFttX3dlYlZpZXcgX3Bhc3N3b3JkVmll
d10pIHsKICAgICAgICAgQVNTRVJUKGZpbGVOYW1lID09IFN0cmluZyB7IHBhc3N3b3JkVmlldy5k
b2N1bWVudE5hbWUgfSk7CiAgICAgICAgIFtwYXNzd29yZFZpZXcgc2hvd1Bhc3N3b3JkRmFpbHVy
ZUFsZXJ0XTsKICAgICAgICAgcGFzc3dvcmRWaWV3LnVzZXJEaWRFbnRlclBhc3N3b3JkID0gcGFz
c3dvcmRIYW5kbGVyLmdldCgpOwpAQCAtODQ4LDcgKzgzOCw3IEBAIHZvaWQgUGFnZUNsaWVudElt
cGw6OnJlcXVlc3RQYXNzd29yZEZvclEKICAgICB9CiAKICAgICBbbV93ZWJWaWV3IF9zaG93UGFz
c3dvcmRWaWV3V2l0aERvY3VtZW50TmFtZTpmaWxlTmFtZSBwYXNzd29yZEhhbmRsZXI6cGFzc3dv
cmRIYW5kbGVyLmdldCgpXTsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dl
YlZpZXctPl9wYWdlKS5kaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudCgpOwor
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2Up
LmRpZFJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KCk7CiB9CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFj
LmgJKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDYgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQg
bm90aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJyaWRlOwog
ICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93U2Fm
ZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVS
TD4mJik+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkg
b3ZlcnJpZGU7CiAgICAgCiAjaWYgV0tfQVBJX0VOQUJMRUQKICAgICBib29sIHNob3dTaGFyZVNo
ZWV0KGNvbnN0IFdlYkNvcmU6OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmLCBXVEY6OkNvbXBsZXRp
b25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjM3ODYz
KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00ODksMTggKzQ4OSw2IEBAIFJlZjxWYWxpZGF0aW9uQnViYmxlPiBQ
YWdlQ2xpZW50SW1wbDo6Y3IKICAgICByZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRlKG1f
dmlldywgbWVzc2FnZSwgc2V0dGluZ3MpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93
U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBX
ZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9pbXBs
KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZ
ZXMpOwotICAgIG1faW1wbC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcocmVzdWx0LCBXVEZNb3Zl
KGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2Fm
ZUJyb3dzaW5nV2FybmluZygpCi17Ci0gICAgbV9pbXBsLT5jbGVhclNhZmVCcm93c2luZ1dhcm5p
bmcoKTsKLX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRvcihSZWY8VGV4
dEluZGljYXRvcj4gdGV4dEluZGljYXRvciwgV2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0xp
ZmV0aW1lIGxpZmV0aW1lKQogewogICAgIG1faW1wbC0+c2V0VGV4dEluZGljYXRvcih0ZXh0SW5k
aWNhdG9yLmdldCgpLCBsaWZldGltZSk7CkBAIC01NjQsNyArNTUyLDcgQEAgdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKAogI2lmIFdLX0FQSV9FTkFCTEVECiBib29sIFBh
Z2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldChjb25zdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJM
JiBzaGFyZURhdGEsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0
aW9uSGFuZGxlcikKIHsKLSAgICBtX2ltcGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RG
TW92ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViVmlldyk7CisgICAgbV9pbXBsLT5zaG93U2hh
cmVTaGVldChzaGFyZURhdGEsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlZpZXcu
Z2V0KCkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCkBAIC03NTEsMTYgKzcz
OSwxNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiAgICAgbV9p
bXBsLT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbih0cnVl
KTsKIAogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2
aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdl
c3R1cmVEaWRCZWdpbigpOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkp
CisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5u
YXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBQYWdlQ2xpZW50
SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNr
Rm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1f
d2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3
LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7Cisg
ICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlv
blN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2ls
bEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5h
dmlnYXRlKTsKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03NzAsOCArNzU4LDggQEAgdm9p
ZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaQogdm9pZCBQYWdlQ2xpZW50SW1w
bDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJW
aWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9w
YWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIGlm
IChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0
ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3
aWxsTmF2aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRl
KTsKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03ODUsOCArNzczLDggQEAgdm9pZCBQYWdl
Q2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2ls
bFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQog
ewogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdh
dGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmln
YXRpb25TbmFwc2hvdChpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3Lmdl
dCgpKQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCp3ZWJWaWV3LT5fcGFn
ZSkud2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKICNlbHNlCiAgICAgVU5VU0VE
X1BBUkFNKGl0ZW0pOwogI2VuZGlmCkBAIC03OTUsOCArNzgzLDggQEAgdm9pZCBQYWdlQ2xpZW50
SW1wbDo6d2lsbFJlY29yZE5hdmlnYXRpbwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVtb3Zl
TmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBp
ZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dl
YlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOworICAg
IGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25T
dGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBz
aG90V2FzUmVtb3ZlZCgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzODAwMykKKysrIFRvb2xzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE4LTExLTA4ICBBbGV4
IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW2lPU10g
SW1wbGVtZW50IHNhZmUgYnJvd3NpbmcgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE0NDEKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvU2FmZUJyb3dzaW5nLm1tOgorICAgICAgICAoY2hlY2tUaXRsZUFuZENsaWNrKToKKyAgICAg
ICAgKFRFU1QpOgorCiAyMDE4LTExLTA4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYSBxdWljayBidWlsZCBmaXggZm9yIHIyMzc5ODMK
SW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5n
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
U2FmZUJyb3dzaW5nLm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM3
LDggKzEzNyw2IEBAIC0gKHZvaWQpbG9va1VwVVJMOihOU1VSTCAqKVVSTCBjb21wbGV0aW8KIAog
QGVuZAogCi0jaWYgUExBVEZPUk0oTUFDKSAvLyBGSVhNRTogVGVzdCBvbiBpT1Mgb25jZSBpbXBs
ZW1lbnRlZC4KLQogc3RhdGljIE5TVVJMICpzaW1wbGVVUkwoKQogewogICAgIHJldHVybiBbW05T
QnVuZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9u
OkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKQEAgLTE1
NCwzMSArMTUyLDQ2IEBAIHN0YXRpYyBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzYWZlQnJvd3NpbmcK
ICAgICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNp
bXBsZVVSTCgpXV07CiAgICAgd2hpbGUgKCFbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0Zv
clRlc3RpbmddKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOwor
I2lmICFQTEFURk9STShNQUMpCisgICAgW1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9y
VGVzdGluZ10gZGlkTW92ZVRvV2luZG93XTsKKyNlbmRpZgogICAgIHJldHVybiB3ZWJWaWV3Owog
fQogCisjaWYgUExBVEZPUk0oTUFDKQorc3RhdGljIHZvaWQgY2hlY2tUaXRsZUFuZENsaWNrKE5T
QnV0dG9uICpidXR0b24sIGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgRVhQRUNU
X1NUUkVRKGJ1dHRvbi50aXRsZS5VVEY4U3RyaW5nLCBleHBlY3RlZFRpdGxlKTsKKyAgICBbYnV0
dG9uIHBlcmZvcm1DbGljazpuaWxdOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGNoZWNrVGl0bGVB
bmRDbGljayhVSUJ1dHRvbiAqYnV0dG9uLCBjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQorewor
ICAgIEVYUEVDVF9TVFJFUShbYnV0dG9uIGF0dHJpYnV0ZWRUaXRsZUZvclN0YXRlOlVJQ29udHJv
bFN0YXRlTm9ybWFsXS5zdHJpbmcuVVRGOFN0cmluZywgZXhwZWN0ZWRUaXRsZSk7CisgICAgVUlW
aWV3ICp0YXJnZXQgPSBidXR0b24uc3VwZXJ2aWV3LnN1cGVydmlldzsKKyAgICBTRUwgc2VsZWN0
b3IgPSBOU1NlbGVjdG9yRnJvbVN0cmluZyhzdHJjbXAoZXhwZWN0ZWRUaXRsZSwgIkdvIEJhY2si
KSA/IEAic2hvd0RldGFpbHNDbGlja2VkIiA6IEAiZ29CYWNrQ2xpY2tlZCIpOworICAgIFt0YXJn
ZXQgcGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKK30KKyNlbmRpZgorCiBURVNUKFNhZmVCcm93
c2luZywgR29CYWNrKQogewogICAgIGF1dG8gd2ViVmlldyA9IHNhZmVCcm93c2luZ1ZpZXcoKTsK
LSAgICBOU1ZpZXcgKmJvdHRvbSA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVz
dGluZ10uc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MubGFzdE9iamVjdDsKLSAgICBOU0J1
dHRvbiAqZ29CYWNrID0gKE5TQnV0dG9uICopYm90dG9tLnN1YnZpZXdzLmxhc3RPYmplY3Q7Ci0g
ICAgRVhQRUNUX1NUUkVRKGdvQmFjay50aXRsZS5VVEY4U3RyaW5nLCAiR28gYmFjayIpOwotICAg
IFtnb0JhY2sgcGVyZm9ybUNsaWNrOm5pbF07CisgICAgYXV0byB3YXJuaW5nID0gW3dlYlZpZXcg
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBhdXRvIGJveCA9IHdhcm5pbmcu
c3Vidmlld3MuZmlyc3RPYmplY3Q7CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKGJveC5zdWJ2aWV3
c1szXSwgIkdvIEJhY2siKTsKICAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nXSwgbmlsKTsKIH0KIAogVEVTVChTYWZlQnJvd3NpbmcsIFZpc2l0VW5z
YWZlV2Vic2l0ZSkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBzYWZlQnJvd3NpbmdWaWV3KCk7Ci0g
ICAgTlNWaWV3ICp3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0
aW5nXTsKLSAgICBOU1ZpZXcgKmJveCA9IHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0g
ICAgTlNCdXR0b24gKnNob3dEZXRhaWxzID0gKE5TQnV0dG9uICopYm94LnN1YnZpZXdzLmxhc3RP
YmplY3Quc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX1NUUkVRKHNob3dEZXRhaWxz
LnRpdGxlLlVURjhTdHJpbmcsICJTaG93IGRldGFpbHMiKTsKLSAgICBFWFBFQ1RfRVEoYm94LnN1
YnZpZXdzLmNvdW50LCAzdWxsKTsKLSAgICBbc2hvd0RldGFpbHMgcGVyZm9ybUNsaWNrOm5pbF07
Ci0gICAgRVhQRUNUX0VRKGJveC5zdWJ2aWV3cy5jb3VudCwgNHVsbCk7CisgICAgYXV0byB3YXJu
aW5nID0gW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBFWFBF
Q1RfRVEod2FybmluZy5zdWJ2aWV3cy5jb3VudCwgMXVsbCk7CisgICAgY2hlY2tUaXRsZUFuZENs
aWNrKHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3NbNF0sICJTaG93IERldGFp
bHMiKTsKKyAgICBFWFBFQ1RfRVEod2FybmluZy5zdWJ2aWV3cy5jb3VudCwgMnVsbCk7CiAgICAg
RVhQRUNUX0ZBTFNFKGNvbW1pdHRlZE5hdmlnYXRpb24pOwotICAgIFt3YXJuaW5nIHBlcmZvcm1T
ZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhAImNsaWNrZWRPbkxpbms6Iikgd2l0aE9iamVj
dDpAIldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKKyAgICBbd2FybmluZyBwZXJmb3Jt
U2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoQCJjbGlja2VkT25MaW5rOiIpIHdpdGhPYmpl
Y3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIl1d
OwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY29tbWl0dGVkTmF2aWdhdGlvbik7CiB9
CiAKQEAgLTE5MSw4ICsyMDQsNiBAQCBURVNUKFNhZmVCcm93c2luZywgTmF2aWdhdGlvbkNsZWFy
c1dhcm5pCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CiB9CiAK
LSNlbmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgTnVsbExvb2t1cENvbnRleHQg
OiBOU09iamVjdAogQGVuZAogQGltcGxlbWVudGF0aW9uIE51bGxMb29rdXBDb250ZXh0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354446</attachid>
            <date>2018-11-09 23:01:00 -0800</date>
            <delta_ts>2018-11-09 23:25:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181109230059.patch</filename>
            <type>text/plain</type>
            <size>60505</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNSw2ICsxMzUxLDcgQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIAogLSAodm9pZClsYXlvdXRTdWJ2aWV3cwogeworICAg
IFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CiAgICAgW3N1cGVy
IGxheW91dFN1YnZpZXdzXTsKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogfQpA
QCAtMzI5MCw2ICszMzA3LDcgQEAgLSAodm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0
KXJlYwogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwogICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkp
OwogfQogCkBAIC0zNTgzLDc2ICszNjAxLDEyMSBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqCiAKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAog
eworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAg
X2ltcGwtPnNjcm9sbFdoZWVsKGV2ZW50KTsKIH0KIAogLSAodm9pZClzd2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAg
ICByZXR1cm47CisKICAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOwogfQogCiAtICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQp
OwogfQogCiAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VE
b3duKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAg
ICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBs
LT5tb3VzZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisg
ICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUVudGVyZWQoZXZlbnQpOwogfQogCiAt
ICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93
c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUV4aXRlZChl
dmVudCk7CiB9CiAKIC0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewor
ICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2lt
cGwtPm90aGVyTW91c2VEb3duKGV2ZW50KTsKIH0KIAogLSAodm9pZClvdGhlck1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwogfQog
CiAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcp
CisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdodE1vdXNlRHJhZ2dlZChldmVudCk7
CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlVXAoZXZlbnQpOwogfQogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAg
IHJldHVybjsKKwogICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5nZVdpdGhFdmVudChldmVudCk7CiB9
CiAKQEAgLTQ2MzUsNyArNDY5OCw3IEBAIC0gKHZvaWQpX3Bhc3RlQXNRdW90YXRpb246KGlkKXNl
bmRlcgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERFRkFV
TFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2b2lk
KV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNj
cmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKQEAgLTY2NjYsMTUgKzY3MjksMTIgQEAgLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZQogCiAjaWYgUExBVEZPUk0oTUFDKQogLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZl
QnJvd3NpbmdXYXJuaW5nKCk7Ci19CiAjZWxzZQogLSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nCisjZW5kaWYKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
c2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKIH0KLSNlbmRpZgogCiAtIChfV0tJbnNwZWN0b3Ig
KilfaW5zcGVjdG9yCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBAQCBjbGFzcyBBdHRhY2htZW50
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2Fk
IDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNsYXNzIFZpZXdTbmFwc2hvdDsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CiB9CiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnNl
cnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpvcHRpb25hbDxCT09MPilfcmVz
b2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKIAogLSAo
V0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKIEBjbGFzcyBX
S1dlYlZpZXc7CiAKQEAgLTQ4LDkgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBOU0ZpbGVXcmFwcGVy
ICphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKICAgICBOU1NldCAqc2Vy
aWFsaXphYmxlRmlsZVdyYXBwZXJDbGFzc2VzKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKKyAgICB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dh
cm5pbmcoKSBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NSw2ICs0NSwxOSBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmlzUGxheWluZ0F1ZGlvCiAjZW5kaWYKIH0KIAordm9p
ZCBQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZl
QnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdl
YktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25I
YW5kbGVyKQoreworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAg
ICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dzaW5nV2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcildOworICAgIGVsc2UKKyAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpObyk7Cit9CisKK3ZvaWQgUGFnZUNs
aWVudEltcGxDb2NvYTo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKK3sKKyAgICBbbV93ZWJW
aWV3IF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworfQorCiAjaWYgRU5BQkxFKEFUVEFDSE1F
TlRfRUxFTUVOVCkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRJbnNlcnRBdHRhY2ht
ZW50KEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCwgY29uc3QgU3RyaW5nJiBzb3VyY2UpCkBA
IC02OSw3ICs4Miw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6ZGlkUmVtb3ZlQXR0YWMK
IE5TRmlsZVdyYXBwZXIgKlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJbnN0
YW5jZSgpIGNvbnN0CiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjbHMgPSBtX3dl
YlZpZXcuY29uZmlndXJhdGlvbi5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmls
ZVdyYXBwZXIgc2VsZl07CisgICAgQ2xhc3MgY2xzID0gW21fd2ViVmlldyBjb25maWd1cmF0aW9u
XS5fYXR0YWNobWVudEZpbGVXcmFwcGVyQ2xhc3MgPzogW05TRmlsZVdyYXBwZXIgc2VsZl07CiAg
ICAgcmV0dXJuIFtjbHMgYWxsb2NdOwogI2Vsc2UKICAgICByZXR1cm4gbmlsOwpAQCAtODAsNyAr
OTMsNyBAQCBOU1NldCAqUGFnZUNsaWVudEltcGxDb2NvYTo6c2VyaWFsaXphYmxlCiB7CiAgICAg
Q2xhc3MgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MgPSBOU0ZpbGVXcmFwcGVyLnNlbGY7CiAjaWYg
V0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IG1f
d2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzczsKKyAgICBD
bGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IFttX3dlYlZpZXcgY29uZmlndXJhdGlv
bl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOwogICAgIGlmIChjb25maWd1cmVkRmlsZVdy
YXBwZXJDbGFzcyAmJiBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyAhPSBkZWZhdWx0RmlsZVdy
YXBwZXJDbGFzcykKICAgICAgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0czpjb25maWd1
cmVkRmlsZVdyYXBwZXJDbGFzcywgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MsIG5pbF07CiAjZW5k
aWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJyb3dzaW5nV2Fy
bmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2Fm
ZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBjb3B5KQpAQCAt
NDQsMTggKzQ0LDIwIEBAIGNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGVudW0gY2xhc3MgQ29u
dGludWVVbnNhZmVMb2FkIDogYm9vbDsKIH0KIAorT0JKQ19DTEFTUyBXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3OworCiAjaWYgUExBVEZPUk0oTUFDKQogdXNpbmcgUmVjdFR5cGUgPSBOU1JlY3Q7Ci11
c2luZyBTdGFja1ZpZXdUeXBlID0gTlNTdGFja1ZpZXc7CitAaW50ZXJmYWNlIFdLU2FmZUJyb3dz
aW5nV2FybmluZyA6IE5TVmlldzxOU1RleHRWaWV3RGVsZWdhdGU+CiAjZWxzZQogdXNpbmcgUmVj
dFR5cGUgPSBDR1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gVUlTdGFja1ZpZXc7CitAaW50
ZXJmYWNlIFdLU2FmZUJyb3dzaW5nV2FybmluZyA6IFVJU2Nyb2xsVmlldzxVSVRleHRWaWV3RGVs
ZWdhdGU+CiAjZW5kaWYKLQotQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1dhcm5pbmcgOiBTdGFj
a1ZpZXdUeXBlIHsKK3sKIEBwYWNrYWdlCiAgICAgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJp
YW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiBfY29tcGxl
dGlvbkhhbmRsZXI7CiAgICAgUmVmUHRyPGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0
PiBfcmVzdWx0OworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3ICo+PiBfdGV4dFZpZXdzOwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFt
ZTooUmVjdFR5cGUpZnJhbWUgc2FmZUJyb3dzaW5nUmVzdWx0Oihjb25zdCBXZWJLaXQ6OlNhZmVC
cm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4m
Jik+JiYpY29tcGxldGlvbkhhbmRsZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9D
b2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCShyZXZpc2lvbiAyMzc4
NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5p
bmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDQ5ICszMywxMDUgQEAKICNpbXBvcnQgPHd0Zi9C
bG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL0xhbmd1YWdlLmg+CiAKLWNvbnN0IENHRmxvYXQgZXhj
bGFtYXRpb25Qb2ludFNpemUgPSAzMDsKLWNvbnN0IENHRmxvYXQgdGV4dFNpemUgPSAxMzsKK2Nv
bnN0ZXhwciBDR0Zsb2F0IGV4Y2xhbWF0aW9uUG9pbnRTaXplID0gMzA7Citjb25zdGV4cHIgQ0dG
bG9hdCB0aXRsZVNpemUgPSAyNjsKK2NvbnN0ZXhwciBDR0Zsb2F0IGJveENvcm5lclJhZGl1cyA9
IDY7CisjaWYgSEFWRShTQUZFX0JST1dTSU5HKQorY29uc3RleHByIENHRmxvYXQgbWFyZ2luU2l6
ZSA9IDIwOworY29uc3RleHByIENHRmxvYXQgbWF4V2lkdGggPSA2NzU7CisjZW5kaWYKKwogI2lm
IFBMQVRGT1JNKE1BQykKLWNvbnN0IENHRmxvYXQgbWFyZ2luU2l6ZSA9IDIwOwotY29uc3Qgc2l6
ZV90IG1heFdpZHRoID0gNjAwOworY29uc3RleHByIENHRmxvYXQgdGV4dFNpemUgPSAxNDsKIHVz
aW5nIENvbG9yVHlwZSA9IE5TQ29sb3I7CiB1c2luZyBGb250VHlwZSA9IE5TRm9udDsKLXVzaW5n
IFZpZXdUeXBlID0gTlNWaWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBOU0JlemllclBhdGg7
CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBOU1RleHRWaWV3OwordXNpbmcgQnV0dG9uVHlwZSA9IE5T
QnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IE5TTGF5b3V0QXR0cmlidXRlOwordXNpbmcg
Vmlld1R5cGUgPSBOU1ZpZXc7CiAjZWxzZQorY29uc3RleHByIENHRmxvYXQgdGV4dFNpemUgPSAy
MDsKIHVzaW5nIENvbG9yVHlwZSA9IFVJQ29sb3I7CiB1c2luZyBGb250VHlwZSA9IFVJRm9udDsK
LXVzaW5nIFZpZXdUeXBlID0gVUlWaWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBVSUJlemll
clBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBVSVRleHRWaWV3OwordXNpbmcgQnV0dG9uVHlw
ZSA9IFVJQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IFVJU3RhY2tWaWV3QWxpZ25tZW50
OwordXNpbmcgVmlld1R5cGUgPSBVSVZpZXc7CiAjZW5kaWYKIAotc3RhdGljIGlkIGNvbmZpcm1N
YWx3YXJlU2VudGluZWwoKQorZW51bSBjbGFzcyBXYXJuaW5nSXRlbSA6IHVpbnQ4X3QgeworICAg
IEJhY2tncm91bmQsCisgICAgQm94QmFja2dyb3VuZCwKKyAgICBFeGNsYW1hdGlvblBvaW50LAor
ICAgIFRpdGxlVGV4dCwKKyAgICBNZXNzYWdlVGV4dCwKKyAgICBTaG93RGV0YWlsc0J1dHRvbiwK
KyAgICBHb0JhY2tCdXR0b24KK307CisKK3N0YXRpYyBOU1VSTCAqY29uZmlybU1hbHdhcmVTZW50
aW5lbCgpCiB7Ci0gICAgcmV0dXJuIEAiV0tDb25maXJtTWFsd2FyZVNlbnRpbmVsIjsKKyAgICBy
ZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0NvbmZpcm1NYWx3YXJlU2VudGluZWwiXTsK
IH0KIAotc3RhdGljIGlkIHZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkKK3N0YXRpYyBOU1VS
TCAqdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKQogewotICAgIHJldHVybiBAIldLVmlzaXRV
bnNhZmVXZWJzaXRlU2VudGluZWwiOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpA
IldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKIH0KIAotc3RhdGljIENvbG9yVHlwZSAq
Y29sb3JOYW1lZChOU1N0cmluZyAqbmFtZSkKK3N0YXRpYyBDb2xvclR5cGUgKmNvbG9yRm9ySXRl
bShXYXJuaW5nSXRlbSBpdGVtLCBWaWV3VHlwZSAqd2FybmluZykKIHsKKyAgICBBU1NFUlQoW3dh
cm5pbmcgaXNLaW5kT2ZDbGFzczpbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGNsYXNzXV0pOwogI2lm
IFBMQVRGT1JNKE1BQykKKworICAgIGF1dG8gY29sb3JOYW1lZCA9IFtdIChOU1N0cmluZyAqbmFt
ZSkgLT4gQ29sb3JUeXBlKiB7CiAjaWYgSEFWRShTQUZFX0JST1dTSU5HKQotICAgIHJldHVybiBb
TlNDb2xvciBjb2xvck5hbWVkOm5hbWUgYnVuZGxlOltOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRp
ZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXV07CisgICAgICAgIHJldHVybiBbTlNDb2xvciBjb2xv
ck5hbWVkOm5hbWUgYnVuZGxlOltOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNvbS5h
cHBsZS5XZWJLaXQiXV07CiAjZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJl
dHVybiBuaWw7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4g
bmlsOwogI2VuZGlmCisgICAgfTsKKworICAgIHN3aXRjaCAoaXRlbSkgeworICAgIGNhc2UgV2Fy
bmluZ0l0ZW06OkJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiBjb2xvck5hbWVkKEAiV0tTYWZl
QnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpOworICAgIGNhc2UgV2FybmluZ0l0ZW06OkJveEJh
Y2tncm91bmQ6CisgICAgICAgIHJldHVybiBbTlNDb2xvciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3Jd
OworICAgIGNhc2UgV2FybmluZ0l0ZW06OlRpdGxlVGV4dDoKKyAgICBjYXNlIFdhcm5pbmdJdGVt
OjpFeGNsYW1hdGlvblBvaW50OgorICAgICAgICByZXR1cm4gY29sb3JOYW1lZChAIldLU2FmZUJy
b3dzaW5nV2FybmluZ1RpdGxlIik7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6TWVzc2FnZVRleHQ6
CisgICAgICAgIHJldHVybiBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIp
OworICAgIGNhc2UgV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uOgorICAgIGNhc2UgV2Fy
bmluZ0l0ZW06OkdvQmFja0J1dHRvbjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgICAgIHJldHVybiBuaWw7CisgICAgfQogI2Vsc2UKLSAgICByZXR1cm4gW1VJQ29sb3IgY29s
b3JOYW1lZDpuYW1lIGluQnVuZGxlOltOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmllcjpAImNv
bS5hcHBsZS5XZWJLaXQiXSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpuaWxdOworICAg
IFVJQ29sb3IgKnJlZCA9IFtVSUNvbG9yIGNvbG9yV2l0aFJlZDowLjk5OCBncmVlbjowLjIzOSBi
bHVlOjAuMjMzIGFscGhhOjEuMF07CisgICAgVUlDb2xvciAqd2hpdGUgPSBbVUlDb2xvciB3aGl0
ZUNvbG9yXTsKKyAgICBib29sIG5hcnJvdyA9IHdhcm5pbmcudHJhaXRDb2xsZWN0aW9uLmhvcml6
b250YWxTaXplQ2xhc3MgPT0gVUlVc2VySW50ZXJmYWNlU2l6ZUNsYXNzQ29tcGFjdDsKKworICAg
IHN3aXRjaCAoaXRlbSkgeworICAgIGNhc2UgV2FybmluZ0l0ZW06OkJhY2tncm91bmQ6CisgICAg
ICAgIHJldHVybiByZWQ7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZDoKKyAg
ICAgICAgcmV0dXJuIG5hcnJvdyA/IHJlZCA6IHdoaXRlOworICAgIGNhc2UgV2FybmluZ0l0ZW06
OlRpdGxlVGV4dDoKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpFeGNsYW1hdGlvblBvaW50OgorICAg
ICAgICByZXR1cm4gbmFycm93ID8gd2hpdGUgOiByZWQ7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6
TWVzc2FnZVRleHQ6CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6U2hvd0RldGFpbHNCdXR0b246Cisg
ICAgICAgIHJldHVybiBuYXJyb3cgPyB3aGl0ZSA6IFtVSUNvbG9yIGRhcmtUZXh0Q29sb3JdOwor
ICAgIGNhc2UgV2FybmluZ0l0ZW06OkdvQmFja0J1dHRvbjoKKyAgICAgICAgcmV0dXJuIG5hcnJv
dyA/IHdoaXRlIDogd2FybmluZy50aW50Q29sb3I7CisgICAgfQogI2VuZGlmCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG5pbDsKIH0KIAotI2lmIFBMQVRGT1JNKE1BQykK
IHN0YXRpYyB2b2lkIHJlcGxhY2UoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nLCBO
U1N0cmluZyAqdG9SZXBsYWNlLCBOU1N0cmluZyAqcmVwbGFjZVdpdGgpCiB7CiAgICAgW3N0cmlu
ZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0
b1JlcGxhY2VdIHdpdGhTdHJpbmc6cmVwbGFjZVdpdGhdOwpAQCAtOTAsNyArMTQ2LDYgQEAgc3Rh
dGljIHZvaWQgYWRkTGlua0FuZFJlcGxhY2UoTlNNdXRhYmxlQQogICAgIH0gcmFuZ2U6TlNNYWtl
UmFuZ2UoMCwgcmVwbGFjZVdpdGgubGVuZ3RoKV07CiAgICAgW3N0cmluZyByZXBsYWNlQ2hhcmFj
dGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxhY2VdIHdpdGhB
dHRyaWJ1dGVkU3RyaW5nOnN0cmluZ1dpdGhMaW5rXTsKIH0KLSNlbmRpZgogCiBAaW50ZXJmYWNl
IFdLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCA6IFZpZXdUeXBlCiBAZW5kCkBAIC05OSwy
MiArMTU0LDM5IEBAIEBpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW4KIAog
LSAodm9pZClkcmF3UmVjdDooUmVjdFR5cGUpcmVjdAogewotICAgIFtjb2xvck5hbWVkKEAiV0tT
YWZlQnJvd3NpbmdXYXJuaW5nVGl0bGUiKSBzZXRdOwotI2lmIFBMQVRGT1JNKE1BQykKLSNkZWZp
bmUgYWRkQXJjV2l0aENlbnRlciBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXIKLSAg
ICBOU1JlY3Qgc3F1YXJlID0gTlNNYWtlUmVjdCgwLCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwg
ZXhjbGFtYXRpb25Qb2ludFNpemUpOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGNlbnRlclggPSBl
eGNsYW1hdGlvblBvaW50U2l6ZSAvIDI7CisgICAgY29uc3RleHByIENHRmxvYXQgcG9pbnRDZW50
ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8gMzA7CisgICAgY29uc3RleHByIENHRmxv
YXQgcG9pbnRSYWRpdXMgPSAyLjI1ICogZXhjbGFtYXRpb25Qb2ludFNpemUgLyAzMDsKKyAgICBj
b25zdGV4cHIgQ0dGbG9hdCBsaW5lQm90dG9tQ2VudGVyWSA9IGV4Y2xhbWF0aW9uUG9pbnRTaXpl
ICogMTMgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBsaW5lVG9wQ2VudGVyWSA9IGV4Y2xh
bWF0aW9uUG9pbnRTaXplICogMjMgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBsaW5lUmFk
aXVzID0gMS43NSAqIGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMzA7CisgICAgVmlld1R5cGUgKndh
cm5pbmcgPSBzZWxmLnN1cGVydmlldy5zdXBlcnZpZXc7CisjaWYgUExBVEZPUk0oTUFDKQorICAg
IFtjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkV4Y2xhbWF0aW9uUG9pbnQsIHdhcm5pbmcpIHNl
dF07CisgICAgTlNCZXppZXJQYXRoICpleGNsYW1hdGlvblBvaW50ID0gW05TQmV6aWVyUGF0aCBi
ZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBleGNsYW1hdGlvblBvaW50
U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpXTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhcHBl
bmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgbGluZUJvdHRvbUNlbnRl
clkgfSByYWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lz
ZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0
aENlbnRlcjogeyBjZW50ZXJYLCBsaW5lVG9wQ2VudGVyWSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0
YXJ0QW5nbGU6MTgwIGVuZEFuZ2xlOjM2MCBjbG9ja3dpc2U6WUVTXTsKKyAgICBbZXhjbGFtYXRp
b25Qb2ludCBsaW5lVG9Qb2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1cywgbGluZUJvdHRvbUNl
bnRlclkgfV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNX
aXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50Q2VudGVyWSB9IHJhZGl1czpwb2ludFJhZGl1cyBz
dGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlv
blBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBwb2lu
dENlbnRlclkgfSByYWRpdXM6cG9pbnRSYWRpdXMgc3RhcnRBbmdsZToxODAgZW5kQW5nbGU6MzYw
IGNsb2Nrd2lzZTpZRVNdOwogI2Vsc2UKLSAgICBDR1JlY3Qgc3F1YXJlID0gQ0dSZWN0TWFrZSgw
LCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpOworICAgIGF1
dG8gZmxpcCA9IFtdIChhdXRvIHkpIHsKKyAgICAgICAgcmV0dXJuIGV4Y2xhbWF0aW9uUG9pbnRT
aXplIC0geTsKKyAgICB9OworICAgIFtjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tn
cm91bmQsIHdhcm5pbmcpIHNldF07CisgICAgYXV0byBzcXVhcmUgPSBDR1JlY3RNYWtlKDAsIDAs
IGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSk7CisgICAgW1tVSUJl
emllclBhdGggYmV6aWVyUGF0aFdpdGhSZWN0OnNxdWFyZV0gZmlsbF07CisgICAgCisgICAgW2Nv
bG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6RXhjbGFtYXRpb25Qb2ludCwgd2FybmluZykgc2V0XTsK
KyAgICBVSUJlemllclBhdGggKmV4Y2xhbWF0aW9uUG9pbnQgPSBbVUlCZXppZXJQYXRoIGJlemll
clBhdGhXaXRoT3ZhbEluUmVjdDpzcXVhcmVdOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFy
Y1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChsaW5lVG9wQ2VudGVyWSkgfSByYWRpdXM6bGlu
ZVJhZGl1cyBzdGFydEFuZ2xlOjIgKiBwaURvdWJsZSBlbmRBbmdsZTpwaURvdWJsZSBjbG9ja3dp
c2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVy
WCwgZmxpcChsaW5lQm90dG9tQ2VudGVyWSkgfSByYWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xl
OnBpRG91YmxlIGVuZEFuZ2xlOjAgY2xvY2t3aXNlOk5PXTsKKyAgICBbZXhjbGFtYXRpb25Qb2lu
dCBhZGRBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGZsaXAocG9pbnRDZW50ZXJZKSB9IHJhZGl1
czpwb2ludFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6cGlEb3VibGUgY2xvY2t3aXNlOk5P
XTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGZs
aXAocG9pbnRDZW50ZXJZKSB9IHJhZGl1czpwb2ludFJhZGl1cyBzdGFydEFuZ2xlOnBpRG91Ymxl
IGVuZEFuZ2xlOnBpRG91YmxlICogMiBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBv
aW50IGFkZExpbmVUb1BvaW50OiB7IGNlbnRlclggKyBsaW5lUmFkaXVzLCBmbGlwKGxpbmVCb3R0
b21DZW50ZXJZKSB9XTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRMaW5lVG9Qb2ludDogeyBj
ZW50ZXJYICsgbGluZVJhZGl1cywgZmxpcChsaW5lVG9wQ2VudGVyWSkgfV07CiAjZW5kaWYKLSAg
ICBCZXppZXJQYXRoVHlwZSAqZXhjbGFtYXRpb25Qb2ludCA9IFtCZXppZXJQYXRoVHlwZSBiZXpp
ZXJQYXRoV2l0aE92YWxJblJlY3Q6c3F1YXJlXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRB
cmNXaXRoQ2VudGVyOiB7IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2lu
dFNpemUgKiAxMyAvIDMwIH0gcmFkaXVzOjEuNzUgc3RhcnRBbmdsZTowIGVuZEFuZ2xlOjE4MCBj
bG9ja3dpc2U6WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7
IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUgKiAyMyAvIDMw
IH0gcmFkaXVzOjEuNzUgc3RhcnRBbmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNd
OwotICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Q
b2ludFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDcgLyAzMCB9IHJhZGl1czoyLjI1
IHN0YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAgY2xvY2t3aXNlOllFU107Ci0gICAgW2V4Y2xhbWF0
aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDIsIGV4
Y2xhbWF0aW9uUG9pbnRTaXplICogNyAvIDMwIH0gcmFkaXVzOjIuMjUgc3RhcnRBbmdsZToxODAg
ZW5kQW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogICAgIFtleGNsYW1hdGlvblBvaW50IGZpbGxd
OwotI2lmIFBMQVRGT1JNKE1BQykKLSN1bmRlZiBhZGRBcmNXaXRoQ2VudGVyCi0jZW5kaWYKIH0K
IAogLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCkBAIC0xMjQsNyArMTk2LDYgQEAgLSAo
TlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCiAKIEBlbmQKIAotI2lmIFBMQVRGT1JNKE1BQykK
IHN0YXRpYyBOU1VSTCAqcmVwb3J0QW5FcnJvclVSTChjb25zdCBXZWJLaXQ6OlNhZmVCcm93c2lu
Z1Jlc3VsdCYgcmVzdWx0KQogewogICAgIHJldHVybiBXZWJDb3JlOjpVUkwoeyB9LCBtYWtlU3Ry
aW5nKHJlc3VsdC5yZXBvcnRBbkVycm9yVVJMQmFzZSgpLCAiJnVybD0iLCBlbmNvZGVXaXRoVVJM
RXNjYXBlU2VxdWVuY2VzKHJlc3VsdC51cmwoKSksICImaGw9IiwgZGVmYXVsdExhbmd1YWdlKCkp
KTsKQEAgLTE5MSwxNCArMjYyLDYzIEBAIHN0YXRpYyBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5n
ICpkZXRhaWwKICAgICBBU1NFUlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSgpKTsKICAgICBy
ZXR1cm4gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2FyZURldGFpbHMocmVzdWx0LCBXRUJfVUlfTlNT
VFJJTkcoQCJXYXJuaW5ncyBhcmUgc2hvd24gZm9yIHdlYnNpdGVzIHdoZXJlIGhhcm1mdWwgc29m
dHdhcmUgaGFzIGJlZW4gZGV0ZWN0ZWQuIFlvdSBjYW4gY2hlY2sgJXRoZS1zdGF0dXMtb2Ytc2l0
ZSUgb24gdGhlICVzYWZlQnJvd3NpbmdQcm92aWRlciUgZGlhZ25vc3RpYyBwYWdlLiIsICJVbndh
bnRlZCBzb2Z0d2FyZSB3YXJuaW5nIGRlc2NyaXB0aW9uIiksIEAiJXRoZS1zdGF0dXMtb2Ytc2l0
ZSUiLCBmYWxzZSk7CiB9CisKK3N0YXRpYyBCdXR0b25UeXBlICptYWtlQnV0dG9uKFdhcm5pbmdJ
dGVtIGl0ZW0sIFdLU2FmZUJyb3dzaW5nV2FybmluZyAqd2FybmluZywgU0VMIGFjdGlvbikKK3sK
KyAgICBOU1N0cmluZyAqdGl0bGUgPSBuaWw7CisgICAgaWYgKGl0ZW0gPT0gV2FybmluZ0l0ZW06
OlNob3dEZXRhaWxzQnV0dG9uKQorICAgICAgICB0aXRsZSA9IFdFQl9VSV9OU1NUUklORyhAIlNo
b3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKKyAgICBl
bHNlCisgICAgICAgIHRpdGxlID0gV0VCX1VJX05TU1RSSU5HKEAiR28gYmFjayIsICJBY3Rpb24g
ZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKKyAgICB0aXRsZSA9IFt0aXRsZSBjYXBpdGFs
aXplZFN0cmluZ107CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBbTlNCdXR0b24gYnV0
dG9uV2l0aFRpdGxlOnRpdGxlIHRhcmdldDp3YXJuaW5nIGFjdGlvbjphY3Rpb25dOworI2Vsc2UK
KyAgICBVSUJ1dHRvbiAqYnV0dG9uID0gW1VJQnV0dG9uIGJ1dHRvbldpdGhUeXBlOlVJQnV0dG9u
VHlwZVN5c3RlbV07CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVkVGl0bGUgPSBb
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxlIGF0dHJpYnV0
ZXM6QHsKKyAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWU6QChOU1VuZGVybGlu
ZVN0eWxlU2luZ2xlKSwKKyAgICAgICAgTlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0ZU5hbWU6W1VJ
Q29sb3Igd2hpdGVDb2xvcl0sCisgICAgICAgIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFt
ZTpjb2xvckZvckl0ZW0oaXRlbSwgd2FybmluZyksCisgICAgICAgIE5TRm9udEF0dHJpYnV0ZU5h
bWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdCisgICAgfV0gYXV0b3JlbGVh
c2VdOworICAgIFtidXR0b24gc2V0QXR0cmlidXRlZFRpdGxlOmF0dHJpYnV0ZWRUaXRsZSBmb3JT
dGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07CisgICAgW2J1dHRvbiBhZGRUYXJnZXQ6d2Fybmlu
ZyBhY3Rpb246YWN0aW9uIGZvckNvbnRyb2xFdmVudHM6VUlDb250cm9sRXZlbnRUb3VjaFVwSW5z
aWRlXTsKKyAgICByZXR1cm4gYnV0dG9uOworI2VuZGlmCit9CisKK3N0YXRpYyBWaWV3VHlwZSAq
bWFrZVRpdGxlTGFiZWwoTlNTdHJpbmcgKnRpdGxlLCBWaWV3VHlwZSAqd2FybmluZykKK3sKKyAg
ICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGlu
aXRXaXRoU3RyaW5nOnRpdGxlIGF0dHJpYnV0ZXM6QHsKKyAgICAgICAgTlNGb250QXR0cmlidXRl
TmFtZTpbRm9udFR5cGUgYm9sZFN5c3RlbUZvbnRPZlNpemU6dGl0bGVTaXplXSwKKyAgICAgICAg
TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lOmNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6
VGl0bGVUZXh0LCB3YXJuaW5nKQorICAgIH1dIGF1dG9yZWxlYXNlXTsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgcmV0dXJuIFtOU1RleHRGaWVsZCBsYWJlbFdpdGhBdHRyaWJ1dGVkU3RyaW5nOmF0
dHJpYnV0ZWRTdHJpbmddOworI2Vsc2UKKyAgICBhdXRvIGxhYmVsID0gW1tVSUxhYmVsIG5ld10g
YXV0b3JlbGVhc2VdOworICAgIGxhYmVsLmF0dHJpYnV0ZWRUZXh0ID0gYXR0cmlidXRlZFN0cmlu
ZzsKKyAgICBsYWJlbC5saW5lQnJlYWtNb2RlID0gTlNMaW5lQnJlYWtCeVdvcmRXcmFwcGluZzsK
KyAgICBsYWJlbC5udW1iZXJPZkxpbmVzID0gMDsKKyAgICByZXR1cm4gbGFiZWw7CiAjZW5kaWYK
K30KKworc3RhdGljIHZvaWQgc2V0QmFja2dyb3VuZChWaWV3VHlwZSAqdmlldywgQ29sb3JUeXBl
ICpjb2xvcikKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlldy53YW50c0xheWVyID0gWUVT
OworICAgIHZpZXcubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gY29sb3IuQ0dDb2xvcjsKKyNlbHNl
CisgICAgdmlldy5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKKyNlbmRpZgorfQogCiBAaW50ZXJm
YWNlIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgOiBUZXh0Vmlld1R5cGUgewogQHBhY2thZ2UKLSAg
ICBXZWFrT2JqQ1B0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF90YXJnZXQ7CisgICAgV2Vha09i
akNQdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfd2FybmluZzsKIH0KLSsgKGluc3RhbmNldHlw
ZSl2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0
ZWRTdHJpbmcgbGlua1RhcmdldDooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopdGFyZ2V0OwotKyAo
aW5zdGFuY2V0eXBlKXZpZXdXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsKKy0gKGluc3Rh
bmNldHlwZSlpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0
dHJpYnV0ZWRTdHJpbmcgZm9yV2FybmluZzooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopd2Fybmlu
ZzsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLU2FmZUJyb3dzaW5nV2FybmluZwpAQCAtMjA5
LDU0ICszMjksMTYzIEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihSZWN0VHlwZSkK
ICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olll
cyk7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQotCiAgICAgX2NvbXBsZXRpb25IYW5kbGVy
ID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgX3Jlc3VsdCA9IG1ha2VSZWYocmVz
dWx0KTsKLQorICAgIHNldEJhY2tncm91bmQoc2VsZiwgY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVt
OjpCYWNrZ3JvdW5kLCBzZWxmKSk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHNlbGYud2FudHNM
YXllciA9IFlFUzsKLSAgICBzZWxmLmxheWVyLmJhY2tncm91bmRDb2xvciA9IFtjb2xvck5hbWVk
KEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpIENHQ29sb3JdOwotCi0gICAgTlNT
dGFja1ZpZXcgKnRvcCA9IFtOU1N0YWNrVmlldyBzdGFja1ZpZXdXaXRoVmlld3M6QFsKLSAgICAg
ICAgW1tXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbnQgbmV3XSBhdXRvcmVsZWFzZV0sCi0g
ICAgICAgIFtOU1RleHRGaWVsZCBsYWJlbFdpdGhBdHRyaWJ1dGVkU3RyaW5nOltbW05TQXR0cmli
dXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGl0bGVUZXh0KHJlc3VsdCkgYXR0cmli
dXRlczpAewotICAgICAgICAgICAgTlNGb250QXR0cmlidXRlTmFtZTpbTlNGb250IHN5c3RlbUZv
bnRPZlNpemU6ZXhjbGFtYXRpb25Qb2ludFNpemVdLAotICAgICAgICAgICAgTlNGb3JlZ3JvdW5k
Q29sb3JBdHRyaWJ1dGVOYW1lOmNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdUZXh0
IikKLSAgICAgICAgfV0gYXV0b3JlbGVhc2VdXQotICAgIF1dOworICAgIFtzZWxmIGFkZENvbnRl
bnRdOworI2VuZGlmCisgICAgcmV0dXJuIHNlbGY7Cit9CiAKLSAgICBXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3ICptaWRkbGUgPSBbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3V2l0aFN0cmluZzp3
YXJuaW5nVGV4dChyZXN1bHQpXTsKKy0gKHZvaWQpYWRkQ29udGVudAoreworICAgIGF1dG8gZXhj
bGFtYXRpb25Qb2ludCA9IFtbV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW50IG5ld10gYXV0
b3JlbGVhc2VdOworICAgIGF1dG8gdGl0bGUgPSBtYWtlVGl0bGVMYWJlbCh0aXRsZVRleHQoKl9y
ZXN1bHQpLCBzZWxmKTsKKyAgICBhdXRvIHdhcm5pbmcgPSBbW1tXS1NhZmVCcm93c2luZ1RleHRW
aWV3IGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5n
IGFsbG9jXSBpbml0V2l0aFN0cmluZzp3YXJuaW5nVGV4dCgqX3Jlc3VsdCkgYXR0cmlidXRlczpA
eyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXpl
XSB9XSBhdXRvcmVsZWFzZV0gZm9yV2FybmluZzpzZWxmXSBhdXRvcmVsZWFzZV07CisgICAgYXV0
byBzaG93RGV0YWlscyA9IG1ha2VCdXR0b24oV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9u
LCBzZWxmLCBAc2VsZWN0b3Ioc2hvd0RldGFpbHNDbGlja2VkKSk7CisgICAgYXV0byBnb0JhY2sg
PSBtYWtlQnV0dG9uKFdhcm5pbmdJdGVtOjpHb0JhY2tCdXR0b24sIHNlbGYsIEBzZWxlY3Rvcihn
b0JhY2tDbGlja2VkKSk7CisgICAgYXV0byBib3ggPSBbW1ZpZXdUeXBlIG5ld10gYXV0b3JlbGVh
c2VdOworICAgIHNldEJhY2tncm91bmQoYm94LCBjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJv
eEJhY2tncm91bmQsIHNlbGYpKTsKKyAgICBib3gubGF5ZXIuY29ybmVyUmFkaXVzID0gYm94Q29y
bmVyUmFkaXVzOworICAgIF90ZXh0Vmlld3MgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBuZXdd
KTsKKyAgICBbX3RleHRWaWV3cyBhZGRPYmplY3Q6d2FybmluZ107CisKKyAgICBmb3IgKFZpZXdU
eXBlICp2aWV3IGluIEBbZXhjbGFtYXRpb25Qb2ludCwgdGl0bGUsIHdhcm5pbmcsIGdvQmFjaywg
c2hvd0RldGFpbHNdKSB7CisgICAgICAgIHZpZXcudHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJ
bnRvQ29uc3RyYWludHMgPSBOTzsKKyAgICAgICAgW2JveCBhZGRTdWJ2aWV3OnZpZXddOworICAg
IH0KKyAgICBib3gudHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHMgPSBO
TzsKKyAgICBbc2VsZiBhZGRTdWJ2aWV3OmJveF07CiAKLSAgICBOU1N0YWNrVmlldyAqYm90dG9t
ID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dpdGhWaWV3czpAWwotICAgICAgICBbTlNCdXR0b24g
YnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhAIlNob3cgZGV0YWlscyIsICJBY3Rpb24g
ZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSB0YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9y
KHNob3dEZXRhaWxzQ2xpY2tlZCldLAotICAgICAgICBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxl
OldFQl9VSV9OU1NUUklORyhAIkdvIGJhY2siLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3
YXJuaW5nIikgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihnb0JhY2tDbGlja2VkKV0KKyNp
ZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgW05TTGF5b3V0Q29uc3RyYWludCBhY3RpdmF0ZUNv
bnN0cmFpbnRzOkBbCisgICAgICAgIFtbc2VsZi50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRv
QW5jaG9yOmJveC50b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltib3guYm90dG9t
QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpzZWxmLmJvdHRvbUFuY2hvcl0gbXVsdGlw
bGllcjowLjVdLAorICAgICAgICBbW3NlbGYubGVmdEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9B
bmNob3I6Ym94LmxlZnRBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOltib3gucmlnaHRB
bmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOnNlbGYucmlnaHRBbmNob3JdXSwKKworICAg
ICAgICBbYm94LndpZHRoQW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0NvbnN0YW50
Om1heFdpZHRoXSwKKyAgICAgICAgW2JveC53aWR0aEFuY2hvciBjb25zdHJhaW50TGVzc1RoYW5P
ckVxdWFsVG9BbmNob3I6c2VsZi53aWR0aEFuY2hvcl0sCisKKyAgICAgICAgW1tib3gubGVhZGlu
Z0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZXhjbGFtYXRpb25Qb2ludC5sZWFkaW5n
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBb
W2JveC5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjp0aXRsZS5sZWFkaW5n
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemUgKiAxLjUgKyBleGNs
YW1hdGlvblBvaW50U2l6ZV0sCisgICAgICAgIFtbYm94LmxlYWRpbmdBbmNob3IgYW5jaG9yV2l0
aE9mZnNldFRvQW5jaG9yOndhcm5pbmcubGVhZGluZ0FuY2hvcl0gY29uc3RyYWludEVxdWFsVG9D
b25zdGFudDptYXJnaW5TaXplXSwKKworICAgICAgICBbW3RpdGxlLnRyYWlsaW5nQW5jaG9yIGFu
Y2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gudHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRHcmVh
dGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBbW3dhcm5pbmcu
dHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50cmFpbGluZ0FuY2hv
cl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisg
ICAgICAgIFtbZ29CYWNrLnRyYWlsaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpi
b3gudHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0s
CisKKyAgICAgICAgW1t0aXRsZS50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmV4
Y2xhbWF0aW9uUG9pbnQudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbZXhjbGFt
YXRpb25Qb2ludC5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOnRpdGxlLmJv
dHRvbUFuY2hvcl1dLAorCisgICAgICAgIFtnb0JhY2sudG9wQW5jaG9yIGNvbnN0cmFpbnRFcXVh
bFRvQW5jaG9yOnNob3dEZXRhaWxzLnRvcEFuY2hvcl0sCisgICAgICAgIFtbc2hvd0RldGFpbHMu
dHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmdvQmFjay5sZWFkaW5nQW5j
aG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorCisgICAgICAgIFtb
Ym94LnRvcEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6dGl0bGUudG9wQW5jaG9yXSBj
b25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBbW3RpdGxlLmJv
dHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6d2FybmluZy50b3BBbmNob3JdIGNv
bnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbd2FybmluZy5i
b3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmdvQmFjay50b3BBbmNob3JdIGNv
bnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbZ29CYWNrLmJv
dHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LmJvdHRvbUFuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXQogICAgIF1dOworI2Vsc2UKKyAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorfQogCi0gICAgZm9yIChOU1N0YWNrVmlldyAq
dmlldyBpbiBAW3RvcCwgYm90dG9tXSkKLSAgICAgICAgW3ZpZXcgc2V0SHVnZ2luZ1ByaW9yaXR5
Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFp
bnRPcmllbnRhdGlvblZlcnRpY2FsXTsKKy0gKHZvaWQpc2hvd0RldGFpbHNDbGlja2VkCit7Cisg
ICAgVmlld1R5cGUgKmJveCA9IHNlbGYuc3Vidmlld3MubGFzdE9iamVjdDsKKyAgICBCdXR0b25U
eXBlICpzaG93RGV0YWlscyA9IGJveC5zdWJ2aWV3cy5sYXN0T2JqZWN0OworICAgIFtzaG93RGV0
YWlscyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKworICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJp
bmcgKnRleHQgPSBkZXRhaWxzVGV4dCgqX3Jlc3VsdCk7CisgICAgW3RleHQgYWRkQXR0cmlidXRl
czpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRT
aXplXSB9IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHRleHQubGVuZ3RoKV07CisgICAgV0tTYWZlQnJv
d3NpbmdUZXh0VmlldyAqZGV0YWlscyA9IFtbW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgYWxsb2Nd
IGluaXRXaXRoQXR0cmlidXRlZFN0cmluZzp0ZXh0IGZvcldhcm5pbmc6c2VsZl0gYXV0b3JlbGVh
c2VdOworICAgIFtfdGV4dFZpZXdzIGFkZE9iamVjdDpkZXRhaWxzXTsKKyAgICBWaWV3VHlwZSAq
Ym90dG9tID0gW1tWaWV3VHlwZSBuZXddIGF1dG9yZWxlYXNlXTsKKyAgICBzZXRCYWNrZ3JvdW5k
KGJvdHRvbSwgY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCb3hCYWNrZ3JvdW5kLCBzZWxmKSk7
CisgICAgYm90dG9tLmxheWVyLmNvcm5lclJhZGl1cyA9IGJveENvcm5lclJhZGl1czsKIAotICAg
IFN0YWNrVmlld1R5cGUgKmJveCA9IFtOU1N0YWNrVmlldyBzdGFja1ZpZXdXaXRoVmlld3M6QFt0
b3AsIG1pZGRsZSwgYm90dG9tXV07Ci0gICAgYm94LndhbnRzTGF5ZXIgPSBZRVM7Ci0gICAgYm94
LmxheWVyLmJhY2tncm91bmRDb2xvciA9IFtbTlNDb2xvciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3Jd
IENHQ29sb3JdOwotICAgIGJveC5sYXllci5jb3JuZXJSYWRpdXMgPSA2OwotICAgIGJveC5hbGln
bm1lbnQgPSBOU0xheW91dEF0dHJpYnV0ZUNlbnRlclg7Ci0gICAgW2JveC53aWR0aEFuY2hvciBj
b25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1heFdpZHRoXS5hY3RpdmUgPSB0cnVlOwotICAgIGJv
eC5lZGdlSW5zZXRzID0geyBtYXJnaW5TaXplLCBtYXJnaW5TaXplLCBtYXJnaW5TaXplLCBtYXJn
aW5TaXplIH07Ci0gICAgW2JveCBzZXRIdWdnaW5nUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJl
cXVpcmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGlj
YWxdOwotICAgIFtzZWxmIGFkZFZpZXc6Ym94IGluR3Jhdml0eTpOU1N0YWNrVmlld0dyYXZpdHlD
ZW50ZXJdOworI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKKyAgICBjb25zdGV4cHIgYXV0byBtYXhZ
ID0ga0NBTGF5ZXJNaW5YTWF4WUNvcm5lciB8IGtDQUxheWVyTWF4WE1heFlDb3JuZXI7CisgICAg
Y29uc3RleHByIGF1dG8gbWluWSA9IGtDQUxheWVyTWluWE1pbllDb3JuZXIgfCBrQ0FMYXllck1h
eFhNaW5ZQ29ybmVyOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICBib3gubGF5ZXIubWFza2VkQ29y
bmVycyA9IG1heFk7CisgICAgYm90dG9tLmxheWVyLm1hc2tlZENvcm5lcnMgPSBtaW5ZOwogI2Vs
c2UKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgd29ya2luZyBvbiBpT1MuCi0gICAgY29tcGxldGlv
bkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7CisgICAgYm94LmxheWVy
Lm1hc2tlZENvcm5lcnMgPSBtaW5ZOworICAgIGJvdHRvbS5sYXllci5tYXNrZWRDb3JuZXJzID0g
bWF4WTsKICNlbmRpZgotICAgIHJldHVybiBzZWxmOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyNlbmRpZgorCisgICAgVmlld1R5cGUgKmxpbmUgPSBbW1ZpZXdUeXBlIG5ld10g
YXV0b3JlbGVhc2VdOworICAgIHNldEJhY2tncm91bmQobGluZSwgW0NvbG9yVHlwZSBsaWdodEdy
YXlDb2xvcl0pOworICAgIGZvciAoVmlld1R5cGUgKnZpZXcgaW4gQFtkZXRhaWxzLCBib3R0b20s
IGxpbmVdKQorICAgICAgICB2aWV3LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0
cmFpbnRzID0gTk87CisKKyAgICBbc2VsZiBhZGRTdWJ2aWV3OmJvdHRvbV07CisgICAgW2JvdHRv
bSBhZGRTdWJ2aWV3OmxpbmVdOworICAgIFtib3R0b20gYWRkU3VidmlldzpkZXRhaWxzXTsKKyNp
ZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgW05TTGF5b3V0Q29uc3RyYWludCBhY3RpdmF0ZUNv
bnN0cmFpbnRzOkBbCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWludEVxdWFsVG9B
bmNob3I6Ym90dG9tLndpZHRoQW5jaG9yXSwKKyAgICAgICAgW2JveC5ib3R0b21BbmNob3IgY29u
c3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLnRvcEFuY2hvcl0sCisgICAgICAgIFtib3gubGVh
ZGluZ0FuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpib3R0b20ubGVhZGluZ0FuY2hvcl0s
CisgICAgICAgIFtsaW5lLndpZHRoQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOmJvdHRv
bS53aWR0aEFuY2hvcl0sCisgICAgICAgIFtsaW5lLmxlYWRpbmdBbmNob3IgY29uc3RyYWludEVx
dWFsVG9BbmNob3I6Ym90dG9tLmxlYWRpbmdBbmNob3JdLAorICAgICAgICBbbGluZS50b3BBbmNo
b3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLnRvcEFuY2hvcl0sCisgICAgICAgIFts
aW5lLmhlaWdodEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50OjFdLAorICAgICAgICBb
W2JvdHRvbS50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmRldGFpbHMudG9wQW5j
aG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBbW2Rl
dGFpbHMuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3R0b20uYm90dG9t
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBb
W2JvdHRvbS5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpkZXRhaWxzLmxl
YWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAg
ICAgIFtbZGV0YWlscy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym90
dG9tLnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVd
LAorICAgIF1dOworI2Vsc2UKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyNlbmRpZgorICAg
IFtzZWxmIGxheW91dFRleHRdOworI2lmICFQTEFURk9STShNQUMpCisgICAgW3NlbGYgbGF5b3V0
SWZOZWVkZWRdOworICAgIENHRmxvYXQgaGVpZ2h0ID0gMDsKKyAgICBmb3IgKFZpZXdUeXBlICpz
dWJ2aWV3IGluIHNlbGYuc3Vidmlld3MpCisgICAgICAgIGhlaWdodCArPSBzdWJ2aWV3LmZyYW1l
LnNpemUuaGVpZ2h0OworICAgIFtzZWxmIHNldENvbnRlbnRTaXplOiB7IHNlbGYuZnJhbWUuc2l6
ZS53aWR0aCwgc2VsZi5mcmFtZS5zaXplLmhlaWdodCArIGhlaWdodCAvIDIgfV07CisjZW5kaWYK
K30KKworLSAodm9pZClsYXlvdXRUZXh0Cit7CisgICAgZm9yIChXS1NhZmVCcm93c2luZ1RleHRW
aWV3ICp2aWV3IGluIF90ZXh0Vmlld3MuZ2V0KCkpCisgICAgICAgIFt2aWV3IGludmFsaWRhdGVJ
bnRyaW5zaWNDb250ZW50U2l6ZV07CiB9CiAKICNpZiBQTEFURk9STShNQUMpCistIChCT09MKXRl
eHRWaWV3OihOU1RleHRWaWV3ICopdGV4dFZpZXcgY2xpY2tlZE9uTGluazooaWQpbGluayBhdElu
ZGV4OihOU1VJbnRlZ2VyKWNoYXJJbmRleAoreworICAgIFtzZWxmIGNsaWNrZWRPbkxpbms6bGlu
a107CisgICAgcmV0dXJuIFlFUzsKK30KKwogLSAodm9pZClsYXlvdXQKIHsKLSAgICBmb3IgKE5T
VmlldyAqdmlldyBpbiBzZWxmLnN1YnZpZXdzLmZpcnN0T2JqZWN0LnN1YnZpZXdzKQotICAgICAg
ICBbdmlldyBpbnZhbGlkYXRlSW50cmluc2ljQ29udGVudFNpemVdOwogICAgIFtzdXBlciBsYXlv
dXRdOworICAgIFtzZWxmIGxheW91dFRleHRdOworfQorI2Vsc2UKKy0gKHZvaWQpbGF5b3V0U3Vi
dmlld3MKK3sKKyAgICBbc3VwZXIgbGF5b3V0U3Vidmlld3NdOworICAgIFtzZWxmIGxheW91dFRl
eHRdOworfQorCistIChCT09MKXRleHRWaWV3OihVSVRleHRWaWV3ICopdGV4dFZpZXcgc2hvdWxk
SW50ZXJhY3RXaXRoVVJMOihOU1VSTCAqKVVSTCBpblJhbmdlOihOU1JhbmdlKWNoYXJhY3RlclJh
bmdlIGludGVyYWN0aW9uOihVSVRleHRJdGVtSW50ZXJhY3Rpb24paW50ZXJhY3Rpb24KK3sKKyAg
ICBbc2VsZiBjbGlja2VkT25MaW5rOlVSTF07CisgICAgcmV0dXJuIE5POworfQorCistICh2b2lk
KWRpZE1vdmVUb1dpbmRvdworeworICAgIFtzZWxmIGFkZENvbnRlbnRdOwogfQogI2VuZGlmCiAK
QEAgLTI3Myw3ICs1MDIsNyBAQCAtICh2b2lkKWdvQmFja0NsaWNrZWQKICAgICAgICAgX2NvbXBs
ZXRpb25IYW5kbGVyKFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpObyk7CiB9CiAKLS0gKHZv
aWQpY2xpY2tlZE9uTGluazooaWQpbGluaworLSAodm9pZCljbGlja2VkT25MaW5rOihOU1VSTCAq
KWxpbmsKIHsKICAgICBpZiAoIV9jb21wbGV0aW9uSGFuZGxlcikKICAgICAgICAgcmV0dXJuOwpA
QCAtMzA0LDY4ICs1MzMsNDEgQEAgLSAodm9pZCljbGlja2VkT25MaW5rOihpZClsaW5rCiAgICAg
X2NvbXBsZXRpb25IYW5kbGVyKChOU1VSTCAqKWxpbmspOwogfQogCi0tICh2b2lkKXNob3dEZXRh
aWxzQ2xpY2tlZAotewotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBOU1N0YWNrVmlldyAqYm94ID0g
c2VsZi52aWV3cy5maXJzdE9iamVjdDsKLSAgICBOU1N0YWNrVmlldyAqYm90dG9tID0gYm94LnZp
ZXdzLmxhc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKnNob3dEZXRhaWxzQnV0dG9uID0gYm90dG9t
LnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIFtib3R0b20gcmVtb3ZlVmlldzpzaG93RGV0YWlsc0J1
dHRvbl07Ci0gICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqZGV0YWlscyA9IFtXS1NhZmVCcm93
c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzpkZXRhaWxzVGV4dCgqX3Jlc3Vs
dCkgbGlua1RhcmdldDpzZWxmXTsKLSAgICBbYm94IGFkZFZpZXc6ZGV0YWlscyBpbkdyYXZpdHk6
TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVyXTsKLSNlbHNlCi0gICAgLy8gRklYTUU6IEdldCB0aGlz
IHdvcmtpbmcgb24gaU9TLgotI2VuZGlmCi19Ci0KIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdL
U2FmZUJyb3dzaW5nVGV4dFZpZXcKIAotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoQXR0cmlidXRl
ZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZyBsaW5rVGFyZ2V0
OihXS1NhZmVCcm93c2luZ1dhcm5pbmcgKil0YXJnZXQKKy0gKGluc3RhbmNldHlwZSlpbml0V2l0
aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcg
Zm9yV2FybmluZzooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopd2FybmluZwogewotICAgIFdLU2Fm
ZUJyb3dzaW5nVGV4dFZpZXcgKmluc3RhbmNlID0gW1tzZWxmIG5ld10gYXV0b3JlbGVhc2VdOwot
ICAgIGlmICghaW5zdGFuY2UpCisgICAgaWYgKCEoc2VsZiA9IFtzdXBlciBpbml0XSkpCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgaW5zdGFuY2UtPl90YXJnZXQgPSB0YXJnZXQ7CisgICAgc2Vs
Zi0+X3dhcm5pbmcgPSB3YXJuaW5nOworICAgIHNlbGYuZGVsZWdhdGUgPSB3YXJuaW5nOwogCi0g
ICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3Np
bmdXYXJuaW5nVGV4dCIpOworICAgIENvbG9yVHlwZSAqZm9yZWdyb3VuZENvbG9yID0gY29sb3JG
b3JJdGVtKFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dCwgd2FybmluZyk7CiAgICAgTlNNdXRhYmxl
QXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW2F0dHJpYnV0ZWRTdHJpbmcgbXV0YWJsZUNvcHld
OwotICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlczpAewotICAgICAgICBOU0ZvcmVncm91bmRDb2xv
ckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IsCi0gICAgICAgIE5TRm9udEF0dHJpYnV0
ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdCi0gICAgfSByYW5nZTpO
U01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKV07Ci0KLSNpZiBQTEFURk9STShNQUMpCi0gICAg
W2luc3RhbmNlIHNldExpbmtUZXh0QXR0cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJp
YnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfV07Ci0gICAgW2luc3RhbmNlIHNldENvbnRlbnRI
dWdnaW5nUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVkIGZvck9yaWVudGF0aW9uOk5T
TGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxdOwotICAgIFtpbnN0YW5jZSBzZXRD
b250ZW50Q29tcHJlc3Npb25SZXNpc3RhbmNlUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVp
cmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxd
OwotICAgIFtpbnN0YW5jZS53aWR0aEFuY2hvciBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9D
b25zdGFudDptYXhXaWR0aCAtIDIgKiBtYXJnaW5TaXplXS5hY3RpdmUgPSB0cnVlOwotICAgIFtp
bnN0YW5jZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9y
XV07Ci0gICAgW2luc3RhbmNlLnRleHRTdG9yYWdlIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6c3Ry
aW5nXTsKKyAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH0gcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5n
Lmxlbmd0aCldOworICAgIFtzZWxmIHNldEJhY2tncm91bmRDb2xvcjpjb2xvckZvckl0ZW0oV2Fy
bmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHdhcm5pbmcpXTsKKyAgICBbc2VsZiBzZXRMaW5rVGV4
dEF0dHJpYnV0ZXM6QHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lIDogZm9yZWdyb3Vu
ZENvbG9yIH1dOworICAgIFtzZWxmLnRleHRTdG9yYWdlIGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6
c3RyaW5nXTsKKyAgICBzZWxmLmVkaXRhYmxlID0gTk87CisjaWYgIVBMQVRGT1JNKE1BQykKKyAg
ICBzZWxmLnNjcm9sbEVuYWJsZWQgPSBOTzsKICNlbmRpZgotICAgIHJldHVybiBpbnN0YW5jZTsK
LX0KIAotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZwot
ewotICAgIHJldHVybiBbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3V2l0aEF0dHJpYnV0ZWRT
dHJpbmc6W1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6
c3RyaW5nXSBhdXRvcmVsZWFzZV0gbGlua1RhcmdldDpuaWxdOworICAgIHJldHVybiBzZWxmOwog
fQogCi0tIChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUKKy0gKENHU2l6ZSlpbnRyaW5zaWND
b250ZW50U2l6ZQogewotICAgIFtzZWxmLmxheW91dE1hbmFnZXIgZW5zdXJlTGF5b3V0Rm9yVGV4
dENvbnRhaW5lcjpzZWxmLnRleHRDb250YWluZXJdOwotICAgIGF1dG8gc2l6ZSA9IFtzZWxmLmxh
eW91dE1hbmFnZXIgdXNlZFJlY3RGb3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl0u
c2l6ZTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIHsgTlNWaWV3Tm9JbnRyaW5zaWNN
ZXRyaWMsIHNpemUuaGVpZ2h0IH07CisgICAgW3NlbGYubGF5b3V0TWFuYWdlciBlbnN1cmVMYXlv
dXRGb3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl07CisgICAgcmV0dXJuIHsgTlNW
aWV3Tm9JbnRyaW5zaWNNZXRyaWMsIFtzZWxmLmxheW91dE1hbmFnZXIgdXNlZFJlY3RGb3JUZXh0
Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl0uc2l6ZS5oZWlnaHQgfTsKICNlbHNlCi0gICAg
cmV0dXJuIHsgVUlWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIHNpemUuaGVpZ2h0IH07CisgICAgYXV0
byB3aWR0aCA9IHN0ZDo6bWluPENHRmxvYXQ+KG1heFdpZHRoLCBbX3dhcm5pbmcgZnJhbWVdLnNp
emUud2lkdGgpIC0gMiAqIG1hcmdpblNpemU7CisgICAgY29uc3RleHByIGF1dG8gbm9IZWlnaHRD
b25zdHJhaW50ID0gQ0dGTE9BVF9NQVg7CisgICAgcmV0dXJuIHsgd2lkdGgsIFtzZWxmIHNpemVU
aGF0Rml0czogeyB3aWR0aCwgbm9IZWlnaHRDb25zdHJhaW50IH1dLmhlaWdodCB9OwogI2VuZGlm
CiB9CiAKLS0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQpbGluayBhdEluZGV4OihOU1VJbnRlZ2Vy
KWNoYXJJbmRleAotewotICAgIFtfdGFyZ2V0IGNsaWNrZWRPbkxpbms6bGlua107Ci19Ci0KIEBl
bmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmll
d0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDkgKzIyNiw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIHNldFZpZXdTY2FsZShDR0Zsb2F0KTsKICAgICBDR0Zsb2F0IHZpZXdTY2FsZSgpIGNvbnN0
OwogCi0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdS
ZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8Q29udGludWVVbnNhZmVMb2Fk
LCBXZWJDb3JlOjpVUkw+JiYpPiYmKTsKLSAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5nV2Fybmlu
ZygpOwotCiAgICAgV0tMYXlvdXRNb2RlIGxheW91dE1vZGUoKSBjb25zdDsKICAgICB2b2lkIHNl
dExheW91dE1vZGUoV0tMYXlvdXRNb2RlKTsKICAgICB2b2lkIHVwZGF0ZVN1cHBvcnRzQXJiaXRy
YXJ5TGF5b3V0TW9kZXMoKTsKQEAgLTQ3MSw4ICs0NjgsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
YXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckN1cnJlbnRJdGVtKCk7CiAgICAgdm9pZCBzYXZlQmFj
a0ZvcndhcmRTbmFwc2hvdEZvckl0ZW0oV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYpOwogCi0gICAg
V0tTYWZlQnJvd3NpbmdXYXJuaW5nICpzYWZlQnJvd3NpbmdXYXJuaW5nKCkgeyByZXR1cm4gbV9z
YWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpOyB9Ci0KICAgICBWaWV3R2VzdHVyZUNvbnRyb2xsZXIq
IGdlc3R1cmVDb250cm9sbGVyKCkgeyByZXR1cm4gbV9nZXN0dXJlQ29udHJvbGxlci5nZXQoKTsg
fQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciYgZW5zdXJlR2VzdHVyZUNvbnRyb2xsZXIoKTsK
ICAgICB2b2lkIHNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlvbkdlc3R1cmVzKGJvb2wpOwpA
QCAtNzk4LDcgKzc5Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3JlcXVpcmVzVXNlckFjdGlv
bkZvckVkaXRpbmdDb250cm9sc01hbmFnZXIgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9lZGl0YWJs
ZUVsZW1lbnRJc0ZvY3VzZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc1RleHRJbnNlcnRpb25S
ZXBsYWNpbmdTb2Z0U3BhY2UgeyBmYWxzZSB9OwotICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2lu
Z1dhcm5pbmc+IG1fc2FmZUJyb3dzaW5nV2FybmluZzsKICAgICAKICNpZiBFTkFCTEUoRFJBR19T
VVBQT1JUKQogICAgIE5TSW50ZWdlciBtX2luaXRpYWxOdW1iZXJPZlZhbGlkSXRlbXNGb3JEcm9w
IHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwu
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0lt
cGwubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk5LDI0ICsxNTk5LDYgQEAgYm9v
bCBXZWJWaWV3SW1wbDo6cmVzaWduRmlyc3RSZXNwb25kZXIoKQogICAgIHJldHVybiB0cnVlOwog
fQogCi12b2lkIFdlYlZpZXdJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZl
QnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PENv
bnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
LXsKLSAgICBpZiAoIW1fdmlldykKLSAgICAgICAgcmV0dXJuIGNvbXBsZXRpb25IYW5kbGVyKENv
bnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKLQotICAgIG1fc2FmZUJyb3dzaW5nV2FybmluZyA9IGFk
b3B0TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6W21fdmll
dyBib3VuZHNdIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6W3dl
YWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1vdmUo
Y29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7Ci0gICAgICAgIGlm
ICh3ZWFrVGhpcykKLSAgICAgICAgICAgIFtzdGQ6OmV4Y2hhbmdlKHdlYWtUaGlzLT5tX3NhZmVC
cm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZyb21TdXBlcnZpZXddOwotICAgICAgICBj
b21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwotICAgIH1dKTsKLSAgICBbbV92aWV3
IGFkZFN1YnZpZXc6bV9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpXTsKLX0KLQotdm9pZCBXZWJW
aWV3SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKLXsKLSAgICBbc3RkOjpleGNoYW5n
ZShtX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZyb21TdXBlcnZpZXddOwot
fQotCiBib29sIFdlYlZpZXdJbXBsOjppc0ZvY3VzZWQoKSBjb25zdAogewogICAgIGlmIChtX2lu
QmVjb21lRmlyc3RSZXNwb25kZXIpCkBAIC0xNjU1LDcgKzE2MzcsNiBAQCB2b2lkIFdlYlZpZXdJ
bXBsOjpyZW5ld0dTdGF0ZSgpCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRGcmFtZVNpemUoQ0dTaXpl
KQogewogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZENoYW5nZUZyYW1lU2l6ZV07Ci0gICAgW21f
c2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpbbV92aWV3IGJvdW5kc11dOwogfQogCiB2b2lk
IFdlYlZpZXdJbXBsOjpkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygpCkBAIC01MTU4LDcgKzUxMzks
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpmbGFnc0NoYW5nZWQoTlNFdmVudCAqCiAjZGVmaW5lIE5B
VElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSX0lOVEVSTkFMKEV2ZW50TmFtZSkgXAogICAgIHZvaWQg
V2ViVmlld0ltcGw6OkV2ZW50TmFtZShOU0V2ZW50ICpldmVudCkgXAogICAgIHsgXAotICAgICAg
ICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMgfHwgbV9zYWZlQnJvd3NpbmdXYXJuaW5nKSBc
CisgICAgICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykgXAogICAgICAgICAgICAgcmV0
dXJuOyBcCiAgICAgICAgIGlmIChOU1RleHRJbnB1dENvbnRleHQgKmNvbnRleHQgPSBbbV92aWV3
IGlucHV0Q29udGV4dF0pIHsgXAogICAgICAgICAgICAgYXV0byB3ZWFrVGhpcyA9IG1ha2VXZWFr
UHRyKCp0aGlzKTsgXApJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGll
bnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1Bh
Z2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMTUsOSAr
MTE1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyVGV4dEluZGljYXRvcihXZWJDb3JlOjpU
ZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uKSBvdmVycmlkZTsKICAgICB2b2lk
IHNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9hdCkgb3ZlcnJpZGU7CiAKLSAg
ICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYs
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9h
ZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBjbGVhclNhZmVCcm93
c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKLQogICAgIHZvaWQgZW50ZXJBY2NlbGVyYXRlZENvbXBv
c2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBl
eGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlkZTsKICAgICB2b2lkIHVwZGF0
ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVy
cmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElP
Uy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVu
dEltcGxJT1MubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBA
QAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0tleWVkQXJjaGl2ZXJTUEkuaD4KICNpbXBvcnQg
PHd0Zi9CbG9ja1B0ci5oPgogCi0jZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNT
QUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkuY29u
bmVjdGlvbigpKQorI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVD
S19CQVNFKGFzc2VydGlvbiwgbV93ZWJWaWV3LmdldCgpLT5fcGFnZS0+cHJvY2VzcygpLmNvbm5l
Y3Rpb24oKSkKIAogQGludGVyZmFjZSBXS0VkaXRDb21tYW5kT2JqQyA6IE5TT2JqZWN0CiB7CkBA
IC0xNjEsMTggKzE2MSwxOCBAQCBJbnRTaXplIFBhZ2VDbGllbnRJbXBsOjp2aWV3U2l6ZSgpCiBi
b29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUoKQogewogICAgIC8vIEZJWE1F
OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDk4Ci0gICAgcmV0
dXJuIGlzVmlld1Zpc2libGUoKSB8fCAobV93ZWJWaWV3ICYmIFttX3dlYlZpZXcgX2lzUmV0YWlu
aW5nQWN0aXZlRm9jdXNlZFN0YXRlXSk7CisgICAgcmV0dXJuIGlzVmlld1Zpc2libGUoKSB8fCBb
bV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZV07CiB9CiAKIGJvb2wgUGFn
ZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQogewogICAgIC8vIEZJWE1FOiBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDk4Ci0gICAgcmV0dXJuIGlzVmlld1dp
bmRvd0FjdGl2ZSgpIHx8IChtX3dlYlZpZXcgJiYgW21fd2ViVmlldyBfaXNSZXRhaW5pbmdBY3Rp
dmVGb2N1c2VkU3RhdGVdKTsKKyAgICByZXR1cm4gaXNWaWV3V2luZG93QWN0aXZlKCkgfHwgW21f
d2ViVmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVdOwogfQogCiBib29sIFBhZ2VD
bGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkKIHsKLSAgICBpZiAoaXNWaWV3SW5XaW5kb3coKSAm
JiAhbV93ZWJWaWV3Ll9pc0JhY2tncm91bmQpCisgICAgaWYgKGlzVmlld0luV2luZG93KCkgJiYg
IVttX3dlYlZpZXcgX2lzQmFja2dyb3VuZF0pCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIAog
ICAgIGlmIChbbV93ZWJWaWV3IF9pc1Nob3dpbmdWaWRlb1BpY3R1cmVJblBpY3R1cmVdKQpAQCAt
MTg3LDggKzE4Nyw4IEBAIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGUoKQogYm9v
bCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQogewogICAgIC8vIEZJWE1FOiBpbiBX
ZWJLaXRUZXN0UnVubmVyLCBtX3dlYlZpZXcgaXMgbmlsLCBzbyBjaGVjayB0aGUgY29udGVudCB2
aWV3IGluc3RlYWQuCi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgcmV0dXJuIFttX3dlYlZp
ZXcgd2luZG93XTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgpKQorICAg
ICAgICByZXR1cm4gW3dlYlZpZXcgd2luZG93XTsKIAogICAgIHJldHVybiBbbV9jb250ZW50Vmll
dyB3aW5kb3ddOwogfQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OmRp
ZENvbXBsZXRlU3ludGhldGkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGVjaWRlUG9saWN5Rm9y
R2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJGcmFtZVByb3h5JiBmcmFtZSwgQVBJOjpT
ZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBGdW5jdGlvbjx2b2lkKGJvb2wpPiYgY29tcGxldGlvbkhh
bmRsZXIpCiB7Ci0gICAgW1t3cmFwcGVyKG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9j
ZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRp
b25SZXF1ZXN0RnJvbU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4oKSBmcmFtZTpmcmFtZSBj
b21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRy
KSB2aWV3Om1fd2ViVmlld107CisgICAgW1t3cmFwcGVyKG1fd2ViVmlldy5nZXQoKS0+X3BhZ2Ut
PnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gZGVjaWRlUG9s
aWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmlnaW4o
KSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRpb25I
YW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlldy5nZXQoKS5nZXQoKV07CiB9CiAKIHZvaWQg
UGFnZUNsaWVudEltcGw6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2FkRm9yTWFpbkZyYW1lKCkKQEAg
LTQ2OSwxNiArNDY5LDYgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRvckFu
aQogewogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhj
b25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8
V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2Fm
ZUxvYWQ6Olllcyk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0KLXZvaWQgUGFnZUNsaWVudElt
cGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCi17Ci0gICAgLy8gRklYTUU6IEltcGxlbWVu
dC4KLX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5n
TW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVDb250ZXh0KQogewogfQpAQCAt
Njk1LDIzICs2ODUsMjMgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2Nyb2xsaW5nTm9kZVNjcm9s
bAogCiBWZWN0b3I8U3RyaW5nPiBQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNv
bnRlbnRQcm92aWRlcnMoKQogewotICAgIHJldHVybiBtX3dlYlZpZXcuX2NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5Ll9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVyczsKKyAgICByZXR1
cm4gW21fd2ViVmlldyBfY29udGVudFByb3ZpZGVyUmVnaXN0cnldLl9taW1lVHlwZXNXaXRoQ3Vz
dG9tQ29udGVudFByb3ZpZGVyczsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRCZWdpbigpCiB7CiAgICAgW21fd2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbl07Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5f
cGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpOworICAgIE5hdmlnYXRpb25TdGF0ZTo6
ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlk
QmVnaW4oKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaWxs
RW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewot
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmln
YXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIE5hdmlnYXRpb25T
dGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0
dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBs
OjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0Zvcndh
cmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCpt
X3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0
ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+
X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiAgICAg
W21fd2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmRdOwogfQogCkBAIC03MjIsMTIgKzcx
MiwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiAKIHZvaWQg
UGFnZUNsaWVudEltcGw6OndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoV2ViQmFja0Zvcndh
cmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCpt
X3dlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0pOworICAg
IE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLndp
bGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudElt
cGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QoKQogewotICAgIE5hdmlnYXRp
b25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJl
U25hcHNob3RXYXNSZW1vdmVkKCk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgq
bV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdFdhc1JlbW92
ZWQoKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5
TGF5b3V0Rm9yTWFpbkZyYW1lKCkKQEAgLTg0MCw3ICs4MzAsNyBAQCB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHBhc3N3
b3JkKTsKICAgICB9KTsKIAotICAgIGlmIChXS1Bhc3N3b3JkVmlldyAqcGFzc3dvcmRWaWV3ID0g
bV93ZWJWaWV3Ll9wYXNzd29yZFZpZXcpIHsKKyAgICBpZiAoV0tQYXNzd29yZFZpZXcgKnBhc3N3
b3JkVmlldyA9IFttX3dlYlZpZXcgX3Bhc3N3b3JkVmlld10pIHsKICAgICAgICAgQVNTRVJUKGZp
bGVOYW1lID09IFN0cmluZyB7IHBhc3N3b3JkVmlldy5kb2N1bWVudE5hbWUgfSk7CiAgICAgICAg
IFtwYXNzd29yZFZpZXcgc2hvd1Bhc3N3b3JkRmFpbHVyZUFsZXJ0XTsKICAgICAgICAgcGFzc3dv
cmRWaWV3LnVzZXJEaWRFbnRlclBhc3N3b3JkID0gcGFzc3dvcmRIYW5kbGVyLmdldCgpOwpAQCAt
ODQ4LDcgKzgzOCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclEK
ICAgICB9CiAKICAgICBbbV93ZWJWaWV3IF9zaG93UGFzc3dvcmRWaWV3V2l0aERvY3VtZW50TmFt
ZTpmaWxlTmFtZSBwYXNzd29yZEhhbmRsZXI6cGFzc3dvcmRIYW5kbGVyLmdldCgpXTsKLSAgICBO
YXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5kaWRSZXF1ZXN0
UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudCgpOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJv
bVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLmRpZFJlcXVlc3RQYXNzd29yZEZvclF1
aWNrTG9va0RvY3VtZW50KCk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJldmlzaW9uIDIzNzg2MykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDQsOCArMTA0LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlc2V0U2VjdXJl
SW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5SW5wdXRDb250ZXh0QWJvdXRE
aXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJyaWRlOwogICAgIHZvaWQgc2VsZWN0aW9uRGlkQ2hh
bmdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBT
YWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0
OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYpIG92ZXJyaWRlOwotICAg
IHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkgb3ZlcnJpZGU7CiAgICAgCiAjaWYgV0tf
QVBJX0VOQUJMRUQKICAgICBib29sIHNob3dTaGFyZVNoZWV0KGNvbnN0IFdlYkNvcmU6OlNoYXJl
RGF0YVdpdGhQYXJzZWRVUkwmLCBXVEY6OkNvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYp
IG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJ
bXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdl
Q2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00ODksMTgg
KzQ4OSw2IEBAIFJlZjxWYWxpZGF0aW9uQnViYmxlPiBQYWdlQ2xpZW50SW1wbDo6Y3IKICAgICBy
ZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRlKG1fdmlldywgbWVzc2FnZSwgc2V0dGluZ3Mp
OwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyhjb25z
dCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJp
YW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBs
ZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9pbXBsKQotICAgICAgICByZXR1cm4gY29tcGxl
dGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOwotICAgIG1faW1wbC0+c2hvd1Nh
ZmVCcm93c2luZ1dhcm5pbmcocmVzdWx0LCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSk7Ci19
Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCi17Ci0g
ICAgbV9pbXBsLT5jbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKTsKLX0KLQogdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6c2V0VGV4dEluZGljYXRvcihSZWY8VGV4dEluZGljYXRvcj4gdGV4dEluZGljYXRv
ciwgV2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1lIGxpZmV0aW1lKQogewogICAg
IG1faW1wbC0+c2V0VGV4dEluZGljYXRvcih0ZXh0SW5kaWNhdG9yLmdldCgpLCBsaWZldGltZSk7
CkBAIC01NjQsNyArNTUyLDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2VsZWN0aW9uRGlkQ2hh
bmdlKAogI2lmIFdLX0FQSV9FTkFCTEVECiBib29sIFBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVT
aGVldChjb25zdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJMJiBzaGFyZURhdGEsIFdURjo6Q29tcGxl
dGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKLSAgICBtX2lt
cGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlciks
IG1fd2ViVmlldyk7CisgICAgbV9pbXBsLT5zaG93U2hhcmVTaGVldChzaGFyZURhdGEsIFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlZpZXcuZ2V0KCkuZ2V0KCkpOwogICAgIHJldHVy
biB0cnVlOwogfQogI2VuZGlmCkBAIC03NTEsMTYgKzczOSwxNiBAQCB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiAgICAgbV9pbXBsLT5kaXNtaXNzQ29udGVudFJlbGF0
aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbih0cnVlKTsKIAogI2lmIFdLX0FQSV9FTkFCTEVE
Ci0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFn
ZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpOworICAgIGlm
IChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0
ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2lu
KCk7CiAjZW5kaWYKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVX
aWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQog
ewogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdh
dGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1
cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1f
d2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2Vi
Vmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0p
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRlKTsKICAgICBVTlVTRURfUEFS
QU0oaXRlbSk7CkBAIC03NzAsOCArNzU4LDggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdh
dGlvbkdlc3R1cmVXaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRF
bmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAj
aWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9u
U3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZp
ZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXct
Pl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogI2Vs
c2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRlKTsKICAgICBVTlVTRURfUEFSQU0oaXRl
bSk7CkBAIC03ODUsOCArNzczLDggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdl
c3R1cmVEaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hv
dChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewogI2lmIFdLX0FQSV9FTkFCTEVECi0g
ICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgq
bV93ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKKyAg
ICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgpKQorICAgICAgICBOYXZpZ2F0aW9u
U3RhdGU6OmZyb21XZWJQYWdlKCp3ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRpb25T
bmFwc2hvdChpdGVtKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGl0ZW0pOwogI2VuZGlmCkBA
IC03OTUsOCArNzgzLDggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJlY29yZE5hdmlnYXRp
bwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hv
dCgpCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBO
YXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9u
R2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dl
YlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZp
ZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOwogI2VuZGlm
CiB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDIzODAwMykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE0IEBACisyMDE4LTExLTA4ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVu
c2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW2lPU10gSW1wbGVtZW50IHNhZmUgYnJvd3Npbmcg
aW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTE0NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tOgorICAg
ICAgICAoY2hlY2tUaXRsZUFuZENsaWNrKToKKyAgICAgICAgKFRFU1QpOgorCiAyMDE4LTExLTA4
ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdl
ZCwgYSBxdWljayBidWlsZCBmaXggZm9yIHIyMzc5ODMKSW5kZXg6IFRvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCShyZXZpc2lv
biAyMzc4NjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhZmVC
cm93c2luZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM3LDggKzEzNyw2IEBAIC0gKHZvaWQpbG9v
a1VwVVJMOihOU1VSTCAqKVVSTCBjb21wbGV0aW8KIAogQGVuZAogCi0jaWYgUExBVEZPUk0oTUFD
KSAvLyBGSVhNRTogVGVzdCBvbiBpT1Mgb25jZSBpbXBsZW1lbnRlZC4KLQogc3RhdGljIE5TVVJM
ICpzaW1wbGVVUkwoKQogewogICAgIHJldHVybiBbW05TQnVuZGxlIG1haW5CdW5kbGVdIFVSTEZv
clJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRtbCIgc3ViZGlyZWN0b3J5OkAi
VGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKQEAgLTE1NCwzMSArMTUyLDQ2IEBAIHN0YXRpYyBS
ZXRhaW5QdHI8V0tXZWJWaWV3PiBzYWZlQnJvd3NpbmcKICAgICBbd2ViVmlldyBsb2FkUmVxdWVz
dDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZVVSTCgpXV07CiAgICAgd2hpbGUg
KCFbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddKQogICAgICAgICBUZXN0
V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworI2lmICFQTEFURk9STShNQUMpCisgICAg
W1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10gZGlkTW92ZVRvV2luZG93
XTsKKyNlbmRpZgogICAgIHJldHVybiB3ZWJWaWV3OwogfQogCisjaWYgUExBVEZPUk0oTUFDKQor
c3RhdGljIHZvaWQgY2hlY2tUaXRsZUFuZENsaWNrKE5TQnV0dG9uICpidXR0b24sIGNvbnN0IGNo
YXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgRVhQRUNUX1NUUkVRKGJ1dHRvbi50aXRsZS5VVEY4
U3RyaW5nLCBleHBlY3RlZFRpdGxlKTsKKyAgICBbYnV0dG9uIHBlcmZvcm1DbGljazpuaWxdOwor
fQorI2Vsc2UKK3N0YXRpYyB2b2lkIGNoZWNrVGl0bGVBbmRDbGljayhVSUJ1dHRvbiAqYnV0dG9u
LCBjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQoreworICAgIEVYUEVDVF9TVFJFUShbYnV0dG9u
IGF0dHJpYnV0ZWRUaXRsZUZvclN0YXRlOlVJQ29udHJvbFN0YXRlTm9ybWFsXS5zdHJpbmcuVVRG
OFN0cmluZywgZXhwZWN0ZWRUaXRsZSk7CisgICAgVUlWaWV3ICp0YXJnZXQgPSBidXR0b24uc3Vw
ZXJ2aWV3LnN1cGVydmlldzsKKyAgICBTRUwgc2VsZWN0b3IgPSBOU1NlbGVjdG9yRnJvbVN0cmlu
ZyhzdHJjbXAoZXhwZWN0ZWRUaXRsZSwgIkdvIEJhY2siKSA/IEAic2hvd0RldGFpbHNDbGlja2Vk
IiA6IEAiZ29CYWNrQ2xpY2tlZCIpOworICAgIFt0YXJnZXQgcGVyZm9ybVNlbGVjdG9yOnNlbGVj
dG9yXTsKK30KKyNlbmRpZgorCiBURVNUKFNhZmVCcm93c2luZywgR29CYWNrKQogewogICAgIGF1
dG8gd2ViVmlldyA9IHNhZmVCcm93c2luZ1ZpZXcoKTsKLSAgICBOU1ZpZXcgKmJvdHRvbSA9IFt3
ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10uc3Vidmlld3MuZmlyc3RPYmpl
Y3Quc3Vidmlld3MubGFzdE9iamVjdDsKLSAgICBOU0J1dHRvbiAqZ29CYWNrID0gKE5TQnV0dG9u
ICopYm90dG9tLnN1YnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgRVhQRUNUX1NUUkVRKGdvQmFjay50
aXRsZS5VVEY4U3RyaW5nLCAiR28gYmFjayIpOwotICAgIFtnb0JhY2sgcGVyZm9ybUNsaWNrOm5p
bF07CisgICAgYXV0byB3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JU
ZXN0aW5nXTsKKyAgICBhdXRvIGJveCA9IHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Q7Cisg
ICAgY2hlY2tUaXRsZUFuZENsaWNrKGJveC5zdWJ2aWV3c1szXSwgIkdvIEJhY2siKTsKICAgICBF
WFBFQ1RfRVEoW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXSwgbmlsKTsK
IH0KIAogVEVTVChTYWZlQnJvd3NpbmcsIFZpc2l0VW5zYWZlV2Vic2l0ZSkKIHsKICAgICBhdXRv
IHdlYlZpZXcgPSBzYWZlQnJvd3NpbmdWaWV3KCk7Ci0gICAgTlNWaWV3ICp3YXJuaW5nID0gW3dl
YlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKLSAgICBOU1ZpZXcgKmJveCA9
IHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKnNob3dEZXRhaWxz
ID0gKE5TQnV0dG9uICopYm94LnN1YnZpZXdzLmxhc3RPYmplY3Quc3Vidmlld3MuZmlyc3RPYmpl
Y3Q7Ci0gICAgRVhQRUNUX1NUUkVRKHNob3dEZXRhaWxzLnRpdGxlLlVURjhTdHJpbmcsICJTaG93
IGRldGFpbHMiKTsKLSAgICBFWFBFQ1RfRVEoYm94LnN1YnZpZXdzLmNvdW50LCAzdWxsKTsKLSAg
ICBbc2hvd0RldGFpbHMgcGVyZm9ybUNsaWNrOm5pbF07Ci0gICAgRVhQRUNUX0VRKGJveC5zdWJ2
aWV3cy5jb3VudCwgNHVsbCk7CisgICAgYXV0byB3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVCcm93
c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBFWFBFQ1RfRVEod2FybmluZy5zdWJ2aWV3cy5j
b3VudCwgMXVsbCk7CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKHdhcm5pbmcuc3Vidmlld3MuZmly
c3RPYmplY3Quc3Vidmlld3NbNF0sICJTaG93IERldGFpbHMiKTsKKyAgICBFWFBFQ1RfRVEod2Fy
bmluZy5zdWJ2aWV3cy5jb3VudCwgMnVsbCk7CiAgICAgRVhQRUNUX0ZBTFNFKGNvbW1pdHRlZE5h
dmlnYXRpb24pOwotICAgIFt3YXJuaW5nIHBlcmZvcm1TZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0
cmluZyhAImNsaWNrZWRPbkxpbms6Iikgd2l0aE9iamVjdDpAIldLVmlzaXRVbnNhZmVXZWJzaXRl
U2VudGluZWwiXTsKKyAgICBbd2FybmluZyBwZXJmb3JtU2VsZWN0b3I6TlNTZWxlY3RvckZyb21T
dHJpbmcoQCJjbGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6W05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIl1dOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0
aWw6OnJ1bigmY29tbWl0dGVkTmF2aWdhdGlvbik7CiB9CiAKQEAgLTE5MSw4ICsyMDQsNiBAQCBU
RVNUKFNhZmVCcm93c2luZywgTmF2aWdhdGlvbkNsZWFyc1dhcm5pCiAgICAgICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CiB9CiAKLSNlbmRpZiAvLyBQTEFURk9STShNQUMp
Ci0KIEBpbnRlcmZhY2UgTnVsbExvb2t1cENvbnRleHQgOiBOU09iamVjdAogQGVuZAogQGltcGxl
bWVudGF0aW9uIE51bGxMb29rdXBDb250ZXh0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354449</attachid>
            <date>2018-11-09 23:25:32 -0800</date>
            <delta_ts>2018-11-09 23:40:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181109232532.patch</filename>
            <type>text/plain</type>
            <size>60729</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNSw2ICsxMzUxLDcgQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIAogLSAodm9pZClsYXlvdXRTdWJ2aWV3cwogeworICAg
IFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CiAgICAgW3N1cGVy
IGxheW91dFN1YnZpZXdzXTsKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogfQpA
QCAtMzI5MCw2ICszMzA3LDcgQEAgLSAodm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0
KXJlYwogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwogICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkp
OwogfQogCkBAIC0zNTgzLDc2ICszNjAxLDEyMSBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqCiAKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAog
eworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAg
X2ltcGwtPnNjcm9sbFdoZWVsKGV2ZW50KTsKIH0KIAogLSAodm9pZClzd2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAg
ICByZXR1cm47CisKICAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOwogfQogCiAtICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQp
OwogfQogCiAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VE
b3duKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAg
ICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBs
LT5tb3VzZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisg
ICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUVudGVyZWQoZXZlbnQpOwogfQogCiAt
ICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93
c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUV4aXRlZChl
dmVudCk7CiB9CiAKIC0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewor
ICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2lt
cGwtPm90aGVyTW91c2VEb3duKGV2ZW50KTsKIH0KIAogLSAodm9pZClvdGhlck1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwogfQog
CiAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcp
CisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdodE1vdXNlRHJhZ2dlZChldmVudCk7
CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlVXAoZXZlbnQpOwogfQogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAg
IHJldHVybjsKKwogICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5nZVdpdGhFdmVudChldmVudCk7CiB9
CiAKQEAgLTQ2MzUsNyArNDY5OCw3IEBAIC0gKHZvaWQpX3Bhc3RlQXNRdW90YXRpb246KGlkKXNl
bmRlcgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERFRkFV
TFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2b2lk
KV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNj
cmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKQEAgLTY2NjYsMTUgKzY3MjksMTIgQEAgLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZQogCiAjaWYgUExBVEZPUk0oTUFDKQogLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZl
QnJvd3NpbmdXYXJuaW5nKCk7Ci19CiAjZWxzZQogLSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nCisjZW5kaWYKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
c2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKIH0KLSNlbmRpZgogCiAtIChfV0tJbnNwZWN0b3Ig
KilfaW5zcGVjdG9yCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBAQCBjbGFzcyBBdHRhY2htZW50
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2Fk
IDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNsYXNzIFZpZXdTbmFwc2hvdDsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CiB9CiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnNl
cnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpvcHRpb25hbDxCT09MPilfcmVz
b2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKIAogLSAo
V0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKIEBjbGFzcyBX
S1dlYlZpZXc7CiAKQEAgLTQ4LDkgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBOU0ZpbGVXcmFwcGVy
ICphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKICAgICBOU1NldCAqc2Vy
aWFsaXphYmxlRmlsZVdyYXBwZXJDbGFzc2VzKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKKyAgICB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dh
cm5pbmcoKSBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsQ29jb2EuaCIKIAorI2lt
cG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKIApAQCAtNDUsNiAr
NDYsMjUgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjppc1BsYXlpbmdBdWRpbwogI2VuZGlm
CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmco
Y29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyNpZiBXS19BUElfRU5BQkxFRAorICAgIGlmIChhdXRvIHdl
YlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dz
aW5nV2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNh
ZmVMb2FkOjpObyk7CisjZWxzZQorICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZl
TG9hZDo6WWVzKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFy
U2FmZUJyb3dzaW5nV2FybmluZygpCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBbbV93ZWJW
aWV3IF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworI2VuZGlmCit9CisKICNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmRpZEluc2Vy
dEF0dGFjaG1lbnQoQVBJOjpBdHRhY2htZW50JiBhdHRhY2htZW50LCBjb25zdCBTdHJpbmcmIHNv
dXJjZSkKQEAgLTY5LDcgKzg5LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRSZW1v
dmVBdHRhYwogTlNGaWxlV3JhcHBlciAqUGFnZUNsaWVudEltcGxDb2NvYTo6YWxsb2NGaWxlV3Jh
cHBlckluc3RhbmNlKCkgY29uc3QKIHsKICNpZiBXS19BUElfRU5BQkxFRAotICAgIENsYXNzIGNs
cyA9IG1fd2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzcyA/
OiBbTlNGaWxlV3JhcHBlciBzZWxmXTsKKyAgICBDbGFzcyBjbHMgPSBbbV93ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzcyA/OiBbTlNGaWxlV3JhcHBlciBz
ZWxmXTsKICAgICByZXR1cm4gW2NscyBhbGxvY107CiAjZWxzZQogICAgIHJldHVybiBuaWw7CkBA
IC04MCw3ICsxMDAsNyBAQCBOU1NldCAqUGFnZUNsaWVudEltcGxDb2NvYTo6c2VyaWFsaXphYmxl
CiB7CiAgICAgQ2xhc3MgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MgPSBOU0ZpbGVXcmFwcGVyLnNl
bGY7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJD
bGFzcyA9IG1fd2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFz
czsKKyAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IFttX3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOwogICAgIGlmIChjb25maWd1
cmVkRmlsZVdyYXBwZXJDbGFzcyAmJiBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyAhPSBkZWZh
dWx0RmlsZVdyYXBwZXJDbGFzcykKICAgICAgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0
czpjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcywgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MsIG5p
bF07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJy
b3dzaW5nV2FybmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMTggKzQ0LDIwIEBAIGNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGVudW0g
Y2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDogYm9vbDsKIH0KIAorT0JKQ19DTEFTUyBXS1NhZmVC
cm93c2luZ1RleHRWaWV3OworCiAjaWYgUExBVEZPUk0oTUFDKQogdXNpbmcgUmVjdFR5cGUgPSBO
U1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gTlNTdGFja1ZpZXc7CitAaW50ZXJmYWNlIFdL
U2FmZUJyb3dzaW5nV2FybmluZyA6IE5TVmlldzxOU1RleHRWaWV3RGVsZWdhdGU+CiAjZWxzZQog
dXNpbmcgUmVjdFR5cGUgPSBDR1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gVUlTdGFja1Zp
ZXc7CitAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nV2FybmluZyA6IFVJU2Nyb2xsVmlldzxVSVRl
eHRWaWV3RGVsZWdhdGU+CiAjZW5kaWYKLQotQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1dhcm5p
bmcgOiBTdGFja1ZpZXdUeXBlIHsKK3sKIEBwYWNrYWdlCiAgICAgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYp
PiBfY29tcGxldGlvbkhhbmRsZXI7CiAgICAgUmVmUHRyPGNvbnN0IFdlYktpdDo6U2FmZUJyb3dz
aW5nUmVzdWx0PiBfcmVzdWx0OworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxXS1NhZmVC
cm93c2luZ1RleHRWaWV3ICo+PiBfdGV4dFZpZXdzOwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGcmFtZTooUmVjdFR5cGUpZnJhbWUgc2FmZUJyb3dzaW5nUmVzdWx0Oihjb25zdCBXZWJL
aXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNv
cmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCShyZXZp
c2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93
c2luZ1dhcm5pbmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDQ5ICszMywxMDUgQEAKICNpbXBv
cnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL0xhbmd1YWdlLmg+CiAKLWNvbnN0IENH
RmxvYXQgZXhjbGFtYXRpb25Qb2ludFNpemUgPSAzMDsKLWNvbnN0IENHRmxvYXQgdGV4dFNpemUg
PSAxMzsKK2NvbnN0ZXhwciBDR0Zsb2F0IGV4Y2xhbWF0aW9uUG9pbnRTaXplID0gMzA7Citjb25z
dGV4cHIgQ0dGbG9hdCB0aXRsZVNpemUgPSAyNjsKK2NvbnN0ZXhwciBDR0Zsb2F0IGJveENvcm5l
clJhZGl1cyA9IDY7CisjaWYgSEFWRShTQUZFX0JST1dTSU5HKQorY29uc3RleHByIENHRmxvYXQg
bWFyZ2luU2l6ZSA9IDIwOworY29uc3RleHByIENHRmxvYXQgbWF4V2lkdGggPSA2NzU7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKE1BQykKLWNvbnN0IENHRmxvYXQgbWFyZ2luU2l6ZSA9IDIwOwot
Y29uc3Qgc2l6ZV90IG1heFdpZHRoID0gNjAwOworY29uc3RleHByIENHRmxvYXQgdGV4dFNpemUg
PSAxNDsKIHVzaW5nIENvbG9yVHlwZSA9IE5TQ29sb3I7CiB1c2luZyBGb250VHlwZSA9IE5TRm9u
dDsKLXVzaW5nIFZpZXdUeXBlID0gTlNWaWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBOU0Jl
emllclBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBOU1RleHRWaWV3OwordXNpbmcgQnV0dG9u
VHlwZSA9IE5TQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IE5TTGF5b3V0QXR0cmlidXRl
OwordXNpbmcgVmlld1R5cGUgPSBOU1ZpZXc7CiAjZWxzZQorY29uc3RleHByIENHRmxvYXQgdGV4
dFNpemUgPSAyMDsKIHVzaW5nIENvbG9yVHlwZSA9IFVJQ29sb3I7CiB1c2luZyBGb250VHlwZSA9
IFVJRm9udDsKLXVzaW5nIFZpZXdUeXBlID0gVUlWaWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUg
PSBVSUJlemllclBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBVSVRleHRWaWV3OwordXNpbmcg
QnV0dG9uVHlwZSA9IFVJQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IFVJU3RhY2tWaWV3
QWxpZ25tZW50OwordXNpbmcgVmlld1R5cGUgPSBVSVZpZXc7CiAjZW5kaWYKIAotc3RhdGljIGlk
IGNvbmZpcm1NYWx3YXJlU2VudGluZWwoKQorZW51bSBjbGFzcyBXYXJuaW5nSXRlbSA6IHVpbnQ4
X3QgeworICAgIEJhY2tncm91bmQsCisgICAgQm94QmFja2dyb3VuZCwKKyAgICBFeGNsYW1hdGlv
blBvaW50LAorICAgIFRpdGxlVGV4dCwKKyAgICBNZXNzYWdlVGV4dCwKKyAgICBTaG93RGV0YWls
c0J1dHRvbiwKKyAgICBHb0JhY2tCdXR0b24KK307CisKK3N0YXRpYyBOU1VSTCAqY29uZmlybU1h
bHdhcmVTZW50aW5lbCgpCiB7Ci0gICAgcmV0dXJuIEAiV0tDb25maXJtTWFsd2FyZVNlbnRpbmVs
IjsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0NvbmZpcm1NYWx3YXJlU2Vu
dGluZWwiXTsKIH0KIAotc3RhdGljIGlkIHZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkKK3N0
YXRpYyBOU1VSTCAqdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKQogewotICAgIHJldHVybiBA
IldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0
aFN0cmluZzpAIldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKIH0KIAotc3RhdGljIENv
bG9yVHlwZSAqY29sb3JOYW1lZChOU1N0cmluZyAqbmFtZSkKK3N0YXRpYyBDb2xvclR5cGUgKmNv
bG9yRm9ySXRlbShXYXJuaW5nSXRlbSBpdGVtLCBWaWV3VHlwZSAqd2FybmluZykKIHsKKyAgICBB
U1NFUlQoW3dhcm5pbmcgaXNLaW5kT2ZDbGFzczpbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGNsYXNz
XV0pOwogI2lmIFBMQVRGT1JNKE1BQykKKworICAgIGF1dG8gY29sb3JOYW1lZCA9IFtdIChOU1N0
cmluZyAqbmFtZSkgLT4gQ29sb3JUeXBlKiB7CiAjaWYgSEFWRShTQUZFX0JST1dTSU5HKQotICAg
IHJldHVybiBbTlNDb2xvciBjb2xvck5hbWVkOm5hbWUgYnVuZGxlOltOU0J1bmRsZSBidW5kbGVX
aXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXV07CisgICAgICAgIHJldHVybiBbTlND
b2xvciBjb2xvck5hbWVkOm5hbWUgYnVuZGxlOltOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmll
cjpAImNvbS5hcHBsZS5XZWJLaXQiXV07CiAjZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBuaWw7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gbmlsOwogI2VuZGlmCisgICAgfTsKKworICAgIHN3aXRjaCAoaXRlbSkgeworICAg
IGNhc2UgV2FybmluZ0l0ZW06OkJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiBjb2xvck5hbWVk
KEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpOworICAgIGNhc2UgV2FybmluZ0l0
ZW06OkJveEJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiBbTlNDb2xvciB3aW5kb3dCYWNrZ3Jv
dW5kQ29sb3JdOworICAgIGNhc2UgV2FybmluZ0l0ZW06OlRpdGxlVGV4dDoKKyAgICBjYXNlIFdh
cm5pbmdJdGVtOjpFeGNsYW1hdGlvblBvaW50OgorICAgICAgICByZXR1cm4gY29sb3JOYW1lZChA
IldLU2FmZUJyb3dzaW5nV2FybmluZ1RpdGxlIik7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6TWVz
c2FnZVRleHQ6CisgICAgICAgIHJldHVybiBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJu
aW5nVGV4dCIpOworICAgIGNhc2UgV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uOgorICAg
IGNhc2UgV2FybmluZ0l0ZW06OkdvQmFja0J1dHRvbjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQogI2Vsc2UKLSAgICByZXR1cm4gW1VJ
Q29sb3IgY29sb3JOYW1lZDpuYW1lIGluQnVuZGxlOltOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRp
ZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpu
aWxdOworICAgIFVJQ29sb3IgKnJlZCA9IFtVSUNvbG9yIGNvbG9yV2l0aFJlZDowLjk5OCBncmVl
bjowLjIzOSBibHVlOjAuMjMzIGFscGhhOjEuMF07CisgICAgVUlDb2xvciAqd2hpdGUgPSBbVUlD
b2xvciB3aGl0ZUNvbG9yXTsKKyAgICBib29sIG5hcnJvdyA9IHdhcm5pbmcudHJhaXRDb2xsZWN0
aW9uLmhvcml6b250YWxTaXplQ2xhc3MgPT0gVUlVc2VySW50ZXJmYWNlU2l6ZUNsYXNzQ29tcGFj
dDsKKworICAgIHN3aXRjaCAoaXRlbSkgeworICAgIGNhc2UgV2FybmluZ0l0ZW06OkJhY2tncm91
bmQ6CisgICAgICAgIHJldHVybiByZWQ7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6Qm94QmFja2dy
b3VuZDoKKyAgICAgICAgcmV0dXJuIG5hcnJvdyA/IHJlZCA6IHdoaXRlOworICAgIGNhc2UgV2Fy
bmluZ0l0ZW06OlRpdGxlVGV4dDoKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpFeGNsYW1hdGlvblBv
aW50OgorICAgICAgICByZXR1cm4gbmFycm93ID8gd2hpdGUgOiByZWQ7CisgICAgY2FzZSBXYXJu
aW5nSXRlbTo6TWVzc2FnZVRleHQ6CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6U2hvd0RldGFpbHNC
dXR0b246CisgICAgICAgIHJldHVybiBuYXJyb3cgPyB3aGl0ZSA6IFtVSUNvbG9yIGRhcmtUZXh0
Q29sb3JdOworICAgIGNhc2UgV2FybmluZ0l0ZW06OkdvQmFja0J1dHRvbjoKKyAgICAgICAgcmV0
dXJuIG5hcnJvdyA/IHdoaXRlIDogd2FybmluZy50aW50Q29sb3I7CisgICAgfQogI2VuZGlmCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG5pbDsKIH0KIAotI2lmIFBMQVRG
T1JNKE1BQykKIHN0YXRpYyB2b2lkIHJlcGxhY2UoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAq
c3RyaW5nLCBOU1N0cmluZyAqdG9SZXBsYWNlLCBOU1N0cmluZyAqcmVwbGFjZVdpdGgpCiB7CiAg
ICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VP
ZlN0cmluZzp0b1JlcGxhY2VdIHdpdGhTdHJpbmc6cmVwbGFjZVdpdGhdOwpAQCAtOTAsNyArMTQ2
LDYgQEAgc3RhdGljIHZvaWQgYWRkTGlua0FuZFJlcGxhY2UoTlNNdXRhYmxlQQogICAgIH0gcmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgcmVwbGFjZVdpdGgubGVuZ3RoKV07CiAgICAgW3N0cmluZyByZXBs
YWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxh
Y2VdIHdpdGhBdHRyaWJ1dGVkU3RyaW5nOnN0cmluZ1dpdGhMaW5rXTsKIH0KLSNlbmRpZgogCiBA
aW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCA6IFZpZXdUeXBlCiBAZW5k
CkBAIC05OSwyMiArMTU0LDM5IEBAIEBpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlv
blBvaW4KIAogLSAodm9pZClkcmF3UmVjdDooUmVjdFR5cGUpcmVjdAogewotICAgIFtjb2xvck5h
bWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGl0bGUiKSBzZXRdOwotI2lmIFBMQVRGT1JNKE1B
QykKLSNkZWZpbmUgYWRkQXJjV2l0aENlbnRlciBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhD
ZW50ZXIKLSAgICBOU1JlY3Qgc3F1YXJlID0gTlNNYWtlUmVjdCgwLCAwLCBleGNsYW1hdGlvblBv
aW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGNl
bnRlclggPSBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDI7CisgICAgY29uc3RleHByIENHRmxvYXQg
cG9pbnRDZW50ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8gMzA7CisgICAgY29uc3Rl
eHByIENHRmxvYXQgcG9pbnRSYWRpdXMgPSAyLjI1ICogZXhjbGFtYXRpb25Qb2ludFNpemUgLyAz
MDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBsaW5lQm90dG9tQ2VudGVyWSA9IGV4Y2xhbWF0aW9u
UG9pbnRTaXplICogMTMgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBsaW5lVG9wQ2VudGVy
WSA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplICogMjMgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9h
dCBsaW5lUmFkaXVzID0gMS43NSAqIGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMzA7CisgICAgVmll
d1R5cGUgKndhcm5pbmcgPSBzZWxmLnN1cGVydmlldy5zdXBlcnZpZXc7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIFtjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkV4Y2xhbWF0aW9uUG9pbnQsIHdh
cm5pbmcpIHNldF07CisgICAgTlNCZXppZXJQYXRoICpleGNsYW1hdGlvblBvaW50ID0gW05TQmV6
aWVyUGF0aCBiZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBleGNsYW1h
dGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpXTsKKyAgICBbZXhjbGFtYXRpb25Q
b2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgbGluZUJv
dHRvbUNlbnRlclkgfSByYWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgw
IGNsb2Nrd2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhX
aXRoQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBsaW5lVG9wQ2VudGVyWSB9IHJhZGl1czpsaW5l
UmFkaXVzIHN0YXJ0QW5nbGU6MTgwIGVuZEFuZ2xlOjM2MCBjbG9ja3dpc2U6WUVTXTsKKyAgICBb
ZXhjbGFtYXRpb25Qb2ludCBsaW5lVG9Qb2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1cywgbGlu
ZUJvdHRvbUNlbnRlclkgfV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYXBwZW5kQmV6aWVyUGF0
aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50Q2VudGVyWSB9IHJhZGl1czpwb2lu
dFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOworICAgIFtl
eGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcjogeyBjZW50
ZXJYLCBwb2ludENlbnRlclkgfSByYWRpdXM6cG9pbnRSYWRpdXMgc3RhcnRBbmdsZToxODAgZW5k
QW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogI2Vsc2UKLSAgICBDR1JlY3Qgc3F1YXJlID0gQ0dS
ZWN0TWFrZSgwLCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUp
OworICAgIGF1dG8gZmxpcCA9IFtdIChhdXRvIHkpIHsKKyAgICAgICAgcmV0dXJuIGV4Y2xhbWF0
aW9uUG9pbnRTaXplIC0geTsKKyAgICB9OworICAgIFtjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06
OkJveEJhY2tncm91bmQsIHdhcm5pbmcpIHNldF07CisgICAgYXV0byBzcXVhcmUgPSBDR1JlY3RN
YWtlKDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSk7Cisg
ICAgW1tVSUJlemllclBhdGggYmV6aWVyUGF0aFdpdGhSZWN0OnNxdWFyZV0gZmlsbF07CisgICAg
CisgICAgW2NvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6RXhjbGFtYXRpb25Qb2ludCwgd2Fybmlu
Zykgc2V0XTsKKyAgICBVSUJlemllclBhdGggKmV4Y2xhbWF0aW9uUG9pbnQgPSBbVUlCZXppZXJQ
YXRoIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpzcXVhcmVdOworICAgIFtleGNsYW1hdGlvblBv
aW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChsaW5lVG9wQ2VudGVyWSkgfSBy
YWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOjIgKiBwaURvdWJsZSBlbmRBbmdsZTpwaURvdWJs
ZSBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6
IHsgY2VudGVyWCwgZmxpcChsaW5lQm90dG9tQ2VudGVyWSkgfSByYWRpdXM6bGluZVJhZGl1cyBz
dGFydEFuZ2xlOnBpRG91YmxlIGVuZEFuZ2xlOjAgY2xvY2t3aXNlOk5PXTsKKyAgICBbZXhjbGFt
YXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGZsaXAocG9pbnRDZW50ZXJZ
KSB9IHJhZGl1czpwb2ludFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6cGlEb3VibGUgY2xv
Y2t3aXNlOk5PXTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGNl
bnRlclgsIGZsaXAocG9pbnRDZW50ZXJZKSB9IHJhZGl1czpwb2ludFJhZGl1cyBzdGFydEFuZ2xl
OnBpRG91YmxlIGVuZEFuZ2xlOnBpRG91YmxlICogMiBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNs
YW1hdGlvblBvaW50IGFkZExpbmVUb1BvaW50OiB7IGNlbnRlclggKyBsaW5lUmFkaXVzLCBmbGlw
KGxpbmVCb3R0b21DZW50ZXJZKSB9XTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRMaW5lVG9Q
b2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1cywgZmxpcChsaW5lVG9wQ2VudGVyWSkgfV07CiAj
ZW5kaWYKLSAgICBCZXppZXJQYXRoVHlwZSAqZXhjbGFtYXRpb25Qb2ludCA9IFtCZXppZXJQYXRo
VHlwZSBiZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6c3F1YXJlXTsKLSAgICBbZXhjbGFtYXRpb25Q
b2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFt
YXRpb25Qb2ludFNpemUgKiAxMyAvIDMwIH0gcmFkaXVzOjEuNzUgc3RhcnRBbmdsZTowIGVuZEFu
Z2xlOjE4MCBjbG9ja3dpc2U6WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRo
Q2VudGVyOiB7IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUg
KiAyMyAvIDMwIH0gcmFkaXVzOjEuNzUgc3RhcnRBbmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nr
d2lzZTpZRVNdOwotICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhj
bGFtYXRpb25Qb2ludFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDcgLyAzMCB9IHJh
ZGl1czoyLjI1IHN0YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAgY2xvY2t3aXNlOllFU107Ci0gICAg
W2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBleGNsYW1hdGlvblBvaW50U2l6
ZSAvIDIsIGV4Y2xhbWF0aW9uUG9pbnRTaXplICogNyAvIDMwIH0gcmFkaXVzOjIuMjUgc3RhcnRB
bmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogICAgIFtleGNsYW1hdGlvblBv
aW50IGZpbGxdOwotI2lmIFBMQVRGT1JNKE1BQykKLSN1bmRlZiBhZGRBcmNXaXRoQ2VudGVyCi0j
ZW5kaWYKIH0KIAogLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCkBAIC0xMjQsNyArMTk2
LDYgQEAgLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCiAKIEBlbmQKIAotI2lmIFBMQVRG
T1JNKE1BQykKIHN0YXRpYyBOU1VSTCAqcmVwb3J0QW5FcnJvclVSTChjb25zdCBXZWJLaXQ6OlNh
ZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0KQogewogICAgIHJldHVybiBXZWJDb3JlOjpVUkwoeyB9
LCBtYWtlU3RyaW5nKHJlc3VsdC5yZXBvcnRBbkVycm9yVVJMQmFzZSgpLCAiJnVybD0iLCBlbmNv
ZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHJlc3VsdC51cmwoKSksICImaGw9IiwgZGVmYXVsdExh
bmd1YWdlKCkpKTsKQEAgLTE5MSwxNCArMjYyLDYzIEBAIHN0YXRpYyBOU011dGFibGVBdHRyaWJ1
dGVkU3RyaW5nICpkZXRhaWwKICAgICBBU1NFUlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSgp
KTsKICAgICByZXR1cm4gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2FyZURldGFpbHMocmVzdWx0LCBX
RUJfVUlfTlNTVFJJTkcoQCJXYXJuaW5ncyBhcmUgc2hvd24gZm9yIHdlYnNpdGVzIHdoZXJlIGhh
cm1mdWwgc29mdHdhcmUgaGFzIGJlZW4gZGV0ZWN0ZWQuIFlvdSBjYW4gY2hlY2sgJXRoZS1zdGF0
dXMtb2Ytc2l0ZSUgb24gdGhlICVzYWZlQnJvd3NpbmdQcm92aWRlciUgZGlhZ25vc3RpYyBwYWdl
LiIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIGRlc2NyaXB0aW9uIiksIEAiJXRoZS1zdGF0
dXMtb2Ytc2l0ZSUiLCBmYWxzZSk7CiB9CisKK3N0YXRpYyBCdXR0b25UeXBlICptYWtlQnV0dG9u
KFdhcm5pbmdJdGVtIGl0ZW0sIFdLU2FmZUJyb3dzaW5nV2FybmluZyAqd2FybmluZywgU0VMIGFj
dGlvbikKK3sKKyAgICBOU1N0cmluZyAqdGl0bGUgPSBuaWw7CisgICAgaWYgKGl0ZW0gPT0gV2Fy
bmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uKQorICAgICAgICB0aXRsZSA9IFdFQl9VSV9OU1NU
UklORyhAIlNob3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmci
KTsKKyAgICBlbHNlCisgICAgICAgIHRpdGxlID0gV0VCX1VJX05TU1RSSU5HKEAiR28gYmFjayIs
ICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKKyAgICB0aXRsZSA9IFt0aXRs
ZSBjYXBpdGFsaXplZFN0cmluZ107CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBbTlNC
dXR0b24gYnV0dG9uV2l0aFRpdGxlOnRpdGxlIHRhcmdldDp3YXJuaW5nIGFjdGlvbjphY3Rpb25d
OworI2Vsc2UKKyAgICBVSUJ1dHRvbiAqYnV0dG9uID0gW1VJQnV0dG9uIGJ1dHRvbldpdGhUeXBl
OlVJQnV0dG9uVHlwZVN5c3RlbV07CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
VGl0bGUgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxl
IGF0dHJpYnV0ZXM6QHsKKyAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWU6QChO
U1VuZGVybGluZVN0eWxlU2luZ2xlKSwKKyAgICAgICAgTlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0
ZU5hbWU6W1VJQ29sb3Igd2hpdGVDb2xvcl0sCisgICAgICAgIE5TRm9yZWdyb3VuZENvbG9yQXR0
cmlidXRlTmFtZTpjb2xvckZvckl0ZW0oaXRlbSwgd2FybmluZyksCisgICAgICAgIE5TRm9udEF0
dHJpYnV0ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdCisgICAgfV0g
YXV0b3JlbGVhc2VdOworICAgIFtidXR0b24gc2V0QXR0cmlidXRlZFRpdGxlOmF0dHJpYnV0ZWRU
aXRsZSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07CisgICAgW2J1dHRvbiBhZGRUYXJn
ZXQ6d2FybmluZyBhY3Rpb246YWN0aW9uIGZvckNvbnRyb2xFdmVudHM6VUlDb250cm9sRXZlbnRU
b3VjaFVwSW5zaWRlXTsKKyAgICByZXR1cm4gYnV0dG9uOworI2VuZGlmCit9CisKK3N0YXRpYyBW
aWV3VHlwZSAqbWFrZVRpdGxlTGFiZWwoTlNTdHJpbmcgKnRpdGxlLCBWaWV3VHlwZSAqd2Fybmlu
ZykKK3sKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxlIGF0dHJpYnV0ZXM6QHsKKyAgICAgICAgTlNGb250
QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgYm9sZFN5c3RlbUZvbnRPZlNpemU6dGl0bGVTaXplXSwK
KyAgICAgICAgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lOmNvbG9yRm9ySXRlbShXYXJu
aW5nSXRlbTo6VGl0bGVUZXh0LCB3YXJuaW5nKQorICAgIH1dIGF1dG9yZWxlYXNlXTsKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgcmV0dXJuIFtOU1RleHRGaWVsZCBsYWJlbFdpdGhBdHRyaWJ1dGVk
U3RyaW5nOmF0dHJpYnV0ZWRTdHJpbmddOworI2Vsc2UKKyAgICBhdXRvIGxhYmVsID0gW1tVSUxh
YmVsIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGxhYmVsLmF0dHJpYnV0ZWRUZXh0ID0gYXR0cmli
dXRlZFN0cmluZzsKKyAgICBsYWJlbC5saW5lQnJlYWtNb2RlID0gTlNMaW5lQnJlYWtCeVdvcmRX
cmFwcGluZzsKKyAgICBsYWJlbC5udW1iZXJPZkxpbmVzID0gMDsKKyAgICByZXR1cm4gbGFiZWw7
CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2V0QmFja2dyb3VuZChWaWV3VHlwZSAqdmlldywg
Q29sb3JUeXBlICpjb2xvcikKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlldy53YW50c0xh
eWVyID0gWUVTOworICAgIHZpZXcubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gY29sb3IuQ0dDb2xv
cjsKKyNlbHNlCisgICAgdmlldy5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKICNlbmRpZgorfQog
CiBAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgOiBUZXh0Vmlld1R5cGUgewogQHBh
Y2thZ2UKLSAgICBXZWFrT2JqQ1B0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF90YXJnZXQ7Cisg
ICAgV2Vha09iakNQdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfd2FybmluZzsKIH0KLSsgKGlu
c3RhbmNldHlwZSl2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAq
KWF0dHJpYnV0ZWRTdHJpbmcgbGlua1RhcmdldDooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopdGFy
Z2V0OwotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0
cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgZm9yV2FybmluZzooV0tTYWZlQnJvd3NpbmdXYXJuaW5n
ICopd2FybmluZzsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLU2FmZUJyb3dzaW5nV2Fybmlu
ZwpAQCAtMjA5LDU0ICszMjksMTU5IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihS
ZWN0VHlwZSkKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2Fm
ZUxvYWQ6Olllcyk7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQotCiAgICAgX2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgX3Jlc3VsdCA9IG1h
a2VSZWYocmVzdWx0KTsKLQorICAgIHNldEJhY2tncm91bmQoc2VsZiwgY29sb3JGb3JJdGVtKFdh
cm5pbmdJdGVtOjpCYWNrZ3JvdW5kLCBzZWxmKSk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHNl
bGYud2FudHNMYXllciA9IFlFUzsKLSAgICBzZWxmLmxheWVyLmJhY2tncm91bmRDb2xvciA9IFtj
b2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpIENHQ29sb3JdOwor
ICAgIFtzZWxmIGFkZENvbnRlbnRdOworI2VuZGlmCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0g
KHZvaWQpYWRkQ29udGVudAoreworICAgIGF1dG8gZXhjbGFtYXRpb25Qb2ludCA9IFtbV0tTYWZl
QnJvd3NpbmdFeGNsYW1hdGlvblBvaW50IG5ld10gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gdGl0
bGUgPSBtYWtlVGl0bGVMYWJlbCh0aXRsZVRleHQoKl9yZXN1bHQpLCBzZWxmKTsKKyAgICBhdXRv
IHdhcm5pbmcgPSBbW1tXS1NhZmVCcm93c2luZ1RleHRWaWV3IGFsbG9jXSBpbml0V2l0aEF0dHJp
YnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp3
YXJuaW5nVGV4dCgqX3Jlc3VsdCkgYXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltG
b250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXSB9XSBhdXRvcmVsZWFzZV0gZm9yV2Fy
bmluZzpzZWxmXSBhdXRvcmVsZWFzZV07CisgICAgYXV0byBzaG93RGV0YWlscyA9IG1ha2VCdXR0
b24oV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uLCBzZWxmLCBAc2VsZWN0b3Ioc2hvd0Rl
dGFpbHNDbGlja2VkKSk7CisgICAgYXV0byBnb0JhY2sgPSBtYWtlQnV0dG9uKFdhcm5pbmdJdGVt
OjpHb0JhY2tCdXR0b24sIHNlbGYsIEBzZWxlY3Rvcihnb0JhY2tDbGlja2VkKSk7CisgICAgYXV0
byBib3ggPSBbW1ZpZXdUeXBlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIHNldEJhY2tncm91bmQo
Ym94LCBjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHNlbGYpKTsKKyAg
ICBib3gubGF5ZXIuY29ybmVyUmFkaXVzID0gYm94Q29ybmVyUmFkaXVzOworICAgIF90ZXh0Vmll
d3MgPSBhZG9wdE5TKFtOU011dGFibGVBcnJheSBuZXddKTsKKyAgICBbX3RleHRWaWV3cyBhZGRP
YmplY3Q6d2FybmluZ107CisKKyAgICBmb3IgKFZpZXdUeXBlICp2aWV3IGluIEBbZXhjbGFtYXRp
b25Qb2ludCwgdGl0bGUsIHdhcm5pbmcsIGdvQmFjaywgc2hvd0RldGFpbHNdKSB7CisgICAgICAg
IHZpZXcudHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHMgPSBOTzsKKyAg
ICAgICAgW2JveCBhZGRTdWJ2aWV3OnZpZXddOworICAgIH0KKyAgICBib3gudHJhbnNsYXRlc0F1
dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHMgPSBOTzsKKyAgICBbc2VsZiBhZGRTdWJ2aWV3
OmJveF07CiAKLSAgICBOU1N0YWNrVmlldyAqdG9wID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dp
dGhWaWV3czpAWwotICAgICAgICBbW1dLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCBuZXdd
IGF1dG9yZWxlYXNlXSwKLSAgICAgICAgW05TVGV4dEZpZWxkIGxhYmVsV2l0aEF0dHJpYnV0ZWRT
dHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp0aXRsZVRl
eHQocmVzdWx0KSBhdHRyaWJ1dGVzOkB7Ci0gICAgICAgICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1l
OltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpleGNsYW1hdGlvblBvaW50U2l6ZV0sCi0gICAgICAg
ICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6Y29sb3JOYW1lZChAIldLU2FmZUJy
b3dzaW5nV2FybmluZ1RleHQiKQotICAgICAgICB9XSBhdXRvcmVsZWFzZV1dCisjaWYgSEFWRShT
QUZFX0JST1dTSU5HKQorICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJhaW50
czpAWworICAgICAgICBbW3NlbGYudG9wQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpi
b3gudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbYm94LmJvdHRvbUFuY2hvciBh
bmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6c2VsZi5ib3R0b21BbmNob3JdIG11bHRpcGxpZXI6MC41
XSwKKyAgICAgICAgW1tzZWxmLmxlZnRBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJv
eC5sZWZ0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbYm94LnJpZ2h0QW5jaG9yIGFu
Y2hvcldpdGhPZmZzZXRUb0FuY2hvcjpzZWxmLnJpZ2h0QW5jaG9yXV0sCisKKyAgICAgICAgW2Jv
eC53aWR0aEFuY2hvciBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDptYXhXaWR0
aF0sCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWludExlc3NUaGFuT3JFcXVhbFRv
QW5jaG9yOnNlbGYud2lkdGhBbmNob3JdLAorCisgICAgICAgIFtbYm94LmxlYWRpbmdBbmNob3Ig
YW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmV4Y2xhbWF0aW9uUG9pbnQubGVhZGluZ0FuY2hvcl0g
Y29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tib3gubGVh
ZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6dGl0bGUubGVhZGluZ0FuY2hvcl0g
Y29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplICogMS41ICsgZXhjbGFtYXRpb25Q
b2ludFNpemVdLAorICAgICAgICBbW2JveC5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRU
b0FuY2hvcjp3YXJuaW5nLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6
bWFyZ2luU2l6ZV0sCisKKyAgICAgICAgW1t0aXRsZS50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRo
T2Zmc2V0VG9BbmNob3I6Ym94LnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5P
ckVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1t3YXJuaW5nLnRyYWlsaW5n
QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gudHJhaWxpbmdBbmNob3JdIGNvbnN0
cmFpbnRHcmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBb
W2dvQmFjay50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LnRyYWls
aW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorCisgICAg
ICAgIFtbdGl0bGUudG9wQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpleGNsYW1hdGlv
blBvaW50LnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W2V4Y2xhbWF0aW9uUG9p
bnQuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjp0aXRsZS5ib3R0b21BbmNo
b3JdXSwKKworICAgICAgICBbZ29CYWNrLnRvcEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hv
cjpzaG93RGV0YWlscy50b3BBbmNob3JdLAorICAgICAgICBbW3Nob3dEZXRhaWxzLnRyYWlsaW5n
QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpnb0JhY2subGVhZGluZ0FuY2hvcl0gY29u
c3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKworICAgICAgICBbW2JveC50b3BB
bmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOnRpdGxlLnRvcEFuY2hvcl0gY29uc3RyYWlu
dEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1t0aXRsZS5ib3R0b21BbmNo
b3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOndhcm5pbmcudG9wQW5jaG9yXSBjb25zdHJhaW50
RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBbW3dhcm5pbmcuYm90dG9tQW5j
aG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpnb0JhY2sudG9wQW5jaG9yXSBjb25zdHJhaW50
RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBbW2dvQmFjay5ib3R0b21BbmNo
b3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC5ib3R0b21BbmNob3JdIGNvbnN0cmFpbnRF
cXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0KICAgICBdXTsKKyNlbmRpZgorfQogCi0gICAgV0tT
YWZlQnJvd3NpbmdUZXh0VmlldyAqbWlkZGxlID0gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmll
d1dpdGhTdHJpbmc6d2FybmluZ1RleHQocmVzdWx0KV07CistICh2b2lkKXNob3dEZXRhaWxzQ2xp
Y2tlZAoreworICAgIFZpZXdUeXBlICpib3ggPSBzZWxmLnN1YnZpZXdzLmxhc3RPYmplY3Q7Cisg
ICAgQnV0dG9uVHlwZSAqc2hvd0RldGFpbHMgPSBib3guc3Vidmlld3MubGFzdE9iamVjdDsKKyAg
ICBbc2hvd0RldGFpbHMgcmVtb3ZlRnJvbVN1cGVydmlld107CisKKyAgICBOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nICp0ZXh0ID0gZGV0YWlsc1RleHQoKl9yZXN1bHQpOworICAgIFt0ZXh0IGFk
ZEF0dHJpYnV0ZXM6QHsgTlNGb250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9m
U2l6ZTp0ZXh0U2l6ZV0gfSByYW5nZTpOU01ha2VSYW5nZSgwLCB0ZXh0Lmxlbmd0aCldOworICAg
IFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKmRldGFpbHMgPSBbW1tXS1NhZmVCcm93c2luZ1RleHRW
aWV3IGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6dGV4dCBmb3JXYXJuaW5nOnNlbGZd
IGF1dG9yZWxlYXNlXTsKKyAgICBbX3RleHRWaWV3cyBhZGRPYmplY3Q6ZGV0YWlsc107CisgICAg
Vmlld1R5cGUgKmJvdHRvbSA9IFtbVmlld1R5cGUgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgc2V0
QmFja2dyb3VuZChib3R0b20sIGNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3Vu
ZCwgc2VsZikpOworICAgIGJvdHRvbS5sYXllci5jb3JuZXJSYWRpdXMgPSBib3hDb3JuZXJSYWRp
dXM7CiAKLSAgICBOU1N0YWNrVmlldyAqYm90dG9tID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dp
dGhWaWV3czpAWwotICAgICAgICBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NU
UklORyhAIlNob3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmci
KSB0YXJnZXQ6c2VsZiBhY3Rpb246QHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCldLAotICAg
ICAgICBbTlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhAIkdvIGJhY2si
LCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIikgdGFyZ2V0OnNlbGYgYWN0aW9u
OkBzZWxlY3Rvcihnb0JhY2tDbGlja2VkKV0KLSAgICBdXTsKKyNpZiBIQVZFKFNBRkVfQlJPV1NJ
TkcpCisgICAgY29uc3RleHByIGF1dG8gbWF4WSA9IGtDQUxheWVyTWluWE1heFlDb3JuZXIgfCBr
Q0FMYXllck1heFhNYXhZQ29ybmVyOworICAgIGNvbnN0ZXhwciBhdXRvIG1pblkgPSBrQ0FMYXll
ck1pblhNaW5ZQ29ybmVyIHwga0NBTGF5ZXJNYXhYTWluWUNvcm5lcjsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgYm94LmxheWVyLm1hc2tlZENvcm5lcnMgPSBtYXhZOworICAgIGJvdHRvbS5sYXll
ci5tYXNrZWRDb3JuZXJzID0gbWluWTsKKyNlbHNlCisgICAgYm94LmxheWVyLm1hc2tlZENvcm5l
cnMgPSBtaW5ZOworICAgIGJvdHRvbS5sYXllci5tYXNrZWRDb3JuZXJzID0gbWF4WTsKKyNlbmRp
ZgorI2VuZGlmCiAKLSAgICBmb3IgKE5TU3RhY2tWaWV3ICp2aWV3IGluIEBbdG9wLCBib3R0b21d
KQotICAgICAgICBbdmlldyBzZXRIdWdnaW5nUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVp
cmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxd
OworICAgIFZpZXdUeXBlICpsaW5lID0gW1tWaWV3VHlwZSBuZXddIGF1dG9yZWxlYXNlXTsKKyAg
ICBzZXRCYWNrZ3JvdW5kKGxpbmUsIFtDb2xvclR5cGUgbGlnaHRHcmF5Q29sb3JdKTsKKyAgICBm
b3IgKFZpZXdUeXBlICp2aWV3IGluIEBbZGV0YWlscywgYm90dG9tLCBsaW5lXSkKKyAgICAgICAg
dmlldy50cmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POwogCi0g
ICAgU3RhY2tWaWV3VHlwZSAqYm94ID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dpdGhWaWV3czpA
W3RvcCwgbWlkZGxlLCBib3R0b21dXTsKLSAgICBib3gud2FudHNMYXllciA9IFlFUzsKLSAgICBi
b3gubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gW1tOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xv
cl0gQ0dDb2xvcl07Ci0gICAgYm94LmxheWVyLmNvcm5lclJhZGl1cyA9IDY7Ci0gICAgYm94LmFs
aWdubWVudCA9IE5TTGF5b3V0QXR0cmlidXRlQ2VudGVyWDsKLSAgICBbYm94LndpZHRoQW5jaG9y
IGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWF4V2lkdGhdLmFjdGl2ZSA9IHRydWU7Ci0gICAg
Ym94LmVkZ2VJbnNldHMgPSB7IG1hcmdpblNpemUsIG1hcmdpblNpemUsIG1hcmdpblNpemUsIG1h
cmdpblNpemUgfTsKLSAgICBbYm94IHNldEh1Z2dpbmdQcmlvcml0eTpOU0xheW91dFByaW9yaXR5
UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNMYXlvdXRDb25zdHJhaW50T3JpZW50YXRpb25WZXJ0
aWNhbF07Ci0gICAgW3NlbGYgYWRkVmlldzpib3ggaW5HcmF2aXR5Ok5TU3RhY2tWaWV3R3Jhdml0
eUNlbnRlcl07CisgICAgW3NlbGYgYWRkU3Vidmlldzpib3R0b21dOworICAgIFtib3R0b20gYWRk
U3VidmlldzpsaW5lXTsKKyAgICBbYm90dG9tIGFkZFN1YnZpZXc6ZGV0YWlsc107CisjaWYgSEFW
RShTQUZFX0JST1dTSU5HKQorICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25zdHJh
aW50czpAWworICAgICAgICBbYm94LndpZHRoQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9y
OmJvdHRvbS53aWR0aEFuY2hvcl0sCisgICAgICAgIFtib3guYm90dG9tQW5jaG9yIGNvbnN0cmFp
bnRFcXVhbFRvQW5jaG9yOmJvdHRvbS50b3BBbmNob3JdLAorICAgICAgICBbYm94LmxlYWRpbmdB
bmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLmxlYWRpbmdBbmNob3JdLAorICAg
ICAgICBbbGluZS53aWR0aEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpib3R0b20ud2lk
dGhBbmNob3JdLAorICAgICAgICBbbGluZS5sZWFkaW5nQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRv
QW5jaG9yOmJvdHRvbS5sZWFkaW5nQW5jaG9yXSwKKyAgICAgICAgW2xpbmUudG9wQW5jaG9yIGNv
bnN0cmFpbnRFcXVhbFRvQW5jaG9yOmJvdHRvbS50b3BBbmNob3JdLAorICAgICAgICBbbGluZS5o
ZWlnaHRBbmNob3IgY29uc3RyYWludEVxdWFsVG9Db25zdGFudDoxXSwKKyAgICAgICAgW1tib3R0
b20udG9wQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpkZXRhaWxzLnRvcEFuY2hvcl0g
Y29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tkZXRhaWxz
LmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym90dG9tLmJvdHRvbUFuY2hv
cl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tib3R0
b20ubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZGV0YWlscy5sZWFkaW5n
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBb
W2RldGFpbHMudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJvdHRvbS50
cmFpbGluZ0FuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAg
ICBdXTsKICNlbHNlCi0gICAgLy8gRklYTUU6IEdldCB0aGlzIHdvcmtpbmcgb24gaU9TLgotICAg
IGNvbXBsZXRpb25IYW5kbGVyKFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXMpOworICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogI2VuZGlmCi0gICAgcmV0dXJuIHNlbGY7CisgICAgW3Nl
bGYgbGF5b3V0VGV4dF07CisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBbc2VsZiBsYXlvdXRJZk5l
ZWRlZF07CisgICAgQ0dGbG9hdCBoZWlnaHQgPSAwOworICAgIGZvciAoVmlld1R5cGUgKnN1YnZp
ZXcgaW4gc2VsZi5zdWJ2aWV3cykKKyAgICAgICAgaGVpZ2h0ICs9IHN1YnZpZXcuZnJhbWUuc2l6
ZS5oZWlnaHQ7CisgICAgW3NlbGYgc2V0Q29udGVudFNpemU6IHsgc2VsZi5mcmFtZS5zaXplLndp
ZHRoLCBzZWxmLmZyYW1lLnNpemUuaGVpZ2h0ICsgaGVpZ2h0IC8gMiB9XTsKKyNlbmRpZgorfQor
CistICh2b2lkKWxheW91dFRleHQKK3sKKyAgICBmb3IgKFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcg
KnZpZXcgaW4gX3RleHRWaWV3cy5nZXQoKSkKKyAgICAgICAgW3ZpZXcgaW52YWxpZGF0ZUludHJp
bnNpY0NvbnRlbnRTaXplXTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKy0gKEJPT0wpdGV4dFZp
ZXc6KE5TVGV4dFZpZXcgKil0ZXh0VmlldyBjbGlja2VkT25MaW5rOihpZClsaW5rIGF0SW5kZXg6
KE5TVUludGVnZXIpY2hhckluZGV4Cit7CisgICAgW3NlbGYgY2xpY2tlZE9uTGluazpsaW5rXTsK
KyAgICByZXR1cm4gWUVTOworfQorCiAtICh2b2lkKWxheW91dAogewotICAgIGZvciAoTlNWaWV3
ICp2aWV3IGluIHNlbGYuc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MpCi0gICAgICAgIFt2
aWV3IGludmFsaWRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZV07CiAgICAgW3N1cGVyIGxheW91dF07
CisgICAgW3NlbGYgbGF5b3V0VGV4dF07Cit9CisjZWxzZQorLSAodm9pZClsYXlvdXRTdWJ2aWV3
cworeworICAgIFtzdXBlciBsYXlvdXRTdWJ2aWV3c107CisgICAgW3NlbGYgbGF5b3V0VGV4dF07
Cit9CisKKy0gKEJPT0wpdGV4dFZpZXc6KFVJVGV4dFZpZXcgKil0ZXh0VmlldyBzaG91bGRJbnRl
cmFjdFdpdGhVUkw6KE5TVVJMICopVVJMIGluUmFuZ2U6KE5TUmFuZ2UpY2hhcmFjdGVyUmFuZ2Ug
aW50ZXJhY3Rpb246KFVJVGV4dEl0ZW1JbnRlcmFjdGlvbilpbnRlcmFjdGlvbgoreworICAgIFtz
ZWxmIGNsaWNrZWRPbkxpbms6VVJMXTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpZGlk
TW92ZVRvV2luZG93Cit7CisgICAgW3NlbGYgYWRkQ29udGVudF07CiB9CiAjZW5kaWYKIApAQCAt
MjczLDcgKzQ5OCw3IEBAIC0gKHZvaWQpZ29CYWNrQ2xpY2tlZAogICAgICAgICBfY29tcGxldGlv
bkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Ok5vKTsKIH0KIAotLSAodm9pZClj
bGlja2VkT25MaW5rOihpZClsaW5rCistICh2b2lkKWNsaWNrZWRPbkxpbms6KE5TVVJMICopbGlu
awogewogICAgIGlmICghX2NvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47CkBAIC0z
MDQsNjggKzUyOSw0MSBAQCAtICh2b2lkKWNsaWNrZWRPbkxpbms6KGlkKWxpbmsKICAgICBfY29t
cGxldGlvbkhhbmRsZXIoKE5TVVJMICopbGluayk7CiB9CiAKLS0gKHZvaWQpc2hvd0RldGFpbHND
bGlja2VkCi17Ci0jaWYgUExBVEZPUk0oTUFDKQotICAgIE5TU3RhY2tWaWV3ICpib3ggPSBzZWxm
LnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIE5TU3RhY2tWaWV3ICpib3R0b20gPSBib3gudmlld3Mu
bGFzdE9iamVjdDsKLSAgICBOU0J1dHRvbiAqc2hvd0RldGFpbHNCdXR0b24gPSBib3R0b20udmll
d3MuZmlyc3RPYmplY3Q7Ci0gICAgW2JvdHRvbSByZW1vdmVWaWV3OnNob3dEZXRhaWxzQnV0dG9u
XTsKLSAgICBXS1NhZmVCcm93c2luZ1RleHRWaWV3ICpkZXRhaWxzID0gW1dLU2FmZUJyb3dzaW5n
VGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmRldGFpbHNUZXh0KCpfcmVzdWx0KSBs
aW5rVGFyZ2V0OnNlbGZdOwotICAgIFtib3ggYWRkVmlldzpkZXRhaWxzIGluR3Jhdml0eTpOU1N0
YWNrVmlld0dyYXZpdHlDZW50ZXJdOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgd29y
a2luZyBvbiBpT1MuCi0jZW5kaWYKLX0KLQogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tTYWZl
QnJvd3NpbmdUZXh0VmlldwogCi0rIChpbnN0YW5jZXR5cGUpdmlld1dpdGhBdHRyaWJ1dGVkU3Ry
aW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nIGxpbmtUYXJnZXQ6KFdL
U2FmZUJyb3dzaW5nV2FybmluZyAqKXRhcmdldAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXR0
cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZyBmb3JX
YXJuaW5nOihXS1NhZmVCcm93c2luZ1dhcm5pbmcgKil3YXJuaW5nCiB7Ci0gICAgV0tTYWZlQnJv
d3NpbmdUZXh0VmlldyAqaW5zdGFuY2UgPSBbW3NlbGYgbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAg
aWYgKCFpbnN0YW5jZSkKKyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAg
cmV0dXJuIG5pbDsKLSAgICBpbnN0YW5jZS0+X3RhcmdldCA9IHRhcmdldDsKKyAgICBzZWxmLT5f
d2FybmluZyA9IHdhcm5pbmc7CisgICAgc2VsZi5kZWxlZ2F0ZSA9IHdhcm5pbmc7CiAKLSAgICBD
b2xvclR5cGUgKmZvcmVncm91bmRDb2xvciA9IGNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dh
cm5pbmdUZXh0Iik7CisgICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBjb2xvckZvckl0
ZW0oV2FybmluZ0l0ZW06Ok1lc3NhZ2VUZXh0LCB3YXJuaW5nKTsKICAgICBOU011dGFibGVBdHRy
aWJ1dGVkU3RyaW5nICpzdHJpbmcgPSBbYXR0cmlidXRlZFN0cmluZyBtdXRhYmxlQ29weV07Ci0g
ICAgW3N0cmluZyBhZGRBdHRyaWJ1dGVzOkB7Ci0gICAgICAgIE5TRm9yZWdyb3VuZENvbG9yQXR0
cmlidXRlTmFtZSA6IGZvcmVncm91bmRDb2xvciwKLSAgICAgICAgTlNGb250QXR0cmlidXRlTmFt
ZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0KLSAgICB9IHJhbmdlOk5TTWFr
ZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgpXTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbaW5z
dGFuY2Ugc2V0TGlua1RleHRBdHRyaWJ1dGVzOkB7IE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRl
TmFtZSA6IGZvcmVncm91bmRDb2xvciB9XTsKLSAgICBbaW5zdGFuY2Ugc2V0Q29udGVudEh1Z2dp
bmdQcmlvcml0eTpOU0xheW91dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNMYXlv
dXRDb25zdHJhaW50T3JpZW50YXRpb25WZXJ0aWNhbF07Ci0gICAgW2luc3RhbmNlIHNldENvbnRl
bnRDb21wcmVzc2lvblJlc2lzdGFuY2VQcmlvcml0eTpOU0xheW91dFByaW9yaXR5UmVxdWlyZWQg
Zm9yT3JpZW50YXRpb246TlNMYXlvdXRDb25zdHJhaW50T3JpZW50YXRpb25WZXJ0aWNhbF07Ci0g
ICAgW2luc3RhbmNlLndpZHRoQW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0NvbnN0
YW50Om1heFdpZHRoIC0gMiAqIG1hcmdpblNpemVdLmFjdGl2ZSA9IHRydWU7Ci0gICAgW2luc3Rh
bmNlIHNldEJhY2tncm91bmRDb2xvcjpbTlNDb2xvciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdXTsK
LSAgICBbaW5zdGFuY2UudGV4dFN0b3JhZ2UgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpzdHJpbmdd
OworICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVu
Z3RoKV07CisgICAgW3NlbGYgc2V0QmFja2dyb3VuZENvbG9yOmNvbG9yRm9ySXRlbShXYXJuaW5n
SXRlbTo6Qm94QmFja2dyb3VuZCwgd2FybmluZyldOworICAgIFtzZWxmIHNldExpbmtUZXh0QXR0
cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29s
b3IgfV07CisgICAgW3NlbGYudGV4dFN0b3JhZ2UgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpzdHJp
bmddOworICAgIHNlbGYuZWRpdGFibGUgPSBOTzsKKyNpZiAhUExBVEZPUk0oTUFDKQorICAgIHNl
bGYuc2Nyb2xsRW5hYmxlZCA9IE5POwogI2VuZGlmCi0gICAgcmV0dXJuIGluc3RhbmNlOwotfQog
Ci0rIChpbnN0YW5jZXR5cGUpdmlld1dpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0g
ICAgcmV0dXJuIFtXS1NhZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0cmlidXRlZFN0cmlu
ZzpbW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpzdHJp
bmddIGF1dG9yZWxlYXNlXSBsaW5rVGFyZ2V0Om5pbF07CisgICAgcmV0dXJuIHNlbGY7CiB9CiAK
LS0gKE5TU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQorLSAoQ0dTaXplKWludHJpbnNpY0NvbnRl
bnRTaXplCiB7Ci0gICAgW3NlbGYubGF5b3V0TWFuYWdlciBlbnN1cmVMYXlvdXRGb3JUZXh0Q29u
dGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl07Ci0gICAgYXV0byBzaXplID0gW3NlbGYubGF5b3V0
TWFuYWdlciB1c2VkUmVjdEZvclRleHRDb250YWluZXI6c2VsZi50ZXh0Q29udGFpbmVyXS5zaXpl
OwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICByZXR1cm4geyBOU1ZpZXdOb0ludHJpbnNpY01ldHJp
Yywgc2l6ZS5oZWlnaHQgfTsKKyAgICBbc2VsZi5sYXlvdXRNYW5hZ2VyIGVuc3VyZUxheW91dEZv
clRleHRDb250YWluZXI6c2VsZi50ZXh0Q29udGFpbmVyXTsKKyAgICByZXR1cm4geyBOU1ZpZXdO
b0ludHJpbnNpY01ldHJpYywgW3NlbGYubGF5b3V0TWFuYWdlciB1c2VkUmVjdEZvclRleHRDb250
YWluZXI6c2VsZi50ZXh0Q29udGFpbmVyXS5zaXplLmhlaWdodCB9OwogI2Vsc2UKLSAgICByZXR1
cm4geyBVSVZpZXdOb0ludHJpbnNpY01ldHJpYywgc2l6ZS5oZWlnaHQgfTsKKyAgICBhdXRvIHdp
ZHRoID0gc3RkOjptaW48Q0dGbG9hdD4obWF4V2lkdGgsIFtfd2FybmluZyBmcmFtZV0uc2l6ZS53
aWR0aCkgLSAyICogbWFyZ2luU2l6ZTsKKyAgICBjb25zdGV4cHIgYXV0byBub0hlaWdodENvbnN0
cmFpbnQgPSBDR0ZMT0FUX01BWDsKKyAgICByZXR1cm4geyB3aWR0aCwgW3NlbGYgc2l6ZVRoYXRG
aXRzOiB7IHdpZHRoLCBub0hlaWdodENvbnN0cmFpbnQgfV0uaGVpZ2h0IH07CiAjZW5kaWYKIH0K
IAotLSAodm9pZCljbGlja2VkT25MaW5rOihpZClsaW5rIGF0SW5kZXg6KE5TVUludGVnZXIpY2hh
ckluZGV4Ci17Ci0gICAgW190YXJnZXQgY2xpY2tlZE9uTGluazpsaW5rXTsKLX0KLQogQGVuZApJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5oCShyZXZp
c2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1w
bC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjYsOSArMjI2LDYgQEAgcHVibGljOgogICAgIHZvaWQg
c2V0Vmlld1NjYWxlKENHRmxvYXQpOwogICAgIENHRmxvYXQgdmlld1NjYWxlKCkgY29uc3Q7CiAK
LSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3Vs
dCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxDb250aW51ZVVuc2FmZUxvYWQsIFdl
YkNvcmU6OlVSTD4mJik+JiYpOwotICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCk7
Ci0KICAgICBXS0xheW91dE1vZGUgbGF5b3V0TW9kZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0TGF5
b3V0TW9kZShXS0xheW91dE1vZGUpOwogICAgIHZvaWQgdXBkYXRlU3VwcG9ydHNBcmJpdHJhcnlM
YXlvdXRNb2RlcygpOwpAQCAtNDcxLDggKzQ2OCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNhdmVC
YWNrRm9yd2FyZFNuYXBzaG90Rm9yQ3VycmVudEl0ZW0oKTsKICAgICB2b2lkIHNhdmVCYWNrRm9y
d2FyZFNuYXBzaG90Rm9ySXRlbShXZWJCYWNrRm9yd2FyZExpc3RJdGVtJik7CiAKLSAgICBXS1Nh
ZmVCcm93c2luZ1dhcm5pbmcgKnNhZmVCcm93c2luZ1dhcm5pbmcoKSB7IHJldHVybiBtX3NhZmVC
cm93c2luZ1dhcm5pbmcuZ2V0KCk7IH0KLQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciogZ2Vz
dHVyZUNvbnRyb2xsZXIoKSB7IHJldHVybiBtX2dlc3R1cmVDb250cm9sbGVyLmdldCgpOyB9CiAg
ICAgVmlld0dlc3R1cmVDb250cm9sbGVyJiBlbnN1cmVHZXN0dXJlQ29udHJvbGxlcigpOwogICAg
IHZvaWQgc2V0QWxsb3dzQmFja0ZvcndhcmROYXZpZ2F0aW9uR2VzdHVyZXMoYm9vbCk7CkBAIC03
OTgsNyArNzkzLDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVxdWlyZXNVc2VyQWN0aW9uRm9y
RWRpdGluZ0NvbnRyb2xzTWFuYWdlciB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2VkaXRhYmxlRWxl
bWVudElzRm9jdXNlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzVGV4dEluc2VydGlvblJlcGxh
Y2luZ1NvZnRTcGFjZSB7IGZhbHNlIH07Ci0gICAgUmV0YWluUHRyPFdLU2FmZUJyb3dzaW5nV2Fy
bmluZz4gbV9zYWZlQnJvd3NpbmdXYXJuaW5nOwogICAgIAogI2lmIEVOQUJMRShEUkFHX1NVUFBP
UlQpCiAgICAgTlNJbnRlZ2VyIG1faW5pdGlhbE51bWJlck9mVmFsaWRJdGVtc0ZvckRyb3AgeyAw
IH07CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5tbQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XZWJWaWV3SW1wbC5t
bQkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV2Vi
Vmlld0ltcGwubW0JKHdvcmtpbmcgY29weSkKQEAgLTE1OTksMjQgKzE1OTksNiBAQCBib29sIFdl
YlZpZXdJbXBsOjpyZXNpZ25GaXJzdFJlc3BvbmRlcigpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
LXZvaWQgV2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93
c2luZ1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8Q29udGlu
dWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewot
ICAgIGlmICghbV92aWV3KQotICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29udGlu
dWVVbnNhZmVMb2FkOjpZZXMpOwotCi0gICAgbV9zYWZlQnJvd3NpbmdXYXJuaW5nID0gYWRvcHRO
UyhbW1dLU2FmZUJyb3dzaW5nV2FybmluZyBhbGxvY10gaW5pdFdpdGhGcmFtZTpbbV92aWV3IGJv
dW5kc10gc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1Ro
aXMgPSBtYWtlV2Vha1B0cigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildIChhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKLSAgICAgICAgaWYgKHdl
YWtUaGlzKQotICAgICAgICAgICAgW3N0ZDo6ZXhjaGFuZ2Uod2Vha1RoaXMtPm1fc2FmZUJyb3dz
aW5nV2FybmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107Ci0gICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7Ci0gICAgfV0pOwotICAgIFttX3ZpZXcgYWRk
U3VidmlldzptX3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0KCldOwotfQotCi12b2lkIFdlYlZpZXdJ
bXBsOjpjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKQotewotICAgIFtzdGQ6OmV4Y2hhbmdlKG1f
c2FmZUJyb3dzaW5nV2FybmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVydmlld107Ci19Ci0K
IGJvb2wgV2ViVmlld0ltcGw6OmlzRm9jdXNlZCgpIGNvbnN0CiB7CiAgICAgaWYgKG1faW5CZWNv
bWVGaXJzdFJlc3BvbmRlcikKQEAgLTE2NTUsNyArMTYzNyw2IEBAIHZvaWQgV2ViVmlld0ltcGw6
OnJlbmV3R1N0YXRlKCkKIHZvaWQgV2ViVmlld0ltcGw6OnNldEZyYW1lU2l6ZShDR1NpemUpCiB7
CiAgICAgW21fbGF5b3V0U3RyYXRlZ3kgZGlkQ2hhbmdlRnJhbWVTaXplXTsKLSAgICBbbV9zYWZl
QnJvd3NpbmdXYXJuaW5nIHNldEZyYW1lOlttX3ZpZXcgYm91bmRzXV07CiB9CiAKIHZvaWQgV2Vi
Vmlld0ltcGw6OmRpc2FibGVGcmFtZVNpemVVcGRhdGVzKCkKQEAgLTUxNTgsNyArNTEzOSw3IEBA
IHZvaWQgV2ViVmlld0ltcGw6OmZsYWdzQ2hhbmdlZChOU0V2ZW50ICoKICNkZWZpbmUgTkFUSVZF
X01PVVNFX0VWRU5UX0hBTkRMRVJfSU5URVJOQUwoRXZlbnROYW1lKSBcCiAgICAgdm9pZCBXZWJW
aWV3SW1wbDo6RXZlbnROYW1lKE5TRXZlbnQgKmV2ZW50KSBcCiAgICAgeyBcCi0gICAgICAgIGlm
IChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cyB8fCBtX3NhZmVCcm93c2luZ1dhcm5pbmcpIFwKKyAg
ICAgICAgaWYgKG1faWdub3Jlc05vbldoZWVsRXZlbnRzKSBcCiAgICAgICAgICAgICByZXR1cm47
IFwKICAgICAgICAgaWYgKE5TVGV4dElucHV0Q29udGV4dCAqY29udGV4dCA9IFttX3ZpZXcgaW5w
dXRDb250ZXh0XSkgeyBcCiAgICAgICAgICAgICBhdXRvIHdlYWtUaGlzID0gbWFrZVdlYWtQdHIo
KnRoaXMpOyBcCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudElt
cGxJT1MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNs
aWVudEltcGxJT1MuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHdvcmtpbmcgY29weSkKQEAgLTExNSw5ICsxMTUs
NiBAQCBwcml2YXRlOgogICAgIHZvaWQgY2xlYXJUZXh0SW5kaWNhdG9yKFdlYkNvcmU6OlRleHRJ
bmRpY2F0b3JXaW5kb3dEaXNtaXNzYWxBbmltYXRpb24pIG92ZXJyaWRlOwogICAgIHZvaWQgc2V0
VGV4dEluZGljYXRvckFuaW1hdGlvblByb2dyZXNzKGZsb2F0KSBvdmVycmlkZTsKIAotICAgIHZv
aWQgc2hvd1NhZmVCcm93c2luZ1dhcm5pbmcoY29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiwgQ29t
cGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBX
ZWJDb3JlOjpVUkw+JiYpPiYmKSBvdmVycmlkZTsKLSAgICB2b2lkIGNsZWFyU2FmZUJyb3dzaW5n
V2FybmluZygpIG92ZXJyaWRlOwotCiAgICAgdm9pZCBlbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKICAgICB2b2lkIGV4aXRB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgdXBkYXRlQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJUcmVlQ29udGV4dCYpIG92ZXJyaWRl
OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1w
bElPUy5tbQkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9z
L1BhZ2VDbGllbnRJbXBsSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBACiAj
aW1wb3J0IDxwYWwvc3BpL2NvY29hL05TS2V5ZWRBcmNoaXZlclNQSS5oPgogI2ltcG9ydCA8d3Rm
L0Jsb2NrUHRyLmg+CiAKLSNkZWZpbmUgTUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0Vf
Q0hFQ0tfQkFTRShhc3NlcnRpb24sIG1fd2ViVmlldy0+X3BhZ2UtPnByb2Nlc3MoKS5jb25uZWN0
aW9uKCkpCisjZGVmaW5lIE1FU1NBR0VfQ0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JB
U0UoYXNzZXJ0aW9uLCBtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlv
bigpKQogCiBAaW50ZXJmYWNlIFdLRWRpdENvbW1hbmRPYmpDIDogTlNPYmplY3QKIHsKQEAgLTE2
MSwxOCArMTYxLDE4IEBAIEludFNpemUgUGFnZUNsaWVudEltcGw6OnZpZXdTaXplKCkKIGJvb2wg
UGFnZUNsaWVudEltcGw6OmlzVmlld1dpbmRvd0FjdGl2ZSgpCiB7CiAgICAgLy8gRklYTUU6IGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwOTgKLSAgICByZXR1cm4g
aXNWaWV3VmlzaWJsZSgpIHx8IChtX3dlYlZpZXcgJiYgW21fd2ViVmlldyBfaXNSZXRhaW5pbmdB
Y3RpdmVGb2N1c2VkU3RhdGVdKTsKKyAgICByZXR1cm4gaXNWaWV3VmlzaWJsZSgpIHx8IFttX3dl
YlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlXTsKIH0KIAogYm9vbCBQYWdlQ2xp
ZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCgpCiB7CiAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzMwOTgKLSAgICByZXR1cm4gaXNWaWV3V2luZG93
QWN0aXZlKCkgfHwgKG1fd2ViVmlldyAmJiBbbV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZv
Y3VzZWRTdGF0ZV0pOworICAgIHJldHVybiBpc1ZpZXdXaW5kb3dBY3RpdmUoKSB8fCBbbV93ZWJW
aWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0ZV07CiB9CiAKIGJvb2wgUGFnZUNsaWVu
dEltcGw6OmlzVmlld1Zpc2libGUoKQogewotICAgIGlmIChpc1ZpZXdJbldpbmRvdygpICYmICFt
X3dlYlZpZXcuX2lzQmFja2dyb3VuZCkKKyAgICBpZiAoaXNWaWV3SW5XaW5kb3coKSAmJiAhW21f
d2ViVmlldyBfaXNCYWNrZ3JvdW5kXSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgCiAgICAg
aWYgKFttX3dlYlZpZXcgX2lzU2hvd2luZ1ZpZGVvUGljdHVyZUluUGljdHVyZV0pCkBAIC0xODcs
OCArMTg3LDggQEAgYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3VmlzaWJsZSgpCiBib29sIFBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdJbldpbmRvdygpCiB7CiAgICAgLy8gRklYTUU6IGluIFdlYktp
dFRlc3RSdW5uZXIsIG1fd2ViVmlldyBpcyBuaWwsIHNvIGNoZWNrIHRoZSBjb250ZW50IHZpZXcg
aW5zdGVhZC4KLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICByZXR1cm4gW21fd2ViVmlldyB3
aW5kb3ddOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAg
IHJldHVybiBbd2ViVmlldyB3aW5kb3ddOwogCiAgICAgcmV0dXJuIFttX2NvbnRlbnRWaWV3IHdp
bmRvd107CiB9CkBAIC0yNDgsNyArMjQ4LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkQ29t
cGxldGVTeW50aGV0aQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkZWNpZGVQb2xpY3lGb3JHZW9s
b2NhdGlvblBlcm1pc3Npb25SZXF1ZXN0KFdlYkZyYW1lUHJveHkmIGZyYW1lLCBBUEk6OlNlY3Vy
aXR5T3JpZ2luJiBvcmlnaW4sIEZ1bmN0aW9uPHZvaWQoYm9vbCk+JiBjb21wbGV0aW9uSGFuZGxl
cikKIHsKLSAgICBbW3dyYXBwZXIobV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLnByb2Nlc3NQ
b29sKCkpIF9nZW9sb2NhdGlvblByb3ZpZGVyXSBkZWNpZGVQb2xpY3lGb3JHZW9sb2NhdGlvblJl
cXVlc3RGcm9tT3JpZ2luOm9yaWdpbi5zZWN1cml0eU9yaWdpbigpIGZyYW1lOmZyYW1lIGNvbXBs
ZXRpb25IYW5kbGVyOnN0ZDo6ZXhjaGFuZ2UoY29tcGxldGlvbkhhbmRsZXIsIG51bGxwdHIpIHZp
ZXc6bV93ZWJWaWV3XTsKKyAgICBbW3dyYXBwZXIobV93ZWJWaWV3LmdldCgpLT5fcGFnZS0+cHJv
Y2VzcygpLnByb2Nlc3NQb29sKCkpIF9nZW9sb2NhdGlvblByb3ZpZGVyXSBkZWNpZGVQb2xpY3lG
b3JHZW9sb2NhdGlvblJlcXVlc3RGcm9tT3JpZ2luOm9yaWdpbi5zZWN1cml0eU9yaWdpbigpIGZy
YW1lOmZyYW1lIGNvbXBsZXRpb25IYW5kbGVyOnN0ZDo6ZXhjaGFuZ2UoY29tcGxldGlvbkhhbmRs
ZXIsIG51bGxwdHIpIHZpZXc6bV93ZWJWaWV3LmdldCgpLmdldCgpXTsKIH0KIAogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6ZGlkU3RhcnRQcm92aXNpb25hbExvYWRGb3JNYWluRnJhbWUoKQpAQCAtNDY5
LDE2ICs0NjksNiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yQW5pCiB7
CiB9CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0
IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJL
aXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKLXsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9h
ZDo6WWVzKTsgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQotdm9pZCBQYWdlQ2xpZW50SW1wbDo6
Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKLXsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50Lgot
fQotCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2Rl
KGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCiB7CiB9CkBAIC02OTUs
MjMgKzY4NSwyMyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzY3JvbGxpbmdOb2RlU2Nyb2xsCiAK
IFZlY3RvcjxTdHJpbmc+IFBhZ2VDbGllbnRJbXBsOjptaW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVu
dFByb3ZpZGVycygpCiB7Ci0gICAgcmV0dXJuIG1fd2ViVmlldy5fY29udGVudFByb3ZpZGVyUmVn
aXN0cnkuX21pbWVUeXBlc1dpdGhDdXN0b21Db250ZW50UHJvdmlkZXJzOworICAgIHJldHVybiBb
bV93ZWJWaWV3IF9jb250ZW50UHJvdmlkZXJSZWdpc3RyeV0uX21pbWVUeXBlc1dpdGhDdXN0b21D
b250ZW50UHJvdmlkZXJzOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZURpZEJlZ2luKCkKIHsKICAgICBbbV93ZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVyZURpZEJl
Z2luXTsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdl
KS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9t
V2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdp
bigpOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQo
Ym9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7Ci0gICAg
TmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlv
bkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgTmF2aWdhdGlvblN0YXRl
Ojpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVX
aWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6Om5h
dmlnYXRpb25HZXN0dXJlRGlkRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExp
c3RJdGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2Vi
Vmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7
CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFn
ZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQod2lsbE5hdmlnYXRlLCBpdGVtKTsKICAgICBbbV93
ZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZF07CiB9CiAKQEAgLTcyMiwxMiArNzEyLDEy
IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGkKIAogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6d2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExp
c3RJdGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2Vi
Vmlldy0+X3BhZ2UpLndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7CisgICAgTmF2
aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkud2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6
ZGlkUmVtb3ZlTmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpCiB7Ci0gICAgTmF2aWdhdGlvblN0
YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVTbmFw
c2hvdFdhc1JlbW92ZWQoKTsKKyAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dl
YlZpZXcuZ2V0KCktPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgp
OwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlv
dXRGb3JNYWluRnJhbWUoKQpAQCAtODQwLDcgKzgzMCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6
OnJlcXVlc3RQYXNzd29yZEZvclEKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocGFzc3dvcmQp
OwogICAgIH0pOwogCi0gICAgaWYgKFdLUGFzc3dvcmRWaWV3ICpwYXNzd29yZFZpZXcgPSBtX3dl
YlZpZXcuX3Bhc3N3b3JkVmlldykgeworICAgIGlmIChXS1Bhc3N3b3JkVmlldyAqcGFzc3dvcmRW
aWV3ID0gW21fd2ViVmlldyBfcGFzc3dvcmRWaWV3XSkgewogICAgICAgICBBU1NFUlQoZmlsZU5h
bWUgPT0gU3RyaW5nIHsgcGFzc3dvcmRWaWV3LmRvY3VtZW50TmFtZSB9KTsKICAgICAgICAgW3Bh
c3N3b3JkVmlldyBzaG93UGFzc3dvcmRGYWlsdXJlQWxlcnRdOwogICAgICAgICBwYXNzd29yZFZp
ZXcudXNlckRpZEVudGVyUGFzc3dvcmQgPSBwYXNzd29yZEhhbmRsZXIuZ2V0KCk7CkBAIC04NDgs
NyArODM4LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6cmVxdWVzdFBhc3N3b3JkRm9yUQogICAg
IH0KIAogICAgIFttX3dlYlZpZXcgX3Nob3dQYXNzd29yZFZpZXdXaXRoRG9jdW1lbnROYW1lOmZp
bGVOYW1lIHBhc3N3b3JkSGFuZGxlcjpwYXNzd29yZEhhbmRsZXIuZ2V0KCldOwotICAgIE5hdmln
YXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLmRpZFJlcXVlc3RQYXNz
d29yZEZvclF1aWNrTG9va0RvY3VtZW50KCk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2Vi
UGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkuZGlkUmVxdWVzdFBhc3N3b3JkRm9yUXVpY2tM
b29rRG9jdW1lbnQoKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEwNCw4ICsxMDQsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgcmVzZXRTZWN1cmVJbnB1
dFN0YXRlKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBub3RpZnlJbnB1dENvbnRleHRBYm91dERpc2Nh
cmRlZENvbXBvc2l0aW9uKCkgb3ZlcnJpZGU7CiAgICAgdm9pZCBzZWxlY3Rpb25EaWRDaGFuZ2Uo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVC
cm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNv
bnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKICAgICAKICNpZiBXS19BUElf
RU5BQkxFRAogICAgIGJvb2wgc2hvd1NoYXJlU2hlZXQoY29uc3QgV2ViQ29yZTo6U2hhcmVEYXRh
V2l0aFBhcnNlZFVSTCYsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJikgb3Zl
cnJpZGU7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxN
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGll
bnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ4OSwxOCArNDg5
LDYgQEAgUmVmPFZhbGlkYXRpb25CdWJibGU+IFBhZ2VDbGllbnRJbXBsOjpjcgogICAgIHJldHVy
biBWYWxpZGF0aW9uQnViYmxlOjpjcmVhdGUobV92aWV3LCBtZXNzYWdlLCBzZXR0aW5ncyk7CiB9
CiAKLXZvaWQgUGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNh
ZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8
V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlv
bkhhbmRsZXIpCi17Ci0gICAgaWYgKCFtX2ltcGwpCi0gICAgICAgIHJldHVybiBjb21wbGV0aW9u
SGFuZGxlcihDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7Ci0gICAgbV9pbXBsLT5zaG93U2FmZUJy
b3dzaW5nV2FybmluZyhyZXN1bHQsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpKTsKLX0KLQot
dm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKLXsKLSAgICBt
X2ltcGwtPmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpOwotfQotCiB2b2lkIFBhZ2VDbGllbnRJ
bXBsOjpzZXRUZXh0SW5kaWNhdG9yKFJlZjxUZXh0SW5kaWNhdG9yPiB0ZXh0SW5kaWNhdG9yLCBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93TGlmZXRpbWUgbGlmZXRpbWUpCiB7CiAgICAgbV9p
bXBsLT5zZXRUZXh0SW5kaWNhdG9yKHRleHRJbmRpY2F0b3IuZ2V0KCksIGxpZmV0aW1lKTsKQEAg
LTU2NCw3ICs1NTIsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2Uo
CiAjaWYgV0tfQVBJX0VOQUJMRUQKIGJvb2wgUGFnZUNsaWVudEltcGw6OnNob3dTaGFyZVNoZWV0
KGNvbnN0IFNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmIHNoYXJlRGF0YSwgV1RGOjpDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1faW1wbC0+
c2hvd1NoYXJlU2hlZXQoc2hhcmVEYXRhLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbV93
ZWJWaWV3KTsKKyAgICBtX2ltcGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIG1fd2ViVmlldy5nZXQoKS5nZXQoKSk7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAjZW5kaWYKQEAgLTc1MSwxNiArNzM5LDE2IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6
Om5hdmlnYXRpb25HZXN0dXJlRGkKICAgICBtX2ltcGwtPmRpc21pc3NDb250ZW50UmVsYXRpdmVD
aGlsZFdpbmRvd3NXaXRoQW5pbWF0aW9uKHRydWUpOwogCiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAg
ICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCpt
X3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7CisgICAgaWYgKGF1
dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpm
cm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsK
ICNlbmRpZgogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxF
bmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAj
aWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9u
U3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVdp
bGxFbmQod2lsbE5hdmlnYXRlLCBpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJW
aWV3LmdldCgpKQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCp3ZWJWaWV3
LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiAj
ZWxzZQogICAgIFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwogICAgIFVOVVNFRF9QQVJBTShp
dGVtKTsKQEAgLTc3MCw4ICs3NTgsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9u
R2VzdHVyZVdpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChi
b29sIHdpbGxOYXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKICNpZiBX
S19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0
ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5k
KHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5n
ZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3Bh
Z2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiAjZWxzZQog
ICAgIFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwogICAgIFVOVVNFRF9QQVJBTShpdGVtKTsK
QEAgLTc4NSw4ICs3NzMsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVy
ZURpCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KFdl
YkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBp
ZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dl
YlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0pOworICAgIGlm
IChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0
ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBz
aG90KGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CiAjZW5kaWYKQEAgLTc5
NSw4ICs3ODMsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdhdGlvCiB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCkK
IHsKICNpZiBXS19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmln
YXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0
dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmll
dy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+
X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CiAjZW5kaWYKIH0K
IApJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwko
cmV2aXNpb24gMjM4MDAzKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTQgQEAKKzIwMTgtMTEtMDggIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KKworICAgICAgICBbaU9TXSBJbXBsZW1lbnQgc2FmZSBicm93c2luZyBpbiBX
ZWJLaXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
MTQ0MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW06CisgICAgICAg
IChjaGVja1RpdGxlQW5kQ2xpY2spOgorICAgICAgICAoVEVTVCk6CisKIDIwMTgtMTEtMDggIEpp
ZXdlbiBUYW4gIDxqaWV3ZW5fdGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCBh
IHF1aWNrIGJ1aWxkIGZpeCBmb3IgcjIzNzk4MwpJbmRleDogVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3NpbmcubW0JKHJldmlzaW9uIDIz
Nzg2MykKKysrIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dz
aW5nLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzcsOCArMTM3LDYgQEAgLSAodm9pZClsb29rVXBV
Ukw6KE5TVVJMICopVVJMIGNvbXBsZXRpbwogCiBAZW5kCiAKLSNpZiBQTEFURk9STShNQUMpIC8v
IEZJWE1FOiBUZXN0IG9uIGlPUyBvbmNlIGltcGxlbWVudGVkLgotCiBzdGF0aWMgTlNVUkwgKnNp
bXBsZVVSTCgpCiB7CiAgICAgcmV0dXJuIFtbTlNCdW5kbGUgbWFpbkJ1bmRsZV0gVVJMRm9yUmVz
b3VyY2U6QCJzaW1wbGUiIHdpdGhFeHRlbnNpb246QCJodG1sIiBzdWJkaXJlY3Rvcnk6QCJUZXN0
V2ViS2l0QVBJLnJlc291cmNlcyJdOwpAQCAtMTU0LDMxICsxNTIsNDYgQEAgc3RhdGljIFJldGFp
blB0cjxXS1dlYlZpZXc+IHNhZmVCcm93c2luZwogICAgIFt3ZWJWaWV3IGxvYWRSZXF1ZXN0OltO
U1VSTFJlcXVlc3QgcmVxdWVzdFdpdGhVUkw6c2ltcGxlVVJMKCldXTsKICAgICB3aGlsZSAoIVt3
ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10pCiAgICAgICAgIFRlc3RXZWJL
aXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBbW3dl
YlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXSBkaWRNb3ZlVG9XaW5kb3ddOwor
I2VuZGlmCiAgICAgcmV0dXJuIHdlYlZpZXc7CiB9CiAKKyNpZiBQTEFURk9STShNQUMpCitzdGF0
aWMgdm9pZCBjaGVja1RpdGxlQW5kQ2xpY2soTlNCdXR0b24gKmJ1dHRvbiwgY29uc3QgY2hhciog
ZXhwZWN0ZWRUaXRsZSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoYnV0dG9uLnRpdGxlLlVURjhTdHJp
bmcsIGV4cGVjdGVkVGl0bGUpOworICAgIFtidXR0b24gcGVyZm9ybUNsaWNrOm5pbF07Cit9Cisj
ZWxzZQorc3RhdGljIHZvaWQgY2hlY2tUaXRsZUFuZENsaWNrKFVJQnV0dG9uICpidXR0b24sIGNv
bnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgRVhQRUNUX1NUUkVRKFtidXR0b24gYXR0
cmlidXRlZFRpdGxlRm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdLnN0cmluZy5VVEY4U3Ry
aW5nLCBleHBlY3RlZFRpdGxlKTsKKyAgICBVSVZpZXcgKnRhcmdldCA9IGJ1dHRvbi5zdXBlcnZp
ZXcuc3VwZXJ2aWV3OworICAgIFNFTCBzZWxlY3RvciA9IE5TU2VsZWN0b3JGcm9tU3RyaW5nKHN0
cmNtcChleHBlY3RlZFRpdGxlLCAiR28gQmFjayIpID8gQCJzaG93RGV0YWlsc0NsaWNrZWQiIDog
QCJnb0JhY2tDbGlja2VkIik7CisgICAgW3RhcmdldCBwZXJmb3JtU2VsZWN0b3I6c2VsZWN0b3Jd
OworfQorI2VuZGlmCisKIFRFU1QoU2FmZUJyb3dzaW5nLCBHb0JhY2spCiB7CiAgICAgYXV0byB3
ZWJWaWV3ID0gc2FmZUJyb3dzaW5nVmlldygpOwotICAgIE5TVmlldyAqYm90dG9tID0gW3dlYlZp
ZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXS5zdWJ2aWV3cy5maXJzdE9iamVjdC5z
dWJ2aWV3cy5sYXN0T2JqZWN0OwotICAgIE5TQnV0dG9uICpnb0JhY2sgPSAoTlNCdXR0b24gKili
b3R0b20uc3Vidmlld3MubGFzdE9iamVjdDsKLSAgICBFWFBFQ1RfU1RSRVEoZ29CYWNrLnRpdGxl
LlVURjhTdHJpbmcsICJHbyBiYWNrIik7Ci0gICAgW2dvQmFjayBwZXJmb3JtQ2xpY2s6bmlsXTsK
KyAgICBhdXRvIHdhcm5pbmcgPSBbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3Rp
bmddOworICAgIGF1dG8gYm94ID0gd2FybmluZy5zdWJ2aWV3cy5maXJzdE9iamVjdDsKKyAgICBj
aGVja1RpdGxlQW5kQ2xpY2soYm94LnN1YnZpZXdzWzNdLCAiR28gQmFjayIpOwogICAgIEVYUEVD
VF9FUShbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddLCBuaWwpOwogfQog
CiBURVNUKFNhZmVCcm93c2luZywgVmlzaXRVbnNhZmVXZWJzaXRlKQogewogICAgIGF1dG8gd2Vi
VmlldyA9IHNhZmVCcm93c2luZ1ZpZXcoKTsKLSAgICBOU1ZpZXcgKndhcm5pbmcgPSBbd2ViVmll
dyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddOwotICAgIE5TVmlldyAqYm94ID0gd2Fy
bmluZy5zdWJ2aWV3cy5maXJzdE9iamVjdDsKLSAgICBOU0J1dHRvbiAqc2hvd0RldGFpbHMgPSAo
TlNCdXR0b24gKilib3guc3Vidmlld3MubGFzdE9iamVjdC5zdWJ2aWV3cy5maXJzdE9iamVjdDsK
LSAgICBFWFBFQ1RfU1RSRVEoc2hvd0RldGFpbHMudGl0bGUuVVRGOFN0cmluZywgIlNob3cgZGV0
YWlscyIpOwotICAgIEVYUEVDVF9FUShib3guc3Vidmlld3MuY291bnQsIDN1bGwpOwotICAgIFtz
aG93RGV0YWlscyBwZXJmb3JtQ2xpY2s6bmlsXTsKLSAgICBFWFBFQ1RfRVEoYm94LnN1YnZpZXdz
LmNvdW50LCA0dWxsKTsKKyAgICBhdXRvIHdhcm5pbmcgPSBbd2ViVmlldyBfc2FmZUJyb3dzaW5n
V2FybmluZ0ZvclRlc3RpbmddOworICAgIEVYUEVDVF9FUSh3YXJuaW5nLnN1YnZpZXdzLmNvdW50
LCAxdWxsKTsKKyAgICBjaGVja1RpdGxlQW5kQ2xpY2sod2FybmluZy5zdWJ2aWV3cy5maXJzdE9i
amVjdC5zdWJ2aWV3c1s0XSwgIlNob3cgRGV0YWlscyIpOworICAgIEVYUEVDVF9FUSh3YXJuaW5n
LnN1YnZpZXdzLmNvdW50LCAydWxsKTsKICAgICBFWFBFQ1RfRkFMU0UoY29tbWl0dGVkTmF2aWdh
dGlvbik7Ci0gICAgW3dhcm5pbmcgcGVyZm9ybVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5n
KEAiY2xpY2tlZE9uTGluazoiKSB3aXRoT2JqZWN0OkAiV0tWaXNpdFVuc2FmZVdlYnNpdGVTZW50
aW5lbCJdOworICAgIFt3YXJuaW5nIHBlcmZvcm1TZWxlY3RvcjpOU1NlbGVjdG9yRnJvbVN0cmlu
ZyhAImNsaWNrZWRPbkxpbms6Iikgd2l0aE9iamVjdDpbTlNVUkwgVVJMV2l0aFN0cmluZzpAIldL
VmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXV07CiAgICAgVGVzdFdlYktpdEFQSTo6VXRpbDo6
cnVuKCZjb21taXR0ZWROYXZpZ2F0aW9uKTsKIH0KIApAQCAtMTkxLDggKzIwNCw2IEBAIFRFU1Qo
U2FmZUJyb3dzaW5nLCBOYXZpZ2F0aW9uQ2xlYXJzV2FybmkKICAgICAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKIH0KIAotI2VuZGlmIC8vIFBMQVRGT1JNKE1BQykKLQog
QGludGVyZmFjZSBOdWxsTG9va3VwQ29udGV4dCA6IE5TT2JqZWN0CiBAZW5kCiBAaW1wbGVtZW50
YXRpb24gTnVsbExvb2t1cENvbnRleHQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354450</attachid>
            <date>2018-11-09 23:40:08 -0800</date>
            <delta_ts>2018-11-10 00:28:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181109234007.patch</filename>
            <type>text/plain</type>
            <size>60697</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNSw2ICsxMzUxLDcgQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIAogLSAodm9pZClsYXlvdXRTdWJ2aWV3cwogeworICAg
IFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CiAgICAgW3N1cGVy
IGxheW91dFN1YnZpZXdzXTsKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogfQpA
QCAtMzI5MCw2ICszMzA3LDcgQEAgLSAodm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0
KXJlYwogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwogICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkp
OwogfQogCkBAIC0zNTgzLDc2ICszNjAxLDEyMSBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqCiAKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAog
eworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAg
X2ltcGwtPnNjcm9sbFdoZWVsKGV2ZW50KTsKIH0KIAogLSAodm9pZClzd2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAg
ICByZXR1cm47CisKICAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOwogfQogCiAtICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQp
OwogfQogCiAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VE
b3duKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAg
ICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBs
LT5tb3VzZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisg
ICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUVudGVyZWQoZXZlbnQpOwogfQogCiAt
ICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93
c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUV4aXRlZChl
dmVudCk7CiB9CiAKIC0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewor
ICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2lt
cGwtPm90aGVyTW91c2VEb3duKGV2ZW50KTsKIH0KIAogLSAodm9pZClvdGhlck1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwogfQog
CiAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcp
CisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdodE1vdXNlRHJhZ2dlZChldmVudCk7
CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlVXAoZXZlbnQpOwogfQogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAg
IHJldHVybjsKKwogICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5nZVdpdGhFdmVudChldmVudCk7CiB9
CiAKQEAgLTQ2MzUsNyArNDY5OCw3IEBAIC0gKHZvaWQpX3Bhc3RlQXNRdW90YXRpb246KGlkKXNl
bmRlcgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERFRkFV
TFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2b2lk
KV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNj
cmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKQEAgLTY2NjYsMTUgKzY3MjksMTIgQEAgLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZQogCiAjaWYgUExBVEZPUk0oTUFDKQogLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZl
QnJvd3NpbmdXYXJuaW5nKCk7Ci19CiAjZWxzZQogLSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nCisjZW5kaWYKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
c2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKIH0KLSNlbmRpZgogCiAtIChfV0tJbnNwZWN0b3Ig
KilfaW5zcGVjdG9yCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBAQCBjbGFzcyBBdHRhY2htZW50
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2Fk
IDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNsYXNzIFZpZXdTbmFwc2hvdDsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CiB9CiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnNl
cnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpvcHRpb25hbDxCT09MPilfcmVz
b2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKIAogLSAo
V0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKIEBjbGFzcyBX
S1dlYlZpZXc7CiAKQEAgLTQ4LDkgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBOU0ZpbGVXcmFwcGVy
ICphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKICAgICBOU1NldCAqc2Vy
aWFsaXphYmxlRmlsZVdyYXBwZXJDbGFzc2VzKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKKyAgICB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dh
cm5pbmcoKSBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsQ29jb2EuaCIKIAorI2lt
cG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKIApAQCAtNDUsNiAr
NDYsMjUgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjppc1BsYXlpbmdBdWRpbwogI2VuZGlm
CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmco
Y29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyNpZiBXS19BUElfRU5BQkxFRAorICAgIGlmIChhdXRvIHdl
YlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dz
aW5nV2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNh
ZmVMb2FkOjpObyk7CisjZWxzZQorICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZl
TG9hZDo6WWVzKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFy
U2FmZUJyb3dzaW5nV2FybmluZygpCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBbbV93ZWJW
aWV3IF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworI2VuZGlmCit9CisKICNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmRpZEluc2Vy
dEF0dGFjaG1lbnQoQVBJOjpBdHRhY2htZW50JiBhdHRhY2htZW50LCBjb25zdCBTdHJpbmcmIHNv
dXJjZSkKQEAgLTY5LDcgKzg5LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRSZW1v
dmVBdHRhYwogTlNGaWxlV3JhcHBlciAqUGFnZUNsaWVudEltcGxDb2NvYTo6YWxsb2NGaWxlV3Jh
cHBlckluc3RhbmNlKCkgY29uc3QKIHsKICNpZiBXS19BUElfRU5BQkxFRAotICAgIENsYXNzIGNs
cyA9IG1fd2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzcyA/
OiBbTlNGaWxlV3JhcHBlciBzZWxmXTsKKyAgICBDbGFzcyBjbHMgPSBbbV93ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzcyA/OiBbTlNGaWxlV3JhcHBlciBz
ZWxmXTsKICAgICByZXR1cm4gW2NscyBhbGxvY107CiAjZWxzZQogICAgIHJldHVybiBuaWw7CkBA
IC04MCw3ICsxMDAsNyBAQCBOU1NldCAqUGFnZUNsaWVudEltcGxDb2NvYTo6c2VyaWFsaXphYmxl
CiB7CiAgICAgQ2xhc3MgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MgPSBOU0ZpbGVXcmFwcGVyLnNl
bGY7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJD
bGFzcyA9IG1fd2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFz
czsKKyAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IFttX3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOwogICAgIGlmIChjb25maWd1
cmVkRmlsZVdyYXBwZXJDbGFzcyAmJiBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyAhPSBkZWZh
dWx0RmlsZVdyYXBwZXJDbGFzcykKICAgICAgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0
czpjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcywgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MsIG5p
bF07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJy
b3dzaW5nV2FybmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMTggKzQ0LDIwIEBAIGNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGVudW0g
Y2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDogYm9vbDsKIH0KIAorT0JKQ19DTEFTUyBXS1NhZmVC
cm93c2luZ1RleHRWaWV3OworCiAjaWYgUExBVEZPUk0oTUFDKQogdXNpbmcgUmVjdFR5cGUgPSBO
U1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gTlNTdGFja1ZpZXc7CitAaW50ZXJmYWNlIFdL
U2FmZUJyb3dzaW5nV2FybmluZyA6IE5TVmlldzxOU1RleHRWaWV3RGVsZWdhdGU+CiAjZWxzZQog
dXNpbmcgUmVjdFR5cGUgPSBDR1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gVUlTdGFja1Zp
ZXc7CitAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nV2FybmluZyA6IFVJU2Nyb2xsVmlldzxVSVRl
eHRWaWV3RGVsZWdhdGU+CiAjZW5kaWYKLQotQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1dhcm5p
bmcgOiBTdGFja1ZpZXdUeXBlIHsKK3sKIEBwYWNrYWdlCiAgICAgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYp
PiBfY29tcGxldGlvbkhhbmRsZXI7CiAgICAgUmVmUHRyPGNvbnN0IFdlYktpdDo6U2FmZUJyb3dz
aW5nUmVzdWx0PiBfcmVzdWx0OworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxXS1NhZmVC
cm93c2luZ1RleHRWaWV3ICo+PiBfdGV4dFZpZXdzOwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGcmFtZTooUmVjdFR5cGUpZnJhbWUgc2FmZUJyb3dzaW5nUmVzdWx0Oihjb25zdCBXZWJL
aXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNv
cmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCShyZXZp
c2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93
c2luZ1dhcm5pbmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDQ5ICszMywxMDUgQEAKICNpbXBv
cnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL0xhbmd1YWdlLmg+CiAKLWNvbnN0IENH
RmxvYXQgZXhjbGFtYXRpb25Qb2ludFNpemUgPSAzMDsKLWNvbnN0IENHRmxvYXQgdGV4dFNpemUg
PSAxMzsKK2NvbnN0ZXhwciBDR0Zsb2F0IGV4Y2xhbWF0aW9uUG9pbnRTaXplID0gMzA7Citjb25z
dGV4cHIgQ0dGbG9hdCB0aXRsZVNpemUgPSAyNjsKK2NvbnN0ZXhwciBDR0Zsb2F0IGJveENvcm5l
clJhZGl1cyA9IDY7CisjaWYgSEFWRShTQUZFX0JST1dTSU5HKQorY29uc3RleHByIENHRmxvYXQg
bWFyZ2luU2l6ZSA9IDIwOworY29uc3RleHByIENHRmxvYXQgbWF4V2lkdGggPSA2NzU7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKE1BQykKLWNvbnN0IENHRmxvYXQgbWFyZ2luU2l6ZSA9IDIwOwot
Y29uc3Qgc2l6ZV90IG1heFdpZHRoID0gNjAwOworY29uc3RleHByIENHRmxvYXQgdGV4dFNpemUg
PSAxNDsKIHVzaW5nIENvbG9yVHlwZSA9IE5TQ29sb3I7CiB1c2luZyBGb250VHlwZSA9IE5TRm9u
dDsKLXVzaW5nIFZpZXdUeXBlID0gTlNWaWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBOU0Jl
emllclBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBOU1RleHRWaWV3OwordXNpbmcgQnV0dG9u
VHlwZSA9IE5TQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IE5TTGF5b3V0QXR0cmlidXRl
OwordXNpbmcgVmlld1R5cGUgPSBOU1ZpZXc7CiAjZWxzZQorY29uc3RleHByIENHRmxvYXQgdGV4
dFNpemUgPSAyMDsKIHVzaW5nIENvbG9yVHlwZSA9IFVJQ29sb3I7CiB1c2luZyBGb250VHlwZSA9
IFVJRm9udDsKLXVzaW5nIFZpZXdUeXBlID0gVUlWaWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUg
PSBVSUJlemllclBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBVSVRleHRWaWV3OwordXNpbmcg
QnV0dG9uVHlwZSA9IFVJQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IFVJU3RhY2tWaWV3
QWxpZ25tZW50OwordXNpbmcgVmlld1R5cGUgPSBVSVZpZXc7CiAjZW5kaWYKIAotc3RhdGljIGlk
IGNvbmZpcm1NYWx3YXJlU2VudGluZWwoKQorZW51bSBjbGFzcyBXYXJuaW5nSXRlbSA6IHVpbnQ4
X3QgeworICAgIEJhY2tncm91bmQsCisgICAgQm94QmFja2dyb3VuZCwKKyAgICBFeGNsYW1hdGlv
blBvaW50LAorICAgIFRpdGxlVGV4dCwKKyAgICBNZXNzYWdlVGV4dCwKKyAgICBTaG93RGV0YWls
c0J1dHRvbiwKKyAgICBHb0JhY2tCdXR0b24KK307CisKK3N0YXRpYyBOU1VSTCAqY29uZmlybU1h
bHdhcmVTZW50aW5lbCgpCiB7Ci0gICAgcmV0dXJuIEAiV0tDb25maXJtTWFsd2FyZVNlbnRpbmVs
IjsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS0NvbmZpcm1NYWx3YXJlU2Vu
dGluZWwiXTsKIH0KIAotc3RhdGljIGlkIHZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkKK3N0
YXRpYyBOU1VSTCAqdmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwoKQogewotICAgIHJldHVybiBA
IldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0
aFN0cmluZzpAIldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKIH0KIAotc3RhdGljIENv
bG9yVHlwZSAqY29sb3JOYW1lZChOU1N0cmluZyAqbmFtZSkKK3N0YXRpYyBDb2xvclR5cGUgKmNv
bG9yRm9ySXRlbShXYXJuaW5nSXRlbSBpdGVtLCBWaWV3VHlwZSAqd2FybmluZykKIHsKKyAgICBB
U1NFUlQoW3dhcm5pbmcgaXNLaW5kT2ZDbGFzczpbV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGNsYXNz
XV0pOwogI2lmIFBMQVRGT1JNKE1BQykKKworICAgIGF1dG8gY29sb3JOYW1lZCA9IFtdIChOU1N0
cmluZyAqbmFtZSkgLT4gQ29sb3JUeXBlKiB7CiAjaWYgSEFWRShTQUZFX0JST1dTSU5HKQotICAg
IHJldHVybiBbTlNDb2xvciBjb2xvck5hbWVkOm5hbWUgYnVuZGxlOltOU0J1bmRsZSBidW5kbGVX
aXRoSWRlbnRpZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXV07CisgICAgICAgIHJldHVybiBbTlND
b2xvciBjb2xvck5hbWVkOm5hbWUgYnVuZGxlOltOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRpZmll
cjpAImNvbS5hcHBsZS5XZWJLaXQiXV07CiAjZWxzZQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgIHJldHVybiBuaWw7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAg
ICByZXR1cm4gbmlsOwogI2VuZGlmCisgICAgfTsKKworICAgIHN3aXRjaCAoaXRlbSkgeworICAg
IGNhc2UgV2FybmluZ0l0ZW06OkJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiBjb2xvck5hbWVk
KEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpOworICAgIGNhc2UgV2FybmluZ0l0
ZW06OkJveEJhY2tncm91bmQ6CisgICAgICAgIHJldHVybiBbTlNDb2xvciB3aW5kb3dCYWNrZ3Jv
dW5kQ29sb3JdOworICAgIGNhc2UgV2FybmluZ0l0ZW06OlRpdGxlVGV4dDoKKyAgICBjYXNlIFdh
cm5pbmdJdGVtOjpFeGNsYW1hdGlvblBvaW50OgorICAgICAgICByZXR1cm4gY29sb3JOYW1lZChA
IldLU2FmZUJyb3dzaW5nV2FybmluZ1RpdGxlIik7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6TWVz
c2FnZVRleHQ6CisgICAgICAgIHJldHVybiBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJu
aW5nVGV4dCIpOworICAgIGNhc2UgV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uOgorICAg
IGNhc2UgV2FybmluZ0l0ZW06OkdvQmFja0J1dHRvbjoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfQogI2Vsc2UKLSAgICByZXR1cm4gW1VJ
Q29sb3IgY29sb3JOYW1lZDpuYW1lIGluQnVuZGxlOltOU0J1bmRsZSBidW5kbGVXaXRoSWRlbnRp
ZmllcjpAImNvbS5hcHBsZS5XZWJLaXQiXSBjb21wYXRpYmxlV2l0aFRyYWl0Q29sbGVjdGlvbjpu
aWxdOworICAgIFVJQ29sb3IgKnJlZCA9IFtVSUNvbG9yIGNvbG9yV2l0aFJlZDowLjk5OCBncmVl
bjowLjIzOSBibHVlOjAuMjMzIGFscGhhOjEuMF07CisgICAgVUlDb2xvciAqd2hpdGUgPSBbVUlD
b2xvciB3aGl0ZUNvbG9yXTsKKyAgICBib29sIG5hcnJvdyA9IHdhcm5pbmcudHJhaXRDb2xsZWN0
aW9uLmhvcml6b250YWxTaXplQ2xhc3MgPT0gVUlVc2VySW50ZXJmYWNlU2l6ZUNsYXNzQ29tcGFj
dDsKKworICAgIHN3aXRjaCAoaXRlbSkgeworICAgIGNhc2UgV2FybmluZ0l0ZW06OkJhY2tncm91
bmQ6CisgICAgICAgIHJldHVybiByZWQ7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6Qm94QmFja2dy
b3VuZDoKKyAgICAgICAgcmV0dXJuIG5hcnJvdyA/IHJlZCA6IHdoaXRlOworICAgIGNhc2UgV2Fy
bmluZ0l0ZW06OlRpdGxlVGV4dDoKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpFeGNsYW1hdGlvblBv
aW50OgorICAgICAgICByZXR1cm4gbmFycm93ID8gd2hpdGUgOiByZWQ7CisgICAgY2FzZSBXYXJu
aW5nSXRlbTo6TWVzc2FnZVRleHQ6CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6U2hvd0RldGFpbHNC
dXR0b246CisgICAgICAgIHJldHVybiBuYXJyb3cgPyB3aGl0ZSA6IFtVSUNvbG9yIGRhcmtUZXh0
Q29sb3JdOworICAgIGNhc2UgV2FybmluZ0l0ZW06OkdvQmFja0J1dHRvbjoKKyAgICAgICAgcmV0
dXJuIG5hcnJvdyA/IHdoaXRlIDogd2FybmluZy50aW50Q29sb3I7CisgICAgfQogI2VuZGlmCisg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIG5pbDsKIH0KIAotI2lmIFBMQVRG
T1JNKE1BQykKIHN0YXRpYyB2b2lkIHJlcGxhY2UoTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAq
c3RyaW5nLCBOU1N0cmluZyAqdG9SZXBsYWNlLCBOU1N0cmluZyAqcmVwbGFjZVdpdGgpCiB7CiAg
ICAgW3N0cmluZyByZXBsYWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VP
ZlN0cmluZzp0b1JlcGxhY2VdIHdpdGhTdHJpbmc6cmVwbGFjZVdpdGhdOwpAQCAtOTAsNyArMTQ2
LDYgQEAgc3RhdGljIHZvaWQgYWRkTGlua0FuZFJlcGxhY2UoTlNNdXRhYmxlQQogICAgIH0gcmFu
Z2U6TlNNYWtlUmFuZ2UoMCwgcmVwbGFjZVdpdGgubGVuZ3RoKV07CiAgICAgW3N0cmluZyByZXBs
YWNlQ2hhcmFjdGVyc0luUmFuZ2U6W3N0cmluZy5zdHJpbmcgcmFuZ2VPZlN0cmluZzp0b1JlcGxh
Y2VdIHdpdGhBdHRyaWJ1dGVkU3RyaW5nOnN0cmluZ1dpdGhMaW5rXTsKIH0KLSNlbmRpZgogCiBA
aW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCA6IFZpZXdUeXBlCiBAZW5k
CkBAIC05OSwyMiArMTU0LDM5IEBAIEBpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlv
blBvaW4KIAogLSAodm9pZClkcmF3UmVjdDooUmVjdFR5cGUpcmVjdAogewotICAgIFtjb2xvck5h
bWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGl0bGUiKSBzZXRdOwotI2lmIFBMQVRGT1JNKE1B
QykKLSNkZWZpbmUgYWRkQXJjV2l0aENlbnRlciBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhD
ZW50ZXIKLSAgICBOU1JlY3Qgc3F1YXJlID0gTlNNYWtlUmVjdCgwLCAwLCBleGNsYW1hdGlvblBv
aW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGNl
bnRlclggPSBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDI7CisgICAgY29uc3RleHByIENHRmxvYXQg
cG9pbnRDZW50ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8gMzA7CisgICAgY29uc3Rl
eHByIENHRmxvYXQgcG9pbnRSYWRpdXMgPSAyLjI1ICogZXhjbGFtYXRpb25Qb2ludFNpemUgLyAz
MDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBsaW5lQm90dG9tQ2VudGVyWSA9IGV4Y2xhbWF0aW9u
UG9pbnRTaXplICogMTMgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBsaW5lVG9wQ2VudGVy
WSA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplICogMjMgLyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9h
dCBsaW5lUmFkaXVzID0gMS43NSAqIGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMzA7CisgICAgVmll
d1R5cGUgKndhcm5pbmcgPSBzZWxmLnN1cGVydmlldy5zdXBlcnZpZXc7CisjaWYgUExBVEZPUk0o
TUFDKQorICAgIFtjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkV4Y2xhbWF0aW9uUG9pbnQsIHdh
cm5pbmcpIHNldF07CisgICAgTlNCZXppZXJQYXRoICpleGNsYW1hdGlvblBvaW50ID0gW05TQmV6
aWVyUGF0aCBiZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6TlNNYWtlUmVjdCgwLCAwLCBleGNsYW1h
dGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpXTsKKyAgICBbZXhjbGFtYXRpb25Q
b2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgbGluZUJv
dHRvbUNlbnRlclkgfSByYWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgw
IGNsb2Nrd2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhX
aXRoQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBsaW5lVG9wQ2VudGVyWSB9IHJhZGl1czpsaW5l
UmFkaXVzIHN0YXJ0QW5nbGU6MTgwIGVuZEFuZ2xlOjM2MCBjbG9ja3dpc2U6WUVTXTsKKyAgICBb
ZXhjbGFtYXRpb25Qb2ludCBsaW5lVG9Qb2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1cywgbGlu
ZUJvdHRvbUNlbnRlclkgfV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYXBwZW5kQmV6aWVyUGF0
aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50Q2VudGVyWSB9IHJhZGl1czpwb2lu
dFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOworICAgIFtl
eGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcjogeyBjZW50
ZXJYLCBwb2ludENlbnRlclkgfSByYWRpdXM6cG9pbnRSYWRpdXMgc3RhcnRBbmdsZToxODAgZW5k
QW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogI2Vsc2UKLSAgICBDR1JlY3Qgc3F1YXJlID0gQ0dS
ZWN0TWFrZSgwLCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUp
OworICAgIGF1dG8gZmxpcCA9IFtdIChhdXRvIHkpIHsKKyAgICAgICAgcmV0dXJuIGV4Y2xhbWF0
aW9uUG9pbnRTaXplIC0geTsKKyAgICB9OworICAgIFtjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06
OkJveEJhY2tncm91bmQsIHdhcm5pbmcpIHNldF07CisgICAgYXV0byBzcXVhcmUgPSBDR1JlY3RN
YWtlKDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSk7Cisg
ICAgW1tVSUJlemllclBhdGggYmV6aWVyUGF0aFdpdGhSZWN0OnNxdWFyZV0gZmlsbF07CisgICAg
CisgICAgW2NvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6RXhjbGFtYXRpb25Qb2ludCwgd2Fybmlu
Zykgc2V0XTsKKyAgICBVSUJlemllclBhdGggKmV4Y2xhbWF0aW9uUG9pbnQgPSBbVUlCZXppZXJQ
YXRoIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpzcXVhcmVdOworICAgIFtleGNsYW1hdGlvblBv
aW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChsaW5lVG9wQ2VudGVyWSkgfSBy
YWRpdXM6bGluZVJhZGl1cyBzdGFydEFuZ2xlOjIgKiBwaURvdWJsZSBlbmRBbmdsZTpwaURvdWJs
ZSBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6
IHsgY2VudGVyWCwgZmxpcChsaW5lQm90dG9tQ2VudGVyWSkgfSByYWRpdXM6bGluZVJhZGl1cyBz
dGFydEFuZ2xlOnBpRG91YmxlIGVuZEFuZ2xlOjAgY2xvY2t3aXNlOk5PXTsKKyAgICBbZXhjbGFt
YXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGZsaXAocG9pbnRDZW50ZXJZ
KSB9IHJhZGl1czpwb2ludFJhZGl1cyBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6cGlEb3VibGUgY2xv
Y2t3aXNlOk5PXTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGNl
bnRlclgsIGZsaXAocG9pbnRDZW50ZXJZKSB9IHJhZGl1czpwb2ludFJhZGl1cyBzdGFydEFuZ2xl
OnBpRG91YmxlIGVuZEFuZ2xlOnBpRG91YmxlICogMiBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNs
YW1hdGlvblBvaW50IGFkZExpbmVUb1BvaW50OiB7IGNlbnRlclggKyBsaW5lUmFkaXVzLCBmbGlw
KGxpbmVCb3R0b21DZW50ZXJZKSB9XTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRMaW5lVG9Q
b2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1cywgZmxpcChsaW5lVG9wQ2VudGVyWSkgfV07CiAj
ZW5kaWYKLSAgICBCZXppZXJQYXRoVHlwZSAqZXhjbGFtYXRpb25Qb2ludCA9IFtCZXppZXJQYXRo
VHlwZSBiZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6c3F1YXJlXTsKLSAgICBbZXhjbGFtYXRpb25Q
b2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFt
YXRpb25Qb2ludFNpemUgKiAxMyAvIDMwIH0gcmFkaXVzOjEuNzUgc3RhcnRBbmdsZTowIGVuZEFu
Z2xlOjE4MCBjbG9ja3dpc2U6WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRo
Q2VudGVyOiB7IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUg
KiAyMyAvIDMwIH0gcmFkaXVzOjEuNzUgc3RhcnRBbmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nr
d2lzZTpZRVNdOwotICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhj
bGFtYXRpb25Qb2ludFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDcgLyAzMCB9IHJh
ZGl1czoyLjI1IHN0YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAgY2xvY2t3aXNlOllFU107Ci0gICAg
W2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBleGNsYW1hdGlvblBvaW50U2l6
ZSAvIDIsIGV4Y2xhbWF0aW9uUG9pbnRTaXplICogNyAvIDMwIH0gcmFkaXVzOjIuMjUgc3RhcnRB
bmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nrd2lzZTpZRVNdOwogICAgIFtleGNsYW1hdGlvblBv
aW50IGZpbGxdOwotI2lmIFBMQVRGT1JNKE1BQykKLSN1bmRlZiBhZGRBcmNXaXRoQ2VudGVyCi0j
ZW5kaWYKIH0KIAogLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCkBAIC0xMjQsNyArMTk2
LDYgQEAgLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCiAKIEBlbmQKIAotI2lmIFBMQVRG
T1JNKE1BQykKIHN0YXRpYyBOU1VSTCAqcmVwb3J0QW5FcnJvclVSTChjb25zdCBXZWJLaXQ6OlNh
ZmVCcm93c2luZ1Jlc3VsdCYgcmVzdWx0KQogewogICAgIHJldHVybiBXZWJDb3JlOjpVUkwoeyB9
LCBtYWtlU3RyaW5nKHJlc3VsdC5yZXBvcnRBbkVycm9yVVJMQmFzZSgpLCAiJnVybD0iLCBlbmNv
ZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHJlc3VsdC51cmwoKSksICImaGw9IiwgZGVmYXVsdExh
bmd1YWdlKCkpKTsKQEAgLTE5MSwxNCArMjYyLDYzIEBAIHN0YXRpYyBOU011dGFibGVBdHRyaWJ1
dGVkU3RyaW5nICpkZXRhaWwKICAgICBBU1NFUlQocmVzdWx0LmlzVW53YW50ZWRTb2Z0d2FyZSgp
KTsKICAgICByZXR1cm4gbWFsd2FyZU9yVW53YW50ZWRTb2Z0d2FyZURldGFpbHMocmVzdWx0LCBX
RUJfVUlfTlNTVFJJTkcoQCJXYXJuaW5ncyBhcmUgc2hvd24gZm9yIHdlYnNpdGVzIHdoZXJlIGhh
cm1mdWwgc29mdHdhcmUgaGFzIGJlZW4gZGV0ZWN0ZWQuIFlvdSBjYW4gY2hlY2sgJXRoZS1zdGF0
dXMtb2Ytc2l0ZSUgb24gdGhlICVzYWZlQnJvd3NpbmdQcm92aWRlciUgZGlhZ25vc3RpYyBwYWdl
LiIsICJVbndhbnRlZCBzb2Z0d2FyZSB3YXJuaW5nIGRlc2NyaXB0aW9uIiksIEAiJXRoZS1zdGF0
dXMtb2Ytc2l0ZSUiLCBmYWxzZSk7CiB9CisKK3N0YXRpYyBCdXR0b25UeXBlICptYWtlQnV0dG9u
KFdhcm5pbmdJdGVtIGl0ZW0sIFdLU2FmZUJyb3dzaW5nV2FybmluZyAqd2FybmluZywgU0VMIGFj
dGlvbikKK3sKKyAgICBOU1N0cmluZyAqdGl0bGUgPSBuaWw7CisgICAgaWYgKGl0ZW0gPT0gV2Fy
bmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9uKQorICAgICAgICB0aXRsZSA9IFdFQl9VSV9OU1NU
UklORyhAIlNob3cgZGV0YWlscyIsICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmci
KTsKKyAgICBlbHNlCisgICAgICAgIHRpdGxlID0gV0VCX1VJX05TU1RSSU5HKEAiR28gYmFjayIs
ICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKTsKKyAgICB0aXRsZSA9IFt0aXRs
ZSBjYXBpdGFsaXplZFN0cmluZ107CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHJldHVybiBbTlNC
dXR0b24gYnV0dG9uV2l0aFRpdGxlOnRpdGxlIHRhcmdldDp3YXJuaW5nIGFjdGlvbjphY3Rpb25d
OworI2Vsc2UKKyAgICBVSUJ1dHRvbiAqYnV0dG9uID0gW1VJQnV0dG9uIGJ1dHRvbldpdGhUeXBl
OlVJQnV0dG9uVHlwZVN5c3RlbV07CisgICAgTlNBdHRyaWJ1dGVkU3RyaW5nICphdHRyaWJ1dGVk
VGl0bGUgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxl
IGF0dHJpYnV0ZXM6QHsKKyAgICAgICAgTlNVbmRlcmxpbmVTdHlsZUF0dHJpYnV0ZU5hbWU6QChO
U1VuZGVybGluZVN0eWxlU2luZ2xlKSwKKyAgICAgICAgTlNVbmRlcmxpbmVDb2xvckF0dHJpYnV0
ZU5hbWU6W1VJQ29sb3Igd2hpdGVDb2xvcl0sCisgICAgICAgIE5TRm9yZWdyb3VuZENvbG9yQXR0
cmlidXRlTmFtZTpjb2xvckZvckl0ZW0oaXRlbSwgd2FybmluZyksCisgICAgICAgIE5TRm9udEF0
dHJpYnV0ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdCisgICAgfV0g
YXV0b3JlbGVhc2VdOworICAgIFtidXR0b24gc2V0QXR0cmlidXRlZFRpdGxlOmF0dHJpYnV0ZWRU
aXRsZSBmb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF07CisgICAgW2J1dHRvbiBhZGRUYXJn
ZXQ6d2FybmluZyBhY3Rpb246YWN0aW9uIGZvckNvbnRyb2xFdmVudHM6VUlDb250cm9sRXZlbnRU
b3VjaFVwSW5zaWRlXTsKKyAgICByZXR1cm4gYnV0dG9uOworI2VuZGlmCit9CisKK3N0YXRpYyBW
aWV3VHlwZSAqbWFrZVRpdGxlTGFiZWwoTlNTdHJpbmcgKnRpdGxlLCBWaWV3VHlwZSAqd2Fybmlu
ZykKK3sKKyAgICBhdXRvIGF0dHJpYnV0ZWRTdHJpbmcgPSBbW1tOU0F0dHJpYnV0ZWRTdHJpbmcg
YWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxlIGF0dHJpYnV0ZXM6QHsKKyAgICAgICAgTlNGb250
QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgYm9sZFN5c3RlbUZvbnRPZlNpemU6dGl0bGVTaXplXSwK
KyAgICAgICAgTlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lOmNvbG9yRm9ySXRlbShXYXJu
aW5nSXRlbTo6VGl0bGVUZXh0LCB3YXJuaW5nKQorICAgIH1dIGF1dG9yZWxlYXNlXTsKKyNpZiBQ
TEFURk9STShNQUMpCisgICAgcmV0dXJuIFtOU1RleHRGaWVsZCBsYWJlbFdpdGhBdHRyaWJ1dGVk
U3RyaW5nOmF0dHJpYnV0ZWRTdHJpbmddOworI2Vsc2UKKyAgICBhdXRvIGxhYmVsID0gW1tVSUxh
YmVsIG5ld10gYXV0b3JlbGVhc2VdOworICAgIGxhYmVsLmF0dHJpYnV0ZWRUZXh0ID0gYXR0cmli
dXRlZFN0cmluZzsKKyAgICBsYWJlbC5saW5lQnJlYWtNb2RlID0gTlNMaW5lQnJlYWtCeVdvcmRX
cmFwcGluZzsKKyAgICBsYWJlbC5udW1iZXJPZkxpbmVzID0gMDsKKyAgICByZXR1cm4gbGFiZWw7
CisjZW5kaWYKK30KKworc3RhdGljIHZvaWQgc2V0QmFja2dyb3VuZChWaWV3VHlwZSAqdmlldywg
Q29sb3JUeXBlICpjb2xvcikKK3sKKyNpZiBQTEFURk9STShNQUMpCisgICAgdmlldy53YW50c0xh
eWVyID0gWUVTOworICAgIHZpZXcubGF5ZXIuYmFja2dyb3VuZENvbG9yID0gY29sb3IuQ0dDb2xv
cjsKKyNlbHNlCisgICAgdmlldy5iYWNrZ3JvdW5kQ29sb3IgPSBjb2xvcjsKICNlbmRpZgorfQog
CiBAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgOiBUZXh0Vmlld1R5cGUgewogQHBh
Y2thZ2UKLSAgICBXZWFrT2JqQ1B0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF90YXJnZXQ7Cisg
ICAgV2Vha09iakNQdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfd2FybmluZzsKIH0KLSsgKGlu
c3RhbmNldHlwZSl2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAq
KWF0dHJpYnV0ZWRTdHJpbmcgbGlua1RhcmdldDooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopdGFy
Z2V0OwotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoU3RyaW5nOihOU1N0cmluZyAqKXN0cmluZzsK
Ky0gKGluc3RhbmNldHlwZSlpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0
cmluZyAqKWF0dHJpYnV0ZWRTdHJpbmcgZm9yV2FybmluZzooV0tTYWZlQnJvd3NpbmdXYXJuaW5n
ICopd2FybmluZzsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9uIFdLU2FmZUJyb3dzaW5nV2Fybmlu
ZwpAQCAtMjA5LDU0ICszMjksMTU3IEBAIC0gKGluc3RhbmNldHlwZSlpbml0V2l0aEZyYW1lOihS
ZWN0VHlwZSkKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2Fm
ZUxvYWQ6Olllcyk7CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgfQotCiAgICAgX2NvbXBsZXRp
b25IYW5kbGVyID0gV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcik7CiAgICAgX3Jlc3VsdCA9IG1h
a2VSZWYocmVzdWx0KTsKLQorICAgIHNldEJhY2tncm91bmQoc2VsZiwgY29sb3JGb3JJdGVtKFdh
cm5pbmdJdGVtOjpCYWNrZ3JvdW5kLCBzZWxmKSk7CiAjaWYgUExBVEZPUk0oTUFDKQotICAgIHNl
bGYud2FudHNMYXllciA9IFlFUzsKLSAgICBzZWxmLmxheWVyLmJhY2tncm91bmRDb2xvciA9IFtj
b2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nQmFja2dyb3VuZCIpIENHQ29sb3JdOwot
Ci0gICAgTlNTdGFja1ZpZXcgKnRvcCA9IFtOU1N0YWNrVmlldyBzdGFja1ZpZXdXaXRoVmlld3M6
QFsKLSAgICAgICAgW1tXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbnQgbmV3XSBhdXRvcmVs
ZWFzZV0sCi0gICAgICAgIFtOU1RleHRGaWVsZCBsYWJlbFdpdGhBdHRyaWJ1dGVkU3RyaW5nOltb
W05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGl0bGVUZXh0KHJlc3Vs
dCkgYXR0cmlidXRlczpAewotICAgICAgICAgICAgTlNGb250QXR0cmlidXRlTmFtZTpbTlNGb250
IHN5c3RlbUZvbnRPZlNpemU6ZXhjbGFtYXRpb25Qb2ludFNpemVdLAotICAgICAgICAgICAgTlNG
b3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lOmNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dh
cm5pbmdUZXh0IikKLSAgICAgICAgfV0gYXV0b3JlbGVhc2VdXQotICAgIF1dOworICAgIFtzZWxm
IGFkZENvbnRlbnRdOworI2VuZGlmCisgICAgcmV0dXJuIHNlbGY7Cit9CiAKLSAgICBXS1NhZmVC
cm93c2luZ1RleHRWaWV3ICptaWRkbGUgPSBbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3V2l0
aFN0cmluZzp3YXJuaW5nVGV4dChyZXN1bHQpXTsKKy0gKHZvaWQpYWRkQ29udGVudAoreworICAg
IGF1dG8gZXhjbGFtYXRpb25Qb2ludCA9IFtbV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW50
IG5ld10gYXV0b3JlbGVhc2VdOworICAgIGF1dG8gdGl0bGUgPSBtYWtlVGl0bGVMYWJlbCh0aXRs
ZVRleHQoKl9yZXN1bHQpLCBzZWxmKTsKKyAgICBhdXRvIHdhcm5pbmcgPSBbW1tXS1NhZmVCcm93
c2luZ1RleHRWaWV3IGFsbG9jXSBpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1
dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp3YXJuaW5nVGV4dCgqX3Jlc3VsdCkgYXR0
cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXpl
OnRleHRTaXplXSB9XSBhdXRvcmVsZWFzZV0gZm9yV2FybmluZzpzZWxmXSBhdXRvcmVsZWFzZV07
CisgICAgYXV0byBzaG93RGV0YWlscyA9IG1ha2VCdXR0b24oV2FybmluZ0l0ZW06OlNob3dEZXRh
aWxzQnV0dG9uLCBzZWxmLCBAc2VsZWN0b3Ioc2hvd0RldGFpbHNDbGlja2VkKSk7CisgICAgYXV0
byBnb0JhY2sgPSBtYWtlQnV0dG9uKFdhcm5pbmdJdGVtOjpHb0JhY2tCdXR0b24sIHNlbGYsIEBz
ZWxlY3Rvcihnb0JhY2tDbGlja2VkKSk7CisgICAgYXV0byBib3ggPSBbW1ZpZXdUeXBlIG5ld10g
YXV0b3JlbGVhc2VdOworICAgIHNldEJhY2tncm91bmQoYm94LCBjb2xvckZvckl0ZW0oV2Fybmlu
Z0l0ZW06OkJveEJhY2tncm91bmQsIHNlbGYpKTsKKyAgICBib3gubGF5ZXIuY29ybmVyUmFkaXVz
ID0gYm94Q29ybmVyUmFkaXVzOworICAgIF90ZXh0Vmlld3MgPSBhZG9wdE5TKFtOU011dGFibGVB
cnJheSBuZXddKTsKKyAgICBbX3RleHRWaWV3cyBhZGRPYmplY3Q6d2FybmluZ107CisKKyAgICBm
b3IgKFZpZXdUeXBlICp2aWV3IGluIEBbZXhjbGFtYXRpb25Qb2ludCwgdGl0bGUsIHdhcm5pbmcs
IGdvQmFjaywgc2hvd0RldGFpbHNdKSB7CisgICAgICAgIHZpZXcudHJhbnNsYXRlc0F1dG9yZXNp
emluZ01hc2tJbnRvQ29uc3RyYWludHMgPSBOTzsKKyAgICAgICAgW2JveCBhZGRTdWJ2aWV3OnZp
ZXddOworICAgIH0KKyAgICBib3gudHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3Ry
YWludHMgPSBOTzsKKyAgICBbc2VsZiBhZGRTdWJ2aWV3OmJveF07CiAKLSAgICBOU1N0YWNrVmll
dyAqYm90dG9tID0gW05TU3RhY2tWaWV3IHN0YWNrVmlld1dpdGhWaWV3czpAWwotICAgICAgICBb
TlNCdXR0b24gYnV0dG9uV2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhAIlNob3cgZGV0YWlscyIs
ICJBY3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSB0YXJnZXQ6c2VsZiBhY3Rpb246
QHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCldLAotICAgICAgICBbTlNCdXR0b24gYnV0dG9u
V2l0aFRpdGxlOldFQl9VSV9OU1NUUklORyhAIkdvIGJhY2siLCAiQWN0aW9uIGZyb20gc2FmZSBi
cm93c2luZyB3YXJuaW5nIikgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxlY3Rvcihnb0JhY2tDbGlj
a2VkKV0KKyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgW05TTGF5b3V0Q29uc3RyYWludCBh
Y3RpdmF0ZUNvbnN0cmFpbnRzOkBbCisgICAgICAgIFtbc2VsZi50b3BBbmNob3IgYW5jaG9yV2l0
aE9mZnNldFRvQW5jaG9yOmJveC50b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOlti
b3guYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpzZWxmLmJvdHRvbUFuY2hv
cl0gbXVsdGlwbGllcjowLjVdLAorICAgICAgICBbW3NlbGYubGVmdEFuY2hvciBhbmNob3JXaXRo
T2Zmc2V0VG9BbmNob3I6Ym94LmxlZnRBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOlti
b3gucmlnaHRBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOnNlbGYucmlnaHRBbmNob3Jd
XSwKKworICAgICAgICBbYm94LndpZHRoQW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxU
b0NvbnN0YW50Om1heFdpZHRoXSwKKyAgICAgICAgW2JveC53aWR0aEFuY2hvciBjb25zdHJhaW50
TGVzc1RoYW5PckVxdWFsVG9BbmNob3I6c2VsZi53aWR0aEFuY2hvcl0sCisKKyAgICAgICAgW1ti
b3gubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZXhjbGFtYXRpb25Qb2lu
dC5sZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAor
ICAgICAgICBbW2JveC5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjp0aXRs
ZS5sZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemUgKiAx
LjUgKyBleGNsYW1hdGlvblBvaW50U2l6ZV0sCisgICAgICAgIFtbYm94LmxlYWRpbmdBbmNob3Ig
YW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOndhcm5pbmcubGVhZGluZ0FuY2hvcl0gY29uc3RyYWlu
dEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKworICAgICAgICBbW3RpdGxlLnRyYWlsaW5n
QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gudHJhaWxpbmdBbmNob3JdIGNvbnN0
cmFpbnRHcmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBb
W3dhcm5pbmcudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50cmFp
bGluZ0FuY2hvcl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWFyZ2lu
U2l6ZV0sCisgICAgICAgIFtbZ29CYWNrLnRyYWlsaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRU
b0FuY2hvcjpib3gudHJhaWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFy
Z2luU2l6ZV0sCisKKyAgICAgICAgW1t0aXRsZS50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRv
QW5jaG9yOmV4Y2xhbWF0aW9uUG9pbnQudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hv
cjpbZXhjbGFtYXRpb25Qb2ludC5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9y
OnRpdGxlLmJvdHRvbUFuY2hvcl1dLAorCisgICAgICAgIFtnb0JhY2sudG9wQW5jaG9yIGNvbnN0
cmFpbnRFcXVhbFRvQW5jaG9yOnNob3dEZXRhaWxzLnRvcEFuY2hvcl0sCisgICAgICAgIFtbc2hv
d0RldGFpbHMudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmdvQmFjay5s
ZWFkaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorCisg
ICAgICAgIFtbYm94LnRvcEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6dGl0bGUudG9w
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBb
W3RpdGxlLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6d2FybmluZy50b3BB
bmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtb
d2FybmluZy5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmdvQmFjay50b3BB
bmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtb
Z29CYWNrLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LmJvdHRvbUFu
Y2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXQogICAgIF1dOworI2Vu
ZGlmCit9CiAKLSAgICBmb3IgKE5TU3RhY2tWaWV3ICp2aWV3IGluIEBbdG9wLCBib3R0b21dKQot
ICAgICAgICBbdmlldyBzZXRIdWdnaW5nUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVk
IGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxdOwor
LSAodm9pZClzaG93RGV0YWlsc0NsaWNrZWQKK3sKKyAgICBWaWV3VHlwZSAqYm94ID0gc2VsZi5z
dWJ2aWV3cy5sYXN0T2JqZWN0OworICAgIEJ1dHRvblR5cGUgKnNob3dEZXRhaWxzID0gYm94LnN1
YnZpZXdzLmxhc3RPYmplY3Q7CisgICAgW3Nob3dEZXRhaWxzIHJlbW92ZUZyb21TdXBlcnZpZXdd
OworCisgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqdGV4dCA9IGRldGFpbHNUZXh0KCpf
cmVzdWx0KTsKKyAgICBbdGV4dCBhZGRBdHRyaWJ1dGVzOkB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6
W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdIH0gcmFuZ2U6TlNNYWtlUmFuZ2Uo
MCwgdGV4dC5sZW5ndGgpXTsKKyAgICBXS1NhZmVCcm93c2luZ1RleHRWaWV3ICpkZXRhaWxzID0g
W1tbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyBhbGxvY10gaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5n
OnRleHQgZm9yV2FybmluZzpzZWxmXSBhdXRvcmVsZWFzZV07CisgICAgW190ZXh0Vmlld3MgYWRk
T2JqZWN0OmRldGFpbHNdOworICAgIFZpZXdUeXBlICpib3R0b20gPSBbW1ZpZXdUeXBlIG5ld10g
YXV0b3JlbGVhc2VdOworICAgIHNldEJhY2tncm91bmQoYm90dG9tLCBjb2xvckZvckl0ZW0oV2Fy
bmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHNlbGYpKTsKKyAgICBib3R0b20ubGF5ZXIuY29ybmVy
UmFkaXVzID0gYm94Q29ybmVyUmFkaXVzOwogCi0gICAgU3RhY2tWaWV3VHlwZSAqYm94ID0gW05T
U3RhY2tWaWV3IHN0YWNrVmlld1dpdGhWaWV3czpAW3RvcCwgbWlkZGxlLCBib3R0b21dXTsKLSAg
ICBib3gud2FudHNMYXllciA9IFlFUzsKLSAgICBib3gubGF5ZXIuYmFja2dyb3VuZENvbG9yID0g
W1tOU0NvbG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl0gQ0dDb2xvcl07Ci0gICAgYm94LmxheWVy
LmNvcm5lclJhZGl1cyA9IDY7Ci0gICAgYm94LmFsaWdubWVudCA9IE5TTGF5b3V0QXR0cmlidXRl
Q2VudGVyWDsKLSAgICBbYm94LndpZHRoQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6
bWF4V2lkdGhdLmFjdGl2ZSA9IHRydWU7Ci0gICAgYm94LmVkZ2VJbnNldHMgPSB7IG1hcmdpblNp
emUsIG1hcmdpblNpemUsIG1hcmdpblNpemUsIG1hcmdpblNpemUgfTsKLSAgICBbYm94IHNldEh1
Z2dpbmdQcmlvcml0eTpOU0xheW91dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNM
YXlvdXRDb25zdHJhaW50T3JpZW50YXRpb25WZXJ0aWNhbF07Ci0gICAgW3NlbGYgYWRkVmlldzpi
b3ggaW5HcmF2aXR5Ok5TU3RhY2tWaWV3R3Jhdml0eUNlbnRlcl07CisjaWYgSEFWRShTQUZFX0JS
T1dTSU5HKQorICAgIGNvbnN0ZXhwciBhdXRvIG1heFkgPSBrQ0FMYXllck1pblhNYXhZQ29ybmVy
IHwga0NBTGF5ZXJNYXhYTWF4WUNvcm5lcjsKKyAgICBjb25zdGV4cHIgYXV0byBtaW5ZID0ga0NB
TGF5ZXJNaW5YTWluWUNvcm5lciB8IGtDQUxheWVyTWF4WE1pbllDb3JuZXI7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIGJveC5sYXllci5tYXNrZWRDb3JuZXJzID0gbWF4WTsKKyAgICBib3R0b20u
bGF5ZXIubWFza2VkQ29ybmVycyA9IG1pblk7CiAjZWxzZQotICAgIC8vIEZJWE1FOiBHZXQgdGhp
cyB3b3JraW5nIG9uIGlPUy4KLSAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVl
VW5zYWZlTG9hZDo6WWVzKTsKKyAgICBib3gubGF5ZXIubWFza2VkQ29ybmVycyA9IG1pblk7Cisg
ICAgYm90dG9tLmxheWVyLm1hc2tlZENvcm5lcnMgPSBtYXhZOwogI2VuZGlmCi0gICAgcmV0dXJu
IHNlbGY7CisjZW5kaWYKKworICAgIFZpZXdUeXBlICpsaW5lID0gW1tWaWV3VHlwZSBuZXddIGF1
dG9yZWxlYXNlXTsKKyAgICBzZXRCYWNrZ3JvdW5kKGxpbmUsIFtDb2xvclR5cGUgbGlnaHRHcmF5
Q29sb3JdKTsKKyAgICBmb3IgKFZpZXdUeXBlICp2aWV3IGluIEBbZGV0YWlscywgYm90dG9tLCBs
aW5lXSkKKyAgICAgICAgdmlldy50cmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJh
aW50cyA9IE5POworCisgICAgW3NlbGYgYWRkU3Vidmlldzpib3R0b21dOworICAgIFtib3R0b20g
YWRkU3VidmlldzpsaW5lXTsKKyAgICBbYm90dG9tIGFkZFN1YnZpZXc6ZGV0YWlsc107CisjaWYg
SEFWRShTQUZFX0JST1dTSU5HKQorICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZhdGVDb25z
dHJhaW50czpAWworICAgICAgICBbYm94LndpZHRoQW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5j
aG9yOmJvdHRvbS53aWR0aEFuY2hvcl0sCisgICAgICAgIFtib3guYm90dG9tQW5jaG9yIGNvbnN0
cmFpbnRFcXVhbFRvQW5jaG9yOmJvdHRvbS50b3BBbmNob3JdLAorICAgICAgICBbYm94LmxlYWRp
bmdBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLmxlYWRpbmdBbmNob3JdLAor
ICAgICAgICBbbGluZS53aWR0aEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpib3R0b20u
d2lkdGhBbmNob3JdLAorICAgICAgICBbbGluZS5sZWFkaW5nQW5jaG9yIGNvbnN0cmFpbnRFcXVh
bFRvQW5jaG9yOmJvdHRvbS5sZWFkaW5nQW5jaG9yXSwKKyAgICAgICAgW2xpbmUudG9wQW5jaG9y
IGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOmJvdHRvbS50b3BBbmNob3JdLAorICAgICAgICBbbGlu
ZS5oZWlnaHRBbmNob3IgY29uc3RyYWludEVxdWFsVG9Db25zdGFudDoxXSwKKyAgICAgICAgW1ti
b3R0b20udG9wQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpkZXRhaWxzLnRvcEFuY2hv
cl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tkZXRh
aWxzLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym90dG9tLmJvdHRvbUFu
Y2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1ti
b3R0b20ubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZGV0YWlscy5sZWFk
aW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAg
ICBbW2RldGFpbHMudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJvdHRv
bS50cmFpbGluZ0FuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwK
KyAgICBdXTsKKyNlbmRpZgorICAgIFtzZWxmIGxheW91dFRleHRdOworI2lmICFQTEFURk9STShN
QUMpCisgICAgW3NlbGYgbGF5b3V0SWZOZWVkZWRdOworICAgIENHRmxvYXQgaGVpZ2h0ID0gMDsK
KyAgICBmb3IgKFZpZXdUeXBlICpzdWJ2aWV3IGluIHNlbGYuc3Vidmlld3MpCisgICAgICAgIGhl
aWdodCArPSBzdWJ2aWV3LmZyYW1lLnNpemUuaGVpZ2h0OworICAgIFtzZWxmIHNldENvbnRlbnRT
aXplOiB7IHNlbGYuZnJhbWUuc2l6ZS53aWR0aCwgc2VsZi5mcmFtZS5zaXplLmhlaWdodCArIGhl
aWdodCAvIDIgfV07CisjZW5kaWYKK30KKworLSAodm9pZClsYXlvdXRUZXh0Cit7CisgICAgZm9y
IChXS1NhZmVCcm93c2luZ1RleHRWaWV3ICp2aWV3IGluIF90ZXh0Vmlld3MuZ2V0KCkpCisgICAg
ICAgIFt2aWV3IGludmFsaWRhdGVJbnRyaW5zaWNDb250ZW50U2l6ZV07CiB9CiAKICNpZiBQTEFU
Rk9STShNQUMpCistIChCT09MKXRleHRWaWV3OihOU1RleHRWaWV3ICopdGV4dFZpZXcgY2xpY2tl
ZE9uTGluazooaWQpbGluayBhdEluZGV4OihOU1VJbnRlZ2VyKWNoYXJJbmRleAoreworICAgIFtz
ZWxmIGNsaWNrZWRPbkxpbms6bGlua107CisgICAgcmV0dXJuIFlFUzsKK30KKwogLSAodm9pZCls
YXlvdXQKIHsKLSAgICBmb3IgKE5TVmlldyAqdmlldyBpbiBzZWxmLnN1YnZpZXdzLmZpcnN0T2Jq
ZWN0LnN1YnZpZXdzKQotICAgICAgICBbdmlldyBpbnZhbGlkYXRlSW50cmluc2ljQ29udGVudFNp
emVdOwogICAgIFtzdXBlciBsYXlvdXRdOworICAgIFtzZWxmIGxheW91dFRleHRdOworfQorI2Vs
c2UKKy0gKHZvaWQpbGF5b3V0U3Vidmlld3MKK3sKKyAgICBbc3VwZXIgbGF5b3V0U3Vidmlld3Nd
OworICAgIFtzZWxmIGxheW91dFRleHRdOworfQorCistIChCT09MKXRleHRWaWV3OihVSVRleHRW
aWV3ICopdGV4dFZpZXcgc2hvdWxkSW50ZXJhY3RXaXRoVVJMOihOU1VSTCAqKVVSTCBpblJhbmdl
OihOU1JhbmdlKWNoYXJhY3RlclJhbmdlIGludGVyYWN0aW9uOihVSVRleHRJdGVtSW50ZXJhY3Rp
b24paW50ZXJhY3Rpb24KK3sKKyAgICBbc2VsZiBjbGlja2VkT25MaW5rOlVSTF07CisgICAgcmV0
dXJuIE5POworfQorCistICh2b2lkKWRpZE1vdmVUb1dpbmRvdworeworICAgIFtzZWxmIGFkZENv
bnRlbnRdOwogfQogI2VuZGlmCiAKQEAgLTI3Myw3ICs0OTYsNyBAQCAtICh2b2lkKWdvQmFja0Ns
aWNrZWQKICAgICAgICAgX2NvbXBsZXRpb25IYW5kbGVyKFdlYktpdDo6Q29udGludWVVbnNhZmVM
b2FkOjpObyk7CiB9CiAKLS0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQpbGluaworLSAodm9pZClj
bGlja2VkT25MaW5rOihOU1VSTCAqKWxpbmsKIHsKICAgICBpZiAoIV9jb21wbGV0aW9uSGFuZGxl
cikKICAgICAgICAgcmV0dXJuOwpAQCAtMzA0LDY4ICs1MjcsNDEgQEAgLSAodm9pZCljbGlja2Vk
T25MaW5rOihpZClsaW5rCiAgICAgX2NvbXBsZXRpb25IYW5kbGVyKChOU1VSTCAqKWxpbmspOwog
fQogCi0tICh2b2lkKXNob3dEZXRhaWxzQ2xpY2tlZAotewotI2lmIFBMQVRGT1JNKE1BQykKLSAg
ICBOU1N0YWNrVmlldyAqYm94ID0gc2VsZi52aWV3cy5maXJzdE9iamVjdDsKLSAgICBOU1N0YWNr
VmlldyAqYm90dG9tID0gYm94LnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKnNob3dE
ZXRhaWxzQnV0dG9uID0gYm90dG9tLnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIFtib3R0b20gcmVt
b3ZlVmlldzpzaG93RGV0YWlsc0J1dHRvbl07Ci0gICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAq
ZGV0YWlscyA9IFtXS1NhZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0cmlidXRlZFN0cmlu
ZzpkZXRhaWxzVGV4dCgqX3Jlc3VsdCkgbGlua1RhcmdldDpzZWxmXTsKLSAgICBbYm94IGFkZFZp
ZXc6ZGV0YWlscyBpbkdyYXZpdHk6TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVyXTsKLSNlbHNlCi0g
ICAgLy8gRklYTUU6IEdldCB0aGlzIHdvcmtpbmcgb24gaU9TLgotI2VuZGlmCi19Ci0KIEBlbmQK
IAogQGltcGxlbWVudGF0aW9uIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcKIAotKyAoaW5zdGFuY2V0
eXBlKXZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmli
dXRlZFN0cmluZyBsaW5rVGFyZ2V0OihXS1NhZmVCcm93c2luZ1dhcm5pbmcgKil0YXJnZXQKKy0g
KGluc3RhbmNldHlwZSlpbml0V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmlu
ZyAqKWF0dHJpYnV0ZWRTdHJpbmcgZm9yV2FybmluZzooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICop
d2FybmluZwogewotICAgIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKmluc3RhbmNlID0gW1tzZWxm
IG5ld10gYXV0b3JlbGVhc2VdOwotICAgIGlmICghaW5zdGFuY2UpCisgICAgaWYgKCEoc2VsZiA9
IFtzdXBlciBpbml0XSkpCiAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgaW5zdGFuY2UtPl90YXJn
ZXQgPSB0YXJnZXQ7CisgICAgc2VsZi0+X3dhcm5pbmcgPSB3YXJuaW5nOworICAgIHNlbGYuZGVs
ZWdhdGUgPSB3YXJuaW5nOwogCi0gICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBjb2xv
ck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGV4dCIpOworICAgIENvbG9yVHlwZSAqZm9y
ZWdyb3VuZENvbG9yID0gY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dCwgd2Fy
bmluZyk7CiAgICAgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqc3RyaW5nID0gW2F0dHJpYnV0
ZWRTdHJpbmcgbXV0YWJsZUNvcHldOwotICAgIFtzdHJpbmcgYWRkQXR0cmlidXRlczpAewotICAg
ICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IsCi0g
ICAgICAgIE5TRm9udEF0dHJpYnV0ZU5hbWU6W0ZvbnRUeXBlIHN5c3RlbUZvbnRPZlNpemU6dGV4
dFNpemVdCi0gICAgfSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKV07Ci0KLSNp
ZiBQTEFURk9STShNQUMpCi0gICAgW2luc3RhbmNlIHNldExpbmtUZXh0QXR0cmlidXRlczpAeyBO
U0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfV07Ci0gICAg
W2luc3RhbmNlIHNldENvbnRlbnRIdWdnaW5nUHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVp
cmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxd
OwotICAgIFtpbnN0YW5jZSBzZXRDb250ZW50Q29tcHJlc3Npb25SZXNpc3RhbmNlUHJpb3JpdHk6
TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0Q29uc3RyYWlu
dE9yaWVudGF0aW9uVmVydGljYWxdOwotICAgIFtpbnN0YW5jZS53aWR0aEFuY2hvciBjb25zdHJh
aW50TGVzc1RoYW5PckVxdWFsVG9Db25zdGFudDptYXhXaWR0aCAtIDIgKiBtYXJnaW5TaXplXS5h
Y3RpdmUgPSB0cnVlOwotICAgIFtpbnN0YW5jZSBzZXRCYWNrZ3JvdW5kQ29sb3I6W05TQ29sb3Ig
d2luZG93QmFja2dyb3VuZENvbG9yXV07Ci0gICAgW2luc3RhbmNlLnRleHRTdG9yYWdlIGFwcGVu
ZEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5nXTsKKyAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsg
TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH0gcmFuZ2U6
TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCldOworICAgIFtzZWxmIHNldEJhY2tncm91bmRD
b2xvcjpjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQsIHdhcm5pbmcpXTsK
KyAgICBbc2VsZiBzZXRMaW5rVGV4dEF0dHJpYnV0ZXM6QHsgTlNGb3JlZ3JvdW5kQ29sb3JBdHRy
aWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH1dOworICAgIFtzZWxmLnRleHRTdG9yYWdlIGFw
cGVuZEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5nXTsKKyAgICBzZWxmLmVkaXRhYmxlID0gTk87Cisj
aWYgIVBMQVRGT1JNKE1BQykKKyAgICBzZWxmLnNjcm9sbEVuYWJsZWQgPSBOTzsKICNlbmRpZgot
ICAgIHJldHVybiBpbnN0YW5jZTsKLX0KIAotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoU3RyaW5n
OihOU1N0cmluZyAqKXN0cmluZwotewotICAgIHJldHVybiBbV0tTYWZlQnJvd3NpbmdUZXh0Vmll
dyB2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBh
bGxvY10gaW5pdFdpdGhTdHJpbmc6c3RyaW5nXSBhdXRvcmVsZWFzZV0gbGlua1RhcmdldDpuaWxd
OworICAgIHJldHVybiBzZWxmOwogfQogCi0tIChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUK
Ky0gKENHU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQogewotICAgIFtzZWxmLmxheW91dE1hbmFn
ZXIgZW5zdXJlTGF5b3V0Rm9yVGV4dENvbnRhaW5lcjpzZWxmLnRleHRDb250YWluZXJdOwotICAg
IGF1dG8gc2l6ZSA9IFtzZWxmLmxheW91dE1hbmFnZXIgdXNlZFJlY3RGb3JUZXh0Q29udGFpbmVy
OnNlbGYudGV4dENvbnRhaW5lcl0uc2l6ZTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJu
IHsgTlNWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIHNpemUuaGVpZ2h0IH07CisgICAgW3NlbGYubGF5
b3V0TWFuYWdlciBlbnN1cmVMYXlvdXRGb3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5l
cl07CisgICAgcmV0dXJuIHsgTlNWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIFtzZWxmLmxheW91dE1h
bmFnZXIgdXNlZFJlY3RGb3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl0uc2l6ZS5o
ZWlnaHQgfTsKICNlbHNlCi0gICAgcmV0dXJuIHsgVUlWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIHNp
emUuaGVpZ2h0IH07CisgICAgYXV0byB3aWR0aCA9IHN0ZDo6bWluPENHRmxvYXQ+KG1heFdpZHRo
LCBbX3dhcm5pbmcgZnJhbWVdLnNpemUud2lkdGgpIC0gMiAqIG1hcmdpblNpemU7CisgICAgY29u
c3RleHByIGF1dG8gbm9IZWlnaHRDb25zdHJhaW50ID0gQ0dGTE9BVF9NQVg7CisgICAgcmV0dXJu
IHsgd2lkdGgsIFtzZWxmIHNpemVUaGF0Rml0czogeyB3aWR0aCwgbm9IZWlnaHRDb25zdHJhaW50
IH1dLmhlaWdodCB9OwogI2VuZGlmCiB9CiAKLS0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQpbGlu
ayBhdEluZGV4OihOU1VJbnRlZ2VyKWNoYXJJbmRleAotewotICAgIFtfdGFyZ2V0IGNsaWNrZWRP
bkxpbms6bGlua107Ci19Ci0KIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDkgKzIy
Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdTY2FsZShDR0Zsb2F0KTsKICAgICBDR0Zs
b2F0IHZpZXdTY2FsZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2Fybmlu
Zyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlh
bnQ8Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKTsKLSAgICB2b2lkIGNs
ZWFyU2FmZUJyb3dzaW5nV2FybmluZygpOwotCiAgICAgV0tMYXlvdXRNb2RlIGxheW91dE1vZGUo
KSBjb25zdDsKICAgICB2b2lkIHNldExheW91dE1vZGUoV0tMYXlvdXRNb2RlKTsKICAgICB2b2lk
IHVwZGF0ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9kZXMoKTsKQEAgLTQ3MSw4ICs0NjgsNiBA
QCBwdWJsaWM6CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckN1cnJlbnRJdGVt
KCk7CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckl0ZW0oV2ViQmFja0Zvcndh
cmRMaXN0SXRlbSYpOwogCi0gICAgV0tTYWZlQnJvd3NpbmdXYXJuaW5nICpzYWZlQnJvd3NpbmdX
YXJuaW5nKCkgeyByZXR1cm4gbV9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpOyB9Ci0KICAgICBW
aWV3R2VzdHVyZUNvbnRyb2xsZXIqIGdlc3R1cmVDb250cm9sbGVyKCkgeyByZXR1cm4gbV9nZXN0
dXJlQ29udHJvbGxlci5nZXQoKTsgfQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciYgZW5zdXJl
R2VzdHVyZUNvbnRyb2xsZXIoKTsKICAgICB2b2lkIHNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdh
dGlvbkdlc3R1cmVzKGJvb2wpOwpAQCAtNzk4LDcgKzc5Myw2IEBAIHByaXZhdGU6CiAgICAgYm9v
bCBtX3JlcXVpcmVzVXNlckFjdGlvbkZvckVkaXRpbmdDb250cm9sc01hbmFnZXIgeyBmYWxzZSB9
OwogICAgIGJvb2wgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgeyBmYWxzZSB9OwogICAgIGJv
b2wgbV9pc1RleHRJbnNlcnRpb25SZXBsYWNpbmdTb2Z0U3BhY2UgeyBmYWxzZSB9OwotICAgIFJl
dGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IG1fc2FmZUJyb3dzaW5nV2FybmluZzsKICAg
ICAKICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIE5TSW50ZWdlciBtX2luaXRpYWxOdW1i
ZXJPZlZhbGlkSXRlbXNGb3JEcm9wIHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTk5LDI0ICsxNTk5LDYgQEAgYm9vbCBXZWJWaWV3SW1wbDo6cmVzaWduRmlyc3RSZXNwb25kZXIo
KQogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzaG93U2FmZUJyb3dz
aW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4m
JiBjb21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fdmlldykKLSAgICAgICAgcmV0dXJu
IGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKLQotICAgIG1fc2Fm
ZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2Nd
IGluaXRXaXRoRnJhbWU6W21fdmlldyBib3VuZHNdIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQg
Y29tcGxldGlvbkhhbmRsZXI6W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb21wbGV0
aW9uSGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkg
bXV0YWJsZSB7Ci0gICAgICAgIGlmICh3ZWFrVGhpcykKLSAgICAgICAgICAgIFtzdGQ6OmV4Y2hh
bmdlKHdlYWtUaGlzLT5tX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZyb21T
dXBlcnZpZXddOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwot
ICAgIH1dKTsKLSAgICBbbV92aWV3IGFkZFN1YnZpZXc6bV9zYWZlQnJvd3NpbmdXYXJuaW5nLmdl
dCgpXTsKLX0KLQotdm9pZCBXZWJWaWV3SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkK
LXsKLSAgICBbc3RkOjpleGNoYW5nZShtX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJl
bW92ZUZyb21TdXBlcnZpZXddOwotfQotCiBib29sIFdlYlZpZXdJbXBsOjppc0ZvY3VzZWQoKSBj
b25zdAogewogICAgIGlmIChtX2luQmVjb21lRmlyc3RSZXNwb25kZXIpCkBAIC0xNjU1LDcgKzE2
MzcsNiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZW5ld0dTdGF0ZSgpCiB2b2lkIFdlYlZpZXdJbXBs
OjpzZXRGcmFtZVNpemUoQ0dTaXplKQogewogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZENoYW5n
ZUZyYW1lU2l6ZV07Ci0gICAgW21fc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpbbV92aWV3
IGJvdW5kc11dOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpkaXNhYmxlRnJhbWVTaXplVXBkYXRl
cygpCkBAIC01MTU4LDcgKzUxMzksNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpmbGFnc0NoYW5nZWQo
TlNFdmVudCAqCiAjZGVmaW5lIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSX0lOVEVSTkFMKEV2
ZW50TmFtZSkgXAogICAgIHZvaWQgV2ViVmlld0ltcGw6OkV2ZW50TmFtZShOU0V2ZW50ICpldmVu
dCkgXAogICAgIHsgXAotICAgICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMgfHwgbV9z
YWZlQnJvd3NpbmdXYXJuaW5nKSBcCisgICAgICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50
cykgXAogICAgICAgICAgICAgcmV0dXJuOyBcCiAgICAgICAgIGlmIChOU1RleHRJbnB1dENvbnRl
eHQgKmNvbnRleHQgPSBbbV92aWV3IGlucHV0Q29udGV4dF0pIHsgXAogICAgICAgICAgICAgYXV0
byB3ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsgXApJbmRleDogU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMTUsOSArMTE1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyVGV4
dEluZGljYXRvcihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9u
KSBvdmVycmlkZTsKICAgICB2b2lkIHNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhm
bG9hdCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0
IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJL
aXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7Ci0g
ICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKLQogICAgIHZvaWQg
ZW50ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikg
b3ZlcnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVy
cmlkZTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExh
eWVyVHJlZUNvbnRleHQmKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBj
b3B5KQpAQCAtNjIsNyArNjIsNyBAQAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0tleWVkQXJj
aGl2ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCi0jZGVmaW5lIE1FU1NBR0Vf
Q0hFQ0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBtX3dlYlZpZXct
Pl9wYWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKQorI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFz
c2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgbV93ZWJWaWV3LmdldCgpLT5f
cGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKSkKIAogQGludGVyZmFjZSBXS0VkaXRDb21tYW5k
T2JqQyA6IE5TT2JqZWN0CiB7CkBAIC0xNjEsMTggKzE2MSwxOCBAQCBJbnRTaXplIFBhZ2VDbGll
bnRJbXBsOjp2aWV3U2l6ZSgpCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3Rp
dmUoKQogewogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTMzMDk4Ci0gICAgcmV0dXJuIGlzVmlld1Zpc2libGUoKSB8fCAobV93ZWJWaWV3ICYm
IFttX3dlYlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlXSk7CisgICAgcmV0dXJu
IGlzVmlld1Zpc2libGUoKSB8fCBbbV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRT
dGF0ZV07CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQogewogICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDk4
Ci0gICAgcmV0dXJuIGlzVmlld1dpbmRvd0FjdGl2ZSgpIHx8IChtX3dlYlZpZXcgJiYgW21fd2Vi
VmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVdKTsKKyAgICByZXR1cm4gaXNWaWV3
V2luZG93QWN0aXZlKCkgfHwgW21fd2ViVmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3Rh
dGVdOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkKIHsKLSAgICBp
ZiAoaXNWaWV3SW5XaW5kb3coKSAmJiAhbV93ZWJWaWV3Ll9pc0JhY2tncm91bmQpCisgICAgaWYg
KGlzVmlld0luV2luZG93KCkgJiYgIVttX3dlYlZpZXcgX2lzQmFja2dyb3VuZF0pCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIAogICAgIGlmIChbbV93ZWJWaWV3IF9pc1Nob3dpbmdWaWRlb1Bp
Y3R1cmVJblBpY3R1cmVdKQpAQCAtMTg3LDggKzE4Nyw4IEBAIGJvb2wgUGFnZUNsaWVudEltcGw6
OmlzVmlld1Zpc2libGUoKQogYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQog
ewogICAgIC8vIEZJWE1FOiBpbiBXZWJLaXRUZXN0UnVubmVyLCBtX3dlYlZpZXcgaXMgbmlsLCBz
byBjaGVjayB0aGUgY29udGVudCB2aWV3IGluc3RlYWQuCi0gICAgaWYgKG1fd2ViVmlldykKLSAg
ICAgICAgcmV0dXJuIFttX3dlYlZpZXcgd2luZG93XTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0g
bV93ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gW3dlYlZpZXcgd2luZG93XTsKIAogICAg
IHJldHVybiBbbV9jb250ZW50VmlldyB3aW5kb3ddOwogfQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZv
aWQgUGFnZUNsaWVudEltcGw6OmRpZENvbXBsZXRlU3ludGhldGkKIAogdm9pZCBQYWdlQ2xpZW50
SW1wbDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJGcmFt
ZVByb3h5JiBmcmFtZSwgQVBJOjpTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBGdW5jdGlvbjx2b2lk
KGJvb2wpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgW1t3cmFwcGVyKG1fd2ViVmlldy0+
X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gZGVj
aWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlP
cmlnaW4oKSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4Y2hhbmdlKGNvbXBs
ZXRpb25IYW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlld107CisgICAgW1t3cmFwcGVyKG1f
d2ViVmlldy5nZXQoKS0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9jYXRp
b25Qcm92aWRlcl0gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpv
cmlnaW4uc2VjdXJpdHlPcmlnaW4oKSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpzdGQ6
OmV4Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlldy5nZXQo
KS5nZXQoKV07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFN0YXJ0UHJvdmlzaW9uYWxM
b2FkRm9yTWFpbkZyYW1lKCkKQEAgLTQ2OSwxNiArNDY5LDYgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2V0VGV4dEluZGljYXRvckFuaQogewogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93
U2FmZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6
OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIo
V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19
Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCi17Ci0g
ICAgLy8gRklYTUU6IEltcGxlbWVudC4KLX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRy
ZWVDb250ZXh0KQogewogfQpAQCAtNjk1LDIzICs2ODUsMjMgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2Nyb2xsaW5nTm9kZVNjcm9sbAogCiBWZWN0b3I8U3RyaW5nPiBQYWdlQ2xpZW50SW1wbDo6
bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcnMoKQogewotICAgIHJldHVybiBtX3dl
YlZpZXcuX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Ll9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVu
dFByb3ZpZGVyczsKKyAgICByZXR1cm4gW21fd2ViVmlldyBfY29udGVudFByb3ZpZGVyUmVnaXN0
cnldLl9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVyczsKIH0KIAogdm9pZCBQYWdl
Q2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpCiB7CiAgICAgW21fd2ViVmll
dyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbl07Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpmcm9t
V2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpOwor
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2Up
Lm5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6
bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1f
d2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0
ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+
X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogfQog
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxO
YXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0aW9u
U3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBh
Z2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxO
YXZpZ2F0ZSwgaXRlbSk7CiAgICAgW21fd2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmRd
OwogfQogCkBAIC03MjIsMTIgKzcxMiwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0
aW9uR2VzdHVyZURpCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OndpbGxSZWNvcmROYXZpZ2F0aW9u
U25hcHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0aW9u
U3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlv
blNuYXBzaG90KGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2Vi
Vmlldy5nZXQoKS0+X3BhZ2UpLndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7CiB9
CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNo
b3QoKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3Bh
Z2UpLm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CisgICAgTmF2aWdhdGlv
blN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdl
c3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQoKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlk
Rmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCkKQEAgLTg0MCw3ICs4MzAs
NyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRCiAgICAgICAgIGNv
bXBsZXRpb25IYW5kbGVyKHBhc3N3b3JkKTsKICAgICB9KTsKIAotICAgIGlmIChXS1Bhc3N3b3Jk
VmlldyAqcGFzc3dvcmRWaWV3ID0gbV93ZWJWaWV3Ll9wYXNzd29yZFZpZXcpIHsKKyAgICBpZiAo
V0tQYXNzd29yZFZpZXcgKnBhc3N3b3JkVmlldyA9IFttX3dlYlZpZXcgX3Bhc3N3b3JkVmlld10p
IHsKICAgICAgICAgQVNTRVJUKGZpbGVOYW1lID09IFN0cmluZyB7IHBhc3N3b3JkVmlldy5kb2N1
bWVudE5hbWUgfSk7CiAgICAgICAgIFtwYXNzd29yZFZpZXcgc2hvd1Bhc3N3b3JkRmFpbHVyZUFs
ZXJ0XTsKICAgICAgICAgcGFzc3dvcmRWaWV3LnVzZXJEaWRFbnRlclBhc3N3b3JkID0gcGFzc3dv
cmRIYW5kbGVyLmdldCgpOwpAQCAtODQ4LDcgKzgzOCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6
OnJlcXVlc3RQYXNzd29yZEZvclEKICAgICB9CiAKICAgICBbbV93ZWJWaWV3IF9zaG93UGFzc3dv
cmRWaWV3V2l0aERvY3VtZW50TmFtZTpmaWxlTmFtZSBwYXNzd29yZEhhbmRsZXI6cGFzc3dvcmRI
YW5kbGVyLmdldCgpXTsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZp
ZXctPl9wYWdlKS5kaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudCgpOworICAg
IE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLmRp
ZFJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KCk7CiB9CiAjZW5kaWYKIApJbmRl
eDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJ
KHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xp
ZW50SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDYgQEAgcHJpdmF0ZToK
ICAgICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgbm90
aWZ5SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJyaWRlOwogICAg
IHZvaWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93U2FmZUJy
b3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4m
Jik+JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkgb3Zl
cnJpZGU7CiAgICAgCiAjaWYgV0tfQVBJX0VOQUJMRUQKICAgICBib29sIHNob3dTaGFyZVNoZWV0
KGNvbnN0IFdlYkNvcmU6OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmLCBXVEY6OkNvbXBsZXRpb25I
YW5kbGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjM3ODYzKQor
KysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC00ODksMTggKzQ4OSw2IEBAIFJlZjxWYWxpZGF0aW9uQnViYmxlPiBQYWdl
Q2xpZW50SW1wbDo6Y3IKICAgICByZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRlKG1fdmll
dywgbWVzc2FnZSwgc2V0dGluZ3MpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2Fm
ZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxl
dGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJD
b3JlOjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9pbXBsKQot
ICAgICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMp
OwotICAgIG1faW1wbC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcocmVzdWx0LCBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJy
b3dzaW5nV2FybmluZygpCi17Ci0gICAgbV9pbXBsLT5jbGVhclNhZmVCcm93c2luZ1dhcm5pbmco
KTsKLX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRvcihSZWY8VGV4dElu
ZGljYXRvcj4gdGV4dEluZGljYXRvciwgV2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0xpZmV0
aW1lIGxpZmV0aW1lKQogewogICAgIG1faW1wbC0+c2V0VGV4dEluZGljYXRvcih0ZXh0SW5kaWNh
dG9yLmdldCgpLCBsaWZldGltZSk7CkBAIC01NjQsNyArNTUyLDcgQEAgdm9pZCBQYWdlQ2xpZW50
SW1wbDo6c2VsZWN0aW9uRGlkQ2hhbmdlKAogI2lmIFdLX0FQSV9FTkFCTEVECiBib29sIFBhZ2VD
bGllbnRJbXBsOjpzaG93U2hhcmVTaGVldChjb25zdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJMJiBz
aGFyZURhdGEsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9u
SGFuZGxlcikKIHsKLSAgICBtX2ltcGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92
ZShjb21wbGV0aW9uSGFuZGxlciksIG1fd2ViVmlldyk7CisgICAgbV9pbXBsLT5zaG93U2hhcmVT
aGVldChzaGFyZURhdGEsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlZpZXcuZ2V0
KCkuZ2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCkBAIC03NTEsMTYgKzczOSwx
NiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiAgICAgbV9pbXBs
LT5kaXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbih0cnVlKTsK
IAogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdh
dGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1
cmVEaWRCZWdpbigpOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisg
ICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZp
Z2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1w
bDo6bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9y
d2FyZExpc3RJdGVtJiBpdGVtKQogewogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2Vi
VmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5f
cGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAg
aWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0
YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmln
YXRlKTsKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03NzAsOCArNzU4LDggQEAgdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6
bmF2aWdhdGlvbkdlc3R1cmVEaWRFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJk
TGlzdEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3
KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdl
KS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIGlmIChh
dXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6
ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxs
TmF2aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRlKTsK
ICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03ODUsOCArNzczLDggQEAgdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewog
I2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlv
blN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRp
b25TbmFwc2hvdChpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgp
KQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCp3ZWJWaWV3LT5fcGFnZSku
d2lsbFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKICNlbHNlCiAgICAgVU5VU0VEX1BB
UkFNKGl0ZW0pOwogI2VuZGlmCkBAIC03OTUsOCArNzgzLDggQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6d2lsbFJlY29yZE5hdmlnYXRpbwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVtb3ZlTmF2
aWdhdGlvbkdlc3R1cmVTbmFwc2hvdCgpCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAo
bV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZp
ZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOworICAgIGlm
IChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0
ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90
V2FzUmVtb3ZlZCgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzODAwMykKKysrIFRvb2xzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE4LTExLTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW2lPU10gSW1w
bGVtZW50IHNhZmUgYnJvd3NpbmcgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE0NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2Ev
U2FmZUJyb3dzaW5nLm1tOgorICAgICAgICAoY2hlY2tUaXRsZUFuZENsaWNrKToKKyAgICAgICAg
KFRFU1QpOgorCiAyMDE4LTExLTA4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYSBxdWljayBidWlsZCBmaXggZm9yIHIyMzc5ODMKSW5k
ZXg6IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2Fm
ZUJyb3dzaW5nLm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM3LDgg
KzEzNyw2IEBAIC0gKHZvaWQpbG9va1VwVVJMOihOU1VSTCAqKVVSTCBjb21wbGV0aW8KIAogQGVu
ZAogCi0jaWYgUExBVEZPUk0oTUFDKSAvLyBGSVhNRTogVGVzdCBvbiBpT1Mgb25jZSBpbXBsZW1l
bnRlZC4KLQogc3RhdGljIE5TVVJMICpzaW1wbGVVUkwoKQogewogICAgIHJldHVybiBbW05TQnVu
ZGxlIG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAi
aHRtbCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKQEAgLTE1NCwz
MSArMTUyLDQ2IEBAIHN0YXRpYyBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzYWZlQnJvd3NpbmcKICAg
ICBbd2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBs
ZVVSTCgpXV07CiAgICAgd2hpbGUgKCFbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRl
c3RpbmddKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworI2lm
ICFQTEFURk9STShNQUMpCisgICAgW1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVz
dGluZ10gZGlkTW92ZVRvV2luZG93XTsKKyNlbmRpZgogICAgIHJldHVybiB3ZWJWaWV3OwogfQog
CisjaWYgUExBVEZPUk0oTUFDKQorc3RhdGljIHZvaWQgY2hlY2tUaXRsZUFuZENsaWNrKE5TQnV0
dG9uICpidXR0b24sIGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgRVhQRUNUX1NU
UkVRKGJ1dHRvbi50aXRsZS5VVEY4U3RyaW5nLCBleHBlY3RlZFRpdGxlKTsKKyAgICBbYnV0dG9u
IHBlcmZvcm1DbGljazpuaWxdOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGNoZWNrVGl0bGVBbmRD
bGljayhVSUJ1dHRvbiAqYnV0dG9uLCBjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQoreworICAg
IEVYUEVDVF9TVFJFUShbYnV0dG9uIGF0dHJpYnV0ZWRUaXRsZUZvclN0YXRlOlVJQ29udHJvbFN0
YXRlTm9ybWFsXS5zdHJpbmcuVVRGOFN0cmluZywgZXhwZWN0ZWRUaXRsZSk7CisgICAgVUlWaWV3
ICp0YXJnZXQgPSBidXR0b24uc3VwZXJ2aWV3LnN1cGVydmlldzsKKyAgICBTRUwgc2VsZWN0b3Ig
PSBOU1NlbGVjdG9yRnJvbVN0cmluZyhzdHJjbXAoZXhwZWN0ZWRUaXRsZSwgIkdvIEJhY2siKSA/
IEAic2hvd0RldGFpbHNDbGlja2VkIiA6IEAiZ29CYWNrQ2xpY2tlZCIpOworICAgIFt0YXJnZXQg
cGVyZm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKK30KKyNlbmRpZgorCiBURVNUKFNhZmVCcm93c2lu
ZywgR29CYWNrKQogewogICAgIGF1dG8gd2ViVmlldyA9IHNhZmVCcm93c2luZ1ZpZXcoKTsKLSAg
ICBOU1ZpZXcgKmJvdHRvbSA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGlu
Z10uc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MubGFzdE9iamVjdDsKLSAgICBOU0J1dHRv
biAqZ29CYWNrID0gKE5TQnV0dG9uICopYm90dG9tLnN1YnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAg
RVhQRUNUX1NUUkVRKGdvQmFjay50aXRsZS5VVEY4U3RyaW5nLCAiR28gYmFjayIpOwotICAgIFtn
b0JhY2sgcGVyZm9ybUNsaWNrOm5pbF07CisgICAgYXV0byB3YXJuaW5nID0gW3dlYlZpZXcgX3Nh
ZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBhdXRvIGJveCA9IHdhcm5pbmcuc3Vi
dmlld3MuZmlyc3RPYmplY3Q7CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKGJveC5zdWJ2aWV3c1sz
XSwgIkdvIEJhY2siKTsKICAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5p
bmdGb3JUZXN0aW5nXSwgbmlsKTsKIH0KIAogVEVTVChTYWZlQnJvd3NpbmcsIFZpc2l0VW5zYWZl
V2Vic2l0ZSkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBzYWZlQnJvd3NpbmdWaWV3KCk7Ci0gICAg
TlNWaWV3ICp3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5n
XTsKLSAgICBOU1ZpZXcgKmJveCA9IHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAg
TlNCdXR0b24gKnNob3dEZXRhaWxzID0gKE5TQnV0dG9uICopYm94LnN1YnZpZXdzLmxhc3RPYmpl
Y3Quc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX1NUUkVRKHNob3dEZXRhaWxzLnRp
dGxlLlVURjhTdHJpbmcsICJTaG93IGRldGFpbHMiKTsKLSAgICBFWFBFQ1RfRVEoYm94LnN1YnZp
ZXdzLmNvdW50LCAzdWxsKTsKLSAgICBbc2hvd0RldGFpbHMgcGVyZm9ybUNsaWNrOm5pbF07Ci0g
ICAgRVhQRUNUX0VRKGJveC5zdWJ2aWV3cy5jb3VudCwgNHVsbCk7CisgICAgYXV0byB3YXJuaW5n
ID0gW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBFWFBFQ1Rf
RVEod2FybmluZy5zdWJ2aWV3cy5jb3VudCwgMXVsbCk7CisgICAgY2hlY2tUaXRsZUFuZENsaWNr
KHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3NbNF0sICJTaG93IERldGFpbHMi
KTsKKyAgICBFWFBFQ1RfRVEod2FybmluZy5zdWJ2aWV3cy5jb3VudCwgMnVsbCk7CiAgICAgRVhQ
RUNUX0ZBTFNFKGNvbW1pdHRlZE5hdmlnYXRpb24pOwotICAgIFt3YXJuaW5nIHBlcmZvcm1TZWxl
Y3RvcjpOU1NlbGVjdG9yRnJvbVN0cmluZyhAImNsaWNrZWRPbkxpbms6Iikgd2l0aE9iamVjdDpA
IldLVmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKKyAgICBbd2FybmluZyBwZXJmb3JtU2Vs
ZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoQCJjbGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6
W05TVVJMIFVSTFdpdGhTdHJpbmc6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIl1dOwog
ICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY29tbWl0dGVkTmF2aWdhdGlvbik7CiB9CiAK
QEAgLTE5MSw4ICsyMDQsNiBAQCBURVNUKFNhZmVCcm93c2luZywgTmF2aWdhdGlvbkNsZWFyc1dh
cm5pCiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CiB9CiAKLSNl
bmRpZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgTnVsbExvb2t1cENvbnRleHQgOiBO
U09iamVjdAogQGVuZAogQGltcGxlbWVudGF0aW9uIE51bGxMb29rdXBDb250ZXh0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354452</attachid>
            <date>2018-11-10 00:28:02 -0800</date>
            <delta_ts>2018-11-12 13:51:51 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181110002801.patch</filename>
            <type>text/plain</type>
            <size>60751</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwMiBAQAorMjAxOC0xMS0wOCAgQWxleCBDaHJp
c3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgorCisgICAgICAgIFtpT1NdIEltcGxl
bWVudCBzYWZlIGJyb3dzaW5nIGluIFdlYktpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNDQxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAg
ICAgKiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQ
cm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250
ZXh0SGFuZGxlc1NhZmVCcm93c2luZyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9X
S1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZl
QnJvd3NpbmdXYXJuaW5nXSk6CisgICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10p
OgorICAgICAgICAoLVtXS1dlYlZpZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoLVtXS1dl
YlZpZXcgc2Nyb2xsV2hlZWw6XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBzd2lwZVdpdGhFdmVu
dDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IG1vdXNlTW92ZWQ6XSk6CisgICAgICAgICgtW1dL
V2ViVmlldyBtb3VzZURvd246XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBtb3VzZVVwOl0pOgor
ICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgbW91c2VFbnRlcmVkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgbW91c2VFeGl0ZWQ6XSk6
CisgICAgICAgICgtW1dLV2ViVmlldyBvdGhlck1vdXNlRG93bjpdKToKKyAgICAgICAgKC1bV0tX
ZWJWaWV3IG90aGVyTW91c2VEcmFnZ2VkOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgb3RoZXJN
b3VzZVVwOl0pOgorICAgICAgICAoLVtXS1dlYlZpZXcgcmlnaHRNb3VzZURvd246XSk6CisgICAg
ICAgICgtW1dLV2ViVmlldyByaWdodE1vdXNlRHJhZ2dlZDpdKToKKyAgICAgICAgKC1bV0tXZWJW
aWV3IHJpZ2h0TW91c2VVcDpdKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IHByZXNzdXJlQ2hhbmdl
V2l0aEV2ZW50Ol0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJvd3Npbmdd
KToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10p
OgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaDoKKyAg
ICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAgICAgICAq
IFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzaG93U2FmZUJyb3dzaW5nV2FybmluZyk6CisgICAgICAg
IChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OmFsbG9jRmlsZVdyYXBwZXJJ
bnN0YW5jZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsQ29jb2E6OnNl
cmlhbGl6YWJsZUZpbGVXcmFwcGVyQ2xhc3NlcyBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNz
L0NvY29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5tbToKKyAgICAgICAgKGNvbmZpcm1NYWx3YXJl
U2VudGluZWwpOgorICAgICAgICAodmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwpOgorICAgICAg
ICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ0V4Y2xhbWF0
aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAgICAgICAgKGh1
Z1ZlcnRpY2FsKToKKyAgICAgICAgKGh1Z1RleHQpOgorICAgICAgICAoY2VudGVyQWxpZ25tZW50
KToKKyAgICAgICAgKGFkZEVkZ2VJbnNldHMpOgorICAgICAgICAoc2V0QmFja2dyb3VuZCk6Cisg
ICAgICAgIChtYWtlU3RhY2tWaWV3KToKKyAgICAgICAgKG1ha2VCb3gpOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1bHQ6Y29t
cGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlv
dXRUZXh0XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBsYXlvdXRdKToKKyAg
ICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFN1YnZpZXdzXSk6CisgICAgICAg
ICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtX
S1NhZmVCcm93c2luZ1dhcm5pbmcgc2hvd0RldGFpbHNDbGlja2VkXSk6CisgICAgICAgICgrW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOmxpbmtUYXJnZXQ6
XSk6CisgICAgICAgICgrW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJpbmc6XSk6
CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgaW50cmluc2ljQ29udGVudFNpemVd
KToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0Vmlld0RlbGVnYXRlIGluaXRXaXRoVGFy
Z2V0Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3RGVsZWdhdGUgdGV4dFZp
ZXc6Y2xpY2tlZE9uTGluazphdEluZGV4Ol0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1Rl
eHRWaWV3RGVsZWdhdGUgdGV4dFZpZXc6c2hvdWxkSW50ZXJhY3RXaXRoVVJMOmluUmFuZ2U6aW50
ZXJhY3Rpb246XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgY2xpY2tlZE9u
TGluazphdEluZGV4Ol0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XZWJW
aWV3SW1wbC5oOgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2FmZUJyb3dzaW5nV2Fy
bmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1t
OgorICAgICAgICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0RnJhbWVTaXplKToKKyAgICAgICAg
KFdlYktpdDo6V2ViVmlld0ltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZyk6
IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oOgor
ICAgICAgICAqIFVJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW06CisgICAgICAgIChX
ZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUpOgorICAgICAgICAoV2Vi
S2l0OjpQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Rm9jdXNlZCk6CisgICAgICAgIChXZWJLaXQ6OlBh
Z2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVu
dEltcGw6OmlzVmlld0luV2luZG93KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6
OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lvblJlcXVlc3QpOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bWltZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRl
cnMpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbik6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2Vz
dHVyZVdpbGxFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6bmF2aWdhdGlv
bkdlc3R1cmVEaWRFbmQpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBs
OjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6
UGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKTog
RGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZyk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW06
CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVTaGVldCk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToK
KyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVu
ZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURp
ZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdh
dGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92
ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50
SW1wbDo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcpOiBEZWxldGVkLgorICAgICAgICAoV2ViS2l0
OjpQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKTogRGVsZXRlZC4KKwog
MjAxOC0xMS0wNiAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3JnPgog
CiAgICAgICAgIEFkZCBPYmpDIFNQSSBlcXVpdmFsZW50IG9mIFdLQ29udGV4dEhhbmRsZXNTYWZl
QnJvd3NpbmcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAko
cmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMu
eWFtbAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBYU1NBdWRpdG9yRW5hYmxlZDoK
IAogU2FmZUJyb3dzaW5nRW5hYmxlZDoKICAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVECisgIGRlZmF1bHRWYWx1ZTogdHJ1ZQogICB3ZWJj
b3JlQmluZGluZzogbm9uZQogCiBQcml2YXRlQnJvd3NpbmdFbmFibGVkOgpJbmRleDogU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXNEZWZhdWx0VmFsdWVzLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVm
YXVsdFZhbHVlcy5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBACiAjZW5kaWYKIAog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jZGVmaW5lIERFRkFVTFRfU0FGRV9CUk9XU0lOR19F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQUxMT1dTX1BJQ1RVUkVfSU5fUElDVFVSRV9N
RURJQV9QTEFZQkFDSyB0cnVlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNFX0tFWV9OQVZJR0FU
SU9OX0VOQUJMRUQgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9GUkFNRV9GTEFUVEVOSU5HIHRydWUK
QEAgLTc4LDcgKzc3LDYgQEAKICNkZWZpbmUgREVGQVVMVF9JTlRFUkFDVElWRV9NRURJQV9DQVBU
VVJFX1NUUkVBTV9SRVBST01QVF9JTlRFUlZBTF9JTl9NSU5VVEVTIDEKICNkZWZpbmUgRVhQRVJJ
TUVOVEFMX0ZVTExTQ1JFRU5fQVBJX0hJRERFTiBmYWxzZQogI2Vsc2UKLSNkZWZpbmUgREVGQVVM
VF9TQUZFX0JST1dTSU5HX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNU
VVJFX0lOX1BJQ1RVUkVfTUVESUFfUExBWUJBQ0sgZmFsc2UKICNkZWZpbmUgREVGQVVMVF9CQUNL
U1BBQ0VfS0VZX05BVklHQVRJT05fRU5BQkxFRCB0cnVlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVf
RkxBVFRFTklORyBmYWxzZQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvbWFj
L1dLQ29udGV4dFByaXZhdGVNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvbWFjL1dLQ29udGV4dFByaXZhdGVNYWMubW0JKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFj
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNSArMTczLDUgQEAgYm9vbCBXS0NvbnRleHRTaG91
bGRTdWdnZXN0QmxvY2tXZWJHTCgpCiAKIGJvb2wgV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
ZygpCiB7Ci0gICAgcmV0dXJuIERFRkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tXZWJWaWV3Lm1tCShyZXZpc2lvbiAyMzc4ODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNjUsNiArMjY1
LDcgQEAgc3RhdGljIHN0ZDo6b3B0aW9uYWw8V2ViQ29yZTo6U2Nyb2xsYmFyTwogICAgIFdlYWtP
YmpDUHRyPGlkIDxfV0tJbnB1dERlbGVnYXRlPj4gX2lucHV0RGVsZWdhdGU7CiAKICAgICBzdGQ6
Om9wdGlvbmFsPEJPT0w+IF9yZXNvbHV0aW9uRm9yU2hhcmVTaGVldEltbWVkaWF0ZUNvbXBsZXRp
b25Gb3JUZXN0aW5nOworICAgIFJldGFpblB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF9zYWZl
QnJvd3NpbmdXYXJuaW5nOwogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKICAgICBSZXRhaW5Q
dHI8X1dLUmVtb3RlT2JqZWN0UmVnaXN0cnk+IF9yZW1vdGVPYmplY3RSZWdpc3RyeTsKQEAgLTEy
NTksNiArMTI2MCwyMSBAQCAtICh2b2lkKV9kaWRDaGFuZ2VFZGl0b3JTdGF0ZQogICAgICAgICBb
dWlEZWxlZ2F0ZSBfd2ViVmlldzpzZWxmIGVkaXRvclN0YXRlRGlkQ2hhbmdlOmRpY3Rpb25hcnlS
ZXByZXNlbnRhdGlvbkZvckVkaXRvclN0YXRlKF9wYWdlLT5lZGl0b3JTdGF0ZSgpKV07CiB9CiAK
Ky0gKHZvaWQpX3Nob3dTYWZlQnJvd3NpbmdXYXJuaW5nOihjb25zdCBXZWJLaXQ6OlNhZmVCcm93
c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpY29tcGxldGlvbkhhbmRsZXIKK3sKKyAgICBfc2FmZUJyb3dzaW5nV2FybmluZyA9IGFkb3B0
TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGluaXRXaXRoRnJhbWU6c2VsZi5ib3Vu
ZHMgc2FmZUJyb3dzaW5nUmVzdWx0OnJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjpbd2Vha1NlbGYg
PSBXZWFrT2JqQ1B0cjxXS1dlYlZpZXc+KHNlbGYpLCBjb21wbGV0aW9uSGFuZGxlciA9IFdURk1v
dmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChhdXRvIHN0cm9uZ1NlbGYgPSB3ZWFrU2VsZi5nZXQoKSkKKyAgICAgICAgICAgIFtzdGQ6
OmV4Y2hhbmdlKHN0cm9uZ1NlbGYtPl9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1v
dmVGcm9tU3VwZXJ2aWV3XTsKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RGTW92ZShyZXN1
bHQpKTsKKyAgICB9XSk7CisgICAgW3NlbGYgYWRkU3Vidmlldzpfc2FmZUJyb3dzaW5nV2Fybmlu
Zy5nZXQoKV07Cit9CisKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZworeworICAg
IFtzdGQ6OmV4Y2hhbmdlKF9zYWZlQnJvd3NpbmdXYXJuaW5nLCBudWxscHRyKSByZW1vdmVGcm9t
U3VwZXJ2aWV3XTsKK30KKwogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAKIC0gKHZv
aWQpX2RpZEluc2VydEF0dGFjaG1lbnQ6KEFQSTo6QXR0YWNobWVudCYpYXR0YWNobWVudCB3aXRo
U291cmNlOihOU1N0cmluZyAqKXNvdXJjZQpAQCAtMTMzNSw2ICsxMzUxLDcgQEAgLSAodm9pZClz
ZXRCb3VuZHM6KENHUmVjdClib3VuZHMKIAogLSAodm9pZClsYXlvdXRTdWJ2aWV3cwogeworICAg
IFtfc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpzZWxmLmJvdW5kc107CiAgICAgW3N1cGVy
IGxheW91dFN1YnZpZXdzXTsKICAgICBbc2VsZiBfZnJhbWVPckJvdW5kc0NoYW5nZWRdOwogfQpA
QCAtMzI5MCw2ICszMzA3LDcgQEAgLSAodm9pZClwcmVwYXJlQ29udGVudEluUmVjdDooTlNSZWN0
KXJlYwogLSAodm9pZClzZXRGcmFtZVNpemU6KE5TU2l6ZSlzaXplCiB7CiAgICAgW3N1cGVyIHNl
dEZyYW1lU2l6ZTpzaXplXTsKKyAgICBbX3NhZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2Vs
Zi5ib3VuZHNdOwogICAgIF9pbXBsLT5zZXRGcmFtZVNpemUoTlNTaXplVG9DR1NpemUoc2l6ZSkp
OwogfQogCkBAIC0zNTgzLDc2ICszNjAxLDEyMSBAQCAtIChCT09MKV93YW50c0tleURvd25Gb3JF
dmVudDooTlNFdmVudCAqCiAKIC0gKHZvaWQpc2Nyb2xsV2hlZWw6KE5TRXZlbnQgKilldmVudAog
eworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAg
X2ltcGwtPnNjcm9sbFdoZWVsKGV2ZW50KTsKIH0KIAogLSAodm9pZClzd2lwZVdpdGhFdmVudDoo
TlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAg
ICByZXR1cm47CisKICAgICBfaW1wbC0+c3dpcGVXaXRoRXZlbnQoZXZlbnQpOwogfQogCiAtICh2
b2lkKW1vdXNlTW92ZWQ6KE5TRXZlbnQgKilldmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5n
V2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2ltcGwtPm1vdXNlTW92ZWQoZXZlbnQp
OwogfQogCiAtICh2b2lkKW1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9z
YWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+bW91c2VE
b3duKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAg
ICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBs
LT5tb3VzZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZCltb3VzZURyYWdnZWQ6KE5TRXZlbnQgKill
dmVudAogeworICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOwor
CiAgICAgX2ltcGwtPm1vdXNlRHJhZ2dlZChldmVudCk7CiB9CiAKIC0gKHZvaWQpbW91c2VFbnRl
cmVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisg
ICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUVudGVyZWQoZXZlbnQpOwogfQogCiAt
ICh2b2lkKW1vdXNlRXhpdGVkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93
c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5tb3VzZUV4aXRlZChl
dmVudCk7CiB9CiAKIC0gKHZvaWQpb3RoZXJNb3VzZURvd246KE5TRXZlbnQgKilldmVudAogewor
ICAgIGlmIChfc2FmZUJyb3dzaW5nV2FybmluZykKKyAgICAgICAgcmV0dXJuOworCiAgICAgX2lt
cGwtPm90aGVyTW91c2VEb3duKGV2ZW50KTsKIH0KIAogLSAodm9pZClvdGhlck1vdXNlRHJhZ2dl
ZDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAg
ICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3VzZURyYWdnZWQoZXZlbnQpOwogfQog
CiAtICh2b2lkKW90aGVyTW91c2VVcDooTlNFdmVudCAqKWV2ZW50CiB7CisgICAgaWYgKF9zYWZl
QnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAgICBfaW1wbC0+b3RoZXJNb3Vz
ZVVwKGV2ZW50KTsKIH0KIAogLSAodm9pZClyaWdodE1vdXNlRG93bjooTlNFdmVudCAqKWV2ZW50
CiB7CisgICAgaWYgKF9zYWZlQnJvd3NpbmdXYXJuaW5nKQorICAgICAgICByZXR1cm47CisKICAg
ICBfaW1wbC0+cmlnaHRNb3VzZURvd24oZXZlbnQpOwogfQogCiAtICh2b2lkKXJpZ2h0TW91c2VE
cmFnZ2VkOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcp
CisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdodE1vdXNlRHJhZ2dlZChldmVudCk7
CiB9CiAKIC0gKHZvaWQpcmlnaHRNb3VzZVVwOihOU0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAo
X3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAgIHJldHVybjsKKwogICAgIF9pbXBsLT5yaWdo
dE1vdXNlVXAoZXZlbnQpOwogfQogCiAtICh2b2lkKXByZXNzdXJlQ2hhbmdlV2l0aEV2ZW50OihO
U0V2ZW50ICopZXZlbnQKIHsKKyAgICBpZiAoX3NhZmVCcm93c2luZ1dhcm5pbmcpCisgICAgICAg
IHJldHVybjsKKwogICAgIF9pbXBsLT5wcmVzc3VyZUNoYW5nZVdpdGhFdmVudChldmVudCk7CiB9
CiAKQEAgLTQ2MzUsNyArNDY5OCw3IEBAIC0gKHZvaWQpX3Bhc3RlQXNRdW90YXRpb246KGlkKXNl
bmRlcgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERFRkFV
TFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2b2lk
KV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2YVNj
cmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikpY29t
cGxldGlvbkhhbmRsZXIKQEAgLTY2NjYsMTUgKzY3MjksMTIgQEAgLSAodm9pZClfc2V0U2hhcmVT
aGVldENvbXBsZXRlc0ltbWVkaWF0ZQogCiAjaWYgUExBVEZPUk0oTUFDKQogLSAoTlNWaWV3ICop
X3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nCi17Ci0gICAgcmV0dXJuIF9pbXBsLT5zYWZl
QnJvd3NpbmdXYXJuaW5nKCk7Ci19CiAjZWxzZQogLSAoVUlWaWV3ICopX3NhZmVCcm93c2luZ1dh
cm5pbmdGb3JUZXN0aW5nCisjZW5kaWYKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBf
c2FmZUJyb3dzaW5nV2FybmluZy5nZXQoKTsKIH0KLSNlbmRpZgogCiAtIChfV0tJbnNwZWN0b3Ig
KilfaW5zcGVjdG9yCiB7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlld0ludGVybmFsLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwuaCIKICNpbXBvcnQgIl9XS1dl
YlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0IDx3dGYvQ29tcGxldGlvbkhh
bmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIu
aD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQog
I2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBAQCBjbGFzcyBBdHRhY2htZW50
OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3MgQ29udGludWVVbnNhZmVMb2Fk
IDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNsYXNzIFZpZXdTbmFwc2hvdDsK
IGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87CiB9CiAKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2ViVmlld0NvbnRlbnRQcm92aWRl
clJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNsYXNzIF9XS0ZyYW1lSGFuZGxl
OwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87CiAtICh2b2lkKV9kaWRJbnNl
cnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJjZTooTlNT
dHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hvd1NhZmVCcm93c2luZ1dhcm5p
bmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JilyZXN1bHQgY29tcGxldGlvbkhh
bmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9uSGFuZGxlcjsKKy0gKHZvaWQp
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpvcHRpb25hbDxCT09MPilfcmVz
b2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9yVGVzdGluZzsKIAogLSAo
V0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJKHJldmlzaW9uIDIzNzg2MykK
KysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAko
d29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRl
ICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpDUHRyLmg+CiAKIEBjbGFzcyBX
S1dlYlZpZXc7CiAKQEAgLTQ4LDkgKzQ5LDExIEBAIHB1YmxpYzoKICAgICBOU0ZpbGVXcmFwcGVy
ICphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdCBmaW5hbDsKICAgICBOU1NldCAqc2Vy
aWFsaXphYmxlRmlsZVdyYXBwZXJDbGFzc2VzKCkgY29uc3QgZmluYWw7CiAjZW5kaWYKKyAgICB2
b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jlc3VsdCYsIENv
bXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwg
V2ViQ29yZTo6VVJMPiYmKT4mJikgZmluYWw7CisgICAgdm9pZCBjbGVhclNhZmVCcm93c2luZ1dh
cm5pbmcoKSBmaW5hbDsKIAogcHJvdGVjdGVkOgotICAgIFdLV2ViVmlldyAqbV93ZWJWaWV3Owor
ICAgIFdlYWtPYmpDUHRyPFdLV2ViVmlldz4gbV93ZWJWaWV3OwogfTsKIAogfQpJbmRleDogU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29h
Lm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9Q
YWdlQ2xpZW50SW1wbENvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw2ICsyNiw3IEBACiAj
aW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBhZ2VDbGllbnRJbXBsQ29jb2EuaCIKIAorI2lt
cG9ydCAiU2FmZUJyb3dzaW5nUmVzdWx0LmgiCiAjaW1wb3J0ICJXS1dlYlZpZXdDb25maWd1cmF0
aW9uUHJpdmF0ZS5oIgogI2ltcG9ydCAiV0tXZWJWaWV3SW50ZXJuYWwuaCIKIApAQCAtNDUsNiAr
NDYsMjUgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjppc1BsYXlpbmdBdWRpbwogI2VuZGlm
CiB9CiAKK3ZvaWQgUGFnZUNsaWVudEltcGxDb2NvYTo6c2hvd1NhZmVCcm93c2luZ1dhcm5pbmco
Y29uc3QgU2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQo
VmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKK3sKKyNpZiBXS19BUElfRU5BQkxFRAorICAgIGlmIChhdXRvIHdl
YlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIFt3ZWJWaWV3IF9zaG93U2FmZUJyb3dz
aW5nV2FybmluZzpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6V1RGTW92ZShjb21wbGV0aW9uSGFu
ZGxlcildOworICAgIGVsc2UKKyAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNh
ZmVMb2FkOjpObyk7CisjZWxzZQorICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZl
TG9hZDo6WWVzKTsKKyNlbmRpZgorfQorCit2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmNsZWFy
U2FmZUJyb3dzaW5nV2FybmluZygpCit7CisjaWYgV0tfQVBJX0VOQUJMRUQKKyAgICBbbV93ZWJW
aWV3IF9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmddOworI2VuZGlmCit9CisKICNpZiBFTkFCTEUo
QVRUQUNITUVOVF9FTEVNRU5UKQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsQ29jb2E6OmRpZEluc2Vy
dEF0dGFjaG1lbnQoQVBJOjpBdHRhY2htZW50JiBhdHRhY2htZW50LCBjb25zdCBTdHJpbmcmIHNv
dXJjZSkKQEAgLTY5LDcgKzg5LDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbENvY29hOjpkaWRSZW1v
dmVBdHRhYwogTlNGaWxlV3JhcHBlciAqUGFnZUNsaWVudEltcGxDb2NvYTo6YWxsb2NGaWxlV3Jh
cHBlckluc3RhbmNlKCkgY29uc3QKIHsKICNpZiBXS19BUElfRU5BQkxFRAotICAgIENsYXNzIGNs
cyA9IG1fd2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzcyA/
OiBbTlNGaWxlV3JhcHBlciBzZWxmXTsKKyAgICBDbGFzcyBjbHMgPSBbbV93ZWJWaWV3IGNvbmZp
Z3VyYXRpb25dLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFzcyA/OiBbTlNGaWxlV3JhcHBlciBz
ZWxmXTsKICAgICByZXR1cm4gW2NscyBhbGxvY107CiAjZWxzZQogICAgIHJldHVybiBuaWw7CkBA
IC04MCw3ICsxMDAsNyBAQCBOU1NldCAqUGFnZUNsaWVudEltcGxDb2NvYTo6c2VyaWFsaXphYmxl
CiB7CiAgICAgQ2xhc3MgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MgPSBOU0ZpbGVXcmFwcGVyLnNl
bGY7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJD
bGFzcyA9IG1fd2ViVmlldy5jb25maWd1cmF0aW9uLl9hdHRhY2htZW50RmlsZVdyYXBwZXJDbGFz
czsKKyAgICBDbGFzcyBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyA9IFttX3dlYlZpZXcgY29u
ZmlndXJhdGlvbl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNsYXNzOwogICAgIGlmIChjb25maWd1
cmVkRmlsZVdyYXBwZXJDbGFzcyAmJiBjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcyAhPSBkZWZh
dWx0RmlsZVdyYXBwZXJDbGFzcykKICAgICAgICAgcmV0dXJuIFtOU1NldCBzZXRXaXRoT2JqZWN0
czpjb25maWd1cmVkRmlsZVdyYXBwZXJDbGFzcywgZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MsIG5p
bF07CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJy
b3dzaW5nV2FybmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0Nv
Y29hL1dLU2FmZUJyb3dzaW5nV2FybmluZy5oCShyZXZpc2lvbiAyMzc4NjMpCisrKyBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkod29ya2luZyBj
b3B5KQpAQCAtNDQsMTggKzQ0LDIwIEBAIGNsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGVudW0g
Y2xhc3MgQ29udGludWVVbnNhZmVMb2FkIDogYm9vbDsKIH0KIAorT0JKQ19DTEFTUyBXS1NhZmVC
cm93c2luZ1RleHRWaWV3OworCiAjaWYgUExBVEZPUk0oTUFDKQogdXNpbmcgUmVjdFR5cGUgPSBO
U1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gTlNTdGFja1ZpZXc7CitAaW50ZXJmYWNlIFdL
U2FmZUJyb3dzaW5nV2FybmluZyA6IE5TVmlldzxOU1RleHRWaWV3RGVsZWdhdGU+CiAjZWxzZQog
dXNpbmcgUmVjdFR5cGUgPSBDR1JlY3Q7Ci11c2luZyBTdGFja1ZpZXdUeXBlID0gVUlTdGFja1Zp
ZXc7CitAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nV2FybmluZyA6IFVJU2Nyb2xsVmlldzxVSVRl
eHRWaWV3RGVsZWdhdGU+CiAjZW5kaWYKLQotQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1dhcm5p
bmcgOiBTdGFja1ZpZXdUeXBlIHsKK3sKIEBwYWNrYWdlCiAgICAgQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYp
PiBfY29tcGxldGlvbkhhbmRsZXI7CiAgICAgUmVmUHRyPGNvbnN0IFdlYktpdDo6U2FmZUJyb3dz
aW5nUmVzdWx0PiBfcmVzdWx0OworICAgIFJldGFpblB0cjxOU011dGFibGVBcnJheTxXS1NhZmVC
cm93c2luZ1RleHRWaWV3ICo+PiBfdGV4dFZpZXdzOwogfQogCiAtIChpbnN0YW5jZXR5cGUpaW5p
dFdpdGhGcmFtZTooUmVjdFR5cGUpZnJhbWUgc2FmZUJyb3dzaW5nUmVzdWx0Oihjb25zdCBXZWJL
aXQ6OlNhZmVCcm93c2luZ1Jlc3VsdCYpcmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOihDb21wbGV0
aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNv
cmU6OlVSTD4mJik+JiYpY29tcGxldGlvbkhhbmRsZXI7CkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCShyZXZp
c2lvbiAyMzc4NjMpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93
c2luZ1dhcm5pbmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMzLDQ5ICszMywxMDcgQEAKICNpbXBv
cnQgPHd0Zi9CbG9ja1B0ci5oPgogI2ltcG9ydCA8d3RmL0xhbmd1YWdlLmg+CiAKLWNvbnN0IENH
RmxvYXQgZXhjbGFtYXRpb25Qb2ludFNpemUgPSAzMDsKLWNvbnN0IENHRmxvYXQgdGV4dFNpemUg
PSAxMzsKK2NvbnN0ZXhwciBDR0Zsb2F0IGV4Y2xhbWF0aW9uUG9pbnRTaXplID0gMzA7Citjb25z
dGV4cHIgQ0dGbG9hdCB0aXRsZVNpemUgPSAyNjsKK2NvbnN0ZXhwciBDR0Zsb2F0IGJveENvcm5l
clJhZGl1cyA9IDY7CisjaWYgSEFWRShTQUZFX0JST1dTSU5HKQorY29uc3RleHByIENHRmxvYXQg
bWFyZ2luU2l6ZSA9IDIwOworY29uc3RleHByIENHRmxvYXQgbWF4V2lkdGggPSA2NzU7CisjZW5k
aWYKKwogI2lmIFBMQVRGT1JNKE1BQykKLWNvbnN0IENHRmxvYXQgbWFyZ2luU2l6ZSA9IDIwOwot
Y29uc3Qgc2l6ZV90IG1heFdpZHRoID0gNjAwOworY29uc3RleHByIENHRmxvYXQgdGV4dFNpemUg
PSAxNDsKIHVzaW5nIENvbG9yVHlwZSA9IE5TQ29sb3I7CiB1c2luZyBGb250VHlwZSA9IE5TRm9u
dDsKLXVzaW5nIFZpZXdUeXBlID0gTlNWaWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBOU0Jl
emllclBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBOU1RleHRWaWV3OwordXNpbmcgQnV0dG9u
VHlwZSA9IE5TQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IE5TTGF5b3V0QXR0cmlidXRl
OwordXNpbmcgVmlld1R5cGUgPSBOU1ZpZXc7Cit1c2luZyBTaXplVHlwZSA9IE5TU2l6ZTsKICNl
bHNlCitjb25zdGV4cHIgQ0dGbG9hdCB0ZXh0U2l6ZSA9IDIwOwogdXNpbmcgQ29sb3JUeXBlID0g
VUlDb2xvcjsKIHVzaW5nIEZvbnRUeXBlID0gVUlGb250OwotdXNpbmcgVmlld1R5cGUgPSBVSVZp
ZXc7Ci11c2luZyBCZXppZXJQYXRoVHlwZSA9IFVJQmV6aWVyUGF0aDsKIHVzaW5nIFRleHRWaWV3
VHlwZSA9IFVJVGV4dFZpZXc7Cit1c2luZyBCdXR0b25UeXBlID0gVUlCdXR0b247Cit1c2luZyBB
bGlnbm1lbnRUeXBlID0gVUlTdGFja1ZpZXdBbGlnbm1lbnQ7Cit1c2luZyBWaWV3VHlwZSA9IFVJ
VmlldzsKK3VzaW5nIFNpemVUeXBlID0gQ0dTaXplOwogI2VuZGlmCiAKLXN0YXRpYyBpZCBjb25m
aXJtTWFsd2FyZVNlbnRpbmVsKCkKK2VudW0gY2xhc3MgV2FybmluZ0l0ZW0gOiB1aW50OF90IHsK
KyAgICBCYWNrZ3JvdW5kLAorICAgIEJveEJhY2tncm91bmQsCisgICAgRXhjbGFtYXRpb25Qb2lu
dCwKKyAgICBUaXRsZVRleHQsCisgICAgTWVzc2FnZVRleHQsCisgICAgU2hvd0RldGFpbHNCdXR0
b24sCisgICAgR29CYWNrQnV0dG9uCit9OworCitzdGF0aWMgTlNVUkwgKmNvbmZpcm1NYWx3YXJl
U2VudGluZWwoKQogewotICAgIHJldHVybiBAIldLQ29uZmlybU1hbHdhcmVTZW50aW5lbCI7Cisg
ICAgcmV0dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tDb25maXJtTWFsd2FyZVNlbnRpbmVs
Il07CiB9CiAKLXN0YXRpYyBpZCB2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgpCitzdGF0aWMg
TlNVUkwgKnZpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsKCkKIHsKLSAgICByZXR1cm4gQCJXS1Zp
c2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIjsKKyAgICByZXR1cm4gW05TVVJMIFVSTFdpdGhTdHJp
bmc6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIl07CiB9CiAKLXN0YXRpYyBDb2xvclR5
cGUgKmNvbG9yTmFtZWQoTlNTdHJpbmcgKm5hbWUpCitzdGF0aWMgQ29sb3JUeXBlICpjb2xvckZv
ckl0ZW0oV2FybmluZ0l0ZW0gaXRlbSwgVmlld1R5cGUgKndhcm5pbmcpCiB7CisgICAgQVNTRVJU
KFt3YXJuaW5nIGlzS2luZE9mQ2xhc3M6W1dLU2FmZUJyb3dzaW5nV2FybmluZyBjbGFzc11dKTsK
ICNpZiBQTEFURk9STShNQUMpCisKKyAgICBhdXRvIGNvbG9yTmFtZWQgPSBbXSAoTlNTdHJpbmcg
Km5hbWUpIC0+IENvbG9yVHlwZSogewogI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKLSAgICByZXR1
cm4gW05TQ29sb3IgY29sb3JOYW1lZDpuYW1lIGJ1bmRsZTpbTlNCdW5kbGUgYnVuZGxlV2l0aElk
ZW50aWZpZXI6QCJjb20uYXBwbGUuV2ViS2l0Il1dOworICAgICAgICByZXR1cm4gW05TQ29sb3Ig
Y29sb3JOYW1lZDpuYW1lIGJ1bmRsZTpbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6QCJj
b20uYXBwbGUuV2ViS2l0Il1dOwogI2Vsc2UKLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICByZXR1cm4gbmlsOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIG5pbDsKICNlbmRpZgorICAgIH07CisKKyAgICBzd2l0Y2ggKGl0ZW0pIHsKKyAgICBjYXNl
IFdhcm5pbmdJdGVtOjpCYWNrZ3JvdW5kOgorICAgICAgICByZXR1cm4gY29sb3JOYW1lZChAIldL
U2FmZUJyb3dzaW5nV2FybmluZ0JhY2tncm91bmQiKTsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpC
b3hCYWNrZ3JvdW5kOgorICAgICAgICByZXR1cm4gW05TQ29sb3Igd2luZG93QmFja2dyb3VuZENv
bG9yXTsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpUaXRsZVRleHQ6CisgICAgY2FzZSBXYXJuaW5n
SXRlbTo6RXhjbGFtYXRpb25Qb2ludDoKKyAgICAgICAgcmV0dXJuIGNvbG9yTmFtZWQoQCJXS1Nh
ZmVCcm93c2luZ1dhcm5pbmdUaXRsZSIpOworICAgIGNhc2UgV2FybmluZ0l0ZW06Ok1lc3NhZ2VU
ZXh0OgorICAgICAgICByZXR1cm4gY29sb3JOYW1lZChAIldLU2FmZUJyb3dzaW5nV2FybmluZ1Rl
eHQiKTsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpTaG93RGV0YWlsc0J1dHRvbjoKKyAgICBjYXNl
IFdhcm5pbmdJdGVtOjpHb0JhY2tCdXR0b246CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICByZXR1cm4gbmlsOworICAgIH0KICNlbHNlCi0gICAgcmV0dXJuIFtVSUNvbG9y
IGNvbG9yTmFtZWQ6bmFtZSBpbkJ1bmRsZTpbTlNCdW5kbGUgYnVuZGxlV2l0aElkZW50aWZpZXI6
QCJjb20uYXBwbGUuV2ViS2l0Il0gY29tcGF0aWJsZVdpdGhUcmFpdENvbGxlY3Rpb246bmlsXTsK
KyAgICBVSUNvbG9yICpyZWQgPSBbVUlDb2xvciBjb2xvcldpdGhSZWQ6MC45OTggZ3JlZW46MC4y
MzkgYmx1ZTowLjIzMyBhbHBoYToxLjBdOworICAgIFVJQ29sb3IgKndoaXRlID0gW1VJQ29sb3Ig
d2hpdGVDb2xvcl07CisgICAgYm9vbCBuYXJyb3cgPSB3YXJuaW5nLnRyYWl0Q29sbGVjdGlvbi5o
b3Jpem9udGFsU2l6ZUNsYXNzID09IFVJVXNlckludGVyZmFjZVNpemVDbGFzc0NvbXBhY3Q7CisK
KyAgICBzd2l0Y2ggKGl0ZW0pIHsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpCYWNrZ3JvdW5kOgor
ICAgICAgICByZXR1cm4gcmVkOworICAgIGNhc2UgV2FybmluZ0l0ZW06OkJveEJhY2tncm91bmQ6
CisgICAgICAgIHJldHVybiBuYXJyb3cgPyByZWQgOiB3aGl0ZTsKKyAgICBjYXNlIFdhcm5pbmdJ
dGVtOjpUaXRsZVRleHQ6CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6RXhjbGFtYXRpb25Qb2ludDoK
KyAgICAgICAgcmV0dXJuIG5hcnJvdyA/IHdoaXRlIDogcmVkOworICAgIGNhc2UgV2FybmluZ0l0
ZW06Ok1lc3NhZ2VUZXh0OgorICAgIGNhc2UgV2FybmluZ0l0ZW06OlNob3dEZXRhaWxzQnV0dG9u
OgorICAgICAgICByZXR1cm4gbmFycm93ID8gd2hpdGUgOiBbVUlDb2xvciBkYXJrVGV4dENvbG9y
XTsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpHb0JhY2tCdXR0b246CisgICAgICAgIHJldHVybiBu
YXJyb3cgPyB3aGl0ZSA6IHdhcm5pbmcudGludENvbG9yOworICAgIH0KICNlbmRpZgorICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBuaWw7CiB9CiAKLSNpZiBQTEFURk9STShN
QUMpCiBzdGF0aWMgdm9pZCByZXBsYWNlKE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmlu
ZywgTlNTdHJpbmcgKnRvUmVwbGFjZSwgTlNTdHJpbmcgKnJlcGxhY2VXaXRoKQogewogICAgIFtz
dHJpbmcgcmVwbGFjZUNoYXJhY3RlcnNJblJhbmdlOltzdHJpbmcuc3RyaW5nIHJhbmdlT2ZTdHJp
bmc6dG9SZXBsYWNlXSB3aXRoU3RyaW5nOnJlcGxhY2VXaXRoXTsKQEAgLTkwLDcgKzE0OCw2IEBA
IHN0YXRpYyB2b2lkIGFkZExpbmtBbmRSZXBsYWNlKE5TTXV0YWJsZUEKICAgICB9IHJhbmdlOk5T
TWFrZVJhbmdlKDAsIHJlcGxhY2VXaXRoLmxlbmd0aCldOwogICAgIFtzdHJpbmcgcmVwbGFjZUNo
YXJhY3RlcnNJblJhbmdlOltzdHJpbmcuc3RyaW5nIHJhbmdlT2ZTdHJpbmc6dG9SZXBsYWNlXSB3
aXRoQXR0cmlidXRlZFN0cmluZzpzdHJpbmdXaXRoTGlua107CiB9Ci0jZW5kaWYKIAogQGludGVy
ZmFjZSBXS1NhZmVCcm93c2luZ0V4Y2xhbWF0aW9uUG9pbnQgOiBWaWV3VHlwZQogQGVuZApAQCAt
OTksMjIgKzE1NiwzOSBAQCBAaW50ZXJmYWNlIFdLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2lu
CiAKIC0gKHZvaWQpZHJhd1JlY3Q6KFJlY3RUeXBlKXJlY3QKIHsKLSAgICBbY29sb3JOYW1lZChA
IldLU2FmZUJyb3dzaW5nV2FybmluZ1RpdGxlIikgc2V0XTsKLSNpZiBQTEFURk9STShNQUMpCi0j
ZGVmaW5lIGFkZEFyY1dpdGhDZW50ZXIgYXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNXaXRoQ2VudGVy
Ci0gICAgTlNSZWN0IHNxdWFyZSA9IE5TTWFrZVJlY3QoMCwgMCwgZXhjbGFtYXRpb25Qb2ludFNp
emUsIGV4Y2xhbWF0aW9uUG9pbnRTaXplKTsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBjZW50ZXJY
ID0gZXhjbGFtYXRpb25Qb2ludFNpemUgLyAyOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IHBvaW50
Q2VudGVyWSA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplICogNyAvIDMwOworICAgIGNvbnN0ZXhwciBD
R0Zsb2F0IHBvaW50UmFkaXVzID0gMi4yNSAqIGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMzA7Cisg
ICAgY29uc3RleHByIENHRmxvYXQgbGluZUJvdHRvbUNlbnRlclkgPSBleGNsYW1hdGlvblBvaW50
U2l6ZSAqIDEzIC8gMzA7CisgICAgY29uc3RleHByIENHRmxvYXQgbGluZVRvcENlbnRlclkgPSBl
eGNsYW1hdGlvblBvaW50U2l6ZSAqIDIzIC8gMzA7CisgICAgY29uc3RleHByIENHRmxvYXQgbGlu
ZVJhZGl1cyA9IDEuNzUgKiBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDMwOworICAgIFZpZXdUeXBl
ICp3YXJuaW5nID0gc2VsZi5zdXBlcnZpZXcuc3VwZXJ2aWV3OworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICBbY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpFeGNsYW1hdGlvblBvaW50LCB3YXJuaW5n
KSBzZXRdOworICAgIE5TQmV6aWVyUGF0aCAqZXhjbGFtYXRpb25Qb2ludCA9IFtOU0JlemllclBh
dGggYmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0Ok5TTWFrZVJlY3QoMCwgMCwgZXhjbGFtYXRpb25Q
b2ludFNpemUsIGV4Y2xhbWF0aW9uUG9pbnRTaXplKV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQg
YXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGxpbmVCb3R0b21D
ZW50ZXJZIH0gcmFkaXVzOmxpbmVSYWRpdXMgc3RhcnRBbmdsZTowIGVuZEFuZ2xlOjE4MCBjbG9j
a3dpc2U6WUVTXTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFy
Y1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgbGluZVRvcENlbnRlclkgfSByYWRpdXM6bGluZVJhZGl1
cyBzdGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107CisgICAgW2V4Y2xh
bWF0aW9uUG9pbnQgbGluZVRvUG9pbnQ6IHsgY2VudGVyWCArIGxpbmVSYWRpdXMsIGxpbmVCb3R0
b21DZW50ZXJZIH1dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRo
QXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBwb2ludENlbnRlclkgfSByYWRpdXM6cG9pbnRSYWRp
dXMgc3RhcnRBbmdsZTowIGVuZEFuZ2xlOjE4MCBjbG9ja3dpc2U6WUVTXTsKKyAgICBbZXhjbGFt
YXRpb25Qb2ludCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwg
cG9pbnRDZW50ZXJZIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6MTgwIGVuZEFuZ2xl
OjM2MCBjbG9ja3dpc2U6WUVTXTsKICNlbHNlCi0gICAgQ0dSZWN0IHNxdWFyZSA9IENHUmVjdE1h
a2UoMCwgMCwgZXhjbGFtYXRpb25Qb2ludFNpemUsIGV4Y2xhbWF0aW9uUG9pbnRTaXplKTsKKyAg
ICBhdXRvIGZsaXAgPSBbXSAoYXV0byB5KSB7CisgICAgICAgIHJldHVybiBleGNsYW1hdGlvblBv
aW50U2l6ZSAtIHk7CisgICAgfTsKKyAgICBbY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCb3hC
YWNrZ3JvdW5kLCB3YXJuaW5nKSBzZXRdOworICAgIGF1dG8gc3F1YXJlID0gQ0dSZWN0TWFrZSgw
LCAwLCBleGNsYW1hdGlvblBvaW50U2l6ZSwgZXhjbGFtYXRpb25Qb2ludFNpemUpOworICAgIFtb
VUlCZXppZXJQYXRoIGJlemllclBhdGhXaXRoUmVjdDpzcXVhcmVdIGZpbGxdOworICAgIAorICAg
IFtjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkV4Y2xhbWF0aW9uUG9pbnQsIHdhcm5pbmcpIHNl
dF07CisgICAgVUlCZXppZXJQYXRoICpleGNsYW1hdGlvblBvaW50ID0gW1VJQmV6aWVyUGF0aCBi
ZXppZXJQYXRoV2l0aE92YWxJblJlY3Q6c3F1YXJlXTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBh
ZGRBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGZsaXAobGluZVRvcENlbnRlclkpIH0gcmFkaXVz
OmxpbmVSYWRpdXMgc3RhcnRBbmdsZToyICogcGlEb3VibGUgZW5kQW5nbGU6cGlEb3VibGUgY2xv
Y2t3aXNlOk5PXTsKKyAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGNl
bnRlclgsIGZsaXAobGluZUJvdHRvbUNlbnRlclkpIH0gcmFkaXVzOmxpbmVSYWRpdXMgc3RhcnRB
bmdsZTpwaURvdWJsZSBlbmRBbmdsZTowIGNsb2Nrd2lzZTpOT107CisgICAgW2V4Y2xhbWF0aW9u
UG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlwKHBvaW50Q2VudGVyWSkgfSBy
YWRpdXM6cG9pbnRSYWRpdXMgc3RhcnRBbmdsZTowIGVuZEFuZ2xlOnBpRG91YmxlIGNsb2Nrd2lz
ZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJY
LCBmbGlwKHBvaW50Q2VudGVyWSkgfSByYWRpdXM6cG9pbnRSYWRpdXMgc3RhcnRBbmdsZTpwaURv
dWJsZSBlbmRBbmdsZTpwaURvdWJsZSAqIDIgY2xvY2t3aXNlOk5PXTsKKyAgICBbZXhjbGFtYXRp
b25Qb2ludCBhZGRMaW5lVG9Qb2ludDogeyBjZW50ZXJYICsgbGluZVJhZGl1cywgZmxpcChsaW5l
Qm90dG9tQ2VudGVyWSkgfV07CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkTGluZVRvUG9pbnQ6
IHsgY2VudGVyWCArIGxpbmVSYWRpdXMsIGZsaXAobGluZVRvcENlbnRlclkpIH1dOwogI2VuZGlm
Ci0gICAgQmV6aWVyUGF0aFR5cGUgKmV4Y2xhbWF0aW9uUG9pbnQgPSBbQmV6aWVyUGF0aFR5cGUg
YmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OnNxdWFyZV07Ci0gICAgW2V4Y2xhbWF0aW9uUG9pbnQg
YWRkQXJjV2l0aENlbnRlcjogeyBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDIsIGV4Y2xhbWF0aW9u
UG9pbnRTaXplICogMTMgLyAzMCB9IHJhZGl1czoxLjc1IHN0YXJ0QW5nbGU6MCBlbmRBbmdsZTox
ODAgY2xvY2t3aXNlOllFU107Ci0gICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRl
cjogeyBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDIsIGV4Y2xhbWF0aW9uUG9pbnRTaXplICogMjMg
LyAzMCB9IHJhZGl1czoxLjc1IHN0YXJ0QW5nbGU6MTgwIGVuZEFuZ2xlOjM2MCBjbG9ja3dpc2U6
WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGV4Y2xhbWF0
aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8gMzAgfSByYWRpdXM6
Mi4yNSBzdGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOwotICAgIFtleGNs
YW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2ludFNpemUgLyAy
LCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDcgLyAzMCB9IHJhZGl1czoyLjI1IHN0YXJ0QW5nbGU6
MTgwIGVuZEFuZ2xlOjM2MCBjbG9ja3dpc2U6WUVTXTsKICAgICBbZXhjbGFtYXRpb25Qb2ludCBm
aWxsXTsKLSNpZiBQTEFURk9STShNQUMpCi0jdW5kZWYgYWRkQXJjV2l0aENlbnRlcgotI2VuZGlm
CiB9CiAKIC0gKE5TU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQpAQCAtMTI0LDcgKzE5OCw2IEBA
IC0gKE5TU2l6ZSlpbnRyaW5zaWNDb250ZW50U2l6ZQogCiBAZW5kCiAKLSNpZiBQTEFURk9STShN
QUMpCiBzdGF0aWMgTlNVUkwgKnJlcG9ydEFuRXJyb3JVUkwoY29uc3QgV2ViS2l0OjpTYWZlQnJv
d3NpbmdSZXN1bHQmIHJlc3VsdCkKIHsKICAgICByZXR1cm4gV2ViQ29yZTo6VVJMKHsgfSwgbWFr
ZVN0cmluZyhyZXN1bHQucmVwb3J0QW5FcnJvclVSTEJhc2UoKSwgIiZ1cmw9IiwgZW5jb2RlV2l0
aFVSTEVzY2FwZVNlcXVlbmNlcyhyZXN1bHQudXJsKCkpLCAiJmhsPSIsIGRlZmF1bHRMYW5ndWFn
ZSgpKSk7CkBAIC0xOTEsMTQgKzI2NCw2MyBAQCBzdGF0aWMgTlNNdXRhYmxlQXR0cmlidXRlZFN0
cmluZyAqZGV0YWlsCiAgICAgQVNTRVJUKHJlc3VsdC5pc1Vud2FudGVkU29mdHdhcmUoKSk7CiAg
ICAgcmV0dXJuIG1hbHdhcmVPclVud2FudGVkU29mdHdhcmVEZXRhaWxzKHJlc3VsdCwgV0VCX1VJ
X05TU1RSSU5HKEAiV2FybmluZ3MgYXJlIHNob3duIGZvciB3ZWJzaXRlcyB3aGVyZSBoYXJtZnVs
IHNvZnR3YXJlIGhhcyBiZWVuIGRldGVjdGVkLiBZb3UgY2FuIGNoZWNrICV0aGUtc3RhdHVzLW9m
LXNpdGUlIG9uIHRoZSAlc2FmZUJyb3dzaW5nUHJvdmlkZXIlIGRpYWdub3N0aWMgcGFnZS4iLCAi
VW53YW50ZWQgc29mdHdhcmUgd2FybmluZyBkZXNjcmlwdGlvbiIpLCBAIiV0aGUtc3RhdHVzLW9m
LXNpdGUlIiwgZmFsc2UpOwogfQorCitzdGF0aWMgQnV0dG9uVHlwZSAqbWFrZUJ1dHRvbihXYXJu
aW5nSXRlbSBpdGVtLCBXS1NhZmVCcm93c2luZ1dhcm5pbmcgKndhcm5pbmcsIFNFTCBhY3Rpb24p
Cit7CisgICAgTlNTdHJpbmcgKnRpdGxlID0gbmlsOworICAgIGlmIChpdGVtID09IFdhcm5pbmdJ
dGVtOjpTaG93RGV0YWlsc0J1dHRvbikKKyAgICAgICAgdGl0bGUgPSBXRUJfVUlfTlNTVFJJTkco
QCJTaG93IGRldGFpbHMiLCAiQWN0aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7Cisg
ICAgZWxzZQorICAgICAgICB0aXRsZSA9IFdFQl9VSV9OU1NUUklORyhAIkdvIGJhY2siLCAiQWN0
aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIik7CisgICAgdGl0bGUgPSBbdGl0bGUgY2Fw
aXRhbGl6ZWRTdHJpbmddOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gW05TQnV0dG9u
IGJ1dHRvbldpdGhUaXRsZTp0aXRsZSB0YXJnZXQ6d2FybmluZyBhY3Rpb246YWN0aW9uXTsKKyNl
bHNlCisgICAgVUlCdXR0b24gKmJ1dHRvbiA9IFtVSUJ1dHRvbiBidXR0b25XaXRoVHlwZTpVSUJ1
dHRvblR5cGVTeXN0ZW1dOworICAgIE5TQXR0cmlidXRlZFN0cmluZyAqYXR0cmlidXRlZFRpdGxl
ID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzp0aXRsZSBhdHRy
aWJ1dGVzOkB7CisgICAgICAgIE5TVW5kZXJsaW5lU3R5bGVBdHRyaWJ1dGVOYW1lOkAoTlNVbmRl
cmxpbmVTdHlsZVNpbmdsZSksCisgICAgICAgIE5TVW5kZXJsaW5lQ29sb3JBdHRyaWJ1dGVOYW1l
OltVSUNvbG9yIHdoaXRlQ29sb3JdLAorICAgICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0
ZU5hbWU6Y29sb3JGb3JJdGVtKGl0ZW0sIHdhcm5pbmcpLAorICAgICAgICBOU0ZvbnRBdHRyaWJ1
dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXQorICAgIH1dIGF1dG9y
ZWxlYXNlXTsKKyAgICBbYnV0dG9uIHNldEF0dHJpYnV0ZWRUaXRsZTphdHRyaWJ1dGVkVGl0bGUg
Zm9yU3RhdGU6VUlDb250cm9sU3RhdGVOb3JtYWxdOworICAgIFtidXR0b24gYWRkVGFyZ2V0Ondh
cm5pbmcgYWN0aW9uOmFjdGlvbiBmb3JDb250cm9sRXZlbnRzOlVJQ29udHJvbEV2ZW50VG91Y2hV
cEluc2lkZV07CisgICAgcmV0dXJuIGJ1dHRvbjsKKyNlbmRpZgorfQorCitzdGF0aWMgVmlld1R5
cGUgKm1ha2VUaXRsZUxhYmVsKE5TU3RyaW5nICp0aXRsZSwgVmlld1R5cGUgKndhcm5pbmcpCit7
CisgICAgYXV0byBhdHRyaWJ1dGVkU3RyaW5nID0gW1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9j
XSBpbml0V2l0aFN0cmluZzp0aXRsZSBhdHRyaWJ1dGVzOkB7CisgICAgICAgIE5TRm9udEF0dHJp
YnV0ZU5hbWU6W0ZvbnRUeXBlIGJvbGRTeXN0ZW1Gb250T2ZTaXplOnRpdGxlU2l6ZV0sCisgICAg
ICAgIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZTpjb2xvckZvckl0ZW0oV2FybmluZ0l0
ZW06OlRpdGxlVGV4dCwgd2FybmluZykKKyAgICB9XSBhdXRvcmVsZWFzZV07CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIHJldHVybiBbTlNUZXh0RmllbGQgbGFiZWxXaXRoQXR0cmlidXRlZFN0cmlu
ZzphdHRyaWJ1dGVkU3RyaW5nXTsKKyNlbHNlCisgICAgYXV0byBsYWJlbCA9IFtbVUlMYWJlbCBu
ZXddIGF1dG9yZWxlYXNlXTsKKyAgICBsYWJlbC5hdHRyaWJ1dGVkVGV4dCA9IGF0dHJpYnV0ZWRT
dHJpbmc7CisgICAgbGFiZWwubGluZUJyZWFrTW9kZSA9IE5TTGluZUJyZWFrQnlXb3JkV3JhcHBp
bmc7CisgICAgbGFiZWwubnVtYmVyT2ZMaW5lcyA9IDA7CisgICAgcmV0dXJuIGxhYmVsOworI2Vu
ZGlmCit9CisKK3N0YXRpYyB2b2lkIHNldEJhY2tncm91bmQoVmlld1R5cGUgKnZpZXcsIENvbG9y
VHlwZSAqY29sb3IpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIHZpZXcud2FudHNMYXllciA9
IFlFUzsKKyAgICB2aWV3LmxheWVyLmJhY2tncm91bmRDb2xvciA9IGNvbG9yLkNHQ29sb3I7Cisj
ZWxzZQorICAgIHZpZXcuYmFja2dyb3VuZENvbG9yID0gY29sb3I7CiAjZW5kaWYKK30KIAogQGlu
dGVyZmFjZSBXS1NhZmVCcm93c2luZ1RleHRWaWV3IDogVGV4dFZpZXdUeXBlIHsKIEBwYWNrYWdl
Ci0gICAgV2Vha09iakNQdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfdGFyZ2V0OworICAgIFdl
YWtPYmpDUHRyPFdLU2FmZUJyb3dzaW5nV2FybmluZz4gX3dhcm5pbmc7CiB9Ci0rIChpbnN0YW5j
ZXR5cGUpdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilhdHRy
aWJ1dGVkU3RyaW5nIGxpbmtUYXJnZXQ6KFdLU2FmZUJyb3dzaW5nV2FybmluZyAqKXRhcmdldDsK
LSsgKGluc3RhbmNldHlwZSl2aWV3V2l0aFN0cmluZzooTlNTdHJpbmcgKilzdHJpbmc7CistIChp
bnN0YW5jZXR5cGUpaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcg
KilhdHRyaWJ1dGVkU3RyaW5nIGZvcldhcm5pbmc6KFdLU2FmZUJyb3dzaW5nV2FybmluZyAqKXdh
cm5pbmc7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlvbiBXS1NhZmVCcm93c2luZ1dhcm5pbmcKQEAg
LTIwOSw1NCArMzMxLDE1NyBAQCAtIChpbnN0YW5jZXR5cGUpaW5pdFdpdGhGcmFtZTooUmVjdFR5
cGUpCiAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdlYktpdDo6Q29udGludWVVbnNhZmVMb2Fk
OjpZZXMpOwogICAgICAgICByZXR1cm4gbmlsOwogICAgIH0KLQogICAgIF9jb21wbGV0aW9uSGFu
ZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpOwogICAgIF9yZXN1bHQgPSBtYWtlUmVm
KHJlc3VsdCk7Ci0KKyAgICBzZXRCYWNrZ3JvdW5kKHNlbGYsIGNvbG9yRm9ySXRlbShXYXJuaW5n
SXRlbTo6QmFja2dyb3VuZCwgc2VsZikpOwogI2lmIFBMQVRGT1JNKE1BQykKLSAgICBzZWxmLndh
bnRzTGF5ZXIgPSBZRVM7Ci0gICAgc2VsZi5sYXllci5iYWNrZ3JvdW5kQ29sb3IgPSBbY29sb3JO
YW1lZChAIldLU2FmZUJyb3dzaW5nV2FybmluZ0JhY2tncm91bmQiKSBDR0NvbG9yXTsKLQotICAg
IE5TU3RhY2tWaWV3ICp0b3AgPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3V2l0aFZpZXdzOkBbCi0g
ICAgICAgIFtbV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW50IG5ld10gYXV0b3JlbGVhc2Vd
LAotICAgICAgICBbTlNUZXh0RmllbGQgbGFiZWxXaXRoQXR0cmlidXRlZFN0cmluZzpbW1tOU0F0
dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOnRpdGxlVGV4dChyZXN1bHQpIGF0
dHJpYnV0ZXM6QHsKLSAgICAgICAgICAgIE5TRm9udEF0dHJpYnV0ZU5hbWU6W05TRm9udCBzeXN0
ZW1Gb250T2ZTaXplOmV4Y2xhbWF0aW9uUG9pbnRTaXplXSwKLSAgICAgICAgICAgIE5TRm9yZWdy
b3VuZENvbG9yQXR0cmlidXRlTmFtZTpjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5n
VGV4dCIpCi0gICAgICAgIH1dIGF1dG9yZWxlYXNlXV0KLSAgICBdXTsKKyAgICBbc2VsZiBhZGRD
b250ZW50XTsKKyNlbmRpZgorICAgIHJldHVybiBzZWxmOworfQogCi0gICAgV0tTYWZlQnJvd3Np
bmdUZXh0VmlldyAqbWlkZGxlID0gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dpdGhTdHJp
bmc6d2FybmluZ1RleHQocmVzdWx0KV07CistICh2b2lkKWFkZENvbnRlbnQKK3sKKyAgICBhdXRv
IGV4Y2xhbWF0aW9uUG9pbnQgPSBbW1dLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Qb2ludCBuZXdd
IGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIHRpdGxlID0gbWFrZVRpdGxlTGFiZWwodGl0bGVUZXh0
KCpfcmVzdWx0KSwgc2VsZik7CisgICAgYXV0byB3YXJuaW5nID0gW1tbV0tTYWZlQnJvd3NpbmdU
ZXh0VmlldyBhbGxvY10gaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOltbW05TQXR0cmlidXRlZFN0
cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6d2FybmluZ1RleHQoKl9yZXN1bHQpIGF0dHJpYnV0
ZXM6QHsgTlNGb250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0
U2l6ZV0gfV0gYXV0b3JlbGVhc2VdIGZvcldhcm5pbmc6c2VsZl0gYXV0b3JlbGVhc2VdOworICAg
IGF1dG8gc2hvd0RldGFpbHMgPSBtYWtlQnV0dG9uKFdhcm5pbmdJdGVtOjpTaG93RGV0YWlsc0J1
dHRvbiwgc2VsZiwgQHNlbGVjdG9yKHNob3dEZXRhaWxzQ2xpY2tlZCkpOworICAgIGF1dG8gZ29C
YWNrID0gbWFrZUJ1dHRvbihXYXJuaW5nSXRlbTo6R29CYWNrQnV0dG9uLCBzZWxmLCBAc2VsZWN0
b3IoZ29CYWNrQ2xpY2tlZCkpOworICAgIGF1dG8gYm94ID0gW1tWaWV3VHlwZSBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBzZXRCYWNrZ3JvdW5kKGJveCwgY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVt
OjpCb3hCYWNrZ3JvdW5kLCBzZWxmKSk7CisgICAgYm94LmxheWVyLmNvcm5lclJhZGl1cyA9IGJv
eENvcm5lclJhZGl1czsKKyAgICBfdGV4dFZpZXdzID0gYWRvcHROUyhbTlNNdXRhYmxlQXJyYXkg
bmV3XSk7CisgICAgW190ZXh0Vmlld3MgYWRkT2JqZWN0Ondhcm5pbmddOworCisgICAgZm9yIChW
aWV3VHlwZSAqdmlldyBpbiBAW2V4Y2xhbWF0aW9uUG9pbnQsIHRpdGxlLCB3YXJuaW5nLCBnb0Jh
Y2ssIHNob3dEZXRhaWxzXSkgeworICAgICAgICB2aWV3LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdN
YXNrSW50b0NvbnN0cmFpbnRzID0gTk87CisgICAgICAgIFtib3ggYWRkU3Vidmlldzp2aWV3XTsK
KyAgICB9CisgICAgYm94LnRyYW5zbGF0ZXNBdXRvcmVzaXppbmdNYXNrSW50b0NvbnN0cmFpbnRz
ID0gTk87CisgICAgW3NlbGYgYWRkU3Vidmlldzpib3hdOwogCi0gICAgTlNTdGFja1ZpZXcgKmJv
dHRvbSA9IFtOU1N0YWNrVmlldyBzdGFja1ZpZXdXaXRoVmlld3M6QFsKLSAgICAgICAgW05TQnV0
dG9uIGJ1dHRvbldpdGhUaXRsZTpXRUJfVUlfTlNTVFJJTkcoQCJTaG93IGRldGFpbHMiLCAiQWN0
aW9uIGZyb20gc2FmZSBicm93c2luZyB3YXJuaW5nIikgdGFyZ2V0OnNlbGYgYWN0aW9uOkBzZWxl
Y3RvcihzaG93RGV0YWlsc0NsaWNrZWQpXSwKLSAgICAgICAgW05TQnV0dG9uIGJ1dHRvbldpdGhU
aXRsZTpXRUJfVUlfTlNTVFJJTkcoQCJHbyBiYWNrIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Np
bmcgd2FybmluZyIpIHRhcmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3IoZ29CYWNrQ2xpY2tlZCld
CisjaWYgSEFWRShTQUZFX0JST1dTSU5HKQorICAgIFtOU0xheW91dENvbnN0cmFpbnQgYWN0aXZh
dGVDb25zdHJhaW50czpAWworICAgICAgICBbW3NlbGYudG9wQW5jaG9yIGFuY2hvcldpdGhPZmZz
ZXRUb0FuY2hvcjpib3gudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbYm94LmJv
dHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6c2VsZi5ib3R0b21BbmNob3JdIG11
bHRpcGxpZXI6MC41XSwKKyAgICAgICAgW1tzZWxmLmxlZnRBbmNob3IgYW5jaG9yV2l0aE9mZnNl
dFRvQW5jaG9yOmJveC5sZWZ0QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpbYm94LnJp
Z2h0QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpzZWxmLnJpZ2h0QW5jaG9yXV0sCisK
KyAgICAgICAgW2JveC53aWR0aEFuY2hvciBjb25zdHJhaW50TGVzc1RoYW5PckVxdWFsVG9Db25z
dGFudDptYXhXaWR0aF0sCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWludExlc3NU
aGFuT3JFcXVhbFRvQW5jaG9yOnNlbGYud2lkdGhBbmNob3JdLAorCisgICAgICAgIFtbYm94Lmxl
YWRpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmV4Y2xhbWF0aW9uUG9pbnQubGVh
ZGluZ0FuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAg
ICAgW1tib3gubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6dGl0bGUubGVh
ZGluZ0FuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplICogMS41ICsg
ZXhjbGFtYXRpb25Qb2ludFNpemVdLAorICAgICAgICBbW2JveC5sZWFkaW5nQW5jaG9yIGFuY2hv
cldpdGhPZmZzZXRUb0FuY2hvcjp3YXJuaW5nLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVh
bFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisKKyAgICAgICAgW1t0aXRsZS50cmFpbGluZ0FuY2hv
ciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50
R3JlYXRlclRoYW5PckVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1t3YXJu
aW5nLnRyYWlsaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gudHJhaWxpbmdB
bmNob3JdIGNvbnN0cmFpbnRHcmVhdGVyVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVd
LAorICAgICAgICBbW2dvQmFjay50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNo
b3I6Ym94LnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNp
emVdLAorCisgICAgICAgIFtbdGl0bGUudG9wQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hv
cjpleGNsYW1hdGlvblBvaW50LnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9BbmNob3I6W2V4
Y2xhbWF0aW9uUG9pbnQuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjp0aXRs
ZS5ib3R0b21BbmNob3JdXSwKKworICAgICAgICBbZ29CYWNrLnRvcEFuY2hvciBjb25zdHJhaW50
RXF1YWxUb0FuY2hvcjpzaG93RGV0YWlscy50b3BBbmNob3JdLAorICAgICAgICBbW3Nob3dEZXRh
aWxzLnRyYWlsaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpnb0JhY2subGVhZGlu
Z0FuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKworICAgICAg
ICBbW2JveC50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOnRpdGxlLnRvcEFuY2hv
cl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1t0aXRs
ZS5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOndhcm5pbmcudG9wQW5jaG9y
XSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBbW3dhcm5p
bmcuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpnb0JhY2sudG9wQW5jaG9y
XSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorICAgICAgICBbW2dvQmFj
ay5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC5ib3R0b21BbmNob3Jd
IGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0KICAgICBdXTsKKyNlbmRpZgor
fQogCi0gICAgZm9yIChOU1N0YWNrVmlldyAqdmlldyBpbiBAW3RvcCwgYm90dG9tXSkKLSAgICAg
ICAgW3ZpZXcgc2V0SHVnZ2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JP
cmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKKy0gKHZv
aWQpc2hvd0RldGFpbHNDbGlja2VkCit7CisgICAgVmlld1R5cGUgKmJveCA9IHNlbGYuc3Vidmll
d3MubGFzdE9iamVjdDsKKyAgICBCdXR0b25UeXBlICpzaG93RGV0YWlscyA9IGJveC5zdWJ2aWV3
cy5sYXN0T2JqZWN0OworICAgIFtzaG93RGV0YWlscyByZW1vdmVGcm9tU3VwZXJ2aWV3XTsKKwor
ICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnRleHQgPSBkZXRhaWxzVGV4dCgqX3Jlc3Vs
dCk7CisgICAgW3RleHQgYWRkQXR0cmlidXRlczpAeyBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250
VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXplXSB9IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHRl
eHQubGVuZ3RoKV07CisgICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqZGV0YWlscyA9IFtbW1dL
U2FmZUJyb3dzaW5nVGV4dFZpZXcgYWxsb2NdIGluaXRXaXRoQXR0cmlidXRlZFN0cmluZzp0ZXh0
IGZvcldhcm5pbmc6c2VsZl0gYXV0b3JlbGVhc2VdOworICAgIFtfdGV4dFZpZXdzIGFkZE9iamVj
dDpkZXRhaWxzXTsKKyAgICBWaWV3VHlwZSAqYm90dG9tID0gW1tWaWV3VHlwZSBuZXddIGF1dG9y
ZWxlYXNlXTsKKyAgICBzZXRCYWNrZ3JvdW5kKGJvdHRvbSwgY29sb3JGb3JJdGVtKFdhcm5pbmdJ
dGVtOjpCb3hCYWNrZ3JvdW5kLCBzZWxmKSk7CisgICAgYm90dG9tLmxheWVyLmNvcm5lclJhZGl1
cyA9IGJveENvcm5lclJhZGl1czsKIAotICAgIFN0YWNrVmlld1R5cGUgKmJveCA9IFtOU1N0YWNr
VmlldyBzdGFja1ZpZXdXaXRoVmlld3M6QFt0b3AsIG1pZGRsZSwgYm90dG9tXV07Ci0gICAgYm94
LndhbnRzTGF5ZXIgPSBZRVM7Ci0gICAgYm94LmxheWVyLmJhY2tncm91bmRDb2xvciA9IFtbTlND
b2xvciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdIENHQ29sb3JdOwotICAgIGJveC5sYXllci5jb3Ju
ZXJSYWRpdXMgPSA2OwotICAgIGJveC5hbGlnbm1lbnQgPSBOU0xheW91dEF0dHJpYnV0ZUNlbnRl
clg7Ci0gICAgW2JveC53aWR0aEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1heFdp
ZHRoXS5hY3RpdmUgPSB0cnVlOwotICAgIGJveC5lZGdlSW5zZXRzID0geyBtYXJnaW5TaXplLCBt
YXJnaW5TaXplLCBtYXJnaW5TaXplLCBtYXJnaW5TaXplIH07Ci0gICAgW2JveCBzZXRIdWdnaW5n
UHJpb3JpdHk6TlNMYXlvdXRQcmlvcml0eVJlcXVpcmVkIGZvck9yaWVudGF0aW9uOk5TTGF5b3V0
Q29uc3RyYWludE9yaWVudGF0aW9uVmVydGljYWxdOwotICAgIFtzZWxmIGFkZFZpZXc6Ym94IGlu
R3Jhdml0eTpOU1N0YWNrVmlld0dyYXZpdHlDZW50ZXJdOworI2lmIEhBVkUoU0FGRV9CUk9XU0lO
RykKKyAgICBjb25zdGV4cHIgYXV0byBtYXhZID0ga0NBTGF5ZXJNaW5YTWF4WUNvcm5lciB8IGtD
QUxheWVyTWF4WE1heFlDb3JuZXI7CisgICAgY29uc3RleHByIGF1dG8gbWluWSA9IGtDQUxheWVy
TWluWE1pbllDb3JuZXIgfCBrQ0FMYXllck1heFhNaW5ZQ29ybmVyOworI2lmIFBMQVRGT1JNKE1B
QykKKyAgICBib3gubGF5ZXIubWFza2VkQ29ybmVycyA9IG1heFk7CisgICAgYm90dG9tLmxheWVy
Lm1hc2tlZENvcm5lcnMgPSBtaW5ZOwogI2Vsc2UKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgd29y
a2luZyBvbiBpT1MuCi0gICAgY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0OjpDb250aW51ZVVuc2Fm
ZUxvYWQ6Olllcyk7CisgICAgYm94LmxheWVyLm1hc2tlZENvcm5lcnMgPSBtaW5ZOworICAgIGJv
dHRvbS5sYXllci5tYXNrZWRDb3JuZXJzID0gbWF4WTsKICNlbmRpZgotICAgIHJldHVybiBzZWxm
OworI2VuZGlmCisKKyAgICBWaWV3VHlwZSAqbGluZSA9IFtbVmlld1R5cGUgbmV3XSBhdXRvcmVs
ZWFzZV07CisgICAgc2V0QmFja2dyb3VuZChsaW5lLCBbQ29sb3JUeXBlIGxpZ2h0R3JheUNvbG9y
XSk7CisgICAgZm9yIChWaWV3VHlwZSAqdmlldyBpbiBAW2RldGFpbHMsIGJvdHRvbSwgbGluZV0p
CisgICAgICAgIHZpZXcudHJhbnNsYXRlc0F1dG9yZXNpemluZ01hc2tJbnRvQ29uc3RyYWludHMg
PSBOTzsKKworICAgIFtzZWxmIGFkZFN1YnZpZXc6Ym90dG9tXTsKKyAgICBbYm90dG9tIGFkZFN1
YnZpZXc6bGluZV07CisgICAgW2JvdHRvbSBhZGRTdWJ2aWV3OmRldGFpbHNdOworI2lmIEhBVkUo
U0FGRV9CUk9XU0lORykKKyAgICBbTlNMYXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWlu
dHM6QFsKKyAgICAgICAgW2JveC53aWR0aEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpi
b3R0b20ud2lkdGhBbmNob3JdLAorICAgICAgICBbYm94LmJvdHRvbUFuY2hvciBjb25zdHJhaW50
RXF1YWxUb0FuY2hvcjpib3R0b20udG9wQW5jaG9yXSwKKyAgICAgICAgW2JveC5sZWFkaW5nQW5j
aG9yIGNvbnN0cmFpbnRFcXVhbFRvQW5jaG9yOmJvdHRvbS5sZWFkaW5nQW5jaG9yXSwKKyAgICAg
ICAgW2xpbmUud2lkdGhBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLndpZHRo
QW5jaG9yXSwKKyAgICAgICAgW2xpbmUubGVhZGluZ0FuY2hvciBjb25zdHJhaW50RXF1YWxUb0Fu
Y2hvcjpib3R0b20ubGVhZGluZ0FuY2hvcl0sCisgICAgICAgIFtsaW5lLnRvcEFuY2hvciBjb25z
dHJhaW50RXF1YWxUb0FuY2hvcjpib3R0b20udG9wQW5jaG9yXSwKKyAgICAgICAgW2xpbmUuaGVp
Z2h0QW5jaG9yIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6MV0sCisgICAgICAgIFtbYm90dG9t
LnRvcEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZGV0YWlscy50b3BBbmNob3JdIGNv
bnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbZGV0YWlscy5i
b3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJvdHRvbS5ib3R0b21BbmNob3Jd
IGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbYm90dG9t
LmxlYWRpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmRldGFpbHMubGVhZGluZ0Fu
Y2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tk
ZXRhaWxzLnRyYWlsaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3R0b20udHJh
aWxpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2luU2l6ZV0sCisgICAg
XV07CisjZW5kaWYKKyAgICBbc2VsZiBsYXlvdXRUZXh0XTsKKyNpZiAhUExBVEZPUk0oTUFDKQor
ICAgIFtzZWxmIGxheW91dElmTmVlZGVkXTsKKyAgICBDR0Zsb2F0IGhlaWdodCA9IDA7CisgICAg
Zm9yIChWaWV3VHlwZSAqc3VidmlldyBpbiBzZWxmLnN1YnZpZXdzKQorICAgICAgICBoZWlnaHQg
Kz0gc3Vidmlldy5mcmFtZS5zaXplLmhlaWdodDsKKyAgICBbc2VsZiBzZXRDb250ZW50U2l6ZTog
eyBzZWxmLmZyYW1lLnNpemUud2lkdGgsIHNlbGYuZnJhbWUuc2l6ZS5oZWlnaHQgKyBoZWlnaHQg
LyAyIH1dOworI2VuZGlmCit9CisKKy0gKHZvaWQpbGF5b3V0VGV4dAoreworICAgIGZvciAoV0tT
YWZlQnJvd3NpbmdUZXh0VmlldyAqdmlldyBpbiBfdGV4dFZpZXdzLmdldCgpKQorICAgICAgICBb
dmlldyBpbnZhbGlkYXRlSW50cmluc2ljQ29udGVudFNpemVdOwogfQogCiAjaWYgUExBVEZPUk0o
TUFDKQorLSAoQk9PTCl0ZXh0VmlldzooTlNUZXh0VmlldyAqKXRleHRWaWV3IGNsaWNrZWRPbkxp
bms6KGlkKWxpbmsgYXRJbmRleDooTlNVSW50ZWdlciljaGFySW5kZXgKK3sKKyAgICBbc2VsZiBj
bGlja2VkT25MaW5rOmxpbmtdOworICAgIHJldHVybiBZRVM7Cit9CisKIC0gKHZvaWQpbGF5b3V0
CiB7Ci0gICAgZm9yIChOU1ZpZXcgKnZpZXcgaW4gc2VsZi5zdWJ2aWV3cy5maXJzdE9iamVjdC5z
dWJ2aWV3cykKLSAgICAgICAgW3ZpZXcgaW52YWxpZGF0ZUludHJpbnNpY0NvbnRlbnRTaXplXTsK
ICAgICBbc3VwZXIgbGF5b3V0XTsKKyAgICBbc2VsZiBsYXlvdXRUZXh0XTsKK30KKyNlbHNlCist
ICh2b2lkKWxheW91dFN1YnZpZXdzCit7CisgICAgW3N1cGVyIGxheW91dFN1YnZpZXdzXTsKKyAg
ICBbc2VsZiBsYXlvdXRUZXh0XTsKK30KKworLSAoQk9PTCl0ZXh0VmlldzooVUlUZXh0VmlldyAq
KXRleHRWaWV3IHNob3VsZEludGVyYWN0V2l0aFVSTDooTlNVUkwgKilVUkwgaW5SYW5nZTooTlNS
YW5nZSljaGFyYWN0ZXJSYW5nZSBpbnRlcmFjdGlvbjooVUlUZXh0SXRlbUludGVyYWN0aW9uKWlu
dGVyYWN0aW9uCit7CisgICAgW3NlbGYgY2xpY2tlZE9uTGluazpVUkxdOworICAgIHJldHVybiBO
TzsKK30KKworLSAodm9pZClkaWRNb3ZlVG9XaW5kb3cKK3sKKyAgICBbc2VsZiBhZGRDb250ZW50
XTsKIH0KICNlbmRpZgogCkBAIC0yNzMsNyArNDk4LDcgQEAgLSAodm9pZClnb0JhY2tDbGlja2Vk
CiAgICAgICAgIF9jb21wbGV0aW9uSGFuZGxlcihXZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6
Tm8pOwogfQogCi0tICh2b2lkKWNsaWNrZWRPbkxpbms6KGlkKWxpbmsKKy0gKHZvaWQpY2xpY2tl
ZE9uTGluazooTlNVUkwgKilsaW5rCiB7CiAgICAgaWYgKCFfY29tcGxldGlvbkhhbmRsZXIpCiAg
ICAgICAgIHJldHVybjsKQEAgLTMwNCw2OCArNTI5LDQxIEBAIC0gKHZvaWQpY2xpY2tlZE9uTGlu
azooaWQpbGluawogICAgIF9jb21wbGV0aW9uSGFuZGxlcigoTlNVUkwgKilsaW5rKTsKIH0KIAot
LSAodm9pZClzaG93RGV0YWlsc0NsaWNrZWQKLXsKLSNpZiBQTEFURk9STShNQUMpCi0gICAgTlNT
dGFja1ZpZXcgKmJveCA9IHNlbGYudmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgTlNTdGFja1ZpZXcg
KmJvdHRvbSA9IGJveC52aWV3cy5sYXN0T2JqZWN0OwotICAgIE5TQnV0dG9uICpzaG93RGV0YWls
c0J1dHRvbiA9IGJvdHRvbS52aWV3cy5maXJzdE9iamVjdDsKLSAgICBbYm90dG9tIHJlbW92ZVZp
ZXc6c2hvd0RldGFpbHNCdXR0b25dOwotICAgIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKmRldGFp
bHMgPSBbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6ZGV0
YWlsc1RleHQoKl9yZXN1bHQpIGxpbmtUYXJnZXQ6c2VsZl07Ci0gICAgW2JveCBhZGRWaWV3OmRl
dGFpbHMgaW5HcmF2aXR5Ok5TU3RhY2tWaWV3R3Jhdml0eUNlbnRlcl07Ci0jZWxzZQotICAgIC8v
IEZJWE1FOiBHZXQgdGhpcyB3b3JraW5nIG9uIGlPUy4KLSNlbmRpZgotfQotCiBAZW5kCiAKIEBp
bXBsZW1lbnRhdGlvbiBXS1NhZmVCcm93c2luZ1RleHRWaWV3CiAKLSsgKGluc3RhbmNldHlwZSl2
aWV3V2l0aEF0dHJpYnV0ZWRTdHJpbmc6KE5TQXR0cmlidXRlZFN0cmluZyAqKWF0dHJpYnV0ZWRT
dHJpbmcgbGlua1RhcmdldDooV0tTYWZlQnJvd3NpbmdXYXJuaW5nICopdGFyZ2V0CistIChpbnN0
YW5jZXR5cGUpaW5pdFdpdGhBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0ZWRTdHJpbmcgKilh
dHRyaWJ1dGVkU3RyaW5nIGZvcldhcm5pbmc6KFdLU2FmZUJyb3dzaW5nV2FybmluZyAqKXdhcm5p
bmcKIHsKLSAgICBXS1NhZmVCcm93c2luZ1RleHRWaWV3ICppbnN0YW5jZSA9IFtbc2VsZiBuZXdd
IGF1dG9yZWxlYXNlXTsKLSAgICBpZiAoIWluc3RhbmNlKQorICAgIGlmICghKHNlbGYgPSBbc3Vw
ZXIgaW5pdF0pKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIGluc3RhbmNlLT5fdGFyZ2V0ID0g
dGFyZ2V0OworICAgIHNlbGYtPl93YXJuaW5nID0gd2FybmluZzsKKyAgICBzZWxmLmRlbGVnYXRl
ID0gd2FybmluZzsKIAotICAgIENvbG9yVHlwZSAqZm9yZWdyb3VuZENvbG9yID0gY29sb3JOYW1l
ZChAIldLU2FmZUJyb3dzaW5nV2FybmluZ1RleHQiKTsKKyAgICBDb2xvclR5cGUgKmZvcmVncm91
bmRDb2xvciA9IGNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6TWVzc2FnZVRleHQsIHdhcm5pbmcp
OwogICAgIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKnN0cmluZyA9IFthdHRyaWJ1dGVkU3Ry
aW5nIG11dGFibGVDb3B5XTsKLSAgICBbc3RyaW5nIGFkZEF0dHJpYnV0ZXM6QHsKLSAgICAgICAg
TlNGb3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yLAotICAgICAg
ICBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBzeXN0ZW1Gb250T2ZTaXplOnRleHRTaXpl
XQotICAgIH0gcmFuZ2U6TlNNYWtlUmFuZ2UoMCwgc3RyaW5nLmxlbmd0aCldOwotCi0jaWYgUExB
VEZPUk0oTUFDKQotICAgIFtpbnN0YW5jZSBzZXRMaW5rVGV4dEF0dHJpYnV0ZXM6QHsgTlNGb3Jl
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lIDogZm9yZWdyb3VuZENvbG9yIH1dOwotICAgIFtpbnN0
YW5jZSBzZXRDb250ZW50SHVnZ2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBm
b3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKLSAg
ICBbaW5zdGFuY2Ugc2V0Q29udGVudENvbXByZXNzaW9uUmVzaXN0YW5jZVByaW9yaXR5Ok5TTGF5
b3V0UHJpb3JpdHlSZXF1aXJlZCBmb3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmll
bnRhdGlvblZlcnRpY2FsXTsKLSAgICBbaW5zdGFuY2Uud2lkdGhBbmNob3IgY29uc3RyYWludExl
c3NUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWF4V2lkdGggLSAyICogbWFyZ2luU2l6ZV0uYWN0aXZl
ID0gdHJ1ZTsKLSAgICBbaW5zdGFuY2Ugc2V0QmFja2dyb3VuZENvbG9yOltOU0NvbG9yIHdpbmRv
d0JhY2tncm91bmRDb2xvcl1dOwotICAgIFtpbnN0YW5jZS50ZXh0U3RvcmFnZSBhcHBlbmRBdHRy
aWJ1dGVkU3RyaW5nOnN0cmluZ107CisgICAgW3N0cmluZyBhZGRBdHRyaWJ1dGVzOkB7IE5TRm9y
ZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSA6IGZvcmVncm91bmRDb2xvciB9IHJhbmdlOk5TTWFr
ZVJhbmdlKDAsIHN0cmluZy5sZW5ndGgpXTsKKyAgICBbc2VsZiBzZXRCYWNrZ3JvdW5kQ29sb3I6
Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpCb3hCYWNrZ3JvdW5kLCB3YXJuaW5nKV07CisgICAg
W3NlbGYgc2V0TGlua1RleHRBdHRyaWJ1dGVzOkB7IE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRl
TmFtZSA6IGZvcmVncm91bmRDb2xvciB9XTsKKyAgICBbc2VsZi50ZXh0U3RvcmFnZSBhcHBlbmRB
dHRyaWJ1dGVkU3RyaW5nOnN0cmluZ107CisgICAgc2VsZi5lZGl0YWJsZSA9IE5POworI2lmICFQ
TEFURk9STShNQUMpCisgICAgc2VsZi5zY3JvbGxFbmFibGVkID0gTk87CiAjZW5kaWYKLSAgICBy
ZXR1cm4gaW5zdGFuY2U7Ci19CiAKLSsgKGluc3RhbmNldHlwZSl2aWV3V2l0aFN0cmluZzooTlNT
dHJpbmcgKilzdHJpbmcKLXsKLSAgICByZXR1cm4gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmll
d1dpdGhBdHRyaWJ1dGVkU3RyaW5nOltbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRXaXRoU3RyaW5nOnN0cmluZ10gYXV0b3JlbGVhc2VdIGxpbmtUYXJnZXQ6bmlsXTsKKyAg
ICByZXR1cm4gc2VsZjsKIH0KIAotLSAoTlNTaXplKWludHJpbnNpY0NvbnRlbnRTaXplCistIChT
aXplVHlwZSlpbnRyaW5zaWNDb250ZW50U2l6ZQogewotICAgIFtzZWxmLmxheW91dE1hbmFnZXIg
ZW5zdXJlTGF5b3V0Rm9yVGV4dENvbnRhaW5lcjpzZWxmLnRleHRDb250YWluZXJdOwotICAgIGF1
dG8gc2l6ZSA9IFtzZWxmLmxheW91dE1hbmFnZXIgdXNlZFJlY3RGb3JUZXh0Q29udGFpbmVyOnNl
bGYudGV4dENvbnRhaW5lcl0uc2l6ZTsKICNpZiBQTEFURk9STShNQUMpCi0gICAgcmV0dXJuIHsg
TlNWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIHNpemUuaGVpZ2h0IH07CisgICAgW3NlbGYubGF5b3V0
TWFuYWdlciBlbnN1cmVMYXlvdXRGb3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl07
CisgICAgcmV0dXJuIHsgTlNWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIFtzZWxmLmxheW91dE1hbmFn
ZXIgdXNlZFJlY3RGb3JUZXh0Q29udGFpbmVyOnNlbGYudGV4dENvbnRhaW5lcl0uc2l6ZS5oZWln
aHQgfTsKICNlbHNlCi0gICAgcmV0dXJuIHsgVUlWaWV3Tm9JbnRyaW5zaWNNZXRyaWMsIHNpemUu
aGVpZ2h0IH07CisgICAgYXV0byB3aWR0aCA9IHN0ZDo6bWluPENHRmxvYXQ+KG1heFdpZHRoLCBb
X3dhcm5pbmcgZnJhbWVdLnNpemUud2lkdGgpIC0gMiAqIG1hcmdpblNpemU7CisgICAgY29uc3Rl
eHByIGF1dG8gbm9IZWlnaHRDb25zdHJhaW50ID0gQ0dGTE9BVF9NQVg7CisgICAgcmV0dXJuIHsg
d2lkdGgsIFtzZWxmIHNpemVUaGF0Rml0czogeyB3aWR0aCwgbm9IZWlnaHRDb25zdHJhaW50IH1d
LmhlaWdodCB9OwogI2VuZGlmCiB9CiAKLS0gKHZvaWQpY2xpY2tlZE9uTGluazooaWQpbGluayBh
dEluZGV4OihOU1VJbnRlZ2VyKWNoYXJJbmRleAotewotICAgIFtfdGFyZ2V0IGNsaWNrZWRPbkxp
bms6bGlua107Ci19Ci0KIEBlbmQKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29h
L1dlYlZpZXdJbXBsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29j
b2EvV2ViVmlld0ltcGwuaAkocmV2aXNpb24gMjM3ODYzKQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV2ViVmlld0ltcGwuaAkod29ya2luZyBjb3B5KQpAQCAtMjI2LDkgKzIyNiw2
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFZpZXdTY2FsZShDR0Zsb2F0KTsKICAgICBDR0Zsb2F0
IHZpZXdTY2FsZSgpIGNvbnN0OwogCi0gICAgdm9pZCBzaG93U2FmZUJyb3dzaW5nV2FybmluZyhj
b25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8
Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKTsKLSAgICB2b2lkIGNsZWFy
U2FmZUJyb3dzaW5nV2FybmluZygpOwotCiAgICAgV0tMYXlvdXRNb2RlIGxheW91dE1vZGUoKSBj
b25zdDsKICAgICB2b2lkIHNldExheW91dE1vZGUoV0tMYXlvdXRNb2RlKTsKICAgICB2b2lkIHVw
ZGF0ZVN1cHBvcnRzQXJiaXRyYXJ5TGF5b3V0TW9kZXMoKTsKQEAgLTQ3MSw4ICs0NjgsNiBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckN1cnJlbnRJdGVtKCk7
CiAgICAgdm9pZCBzYXZlQmFja0ZvcndhcmRTbmFwc2hvdEZvckl0ZW0oV2ViQmFja0ZvcndhcmRM
aXN0SXRlbSYpOwogCi0gICAgV0tTYWZlQnJvd3NpbmdXYXJuaW5nICpzYWZlQnJvd3NpbmdXYXJu
aW5nKCkgeyByZXR1cm4gbV9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgpOyB9Ci0KICAgICBWaWV3
R2VzdHVyZUNvbnRyb2xsZXIqIGdlc3R1cmVDb250cm9sbGVyKCkgeyByZXR1cm4gbV9nZXN0dXJl
Q29udHJvbGxlci5nZXQoKTsgfQogICAgIFZpZXdHZXN0dXJlQ29udHJvbGxlciYgZW5zdXJlR2Vz
dHVyZUNvbnRyb2xsZXIoKTsKICAgICB2b2lkIHNldEFsbG93c0JhY2tGb3J3YXJkTmF2aWdhdGlv
bkdlc3R1cmVzKGJvb2wpOwpAQCAtNzk4LDcgKzc5Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBt
X3JlcXVpcmVzVXNlckFjdGlvbkZvckVkaXRpbmdDb250cm9sc01hbmFnZXIgeyBmYWxzZSB9Owog
ICAgIGJvb2wgbV9lZGl0YWJsZUVsZW1lbnRJc0ZvY3VzZWQgeyBmYWxzZSB9OwogICAgIGJvb2wg
bV9pc1RleHRJbnNlcnRpb25SZXBsYWNpbmdTb2Z0U3BhY2UgeyBmYWxzZSB9OwotICAgIFJldGFp
blB0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IG1fc2FmZUJyb3dzaW5nV2FybmluZzsKICAgICAK
ICNpZiBFTkFCTEUoRFJBR19TVVBQT1JUKQogICAgIE5TSW50ZWdlciBtX2luaXRpYWxOdW1iZXJP
ZlZhbGlkSXRlbXNGb3JEcm9wIHsgMCB9OwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
Q29jb2EvV2ViVmlld0ltcGwubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQ29jb2EvV2ViVmlld0ltcGwubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1dlYlZpZXdJbXBsLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xNTk5
LDI0ICsxNTk5LDYgQEAgYm9vbCBXZWJWaWV3SW1wbDo6cmVzaWduRmlyc3RSZXNwb25kZXIoKQog
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFdlYlZpZXdJbXBsOjpzaG93U2FmZUJyb3dzaW5n
V2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlvbkhhbmRs
ZXI8dm9pZChWYXJpYW50PENvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBj
b21wbGV0aW9uSGFuZGxlcikKLXsKLSAgICBpZiAoIW1fdmlldykKLSAgICAgICAgcmV0dXJuIGNv
bXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKLQotICAgIG1fc2FmZUJy
b3dzaW5nV2FybmluZyA9IGFkb3B0TlMoW1tXS1NhZmVCcm93c2luZ1dhcm5pbmcgYWxsb2NdIGlu
aXRXaXRoRnJhbWU6W21fdmlldyBib3VuZHNdIHNhZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQgY29t
cGxldGlvbkhhbmRsZXI6W3dlYWtUaGlzID0gbWFrZVdlYWtQdHIoKnRoaXMpLCBjb21wbGV0aW9u
SGFuZGxlciA9IFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byYmIHJlc3VsdCkgbXV0
YWJsZSB7Ci0gICAgICAgIGlmICh3ZWFrVGhpcykKLSAgICAgICAgICAgIFtzdGQ6OmV4Y2hhbmdl
KHdlYWtUaGlzLT5tX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92ZUZyb21TdXBl
cnZpZXddOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXVEZNb3ZlKHJlc3VsdCkpOwotICAg
IH1dKTsKLSAgICBbbV92aWV3IGFkZFN1YnZpZXc6bV9zYWZlQnJvd3NpbmdXYXJuaW5nLmdldCgp
XTsKLX0KLQotdm9pZCBXZWJWaWV3SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKLXsK
LSAgICBbc3RkOjpleGNoYW5nZShtX3NhZmVCcm93c2luZ1dhcm5pbmcsIG51bGxwdHIpIHJlbW92
ZUZyb21TdXBlcnZpZXddOwotfQotCiBib29sIFdlYlZpZXdJbXBsOjppc0ZvY3VzZWQoKSBjb25z
dAogewogICAgIGlmIChtX2luQmVjb21lRmlyc3RSZXNwb25kZXIpCkBAIC0xNjU1LDcgKzE2Mzcs
NiBAQCB2b2lkIFdlYlZpZXdJbXBsOjpyZW5ld0dTdGF0ZSgpCiB2b2lkIFdlYlZpZXdJbXBsOjpz
ZXRGcmFtZVNpemUoQ0dTaXplKQogewogICAgIFttX2xheW91dFN0cmF0ZWd5IGRpZENoYW5nZUZy
YW1lU2l6ZV07Ci0gICAgW21fc2FmZUJyb3dzaW5nV2FybmluZyBzZXRGcmFtZTpbbV92aWV3IGJv
dW5kc11dOwogfQogCiB2b2lkIFdlYlZpZXdJbXBsOjpkaXNhYmxlRnJhbWVTaXplVXBkYXRlcygp
CkBAIC01MTU4LDcgKzUxMzksNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjpmbGFnc0NoYW5nZWQoTlNF
dmVudCAqCiAjZGVmaW5lIE5BVElWRV9NT1VTRV9FVkVOVF9IQU5ETEVSX0lOVEVSTkFMKEV2ZW50
TmFtZSkgXAogICAgIHZvaWQgV2ViVmlld0ltcGw6OkV2ZW50TmFtZShOU0V2ZW50ICpldmVudCkg
XAogICAgIHsgXAotICAgICAgICBpZiAobV9pZ25vcmVzTm9uV2hlZWxFdmVudHMgfHwgbV9zYWZl
QnJvd3NpbmdXYXJuaW5nKSBcCisgICAgICAgIGlmIChtX2lnbm9yZXNOb25XaGVlbEV2ZW50cykg
XAogICAgICAgICAgICAgcmV0dXJuOyBcCiAgICAgICAgIGlmIChOU1RleHRJbnB1dENvbnRleHQg
KmNvbnRleHQgPSBbbV92aWV3IGlucHV0Q29udGV4dF0pIHsgXAogICAgICAgICAgICAgYXV0byB3
ZWFrVGhpcyA9IG1ha2VXZWFrUHRyKCp0aGlzKTsgXApJbmRleDogU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLmgJKHJldmlzaW9uIDIzNzg2MykKKysr
IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMTUsOSArMTE1LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNsZWFyVGV4dElu
ZGljYXRvcihXZWJDb3JlOjpUZXh0SW5kaWNhdG9yV2luZG93RGlzbWlzc2FsQW5pbWF0aW9uKSBv
dmVycmlkZTsKICAgICB2b2lkIHNldFRleHRJbmRpY2F0b3JBbmltYXRpb25Qcm9ncmVzcyhmbG9h
dCkgb3ZlcnJpZGU7CiAKLSAgICB2b2lkIHNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNh
ZmVCcm93c2luZ1Jlc3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6
OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJikgb3ZlcnJpZGU7Ci0gICAg
dm9pZCBjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKSBvdmVycmlkZTsKLQogICAgIHZvaWQgZW50
ZXJBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0Jikgb3Zl
cnJpZGU7CiAgICAgdm9pZCBleGl0QWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoKSBvdmVycmlk
ZTsKICAgICB2b2lkIHVwZGF0ZUFjY2VsZXJhdGVkQ29tcG9zaXRpbmdNb2RlKGNvbnN0IExheWVy
VHJlZUNvbnRleHQmKSBvdmVycmlkZTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL2lv
cy9QYWdlQ2xpZW50SW1wbElPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0JKHJldmlzaW9uIDIzNzg2MykKKysrIFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbQkod29ya2luZyBjb3B5
KQpAQCAtNjIsNyArNjIsNyBAQAogI2ltcG9ydCA8cGFsL3NwaS9jb2NvYS9OU0tleWVkQXJjaGl2
ZXJTUEkuaD4KICNpbXBvcnQgPHd0Zi9CbG9ja1B0ci5oPgogCi0jZGVmaW5lIE1FU1NBR0VfQ0hF
Q0soYXNzZXJ0aW9uKSBNRVNTQUdFX0NIRUNLX0JBU0UoYXNzZXJ0aW9uLCBtX3dlYlZpZXctPl9w
YWdlLT5wcm9jZXNzKCkuY29ubmVjdGlvbigpKQorI2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2Vy
dGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2VydGlvbiwgbV93ZWJWaWV3LmdldCgpLT5fcGFn
ZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKSkKIAogQGludGVyZmFjZSBXS0VkaXRDb21tYW5kT2Jq
QyA6IE5TT2JqZWN0CiB7CkBAIC0xNjEsMTggKzE2MSwxOCBAQCBJbnRTaXplIFBhZ2VDbGllbnRJ
bXBsOjp2aWV3U2l6ZSgpCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdXaW5kb3dBY3RpdmUo
KQogewogICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTMzMDk4Ci0gICAgcmV0dXJuIGlzVmlld1Zpc2libGUoKSB8fCAobV93ZWJWaWV3ICYmIFtt
X3dlYlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlXSk7CisgICAgcmV0dXJuIGlz
Vmlld1Zpc2libGUoKSB8fCBbbV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0
ZV07CiB9CiAKIGJvb2wgUGFnZUNsaWVudEltcGw6OmlzVmlld0ZvY3VzZWQoKQogewogICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzMDk4Ci0g
ICAgcmV0dXJuIGlzVmlld1dpbmRvd0FjdGl2ZSgpIHx8IChtX3dlYlZpZXcgJiYgW21fd2ViVmll
dyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVdKTsKKyAgICByZXR1cm4gaXNWaWV3V2lu
ZG93QWN0aXZlKCkgfHwgW21fd2ViVmlldyBfaXNSZXRhaW5pbmdBY3RpdmVGb2N1c2VkU3RhdGVd
OwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkKIHsKLSAgICBpZiAo
aXNWaWV3SW5XaW5kb3coKSAmJiAhbV93ZWJWaWV3Ll9pc0JhY2tncm91bmQpCisgICAgaWYgKGlz
Vmlld0luV2luZG93KCkgJiYgIVttX3dlYlZpZXcgX2lzQmFja2dyb3VuZF0pCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIAogICAgIGlmIChbbV93ZWJWaWV3IF9pc1Nob3dpbmdWaWRlb1BpY3R1
cmVJblBpY3R1cmVdKQpAQCAtMTg3LDggKzE4Nyw4IEBAIGJvb2wgUGFnZUNsaWVudEltcGw6Omlz
Vmlld1Zpc2libGUoKQogYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3coKQogewog
ICAgIC8vIEZJWE1FOiBpbiBXZWJLaXRUZXN0UnVubmVyLCBtX3dlYlZpZXcgaXMgbmlsLCBzbyBj
aGVjayB0aGUgY29udGVudCB2aWV3IGluc3RlYWQuCi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAg
ICAgcmV0dXJuIFttX3dlYlZpZXcgd2luZG93XTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93
ZWJWaWV3LmdldCgpKQorICAgICAgICByZXR1cm4gW3dlYlZpZXcgd2luZG93XTsKIAogICAgIHJl
dHVybiBbbV9jb250ZW50VmlldyB3aW5kb3ddOwogfQpAQCAtMjQ4LDcgKzI0OCw3IEBAIHZvaWQg
UGFnZUNsaWVudEltcGw6OmRpZENvbXBsZXRlU3ludGhldGkKIAogdm9pZCBQYWdlQ2xpZW50SW1w
bDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdChXZWJGcmFtZVBy
b3h5JiBmcmFtZSwgQVBJOjpTZWN1cml0eU9yaWdpbiYgb3JpZ2luLCBGdW5jdGlvbjx2b2lkKGJv
b2wpPiYgY29tcGxldGlvbkhhbmRsZXIpCiB7Ci0gICAgW1t3cmFwcGVyKG1fd2ViVmlldy0+X3Bh
Z2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Qcm92aWRlcl0gZGVjaWRl
UG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpvcmlnaW4uc2VjdXJpdHlPcmln
aW4oKSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4Y2hhbmdlKGNvbXBsZXRp
b25IYW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlld107CisgICAgW1t3cmFwcGVyKG1fd2Vi
Vmlldy5nZXQoKS0+X3BhZ2UtPnByb2Nlc3MoKS5wcm9jZXNzUG9vbCgpKSBfZ2VvbG9jYXRpb25Q
cm92aWRlcl0gZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25SZXF1ZXN0RnJvbU9yaWdpbjpvcmln
aW4uc2VjdXJpdHlPcmlnaW4oKSBmcmFtZTpmcmFtZSBjb21wbGV0aW9uSGFuZGxlcjpzdGQ6OmV4
Y2hhbmdlKGNvbXBsZXRpb25IYW5kbGVyLCBudWxscHRyKSB2aWV3Om1fd2ViVmlldy5nZXQoKS5n
ZXQoKV07CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFN0YXJ0UHJvdmlzaW9uYWxMb2Fk
Rm9yTWFpbkZyYW1lKCkKQEAgLTQ2OSwxNiArNDY5LDYgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
c2V0VGV4dEluZGljYXRvckFuaQogewogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2Fm
ZUJyb3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFu
ZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVS
TD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCi17Ci0gICAgY29tcGxldGlvbkhhbmRsZXIoV2Vi
S2l0OjpDb250aW51ZVVuc2FmZUxvYWQ6Olllcyk7IC8vIEZJWE1FOiBJbXBsZW1lbnQuCi19Ci0K
LXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dzaW5nV2FybmluZygpCi17Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KLX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZW50ZXJBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nTW9kZShjb25zdCBMYXllclRyZWVDb250ZXh0JiBsYXllclRyZWVD
b250ZXh0KQogewogfQpAQCAtNjk1LDIzICs2ODUsMjMgQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
c2Nyb2xsaW5nTm9kZVNjcm9sbAogCiBWZWN0b3I8U3RyaW5nPiBQYWdlQ2xpZW50SW1wbDo6bWlt
ZVR5cGVzV2l0aEN1c3RvbUNvbnRlbnRQcm92aWRlcnMoKQogewotICAgIHJldHVybiBtX3dlYlZp
ZXcuX2NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5Ll9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFBy
b3ZpZGVyczsKKyAgICByZXR1cm4gW21fd2ViVmlldyBfY29udGVudFByb3ZpZGVyUmVnaXN0cnld
Ll9taW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVyczsKIH0KIAogdm9pZCBQYWdlQ2xp
ZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpCiB7CiAgICAgW21fd2ViVmlldyBf
bmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbl07Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2Vi
UGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpOworICAg
IE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5h
dmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2
aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExp
c3RJdGVtJiBpdGVtKQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2Vi
Vmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0p
OworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3Bh
Z2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOwogfQogCiB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxOYXZp
Z2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0aW9uU3Rh
dGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVu
ZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2Uo
Km1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZp
Z2F0ZSwgaXRlbSk7CiAgICAgW21fd2ViVmlldyBfbmF2aWdhdGlvbkdlc3R1cmVEaWRFbmRdOwog
fQogCkBAIC03MjIsMTIgKzcxMiwxMiBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9u
R2VzdHVyZURpCiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OndpbGxSZWNvcmROYXZpZ2F0aW9uU25h
cHNob3QoV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKLSAgICBOYXZpZ2F0aW9uU3Rh
dGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNu
YXBzaG90KGl0ZW0pOworICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmll
dy5nZXQoKS0+X3BhZ2UpLndpbGxSZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7CiB9CiAK
IHZvaWQgUGFnZUNsaWVudEltcGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3Qo
KQogewotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2Up
Lm5hdmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CisgICAgTmF2aWdhdGlvblN0
YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1
cmVTbmFwc2hvdFdhc1JlbW92ZWQoKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkRmly
c3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0Rm9yTWFpbkZyYW1lKCkKQEAgLTg0MCw3ICs4MzAsNyBA
QCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpyZXF1ZXN0UGFzc3dvcmRGb3JRCiAgICAgICAgIGNvbXBs
ZXRpb25IYW5kbGVyKHBhc3N3b3JkKTsKICAgICB9KTsKIAotICAgIGlmIChXS1Bhc3N3b3JkVmll
dyAqcGFzc3dvcmRWaWV3ID0gbV93ZWJWaWV3Ll9wYXNzd29yZFZpZXcpIHsKKyAgICBpZiAoV0tQ
YXNzd29yZFZpZXcgKnBhc3N3b3JkVmlldyA9IFttX3dlYlZpZXcgX3Bhc3N3b3JkVmlld10pIHsK
ICAgICAgICAgQVNTRVJUKGZpbGVOYW1lID09IFN0cmluZyB7IHBhc3N3b3JkVmlldy5kb2N1bWVu
dE5hbWUgfSk7CiAgICAgICAgIFtwYXNzd29yZFZpZXcgc2hvd1Bhc3N3b3JkRmFpbHVyZUFsZXJ0
XTsKICAgICAgICAgcGFzc3dvcmRWaWV3LnVzZXJEaWRFbnRlclBhc3N3b3JkID0gcGFzc3dvcmRI
YW5kbGVyLmdldCgpOwpAQCAtODQ4LDcgKzgzOCw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJl
cXVlc3RQYXNzd29yZEZvclEKICAgICB9CiAKICAgICBbbV93ZWJWaWV3IF9zaG93UGFzc3dvcmRW
aWV3V2l0aERvY3VtZW50TmFtZTpmaWxlTmFtZSBwYXNzd29yZEhhbmRsZXI6cGFzc3dvcmRIYW5k
bGVyLmdldCgpXTsKLSAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXct
Pl9wYWdlKS5kaWRSZXF1ZXN0UGFzc3dvcmRGb3JRdWlja0xvb2tEb2N1bWVudCgpOworICAgIE5h
dmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy5nZXQoKS0+X3BhZ2UpLmRpZFJl
cXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0RvY3VtZW50KCk7CiB9CiAjZW5kaWYKIApJbmRleDog
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLmgJKHJl
dmlzaW9uIDIzNzg2MykKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50
SW1wbE1hYy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsOCArMTA0LDYgQEAgcHJpdmF0ZToKICAg
ICB2b2lkIHJlc2V0U2VjdXJlSW5wdXRTdGF0ZSgpIG92ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5
SW5wdXRDb250ZXh0QWJvdXREaXNjYXJkZWRDb21wb3NpdGlvbigpIG92ZXJyaWRlOwogICAgIHZv
aWQgc2VsZWN0aW9uRGlkQ2hhbmdlKCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBzaG93U2FmZUJyb3dz
aW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmLCBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFZhcmlhbnQ8V2ViS2l0OjpDb250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+
JiYpIG92ZXJyaWRlOwotICAgIHZvaWQgY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkgb3ZlcnJp
ZGU7CiAgICAgCiAjaWYgV0tfQVBJX0VOQUJMRUQKICAgICBib29sIHNob3dTaGFyZVNoZWV0KGNv
bnN0IFdlYkNvcmU6OlNoYXJlRGF0YVdpdGhQYXJzZWRVUkwmLCBXVEY6OkNvbXBsZXRpb25IYW5k
bGVyPHZvaWQoYm9vbCk+JiYpIG92ZXJyaWRlOwpJbmRleDogU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL21hYy9QYWdlQ2xpZW50SW1wbE1hYy5tbQkocmV2aXNpb24gMjM3ODYzKQorKysg
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VDbGllbnRJbXBsTWFjLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC00ODksMTggKzQ4OSw2IEBAIFJlZjxWYWxpZGF0aW9uQnViYmxlPiBQYWdlQ2xp
ZW50SW1wbDo6Y3IKICAgICByZXR1cm4gVmFsaWRhdGlvbkJ1YmJsZTo6Y3JlYXRlKG1fdmlldywg
bWVzc2FnZSwgc2V0dGluZ3MpOwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjpzaG93U2FmZUJy
b3dzaW5nV2FybmluZyhjb25zdCBTYWZlQnJvd3NpbmdSZXN1bHQmIHJlc3VsdCwgQ29tcGxldGlv
bkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3Jl
OjpVUkw+JiYpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQotewotICAgIGlmICghbV9pbXBsKQotICAg
ICAgICByZXR1cm4gY29tcGxldGlvbkhhbmRsZXIoQ29udGludWVVbnNhZmVMb2FkOjpZZXMpOwot
ICAgIG1faW1wbC0+c2hvd1NhZmVCcm93c2luZ1dhcm5pbmcocmVzdWx0LCBXVEZNb3ZlKGNvbXBs
ZXRpb25IYW5kbGVyKSk7Ci19Ci0KLXZvaWQgUGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJyb3dz
aW5nV2FybmluZygpCi17Ci0gICAgbV9pbXBsLT5jbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKTsK
LX0KLQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6c2V0VGV4dEluZGljYXRvcihSZWY8VGV4dEluZGlj
YXRvcj4gdGV4dEluZGljYXRvciwgV2ViQ29yZTo6VGV4dEluZGljYXRvcldpbmRvd0xpZmV0aW1l
IGxpZmV0aW1lKQogewogICAgIG1faW1wbC0+c2V0VGV4dEluZGljYXRvcih0ZXh0SW5kaWNhdG9y
LmdldCgpLCBsaWZldGltZSk7CkBAIC01NjQsNyArNTUyLDcgQEAgdm9pZCBQYWdlQ2xpZW50SW1w
bDo6c2VsZWN0aW9uRGlkQ2hhbmdlKAogI2lmIFdLX0FQSV9FTkFCTEVECiBib29sIFBhZ2VDbGll
bnRJbXBsOjpzaG93U2hhcmVTaGVldChjb25zdCBTaGFyZURhdGFXaXRoUGFyc2VkVVJMJiBzaGFy
ZURhdGEsIFdURjo6Q29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFu
ZGxlcikKIHsKLSAgICBtX2ltcGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShj
b21wbGV0aW9uSGFuZGxlciksIG1fd2ViVmlldyk7CisgICAgbV9pbXBsLT5zaG93U2hhcmVTaGVl
dChzaGFyZURhdGEsIFdURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpLCBtX3dlYlZpZXcuZ2V0KCku
Z2V0KCkpOwogICAgIHJldHVybiB0cnVlOwogfQogI2VuZGlmCkBAIC03NTEsMTYgKzczOSwxNiBA
QCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiAgICAgbV9pbXBsLT5k
aXNtaXNzQ29udGVudFJlbGF0aXZlQ2hpbGRXaW5kb3dzV2l0aEFuaW1hdGlvbih0cnVlKTsKIAog
I2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlv
blN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVE
aWRCZWdpbigpOworICAgIGlmIChhdXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAg
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0
aW9uR2VzdHVyZURpZEJlZ2luKCk7CiAjZW5kaWYKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6
bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2Fy
ZExpc3RJdGVtJiBpdGVtKQogewogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmll
dykKLSAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFn
ZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgaWYg
KGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRl
Ojpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCh3
aWxsTmF2aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRl
KTsKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03NzAsOCArNzU4LDggQEAgdm9pZCBQYWdl
Q2xpZW50SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVXaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6bmF2
aWdhdGlvbkdlc3R1cmVEaWRFbmQoYm9vbCB3aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlz
dEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQot
ICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5u
YXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2aWdhdGUsIGl0ZW0pOworICAgIGlmIChhdXRv
IHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJv
bVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCh3aWxsTmF2
aWdhdGUsIGl0ZW0pOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0od2lsbE5hdmlnYXRlKTsKICAg
ICBVTlVTRURfUEFSQU0oaXRlbSk7CkBAIC03ODUsOCArNzczLDggQEAgdm9pZCBQYWdlQ2xpZW50
SW1wbDo6bmF2aWdhdGlvbkdlc3R1cmVEaQogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJlY29y
ZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewogI2lm
IFdLX0FQSV9FTkFCTEVECi0gICAgaWYgKG1fd2ViVmlldykKLSAgICAgICAgTmF2aWdhdGlvblN0
YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRpb25T
bmFwc2hvdChpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgpKQor
ICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCp3ZWJWaWV3LT5fcGFnZSkud2ls
bFJlY29yZE5hdmlnYXRpb25TbmFwc2hvdChpdGVtKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFN
KGl0ZW0pOwogI2VuZGlmCkBAIC03OTUsOCArNzgzLDggQEAgdm9pZCBQYWdlQ2xpZW50SW1wbDo6
d2lsbFJlY29yZE5hdmlnYXRpbwogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVtb3ZlTmF2aWdh
dGlvbkdlc3R1cmVTbmFwc2hvdCgpCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93
ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXct
Pl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOworICAgIGlmIChh
dXRvIHdlYlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6
ZnJvbVdlYlBhZ2UoKndlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2Fz
UmVtb3ZlZCgpOwogI2VuZGlmCiB9CiAKSW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzODAwMykKKysrIFRvb2xzL0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0IEBACisyMDE4LTExLTA4ICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW2lPU10gSW1wbGVt
ZW50IHNhZmUgYnJvd3NpbmcgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE0NDEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2Fm
ZUJyb3dzaW5nLm1tOgorICAgICAgICAoY2hlY2tUaXRsZUFuZENsaWNrKToKKyAgICAgICAgKFRF
U1QpOgorCiAyMDE4LTExLTA4ICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgVW5yZXZpZXdlZCwgYSBxdWljayBidWlsZCBmaXggZm9yIHIyMzc5ODMKSW5kZXg6
IFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJyb3dzaW5nLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFRvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvU2FmZUJy
b3dzaW5nLm1tCShyZXZpc2lvbiAyMzc4NjMpCisrKyBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM3LDggKzEz
Nyw2IEBAIC0gKHZvaWQpbG9va1VwVVJMOihOU1VSTCAqKVVSTCBjb21wbGV0aW8KIAogQGVuZAog
Ci0jaWYgUExBVEZPUk0oTUFDKSAvLyBGSVhNRTogVGVzdCBvbiBpT1Mgb25jZSBpbXBsZW1lbnRl
ZC4KLQogc3RhdGljIE5TVVJMICpzaW1wbGVVUkwoKQogewogICAgIHJldHVybiBbW05TQnVuZGxl
IG1haW5CdW5kbGVdIFVSTEZvclJlc291cmNlOkAic2ltcGxlIiB3aXRoRXh0ZW5zaW9uOkAiaHRt
bCIgc3ViZGlyZWN0b3J5OkAiVGVzdFdlYktpdEFQSS5yZXNvdXJjZXMiXTsKQEAgLTE1NCwzMSAr
MTUyLDQ2IEBAIHN0YXRpYyBSZXRhaW5QdHI8V0tXZWJWaWV3PiBzYWZlQnJvd3NpbmcKICAgICBb
d2ViVmlldyBsb2FkUmVxdWVzdDpbTlNVUkxSZXF1ZXN0IHJlcXVlc3RXaXRoVVJMOnNpbXBsZVVS
TCgpXV07CiAgICAgd2hpbGUgKCFbd2ViVmlldyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3Rp
bmddKQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpzcGluUnVuTG9vcCgpOworI2lmICFQ
TEFURk9STShNQUMpCisgICAgW1t3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGlu
Z10gZGlkTW92ZVRvV2luZG93XTsKKyNlbmRpZgogICAgIHJldHVybiB3ZWJWaWV3OwogfQogCisj
aWYgUExBVEZPUk0oTUFDKQorc3RhdGljIHZvaWQgY2hlY2tUaXRsZUFuZENsaWNrKE5TQnV0dG9u
ICpidXR0b24sIGNvbnN0IGNoYXIqIGV4cGVjdGVkVGl0bGUpCit7CisgICAgRVhQRUNUX1NUUkVR
KGJ1dHRvbi50aXRsZS5VVEY4U3RyaW5nLCBleHBlY3RlZFRpdGxlKTsKKyAgICBbYnV0dG9uIHBl
cmZvcm1DbGljazpuaWxdOworfQorI2Vsc2UKK3N0YXRpYyB2b2lkIGNoZWNrVGl0bGVBbmRDbGlj
ayhVSUJ1dHRvbiAqYnV0dG9uLCBjb25zdCBjaGFyKiBleHBlY3RlZFRpdGxlKQoreworICAgIEVY
UEVDVF9TVFJFUShbYnV0dG9uIGF0dHJpYnV0ZWRUaXRsZUZvclN0YXRlOlVJQ29udHJvbFN0YXRl
Tm9ybWFsXS5zdHJpbmcuVVRGOFN0cmluZywgZXhwZWN0ZWRUaXRsZSk7CisgICAgVUlWaWV3ICp0
YXJnZXQgPSBidXR0b24uc3VwZXJ2aWV3LnN1cGVydmlldzsKKyAgICBTRUwgc2VsZWN0b3IgPSBO
U1NlbGVjdG9yRnJvbVN0cmluZyhzdHJjbXAoZXhwZWN0ZWRUaXRsZSwgIkdvIEJhY2siKSA/IEAi
c2hvd0RldGFpbHNDbGlja2VkIiA6IEAiZ29CYWNrQ2xpY2tlZCIpOworICAgIFt0YXJnZXQgcGVy
Zm9ybVNlbGVjdG9yOnNlbGVjdG9yXTsKK30KKyNlbmRpZgorCiBURVNUKFNhZmVCcm93c2luZywg
R29CYWNrKQogewogICAgIGF1dG8gd2ViVmlldyA9IHNhZmVCcm93c2luZ1ZpZXcoKTsKLSAgICBO
U1ZpZXcgKmJvdHRvbSA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10u
c3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MubGFzdE9iamVjdDsKLSAgICBOU0J1dHRvbiAq
Z29CYWNrID0gKE5TQnV0dG9uICopYm90dG9tLnN1YnZpZXdzLmxhc3RPYmplY3Q7Ci0gICAgRVhQ
RUNUX1NUUkVRKGdvQmFjay50aXRsZS5VVEY4U3RyaW5nLCAiR28gYmFjayIpOwotICAgIFtnb0Jh
Y2sgcGVyZm9ybUNsaWNrOm5pbF07CisgICAgYXV0byB3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVC
cm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBhdXRvIGJveCA9IHdhcm5pbmcuc3Vidmll
d3MuZmlyc3RPYmplY3Q7CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKGJveC5zdWJ2aWV3c1szXSwg
IkdvIEJhY2siKTsKICAgICBFWFBFQ1RfRVEoW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdG
b3JUZXN0aW5nXSwgbmlsKTsKIH0KIAogVEVTVChTYWZlQnJvd3NpbmcsIFZpc2l0VW5zYWZlV2Vi
c2l0ZSkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSBzYWZlQnJvd3NpbmdWaWV3KCk7Ci0gICAgTlNW
aWV3ICp3YXJuaW5nID0gW3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsK
LSAgICBOU1ZpZXcgKmJveCA9IHdhcm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgTlNC
dXR0b24gKnNob3dEZXRhaWxzID0gKE5TQnV0dG9uICopYm94LnN1YnZpZXdzLmxhc3RPYmplY3Qu
c3Vidmlld3MuZmlyc3RPYmplY3Q7Ci0gICAgRVhQRUNUX1NUUkVRKHNob3dEZXRhaWxzLnRpdGxl
LlVURjhTdHJpbmcsICJTaG93IGRldGFpbHMiKTsKLSAgICBFWFBFQ1RfRVEoYm94LnN1YnZpZXdz
LmNvdW50LCAzdWxsKTsKLSAgICBbc2hvd0RldGFpbHMgcGVyZm9ybUNsaWNrOm5pbF07Ci0gICAg
RVhQRUNUX0VRKGJveC5zdWJ2aWV3cy5jb3VudCwgNHVsbCk7CisgICAgYXV0byB3YXJuaW5nID0g
W3dlYlZpZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXTsKKyAgICBFWFBFQ1RfRVEo
d2FybmluZy5zdWJ2aWV3cy5jb3VudCwgMXVsbCk7CisgICAgY2hlY2tUaXRsZUFuZENsaWNrKHdh
cm5pbmcuc3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3NbNF0sICJTaG93IERldGFpbHMiKTsK
KyAgICBFWFBFQ1RfRVEod2FybmluZy5zdWJ2aWV3cy5jb3VudCwgMnVsbCk7CiAgICAgRVhQRUNU
X0ZBTFNFKGNvbW1pdHRlZE5hdmlnYXRpb24pOwotICAgIFt3YXJuaW5nIHBlcmZvcm1TZWxlY3Rv
cjpOU1NlbGVjdG9yRnJvbVN0cmluZyhAImNsaWNrZWRPbkxpbms6Iikgd2l0aE9iamVjdDpAIldL
VmlzaXRVbnNhZmVXZWJzaXRlU2VudGluZWwiXTsKKyAgICBbd2FybmluZyBwZXJmb3JtU2VsZWN0
b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoQCJjbGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6W05T
VVJMIFVSTFdpdGhTdHJpbmc6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVsIl1dOwogICAg
IFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmY29tbWl0dGVkTmF2aWdhdGlvbik7CiB9CiAKQEAg
LTE5MSw4ICsyMDQsNiBAQCBURVNUKFNhZmVCcm93c2luZywgTmF2aWdhdGlvbkNsZWFyc1dhcm5p
CiAgICAgICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnNwaW5SdW5Mb29wKCk7CiB9CiAKLSNlbmRp
ZiAvLyBQTEFURk9STShNQUMpCi0KIEBpbnRlcmZhY2UgTnVsbExvb2t1cENvbnRleHQgOiBOU09i
amVjdAogQGVuZAogQGltcGxlbWVudGF0aW9uIE51bGxMb29rdXBDb250ZXh0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354590</attachid>
            <date>2018-11-12 13:51:53 -0800</date>
            <delta_ts>2018-11-12 14:06:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191441-20181112135152.patch</filename>
            <type>text/plain</type>
            <size>51092</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMzgxMDcpCisrKyBTb3VyY2UvV2ViS2l0L0NoYW5nZUxv
Zwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBACisyMDE4LTExLTEyICBBbGV4IENocmlz
dGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW2lPU10gSW1wbGVt
ZW50IHNhZmUgYnJvd3NpbmcgaW4gV2ViS2l0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE0NDEKKworICAgICAgICBSZXZpZXdlZCBieSBUaW0gSG9y
dG9uLgorCisgICAgICAgIEluIHIyMzc4NjMgSSBpbXBsZW1lbnRlZCB0aGlzIGZvciBNYWMuICBU
aGlzIHJlZmluZXMgdGhlIFVJIGFuZCBpbXBsZW1lbnRzIGl0IGZvciBpT1MuCisKKyAgICAgICAg
KiBTaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbDoKKyAgICAgICAgKiBTaGFyZWQvV2ViUHJlZmVy
ZW5jZXNEZWZhdWx0VmFsdWVzLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL21hYy9XS0Nv
bnRleHRQcml2YXRlTWFjLm1tOgorICAgICAgICAoV0tDb250ZXh0SGFuZGxlc1NhZmVCcm93c2lu
Zyk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAg
ICgtW1dLV2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6Y29tcGxldGlvbkhhbmRsZXI6
XSk6CisgICAgICAgICgtW1dLV2ViVmlldyBfY2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nXSk6Cisg
ICAgICAgICgtW1dLV2ViVmlldyBsYXlvdXRTdWJ2aWV3c10pOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgc2V0RnJhbWVTaXplOl0pOgorICAgICAgICAoK1tXS1dlYlZpZXcgX2hhbmRsZXNTYWZlQnJv
d3NpbmddKToKKyAgICAgICAgKC1bV0tXZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVz
dGluZ10pOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5oOgorICAg
ICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLm1tOgorICAgICAgICAo
V2ViS2l0OjpQYWdlQ2xpZW50SW1wbENvY29hOjphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UgY29u
c3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbENvY29hOjpzZXJpYWxpemFibGVG
aWxlV3JhcHBlckNsYXNzZXMgY29uc3QpOgorICAgICAgICAqIFVJUHJvY2Vzcy9Db2NvYS9XS1Nh
ZmVCcm93c2luZ1dhcm5pbmcuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJv
d3NpbmdXYXJuaW5nLm1tOgorICAgICAgICAoY29uZmlybU1hbHdhcmVTZW50aW5lbCk6CisgICAg
ICAgICh2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCk6CisgICAgICAgIChjb2xvckZvckl0ZW0p
OgorICAgICAgICAoYWRkTGlua0FuZFJlcGxhY2UpOgorICAgICAgICAoLVtXS1NhZmVCcm93c2lu
Z0V4Y2xhbWF0aW9uUG9pbnQgZHJhd1JlY3Q6XSk6CisgICAgICAgIChtYWtlQnV0dG9uKToKKyAg
ICAgICAgKG1ha2VUaXRsZUxhYmVsKToKKyAgICAgICAgKHNldEJhY2tncm91bmQpOgorICAgICAg
ICAoLVtXS1NhZmVCcm93c2luZ1dhcm5pbmcgaW5pdFdpdGhGcmFtZTpzYWZlQnJvd3NpbmdSZXN1
bHQ6Y29tcGxldGlvbkhhbmRsZXI6XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2Fybmlu
ZyBhZGRDb250ZW50XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2FybmluZyBzaG93RGV0
YWlsc0NsaWNrZWRdKToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91dFRl
eHRdKToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIHRleHRWaWV3OmNsaWNrZWRP
bkxpbms6YXRJbmRleDpdKToKKyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIGxheW91
dF0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1dhcm5pbmcgbGF5b3V0U3Vidmlld3NdKToK
KyAgICAgICAgKC1bV0tTYWZlQnJvd3NpbmdXYXJuaW5nIHRleHRWaWV3OnNob3VsZEludGVyYWN0
V2l0aFVSTDppblJhbmdlOmludGVyYWN0aW9uOl0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2lu
Z1dhcm5pbmcgZGlkTW92ZVRvV2luZG93XSk6CisgICAgICAgICgtW1dLU2FmZUJyb3dzaW5nV2Fy
bmluZyBjbGlja2VkT25MaW5rOl0pOgorICAgICAgICAoLVtXS1NhZmVCcm93c2luZ1RleHRWaWV3
IGluaXRXaXRoQXR0cmlidXRlZFN0cmluZzpmb3JXYXJuaW5nOl0pOgorICAgICAgICAoLVtXS1Nh
ZmVCcm93c2luZ1RleHRWaWV3IGludHJpbnNpY0NvbnRlbnRTaXplXSk6CisgICAgICAgIChjb2xv
ck5hbWVkKTogRGVsZXRlZC4KKyAgICAgICAgKCtbV0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3
V2l0aEF0dHJpYnV0ZWRTdHJpbmc6bGlua1RhcmdldDpdKTogRGVsZXRlZC4KKyAgICAgICAgKCtb
V0tTYWZlQnJvd3NpbmdUZXh0VmlldyB2aWV3V2l0aFN0cmluZzpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKC1bV0tTYWZlQnJvd3NpbmdUZXh0VmlldyBjbGlja2VkT25MaW5rOmF0SW5kZXg6XSk6IERl
bGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL2lvcy9QYWdlQ2xpZW50SW1wbElPUy5tbToKKyAg
ICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld1dpbmRvd0FjdGl2ZSk6CisgICAg
ICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjppc1ZpZXdGb2N1c2VkKToKKyAgICAgICAgKFdl
YktpdDo6UGFnZUNsaWVudEltcGw6OmlzVmlld1Zpc2libGUpOgorICAgICAgICAoV2ViS2l0OjpQ
YWdlQ2xpZW50SW1wbDo6aXNWaWV3SW5XaW5kb3cpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xp
ZW50SW1wbDo6ZGVjaWRlUG9saWN5Rm9yR2VvbG9jYXRpb25QZXJtaXNzaW9uUmVxdWVzdCk6Cisg
ICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdNb2RlKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3Np
bmdXYXJuaW5nKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmNsZWFyU2FmZUJy
b3dzaW5nV2FybmluZyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjptaW1lVHlw
ZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVycyk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGll
bnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6UGFn
ZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlV2lsbEVuZCk6CisgICAgICAgIChXZWJLaXQ6
OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZCk6CisgICAgICAgIChXZWJL
aXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KToKKyAgICAg
ICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25h
cHNob3QpOgorICAgICAgICAoV2ViS2l0OjpQYWdlQ2xpZW50SW1wbDo6cmVxdWVzdFBhc3N3b3Jk
Rm9yUXVpY2tMb29rRG9jdW1lbnQpOgorICAgICAgICAqIFVJUHJvY2Vzcy9tYWMvUGFnZUNsaWVu
dEltcGxNYWMubW06CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpzaG93U2hhcmVT
aGVldCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVy
ZURpZEJlZ2luKToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25H
ZXN0dXJlV2lsbEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0
aW9uR2VzdHVyZURpZEVuZCk6CisgICAgICAgIChXZWJLaXQ6OlBhZ2VDbGllbnRJbXBsOjp3aWxs
UmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KToKKyAgICAgICAgKFdlYktpdDo6UGFnZUNsaWVudElt
cGw6OmRpZFJlbW92ZU5hdmlnYXRpb25HZXN0dXJlU25hcHNob3QpOgorCiAyMDE4LTExLTEyICBE
b24gT2xtc3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgU2hpcHBlZCBQ
TkdzIGluY2x1ZGUgYmFkIHByb2ZpbGVzOiBpQ0NQOiBrbm93biBpbmNvcnJlY3Qgc1JHQiBwcm9m
aWxlCkluZGV4OiBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwJKHJldmlz
aW9uIDIzODA4NSkKKysrIFNvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwJ
KHdvcmtpbmcgY29weSkKQEAgLTU2LDcgKzU2LDcgQEAgWFNTQXVkaXRvckVuYWJsZWQ6CiAKIFNh
ZmVCcm93c2luZ0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKLSAgZGVmYXVsdFZhbHVlOiBERUZBVUxU
X1NBRkVfQlJPV1NJTkdfRU5BQkxFRAorICBkZWZhdWx0VmFsdWU6IHRydWUKICAgd2ViY29yZUJp
bmRpbmc6IG5vbmUKIAogUHJpdmF0ZUJyb3dzaW5nRW5hYmxlZDoKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzRGVmYXVsdFZhbHVlcy5oCShyZXZpc2lv
biAyMzgwODUpCisrKyBTb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlc0RlZmF1bHRW
YWx1ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQAogI2VuZGlmCiAKICNpZiBQ
TEFURk9STShJT1NfRkFNSUxZKQotI2RlZmluZSBERUZBVUxUX1NBRkVfQlJPV1NJTkdfRU5BQkxF
RCBmYWxzZQogI2RlZmluZSBERUZBVUxUX0FMTE9XU19QSUNUVVJFX0lOX1BJQ1RVUkVfTUVESUFf
UExBWUJBQ0sgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0JBQ0tTUEFDRV9LRVlfTkFWSUdBVElPTl9F
TkFCTEVEIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfRlJBTUVfRkxBVFRFTklORyB0cnVlCkBAIC03
OCw3ICs3Nyw2IEBACiAjZGVmaW5lIERFRkFVTFRfSU5URVJBQ1RJVkVfTUVESUFfQ0FQVFVSRV9T
VFJFQU1fUkVQUk9NUFRfSU5URVJWQUxfSU5fTUlOVVRFUyAxCiAjZGVmaW5lIEVYUEVSSU1FTlRB
TF9GVUxMU0NSRUVOX0FQSV9ISURERU4gZmFsc2UKICNlbHNlCi0jZGVmaW5lIERFRkFVTFRfU0FG
RV9CUk9XU0lOR19FTkFCTEVEIHRydWUKICNkZWZpbmUgREVGQVVMVF9BTExPV1NfUElDVFVSRV9J
Tl9QSUNUVVJFX01FRElBX1BMQVlCQUNLIGZhbHNlCiAjZGVmaW5lIERFRkFVTFRfQkFDS1NQQUNF
X0tFWV9OQVZJR0FUSU9OX0VOQUJMRUQgdHJ1ZQogI2RlZmluZSBERUZBVUxUX0ZSQU1FX0ZMQVRU
RU5JTkcgZmFsc2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL21hYy9XS0Nv
bnRleHRQcml2YXRlTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL21hYy9XS0NvbnRleHRQcml2YXRlTWFjLm1tCShyZXZpc2lvbiAyMzgwODUpCisrKyBT
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9tYWMvV0tDb250ZXh0UHJpdmF0ZU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTczLDUgKzE3Myw1IEBAIGJvb2wgV0tDb250ZXh0U2hvdWxkU3Vn
Z2VzdEJsb2NrV2ViR0woKQogCiBib29sIFdLQ29udGV4dEhhbmRsZXNTYWZlQnJvd3NpbmcoKQog
ewotICAgIHJldHVybiBERUZBVUxUX1NBRkVfQlJPV1NJTkdfRU5BQkxFRDsKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
V2ViVmlldy5tbQkocmV2aXNpb24gMjM4MDg1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjc0LDYgKzI3NCw3IEBA
IHN0YXRpYyBzdGQ6Om9wdGlvbmFsPFdlYkNvcmU6OlNjcm9sbGJhck8KICAgICBXZWFrT2JqQ1B0
cjxpZCA8X1dLSW5wdXREZWxlZ2F0ZT4+IF9pbnB1dERlbGVnYXRlOwogCiAgICAgc3RkOjpvcHRp
b25hbDxCT09MPiBfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9uRm9y
VGVzdGluZzsKKyAgICBSZXRhaW5QdHI8V0tTYWZlQnJvd3NpbmdXYXJuaW5nPiBfc2FmZUJyb3dz
aW5nV2FybmluZzsKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiAgICAgUmV0YWluUHRyPF9X
S1JlbW90ZU9iamVjdFJlZ2lzdHJ5PiBfcmVtb3RlT2JqZWN0UmVnaXN0cnk7CkBAIC0xMjc0LDYg
KzEyNzUsMjEgQEAgLSAodm9pZClfZGlkQ2hhbmdlRWRpdG9yU3RhdGUKICAgICAgICAgW3VpRGVs
ZWdhdGUgX3dlYlZpZXc6c2VsZiBlZGl0b3JTdGF0ZURpZENoYW5nZTpkaWN0aW9uYXJ5UmVwcmVz
ZW50YXRpb25Gb3JFZGl0b3JTdGF0ZShfcGFnZS0+ZWRpdG9yU3RhdGUoKSldOwogfQogCistICh2
b2lkKV9zaG93U2FmZUJyb3dzaW5nV2FybmluZzooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdS
ZXN1bHQmKXJlc3VsdCBjb21wbGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChW
YXJpYW50PFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNv
bXBsZXRpb25IYW5kbGVyCit7CisgICAgX3NhZmVCcm93c2luZ1dhcm5pbmcgPSBhZG9wdE5TKFtb
V0tTYWZlQnJvd3NpbmdXYXJuaW5nIGFsbG9jXSBpbml0V2l0aEZyYW1lOnNlbGYuYm91bmRzIHNh
ZmVCcm93c2luZ1Jlc3VsdDpyZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6W3dlYWtTZWxmID0gV2Vh
a09iakNQdHI8V0tXZWJWaWV3PihzZWxmKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNv
bXBsZXRpb25IYW5kbGVyKV0gKGF1dG8mJiByZXN1bHQpIG11dGFibGUgeworICAgICAgICBpZiAo
YXV0byBzdHJvbmdTZWxmID0gd2Vha1NlbGYuZ2V0KCkpCisgICAgICAgICAgICBbc3RkOjpleGNo
YW5nZShzdHJvbmdTZWxmLT5fc2FmZUJyb3dzaW5nV2FybmluZywgbnVsbHB0cikgcmVtb3ZlRnJv
bVN1cGVydmlld107CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKFdURk1vdmUocmVzdWx0KSk7
CisgICAgfV0pOworICAgIFtzZWxmIGFkZFN1YnZpZXc6X3NhZmVCcm93c2luZ1dhcm5pbmcuZ2V0
KCldOworfQorCistICh2b2lkKV9jbGVhclNhZmVCcm93c2luZ1dhcm5pbmcKK3sKKyAgICBbc3Rk
OjpleGNoYW5nZShfc2FmZUJyb3dzaW5nV2FybmluZywgbnVsbHB0cikgcmVtb3ZlRnJvbVN1cGVy
dmlld107Cit9CisKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogCiAtICh2b2lkKV9k
aWRJbnNlcnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1lbnQgd2l0aFNvdXJj
ZTooTlNTdHJpbmcgKilzb3VyY2UKQEAgLTEzNTAsNiArMTM2Niw3IEBAIC0gKHZvaWQpc2V0Qm91
bmRzOihDR1JlY3QpYm91bmRzCiAKIC0gKHZvaWQpbGF5b3V0U3Vidmlld3MKIHsKKyAgICBbX3Nh
ZmVCcm93c2luZ1dhcm5pbmcgc2V0RnJhbWU6c2VsZi5ib3VuZHNdOwogICAgIFtzdXBlciBsYXlv
dXRTdWJ2aWV3c107CiAgICAgW3NlbGYgX2ZyYW1lT3JCb3VuZHNDaGFuZ2VkXTsKIH0KQEAgLTMz
MTAsNiArMzMyNyw3IEBAIC0gKHZvaWQpcHJlcGFyZUNvbnRlbnRJblJlY3Q6KE5TUmVjdClyZWMK
IC0gKHZvaWQpc2V0RnJhbWVTaXplOihOU1NpemUpc2l6ZQogewogICAgIFtzdXBlciBzZXRGcmFt
ZVNpemU6c2l6ZV07CisgICAgW19zYWZlQnJvd3NpbmdXYXJuaW5nIHNldEZyYW1lOnNlbGYuYm91
bmRzXTsKICAgICBfaW1wbC0+c2V0RnJhbWVTaXplKE5TU2l6ZVRvQ0dTaXplKHNpemUpKTsKIH0K
IApAQCAtNDcwOSw3ICs0NzI3LDcgQEAgLSAoX1dLQXR0YWNobWVudCAqKV9hdHRhY2htZW50Rm9y
SWRlbnRpZgogCiArIChCT09MKV9oYW5kbGVzU2FmZUJyb3dzaW5nCiB7Ci0gICAgcmV0dXJuIERF
RkFVTFRfU0FGRV9CUk9XU0lOR19FTkFCTEVEOworICAgIHJldHVybiB0cnVlOwogfQogCiAtICh2
b2lkKV9ldmFsdWF0ZUphdmFTY3JpcHRXaXRob3V0VXNlckdlc3R1cmU6KE5TU3RyaW5nICopamF2
YVNjcmlwdFN0cmluZyBjb21wbGV0aW9uSGFuZGxlcjoodm9pZCAoXikoaWQsIE5TRXJyb3IgKikp
Y29tcGxldGlvbkhhbmRsZXIKQEAgLTY3NDcsNyArNjc2NSw3IEBAIC0gKE5TVmlldyAqKV9zYWZl
QnJvd3NpbmdXYXJuaW5nRm9yVGVzdGkKICNlbHNlCiAtIChVSVZpZXcgKilfc2FmZUJyb3dzaW5n
V2FybmluZ0ZvclRlc3RpbmcKIHsKLSAgICByZXR1cm4gbmlsOworICAgIHJldHVybiBfc2FmZUJy
b3dzaW5nV2FybmluZy5nZXQoKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3SW50ZXJuYWwuaAkocmV2aXNp
b24gMjM4MDg1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmll
d0ludGVybmFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDEwIEBACiAjaW1wb3J0ICJX
S1dlYlZpZXdDb25maWd1cmF0aW9uLmgiCiAjaW1wb3J0ICJfV0tBdHRhY2htZW50SW50ZXJuYWwu
aCIKICNpbXBvcnQgIl9XS1dlYlZpZXdQcmludEZvcm1hdHRlckludGVybmFsLmgiCisjaW1wb3J0
IDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KICNpbXBvcnQgPHd0Zi9SZWZQdHIuaD4KICNpbXBv
cnQgPHd0Zi9SZXRhaW5QdHIuaD4KKyNpbXBvcnQgPHd0Zi9WYXJpYW50Lmg+CiAKICNpZiBQTEFU
Rk9STShJT1NfRkFNSUxZKQogI2ltcG9ydCAiVUlLaXRTUEkuaCIKQEAgLTYzLDExICs2NSwxNyBA
QCBjbGFzcyBBdHRhY2htZW50OwogfQogCiBuYW1lc3BhY2UgV2ViS2l0IHsKK2VudW0gY2xhc3Mg
Q29udGludWVVbnNhZmVMb2FkIDogYm9vbDsKK2NsYXNzIFNhZmVCcm93c2luZ1Jlc3VsdDsKIGNs
YXNzIFZpZXdTbmFwc2hvdDsKIGNsYXNzIFdlYlBhZ2VQcm94eTsKIHN0cnVjdCBQcmludEluZm87
CiB9CiAKK25hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIFVSTDsKK30KKwogQGNsYXNzIFdLV2Vi
Vmlld0NvbnRlbnRQcm92aWRlclJlZ2lzdHJ5OwogQGNsYXNzIFdLUGFzc3dvcmRWaWV3OwogQGNs
YXNzIF9XS0ZyYW1lSGFuZGxlOwpAQCAtMTcxLDYgKzE3OSw5IEBAIHN0cnVjdCBQcmludEluZm87
CiAtICh2b2lkKV9kaWRJbnNlcnRBdHRhY2htZW50OihBUEk6OkF0dGFjaG1lbnQmKWF0dGFjaG1l
bnQgd2l0aFNvdXJjZTooTlNTdHJpbmcgKilzb3VyY2U7CiAjZW5kaWYKIAorLSAodm9pZClfc2hv
d1NhZmVCcm93c2luZ1dhcm5pbmc6KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0Jily
ZXN1bHQgY29tcGxldGlvbkhhbmRsZXI6KENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxX
ZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiljb21wbGV0aW9u
SGFuZGxlcjsKKy0gKHZvaWQpX2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZzsKKwogLSAoc3RkOjpv
cHRpb25hbDxCT09MPilfcmVzb2x1dGlvbkZvclNoYXJlU2hlZXRJbW1lZGlhdGVDb21wbGV0aW9u
Rm9yVGVzdGluZzsKIAogLSAoV0tQYWdlUmVmKV9wYWdlRm9yVGVzdGluZzsKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9QYWdlQ2xpZW50SW1wbENvY29hLmgJ
KHJldmlzaW9uIDIzODA4NSkKKysrIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VD
bGllbnRJbXBsQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI3ByYWdt
YSBvbmNlCiAKICNpbmNsdWRlICJQYWdlQ2xpZW50LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtPYmpD
UHRyLmg+CiAKIEBjbGFzcyBXS1dlYlZpZXc7CiAKQEAgLTUwLDcgKzUxLDcgQEAgcHVibGljOgog
I2VuZGlmCiAKIHByb3RlY3RlZDoKLSAgICBXS1dlYlZpZXcgKm1fd2ViVmlldzsKKyAgICBXZWFr
T2JqQ1B0cjxXS1dlYlZpZXc+IG1fd2ViVmlldzsKIH07CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0NvY29hL1BhZ2VDbGllbnRJbXBsQ29jb2EubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVudEltcGxDb2NvYS5tbQkocmV2
aXNpb24gMjM4MDg1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvUGFnZUNsaWVu
dEltcGxDb2NvYS5tbQkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBhZ2VD
bGllbnRJbXBsQ29jb2E6OmRpZFJlbW92ZUF0dGFjCiBOU0ZpbGVXcmFwcGVyICpQYWdlQ2xpZW50
SW1wbENvY29hOjphbGxvY0ZpbGVXcmFwcGVySW5zdGFuY2UoKSBjb25zdAogewogI2lmIFdLX0FQ
SV9FTkFCTEVECi0gICAgQ2xhc3MgY2xzID0gbV93ZWJWaWV3LmNvbmZpZ3VyYXRpb24uX2F0dGFj
aG1lbnRGaWxlV3JhcHBlckNsYXNzID86IFtOU0ZpbGVXcmFwcGVyIHNlbGZdOworICAgIENsYXNz
IGNscyA9IFttX3dlYlZpZXcgY29uZmlndXJhdGlvbl0uX2F0dGFjaG1lbnRGaWxlV3JhcHBlckNs
YXNzID86IFtOU0ZpbGVXcmFwcGVyIHNlbGZdOwogICAgIHJldHVybiBbY2xzIGFsbG9jXTsKICNl
bHNlCiAgICAgcmV0dXJuIG5pbDsKQEAgLTgwLDcgKzgwLDcgQEAgTlNTZXQgKlBhZ2VDbGllbnRJ
bXBsQ29jb2E6OnNlcmlhbGl6YWJsZQogewogICAgIENsYXNzIGRlZmF1bHRGaWxlV3JhcHBlckNs
YXNzID0gTlNGaWxlV3JhcHBlci5zZWxmOwogI2lmIFdLX0FQSV9FTkFCTEVECi0gICAgQ2xhc3Mg
Y29uZmlndXJlZEZpbGVXcmFwcGVyQ2xhc3MgPSBtX3dlYlZpZXcuY29uZmlndXJhdGlvbi5fYXR0
YWNobWVudEZpbGVXcmFwcGVyQ2xhc3M7CisgICAgQ2xhc3MgY29uZmlndXJlZEZpbGVXcmFwcGVy
Q2xhc3MgPSBbbV93ZWJWaWV3IGNvbmZpZ3VyYXRpb25dLl9hdHRhY2htZW50RmlsZVdyYXBwZXJD
bGFzczsKICAgICBpZiAoY29uZmlndXJlZEZpbGVXcmFwcGVyQ2xhc3MgJiYgY29uZmlndXJlZEZp
bGVXcmFwcGVyQ2xhc3MgIT0gZGVmYXVsdEZpbGVXcmFwcGVyQ2xhc3MpCiAgICAgICAgIHJldHVy
biBbTlNTZXQgc2V0V2l0aE9iamVjdHM6Y29uZmlndXJlZEZpbGVXcmFwcGVyQ2xhc3MsIGRlZmF1
bHRGaWxlV3JhcHBlckNsYXNzLCBuaWxdOwogI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9Db2NvYS9XS1NhZmVCcm93c2luZ1dhcm5pbmcuaAkocmV2aXNp
b24gMjM4MDg1KQorKysgU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3Np
bmdXYXJuaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE4ICs0NCwyMCBAQCBjbGFzcyBTYWZl
QnJvd3NpbmdSZXN1bHQ7CiBlbnVtIGNsYXNzIENvbnRpbnVlVW5zYWZlTG9hZCA6IGJvb2w7CiB9
CiAKK09CSkNfQ0xBU1MgV0tTYWZlQnJvd3NpbmdUZXh0VmlldzsKKwogI2lmIFBMQVRGT1JNKE1B
QykKIHVzaW5nIFJlY3RUeXBlID0gTlNSZWN0OwotdXNpbmcgU3RhY2tWaWV3VHlwZSA9IE5TU3Rh
Y2tWaWV3OworQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1dhcm5pbmcgOiBOU1ZpZXc8TlNUZXh0
Vmlld0RlbGVnYXRlPgogI2Vsc2UKIHVzaW5nIFJlY3RUeXBlID0gQ0dSZWN0OwotdXNpbmcgU3Rh
Y2tWaWV3VHlwZSA9IFVJU3RhY2tWaWV3OworQGludGVyZmFjZSBXS1NhZmVCcm93c2luZ1dhcm5p
bmcgOiBVSVNjcm9sbFZpZXc8VUlUZXh0Vmlld0RlbGVnYXRlPgogI2VuZGlmCi0KLUBpbnRlcmZh
Y2UgV0tTYWZlQnJvd3NpbmdXYXJuaW5nIDogU3RhY2tWaWV3VHlwZSB7Cit7CiBAcGFja2FnZQog
ICAgIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5zYWZl
TG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4gX2NvbXBsZXRpb25IYW5kbGVyOwogICAgIFJlZlB0cjxj
b25zdCBXZWJLaXQ6OlNhZmVCcm93c2luZ1Jlc3VsdD4gX3Jlc3VsdDsKKyAgICBSZXRhaW5QdHI8
TlNNdXRhYmxlQXJyYXk8V0tTYWZlQnJvd3NpbmdUZXh0VmlldyAqPj4gX3RleHRWaWV3czsKIH0K
IAogLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKWZyYW1lIHNhZmVCcm93
c2luZ1Jlc3VsdDooY29uc3QgV2ViS2l0OjpTYWZlQnJvd3NpbmdSZXN1bHQmKXJlc3VsdCBjb21w
bGV0aW9uSGFuZGxlcjooQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWYXJpYW50PFdlYktpdDo6Q29u
dGludWVVbnNhZmVMb2FkLCBXZWJDb3JlOjpVUkw+JiYpPiYmKWNvbXBsZXRpb25IYW5kbGVyOwpJ
bmRleDogU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5n
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0NvY29hL1dLU2FmZUJy
b3dzaW5nV2FybmluZy5tbQkocmV2aXNpb24gMjM4MDg1KQorKysgU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQ29jb2EvV0tTYWZlQnJvd3NpbmdXYXJuaW5nLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw0OSArMzMsMTA3IEBACiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KICNpbXBvcnQgPHd0Zi9M
YW5ndWFnZS5oPgogCi1jb25zdCBDR0Zsb2F0IGV4Y2xhbWF0aW9uUG9pbnRTaXplID0gMzA7Ci1j
b25zdCBDR0Zsb2F0IHRleHRTaXplID0gMTM7Citjb25zdGV4cHIgQ0dGbG9hdCBleGNsYW1hdGlv
blBvaW50U2l6ZSA9IDMwOworY29uc3RleHByIENHRmxvYXQgdGl0bGVTaXplID0gMjY7Citjb25z
dGV4cHIgQ0dGbG9hdCBib3hDb3JuZXJSYWRpdXMgPSA2OworI2lmIEhBVkUoU0FGRV9CUk9XU0lO
RykKK2NvbnN0ZXhwciBDR0Zsb2F0IG1hcmdpblNpemUgPSAyMDsKK2NvbnN0ZXhwciBDR0Zsb2F0
IG1heFdpZHRoID0gNjc1OworI2VuZGlmCisKICNpZiBQTEFURk9STShNQUMpCi1jb25zdCBDR0Zs
b2F0IG1hcmdpblNpemUgPSAyMDsKLWNvbnN0IHNpemVfdCBtYXhXaWR0aCA9IDYwMDsKK2NvbnN0
ZXhwciBDR0Zsb2F0IHRleHRTaXplID0gMTQ7CiB1c2luZyBDb2xvclR5cGUgPSBOU0NvbG9yOwog
dXNpbmcgRm9udFR5cGUgPSBOU0ZvbnQ7Ci11c2luZyBWaWV3VHlwZSA9IE5TVmlldzsKLXVzaW5n
IEJlemllclBhdGhUeXBlID0gTlNCZXppZXJQYXRoOwogdXNpbmcgVGV4dFZpZXdUeXBlID0gTlNU
ZXh0VmlldzsKK3VzaW5nIEJ1dHRvblR5cGUgPSBOU0J1dHRvbjsKK3VzaW5nIEFsaWdubWVudFR5
cGUgPSBOU0xheW91dEF0dHJpYnV0ZTsKK3VzaW5nIFZpZXdUeXBlID0gTlNWaWV3OwordXNpbmcg
U2l6ZVR5cGUgPSBOU1NpemU7CiAjZWxzZQorY29uc3RleHByIENHRmxvYXQgdGV4dFNpemUgPSAy
MDsKIHVzaW5nIENvbG9yVHlwZSA9IFVJQ29sb3I7CiB1c2luZyBGb250VHlwZSA9IFVJRm9udDsK
LXVzaW5nIFZpZXdUeXBlID0gVUlWaWV3OwotdXNpbmcgQmV6aWVyUGF0aFR5cGUgPSBVSUJlemll
clBhdGg7CiB1c2luZyBUZXh0Vmlld1R5cGUgPSBVSVRleHRWaWV3OwordXNpbmcgQnV0dG9uVHlw
ZSA9IFVJQnV0dG9uOwordXNpbmcgQWxpZ25tZW50VHlwZSA9IFVJU3RhY2tWaWV3QWxpZ25tZW50
OwordXNpbmcgVmlld1R5cGUgPSBVSVZpZXc7Cit1c2luZyBTaXplVHlwZSA9IENHU2l6ZTsKICNl
bmRpZgogCi1zdGF0aWMgaWQgY29uZmlybU1hbHdhcmVTZW50aW5lbCgpCitlbnVtIGNsYXNzIFdh
cm5pbmdJdGVtIDogdWludDhfdCB7CisgICAgQmFja2dyb3VuZCwKKyAgICBCb3hCYWNrZ3JvdW5k
LAorICAgIEV4Y2xhbWF0aW9uUG9pbnQsCisgICAgVGl0bGVUZXh0LAorICAgIE1lc3NhZ2VUZXh0
LAorICAgIFNob3dEZXRhaWxzQnV0dG9uLAorICAgIEdvQmFja0J1dHRvbgorfTsKKworc3RhdGlj
IE5TVVJMICpjb25maXJtTWFsd2FyZVNlbnRpbmVsKCkKIHsKLSAgICByZXR1cm4gQCJXS0NvbmZp
cm1NYWx3YXJlU2VudGluZWwiOworICAgIHJldHVybiBbTlNVUkwgVVJMV2l0aFN0cmluZzpAIldL
Q29uZmlybU1hbHdhcmVTZW50aW5lbCJdOwogfQogCi1zdGF0aWMgaWQgdmlzaXRVbnNhZmVXZWJz
aXRlU2VudGluZWwoKQorc3RhdGljIE5TVVJMICp2aXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCgp
CiB7Ci0gICAgcmV0dXJuIEAiV0tWaXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCI7CisgICAgcmV0
dXJuIFtOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tWaXNpdFVuc2FmZVdlYnNpdGVTZW50aW5lbCJd
OwogfQogCi1zdGF0aWMgQ29sb3JUeXBlICpjb2xvck5hbWVkKE5TU3RyaW5nICpuYW1lKQorc3Rh
dGljIENvbG9yVHlwZSAqY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtIGl0ZW0sIFZpZXdUeXBlICp3
YXJuaW5nKQogeworICAgIEFTU0VSVChbd2FybmluZyBpc0tpbmRPZkNsYXNzOltXS1NhZmVCcm93
c2luZ1dhcm5pbmcgY2xhc3NdXSk7CiAjaWYgUExBVEZPUk0oTUFDKQorCisgICAgYXV0byBjb2xv
ck5hbWVkID0gW10gKE5TU3RyaW5nICpuYW1lKSAtPiBDb2xvclR5cGUqIHsKICNpZiBIQVZFKFNB
RkVfQlJPV1NJTkcpCi0gICAgcmV0dXJuIFtOU0NvbG9yIGNvbG9yTmFtZWQ6bmFtZSBidW5kbGU6
W05TQnVuZGxlIGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdXTsKKyAg
ICAgICAgcmV0dXJuIFtOU0NvbG9yIGNvbG9yTmFtZWQ6bmFtZSBidW5kbGU6W05TQnVuZGxlIGJ1
bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdXTsKICNlbHNlCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG5pbDsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgICAgIHJldHVybiBuaWw7CiAjZW5kaWYKKyAgICB9OworCisgICAgc3dp
dGNoIChpdGVtKSB7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6QmFja2dyb3VuZDoKKyAgICAgICAg
cmV0dXJuIGNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdCYWNrZ3JvdW5kIik7Cisg
ICAgY2FzZSBXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZDoKKyAgICAgICAgcmV0dXJuIFtOU0Nv
bG9yIHdpbmRvd0JhY2tncm91bmRDb2xvcl07CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6VGl0bGVU
ZXh0OgorICAgIGNhc2UgV2FybmluZ0l0ZW06OkV4Y2xhbWF0aW9uUG9pbnQ6CisgICAgICAgIHJl
dHVybiBjb2xvck5hbWVkKEAiV0tTYWZlQnJvd3NpbmdXYXJuaW5nVGl0bGUiKTsKKyAgICBjYXNl
IFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dDoKKyAgICAgICAgcmV0dXJuIGNvbG9yTmFtZWQoQCJX
S1NhZmVCcm93c2luZ1dhcm5pbmdUZXh0Iik7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6U2hvd0Rl
dGFpbHNCdXR0b246CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6R29CYWNrQnV0dG9uOgorICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICB9CiAjZWxz
ZQotICAgIHJldHVybiBbVUlDb2xvciBjb2xvck5hbWVkOm5hbWUgaW5CdW5kbGU6W05TQnVuZGxl
IGJ1bmRsZVdpdGhJZGVudGlmaWVyOkAiY29tLmFwcGxlLldlYktpdCJdIGNvbXBhdGlibGVXaXRo
VHJhaXRDb2xsZWN0aW9uOm5pbF07CisgICAgVUlDb2xvciAqcmVkID0gW1VJQ29sb3IgY29sb3JX
aXRoUmVkOjAuOTk4IGdyZWVuOjAuMjM5IGJsdWU6MC4yMzMgYWxwaGE6MS4wXTsKKyAgICBVSUNv
bG9yICp3aGl0ZSA9IFtVSUNvbG9yIHdoaXRlQ29sb3JdOworICAgIGJvb2wgbmFycm93ID0gd2Fy
bmluZy50cmFpdENvbGxlY3Rpb24uaG9yaXpvbnRhbFNpemVDbGFzcyA9PSBVSVVzZXJJbnRlcmZh
Y2VTaXplQ2xhc3NDb21wYWN0OworCisgICAgc3dpdGNoIChpdGVtKSB7CisgICAgY2FzZSBXYXJu
aW5nSXRlbTo6QmFja2dyb3VuZDoKKyAgICAgICAgcmV0dXJuIHJlZDsKKyAgICBjYXNlIFdhcm5p
bmdJdGVtOjpCb3hCYWNrZ3JvdW5kOgorICAgICAgICByZXR1cm4gbmFycm93ID8gcmVkIDogd2hp
dGU7CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6VGl0bGVUZXh0OgorICAgIGNhc2UgV2FybmluZ0l0
ZW06OkV4Y2xhbWF0aW9uUG9pbnQ6CisgICAgICAgIHJldHVybiBuYXJyb3cgPyB3aGl0ZSA6IHJl
ZDsKKyAgICBjYXNlIFdhcm5pbmdJdGVtOjpNZXNzYWdlVGV4dDoKKyAgICBjYXNlIFdhcm5pbmdJ
dGVtOjpTaG93RGV0YWlsc0J1dHRvbjoKKyAgICAgICAgcmV0dXJuIG5hcnJvdyA/IHdoaXRlIDog
W1VJQ29sb3IgZGFya1RleHRDb2xvcl07CisgICAgY2FzZSBXYXJuaW5nSXRlbTo6R29CYWNrQnV0
dG9uOgorICAgICAgICByZXR1cm4gbmFycm93ID8gd2hpdGUgOiB3YXJuaW5nLnRpbnRDb2xvcjsK
KyAgICB9CiAjZW5kaWYKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gbmls
OwogfQogCi0jaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIHZvaWQgcmVwbGFjZShOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nICpzdHJpbmcsIE5TU3RyaW5nICp0b1JlcGxhY2UsIE5TU3RyaW5nICpy
ZXBsYWNlV2l0aCkKIHsKICAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3Ry
aW5nLnN0cmluZyByYW5nZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aFN0cmluZzpyZXBsYWNlV2l0
aF07CkBAIC05MCw3ICsxNDgsNiBAQCBzdGF0aWMgdm9pZCBhZGRMaW5rQW5kUmVwbGFjZShOU011
dGFibGVBCiAgICAgfSByYW5nZTpOU01ha2VSYW5nZSgwLCByZXBsYWNlV2l0aC5sZW5ndGgpXTsK
ICAgICBbc3RyaW5nIHJlcGxhY2VDaGFyYWN0ZXJzSW5SYW5nZTpbc3RyaW5nLnN0cmluZyByYW5n
ZU9mU3RyaW5nOnRvUmVwbGFjZV0gd2l0aEF0dHJpYnV0ZWRTdHJpbmc6c3RyaW5nV2l0aExpbmtd
OwogfQotI2VuZGlmCiAKIEBpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdFeGNsYW1hdGlvblBvaW50
IDogVmlld1R5cGUKIEBlbmQKQEAgLTk5LDIyICsxNTYsMzkgQEAgQGludGVyZmFjZSBXS1NhZmVC
cm93c2luZ0V4Y2xhbWF0aW9uUG9pbgogCiAtICh2b2lkKWRyYXdSZWN0OihSZWN0VHlwZSlyZWN0
CiB7Ci0gICAgW2NvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdUaXRsZSIpIHNldF07
Ci0jaWYgUExBVEZPUk0oTUFDKQotI2RlZmluZSBhZGRBcmNXaXRoQ2VudGVyIGFwcGVuZEJlemll
clBhdGhXaXRoQXJjV2l0aENlbnRlcgotICAgIE5TUmVjdCBzcXVhcmUgPSBOU01ha2VSZWN0KDAs
IDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSk7CisgICAgY29u
c3RleHByIENHRmxvYXQgY2VudGVyWCA9IGV4Y2xhbWF0aW9uUG9pbnRTaXplIC8gMjsKKyAgICBj
b25zdGV4cHIgQ0dGbG9hdCBwb2ludENlbnRlclkgPSBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDcg
LyAzMDsKKyAgICBjb25zdGV4cHIgQ0dGbG9hdCBwb2ludFJhZGl1cyA9IDIuMjUgKiBleGNsYW1h
dGlvblBvaW50U2l6ZSAvIDMwOworICAgIGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVCb3R0b21DZW50
ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiAxMyAvIDMwOworICAgIGNvbnN0ZXhwciBDR0Zs
b2F0IGxpbmVUb3BDZW50ZXJZID0gZXhjbGFtYXRpb25Qb2ludFNpemUgKiAyMyAvIDMwOworICAg
IGNvbnN0ZXhwciBDR0Zsb2F0IGxpbmVSYWRpdXMgPSAxLjc1ICogZXhjbGFtYXRpb25Qb2ludFNp
emUgLyAzMDsKKyAgICBWaWV3VHlwZSAqd2FybmluZyA9IHNlbGYuc3VwZXJ2aWV3LnN1cGVydmll
dzsKKyNpZiBQTEFURk9STShNQUMpCisgICAgW2NvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6RXhj
bGFtYXRpb25Qb2ludCwgd2FybmluZykgc2V0XTsKKyAgICBOU0JlemllclBhdGggKmV4Y2xhbWF0
aW9uUG9pbnQgPSBbTlNCZXppZXJQYXRoIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpOU01ha2VS
ZWN0KDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNsYW1hdGlvblBvaW50U2l6ZSldOwor
ICAgIFtleGNsYW1hdGlvblBvaW50IGFwcGVuZEJlemllclBhdGhXaXRoQXJjV2l0aENlbnRlcjog
eyBjZW50ZXJYLCBsaW5lQm90dG9tQ2VudGVyWSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5n
bGU6MCBlbmRBbmdsZToxODAgY2xvY2t3aXNlOllFU107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQg
YXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNXaXRoQ2VudGVyOiB7IGNlbnRlclgsIGxpbmVUb3BDZW50
ZXJZIH0gcmFkaXVzOmxpbmVSYWRpdXMgc3RhcnRBbmdsZToxODAgZW5kQW5nbGU6MzYwIGNsb2Nr
d2lzZTpZRVNdOworICAgIFtleGNsYW1hdGlvblBvaW50IGxpbmVUb1BvaW50OiB7IGNlbnRlclgg
KyBsaW5lUmFkaXVzLCBsaW5lQm90dG9tQ2VudGVyWSB9XTsKKyAgICBbZXhjbGFtYXRpb25Qb2lu
dCBhcHBlbmRCZXppZXJQYXRoV2l0aEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgcG9pbnRDZW50
ZXJZIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6MCBlbmRBbmdsZToxODAgY2xvY2t3
aXNlOllFU107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYXBwZW5kQmV6aWVyUGF0aFdpdGhBcmNX
aXRoQ2VudGVyOiB7IGNlbnRlclgsIHBvaW50Q2VudGVyWSB9IHJhZGl1czpwb2ludFJhZGl1cyBz
dGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107CiAjZWxzZQotICAgIENH
UmVjdCBzcXVhcmUgPSBDR1JlY3RNYWtlKDAsIDAsIGV4Y2xhbWF0aW9uUG9pbnRTaXplLCBleGNs
YW1hdGlvblBvaW50U2l6ZSk7CisgICAgYXV0byBmbGlwID0gW10gKGF1dG8geSkgeworICAgICAg
ICByZXR1cm4gZXhjbGFtYXRpb25Qb2ludFNpemUgLSB5OworICAgIH07CisgICAgW2NvbG9yRm9y
SXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZCwgd2FybmluZykgc2V0XTsKKyAgICBhdXRv
IHNxdWFyZSA9IENHUmVjdE1ha2UoMCwgMCwgZXhjbGFtYXRpb25Qb2ludFNpemUsIGV4Y2xhbWF0
aW9uUG9pbnRTaXplKTsKKyAgICBbW1VJQmV6aWVyUGF0aCBiZXppZXJQYXRoV2l0aFJlY3Q6c3F1
YXJlXSBmaWxsXTsKKyAgICAKKyAgICBbY29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpFeGNsYW1h
dGlvblBvaW50LCB3YXJuaW5nKSBzZXRdOworICAgIFVJQmV6aWVyUGF0aCAqZXhjbGFtYXRpb25Q
b2ludCA9IFtVSUJlemllclBhdGggYmV6aWVyUGF0aFdpdGhPdmFsSW5SZWN0OnNxdWFyZV07Cisg
ICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlwKGxp
bmVUb3BDZW50ZXJZKSB9IHJhZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6MiAqIHBpRG91Ymxl
IGVuZEFuZ2xlOnBpRG91YmxlIGNsb2Nrd2lzZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQg
YWRkQXJjV2l0aENlbnRlcjogeyBjZW50ZXJYLCBmbGlwKGxpbmVCb3R0b21DZW50ZXJZKSB9IHJh
ZGl1czpsaW5lUmFkaXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUgZW5kQW5nbGU6MCBjbG9ja3dpc2U6
Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgY2VudGVyWCwg
ZmxpcChwb2ludENlbnRlclkpIH0gcmFkaXVzOnBvaW50UmFkaXVzIHN0YXJ0QW5nbGU6MCBlbmRB
bmdsZTpwaURvdWJsZSBjbG9ja3dpc2U6Tk9dOworICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFy
Y1dpdGhDZW50ZXI6IHsgY2VudGVyWCwgZmxpcChwb2ludENlbnRlclkpIH0gcmFkaXVzOnBvaW50
UmFkaXVzIHN0YXJ0QW5nbGU6cGlEb3VibGUgZW5kQW5nbGU6cGlEb3VibGUgKiAyIGNsb2Nrd2lz
ZTpOT107CisgICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkTGluZVRvUG9pbnQ6IHsgY2VudGVyWCAr
IGxpbmVSYWRpdXMsIGZsaXAobGluZUJvdHRvbUNlbnRlclkpIH1dOworICAgIFtleGNsYW1hdGlv
blBvaW50IGFkZExpbmVUb1BvaW50OiB7IGNlbnRlclggKyBsaW5lUmFkaXVzLCBmbGlwKGxpbmVU
b3BDZW50ZXJZKSB9XTsKICNlbmRpZgotICAgIEJlemllclBhdGhUeXBlICpleGNsYW1hdGlvblBv
aW50ID0gW0JlemllclBhdGhUeXBlIGJlemllclBhdGhXaXRoT3ZhbEluUmVjdDpzcXVhcmVdOwot
ICAgIFtleGNsYW1hdGlvblBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2lu
dFNpemUgLyAyLCBleGNsYW1hdGlvblBvaW50U2l6ZSAqIDEzIC8gMzAgfSByYWRpdXM6MS43NSBz
dGFydEFuZ2xlOjAgZW5kQW5nbGU6MTgwIGNsb2Nrd2lzZTpZRVNdOwotICAgIFtleGNsYW1hdGlv
blBvaW50IGFkZEFyY1dpdGhDZW50ZXI6IHsgZXhjbGFtYXRpb25Qb2ludFNpemUgLyAyLCBleGNs
YW1hdGlvblBvaW50U2l6ZSAqIDIzIC8gMzAgfSByYWRpdXM6MS43NSBzdGFydEFuZ2xlOjE4MCBl
bmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107Ci0gICAgW2V4Y2xhbWF0aW9uUG9pbnQgYWRkQXJj
V2l0aENlbnRlcjogeyBleGNsYW1hdGlvblBvaW50U2l6ZSAvIDIsIGV4Y2xhbWF0aW9uUG9pbnRT
aXplICogNyAvIDMwIH0gcmFkaXVzOjIuMjUgc3RhcnRBbmdsZTowIGVuZEFuZ2xlOjE4MCBjbG9j
a3dpc2U6WUVTXTsKLSAgICBbZXhjbGFtYXRpb25Qb2ludCBhZGRBcmNXaXRoQ2VudGVyOiB7IGV4
Y2xhbWF0aW9uUG9pbnRTaXplIC8gMiwgZXhjbGFtYXRpb25Qb2ludFNpemUgKiA3IC8gMzAgfSBy
YWRpdXM6Mi4yNSBzdGFydEFuZ2xlOjE4MCBlbmRBbmdsZTozNjAgY2xvY2t3aXNlOllFU107CiAg
ICAgW2V4Y2xhbWF0aW9uUG9pbnQgZmlsbF07Ci0jaWYgUExBVEZPUk0oTUFDKQotI3VuZGVmIGFk
ZEFyY1dpdGhDZW50ZXIKLSNlbmRpZgogfQogCiAtIChOU1NpemUpaW50cmluc2ljQ29udGVudFNp
emUKQEAgLTEyNCw3ICsxOTgsNiBAQCAtIChOU1NpemUpaW50cmluc2ljQ29udGVudFNpemUKIAog
QGVuZAogCi0jaWYgUExBVEZPUk0oTUFDKQogc3RhdGljIE5TVVJMICpyZXBvcnRBbkVycm9yVVJM
KGNvbnN0IFdlYktpdDo6U2FmZUJyb3dzaW5nUmVzdWx0JiByZXN1bHQpCiB7CiAgICAgcmV0dXJu
IFdlYkNvcmU6OlVSTCh7IH0sIG1ha2VTdHJpbmcocmVzdWx0LnJlcG9ydEFuRXJyb3JVUkxCYXNl
KCksICImdXJsPSIsIGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMocmVzdWx0LnVybCgpKSwg
IiZobD0iLCBkZWZhdWx0TGFuZ3VhZ2UoKSkpOwpAQCAtMTkxLDE0ICsyNjQsNjMgQEAgc3RhdGlj
IE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKmRldGFpbAogICAgIEFTU0VSVChyZXN1bHQuaXNV
bndhbnRlZFNvZnR3YXJlKCkpOwogICAgIHJldHVybiBtYWx3YXJlT3JVbndhbnRlZFNvZnR3YXJl
RGV0YWlscyhyZXN1bHQsIFdFQl9VSV9OU1NUUklORyhAIldhcm5pbmdzIGFyZSBzaG93biBmb3Ig
d2Vic2l0ZXMgd2hlcmUgaGFybWZ1bCBzb2Z0d2FyZSBoYXMgYmVlbiBkZXRlY3RlZC4gWW91IGNh
biBjaGVjayAldGhlLXN0YXR1cy1vZi1zaXRlJSBvbiB0aGUgJXNhZmVCcm93c2luZ1Byb3ZpZGVy
JSBkaWFnbm9zdGljIHBhZ2UuIiwgIlVud2FudGVkIHNvZnR3YXJlIHdhcm5pbmcgZGVzY3JpcHRp
b24iKSwgQCIldGhlLXN0YXR1cy1vZi1zaXRlJSIsIGZhbHNlKTsKIH0KKworc3RhdGljIEJ1dHRv
blR5cGUgKm1ha2VCdXR0b24oV2FybmluZ0l0ZW0gaXRlbSwgV0tTYWZlQnJvd3NpbmdXYXJuaW5n
ICp3YXJuaW5nLCBTRUwgYWN0aW9uKQoreworICAgIE5TU3RyaW5nICp0aXRsZSA9IG5pbDsKKyAg
ICBpZiAoaXRlbSA9PSBXYXJuaW5nSXRlbTo6U2hvd0RldGFpbHNCdXR0b24pCisgICAgICAgIHRp
dGxlID0gV0VCX1VJX05TU1RSSU5HKEAiU2hvdyBkZXRhaWxzIiwgIkFjdGlvbiBmcm9tIHNhZmUg
YnJvd3Npbmcgd2FybmluZyIpOworICAgIGVsc2UKKyAgICAgICAgdGl0bGUgPSBXRUJfVUlfTlNT
VFJJTkcoQCJHbyBiYWNrIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpOwor
ICAgIHRpdGxlID0gW3RpdGxlIGNhcGl0YWxpemVkU3RyaW5nXTsKKyNpZiBQTEFURk9STShNQUMp
CisgICAgcmV0dXJuIFtOU0J1dHRvbiBidXR0b25XaXRoVGl0bGU6dGl0bGUgdGFyZ2V0Ondhcm5p
bmcgYWN0aW9uOmFjdGlvbl07CisjZWxzZQorICAgIFVJQnV0dG9uICpidXR0b24gPSBbVUlCdXR0
b24gYnV0dG9uV2l0aFR5cGU6VUlCdXR0b25UeXBlU3lzdGVtXTsKKyAgICBOU0F0dHJpYnV0ZWRT
dHJpbmcgKmF0dHJpYnV0ZWRUaXRsZSA9IFtbW05TQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5p
dFdpdGhTdHJpbmc6dGl0bGUgYXR0cmlidXRlczpAeworICAgICAgICBOU1VuZGVybGluZVN0eWxl
QXR0cmlidXRlTmFtZTpAKE5TVW5kZXJsaW5lU3R5bGVTaW5nbGUpLAorICAgICAgICBOU1VuZGVy
bGluZUNvbG9yQXR0cmlidXRlTmFtZTpbVUlDb2xvciB3aGl0ZUNvbG9yXSwKKyAgICAgICAgTlNG
b3JlZ3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lOmNvbG9yRm9ySXRlbShpdGVtLCB3YXJuaW5nKSwK
KyAgICAgICAgTlNGb250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0
ZXh0U2l6ZV0KKyAgICB9XSBhdXRvcmVsZWFzZV07CisgICAgW2J1dHRvbiBzZXRBdHRyaWJ1dGVk
VGl0bGU6YXR0cmlidXRlZFRpdGxlIGZvclN0YXRlOlVJQ29udHJvbFN0YXRlTm9ybWFsXTsKKyAg
ICBbYnV0dG9uIGFkZFRhcmdldDp3YXJuaW5nIGFjdGlvbjphY3Rpb24gZm9yQ29udHJvbEV2ZW50
czpVSUNvbnRyb2xFdmVudFRvdWNoVXBJbnNpZGVdOworICAgIHJldHVybiBidXR0b247CisjZW5k
aWYKK30KKworc3RhdGljIFZpZXdUeXBlICptYWtlVGl0bGVMYWJlbChOU1N0cmluZyAqdGl0bGUs
IFZpZXdUeXBlICp3YXJuaW5nKQoreworICAgIGF1dG8gYXR0cmlidXRlZFN0cmluZyA9IFtbW05T
QXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdFdpdGhTdHJpbmc6dGl0bGUgYXR0cmlidXRlczpA
eworICAgICAgICBOU0ZvbnRBdHRyaWJ1dGVOYW1lOltGb250VHlwZSBib2xkU3lzdGVtRm9udE9m
U2l6ZTp0aXRsZVNpemVdLAorICAgICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6
Y29sb3JGb3JJdGVtKFdhcm5pbmdJdGVtOjpUaXRsZVRleHQsIHdhcm5pbmcpCisgICAgfV0gYXV0
b3JlbGVhc2VdOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICByZXR1cm4gW05TVGV4dEZpZWxkIGxh
YmVsV2l0aEF0dHJpYnV0ZWRTdHJpbmc6YXR0cmlidXRlZFN0cmluZ107CisjZWxzZQorICAgIGF1
dG8gbGFiZWwgPSBbW1VJTGFiZWwgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgbGFiZWwuYXR0cmli
dXRlZFRleHQgPSBhdHRyaWJ1dGVkU3RyaW5nOworICAgIGxhYmVsLmxpbmVCcmVha01vZGUgPSBO
U0xpbmVCcmVha0J5V29yZFdyYXBwaW5nOworICAgIGxhYmVsLm51bWJlck9mTGluZXMgPSAwOwor
ICAgIHJldHVybiBsYWJlbDsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZCBzZXRCYWNrZ3JvdW5k
KFZpZXdUeXBlICp2aWV3LCBDb2xvclR5cGUgKmNvbG9yKQoreworI2lmIFBMQVRGT1JNKE1BQykK
KyAgICB2aWV3LndhbnRzTGF5ZXIgPSBZRVM7CisgICAgdmlldy5sYXllci5iYWNrZ3JvdW5kQ29s
b3IgPSBjb2xvci5DR0NvbG9yOworI2Vsc2UKKyAgICB2aWV3LmJhY2tncm91bmRDb2xvciA9IGNv
bG9yOwogI2VuZGlmCit9CiAKIEBpbnRlcmZhY2UgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyA6IFRl
eHRWaWV3VHlwZSB7CiBAcGFja2FnZQotICAgIFdlYWtPYmpDUHRyPFdLU2FmZUJyb3dzaW5nV2Fy
bmluZz4gX3RhcmdldDsKKyAgICBXZWFrT2JqQ1B0cjxXS1NhZmVCcm93c2luZ1dhcm5pbmc+IF93
YXJuaW5nOwogfQotKyAoaW5zdGFuY2V0eXBlKXZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzooTlNB
dHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZyBsaW5rVGFyZ2V0OihXS1NhZmVCcm93
c2luZ1dhcm5pbmcgKil0YXJnZXQ7Ci0rIChpbnN0YW5jZXR5cGUpdmlld1dpdGhTdHJpbmc6KE5T
U3RyaW5nICopc3RyaW5nOworLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXR0cmlidXRlZFN0cmlu
ZzooTlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZyBmb3JXYXJuaW5nOihXS1Nh
ZmVCcm93c2luZ1dhcm5pbmcgKil3YXJuaW5nOwogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tT
YWZlQnJvd3NpbmdXYXJuaW5nCkBAIC0yMDksNTQgKzMzMSwxNTcgQEAgLSAoaW5zdGFuY2V0eXBl
KWluaXRXaXRoRnJhbWU6KFJlY3RUeXBlKQogICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihXZWJL
aXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9
Ci0KICAgICBfY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKTsK
ICAgICBfcmVzdWx0ID0gbWFrZVJlZihyZXN1bHQpOwotCisgICAgc2V0QmFja2dyb3VuZChzZWxm
LCBjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06OkJhY2tncm91bmQsIHNlbGYpKTsKICNpZiBQTEFU
Rk9STShNQUMpCi0gICAgc2VsZi53YW50c0xheWVyID0gWUVTOwotICAgIHNlbGYubGF5ZXIuYmFj
a2dyb3VuZENvbG9yID0gW2NvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdCYWNrZ3Jv
dW5kIikgQ0dDb2xvcl07Ci0KLSAgICBOU1N0YWNrVmlldyAqdG9wID0gW05TU3RhY2tWaWV3IHN0
YWNrVmlld1dpdGhWaWV3czpAWwotICAgICAgICBbW1dLU2FmZUJyb3dzaW5nRXhjbGFtYXRpb25Q
b2ludCBuZXddIGF1dG9yZWxlYXNlXSwKLSAgICAgICAgW05TVGV4dEZpZWxkIGxhYmVsV2l0aEF0
dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmlu
Zzp0aXRsZVRleHQocmVzdWx0KSBhdHRyaWJ1dGVzOkB7Ci0gICAgICAgICAgICBOU0ZvbnRBdHRy
aWJ1dGVOYW1lOltOU0ZvbnQgc3lzdGVtRm9udE9mU2l6ZTpleGNsYW1hdGlvblBvaW50U2l6ZV0s
Ci0gICAgICAgICAgICBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWU6Y29sb3JOYW1lZChA
IldLU2FmZUJyb3dzaW5nV2FybmluZ1RleHQiKQotICAgICAgICB9XSBhdXRvcmVsZWFzZV1dCi0g
ICAgXV07CisgICAgW3NlbGYgYWRkQ29udGVudF07CisjZW5kaWYKKyAgICByZXR1cm4gc2VsZjsK
K30KIAotICAgIFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKm1pZGRsZSA9IFtXS1NhZmVCcm93c2lu
Z1RleHRWaWV3IHZpZXdXaXRoU3RyaW5nOndhcm5pbmdUZXh0KHJlc3VsdCldOworLSAodm9pZClh
ZGRDb250ZW50Cit7CisgICAgYXV0byBleGNsYW1hdGlvblBvaW50ID0gW1tXS1NhZmVCcm93c2lu
Z0V4Y2xhbWF0aW9uUG9pbnQgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgYXV0byB0aXRsZSA9IG1h
a2VUaXRsZUxhYmVsKHRpdGxlVGV4dCgqX3Jlc3VsdCksIHNlbGYpOworICAgIGF1dG8gd2Fybmlu
ZyA9IFtbW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgYWxsb2NdIGluaXRXaXRoQXR0cmlidXRlZFN0
cmluZzpbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOndhcm5pbmdU
ZXh0KCpfcmVzdWx0KSBhdHRyaWJ1dGVzOkB7IE5TRm9udEF0dHJpYnV0ZU5hbWU6W0ZvbnRUeXBl
IHN5c3RlbUZvbnRPZlNpemU6dGV4dFNpemVdIH1dIGF1dG9yZWxlYXNlXSBmb3JXYXJuaW5nOnNl
bGZdIGF1dG9yZWxlYXNlXTsKKyAgICBhdXRvIHNob3dEZXRhaWxzID0gbWFrZUJ1dHRvbihXYXJu
aW5nSXRlbTo6U2hvd0RldGFpbHNCdXR0b24sIHNlbGYsIEBzZWxlY3RvcihzaG93RGV0YWlsc0Ns
aWNrZWQpKTsKKyAgICBhdXRvIGdvQmFjayA9IG1ha2VCdXR0b24oV2FybmluZ0l0ZW06OkdvQmFj
a0J1dHRvbiwgc2VsZiwgQHNlbGVjdG9yKGdvQmFja0NsaWNrZWQpKTsKKyAgICBhdXRvIGJveCA9
IFtbVmlld1R5cGUgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgc2V0QmFja2dyb3VuZChib3gsIGNv
bG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZCwgc2VsZikpOworICAgIGJveC5s
YXllci5jb3JuZXJSYWRpdXMgPSBib3hDb3JuZXJSYWRpdXM7CisgICAgX3RleHRWaWV3cyA9IGFk
b3B0TlMoW05TTXV0YWJsZUFycmF5IG5ld10pOworICAgIFtfdGV4dFZpZXdzIGFkZE9iamVjdDp3
YXJuaW5nXTsKKworICAgIGZvciAoVmlld1R5cGUgKnZpZXcgaW4gQFtleGNsYW1hdGlvblBvaW50
LCB0aXRsZSwgd2FybmluZywgZ29CYWNrLCBzaG93RGV0YWlsc10pIHsKKyAgICAgICAgdmlldy50
cmFuc2xhdGVzQXV0b3Jlc2l6aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POworICAgICAgICBb
Ym94IGFkZFN1YnZpZXc6dmlld107CisgICAgfQorICAgIGJveC50cmFuc2xhdGVzQXV0b3Jlc2l6
aW5nTWFza0ludG9Db25zdHJhaW50cyA9IE5POworICAgIFtzZWxmIGFkZFN1YnZpZXc6Ym94XTsK
IAotICAgIE5TU3RhY2tWaWV3ICpib3R0b20gPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3V2l0aFZp
ZXdzOkBbCi0gICAgICAgIFtOU0J1dHRvbiBidXR0b25XaXRoVGl0bGU6V0VCX1VJX05TU1RSSU5H
KEAiU2hvdyBkZXRhaWxzIiwgIkFjdGlvbiBmcm9tIHNhZmUgYnJvd3Npbmcgd2FybmluZyIpIHRh
cmdldDpzZWxmIGFjdGlvbjpAc2VsZWN0b3Ioc2hvd0RldGFpbHNDbGlja2VkKV0sCi0gICAgICAg
IFtOU0J1dHRvbiBidXR0b25XaXRoVGl0bGU6V0VCX1VJX05TU1RSSU5HKEAiR28gYmFjayIsICJB
Y3Rpb24gZnJvbSBzYWZlIGJyb3dzaW5nIHdhcm5pbmciKSB0YXJnZXQ6c2VsZiBhY3Rpb246QHNl
bGVjdG9yKGdvQmFja0NsaWNrZWQpXQorI2lmIEhBVkUoU0FGRV9CUk9XU0lORykKKyAgICBbTlNM
YXlvdXRDb25zdHJhaW50IGFjdGl2YXRlQ29uc3RyYWludHM6QFsKKyAgICAgICAgW1tzZWxmLnRv
cEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6Ym94LnRvcEFuY2hvcl0gY29uc3RyYWlu
dEVxdWFsVG9BbmNob3I6W2JveC5ib3R0b21BbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9y
OnNlbGYuYm90dG9tQW5jaG9yXSBtdWx0aXBsaWVyOjAuNV0sCisgICAgICAgIFtbc2VsZi5sZWZ0
QW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hvcjpib3gubGVmdEFuY2hvcl0gY29uc3RyYWlu
dEVxdWFsVG9BbmNob3I6W2JveC5yaWdodEFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6
c2VsZi5yaWdodEFuY2hvcl1dLAorCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWlu
dExlc3NUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWF4V2lkdGhdLAorICAgICAgICBbYm94LndpZHRo
QW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0FuY2hvcjpzZWxmLndpZHRoQW5jaG9y
XSwKKworICAgICAgICBbW2JveC5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hv
cjpleGNsYW1hdGlvblBvaW50LmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3Rh
bnQ6bWFyZ2luU2l6ZV0sCisgICAgICAgIFtbYm94LmxlYWRpbmdBbmNob3IgYW5jaG9yV2l0aE9m
ZnNldFRvQW5jaG9yOnRpdGxlLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3Rh
bnQ6bWFyZ2luU2l6ZSAqIDEuNSArIGV4Y2xhbWF0aW9uUG9pbnRTaXplXSwKKyAgICAgICAgW1ti
b3gubGVhZGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6d2FybmluZy5sZWFkaW5n
QW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVdLAorCisgICAgICAg
IFtbdGl0bGUudHJhaWxpbmdBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50cmFp
bGluZ0FuY2hvcl0gY29uc3RyYWludEdyZWF0ZXJUaGFuT3JFcXVhbFRvQ29uc3RhbnQ6bWFyZ2lu
U2l6ZV0sCisgICAgICAgIFtbd2FybmluZy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0
VG9BbmNob3I6Ym94LnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50R3JlYXRlclRoYW5PckVxdWFs
VG9Db25zdGFudDptYXJnaW5TaXplXSwKKyAgICAgICAgW1tnb0JhY2sudHJhaWxpbmdBbmNob3Ig
YW5jaG9yV2l0aE9mZnNldFRvQW5jaG9yOmJveC50cmFpbGluZ0FuY2hvcl0gY29uc3RyYWludEVx
dWFsVG9Db25zdGFudDptYXJnaW5TaXplXSwKKworICAgICAgICBbW3RpdGxlLnRvcEFuY2hvciBh
bmNob3JXaXRoT2Zmc2V0VG9BbmNob3I6ZXhjbGFtYXRpb25Qb2ludC50b3BBbmNob3JdIGNvbnN0
cmFpbnRFcXVhbFRvQW5jaG9yOltleGNsYW1hdGlvblBvaW50LmJvdHRvbUFuY2hvciBhbmNob3JX
aXRoT2Zmc2V0VG9BbmNob3I6dGl0bGUuYm90dG9tQW5jaG9yXV0sCisKKyAgICAgICAgW2dvQmFj
ay50b3BBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6c2hvd0RldGFpbHMudG9wQW5jaG9y
XSwKKyAgICAgICAgW1tzaG93RGV0YWlscy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zmc2V0
VG9BbmNob3I6Z29CYWNrLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6
bWFyZ2luU2l6ZV0sCisKKyAgICAgICAgW1tib3gudG9wQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRU
b0FuY2hvcjp0aXRsZS50b3BBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFyZ2lu
U2l6ZV0sCisgICAgICAgIFtbdGl0bGUuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0Fu
Y2hvcjp3YXJuaW5nLnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5T
aXplXSwKKyAgICAgICAgW1t3YXJuaW5nLmJvdHRvbUFuY2hvciBhbmNob3JXaXRoT2Zmc2V0VG9B
bmNob3I6Z29CYWNrLnRvcEFuY2hvcl0gY29uc3RyYWludEVxdWFsVG9Db25zdGFudDptYXJnaW5T
aXplXSwKKyAgICAgICAgW1tnb0JhY2suYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0Fu
Y2hvcjpib3guYm90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNp
emVdCiAgICAgXV07CisjZW5kaWYKK30KIAotICAgIGZvciAoTlNTdGFja1ZpZXcgKnZpZXcgaW4g
QFt0b3AsIGJvdHRvbV0pCi0gICAgICAgIFt2aWV3IHNldEh1Z2dpbmdQcmlvcml0eTpOU0xheW91
dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNMYXlvdXRDb25zdHJhaW50T3JpZW50
YXRpb25WZXJ0aWNhbF07CistICh2b2lkKXNob3dEZXRhaWxzQ2xpY2tlZAoreworICAgIFZpZXdU
eXBlICpib3ggPSBzZWxmLnN1YnZpZXdzLmxhc3RPYmplY3Q7CisgICAgQnV0dG9uVHlwZSAqc2hv
d0RldGFpbHMgPSBib3guc3Vidmlld3MubGFzdE9iamVjdDsKKyAgICBbc2hvd0RldGFpbHMgcmVt
b3ZlRnJvbVN1cGVydmlld107CisKKyAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICp0ZXh0
ID0gZGV0YWlsc1RleHQoKl9yZXN1bHQpOworICAgIFt0ZXh0IGFkZEF0dHJpYnV0ZXM6QHsgTlNG
b250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lzdGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0gfSBy
YW5nZTpOU01ha2VSYW5nZSgwLCB0ZXh0Lmxlbmd0aCldOworICAgIFdLU2FmZUJyb3dzaW5nVGV4
dFZpZXcgKmRldGFpbHMgPSBbW1tXS1NhZmVCcm93c2luZ1RleHRWaWV3IGFsbG9jXSBpbml0V2l0
aEF0dHJpYnV0ZWRTdHJpbmc6dGV4dCBmb3JXYXJuaW5nOnNlbGZdIGF1dG9yZWxlYXNlXTsKKyAg
ICBbX3RleHRWaWV3cyBhZGRPYmplY3Q6ZGV0YWlsc107CisgICAgVmlld1R5cGUgKmJvdHRvbSA9
IFtbVmlld1R5cGUgbmV3XSBhdXRvcmVsZWFzZV07CisgICAgc2V0QmFja2dyb3VuZChib3R0b20s
IGNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dyb3VuZCwgc2VsZikpOworICAgIGJv
dHRvbS5sYXllci5jb3JuZXJSYWRpdXMgPSBib3hDb3JuZXJSYWRpdXM7CiAKLSAgICBTdGFja1Zp
ZXdUeXBlICpib3ggPSBbTlNTdGFja1ZpZXcgc3RhY2tWaWV3V2l0aFZpZXdzOkBbdG9wLCBtaWRk
bGUsIGJvdHRvbV1dOwotICAgIGJveC53YW50c0xheWVyID0gWUVTOwotICAgIGJveC5sYXllci5i
YWNrZ3JvdW5kQ29sb3IgPSBbW05TQ29sb3Igd2luZG93QmFja2dyb3VuZENvbG9yXSBDR0NvbG9y
XTsKLSAgICBib3gubGF5ZXIuY29ybmVyUmFkaXVzID0gNjsKLSAgICBib3guYWxpZ25tZW50ID0g
TlNMYXlvdXRBdHRyaWJ1dGVDZW50ZXJYOwotICAgIFtib3gud2lkdGhBbmNob3IgY29uc3RyYWlu
dEVxdWFsVG9Db25zdGFudDptYXhXaWR0aF0uYWN0aXZlID0gdHJ1ZTsKLSAgICBib3guZWRnZUlu
c2V0cyA9IHsgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSwgbWFyZ2luU2l6ZSB9
OwotICAgIFtib3ggc2V0SHVnZ2luZ1ByaW9yaXR5Ok5TTGF5b3V0UHJpb3JpdHlSZXF1aXJlZCBm
b3JPcmllbnRhdGlvbjpOU0xheW91dENvbnN0cmFpbnRPcmllbnRhdGlvblZlcnRpY2FsXTsKLSAg
ICBbc2VsZiBhZGRWaWV3OmJveCBpbkdyYXZpdHk6TlNTdGFja1ZpZXdHcmF2aXR5Q2VudGVyXTsK
KyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgY29uc3RleHByIGF1dG8gbWF4WSA9IGtDQUxh
eWVyTWluWE1heFlDb3JuZXIgfCBrQ0FMYXllck1heFhNYXhZQ29ybmVyOworICAgIGNvbnN0ZXhw
ciBhdXRvIG1pblkgPSBrQ0FMYXllck1pblhNaW5ZQ29ybmVyIHwga0NBTGF5ZXJNYXhYTWluWUNv
cm5lcjsKKyNpZiBQTEFURk9STShNQUMpCisgICAgYm94LmxheWVyLm1hc2tlZENvcm5lcnMgPSBt
YXhZOworICAgIGJvdHRvbS5sYXllci5tYXNrZWRDb3JuZXJzID0gbWluWTsKICNlbHNlCi0gICAg
Ly8gRklYTUU6IEdldCB0aGlzIHdvcmtpbmcgb24gaU9TLgotICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdlYktpdDo6Q29udGludWVVbnNhZmVMb2FkOjpZZXMpOworICAgIGJveC5sYXllci5tYXNrZWRD
b3JuZXJzID0gbWluWTsKKyAgICBib3R0b20ubGF5ZXIubWFza2VkQ29ybmVycyA9IG1heFk7CiAj
ZW5kaWYKLSAgICByZXR1cm4gc2VsZjsKKyNlbmRpZgorCisgICAgVmlld1R5cGUgKmxpbmUgPSBb
W1ZpZXdUeXBlIG5ld10gYXV0b3JlbGVhc2VdOworICAgIHNldEJhY2tncm91bmQobGluZSwgW0Nv
bG9yVHlwZSBsaWdodEdyYXlDb2xvcl0pOworICAgIGZvciAoVmlld1R5cGUgKnZpZXcgaW4gQFtk
ZXRhaWxzLCBib3R0b20sIGxpbmVdKQorICAgICAgICB2aWV3LnRyYW5zbGF0ZXNBdXRvcmVzaXpp
bmdNYXNrSW50b0NvbnN0cmFpbnRzID0gTk87CisKKyAgICBbc2VsZiBhZGRTdWJ2aWV3OmJvdHRv
bV07CisgICAgW2JvdHRvbSBhZGRTdWJ2aWV3OmxpbmVdOworICAgIFtib3R0b20gYWRkU3Vidmll
dzpkZXRhaWxzXTsKKyNpZiBIQVZFKFNBRkVfQlJPV1NJTkcpCisgICAgW05TTGF5b3V0Q29uc3Ry
YWludCBhY3RpdmF0ZUNvbnN0cmFpbnRzOkBbCisgICAgICAgIFtib3gud2lkdGhBbmNob3IgY29u
c3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLndpZHRoQW5jaG9yXSwKKyAgICAgICAgW2JveC5i
b3R0b21BbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLnRvcEFuY2hvcl0sCisg
ICAgICAgIFtib3gubGVhZGluZ0FuY2hvciBjb25zdHJhaW50RXF1YWxUb0FuY2hvcjpib3R0b20u
bGVhZGluZ0FuY2hvcl0sCisgICAgICAgIFtsaW5lLndpZHRoQW5jaG9yIGNvbnN0cmFpbnRFcXVh
bFRvQW5jaG9yOmJvdHRvbS53aWR0aEFuY2hvcl0sCisgICAgICAgIFtsaW5lLmxlYWRpbmdBbmNo
b3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLmxlYWRpbmdBbmNob3JdLAorICAgICAg
ICBbbGluZS50b3BBbmNob3IgY29uc3RyYWludEVxdWFsVG9BbmNob3I6Ym90dG9tLnRvcEFuY2hv
cl0sCisgICAgICAgIFtsaW5lLmhlaWdodEFuY2hvciBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50
OjFdLAorICAgICAgICBbW2JvdHRvbS50b3BBbmNob3IgYW5jaG9yV2l0aE9mZnNldFRvQW5jaG9y
OmRldGFpbHMudG9wQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNpemVd
LAorICAgICAgICBbW2RldGFpbHMuYm90dG9tQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0FuY2hv
cjpib3R0b20uYm90dG9tQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0YW50Om1hcmdpblNp
emVdLAorICAgICAgICBbW2JvdHRvbS5sZWFkaW5nQW5jaG9yIGFuY2hvcldpdGhPZmZzZXRUb0Fu
Y2hvcjpkZXRhaWxzLmxlYWRpbmdBbmNob3JdIGNvbnN0cmFpbnRFcXVhbFRvQ29uc3RhbnQ6bWFy
Z2luU2l6ZV0sCisgICAgICAgIFtbZGV0YWlscy50cmFpbGluZ0FuY2hvciBhbmNob3JXaXRoT2Zm
c2V0VG9BbmNob3I6Ym90dG9tLnRyYWlsaW5nQW5jaG9yXSBjb25zdHJhaW50RXF1YWxUb0NvbnN0
YW50Om1hcmdpblNpemVdLAorICAgIF1dOworI2VuZGlmCisgICAgW3NlbGYgbGF5b3V0VGV4dF07
CisjaWYgIVBMQVRGT1JNKE1BQykKKyAgICBbc2VsZiBsYXlvdXRJZk5lZWRlZF07CisgICAgQ0dG
bG9hdCBoZWlnaHQgPSAwOworICAgIGZvciAoVmlld1R5cGUgKnN1YnZpZXcgaW4gc2VsZi5zdWJ2
aWV3cykKKyAgICAgICAgaGVpZ2h0ICs9IHN1YnZpZXcuZnJhbWUuc2l6ZS5oZWlnaHQ7CisgICAg
W3NlbGYgc2V0Q29udGVudFNpemU6IHsgc2VsZi5mcmFtZS5zaXplLndpZHRoLCBzZWxmLmZyYW1l
LnNpemUuaGVpZ2h0IC8gMiArIGhlaWdodCB9XTsKKyNlbmRpZgorfQorCistICh2b2lkKWxheW91
dFRleHQKK3sKKyAgICBmb3IgKFdLU2FmZUJyb3dzaW5nVGV4dFZpZXcgKnZpZXcgaW4gX3RleHRW
aWV3cy5nZXQoKSkKKyAgICAgICAgW3ZpZXcgaW52YWxpZGF0ZUludHJpbnNpY0NvbnRlbnRTaXpl
XTsKIH0KIAogI2lmIFBMQVRGT1JNKE1BQykKKy0gKEJPT0wpdGV4dFZpZXc6KE5TVGV4dFZpZXcg
Kil0ZXh0VmlldyBjbGlja2VkT25MaW5rOihpZClsaW5rIGF0SW5kZXg6KE5TVUludGVnZXIpY2hh
ckluZGV4Cit7CisgICAgW3NlbGYgY2xpY2tlZE9uTGluazpsaW5rXTsKKyAgICByZXR1cm4gWUVT
OworfQorCiAtICh2b2lkKWxheW91dAogewotICAgIGZvciAoTlNWaWV3ICp2aWV3IGluIHNlbGYu
c3Vidmlld3MuZmlyc3RPYmplY3Quc3Vidmlld3MpCi0gICAgICAgIFt2aWV3IGludmFsaWRhdGVJ
bnRyaW5zaWNDb250ZW50U2l6ZV07CiAgICAgW3N1cGVyIGxheW91dF07CisgICAgW3NlbGYgbGF5
b3V0VGV4dF07Cit9CisjZWxzZQorLSAodm9pZClsYXlvdXRTdWJ2aWV3cworeworICAgIFtzdXBl
ciBsYXlvdXRTdWJ2aWV3c107CisgICAgW3NlbGYgbGF5b3V0VGV4dF07Cit9CisKKy0gKEJPT0wp
dGV4dFZpZXc6KFVJVGV4dFZpZXcgKil0ZXh0VmlldyBzaG91bGRJbnRlcmFjdFdpdGhVUkw6KE5T
VVJMICopVVJMIGluUmFuZ2U6KE5TUmFuZ2UpY2hhcmFjdGVyUmFuZ2UgaW50ZXJhY3Rpb246KFVJ
VGV4dEl0ZW1JbnRlcmFjdGlvbilpbnRlcmFjdGlvbgoreworICAgIFtzZWxmIGNsaWNrZWRPbkxp
bms6VVJMXTsKKyAgICByZXR1cm4gTk87Cit9CisKKy0gKHZvaWQpZGlkTW92ZVRvV2luZG93Cit7
CisgICAgW3NlbGYgYWRkQ29udGVudF07CiB9CiAjZW5kaWYKIApAQCAtMjczLDcgKzQ5OCw3IEBA
IC0gKHZvaWQpZ29CYWNrQ2xpY2tlZAogICAgICAgICBfY29tcGxldGlvbkhhbmRsZXIoV2ViS2l0
OjpDb250aW51ZVVuc2FmZUxvYWQ6Ok5vKTsKIH0KIAotLSAodm9pZCljbGlja2VkT25MaW5rOihp
ZClsaW5rCistICh2b2lkKWNsaWNrZWRPbkxpbms6KE5TVVJMICopbGluawogewogICAgIGlmICgh
X2NvbXBsZXRpb25IYW5kbGVyKQogICAgICAgICByZXR1cm47CkBAIC0zMDQsNjggKzUyOSw0MSBA
QCAtICh2b2lkKWNsaWNrZWRPbkxpbms6KGlkKWxpbmsKICAgICBfY29tcGxldGlvbkhhbmRsZXIo
KE5TVVJMICopbGluayk7CiB9CiAKLS0gKHZvaWQpc2hvd0RldGFpbHNDbGlja2VkCi17Ci0jaWYg
UExBVEZPUk0oTUFDKQotICAgIE5TU3RhY2tWaWV3ICpib3ggPSBzZWxmLnZpZXdzLmZpcnN0T2Jq
ZWN0OwotICAgIE5TU3RhY2tWaWV3ICpib3R0b20gPSBib3gudmlld3MubGFzdE9iamVjdDsKLSAg
ICBOU0J1dHRvbiAqc2hvd0RldGFpbHNCdXR0b24gPSBib3R0b20udmlld3MuZmlyc3RPYmplY3Q7
Ci0gICAgW2JvdHRvbSByZW1vdmVWaWV3OnNob3dEZXRhaWxzQnV0dG9uXTsKLSAgICBXS1NhZmVC
cm93c2luZ1RleHRWaWV3ICpkZXRhaWxzID0gW1dLU2FmZUJyb3dzaW5nVGV4dFZpZXcgdmlld1dp
dGhBdHRyaWJ1dGVkU3RyaW5nOmRldGFpbHNUZXh0KCpfcmVzdWx0KSBsaW5rVGFyZ2V0OnNlbGZd
OwotICAgIFtib3ggYWRkVmlldzpkZXRhaWxzIGluR3Jhdml0eTpOU1N0YWNrVmlld0dyYXZpdHlD
ZW50ZXJdOwotI2Vsc2UKLSAgICAvLyBGSVhNRTogR2V0IHRoaXMgd29ya2luZyBvbiBpT1MuCi0j
ZW5kaWYKLX0KLQogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV0tTYWZlQnJvd3NpbmdUZXh0Vmll
dwogCi0rIChpbnN0YW5jZXR5cGUpdmlld1dpdGhBdHRyaWJ1dGVkU3RyaW5nOihOU0F0dHJpYnV0
ZWRTdHJpbmcgKilhdHRyaWJ1dGVkU3RyaW5nIGxpbmtUYXJnZXQ6KFdLU2FmZUJyb3dzaW5nV2Fy
bmluZyAqKXRhcmdldAorLSAoaW5zdGFuY2V0eXBlKWluaXRXaXRoQXR0cmlidXRlZFN0cmluZzoo
TlNBdHRyaWJ1dGVkU3RyaW5nICopYXR0cmlidXRlZFN0cmluZyBmb3JXYXJuaW5nOihXS1NhZmVC
cm93c2luZ1dhcm5pbmcgKil3YXJuaW5nCiB7Ci0gICAgV0tTYWZlQnJvd3NpbmdUZXh0VmlldyAq
aW5zdGFuY2UgPSBbW3NlbGYgbmV3XSBhdXRvcmVsZWFzZV07Ci0gICAgaWYgKCFpbnN0YW5jZSkK
KyAgICBpZiAoIShzZWxmID0gW3N1cGVyIGluaXRdKSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAg
ICBpbnN0YW5jZS0+X3RhcmdldCA9IHRhcmdldDsKKyAgICBzZWxmLT5fd2FybmluZyA9IHdhcm5p
bmc7CisgICAgc2VsZi5kZWxlZ2F0ZSA9IHdhcm5pbmc7CiAKLSAgICBDb2xvclR5cGUgKmZvcmVn
cm91bmRDb2xvciA9IGNvbG9yTmFtZWQoQCJXS1NhZmVCcm93c2luZ1dhcm5pbmdUZXh0Iik7Cisg
ICAgQ29sb3JUeXBlICpmb3JlZ3JvdW5kQ29sb3IgPSBjb2xvckZvckl0ZW0oV2FybmluZ0l0ZW06
Ok1lc3NhZ2VUZXh0LCB3YXJuaW5nKTsKICAgICBOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nICpz
dHJpbmcgPSBbYXR0cmlidXRlZFN0cmluZyBtdXRhYmxlQ29weV07Ci0gICAgW3N0cmluZyBhZGRB
dHRyaWJ1dGVzOkB7Ci0gICAgICAgIE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSA6IGZv
cmVncm91bmRDb2xvciwKLSAgICAgICAgTlNGb250QXR0cmlidXRlTmFtZTpbRm9udFR5cGUgc3lz
dGVtRm9udE9mU2l6ZTp0ZXh0U2l6ZV0KLSAgICB9IHJhbmdlOk5TTWFrZVJhbmdlKDAsIHN0cmlu
Zy5sZW5ndGgpXTsKLQotI2lmIFBMQVRGT1JNKE1BQykKLSAgICBbaW5zdGFuY2Ugc2V0TGlua1Rl
eHRBdHRyaWJ1dGVzOkB7IE5TRm9yZWdyb3VuZENvbG9yQXR0cmlidXRlTmFtZSA6IGZvcmVncm91
bmRDb2xvciB9XTsKLSAgICBbaW5zdGFuY2Ugc2V0Q29udGVudEh1Z2dpbmdQcmlvcml0eTpOU0xh
eW91dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRpb246TlNMYXlvdXRDb25zdHJhaW50T3Jp
ZW50YXRpb25WZXJ0aWNhbF07Ci0gICAgW2luc3RhbmNlIHNldENvbnRlbnRDb21wcmVzc2lvblJl
c2lzdGFuY2VQcmlvcml0eTpOU0xheW91dFByaW9yaXR5UmVxdWlyZWQgZm9yT3JpZW50YXRpb246
TlNMYXlvdXRDb25zdHJhaW50T3JpZW50YXRpb25WZXJ0aWNhbF07Ci0gICAgW2luc3RhbmNlLndp
ZHRoQW5jaG9yIGNvbnN0cmFpbnRMZXNzVGhhbk9yRXF1YWxUb0NvbnN0YW50Om1heFdpZHRoIC0g
MiAqIG1hcmdpblNpemVdLmFjdGl2ZSA9IHRydWU7Ci0gICAgW2luc3RhbmNlIHNldEJhY2tncm91
bmRDb2xvcjpbTlNDb2xvciB3aW5kb3dCYWNrZ3JvdW5kQ29sb3JdXTsKLSAgICBbaW5zdGFuY2Uu
dGV4dFN0b3JhZ2UgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpzdHJpbmddOworICAgIFtzdHJpbmcg
YWRkQXR0cmlidXRlczpAeyBOU0ZvcmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3Jv
dW5kQ29sb3IgfSByYW5nZTpOU01ha2VSYW5nZSgwLCBzdHJpbmcubGVuZ3RoKV07CisgICAgW3Nl
bGYgc2V0QmFja2dyb3VuZENvbG9yOmNvbG9yRm9ySXRlbShXYXJuaW5nSXRlbTo6Qm94QmFja2dy
b3VuZCwgd2FybmluZyldOworICAgIFtzZWxmIHNldExpbmtUZXh0QXR0cmlidXRlczpAeyBOU0Zv
cmVncm91bmRDb2xvckF0dHJpYnV0ZU5hbWUgOiBmb3JlZ3JvdW5kQ29sb3IgfV07CisgICAgW3Nl
bGYudGV4dFN0b3JhZ2UgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpzdHJpbmddOworICAgIHNlbGYu
ZWRpdGFibGUgPSBOTzsKKyNpZiAhUExBVEZPUk0oTUFDKQorICAgIHNlbGYuc2Nyb2xsRW5hYmxl
ZCA9IE5POwogI2VuZGlmCi0gICAgcmV0dXJuIGluc3RhbmNlOwotfQogCi0rIChpbnN0YW5jZXR5
cGUpdmlld1dpdGhTdHJpbmc6KE5TU3RyaW5nICopc3RyaW5nCi17Ci0gICAgcmV0dXJuIFtXS1Nh
ZmVCcm93c2luZ1RleHRWaWV3IHZpZXdXaXRoQXR0cmlidXRlZFN0cmluZzpbW1tOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpzdHJpbmddIGF1dG9yZWxlYXNl
XSBsaW5rVGFyZ2V0Om5pbF07CisgICAgcmV0dXJuIHNlbGY7CiB9CiAKLS0gKE5TU2l6ZSlpbnRy
aW5zaWNDb250ZW50U2l6ZQorLSAoU2l6ZVR5cGUpaW50cmluc2ljQ29udGVudFNpemUKIHsKLSAg
ICBbc2VsZi5sYXlvdXRNYW5hZ2VyIGVuc3VyZUxheW91dEZvclRleHRDb250YWluZXI6c2VsZi50
ZXh0Q29udGFpbmVyXTsKLSAgICBhdXRvIHNpemUgPSBbc2VsZi5sYXlvdXRNYW5hZ2VyIHVzZWRS
ZWN0Rm9yVGV4dENvbnRhaW5lcjpzZWxmLnRleHRDb250YWluZXJdLnNpemU7CiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgIHJldHVybiB7IE5TVmlld05vSW50cmluc2ljTWV0cmljLCBzaXplLmhlaWdo
dCB9OworICAgIFtzZWxmLmxheW91dE1hbmFnZXIgZW5zdXJlTGF5b3V0Rm9yVGV4dENvbnRhaW5l
cjpzZWxmLnRleHRDb250YWluZXJdOworICAgIHJldHVybiB7IE5TVmlld05vSW50cmluc2ljTWV0
cmljLCBbc2VsZi5sYXlvdXRNYW5hZ2VyIHVzZWRSZWN0Rm9yVGV4dENvbnRhaW5lcjpzZWxmLnRl
eHRDb250YWluZXJdLnNpemUuaGVpZ2h0IH07CiAjZWxzZQotICAgIHJldHVybiB7IFVJVmlld05v
SW50cmluc2ljTWV0cmljLCBzaXplLmhlaWdodCB9OworICAgIGF1dG8gd2lkdGggPSBzdGQ6Om1p
bjxDR0Zsb2F0PihtYXhXaWR0aCwgW193YXJuaW5nIGZyYW1lXS5zaXplLndpZHRoKSAtIDIgKiBt
YXJnaW5TaXplOworICAgIGNvbnN0ZXhwciBhdXRvIG5vSGVpZ2h0Q29uc3RyYWludCA9IENHRkxP
QVRfTUFYOworICAgIHJldHVybiB7IHdpZHRoLCBbc2VsZiBzaXplVGhhdEZpdHM6IHsgd2lkdGgs
IG5vSGVpZ2h0Q29uc3RyYWludCB9XS5oZWlnaHQgfTsKICNlbmRpZgogfQogCi0tICh2b2lkKWNs
aWNrZWRPbkxpbms6KGlkKWxpbmsgYXRJbmRleDooTlNVSW50ZWdlciljaGFySW5kZXgKLXsKLSAg
ICBbX3RhcmdldCBjbGlja2VkT25MaW5rOmxpbmtdOwotfQotCiBAZW5kCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJT1MubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvaW9zL1BhZ2VDbGllbnRJbXBsSU9TLm1tCShyZXZpc2lv
biAyMzgwODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9pb3MvUGFnZUNsaWVudEltcGxJ
T1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAKICNpbXBvcnQgPHBhbC9zcGkv
Y29jb2EvTlNLZXllZEFyY2hpdmVyU1BJLmg+CiAjaW1wb3J0IDx3dGYvQmxvY2tQdHIuaD4KIAot
I2RlZmluZSBNRVNTQUdFX0NIRUNLKGFzc2VydGlvbikgTUVTU0FHRV9DSEVDS19CQVNFKGFzc2Vy
dGlvbiwgbV93ZWJWaWV3LT5fcGFnZS0+cHJvY2VzcygpLmNvbm5lY3Rpb24oKSkKKyNkZWZpbmUg
TUVTU0FHRV9DSEVDSyhhc3NlcnRpb24pIE1FU1NBR0VfQ0hFQ0tfQkFTRShhc3NlcnRpb24sIG1f
d2ViVmlldy5nZXQoKS0+X3BhZ2UtPnByb2Nlc3MoKS5jb25uZWN0aW9uKCkpCiAKIEBpbnRlcmZh
Y2UgV0tFZGl0Q29tbWFuZE9iakMgOiBOU09iamVjdAogewpAQCAtMTYxLDE4ICsxNjEsMTggQEAg
SW50U2l6ZSBQYWdlQ2xpZW50SW1wbDo6dmlld1NpemUoKQogYm9vbCBQYWdlQ2xpZW50SW1wbDo6
aXNWaWV3V2luZG93QWN0aXZlKCkKIHsKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzA5OAotICAgIHJldHVybiBpc1ZpZXdWaXNpYmxlKCkg
fHwgKG1fd2ViVmlldyAmJiBbbV93ZWJWaWV3IF9pc1JldGFpbmluZ0FjdGl2ZUZvY3VzZWRTdGF0
ZV0pOworICAgIHJldHVybiBpc1ZpZXdWaXNpYmxlKCkgfHwgW21fd2ViVmlldyBfaXNSZXRhaW5p
bmdBY3RpdmVGb2N1c2VkU3RhdGVdOwogfQogCiBib29sIFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdG
b2N1c2VkKCkKIHsKICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzMzA5OAotICAgIHJldHVybiBpc1ZpZXdXaW5kb3dBY3RpdmUoKSB8fCAobV93
ZWJWaWV3ICYmIFttX3dlYlZpZXcgX2lzUmV0YWluaW5nQWN0aXZlRm9jdXNlZFN0YXRlXSk7Cisg
ICAgcmV0dXJuIGlzVmlld1dpbmRvd0FjdGl2ZSgpIHx8IFttX3dlYlZpZXcgX2lzUmV0YWluaW5n
QWN0aXZlRm9jdXNlZFN0YXRlXTsKIH0KIAogYm9vbCBQYWdlQ2xpZW50SW1wbDo6aXNWaWV3Vmlz
aWJsZSgpCiB7Ci0gICAgaWYgKGlzVmlld0luV2luZG93KCkgJiYgIW1fd2ViVmlldy5faXNCYWNr
Z3JvdW5kKQorICAgIGlmIChpc1ZpZXdJbldpbmRvdygpICYmICFbbV93ZWJWaWV3IF9pc0JhY2tn
cm91bmRdKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAKICAgICBpZiAoW21fd2ViVmlldyBf
aXNTaG93aW5nVmlkZW9QaWN0dXJlSW5QaWN0dXJlXSkKQEAgLTE4Nyw4ICsxODcsOCBAQCBib29s
IFBhZ2VDbGllbnRJbXBsOjppc1ZpZXdWaXNpYmxlKCkKIGJvb2wgUGFnZUNsaWVudEltcGw6Omlz
Vmlld0luV2luZG93KCkKIHsKICAgICAvLyBGSVhNRTogaW4gV2ViS2l0VGVzdFJ1bm5lciwgbV93
ZWJWaWV3IGlzIG5pbCwgc28gY2hlY2sgdGhlIGNvbnRlbnQgdmlldyBpbnN0ZWFkLgotICAgIGlm
IChtX3dlYlZpZXcpCi0gICAgICAgIHJldHVybiBbbV93ZWJWaWV3IHdpbmRvd107CisgICAgaWYg
KGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgcmV0dXJuIFt3ZWJWaWV3
IHdpbmRvd107CiAKICAgICByZXR1cm4gW21fY29udGVudFZpZXcgd2luZG93XTsKIH0KQEAgLTI0
OCw3ICsyNDgsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRDb21wbGV0ZVN5bnRoZXRpCiAK
IHZvaWQgUGFnZUNsaWVudEltcGw6OmRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUGVybWlzc2lv
blJlcXVlc3QoV2ViRnJhbWVQcm94eSYgZnJhbWUsIEFQSTo6U2VjdXJpdHlPcmlnaW4mIG9yaWdp
biwgRnVuY3Rpb248dm9pZChib29sKT4mIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIFtbd3Jh
cHBlcihtX3dlYlZpZXctPl9wYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bvb2woKSkgX2dlb2xvY2F0
aW9uUHJvdmlkZXJdIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVxdWVzdEZyb21PcmlnaW46
b3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkgZnJhbWU6ZnJhbWUgY29tcGxldGlvbkhhbmRsZXI6c3Rk
OjpleGNoYW5nZShjb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cikgdmlldzptX3dlYlZpZXddOwor
ICAgIFtbd3JhcHBlcihtX3dlYlZpZXcuZ2V0KCktPl9wYWdlLT5wcm9jZXNzKCkucHJvY2Vzc1Bv
b2woKSkgX2dlb2xvY2F0aW9uUHJvdmlkZXJdIGRlY2lkZVBvbGljeUZvckdlb2xvY2F0aW9uUmVx
dWVzdEZyb21PcmlnaW46b3JpZ2luLnNlY3VyaXR5T3JpZ2luKCkgZnJhbWU6ZnJhbWUgY29tcGxl
dGlvbkhhbmRsZXI6c3RkOjpleGNoYW5nZShjb21wbGV0aW9uSGFuZGxlciwgbnVsbHB0cikgdmll
dzptX3dlYlZpZXcuZ2V0KCkuZ2V0KCldOwogfQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpkaWRT
dGFydFByb3Zpc2lvbmFsTG9hZEZvck1haW5GcmFtZSgpCkBAIC00NjksMTggKzQ2OSwyMSBAQCB2
b2lkIFBhZ2VDbGllbnRJbXBsOjpzZXRUZXh0SW5kaWNhdG9yQW5pCiB7CiB9CiAKLXZvaWQgUGFn
ZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2luZ1Jl
c3VsdCYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmFyaWFudDxXZWJLaXQ6OkNvbnRpbnVlVW5z
YWZlTG9hZCwgV2ViQ29yZTo6VVJMPiYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikKK3ZvaWQgUGFn
ZUNsaWVudEltcGw6OmVudGVyQWNjZWxlcmF0ZWRDb21wb3NpdGluZ01vZGUoY29uc3QgTGF5ZXJU
cmVlQ29udGV4dCYgbGF5ZXJUcmVlQ29udGV4dCkKIHsKLSAgICBjb21wbGV0aW9uSGFuZGxlcihX
ZWJLaXQ6OkNvbnRpbnVlVW5zYWZlTG9hZDo6WWVzKTsgLy8gRklYTUU6IEltcGxlbWVudC4KIH0K
IAotdm9pZCBQYWdlQ2xpZW50SW1wbDo6Y2xlYXJTYWZlQnJvd3NpbmdXYXJuaW5nKCkKK3ZvaWQg
UGFnZUNsaWVudEltcGw6OnNob3dTYWZlQnJvd3NpbmdXYXJuaW5nKGNvbnN0IFNhZmVCcm93c2lu
Z1Jlc3VsdCYgcmVzdWx0LCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFZhcmlhbnQ8V2ViS2l0OjpD
b250aW51ZVVuc2FmZUxvYWQsIFdlYkNvcmU6OlVSTD4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIp
CiB7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93
ZWJWaWV3LmdldCgpKQorICAgICAgICBbd2ViVmlldyBfc2hvd1NhZmVCcm93c2luZ1dhcm5pbmc6
cmVzdWx0IGNvbXBsZXRpb25IYW5kbGVyOldURk1vdmUoY29tcGxldGlvbkhhbmRsZXIpXTsKKyAg
ICBlbHNlCisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKENvbnRpbnVlVW5zYWZlTG9hZDo6Tm8p
OwogfQogCi12b2lkIFBhZ2VDbGllbnRJbXBsOjplbnRlckFjY2VsZXJhdGVkQ29tcG9zaXRpbmdN
b2RlKGNvbnN0IExheWVyVHJlZUNvbnRleHQmIGxheWVyVHJlZUNvbnRleHQpCit2b2lkIFBhZ2VD
bGllbnRJbXBsOjpjbGVhclNhZmVCcm93c2luZ1dhcm5pbmcoKQogeworICAgIFttX3dlYlZpZXcg
X2NsZWFyU2FmZUJyb3dzaW5nV2FybmluZ107CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6OmV4
aXRBY2NlbGVyYXRlZENvbXBvc2l0aW5nTW9kZSgpCkBAIC02OTUsMjMgKzY5OCwyMyBAQCB2b2lk
IFBhZ2VDbGllbnRJbXBsOjpzY3JvbGxpbmdOb2RlU2Nyb2xsCiAKIFZlY3RvcjxTdHJpbmc+IFBh
Z2VDbGllbnRJbXBsOjptaW1lVHlwZXNXaXRoQ3VzdG9tQ29udGVudFByb3ZpZGVycygpCiB7Ci0g
ICAgcmV0dXJuIG1fd2ViVmlldy5fY29udGVudFByb3ZpZGVyUmVnaXN0cnkuX21pbWVUeXBlc1dp
dGhDdXN0b21Db250ZW50UHJvdmlkZXJzOworICAgIHJldHVybiBbbV93ZWJWaWV3IF9jb250ZW50
UHJvdmlkZXJSZWdpc3RyeV0uX21pbWVUeXBlc1dpdGhDdXN0b21Db250ZW50UHJvdmlkZXJzOwog
fQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCkKIHsK
ICAgICBbbV93ZWJWaWV3IF9uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luXTsKLSAgICBOYXZpZ2F0
aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVy
ZURpZEJlZ2luKCk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3
LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVEaWRCZWdpbigpOwogfQogCiB2b2lkIFBh
Z2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9vbCB3aWxsTmF2aWdhdGUs
IFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpm
cm9tV2ViUGFnZSgqbV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdp
bGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93
ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0
ZSwgaXRlbSk7CiB9CiAKIHZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGlk
RW5kKGJvb2wgd2lsbE5hdmlnYXRlLCBXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewot
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmln
YXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CisgICAgTmF2aWdhdGlvblN0
YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1
cmVEaWRFbmQod2lsbE5hdmlnYXRlLCBpdGVtKTsKICAgICBbbV93ZWJWaWV3IF9uYXZpZ2F0aW9u
R2VzdHVyZURpZEVuZF07CiB9CiAKQEAgLTcyMiwxMiArNzI1LDEyIEBAIHZvaWQgUGFnZUNsaWVu
dEltcGw6Om5hdmlnYXRpb25HZXN0dXJlRGkKIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6d2lsbFJl
Y29yZE5hdmlnYXRpb25TbmFwc2hvdChXZWJCYWNrRm9yd2FyZExpc3RJdGVtJiBpdGVtKQogewot
ICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLndpbGxS
ZWNvcmROYXZpZ2F0aW9uU25hcHNob3QoaXRlbSk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9t
V2ViUGFnZSgqbV93ZWJWaWV3LmdldCgpLT5fcGFnZSkud2lsbFJlY29yZE5hdmlnYXRpb25TbmFw
c2hvdChpdGVtKTsKIH0KIAogdm9pZCBQYWdlQ2xpZW50SW1wbDo6ZGlkUmVtb3ZlTmF2aWdhdGlv
bkdlc3R1cmVTbmFwc2hvdCgpCiB7Ci0gICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgq
bV93ZWJWaWV3LT5fcGFnZSkubmF2aWdhdGlvbkdlc3R1cmVTbmFwc2hvdFdhc1JlbW92ZWQoKTsK
KyAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXcuZ2V0KCktPl9wYWdl
KS5uYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90V2FzUmVtb3ZlZCgpOwogfQogCiB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXRGb3JNYWluRnJhbWUoKQpA
QCAtODQwLDcgKzg0Myw3IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6OnJlcXVlc3RQYXNzd29yZEZv
clEKICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIocGFzc3dvcmQpOwogICAgIH0pOwogCi0gICAg
aWYgKFdLUGFzc3dvcmRWaWV3ICpwYXNzd29yZFZpZXcgPSBtX3dlYlZpZXcuX3Bhc3N3b3JkVmll
dykgeworICAgIGlmIChXS1Bhc3N3b3JkVmlldyAqcGFzc3dvcmRWaWV3ID0gW21fd2ViVmlldyBf
cGFzc3dvcmRWaWV3XSkgewogICAgICAgICBBU1NFUlQoZmlsZU5hbWUgPT0gU3RyaW5nIHsgcGFz
c3dvcmRWaWV3LmRvY3VtZW50TmFtZSB9KTsKICAgICAgICAgW3Bhc3N3b3JkVmlldyBzaG93UGFz
c3dvcmRGYWlsdXJlQWxlcnRdOwogICAgICAgICBwYXNzd29yZFZpZXcudXNlckRpZEVudGVyUGFz
c3dvcmQgPSBwYXNzd29yZEhhbmRsZXIuZ2V0KCk7CkBAIC04NDgsNyArODUxLDcgQEAgdm9pZCBQ
YWdlQ2xpZW50SW1wbDo6cmVxdWVzdFBhc3N3b3JkRm9yUQogICAgIH0KIAogICAgIFttX3dlYlZp
ZXcgX3Nob3dQYXNzd29yZFZpZXdXaXRoRG9jdW1lbnROYW1lOmZpbGVOYW1lIHBhc3N3b3JkSGFu
ZGxlcjpwYXNzd29yZEhhbmRsZXIuZ2V0KCldOwotICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdl
YlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLmRpZFJlcXVlc3RQYXNzd29yZEZvclF1aWNrTG9va0Rv
Y3VtZW50KCk7CisgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqbV93ZWJWaWV3Lmdl
dCgpLT5fcGFnZSkuZGlkUmVxdWVzdFBhc3N3b3JkRm9yUXVpY2tMb29rRG9jdW1lbnQoKTsKIH0K
ICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9tYWMvUGFnZUNsaWVudElt
cGxNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9VSVByb2Nlc3MvbWFjL1BhZ2VD
bGllbnRJbXBsTWFjLm1tCShyZXZpc2lvbiAyMzgwODUpCisrKyBTb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9tYWMvUGFnZUNsaWVudEltcGxNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTU2NCw3ICs1
NjQsNyBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpzZWxlY3Rpb25EaWRDaGFuZ2UoCiAjaWYgV0tf
QVBJX0VOQUJMRUQKIGJvb2wgUGFnZUNsaWVudEltcGw6OnNob3dTaGFyZVNoZWV0KGNvbnN0IFNo
YXJlRGF0YVdpdGhQYXJzZWRVUkwmIHNoYXJlRGF0YSwgV1RGOjpDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKGJvb2wpPiYmIGNvbXBsZXRpb25IYW5kbGVyKQogewotICAgIG1faW1wbC0+c2hvd1NoYXJl
U2hlZXQoc2hhcmVEYXRhLCBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKSwgbV93ZWJWaWV3KTsK
KyAgICBtX2ltcGwtPnNob3dTaGFyZVNoZWV0KHNoYXJlRGF0YSwgV1RGTW92ZShjb21wbGV0aW9u
SGFuZGxlciksIG1fd2ViVmlldy5nZXQoKS5nZXQoKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAj
ZW5kaWYKQEAgLTc1MywxNiArNzUzLDE2IEBAIHZvaWQgUGFnZUNsaWVudEltcGw6Om5hdmlnYXRp
b25HZXN0dXJlRGkKICAgICBtX2ltcGwtPmRpc21pc3NDb250ZW50UmVsYXRpdmVDaGlsZFdpbmRv
d3NXaXRoQW5pbWF0aW9uKHRydWUpOwogCiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93
ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXct
Pl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZURpZEJlZ2luKCk7CisgICAgaWYgKGF1dG8gd2ViVmll
dyA9IG1fd2ViVmlldy5nZXQoKSkKKyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFn
ZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkQmVnaW4oKTsKICNlbmRpZgog
fQogCiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQoYm9vbCB3
aWxsTmF2aWdhdGUsIFdlYkJhY2tGb3J3YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJ
X0VOQUJMRUQKLSAgICBpZiAobV93ZWJWaWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZy
b21XZWJQYWdlKCptX3dlYlZpZXctPl9wYWdlKS5uYXZpZ2F0aW9uR2VzdHVyZVdpbGxFbmQod2ls
bE5hdmlnYXRlLCBpdGVtKTsKKyAgICBpZiAoYXV0byB3ZWJWaWV3ID0gbV93ZWJWaWV3LmdldCgp
KQorICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCp3ZWJWaWV3LT5fcGFnZSku
bmF2aWdhdGlvbkdlc3R1cmVXaWxsRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiAjZWxzZQogICAg
IFVOVVNFRF9QQVJBTSh3aWxsTmF2aWdhdGUpOwogICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKQEAg
LTc3Miw4ICs3NzIsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZVdp
CiB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpZEVuZChib29sIHdpbGxO
YXZpZ2F0ZSwgV2ViQmFja0ZvcndhcmRMaXN0SXRlbSYgaXRlbSkKIHsKICNpZiBXS19BUElfRU5B
QkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdl
YlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZp
Z2F0ZSwgaXRlbSk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkKKyAg
ICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5hdmln
YXRpb25HZXN0dXJlRGlkRW5kKHdpbGxOYXZpZ2F0ZSwgaXRlbSk7CiAjZWxzZQogICAgIFVOVVNF
RF9QQVJBTSh3aWxsTmF2aWdhdGUpOwogICAgIFVOVVNFRF9QQVJBTShpdGVtKTsKQEAgLTc4Nyw4
ICs3ODcsOCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjpuYXZpZ2F0aW9uR2VzdHVyZURpCiB2b2lk
IFBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KFdlYkJhY2tGb3J3
YXJkTGlzdEl0ZW0mIGl0ZW0pCiB7CiAjaWYgV0tfQVBJX0VOQUJMRUQKLSAgICBpZiAobV93ZWJW
aWV3KQotICAgICAgICBOYXZpZ2F0aW9uU3RhdGU6OmZyb21XZWJQYWdlKCptX3dlYlZpZXctPl9w
YWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0pOworICAgIGlmIChhdXRvIHdl
YlZpZXcgPSBtX3dlYlZpZXcuZ2V0KCkpCisgICAgICAgIE5hdmlnYXRpb25TdGF0ZTo6ZnJvbVdl
YlBhZ2UoKndlYlZpZXctPl9wYWdlKS53aWxsUmVjb3JkTmF2aWdhdGlvblNuYXBzaG90KGl0ZW0p
OwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oaXRlbSk7CiAjZW5kaWYKQEAgLTc5Nyw4ICs3OTcs
OCBAQCB2b2lkIFBhZ2VDbGllbnRJbXBsOjp3aWxsUmVjb3JkTmF2aWdhdGlvCiB2b2lkIFBhZ2VD
bGllbnRJbXBsOjpkaWRSZW1vdmVOYXZpZ2F0aW9uR2VzdHVyZVNuYXBzaG90KCkKIHsKICNpZiBX
S19BUElfRU5BQkxFRAotICAgIGlmIChtX3dlYlZpZXcpCi0gICAgICAgIE5hdmlnYXRpb25TdGF0
ZTo6ZnJvbVdlYlBhZ2UoKm1fd2ViVmlldy0+X3BhZ2UpLm5hdmlnYXRpb25HZXN0dXJlU25hcHNo
b3RXYXNSZW1vdmVkKCk7CisgICAgaWYgKGF1dG8gd2ViVmlldyA9IG1fd2ViVmlldy5nZXQoKSkK
KyAgICAgICAgTmF2aWdhdGlvblN0YXRlOjpmcm9tV2ViUGFnZSgqd2ViVmlldy0+X3BhZ2UpLm5h
dmlnYXRpb25HZXN0dXJlU25hcHNob3RXYXNSZW1vdmVkKCk7CiAjZW5kaWYKIH0KIApJbmRleDog
VG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5nZUxvZwkocmV2aXNpb24g
MjM4MDkyKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTQg
QEAKKzIwMTgtMTEtMTIgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5Ad2Via2l0Lm9y
Zz4KKworICAgICAgICBbaU9TXSBJbXBsZW1lbnQgc2FmZSBicm93c2luZyBpbiBXZWJLaXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTQ0MQorCisg
ICAgICAgIFJldmlld2VkIGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbToKKyAgICAgICAgKGNoZWNrVGl0bGVB
bmRDbGljayk6CisgICAgICAgIChURVNUKToKKwogMjAxOC0xMS0xMiAgQWxpY2lhIEJveWEgR2Fy
Y8OtYSAgPGFib3lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW01TRV1bR1N0cmVhbWVyXSBJbnRy
b2R1Y2UgQWJvcnRhYmxlVGFza1F1ZXVlCkluZGV4OiBUb29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1NhZmVCcm93c2luZy5tbQkocmV2aXNpb24gMjM4MDg1
KQorKysgVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9TYWZlQnJvd3Npbmcu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNyw4ICsxMzcsNiBAQCAtICh2b2lkKWxvb2tVcFVSTDoo
TlNVUkwgKilVUkwgY29tcGxldGlvCiAKIEBlbmQKIAotI2lmIFBMQVRGT1JNKE1BQykgLy8gRklY
TUU6IFRlc3Qgb24gaU9TIG9uY2UgaW1wbGVtZW50ZWQuCi0KIHN0YXRpYyBOU1VSTCAqc2ltcGxl
VVJMKCkKIHsKICAgICByZXR1cm4gW1tOU0J1bmRsZSBtYWluQnVuZGxlXSBVUkxGb3JSZXNvdXJj
ZTpAInNpbXBsZSIgd2l0aEV4dGVuc2lvbjpAImh0bWwiIHN1YmRpcmVjdG9yeTpAIlRlc3RXZWJL
aXRBUEkucmVzb3VyY2VzIl07CkBAIC0xNTQsMzEgKzE1Miw0NiBAQCBzdGF0aWMgUmV0YWluUHRy
PFdLV2ViVmlldz4gc2FmZUJyb3dzaW5nCiAgICAgW3dlYlZpZXcgbG9hZFJlcXVlc3Q6W05TVVJM
UmVxdWVzdCByZXF1ZXN0V2l0aFVSTDpzaW1wbGVVUkwoKV1dOwogICAgIHdoaWxlICghW3dlYlZp
ZXcgX3NhZmVCcm93c2luZ1dhcm5pbmdGb3JUZXN0aW5nXSkKICAgICAgICAgVGVzdFdlYktpdEFQ
STo6VXRpbDo6c3BpblJ1bkxvb3AoKTsKKyNpZiAhUExBVEZPUk0oTUFDKQorICAgIFtbd2ViVmll
dyBfc2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddIGRpZE1vdmVUb1dpbmRvd107CisjZW5k
aWYKICAgICByZXR1cm4gd2ViVmlldzsKIH0KIAorI2lmIFBMQVRGT1JNKE1BQykKK3N0YXRpYyB2
b2lkIGNoZWNrVGl0bGVBbmRDbGljayhOU0J1dHRvbiAqYnV0dG9uLCBjb25zdCBjaGFyKiBleHBl
Y3RlZFRpdGxlKQoreworICAgIEVYUEVDVF9TVFJFUShidXR0b24udGl0bGUuVVRGOFN0cmluZywg
ZXhwZWN0ZWRUaXRsZSk7CisgICAgW2J1dHRvbiBwZXJmb3JtQ2xpY2s6bmlsXTsKK30KKyNlbHNl
CitzdGF0aWMgdm9pZCBjaGVja1RpdGxlQW5kQ2xpY2soVUlCdXR0b24gKmJ1dHRvbiwgY29uc3Qg
Y2hhciogZXhwZWN0ZWRUaXRsZSkKK3sKKyAgICBFWFBFQ1RfU1RSRVEoW2J1dHRvbiBhdHRyaWJ1
dGVkVGl0bGVGb3JTdGF0ZTpVSUNvbnRyb2xTdGF0ZU5vcm1hbF0uc3RyaW5nLlVURjhTdHJpbmcs
IGV4cGVjdGVkVGl0bGUpOworICAgIFVJVmlldyAqdGFyZ2V0ID0gYnV0dG9uLnN1cGVydmlldy5z
dXBlcnZpZXc7CisgICAgU0VMIHNlbGVjdG9yID0gTlNTZWxlY3RvckZyb21TdHJpbmcoc3RyY21w
KGV4cGVjdGVkVGl0bGUsICJHbyBCYWNrIikgPyBAInNob3dEZXRhaWxzQ2xpY2tlZCIgOiBAImdv
QmFja0NsaWNrZWQiKTsKKyAgICBbdGFyZ2V0IHBlcmZvcm1TZWxlY3RvcjpzZWxlY3Rvcl07Cit9
CisjZW5kaWYKKwogVEVTVChTYWZlQnJvd3NpbmcsIEdvQmFjaykKIHsKICAgICBhdXRvIHdlYlZp
ZXcgPSBzYWZlQnJvd3NpbmdWaWV3KCk7Ci0gICAgTlNWaWV3ICpib3R0b20gPSBbd2ViVmlldyBf
c2FmZUJyb3dzaW5nV2FybmluZ0ZvclRlc3RpbmddLnN1YnZpZXdzLmZpcnN0T2JqZWN0LnN1YnZp
ZXdzLmxhc3RPYmplY3Q7Ci0gICAgTlNCdXR0b24gKmdvQmFjayA9IChOU0J1dHRvbiAqKWJvdHRv
bS5zdWJ2aWV3cy5sYXN0T2JqZWN0OwotICAgIEVYUEVDVF9TVFJFUShnb0JhY2sudGl0bGUuVVRG
OFN0cmluZywgIkdvIGJhY2siKTsKLSAgICBbZ29CYWNrIHBlcmZvcm1DbGljazpuaWxdOworICAg
IGF1dG8gd2FybmluZyA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ107
CisgICAgYXV0byBib3ggPSB3YXJuaW5nLnN1YnZpZXdzLmZpcnN0T2JqZWN0OworICAgIGNoZWNr
VGl0bGVBbmRDbGljayhib3guc3Vidmlld3NbM10sICJHbyBCYWNrIik7CiAgICAgRVhQRUNUX0VR
KFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ10sIG5pbCk7CiB9CiAKIFRF
U1QoU2FmZUJyb3dzaW5nLCBWaXNpdFVuc2FmZVdlYnNpdGUpCiB7CiAgICAgYXV0byB3ZWJWaWV3
ID0gc2FmZUJyb3dzaW5nVmlldygpOwotICAgIE5TVmlldyAqd2FybmluZyA9IFt3ZWJWaWV3IF9z
YWZlQnJvd3NpbmdXYXJuaW5nRm9yVGVzdGluZ107Ci0gICAgTlNWaWV3ICpib3ggPSB3YXJuaW5n
LnN1YnZpZXdzLmZpcnN0T2JqZWN0OwotICAgIE5TQnV0dG9uICpzaG93RGV0YWlscyA9IChOU0J1
dHRvbiAqKWJveC5zdWJ2aWV3cy5sYXN0T2JqZWN0LnN1YnZpZXdzLmZpcnN0T2JqZWN0OwotICAg
IEVYUEVDVF9TVFJFUShzaG93RGV0YWlscy50aXRsZS5VVEY4U3RyaW5nLCAiU2hvdyBkZXRhaWxz
Iik7Ci0gICAgRVhQRUNUX0VRKGJveC5zdWJ2aWV3cy5jb3VudCwgM3VsbCk7Ci0gICAgW3Nob3dE
ZXRhaWxzIHBlcmZvcm1DbGljazpuaWxdOwotICAgIEVYUEVDVF9FUShib3guc3Vidmlld3MuY291
bnQsIDR1bGwpOworICAgIGF1dG8gd2FybmluZyA9IFt3ZWJWaWV3IF9zYWZlQnJvd3NpbmdXYXJu
aW5nRm9yVGVzdGluZ107CisgICAgRVhQRUNUX0VRKHdhcm5pbmcuc3Vidmlld3MuY291bnQsIDF1
bGwpOworICAgIGNoZWNrVGl0bGVBbmRDbGljayh3YXJuaW5nLnN1YnZpZXdzLmZpcnN0T2JqZWN0
LnN1YnZpZXdzWzRdLCAiU2hvdyBEZXRhaWxzIik7CisgICAgRVhQRUNUX0VRKHdhcm5pbmcuc3Vi
dmlld3MuY291bnQsIDJ1bGwpOwogICAgIEVYUEVDVF9GQUxTRShjb21taXR0ZWROYXZpZ2F0aW9u
KTsKLSAgICBbd2FybmluZyBwZXJmb3JtU2VsZWN0b3I6TlNTZWxlY3RvckZyb21TdHJpbmcoQCJj
bGlja2VkT25MaW5rOiIpIHdpdGhPYmplY3Q6QCJXS1Zpc2l0VW5zYWZlV2Vic2l0ZVNlbnRpbmVs
Il07CisgICAgW3dhcm5pbmcgcGVyZm9ybVNlbGVjdG9yOk5TU2VsZWN0b3JGcm9tU3RyaW5nKEAi
Y2xpY2tlZE9uTGluazoiKSB3aXRoT2JqZWN0OltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiV0tWaXNp
dFVuc2FmZVdlYnNpdGVTZW50aW5lbCJdXTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4o
JmNvbW1pdHRlZE5hdmlnYXRpb24pOwogfQogCkBAIC0xOTEsOCArMjA0LDYgQEAgVEVTVChTYWZl
QnJvd3NpbmcsIE5hdmlnYXRpb25DbGVhcnNXYXJuaQogICAgICAgICBUZXN0V2ViS2l0QVBJOjpV
dGlsOjpzcGluUnVuTG9vcCgpOwogfQogCi0jZW5kaWYgLy8gUExBVEZPUk0oTUFDKQotCiBAaW50
ZXJmYWNlIE51bGxMb29rdXBDb250ZXh0IDogTlNPYmplY3QKIEBlbmQKIEBpbXBsZW1lbnRhdGlv
biBOdWxsTG9va3VwQ29udGV4dAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>