<?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>13431</bug_id>
          
          <creation_ts>2007-04-21 03:55:06 -0700</creation_ts>
          <short_desc>calcMinMaxWidth should be lazy.</short_desc>
          <delta_ts>2007-04-25 12:30:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>13351</blocked>
    
    <blocked>13440</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>13620</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-04-21 03:55:06 -0700</bug_when>
    <thetext>calcMinMaxWidth should occur as needed to answer the question of minwidth/maxwidth and not before then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13319</commentid>
    <comment_count>1</comment_count>
      <attachid>14133</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-04-22 03:10:17 -0700</bug_when>
    <thetext>Created attachment 14133
Patch to make minmaxwidth calculations happen lazily

This patch passes all layout tests and makes minmax recalc happen lazily.  This involved a substantial amount of shuffling of code that had sort of randomly glommed on to these methods to do other work (first-letter, counters, list markers, etc.).

Results should be excellent as long as you don&apos;t use a table.  Once you start using tables, you&apos;re sunk of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13320</commentid>
    <comment_count>2</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-04-22 03:27:36 -0700</bug_when>
    <thetext>Patch has no real effect on the PLT.  Too many tables I guess.  I&apos;m going to profile just to make sure there isn&apos;t a speedup coupled to a slowdown that might be masking gains.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13321</commentid>
    <comment_count>3</comment_count>
      <attachid>14134</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-04-22 04:38:48 -0700</bug_when>
    <thetext>Created attachment 14134
Snapshot #2, tighten things up a bit. Optimize more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13210</commentid>
    <comment_count>4</comment_count>
      <attachid>14142</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-04-22 22:05:47 -0700</bug_when>
    <thetext>Created attachment 14142
Passes all layout tests.

Ready to go I think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>13211</commentid>
    <comment_count>5</comment_count>
      <attachid>14142</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-22 22:10:44 -0700</bug_when>
    <thetext>Comment on attachment 14142
Passes all layout tests.

It looks to me like the cssstyleselector.cpp has nothing to do with the rest of this patch.

It&apos;s too late now, I guess, but I would have suggested making the name change separate from the laziness change. It would make it a hell of a lot easier to read the patch.

I started reviewing, but didn&apos;t have the staying power to read and understand the whole thing. So not reviewed yet by me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12766</commentid>
    <comment_count>6</comment_count>
      <attachid>14168</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-24 23:20:44 -0700</bug_when>
    <thetext>Created attachment 14168
first reduced patch (still passes all layout tests)

I landed a first set of safe changes and reduced the patch to this. I can do this again and land a second set.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12767</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-24 23:21:08 -0700</bug_when>
    <thetext>Questions for Hyatt:

Why does RenderTable still have an updateFirstLetter() function? Should it be removed, or should RenderBlock&apos;s updateFirstLetter() be changed to a virtual function? What kind of test would show the difference?

Why is updateFirstLetter() called in both RenderBlock::layout() and RenderBlock::calcPrefWidths()?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12769</commentid>
    <comment_count>8</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-24 23:50:00 -0700</bug_when>
    <thetext>Why isn&apos;t RenderObject::containingBlock a virtual function? Instead it has code that does isTableCell() and isRenderView() at the start of the function, which is more expensive than just being a virtual function in the first place.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12770</commentid>
    <comment_count>9</comment_count>
      <attachid>14169</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-24 23:51:09 -0700</bug_when>
    <thetext>Created attachment 14169
round 2 of changes to reduce the patch size</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12763</commentid>
    <comment_count>10</comment_count>
      <attachid>14169</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2007-04-25 00:08:34 -0700</bug_when>
    <thetext>Comment on attachment 14169
round 2 of changes to reduce the patch size

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12759</commentid>
    <comment_count>11</comment_count>
      <attachid>14169</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-25 00:09:40 -0700</bug_when>
    <thetext>Comment on attachment 14169
round 2 of changes to reduce the patch size

Landed now, so clearing the reviewed flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12758</commentid>
    <comment_count>12</comment_count>
      <attachid>14170</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-25 00:40:07 -0700</bug_when>
    <thetext>Created attachment 14170
more reduced patch, passes layout tests (code 99% by Hyatt, not me)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12504</commentid>
    <comment_count>13</comment_count>
      <attachid>14170</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2007-04-25 12:01:38 -0700</bug_when>
    <thetext>Comment on attachment 14170
more reduced patch, passes layout tests (code 99% by Hyatt, not me)

Comments from our review:

Need to leave updateFirstLetter virtual (so we should dump RenderBlock.h).

Also should remove the mutable.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>12492</commentid>
    <comment_count>14</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2007-04-25 12:30:37 -0700</bug_when>
    <thetext>Fixed.
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14133</attachid>
            <date>2007-04-22 03:10:17 -0700</date>
            <delta_ts>2007-04-22 04:38:48 -0700</delta_ts>
            <desc>Patch to make minmaxwidth calculations happen lazily</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>115554</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMjA5OTcpCisrKyBkb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTU4LDcgKzE5NTgsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVTdHlsZVNlbGVjdG9yKCkKICNl
bmRpZgogCiAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVl
ZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNM
YXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIGlmICh2aWV3KCkpCiAgICAgICAg
ICAgICB2aWV3KCktPnNjaGVkdWxlUmVsYXlvdXQoKTsKICAgICB9CkluZGV4OiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMsMTEgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcm93c0F0dHIpIHsK
ICAgICAgICAgbV9yb3dzID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgp
IDogMzsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAgICAgcmVuZGVyZXIoKS0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gY29sc0F0dHIpIHsKICAgICAgICAgbV9jb2xzID0gIWF0dHItPmlzTnVsbCgp
ID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogNjA7CiAgICAgICAgIGlmIChyZW5kZXJlcigpKQot
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsK
KyAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdyYXBBdHRyKSB7CiAgICAgICAg
IC8vIHZpcnR1YWwgLyBwaHlzaWNhbCBpcyBOZXRzY2FwZSBleHRlbnNpb24gb2YgSFRNTCAzLjAs
IG5vdyBkZXByZWNhdGVkCiAgICAgICAgIC8vIHNvZnQvIGhhcmQgLyBvZmYgaXMgcmVjb21tZW5k
YXRpb24gZm9yIEhUTUwgNCBleHRlbnNpb24gYnkgSUUgYW5kIE5TIDQKQEAgLTE1MCw3ICsxNTAs
NyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiAgICAgICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJvZmYiKSkKICAgICAgICAg
ICAgIG1fd3JhcCA9IHRhX05vV3JhcDsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAg
ICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAgICAv
LyBpZ25vcmUgZm9yIHRoZSBtb21lbnQKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBh
bGlnbkF0dHIpIHsKSW5kZXg6IHBhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJh
bWUuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHBhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcyLDcgKzEzNzIsNyBAQCB2b2lkIEZyYW1lOjpmb3JjZUxheW91dFdpdGhQYWdlV2lk
dGhSYW5nCiAgICAgICAgIC8vIFRoaXMgbWFnaWMgaXMgYmFzaWNhbGx5IGNvcGllZCBmcm9tIGto
dG1sdmlldzo6cHJpbnQKICAgICAgICAgaW50IHBhZ2VXID0gKGludCljZWlsZihtaW5QYWdlV2lk
dGgpOwogICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7Ci0gICAgICAgIHJvb3QtPnNldE5l
ZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgIHJvb3QtPnNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICBmb3JjZUxheW91dCgpOwogICAgICAgICAK
ICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZml0IGluIHRoZSBtaW5pbXVtIHBhZ2Ugd2lkdGgsIHdl
J2xsIGxheSBvdXQgYWdhaW4uIElmIHdlIGRvbid0IGZpdCBpbiB0aGUKQEAgLTEzODMsNyArMTM4
Myw3IEBAIHZvaWQgRnJhbWU6OmZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmcKICAgICAgICAg
aWYgKHJpZ2h0bW9zdFBvcyA+IG1pblBhZ2VXaWR0aCkgewogICAgICAgICAgICAgcGFnZVcgPSBt
aW4ocmlnaHRtb3N0UG9zLCAoaW50KWNlaWxmKG1heFBhZ2VXaWR0aCkpOwogICAgICAgICAgICAg
cm9vdC0+c2V0V2lkdGgocGFnZVcpOwotICAgICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRB
bmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgICAgIHJvb3QtPnNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOwogICAgICAgICAgICAgZm9yY2VMYXlvdXQoKTsKICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IHBhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1l
Vmlldy5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTAsMTAgKzQxMCw2IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBh
bGxvd1N1YnRyZWUKICAgICAgICAgcm9vdC0+cmVwYWludE9iamVjdHNCZWZvcmVMYXlvdXQoKTsK
ICAgICB9CiAKLSAgICBpZiAoc3VidHJlZSkgewotICAgICAgICBpZiAocm9vdC0+cmVjYWxjTWlu
TWF4KCkpCi0gICAgICAgICAgICByb290LT5yZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICB9CiAg
ICAgcGF1c2VTY2hlZHVsZWRFdmVudHMoKTsKICAgICByb290LT5sYXlvdXQoKTsKICAgICBkLT5s
YXlvdXRSb290ID0gMDsKSW5kZXg6IHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiAyMDk5NykK
KysrIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niwx
MiArNzYsOSBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKGludCBlCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGEgbWluL21heCB3aWR0aCBvZiBhdCBsZWFzdCAxcHggZm9yIHRo
aXMgY29sdW1uIG5vdy4KICAgICAgICAgICAgICAgICAgICAgbC5taW5XaWR0aCA9IG1heChsLm1p
bldpZHRoLCAxKTsKICAgICAgICAgICAgICAgICAgICAgbC5tYXhXaWR0aCA9IG1heChsLm1heFdp
ZHRoLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsLT5taW5NYXhLbm93bigpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+Y2FsY01pbk1heFdpZHRoKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjZWxsLT5taW5XaWR0aCgpID4gbC5taW5XaWR0aCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGwubWluV2lkdGggPSBjZWxsLT5taW5XaWR0aCgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2VsbC0+bWF4V2lkdGgoKSA+IGwubWF4V2lkdGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGwubWF4V2lkdGggPSBjZWxsLT5tYXhXaWR0aCgpOworICAgICAgICAg
ICAgICAgICAgICBsLm1pbldpZHRoID0gbWF4KGNlbGwtPm1pblByZWZXaWR0aCgpLCBsLm1pbldp
ZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwtPm1heFByZWZXaWR0aCgpID4gbC5t
YXhXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbC5tYXhXaWR0aCA9IGNlbGwtPm1h
eFByZWZXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29udHJpYnV0b3IgPSBj
ZWxsOwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0NCw3ICsyNDEsNyBAQCBzdGF0aWMg
Ym9vbCBzaG91bGRTY2FsZUNvbHVtbnMoUmVuZGVyVGFiCiAgICAgcmV0dXJuIHNjYWxlOwogfQog
Ci12b2lkIEF1dG9UYWJsZUxheW91dDo6Y2FsY01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGlu
dCYgbWF4V2lkdGgpCit2b2lkIEF1dG9UYWJsZUxheW91dDo6Y2FsY1ByZWZXaWR0aHMoaW50JiBt
aW5XaWR0aCwgaW50JiBtYXhXaWR0aCkKIHsKICAgICBmdWxsUmVjYWxjKCk7CiAKQEAgLTMxOSw4
ICszMTYsOCBAQCBpbnQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlV2lkdGgoCiAKICAg
ICAgICAgaW50IGNvbCA9IG1fdGFibGUtPmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsKICAgICAg
ICAgdW5zaWduZWQgaW50IGxhc3RDb2wgPSBjb2w7Ci0gICAgICAgIGludCBjTWluV2lkdGggPSBj
ZWxsLT5taW5XaWR0aCgpICsgaHNwYWNpbmc7Ci0gICAgICAgIGludCBjTWF4V2lkdGggPSBjZWxs
LT5tYXhXaWR0aCgpICsgaHNwYWNpbmc7CisgICAgICAgIGludCBjTWluV2lkdGggPSBjZWxsLT5t
aW5QcmVmV2lkdGgoKSArIGhzcGFjaW5nOworICAgICAgICBpbnQgY01heFdpZHRoID0gY2VsbC0+
bWF4UHJlZldpZHRoKCkgKyBoc3BhY2luZzsKICAgICAgICAgaW50IHRvdGFsUGVyY2VudCA9IDA7
CiAgICAgICAgIGludCBtaW5XaWR0aCA9IDA7CiAgICAgICAgIGludCBtYXhXaWR0aCA9IDA7Cklu
ZGV4OiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L0F1dG9UYWJsZUxheW91dC5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9BdXRvVGFi
bGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAg
QXV0b1RhYmxlTGF5b3V0KFJlbmRlclRhYmxlKik7CiAgICAgfkF1dG9UYWJsZUxheW91dCgpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aChpbnQmIG1pbldpZHRoLCBpbnQmIG1h
eFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50JiBtaW5XaWR0aCwg
aW50JiBtYXhXaWR0aCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcm90ZWN0ZWQ6
CkluZGV4OiByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9Db3VudGVyTm9kZS5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL0NvdW50ZXJO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENvdW50ZXJOb2Rl
OjpyZWNvdW50KCkKICAgICAgICAgaWYgKG9sZENvdW50ID09IG5ld0NvdW50KQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGlmIChjLT5tX3JlbmRlcmVyLT5pc0NvdW50ZXIoKSkKLSAgICAg
ICAgICAgIGMtPm1fcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7Cisg
ICAgICAgICAgICBjLT5tX3JlbmRlcmVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKICAgICB9CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHJldmlzaW9uIDIw
OTk3KQorKysgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODAsNyArMTgwLDcgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGlu
dAogICAgIHJldHVybiB1c2VkV2lkdGg7CiB9CiAKLXZvaWQgRml4ZWRUYWJsZUxheW91dDo6Y2Fs
Y01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpCit2b2lkIEZpeGVkVGFi
bGVMYXlvdXQ6OmNhbGNQcmVmV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpCiB7
CiAgICAgLy8gRklYTUU6IFRoaXMgZW50aXJlIGNhbGN1bGF0aW9uIGlzIGluY29ycmVjdCBmb3Ig
Ym90aCBtaW53aWR0aCBhbmQgbWF4d2lkdGguCiAgICAgCkluZGV4OiByZW5kZXJpbmcvRml4ZWRU
YWJsZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgJ
KHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBGaXhlZFRhYmxlTGF5b3V0IDogcHVibGlj
IFRhYmxlTGF5CiBwdWJsaWM6CiAgICAgRml4ZWRUYWJsZUxheW91dChSZW5kZXJUYWJsZSopOwog
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aChpbnQmIG1pbldpZHRoLCBpbnQmIG1h
eFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50JiBtaW5XaWR0aCwg
aW50JiBtYXhXaWR0aCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcm90ZWN0ZWQ6
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyQXBwbGV0LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVy
QXBwbGV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNiBAQCB2b2lkIFJlbmRlckFw
cGxldDo6Y3JlYXRlV2lkZ2V0SWZOZWNlc3NhCiB2b2lkIFJlbmRlckFwcGxldDo6bGF5b3V0KCkK
IHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKG1pbk1heEtub3duKCkp
OwogCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwpJbmRleDogcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1MCwxMyArMzUwLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxk
KFJlbmRlck9iamUKICAgICBpZiAoY2FuRGVsZXRlQW5vbnltb3VzQmxvY2tzICYmIHByZXYgJiYg
bmV4dCkgewogICAgICAgICAvLyBUYWtlIGFsbCB0aGUgY2hpbGRyZW4gb3V0IG9mIHRoZSB8bmV4
dHwgYmxvY2sgYW5kIHB1dCB0aGVtIGluCiAgICAgICAgIC8vIHRoZSB8cHJldnwgYmxvY2suCi0g
ICAgICAgIHByZXYtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgIHBy
ZXYtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICBSZW5kZXJP
YmplY3QqIG8gPSBuZXh0LT5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChvKSB7CiAgICAg
ICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAgIG8gPSBuby0+bmV4dFNp
YmxpbmcoKTsKICAgICAgICAgICAgIHByZXYtPmFwcGVuZENoaWxkTm9kZShuZXh0LT5yZW1vdmVD
aGlsZE5vZGUobm8pKTsKLSAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJl
Y2FsYygpOworICAgICAgICAgICAgbm8tPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwogICAgICAgICB9CiAgCiAgICAgICAgIFJlbmRlckJsb2NrKiBuZXh0QmxvY2sgPSBzdGF0
aWNfY2FzdDxSZW5kZXJCbG9jayo+KG5leHQpOwpAQCAtMzczLDcgKzM3Myw3IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgLy8gVGhlIHJlbW92YWwg
aGFzIGtub2NrZWQgdXMgZG93biB0byBjb250YWluaW5nIG9ubHkgYSBzaW5nbGUgYW5vbnltb3Vz
CiAgICAgICAgIC8vIGJveC4gIFdlIGNhbiBnbyBhaGVhZCBhbmQgcHVsbCB0aGUgY29udGVudCBy
aWdodCBiYWNrIHVwIGludG8gb3VyCiAgICAgICAgIC8vIGJveC4KLSAgICAgICAgc2V0TmVlZHNM
YXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lk
dGhzUmVjYWxjKCk7CiAgICAgICAgIFJlbmRlckJsb2NrKiBhbm9uQmxvY2sgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJCbG9jayo+KHJlbW92ZUNoaWxkTm9kZShjaGlsZCkpOwogICAgICAgICBtX2NoaWxk
cmVuSW5saW5lID0gdHJ1ZTsKICAgICAgICAgUmVuZGVyT2JqZWN0KiBvID0gYW5vbkJsb2NrLT5m
aXJzdENoaWxkKCk7CkBAIC0zODEsNyArMzgxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVtb3Zl
Q2hpbGQoUmVuZGVyT2JqZQogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBubyA9IG87CiAgICAg
ICAgICAgICBvID0gbm8tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBhcHBlbmRDaGlsZE5v
ZGUoYW5vbkJsb2NrLT5yZW1vdmVDaGlsZE5vZGUobm8pKTsKLSAgICAgICAgICAgIG5vLT5zZXRO
ZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAgICAgbm8tPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICB9CiAKICAgICAgICAgLy8gRGVsZXRl
IHRoZSBub3ctZW1wdHkgYmxvY2sncyBsaW5lcyBhbmQgbnVrZSBpdC4KQEAgLTQ2NCw2ICs0NjQs
OSBAQCBib29sIFJlbmRlckJsb2NrOjppc1NlbGZDb2xsYXBzaW5nQmxvY2soCiAKIHZvaWQgUmVu
ZGVyQmxvY2s6OmxheW91dCgpCiB7CisgICAgLy8gVXBkYXRlIG91ciBmaXJzdCBsZXR0ZXIgaW5m
byBub3cuCisgICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKKwogICAgIC8vIFRhYmxlIGNlbGxzIGNh
bGwgbGF5b3V0QmxvY2sgZGlyZWN0bHksIHNvIGRvbid0IGFkZCBhbnkgbG9naWMgaGVyZS4gIFB1
dCBjb2RlIGludG8KICAgICAvLyBsYXlvdXRCbG9jaygpLgogICAgIGxheW91dEJsb2NrKGZhbHNl
KTsKQEAgLTQ4MSw3ICs0ODQsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogdm9pZCBS
ZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxkcmVuKQogewogICAgIEFT
U0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBp
ZiAoaXNJbmxpbmUoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSkgLy8gSW5saW5l
IDxmb3JtPnMgaW5zaWRlIHZhcmlvdXMgdGFibGUgZWxlbWVudHMgY2FuCiAgICAgICAgIHJldHVy
bjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNhdXNlIHVzIHRvIGNv
bWUgaW4gaGVyZS4gIEp1c3QgYmFpbC4KQEAgLTc1NCw3ICs3NTYsNyBAQCBSZW5kZXJPYmplY3Qq
IFJlbmRlckJsb2NrOjpoYW5kbGVDb21wYWN0CiAgICAgICAgICAgICBjaGlsZC0+Y2FsY1dpZHRo
KCk7CiAgICAgICAgICAgICBpbnQgY2hpbGRNYXJnaW5zID0gY2hpbGQtPm1hcmdpbkxlZnQoKSAr
IGNoaWxkLT5tYXJnaW5SaWdodCgpOwogICAgICAgICAgICAgaW50IG1hcmdpbiA9IHN0eWxlKCkt
PmRpcmVjdGlvbigpID09IExUUiA/IGN1cnItPm1hcmdpbkxlZnQoKSA6IGN1cnItPm1hcmdpblJp
Z2h0KCk7Ci0gICAgICAgICAgICBpZiAobWFyZ2luID49IChjaGlsZE1hcmdpbnMgKyBjaGlsZC0+
bWF4V2lkdGgoKSkpIHsKKyAgICAgICAgICAgIGlmIChtYXJnaW4gPj0gKGNoaWxkTWFyZ2lucyAr
IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSkpIHsKICAgICAgICAgICAgICAgICAvLyBUaGUgY29tcGFj
dCB3aWxsIGZpdCBpbiB0aGUgbWFyZ2luLgogICAgICAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVl
OwogICAgICAgICAgICAgICAgIGNvbXBhY3RJbmZvLnNldChjaGlsZCwgY3Vycik7CkBAIC0yNjM2
LDcgKzI2MzgsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmdldENsZWFyRGVsdGEoUmVuZGVyT2JqCiAg
ICAgLy8gKGViYXkgb24gdGhlIFBMVCwgZmluYW5jZS55YWhvby5jb20gaW4gdGhlIHJlYWwgd29y
bGQsIHZlcnNpb250cmFja2VyLmNvbSBmb3JjZXMgZXZlbiBhbG1vc3Qgc3RyaWN0IG1vZGUgbm90
IHRvIHdvcmspCiAgICAgaW50IHJlc3VsdCA9IGNsZWFyU2V0ID8gbWF4KDAsIGJvdHRvbSAtIGNo
aWxkLT55UG9zKCkpIDogMDsKICAgICBpZiAoIXJlc3VsdCAmJiBjaGlsZC0+YXZvaWRzRmxvYXRz
KCkgJiYgY2hpbGQtPnN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIAotICAgICAgICBjaGls
ZC0+bWluV2lkdGgoKSA+IGxpbmVXaWR0aChjaGlsZC0+eVBvcygpKSAmJiBjaGlsZC0+bWluV2lk
dGgoKSA8PSBhdmFpbGFibGVXaWR0aCgpICYmIAorICAgICAgICBjaGlsZC0+bWluUHJlZldpZHRo
KCkgPiBsaW5lV2lkdGgoY2hpbGQtPnlQb3MoKSkgJiYgY2hpbGQtPm1pblByZWZXaWR0aCgpIDw9
IGF2YWlsYWJsZVdpZHRoKCkgJiYgCiAgICAgICAgIGRvY3VtZW50KCktPmluU3RyaWN0TW9kZSgp
KSAgIAogICAgICAgICByZXN1bHQgPSBtYXgoMCwgZmxvYXRCb3R0b20oKSAtIGNoaWxkLT55UG9z
KCkpOwogICAgIHJldHVybiByZXN1bHQ7CkBAIC0zMjI5LDYxICszMjMxLDU1IEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmFkanVzdFJlY3RGb3JDb2x1bW5zKEkKICAgICByID0gcmVzdWx0OwogfQogCi12
b2lkIFJlbmRlckJsb2NrOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJCbG9jazo6Y2Fs
Y1ByZWZXaWR0aHMoKQogewotICAgIEFTU0VSVCggIW1pbk1heEtub3duKCkgKTsKLQotI2lmZGVm
IERFQlVHX0xBWU9VVAotICAgIGtkRGVidWcoIDYwNDAgKSA8PCByZW5kZXJOYW1lKCkgPDwgIihS
ZW5kZXJCbG9jayk6OmNhbGNNaW5NYXhXaWR0aCgpIHRoaXM9IiA8PCB0aGlzIDw8IGVuZGw7Ci0j
ZW5kaWYKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgaWYgKCFpc1RhYmxl
Q2VsbCgpICYmIHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCku
dmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoID0gY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0
aCgpLnZhbHVlKCkpOwogICAgIGVsc2UgewotICAgICAgICBtX21pbldpZHRoID0gMDsKLSAgICAg
ICAgbV9tYXhXaWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSAwOwogCiAgICAgICAgIGlmIChjaGlsZHJlbklubGluZSgpKQotICAg
ICAgICAgICAgY2FsY0lubGluZU1pbk1heFdpZHRoKCk7CisgICAgICAgICAgICBjYWxjSW5saW5l
UHJlZldpZHRocygpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYWxjQmxvY2tNaW5NYXhX
aWR0aCgpOwotCi0gICAgICAgIGlmKG1fbWF4V2lkdGggPCBtX21pbldpZHRoKSBtX21heFdpZHRo
ID0gbV9taW5XaWR0aDsKKyAgICAgICAgICAgIGNhbGNCbG9ja1ByZWZXaWR0aHMoKTsKIAorICAg
ICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgbV9tYXhQcmVmV2lkdGgp
OworICAgICAgICAKICAgICAgICAgaWYgKCFzdHlsZSgpLT5hdXRvV3JhcCgpICYmIGNoaWxkcmVu
SW5saW5lKCkpIHsKLSAgICAgICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoOworICAgICAg
ICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aDsKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUgd2l0aCBpbmxpbmUgY2hpbGRyZW4gaGFz
IG5vIG1pbmltdW0gd2lkdGguCiAgICAgICAgICAgICBpZiAobV9sYXllciAmJiBtX2xheWVyLT5t
YXJxdWVlKCkgJiYgbV9sYXllci0+bWFycXVlZSgpLT5pc0hvcml6b250YWwoKSkKLSAgICAgICAg
ICAgICAgICBtX21pbldpZHRoID0gMDsKKyAgICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9
IDA7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXNUYWJsZUNlbGwoKSkgewotICAgICAgICAg
ICAgTGVuZ3RoIHcgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPih0aGlzKS0+c3R5bGVP
ckNvbFdpZHRoKCk7CisgICAgICAgICAgICBMZW5ndGggdyA9IHN0YXRpY19jYXN0PGNvbnN0IFJl
bmRlclRhYmxlQ2VsbCo+KHRoaXMpLT5zdHlsZU9yQ29sV2lkdGgoKTsKICAgICAgICAgICAgIGlm
ICh3LmlzRml4ZWQoKSAmJiB3LnZhbHVlKCkgPiAwKQotICAgICAgICAgICAgICAgIG1fbWF4V2lk
dGggPSBtYXgobV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aCh3LnZhbHVlKCkpKTsKKyAg
ICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0Nv
bnRlbnRCb3hXaWR0aCh3LnZhbHVlKCkpKTsKICAgICAgICAgfQogICAgIH0KICAgICAKICAgICBp
ZiAoc3R5bGUoKS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52
YWx1ZSgpID4gMCkgewotICAgICAgICBtX21heFdpZHRoID0gbWF4KG1fbWF4V2lkdGgsIGNhbGND
b250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1f
bWluV2lkdGggPSBtYXgobV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5t
aW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQ
cmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgp
KSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjYWxjQ29u
dGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KICAgICAK
ICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFdpZHRoID0g
bWluKG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGggPSBtaW4obV9taW5XaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1f
bWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFs
dWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9IDA7CiAgICAgdG9BZGQgPSBib3JkZXJM
ZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpOwog
Ci0gICAgbV9taW5XaWR0aCArPSB0b0FkZDsKLSAgICBtX21heFdpZHRoICs9IHRvQWRkOwotCi0g
ICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKKyAgICBt
X21heFByZWZXaWR0aCArPSB0b0FkZDsKIAotICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJUZXh0
OjpjYWxjTWluTWF4V2lkdGgoIiA8PCB0aGlzIDw8ICIpOiBtaW4gPSAiIDw8IG1fbWluV2lkdGgg
PDwgIiBtYXggPSAiIDw8IG1fbWF4V2lkdGggPDwgZW5kbDsKKyAgICBzZXRQcmVmV2lkdGhzRGly
dHkoZmFsc2UpOwogfQogCiBzdHJ1Y3QgSW5saW5lTWluTWF4SXRlcmF0b3IKQEAgLTMzMDAsOCAr
MzI5Niw4IEBAIHN0cnVjdCBJbmxpbmVNaW5NYXhJdGVyYXRvcgogICAgIFJlbmRlck9iamVjdCog
Y3VycmVudDsKICAgICBib29sIGVuZE9mSW5saW5lOwogCi0gICAgSW5saW5lTWluTWF4SXRlcmF0
b3IoUmVuZGVyT2JqZWN0KiBwLCBSZW5kZXJPYmplY3QqIG8sIGJvb2wgZW5kID0gZmFsc2UpCi0g
ICAgICAgIDpwYXJlbnQocCksIGN1cnJlbnQobyksIGVuZE9mSW5saW5lKGVuZCkge30KKyAgICBJ
bmxpbmVNaW5NYXhJdGVyYXRvcihSZW5kZXJPYmplY3QqIHAsIGJvb2wgZW5kID0gZmFsc2UpCisg
ICAgICAgIDpwYXJlbnQocCksIGN1cnJlbnQocCksIGVuZE9mSW5saW5lKGVuZCkge30KIAogICAg
IFJlbmRlck9iamVjdCogbmV4dCgpOwogfTsKQEAgLTMzMTEsOSArMzMwNyw3IEBAIFJlbmRlck9i
amVjdCogSW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQKICAgICBSZW5kZXJPYmplY3QqIHJlc3Vs
dCA9IDA7CiAgICAgYm9vbCBvbGRFbmRPZklubGluZSA9IGVuZE9mSW5saW5lOwogICAgIGVuZE9m
SW5saW5lID0gZmFsc2U7Ci0gICAgd2hpbGUgKGN1cnJlbnQgIT0gMCB8fCAoY3VycmVudCA9PSBw
YXJlbnQpKQotICAgIHsKLSAgICAgICAgLy9rZERlYnVnKCA2MDQwICkgPDwgImN1cnJlbnQgPSAi
IDw8IGN1cnJlbnQgPDwgZW5kbDsKKyAgICB3aGlsZSAoY3VycmVudCB8fCBjdXJyZW50ID09IHBh
cmVudCkgewogICAgICAgICBpZiAoIW9sZEVuZE9mSW5saW5lICYmCiAgICAgICAgICAgICAoY3Vy
cmVudCA9PSBwYXJlbnQgfHwKICAgICAgICAgICAgICAoIWN1cnJlbnQtPmlzRmxvYXRpbmcoKSAm
JiAhY3VycmVudC0+aXNSZXBsYWNlZCgpICYmICFjdXJyZW50LT5pc1Bvc2l0aW9uZWQoKSkpKQpA
QCAtMzMzOCwxMSArMzMzMiwxMCBAQCBSZW5kZXJPYmplY3QqIElubGluZU1pbk1heEl0ZXJhdG9y
OjpuZXh0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIXJlc3VsdCkg
YnJlYWs7CisgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgaWYgKCFyZXN1bHQtPmlzUG9zaXRpb25lZCgpICYmIChyZXN1bHQtPmlzVGV4dCgpIHx8IHJl
c3VsdC0+aXNCUigpIHx8Ci0gICAgICAgICAgICByZXN1bHQtPmlzRmxvYXRpbmcoKSB8fCByZXN1
bHQtPmlzUmVwbGFjZWQoKSB8fAotICAgICAgICAgICAgcmVzdWx0LT5pc0lubGluZUZsb3coKSkp
CisgICAgICAgIGlmICghcmVzdWx0LT5pc1Bvc2l0aW9uZWQoKSAmJiAocmVzdWx0LT5pc1RleHQo
KSB8fCByZXN1bHQtPmlzRmxvYXRpbmcoKSB8fCByZXN1bHQtPmlzUmVwbGFjZWQoKSB8fCByZXN1
bHQtPmlzSW5saW5lRmxvdygpKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICAg
ICAgY3VycmVudCA9IHJlc3VsdDsKQEAgLTMzNjEsNyArMzM1NCw3IEBAIHN0YXRpYyBpbnQgZ2V0
QlBNV2lkdGgoaW50IGNoaWxkVmFsdWUsIEwKICAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIGlu
dCBnZXRCb3JkZXJQYWRkaW5nTWFyZ2luKFJlbmRlck9iamVjdCogY2hpbGQsIGJvb2wgZW5kT2ZJ
bmxpbmUpCitzdGF0aWMgaW50IGdldEJvcmRlclBhZGRpbmdNYXJnaW4oY29uc3QgUmVuZGVyT2Jq
ZWN0KiBjaGlsZCwgYm9vbCBlbmRPZklubGluZSkKIHsKICAgICBSZW5kZXJTdHlsZSogY3N0eWxl
ID0gY2hpbGQtPnN0eWxlKCk7CiAgICAgaW50IHJlc3VsdCA9IDA7CkBAIC0zMzk0LDcgKzMzODcs
NyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3RyaXBUcmFpbGluZ1NwYWNlKGluCiAvLyBhbmQgT3Bl
cmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRl
IGl0IHVuZGVyCiAvLyB2ZXJ5IHNwZWNpZmljIGNpcnVjdW1zdGFuY2VzLiBOb3Qgc3VwcG9ydGlu
ZyB0aGUgcXVpcmsgaGFzIGNhdXNlZCB1cyB0bwogLy8gbWlzLXJlbmRlciBzb21lIHJlYWwgc2l0
ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcuKSAKLXN0YXRpYyBib29sIHNob3VsZEdyb3dUYWJsZUNl
bGxGb3JJbWFnZShSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBSZW5kZXJPYmplY3QqIGlt
YWdlLCBSZW5kZXJPYmplY3QqIGFkamFjZW50TGVhZikKK3N0YXRpYyBib29sIHNob3VsZEdyb3dU
YWJsZUNlbGxGb3JJbWFnZShjb25zdCBSZW5kZXJCbG9jayogY29udGFpbmluZ0Jsb2NrLCBjb25z
dCBSZW5kZXJPYmplY3QqIGltYWdlLCBjb25zdCBSZW5kZXJPYmplY3QqIGFkamFjZW50TGVhZikK
IHsKICAgICBpZiAoIWNvbnRhaW5pbmdCbG9jay0+c3R5bGUoKS0+aHRtbEhhY2tzKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MTQsMTAgKzM0MDcsMTAgQEAgc3RhdGljIGJvb2wgc2hv
dWxkR3Jvd1RhYmxlQ2VsbEZvckltYWdlKAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIFJl
bmRlckJsb2NrOjpjYWxjSW5saW5lTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJCbG9jazo6Y2Fs
Y0lubGluZVByZWZXaWR0aHMoKQogewotICAgIGludCBpbmxpbmVNYXg9MDsKLSAgICBpbnQgaW5s
aW5lTWluPTA7CisgICAgaW50IGlubGluZU1heCA9IDA7CisgICAgaW50IGlubGluZU1pbiA9IDA7
CiAKICAgICBpbnQgY3cgPSBjb250YWluaW5nQmxvY2soKS0+Y29udGVudFdpZHRoKCk7CiAKQEAg
LTM0MjksMTIgKzM0MjIsMTEgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZU1pbk1heFdp
ZHRoKAogICAgIGJvb2wgYXV0b1dyYXAsIG9sZEF1dG9XcmFwOwogICAgIGF1dG9XcmFwID0gb2xk
QXV0b1dyYXAgPSBzdHlsZSgpLT5hdXRvV3JhcCgpOwogCi0gICAgSW5saW5lTWluTWF4SXRlcmF0
b3IgY2hpbGRJdGVyYXRvcih0aGlzLCB0aGlzKTsKKyAgICBJbmxpbmVNaW5NYXhJdGVyYXRvciBj
aGlsZEl0ZXJhdG9yKHRoaXMpOwogICAgIGJvb2wgYWRkZWRUZXh0SW5kZW50ID0gZmFsc2U7IC8v
IE9ubHkgZ2V0cyBhZGRlZCBpbiBvbmNlLgogICAgIFJlbmRlck9iamVjdCogcHJldkZsb2F0ID0g
MDsKICAgICBSZW5kZXJPYmplY3QqIHByZXZpb3VzTGVhZiA9IDA7Ci0gICAgd2hpbGUgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBjaGlsZEl0ZXJhdG9yLm5leHQoKSkKLSAgICB7CisgICAgd2hpbGUg
KFJlbmRlck9iamVjdCogY2hpbGQgPSBjaGlsZEl0ZXJhdG9yLm5leHQoKSkgewogICAgICAgICBJ
bmxpbmVNaW5NYXhJdGVyYXRvciBsZWFmSXRlcmF0b3IgPSBjaGlsZEl0ZXJhdG9yOwogICAgICAg
ICBSZW5kZXJPYmplY3QqIG5leHRMZWFmID0gbGVhZkl0ZXJhdG9yLm5leHQoKTsKICAgICAgICAg
d2hpbGUgKG5leHRMZWFmICYmIG5leHRMZWFmLT5pc0lubGluZUZsb3coKSkKQEAgLTM1MDAsMTYg
KzM0OTIsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5lTWluTWF4V2lkdGgoCiAgICAg
ICAgICAgICAgICAgICAgIGludCBtYXJnaW5zID0gMDsKICAgICAgICAgICAgICAgICAgICAgTGVu
Z3RoIGxlZnRNYXJnaW4gPSBjc3R5bGUtPm1hcmdpbkxlZnQoKTsKICAgICAgICAgICAgICAgICAg
ICAgTGVuZ3RoIHJpZ2h0TWFyZ2luID0gY3N0eWxlLT5tYXJnaW5SaWdodCgpOwotICAgICAgICAg
ICAgICAgICAgICBib29sIHVzZUNhbGN1bGF0ZWRXaWR0aHMgPSBjaGlsZC0+aXNMaXN0TWFya2Vy
KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0TWFyZ2luLmlzUGVyY2VudCgpIHx8IHJp
Z2h0TWFyZ2luLmlzUGVyY2VudCgpIHx8IHVzZUNhbGN1bGF0ZWRXaWR0aHMpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjaGlsZC0+Y2FsY1dpZHRoKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
ICh1c2VDYWxjdWxhdGVkV2lkdGhzIHx8IGxlZnRNYXJnaW4uaXNQZXJjZW50KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtYXJnaW5zICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGxlZnRNYXJnaW4uaXNGaXhlZCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAobGVmdE1hcmdpbi5pc0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICBtYXJnaW5zICs9IGxlZnRNYXJnaW4udmFsdWUoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KHVzZUNhbGN1bGF0ZWRXaWR0aHMgfHwgcmlnaHRNYXJnaW4uaXNQZXJjZW50KCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtYXJnaW5zICs9IGNoaWxkLT5tYXJnaW5SaWdodCgpOwotICAgICAg
ICAgICAgICAgICAgICBlbHNlIGlmIChyaWdodE1hcmdpbi5pc0ZpeGVkKCkpCisgICAgICAgICAg
ICAgICAgICAgIGlmIChyaWdodE1hcmdpbi5pc0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAgICAg
ICAgICBtYXJnaW5zICs9IHJpZ2h0TWFyZ2luLnZhbHVlKCk7CiAgICAgICAgICAgICAgICAgICAg
IGNoaWxkTWluICs9IG1hcmdpbnM7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IG1h
cmdpbnM7CkBAIC0zNTIwLDggKzM1MDUsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5l
TWluTWF4V2lkdGgoCiAgICAgICAgICAgICAgICAgLy8gQ2FzZSAoMikuIElubGluZSByZXBsYWNl
ZCBlbGVtZW50cyBhbmQgZmxvYXRzLgogICAgICAgICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0
ZXJtaW5hdGUgdGhlIGN1cnJlbnQgbGluZSBhcyBmYXIgYXMKICAgICAgICAgICAgICAgICAvLyBt
aW53aWR0aCBpcyBjb25jZXJuZWQuCi0gICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0gY2hpbGQt
Pm1pbldpZHRoKCk7Ci0gICAgICAgICAgICAgICAgY2hpbGRNYXggKz0gY2hpbGQtPm1heFdpZHRo
KCk7CisgICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0gY2hpbGQtPm1pblByZWZXaWR0aCgpOwor
ICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKTsKIAogICAg
ICAgICAgICAgICAgIGJvb2wgY2xlYXJQcmV2aW91c0Zsb2F0OwogICAgICAgICAgICAgICAgIGlm
IChjaGlsZC0+aXNGbG9hdGluZygpKSB7CkBAIC0zNTM0LDE0ICszNTE5LDEzIEBAIHZvaWQgUmVu
ZGVyQmxvY2s6OmNhbGNJbmxpbmVNaW5NYXhXaWR0aCgKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBib29sIGdyb3dGb3JQcmV2aW91cyA9IHNob3VsZEdyb3dUYWJsZUNlbGxGb3JJ
bWFnZSh0aGlzLCBjaGlsZCwgcHJldmlvdXNMZWFmKTsKICAgICAgICAgICAgICAgICBpZiAoIWdy
b3dGb3JQcmV2aW91cyAmJiAoYXV0b1dyYXAgfHwgb2xkQXV0b1dyYXApIHx8IGNsZWFyUHJldmlv
dXNGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9taW5XaWR0aCA8IGlubGluZU1p
bikKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWluV2lkdGggPSBpbmxpbmVNaW47CisgICAg
ICAgICAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVm
V2lkdGgpOwogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOwogICAgICAgICAgICAg
ICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIElmIHdlJ3JlIHN1cHBvc2VkIHRvIGNsZWFyIHRo
ZSBwcmV2aW91cyBmbG9hdCwgdGhlbiB0ZXJtaW5hdGUgbWF4d2lkdGggYXMgd2VsbC4KICAgICAg
ICAgICAgICAgICBpZiAoY2xlYXJQcmV2aW91c0Zsb2F0KSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fbWF4V2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFdpZHRoKTsKKyAgICAgICAgICAgICAg
ICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFByZWZXaWR0aCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlubGluZU1heCA9IDA7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIApAQCAtMzU2NCw5ICszNTQ4LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2Fs
Y0lubGluZU1pbk1heFdpZHRoKAogCiAgICAgICAgICAgICAgICAgaWYgKGF1dG9XcmFwICYmICFz
aG91bGRHcm93VGFibGVDZWxsRm9ySW1hZ2UodGhpcywgY2hpbGQsIG5leHRMZWFmKSkgewogICAg
ICAgICAgICAgICAgICAgICAvLyBOb3cgY2hlY2sgb3VyIGxpbmUuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX21pbldpZHRoIDwgaW5saW5lTWluKQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9taW5XaWR0aCA9IGlubGluZU1pbjsKLQorICAgICAgICAgICAgICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBzdGFydCBhIG5ldyBsaW5lLgogICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOwogICAgICAgICAgICAgICAgIH0KQEAgLTM1OTIs
OSArMzU3NSw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVNaW5NYXhXaWR0aCgKICAg
ICAgICAgICAgICAgICBpbnQgYmVnaW5NaW4sIGVuZE1pbjsKICAgICAgICAgICAgICAgICBib29s
IGJlZ2luV1MsIGVuZFdTOwogICAgICAgICAgICAgICAgIGludCBiZWdpbk1heCwgZW5kTWF4Owot
ICAgICAgICAgICAgICAgIHQtPnRyaW1tZWRNaW5NYXhXaWR0aChpbmxpbmVNYXgsIGJlZ2luTWlu
LCBiZWdpbldTLCBlbmRNaW4sIGVuZFdTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBoYXNCcmVha2FibGVDaGFyLCBoYXNCcmVhaywgYmVnaW5NYXgsIGVuZE1heCwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4sIGNoaWxkTWF4LCBz
dHJpcEZyb250U3BhY2VzKTsKKyAgICAgICAgICAgICAgICB0LT50cmltbWVkUHJlZldpZHRocyhp
bmxpbmVNYXgsIGJlZ2luTWluLCBiZWdpbldTLCBlbmRNaW4sIGVuZFdTLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JyZWFrYWJsZUNoYXIsIGhhc0JyZWFrLCBiZWdp
bk1heCwgZW5kTWF4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxk
TWluLCBjaGlsZE1heCwgc3RyaXBGcm9udFNwYWNlcyk7CiAKICAgICAgICAgICAgICAgICAvLyBU
aGlzIHRleHQgb2JqZWN0IGlzIGluc2lnbmlmaWNhbnQgYW5kIHdpbGwgbm90IGJlIHJlbmRlcmVk
LiAgSnVzdAogICAgICAgICAgICAgICAgIC8vIGNvbnRpbnVlLgpAQCAtMzYyMywxMyArMzYwNiwx
MiBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5lTWluTWF4V2lkdGgoCiAgICAgICAgICAg
ICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUgYSBicmVha2FibGUg
Y2hhcmFjdGVyLiAgTm93IHdlIG5lZWQgdG8ga25vdyBpZgogICAgICAgICAgICAgICAgICAgICAv
LyB3ZSBzdGFydCBhbmQgZW5kIHdpdGggd2hpdGVzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKGJlZ2luV1MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luV1MpCiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgZW5kIHRoZSBjdXJyZW50IGxpbmUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZihtX21pbldpZHRoIDwgaW5saW5lTWluKSBtX21pbldp
ZHRoID0gaW5saW5lTWluOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsK
ICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmxp
bmVNaW4gKz0gYmVnaW5NaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihtX21pbldpZHRo
IDwgaW5saW5lTWluKSBtX21pbldpZHRoID0gaW5saW5lTWluOworICAgICAgICAgICAgICAgICAg
ICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE1pbiAtPSB0aTsKICAgICAgICAgICAgICAgICAg
ICAgfQogCkBAIC0zNjM4LDI5ICszNjIwLDI3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxp
bmVNaW5NYXhXaWR0aCgKICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFdTKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBlbmQgaW4gd2hpdGVzcGFjZSwgd2hpY2ggbWVhbnMgd2Ug
Y2FuIGdvIGFoZWFkCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZW5kIG91ciBjdXJy
ZW50IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihtX21pbldpZHRoIDwgaW5saW5l
TWluKSBtX21pbldpZHRoID0gaW5saW5lTWluOworICAgICAgICAgICAgICAgICAgICAgICAgbV9t
aW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAgICAgICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9taW5X
aWR0aCA8IGlubGluZU1pbikgbV9taW5XaWR0aCA9IGlubGluZU1pbjsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lkdGgp
OwogICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluID0gZW5kTWluOwogICAgICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKGhh
c0JyZWFrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCArPSBiZWdpbk1heDsKLSAg
ICAgICAgICAgICAgICAgICAgaWYgKG1fbWF4V2lkdGggPCBpbmxpbmVNYXgpIG1fbWF4V2lkdGgg
PSBpbmxpbmVNYXg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX21heFdpZHRoIDwgY2hpbGRN
YXgpIG1fbWF4V2lkdGggPSBjaGlsZE1heDsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXhQcmVm
V2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFByZWZXaWR0aCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGNoaWxkTWF4LCBtX21heFByZWZXaWR0aCk7CiAgICAg
ICAgICAgICAgICAgICAgIGlubGluZU1heCA9IGVuZE1heDsKICAgICAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggKz0gY2hp
bGRNYXg7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7
Ci0gICAgICAgICAgICBpZihtX21pbldpZHRoIDwgaW5saW5lTWluKSBtX21pbldpZHRoID0gaW5s
aW5lTWluOwotICAgICAgICAgICAgaWYobV9tYXhXaWR0aCA8IGlubGluZU1heCkgbV9tYXhXaWR0
aCA9IGlubGluZU1heDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fbWluUHJlZldp
ZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOworICAgICAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFByZWZXaWR0aCk7CiAgICAgICAgICAgICBp
bmxpbmVNaW4gPSBpbmxpbmVNYXggPSAwOwogICAgICAgICAgICAgc3RyaXBGcm9udFNwYWNlcyA9
IHRydWU7CiAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hpbGQgPSAwOwpAQCAtMzY3NCwxNCAr
MzY1NCwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5lTWluTWF4V2lkdGgoCiAgICAg
aWYgKHN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpKQogICAgICAgICBzdHJpcFRyYWlsaW5n
U3BhY2UoaW5saW5lTWF4LCBpbmxpbmVNaW4sIHRyYWlsaW5nU3BhY2VDaGlsZCk7CiAgICAgCi0g
ICAgbV9taW5XaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluV2lkdGgpOwotICAgIG1fbWF4V2lk
dGggPSBtYXgoaW5saW5lTWF4LCBtX21heFdpZHRoKTsKKyAgICBtX21pblByZWZXaWR0aCA9IG1h
eChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAgICBtX21heFByZWZXaWR0aCA9IG1heChp
bmxpbmVNYXgsIG1fbWF4UHJlZldpZHRoKTsKIH0KIAogLy8gVXNlIGEgdmVyeSBsYXJnZSB2YWx1
ZSAoaW4gZWZmZWN0IGluZmluaXRlKS4KICNkZWZpbmUgQkxPQ0tfTUFYX1dJRFRIIDE1MDAwCiAK
LXZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9ja01pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyQmxv
Y2s6OmNhbGNCbG9ja1ByZWZXaWR0aHMoKQogewogICAgIGJvb2wgbm93cmFwID0gc3R5bGUoKS0+
d2hpdGVTcGFjZSgpID09IE5PV1JBUDsKIApAQCAtMzY5Nyw0OSArMzY3NywzNSBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjYWxjQmxvY2tNaW5NYXhXaWR0aCgpCiAgICAgICAgIGlmIChjaGlsZC0+aXNG
bG9hdGluZygpIHx8IGNoaWxkLT5hdm9pZHNGbG9hdHMoKSkgewogICAgICAgICAgICAgaW50IGZs
b2F0VG90YWxXaWR0aCA9IGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoOwogICAgICAg
ICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5jbGVhcigpICYgQ0xFRlQpIHsKLSAgICAgICAgICAg
ICAgICBtX21heFdpZHRoID0gbWF4KGZsb2F0VG90YWxXaWR0aCwgbV9tYXhXaWR0aCk7CisgICAg
ICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoZmxvYXRUb3RhbFdpZHRoLCBtX21heFBy
ZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgZmxvYXRMZWZ0V2lkdGggPSAwOwogICAgICAgICAg
ICAgfQogICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5jbGVhcigpICYgQ1JJR0hUKSB7
Ci0gICAgICAgICAgICAgICAgbV9tYXhXaWR0aCA9IG1heChmbG9hdFRvdGFsV2lkdGgsIG1fbWF4
V2lkdGgpOworICAgICAgICAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGZsb2F0VG90YWxX
aWR0aCwgbV9tYXhQcmVmV2lkdGgpOwogICAgICAgICAgICAgICAgIGZsb2F0UmlnaHRXaWR0aCA9
IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAgICBMZW5ndGggbWwgPSBjaGls
ZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOwotICAgICAgICBMZW5ndGggbXIgPSBjaGlsZC0+c3R5
bGUoKS0+bWFyZ2luUmlnaHQoKTsKLQotICAgICAgICAvLyBDYWxsIGNhbGNXaWR0aCBvbiB0aGUg
Y2hpbGQgdG8gZW5zdXJlIHRoYXQgb3VyIG1hcmdpbnMgYXJlCi0gICAgICAgIC8vIHVwIHRvIGRh
dGUuICBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGJlZm9yZSB0aGUgY2hpbGQgaGFzIGFjdHVh
bGx5Ci0gICAgICAgIC8vIGNhbGN1bGF0ZWQgaXRzIG1hcmdpbnMgKHdoaWNoIGFyZSBjb21wdXRl
ZCBpbnNpZGUgY2FsY1dpZHRoKS4KLSAgICAgICAgaWYgKG1sLmlzUGVyY2VudCgpIHx8IG1yLmlz
UGVyY2VudCgpKQotICAgICAgICAgICAgY2FsY1dpZHRoKCk7Ci0KICAgICAgICAgLy8gQSBtYXJn
aW4gYmFzaWNhbGx5IGhhcyB0aHJlZSB0eXBlczogZml4ZWQsIHBlcmNlbnRhZ2UsIGFuZCBhdXRv
ICh2YXJpYWJsZSkuCi0gICAgICAgIC8vIEF1dG8gbWFyZ2lucyBzaW1wbHkgYmVjb21lIDAgd2hl
biBjb21wdXRpbmcgbWluL21heCB3aWR0aC4KKyAgICAgICAgLy8gQXV0byBhbmQgcGVyY2VudGFn
ZSBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4vbWF4IHdpZHRoLgog
ICAgICAgICAvLyBGaXhlZCBtYXJnaW5zIGNhbiBiZSBhZGRlZCBpbiBhcyBpcy4KLSAgICAgICAg
Ly8gUGVyY2VudGFnZSBtYXJnaW5zIGFyZSBjb21wdXRlZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhl
IHdpZHRoIHdlIGNhbGN1bGF0ZWQgaW4KLSAgICAgICAgLy8gdGhlIGNhbGNXaWR0aCBjYWxsIGFi
b3ZlLiAgSW4gdGhpcyBjYXNlIHdlIHVzZSB0aGUgYWN0dWFsIGNhY2hlZCBtYXJnaW4gdmFsdWVz
IG9uCi0gICAgICAgIC8vIHRoZSBSZW5kZXJPYmplY3QgaXRzZWxmLgorICAgICAgICBMZW5ndGgg
bWwgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOworICAgICAgICBMZW5ndGggbXIgPSBj
aGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgaW50IG1hcmdpbiA9IDAsIG1h
cmdpbkxlZnQgPSAwLCBtYXJnaW5SaWdodCA9IDA7CiAgICAgICAgIGlmIChtbC5pc0ZpeGVkKCkp
CiAgICAgICAgICAgICBtYXJnaW5MZWZ0ICs9IG1sLnZhbHVlKCk7Ci0gICAgICAgIGVsc2UgaWYg
KG1sLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgbWFyZ2luTGVmdCArPSBjaGlsZC0+bWFyZ2lu
TGVmdCgpOwogICAgICAgICBpZiAobXIuaXNGaXhlZCgpKQogICAgICAgICAgICAgbWFyZ2luUmln
aHQgKz0gbXIudmFsdWUoKTsKLSAgICAgICAgZWxzZSBpZiAobXIuaXNQZXJjZW50KCkpCi0gICAg
ICAgICAgICBtYXJnaW5SaWdodCArPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgbWFy
Z2luID0gbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0OwogCi0gICAgICAgIGludCB3ID0gY2hpbGQt
Pm1pbldpZHRoKCkgKyBtYXJnaW47Ci0gICAgICAgIGlmIChtX21pbldpZHRoIDwgdykgbV9taW5X
aWR0aCA9IHc7CisgICAgICAgIGludCB3ID0gY2hpbGQtPm1pblByZWZXaWR0aCgpICsgbWFyZ2lu
OworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heCh3LCBtX21pblByZWZXaWR0aCk7CiAgICAg
ICAgIAogICAgICAgICAvLyBJRSBpZ25vcmVzIHRhYmxlcyBmb3IgY2FsY3VsYXRpb24gb2Ygbm93
cmFwLiBNYWtlcyBzb21lIHNlbnNlLgotICAgICAgICBpZiAobm93cmFwICYmICFjaGlsZC0+aXNU
YWJsZSgpICYmIG1fbWF4V2lkdGggPCB3KQotICAgICAgICAgICAgbV9tYXhXaWR0aCA9IHc7Cisg
ICAgICAgIGlmIChub3dyYXAgJiYgIWNoaWxkLT5pc1RhYmxlKCkpCisgICAgICAgICAgICBtX21h
eFByZWZXaWR0aCA9IG1heCh3LCBtX21heFByZWZXaWR0aCk7CiAKLSAgICAgICAgdyA9IGNoaWxk
LT5tYXhXaWR0aCgpICsgbWFyZ2luOworICAgICAgICB3ID0gY2hpbGQtPm1heFByZWZXaWR0aCgp
ICsgbWFyZ2luOwogCiAgICAgICAgIGlmICghY2hpbGQtPmlzRmxvYXRpbmcoKSkgewogICAgICAg
ICAgICAgaWYgKGNoaWxkLT5hdm9pZHNGbG9hdHMoKSkgewpAQCAtMzc0OCwxMSArMzcxNCwxMSBA
QCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tNaW5NYXhXaWR0aCgpCiAgICAgICAgICAgICAg
ICAgLy8gaXMgc21hbGxlciB0aGFuIHRoZSBmbG9hdCB3aWR0aC4KICAgICAgICAgICAgICAgICBp
bnQgbWF4TGVmdCA9IG1hcmdpbkxlZnQgPiAwID8gbWF4KGZsb2F0TGVmdFdpZHRoLCBtYXJnaW5M
ZWZ0KSA6IGZsb2F0TGVmdFdpZHRoICsgbWFyZ2luTGVmdDsKICAgICAgICAgICAgICAgICBpbnQg
bWF4UmlnaHQgPSBtYXJnaW5SaWdodCA+IDAgPyBtYXgoZmxvYXRSaWdodFdpZHRoLCBtYXJnaW5S
aWdodCkgOiBmbG9hdFJpZ2h0V2lkdGggKyBtYXJnaW5SaWdodDsKLSAgICAgICAgICAgICAgICB3
ID0gY2hpbGQtPm1heFdpZHRoKCkgKyBtYXhMZWZ0ICsgbWF4UmlnaHQ7CisgICAgICAgICAgICAg
ICAgdyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSArIG1heExlZnQgKyBtYXhSaWdodDsKICAgICAg
ICAgICAgICAgICB3ID0gbWF4KHcsIGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX21heFdp
ZHRoID0gbWF4KGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoLCBtX21heFdpZHRoKTsK
KyAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChmbG9hdExlZnRXaWR0aCArIGZs
b2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOwogICAgICAgICAgICAgZmxvYXRMZWZ0V2lk
dGggPSBmbG9hdFJpZ2h0V2lkdGggPSAwOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMzc2Miw4
ICszNzI4LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0Jsb2NrTWluTWF4V2lkdGgoKQogICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZsb2F0UmlnaHRXaWR0aCArPSB3OwogICAg
ICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fbWF4V2lkdGggPCB3KQotICAgICAgICAgICAgbV9t
YXhXaWR0aCA9IHc7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbWF4UHJlZldpZHRoID0g
bWF4KHcsIG1fbWF4UHJlZldpZHRoKTsKIAogICAgICAgICAvLyBBIHZlcnkgc3BlY2lmaWMgV2lu
SUUgcXVpcmsuCiAgICAgICAgIC8vIEV4YW1wbGU6CkBAIC0zNzc5LDIyICszNzQ1LDIyIEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9ja01pbk1heFdpZHRoKCkKICAgICAgICAgLy8gV2UgY2Fu
IGFjaGlldmUgdGhpcyBlZmZlY3QgYnkgbWFraW5nIHRoZSBtYXh3aWR0aCBvZiBibG9ja3MgdGhh
dCBjb250YWluIHRhYmxlcwogICAgICAgICAvLyB3aXRoIHBlcmNlbnRhZ2Ugd2lkdGhzIGJlIGlu
ZmluaXRlIChhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBpbnNpZGUgYSB0YWJsZSBjZWxsKS4KICAg
ICAgICAgaWYgKHN0eWxlKCktPmh0bWxIYWNrcygpICYmIGNoaWxkLT5zdHlsZSgpLT53aWR0aCgp
LmlzUGVyY2VudCgpICYmCi0gICAgICAgICAgICAhaXNUYWJsZUNlbGwoKSAmJiBjaGlsZC0+aXNU
YWJsZSgpICYmIG1fbWF4V2lkdGggPCBCTE9DS19NQVhfV0lEVEgpIHsKKyAgICAgICAgICAgICFp
c1RhYmxlQ2VsbCgpICYmIGNoaWxkLT5pc1RhYmxlKCkgJiYgbV9tYXhQcmVmV2lkdGggPCBCTE9D
S19NQVhfV0lEVEgpIHsKICAgICAgICAgICAgIFJlbmRlckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdC
bG9jaygpOwogICAgICAgICAgICAgd2hpbGUgKCFjYi0+aXNSZW5kZXJWaWV3KCkgJiYgIWNiLT5p
c1RhYmxlQ2VsbCgpKQogICAgICAgICAgICAgICAgIGNiID0gY2ItPmNvbnRhaW5pbmdCbG9jaygp
OwogICAgICAgICAgICAgaWYgKCFjYi0+aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgICAgICAgICBt
X21heFdpZHRoID0gQkxPQ0tfTUFYX1dJRFRIOworICAgICAgICAgICAgICAgIG1fbWF4UHJlZldp
ZHRoID0gQkxPQ0tfTUFYX1dJRFRIOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0KIAogICAgIC8vIEFsd2F5cyBtYWtlIHN1
cmUgdGhlc2UgdmFsdWVzIGFyZSBub24tbmVnYXRpdmUuCi0gICAgbV9taW5XaWR0aCA9IG1heCgw
LCBtX21pbldpZHRoKTsKLSAgICBtX21heFdpZHRoID0gbWF4KDAsIG1fbWF4V2lkdGgpOworICAg
IG1fbWluUHJlZldpZHRoID0gbWF4KDAsIG1fbWluUHJlZldpZHRoKTsKKyAgICBtX21heFByZWZX
aWR0aCA9IG1heCgwLCBtX21heFByZWZXaWR0aCk7CiAKLSAgICBtX21heFdpZHRoID0gbWF4KGZs
b2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoLCBtX21heFdpZHRoKTsKKyAgICBtX21heFBy
ZWZXaWR0aCA9IG1heChmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVm
V2lkdGgpOwogfQogCiBib29sIFJlbmRlckJsb2NrOjpoYXNMaW5lSWZFbXB0eSgpIGNvbnN0Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyQmxvY2suaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtMjAzLDkgKzIwMyw5IEBAIHB1YmxpYzoKICAgICAvLyBCbG9jayBm
bG93cyBzdWJjbGFzcyBhdmFpbGFibGVXaWR0aCB0byBoYW5kbGUgbXVsdGkgY29sdW1uIGxheW91
dCAoc2hyaW5raW5nIHRoZSB3aWR0aCBhdmFpbGFibGUgdG8gY2hpbGRyZW4gd2hlbiBsYXlpbmcg
b3V0LikKICAgICB2aXJ0dWFsIGludCBhdmFpbGFibGVXaWR0aCgpIGNvbnN0OwogICAgIAotICAg
IHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKLSAgICB2b2lkIGNhbGNJbmxpbmVNaW5N
YXhXaWR0aCgpOwotICAgIHZvaWQgY2FsY0Jsb2NrTWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFs
IHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2b2lkIGNhbGNJbmxpbmVQcmVmV2lkdGhzKCk7
CisgICAgdm9pZCBjYWxjQmxvY2tQcmVmV2lkdGhzKCk7CiAKICAgICB2aXJ0dWFsIGludCBnZXRC
YXNlbGluZU9mRmlyc3RMaW5lQm94KCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgZ2V0QmFzZWxp
bmVPZkxhc3RMaW5lQm94KCkgY29uc3Q7CkBAIC0yMTYsNyArMjE2LDcgQEAgcHVibGljOgogICAg
IC8vIE9idGFpbnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJsb2NrIChpbmNsdWRpbmcgdGhpcyBi
bG9jaykgdGhhdCBjb250cmlidXRlcyBhIGZpcnN0LWxpbmUgc3R5bGUgdG8gb3VyIGlubGluZQog
ICAgIC8vIGNoaWxkcmVuLgogICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2Nr
KCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CisgICAgdm9p
ZCB1cGRhdGVGaXJzdExldHRlcigpOwogCiAgICAgYm9vbCBpblJvb3RCbG9ja0NvbnRleHQoKSBj
b25zdDsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRl
ckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgUmVuZGVyQm94OjpSZW5k
ZXJCb3goTm9kZSogbm9kZSkKICAgICAsIG1fbWFyZ2luUmlnaHQoMCkKICAgICAsIG1fbWFyZ2lu
VG9wKDApCiAgICAgLCBtX21hcmdpbkJvdHRvbSgwKQotICAgICwgbV9taW5XaWR0aCgtMSkKLSAg
ICAsIG1fbWF4V2lkdGgoLTEpCisgICAgLCBtX21pblByZWZXaWR0aCgtMSkKKyAgICAsIG1fbWF4
UHJlZldpZHRoKC0xKQogICAgICwgbV9sYXllcigwKQogICAgICwgbV9pbmxpbmVCb3hXcmFwcGVy
KDApCiB7CkBAIC0xNjYsNiArMTY2LDIyIEBAIHZvaWQgUmVuZGVyQm94OjpkZXN0cm95KCkKICAg
ICAgICAgbGF5ZXItPmRlc3Ryb3koYXJlbmEpOwogfQogCitpbnQgUmVuZGVyQm94OjptaW5QcmVm
V2lkdGgoKSBjb25zdAoreworICAgIGlmIChwcmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgY29u
c3RfY2FzdDxSZW5kZXJCb3gqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICAgICAgCisg
ICAgcmV0dXJuIG1fbWluUHJlZldpZHRoOworfQorCitpbnQgUmVuZGVyQm94OjptYXhQcmVmV2lk
dGgoKSBjb25zdAoreworICAgIGlmIChwcmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgY29uc3Rf
Y2FzdDxSZW5kZXJCb3gqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICAgICAgCisgICAg
cmV0dXJuIG1fbWF4UHJlZldpZHRoOworfQorCiBpbnQgUmVuZGVyQm94OjpvdmVycmlkZVNpemUo
KSBjb25zdAogewogICAgIGlmICghaGFzT3ZlcnJpZGVTaXplKCkpCkBAIC0xMDY0LDcgKzEwODAs
NyBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY1dpZHRoKCkKICAgICAgICAgbV9tYXJnaW5MZWZ0ID0g
bWFyZ2luTGVmdC5jYWxjTWluVmFsdWUoY29udGFpbmVyV2lkdGgpOwogICAgICAgICBtX21hcmdp
blJpZ2h0ID0gbWFyZ2luUmlnaHQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAgICAg
ICAgaWYgKHRyZWF0QXNSZXBsYWNlZCkKLSAgICAgICAgICAgIG1fd2lkdGggPSBtYXgod2lkdGgu
dmFsdWUoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsg
cGFkZGluZ1JpZ2h0KCksIG1fbWluV2lkdGgpOworICAgICAgICAgICAgbV93aWR0aCA9IG1heCh3
aWR0aC52YWx1ZSgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0
KCkgKyBwYWRkaW5nUmlnaHQoKSwgbWluUHJlZldpZHRoKCkpOwogCiAgICAgICAgIHJldHVybjsK
ICAgICB9CkBAIC0xMDkzLDggKzExMDksOCBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY1dpZHRoKCkK
ICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX3dpZHRoIDwgbV9taW5XaWR0aCAmJiBzdHJl
dGNoZXNUb01pbkludHJpbnNpY1dpZHRoKCkpIHsKLSAgICAgICAgbV93aWR0aCA9IG1fbWluV2lk
dGg7CisgICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSkgeworICAgICAgICBt
X3dpZHRoID0gbWF4KG1fd2lkdGgsIG1pblByZWZXaWR0aCgpKTsKICAgICAgICAgd2lkdGggPSBM
ZW5ndGgobV93aWR0aCwgRml4ZWQpOwogICAgIH0KIApAQCAtMTEzNSw4ICsxMTUxLDggQEAgaW50
IFJlbmRlckJveDo6Y2FsY1dpZHRoVXNpbmcoV2lkdGhUeXBlIAogICAgICAgICAgICAgd2lkdGgg
PSBjdyAtIG1hcmdpbkxlZnQgLSBtYXJnaW5SaWdodDsKIAogICAgICAgICBpZiAoc2l6ZXNUb0lu
dHJpbnNpY1dpZHRoKHdpZHRoVHlwZSkpIHsKLSAgICAgICAgICAgIHdpZHRoID0gbWF4KHdpZHRo
LCBtX21pbldpZHRoKTsKLSAgICAgICAgICAgIHdpZHRoID0gbWluKHdpZHRoLCBtX21heFdpZHRo
KTsKKyAgICAgICAgICAgIHdpZHRoID0gbWF4KHdpZHRoLCBtaW5QcmVmV2lkdGgoKSk7CisgICAg
ICAgICAgICB3aWR0aCA9IG1pbih3aWR0aCwgbWF4UHJlZldpZHRoKCkpOwogICAgICAgICB9CiAg
ICAgfSBlbHNlCiAgICAgICAgIHdpZHRoID0gY2FsY0JvcmRlckJveFdpZHRoKHcuY2FsY1ZhbHVl
KGN3KSk7CkBAIC0xNjcxLDggKzE2ODcsOCBAQCB2b2lkIFJlbmRlckJveDo6Y2FsY0Fic29sdXRl
SG9yaXpvbnRhbCgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV93aWR0aCA8IG1fbWlu
V2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmcgJiYgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0
aCgpKQotICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExlbmd0aChtX21pbldp
ZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nLCBGaXhlZCksIGNvbnRhaW5lckJsb2NrLCBjb250YWlu
ZXJEaXJlY3Rpb24sCisgICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSAmJiBt
X3dpZHRoIDwgbWluUHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmcpCisgICAgICAgIGNh
bGNBYnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoTGVuZ3RoKG1pblByZWZXaWR0aCgpIC0gYm9yZGVy
c1BsdXNQYWRkaW5nLCBGaXhlZCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24s
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyV2lkdGgsIGJv
cmRlcnNQbHVzUGFkZGluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBs
ZWZ0LCByaWdodCwgbWFyZ2luTGVmdCwgbWFyZ2luUmlnaHQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbV93aWR0aCwgbV9tYXJnaW5MZWZ0LCBtX21hcmdpblJpZ2h0LCBt
X3gpOwpAQCAtMTgwNSw4ICsxODIxLDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhv
cml6b250YWxWYQogICAgICAgICAgICAgaW50IHJpZ2h0VmFsdWUgPSByaWdodC5jYWxjVmFsdWUo
Y29udGFpbmVyV2lkdGgpOwogCiAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgaXQgYmUgYmV0
dGVyIHRvIGhhdmUgc2hyaW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8KLSAgICAgICAgICAgIGludCBw
cmVmZXJyZWRXaWR0aCA9IG1fbWF4V2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmc7Ci0gICAgICAg
ICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtX21pbldpZHRoIC0gYm9yZGVyc1BsdXNQYWRk
aW5nOworICAgICAgICAgICAgaW50IHByZWZlcnJlZFdpZHRoID0gbWF4UHJlZldpZHRoKCkgLSBi
b3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBt
aW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKICAgICAgICAgICAgIGludCBhdmFp
bGFibGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gcmlnaHRWYWx1ZTsKICAgICAgICAgICAgIHdp
ZHRoVmFsdWUgPSBtaW4obWF4KHByZWZlcnJlZE1pbldpZHRoLCBhdmFpbGFibGVXaWR0aCksIHBy
ZWZlcnJlZFdpZHRoKTsKICAgICAgICAgICAgIGxlZnRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0g
KHdpZHRoVmFsdWUgKyByaWdodFZhbHVlKTsKQEAgLTE4MTUsOCArMTgzMSw4IEBAIHZvaWQgUmVu
ZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmEKICAgICAgICAgICAgIGxlZnRWYWx1ZSA9
IGxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKIAogICAgICAgICAgICAgLy8gRklYTUU6
IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZlIHNocmluay10by1maXQgaW4gb25lIHN0ZXA/Ci0g
ICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtX21heFdpZHRoIC0gYm9yZGVyc1BsdXNQ
YWRkaW5nOwotICAgICAgICAgICAgaW50IHByZWZlcnJlZE1pbldpZHRoID0gbV9taW5XaWR0aCAt
IGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1h
eFByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgaW50IHByZWZl
cnJlZE1pbldpZHRoID0gbWluUHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7CiAgICAg
ICAgICAgICBpbnQgYXZhaWxhYmxlV2lkdGggPSBhdmFpbGFibGVTcGFjZSAtIGxlZnRWYWx1ZTsK
ICAgICAgICAgICAgIHdpZHRoVmFsdWUgPSBtaW4obWF4KHByZWZlcnJlZE1pbldpZHRoLCBhdmFp
bGFibGVXaWR0aCksIHByZWZlcnJlZFdpZHRoKTsKICAgICAgICAgfSBlbHNlIGlmIChsZWZ0SXNB
dXRvICYmICF3aWR0aC5pc0F1dG8oKSAmJiAhcmlnaHRJc0F1dG8pIHsKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlz
aW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Miw4ICs0Miw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCk7CiAKLSAg
ICB2aXJ0dWFsIGludCBtaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluV2lkdGg7IH0KLSAg
ICB2aXJ0dWFsIGludCBtYXhXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4V2lkdGg7IH0KKyAg
ICB2aXJ0dWFsIGludCBtaW5QcmVmV2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtYXhQ
cmVmV2lkdGgoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50IG92ZXJyaWRlU2l6ZSgpIGNvbnN0
OwogICAgIHZpcnR1YWwgaW50IG92ZXJyaWRlV2lkdGgoKSBjb25zdDsKQEAgLTE5NSwxMiArMTk1
LDExIEBAIHByb3RlY3RlZDoKICAgICBpbnQgbV9tYXJnaW5Ub3A7CiAgICAgaW50IG1fbWFyZ2lu
Qm90dG9tOwogCi0gICAgLy8gVGhlIG1pbmltdW0gd2lkdGggdGhlIGVsZW1lbnQgbmVlZHMgdG8g
YmUgYWJsZSB0byByZW5kZXIKLSAgICAvLyBpdHMgY29udGVudCB3aXRob3V0IGNsaXBwaW5nLgot
ICAgIGludCBtX21pbldpZHRoOwotICAgIC8vIFRoZSBtYXhpbXVtIHdpZHRoIHRoZSBlbGVtZW50
IGNhbiBmaWxsIGhvcml6b250YWxseQotICAgIC8vICh0aGUgd2lkdGggb2YgdGhlIGVsZW1lbnQg
d2l0aCBsaW5lIGJyZWFraW5nIGRpc2FibGVkKS4KLSAgICBpbnQgbV9tYXhXaWR0aDsKKyAgICAv
LyBUaGUgcHJlZmVycmVkIHdpZHRoIG9mIHRoZSBlbGVtZW50IGlmIGl0IHdlcmUgdG8gYnJlYWsg
aXRzIGxpbmVzIGF0IGV2ZXJ5IHBvc3NpYmxlIG9wcG9ydHVuaXR5LgorICAgIGludCBtX21pblBy
ZWZXaWR0aDsKKyAgICAKKyAgICAvLyBUaGUgcHJlZmVycmVkIHdpZHRoIG9mIHRoZSBlbGVtZW50
IGlmIGl0IG5ldmVyIGJyZWFrcyBhbnkgbGluZXMgYXQgYWxsLgorICAgIGludCBtX21heFByZWZX
aWR0aDsKIAogICAgIC8vIEEgcG9pbnRlciB0byBvdXIgbGF5ZXIgaWYgd2UgaGF2ZSBvbmUuICBD
dXJyZW50bHkgb25seSBwb3NpdGlvbmVkIGVsZW1lbnRzCiAgICAgLy8gYW5kIGZsb2F0ZXJzIGhh
dmUgbGF5ZXJzLgpJbmRleDogcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysg
cmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2NCw3ICsx
NjQsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckNvbnRhaW5lcjo6cmVtb3ZlQ2hpCiAgICAgLy8g
dGhhdCBhIHBvc2l0aW9uZWQgY2hpbGQgZ290IHlhbmtlZCkuICBXZSBhbHNvIHJlcGFpbnQsIHNv
IHRoYXQgdGhlIGFyZWEgZXhwb3NlZCB3aGVuIHRoZSBjaGlsZAogICAgIC8vIGRpc2FwcGVhcnMg
Z2V0cyByZXBhaW50ZWQgcHJvcGVybHkuCiAgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVk
KCkpIHsKLSAgICAgICAgb2xkQ2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7
CisgICAgICAgIG9sZENoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
ICAgICAgICAgb2xkQ2hpbGQtPnJlcGFpbnQoKTsKICAgICB9CiAgICAgICAgIApAQCAtNDA2LDcg
KzQwNiw3IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphcHBlbmRDaGlsZE5vZGUoUmUKICAgICAg
ICAgbGF5ZXItPnNldEhhc1Zpc2libGVDb250ZW50KHRydWUpOwogICAgIH0KICAgICAKLSAgICBu
ZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsgLy8gR29lcyB1cCB0aGUg
Y29udGFpbmluZyBibG9jayBoaWVyYXJjaHkuCisgICAgbmV3Q2hpbGQtPnNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOyAvLyBHb2VzIHVwIHRoZSBjb250YWluaW5nIGJsb2NrIGhp
ZXJhcmNoeS4KICAgICBpZiAoIW5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKICAgICAgICAgc2V0
Q2hpbGROZWVkc0xheW91dCh0cnVlKTsgLy8gV2UgbWF5IHN1cHBseSB0aGUgc3RhdGljIHBvc2l0
aW9uIGZvciBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGNoaWxkLgogICAgIApAQCAtNDU3LDcgKzQ1
Nyw3IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5vZGUoUmUKICAgICAgICAg
bGF5ZXItPnNldEhhc1Zpc2libGVDb250ZW50KHRydWUpOwogICAgIH0KIAotICAgIGNoaWxkLT5z
ZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIGNoaWxkLT5zZXROZWVkc0xheW91
dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBpZiAoIW5vcm1hbENoaWxkTmVlZHNMYXlvdXQo
KSkKICAgICAgICAgc2V0Q2hpbGROZWVkc0xheW91dCh0cnVlKTsgLy8gV2UgbWF5IHN1cHBseSB0
aGUgc3RhdGljIHBvc2l0aW9uIGZvciBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGNoaWxkLgogICAg
IApAQCAtNDcxLDcgKzQ3MSw2IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5v
ZGUoUmUKIHZvaWQgUmVuZGVyQ29udGFpbmVyOjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVk
c0xheW91dCgpKTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gbV9maXJzdENoaWxkOwogICAgIHdoaWxlIChjaGlsZCkgewpJbmRleDogcmVu
ZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJD
b250YWluZXIuaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmUpOwogCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1YWwgdm9pZCBj
YWxjTWluTWF4V2lkdGgoKSB7IHNldE1pbk1heEtub3duKHRydWUpOyB9CisgICAgdmlydHVhbCB2
b2lkIGNhbGNQcmVmV2lkdGhzKCkgeyBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOyB9CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCb3hlcygpOwogCkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
ckNvdW50ZXIuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJDb3VudGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDEwICsyNDQsMTcgQEAgUGFzc1JlZlB0cjxTdHJp
bmdJbXBsPiBSZW5kZXJDb3VudGVyOjpvcgogICAgIHJldHVybiB0ZXh0LmltcGwoKTsKIH0KIAot
dm9pZCBSZW5kZXJDb3VudGVyOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJDb3VudGVy
OjpkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQsIGJvb2wgZHVtbXkpCit7CisgICAgaWYg
KHByZWZXaWR0aHNEaXJ0eSgpKQorICAgICAgICBjYWxjUHJlZldpZHRocygwKTsKKyAgICBSZW5k
ZXJUZXh0OjpkaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0LCBkdW1teSk7Cit9CisKK3ZvaWQgUmVu
ZGVyQ291bnRlcjo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWQpCiB7CiAgICAgc2V0VGV4dEludGVy
bmFsKG9yaWdpbmFsVGV4dCgpKTsKLSAgICBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoKTsK
KyAgICBSZW5kZXJUZXh0OjpjYWxjUHJlZldpZHRocyhsZWFkKTsKIH0KIAogc3RhdGljIHZvaWQg
ZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4oQXRvbWljU3RyaW5nSW1wbCogaWRlbnRpZmllciwg
Q291bnRlck5vZGUqIG5vZGUpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmgJKHJldmlzaW9uIDIwOTk3KQorKysg
cmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBib29sIGlzUmVuZGVyQ291bnRlcigpIGNvbnN0OwogICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFRleHQoKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZv
aWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgCisgICAgdm9pZCBkaXJ0eUxpbmVCb3hlcyhib29s
LCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCk7
CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVzKFJlbmRlck9iamVjdCopOwog
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1Jl
bmRlckZpZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTEgKzQxLDExIEBAIFJlbmRl
ckZpZWxkc2V0OjpSZW5kZXJGaWVsZHNldChIVE1MR2VuZXIKIHsKIH0KIAotdm9pZCBSZW5kZXJG
aWVsZHNldDo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyRmllbGRzZXQ6OmNhbGNQcmVm
V2lkdGhzKCkKIHsKLSAgICBSZW5kZXJCbG9jazo6Y2FsY01pbk1heFdpZHRoKCk7CisgICAgUmVu
ZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCk7CiAgICAgaWYgKFJlbmRlck9iamVjdCogbGVnZW5k
ID0gZmluZExlZ2VuZCgpKSB7Ci0gICAgICAgIGludCBsZWdlbmRNaW5XaWR0aCA9IGxlZ2VuZC0+
bWluV2lkdGgoKTsKKyAgICAgICAgaW50IGxlZ2VuZE1pbldpZHRoID0gbGVnZW5kLT5taW5QcmVm
V2lkdGgoKTsKIAogICAgICAgICBMZW5ndGggbGVnZW5kTWFyZ2luTGVmdCA9IGxlZ2VuZC0+c3R5
bGUoKS0+bWFyZ2luTGVmdCgpOwogICAgICAgICBMZW5ndGggbGVnZW5kTWFyZ2luUmlnaHQgPSBs
ZWdlbmQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKTsKQEAgLTU2LDcgKzU2LDcgQEAgdm9pZCBSZW5k
ZXJGaWVsZHNldDo6Y2FsY01pbk1heFdpZHRoKCkKICAgICAgICAgaWYgKGxlZ2VuZE1hcmdpblJp
Z2h0LmlzRml4ZWQoKSkKICAgICAgICAgICAgIGxlZ2VuZE1pbldpZHRoICs9IGxlZ2VuZE1hcmdp
blJpZ2h0LnZhbHVlKCk7CiAKLSAgICAgICAgbV9taW5XaWR0aCA9IG1heChtX21pbldpZHRoLCBs
ZWdlbmRNaW5XaWR0aCArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSArIGJvcmRlckxl
ZnQoKSArIGJvcmRlclJpZ2h0KCkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21p
blByZWZXaWR0aCwgbGVnZW5kTWluV2lkdGggKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0
KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpKTsKICAgICB9CiB9CiAKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJG
aWVsZHNldC5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5N
YXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAgIHZpcnR1
YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAgICAgdmlydHVh
bCBib29sIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJu
IHN0eWxlKCktPmhlaWdodCgpLmlzQXV0bygpOyB9CiAgICAgdmlydHVhbCBib29sIHN0cmV0Y2hl
c1RvTWluSW50cmluc2ljV2lkdGgoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE4LDM5
ICsyMTgsNDEgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogICAg
ICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwogfQogCi12b2lkIFJlbmRlckZpbGVV
cGxvYWRDb250cm9sOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIG1fbWluV2lkdGggPSAwOwotICAgIG1fbWF4
V2lkdGggPSAwOworICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CisKKyAgICBtX21pblBy
ZWZXaWR0aCA9IDA7CisgICAgbV9tYXhQcmVmV2lkdGggPSAwOwogCiAgICAgaWYgKHN0eWxlKCkt
PndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAg
ICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgp
LT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldp
ZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAg
IGVsc2UgewogICAgICAgICAvLyBGaWd1cmUgb3V0IGhvdyBiaWcgdGhlIGZpbGVuYW1lIHNwYWNl
IG5lZWRzIHRvIGJlIGZvciBhIGdpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJzCiAgICAgICAgIC8v
ICh1c2luZyAiMCIgYXMgdGhlIG5vbWluYWwgY2hhcmFjdGVyKS4KICAgICAgICAgY29uc3QgVUNo
YXIgY2ggPSAnMCc7CiAgICAgICAgIGZsb2F0IGNoYXJXaWR0aCA9IHN0eWxlKCktPmZvbnQoKS5m
bG9hdFdpZHRoKFRleHRSdW4oJmNoLCAxKSwgVGV4dFN0eWxlKDAsIDAsIDAsIGZhbHNlLCBmYWxz
ZSwgZmFsc2UpKTsKLSAgICAgICAgbV9tYXhXaWR0aCA9IChpbnQpY2VpbGYoY2hhcldpZHRoICog
ZGVmYXVsdFdpZHRoTnVtQ2hhcnMpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IChpbnQpY2Vp
bGYoY2hhcldpZHRoICogZGVmYXVsdFdpZHRoTnVtQ2hhcnMpOwogICAgIH0KIAogICAgIGlmIChz
dHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVl
KCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtYXgobV9tYXhXaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5X
aWR0aCA9IG1heChtX21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldp
ZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZX
aWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsK
KyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50
Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChz
dHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygp
ICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkKLSAgICAgICAgbV9taW5XaWR0aCA9
IDA7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1fbWlu
V2lkdGggPSBtX21heFdpZHRoOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldp
ZHRoOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhX
aWR0aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWluV2lkdGgsIGNh
bGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAg
IG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9
IG1pbihtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0
aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBwYWRkaW5nTGVmdCgpICsg
cGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpOwotICAgIG1fbWlu
V2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0b0FkZDsKKyAgICBtX21pblByZWZX
aWR0aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCArPSB0b0FkZDsKIAotICAgIHNldE1p
bk1heEtub3duKCk7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAogSFRNTEZp
bGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1lbnQ6OkhUTUxGaWxlVXBsb2FkSW5uZXJCdXR0b25FbGVt
ZW50KERvY3VtZW50KiBkb2MsIE5vZGUqIHNoYWRvd1BhcmVudCkKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJG
aWxlVXBsb2FkQ29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4
V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAgICB2aXJ0dWFs
IHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogCiAgICAgdm9p
ZCBjbGljaygpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAyMDk5NykK
KysrIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OSw1MSArMTA5LDM2IEBAIFJlbmRlckZsZXhpYmxlQm94Ojp+UmVuZGVyRmxleGlibGVCb3goKQog
ewogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjSG9yaXpvbnRhbE1pbk1heFdpZHRo
KCkKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpCiB7
CiAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKICAgICB3aGlsZSAoY2hp
bGQpIHsKICAgICAgICAgLy8gcG9zaXRpb25lZCBjaGlsZHJlbiBkb24ndCBhZmZlY3QgdGhlIG1p
bm1heHdpZHRoCi0gICAgICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0
eWxlKCktPnZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkKLSAgICAgICAgeworICAgICAgICBpZiAo
Y2hpbGQtPmlzUG9zaXRpb25lZCgpIHx8IGNoaWxkLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0g
Q09MTEFQU0UpIHsKICAgICAgICAgICAgIGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCk7CiAg
ICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIGludCBtYXJnaW49MDsK
LSAgICAgICAgLy8gIGF1dG8gbWFyZ2lucyBkb24ndCBhZmZlY3QgbWlud2lkdGgKLQorICAgICAg
ICAvLyBBIG1hcmdpbiBiYXNpY2FsbHkgaGFzIHRocmVlIHR5cGVzOiBmaXhlZCwgcGVyY2VudGFn
ZSwgYW5kIGF1dG8gKHZhcmlhYmxlKS4KKyAgICAgICAgLy8gQXV0byBhbmQgcGVyY2VudGFnZSBt
YXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4vbWF4IHdpZHRoLgorICAg
ICAgICAvLyBGaXhlZCBtYXJnaW5zIGNhbiBiZSBhZGRlZCBpbiBhcyBpcy4KICAgICAgICAgTGVu
Z3RoIG1sID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKTsKICAgICAgICAgTGVuZ3RoIG1y
ID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCk7CisgICAgICAgIGludCBtYXJnaW4gPSAw
LCBtYXJnaW5MZWZ0ID0gMCwgbWFyZ2luUmlnaHQgPSAwOworICAgICAgICBpZiAobWwuaXNGaXhl
ZCgpKQorICAgICAgICAgICAgbWFyZ2luTGVmdCArPSBtbC52YWx1ZSgpOworICAgICAgICBpZiAo
bXIuaXNGaXhlZCgpKQorICAgICAgICAgICAgbWFyZ2luUmlnaHQgKz0gbXIudmFsdWUoKTsKKyAg
ICAgICAgbWFyZ2luID0gbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0OwogCi0gICAgICAgIC8vIENh
bGwgY2FsY1dpZHRoIG9uIHRoZSBjaGlsZCB0byBlbnN1cmUgdGhhdCBvdXIgbWFyZ2lucyBhcmUK
LSAgICAgICAgLy8gdXAgdG8gZGF0ZS4gIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3Jl
IHRoZSBjaGlsZCBoYXMgYWN0dWFsbHkKLSAgICAgICAgLy8gY2FsY3VsYXRlZCBpdHMgbWFyZ2lu
cyAod2hpY2ggYXJlIGNvbXB1dGVkIGluc2lkZSBjYWxjV2lkdGgpLgotICAgICAgICBjaGlsZC0+
Y2FsY1dpZHRoKCk7Ci0KLSAgICAgICAgaWYgKCFtbC5pc0F1dG8oKSAmJiAhbXIuaXNBdXRvKCkp
IHsKLSAgICAgICAgICAgIGlmICghY2hpbGQtPnN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkpIHsK
LSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPmRpcmVjdGlvbigpPT1MVFIpCi0g
ICAgICAgICAgICAgICAgICAgIG1hcmdpbiA9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtYXJnaW4gPSBjaGlsZC0+bWFyZ2lu
UmlnaHQoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1hcmdpbiA9IGNo
aWxkLT5tYXJnaW5MZWZ0KCkrY2hpbGQtPm1hcmdpblJpZ2h0KCk7Ci0gICAgICAgIH0gZWxzZSBp
ZiAoIW1sLmlzQXV0bygpKQotICAgICAgICAgICAgbWFyZ2luID0gY2hpbGQtPm1hcmdpbkxlZnQo
KTsKLSAgICAgICAgZWxzZSBpZiAoIW1yLmlzQXV0bygpKQotICAgICAgICAgICAgbWFyZ2luID0g
Y2hpbGQtPm1hcmdpblJpZ2h0KCk7Ci0KLSAgICAgICAgaWYgKG1hcmdpbiA8IDApIG1hcmdpbiA9
IDA7Ci0KLSAgICAgICAgbV9taW5XaWR0aCArPSBjaGlsZC0+bWluV2lkdGgoKSArIG1hcmdpbjsK
LSAgICAgICAgbV9tYXhXaWR0aCArPSBjaGlsZC0+bWF4V2lkdGgoKSArIG1hcmdpbjsKKyAgICAg
ICAgbV9taW5QcmVmV2lkdGggKz0gY2hpbGQtPm1pblByZWZXaWR0aCgpICsgbWFyZ2luOworICAg
ICAgICBtX21heFByZWZXaWR0aCArPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXJnaW47CiAK
ICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICB9ICAgIAogfQogCi12
b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxNaW5NYXhXaWR0aCgpCit2b2lkIFJl
bmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxQcmVmV2lkdGhzKCkKIHsKICAgICBSZW5kZXJP
YmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlKGNoaWxkICE9IDApCkBAIC0x
NjQsODMgKzE0OSw2NSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxNaW5N
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0gICAgICAgIExlbmd0aCBtbCA9
IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgIExlbmd0aCBtciA9IGNoaWxk
LT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpOwotCi0gICAgICAgIC8vIENhbGwgY2FsY1dpZHRoIG9u
IHRoZSBjaGlsZCB0byBlbnN1cmUgdGhhdCBvdXIgbWFyZ2lucyBhcmUKLSAgICAgICAgLy8gdXAg
dG8gZGF0ZS4gIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjaGlsZCBoYXMg
YWN0dWFsbHkKLSAgICAgICAgLy8gY2FsY3VsYXRlZCBpdHMgbWFyZ2lucyAod2hpY2ggYXJlIGNv
bXB1dGVkIGluc2lkZSBjYWxjV2lkdGgpLgotICAgICAgICBpZiAobWwuaXNQZXJjZW50KCkgfHwg
bXIuaXNQZXJjZW50KCkpCi0gICAgICAgICAgICBjYWxjV2lkdGgoKTsKLQogICAgICAgICAvLyBB
IG1hcmdpbiBiYXNpY2FsbHkgaGFzIHRocmVlIHR5cGVzOiBmaXhlZCwgcGVyY2VudGFnZSwgYW5k
IGF1dG8gKHZhcmlhYmxlKS4KLSAgICAgICAgLy8gQXV0byBtYXJnaW5zIHNpbXBseSBiZWNvbWUg
MCB3aGVuIGNvbXB1dGluZyBtaW4vbWF4IHdpZHRoLgorICAgICAgICAvLyBBdXRvL3BlcmNlbnRh
Z2UgbWFyZ2lucyBzaW1wbHkgYmVjb21lIDAgd2hlbiBjb21wdXRpbmcgbWluL21heCB3aWR0aC4K
ICAgICAgICAgLy8gRml4ZWQgbWFyZ2lucyBjYW4gYmUgYWRkZWQgaW4gYXMgaXMuCi0gICAgICAg
IC8vIFBlcmNlbnRhZ2UgbWFyZ2lucyBhcmUgY29tcHV0ZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRo
ZSB3aWR0aCB3ZSBjYWxjdWxhdGVkIGluCi0gICAgICAgIC8vIHRoZSBjYWxjV2lkdGggY2FsbCBh
Ym92ZS4gIEluIHRoaXMgY2FzZSB3ZSB1c2UgdGhlIGFjdHVhbCBjYWNoZWQgbWFyZ2luIHZhbHVl
cyBvbgotICAgICAgICAvLyB0aGUgUmVuZGVyT2JqZWN0IGl0c2VsZi4KKyAgICAgICAgTGVuZ3Ro
IG1sID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKTsKKyAgICAgICAgTGVuZ3RoIG1yID0g
Y2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCk7CiAgICAgICAgIGludCBtYXJnaW4gPSAwOwog
ICAgICAgICBpZiAobWwuaXNGaXhlZCgpKQogICAgICAgICAgICAgbWFyZ2luICs9IG1sLnZhbHVl
KCk7Ci0gICAgICAgIGVsc2UgaWYgKG1sLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgbWFyZ2lu
ICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7Ci0KICAgICAgICAgaWYgKG1yLmlzRml4ZWQoKSkKICAg
ICAgICAgICAgIG1hcmdpbiArPSBtci52YWx1ZSgpOwotICAgICAgICBlbHNlIGlmIChtci5pc0F1
dG8oKSkKLSAgICAgICAgICAgIG1hcmdpbiArPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLQotICAg
ICAgICBpZiAobWFyZ2luIDwgMCkgbWFyZ2luID0gMDsKICAgICAgICAgCi0gICAgICAgIGludCB3
ID0gY2hpbGQtPm1pbldpZHRoKCkgKyBtYXJnaW47Ci0gICAgICAgIGlmKG1fbWluV2lkdGggPCB3
KSBtX21pbldpZHRoID0gdzsKKyAgICAgICAgaW50IHcgPSBjaGlsZC0+bWluUHJlZldpZHRoKCkg
KyBtYXJnaW47CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KHcsIG1fbWluUHJlZldpZHRo
KTsKICAgICAgICAgCi0gICAgICAgIHcgPSBjaGlsZC0+bWF4V2lkdGgoKSArIG1hcmdpbjsKLQot
ICAgICAgICBpZihtX21heFdpZHRoIDwgdykgbV9tYXhXaWR0aCA9IHc7CisgICAgICAgIHcgPSBj
aGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXJnaW47CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0g
bWF4KHcsIG1fbWF4UHJlZldpZHRoKTsKIAogICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2li
bGluZygpOwogICAgIH0gICAgCiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNNaW5N
YXhXaWR0aCgpCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjUHJlZldpZHRocygpCiB7Ci0g
ICAgQVNTRVJUKCAhbWluTWF4S25vd24oKSApOworICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHko
KSk7CiAKLSAgICBtX21pbldpZHRoID0gMDsKLSAgICBtX21heFdpZHRoID0gMDsKKyAgICBtX21p
blByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gMDsKIAogICAgIGlmIChoYXNNdWx0aXBsZUxp
bmVzKCkgfHwgaXNWZXJ0aWNhbCgpKQotICAgICAgICBjYWxjVmVydGljYWxNaW5NYXhXaWR0aCgp
OworICAgICAgICBjYWxjVmVydGljYWxQcmVmV2lkdGhzKCk7CiAgICAgZWxzZQotICAgICAgICBj
YWxjSG9yaXpvbnRhbE1pbk1heFdpZHRoKCk7CisgICAgICAgIGNhbGNIb3Jpem9udGFsUHJlZldp
ZHRocygpOwogCi0gICAgaWYobV9tYXhXaWR0aCA8IG1fbWluV2lkdGgpIG1fbWF4V2lkdGggPSBt
X21pbldpZHRoOworICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBtX21h
eFByZWZXaWR0aCk7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5
bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lk
dGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7Ci0gICAK
KyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94
V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKwogICAgIGlmIChzdHlsZSgpLT5taW5X
aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7Ci0g
ICAgICAgIG1fbWF4V2lkdGggPSBtYXgobV9tYXhXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5XaWR0aCA9IG1heCht
X21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUo
KSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwgY2FsY0Nv
bnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9t
aW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5
bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogICAgIAogICAgIGlmIChzdHlsZSgp
LT5tYXhXaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0g
dW5kZWZpbmVkTGVuZ3RoKSB7Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtaW4obV9tYXhXaWR0aCwg
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAg
ICAgbV9taW5XaWR0aCA9IG1pbihtX21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxl
KCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1pbiht
X21heFByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZh
bHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtaW4obV9taW5QcmVmV2lkdGgsIGNh
bGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQog
Ci0gICAgaW50IHRvQWRkID0gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdM
ZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsKLSAgICBtX21pbldpZHRoICs9IHRvQWRkOwotICAgIG1f
bWF4V2lkdGggKz0gdG9BZGQ7CisgICAgaW50IHRvQWRkID0gMDsKKyAgICB0b0FkZCA9IGJvcmRl
ckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCk7
CisKKyAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCArPSB0
b0FkZDsKIAotICAgIHNldE1pbk1heEtub3duKCk7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZh
bHNlKTsKIH0KIAogdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eW91dENoaWxkcmVuKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQo
bWluTWF4S25vd24oKSk7CiAKICAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4gJiYgcG9zQ2hpbGRO
ZWVkc0xheW91dCgpICYmICFub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkgJiYgIXNlbGZOZWVkc0xh
eW91dCgpKSB7CiAgICAgICAgIC8vIEFsbCB3ZSBoYXZlIHRvIGlzIGxheSBvdXQgb3VyIHBvc2l0
aW9uZWQgb2JqZWN0cy4KQEAgLTExMTcsOSArMTA4NCw5IEBAIGludCBSZW5kZXJGbGV4aWJsZUJv
eDo6YWxsb3dlZENoaWxkRmxleCgKICAgICAgICAgICAgICAgICBjaGlsZC0+c3R5bGUoKS0+bWF4
V2lkdGgoKS5pc0ZpeGVkKCkpCiAgICAgICAgICAgICAgICAgbWF4VyA9IGNoaWxkLT5zdHlsZSgp
LT5tYXhXaWR0aCgpLnZhbHVlKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZC0+c3R5bGUo
KS0+bWF4V2lkdGgoKS50eXBlKCkgPT0gSW50cmluc2ljKQotICAgICAgICAgICAgICAgIG1heFcg
PSBjaGlsZC0+bWF4V2lkdGgoKTsKKyAgICAgICAgICAgICAgICBtYXhXID0gY2hpbGQtPm1heFBy
ZWZXaWR0aCgpOwogICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnN0eWxlKCktPm1heFdpZHRo
KCkudHlwZSgpID09IE1pbkludHJpbnNpYykKLSAgICAgICAgICAgICAgICBtYXhXID0gY2hpbGQt
Pm1pbldpZHRoKCk7CisgICAgICAgICAgICAgICAgbWF4VyA9IGNoaWxkLT5taW5QcmVmV2lkdGgo
KTsKICAgICAgICAgICAgIGlmIChtYXhXID09IElOVF9NQVgpCiAgICAgICAgICAgICAgICAgcmV0
dXJuIG1heFc7CiAgICAgICAgICAgICByZXR1cm4gbWF4KDAsIG1heFcgLSB3KTsKQEAgLTExMzgs
MTQgKzExMDUsMTQgQEAgaW50IFJlbmRlckZsZXhpYmxlQm94OjphbGxvd2VkQ2hpbGRGbGV4KAog
CiAgICAgLy8gRklYTUU6IEZvciBub3cganVzdCBoYW5kbGUgZml4ZWQgdmFsdWVzLgogICAgIGlm
IChpc0hvcml6b250YWwoKSkgewotICAgICAgICBpbnQgbWluVyA9IGNoaWxkLT5taW5XaWR0aCgp
OworICAgICAgICBpbnQgbWluVyA9IGNoaWxkLT5taW5QcmVmV2lkdGgoKTsKICAgICAgICAgaW50
IHcgPSBjaGlsZC0+b3ZlcnJpZGVXaWR0aCgpIC0gKGNoaWxkLT5ib3JkZXJMZWZ0KCkgKyBjaGls
ZC0+Ym9yZGVyUmlnaHQoKSArIGNoaWxkLT5wYWRkaW5nTGVmdCgpICsgY2hpbGQtPnBhZGRpbmdS
aWdodCgpKTsKICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQo
KSkKICAgICAgICAgICAgIG1pblcgPSBjaGlsZC0+c3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgp
OwogICAgICAgICBlbHNlIGlmIChjaGlsZC0+c3R5bGUoKS0+bWluV2lkdGgoKS50eXBlKCkgPT0g
SW50cmluc2ljKQotICAgICAgICAgICAgbWluVyA9IGNoaWxkLT5tYXhXaWR0aCgpOworICAgICAg
ICAgICAgbWluVyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKTsKICAgICAgICAgZWxzZSBpZiAoY2hp
bGQtPnN0eWxlKCktPm1pbldpZHRoKCkudHlwZSgpID09IE1pbkludHJpbnNpYykKLSAgICAgICAg
ICAgIG1pblcgPSBjaGlsZC0+bWluV2lkdGgoKTsKKyAgICAgICAgICAgIG1pblcgPSBjaGlsZC0+
bWluUHJlZldpZHRoKCk7CiAgICAgICAgICAgICAKICAgICAgICAgaW50IGFsbG93ZWRTaHJpbmth
Z2UgPSBtaW4oMCwgbWluVyAtIHcpOwogICAgICAgICByZXR1cm4gYWxsb3dlZFNocmlua2FnZTsK
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJGbGV4aWJsZUJveC5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9S
ZW5kZXJGbGV4aWJsZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw5ICszNCw5IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0OwogCi0gICAg
dmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwotICAgIHZvaWQgY2FsY0hvcml6b250YWxN
aW5NYXhXaWR0aCgpOwotICAgIHZvaWQgY2FsY1ZlcnRpY2FsTWluTWF4V2lkdGgoKTsKKyAgICB2
aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2b2lkIGNhbGNIb3Jpem9udGFsUHJl
ZldpZHRocygpOworICAgIHZvaWQgY2FsY1ZlcnRpY2FsUHJlZldpZHRocygpOwogCiAgICAgdmly
dHVhbCB2b2lkIGxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CiAgICAgdm9pZCBs
YXlvdXRIb3Jpem9udGFsQm94KGJvb2wgcmVsYXlvdXRDaGlsZHJlbik7CkBAIC01Myw5ICs1Myw5
IEBAIHB1YmxpYzoKIHByb3RlY3RlZDoKICAgICBpbnQgYWxsb3dlZENoaWxkRmxleChSZW5kZXJP
YmplY3QqIGNoaWxkLCBib29sIGV4cGFuZGluZywgdW5zaWduZWQgZ3JvdXApOwogCi0gICAgYm9v
bCBoYXNNdWx0aXBsZUxpbmVzKCkgeyByZXR1cm4gc3R5bGUoKS0+Ym94TGluZXMoKSA9PSBNVUxU
SVBMRTsgfQotICAgIGJvb2wgaXNWZXJ0aWNhbCgpIHsgcmV0dXJuIHN0eWxlKCktPmJveE9yaWVu
dCgpID09IFZFUlRJQ0FMOyB9Ci0gICAgYm9vbCBpc0hvcml6b250YWwoKSB7IHJldHVybiBzdHls
ZSgpLT5ib3hPcmllbnQoKSA9PSBIT1JJWk9OVEFMOyB9CisgICAgYm9vbCBoYXNNdWx0aXBsZUxp
bmVzKCkgY29uc3QgeyByZXR1cm4gc3R5bGUoKS0+Ym94TGluZXMoKSA9PSBNVUxUSVBMRTsgfQor
ICAgIGJvb2wgaXNWZXJ0aWNhbCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJveE9yaWVudCgp
ID09IFZFUlRJQ0FMOyB9CisgICAgYm9vbCBpc0hvcml6b250YWwoKSBjb25zdCB7IHJldHVybiBz
dHlsZSgpLT5ib3hPcmllbnQoKSA9PSBIT1JJWk9OVEFMOyB9CiAKICAgICBib29sIG1fZmxleGlu
Z0NoaWxkcmVuIDogMTsKICAgICBib29sIG1fc3RyZXRjaGluZ0NoaWxkcmVuIDogMTsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5n
L1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw2IEBA
IGJvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6cmVxdWlyZXNMYXllcigKIHZvaWQgUmVuZGVyRm9y
ZWlnbk9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAg
QVNTRVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgSW50UmVjdCBvbGRCb3VuZHM7CiAgICAgSW50
UmVjdCBvbGRPdXRsaW5lQm94OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAyMDk5
NykKKysrIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1
Myw3ICs0NTMsNiBAQCBGcmFtZUVkZ2VJbmZvIFJlbmRlckZyYW1lU2V0OjplZGdlSW5mbygpCiB2
b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgp
KTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBpZiAoIXBhcmVudCgpLT5pc0Zy
YW1lU2V0KCkpIHsKICAgICAgICAgRnJhbWVWaWV3KiB2ID0gdmlldygpLT5mcmFtZVZpZXcoKTsK
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5n
L1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw2IEBAIHZv
aWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnQoUGFpbnRJbmZvJiAKIHZvaWQgUmVuZGVySFRNTENh
bnZhczo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJU
KG1pbk1heEtub3duKCkpOwogCiAgICAgSW50UmVjdCBvbGRCb3VuZHM7CiAgICAgSW50UmVjdCBv
bGRPdXRsaW5lQm94OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw4ICsxNzAsOCBAQCB2
b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQoQ2FjaGVkSW1hCiAgICAgaWYgKGVuc3VyZUxh
eW91dCkgewogICAgICAgICBpZiAoIXNlbGZOZWVkc0xheW91dCgpKQogICAgICAgICAgICAgc2V0
TmVlZHNMYXlvdXQodHJ1ZSk7Ci0gICAgICAgIGlmIChtaW5NYXhLbm93bigpKQotICAgICAgICAg
ICAgc2V0TWluTWF4S25vd24oZmFsc2UpOworICAgICAgICBpZiAoIXByZWZXaWR0aHNEaXJ0eSgp
KQorICAgICAgICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRydWUpOwogICAgIH0gZWxzZQogICAg
ICAgICAvLyBGSVhNRTogV2UgYWx3YXlzIGp1c3QgZG8gYSBjb21wbGV0ZSByZXBhaW50LCBzaW5j
ZSB3ZSBhbHdheXMgcGFzcyBpbiB0aGUgZnVsbCBpbWFnZQogICAgICAgICAvLyByZWN0IGF0IHRo
ZSBtb21lbnQgYW55d2F5LgpAQCAtMzAzLDcgKzMwMyw2IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBh
aW50KFBhaW50SW5mbyYgcGFpbnQKIHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dCgpCiB7CiAgICAg
QVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAg
IEludFJlY3Qgb2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKQEAgLTQzNSwy
MCArNDM0LDIwIEBAIGludCBSZW5kZXJJbWFnZTo6Y2FsY0FzcGVjdFJhdGlvSGVpZ2h0KCkKICAg
ICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNhbGNSZXBsYWNlZFdpZHRoKCkgKiBpbnRyaW5zaWNI
ZWlnaHQoKSAvIGludHJpbnNpY1dpZHRoKCk7CiB9CiAKLXZvaWQgUmVuZGVySW1hZ2U6OmNhbGNN
aW5NYXhXaWR0aCgpCit2b2lkIFJlbmRlckltYWdlOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAg
QVNTRVJUKCFtaW5NYXhLbm93bigpKTsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwog
Ci0gICAgbV9tYXhXaWR0aCA9IGNhbGNSZXBsYWNlZFdpZHRoKCkgKyBwYWRkaW5nTGVmdCgpICsg
cGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpOworICAgIG1fbWF4
UHJlZldpZHRoID0gY2FsY1JlcGxhY2VkV2lkdGgoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5n
UmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7CiAKICAgICBpZiAoc3R5bGUo
KS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSB8
fCAKICAgICAgICAgc3R5bGUoKS0+bWF4V2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZSgpLT5t
YXhIZWlnaHQoKS5pc1BlcmNlbnQoKSB8fAogICAgICAgICBzdHlsZSgpLT5taW5XaWR0aCgpLmlz
UGVyY2VudCgpIHx8IHN0eWxlKCktPm1pbkhlaWdodCgpLmlzUGVyY2VudCgpKQotICAgICAgICBt
X21pbldpZHRoID0gMDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UKLSAg
ICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bV9tYXhQcmVmV2lkdGg7CiAKLSAgICBzZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0
aHNEaXJ0eShmYWxzZSk7CiB9CiAKIEltYWdlKiBSZW5kZXJJbWFnZTo6bnVsbEltYWdlKCkKSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJJbWFnZS5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBj
YWxjUmVwbGFjZWRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhbGNSZXBsYWNlZEhl
aWdodCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOworICAg
IHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogCiAgICAgSFRNTE1hcEVsZW1lbnQqIGlt
YWdlTWFwKCk7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcgQEAg
dm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogCiAgICAgUmVuZGVyQ29u
dGFpbmVyOjphZGRDaGlsZChuZXdDaGlsZCxiZWZvcmVDaGlsZCk7CiAKLSAgICBuZXdDaGlsZC0+
c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICBuZXdDaGlsZC0+c2V0TmVlZHNM
YXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIFJlbmRlcklubGluZSogUmVuZGVySW5s
aW5lOjpjbG9uZUlubGluZShSZW5kZXJGbG93KiBzcmMpCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9p
ZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgICAgICBSZW5kZXJPYmpl
Y3QqIHRtcCA9IG87CiAgICAgICAgIG8gPSB0bXAtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgIGNs
b25lLT5hZGRDaGlsZFRvRmxvdyhyZW1vdmVDaGlsZE5vZGUodG1wKSwgMCk7Ci0gICAgICAgIHRt
cC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgdG1wLT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICB9CiAKICAgICAvLyBIb29rIHxjbG9u
ZXwgdXAgYXMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgbWlkZGxlIGJsb2NrLgpAQCAtMTg0LDcg
KzE4NCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAgICAg
ICAgICAgIFJlbmRlck9iamVjdCogdG1wID0gbzsKICAgICAgICAgICAgIG8gPSB0bXAtPm5leHRT
aWJsaW5nKCk7CiAgICAgICAgICAgICBjbG9uZS0+YWRkQ2hpbGRUb0Zsb3coY3Vyci0+cmVtb3Zl
Q2hpbGROb2RlKHRtcCksIDApOwotICAgICAgICAgICAgdG1wLT5zZXROZWVkc0xheW91dEFuZE1p
bk1heFJlY2FsYygpOworICAgICAgICAgICAgdG1wLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0
aHNSZWNhbGMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEtlZXAgd2Fsa2luZyB1cCB0aGUg
Y2hhaW4uCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0RmxvdyhS
ZW5kZXJPYmplYwogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBubyA9IG87CiAgICAgICAgICAg
ICBvID0gbm8tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBwcmUtPmFwcGVuZENoaWxkTm9k
ZShibG9jay0+cmVtb3ZlQ2hpbGROb2RlKG5vKSk7Ci0gICAgICAgICAgICBuby0+c2V0TmVlZHNM
YXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjU2LDkgKzI1Niw5
IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAgICAvLyBBbHdh
eXMganVzdCBkbyBhIGZ1bGwgbGF5b3V0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpbmUgYm94
ZXMgKGVzcGVjaWFsbHkgd3JhcHBlcnMgZm9yIGltYWdlcykKICAgICAvLyBnZXQgZGVsZXRlZCBw
cm9wZXJseS4gIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlcyBmcm9tIHRoZSBwcmUgYmxvY2sgaW50byB0
aGUgcG9zdCBibG9jaywgd2Ugd2FudCB0bwogICAgIC8vIG1ha2UgbmV3IGxpbmUgYm94ZXMgaW5z
dGVhZCBvZiBsZWF2aW5nIHRoZSBvbGQgbGluZSBib3hlcyBhcm91bmQuCi0gICAgcHJlLT5zZXRO
ZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwotICAgIGJsb2NrLT5zZXROZWVkc0xheW91dEFu
ZE1pbk1heFJlY2FsYygpOwotICAgIHBvc3QtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxj
KCk7CisgICAgcHJlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICBi
bG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcG9zdC0+c2V0
TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIHZvaWQgUmVuZGVySW5saW5l
OjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkBAIC0yODIsMTcg
KzI4Miw2IEBAIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSBjb250YWluaW5nQmxvY2soKS0+
eVBvcygpICsgY29udGludWF0aW9uKCktPnlQb3MoKSk7CiB9CiAKLXZvaWQgUmVuZGVySW5saW5l
OjpjYWxjTWluTWF4V2lkdGgoKQotewotICAgIEFTU0VSVCghbWluTWF4S25vd24oKSk7Ci0KLSAg
ICAvLyBJcnJlbGV2YW50LCBzaW5jZSBzb21lIGVuY2xvc2luZyBibG9jayB3aWxsIGFjdHVhbGx5
IG1lYXN1cmUgdXMgYW5kIG91ciBjaGlsZHJlbi4KLSAgICBtX21pbldpZHRoID0gMDsKLSAgICBt
X21heFdpZHRoID0gMDsKLQotICAgIHNldE1pbk1heEtub3duKCk7Ci19Ci0KIGJvb2wgUmVuZGVy
SW5saW5lOjpyZXF1aXJlc0xheWVyKCkKIHsKICAgICByZXR1cm4gaXNSb290KCkgfHwgaXNSZWxQ
b3NpdGlvbmVkKCkgfHwgc3R5bGUoKS0+b3BhY2l0eSgpIDwgMS4wZjsKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW5saW5lLmgJ
KHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw4ICs1OCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBub2RlQXRQ
b2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50IHks
IGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIHZpcnR1YWwgdm9pZCBjYWxj
TWluTWF4V2lkdGgoKTsKLQogICAgIC8vIG92ZXJyaWRlcyBSZW5kZXJPYmplY3QKICAgICB2aXJ0
dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlzdEJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lv
biAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDcgKzExOCwxNSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50
KCkKICAgICAgICAgfQogICAgICAgICBtX29wdGlvbnNXaWR0aCA9IHN0YXRpY19jYXN0PGludD4o
Y2VpbGYod2lkdGgpKTsKICAgICAgICAgbV9vcHRpb25zQ2hhbmdlZCA9IGZhbHNlOwotICAgICAg
ICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAKKyAgICAgICAgaWYg
KCFtX3ZCYXIgJiYgU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNjcm9sbGJhcnMoKSkKKyAgICAgICAg
ICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBub2RlKCktPmRvY3VtZW50KCktPnZpZXcoKSkgewor
ICAgICAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gd2lkZ2V0ID0gbmV3IFBs
YXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9sbGJhcik7
CisgICAgICAgICAgICAgICAgdmlldy0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKKyAgICAgICAg
ICAgICAgICBtX3ZCYXIgPSB3aWRnZXQucmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAgICAg
ICAKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgfQog
fQogCkBAIC0xNTEsNDcgKzE1OSwzOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRvUmV2
ZWFsU2VsZWN0CiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KGZpcnN0
SW5kZXgpOwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6OmNhbGNNaW5NYXhXaWR0aCgpCit2b2lk
IFJlbmRlckxpc3RCb3g6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBpZiAoIW1fdkJhciAmJiBT
Y3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Nyb2xsYmFycygpKQotICAgICAgICBpZiAoRnJhbWVWaWV3
KiB2aWV3ID0gbm9kZSgpLT5kb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgICAgIFJlZlB0
cjxQbGF0Zm9ybVNjcm9sbGJhcj4gd2lkZ2V0ID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMs
IFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9sbGJhcik7Ci0gICAgICAgICAgICB2aWV3LT5h
ZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwotICAgICAgICAgICAgbV92QmFyID0gd2lkZ2V0LnJlbGVh
c2UoKTsKLSAgICAgICAgfQotCi0gICAgaWYgKG1fb3B0aW9uc0NoYW5nZWQpCi0gICAgICAgIHVw
ZGF0ZUZyb21FbGVtZW50KCk7CisgICAgQVNTRVJUKCFtX29wdGlvbnNDaGFuZ2VkKTsKIAotICAg
IG1fbWluV2lkdGggPSAwOwotICAgIG1fbWF4V2lkdGggPSAwOworICAgIG1fbWluUHJlZldpZHRo
ID0gMDsKKyAgICBtX21heFByZWZXaWR0aCA9IDA7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgo
KS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9t
aW5XaWR0aCA9IG1fbWF4V2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRo
KCkudmFsdWUoKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBj
YWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxzZSB7
Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtX29wdGlvbnNXaWR0aCArIDIgKiBvcHRpb25zU3BhY2lu
Z0hvcml6b250YWw7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbV9vcHRpb25zV2lkdGggKyAy
ICogb3B0aW9uc1NwYWNpbmdIb3Jpem9udGFsOwogICAgICAgICBpZiAobV92QmFyKQotICAgICAg
ICAgICAgbV9tYXhXaWR0aCArPSBtX3ZCYXItPndpZHRoKCk7CisgICAgICAgICAgICBtX21heFBy
ZWZXaWR0aCArPSBtX3ZCYXItPndpZHRoKCk7CiAgICAgfQogCiAgICAgaWYgKHN0eWxlKCktPm1p
bldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsK
LSAgICAgICAgbV9tYXhXaWR0aCA9IG1heChtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWF4
KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1
ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJlZldpZHRoLCBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9IGVsc2UgaWYgKHN0eWxlKCktPndp
ZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkgJiYgc3R5bGUo
KS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICBtX21pbldpZHRoID0gMDsKKyAgICAg
ICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9taW5XaWR0aCA9IG1f
bWF4V2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CiAKICAg
ICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgo
KS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFdpZHRoID0gbWlu
KG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGggPSBtaW4obV9taW5XaWR0aCwgY2FsY0NvbnRlbnRC
b3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVm
V2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+
bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWlu
UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9IHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmln
aHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7Ci0gICAgbV9taW5XaWR0aCArPSB0
b0FkZDsKLSAgICBtX21heFdpZHRoICs9IHRvQWRkOworICAgIG1fbWluUHJlZldpZHRoICs9IHRv
QWRkOworICAgIG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOwogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAKLSAgICBzZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0aHNEaXJ0
eShmYWxzZSk7CiB9CiAKIGludCBSZW5kZXJMaXN0Qm94OjpzaXplKCkgY29uc3QKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxp
c3RCb3guaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCSh3
b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wg
c2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRpcGxp
ZXIgPSAxLjBmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlKCkgY29uc3Q7CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQ
cmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgZmly
c3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBjYWxj
SGVpZ2h0KCk7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMTAgKzE3
MCwxOCBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCiAgICAgaWYgKCFtX2hh
c0V4cGxpY2l0VmFsdWUpIHsKICAgICAgICAgbV9pc1ZhbHVlVXBUb0RhdGUgPSBmYWxzZTsKICAg
ICAgICAgaWYgKG1fbWFya2VyKQotICAgICAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5b3V0
QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgICAgICBtX21hcmtlci0+c2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgfQogfQogCitzdGF0aWMgUmVuZGVyT2JqZWN0KiBm
aXJzdE5vbk1hcmtlckNoaWxkKFJlbmRlck9iamVjdCogcGFyZW50KQoreworICAgIFJlbmRlck9i
amVjdCogcmVzdWx0ID0gcGFyZW50LT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUgKHJlc3VsdCAm
JiByZXN1bHQtPmlzTGlzdE1hcmtlcigpKQorICAgICAgICByZXN1bHQgPSByZXN1bHQtPm5leHRT
aWJsaW5nKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBSZW5kZXJMaXN0SXRlbTo6
dXBkYXRlTWFya2VyTG9jYXRpb24oKQogewogICAgIC8vIFNhbml0eSBjaGVjayB0aGUgbG9jYXRp
b24gb2Ygb3VyIG1hcmtlci4KQEAgLTE5MSwzMSArMTk5LDMxIEBAIHZvaWQgUmVuZGVyTGlzdEl0
ZW06OnVwZGF0ZU1hcmtlckxvY2F0aW8KICAgICAgICAgICAgICAgICBsaW5lQm94UGFyZW50ID0g
dGhpczsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtYXJrZXJQYXIgIT0gbGluZUJveFBhcmVu
dCB8fCAhbV9tYXJrZXItPm1pbk1heEtub3duKCkpIHsKKyAgICAgICAgaWYgKG1hcmtlclBhciAh
PSBsaW5lQm94UGFyZW50IHx8IG1fbWFya2VyLT5wcmVmV2lkdGhzRGlydHkoKSkgeworICAgICAg
ICAgICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKICAgICAgICAgICAgIG1fbWFya2VyLT5yZW1vdmUo
KTsKICAgICAgICAgICAgIGlmICghbGluZUJveFBhcmVudCkKICAgICAgICAgICAgICAgICBsaW5l
Qm94UGFyZW50ID0gdGhpczsKLSAgICAgICAgICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxkKG1f
bWFya2VyLCBsaW5lQm94UGFyZW50LT5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAgaWYgKCFt
X21hcmtlci0+bWluTWF4S25vd24oKSkKLSAgICAgICAgICAgICAgICBtX21hcmtlci0+Y2FsY01p
bk1heFdpZHRoKCk7Ci0gICAgICAgICAgICByZWNhbGNNaW5NYXhXaWR0aHMoKTsKKyAgICAgICAg
ICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBmaXJzdE5vbk1hcmtlckNoaWxk
KGxpbmVCb3hQYXJlbnQpKTsKKyAgICAgICAgICAgIGlmIChtX21hcmtlci0+cHJlZldpZHRoc0Rp
cnR5KCkpCisgICAgICAgICAgICAgICAgbV9tYXJrZXItPmNhbGNQcmVmV2lkdGhzKCk7CiAgICAg
ICAgIH0KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEl0ZW06OmNhbGNNaW5NYXhXaWR0aCgp
Cit2b2lkIFJlbmRlckxpc3RJdGVtOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgLy8gTWFrZSBz
dXJlIG91ciBtYXJrZXIgaXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCi0gICAgdXBkYXRlTWFy
a2VyTG9jYXRpb24oKTsKLSAgICBpZiAoIW1pbk1heEtub3duKCkpCi0gICAgICAgIFJlbmRlckJs
b2NrOjpjYWxjTWluTWF4V2lkdGgoKTsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwor
ICAgIAorICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPih0aGlzKS0+dXBkYXRlTWFya2Vy
TG9jYXRpb24oKTsKKworICAgIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocygpOwogfQogCiB2
b2lkIFJlbmRlckxpc3RJdGVtOjpsYXlvdXQoKQogewotICAgIEFTU0VSVChuZWVkc0xheW91dCgp
KTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7Ci0gICAgCisgICAgQVNTRVJUKG5lZWRzTGF5
b3V0KCkpOyAKKwogICAgIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7ICAgIAogICAgIFJlbmRlckJs
b2NrOjpsYXlvdXQoKTsKIH0KQEAgLTI4NSw3ICsyOTMsNyBAQCBjb25zdCBTdHJpbmcmIFJlbmRl
ckxpc3RJdGVtOjptYXJrZXJUZXh0CiB2b2lkIFJlbmRlckxpc3RJdGVtOjpleHBsaWNpdFZhbHVl
Q2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fbWFya2VyKQotICAgICAgICBtX21hcmtlci0+c2V0TmVl
ZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIE5vZGUqIGxpc3ROb2RlID0gZW5jbG9zaW5n
TGlzdChub2RlKCkpOwogICAgIFJlbmRlck9iamVjdCogbGlzdFJlbmRlcmVyID0gMDsKICAgICBp
ZiAobGlzdE5vZGUpCkBAIC0yOTYsNyArMzA0LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6ZXhw
bGljaXRWYWx1ZUNoYW5nZQogICAgICAgICAgICAgaWYgKCFpdGVtLT5tX2hhc0V4cGxpY2l0VmFs
dWUpIHsKICAgICAgICAgICAgICAgICBpdGVtLT5tX2lzVmFsdWVVcFRvRGF0ZSA9IGZhbHNlOwog
ICAgICAgICAgICAgICAgIGlmIChSZW5kZXJMaXN0TWFya2VyKiBtYXJrZXIgPSBpdGVtLT5tX21h
cmtlcikKLSAgICAgICAgICAgICAgICAgICAgbWFya2VyLT5zZXROZWVkc0xheW91dEFuZE1pbk1h
eFJlY2FsYygpOworICAgICAgICAgICAgICAgICAgICBtYXJrZXItPnNldE5lZWRzTGF5b3V0QW5k
UHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiB9CkluZGV4OiBy
ZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0u
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2
b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIAogICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmly
dHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9zaXRpb25M
aXN0TWFya2VyKCk7CiAKQEAgLTYyLDYgKzYyLDggQEAgcHVibGljOgogCiAgICAgY29uc3QgU3Ry
aW5nJiBtYXJrZXJUZXh0KCkgY29uc3Q7CiAKKyAgICBSZW5kZXJMaXN0TWFya2VyKiBtYXJrZXIo
KSBjb25zdCB7IHJldHVybiBtX21hcmtlcjsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgdXBkYXRl
TWFya2VyTG9jYXRpb24oKTsKICAgICBpbmxpbmUgaW50IGNhbGNWYWx1ZSgpIGNvbnN0OwpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw4ICs0ODIsOCBAQCBSZW5k
ZXJMaXN0TWFya2VyOjp+UmVuZGVyTGlzdE1hcmtlcigpCiAKIHZvaWQgUmVuZGVyTGlzdE1hcmtl
cjo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIHMpCiB7Ci0gICAgaWYgKHMgJiYgc3R5bGUoKSAmJiAo
cy0+bGlzdFN0eWxlUG9zaXRpb24oKSAhPSBzdHlsZSgpLT5saXN0U3R5bGVQb3NpdGlvbigpIHx8
IHMtPmxpc3RTdHlsZVR5cGUoKSAhPSBzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpKQotICAgICAg
ICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIGlmIChzdHlsZSgpICYmIChz
LT5saXN0U3R5bGVQb3NpdGlvbigpICE9IHN0eWxlKCktPmxpc3RTdHlsZVBvc2l0aW9uKCkgfHwg
cy0+bGlzdFN0eWxlVHlwZSgpICE9IHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkpCisgICAgICAg
IHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIAogICAgIFJlbmRlckJv
eDo6c2V0U3R5bGUocyk7CiAKQEAgLTYyNiw4ICs2MjYsMjUgQEAgdm9pZCBSZW5kZXJMaXN0TWFy
a2VyOjpwYWludChQYWludEluZm8mIAogdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQoKQog
ewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBpZiAoIW1pbk1heEtub3duKCkpCi0g
ICAgICAgIGNhbGNNaW5NYXhXaWR0aCgpOworICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkp
OworCisgICAgaWYgKGlzSW1hZ2UoKSkgeworICAgICAgICBtX3dpZHRoID0gbV9pbWFnZS0+aW1h
Z2UoKS0+d2lkdGgoKTsKKyAgICAgICAgbV9oZWlnaHQgPSBtX2ltYWdlLT5pbWFnZSgpLT5oZWln
aHQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3dpZHRoID0gbWluUHJlZldpZHRoKCk7Cisg
ICAgICAgIG1faGVpZ2h0ID0gc3R5bGUoKS0+Zm9udCgpLmhlaWdodCgpOworICAgIH0KKworICAg
IG1fbWFyZ2luTGVmdCA9IG1fbWFyZ2luUmlnaHQgPSAwOworCisgICAgTGVuZ3RoIGxlZnRNYXJn
aW4gPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CisgICAgTGVuZ3RoIHJpZ2h0TWFyZ2luID0gc3R5
bGUoKS0+bWFyZ2luUmlnaHQoKTsKKyAgICBpZiAobGVmdE1hcmdpbi5pc0ZpeGVkKCkpCisgICAg
ICAgIG1fbWFyZ2luTGVmdCA9IGxlZnRNYXJnaW4udmFsdWUoKTsKKyAgICBpZiAocmlnaHRNYXJn
aW4uaXNGaXhlZCgpKQorICAgICAgICBtX21hcmdpblJpZ2h0ID0gcmlnaHRNYXJnaW4udmFsdWUo
KTsKKwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApAQCAtNjM4LDIyICs2NTUsMjEg
QEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjppbWFnZUNoYW5nZWQoQ2FjaAogICAgICAgICByZXR1
cm47CiAKICAgICBpZiAobV93aWR0aCAhPSBtX2ltYWdlLT5pbWFnZVNpemUoKS53aWR0aCgpIHx8
IG1faGVpZ2h0ICE9IG1faW1hZ2UtPmltYWdlU2l6ZSgpLmhlaWdodCgpIHx8IG1faW1hZ2UtPmVy
cm9yT2NjdXJyZWQoKSkKLSAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsK
KyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgZWxzZQog
ICAgICAgICByZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y2FsY01pbk1h
eFdpZHRoKCkKK3ZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAg
IEFTU0VSVCghbWluTWF4S25vd24oKSk7CisgICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsK
IAogICAgIG1fdGV4dCA9ICIiOwogCiAgICAgaWYgKGlzSW1hZ2UoKSkgewotICAgICAgICBtX3dp
ZHRoID0gbV9pbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBtX2lt
YWdlLT5pbWFnZSgpLT5oZWlnaHQoKTsKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGgg
PSBtX3dpZHRoOwotICAgICAgICBzZXRNaW5NYXhLbm93bigpOworICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1fbWF4UHJlZldpZHRoID0gbV9pbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKTsKKyAgICAg
ICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICAgICAgdXBkYXRlTWFyZ2lucygpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02OTksODYgKzcxNSw4OSBAQCB2b2lkIFJlbmRl
ckxpc3RNYXJrZXI6OmNhbGNNaW5NYXhXaWR0aCgpCiAgICAgICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBtX3dpZHRoID0gd2lkdGg7Ci0gICAgbV9taW5XaWR0aCA9IHdpZHRoOwotICAgIG1f
bWF4V2lkdGggPSB3aWR0aDsKLQotICAgIC8vIEZJWE1FOiBBIGxpdHRsZSBzdHJhbmdlIHRvIHNl
dCB0aGUgaGVpZ2h0IGluIGNhbGNNaW5NYXhXaWR0aC4KLSAgICBtX2hlaWdodCA9IGZvbnQuaGVp
Z2h0KCk7CisgICAgbV9taW5QcmVmV2lkdGggPSB3aWR0aDsKKyAgICBtX21heFByZWZXaWR0aCA9
IHdpZHRoOwogCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHko
ZmFsc2UpOworICAgIAorICAgIHVwZGF0ZU1hcmdpbnMoKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjpjYWxjV2lkdGgoKQordm9pZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5z
KCkKIHsKLSAgICAvLyBtX3dpZHRoIGlzIHNldCBpbiBjYWxjTWluTWF4V2lkdGgoKQogICAgIGNv
bnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAKKyAgICBpbnQgbWFyZ2luTGVmdCA9
IDA7CisgICAgaW50IG1hcmdpblJpZ2h0ID0gMDsKKwogICAgIGlmIChpc0luc2lkZSgpKSB7CiAg
ICAgICAgIGlmIChpc0ltYWdlKCkpIHsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJlY3Rp
b24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwotICAgICAg
ICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjTWFya2VyUGFkZGluZzsKKyAgICAgICAgICAgICAg
ICBtYXJnaW5MZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IGNNYXJrZXJQ
YWRkaW5nOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX21hcmdpbkxl
ZnQgPSBjTWFya2VyUGFkZGluZzsKLSAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gMDsK
KyAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gY01hcmtlclBhZGRpbmc7CisgICAgICAgICAg
ICAgICAgbWFyZ2luUmlnaHQgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ugc3dp
dGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgRElTQzoK
ICAgICAgICAgICAgIGNhc2UgQ0lSQ0xFOgogICAgICAgICAgICAgY2FzZSBTUVVBUkU6CiAgICAg
ICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJn
aW5SaWdodCA9IGZvbnQuYXNjZW50KCkgLSBtX3dpZHRoICsgMTsKKyAgICAgICAgICAgICAgICAg
ICAgbWFyZ2luTGVmdCA9IC0xOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IGZv
bnQuYXNjZW50KCkgLSBtaW5QcmVmV2lkdGgoKSArIDE7CiAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gZm9udC5hc2NlbnQoKSAtIG1f
d2lkdGggKyAxOwotICAgICAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gLTE7CisgICAg
ICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBmb250LmFzY2VudCgpIC0gbWluUHJlZldpZHRo
KCkgKyAxOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IC0xOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6Ci0g
ICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gMDsKLSAgICAgICAgICAgICAgICBtX21hcmdp
blJpZ2h0ID0gMDsKKyAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gMDsKKyAgICAgICAgICAg
ICAgICBtYXJnaW5SaWdodCA9IDA7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgICAgICBpZiAoaXNJbWFn
ZSgpKQotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IC1tX3dpZHRoIC0gY01hcmtlclBh
ZGRpbmc7CisgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IC1taW5QcmVmV2lkdGgoKSAtIGNN
YXJrZXJQYWRkaW5nOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaW50IG9m
ZnNldCA9IGZvbnQuYXNjZW50KCkgKiAyIC8gMzsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKHN0
eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIERJU0M6
CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0lSQ0xFOgogICAgICAgICAgICAgICAgICAgICBj
YXNlIFNRVUFSRToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IC1vZmZz
ZXQgLSBjTWFya2VyUGFkZGluZyAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5M
ZWZ0ID0gLW9mZnNldCAtIGNNYXJrZXJQYWRkaW5nIC0gMTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIExOT05FOgotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
cmdpbkxlZnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQg
PSBtX3RleHQuaXNFbXB0eSgpID8gMCA6IC1tX3dpZHRoIC0gb2Zmc2V0IC8gMjsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBtX3RleHQuaXNFbXB0eSgpID8gMCA6IC1taW5Q
cmVmV2lkdGgoKSAtIG9mZnNldCAvIDI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg
fQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzSW1hZ2UoKSkKLSAgICAgICAg
ICAgICAgICBtX21hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKKyAgICAgICAgICAgICAgICBt
YXJnaW5MZWZ0ID0gY01hcmtlclBhZGRpbmc7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAg
ICAgICAgICBpbnQgb2Zmc2V0ID0gZm9udC5hc2NlbnQoKSAqIDIgLyAzOwogICAgICAgICAgICAg
ICAgIHN3aXRjaCAoc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAg
ICAgIGNhc2UgRElTQzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDSVJDTEU6CiAgICAgICAg
ICAgICAgICAgICAgIGNhc2UgU1FVQVJFOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9tYXJn
aW5MZWZ0ID0gb2Zmc2V0ICsgY01hcmtlclBhZGRpbmcgKyAxIC0gbV93aWR0aDsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBvZmZzZXQgKyBjTWFya2VyUGFkZGluZyArIDEg
LSBtaW5QcmVmV2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgICAgICAgICBjYXNlIExOT05FOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9tYXJn
aW5MZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAwOwogICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBtX3RleHQuaXNFbXB0eSgp
ID8gMCA6IG9mZnNldCAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0g
bV90ZXh0LmlzRW1wdHkoKSA/IDAgOiBvZmZzZXQgLyAyOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtX21hcmdpblJpZ2h0ID0gLW1fbWFyZ2lu
TGVmdCAtIG1fd2lkdGg7CisgICAgICAgIG1hcmdpblJpZ2h0ID0gLW1hcmdpbkxlZnQgLSBtaW5Q
cmVmV2lkdGgoKTsKICAgICB9CisgICAgCisgICAgc3R5bGUoKS0+c2V0TWFyZ2luTGVmdChMZW5n
dGgobWFyZ2luTGVmdCwgRml4ZWQpKTsKKyAgICBzdHlsZSgpLT5zZXRNYXJnaW5SaWdodChMZW5n
dGgobWFyZ2luUmlnaHQsIEZpeGVkKSk7CiB9CiAKIHNob3J0IFJlbmRlckxpc3RNYXJrZXI6Omxp
bmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAkocmV2aXNp
b24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCSh3b3JraW5nIGNvcHkp
CkBAIC00NywxMiArNDcsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWlu
dEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0g
ICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxj
UHJlZldpZHRocygpOwogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFn
ZSopOwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0aCgpOwotCiAgICAgdmlydHVhbCBJbmxp
bmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sLCBib29sLCBib29sKTsKIAogICAgIHZpcnR1YWwg
c2hvcnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFs
c2UpIGNvbnN0OwpAQCAtNjksMTAgKzY3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJl
Y3Qgc2VsZWN0aW9uUmVjdCgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYo
KSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2b2lkIHVwZGF0ZU1hcmdpbnMoKTsKKwog
cHJpdmF0ZToKICAgICBJbnRSZWN0IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwogCi0gICAgU3Ry
aW5nIG1fdGV4dDsKKyAgICBtdXRhYmxlIFN0cmluZyBtX3RleHQ7CiAgICAgQ2FjaGVkSW1hZ2Uq
IG1faW1hZ2U7CiAgICAgUmVuZGVyTGlzdEl0ZW0qIG1fbGlzdEl0ZW07CiAgICAgU2VsZWN0aW9u
U3RhdGUgbV9zZWxlY3Rpb25TdGF0ZTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNpb24g
MjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzAsNyArMTMwLDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRo
KAogICAgICAgICByZXR1cm47CiAKICAgICBtX29wdGlvbnNXaWR0aCA9IHdpZHRoOwotICAgIHNl
dE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKQEAgLTE5OCwzNCArMTk4LDM0IEBAIEludFJlY3QgUmVuZGVyTWVudUxpc3Q6OmNvbnRy
b2xDbGlwUmVjdCgKICAgICAgICAgICAgICAgICAgICBjb250ZW50V2lkdGgoKSwgY29udGVudEhl
aWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJNZW51TGlzdDo6Y2FsY01pbk1heFdpZHRoKCkKK3Zv
aWQgUmVuZGVyTWVudUxpc3Q6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBtX21pbldpZHRoID0g
MDsKLSAgICBtX21heFdpZHRoID0gMDsKKyAgICBtX21pblByZWZXaWR0aCA9IDA7CisgICAgbV9t
YXhQcmVmV2lkdGggPSAwOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYm
IHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluV2lkdGggPSBtX21h
eFdpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwor
ICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hX
aWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2UKLSAgICAgICAgbV9tYXhX
aWR0aCA9IG1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS0+bWluaW11bU1lbnVMaXN0U2l6ZShz
dHlsZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fb3B0aW9uc1dpZHRoLCB0
aGVtZSgpLT5taW5pbXVtTWVudUxpc3RTaXplKHN0eWxlKCkpKTsKIAogICAgIGlmIChzdHlsZSgp
LT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkgPiAw
KSB7Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtYXgobV9tYXhXaWR0aCwgY2FsY0NvbnRlbnRCb3hX
aWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5XaWR0aCA9
IG1heChtX21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0aCwg
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAg
ICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lk
dGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgp
LT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0
eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkKLSAgICAgICAgbV9taW5XaWR0aCA9IDA7Cisg
ICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1fbWluV2lkdGgg
PSBtX21heFdpZHRoOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoOwog
CiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9
IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCku
dmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWluV2lkdGgsIGNhbGNDb250
ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4
UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxl
KCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbiht
X21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZh
bHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBwYWRkaW5nTGVmdCgpICsgcGFkZGlu
Z1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpOwotICAgIG1fbWluV2lkdGgg
Kz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0b0FkZDsKKyAgICBtX21pblByZWZXaWR0aCAr
PSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCArPSB0b0FkZDsKIAotICAgIHNldE1pbk1heEtu
b3duKCk7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJN
ZW51TGlzdDo6c2hvd1BvcHVwKCkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiAyMDk5NykK
KysrIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3ICs1
Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNv
bnN0IHsgcmV0dXJuICJSZW5kZXJNZW51TGlzdCI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBjYWxj
TWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKIAogICAg
IGJvb2wgcG9wdXBJc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3BvcHVwSXNWaXNpYmxlOyB9
CiAgICAgdm9pZCBzaG93UG9wdXAoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMDk5
NykKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYs
MTMgKzE3NiwxMiBAQCBSZW5kZXJPYmplY3Q6OlJlbmRlck9iamVjdChOb2RlKiBub2RlKQogICAg
ICwgbV9uZWVkc0xheW91dChmYWxzZSkKICAgICAsIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dChm
YWxzZSkKICAgICAsIG1fcG9zQ2hpbGROZWVkc0xheW91dChmYWxzZSkKLSAgICAsIG1fbWluTWF4
S25vd24oZmFsc2UpCisgICAgLCBtX3ByZWZXaWR0aHNEaXJ0eShmYWxzZSkKICAgICAsIG1fZmxv
YXRpbmcoZmFsc2UpCiAgICAgLCBtX3Bvc2l0aW9uZWQoZmFsc2UpCiAgICAgLCBtX3JlbFBvc2l0
aW9uZWQoZmFsc2UpCiAgICAgLCBtX3BhaW50QmFja2dyb3VuZChmYWxzZSkKICAgICAsIG1faXNB
bm9ueW1vdXMobm9kZSA9PSBub2RlLT5kb2N1bWVudCgpKQotICAgICwgbV9yZWNhbGNNaW5NYXgo
ZmFsc2UpCiAgICAgLCBtX2lzVGV4dChmYWxzZSkKICAgICAsIG1faW5saW5lKHRydWUpCiAgICAg
LCBtX3JlcGxhY2VkKGZhbHNlKQpAQCAtNDk5LDEwICs0OTgsNiBAQCBSZW5kZXJCbG9jayogUmVu
ZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9jCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVy
T2JqZWN0Ojp1cGRhdGVGaXJzdExldHRlcigpCi17Ci19Ci0KIGludCBSZW5kZXJPYmplY3Q6Om9m
ZnNldExlZnQoKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogb2Zmc2V0UGFyID0gb2Zmc2V0
UGFyZW50KCk7CkBAIC02NTQsNiArNjQ5LDI5IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjptYXJrQWxs
RGVzY2VuZGFudHNXaXQKIHsKIH0KIAordm9pZCBSZW5kZXJPYmplY3Q6OnNldFByZWZXaWR0aHNE
aXJ0eShib29sIGIsIGJvb2wgbWFya1BhcmVudHMpCit7CisgICAgYm9vbCBwcmVmV2lkdGhzRGly
dHkgPSBtX3ByZWZXaWR0aHNEaXJ0eTsKKyAgICBtX3ByZWZXaWR0aHNEaXJ0eSA9IGI7CisgICAg
aWYgKGIpIHsKKyAgICAgICAgaWYgKCFwcmVmV2lkdGhzRGlydHkgJiYgbWFya1BhcmVudHMgJiYg
KHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbiAmJiBzdHlsZSgpLT5wb3NpdGlv
bigpICE9IEFic29sdXRlUG9zaXRpb24pKQorICAgICAgICAgICAgaW52YWxpZGF0ZUNvbnRhaW5p
bmdCbG9ja1ByZWZXaWR0aHMoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyT2JqZWN0OjppbnZh
bGlkYXRlQ29udGFpbmluZ0Jsb2NrUHJlZldpZHRocygpCit7CisgICAgUmVuZGVyT2JqZWN0KiBv
ID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgd2hpbGUgKG8gJiYgIW8tPm1fcHJlZldpZHRoc0Rp
cnR5KSB7CisgICAgICAgIG8tPm1fcHJlZldpZHRoc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgaWYg
KG8tPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiB8fCBvLT5zdHlsZSgpLT5w
b3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24pCisgICAgICAgICAgICAvLyBBIHBvc2l0aW9u
ZWQgb2JqZWN0IGhhcyBubyBlZmZlY3Qgb24gdGhlIG1pbi9tYXggd2lkdGggb2YgaXRzIGNvbnRh
aW5pbmcgYmxvY2sgZXZlci4gIFdlIGNhbiBvcHRpbWl6ZSB0aGlzCisgICAgICAgICAgICAvLyBj
YXNlIGFuZCBubyBnbyB1cCBhbnkgZnVydGhlci4KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBvID0gby0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRlck9iamVj
dDo6c2V0TmVlZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzKQogewogICAgIGJvb2wg
YWxyZWFkeU5lZWRlZExheW91dCA9IG1fbmVlZHNMYXlvdXQ7CkBAIC03MTAsOCArNzI4LDEyIEBA
IHZvaWQgUmVuZGVyT2JqZWN0OjptYXJrQ29udGFpbmluZ0Jsb2Nrc0YKIAogUmVuZGVyQmxvY2sq
IFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QKIHsKLSAgICBpZiAoaXNUYWJs
ZUNlbGwoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxlQ2Vs
bCo+KHRoaXMpLT50YWJsZSgpOworICAgIGlmIChpc1RhYmxlQ2VsbCgpKSB7CisgICAgICAgIGlm
IChwYXJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJU
YWJsZUNlbGwqPih0aGlzKS0+dGFibGUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAg
ICAgaWYgKGlzUmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm4gKFJlbmRlckJsb2NrKil0aGlz
OwogCkBAIC0xOTEzLDggKzE5MzUsNiBAQCBEZXByZWNhdGVkU3RyaW5nIFJlbmRlck9iamVjdDo6
aW5mb3JtYXRpCiAgICAgICAgIHRzIDw8ICJwcyAiOwogICAgIGlmIChuZWVkc0xheW91dCgpKQog
ICAgICAgICB0cyA8PCAibmwgIjsKLSAgICBpZiAobV9yZWNhbGNNaW5NYXgpCi0gICAgICAgIHRz
IDw8ICJybW0gIjsKICAgICBpZiAoc3R5bGUoKSAmJiBzdHlsZSgpLT56SW5kZXgoKSkKICAgICAg
ICAgdHMgPDwgInpJOiAiIDw8IHN0eWxlKCktPnpJbmRleCgpOwogICAgIGlmIChlbGVtZW50KCkp
IHsKQEAgLTE5NTQsOCArMTk3NCw4IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjpkdW1wKFRleHRTdHJl
YW0qIHN0cmUKICAgICAgICAgKnN0cmVhbSA8PCAiIHBhaW50QmFja2dyb3VuZCI7CiAgICAgaWYg
KG5lZWRzTGF5b3V0KCkpCiAgICAgICAgICpzdHJlYW0gPDwgIiBuZWVkc0xheW91dCI7Ci0gICAg
aWYgKG1pbk1heEtub3duKCkpCi0gICAgICAgICpzdHJlYW0gPDwgIiBtaW5NYXhLbm93biI7Cisg
ICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQorICAgICAgICAqc3RyZWFtIDw8ICIgcHJlZldpZHRo
c0RpcnR5IjsKICAgICAqc3RyZWFtIDw8IGVuZGw7CiAKICAgICBSZW5kZXJPYmplY3QqIGNoaWxk
ID0gZmlyc3RDaGlsZCgpOwpAQCAtMjI3Myw3ICsyMjkzLDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6
OnNldFN0eWxlKFJlbmRlclN0eWxlKgogICAgIC8vIFdlIGRvIGhhdmUgdG8gc2NoZWR1bGUgbGF5
b3V0cywgdGhvdWdoLCBzaW5jZSBhIHN0eWxlIGNoYW5nZSBjYW4gZm9yY2UgdXMgdG8KICAgICAv
LyBuZWVkIHRvIHJlbGF5b3V0LgogICAgIGlmIChkID09IFJlbmRlclN0eWxlOjpMYXlvdXQgJiYg
bV9wYXJlbnQpCi0gICAgICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAg
ICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGVsc2UgaWYgKG1f
cGFyZW50ICYmICFpc1RleHQoKSAmJiAoZCA9PSBSZW5kZXJTdHlsZTo6UmVwYWludExheWVyIHx8
IGQgPT0gUmVuZGVyU3R5bGU6OlJlcGFpbnQpKQogICAgICAgICAvLyBEbyBhIHJlcGFpbnQgd2l0
aCB0aGUgbmV3IHN0eWxlIG5vdywgZS5nLiwgZm9yIGV4YW1wbGUgaWYgd2UgZ28gZnJvbQogICAg
ICAgICAvLyBub3QgaGF2aW5nIGFuIG91dGxpbmUgdG8gaGF2aW5nIGFuIG91dGxpbmUuCkBAIC0y
NzAxLDQyICsyNzIxLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVWZXJ0aWNhbFBv
cwogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnJlY2FsY01pbk1heFdpZHRocygpCi17
Ci0gICAgQVNTRVJUKG1fcmVjYWxjTWluTWF4KTsKLQotICAgIG1fcmVjYWxjTWluTWF4ID0gZmFs
c2U7Ci0gICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKLQotICAgIFJlbmRlck9iamVjdCogY2hpbGQg
PSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGludCBjbWluID0g
MDsKLSAgICAgICAgaW50IGNtYXggPSAwOwotICAgICAgICBib29sIHRlc3QgPSBmYWxzZTsKLSAg
ICAgICAgaWYgKChtX21pbk1heEtub3duICYmIGNoaWxkLT5tX3JlY2FsY01pbk1heCkgfHwgIWNo
aWxkLT5tX21pbk1heEtub3duKSB7Ci0gICAgICAgICAgICBjbWluID0gY2hpbGQtPm1pbldpZHRo
KCk7Ci0gICAgICAgICAgICBjbWF4ID0gY2hpbGQtPm1heFdpZHRoKCk7Ci0gICAgICAgICAgICB0
ZXN0ID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPm1fcmVjYWxjTWluTWF4
KQotICAgICAgICAgICAgY2hpbGQtPnJlY2FsY01pbk1heFdpZHRocygpOwotICAgICAgICBpZiAo
IWNoaWxkLT5tX21pbk1heEtub3duKQotICAgICAgICAgICAgY2hpbGQtPmNhbGNNaW5NYXhXaWR0
aCgpOwotICAgICAgICBpZiAobV9taW5NYXhLbm93biAmJiB0ZXN0ICYmIChjbWluICE9IGNoaWxk
LT5taW5XaWR0aCgpIHx8IGNtYXggIT0gY2hpbGQtPm1heFdpZHRoKCkpKQotICAgICAgICAgICAg
bV9taW5NYXhLbm93biA9IGZhbHNlOwotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGlu
ZygpOwotICAgIH0KLQotICAgIC8vIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUsIGlmIHRoZSBjb250
YWlucyBpbmxpbmUgY2hpbGRyZW4sIGFzIHRoZSBjaGFuZ2UgY291bGQgaGF2ZQotICAgIC8vIGhh
cHBlbmVkIHNvbWV3aGVyZSBkZWVwIGluc2lkZSB0aGUgY2hpbGQgdHJlZS4gQWxzbyBkbyB0aGlz
IGZvciBibG9ja3Mgb3IgdGFibGVzIHRoYXQKLSAgICAvLyBhcmUgaW5saW5lIChpLmUuLCBpbmxp
bmUtYmxvY2sgYW5kIGlubGluZS10YWJsZSkuCi0gICAgaWYgKCghaXNJbmxpbmUoKSB8fCBpc0lu
bGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSAmJiBjaGlsZHJlbklubGluZSgpKQotICAgICAgICBt
X21pbk1heEtub3duID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fbWluTWF4S25vd24pCi0gICAgICAg
IGNhbGNNaW5NYXhXaWR0aCgpOwotfQotCiB2b2lkIFJlbmRlck9iamVjdDo6c2NoZWR1bGVSZWxh
eW91dCgpCiB7CiAgICAgaWYgKGlzUmVuZGVyVmlldygpKSB7CkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZp
c2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpA
QCAtMTc2LDcgKzE3Niw2IEBAIHB1YmxpYzoKICAgICAvLyBPYnRhaW5zIHRoZSBuZWFyZXN0IGVu
Y2xvc2luZyBibG9jayAoaW5jbHVkaW5nIHRoaXMgYmxvY2spIHRoYXQgY29udHJpYnV0ZXMgYSBm
aXJzdC1saW5lIHN0eWxlIHRvIG91ciBpbmxpbmUKICAgICAvLyBjaGlsZHJlbi4KICAgICB2aXJ0
dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9p
ZCB1cGRhdGVGaXJzdExldHRlcigpOwogCiAgICAgLy8gQ2FsbGVkIHdoZW4gYW4gb2JqZWN0IHRo
YXQgd2FzIGZsb2F0aW5nIG9yIHBvc2l0aW9uZWQgYmVjb21lcyBhIG5vcm1hbCBmbG93IG9iamVj
dAogICAgIC8vIGFnYWluLiAgV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIHJlbmRlciB0cmVlIHVw
ZGF0ZXMgYXMgbmVlZGVkIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcKQEAgLTMxOCw4ICszMTcsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBwb3NDaGlsZE5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1cm4g
bV9wb3NDaGlsZE5lZWRzTGF5b3V0OyB9CiAgICAgYm9vbCBub3JtYWxDaGlsZE5lZWRzTGF5b3V0
KCkgY29uc3QgeyByZXR1cm4gbV9ub3JtYWxDaGlsZE5lZWRzTGF5b3V0OyB9CiAKLSAgICBib29s
IG1pbk1heEtub3duKCkgY29uc3QgeyByZXR1cm4gbV9taW5NYXhLbm93bjsgfQotICAgIGJvb2wg
cmVjYWxjTWluTWF4KCkgY29uc3QgeyByZXR1cm4gbV9yZWNhbGNNaW5NYXg7IH0KKyAgICBib29s
IHByZWZXaWR0aHNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZldpZHRoc0RpcnR5OyB9CiAK
ICAgICBib29sIGlzU2VsZWN0aW9uQm9yZGVyKCkgY29uc3Q7CiAKQEAgLTM2OCwyNCArMzY2LDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFy
ZW50cyA9IHRydWUpOwogICAgIHZvaWQgc2V0Q2hpbGROZWVkc0xheW91dChib29sIGIsIGJvb2wg
bWFya1BhcmVudHMgPSB0cnVlKTsKIAotICAgIHZvaWQgc2V0TWluTWF4S25vd24oYm9vbCBiID0g
dHJ1ZSkKLSAgICB7Ci0gICAgICAgIG1fbWluTWF4S25vd24gPSBiOwotICAgICAgICBpZiAoIWIp
IHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogbyA9IHRoaXM7Ci0gICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIHJvb3QgPSB0aGlzOwotICAgICAgICAgICAgd2hpbGUobykgeyAvLyBGSVhNRTog
JiYgIW8tPm1fcmVjYWxjTWluTWF4ICkgewotICAgICAgICAgICAgICAgIG8tPm1fcmVjYWxjTWlu
TWF4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByb290ID0gbzsKLSAgICAgICAgICAgICAgICBv
ID0gby0+bV9wYXJlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCkKLSAgICB7Ci0gICAgICAgIHNldE1p
bk1heEtub3duKGZhbHNlKTsKKyAgICB2b2lkIHNldFByZWZXaWR0aHNEaXJ0eShib29sLCBib29s
IG1hcmtQYXJlbnRzID0gdHJ1ZSk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udGFpbmluZ0Jsb2Nr
UHJlZldpZHRocygpOworICAgIAorICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCkgewogICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICAgICAgc2V0UHJl
ZldpZHRoc0RpcnR5KHRydWUpOwogICAgIH0KIAogICAgIHZvaWQgc2V0UG9zaXRpb25lZChib29s
IGIgPSB0cnVlKSAgeyBtX3Bvc2l0aW9uZWQgPSBiOyAgfQpAQCAtNDU4LDI1ICs0NDQsMTEgQEAg
cHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xp
cHksIGludCBjbGlwaCwgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlTGVmdEVk
Z2UgPSB0cnVlLCBib29sIGluY2x1ZGVSaWdodEVkZ2UgPSB0cnVlKSB7IH0KIAotICAgIC8qCi0g
ICAgICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtICYgbWF4aW11bSB3aWR0
aCB0aGF0IHRoZSBvYmplY3QKLSAgICAgKiBjYW4gYmUgc2V0IHRvLgotICAgICAqCi0gICAgICog
d2hlbiB0aGUgRWxlbWVudCBjYWxscyBzZXRNaW5NYXhLbm93bih0cnVlKSwgY2FsY01pbk1heFdp
ZHRoKCkgd2lsbAotICAgICAqIGJlIG5vIGxvbmdlciBjYWxsZWQuCi0gICAgICoKLSAgICAgKiB3
aGVuIGEgZWxlbWVudCBoYXMgYSBmaXhlZCBzaXplLCBtX21pbldpZHRoIGFuZCBtX21heFdpZHRo
IHNob3VsZCBiZQotICAgICAqIHNldCB0byB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBoYXMgdGhlIHNw
ZWNpYWwgbWVhbmluZyB0aGF0IG1fd2lkdGgsCi0gICAgICogY29udGFpbnMgdGhlIGFjdHVhbCB2
YWx1ZS4KLSAgICAgKgotICAgICAqIGFzc3VtZXMgY2FsY01pbk1heFdpZHRoIGhhcyBhbHJlYWR5
IGJlZW4gY2FsbGVkIGZvciBhbGwgY2hpbGRyZW4uCi0gICAgICovCi0gICAgdmlydHVhbCB2b2lk
IGNhbGNNaW5NYXhXaWR0aCgpIHsgfQotCi0gICAgLyoKLSAgICAgKiBEb2VzIHRoZSBtaW4gbWF4
IHdpZHRoIHJlY2FsY3VsYXRpb25zIGFmdGVyIGNoYW5nZXMuCi0gICAgICovCi0gICAgdm9pZCBy
ZWNhbGNNaW5NYXhXaWR0aHMoKTsKKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0
ZXMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJlZmVycmVkIHdpZHRocyBmb3IgYW4gb2JqZWN0
LgorICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBpbiBzaHJpbmstdG8tZml0IGxheW91dCBz
eXN0ZW1zLiAgVGhlc2UgaW5jbHVkZSB0YWJsZXMsIHBvc2l0aW9uZWQgb2JqZWN0cywgZmxvYXRz
CisgICAgLy8gYW5kIGZsZXhpYmxlIGJveGVzLgorICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldp
ZHRocygpIHt9CiAKICAgICAvKgogICAgICAqIENhbGN1bGF0ZXMgdGhlIGFjdHVhbCB3aWR0aCBv
ZiB0aGUgb2JqZWN0IChvbmx5IGZvciBub24gaW5saW5lCkBAIC02ODUsOCArNjU3LDggQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBoaWNzQ29udGV4
dCosIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZpcnR1YWwgaW50IG1pbldpZHRoKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IG1heFdpZHRoKCkgY29uc3QgeyByZXR1cm4g
MDsgfQorICAgIHZpcnR1YWwgaW50IG1pblByZWZXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0K
KyAgICB2aXJ0dWFsIGludCBtYXhQcmVmV2lkdGgoKSBjb25zdCB7IHJldHVybiAwOyB9CiAKICAg
ICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9CiAgICAgUmVu
ZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CkBAIC05MTIsNyArODg0LDcgQEAgcHJp
dmF0ZToKICAgICBib29sIG1fbmVlZHNMYXlvdXQgICAgICAgICAgICAgICA6IDE7CiAgICAgYm9v
bCBtX25vcm1hbENoaWxkTmVlZHNMYXlvdXQgICAgOiAxOwogICAgIGJvb2wgbV9wb3NDaGlsZE5l
ZWRzTGF5b3V0ICAgICAgIDogMTsKLSAgICBib29sIG1fbWluTWF4S25vd24gICAgICAgICAgICAg
ICA6IDE7CisgICAgYm9vbCBtX3ByZWZXaWR0aHNEaXJ0eSAgICAgICAgICAgOiAxOwogICAgIGJv
b2wgbV9mbG9hdGluZyAgICAgICAgICAgICAgICAgIDogMTsKIAogICAgIGJvb2wgbV9wb3NpdGlv
bmVkICAgICAgICAgICAgICAgIDogMTsKQEAgLTkyMSw3ICs4OTMsNiBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYmFja2dyb3VuZCBwYWlu
dGluZyBwaGFzZSAoYmFja2dyb3VuZCwgYm9yZGVyLCBldGMpCiAKICAgICBib29sIG1faXNBbm9u
eW1vdXMgICAgICAgICAgICAgICA6IDE7Ci0gICAgYm9vbCBtX3JlY2FsY01pbk1heCAgICAgICAg
ICAgICAgOiAxOwogICAgIGJvb2wgbV9pc1RleHQgICAgICAgICAgICAgICAgICAgIDogMTsKICAg
ICBib29sIG1faW5saW5lICAgICAgICAgICAgICAgICAgICA6IDE7CiAgICAgYm9vbCBtX3JlcGxh
Y2VkICAgICAgICAgICAgICAgICAgOiAxOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclBhcnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJQYXJ0LmNwcAkocmV2aXNpb24gMjA5OTcp
CisrKyByZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYz
LDcgQEAgdm9pZCBSZW5kZXJQYXJ0OjpzZXRXaWRnZXQoV2lkZ2V0KiB3aWRnZQogICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KS0+cmVmKCk7CiAgICAgICAgIFJlbmRl
cldpZGdldDo6c2V0V2lkZ2V0KHdpZGdldCk7CiAKLSAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRN
aW5NYXhSZWNhbGMoKTsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxj
KCk7CiAKICAgICAgICAgLy8gbWFrZSBzdXJlIHRoZSBzY3JvbGxiYXJzIGFyZSBzZXQgY29ycmVj
dGx5IGZvciByZXN0b3JlCiAgICAgICAgIC8vICMjIyBmaW5kIGJldHRlciBmaXgKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyUGFydE9iamVjdC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclBh
cnRPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDcsNyArMTA3LDcgQEAgdm9pZCBSZW5k
ZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQogICBWZWN0b3I8U3RyaW5nPiBwYXJhbVZhbHVl
czsKICAgRnJhbWUqIGZyYW1lID0gbV92aWV3LT5mcmFtZSgpOwogCi0gIHNldE5lZWRzTGF5b3V0
QW5kTWluTWF4UmVjYWxjKCk7CisgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OwogCiAgIGlmIChlbGVtZW50KCktPmhhc1RhZ05hbWUob2JqZWN0VGFnKSkgewogCkBAIC0yNDUs
NyArMjQ1LDYgQEAgdm9pZCBSZW5kZXJQYXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQogdm9pZCBS
ZW5kZXJQYXJ0T2JqZWN0OjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsK
LSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBjYWxjV2lkdGgoKTsKICAgICBjYWxj
SGVpZ2h0KCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTggKzc1LDE4
IEBAIGJvb2wgUmVuZGVyUmVwbGFjZWQ6OnNob3VsZFBhaW50KFBhaW50SW4KICAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBSZW5kZXJSZXBsYWNlZDo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQg
UmVuZGVyUmVwbGFjZWQ6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQoIW1pbk1heEtu
b3duKCkpOworICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICBpbnQgd2lkdGgg
PSBjYWxjUmVwbGFjZWRXaWR0aCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpICsg
Ym9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKTsKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5p
c1BlcmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWln
aHQoKS5pc1BlcmNlbnQoKSkpIHsKLSAgICAgICAgbV9taW5XaWR0aCA9IDA7Ci0gICAgICAgIG1f
bWF4V2lkdGggPSB3aWR0aDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgICAgICBt
X21heFByZWZXaWR0aCA9IHdpZHRoOwogICAgIH0gZWxzZQotICAgICAgICBtX21pbldpZHRoID0g
bV9tYXhXaWR0aCA9IHdpZHRoOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldp
ZHRoID0gd2lkdGg7CiAKLSAgICBzZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0aHNE
aXJ0eShmYWxzZSk7CiB9CiAKIHNob3J0IFJlbmRlclJlcGxhY2VkOjpsaW5lSGVpZ2h0KGJvb2ws
IGJvb2wpIGNvbnN0CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5k
ZXJpbmcvUmVuZGVyUmVwbGFjZWQuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5lLCBib29s
IGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGlu
ZVBvc2l0aW9uKGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29u
c3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmlydHVhbCB2
b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZv
JiwgaW50IHR4LCBpbnQgdHkpID0gMDsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRh
aW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJ
KHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDE3ICs4NSw5IEBAIHNob3J0IFJlbmRlclNWR0NvbnRhaW5lcjo6
YmFzZWxpbmVQb3NpdGkKICAgICByZXR1cm4gaGVpZ2h0KCkgKyBtYXJnaW5Ub3AoKSArIG1hcmdp
bkJvdHRvbSgpOwogfQogCi12b2lkIFJlbmRlclNWR0NvbnRhaW5lcjo6Y2FsY01pbk1heFdpZHRo
KCkKLXsKLSAgICBBU1NFUlQoIW1pbk1heEtub3duKCkpOwotICAgIG1fbWluV2lkdGggPSBtX21h
eFdpZHRoID0gMDsKLSAgICBzZXRNaW5NYXhLbm93bigpOwotfQotCiB2b2lkIFJlbmRlclNWR0Nv
bnRhaW5lcjo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNT
RVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgY2FsY1ZpZXdwb3J0KCk7CiAKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
U1ZHQ29udGFpbmVyLmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR0Nv
bnRhaW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw3ICs2Myw2IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxz
ZSkgY29uc3Q7CiAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9v
bCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBj
YWxjTWluTWF4V2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CiAgICAg
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMjA5
OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTQsMTMgKzU0LDYgQEAgc2hvcnQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpi
YXNlbGluZQogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5l
cjo6Y2FsY01pbk1heFdpZHRoKCkKLXsKLSAgICBBU1NFUlQoIW1pbk1heEtub3duKCkpOwotICAg
IG1fbWluV2lkdGggPSBtX21heFdpZHRoID0gMDsKLSAgICBzZXRNaW5NYXhLbm93bigpOwotfQot
CiB2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5oCShy
ZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJveCA9
IGZhbHNlKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJv
b2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgICAgICAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQg
bGF5b3V0KCk7CiAgICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFy
ZW50WCwgaW50IHBhcmVudFkpOwogICAgICAgICAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTVkdU
ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHJldmlz
aW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01OCw3ICs1OCw2IEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6cmVxdWlyZXNMYXllcigpCiB2
b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIEludFJlY3Qgb2xkQm91bmRzOwog
ICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTbGlkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCShyZXZpc2lvbiAy
MDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MzIsMzQgKzEzMiwzNCBAQCBzaG9ydCBSZW5kZXJTbGlkZXI6OmJhc2VsaW5lUG9zaXRpb24oYm9v
CiAgICAgcmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCk7CiB9CiAKLXZvaWQgUmVuZGVyU2xp
ZGVyOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJTbGlkZXI6OmNhbGNQcmVmV2lkdGhz
KCkKIHsKLSAgICBtX21pbldpZHRoID0gMDsKLSAgICBtX21heFdpZHRoID0gMDsKKyAgICBtX21p
blByZWZXaWR0aCA9IDA7CisgICAgbV9tYXhQcmVmV2lkdGggPSAwOwogCiAgICAgaWYgKHN0eWxl
KCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0g
ICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHls
ZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJl
ZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwog
ICAgIGVsc2UKLSAgICAgICAgbV9tYXhXaWR0aCA9IGRlZmF1bHRUcmFja0xlbmd0aDsKKyAgICAg
ICAgbV9tYXhQcmVmV2lkdGggPSBkZWZhdWx0VHJhY2tMZW5ndGg7CiAKICAgICBpZiAoc3R5bGUo
KS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4g
MCkgewotICAgICAgICBtX21heFdpZHRoID0gbWF4KG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94
V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGgg
PSBtYXgobV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgp
LnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgs
IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdp
ZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0gZWxzZSBpZiAoc3R5bGUo
KS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lkdGgoKS5pc0F1dG8oKSAmJiBz
dHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkpCi0gICAgICAgIG1fbWluV2lkdGggPSAwOwor
ICAgICAgICBtX21pblByZWZXaWR0aCA9IDA7CiAgICAgZWxzZQotICAgICAgICBtX21pbldpZHRo
ID0gbV9tYXhXaWR0aDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aDsK
ICAgICAKICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+
bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFdp
ZHRoID0gbWluKG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGggPSBtaW4obV9taW5XaWR0aCwgY2Fs
Y0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgo
c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bWluKG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9IHBhZGRpbmdMZWZ0KCkgKyBw
YWRkaW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7Ci0gICAgbV9taW5X
aWR0aCArPSB0b0FkZDsKLSAgICBtX21heFdpZHRoICs9IHRvQWRkOworICAgIG1fbWluUHJlZldp
ZHRoICs9IHRvQWRkOworICAgIG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOwogCi0gICAgc2V0TWlu
TWF4S25vd24oKTsgCisgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsgCiB9CiAKIHZvaWQg
UmVuZGVyU2xpZGVyOjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmV3U3R5bGUpCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyU2xpZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNsaWRl
ci5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZp
cnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJTbGlk
ZXIiOyB9CiAKICAgICAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKCBib29sLCBi
b29sICkgY29uc3Q7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKKyAg
ICAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
CiAgICAgICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwpJbmRleDogcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIzMyw4ICsyMzMsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpjYWxjV2lkdGgo
KQogICAgIGlmICh3aWR0aFR5cGUgPiBSZWxhdGl2ZSAmJiBzdHlsZSgpLT53aWR0aCgpLmlzUG9z
aXRpdmUoKSkgewogICAgICAgICAvLyBQZXJjZW50IG9yIGZpeGVkIHRhYmxlCiAgICAgICAgIG1f
d2lkdGggPSBzdHlsZSgpLT53aWR0aCgpLmNhbGNNaW5WYWx1ZShhdmFpbGFibGVXaWR0aCk7Ci0g
ICAgICAgIGlmIChtX21pbldpZHRoID4gbV93aWR0aCkKLSAgICAgICAgICAgIG1fd2lkdGggPSBt
X21pbldpZHRoOworICAgICAgICBtX3dpZHRoID0gbWF4KG1pblByZWZXaWR0aCgpLCBtX3dpZHRo
KTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBbiBhdXRvIHdpZHRoIHRhYmxlIHNob3VsZCBz
aHJpbmsgdG8gZml0IHdpdGhpbiB0aGUgbGluZSB3aWR0aCBpZiBuZWNlc3NhcnkgaW4gb3JkZXIg
dG8gCiAgICAgICAgIC8vIGF2b2lkIG92ZXJsYXBwaW5nIGZsb2F0cy4KQEAgLTI1MSwxMCArMjUw
LDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OmNhbGNXaWR0aCgpCiAgICAgICAgIGludCBhdmFpbENv
bnRlbnRXaWR0aCA9IG1heCgwLCBhdmFpbGFibGVXaWR0aCAtIG1hcmdpblRvdGFsKTsKICAgICAg
ICAgCiAgICAgICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgYmlnZ2VyIHRoYW4gb3VyIG1heCB3aWR0
aCBvciBzbWFsbGVyIHRoYW4gb3VyIG1pbiB3aWR0aC4KLSAgICAgICAgbV93aWR0aCA9IG1pbihh
dmFpbENvbnRlbnRXaWR0aCwgbV9tYXhXaWR0aCk7CisgICAgICAgIG1fd2lkdGggPSBtaW4oYXZh
aWxDb250ZW50V2lkdGgsIG1heFByZWZXaWR0aCgpKTsKICAgICB9CiAgICAgCi0gICAgbV93aWR0
aCA9IG1heChtX3dpZHRoLCBtX21pbldpZHRoKTsKKyAgICBtX3dpZHRoID0gbWF4KG1fd2lkdGgs
IG1pblByZWZXaWR0aCgpKTsKIAogICAgIC8vIEZpbmFsbHksIHdpdGggb3VyIHRydWUgd2lkdGgg
ZGV0ZXJtaW5lZCwgY29tcHV0ZSBvdXIgbWFyZ2lucyBmb3IgcmVhbC4KICAgICBtX21hcmdpblJp
Z2h0ID0gMDsKQEAgLTI2NSw4ICsyNjQsNiBAQCB2b2lkIFJlbmRlclRhYmxlOjpjYWxjV2lkdGgo
KQogdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQo
KSk7Ci0gICAgQVNTRVJUKG1pbk1heEtub3duKCkpOwotICAgIEFTU0VSVCghbV9uZWVkc1NlY3Rp
b25SZWNhbGMpOwogCiAgICAgaWYgKHBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbm9ybWFsQ2hp
bGROZWVkc0xheW91dCgpICYmICFzZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAvLyBBbGwg
d2UgaGF2ZSB0byBkbyBpcyBsYXkgb3V0IG91ciBwb3NpdGlvbmVkIG9iamVjdHMuCkBAIC0yNzUs
NiArMjcyLDggQEAgdm9pZCBSZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAorICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsKKyAgICAgICAgCiAgICAgSW50
UmVjdCBvbGRCb3VuZHM7CiAgICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwogICAgIGJvb2wgY2hl
Y2tGb3JSZXBhaW50ID0gY2hlY2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCk7CkBAIC01MjgsMTkg
KzUyNywxOSBAQCB2b2lkIFJlbmRlclRhYmxlOjpwYWludEJveERlY29yYXRpb25zKFBhCiAgICAg
ICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgsIHN0eWxlKCkp
OwogfQogCi12b2lkIFJlbmRlclRhYmxlOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJU
YWJsZTo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIEFTU0VSVCghbWluTWF4S25vd24oKSk7Cisg
ICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKIAogICAgIHJlY2FsY1NlY3Rpb25zSWZOZWVk
ZWQoKTsKICAgICByZWNhbGNIb3Jpem9udGFsQm9yZGVycygpOwogCi0gICAgbV90YWJsZUxheW91
dC0+Y2FsY01pbk1heFdpZHRoKG1fbWluV2lkdGgsIG1fbWF4V2lkdGgpOworICAgIG1fdGFibGVM
YXlvdXQtPmNhbGNQcmVmV2lkdGhzKG1fbWluUHJlZldpZHRoLCBtX21heFByZWZXaWR0aCk7CiAK
ICAgICBpZiAobV9jYXB0aW9uKQotICAgICAgICBtX21pbldpZHRoID0gbWF4KG1fbWluV2lkdGgs
IG1fY2FwdGlvbi0+bWluV2lkdGgoKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1f
bWluUHJlZldpZHRoLCBtX2NhcHRpb24tPm1pblByZWZXaWR0aCgpKTsKIAotICAgIHNldE1pbk1h
eEtub3duKCk7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5k
ZXJUYWJsZTo6c3BsaXRDb2x1bW4oaW50IHBvcywgaW50IGZpcnN0U3BhbikKQEAgLTU2MSw3ICs1
NjAsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjpzcGxpdENvbHVtbihpbnQgcG9zLCBpCiAgICAgfQog
CiAgICAgbV9jb2x1bW5Qb3MucmVzaXplKG51bUVmZkNvbHMoKSArIDEpOwotICAgIHNldE5lZWRz
TGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OmFwcGVuZENvbHVtbihpbnQgc3BhbikK
QEAgLTU3OSw3ICs1NzgsNyBAQCB2b2lkIFJlbmRlclRhYmxlOjphcHBlbmRDb2x1bW4oaW50IHNw
YW4pCiAgICAgfQogCiAgICAgbV9jb2x1bW5Qb3MucmVzaXplKG51bUVmZkNvbHMoKSArIDEpOwot
ICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgc2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIFJlbmRlclRhYmxlQ29sKiBSZW5kZXJUYWJsZTo6
Y29sRWxlbWVudChpbnQgY29sKSBjb25zdApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDIwOTk3KQor
KysgcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw3ICsxMDIs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwg
aW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8m
LCBpbnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwotICAgIHZpcnR1
YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0
aHMoKTsKIAogICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyVGFibGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVD
ZWxsLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNzAsMTQgKzcwLDE0IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxs
Ojp1cGRhdGVGcm9tRWxlbWVudCgKICAgICAgICAgbV9jb2x1bW5TcGFuID0gdGMtPmNvbFNwYW4o
KTsKICAgICAgICAgbV9yb3dTcGFuID0gdGMtPnJvd1NwYW4oKTsKICAgICAgICAgaWYgKChvbGRS
U3BhbiAhPSBtX3Jvd1NwYW4gfHwgb2xkQ1NwYW4gIT0gbV9jb2x1bW5TcGFuKSAmJiBzdHlsZSgp
ICYmIHBhcmVudCgpKSB7Ci0gICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2Fs
YygpOworICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgICAgICAgICBpZiAoc2VjdGlvbigpKQogICAgICAgICAgICAgICAgIHNlY3Rpb24oKS0+c2V0
TmVlZHNDZWxsUmVjYWxjKCk7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLUxlbmd0aCBSZW5kZXJU
YWJsZUNlbGw6OnN0eWxlT3JDb2xXaWR0aCgpCitMZW5ndGggUmVuZGVyVGFibGVDZWxsOjpzdHls
ZU9yQ29sV2lkdGgoKSBjb25zdAogewogICAgIExlbmd0aCB3ID0gc3R5bGUoKS0+d2lkdGgoKTsK
ICAgICBpZiAoY29sU3BhbigpID4gMSB8fCAhdy5pc0F1dG8oKSkKQEAgLTk1LDE1ICs5NSwxNCBA
QCBMZW5ndGggUmVuZGVyVGFibGVDZWxsOjpzdHlsZU9yQ29sV2lkdGgoCiAgICAgcmV0dXJuIHc7
CiB9CiAKLXZvaWQgUmVuZGVyVGFibGVDZWxsOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5k
ZXJUYWJsZUNlbGw6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICAvLyByZWNhbGNNaW5NYXhXaWR0
aHMgd29ya3MgZGVwdGggZmlyc3QuICBIb3dldmVyLCB0aGUgY2hpbGQgY2VsbHMgcmVseSBvbiB0
aGUgZ3JpZHMgdXAgaW4gdGhlCi0gICAgLy8gc2VjdGlvbnMgdG8gZG8gdGhlaXIgY2FsY01pbk1h
eFdpZHRocyB3b3JrLiAgTm9ybWFsbHkgdGhlIHNlY3Rpb25zIGFyZSBzZXQgdXAgZWFybHksIGFz
IHRhYmxlCi0gICAgLy8gY2VsbHMgYXJlIGFkZGVkLCBidXQgcmVsYXlvdXQgY2FuIGNhdXNlIHRo
ZSBjZWxscyB0byBiZSBmcmVlZCwgbGVhdmluZyBzdGFsZSBwdHJzIGluIHRoZSBzZWN0aW9ucycK
KyAgICAvLyBUaGUgY2hpbGQgY2VsbHMgcmVseSBvbiB0aGUgZ3JpZHMgdXAgaW4gdGhlIHNlY3Rp
b25zIHRvIGRvIHRoZWlyIGNhbGNQcmVmV2lkdGhzIHdvcmsuICBOb3JtYWxseSB0aGUgc2VjdGlv
bnMgYXJlIHNldCB1cCBlYXJseSwgYXMgdGFibGUKKyAgICAvLyBjZWxscyBhcmUgYWRkZWQsIGJ1
dCByZWxheW91dCBjYW4gY2F1c2UgdGhlIGNlbGxzIHRvIGJlIGZyZWVkLCBsZWF2aW5nIHN0YWxl
IHBvaW50ZXJzIGluIHRoZSBzZWN0aW9ucycKICAgICAvLyBncmlkcy4gIFdlIG11c3QgcmVmcmVz
aCB0aG9zZSBncmlkcyBiZWZvcmUgdGhlIGNoaWxkIGNlbGxzIHRyeSB0byB1c2UgdGhlbS4KICAg
ICB0YWJsZSgpLT5yZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAKLSAgICBSZW5kZXJCbG9jazo6
Y2FsY01pbk1heFdpZHRoKCk7CisgICAgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCk7CiAg
ICAgaWYgKGVsZW1lbnQoKSAmJiBzdHlsZSgpLT5hdXRvV3JhcCgpKSB7CiAgICAgICAgIC8vIFNl
ZSBpZiBub3dyYXAgd2FzIHNldC4KICAgICAgICAgTGVuZ3RoIHcgPSBzdHlsZU9yQ29sV2lkdGgo
KTsKQEAgLTExNCw4ICsxMTMsNyBAQCB2b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y2FsY01pbk1heFdp
ZHRoKCkKICAgICAgICAgICAgIC8vIHRvIG1ha2UgdGhlIG1pbndpZHRoIG9mIHRoZSBjZWxsIGlu
dG8gdGhlIGZpeGVkIHdpZHRoLiAgVGhleSBkbyB0aGlzCiAgICAgICAgICAgICAvLyBldmVuIGlu
IHN0cmljdCBtb2RlLCBzbyBkbyBub3QgbWFrZSB0aGlzIGEgcXVpcmsuICBBZmZlY3RlZCB0aGUg
dG9wCiAgICAgICAgICAgICAvLyBvZiBoaXB0b3AuY29tLgotICAgICAgICAgICAgaWYgKG1fbWlu
V2lkdGggPCB3LnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbV9taW5XaWR0aCA9IHcudmFsdWUo
KTsKKyAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KHcudmFsdWUoKSwgbV9taW5QcmVm
V2lkdGgpOwogICAgIH0KIH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkocmV2aXNpb24gMjA5OTcp
CisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEx
ICs1NywxMSBAQCBwdWJsaWM6CiAgICAgUmVuZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uKCkgY29u
c3QgeyByZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVTZWN0aW9uKj4ocGFyZW50KCktPnBh
cmVudCgpKTsgfQogICAgIFJlbmRlclRhYmxlKiB0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHN0YXRp
Y19jYXN0PFJlbmRlclRhYmxlKj4ocGFyZW50KCktPnBhcmVudCgpLT5wYXJlbnQoKSk7IH0KIAot
ICAgIExlbmd0aCBzdHlsZU9yQ29sV2lkdGgoKTsKKyAgICBMZW5ndGggc3R5bGVPckNvbFdpZHRo
KCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOwogCi0gICAgdmly
dHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldp
ZHRocygpOwogICAgIHZpcnR1YWwgdm9pZCBjYWxjV2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQg
c2V0V2lkdGgoaW50KTsKICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsK
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVu
ZGVyVGFibGVDb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgUmVu
ZGVyVGFibGVDb2w6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICB9IGVsc2UKICAgICAgICAgbV9z
cGFuID0gIShzdHlsZSgpICYmIHN0eWxlKCktPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU5fR1JP
VVApOwogICAgIGlmIChtX3NwYW4gIT0gb2xkU3BhbiAmJiBzdHlsZSgpICYmIHBhcmVudCgpKQot
ICAgICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICBzZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogYm9vbCBSZW5kZXJUYWJsZUNvbDo6
aXNDaGlsZEFsbG93ZWQoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyU3R5bGUqIHN0eWxlKSBj
b25zdApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZVJvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExMiw3ICsxMTIsNiBAQCB2
b2lkIFJlbmRlclRhYmxlUm93OjphZGRDaGlsZChSZW5kZXJPYmplCiB2b2lkIFJlbmRlclRhYmxl
Um93OjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQo
bWluTWF4S25vd24oKSk7CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENo
aWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlm
IChjaGlsZC0+aXNUYWJsZUNlbGwoKSkgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMjA5OTcp
CisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNiwxMiAr
NDE2LDEyIEBAIEFMV0FZU19JTkxJTkUgaW50IFJlbmRlclRleHQ6OndpZHRoRnJvbUMKICAgICBy
ZXR1cm4gZi53aWR0aChUZXh0UnVuKHRleHQoKS0+Y2hhcmFjdGVycygpICsgc3RhcnQsIGxlbiks
IFRleHRTdHlsZShhbGxvd1RhYnMoKSwgeFBvcykpOwogfQogCi12b2lkIFJlbmRlclRleHQ6OnRy
aW1tZWRNaW5NYXhXaWR0aChpbnQgbGVhZFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50JiBiZWdpbk1pblcsIGJvb2wmIGJlZ2luV1MsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGVuZE1pblcsIGJvb2wmIGVuZFdTLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaGFzQnJlYWthYmxlQ2hhciwgYm9v
bCYgaGFzQnJlYWssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGJl
Z2luTWF4VywgaW50JiBlbmRNYXhXLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50JiBtaW5XLCBpbnQmIG1heFcsIGJvb2wmIHN0cmlwRnJvbnRTcGFjZXMpCit2b2lkIFJl
bmRlclRleHQ6OnRyaW1tZWRQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NaW5XLCBib29sJiBiZWdpbldTLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGVuZE1pblcsIGJvb2wmIGVuZFdT
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoYXNCcmVha2FibGVD
aGFyLCBib29sJiBoYXNCcmVhaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50JiBiZWdpbk1heFcsIGludCYgZW5kTWF4VywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgaW50JiBtaW5XLCBpbnQmIG1heFcsIGJvb2wmIHN0cmlwRnJvbnRTcGFjZXMpCiB7
CiAgICAgYm9vbCBjb2xsYXBzZVdoaXRlU3BhY2UgPSBzdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3Bh
Y2UoKTsKICAgICBpZiAoIWNvbGxhcHNlV2hpdGVTcGFjZSkKQEAgLTQzNCw4ICs0MzQsOCBAQCB2
b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRNaW5NYXhXaWR0aChpbnQgCiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKLSAgICBpZiAobV9oYXNUYWIpCi0gICAgICAgIGNhbGNNaW5NYXhXaWR0aEludGVy
bmFsKGxlYWRXaWR0aCk7CisgICAgaWYgKG1faGFzVGFiIHx8IHByZWZXaWR0aHNEaXJ0eSgpKQor
ICAgICAgICBjYWxjUHJlZldpZHRocyhsZWFkV2lkdGgpOwogCiAgICAgbWluVyA9IG1fbWluV2lk
dGg7CiAgICAgbWF4VyA9IG1fbWF4V2lkdGg7CkBAIC00OTMsMjEgKzQ5MywzMSBAQCB2b2lkIFJl
bmRlclRleHQ6OnRyaW1tZWRNaW5NYXhXaWR0aChpbnQgCiAgICAgfQogfQogCi12b2lkIFJlbmRl
clRleHQ6OmNhbGNNaW5NYXhXaWR0aCgpCitpbmxpbmUgYm9vbCBpc1NwYWNlQWNjb3JkaW5nVG9T
dHlsZShVQ2hhciBjLCBSZW5kZXJTdHlsZSogc3R5bGUpCiB7Ci0gICAgLy8gVXNlIDAgZm9yIHRo
ZSBsZWFkV2lkdGguIElmIHRoZSB0ZXh0IGNvbnRhaW5zIGEgdmFyaWFibGUgd2lkdGggdGFiLCB0
aGUgcmVhbCB3aWR0aAotICAgIC8vIHdpbGwgZ2V0IG1lYXN1cmVkIHdoZW4gdHJpbW1lZE1pbk1h
eFdpZHRoIGNhbGxzIGFnYWluIHdpdGggdGhlIHJlYWwgbGVhZFdpZHRoLgotICAgIEFTU0VSVCgh
bWluTWF4S25vd24oKSk7Ci0gICAgY2FsY01pbk1heFdpZHRoSW50ZXJuYWwoMCk7CisgICAgcmV0
dXJuIGMgPT0gJyAnIHx8IChjID09IG5vQnJlYWtTcGFjZSAmJiBzdHlsZS0+bmJzcE1vZGUoKSA9
PSBTUEFDRSk7CiB9CiAKLWlubGluZSBib29sIGlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKFVDaGFy
IGMsIFJlbmRlclN0eWxlKiBzdHlsZSkKK2ludCBSZW5kZXJUZXh0OjptaW5QcmVmV2lkdGgoKSBj
b25zdAogewotICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSBub0JyZWFrU3BhY2UgJiYgc3R5
bGUtPm5ic3BNb2RlKCkgPT0gU1BBQ0UpOworICAgIGlmIChwcmVmV2lkdGhzRGlydHkoKSkKKyAg
ICAgICAgY29uc3RfY2FzdDxSZW5kZXJUZXh0Kj4odGhpcyktPmNhbGNQcmVmV2lkdGhzKDApOwor
ICAgICAgICAKKyAgICByZXR1cm4gbV9taW5XaWR0aDsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Ojpj
YWxjTWluTWF4V2lkdGhJbnRlcm5hbChpbnQgbGVhZFdpZHRoKQoraW50IFJlbmRlclRleHQ6Om1h
eFByZWZXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQorICAgICAg
ICBjb25zdF9jYXN0PFJlbmRlclRleHQqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoMCk7CisgICAg
ICAgIAorICAgIHJldHVybiBtX21heFdpZHRoOworfQorCit2b2lkIFJlbmRlclRleHQ6OmNhbGNQ
cmVmV2lkdGhzKGludCBsZWFkV2lkdGgpCit7CisgICAgQVNTRVJUKG1faGFzVGFiIHx8IHByZWZX
aWR0aHNEaXJ0eSgpKTsKKwogICAgIG1fbWluV2lkdGggPSAwOwogICAgIG1fYmVnaW5NaW5XaWR0
aCA9IDA7CiAgICAgbV9lbmRNaW5XaWR0aCA9IDA7CkBAIC02NjIsNyArNjcyLDcgQEAgdm9pZCBS
ZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGhJbnRlcm5hbAogICAgICAgICBtX2VuZE1pbldpZHRo
ID0gY3Vyck1heFdpZHRoOwogICAgIH0KIAotICAgIHNldE1pbk1heEtub3duKCk7CisgICAgc2V0
UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAogYm9vbCBSZW5kZXJUZXh0Ojpjb250YWluc09u
bHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3QKQEAgLTkwNSw3
ICs5MTUsNyBAQCB2b2lkIFJlbmRlclRleHQ6OnNldFRleHQoUGFzc1JlZlB0cjxTdHJpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIHNldFRleHRJbnRlcm5hbCh0ZXh0KTsKLSAgICBzZXROZWVkc0xh
eW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1Jl
Y2FsYygpOwogfQogCiBpbnQgUmVuZGVyVGV4dDo6aGVpZ2h0KCkgY29uc3QKQEAgLTk5MCw3ICsx
MDAwLDcgQEAgdW5zaWduZWQgaW50IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVkIAogICAgIGlu
dCB3OwogICAgIGlmICgmZiA9PSAmc3R5bGUoKS0+Zm9udCgpKSB7CiAgICAgICAgIGlmICghc3R5
bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgIWZyb20gJiYgbGVuID09IHRleHRMZW5ndGgoKSkK
LSAgICAgICAgICAgIHcgPSBtX21heFdpZHRoOworICAgICAgICAgICAgdyA9IG1heFByZWZXaWR0
aCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB3ID0gd2lkdGhGcm9tQ2FjaGUoZiwgZnJv
bSwgbGVuLCB4UG9zKTsKICAgICB9IGVsc2UKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24gMjA5OTcpCisr
KyByZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxNiArNzUsMTUg
QEAgcHVibGljOgogCiAgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgZmlyc3RMaW5l
LCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQg
Y2FsY01pbk1heFdpZHRoKCk7Ci0gICAgdmlydHVhbCBpbnQgbWluV2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX21pbldpZHRoOyB9Ci0gICAgdmlydHVhbCBpbnQgbWF4V2lkdGgoKSBjb25zdCB7IHJl
dHVybiBtX21heFdpZHRoOyB9Ci0KLSAgICB2b2lkIHRyaW1tZWRNaW5NYXhXaWR0aChpbnQgbGVh
ZFdpZHRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NaW5XLCBib29s
JiBiZWdpbldTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgZW5kTWluVywgYm9v
bCYgZW5kV1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaGFzQnJlYWthYmxl
Q2hhciwgYm9vbCYgaGFzQnJlYWssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBi
ZWdpbk1heFcsIGludCYgZW5kTWF4VywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQm
IG1pblcsIGludCYgbWF4VywgYm9vbCYgc3RyaXBGcm9udFNwYWNlcyk7CisgICAgdmlydHVhbCBp
bnQgbWluUHJlZldpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWF4UHJlZldpZHRoKCkg
Y29uc3Q7CisKKyAgICB2b2lkIHRyaW1tZWRQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGJlZ2luTWluVywgYm9vbCYgYmVnaW5XUywKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgZW5kTWluVywgYm9vbCYgZW5kV1MsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICBib29sJiBoYXNCcmVha2FibGVDaGFyLCBib29sJiBoYXNC
cmVhaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NYXhXLCBpbnQmIGVu
ZE1heFcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1pblcsIGludCYgbWF4Vywg
Ym9vbCYgc3RyaXBGcm9udFNwYWNlcyk7CiAKICAgICAvLyByZXR1cm5zIHRoZSBtaW5pbXVtIHgg
cG9zaXRpb24gb2YgYWxsIHJ1bnMgcmVsYXRpdmUgdG8gdGhlIHBhcmVudC4KICAgICAvLyBkZWZh
dWx0cyB0byAwLgpAQCAtMTI5LDYgKzEyOCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAg
IHZvaWQgc2V0VGV4dEludGVybmFsKFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4pOworICAgIHZpcnR1
YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQgbGVhZFdpZHRoKTsKIAogcHJpdmF0ZToKICAgICAv
LyBNYWtlIGxlbmd0aCgpIHByaXZhdGUgc28gdGhhdCBjYWxsZXJzIHRoYXQgaGF2ZSBhIFJlbmRl
clRleHQqCkBAIC0xMzgsOCArMTM4LDYgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGVsZXRlVGV4
dEJveGVzKCk7CiAgICAgYm9vbCBjb250YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20s
IHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0gICAgdm9pZCBjYWxjTWluTWF4V2lkdGhJbnRlcm5hbChp
bnQgbGVhZFdpZHRoKTsKLQogICAgIGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50
IHN0YXJ0LCBpbnQgbGVuLCBpbnQgeFBvcykgY29uc3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkg
Y29uc3QgeyByZXR1cm4gbV9pc0FsbEFTQ0lJOyB9CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJU
ZXh0Q29udHJvbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02ODgsMTMgKzY4OCwxNSBAQCB2b2lkIFJlbmRlclRleHRDb250
cm9sOjpsYXlvdXQoKQogICAgIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhyZWxheW91dENoaWxk
cmVuKTsKIH0KIAotdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY01pbk1heFdpZHRoKCkKK3Zv
aWQgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBtX21pbldpZHRo
ID0gMDsKLSAgICBtX21heFdpZHRoID0gMDsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkp
OworCisgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgIG1fbWF4UHJlZldpZHRoID0gMDsKIAog
ICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZh
bHVlKCkgPiAwKQotICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IGNhbGNDb250ZW50
Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtX21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgo
KS52YWx1ZSgpKTsKICAgICBlbHNlIHsKICAgICAgICAgLy8gRmlndXJlIG91dCBob3cgYmlnIGEg
dGV4dCBjb250cm9sIG5lZWRzIHRvIGJlIGZvciBhIGdpdmVuIG51bWJlciBvZiBjaGFyYWN0ZXJz
CiAgICAgICAgIC8vICh1c2luZyAiMCIgYXMgdGhlIG5vbWluYWwgY2hhcmFjdGVyKS4KQEAgLTcx
MiwyMCArNzE0LDIwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNNaW5NYXhXaWR0aCgK
ICAgICAgICAgICAgIGlmIChmYWN0b3IgPD0gMCkKICAgICAgICAgICAgICAgICBmYWN0b3IgPSAy
MDsKICAgICAgICAgfQotICAgICAgICBtX21heFdpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihjZWls
ZihjaGFyV2lkdGggKiBmYWN0b3IpKSArIHNjcm9sbGJhclNpemU7CisgICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gc3RhdGljX2Nhc3Q8aW50PihjZWlsZihjaGFyV2lkdGggKiBmYWN0b3IpKSArIHNj
cm9sbGJhclNpemU7CiAgICAgfQogCiAgICAgaWYgKHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhl
ZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKLSAgICAgICAgbV9tYXhX
aWR0aCA9IG1heChtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldp
ZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWF4KG1fbWluV2lkdGgsIGNh
bGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAg
IG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9
IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkpKTsKICAgICB9IGVsc2UgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50
KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQ
ZXJjZW50KCkpKQotICAgICAgICBtX21pbldpZHRoID0gMDsKKyAgICAgICAgbV9taW5QcmVmV2lk
dGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGg7CisgICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CiAKICAgICBpZiAoc3R5bGUoKS0+
bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVu
ZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFdpZHRoID0gbWluKG1fbWF4V2lkdGgsIGNh
bGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAg
IG1fbWluV2lkdGggPSBtaW4obV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgp
LT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9t
YXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAog
ICAgIGludCB0b0FkZCA9IHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSArIGJvcmRlckxl
ZnQoKSArIGJvcmRlclJpZ2h0KCkgKwpAQCAtNzM4LDEwICs3NDAsMTAgQEAgdm9pZCBSZW5kZXJU
ZXh0Q29udHJvbDo6Y2FsY01pbk1heFdpZHRoKAogICAgICAgICB0b0FkZCArPSBtX2NhbmNlbEJ1
dHRvbi0+cmVuZGVyZXIoKS0+Ym9yZGVyTGVmdCgpICsgbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVy
KCktPmJvcmRlclJpZ2h0KCkgKwogICAgICAgICAgICAgICAgICBtX2NhbmNlbEJ1dHRvbi0+cmVu
ZGVyZXIoKS0+cGFkZGluZ0xlZnQoKSArIG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpLT5wYWRk
aW5nUmlnaHQoKTsKIAotICAgIG1fbWluV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCAr
PSB0b0FkZDsKKyAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0
aCArPSB0b0FkZDsKIAotICAgIHNldE1pbk1heEtub3duKCk7CisgICAgc2V0UHJlZldpZHRoc0Rp
cnR5KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6Zm9yd2FyZEV2ZW50KEV2
ZW50KiBldnQpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkocmV2aXNpb24gMjA5OTcpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIs
NyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qg
eyByZXR1cm4gIlJlbmRlclRleHRDb250cm9sIjsgfQogCiAgICAgdmlydHVhbCB2b2lkIGNhbGNI
ZWlnaHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmlydHVh
bCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUxlZnRvdmVy
QW5vbnltb3VzQm94ZXMoKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5
bGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01MSwxMCArNTEsMTAgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBu
b2RlLCBGcmFtZQogICAgIC8vIHRyeSB0byBjb250cmFpbiB0aGUgd2lkdGggdG8gdGhlIHZpZXdz
IHdpZHRoCiAgICAgbV93aWR0aCA9IDA7CiAgICAgbV9oZWlnaHQgPSAwOwotICAgIG1fbWluV2lk
dGggPSAwOwotICAgIG1fbWF4V2lkdGggPSAwOworICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAg
ICBtX21heFByZWZXaWR0aCA9IDA7CiAKLSAgICBzZXRNaW5NYXhLbm93bihmYWxzZSk7CisgICAg
c2V0UHJlZldpZHRoc0RpcnR5KHRydWUsIGZhbHNlKTsKICAgICAKICAgICBzZXRQb3NpdGlvbmVk
KHRydWUpOyAvLyB0byAwLDAgOikKIApAQCAtODAsMjggKzgwLDIzIEBAIHZvaWQgUmVuZGVyVmll
dzo6Y2FsY1dpZHRoKCkKICAgICBtX21hcmdpblJpZ2h0ID0gMDsKIH0KIAotdm9pZCBSZW5kZXJW
aWV3OjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJWaWV3OjpjYWxjUHJlZldpZHRocygp
CiB7Ci0gICAgQVNTRVJUKCFtaW5NYXhLbm93bigpKTsKKyAgICBBU1NFUlQocHJlZldpZHRoc0Rp
cnR5KCkpOwogCi0gICAgUmVuZGVyQmxvY2s6OmNhbGNNaW5NYXhXaWR0aCgpOworICAgIFJlbmRl
ckJsb2NrOjpjYWxjUHJlZldpZHRocygpOwogCi0gICAgbV9tYXhXaWR0aCA9IG1fbWluV2lkdGg7
Ci0KLSAgICBzZXRNaW5NYXhLbm93bigpOworICAgIG1fbWF4UHJlZldpZHRoID0gbV9taW5QcmVm
V2lkdGg7CiB9CiAKIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKIHsKICAgICBpZiAocHJpbnRp
bmcoKSkKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fd2lkdGg7CisgICAgICAgIG1fbWluUHJlZldp
ZHRoID0gbV9tYXhQcmVmV2lkdGggPSBtX3dpZHRoOwogCiAgICAgYm9vbCByZWxheW91dENoaWxk
cmVuID0gIXByaW50aW5nKCkgJiYgKCFtX2ZyYW1lVmlldyB8fCBtX3dpZHRoICE9IG1fZnJhbWVW
aWV3LT52aXNpYmxlV2lkdGgoKSB8fCBtX2hlaWdodCAhPSBtX2ZyYW1lVmlldy0+dmlzaWJsZUhl
aWdodCgpKTsKICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbikKICAgICAgICAgc2V0Q2hpbGROZWVk
c0xheW91dCh0cnVlLCBmYWxzZSk7Ci0KLSAgICBpZiAocmVjYWxjTWluTWF4KCkpCi0gICAgICAg
IHJlY2FsY01pbk1heFdpZHRocygpOwogICAgIAogICAgIGlmIChuZWVkc0xheW91dCgpKQogICAg
ICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVmlldy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHJldmlzaW9uIDIwOTk3KQor
KysgcmVuZGVyaW5nL1JlbmRlclZpZXcuaAkod29ya2luZyBjb3B5KQpAQCAtNDIsNyArNDIsNyBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgIHZpcnR1YWwgdm9pZCBj
YWxjV2lkdGgoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY0hlaWdodCgpOwotICAgIHZpcnR1YWwg
dm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMo
KTsKICAgICB2aXJ0dWFsIGJvb2wgYWJzb2x1dGVQb3NpdGlvbihpbnQmIHhQb3MsIGludCYgeVBv
cywgYm9vbCBmaXhlZCA9IGZhbHNlKSBjb25zdDsKIAogICAgIGludCBkb2NIZWlnaHQoKSBjb25z
dDsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJXaWRnZXQuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5k
ZXJXaWRnZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTAsNyArMTUwLDYgQEAgdm9pZCBSZW5k
ZXJXaWRnZXQ6OnNldFdpZGdldChXaWRnZXQqIHdpZAogdm9pZCBSZW5kZXJXaWRnZXQ6OmxheW91
dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93
bigpKTsKIAogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KSW5kZXg6IHJlbmRlcmluZy9U
YWJsZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9UYWJsZUxheW91dC5oCShyZXZp
c2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9UYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw3ICszNiw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgflRhYmxlTGF5b3V0KCkgeyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGludCYg
bWF4V2lkdGgpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50JiBtaW5X
aWR0aCwgaW50JiBtYXhXaWR0aCkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKSA9IDA7
CiAKIHByb3RlY3RlZDoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14134</attachid>
            <date>2007-04-22 04:38:48 -0700</date>
            <delta_ts>2007-04-22 22:06:12 -0700</delta_ts>
            <desc>Snapshot #2, tighten things up a bit. Optimize more.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>128645</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IGRvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50LmNwcAko
cmV2aXNpb24gMjA5OTcpCisrKyBkb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
OTU4LDcgKzE5NTgsNyBAQCB2b2lkIERvY3VtZW50Ojp1cGRhdGVTdHlsZVNlbGVjdG9yKCkKICNl
bmRpZgogCiAgICAgaWYgKHJlbmRlcmVyKCkpIHsKLSAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVl
ZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNM
YXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIGlmICh2aWV3KCkpCiAgICAgICAg
ICAgICB2aWV3KCktPnNjaGVkdWxlUmVsYXlvdXQoKTsKICAgICB9CkluZGV4OiBodG1sL0hUTUxU
ZXh0QXJlYUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTMzLDExICsxMzMsMTEgQEAgdm9pZCBIVE1MVGV4dEFyZWFFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dAogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gcm93c0F0dHIpIHsK
ICAgICAgICAgbV9yb3dzID0gIWF0dHItPmlzTnVsbCgpID8gYXR0ci0+dmFsdWUoKS50b0ludCgp
IDogMzsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAgICAgICByZW5kZXJlcigpLT5z
ZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAgICAgcmVuZGVyZXIoKS0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gY29sc0F0dHIpIHsKICAgICAgICAgbV9jb2xzID0gIWF0dHItPmlzTnVsbCgp
ID8gYXR0ci0+dmFsdWUoKS50b0ludCgpIDogNjA7CiAgICAgICAgIGlmIChyZW5kZXJlcigpKQot
ICAgICAgICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsK
KyAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdyYXBBdHRyKSB7CiAgICAgICAg
IC8vIHZpcnR1YWwgLyBwaHlzaWNhbCBpcyBOZXRzY2FwZSBleHRlbnNpb24gb2YgSFRNTCAzLjAs
IG5vdyBkZXByZWNhdGVkCiAgICAgICAgIC8vIHNvZnQvIGhhcmQgLyBvZmYgaXMgcmVjb21tZW5k
YXRpb24gZm9yIEhUTUwgNCBleHRlbnNpb24gYnkgSUUgYW5kIE5TIDQKQEAgLTE1MCw3ICsxNTAs
NyBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0CiAgICAgICAgIGVs
c2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJvZmYiKSkKICAgICAgICAg
ICAgIG1fd3JhcCA9IHRhX05vV3JhcDsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAg
ICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgewogICAgICAgICAv
LyBpZ25vcmUgZm9yIHRoZSBtb21lbnQKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBh
bGlnbkF0dHIpIHsKSW5kZXg6IHBhZ2UvRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJh
bWUuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHBhZ2UvRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzcyLDcgKzEzNzIsNyBAQCB2b2lkIEZyYW1lOjpmb3JjZUxheW91dFdpdGhQYWdlV2lk
dGhSYW5nCiAgICAgICAgIC8vIFRoaXMgbWFnaWMgaXMgYmFzaWNhbGx5IGNvcGllZCBmcm9tIGto
dG1sdmlldzo6cHJpbnQKICAgICAgICAgaW50IHBhZ2VXID0gKGludCljZWlsZihtaW5QYWdlV2lk
dGgpOwogICAgICAgICByb290LT5zZXRXaWR0aChwYWdlVyk7Ci0gICAgICAgIHJvb3QtPnNldE5l
ZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgIHJvb3QtPnNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICBmb3JjZUxheW91dCgpOwogICAgICAgICAK
ICAgICAgICAgLy8gSWYgd2UgZG9uJ3QgZml0IGluIHRoZSBtaW5pbXVtIHBhZ2Ugd2lkdGgsIHdl
J2xsIGxheSBvdXQgYWdhaW4uIElmIHdlIGRvbid0IGZpdCBpbiB0aGUKQEAgLTEzODMsNyArMTM4
Myw3IEBAIHZvaWQgRnJhbWU6OmZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmcKICAgICAgICAg
aWYgKHJpZ2h0bW9zdFBvcyA+IG1pblBhZ2VXaWR0aCkgewogICAgICAgICAgICAgcGFnZVcgPSBt
aW4ocmlnaHRtb3N0UG9zLCAoaW50KWNlaWxmKG1heFBhZ2VXaWR0aCkpOwogICAgICAgICAgICAg
cm9vdC0+c2V0V2lkdGgocGFnZVcpOwotICAgICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRB
bmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgICAgIHJvb3QtPnNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOwogICAgICAgICAgICAgZm9yY2VMYXlvdXQoKTsKICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IHBhZ2UvRnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1l
Vmlldy5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MTAsMTAgKzQxMCw2IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBh
bGxvd1N1YnRyZWUKICAgICAgICAgcm9vdC0+cmVwYWludE9iamVjdHNCZWZvcmVMYXlvdXQoKTsK
ICAgICB9CiAKLSAgICBpZiAoc3VidHJlZSkgewotICAgICAgICBpZiAocm9vdC0+cmVjYWxjTWlu
TWF4KCkpCi0gICAgICAgICAgICByb290LT5yZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICB9CiAg
ICAgcGF1c2VTY2hlZHVsZWRFdmVudHMoKTsKICAgICByb290LT5sYXlvdXQoKTsKICAgICBkLT5s
YXlvdXRSb290ID0gMDsKSW5kZXg6IHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiAyMDk5NykK
KysrIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Niwx
MiArNzYsOSBAQCB2b2lkIEF1dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKGludCBlCiAgICAg
ICAgICAgICAgICAgICAgIC8vIGEgbWluL21heCB3aWR0aCBvZiBhdCBsZWFzdCAxcHggZm9yIHRo
aXMgY29sdW1uIG5vdy4KICAgICAgICAgICAgICAgICAgICAgbC5taW5XaWR0aCA9IG1heChsLm1p
bldpZHRoLCAxKTsKICAgICAgICAgICAgICAgICAgICAgbC5tYXhXaWR0aCA9IG1heChsLm1heFdp
ZHRoLCAxKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFjZWxsLT5taW5NYXhLbm93bigpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgY2VsbC0+Y2FsY01pbk1heFdpZHRoKCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChjZWxsLT5taW5XaWR0aCgpID4gbC5taW5XaWR0aCkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGwubWluV2lkdGggPSBjZWxsLT5taW5XaWR0aCgpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoY2VsbC0+bWF4V2lkdGgoKSA+IGwubWF4V2lkdGgpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGwubWF4V2lkdGggPSBjZWxsLT5tYXhXaWR0aCgpOworICAgICAgICAg
ICAgICAgICAgICBsLm1pbldpZHRoID0gbWF4KGNlbGwtPm1pblByZWZXaWR0aCgpLCBsLm1pbldp
ZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNlbGwtPm1heFByZWZXaWR0aCgpID4gbC5t
YXhXaWR0aCkgeworICAgICAgICAgICAgICAgICAgICAgICAgbC5tYXhXaWR0aCA9IGNlbGwtPm1h
eFByZWZXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgbWF4Q29udHJpYnV0b3IgPSBj
ZWxsOwogICAgICAgICAgICAgICAgICAgICB9CiAKQEAgLTI0NCw3ICsyNDEsNyBAQCBzdGF0aWMg
Ym9vbCBzaG91bGRTY2FsZUNvbHVtbnMoUmVuZGVyVGFiCiAgICAgcmV0dXJuIHNjYWxlOwogfQog
Ci12b2lkIEF1dG9UYWJsZUxheW91dDo6Y2FsY01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGlu
dCYgbWF4V2lkdGgpCit2b2lkIEF1dG9UYWJsZUxheW91dDo6Y2FsY1ByZWZXaWR0aHMoaW50JiBt
aW5XaWR0aCwgaW50JiBtYXhXaWR0aCkKIHsKICAgICBmdWxsUmVjYWxjKCk7CiAKQEAgLTMxOSw4
ICszMTYsOCBAQCBpbnQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjRWZmZWN0aXZlV2lkdGgoCiAKICAg
ICAgICAgaW50IGNvbCA9IG1fdGFibGUtPmNvbFRvRWZmQ29sKGNlbGwtPmNvbCgpKTsKICAgICAg
ICAgdW5zaWduZWQgaW50IGxhc3RDb2wgPSBjb2w7Ci0gICAgICAgIGludCBjTWluV2lkdGggPSBj
ZWxsLT5taW5XaWR0aCgpICsgaHNwYWNpbmc7Ci0gICAgICAgIGludCBjTWF4V2lkdGggPSBjZWxs
LT5tYXhXaWR0aCgpICsgaHNwYWNpbmc7CisgICAgICAgIGludCBjTWluV2lkdGggPSBjZWxsLT5t
aW5QcmVmV2lkdGgoKSArIGhzcGFjaW5nOworICAgICAgICBpbnQgY01heFdpZHRoID0gY2VsbC0+
bWF4UHJlZldpZHRoKCkgKyBoc3BhY2luZzsKICAgICAgICAgaW50IHRvdGFsUGVyY2VudCA9IDA7
CiAgICAgICAgIGludCBtaW5XaWR0aCA9IDA7CiAgICAgICAgIGludCBtYXhXaWR0aCA9IDA7Cklu
ZGV4OiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L0F1dG9UYWJsZUxheW91dC5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9BdXRvVGFi
bGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBwdWJsaWM6CiAgICAg
QXV0b1RhYmxlTGF5b3V0KFJlbmRlclRhYmxlKik7CiAgICAgfkF1dG9UYWJsZUxheW91dCgpOwog
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aChpbnQmIG1pbldpZHRoLCBpbnQmIG1h
eFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50JiBtaW5XaWR0aCwg
aW50JiBtYXhXaWR0aCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcm90ZWN0ZWQ6
CkluZGV4OiByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9Db3VudGVyTm9kZS5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL0NvdW50ZXJO
b2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjYsNyArNjYsNyBAQCB2b2lkIENvdW50ZXJOb2Rl
OjpyZWNvdW50KCkKICAgICAgICAgaWYgKG9sZENvdW50ID09IG5ld0NvdW50KQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIGlmIChjLT5tX3JlbmRlcmVyLT5pc0NvdW50ZXIoKSkKLSAgICAg
ICAgICAgIGMtPm1fcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7Cisg
ICAgICAgICAgICBjLT5tX3JlbmRlcmVyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKICAgICB9CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHJldmlzaW9uIDIw
OTk3KQorKysgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xODAsNyArMTgwLDcgQEAgaW50IEZpeGVkVGFibGVMYXlvdXQ6OmNhbGNXaWR0aEFycmF5KGlu
dAogICAgIHJldHVybiB1c2VkV2lkdGg7CiB9CiAKLXZvaWQgRml4ZWRUYWJsZUxheW91dDo6Y2Fs
Y01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpCit2b2lkIEZpeGVkVGFi
bGVMYXlvdXQ6OmNhbGNQcmVmV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpCiB7
CiAgICAgLy8gRklYTUU6IFRoaXMgZW50aXJlIGNhbGN1bGF0aW9uIGlzIGluY29ycmVjdCBmb3Ig
Ym90aCBtaW53aWR0aCBhbmQgbWF4d2lkdGguCiAgICAgCkluZGV4OiByZW5kZXJpbmcvRml4ZWRU
YWJsZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgJ
KHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCBjbGFzcyBGaXhlZFRhYmxlTGF5b3V0IDogcHVibGlj
IFRhYmxlTGF5CiBwdWJsaWM6CiAgICAgRml4ZWRUYWJsZUxheW91dChSZW5kZXJUYWJsZSopOwog
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aChpbnQmIG1pbldpZHRoLCBpbnQmIG1h
eFdpZHRoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50JiBtaW5XaWR0aCwg
aW50JiBtYXhXaWR0aCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogCiBwcm90ZWN0ZWQ6
CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL0lubGluZUZsb3dCb3guY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9Jbmxp
bmVGbG93Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTc4LDcgKzU3OCw3IEBAIHZvaWQgSW5s
aW5lRmxvd0JveDo6cGFpbnQoUmVuZGVyT2JqZWN0OjoKICAgICAvLyAzLiBQYWludCBvdXIgY2hp
bGRyZW4uCiAgICAgaWYgKHBhaW50UGhhc2UgIT0gUGFpbnRQaGFzZVNlbGZPdXRsaW5lKSB7CiAg
ICAgICAgIGZvciAoSW5saW5lQm94KiBjdXJyID0gZmlyc3RDaGlsZCgpOyBjdXJyOyBjdXJyID0g
Y3Vyci0+bmV4dE9uTGluZSgpKSB7Ci0gICAgICAgICAgICBpZiAoIWN1cnItPm9iamVjdCgpLT5s
YXllcigpKQorICAgICAgICAgICAgaWYgKCFzdGF0aWNfY2FzdDxSZW5kZXJCb3gqPihjdXJyLT5v
YmplY3QoKSktPm1fbGF5ZXIpCiAgICAgICAgICAgICAgICAgY3Vyci0+cGFpbnQoY2hpbGRJbmZv
LCB0eCwgdHkpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckFwcGxl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHJldmlzaW9u
IDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk1LDcgKzk1LDYgQEAgdm9pZCBSZW5kZXJBcHBsZXQ6OmNyZWF0ZVdpZGdldElmTmVjZXNzYQog
dm9pZCBSZW5kZXJBcHBsZXQ6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkp
OwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIGNhbGNXaWR0aCgpOwogICAgIGNh
bGNIZWlnaHQoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJp
bmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsOSArMzI1LDkgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKAogICAgICAgICB7CiAgICAgICAg
ICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAgIG8gPSBuby0+bmV4dFNpYmxp
bmcoKTsKLSAgICAgICAgICAgIGJveC0+YXBwZW5kQ2hpbGROb2RlKHJlbW92ZUNoaWxkTm9kZShu
bykpOworICAgICAgICAgICAgYm94LT5tb3ZlQ2hpbGROb2RlKG5vKTsKICAgICAgICAgfQotICAg
ICAgICBib3gtPmFwcGVuZENoaWxkTm9kZShyZW1vdmVDaGlsZE5vZGUoaW5saW5lUnVuRW5kKSk7
CisgICAgICAgIGJveC0+bW92ZUNoaWxkTm9kZShpbmxpbmVSdW5FbmQpOwogICAgIH0KIAogI2lm
bmRlZiBOREVCVUcKQEAgLTM1MCwxMyArMzUwLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92
ZUNoaWxkKFJlbmRlck9iamUKICAgICBpZiAoY2FuRGVsZXRlQW5vbnltb3VzQmxvY2tzICYmIHBy
ZXYgJiYgbmV4dCkgewogICAgICAgICAvLyBUYWtlIGFsbCB0aGUgY2hpbGRyZW4gb3V0IG9mIHRo
ZSB8bmV4dHwgYmxvY2sgYW5kIHB1dCB0aGVtIGluCiAgICAgICAgIC8vIHRoZSB8cHJldnwgYmxv
Y2suCi0gICAgICAgIHByZXYtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAg
ICAgIHByZXYtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICBS
ZW5kZXJPYmplY3QqIG8gPSBuZXh0LT5maXJzdENoaWxkKCk7CiAgICAgICAgIHdoaWxlIChvKSB7
CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAgIG8gPSBuby0+
bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHByZXYtPmFwcGVuZENoaWxkTm9kZShuZXh0LT5y
ZW1vdmVDaGlsZE5vZGUobm8pKTsKLSAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFuZE1p
bk1heFJlY2FsYygpOworICAgICAgICAgICAgcHJldi0+bW92ZUNoaWxkTm9kZShubyk7CiAgICAg
ICAgIH0KICAKICAgICAgICAgUmVuZGVyQmxvY2sqIG5leHRCbG9jayA9IHN0YXRpY19jYXN0PFJl
bmRlckJsb2NrKj4obmV4dCk7CkBAIC0zNzMsMTUgKzM3MiwxNCBAQCB2b2lkIFJlbmRlckJsb2Nr
OjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIC8vIFRoZSByZW1vdmFsIGhhcyBrbm9j
a2VkIHVzIGRvd24gdG8gY29udGFpbmluZyBvbmx5IGEgc2luZ2xlIGFub255bW91cwogICAgICAg
ICAvLyBib3guICBXZSBjYW4gZ28gYWhlYWQgYW5kIHB1bGwgdGhlIGNvbnRlbnQgcmlnaHQgYmFj
ayB1cCBpbnRvIG91cgogICAgICAgICAvLyBib3guCi0gICAgICAgIHNldE5lZWRzTGF5b3V0QW5k
TWluTWF4UmVjYWxjKCk7CisgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwogICAgICAgICBSZW5kZXJCbG9jayogYW5vbkJsb2NrID0gc3RhdGljX2Nhc3Q8UmVuZGVy
QmxvY2sqPihyZW1vdmVDaGlsZE5vZGUoY2hpbGQpKTsKICAgICAgICAgbV9jaGlsZHJlbklubGlu
ZSA9IHRydWU7CiAgICAgICAgIFJlbmRlck9iamVjdCogbyA9IGFub25CbG9jay0+Zmlyc3RDaGls
ZCgpOwogICAgICAgICB3aGlsZSAobykgewogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBubyA9
IG87CiAgICAgICAgICAgICBvID0gbm8tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICBhcHBl
bmRDaGlsZE5vZGUoYW5vbkJsb2NrLT5yZW1vdmVDaGlsZE5vZGUobm8pKTsKLSAgICAgICAgICAg
IG5vLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAgICAgbW92ZUNo
aWxkTm9kZShubyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEZWxldGUgdGhlIG5vdy1lbXB0
eSBibG9jaydzIGxpbmVzIGFuZCBudWtlIGl0LgpAQCAtNDY0LDYgKzQ2Miw5IEBAIGJvb2wgUmVu
ZGVyQmxvY2s6OmlzU2VsZkNvbGxhcHNpbmdCbG9jaygKIAogdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0KCkKIHsKKyAgICAvLyBVcGRhdGUgb3VyIGZpcnN0IGxldHRlciBpbmZvIG5vdy4KKyAgICB1
cGRhdGVGaXJzdExldHRlcigpOworCiAgICAgLy8gVGFibGUgY2VsbHMgY2FsbCBsYXlvdXRCbG9j
ayBkaXJlY3RseSwgc28gZG9uJ3QgYWRkIGFueSBsb2dpYyBoZXJlLiAgUHV0IGNvZGUgaW50bwog
ICAgIC8vIGxheW91dEJsb2NrKCkuCiAgICAgbGF5b3V0QmxvY2soZmFsc2UpOwpAQCAtNDgxLDcg
KzQ4Miw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCiB2b2lkIFJlbmRlckJsb2NrOjps
YXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5
b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIGlmIChpc0lubGluZSgp
ICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSAvLyBJbmxpbmUgPGZvcm0+cyBpbnNp
ZGUgdmFyaW91cyB0YWJsZSBlbGVtZW50cyBjYW4KICAgICAgICAgcmV0dXJuOyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2F1c2UgdXMgdG8gY29tZSBpbiBoZXJlLiAg
SnVzdCBiYWlsLgpAQCAtNTM0LDcgKzUzNCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXkKICAgICAvLwogICAgIC8vIFN0YXJ0IG91dCBieSBzZXR0aW5nIG91ciBt
YXJnaW4gdmFsdWVzIHRvIG91ciBjdXJyZW50IG1hcmdpbnMuICBUYWJsZSBjZWxscyBoYXZlCiAg
ICAgLy8gbm8gbWFyZ2lucywgc28gd2UgZG9uJ3QgZmlsbCBpbiB0aGUgdmFsdWVzIGZvciB0YWJs
ZSBjZWxscy4KLSAgICBpZiAoIWlzVGFibGVDZWxsKCkpIHsKKyAgICBib29sIGlzQ2VsbCA9IGlz
VGFibGVDZWxsKCk7CisgICAgaWYgKCFpc0NlbGwpIHsKICAgICAgICAgaW5pdE1heE1hcmdpblZh
bHVlcygpOwogCiAgICAgICAgIG1fdG9wTWFyZ2luUXVpcmsgPSBzdHlsZSgpLT5tYXJnaW5Ub3Ao
KS5xdWlyaygpOwpAQCAtNTk0LDcgKzU5NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJs
b2NrKGJvb2wgcmVsYXkKICAgICAgICAgbV9oZWlnaHQgKz0gYm9yZGVyQm90dG9tKCkgKyBwYWRk
aW5nQm90dG9tKCk7CiAgICAgfQogCi0gICAgaWYgKChpc1RhYmxlQ2VsbCgpIHx8IGlzSW5saW5l
KCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGlzUm9vdCgpKSAmJiAhaGFzT3ZlcmZs
b3dDbGlwKCkgJiYgIWhhc0NvbnRyb2xDbGlwKCkpCisgICAgaWYgKChpc0NlbGwgfHwgaXNJbmxp
bmUoKSB8fCBpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgfHwgaXNSb290KCkpICYmICFoYXNPdmVy
Zmxvd0NsaXAoKSAmJiAhaGFzQ29udHJvbENsaXAoKSkKICAgICAgICAgYWRkVmlzdWFsT3ZlcmZs
b3coZmxvYXRSZWN0KCkpOwogCiAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMocmVsYXlvdXRD
aGlsZHJlbiB8fCBpc1Jvb3QoKSk7CkBAIC03NTQsNyArNzU1LDcgQEAgUmVuZGVyT2JqZWN0KiBS
ZW5kZXJCbG9jazo6aGFuZGxlQ29tcGFjdAogICAgICAgICAgICAgY2hpbGQtPmNhbGNXaWR0aCgp
OwogICAgICAgICAgICAgaW50IGNoaWxkTWFyZ2lucyA9IGNoaWxkLT5tYXJnaW5MZWZ0KCkgKyBj
aGlsZC0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgICAgIGludCBtYXJnaW4gPSBzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIgPyBjdXJyLT5tYXJnaW5MZWZ0KCkgOiBjdXJyLT5tYXJnaW5SaWdo
dCgpOwotICAgICAgICAgICAgaWYgKG1hcmdpbiA+PSAoY2hpbGRNYXJnaW5zICsgY2hpbGQtPm1h
eFdpZHRoKCkpKSB7CisgICAgICAgICAgICBpZiAobWFyZ2luID49IChjaGlsZE1hcmdpbnMgKyBj
aGlsZC0+bWF4UHJlZldpZHRoKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlIGNvbXBhY3Qg
d2lsbCBmaXQgaW4gdGhlIG1hcmdpbi4KICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsK
ICAgICAgICAgICAgICAgICBjb21wYWN0SW5mby5zZXQoY2hpbGQsIGN1cnIpOwpAQCAtMjYzNiw3
ICsyNjM3LDcgQEAgaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlck9iagogICAg
IC8vIChlYmF5IG9uIHRoZSBQTFQsIGZpbmFuY2UueWFob28uY29tIGluIHRoZSByZWFsIHdvcmxk
LCB2ZXJzaW9udHJhY2tlci5jb20gZm9yY2VzIGV2ZW4gYWxtb3N0IHN0cmljdCBtb2RlIG5vdCB0
byB3b3JrKQogICAgIGludCByZXN1bHQgPSBjbGVhclNldCA/IG1heCgwLCBib3R0b20gLSBjaGls
ZC0+eVBvcygpKSA6IDA7CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygp
ICYmIGNoaWxkLT5zdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiAKLSAgICAgICAgY2hpbGQt
Pm1pbldpZHRoKCkgPiBsaW5lV2lkdGgoY2hpbGQtPnlQb3MoKSkgJiYgY2hpbGQtPm1pbldpZHRo
KCkgPD0gYXZhaWxhYmxlV2lkdGgoKSAmJiAKKyAgICAgICAgY2hpbGQtPm1pblByZWZXaWR0aCgp
ID4gbGluZVdpZHRoKGNoaWxkLT55UG9zKCkpICYmIGNoaWxkLT5taW5QcmVmV2lkdGgoKSA8PSBh
dmFpbGFibGVXaWR0aCgpICYmIAogICAgICAgICBkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkg
ICAKICAgICAgICAgcmVzdWx0ID0gbWF4KDAsIGZsb2F0Qm90dG9tKCkgLSBjaGlsZC0+eVBvcygp
KTsKICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMzIyOSw2MSArMzIzMCw1NSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJCiAgICAgciA9IHJlc3VsdDsKIH0KIAotdm9p
ZCBSZW5kZXJCbG9jazo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNhbGNQ
cmVmV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQoICFtaW5NYXhLbm93bigpICk7Ci0KLSNpZmRlZiBE
RUJVR19MQVlPVVQKLSAgICBrZERlYnVnKCA2MDQwICkgPDwgcmVuZGVyTmFtZSgpIDw8ICIoUmVu
ZGVyQmxvY2spOjpjYWxjTWluTWF4V2lkdGgoKSB0aGlzPSIgPDwgdGhpcyA8PCBlbmRsOwotI2Vu
ZGlmCisgICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKIAogICAgIGlmICghaXNUYWJsZUNl
bGwoKSAmJiBzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZh
bHVlKCkgPiAwKQotICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IGNhbGNDb250ZW50
Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtX21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgo
KS52YWx1ZSgpKTsKICAgICBlbHNlIHsKLSAgICAgICAgbV9taW5XaWR0aCA9IDA7Ci0gICAgICAg
IG1fbWF4V2lkdGggPSAwOworICAgICAgICBtX21pblByZWZXaWR0aCA9IDA7CisgICAgICAgIG1f
bWF4UHJlZldpZHRoID0gMDsKIAogICAgICAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkKLSAgICAg
ICAgICAgIGNhbGNJbmxpbmVNaW5NYXhXaWR0aCgpOworICAgICAgICAgICAgY2FsY0lubGluZVBy
ZWZXaWR0aHMoKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FsY0Jsb2NrTWluTWF4V2lk
dGgoKTsKLQotICAgICAgICBpZihtX21heFdpZHRoIDwgbV9taW5XaWR0aCkgbV9tYXhXaWR0aCA9
IG1fbWluV2lkdGg7CisgICAgICAgICAgICBjYWxjQmxvY2tQcmVmV2lkdGhzKCk7CiAKKyAgICAg
ICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIG1fbWF4UHJlZldpZHRoKTsK
KyAgICAgICAgCiAgICAgICAgIGlmICghc3R5bGUoKS0+YXV0b1dyYXAoKSAmJiBjaGlsZHJlbklu
bGluZSgpKSB7Ci0gICAgICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aDsKKyAgICAgICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIC8vIEEgaG9yaXpvbnRhbCBtYXJxdWVlIHdpdGggaW5saW5lIGNoaWxkcmVuIGhhcyBu
byBtaW5pbXVtIHdpZHRoLgogICAgICAgICAgICAgaWYgKG1fbGF5ZXIgJiYgbV9sYXllci0+bWFy
cXVlZSgpICYmIG1fbGF5ZXItPm1hcnF1ZWUoKS0+aXNIb3Jpem9udGFsKCkpCi0gICAgICAgICAg
ICAgICAgbV9taW5XaWR0aCA9IDA7CisgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSAw
OwogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzVGFibGVDZWxsKCkpIHsKLSAgICAgICAgICAg
IExlbmd0aCB3ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4odGhpcyktPnN0eWxlT3JD
b2xXaWR0aCgpOworICAgICAgICAgICAgTGVuZ3RoIHcgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqPih0aGlzKS0+c3R5bGVPckNvbFdpZHRoKCk7CiAgICAgICAgICAgICBpZiAo
dy5pc0ZpeGVkKCkgJiYgdy52YWx1ZSgpID4gMCkKLSAgICAgICAgICAgICAgICBtX21heFdpZHRo
ID0gbWF4KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgody52YWx1ZSgpKSk7CisgICAg
ICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNhbGNDb250
ZW50Qm94V2lkdGgody52YWx1ZSgpKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgaWYg
KHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSA+IDApIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9IG1heChtX21heFdpZHRoLCBjYWxjQ29u
dGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21p
bldpZHRoID0gbWF4KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWlu
V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJl
ZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkp
OworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAgICAgCiAg
ICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9IG1p
bihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFs
dWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWluV2lkdGgsIGNhbGNDb250ZW50
Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21p
blByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVl
KCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSAwOwogICAgIHRvQWRkID0gYm9yZGVyTGVm
dCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKTsKIAot
ICAgIG1fbWluV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0b0FkZDsKLQotICAg
IHNldE1pbk1heEtub3duKCk7CisgICAgbV9taW5QcmVmV2lkdGggKz0gdG9BZGQ7CisgICAgbV9t
YXhQcmVmV2lkdGggKz0gdG9BZGQ7CiAKLSAgICAvL2tkRGVidWcoIDYwNDAgKSA8PCAiVGV4dDo6
Y2FsY01pbk1heFdpZHRoKCIgPDwgdGhpcyA8PCAiKTogbWluID0gIiA8PCBtX21pbldpZHRoIDw8
ICIgbWF4ID0gIiA8PCBtX21heFdpZHRoIDw8IGVuZGw7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5
KGZhbHNlKTsKIH0KIAogc3RydWN0IElubGluZU1pbk1heEl0ZXJhdG9yCkBAIC0zMzAwLDggKzMy
OTUsOCBAQCBzdHJ1Y3QgSW5saW5lTWluTWF4SXRlcmF0b3IKICAgICBSZW5kZXJPYmplY3QqIGN1
cnJlbnQ7CiAgICAgYm9vbCBlbmRPZklubGluZTsKIAotICAgIElubGluZU1pbk1heEl0ZXJhdG9y
KFJlbmRlck9iamVjdCogcCwgUmVuZGVyT2JqZWN0KiBvLCBib29sIGVuZCA9IGZhbHNlKQotICAg
ICAgICA6cGFyZW50KHApLCBjdXJyZW50KG8pLCBlbmRPZklubGluZShlbmQpIHt9CisgICAgSW5s
aW5lTWluTWF4SXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBwLCBib29sIGVuZCA9IGZhbHNlKQorICAg
ICAgICA6cGFyZW50KHApLCBjdXJyZW50KHApLCBlbmRPZklubGluZShlbmQpIHt9CiAKICAgICBS
ZW5kZXJPYmplY3QqIG5leHQoKTsKIH07CkBAIC0zMzExLDkgKzMzMDYsNyBAQCBSZW5kZXJPYmpl
Y3QqIElubGluZU1pbk1heEl0ZXJhdG9yOjpuZXh0CiAgICAgUmVuZGVyT2JqZWN0KiByZXN1bHQg
PSAwOwogICAgIGJvb2wgb2xkRW5kT2ZJbmxpbmUgPSBlbmRPZklubGluZTsKICAgICBlbmRPZklu
bGluZSA9IGZhbHNlOwotICAgIHdoaWxlIChjdXJyZW50ICE9IDAgfHwgKGN1cnJlbnQgPT0gcGFy
ZW50KSkKLSAgICB7Ci0gICAgICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJjdXJyZW50ID0gIiA8
PCBjdXJyZW50IDw8IGVuZGw7CisgICAgd2hpbGUgKGN1cnJlbnQgfHwgY3VycmVudCA9PSBwYXJl
bnQpIHsKICAgICAgICAgaWYgKCFvbGRFbmRPZklubGluZSAmJgogICAgICAgICAgICAgKGN1cnJl
bnQgPT0gcGFyZW50IHx8CiAgICAgICAgICAgICAgKCFjdXJyZW50LT5pc0Zsb2F0aW5nKCkgJiYg
IWN1cnJlbnQtPmlzUmVwbGFjZWQoKSAmJiAhY3VycmVudC0+aXNQb3NpdGlvbmVkKCkpKSkKQEAg
LTMzMzgsMTEgKzMzMzEsMTAgQEAgUmVuZGVyT2JqZWN0KiBJbmxpbmVNaW5NYXhJdGVyYXRvcjo6
bmV4dAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFyZXN1bHQpIGJy
ZWFrOworICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAg
IGlmICghcmVzdWx0LT5pc1Bvc2l0aW9uZWQoKSAmJiAocmVzdWx0LT5pc1RleHQoKSB8fCByZXN1
bHQtPmlzQlIoKSB8fAotICAgICAgICAgICAgcmVzdWx0LT5pc0Zsb2F0aW5nKCkgfHwgcmVzdWx0
LT5pc1JlcGxhY2VkKCkgfHwKLSAgICAgICAgICAgIHJlc3VsdC0+aXNJbmxpbmVGbG93KCkpKQor
ICAgICAgICBpZiAoIXJlc3VsdC0+aXNQb3NpdGlvbmVkKCkgJiYgKHJlc3VsdC0+aXNUZXh0KCkg
fHwgcmVzdWx0LT5pc0Zsb2F0aW5nKCkgfHwgcmVzdWx0LT5pc1JlcGxhY2VkKCkgfHwgcmVzdWx0
LT5pc0lubGluZUZsb3coKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAg
IGN1cnJlbnQgPSByZXN1bHQ7CkBAIC0zMzYxLDcgKzMzNTMsNyBAQCBzdGF0aWMgaW50IGdldEJQ
TVdpZHRoKGludCBjaGlsZFZhbHVlLCBMCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQg
Z2V0Qm9yZGVyUGFkZGluZ01hcmdpbihSZW5kZXJPYmplY3QqIGNoaWxkLCBib29sIGVuZE9mSW5s
aW5lKQorc3RhdGljIGludCBnZXRCb3JkZXJQYWRkaW5nTWFyZ2luKGNvbnN0IFJlbmRlck9iamVj
dCogY2hpbGQsIGJvb2wgZW5kT2ZJbmxpbmUpCiB7CiAgICAgUmVuZGVyU3R5bGUqIGNzdHlsZSA9
IGNoaWxkLT5zdHlsZSgpOwogICAgIGludCByZXN1bHQgPSAwOwpAQCAtMzM5NCw3ICszMzg2LDcg
QEAgc3RhdGljIGlubGluZSB2b2lkIHN0cmlwVHJhaWxpbmdTcGFjZShpbgogLy8gYW5kIE9wZXJh
IHdpbGwgYWxsb3cgYSB0YWJsZSBjZWxsIHRvIGdyb3cgdG8gZml0IGFuIGltYWdlIGluc2lkZSBp
dCB1bmRlcgogLy8gdmVyeSBzcGVjaWZpYyBjaXJ1Y3Vtc3RhbmNlcy4gTm90IHN1cHBvcnRpbmcg
dGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8KIC8vIG1pcy1yZW5kZXIgc29tZSByZWFsIHNpdGVz
LiAoU2VlIEJ1Z3ppbGxhIDEwNTE3LikgCi1zdGF0aWMgYm9vbCBzaG91bGRHcm93VGFibGVDZWxs
Rm9ySW1hZ2UoUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgUmVuZGVyT2JqZWN0KiBpbWFn
ZSwgUmVuZGVyT2JqZWN0KiBhZGphY2VudExlYWYpCitzdGF0aWMgYm9vbCBzaG91bGRHcm93VGFi
bGVDZWxsRm9ySW1hZ2UoY29uc3QgUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdCbG9jaywgY29uc3Qg
UmVuZGVyT2JqZWN0KiBpbWFnZSwgY29uc3QgUmVuZGVyT2JqZWN0KiBhZGphY2VudExlYWYpCiB7
CiAgICAgaWYgKCFjb250YWluaW5nQmxvY2stPnN0eWxlKCktPmh0bWxIYWNrcygpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC0zNDE0LDEwICszNDA2LDEwIEBAIHN0YXRpYyBib29sIHNob3Vs
ZEdyb3dUYWJsZUNlbGxGb3JJbWFnZSgKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBSZW5k
ZXJCbG9jazo6Y2FsY0lubGluZU1pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJ
bmxpbmVQcmVmV2lkdGhzKCkKIHsKLSAgICBpbnQgaW5saW5lTWF4PTA7Ci0gICAgaW50IGlubGlu
ZU1pbj0wOworICAgIGludCBpbmxpbmVNYXggPSAwOworICAgIGludCBpbmxpbmVNaW4gPSAwOwog
CiAgICAgaW50IGN3ID0gY29udGFpbmluZ0Jsb2NrKCktPmNvbnRlbnRXaWR0aCgpOwogCkBAIC0z
NDI5LDEyICszNDIxLDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVNaW5NYXhXaWR0
aCgKICAgICBib29sIGF1dG9XcmFwLCBvbGRBdXRvV3JhcDsKICAgICBhdXRvV3JhcCA9IG9sZEF1
dG9XcmFwID0gc3R5bGUoKS0+YXV0b1dyYXAoKTsKIAotICAgIElubGluZU1pbk1heEl0ZXJhdG9y
IGNoaWxkSXRlcmF0b3IodGhpcywgdGhpcyk7CisgICAgSW5saW5lTWluTWF4SXRlcmF0b3IgY2hp
bGRJdGVyYXRvcih0aGlzKTsKICAgICBib29sIGFkZGVkVGV4dEluZGVudCA9IGZhbHNlOyAvLyBP
bmx5IGdldHMgYWRkZWQgaW4gb25jZS4KICAgICBSZW5kZXJPYmplY3QqIHByZXZGbG9hdCA9IDA7
CiAgICAgUmVuZGVyT2JqZWN0KiBwcmV2aW91c0xlYWYgPSAwOwotICAgIHdoaWxlIChSZW5kZXJP
YmplY3QqIGNoaWxkID0gY2hpbGRJdGVyYXRvci5uZXh0KCkpCi0gICAgeworICAgIHdoaWxlIChS
ZW5kZXJPYmplY3QqIGNoaWxkID0gY2hpbGRJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgSW5s
aW5lTWluTWF4SXRlcmF0b3IgbGVhZkl0ZXJhdG9yID0gY2hpbGRJdGVyYXRvcjsKICAgICAgICAg
UmVuZGVyT2JqZWN0KiBuZXh0TGVhZiA9IGxlYWZJdGVyYXRvci5uZXh0KCk7CiAgICAgICAgIHdo
aWxlIChuZXh0TGVhZiAmJiBuZXh0TGVhZi0+aXNJbmxpbmVGbG93KCkpCkBAIC0zNTAwLDE2ICsz
NDkxLDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZU1pbk1heFdpZHRoKAogICAgICAg
ICAgICAgICAgICAgICBpbnQgbWFyZ2lucyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIExlbmd0
aCBsZWZ0TWFyZ2luID0gY3N0eWxlLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgICAgICAgICAgICAg
IExlbmd0aCByaWdodE1hcmdpbiA9IGNzdHlsZS0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAgICAg
ICAgICAgICAgYm9vbCB1c2VDYWxjdWxhdGVkV2lkdGhzID0gY2hpbGQtPmlzTGlzdE1hcmtlcigp
OwotICAgICAgICAgICAgICAgICAgICBpZiAobGVmdE1hcmdpbi5pc1BlcmNlbnQoKSB8fCByaWdo
dE1hcmdpbi5pc1BlcmNlbnQoKSB8fCB1c2VDYWxjdWxhdGVkV2lkdGhzKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGQtPmNhbGNXaWR0aCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
dXNlQ2FsY3VsYXRlZFdpZHRocyB8fCBsZWZ0TWFyZ2luLmlzUGVyY2VudCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbWFyZ2lucyArPSBjaGlsZC0+bWFyZ2luTGVmdCgpOwotICAgICAgICAg
ICAgICAgICAgICBlbHNlIGlmIChsZWZ0TWFyZ2luLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGxlZnRNYXJnaW4uaXNGaXhlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAg
bWFyZ2lucyArPSBsZWZ0TWFyZ2luLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1
c2VDYWxjdWxhdGVkV2lkdGhzIHx8IHJpZ2h0TWFyZ2luLmlzUGVyY2VudCgpKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbWFyZ2lucyArPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZSBpZiAocmlnaHRNYXJnaW4uaXNGaXhlZCgpKQorICAgICAgICAgICAg
ICAgICAgICBpZiAocmlnaHRNYXJnaW4uaXNGaXhlZCgpKQogICAgICAgICAgICAgICAgICAgICAg
ICAgbWFyZ2lucyArPSByaWdodE1hcmdpbi52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBj
aGlsZE1pbiArPSBtYXJnaW5zOwogICAgICAgICAgICAgICAgICAgICBjaGlsZE1heCArPSBtYXJn
aW5zOwpAQCAtMzUyMCw4ICszNTA0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZU1p
bk1heFdpZHRoKAogICAgICAgICAgICAgICAgIC8vIENhc2UgKDIpLiBJbmxpbmUgcmVwbGFjZWQg
ZWxlbWVudHMgYW5kIGZsb2F0cy4KICAgICAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVy
bWluYXRlIHRoZSBjdXJyZW50IGxpbmUgYXMgZmFyIGFzCiAgICAgICAgICAgICAgICAgLy8gbWlu
d2lkdGggaXMgY29uY2VybmVkLgotICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IGNoaWxkLT5t
aW5XaWR0aCgpOwotICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IGNoaWxkLT5tYXhXaWR0aCgp
OworICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IGNoaWxkLT5taW5QcmVmV2lkdGgoKTsKKyAg
ICAgICAgICAgICAgICBjaGlsZE1heCArPSBjaGlsZC0+bWF4UHJlZldpZHRoKCk7CiAKICAgICAg
ICAgICAgICAgICBib29sIGNsZWFyUHJldmlvdXNGbG9hdDsKICAgICAgICAgICAgICAgICBpZiAo
Y2hpbGQtPmlzRmxvYXRpbmcoKSkgewpAQCAtMzUzNCwxNCArMzUxOCwxMyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjYWxjSW5saW5lTWluTWF4V2lkdGgoCiAgICAgICAgICAgICAgICAgCiAgICAgICAg
ICAgICAgICAgYm9vbCBncm93Rm9yUHJldmlvdXMgPSBzaG91bGRHcm93VGFibGVDZWxsRm9ySW1h
Z2UodGhpcywgY2hpbGQsIHByZXZpb3VzTGVhZik7CiAgICAgICAgICAgICAgICAgaWYgKCFncm93
Rm9yUHJldmlvdXMgJiYgKGF1dG9XcmFwIHx8IG9sZEF1dG9XcmFwKSB8fCBjbGVhclByZXZpb3Vz
RmxvYXQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbWluV2lkdGggPCBpbmxpbmVNaW4p
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21pbldpZHRoID0gaW5saW5lTWluOworICAgICAg
ICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldp
ZHRoKTsKICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluID0gMDsKICAgICAgICAgICAgICAg
ICB9CiAKICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzdXBwb3NlZCB0byBjbGVhciB0aGUg
cHJldmlvdXMgZmxvYXQsIHRoZW4gdGVybWluYXRlIG1heHdpZHRoIGFzIHdlbGwuCiAgICAgICAg
ICAgICAgICAgaWYgKGNsZWFyUHJldmlvdXNGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBt
X21heFdpZHRoID0gbWF4KGlubGluZU1heCwgbV9tYXhXaWR0aCk7CisgICAgICAgICAgICAgICAg
ICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGlubGluZU1heCwgbV9tYXhQcmVmV2lkdGgpOwogICAg
ICAgICAgICAgICAgICAgICBpbmxpbmVNYXggPSAwOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAKQEAgLTM1NjQsOSArMzU0Nyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJ
bmxpbmVNaW5NYXhXaWR0aCgKIAogICAgICAgICAgICAgICAgIGlmIChhdXRvV3JhcCAmJiAhc2hv
dWxkR3Jvd1RhYmxlQ2VsbEZvckltYWdlKHRoaXMsIGNoaWxkLCBuZXh0TGVhZikpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gTm93IGNoZWNrIG91ciBsaW5lLgotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9taW5XaWR0aCA8IGlubGluZU1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
bWluV2lkdGggPSBpbmxpbmVNaW47Ci0KKyAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CisgICAgICAgICAgICAgICAgICAg
IAogICAgICAgICAgICAgICAgICAgICAvLyBOb3cgc3RhcnQgYSBuZXcgbGluZS4KICAgICAgICAg
ICAgICAgICAgICAgaW5saW5lTWluID0gMDsKICAgICAgICAgICAgICAgICB9CkBAIC0zNTkyLDkg
KzM1NzQsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5lTWluTWF4V2lkdGgoCiAgICAg
ICAgICAgICAgICAgaW50IGJlZ2luTWluLCBlbmRNaW47CiAgICAgICAgICAgICAgICAgYm9vbCBi
ZWdpbldTLCBlbmRXUzsKICAgICAgICAgICAgICAgICBpbnQgYmVnaW5NYXgsIGVuZE1heDsKLSAg
ICAgICAgICAgICAgICB0LT50cmltbWVkTWluTWF4V2lkdGgoaW5saW5lTWF4LCBiZWdpbk1pbiwg
YmVnaW5XUywgZW5kTWluLCBlbmRXUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaGFzQnJlYWthYmxlQ2hhciwgaGFzQnJlYWssIGJlZ2luTWF4LCBlbmRNYXgsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTWluLCBjaGlsZE1heCwgc3Ry
aXBGcm9udFNwYWNlcyk7CisgICAgICAgICAgICAgICAgdC0+dHJpbW1lZFByZWZXaWR0aHMoaW5s
aW5lTWF4LCBiZWdpbk1pbiwgYmVnaW5XUywgZW5kTWluLCBlbmRXUywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBoYXNCcmVha2FibGVDaGFyLCBoYXNCcmVhaywgYmVnaW5N
YXgsIGVuZE1heCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE1p
biwgY2hpbGRNYXgsIHN0cmlwRnJvbnRTcGFjZXMpOwogCiAgICAgICAgICAgICAgICAgLy8gVGhp
cyB0ZXh0IG9iamVjdCBpcyBpbnNpZ25pZmljYW50IGFuZCB3aWxsIG5vdCBiZSByZW5kZXJlZC4g
IEp1c3QKICAgICAgICAgICAgICAgICAvLyBjb250aW51ZS4KQEAgLTM2MjMsMTMgKzM2MDUsMTIg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZU1pbk1heFdpZHRoKAogICAgICAgICAgICAg
ICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgYnJlYWthYmxlIGNo
YXJhY3Rlci4gIE5vdyB3ZSBuZWVkIHRvIGtub3cgaWYKICAgICAgICAgICAgICAgICAgICAgLy8g
d2Ugc3RhcnQgYW5kIGVuZCB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgIGlm
IChiZWdpbldTKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbldTKQogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIGVuZCB0aGUgY3VycmVudCBsaW5lLgotICAg
ICAgICAgICAgICAgICAgICAgICAgaWYobV9taW5XaWR0aCA8IGlubGluZU1pbikgbV9taW5XaWR0
aCA9IGlubGluZU1pbjsKLSAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5l
TWluICs9IGJlZ2luTWluOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9taW5XaWR0aCA8
IGlubGluZU1pbikgbV9taW5XaWR0aCA9IGlubGluZU1pbjsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gLT0gdGk7CiAgICAgICAgICAgICAgICAgICAg
IH0KIApAQCAtMzYzOCwyOSArMzYxOSwyNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5l
TWluTWF4V2lkdGgoCiAgICAgICAgICAgICAgICAgICAgIGlmIChlbmRXUykgewogICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgZW5kIGluIHdoaXRlc3BhY2UsIHdoaWNoIG1lYW5zIHdlIGNh
biBnbyBhaGVhZAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYW5kIGVuZCBvdXIgY3VycmVu
dCBsaW5lLgotICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9taW5XaWR0aCA8IGlubGluZU1p
bikgbV9taW5XaWR0aCA9IGlubGluZU1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWlu
UHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgaW5saW5lTWluID0gMDsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fbWluV2lk
dGggPCBpbmxpbmVNaW4pIG1fbWluV2lkdGggPSBpbmxpbmVNaW47CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IGVuZE1pbjsKICAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChoYXNC
cmVhaykgewogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggKz0gYmVnaW5NYXg7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChtX21heFdpZHRoIDwgaW5saW5lTWF4KSBtX21heFdpZHRoID0g
aW5saW5lTWF4OwotICAgICAgICAgICAgICAgICAgICBpZiAobV9tYXhXaWR0aCA8IGNoaWxkTWF4
KSBtX21heFdpZHRoID0gY2hpbGRNYXg7CisgICAgICAgICAgICAgICAgICAgIG1fbWF4UHJlZldp
ZHRoID0gbWF4KGlubGluZU1heCwgbV9tYXhQcmVmV2lkdGgpOworICAgICAgICAgICAgICAgICAg
ICBtX21heFByZWZXaWR0aCA9IG1heChjaGlsZE1heCwgbV9tYXhQcmVmV2lkdGgpOwogICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVNYXggPSBlbmRNYXg7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWF4ICs9IGNoaWxk
TWF4OwogICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGVsc2UKLSAgICAgICAgewot
ICAgICAgICAgICAgaWYobV9taW5XaWR0aCA8IGlubGluZU1pbikgbV9taW5XaWR0aCA9IGlubGlu
ZU1pbjsKLSAgICAgICAgICAgIGlmKG1fbWF4V2lkdGggPCBpbmxpbmVNYXgpIG1fbWF4V2lkdGgg
PSBpbmxpbmVNYXg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX21pblByZWZXaWR0
aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gbWF4KGlubGluZU1heCwgbV9tYXhQcmVmV2lkdGgpOwogICAgICAgICAgICAgaW5s
aW5lTWluID0gaW5saW5lTWF4ID0gMDsKICAgICAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMgPSB0
cnVlOwogICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNoaWxkID0gMDsKQEAgLTM2NzQsMTQgKzM2
NTMsMTQgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZU1pbk1heFdpZHRoKAogICAgIGlm
IChzdHlsZSgpLT5jb2xsYXBzZVdoaXRlU3BhY2UoKSkKICAgICAgICAgc3RyaXBUcmFpbGluZ1Nw
YWNlKGlubGluZU1heCwgaW5saW5lTWluLCB0cmFpbGluZ1NwYWNlQ2hpbGQpOwogICAgIAotICAg
IG1fbWluV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pbldpZHRoKTsKLSAgICBtX21heFdpZHRo
ID0gbWF4KGlubGluZU1heCwgbV9tYXhXaWR0aCk7CisgICAgbV9taW5QcmVmV2lkdGggPSBtYXgo
aW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CisgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoaW5s
aW5lTWF4LCBtX21heFByZWZXaWR0aCk7CiB9CiAKIC8vIFVzZSBhIHZlcnkgbGFyZ2UgdmFsdWUg
KGluIGVmZmVjdCBpbmZpbml0ZSkuCiAjZGVmaW5lIEJMT0NLX01BWF9XSURUSCAxNTAwMAogCi12
b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tNaW5NYXhXaWR0aCgpCit2b2lkIFJlbmRlckJsb2Nr
OjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKIHsKICAgICBib29sIG5vd3JhcCA9IHN0eWxlKCktPndo
aXRlU3BhY2UoKSA9PSBOT1dSQVA7CiAKQEAgLTM2OTcsNDkgKzM2NzYsMzUgQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y2FsY0Jsb2NrTWluTWF4V2lkdGgoKQogICAgICAgICBpZiAoY2hpbGQtPmlzRmxv
YXRpbmcoKSB8fCBjaGlsZC0+YXZvaWRzRmxvYXRzKCkpIHsKICAgICAgICAgICAgIGludCBmbG9h
dFRvdGFsV2lkdGggPSBmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aDsKICAgICAgICAg
ICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+Y2xlYXIoKSAmIENMRUZUKSB7Ci0gICAgICAgICAgICAg
ICAgbV9tYXhXaWR0aCA9IG1heChmbG9hdFRvdGFsV2lkdGgsIG1fbWF4V2lkdGgpOworICAgICAg
ICAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGZsb2F0VG90YWxXaWR0aCwgbV9tYXhQcmVm
V2lkdGgpOwogICAgICAgICAgICAgICAgIGZsb2F0TGVmdFdpZHRoID0gMDsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+Y2xlYXIoKSAmIENSSUdIVCkgewot
ICAgICAgICAgICAgICAgIG1fbWF4V2lkdGggPSBtYXgoZmxvYXRUb3RhbFdpZHRoLCBtX21heFdp
ZHRoKTsKKyAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChmbG9hdFRvdGFsV2lk
dGgsIG1fbWF4UHJlZldpZHRoKTsKICAgICAgICAgICAgICAgICBmbG9hdFJpZ2h0V2lkdGggPSAw
OwogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgTGVuZ3RoIG1sID0gY2hpbGQt
PnN0eWxlKCktPm1hcmdpbkxlZnQoKTsKLSAgICAgICAgTGVuZ3RoIG1yID0gY2hpbGQtPnN0eWxl
KCktPm1hcmdpblJpZ2h0KCk7Ci0KLSAgICAgICAgLy8gQ2FsbCBjYWxjV2lkdGggb24gdGhlIGNo
aWxkIHRvIGVuc3VyZSB0aGF0IG91ciBtYXJnaW5zIGFyZQotICAgICAgICAvLyB1cCB0byBkYXRl
LiAgVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGNoaWxkIGhhcyBhY3R1YWxs
eQotICAgICAgICAvLyBjYWxjdWxhdGVkIGl0cyBtYXJnaW5zICh3aGljaCBhcmUgY29tcHV0ZWQg
aW5zaWRlIGNhbGNXaWR0aCkuCi0gICAgICAgIGlmIChtbC5pc1BlcmNlbnQoKSB8fCBtci5pc1Bl
cmNlbnQoKSkKLSAgICAgICAgICAgIGNhbGNXaWR0aCgpOwotCiAgICAgICAgIC8vIEEgbWFyZ2lu
IGJhc2ljYWxseSBoYXMgdGhyZWUgdHlwZXM6IGZpeGVkLCBwZXJjZW50YWdlLCBhbmQgYXV0byAo
dmFyaWFibGUpLgotICAgICAgICAvLyBBdXRvIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAwIHdoZW4g
Y29tcHV0aW5nIG1pbi9tYXggd2lkdGguCisgICAgICAgIC8vIEF1dG8gYW5kIHBlcmNlbnRhZ2Ug
bWFyZ2lucyBzaW1wbHkgYmVjb21lIDAgd2hlbiBjb21wdXRpbmcgbWluL21heCB3aWR0aC4KICAg
ICAgICAgLy8gRml4ZWQgbWFyZ2lucyBjYW4gYmUgYWRkZWQgaW4gYXMgaXMuCi0gICAgICAgIC8v
IFBlcmNlbnRhZ2UgbWFyZ2lucyBhcmUgY29tcHV0ZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSB3
aWR0aCB3ZSBjYWxjdWxhdGVkIGluCi0gICAgICAgIC8vIHRoZSBjYWxjV2lkdGggY2FsbCBhYm92
ZS4gIEluIHRoaXMgY2FzZSB3ZSB1c2UgdGhlIGFjdHVhbCBjYWNoZWQgbWFyZ2luIHZhbHVlcyBv
bgotICAgICAgICAvLyB0aGUgUmVuZGVyT2JqZWN0IGl0c2VsZi4KKyAgICAgICAgTGVuZ3RoIG1s
ID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKTsKKyAgICAgICAgTGVuZ3RoIG1yID0gY2hp
bGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCk7CiAgICAgICAgIGludCBtYXJnaW4gPSAwLCBtYXJn
aW5MZWZ0ID0gMCwgbWFyZ2luUmlnaHQgPSAwOwogICAgICAgICBpZiAobWwuaXNGaXhlZCgpKQog
ICAgICAgICAgICAgbWFyZ2luTGVmdCArPSBtbC52YWx1ZSgpOwotICAgICAgICBlbHNlIGlmICht
bC5pc1BlcmNlbnQoKSkKLSAgICAgICAgICAgIG1hcmdpbkxlZnQgKz0gY2hpbGQtPm1hcmdpbkxl
ZnQoKTsKICAgICAgICAgaWYgKG1yLmlzRml4ZWQoKSkKICAgICAgICAgICAgIG1hcmdpblJpZ2h0
ICs9IG1yLnZhbHVlKCk7Ci0gICAgICAgIGVsc2UgaWYgKG1yLmlzUGVyY2VudCgpKQotICAgICAg
ICAgICAgbWFyZ2luUmlnaHQgKz0gY2hpbGQtPm1hcmdpblJpZ2h0KCk7CiAgICAgICAgIG1hcmdp
biA9IG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodDsKIAotICAgICAgICBpbnQgdyA9IGNoaWxkLT5t
aW5XaWR0aCgpICsgbWFyZ2luOwotICAgICAgICBpZiAobV9taW5XaWR0aCA8IHcpIG1fbWluV2lk
dGggPSB3OworICAgICAgICBpbnQgdyA9IGNoaWxkLT5taW5QcmVmV2lkdGgoKSArIG1hcmdpbjsK
KyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgodywgbV9taW5QcmVmV2lkdGgpOwogICAgICAg
ICAKICAgICAgICAgLy8gSUUgaWdub3JlcyB0YWJsZXMgZm9yIGNhbGN1bGF0aW9uIG9mIG5vd3Jh
cC4gTWFrZXMgc29tZSBzZW5zZS4KLSAgICAgICAgaWYgKG5vd3JhcCAmJiAhY2hpbGQtPmlzVGFi
bGUoKSAmJiBtX21heFdpZHRoIDwgdykKLSAgICAgICAgICAgIG1fbWF4V2lkdGggPSB3OworICAg
ICAgICBpZiAobm93cmFwICYmICFjaGlsZC0+aXNUYWJsZSgpKQorICAgICAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtYXgodywgbV9tYXhQcmVmV2lkdGgpOwogCi0gICAgICAgIHcgPSBjaGlsZC0+
bWF4V2lkdGgoKSArIG1hcmdpbjsKKyAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSAr
IG1hcmdpbjsKIAogICAgICAgICBpZiAoIWNoaWxkLT5pc0Zsb2F0aW5nKCkpIHsKICAgICAgICAg
ICAgIGlmIChjaGlsZC0+YXZvaWRzRmxvYXRzKCkpIHsKQEAgLTM3NDgsMTEgKzM3MTMsMTEgQEAg
dm9pZCBSZW5kZXJCbG9jazo6Y2FsY0Jsb2NrTWluTWF4V2lkdGgoKQogICAgICAgICAgICAgICAg
IC8vIGlzIHNtYWxsZXIgdGhhbiB0aGUgZmxvYXQgd2lkdGguCiAgICAgICAgICAgICAgICAgaW50
IG1heExlZnQgPSBtYXJnaW5MZWZ0ID4gMCA/IG1heChmbG9hdExlZnRXaWR0aCwgbWFyZ2luTGVm
dCkgOiBmbG9hdExlZnRXaWR0aCArIG1hcmdpbkxlZnQ7CiAgICAgICAgICAgICAgICAgaW50IG1h
eFJpZ2h0ID0gbWFyZ2luUmlnaHQgPiAwID8gbWF4KGZsb2F0UmlnaHRXaWR0aCwgbWFyZ2luUmln
aHQpIDogZmxvYXRSaWdodFdpZHRoICsgbWFyZ2luUmlnaHQ7Ci0gICAgICAgICAgICAgICAgdyA9
IGNoaWxkLT5tYXhXaWR0aCgpICsgbWF4TGVmdCArIG1heFJpZ2h0OworICAgICAgICAgICAgICAg
IHcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXhMZWZ0ICsgbWF4UmlnaHQ7CiAgICAgICAg
ICAgICAgICAgdyA9IG1heCh3LCBmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgbV9tYXhXaWR0
aCA9IG1heChmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhXaWR0aCk7Cisg
ICAgICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoZmxvYXRMZWZ0V2lkdGggKyBmbG9h
dFJpZ2h0V2lkdGgsIG1fbWF4UHJlZldpZHRoKTsKICAgICAgICAgICAgIGZsb2F0TGVmdFdpZHRo
ID0gZmxvYXRSaWdodFdpZHRoID0gMDsKICAgICAgICAgfQogICAgICAgICAKQEAgLTM3NjIsOCAr
MzcyNyw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9ja01pbk1heFdpZHRoKCkKICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBmbG9hdFJpZ2h0V2lkdGggKz0gdzsKICAgICAg
ICAgfQotICAgICAgICBlbHNlIGlmIChtX21heFdpZHRoIDwgdykKLSAgICAgICAgICAgIG1fbWF4
V2lkdGggPSB3OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1h
eCh3LCBtX21heFByZWZXaWR0aCk7CiAKICAgICAgICAgLy8gQSB2ZXJ5IHNwZWNpZmljIFdpbklF
IHF1aXJrLgogICAgICAgICAvLyBFeGFtcGxlOgpAQCAtMzc3OSwyMiArMzc0NCwyMiBAQCB2b2lk
IFJlbmRlckJsb2NrOjpjYWxjQmxvY2tNaW5NYXhXaWR0aCgpCiAgICAgICAgIC8vIFdlIGNhbiBh
Y2hpZXZlIHRoaXMgZWZmZWN0IGJ5IG1ha2luZyB0aGUgbWF4d2lkdGggb2YgYmxvY2tzIHRoYXQg
Y29udGFpbiB0YWJsZXMKICAgICAgICAgLy8gd2l0aCBwZXJjZW50YWdlIHdpZHRocyBiZSBpbmZp
bml0ZSAoYXMgbG9uZyBhcyB0aGV5IGFyZSBub3QgaW5zaWRlIGEgdGFibGUgY2VsbCkuCiAgICAg
ICAgIGlmIChzdHlsZSgpLT5odG1sSGFja3MoKSAmJiBjaGlsZC0+c3R5bGUoKS0+d2lkdGgoKS5p
c1BlcmNlbnQoKSAmJgotICAgICAgICAgICAgIWlzVGFibGVDZWxsKCkgJiYgY2hpbGQtPmlzVGFi
bGUoKSAmJiBtX21heFdpZHRoIDwgQkxPQ0tfTUFYX1dJRFRIKSB7CisgICAgICAgICAgICAhaXNU
YWJsZUNlbGwoKSAmJiBjaGlsZC0+aXNUYWJsZSgpICYmIG1fbWF4UHJlZldpZHRoIDwgQkxPQ0tf
TUFYX1dJRFRIKSB7CiAgICAgICAgICAgICBSZW5kZXJCbG9jayogY2IgPSBjb250YWluaW5nQmxv
Y2soKTsKICAgICAgICAgICAgIHdoaWxlICghY2ItPmlzUmVuZGVyVmlldygpICYmICFjYi0+aXNU
YWJsZUNlbGwoKSkKICAgICAgICAgICAgICAgICBjYiA9IGNiLT5jb250YWluaW5nQmxvY2soKTsK
ICAgICAgICAgICAgIGlmICghY2ItPmlzVGFibGVDZWxsKCkpCi0gICAgICAgICAgICAgICAgbV9t
YXhXaWR0aCA9IEJMT0NLX01BWF9XSURUSDsKKyAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0
aCA9IEJMT0NLX01BWF9XSURUSDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICB9CiAKICAgICAvLyBBbHdheXMgbWFrZSBzdXJl
IHRoZXNlIHZhbHVlcyBhcmUgbm9uLW5lZ2F0aXZlLgotICAgIG1fbWluV2lkdGggPSBtYXgoMCwg
bV9taW5XaWR0aCk7Ci0gICAgbV9tYXhXaWR0aCA9IG1heCgwLCBtX21heFdpZHRoKTsKKyAgICBt
X21pblByZWZXaWR0aCA9IG1heCgwLCBtX21pblByZWZXaWR0aCk7CisgICAgbV9tYXhQcmVmV2lk
dGggPSBtYXgoMCwgbV9tYXhQcmVmV2lkdGgpOwogCi0gICAgbV9tYXhXaWR0aCA9IG1heChmbG9h
dExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhXaWR0aCk7CisgICAgbV9tYXhQcmVm
V2lkdGggPSBtYXgoZmxvYXRMZWZ0V2lkdGggKyBmbG9hdFJpZ2h0V2lkdGgsIG1fbWF4UHJlZldp
ZHRoKTsKIH0KIAogYm9vbCBSZW5kZXJCbG9jazo6aGFzTGluZUlmRW1wdHkoKSBjb25zdApJbmRl
eDogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIwMyw5ICsyMDMsOSBAQCBwdWJsaWM6CiAgICAgLy8gQmxvY2sgZmxv
d3Mgc3ViY2xhc3MgYXZhaWxhYmxlV2lkdGggdG8gaGFuZGxlIG11bHRpIGNvbHVtbiBsYXlvdXQg
KHNocmlua2luZyB0aGUgd2lkdGggYXZhaWxhYmxlIHRvIGNoaWxkcmVuIHdoZW4gbGF5aW5nIG91
dC4pCiAgICAgdmlydHVhbCBpbnQgYXZhaWxhYmxlV2lkdGgoKSBjb25zdDsKICAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7Ci0gICAgdm9pZCBjYWxjSW5saW5lTWluTWF4
V2lkdGgoKTsKLSAgICB2b2lkIGNhbGNCbG9ja01pbk1heFdpZHRoKCk7CisgICAgdmlydHVhbCB2
b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdm9pZCBjYWxjSW5saW5lUHJlZldpZHRocygpOwor
ICAgIHZvaWQgY2FsY0Jsb2NrUHJlZldpZHRocygpOwogCiAgICAgdmlydHVhbCBpbnQgZ2V0QmFz
ZWxpbmVPZkZpcnN0TGluZUJveCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGdldEJhc2VsaW5l
T2ZMYXN0TGluZUJveCgpIGNvbnN0OwpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAv
LyBPYnRhaW5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBibG9jayAoaW5jbHVkaW5nIHRoaXMgYmxv
Y2spIHRoYXQgY29udHJpYnV0ZXMgYSBmaXJzdC1saW5lIHN0eWxlIHRvIG91ciBpbmxpbmUKICAg
ICAvLyBjaGlsZHJlbi4KICAgICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygp
IGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGaXJzdExldHRlcigpOworICAgIHZvaWQg
dXBkYXRlRmlyc3RMZXR0ZXIoKTsKIAogICAgIGJvb2wgaW5Sb290QmxvY2tDb250ZXh0KCkgY29u
c3Q7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCb3guY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJCb3guY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJC
b3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw4ICs2NCw4IEBAIFJlbmRlckJveDo6UmVuZGVy
Qm94KE5vZGUqIG5vZGUpCiAgICAgLCBtX21hcmdpblJpZ2h0KDApCiAgICAgLCBtX21hcmdpblRv
cCgwKQogICAgICwgbV9tYXJnaW5Cb3R0b20oMCkKLSAgICAsIG1fbWluV2lkdGgoLTEpCi0gICAg
LCBtX21heFdpZHRoKC0xKQorICAgICwgbV9taW5QcmVmV2lkdGgoLTEpCisgICAgLCBtX21heFBy
ZWZXaWR0aCgtMSkKICAgICAsIG1fbGF5ZXIoMCkKICAgICAsIG1faW5saW5lQm94V3JhcHBlcigw
KQogewpAQCAtMTY2LDYgKzE2NiwyMiBAQCB2b2lkIFJlbmRlckJveDo6ZGVzdHJveSgpCiAgICAg
ICAgIGxheWVyLT5kZXN0cm95KGFyZW5hKTsKIH0KIAoraW50IFJlbmRlckJveDo6bWluUHJlZldp
ZHRoKCkgY29uc3QKK3sKKyAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCisgICAgICAgIGNvbnN0
X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNhbGNQcmVmV2lkdGhzKCk7CisgICAgICAgIAorICAg
IHJldHVybiBtX21pblByZWZXaWR0aDsKK30KKworaW50IFJlbmRlckJveDo6bWF4UHJlZldpZHRo
KCkgY29uc3QKK3sKKyAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCisgICAgICAgIGNvbnN0X2Nh
c3Q8UmVuZGVyQm94Kj4odGhpcyktPmNhbGNQcmVmV2lkdGhzKCk7CisgICAgICAgIAorICAgIHJl
dHVybiBtX21heFByZWZXaWR0aDsKK30KKwogaW50IFJlbmRlckJveDo6b3ZlcnJpZGVTaXplKCkg
Y29uc3QKIHsKICAgICBpZiAoIWhhc092ZXJyaWRlU2l6ZSgpKQpAQCAtMTA2NCw3ICsxMDgwLDcg
QEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1h
cmdpbkxlZnQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAgICAgICAgbV9tYXJnaW5S
aWdodCA9IG1hcmdpblJpZ2h0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAgICAgICAg
IGlmICh0cmVhdEFzUmVwbGFjZWQpCi0gICAgICAgICAgICBtX3dpZHRoID0gbWF4KHdpZHRoLnZh
bHVlKCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBh
ZGRpbmdSaWdodCgpLCBtX21pbldpZHRoKTsKKyAgICAgICAgICAgIG1fd2lkdGggPSBtYXgod2lk
dGgudmFsdWUoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgp
ICsgcGFkZGluZ1JpZ2h0KCksIG1pblByZWZXaWR0aCgpKTsKIAogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTA5Myw4ICsxMTA5LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV93aWR0aCA8IG1fbWluV2lkdGggJiYgc3RyZXRj
aGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpKSB7Ci0gICAgICAgIG1fd2lkdGggPSBtX21pbldpZHRo
OworICAgIGlmIChzdHJldGNoZXNUb01pbkludHJpbnNpY1dpZHRoKCkpIHsKKyAgICAgICAgbV93
aWR0aCA9IG1heChtX3dpZHRoLCBtaW5QcmVmV2lkdGgoKSk7CiAgICAgICAgIHdpZHRoID0gTGVu
Z3RoKG1fd2lkdGgsIEZpeGVkKTsKICAgICB9CiAKQEAgLTExMzUsOCArMTE1MSw4IEBAIGludCBS
ZW5kZXJCb3g6OmNhbGNXaWR0aFVzaW5nKFdpZHRoVHlwZSAKICAgICAgICAgICAgIHdpZHRoID0g
Y3cgLSBtYXJnaW5MZWZ0IC0gbWFyZ2luUmlnaHQ7CiAKICAgICAgICAgaWYgKHNpemVzVG9JbnRy
aW5zaWNXaWR0aCh3aWR0aFR5cGUpKSB7Ci0gICAgICAgICAgICB3aWR0aCA9IG1heCh3aWR0aCwg
bV9taW5XaWR0aCk7Ci0gICAgICAgICAgICB3aWR0aCA9IG1pbih3aWR0aCwgbV9tYXhXaWR0aCk7
CisgICAgICAgICAgICB3aWR0aCA9IG1heCh3aWR0aCwgbWluUHJlZldpZHRoKCkpOworICAgICAg
ICAgICAgd2lkdGggPSBtaW4od2lkdGgsIG1heFByZWZXaWR0aCgpKTsKICAgICAgICAgfQogICAg
IH0gZWxzZQogICAgICAgICB3aWR0aCA9IGNhbGNCb3JkZXJCb3hXaWR0aCh3LmNhbGNWYWx1ZShj
dykpOwpAQCAtMTY3MSw4ICsxNjg3LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhv
cml6b250YWwoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fd2lkdGggPCBtX21pbldp
ZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nICYmIHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgo
KSkKLSAgICAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhMZW5ndGgobV9taW5XaWR0
aCAtIGJvcmRlcnNQbHVzUGFkZGluZywgRml4ZWQpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVy
RGlyZWN0aW9uLAorICAgIGlmIChzdHJldGNoZXNUb01pbkludHJpbnNpY1dpZHRoKCkgJiYgbV93
aWR0aCA8IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nKQorICAgICAgICBjYWxj
QWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExlbmd0aChtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQ
bHVzUGFkZGluZywgRml4ZWQpLCBjb250YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoLCBib3Jk
ZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVm
dCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0LAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fd2lkdGgsIG1fbWFyZ2luTGVmdCwgbV9tYXJnaW5SaWdodCwgbV94
KTsKQEAgLTE4MDUsOCArMTgyMSw4IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jp
em9udGFsVmEKICAgICAgICAgICAgIGludCByaWdodFZhbHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNv
bnRhaW5lcldpZHRoKTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGl0IGJlIGJldHRl
ciB0byBoYXZlIHNocmluay10by1maXQgaW4gb25lIHN0ZXA/Ci0gICAgICAgICAgICBpbnQgcHJl
ZmVycmVkV2lkdGggPSBtX21heFdpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwotICAgICAgICAg
ICAgaW50IHByZWZlcnJlZE1pbldpZHRoID0gbV9taW5XaWR0aCAtIGJvcmRlcnNQbHVzUGFkZGlu
ZzsKKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1heFByZWZXaWR0aCgpIC0gYm9y
ZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgaW50IHByZWZlcnJlZE1pbldpZHRoID0gbWlu
UHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7CiAgICAgICAgICAgICBpbnQgYXZhaWxh
YmxlV2lkdGggPSBhdmFpbGFibGVTcGFjZSAtIHJpZ2h0VmFsdWU7CiAgICAgICAgICAgICB3aWR0
aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxhYmxlV2lkdGgpLCBwcmVm
ZXJyZWRXaWR0aCk7CiAgICAgICAgICAgICBsZWZ0VmFsdWUgPSBhdmFpbGFibGVTcGFjZSAtICh3
aWR0aFZhbHVlICsgcmlnaHRWYWx1ZSk7CkBAIC0xODE1LDggKzE4MzEsOCBAQCB2b2lkIFJlbmRl
ckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhCiAgICAgICAgICAgICBsZWZ0VmFsdWUgPSBs
ZWZ0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIEZJWE1FOiB3
b3VsZCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBzaHJpbmstdG8tZml0IGluIG9uZSBzdGVwPwotICAg
ICAgICAgICAgaW50IHByZWZlcnJlZFdpZHRoID0gbV9tYXhXaWR0aCAtIGJvcmRlcnNQbHVzUGFk
ZGluZzsKLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1fbWluV2lkdGggLSBi
b3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtYXhQ
cmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBwcmVmZXJy
ZWRNaW5XaWR0aCA9IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwogICAgICAg
ICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSBsZWZ0VmFsdWU7CiAg
ICAgICAgICAgICB3aWR0aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZhaWxh
YmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAobGVmdElzQXV0
byAmJiAhd2lkdGguaXNBdXRvKCkgJiYgIXJpZ2h0SXNBdXRvKSB7CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZpc2lv
biAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNDIs
OCArNDIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCi0gICAg
dmlydHVhbCBpbnQgbWluV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21pbldpZHRoOyB9Ci0gICAg
dmlydHVhbCBpbnQgbWF4V2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heFdpZHRoOyB9CisgICAg
dmlydHVhbCBpbnQgbWluUHJlZldpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWF4UHJl
ZldpZHRoKCkgY29uc3Q7CiAKICAgICB2aXJ0dWFsIGludCBvdmVycmlkZVNpemUoKSBjb25zdDsK
ICAgICB2aXJ0dWFsIGludCBvdmVycmlkZVdpZHRoKCkgY29uc3Q7CkBAIC0xOTUsMTcgKzE5NSwx
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgaW50IG1fbWFyZ2luVG9wOwogICAgIGludCBtX21hcmdpbkJv
dHRvbTsKIAotICAgIC8vIFRoZSBtaW5pbXVtIHdpZHRoIHRoZSBlbGVtZW50IG5lZWRzIHRvIGJl
IGFibGUgdG8gcmVuZGVyCi0gICAgLy8gaXRzIGNvbnRlbnQgd2l0aG91dCBjbGlwcGluZy4KLSAg
ICBpbnQgbV9taW5XaWR0aDsKLSAgICAvLyBUaGUgbWF4aW11bSB3aWR0aCB0aGUgZWxlbWVudCBj
YW4gZmlsbCBob3Jpem9udGFsbHkKLSAgICAvLyAodGhlIHdpZHRoIG9mIHRoZSBlbGVtZW50IHdp
dGggbGluZSBicmVha2luZyBkaXNhYmxlZCkuCi0gICAgaW50IG1fbWF4V2lkdGg7Ci0KLSAgICAv
LyBBIHBvaW50ZXIgdG8gb3VyIGxheWVyIGlmIHdlIGhhdmUgb25lLiAgQ3VycmVudGx5IG9ubHkg
cG9zaXRpb25lZCBlbGVtZW50cwotICAgIC8vIGFuZCBmbG9hdGVycyBoYXZlIGxheWVycy4KKyAg
ICAvLyBUaGUgcHJlZmVycmVkIHdpZHRoIG9mIHRoZSBlbGVtZW50IGlmIGl0IHdlcmUgdG8gYnJl
YWsgaXRzIGxpbmVzIGF0IGV2ZXJ5IHBvc3NpYmxlIG9wcG9ydHVuaXR5LgorICAgIGludCBtX21p
blByZWZXaWR0aDsKKyAgICAKKyAgICAvLyBUaGUgcHJlZmVycmVkIHdpZHRoIG9mIHRoZSBlbGVt
ZW50IGlmIGl0IG5ldmVyIGJyZWFrcyBhbnkgbGluZXMgYXQgYWxsLgorICAgIGludCBtX21heFBy
ZWZXaWR0aDsKKworcHVibGljOgorICAgIC8vIEEgcG9pbnRlciB0byBvdXIgbGF5ZXIgaWYgd2Ug
aGF2ZSBvbmUuICBFeHBvc2UgdGhpcyBzbyB0aGF0IGhvdCBjb2RlIGNhbiBhdm9pZCB0aGUgUmVu
ZGVyT2JqZWN0IHZpcnR1YWwgZnVuY3Rpb24KKyAgICAvLyBjYWxsLgogICAgIFJlbmRlckxheWVy
KiBtX2xheWVyOwogCitwcm90ZWN0ZWQ6CiAgICAgLy8gRm9yIGlubGluZSByZXBsYWNlZCBlbGVt
ZW50cywgdGhlIGlubGluZSBib3ggdGhhdCBvd25zIHVzLgogICAgIElubGluZUJveCogbV9pbmxp
bmVCb3hXcmFwcGVyOwogfTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCShyZXZpc2lvbiAyMDk5
NykKKysrIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NTYsMjIgKzE1NiwyMiBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQoUmVuZGVyT2Jq
CiAgICAgfQogfQogCi1SZW5kZXJPYmplY3QqIFJlbmRlckNvbnRhaW5lcjo6cmVtb3ZlQ2hpbGRO
b2RlKFJlbmRlck9iamVjdCogb2xkQ2hpbGQpCitSZW5kZXJPYmplY3QqIFJlbmRlckNvbnRhaW5l
cjo6cmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogb2xkQ2hpbGQsIGJvb2wgZnVsbFJlbW92
ZSkKIHsKICAgICBBU1NFUlQob2xkQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOwogCiAgICAgLy8g
U28gdGhhdCB3ZSdsbCBnZXQgdGhlIGFwcHJvcHJpYXRlIGRpcnR5IGJpdCBzZXQgKGVpdGhlciB0
aGF0IGEgbm9ybWFsIGZsb3cgY2hpbGQgZ290IHlhbmtlZCBvcgogICAgIC8vIHRoYXQgYSBwb3Np
dGlvbmVkIGNoaWxkIGdvdCB5YW5rZWQpLiAgV2UgYWxzbyByZXBhaW50LCBzbyB0aGF0IHRoZSBh
cmVhIGV4cG9zZWQgd2hlbiB0aGUgY2hpbGQKICAgICAvLyBkaXNhcHBlYXJzIGdldHMgcmVwYWlu
dGVkIHByb3Blcmx5LgotICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7Ci0gICAg
ICAgIG9sZENoaWxkLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIGlmICgh
ZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpICYmIGZ1bGxSZW1vdmUpIHsKKyAgICAgICAgb2xkQ2hp
bGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICBvbGRDaGls
ZC0+cmVwYWludCgpOwogICAgIH0KICAgICAgICAgCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxpbmUg
Ym94IHdyYXBwZXIsIGRlbGV0ZSBpdC4KICAgICBvbGRDaGlsZC0+ZGVsZXRlTGluZUJveFdyYXBw
ZXIoKTsKIAotICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CisgICAgaWYgKCFk
b2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgZnVsbFJlbW92ZSkgewogICAgICAgICAvLyBpZiB3
ZSByZW1vdmUgdmlzaWJsZSBjaGlsZCBmcm9tIGFuIGludmlzaWJsZSBwYXJlbnQsIHdlIGRvbid0
IGtub3cgdGhlIGxheWVyIHZpc2liaWxpdHkgYW55IG1vcmUKICAgICAgICAgUmVuZGVyTGF5ZXIq
IGxheWVyID0gMDsKICAgICAgICAgaWYgKG1fc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxF
ICYmIG9sZENoaWxkLT5zdHlsZSgpLT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiAhb2xkQ2hp
bGQtPmxheWVyKCkpIHsKQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6
dXBkYXRlUHNldWRvQ2hpbGRGCiB9CiAKIAotdm9pZCBSZW5kZXJDb250YWluZXI6OmFwcGVuZENo
aWxkTm9kZShSZW5kZXJPYmplY3QqIG5ld0NoaWxkKQordm9pZCBSZW5kZXJDb250YWluZXI6OmFw
cGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBib29sIGZ1bGxBcHBlbmQpCiB7
CiAgICAgQVNTRVJUKG5ld0NoaWxkLT5wYXJlbnQoKSA9PSAwKTsKICAgICBBU1NFUlQoIWlzQmxv
Y2tGbG93KCkgfHwgKCFuZXdDaGlsZC0+aXNUYWJsZVNlY3Rpb24oKSAmJiAhbmV3Q2hpbGQtPmlz
VGFibGVSb3coKSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVDZWxsKCkpKTsKQEAgLTM5MSwzMyArMzkx
LDM1IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphcHBlbmRDaGlsZE5vZGUoUmUKIAogICAgIG1f
bGFzdENoaWxkID0gbmV3Q2hpbGQ7CiAgICAgCi0gICAgLy8gS2VlcCBvdXIgbGF5ZXIgaGllcmFy
Y2h5IHVwZGF0ZWQuICBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHdlIGRvbid0
IGhhdmUgYW55IGNoaWxkcmVuCi0gICAgLy8gYW5kIGRvbid0IGhhdmUgYSBsYXllciBhdHRhY2hl
ZCB0byBvdXJzZWx2ZXMuCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gMDsKLSAgICBpZiAobmV3
Q2hpbGQtPmZpcnN0Q2hpbGQoKSB8fCBuZXdDaGlsZC0+bGF5ZXIoKSkgewotICAgICAgICBsYXll
ciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIG5ld0NoaWxkLT5hZGRMYXllcnMobGF5ZXIs
IG5ld0NoaWxkKTsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2libGUg
YnV0IHRoaXMgb2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZpc2li
bGUgY29udGVudAotICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUgZHJhd24gYW5kIGxheWVyIHZpc2li
aWxpdHkgb3B0aW1pemF0aW9uIGNhbid0IGJlIHVzZWQKLSAgICBpZiAoc3R5bGUoKS0+dmlzaWJp
bGl0eSgpICE9IFZJU0lCTEUgJiYgbmV3Q2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBW
SVNJQkxFICYmICFuZXdDaGlsZC0+bGF5ZXIoKSkgewotICAgICAgICBpZiAoIWxheWVyKSBsYXll
ciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGxheWVyLT5zZXRIYXNWaXNpYmxlQ29udGVu
dCh0cnVlKTsKKyAgICBpZiAoZnVsbEFwcGVuZCkgeworICAgICAgICAvLyBLZWVwIG91ciBsYXll
ciBoaWVyYXJjaHkgdXBkYXRlZC4gIE9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUg
d2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4KKyAgICAgICAgLy8gYW5kIGRvbid0IGhhdmUgYSBs
YXllciBhdHRhY2hlZCB0byBvdXJzZWx2ZXMuCisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9
IDA7CisgICAgICAgIGlmIChuZXdDaGlsZC0+Zmlyc3RDaGlsZCgpIHx8IG5ld0NoaWxkLT5sYXll
cigpKSB7CisgICAgICAgICAgICBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgICAgICAg
ICBuZXdDaGlsZC0+YWRkTGF5ZXJzKGxheWVyLCBuZXdDaGlsZCk7CisgICAgICAgIH0KKworICAg
ICAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2libGUgYnV0IHRoaXMgb2JqZWN0IHdhcyBu
b3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZpc2libGUgY29udGVudAorICAgICAgICAv
LyB0aGF0IG5lZWRzIHRvIGJlIGRyYXduIGFuZCBsYXllciB2aXNpYmlsaXR5IG9wdGltaXphdGlv
biBjYW4ndCBiZSB1c2VkCisgICAgICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklT
SUJMRSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgIW5l
d0NoaWxkLT5sYXllcigpKSB7CisgICAgICAgICAgICBpZiAoIWxheWVyKSBsYXllciA9IGVuY2xv
c2luZ0xheWVyKCk7CisgICAgICAgICAgICBsYXllci0+c2V0SGFzVmlzaWJsZUNvbnRlbnQodHJ1
ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2hpbGQtPmlzRmxvYXRp
bmdPclBvc2l0aW9uZWQoKSAmJiBjaGlsZHJlbklubGluZSgpKQorICAgICAgICAgICAgZGlydHlM
aW5lc0Zyb21DaGFuZ2VkQ2hpbGQobmV3Q2hpbGQpOwogICAgIH0KLSAgICAKLSAgICBuZXdDaGls
ZC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsgLy8gR29lcyB1cCB0aGUgY29udGFp
bmluZyBibG9jayBoaWVyYXJjaHkuCisKKyAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGllcmFy
Y2h5LgogICAgIGlmICghbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpKQogICAgICAgICBzZXRDaGls
ZE5lZWRzTGF5b3V0KHRydWUpOyAvLyBXZSBtYXkgc3VwcGx5IHRoZSBzdGF0aWMgcG9zaXRpb24g
Zm9yIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgY2hpbGQuCiAgICAgCi0gICAgaWYgKCFuZXdDaGls
ZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAg
IGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKG5ld0NoaWxkKTsKLSAgICAKICAgICBpZiAoQVhP
YmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+
YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVy
Q29udGFpbmVyOjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2Jq
ZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9vbCBmdWxs
SW5zZXJ0KQogewogICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKICAgICAgICAgYXBwZW5kQ2hpbGRO
b2RlKGNoaWxkKTsKQEAgLTQ0MiwyOCArNDQ0LDMxIEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjpp
bnNlcnRDaGlsZE5vZGUoUmUKIAogICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CiAgICAgCi0g
ICAgLy8gS2VlcCBvdXIgbGF5ZXIgaGllcmFyY2h5IHVwZGF0ZWQuICBPcHRpbWl6ZSBmb3IgdGhl
IGNvbW1vbiBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgYW55IGNoaWxkcmVuCi0gICAgLy8gYW5k
IGRvbid0IGhhdmUgYSBsYXllciBhdHRhY2hlZCB0byBvdXJzZWx2ZXMuCi0gICAgUmVuZGVyTGF5
ZXIqIGxheWVyID0gMDsKLSAgICBpZiAoY2hpbGQtPmZpcnN0Q2hpbGQoKSB8fCBjaGlsZC0+bGF5
ZXIoKSkgewotICAgICAgICBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGNoaWxk
LT5hZGRMYXllcnMobGF5ZXIsIGNoaWxkKTsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgbmV3IGNo
aWxkIGlzIHZpc2libGUgYnV0IHRoaXMgb2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxheWVyIGl0
IGhhcyBzb21lIHZpc2libGUgY29udGVudAotICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUgZHJhd24g
YW5kIGxheWVyIHZpc2liaWxpdHkgb3B0aW1pemF0aW9uIGNhbid0IGJlIHVzZWQKLSAgICBpZiAo
c3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgJiYgY2hpbGQtPnN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBWSVNJQkxFICYmICFjaGlsZC0+bGF5ZXIoKSkgewotICAgICAgICBpZiAoIWxh
eWVyKSBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGxheWVyLT5zZXRIYXNWaXNp
YmxlQ29udGVudCh0cnVlKTsKKyAgICBpZiAoZnVsbEluc2VydCkgeworICAgICAgICAvLyBLZWVw
IG91ciBsYXllciBoaWVyYXJjaHkgdXBkYXRlZC4gIE9wdGltaXplIGZvciB0aGUgY29tbW9uIGNh
c2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4KKyAgICAgICAgLy8gYW5kIGRvbid0
IGhhdmUgYSBsYXllciBhdHRhY2hlZCB0byBvdXJzZWx2ZXMuCisgICAgICAgIFJlbmRlckxheWVy
KiBsYXllciA9IDA7CisgICAgICAgIGlmIChjaGlsZC0+Zmlyc3RDaGlsZCgpIHx8IGNoaWxkLT5s
YXllcigpKSB7CisgICAgICAgICAgICBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgICAg
ICAgICBjaGlsZC0+YWRkTGF5ZXJzKGxheWVyLCBjaGlsZCk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2libGUgYnV0IHRoaXMgb2JqZWN0IHdhcyBub3Qs
IHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZpc2libGUgY29udGVudAorICAgICAgICAvLyB0
aGF0IG5lZWRzIHRvIGJlIGRyYXduIGFuZCBsYXllciB2aXNpYmlsaXR5IG9wdGltaXphdGlvbiBj
YW4ndCBiZSB1c2VkCisgICAgICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSAmJiBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgIWNoaWxkLT5s
YXllcigpKSB7CisgICAgICAgICAgICBpZiAoIWxheWVyKSBsYXllciA9IGVuY2xvc2luZ0xheWVy
KCk7CisgICAgICAgICAgICBsYXllci0+c2V0SGFzVmlzaWJsZUNvbnRlbnQodHJ1ZSk7CisgICAg
ICAgIH0KKworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNo
aWxkcmVuSW5saW5lKCkpCisgICAgICAgICAgICBkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChj
aGlsZCk7CiAgICAgfQogCi0gICAgY2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxj
KCk7CisgICAgY2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAg
IGlmICghbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpKQogICAgICAgICBzZXRDaGlsZE5lZWRzTGF5
b3V0KHRydWUpOyAvLyBXZSBtYXkgc3VwcGx5IHRoZSBzdGF0aWMgcG9zaXRpb24gZm9yIGFuIGFi
c29sdXRlIHBvc2l0aW9uZWQgY2hpbGQuCiAgICAgCi0gICAgaWYgKCFjaGlsZC0+aXNGbG9hdGlu
ZygpICYmIGNoaWxkcmVuSW5saW5lKCkpCi0gICAgICAgIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENo
aWxkKGNoaWxkKTsKLSAgICAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVu
YWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNo
YW5nZWQodGhpcyk7CiB9CkBAIC00NzEsNyArNDc2LDYgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6
Omluc2VydENoaWxkTm9kZShSZQogdm9pZCBSZW5kZXJDb250YWluZXI6OmxheW91dCgpCiB7CiAg
ICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAog
ICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7CiAgICAgd2hpbGUgKGNoaWxk
KSB7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9S
ZW5kZXJDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDMsMTIgKzQzLDE2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogICAgIHZvaWQgZGVzdHJveUxlZnRvdmVy
Q2hpbGRyZW4oKTsKIAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUo
UmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJP
YmplY3QqKTsKLSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCog
Y2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlKTsKLQorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0
KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsUmVtb3ZlID0gdHJ1ZSk7
CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqLCBib29sIGZ1
bGxBcHBlbmQgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRl
ck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlLCBib29sIGZ1bGxJbnNlcnQgPSB0
cnVlKTsKKyAgICAKKyAgICAvLyBEZXNpZ25lZCBmb3Igc3BlZWQuICBEb24ndCB3YXN0ZSB0aW1l
IGRvaW5nIGEgYnVuY2ggb2Ygd29yayBsaWtlIGxheWVyIHVwZGF0aW5nIGFuZCByZXBhaW50aW5n
IHdoZW4gd2Uga25vdyB0aGF0IG91cgorICAgIC8vIGNoYW5nZSBpbiBwYXJlbnRhZ2UgaXMgbm90
IGdvaW5nIHRvIGFmZmVjdCBhbnl0aGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUNoaWxkTm9k
ZShSZW5kZXJPYmplY3QqIGNoaWxkKSB7IGFwcGVuZENoaWxkTm9kZShyZW1vdmVDaGlsZE5vZGUo
Y2hpbGQsIGZhbHNlKSwgZmFsc2UpOyB9CisgICAgCiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgp
OwotICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKSB7IHNldE1pbk1heEtub3duKHRy
dWUpOyB9CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCkgeyBzZXRQcmVmV2lkdGhz
RGlydHkoZmFsc2UpOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1v
dXNCb3hlcygpOwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDEwICsyNDQs
MTcgQEAgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBSZW5kZXJDb3VudGVyOjpvcgogICAgIHJldHVy
biB0ZXh0LmltcGwoKTsKIH0KIAotdm9pZCBSZW5kZXJDb3VudGVyOjpjYWxjTWluTWF4V2lkdGgo
KQordm9pZCBSZW5kZXJDb3VudGVyOjpkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQsIGJv
b2wgZHVtbXkpCit7CisgICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQorICAgICAgICBjYWxjUHJl
ZldpZHRocygwKTsKKyAgICBSZW5kZXJUZXh0OjpkaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0LCBk
dW1teSk7Cit9CisKK3ZvaWQgUmVuZGVyQ291bnRlcjo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWQp
CiB7CiAgICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKLSAgICBSZW5kZXJUZXh0
OjpjYWxjTWluTWF4V2lkdGgoKTsKKyAgICBSZW5kZXJUZXh0OjpjYWxjUHJlZldpZHRocyhsZWFk
KTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlQ2hpbGRyZW4oQXRvbWljU3Ry
aW5nSW1wbCogaWRlbnRpZmllciwgQ291bnRlck5vZGUqIG5vZGUpCkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyQ291bnRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmgJ
KHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMzUsNyArMzUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiBy
ZW5kZXJOYW1lKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyQ291bnRlcigpIGNv
bnN0OwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFRleHQoKSBj
b25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgCisgICAgdm9p
ZCBkaXJ0eUxpbmVCb3hlcyhib29sLCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZX
aWR0aHMoaW50IGxlYWRXaWR0aCk7CiAKICAgICBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5v
ZGVzKFJlbmRlck9iamVjdCopOwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAJKHJldmlzaW9uIDIw
OTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NDEsMTEgKzQxLDExIEBAIFJlbmRlckZpZWxkc2V0OjpSZW5kZXJGaWVsZHNldChIVE1MR2VuZXIK
IHsKIH0KIAotdm9pZCBSZW5kZXJGaWVsZHNldDo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgUmVu
ZGVyRmllbGRzZXQ6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBSZW5kZXJCbG9jazo6Y2FsY01p
bk1heFdpZHRoKCk7CisgICAgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCk7CiAgICAgaWYg
KFJlbmRlck9iamVjdCogbGVnZW5kID0gZmluZExlZ2VuZCgpKSB7Ci0gICAgICAgIGludCBsZWdl
bmRNaW5XaWR0aCA9IGxlZ2VuZC0+bWluV2lkdGgoKTsKKyAgICAgICAgaW50IGxlZ2VuZE1pbldp
ZHRoID0gbGVnZW5kLT5taW5QcmVmV2lkdGgoKTsKIAogICAgICAgICBMZW5ndGggbGVnZW5kTWFy
Z2luTGVmdCA9IGxlZ2VuZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOwogICAgICAgICBMZW5ndGgg
bGVnZW5kTWFyZ2luUmlnaHQgPSBsZWdlbmQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKTsKQEAgLTU2
LDcgKzU2LDcgQEAgdm9pZCBSZW5kZXJGaWVsZHNldDo6Y2FsY01pbk1heFdpZHRoKCkKICAgICAg
ICAgaWYgKGxlZ2VuZE1hcmdpblJpZ2h0LmlzRml4ZWQoKSkKICAgICAgICAgICAgIGxlZ2VuZE1p
bldpZHRoICs9IGxlZ2VuZE1hcmdpblJpZ2h0LnZhbHVlKCk7CiAKLSAgICAgICAgbV9taW5XaWR0
aCA9IG1heChtX21pbldpZHRoLCBsZWdlbmRNaW5XaWR0aCArIHBhZGRpbmdMZWZ0KCkgKyBwYWRk
aW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkpOworICAgICAgICBtX21p
blByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgbGVnZW5kTWluV2lkdGggKyBwYWRkaW5n
TGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpKTsK
ICAgICB9CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1
YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogCi0gICAg
dmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJl
ZldpZHRocygpOwogICAgIHZpcnR1YWwgYm9vbCBhdm9pZHNGbG9hdHMoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAgICAgdmlydHVhbCBib29sIGV4cGFuZHNUb0VuY2xvc2VPdmVyaGFuZ2luZ0Zs
b2F0cygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmhlaWdodCgpLmlzQXV0bygpOyB9CiAgICAg
dmlydHVhbCBib29sIHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHJldmlz
aW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjE4LDM5ICsyMTgsNDEgQEAgdm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29u
dHJvbDo6cGFpbnRPYmplYwogICAgICAgICBwYWludEluZm8uY29udGV4dC0+cmVzdG9yZSgpOwog
fQogCi12b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpjYWxjTWluTWF4V2lkdGgoKQordm9p
ZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIG1fbWlu
V2lkdGggPSAwOwotICAgIG1fbWF4V2lkdGggPSAwOworICAgIEFTU0VSVChwcmVmV2lkdGhzRGly
dHkoKSk7CisKKyAgICBtX21pblByZWZXaWR0aCA9IDA7CisgICAgbV9tYXhQcmVmV2lkdGggPSAw
OwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRo
KCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoID0gY2FsY0Nv
bnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53
aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2UgewogICAgICAgICAvLyBGaWd1cmUgb3V0IGhvdyBi
aWcgdGhlIGZpbGVuYW1lIHNwYWNlIG5lZWRzIHRvIGJlIGZvciBhIGdpdmVuIG51bWJlciBvZiBj
aGFyYWN0ZXJzCiAgICAgICAgIC8vICh1c2luZyAiMCIgYXMgdGhlIG5vbWluYWwgY2hhcmFjdGVy
KS4KICAgICAgICAgY29uc3QgVUNoYXIgY2ggPSAnMCc7CiAgICAgICAgIGZsb2F0IGNoYXJXaWR0
aCA9IHN0eWxlKCktPmZvbnQoKS5mbG9hdFdpZHRoKFRleHRSdW4oJmNoLCAxKSwgVGV4dFN0eWxl
KDAsIDAsIDAsIGZhbHNlLCBmYWxzZSwgZmFsc2UpKTsKLSAgICAgICAgbV9tYXhXaWR0aCA9IChp
bnQpY2VpbGYoY2hhcldpZHRoICogZGVmYXVsdFdpZHRoTnVtQ2hhcnMpOworICAgICAgICBtX21h
eFByZWZXaWR0aCA9IChpbnQpY2VpbGYoY2hhcldpZHRoICogZGVmYXVsdFdpZHRoTnVtQ2hhcnMp
OwogICAgIH0KIAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHls
ZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtYXgo
bV9tYXhXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVl
KCkpKTsKLSAgICAgICAgbV9taW5XaWR0aCA9IG1heChtX21pbldpZHRoLCBjYWxjQ29udGVudEJv
eFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZX
aWR0aCA9IG1heChtX21heFByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5t
aW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5Q
cmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgp
KSk7CiAgICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHls
ZSgpLT53aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkK
LSAgICAgICAgbV9taW5XaWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAg
ICBlbHNlCi0gICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoOworICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCku
aXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5n
dGgpIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJv
eFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRo
ID0gbWluKG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgo
KS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRo
LCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAg
ICAgICBtX21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hX
aWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9B
ZGQgPSBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3Jk
ZXJSaWdodCgpOwotICAgIG1fbWluV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0
b0FkZDsKKyAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCAr
PSB0b0FkZDsKIAotICAgIHNldE1pbk1heEtub3duKCk7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5
KGZhbHNlKTsKIH0KIAogSFRNTEZpbGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1lbnQ6OkhUTUxGaWxl
VXBsb2FkSW5uZXJCdXR0b25FbGVtZW50KERvY3VtZW50KiBkb2MsIE5vZGUqIHNoYWRvd1BhcmVu
dCkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCShyZXZpc2lvbiAyMDk5NykK
KysrIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00MSw3ICs0MSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5k
ZXJTdHlsZSopOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwotICAgIHZp
cnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZX
aWR0aHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnRPYmplY3QoUGFpbnRJbmZvJiwgaW50IHR4
LCBpbnQgdHkpOwogCiAgICAgdm9pZCBjbGljaygpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZs
ZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
Y3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwOSw1MSArMTA5LDM2IEBAIFJlbmRlckZsZXhpYmxlQm94Ojp+
UmVuZGVyRmxleGlibGVCb3goKQogewogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxj
SG9yaXpvbnRhbE1pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jp
em9udGFsUHJlZldpZHRocygpCiB7CiAgICAgUmVuZGVyT2JqZWN0ICpjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsKICAgICB3aGlsZSAoY2hpbGQpIHsKICAgICAgICAgLy8gcG9zaXRpb25lZCBjaGlsZHJl
biBkb24ndCBhZmZlY3QgdGhlIG1pbm1heHdpZHRoCi0gICAgICAgIGlmIChjaGlsZC0+aXNQb3Np
dGlvbmVkKCkgfHwgY2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkKLSAg
ICAgICAgeworICAgICAgICBpZiAoY2hpbGQtPmlzUG9zaXRpb25lZCgpIHx8IGNoaWxkLT5zdHls
ZSgpLT52aXNpYmlsaXR5KCkgPT0gQ09MTEFQU0UpIHsKICAgICAgICAgICAgIGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCi0g
ICAgICAgIGludCBtYXJnaW49MDsKLSAgICAgICAgLy8gIGF1dG8gbWFyZ2lucyBkb24ndCBhZmZl
Y3QgbWlud2lkdGgKLQorICAgICAgICAvLyBBIG1hcmdpbiBiYXNpY2FsbHkgaGFzIHRocmVlIHR5
cGVzOiBmaXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1dG8gKHZhcmlhYmxlKS4KKyAgICAgICAgLy8g
QXV0byBhbmQgcGVyY2VudGFnZSBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGlu
ZyBtaW4vbWF4IHdpZHRoLgorICAgICAgICAvLyBGaXhlZCBtYXJnaW5zIGNhbiBiZSBhZGRlZCBp
biBhcyBpcy4KICAgICAgICAgTGVuZ3RoIG1sID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQo
KTsKICAgICAgICAgTGVuZ3RoIG1yID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCk7Cisg
ICAgICAgIGludCBtYXJnaW4gPSAwLCBtYXJnaW5MZWZ0ID0gMCwgbWFyZ2luUmlnaHQgPSAwOwor
ICAgICAgICBpZiAobWwuaXNGaXhlZCgpKQorICAgICAgICAgICAgbWFyZ2luTGVmdCArPSBtbC52
YWx1ZSgpOworICAgICAgICBpZiAobXIuaXNGaXhlZCgpKQorICAgICAgICAgICAgbWFyZ2luUmln
aHQgKz0gbXIudmFsdWUoKTsKKyAgICAgICAgbWFyZ2luID0gbWFyZ2luTGVmdCArIG1hcmdpblJp
Z2h0OwogCi0gICAgICAgIC8vIENhbGwgY2FsY1dpZHRoIG9uIHRoZSBjaGlsZCB0byBlbnN1cmUg
dGhhdCBvdXIgbWFyZ2lucyBhcmUKLSAgICAgICAgLy8gdXAgdG8gZGF0ZS4gIFRoaXMgbWV0aG9k
IGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjaGlsZCBoYXMgYWN0dWFsbHkKLSAgICAgICAgLy8g
Y2FsY3VsYXRlZCBpdHMgbWFyZ2lucyAod2hpY2ggYXJlIGNvbXB1dGVkIGluc2lkZSBjYWxjV2lk
dGgpLgotICAgICAgICBjaGlsZC0+Y2FsY1dpZHRoKCk7Ci0KLSAgICAgICAgaWYgKCFtbC5pc0F1
dG8oKSAmJiAhbXIuaXNBdXRvKCkpIHsKLSAgICAgICAgICAgIGlmICghY2hpbGQtPnN0eWxlKCkt
PndpZHRoKCkuaXNBdXRvKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCkt
PmRpcmVjdGlvbigpPT1MVFIpCi0gICAgICAgICAgICAgICAgICAgIG1hcmdpbiA9IGNoaWxkLT5t
YXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBt
YXJnaW4gPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAg
ICAgICAgICAgIG1hcmdpbiA9IGNoaWxkLT5tYXJnaW5MZWZ0KCkrY2hpbGQtPm1hcmdpblJpZ2h0
KCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoIW1sLmlzQXV0bygpKQotICAgICAgICAgICAgbWFyZ2lu
ID0gY2hpbGQtPm1hcmdpbkxlZnQoKTsKLSAgICAgICAgZWxzZSBpZiAoIW1yLmlzQXV0bygpKQot
ICAgICAgICAgICAgbWFyZ2luID0gY2hpbGQtPm1hcmdpblJpZ2h0KCk7Ci0KLSAgICAgICAgaWYg
KG1hcmdpbiA8IDApIG1hcmdpbiA9IDA7Ci0KLSAgICAgICAgbV9taW5XaWR0aCArPSBjaGlsZC0+
bWluV2lkdGgoKSArIG1hcmdpbjsKLSAgICAgICAgbV9tYXhXaWR0aCArPSBjaGlsZC0+bWF4V2lk
dGgoKSArIG1hcmdpbjsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggKz0gY2hpbGQtPm1pblByZWZX
aWR0aCgpICsgbWFyZ2luOworICAgICAgICBtX21heFByZWZXaWR0aCArPSBjaGlsZC0+bWF4UHJl
ZldpZHRoKCkgKyBtYXJnaW47CiAKICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KTsKICAgICB9ICAgIAogfQogCi12b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxN
aW5NYXhXaWR0aCgpCit2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxQcmVmV2lk
dGhzKCkKIHsKICAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAgIHdo
aWxlKGNoaWxkICE9IDApCkBAIC0xNjQsODMgKzE0OSw2NiBAQCB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpjYWxjVmVydGljYWxNaW5NCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
Ci0gICAgICAgIExlbmd0aCBtbCA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCk7Ci0gICAg
ICAgIExlbmd0aCBtciA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpOwotCi0gICAgICAg
IC8vIENhbGwgY2FsY1dpZHRoIG9uIHRoZSBjaGlsZCB0byBlbnN1cmUgdGhhdCBvdXIgbWFyZ2lu
cyBhcmUKLSAgICAgICAgLy8gdXAgdG8gZGF0ZS4gIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQg
YmVmb3JlIHRoZSBjaGlsZCBoYXMgYWN0dWFsbHkKLSAgICAgICAgLy8gY2FsY3VsYXRlZCBpdHMg
bWFyZ2lucyAod2hpY2ggYXJlIGNvbXB1dGVkIGluc2lkZSBjYWxjV2lkdGgpLgotICAgICAgICBp
ZiAobWwuaXNQZXJjZW50KCkgfHwgbXIuaXNQZXJjZW50KCkpCi0gICAgICAgICAgICBjYWxjV2lk
dGgoKTsKLQogICAgICAgICAvLyBBIG1hcmdpbiBiYXNpY2FsbHkgaGFzIHRocmVlIHR5cGVzOiBm
aXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1dG8gKHZhcmlhYmxlKS4KLSAgICAgICAgLy8gQXV0byBt
YXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4vbWF4IHdpZHRoLgorICAg
ICAgICAvLyBBdXRvL3BlcmNlbnRhZ2UgbWFyZ2lucyBzaW1wbHkgYmVjb21lIDAgd2hlbiBjb21w
dXRpbmcgbWluL21heCB3aWR0aC4KICAgICAgICAgLy8gRml4ZWQgbWFyZ2lucyBjYW4gYmUgYWRk
ZWQgaW4gYXMgaXMuCi0gICAgICAgIC8vIFBlcmNlbnRhZ2UgbWFyZ2lucyBhcmUgY29tcHV0ZWQg
YXMgYSBwZXJjZW50YWdlIG9mIHRoZSB3aWR0aCB3ZSBjYWxjdWxhdGVkIGluCi0gICAgICAgIC8v
IHRoZSBjYWxjV2lkdGggY2FsbCBhYm92ZS4gIEluIHRoaXMgY2FzZSB3ZSB1c2UgdGhlIGFjdHVh
bCBjYWNoZWQgbWFyZ2luIHZhbHVlcyBvbgotICAgICAgICAvLyB0aGUgUmVuZGVyT2JqZWN0IGl0
c2VsZi4KKyAgICAgICAgTGVuZ3RoIG1sID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKTsK
KyAgICAgICAgTGVuZ3RoIG1yID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCk7CiAgICAg
ICAgIGludCBtYXJnaW4gPSAwOwogICAgICAgICBpZiAobWwuaXNGaXhlZCgpKQogICAgICAgICAg
ICAgbWFyZ2luICs9IG1sLnZhbHVlKCk7Ci0gICAgICAgIGVsc2UgaWYgKG1sLmlzUGVyY2VudCgp
KQotICAgICAgICAgICAgbWFyZ2luICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7Ci0KICAgICAgICAg
aWYgKG1yLmlzRml4ZWQoKSkKICAgICAgICAgICAgIG1hcmdpbiArPSBtci52YWx1ZSgpOwotICAg
ICAgICBlbHNlIGlmIChtci5pc0F1dG8oKSkKLSAgICAgICAgICAgIG1hcmdpbiArPSBjaGlsZC0+
bWFyZ2luUmlnaHQoKTsKLQotICAgICAgICBpZiAobWFyZ2luIDwgMCkgbWFyZ2luID0gMDsKICAg
ICAgICAgCi0gICAgICAgIGludCB3ID0gY2hpbGQtPm1pbldpZHRoKCkgKyBtYXJnaW47Ci0gICAg
ICAgIGlmKG1fbWluV2lkdGggPCB3KSBtX21pbldpZHRoID0gdzsKKyAgICAgICAgaW50IHcgPSBj
aGlsZC0+bWluUHJlZldpZHRoKCkgKyBtYXJnaW47CisgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bWF4KHcsIG1fbWluUHJlZldpZHRoKTsKICAgICAgICAgCi0gICAgICAgIHcgPSBjaGlsZC0+bWF4
V2lkdGgoKSArIG1hcmdpbjsKLQotICAgICAgICBpZihtX21heFdpZHRoIDwgdykgbV9tYXhXaWR0
aCA9IHc7CisgICAgICAgIHcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXJnaW47CisgICAg
ICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KHcsIG1fbWF4UHJlZldpZHRoKTsKIAogICAgICAgICBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0gICAgCiB9CiAKLXZvaWQgUmVuZGVy
RmxleGlibGVCb3g6OmNhbGNNaW5NYXhXaWR0aCgpCit2b2lkIFJlbmRlckZsZXhpYmxlQm94Ojpj
YWxjUHJlZldpZHRocygpCiB7Ci0gICAgQVNTRVJUKCAhbWluTWF4S25vd24oKSApOwotCi0gICAg
bV9taW5XaWR0aCA9IDA7Ci0gICAgbV9tYXhXaWR0aCA9IDA7CisgICAgQVNTRVJUKHByZWZXaWR0
aHNEaXJ0eSgpKTsKIAotICAgIGlmIChoYXNNdWx0aXBsZUxpbmVzKCkgfHwgaXNWZXJ0aWNhbCgp
KQotICAgICAgICBjYWxjVmVydGljYWxNaW5NYXhXaWR0aCgpOwotICAgIGVsc2UKLSAgICAgICAg
Y2FsY0hvcml6b250YWxNaW5NYXhXaWR0aCgpOworICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlz
Rml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPiAwKQorICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53
aWR0aCgpLnZhbHVlKCkpOworICAgIGVsc2UgeworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1f
bWF4UHJlZldpZHRoID0gMDsKKworICAgICAgICBpZiAoaGFzTXVsdGlwbGVMaW5lcygpIHx8IGlz
VmVydGljYWwoKSkKKyAgICAgICAgICAgIGNhbGNWZXJ0aWNhbFByZWZXaWR0aHMoKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgY2FsY0hvcml6b250YWxQcmVmV2lkdGhzKCk7CiAKLSAgICBp
ZihtX21heFdpZHRoIDwgbV9taW5XaWR0aCkgbV9tYXhXaWR0aCA9IG1fbWluV2lkdGg7CisgICAg
ICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBtX21heFByZWZXaWR0aCk7
CisgICAgfQogCi0gICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
PndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoID0g
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwotICAgCiAgICAg
aWYgKHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKSA+IDApIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9IG1heChtX21heFdpZHRoLCBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBt
X21pbldpZHRoID0gbWF4KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+
bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4
UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUo
KSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0Nv
bnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAgICAg
CiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9
IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCku
dmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWluV2lkdGgsIGNhbGNDb250
ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4
UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxl
KCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1pbiht
X21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZh
bHVlKCkpKTsKICAgICB9CiAKLSAgICBpbnQgdG9BZGQgPSBib3JkZXJMZWZ0KCkgKyBib3JkZXJS
aWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpOwotICAgIG1fbWluV2lkdGgg
Kz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0b0FkZDsKKyAgICBpbnQgdG9BZGQgPSAwOwor
ICAgIHRvQWRkID0gYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBhZGRpbmdMZWZ0KCkg
KyBwYWRkaW5nUmlnaHQoKTsKKworICAgIG1fbWluUHJlZldpZHRoICs9IHRvQWRkOworICAgIG1f
bWF4UHJlZldpZHRoICs9IHRvQWRkOwogCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBzZXRQ
cmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0
KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIGlmICghcmVsYXlvdXRDaGls
ZHJlbiAmJiBwb3NDaGlsZE5lZWRzTGF5b3V0KCkgJiYgIW5vcm1hbENoaWxkTmVlZHNMYXlvdXQo
KSAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAgLy8gQWxsIHdlIGhhdmUgdG8gaXMg
bGF5IG91dCBvdXIgcG9zaXRpb25lZCBvYmplY3RzLgpAQCAtMTExNyw5ICsxMDg1LDkgQEAgaW50
IFJlbmRlckZsZXhpYmxlQm94OjphbGxvd2VkQ2hpbGRGbGV4KAogICAgICAgICAgICAgICAgIGNo
aWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQoKSkKICAgICAgICAgICAgICAgICBtYXhX
ID0gY2hpbGQtPnN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKTsKICAgICAgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5zdHlsZSgpLT5tYXhXaWR0aCgpLnR5cGUoKSA9PSBJbnRyaW5zaWMpCi0gICAg
ICAgICAgICAgICAgbWF4VyA9IGNoaWxkLT5tYXhXaWR0aCgpOworICAgICAgICAgICAgICAgIG1h
eFcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCk7CiAgICAgICAgICAgICBlbHNlIGlmIChjaGlsZC0+
c3R5bGUoKS0+bWF4V2lkdGgoKS50eXBlKCkgPT0gTWluSW50cmluc2ljKQotICAgICAgICAgICAg
ICAgIG1heFcgPSBjaGlsZC0+bWluV2lkdGgoKTsKKyAgICAgICAgICAgICAgICBtYXhXID0gY2hp
bGQtPm1pblByZWZXaWR0aCgpOwogICAgICAgICAgICAgaWYgKG1heFcgPT0gSU5UX01BWCkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbWF4VzsKICAgICAgICAgICAgIHJldHVybiBtYXgoMCwgbWF4
VyAtIHcpOwpAQCAtMTEzOCwxNCArMTEwNiwxNCBAQCBpbnQgUmVuZGVyRmxleGlibGVCb3g6OmFs
bG93ZWRDaGlsZEZsZXgoCiAKICAgICAvLyBGSVhNRTogRm9yIG5vdyBqdXN0IGhhbmRsZSBmaXhl
ZCB2YWx1ZXMuCiAgICAgaWYgKGlzSG9yaXpvbnRhbCgpKSB7Ci0gICAgICAgIGludCBtaW5XID0g
Y2hpbGQtPm1pbldpZHRoKCk7CisgICAgICAgIGludCBtaW5XID0gY2hpbGQtPm1pblByZWZXaWR0
aCgpOwogICAgICAgICBpbnQgdyA9IGNoaWxkLT5vdmVycmlkZVdpZHRoKCkgLSAoY2hpbGQtPmJv
cmRlckxlZnQoKSArIGNoaWxkLT5ib3JkZXJSaWdodCgpICsgY2hpbGQtPnBhZGRpbmdMZWZ0KCkg
KyBjaGlsZC0+cGFkZGluZ1JpZ2h0KCkpOwogICAgICAgICBpZiAoY2hpbGQtPnN0eWxlKCktPm1p
bldpZHRoKCkuaXNGaXhlZCgpKQogICAgICAgICAgICAgbWluVyA9IGNoaWxkLT5zdHlsZSgpLT5t
aW5XaWR0aCgpLnZhbHVlKCk7CiAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zdHlsZSgpLT5taW5X
aWR0aCgpLnR5cGUoKSA9PSBJbnRyaW5zaWMpCi0gICAgICAgICAgICBtaW5XID0gY2hpbGQtPm1h
eFdpZHRoKCk7CisgICAgICAgICAgICBtaW5XID0gY2hpbGQtPm1heFByZWZXaWR0aCgpOwogICAg
ICAgICBlbHNlIGlmIChjaGlsZC0+c3R5bGUoKS0+bWluV2lkdGgoKS50eXBlKCkgPT0gTWluSW50
cmluc2ljKQotICAgICAgICAgICAgbWluVyA9IGNoaWxkLT5taW5XaWR0aCgpOworICAgICAgICAg
ICAgbWluVyA9IGNoaWxkLT5taW5QcmVmV2lkdGgoKTsKICAgICAgICAgICAgIAogICAgICAgICBp
bnQgYWxsb3dlZFNocmlua2FnZSA9IG1pbigwLCBtaW5XIC0gdyk7CiAgICAgICAgIHJldHVybiBh
bGxvd2VkU2hyaW5rYWdlOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHJldmlzaW9uIDIwOTk3
KQorKysgcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDkgKzM0LDkgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3Q7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7Ci0gICAgdm9p
ZCBjYWxjSG9yaXpvbnRhbE1pbk1heFdpZHRoKCk7Ci0gICAgdm9pZCBjYWxjVmVydGljYWxNaW5N
YXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOworICAgIHZvaWQg
Y2FsY0hvcml6b250YWxQcmVmV2lkdGhzKCk7CisgICAgdm9pZCBjYWxjVmVydGljYWxQcmVmV2lk
dGhzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0QmxvY2soYm9vbCByZWxheW91dENoaWxk
cmVuKTsKICAgICB2b2lkIGxheW91dEhvcml6b250YWxCb3goYm9vbCByZWxheW91dENoaWxkcmVu
KTsKQEAgLTUzLDkgKzUzLDkgQEAgcHVibGljOgogcHJvdGVjdGVkOgogICAgIGludCBhbGxvd2Vk
Q2hpbGRGbGV4KFJlbmRlck9iamVjdCogY2hpbGQsIGJvb2wgZXhwYW5kaW5nLCB1bnNpZ25lZCBn
cm91cCk7CiAKLSAgICBib29sIGhhc011bHRpcGxlTGluZXMoKSB7IHJldHVybiBzdHlsZSgpLT5i
b3hMaW5lcygpID09IE1VTFRJUExFOyB9Ci0gICAgYm9vbCBpc1ZlcnRpY2FsKCkgeyByZXR1cm4g
c3R5bGUoKS0+Ym94T3JpZW50KCkgPT0gVkVSVElDQUw7IH0KLSAgICBib29sIGlzSG9yaXpvbnRh
bCgpIHsgcmV0dXJuIHN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUw7IH0KKyAgICBi
b29sIGhhc011bHRpcGxlTGluZXMoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3hMaW5lcygp
ID09IE1VTFRJUExFOyB9CisgICAgYm9vbCBpc1ZlcnRpY2FsKCkgY29uc3QgeyByZXR1cm4gc3R5
bGUoKS0+Ym94T3JpZW50KCkgPT0gVkVSVElDQUw7IH0KKyAgICBib29sIGlzSG9yaXpvbnRhbCgp
IGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJveE9yaWVudCgpID09IEhPUklaT05UQUw7IH0KIAog
ICAgIGJvb2wgbV9mbGV4aW5nQ2hpbGRyZW4gOiAxOwogICAgIGJvb2wgbV9zdHJldGNoaW5nQ2hp
bGRyZW4gOiAxOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcv
UmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyNSw2ICsyMjUsMTAgQEAgdm9pZCBS
ZW5kZXJGbG93OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaAogICAgIGlmIChpc0lubGluZSgpICYm
ICFmaXJzdExpbmVCb3goKSkKICAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5kaXJ0eUxpbmVzRnJv
bUNoYW5nZWRDaGlsZCh0aGlzKTsKICAgICAKKyAgICAvLyBJZiB3ZSBoYXZlIG5vIGZpcnN0IGxp
bmUgYm94LCB0aGVuIGp1c3QgYmFpbCBlYXJseS4KKyAgICBpZiAoIWZpcnN0TGluZUJveCgpKQor
ICAgICAgICByZXR1cm47CisKICAgICAvLyBUcnkgdG8gZmlndXJlIG91dCB3aGljaCBsaW5lIGJv
eCB3ZSBiZWxvbmcgaW4uICBGaXJzdCB0cnkgdG8gZmluZCBhIHByZXZpb3VzCiAgICAgLy8gbGlu
ZSBib3ggYnkgZXhhbWluaW5nIG91ciBzaWJsaW5ncy4gIElmIHdlIGRpZG4ndCBmaW5kIGEgbGlu
ZSBib3gsIHRoZW4gdXNlIG91ciAKICAgICAvLyBwYXJlbnQncyBmaXJzdCBsaW5lIGJveC4KSW5k
ZXg6IHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVy
aW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw2
IEBAIGJvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6cmVxdWlyZXNMYXllcigKIHZvaWQgUmVuZGVy
Rm9yZWlnbk9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0g
ICAgQVNTRVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgSW50UmVjdCBvbGRCb3VuZHM7CiAgICAg
SW50UmVjdCBvbGRPdXRsaW5lQm94OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCShyZXZpc2lvbiAy
MDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ1Myw3ICs0NTMsNiBAQCBGcmFtZUVkZ2VJbmZvIFJlbmRlckZyYW1lU2V0OjplZGdlSW5mbygp
CiB2b2lkIFJlbmRlckZyYW1lU2V0OjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91
dCgpKTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBpZiAoIXBhcmVudCgpLT5p
c0ZyYW1lU2V0KCkpIHsKICAgICAgICAgRnJhbWVWaWV3KiB2ID0gdmlldygpLT5mcmFtZVZpZXco
KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVy
aW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw2IEBA
IHZvaWQgUmVuZGVySFRNTENhbnZhczo6cGFpbnQoUGFpbnRJbmZvJiAKIHZvaWQgUmVuZGVySFRN
TENhbnZhczo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNT
RVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgSW50UmVjdCBvbGRCb3VuZHM7CiAgICAgSW50UmVj
dCBvbGRPdXRsaW5lQm94OwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw4ICsxNzAsOCBA
QCB2b2lkIFJlbmRlckltYWdlOjppbWFnZUNoYW5nZWQoQ2FjaGVkSW1hCiAgICAgaWYgKGVuc3Vy
ZUxheW91dCkgewogICAgICAgICBpZiAoIXNlbGZOZWVkc0xheW91dCgpKQogICAgICAgICAgICAg
c2V0TmVlZHNMYXlvdXQodHJ1ZSk7Ci0gICAgICAgIGlmIChtaW5NYXhLbm93bigpKQotICAgICAg
ICAgICAgc2V0TWluTWF4S25vd24oZmFsc2UpOworICAgICAgICBpZiAoIXByZWZXaWR0aHNEaXJ0
eSgpKQorICAgICAgICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRydWUpOwogICAgIH0gZWxzZQog
ICAgICAgICAvLyBGSVhNRTogV2UgYWx3YXlzIGp1c3QgZG8gYSBjb21wbGV0ZSByZXBhaW50LCBz
aW5jZSB3ZSBhbHdheXMgcGFzcyBpbiB0aGUgZnVsbCBpbWFnZQogICAgICAgICAvLyByZWN0IGF0
IHRoZSBtb21lbnQgYW55d2F5LgpAQCAtMzAzLDcgKzMwMyw2IEBAIHZvaWQgUmVuZGVySW1hZ2U6
OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKIHZvaWQgUmVuZGVySW1hZ2U6OmxheW91dCgpCiB7CiAg
ICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAog
ICAgIEludFJlY3Qgb2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKQEAgLTQz
NSwyMCArNDM0LDIwIEBAIGludCBSZW5kZXJJbWFnZTo6Y2FsY0FzcGVjdFJhdGlvSGVpZ2h0KCkK
ICAgICByZXR1cm4gUmVuZGVyUmVwbGFjZWQ6OmNhbGNSZXBsYWNlZFdpZHRoKCkgKiBpbnRyaW5z
aWNIZWlnaHQoKSAvIGludHJpbnNpY1dpZHRoKCk7CiB9CiAKLXZvaWQgUmVuZGVySW1hZ2U6OmNh
bGNNaW5NYXhXaWR0aCgpCit2b2lkIFJlbmRlckltYWdlOjpjYWxjUHJlZldpZHRocygpCiB7Ci0g
ICAgQVNTRVJUKCFtaW5NYXhLbm93bigpKTsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkp
OwogCi0gICAgbV9tYXhXaWR0aCA9IGNhbGNSZXBsYWNlZFdpZHRoKCkgKyBwYWRkaW5nTGVmdCgp
ICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpOworICAgIG1f
bWF4UHJlZldpZHRoID0gY2FsY1JlcGxhY2VkV2lkdGgoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRk
aW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7CiAKICAgICBpZiAoc3R5
bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQo
KSB8fCAKICAgICAgICAgc3R5bGUoKS0+bWF4V2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZSgp
LT5tYXhIZWlnaHQoKS5pc1BlcmNlbnQoKSB8fAogICAgICAgICBzdHlsZSgpLT5taW5XaWR0aCgp
LmlzUGVyY2VudCgpIHx8IHN0eWxlKCktPm1pbkhlaWdodCgpLmlzUGVyY2VudCgpKQotICAgICAg
ICBtX21pbldpZHRoID0gMDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UK
LSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRo
ID0gbV9tYXhQcmVmV2lkdGg7CiAKLSAgICBzZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZX
aWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIEltYWdlKiBSZW5kZXJJbWFnZTo6bnVsbEltYWdlKCkK
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJJbWFnZS5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw3ICs2Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGlu
dCBjYWxjUmVwbGFjZWRXaWR0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGNhbGNSZXBsYWNl
ZEhlaWdodCgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogCiAgICAgSFRNTE1hcEVsZW1lbnQq
IGltYWdlTWFwKCk7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJl
bmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDcg
QEAgdm9pZCBSZW5kZXJJbmxpbmU6OmFkZENoaWxkVG9GbG93KFJlbmRlcgogCiAgICAgUmVuZGVy
Q29udGFpbmVyOjphZGRDaGlsZChuZXdDaGlsZCxiZWZvcmVDaGlsZCk7CiAKLSAgICBuZXdDaGls
ZC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICBuZXdDaGlsZC0+c2V0TmVl
ZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIFJlbmRlcklubGluZSogUmVuZGVy
SW5saW5lOjpjbG9uZUlubGluZShSZW5kZXJGbG93KiBzcmMpCkBAIC0xNDgsNyArMTQ4LDcgQEAg
dm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0SW5saW5lcyhSZW5kZXJCbAogICAgICAgICBSZW5kZXJP
YmplY3QqIHRtcCA9IG87CiAgICAgICAgIG8gPSB0bXAtPm5leHRTaWJsaW5nKCk7CiAgICAgICAg
IGNsb25lLT5hZGRDaGlsZFRvRmxvdyhyZW1vdmVDaGlsZE5vZGUodG1wKSwgMCk7Ci0gICAgICAg
IHRtcC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgdG1wLT5zZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICB9CiAKICAgICAvLyBIb29rIHxj
bG9uZXwgdXAgYXMgdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgbWlkZGxlIGJsb2NrLgpAQCAtMTg0
LDcgKzE4NCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVuZGVyQmwKICAg
ICAgICAgICAgIFJlbmRlck9iamVjdCogdG1wID0gbzsKICAgICAgICAgICAgIG8gPSB0bXAtPm5l
eHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBjbG9uZS0+YWRkQ2hpbGRUb0Zsb3coY3Vyci0+cmVt
b3ZlQ2hpbGROb2RlKHRtcCksIDApOwotICAgICAgICAgICAgdG1wLT5zZXROZWVkc0xheW91dEFu
ZE1pbk1heFJlY2FsYygpOworICAgICAgICAgICAgdG1wLT5zZXROZWVkc0xheW91dEFuZFByZWZX
aWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogCiAgICAgICAgIC8vIEtlZXAgd2Fsa2luZyB1cCB0
aGUgY2hhaW4uCkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBSZW5kZXJJbmxpbmU6OnNwbGl0Rmxv
dyhSZW5kZXJPYmplYwogICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiBubyA9IG87CiAgICAgICAg
ICAgICBvID0gbm8tPm5leHRTaWJsaW5nKCk7CiAgICAgICAgICAgICBwcmUtPmFwcGVuZENoaWxk
Tm9kZShibG9jay0+cmVtb3ZlQ2hpbGROb2RlKG5vKSk7Ci0gICAgICAgICAgICBuby0+c2V0TmVl
ZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91
dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMjU2LDkgKzI1
Niw5IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAgICAvLyBB
bHdheXMganVzdCBkbyBhIGZ1bGwgbGF5b3V0IGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IGxpbmUg
Ym94ZXMgKGVzcGVjaWFsbHkgd3JhcHBlcnMgZm9yIGltYWdlcykKICAgICAvLyBnZXQgZGVsZXRl
ZCBwcm9wZXJseS4gIEJlY2F1c2Ugb2JqZWN0cyBtb3ZlcyBmcm9tIHRoZSBwcmUgYmxvY2sgaW50
byB0aGUgcG9zdCBibG9jaywgd2Ugd2FudCB0bwogICAgIC8vIG1ha2UgbmV3IGxpbmUgYm94ZXMg
aW5zdGVhZCBvZiBsZWF2aW5nIHRoZSBvbGQgbGluZSBib3hlcyBhcm91bmQuCi0gICAgcHJlLT5z
ZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOwotICAgIGJsb2NrLT5zZXROZWVkc0xheW91
dEFuZE1pbk1heFJlY2FsYygpOwotICAgIHBvc3QtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVj
YWxjKCk7CisgICAgcHJlLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAg
ICBibG9jay0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgcG9zdC0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIHZvaWQgUmVuZGVySW5s
aW5lOjpwYWludChQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBpbnQgdHkpCkBAIC0yODIs
MTcgKzI4Miw2IEBAIHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSBjb250YWluaW5nQmxvY2so
KS0+eVBvcygpICsgY29udGludWF0aW9uKCktPnlQb3MoKSk7CiB9CiAKLXZvaWQgUmVuZGVySW5s
aW5lOjpjYWxjTWluTWF4V2lkdGgoKQotewotICAgIEFTU0VSVCghbWluTWF4S25vd24oKSk7Ci0K
LSAgICAvLyBJcnJlbGV2YW50LCBzaW5jZSBzb21lIGVuY2xvc2luZyBibG9jayB3aWxsIGFjdHVh
bGx5IG1lYXN1cmUgdXMgYW5kIG91ciBjaGlsZHJlbi4KLSAgICBtX21pbldpZHRoID0gMDsKLSAg
ICBtX21heFdpZHRoID0gMDsKLQotICAgIHNldE1pbk1heEtub3duKCk7Ci19Ci0KIGJvb2wgUmVu
ZGVySW5saW5lOjpyZXF1aXJlc0xheWVyKCkKIHsKICAgICByZXR1cm4gaXNSb290KCkgfHwgaXNS
ZWxQb3NpdGlvbmVkKCkgfHwgc3R5bGUoKS0+b3BhY2l0eSgpIDwgMS4wZjsKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW5saW5l
LmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC01OCw4ICs1OCw2IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCBub2Rl
QXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwgaW50
IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIAotICAgIHZpcnR1YWwgdm9pZCBj
YWxjTWluTWF4V2lkdGgoKTsKLQogICAgIC8vIG92ZXJyaWRlcyBSZW5kZXJPYmplY3QKICAgICB2
aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigpOwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZp
c2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTE4LDcgKzExOCwxNSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVt
ZW50KCkKICAgICAgICAgfQogICAgICAgICBtX29wdGlvbnNXaWR0aCA9IHN0YXRpY19jYXN0PGlu
dD4oY2VpbGYod2lkdGgpKTsKICAgICAgICAgbV9vcHRpb25zQ2hhbmdlZCA9IGZhbHNlOwotICAg
ICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAKKyAgICAgICAg
aWYgKCFtX3ZCYXIgJiYgU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNjcm9sbGJhcnMoKSkKKyAgICAg
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBub2RlKCktPmRvY3VtZW50KCktPnZpZXcoKSkg
eworICAgICAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gd2lkZ2V0ID0gbmV3
IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9sbGJh
cik7CisgICAgICAgICAgICAgICAgdmlldy0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBtX3ZCYXIgPSB3aWRnZXQucmVsZWFzZSgpOworICAgICAgICAgICAgfQorICAg
ICAgICAKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAg
fQogfQogCkBAIC0xNTEsNDcgKzE1OSwzOSBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRv
UmV2ZWFsU2VsZWN0CiAgICAgICAgIHNjcm9sbFRvUmV2ZWFsRWxlbWVudEF0TGlzdEluZGV4KGZp
cnN0SW5kZXgpOwogfQogCi12b2lkIFJlbmRlckxpc3RCb3g6OmNhbGNNaW5NYXhXaWR0aCgpCit2
b2lkIFJlbmRlckxpc3RCb3g6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBpZiAoIW1fdkJhciAm
JiBTY3JvbGxiYXI6Omhhc1BsYXRmb3JtU2Nyb2xsYmFycygpKQotICAgICAgICBpZiAoRnJhbWVW
aWV3KiB2aWV3ID0gbm9kZSgpLT5kb2N1bWVudCgpLT52aWV3KCkpIHsKLSAgICAgICAgICAgIFJl
ZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gd2lkZ2V0ID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRo
aXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9sbGJhcik7Ci0gICAgICAgICAgICB2aWV3
LT5hZGRDaGlsZCh3aWRnZXQuZ2V0KCkpOwotICAgICAgICAgICAgbV92QmFyID0gd2lkZ2V0LnJl
bGVhc2UoKTsKLSAgICAgICAgfQotCi0gICAgaWYgKG1fb3B0aW9uc0NoYW5nZWQpCi0gICAgICAg
IHVwZGF0ZUZyb21FbGVtZW50KCk7CisgICAgQVNTRVJUKCFtX29wdGlvbnNDaGFuZ2VkKTsKIAot
ICAgIG1fbWluV2lkdGggPSAwOwotICAgIG1fbWF4V2lkdGggPSAwOworICAgIG1fbWluUHJlZldp
ZHRoID0gMDsKKyAgICBtX21heFByZWZXaWR0aCA9IDA7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lk
dGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAg
bV9taW5XaWR0aCA9IG1fbWF4V2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndp
ZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGgg
PSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxz
ZSB7Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtX29wdGlvbnNXaWR0aCArIDIgKiBvcHRpb25zU3Bh
Y2luZ0hvcml6b250YWw7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbV9vcHRpb25zV2lkdGgg
KyAyICogb3B0aW9uc1NwYWNpbmdIb3Jpem9udGFsOwogICAgICAgICBpZiAobV92QmFyKQotICAg
ICAgICAgICAgbV9tYXhXaWR0aCArPSBtX3ZCYXItPndpZHRoKCk7CisgICAgICAgICAgICBtX21h
eFByZWZXaWR0aCArPSBtX3ZCYXItPndpZHRoKCk7CiAgICAgfQogCiAgICAgaWYgKHN0eWxlKCkt
Pm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDAp
IHsKLSAgICAgICAgbV9tYXhXaWR0aCA9IG1heChtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdp
ZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0g
bWF4KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52
YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJlZldpZHRoLCBj
YWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAg
ICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0
aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9IGVsc2UgaWYgKHN0eWxlKCkt
PndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkgJiYgc3R5
bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICBtX21pbldpZHRoID0gMDsKKyAg
ICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9taW5XaWR0aCA9
IG1fbWF4V2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CiAK
ICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFdpZHRoID0g
bWluKG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52
YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGggPSBtaW4obV9taW5XaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUo
KS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1f
bWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFs
dWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9IHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5n
UmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7Ci0gICAgbV9taW5XaWR0aCAr
PSB0b0FkZDsKLSAgICBtX21heFdpZHRoICs9IHRvQWRkOworICAgIG1fbWluUHJlZldpZHRoICs9
IHRvQWRkOworICAgIG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOwogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAKLSAgICBzZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0aHNE
aXJ0eShmYWxzZSk7CiB9CiAKIGludCBSZW5kZXJMaXN0Qm94OjpzaXplKCkgY29uc3QKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
ckxpc3RCb3guaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02MSw3ICs2MSw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJv
b2wgc2Nyb2xsKFNjcm9sbERpcmVjdGlvbiwgU2Nyb2xsR3JhbnVsYXJpdHksIGZsb2F0IG11bHRp
cGxpZXIgPSAxLjBmKTsKICAgICB2aXJ0dWFsIGJvb2wgaXNTY3JvbGxhYmxlKCkgY29uc3Q7CiAK
LSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmlydHVhbCB2b2lkIGNh
bGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wg
Zmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3gpIGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCBj
YWxjSGVpZ2h0KCk7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gMjA5OTcpCisr
KyByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzAsMTAg
KzE3MCwxOCBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVWYWx1ZSgpCiAgICAgaWYgKCFt
X2hhc0V4cGxpY2l0VmFsdWUpIHsKICAgICAgICAgbV9pc1ZhbHVlVXBUb0RhdGUgPSBmYWxzZTsK
ICAgICAgICAgaWYgKG1fbWFya2VyKQotICAgICAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5
b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgICAgICBtX21hcmtlci0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgfQogfQogCitzdGF0aWMgUmVuZGVyT2JqZWN0
KiBmaXJzdE5vbk1hcmtlckNoaWxkKFJlbmRlck9iamVjdCogcGFyZW50KQoreworICAgIFJlbmRl
ck9iamVjdCogcmVzdWx0ID0gcGFyZW50LT5maXJzdENoaWxkKCk7CisgICAgd2hpbGUgKHJlc3Vs
dCAmJiByZXN1bHQtPmlzTGlzdE1hcmtlcigpKQorICAgICAgICByZXN1bHQgPSByZXN1bHQtPm5l
eHRTaWJsaW5nKCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBSZW5kZXJMaXN0SXRl
bTo6dXBkYXRlTWFya2VyTG9jYXRpb24oKQogewogICAgIC8vIFNhbml0eSBjaGVjayB0aGUgbG9j
YXRpb24gb2Ygb3VyIG1hcmtlci4KQEAgLTE5MSwzMSArMTk5LDMxIEBAIHZvaWQgUmVuZGVyTGlz
dEl0ZW06OnVwZGF0ZU1hcmtlckxvY2F0aW8KICAgICAgICAgICAgICAgICBsaW5lQm94UGFyZW50
ID0gdGhpczsKICAgICAgICAgfQogCi0gICAgICAgIGlmIChtYXJrZXJQYXIgIT0gbGluZUJveFBh
cmVudCB8fCAhbV9tYXJrZXItPm1pbk1heEtub3duKCkpIHsKKyAgICAgICAgaWYgKG1hcmtlclBh
ciAhPSBsaW5lQm94UGFyZW50IHx8IG1fbWFya2VyLT5wcmVmV2lkdGhzRGlydHkoKSkgeworICAg
ICAgICAgICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKICAgICAgICAgICAgIG1fbWFya2VyLT5yZW1v
dmUoKTsKICAgICAgICAgICAgIGlmICghbGluZUJveFBhcmVudCkKICAgICAgICAgICAgICAgICBs
aW5lQm94UGFyZW50ID0gdGhpczsKLSAgICAgICAgICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxk
KG1fbWFya2VyLCBsaW5lQm94UGFyZW50LT5maXJzdENoaWxkKCkpOwotICAgICAgICAgICAgaWYg
KCFtX21hcmtlci0+bWluTWF4S25vd24oKSkKLSAgICAgICAgICAgICAgICBtX21hcmtlci0+Y2Fs
Y01pbk1heFdpZHRoKCk7Ci0gICAgICAgICAgICByZWNhbGNNaW5NYXhXaWR0aHMoKTsKKyAgICAg
ICAgICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBmaXJzdE5vbk1hcmtlckNo
aWxkKGxpbmVCb3hQYXJlbnQpKTsKKyAgICAgICAgICAgIGlmIChtX21hcmtlci0+cHJlZldpZHRo
c0RpcnR5KCkpCisgICAgICAgICAgICAgICAgbV9tYXJrZXItPmNhbGNQcmVmV2lkdGhzKCk7CiAg
ICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyTGlzdEl0ZW06OmNhbGNNaW5NYXhXaWR0
aCgpCit2b2lkIFJlbmRlckxpc3RJdGVtOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgLy8gTWFr
ZSBzdXJlIG91ciBtYXJrZXIgaXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCi0gICAgdXBkYXRl
TWFya2VyTG9jYXRpb24oKTsKLSAgICBpZiAoIW1pbk1heEtub3duKCkpCi0gICAgICAgIFJlbmRl
ckJsb2NrOjpjYWxjTWluTWF4V2lkdGgoKTsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkp
OworICAgIAorICAgIGNvbnN0X2Nhc3Q8UmVuZGVyTGlzdEl0ZW0qPih0aGlzKS0+dXBkYXRlTWFy
a2VyTG9jYXRpb24oKTsKKworICAgIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocygpOwogfQog
CiB2b2lkIFJlbmRlckxpc3RJdGVtOjpsYXlvdXQoKQogewotICAgIEFTU0VSVChuZWVkc0xheW91
dCgpKTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7Ci0gICAgCisgICAgQVNTRVJUKG5lZWRz
TGF5b3V0KCkpOyAKKwogICAgIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7ICAgIAogICAgIFJlbmRl
ckJsb2NrOjpsYXlvdXQoKTsKIH0KQEAgLTI4NSw3ICsyOTMsNyBAQCBjb25zdCBTdHJpbmcmIFJl
bmRlckxpc3RJdGVtOjptYXJrZXJUZXh0CiB2b2lkIFJlbmRlckxpc3RJdGVtOjpleHBsaWNpdFZh
bHVlQ2hhbmdlZCgpCiB7CiAgICAgaWYgKG1fbWFya2VyKQotICAgICAgICBtX21hcmtlci0+c2V0
TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgbV9tYXJrZXItPnNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIE5vZGUqIGxpc3ROb2RlID0gZW5jbG9z
aW5nTGlzdChub2RlKCkpOwogICAgIFJlbmRlck9iamVjdCogbGlzdFJlbmRlcmVyID0gMDsKICAg
ICBpZiAobGlzdE5vZGUpCkBAIC0yOTYsNyArMzA0LDcgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6
ZXhwbGljaXRWYWx1ZUNoYW5nZQogICAgICAgICAgICAgaWYgKCFpdGVtLT5tX2hhc0V4cGxpY2l0
VmFsdWUpIHsKICAgICAgICAgICAgICAgICBpdGVtLT5tX2lzVmFsdWVVcFRvRGF0ZSA9IGZhbHNl
OwogICAgICAgICAgICAgICAgIGlmIChSZW5kZXJMaXN0TWFya2VyKiBtYXJrZXIgPSBpdGVtLT5t
X21hcmtlcikKLSAgICAgICAgICAgICAgICAgICAgbWFya2VyLT5zZXROZWVkc0xheW91dEFuZE1p
bk1heFJlY2FsYygpOworICAgICAgICAgICAgICAgICAgICBtYXJrZXItPnNldE5lZWRzTGF5b3V0
QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiB9CkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdEl0
ZW0uaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KTsKIAogICAgIHZpcnR1YWwg
dm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAg
dmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAKICAgICB2aXJ0dWFsIHZvaWQgcG9zaXRp
b25MaXN0TWFya2VyKCk7CiAKQEAgLTYyLDYgKzYyLDggQEAgcHVibGljOgogCiAgICAgY29uc3Qg
U3RyaW5nJiBtYXJrZXJUZXh0KCkgY29uc3Q7CiAKKyAgICBSZW5kZXJMaXN0TWFya2VyKiBtYXJr
ZXIoKSBjb25zdCB7IHJldHVybiBtX21hcmtlcjsgfQorCiBwcml2YXRlOgogICAgIHZvaWQgdXBk
YXRlTWFya2VyTG9jYXRpb24oKTsKICAgICBpbmxpbmUgaW50IGNhbGNWYWx1ZSgpIGNvbnN0OwpJ
bmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4Miw4ICs0ODIsOCBAQCBS
ZW5kZXJMaXN0TWFya2VyOjp+UmVuZGVyTGlzdE1hcmtlcigpCiAKIHZvaWQgUmVuZGVyTGlzdE1h
cmtlcjo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIHMpCiB7Ci0gICAgaWYgKHMgJiYgc3R5bGUoKSAm
JiAocy0+bGlzdFN0eWxlUG9zaXRpb24oKSAhPSBzdHlsZSgpLT5saXN0U3R5bGVQb3NpdGlvbigp
IHx8IHMtPmxpc3RTdHlsZVR5cGUoKSAhPSBzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpKQotICAg
ICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIGlmIChzdHlsZSgpICYm
IChzLT5saXN0U3R5bGVQb3NpdGlvbigpICE9IHN0eWxlKCktPmxpc3RTdHlsZVBvc2l0aW9uKCkg
fHwgcy0+bGlzdFN0eWxlVHlwZSgpICE9IHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkpCisgICAg
ICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIAogICAgIFJlbmRl
ckJveDo6c2V0U3R5bGUocyk7CiAKQEAgLTYyNiw4ICs2MjYsMjUgQEAgdm9pZCBSZW5kZXJMaXN0
TWFya2VyOjpwYWludChQYWludEluZm8mIAogdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpsYXlvdXQo
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBpZiAoIW1pbk1heEtub3duKCkp
Ci0gICAgICAgIGNhbGNNaW5NYXhXaWR0aCgpOworICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5
KCkpOworCisgICAgaWYgKGlzSW1hZ2UoKSkgeworICAgICAgICBtX3dpZHRoID0gbV9pbWFnZS0+
aW1hZ2UoKS0+d2lkdGgoKTsKKyAgICAgICAgbV9oZWlnaHQgPSBtX2ltYWdlLT5pbWFnZSgpLT5o
ZWlnaHQoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX3dpZHRoID0gbWluUHJlZldpZHRoKCk7
CisgICAgICAgIG1faGVpZ2h0ID0gc3R5bGUoKS0+Zm9udCgpLmhlaWdodCgpOworICAgIH0KKwor
ICAgIG1fbWFyZ2luTGVmdCA9IG1fbWFyZ2luUmlnaHQgPSAwOworCisgICAgTGVuZ3RoIGxlZnRN
YXJnaW4gPSBzdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CisgICAgTGVuZ3RoIHJpZ2h0TWFyZ2luID0g
c3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsKKyAgICBpZiAobGVmdE1hcmdpbi5pc0ZpeGVkKCkpCisg
ICAgICAgIG1fbWFyZ2luTGVmdCA9IGxlZnRNYXJnaW4udmFsdWUoKTsKKyAgICBpZiAocmlnaHRN
YXJnaW4uaXNGaXhlZCgpKQorICAgICAgICBtX21hcmdpblJpZ2h0ID0gcmlnaHRNYXJnaW4udmFs
dWUoKTsKKwogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApAQCAtNjM4LDIyICs2NTUs
MjEgQEAgdm9pZCBSZW5kZXJMaXN0TWFya2VyOjppbWFnZUNoYW5nZWQoQ2FjaAogICAgICAgICBy
ZXR1cm47CiAKICAgICBpZiAobV93aWR0aCAhPSBtX2ltYWdlLT5pbWFnZVNpemUoKS53aWR0aCgp
IHx8IG1faGVpZ2h0ICE9IG1faW1hZ2UtPmltYWdlU2l6ZSgpLmhlaWdodCgpIHx8IG1faW1hZ2Ut
PmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMo
KTsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgZWxz
ZQogICAgICAgICByZXBhaW50KCk7CiB9CiAKLXZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y2FsY01p
bk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6Y2FsY1ByZWZXaWR0aHMoKQogewot
ICAgIEFTU0VSVCghbWluTWF4S25vd24oKSk7CisgICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgp
KTsKIAogICAgIG1fdGV4dCA9ICIiOwogCiAgICAgaWYgKGlzSW1hZ2UoKSkgewotICAgICAgICBt
X3dpZHRoID0gbV9pbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKTsKLSAgICAgICAgbV9oZWlnaHQgPSBt
X2ltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKTsKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lk
dGggPSBtX3dpZHRoOwotICAgICAgICBzZXRNaW5NYXhLbm93bigpOworICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gbV9pbWFnZS0+aW1hZ2UoKS0+d2lkdGgoKTsKKyAg
ICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICAgICAgdXBkYXRlTWFyZ2lucygp
OwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02OTksODYgKzcxNSw4OSBAQCB2b2lkIFJl
bmRlckxpc3RNYXJrZXI6OmNhbGNNaW5NYXhXaWR0aCgpCiAgICAgICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICBtX3dpZHRoID0gd2lkdGg7Ci0gICAgbV9taW5XaWR0aCA9IHdpZHRoOwotICAg
IG1fbWF4V2lkdGggPSB3aWR0aDsKLQotICAgIC8vIEZJWE1FOiBBIGxpdHRsZSBzdHJhbmdlIHRv
IHNldCB0aGUgaGVpZ2h0IGluIGNhbGNNaW5NYXhXaWR0aC4KLSAgICBtX2hlaWdodCA9IGZvbnQu
aGVpZ2h0KCk7CisgICAgbV9taW5QcmVmV2lkdGggPSB3aWR0aDsKKyAgICBtX21heFByZWZXaWR0
aCA9IHdpZHRoOwogCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBzZXRQcmVmV2lkdGhzRGly
dHkoZmFsc2UpOworICAgIAorICAgIHVwZGF0ZU1hcmdpbnMoKTsKIH0KIAotdm9pZCBSZW5kZXJM
aXN0TWFya2VyOjpjYWxjV2lkdGgoKQordm9pZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJn
aW5zKCkKIHsKLSAgICAvLyBtX3dpZHRoIGlzIHNldCBpbiBjYWxjTWluTWF4V2lkdGgoKQogICAg
IGNvbnN0IEZvbnQmIGZvbnQgPSBzdHlsZSgpLT5mb250KCk7CiAKKyAgICBpbnQgbWFyZ2luTGVm
dCA9IDA7CisgICAgaW50IG1hcmdpblJpZ2h0ID0gMDsKKwogICAgIGlmIChpc0luc2lkZSgpKSB7
CiAgICAgICAgIGlmIChpc0ltYWdlKCkpIHsKICAgICAgICAgICAgIGlmIChzdHlsZSgpLT5kaXJl
Y3Rpb24oKSA9PSBMVFIpIHsKLSAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwotICAg
ICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBjTWFya2VyUGFkZGluZzsKKyAgICAgICAgICAg
ICAgICBtYXJnaW5MZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IGNNYXJr
ZXJQYWRkaW5nOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBtX21hcmdp
bkxlZnQgPSBjTWFya2VyUGFkZGluZzsKLSAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0g
MDsKKyAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gY01hcmtlclBhZGRpbmc7CisgICAgICAg
ICAgICAgICAgbWFyZ2luUmlnaHQgPSAwOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2Ug
c3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICAgICAgICAgIGNhc2UgRElT
QzoKICAgICAgICAgICAgIGNhc2UgQ0lSQ0xFOgogICAgICAgICAgICAgY2FzZSBTUVVBUkU6CiAg
ICAgICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewotICAgICAg
ICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAtMTsKLSAgICAgICAgICAgICAgICAgICAgbV9t
YXJnaW5SaWdodCA9IGZvbnQuYXNjZW50KCkgLSBtX3dpZHRoICsgMTsKKyAgICAgICAgICAgICAg
ICAgICAgbWFyZ2luTGVmdCA9IC0xOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9
IGZvbnQuYXNjZW50KCkgLSBtaW5QcmVmV2lkdGgoKSArIDE7CiAgICAgICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gZm9udC5hc2NlbnQoKSAt
IG1fd2lkdGggKyAxOwotICAgICAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gLTE7Cisg
ICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBmb250LmFzY2VudCgpIC0gbWluUHJlZldp
ZHRoKCkgKyAxOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5SaWdodCA9IC0xOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6
Ci0gICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gMDsKLSAgICAgICAgICAgICAgICBtX21h
cmdpblJpZ2h0ID0gMDsKKyAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gMDsKKyAgICAgICAg
ICAgICAgICBtYXJnaW5SaWdodCA9IDA7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAg
ICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAgICAgICAgICAgICBpZiAoaXNJ
bWFnZSgpKQotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IC1tX3dpZHRoIC0gY01hcmtl
clBhZGRpbmc7CisgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IC1taW5QcmVmV2lkdGgoKSAt
IGNNYXJrZXJQYWRkaW5nOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgaW50
IG9mZnNldCA9IGZvbnQuYXNjZW50KCkgKiAyIC8gMzsKICAgICAgICAgICAgICAgICBzd2l0Y2gg
KHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIERJ
U0M6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQ0lSQ0xFOgogICAgICAgICAgICAgICAgICAg
ICBjYXNlIFNRVUFSRToKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IC1v
ZmZzZXQgLSBjTWFya2VyUGFkZGluZyAtIDE7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJn
aW5MZWZ0ID0gLW9mZnNldCAtIGNNYXJrZXJQYWRkaW5nIC0gMTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIExOT05FOgotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1hcmdpbkxlZnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxl
ZnQgPSBtX3RleHQuaXNFbXB0eSgpID8gMCA6IC1tX3dpZHRoIC0gb2Zmc2V0IC8gMjsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBtX3RleHQuaXNFbXB0eSgpID8gMCA6IC1t
aW5QcmVmV2lkdGgoKSAtIG9mZnNldCAvIDI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgaWYgKGlzSW1hZ2UoKSkKLSAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKKyAgICAgICAgICAgICAg
ICBtYXJnaW5MZWZ0ID0gY01hcmtlclBhZGRpbmc7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgICAgICBpbnQgb2Zmc2V0ID0gZm9udC5hc2NlbnQoKSAqIDIgLyAzOwogICAgICAgICAg
ICAgICAgIHN3aXRjaCAoc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSB7CiAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgRElTQzoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBDSVJDTEU6CiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgU1FVQVJFOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9t
YXJnaW5MZWZ0ID0gb2Zmc2V0ICsgY01hcmtlclBhZGRpbmcgKyAxIC0gbV93aWR0aDsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBvZmZzZXQgKyBjTWFya2VyUGFkZGluZyAr
IDEgLSBtaW5QcmVmV2lkdGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgICAgICAgICBjYXNlIExOT05FOgotICAgICAgICAgICAgICAgICAgICAgICAgbV9t
YXJnaW5MZWZ0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAwOwog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBtX3RleHQuaXNFbXB0
eSgpID8gMCA6IG9mZnNldCAvIDI7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0
ID0gbV90ZXh0LmlzRW1wdHkoKSA/IDAgOiBvZmZzZXQgLyAyOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBtX21hcmdpblJpZ2h0ID0gLW1fbWFy
Z2luTGVmdCAtIG1fd2lkdGg7CisgICAgICAgIG1hcmdpblJpZ2h0ID0gLW1hcmdpbkxlZnQgLSBt
aW5QcmVmV2lkdGgoKTsKICAgICB9CisgICAgCisgICAgc3R5bGUoKS0+c2V0TWFyZ2luTGVmdChM
ZW5ndGgobWFyZ2luTGVmdCwgRml4ZWQpKTsKKyAgICBzdHlsZSgpLT5zZXRNYXJnaW5SaWdodChM
ZW5ndGgobWFyZ2luUmlnaHQsIEZpeGVkKSk7CiB9CiAKIHNob3J0IFJlbmRlckxpc3RNYXJrZXI6
OmxpbmVIZWlnaHQoYm9vbCwgYm9vbCkgY29uc3QKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0
TWFya2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAkocmV2
aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCSh3b3JraW5nIGNv
cHkpCkBAIC00NywxMiArNDcsMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQ
YWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7
Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBj
YWxjUHJlZldpZHRocygpOwogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJ
bWFnZSopOwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0aCgpOwotCiAgICAgdmlydHVhbCBJ
bmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sLCBib29sLCBib29sKTsKIAogICAgIHZpcnR1
YWwgc2hvcnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0g
ZmFsc2UpIGNvbnN0OwpAQCAtNjksMTAgKzY3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIElu
dFJlY3Qgc2VsZWN0aW9uUmVjdCgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxl
YWYoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2b2lkIHVwZGF0ZU1hcmdpbnMoKTsK
KwogcHJpdmF0ZToKICAgICBJbnRSZWN0IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwogCi0gICAg
U3RyaW5nIG1fdGV4dDsKKyAgICBtdXRhYmxlIFN0cmluZyBtX3RleHQ7CiAgICAgQ2FjaGVkSW1h
Z2UqIG1faW1hZ2U7CiAgICAgUmVuZGVyTGlzdEl0ZW0qIG1fbGlzdEl0ZW07CiAgICAgU2VsZWN0
aW9uU3RhdGUgbV9zZWxlY3Rpb25TdGF0ZTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJNZW51TGlz
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAkocmV2aXNp
b24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzAsNyArMTMwLDcgQEAgdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dp
ZHRoKAogICAgICAgICByZXR1cm47CiAKICAgICBtX29wdGlvbnNXaWR0aCA9IHdpZHRoOwotICAg
IHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIHZvaWQgUmVuZGVyTWVudUxpc3Q6OnVwZGF0ZUZyb21F
bGVtZW50KCkKQEAgLTE5OCwzNCArMTk4LDM0IEBAIEludFJlY3QgUmVuZGVyTWVudUxpc3Q6OmNv
bnRyb2xDbGlwUmVjdCgKICAgICAgICAgICAgICAgICAgICBjb250ZW50V2lkdGgoKSwgY29udGVu
dEhlaWdodCgpKTsKIH0KIAotdm9pZCBSZW5kZXJNZW51TGlzdDo6Y2FsY01pbk1heFdpZHRoKCkK
K3ZvaWQgUmVuZGVyTWVudUxpc3Q6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBtX21pbldpZHRo
ID0gMDsKLSAgICBtX21heFdpZHRoID0gMDsKKyAgICBtX21pblByZWZXaWR0aCA9IDA7CisgICAg
bV9tYXhQcmVmV2lkdGggPSAwOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgp
ICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluV2lkdGggPSBt
X21heFdpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkp
OworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRC
b3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2UKLSAgICAgICAgbV9t
YXhXaWR0aCA9IG1heChtX29wdGlvbnNXaWR0aCwgdGhlbWUoKS0+bWluaW11bU1lbnVMaXN0U2l6
ZShzdHlsZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fb3B0aW9uc1dpZHRo
LCB0aGVtZSgpLT5taW5pbXVtTWVudUxpc3RTaXplKHN0eWxlKCkpKTsKIAogICAgIGlmIChzdHls
ZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkg
PiAwKSB7Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtYXgobV9tYXhXaWR0aCwgY2FsY0NvbnRlbnRC
b3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5XaWR0
aCA9IG1heChtX21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRo
KCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0
aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAg
ICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94
V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChzdHls
ZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygpICYm
IHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkKLSAgICAgICAgbV9taW5XaWR0aCA9IDA7
CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1fbWluV2lk
dGggPSBtX21heFdpZHRoOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRo
OwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1h
eFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhXaWR0
aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRo
KCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWluV2lkdGgsIGNhbGND
b250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1f
bWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0
eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1p
bihtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgp
LnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBwYWRkaW5nTGVmdCgpICsgcGFk
ZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpOwotICAgIG1fbWluV2lk
dGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0b0FkZDsKKyAgICBtX21pblByZWZXaWR0
aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCArPSB0b0FkZDsKIAotICAgIHNldE1pbk1h
eEtub3duKCk7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5k
ZXJNZW51TGlzdDo6c2hvd1BvcHVwKCkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCShyZXZpc2lvbiAyMDk5
NykKKysrIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw3
ICs1Nyw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgp
IGNvbnN0IHsgcmV0dXJuICJSZW5kZXJNZW51TGlzdCI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBj
YWxjTWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKIAog
ICAgIGJvb2wgcG9wdXBJc1Zpc2libGUoKSBjb25zdCB7IHJldHVybiBtX3BvcHVwSXNWaXNpYmxl
OyB9CiAgICAgdm9pZCBzaG93UG9wdXAoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAy
MDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
NzYsMTMgKzE3NiwxMiBAQCBSZW5kZXJPYmplY3Q6OlJlbmRlck9iamVjdChOb2RlKiBub2RlKQog
ICAgICwgbV9uZWVkc0xheW91dChmYWxzZSkKICAgICAsIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91
dChmYWxzZSkKICAgICAsIG1fcG9zQ2hpbGROZWVkc0xheW91dChmYWxzZSkKLSAgICAsIG1fbWlu
TWF4S25vd24oZmFsc2UpCisgICAgLCBtX3ByZWZXaWR0aHNEaXJ0eShmYWxzZSkKICAgICAsIG1f
ZmxvYXRpbmcoZmFsc2UpCiAgICAgLCBtX3Bvc2l0aW9uZWQoZmFsc2UpCiAgICAgLCBtX3JlbFBv
c2l0aW9uZWQoZmFsc2UpCiAgICAgLCBtX3BhaW50QmFja2dyb3VuZChmYWxzZSkKICAgICAsIG1f
aXNBbm9ueW1vdXMobm9kZSA9PSBub2RlLT5kb2N1bWVudCgpKQotICAgICwgbV9yZWNhbGNNaW5N
YXgoZmFsc2UpCiAgICAgLCBtX2lzVGV4dChmYWxzZSkKICAgICAsIG1faW5saW5lKHRydWUpCiAg
ICAgLCBtX3JlcGxhY2VkKGZhbHNlKQpAQCAtMjUyLDcgKzI1MSw3IEBAIHZvaWQgUmVuZGVyT2Jq
ZWN0OjphZGRDaGlsZChSZW5kZXJPYmplY3QKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAotUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmpl
Y3QqKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJP
YmplY3QqLCBib29sKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiAw
OwpAQCAtMjYzLDEyICsyNjIsMTcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJlbW92ZUNoaWxkKFJl
bmRlck9iagogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJlbmRlck9iamVj
dDo6YXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCopCit2b2lkIFJlbmRlck9iamVjdDo6bW92
ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi12b2lkIFJlbmRlck9iamVjdDo6aW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCosIFJl
bmRlck9iamVjdCopCit2b2lkIFJlbmRlck9iamVjdDo6YXBwZW5kQ2hpbGROb2RlKFJlbmRlck9i
amVjdCosIGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgUmVu
ZGVyT2JqZWN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0Kiwg
Ym9vbCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KQEAgLTQ5OSwxMCArNTAzLDYg
QEAgUmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5lQmxvYwogICAgIHJldHVybiAw
OwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlRmlyc3RMZXR0ZXIoKQotewotfQotCiBp
bnQgUmVuZGVyT2JqZWN0OjpvZmZzZXRMZWZ0KCkgY29uc3QKIHsKICAgICBSZW5kZXJPYmplY3Qq
IG9mZnNldFBhciA9IG9mZnNldFBhcmVudCgpOwpAQCAtNjU0LDYgKzY1NCwyOSBAQCB2b2lkIFJl
bmRlck9iamVjdDo6bWFya0FsbERlc2NlbmRhbnRzV2l0CiB7CiB9CiAKK3ZvaWQgUmVuZGVyT2Jq
ZWN0OjpzZXRQcmVmV2lkdGhzRGlydHkoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzKQoreworICAg
IGJvb2wgcHJlZldpZHRoc0RpcnR5ID0gbV9wcmVmV2lkdGhzRGlydHk7CisgICAgbV9wcmVmV2lk
dGhzRGlydHkgPSBiOworICAgIGlmIChiKSB7CisgICAgICAgIGlmICghcHJlZldpZHRoc0RpcnR5
ICYmIG1hcmtQYXJlbnRzICYmIChzdHlsZSgpLT5wb3NpdGlvbigpICE9IEZpeGVkUG9zaXRpb24g
JiYgc3R5bGUoKS0+cG9zaXRpb24oKSAhPSBBYnNvbHV0ZVBvc2l0aW9uKSkKKyAgICAgICAgICAg
IGludmFsaWRhdGVDb250YWluaW5nQmxvY2tQcmVmV2lkdGhzKCk7CisgICAgfQorfQorCit2b2lk
IFJlbmRlck9iamVjdDo6aW52YWxpZGF0ZUNvbnRhaW5pbmdCbG9ja1ByZWZXaWR0aHMoKQorewor
ICAgIFJlbmRlck9iamVjdCogbyA9IGNvbnRhaW5pbmdCbG9jaygpOworICAgIHdoaWxlIChvICYm
ICFvLT5tX3ByZWZXaWR0aHNEaXJ0eSkgeworICAgICAgICBvLT5tX3ByZWZXaWR0aHNEaXJ0eSA9
IHRydWU7CisgICAgICAgIGlmIChvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRp
b24gfHwgby0+c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKQorICAgICAg
ICAgICAgLy8gQSBwb3NpdGlvbmVkIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtaW4vbWF4
IHdpZHRoIG9mIGl0cyBjb250YWluaW5nIGJsb2NrIGV2ZXIuICBXZSBjYW4gb3B0aW1pemUgdGhp
cworICAgICAgICAgICAgLy8gY2FzZSBhbmQgbm8gZ28gdXAgYW55IGZ1cnRoZXIuCisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgbyA9IG8tPmNvbnRhaW5pbmdCbG9jaygpOworICAgIH0KK30K
Kwogdm9pZCBSZW5kZXJPYmplY3Q6OnNldE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFy
ZW50cykKIHsKICAgICBib29sIGFscmVhZHlOZWVkZWRMYXlvdXQgPSBtX25lZWRzTGF5b3V0OwpA
QCAtNzEwLDggKzczMywxMiBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFya0NvbnRhaW5pbmdCbG9j
a3NGCiAKIFJlbmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0
CiB7Ci0gICAgaWYgKGlzVGFibGVDZWxsKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJUYWJsZUNlbGwqPih0aGlzKS0+dGFibGUoKTsKKyAgICBpZiAoaXNUYWJsZUNl
bGwoKSkgeworICAgICAgICBpZiAocGFyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8Y29uc3QgUmVuZGVyVGFibGVDZWxsKj4odGhpcyktPnRhYmxlKCk7CisgICAgICAgIHJl
dHVybiAwOworICAgIH0KKwogICAgIGlmIChpc1JlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJu
IChSZW5kZXJCbG9jayopdGhpczsKIApAQCAtMTkxMyw4ICsxOTQwLDYgQEAgRGVwcmVjYXRlZFN0
cmluZyBSZW5kZXJPYmplY3Q6OmluZm9ybWF0aQogICAgICAgICB0cyA8PCAicHMgIjsKICAgICBp
ZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgdHMgPDwgIm5sICI7Ci0gICAgaWYgKG1fcmVjYWxj
TWluTWF4KQotICAgICAgICB0cyA8PCAicm1tICI7CiAgICAgaWYgKHN0eWxlKCkgJiYgc3R5bGUo
KS0+ekluZGV4KCkpCiAgICAgICAgIHRzIDw8ICJ6STogIiA8PCBzdHlsZSgpLT56SW5kZXgoKTsK
ICAgICBpZiAoZWxlbWVudCgpKSB7CkBAIC0xOTU0LDggKzE5NzksOCBAQCB2b2lkIFJlbmRlck9i
amVjdDo6ZHVtcChUZXh0U3RyZWFtKiBzdHJlCiAgICAgICAgICpzdHJlYW0gPDwgIiBwYWludEJh
Y2tncm91bmQiOwogICAgIGlmIChuZWVkc0xheW91dCgpKQogICAgICAgICAqc3RyZWFtIDw8ICIg
bmVlZHNMYXlvdXQiOwotICAgIGlmIChtaW5NYXhLbm93bigpKQotICAgICAgICAqc3RyZWFtIDw8
ICIgbWluTWF4S25vd24iOworICAgIGlmIChwcmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgKnN0
cmVhbSA8PCAiIHByZWZXaWR0aHNEaXJ0eSI7CiAgICAgKnN0cmVhbSA8PCBlbmRsOwogCiAgICAg
UmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKQEAgLTIyNzMsNyArMjI5OCw3IEBA
IHZvaWQgUmVuZGVyT2JqZWN0OjpzZXRTdHlsZShSZW5kZXJTdHlsZSoKICAgICAvLyBXZSBkbyBo
YXZlIHRvIHNjaGVkdWxlIGxheW91dHMsIHRob3VnaCwgc2luY2UgYSBzdHlsZSBjaGFuZ2UgY2Fu
IGZvcmNlIHVzIHRvCiAgICAgLy8gbmVlZCB0byByZWxheW91dC4KICAgICBpZiAoZCA9PSBSZW5k
ZXJTdHlsZTo6TGF5b3V0ICYmIG1fcGFyZW50KQotICAgICAgICBzZXROZWVkc0xheW91dEFuZE1p
bk1heFJlY2FsYygpOworICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKICAgICBlbHNlIGlmIChtX3BhcmVudCAmJiAhaXNUZXh0KCkgJiYgKGQgPT0gUmVuZGVyU3R5
bGU6OlJlcGFpbnRMYXllciB8fCBkID09IFJlbmRlclN0eWxlOjpSZXBhaW50KSkKICAgICAgICAg
Ly8gRG8gYSByZXBhaW50IHdpdGggdGhlIG5ldyBzdHlsZSBub3csIGUuZy4sIGZvciBleGFtcGxl
IGlmIHdlIGdvIGZyb20KICAgICAgICAgLy8gbm90IGhhdmluZyBhbiBvdXRsaW5lIHRvIGhhdmlu
ZyBhbiBvdXRsaW5lLgpAQCAtMjQ5Miw3ICsyNTE3LDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmRl
c3Ryb3koKQogICAgIGlmIChtX2hhc0NvdW50ZXJOb2RlTWFwKQogICAgICAgICBSZW5kZXJDb3Vu
dGVyOjpkZXN0cm95Q291bnRlck5vZGVzKHRoaXMpOwogCi0gICAgZG9jdW1lbnQoKS0+YXhPYmpl
Y3RDYWNoZSgpLT5yZW1vdmUodGhpcyk7CisgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2li
aWxpdHlFbmFibGVkKCkpCisgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cmVt
b3ZlKHRoaXMpOwogCiAgICAgLy8gQnkgZGVmYXVsdCBubyByZWYtY291bnRpbmcuIFJlbmRlcldp
ZGdldDo6ZGVzdHJveSgpIGRvZXNuJ3QgY2FsbAogICAgIC8vIHRoaXMgZnVuY3Rpb24gYmVjYXVz
ZSBpdCBuZWVkcyB0byBkbyByZWYtY291bnRpbmcuIElmIGFueXRoaW5nCkBAIC0yNzAxLDQyICsy
NzI3LDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVWZXJ0aWNhbFBvcwogICAgIH0K
IH0KIAotdm9pZCBSZW5kZXJPYmplY3Q6OnJlY2FsY01pbk1heFdpZHRocygpCi17Ci0gICAgQVNT
RVJUKG1fcmVjYWxjTWluTWF4KTsKLQotICAgIG1fcmVjYWxjTWluTWF4ID0gZmFsc2U7Ci0gICAg
dXBkYXRlRmlyc3RMZXR0ZXIoKTsKLQotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENo
aWxkKCk7Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGludCBjbWluID0gMDsKLSAgICAg
ICAgaW50IGNtYXggPSAwOwotICAgICAgICBib29sIHRlc3QgPSBmYWxzZTsKLSAgICAgICAgaWYg
KChtX21pbk1heEtub3duICYmIGNoaWxkLT5tX3JlY2FsY01pbk1heCkgfHwgIWNoaWxkLT5tX21p
bk1heEtub3duKSB7Ci0gICAgICAgICAgICBjbWluID0gY2hpbGQtPm1pbldpZHRoKCk7Ci0gICAg
ICAgICAgICBjbWF4ID0gY2hpbGQtPm1heFdpZHRoKCk7Ci0gICAgICAgICAgICB0ZXN0ID0gdHJ1
ZTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPm1fcmVjYWxjTWluTWF4KQotICAgICAg
ICAgICAgY2hpbGQtPnJlY2FsY01pbk1heFdpZHRocygpOwotICAgICAgICBpZiAoIWNoaWxkLT5t
X21pbk1heEtub3duKQotICAgICAgICAgICAgY2hpbGQtPmNhbGNNaW5NYXhXaWR0aCgpOwotICAg
ICAgICBpZiAobV9taW5NYXhLbm93biAmJiB0ZXN0ICYmIChjbWluICE9IGNoaWxkLT5taW5XaWR0
aCgpIHx8IGNtYXggIT0gY2hpbGQtPm1heFdpZHRoKCkpKQotICAgICAgICAgICAgbV9taW5NYXhL
bm93biA9IGZhbHNlOwotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwotICAg
IH0KLQotICAgIC8vIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUsIGlmIHRoZSBjb250YWlucyBpbmxp
bmUgY2hpbGRyZW4sIGFzIHRoZSBjaGFuZ2UgY291bGQgaGF2ZQotICAgIC8vIGhhcHBlbmVkIHNv
bWV3aGVyZSBkZWVwIGluc2lkZSB0aGUgY2hpbGQgdHJlZS4gQWxzbyBkbyB0aGlzIGZvciBibG9j
a3Mgb3IgdGFibGVzIHRoYXQKLSAgICAvLyBhcmUgaW5saW5lIChpLmUuLCBpbmxpbmUtYmxvY2sg
YW5kIGlubGluZS10YWJsZSkuCi0gICAgaWYgKCghaXNJbmxpbmUoKSB8fCBpc0lubGluZUJsb2Nr
T3JJbmxpbmVUYWJsZSgpKSAmJiBjaGlsZHJlbklubGluZSgpKQotICAgICAgICBtX21pbk1heEtu
b3duID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fbWluTWF4S25vd24pCi0gICAgICAgIGNhbGNNaW5N
YXhXaWR0aCgpOwotfQotCiB2b2lkIFJlbmRlck9iamVjdDo6c2NoZWR1bGVSZWxheW91dCgpCiB7
CiAgICAgaWYgKGlzUmVuZGVyVmlldygpKSB7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCShyZXZpc2lvbiAyMDk5
NykKKysrIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcg
KzE3Niw2IEBAIHB1YmxpYzoKICAgICAvLyBPYnRhaW5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBi
bG9jayAoaW5jbHVkaW5nIHRoaXMgYmxvY2spIHRoYXQgY29udHJpYnV0ZXMgYSBmaXJzdC1saW5l
IHN0eWxlIHRvIG91ciBpbmxpbmUKICAgICAvLyBjaGlsZHJlbi4KICAgICB2aXJ0dWFsIFJlbmRl
ckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVG
aXJzdExldHRlcigpOwogCiAgICAgLy8gQ2FsbGVkIHdoZW4gYW4gb2JqZWN0IHRoYXQgd2FzIGZs
b2F0aW5nIG9yIHBvc2l0aW9uZWQgYmVjb21lcyBhIG5vcm1hbCBmbG93IG9iamVjdAogICAgIC8v
IGFnYWluLiAgV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIHJlbmRlciB0cmVlIHVwZGF0ZXMgYXMg
bmVlZGVkIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcKQEAgLTIwNSw5ICsyMDQsMTIgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVzQW5vbnltb3VzV3JhcHBlcigpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CiAKICAgICAvLyByYXcgdHJlZSBtYW5pcHVsYXRpb24KLSAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwotICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB2b2lk
IGluc2VydENoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9y
ZSk7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIHJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmpl
Y3QqLCBib29sIGZ1bGxSZW1vdmUgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ2hp
bGROb2RlKFJlbmRlck9iamVjdCosIGJvb2wgZnVsbEFwcGVuZCA9IHRydWUpOworICAgIHZpcnR1
YWwgdm9pZCBpbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmUsIGJvb2wgZnVsbEluc2VydCA9IHRydWUpOworICAgIC8vIERlc2lnbmVkIGZvciBz
cGVlZC4gIERvbid0IHdhc3RlIHRpbWUgZG9pbmcgYSBidW5jaCBvZiB3b3JrIGxpa2UgbGF5ZXIg
dXBkYXRpbmcgYW5kIHJlcGFpbnRpbmcgd2hlbiB3ZSBrbm93IHRoYXQgb3VyCisgICAgLy8gY2hh
bmdlIGluIHBhcmVudGFnZSBpcyBub3QgZ29pbmcgdG8gYWZmZWN0IGFueXRoaW5nLgorICAgIHZp
cnR1YWwgdm9pZCBtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwogICAgIC8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBwcm90ZWN0ZWQ6CkBAIC0zMTgsOCAr
MzIwLDcgQEAgcHVibGljOgogICAgIGJvb2wgcG9zQ2hpbGROZWVkc0xheW91dCgpIGNvbnN0IHsg
cmV0dXJuIG1fcG9zQ2hpbGROZWVkc0xheW91dDsgfQogICAgIGJvb2wgbm9ybWFsQ2hpbGROZWVk
c0xheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dDsgfQogCi0g
ICAgYm9vbCBtaW5NYXhLbm93bigpIGNvbnN0IHsgcmV0dXJuIG1fbWluTWF4S25vd247IH0KLSAg
ICBib29sIHJlY2FsY01pbk1heCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVjYWxjTWluTWF4OyB9Cisg
ICAgYm9vbCBwcmVmV2lkdGhzRGlydHkoKSBjb25zdCB7IHJldHVybiBtX3ByZWZXaWR0aHNEaXJ0
eTsgfQogCiAgICAgYm9vbCBpc1NlbGVjdGlvbkJvcmRlcigpIGNvbnN0OwogCkBAIC0zNjgsMjQg
KzM2OSwxMiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXROZWVkc0xheW91dChib29sIGIsIGJvb2wg
bWFya1BhcmVudHMgPSB0cnVlKTsKICAgICB2b2lkIHNldENoaWxkTmVlZHNMYXlvdXQoYm9vbCBi
LCBib29sIG1hcmtQYXJlbnRzID0gdHJ1ZSk7CiAKLSAgICB2b2lkIHNldE1pbk1heEtub3duKGJv
b2wgYiA9IHRydWUpCi0gICAgewotICAgICAgICBtX21pbk1heEtub3duID0gYjsKLSAgICAgICAg
aWYgKCFiKSB7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSB0aGlzOwotICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiByb290ID0gdGhpczsKLSAgICAgICAgICAgIHdoaWxlKG8pIHsgLy8g
RklYTUU6ICYmICFvLT5tX3JlY2FsY01pbk1heCApIHsKLSAgICAgICAgICAgICAgICBvLT5tX3Jl
Y2FsY01pbk1heCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgcm9vdCA9IG87Ci0gICAgICAgICAg
ICAgICAgbyA9IG8tPm1fcGFyZW50OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgdm9pZCBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpCi0gICAgewotICAgICAg
ICBzZXRNaW5NYXhLbm93bihmYWxzZSk7CisgICAgdm9pZCBzZXRQcmVmV2lkdGhzRGlydHkoYm9v
bCwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOworICAgIHZvaWQgaW52YWxpZGF0ZUNvbnRhaW5p
bmdCbG9ja1ByZWZXaWR0aHMoKTsKKyAgICAKKyAgICB2b2lkIHNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpIHsKICAgICAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgICAg
IHNldFByZWZXaWR0aHNEaXJ0eSh0cnVlKTsKICAgICB9CiAKICAgICB2b2lkIHNldFBvc2l0aW9u
ZWQoYm9vbCBiID0gdHJ1ZSkgIHsgbV9wb3NpdGlvbmVkID0gYjsgIH0KQEAgLTQ1OCwyNSArNDQ3
LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50IGNsaXB5LCBpbnQgY2xpcGgsIGludCB0eCwgaW50IHR5LCBpbnQgd2lkdGgsIGludCBoZWln
aHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgaW5jbHVk
ZUxlZnRFZGdlID0gdHJ1ZSwgYm9vbCBpbmNsdWRlUmlnaHRFZGdlID0gdHJ1ZSkgeyB9CiAKLSAg
ICAvKgotICAgICAqIFRoaXMgZnVuY3Rpb24gY2FsY3VsYXRlcyB0aGUgbWluaW11bSAmIG1heGlt
dW0gd2lkdGggdGhhdCB0aGUgb2JqZWN0Ci0gICAgICogY2FuIGJlIHNldCB0by4KLSAgICAgKgot
ICAgICAqIHdoZW4gdGhlIEVsZW1lbnQgY2FsbHMgc2V0TWluTWF4S25vd24odHJ1ZSksIGNhbGNN
aW5NYXhXaWR0aCgpIHdpbGwKLSAgICAgKiBiZSBubyBsb25nZXIgY2FsbGVkLgotICAgICAqCi0g
ICAgICogd2hlbiBhIGVsZW1lbnQgaGFzIGEgZml4ZWQgc2l6ZSwgbV9taW5XaWR0aCBhbmQgbV9t
YXhXaWR0aCBzaG91bGQgYmUKLSAgICAgKiBzZXQgdG8gdGhlIHNhbWUgdmFsdWUuIFRoaXMgaGFz
IHRoZSBzcGVjaWFsIG1lYW5pbmcgdGhhdCBtX3dpZHRoLAotICAgICAqIGNvbnRhaW5zIHRoZSBh
Y3R1YWwgdmFsdWUuCi0gICAgICoKLSAgICAgKiBhc3N1bWVzIGNhbGNNaW5NYXhXaWR0aCBoYXMg
YWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgYWxsIGNoaWxkcmVuLgotICAgICAqLwotICAgIHZpcnR1
YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKSB7IH0KLQotICAgIC8qCi0gICAgICogRG9lcyB0aGUg
bWluIG1heCB3aWR0aCByZWNhbGN1bGF0aW9ucyBhZnRlciBjaGFuZ2VzLgotICAgICAqLwotICAg
IHZvaWQgcmVjYWxjTWluTWF4V2lkdGhzKCk7CisgICAgCisgICAgLy8gVGhpcyBmdW5jdGlvbiBj
YWxjdWxhdGVzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIHByZWZlcnJlZCB3aWR0aHMgZm9yIGFu
IG9iamVjdC4KKyAgICAvLyBUaGVzZSB2YWx1ZXMgYXJlIHVzZWQgaW4gc2hyaW5rLXRvLWZpdCBs
YXlvdXQgc3lzdGVtcy4gIFRoZXNlIGluY2x1ZGUgdGFibGVzLCBwb3NpdGlvbmVkIG9iamVjdHMs
IGZsb2F0cworICAgIC8vIGFuZCBmbGV4aWJsZSBib3hlcy4KKyAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y1ByZWZXaWR0aHMoKSB7fQogCiAgICAgLyoKICAgICAgKiBDYWxjdWxhdGVzIHRoZSBhY3R1YWwg
d2lkdGggb2YgdGhlIG9iamVjdCAob25seSBmb3Igbm9uIGlubGluZQpAQCAtNjg1LDggKzY2MCw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRGb2N1c1JpbmdSZWN0cyhHcmFwaGlj
c0NvbnRleHQqLCBpbnQgdHgsIGludCB0eSk7CiAKLSAgICB2aXJ0dWFsIGludCBtaW5XaWR0aCgp
IGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAgICB2aXJ0dWFsIGludCBtYXhXaWR0aCgpIGNvbnN0IHsg
cmV0dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBtaW5QcmVmV2lkdGgoKSBjb25zdCB7IHJldHVy
biAwOyB9CisgICAgdmlydHVhbCBpbnQgbWF4UHJlZldpZHRoKCkgY29uc3QgeyByZXR1cm4gMDsg
fQogCiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZTsgfQog
ICAgIFJlbmRlclN0eWxlKiBmaXJzdExpbmVTdHlsZSgpIGNvbnN0OwpAQCAtOTEyLDcgKzg4Nyw3
IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX25lZWRzTGF5b3V0ICAgICAgICAgICAgICAgOiAxOwog
ICAgIGJvb2wgbV9ub3JtYWxDaGlsZE5lZWRzTGF5b3V0ICAgIDogMTsKICAgICBib29sIG1fcG9z
Q2hpbGROZWVkc0xheW91dCAgICAgICA6IDE7Ci0gICAgYm9vbCBtX21pbk1heEtub3duICAgICAg
ICAgICAgICAgOiAxOworICAgIGJvb2wgbV9wcmVmV2lkdGhzRGlydHkgICAgICAgICAgIDogMTsK
ICAgICBib29sIG1fZmxvYXRpbmcgICAgICAgICAgICAgICAgICA6IDE7CiAKICAgICBib29sIG1f
cG9zaXRpb25lZCAgICAgICAgICAgICAgICA6IDE7CkBAIC05MjEsNyArODk2LDYgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2tncm91
bmQgcGFpbnRpbmcgcGhhc2UgKGJhY2tncm91bmQsIGJvcmRlciwgZXRjKQogCiAgICAgYm9vbCBt
X2lzQW5vbnltb3VzICAgICAgICAgICAgICAgOiAxOwotICAgIGJvb2wgbV9yZWNhbGNNaW5NYXgg
ICAgICAgICAgICAgIDogMTsKICAgICBib29sIG1faXNUZXh0ICAgICAgICAgICAgICAgICAgICA6
IDE7CiAgICAgYm9vbCBtX2lubGluZSAgICAgICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wg
bV9yZXBsYWNlZCAgICAgICAgICAgICAgICAgIDogMTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJQ
YXJ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAJKHJldmlzaW9u
IDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
Myw3ICs2Myw3IEBAIHZvaWQgUmVuZGVyUGFydDo6c2V0V2lkZ2V0KFdpZGdldCogd2lkZ2UKICAg
ICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPnJlZigpOwogICAgICAg
ICBSZW5kZXJXaWRnZXQ6OnNldFdpZGdldCh3aWRnZXQpOwogCi0gICAgICAgIHNldE5lZWRzTGF5
b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRo
c1JlY2FsYygpOwogCiAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgc2Nyb2xsYmFycyBhcmUgc2V0
IGNvcnJlY3RseSBmb3IgcmVzdG9yZQogICAgICAgICAvLyAjIyMgZmluZCBiZXR0ZXIgZml4Cklu
ZGV4OiByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9S
ZW5kZXJQYXJ0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEwNyw3IEBAIHZv
aWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgVmVjdG9yPFN0cmluZz4gcGFy
YW1WYWx1ZXM7CiAgIEZyYW1lKiBmcmFtZSA9IG1fdmlldy0+ZnJhbWUoKTsKIAotICBzZXROZWVk
c0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNS
ZWNhbGMoKTsKIAogICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKG9iamVjdFRhZykpIHsKIApA
QCAtMjQ1LDcgKzI0NSw2IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkK
IHZvaWQgUmVuZGVyUGFydE9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlv
dXQoKSk7Ci0gICAgQVNTRVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgY2FsY1dpZHRoKCk7CiAg
ICAgY2FsY0hlaWdodCgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lvbiAyMDk5NykK
KysrIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE4
ICs3NSwxOCBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWludEluCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNhbGNNaW5NYXhXaWR0aCgp
Cit2b2lkIFJlbmRlclJlcGxhY2VkOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgQVNTRVJUKCFt
aW5NYXhLbm93bigpKTsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgaW50
IHdpZHRoID0gY2FsY1JlcGxhY2VkV2lkdGgoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmln
aHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7CiAgICAgaWYgKHN0eWxlKCktPndp
ZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkgJiYgc3R5bGUo
KS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKSB7Ci0gICAgICAgIG1fbWluV2lkdGggPSAwOwotICAg
ICAgICBtX21heFdpZHRoID0gd2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAg
ICAgICAgbV9tYXhQcmVmV2lkdGggPSB3aWR0aDsKICAgICB9IGVsc2UKLSAgICAgICAgbV9taW5X
aWR0aCA9IG1fbWF4V2lkdGggPSB3aWR0aDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21h
eFByZWZXaWR0aCA9IHdpZHRoOwogCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBzZXRQcmVm
V2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiBzaG9ydCBSZW5kZXJSZXBsYWNlZDo6bGluZUhlaWdo
dChib29sLCBib29sKSBjb25zdApJbmRleDogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJldmlzaW9uIDIwOTk3KQor
KysgcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1
LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sIGZpcnN0TGlu
ZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgc2hvcnQg
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFs
c2UpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOworICAgIHZp
cnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBh
aW50SW5mbyYsIGludCB0eCwgaW50IHR5KSA9IDA7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWlu
ZXIuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxNyArODUsOSBAQCBzaG9ydCBSZW5kZXJTVkdDb250
YWluZXI6OmJhc2VsaW5lUG9zaXRpCiAgICAgcmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCkg
KyBtYXJnaW5Cb3R0b20oKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmNhbGNNaW5N
YXhXaWR0aCgpCi17Ci0gICAgQVNTRVJUKCFtaW5NYXhLbm93bigpKTsKLSAgICBtX21pbldpZHRo
ID0gbV9tYXhXaWR0aCA9IDA7Ci0gICAgc2V0TWluTWF4S25vd24oKTsKLX0KLQogdm9pZCBSZW5k
ZXJTVkdDb250YWluZXI6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwot
ICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIGNhbGNWaWV3cG9ydCgpOwogCkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5k
ZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94
ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihib29s
IGIsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFs
IHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAg
IHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBhcmVudFkp
OwogICAgIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHJldmlz
aW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCw2IEBAIHNob3J0IFJlbmRlclNWR0hpZGRlbkNvbnRh
aW5lcjo6YmFzZWxpbmUKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJTVkdIaWRkZW5D
b250YWluZXI6OmNhbGNNaW5NYXhXaWR0aCgpCi17Ci0gICAgQVNTRVJUKCFtaW5NYXhLbm93bigp
KTsKLSAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IDA7Ci0gICAgc2V0TWluTWF4S25vd24o
KTsKLX0KLQogdm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmxheW91dCgpCiB7CiAgICAg
QVNTRVJUKG5lZWRzTGF5b3V0KCkpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNv
bnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWlu
ZXIuaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogICAgICAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExp
bmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3Np
dGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKICAgICAgICAg
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwg
aW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKICAgICAgICAgCkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3Bw
CShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBib29sIFJlbmRlclNWR1RleHQ6OnJlcXVpcmVzTGF5
ZXIoKQogdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xh
eW91dCgpKTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBJbnRSZWN0IG9sZEJv
dW5kczsKICAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
U2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkocmV2
aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMyLDM0ICsxMzIsMzQgQEAgc2hvcnQgUmVuZGVyU2xpZGVyOjpiYXNlbGluZVBvc2l0
aW9uKGJvbwogICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpOwogfQogCi12b2lkIFJl
bmRlclNsaWRlcjo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyU2xpZGVyOjpjYWxjUHJl
ZldpZHRocygpCiB7Ci0gICAgbV9taW5XaWR0aCA9IDA7Ci0gICAgbV9tYXhXaWR0aCA9IDA7Cisg
ICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgIG1fbWF4UHJlZldpZHRoID0gMDsKIAogICAgIGlm
IChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkg
PiAwKQotICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lk
dGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBt
X21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1
ZSgpKTsKICAgICBlbHNlCi0gICAgICAgIG1fbWF4V2lkdGggPSBkZWZhdWx0VHJhY2tMZW5ndGg7
CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gZGVmYXVsdFRyYWNrTGVuZ3RoOwogCiAgICAgaWYg
KHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFs
dWUoKSA+IDApIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9IG1heChtX21heFdpZHRoLCBjYWxjQ29u
dGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21p
bldpZHRoID0gbWF4KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWlu
V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJl
ZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkp
OworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9IGVsc2UgaWYg
KHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRv
KCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICBtX21pbldpZHRo
ID0gMDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9t
aW5XaWR0aCA9IG1fbWF4V2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVm
V2lkdGg7CiAgICAgCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0
eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAg
bV9tYXhXaWR0aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWluV2lk
dGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Cisg
ICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJv
eFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5t
YXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBwYWRkaW5nTGVm
dCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpOwotICAg
IG1fbWluV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0b0FkZDsKKyAgICBtX21p
blByZWZXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCArPSB0b0FkZDsKIAotICAg
IHNldE1pbk1heEtub3duKCk7IAorICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7IAogfQog
CiB2b2lkIFJlbmRlclNsaWRlcjo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0eWxlKQpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJTbGlkZXIuaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAg
ICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVu
ZGVyU2xpZGVyIjsgfQogCiAgICAgICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbigg
Ym9vbCwgYm9vbCApIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRo
KCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAgICAgICB2aXJ0
dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKICAgICAgICAgdmlydHVhbCB2b2lkIGxh
eW91dCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQoKTsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsOCArMjMzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2Fs
Y1dpZHRoKCkKICAgICBpZiAod2lkdGhUeXBlID4gUmVsYXRpdmUgJiYgc3R5bGUoKS0+d2lkdGgo
KS5pc1Bvc2l0aXZlKCkpIHsKICAgICAgICAgLy8gUGVyY2VudCBvciBmaXhlZCB0YWJsZQogICAg
ICAgICBtX3dpZHRoID0gc3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoYXZhaWxhYmxlV2lk
dGgpOwotICAgICAgICBpZiAobV9taW5XaWR0aCA+IG1fd2lkdGgpCi0gICAgICAgICAgICBtX3dp
ZHRoID0gbV9taW5XaWR0aDsKKyAgICAgICAgbV93aWR0aCA9IG1heChtaW5QcmVmV2lkdGgoKSwg
bV93aWR0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQW4gYXV0byB3aWR0aCB0YWJsZSBz
aG91bGQgc2hyaW5rIHRvIGZpdCB3aXRoaW4gdGhlIGxpbmUgd2lkdGggaWYgbmVjZXNzYXJ5IGlu
IG9yZGVyIHRvIAogICAgICAgICAvLyBhdm9pZCBvdmVybGFwcGluZyBmbG9hdHMuCkBAIC0yNTEs
MTAgKzI1MCwxMCBAQCB2b2lkIFJlbmRlclRhYmxlOjpjYWxjV2lkdGgoKQogICAgICAgICBpbnQg
YXZhaWxDb250ZW50V2lkdGggPSBtYXgoMCwgYXZhaWxhYmxlV2lkdGggLSBtYXJnaW5Ub3RhbCk7
CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgd2UgYXJlbid0IGJpZ2dlciB0aGFuIG91ciBt
YXggd2lkdGggb3Igc21hbGxlciB0aGFuIG91ciBtaW4gd2lkdGguCi0gICAgICAgIG1fd2lkdGgg
PSBtaW4oYXZhaWxDb250ZW50V2lkdGgsIG1fbWF4V2lkdGgpOworICAgICAgICBtX3dpZHRoID0g
bWluKGF2YWlsQ29udGVudFdpZHRoLCBtYXhQcmVmV2lkdGgoKSk7CiAgICAgfQogICAgIAotICAg
IG1fd2lkdGggPSBtYXgobV93aWR0aCwgbV9taW5XaWR0aCk7CisgICAgbV93aWR0aCA9IG1heCht
X3dpZHRoLCBtaW5QcmVmV2lkdGgoKSk7CiAKICAgICAvLyBGaW5hbGx5LCB3aXRoIG91ciB0cnVl
IHdpZHRoIGRldGVybWluZWQsIGNvbXB1dGUgb3VyIG1hcmdpbnMgZm9yIHJlYWwuCiAgICAgbV9t
YXJnaW5SaWdodCA9IDA7CkBAIC0yNjUsOCArMjY0LDYgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2Fs
Y1dpZHRoKCkKIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRz
TGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKLSAgICBBU1NFUlQoIW1fbmVl
ZHNTZWN0aW9uUmVjYWxjKTsKIAogICAgIGlmIChwb3NDaGlsZE5lZWRzTGF5b3V0KCkgJiYgIW5v
cm1hbENoaWxkTmVlZHNMYXlvdXQoKSAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsKICAgICAgICAg
Ly8gQWxsIHdlIGhhdmUgdG8gZG8gaXMgbGF5IG91dCBvdXIgcG9zaXRpb25lZCBvYmplY3RzLgpA
QCAtMjc1LDYgKzI3Miw4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKKyAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7CisgICAgICAgIAog
ICAgIEludFJlY3Qgb2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKICAgICBi
b29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91dCgpOwpAQCAt
NTI4LDE5ICs1MjcsMTkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQ
YQogICAgICAgICBwYWludEJvcmRlcihwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3LCBoLCBz
dHlsZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQg
UmVuZGVyVGFibGU6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQoIW1pbk1heEtub3du
KCkpOworICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICByZWNhbGNTZWN0aW9u
c0lmTmVlZGVkKCk7CiAgICAgcmVjYWxjSG9yaXpvbnRhbEJvcmRlcnMoKTsKIAotICAgIG1fdGFi
bGVMYXlvdXQtPmNhbGNNaW5NYXhXaWR0aChtX21pbldpZHRoLCBtX21heFdpZHRoKTsKKyAgICBt
X3RhYmxlTGF5b3V0LT5jYWxjUHJlZldpZHRocyhtX21pblByZWZXaWR0aCwgbV9tYXhQcmVmV2lk
dGgpOwogCiAgICAgaWYgKG1fY2FwdGlvbikKLSAgICAgICAgbV9taW5XaWR0aCA9IG1heChtX21p
bldpZHRoLCBtX2NhcHRpb24tPm1pbldpZHRoKCkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9
IG1heChtX21pblByZWZXaWR0aCwgbV9jYXB0aW9uLT5taW5QcmVmV2lkdGgoKSk7CiAKLSAgICBz
ZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIHZv
aWQgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKGludCBwb3MsIGludCBmaXJzdFNwYW4pCkBAIC01
NjEsNyArNTYwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRDb2x1bW4oaW50IHBvcywgaQog
ICAgIH0KIAogICAgIG1fY29sdW1uUG9zLnJlc2l6ZShudW1FZmZDb2xzKCkgKyAxKTsKLSAgICBz
ZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIHNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlOjphcHBlbmRDb2x1bW4oaW50
IHNwYW4pCkBAIC01NzksNyArNTc4LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YXBwZW5kQ29sdW1u
KGludCBzcGFuKQogICAgIH0KIAogICAgIG1fY29sdW1uUG9zLnJlc2l6ZShudW1FZmZDb2xzKCkg
KyAxKTsKLSAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIHNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCiBSZW5kZXJUYWJsZUNvbCogUmVuZGVy
VGFibGU6OmNvbEVsZW1lbnQoaW50IGNvbCkgY29uc3QKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJU
YWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oCShyZXZpc2lvbiAy
MDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIs
NyArMTAyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBp
bnQgdHgsIGludCB0eSk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50Qm94RGVjb3JhdGlvbnMoUGFp
bnRJbmZvJiwgaW50IHR4LCBpbnQgdHkpOwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQ
cmVmV2lkdGhzKCk7CiAKICAgICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygp
IGNvbnN0OwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGaXJzdExldHRlcigpOwpJbmRleDogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
clRhYmxlQ2VsbC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxl
Q2VsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwLDE0ICs3MCwxNCBAQCB2b2lkIFJlbmRlclRh
YmxlQ2VsbDo6dXBkYXRlRnJvbUVsZW1lbnQoCiAgICAgICAgIG1fY29sdW1uU3BhbiA9IHRjLT5j
b2xTcGFuKCk7CiAgICAgICAgIG1fcm93U3BhbiA9IHRjLT5yb3dTcGFuKCk7CiAgICAgICAgIGlm
ICgob2xkUlNwYW4gIT0gbV9yb3dTcGFuIHx8IG9sZENTcGFuICE9IG1fY29sdW1uU3BhbikgJiYg
c3R5bGUoKSAmJiBwYXJlbnQoKSkgewotICAgICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5N
YXhSZWNhbGMoKTsKKyAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2Fs
YygpOwogICAgICAgICAgICAgaWYgKHNlY3Rpb24oKSkKICAgICAgICAgICAgICAgICBzZWN0aW9u
KCktPnNldE5lZWRzQ2VsbFJlY2FsYygpOwogICAgICAgICB9CiAgICAgfQogfQogCi1MZW5ndGgg
UmVuZGVyVGFibGVDZWxsOjpzdHlsZU9yQ29sV2lkdGgoKQorTGVuZ3RoIFJlbmRlclRhYmxlQ2Vs
bDo6c3R5bGVPckNvbFdpZHRoKCkgY29uc3QKIHsKICAgICBMZW5ndGggdyA9IHN0eWxlKCktPndp
ZHRoKCk7CiAgICAgaWYgKGNvbFNwYW4oKSA+IDEgfHwgIXcuaXNBdXRvKCkpCkBAIC05NSwxNSAr
OTUsMTQgQEAgTGVuZ3RoIFJlbmRlclRhYmxlQ2VsbDo6c3R5bGVPckNvbFdpZHRoKAogICAgIHJl
dHVybiB3OwogfQogCi12b2lkIFJlbmRlclRhYmxlQ2VsbDo6Y2FsY01pbk1heFdpZHRoKCkKK3Zv
aWQgUmVuZGVyVGFibGVDZWxsOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgLy8gcmVjYWxjTWlu
TWF4V2lkdGhzIHdvcmtzIGRlcHRoIGZpcnN0LiAgSG93ZXZlciwgdGhlIGNoaWxkIGNlbGxzIHJl
bHkgb24gdGhlIGdyaWRzIHVwIGluIHRoZQotICAgIC8vIHNlY3Rpb25zIHRvIGRvIHRoZWlyIGNh
bGNNaW5NYXhXaWR0aHMgd29yay4gIE5vcm1hbGx5IHRoZSBzZWN0aW9ucyBhcmUgc2V0IHVwIGVh
cmx5LCBhcyB0YWJsZQotICAgIC8vIGNlbGxzIGFyZSBhZGRlZCwgYnV0IHJlbGF5b3V0IGNhbiBj
YXVzZSB0aGUgY2VsbHMgdG8gYmUgZnJlZWQsIGxlYXZpbmcgc3RhbGUgcHRycyBpbiB0aGUgc2Vj
dGlvbnMnCisgICAgLy8gVGhlIGNoaWxkIGNlbGxzIHJlbHkgb24gdGhlIGdyaWRzIHVwIGluIHRo
ZSBzZWN0aW9ucyB0byBkbyB0aGVpciBjYWxjUHJlZldpZHRocyB3b3JrLiAgTm9ybWFsbHkgdGhl
IHNlY3Rpb25zIGFyZSBzZXQgdXAgZWFybHksIGFzIHRhYmxlCisgICAgLy8gY2VsbHMgYXJlIGFk
ZGVkLCBidXQgcmVsYXlvdXQgY2FuIGNhdXNlIHRoZSBjZWxscyB0byBiZSBmcmVlZCwgbGVhdmlu
ZyBzdGFsZSBwb2ludGVycyBpbiB0aGUgc2VjdGlvbnMnCiAgICAgLy8gZ3JpZHMuICBXZSBtdXN0
IHJlZnJlc2ggdGhvc2UgZ3JpZHMgYmVmb3JlIHRoZSBjaGlsZCBjZWxscyB0cnkgdG8gdXNlIHRo
ZW0uCiAgICAgdGFibGUoKS0+cmVjYWxjU2VjdGlvbnNJZk5lZWRlZCgpOwogCi0gICAgUmVuZGVy
QmxvY2s6OmNhbGNNaW5NYXhXaWR0aCgpOworICAgIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRo
cygpOwogICAgIGlmIChlbGVtZW50KCkgJiYgc3R5bGUoKS0+YXV0b1dyYXAoKSkgewogICAgICAg
ICAvLyBTZWUgaWYgbm93cmFwIHdhcyBzZXQuCiAgICAgICAgIExlbmd0aCB3ID0gc3R5bGVPckNv
bFdpZHRoKCk7CkBAIC0xMTQsOCArMTEzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNhbGNN
aW5NYXhXaWR0aCgpCiAgICAgICAgICAgICAvLyB0byBtYWtlIHRoZSBtaW53aWR0aCBvZiB0aGUg
Y2VsbCBpbnRvIHRoZSBmaXhlZCB3aWR0aC4gIFRoZXkgZG8gdGhpcwogICAgICAgICAgICAgLy8g
ZXZlbiBpbiBzdHJpY3QgbW9kZSwgc28gZG8gbm90IG1ha2UgdGhpcyBhIHF1aXJrLiAgQWZmZWN0
ZWQgdGhlIHRvcAogICAgICAgICAgICAgLy8gb2YgaGlwdG9wLmNvbS4KLSAgICAgICAgICAgIGlm
IChtX21pbldpZHRoIDwgdy52YWx1ZSgpKQotICAgICAgICAgICAgICAgIG1fbWluV2lkdGggPSB3
LnZhbHVlKCk7CisgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heCh3LnZhbHVlKCksIG1f
bWluUHJlZldpZHRoKTsKICAgICB9CiB9CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHJldmlzaW9u
IDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01NywxMSArNTcsMTEgQEAgcHVibGljOgogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlv
bigpIGNvbnN0IHsgcmV0dXJuIHN0YXRpY19jYXN0PFJlbmRlclRhYmxlU2VjdGlvbio+KHBhcmVu
dCgpLT5wYXJlbnQoKSk7IH0KICAgICBSZW5kZXJUYWJsZSogdGFibGUoKSBjb25zdCB7IHJldHVy
biBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZSo+KHBhcmVudCgpLT5wYXJlbnQoKS0+cGFyZW50KCkp
OyB9CiAKLSAgICBMZW5ndGggc3R5bGVPckNvbFdpZHRoKCk7CisgICAgTGVuZ3RoIHN0eWxlT3JD
b2xXaWR0aCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKIAot
ICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2Fs
Y1ByZWZXaWR0aHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7CiAgICAgdmlydHVh
bCB2b2lkIHNldFdpZHRoKGludCk7CiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0
eWxlKik7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVDb2wuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVy
aW5nL1JlbmRlclRhYmxlQ29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNyBAQCB2
b2lkIFJlbmRlclRhYmxlQ29sOjp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgfSBlbHNlCiAgICAg
ICAgIG1fc3BhbiA9ICEoc3R5bGUoKSAmJiBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gVEFCTEVfQ09M
VU1OX0dST1VQKTsKICAgICBpZiAobV9zcGFuICE9IG9sZFNwYW4gJiYgc3R5bGUoKSAmJiBwYXJl
bnQoKSkKLSAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAg
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIGJvb2wgUmVuZGVyVGFi
bGVDb2w6OmlzQ2hpbGRBbGxvd2VkKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlclN0eWxlKiBz
dHlsZSkgY29uc3QKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNyArMTEy
LDYgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVyT2JqZQogdm9pZCBSZW5k
ZXJUYWJsZVJvdzo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAg
QVNTRVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0g
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAg
ICAgICBpZiAoY2hpbGQtPmlzVGFibGVDZWxsKCkpIHsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rp
b24uY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTEsNiArODkxLDggQEAgdm9pZCBSZW5kZXJUYWJsZVNl
Y3Rpb246OnBhaW50KFBhaW50SW5mbwogICAgICAgICAgICAgICAgIGlmICghY2VsbCB8fCAociA+
IHN0YXJ0cm93ICYmIChjZWxsQXQociAtIDEsIGMpLmNlbGwgPT0gY2VsbCkpKQogICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKIAorICAgICAgICAgICAgICAgIFJlbmRlclRhYmxlUm93KiBy
b3cgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVJvdyo+KGNlbGwtPnBhcmVudCgpKTsKKwogICAg
ICAgICAgICAgICAgIGlmIChwYWludFBoYXNlID09IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQg
fHwgcGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQ2hpbGRCbG9ja0JhY2tncm91bmQpIHsKICAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBoYW5kbGUgcGFpbnRpbmcgYSBzdGFjayBvZiBi
YWNrZ3JvdW5kcy4gIFRoaXMgc3RhY2sgKGZyb20gYm90dG9tIHRvIHRvcCkgY29uc2lzdHMgb2YK
ICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIGNvbHVtbiBncm91cCwgY29sdW1uLCByb3cgZ3Jv
dXAsIHJvdywgYW5kIHRoZW4gdGhlIGNlbGwuCkBAIC04OTksOCArOTAxLDYgQEAgdm9pZCBSZW5k
ZXJUYWJsZVNlY3Rpb246OnBhaW50KFBhaW50SW5mbwogICAgICAgICAgICAgICAgICAgICBpZiAo
Y29sICYmIGNvbC0+cGFyZW50KCktPnN0eWxlKCktPmRpc3BsYXkoKSA9PSBUQUJMRV9DT0xVTU5f
R1JPVVApCiAgICAgICAgICAgICAgICAgICAgICAgICBjb2xHcm91cCA9IGNvbC0+cGFyZW50KCk7
CiAKLSAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0KiByb3cgPSBjZWxsLT5wYXJlbnQo
KTsKLQogICAgICAgICAgICAgICAgICAgICAvLyBDb2x1bW4gZ3JvdXBzIGFuZCBjb2x1bW5zIGZp
cnN0LgogICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogQ29sdW1ucyBhbmQgY29sdW1uIGdy
b3VwcyBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgb3BhY2l0eSwgYW5kIHRoZXkgYXJlIGJlaW5n
IHBhaW50ZWQgInRvbyBsYXRlIiBpbgogICAgICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhY2ss
IHNpbmNlIHdlIGhhdmUgYWxyZWFkeSBvcGVuZWQgYSB0cmFuc3BhcmVuY3kgbGF5ZXIgKHBvdGVu
dGlhbGx5KSBmb3IgdGhlIHRhYmxlIHJvdyBncm91cC4KQEAgLTkxNCwxMSArOTE0LDEyIEBAIHZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjpwYWludChQYWludEluZm8KIAogICAgICAgICAgICAgICAg
ICAgICAvLyBQYWludCB0aGUgcm93IG5leHQsIGJ1dCBvbmx5IGlmIGl0IGRvZXNuJ3QgaGF2ZSBh
IGxheWVyLiAgSWYgYSByb3cgaGFzIGEgbGF5ZXIsIGl0IHdpbGwgYmUgcmVzcG9uc2libGUgZm9y
CiAgICAgICAgICAgICAgICAgICAgIC8vIHBhaW50aW5nIHRoZSByb3cgYmFja2dyb3VuZCBmb3Ig
dGhlIGNlbGwuCi0gICAgICAgICAgICAgICAgICAgIGlmICghcm93LT5sYXllcigpKQorICAgICAg
ICAgICAgICAgICAgICBpZiAoIXJvdy0+bV9sYXllcikgLy8gQXZvaWQgbGF5ZXIoKSwgc2luY2Ug
aXQgaXMgdmlydHVhbCBhbmQgc2hvd3MgdXAgb24gcHJvZmlsZXMuCiAgICAgICAgICAgICAgICAg
ICAgICAgICBjZWxsLT5wYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0
eSwgcm93KTsKICAgICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoKCFjZWxs
LT5sYXllcigpICYmICFjZWxsLT5wYXJlbnQoKS0+bGF5ZXIoKSkgfHwgcGFpbnRJbmZvLnBoYXNl
ID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMpCisgICAgICAgICAgICAgICAgLy8g
QXZvaWQgbGF5ZXIoKSwgc2luY2UgaXQgc2hvd3MgdXAgb24gcHJvZmlsZXMuCisgICAgICAgICAg
ICAgICAgaWYgKCghY2VsbC0+bV9sYXllciAmJiAhcm93LT5tX2xheWVyKSB8fCBwYWludEluZm8u
cGhhc2UgPT0gUGFpbnRQaGFzZUNvbGxhcHNlZFRhYmxlQm9yZGVycykKICAgICAgICAgICAgICAg
ICAgICAgY2VsbC0+cGFpbnQocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgICAgICAgICAgfQogICAg
ICAgICB9CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5k
ZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE2LDEyICs0MTYsMTIgQEAgQUxXQVlTX0lO
TElORSBpbnQgUmVuZGVyVGV4dDo6d2lkdGhGcm9tQwogICAgIHJldHVybiBmLndpZHRoKFRleHRS
dW4odGV4dCgpLT5jaGFyYWN0ZXJzKCkgKyBzdGFydCwgbGVuKSwgVGV4dFN0eWxlKGFsbG93VGFi
cygpLCB4UG9zKSk7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZE1pbk1heFdpZHRoKGlu
dCBsZWFkV2lkdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGJl
Z2luTWluVywgYm9vbCYgYmVnaW5XUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCYgZW5kTWluVywgYm9vbCYgZW5kV1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBib29sJiBoYXNCcmVha2FibGVDaGFyLCBib29sJiBoYXNCcmVhaywKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NYXhXLCBpbnQmIGVuZE1h
eFcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1pblcsIGludCYg
bWF4VywgYm9vbCYgc3RyaXBGcm9udFNwYWNlcykKK3ZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFBy
ZWZXaWR0aHMoaW50IGxlYWRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50JiBiZWdpbk1pblcsIGJvb2wmIGJlZ2luV1MsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCYgZW5kTWluVywgYm9vbCYgZW5kV1MsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJvb2wmIGhhc0JyZWFrYWJsZUNoYXIsIGJvb2wmIGhhc0JyZWFr
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGJlZ2luTWF4VywgaW50
JiBlbmRNYXhXLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIG1pblcs
IGludCYgbWF4VywgYm9vbCYgc3RyaXBGcm9udFNwYWNlcykKIHsKICAgICBib29sIGNvbGxhcHNl
V2hpdGVTcGFjZSA9IHN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgpOwogICAgIGlmICghY29s
bGFwc2VXaGl0ZVNwYWNlKQpAQCAtNDM0LDggKzQzNCw4IEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJp
bW1lZE1pbk1heFdpZHRoKGludCAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICht
X2hhc1RhYikKLSAgICAgICAgY2FsY01pbk1heFdpZHRoSW50ZXJuYWwobGVhZFdpZHRoKTsKKyAg
ICBpZiAobV9oYXNUYWIgfHwgcHJlZldpZHRoc0RpcnR5KCkpCisgICAgICAgIGNhbGNQcmVmV2lk
dGhzKGxlYWRXaWR0aCk7CiAKICAgICBtaW5XID0gbV9taW5XaWR0aDsKICAgICBtYXhXID0gbV9t
YXhXaWR0aDsKQEAgLTQ5MywyMSArNDkzLDMxIEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZE1p
bk1heFdpZHRoKGludCAKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdp
ZHRoKCkKK2lubGluZSBib29sIGlzU3BhY2VBY2NvcmRpbmdUb1N0eWxlKFVDaGFyIGMsIFJlbmRl
clN0eWxlKiBzdHlsZSkKIHsKLSAgICAvLyBVc2UgMCBmb3IgdGhlIGxlYWRXaWR0aC4gSWYgdGhl
IHRleHQgY29udGFpbnMgYSB2YXJpYWJsZSB3aWR0aCB0YWIsIHRoZSByZWFsIHdpZHRoCi0gICAg
Ly8gd2lsbCBnZXQgbWVhc3VyZWQgd2hlbiB0cmltbWVkTWluTWF4V2lkdGggY2FsbHMgYWdhaW4g
d2l0aCB0aGUgcmVhbCBsZWFkV2lkdGguCi0gICAgQVNTRVJUKCFtaW5NYXhLbm93bigpKTsKLSAg
ICBjYWxjTWluTWF4V2lkdGhJbnRlcm5hbCgwKTsKKyAgICByZXR1cm4gYyA9PSAnICcgfHwgKGMg
PT0gbm9CcmVha1NwYWNlICYmIHN0eWxlLT5uYnNwTW9kZSgpID09IFNQQUNFKTsKIH0KIAotaW5s
aW5lIGJvb2wgaXNTcGFjZUFjY29yZGluZ1RvU3R5bGUoVUNoYXIgYywgUmVuZGVyU3R5bGUqIHN0
eWxlKQoraW50IFJlbmRlclRleHQ6Om1pblByZWZXaWR0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGMgPT0gJyAnIHx8IChjID09IG5vQnJlYWtTcGFjZSAmJiBzdHlsZS0+bmJzcE1vZGUoKSA9PSBT
UEFDRSk7CisgICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQorICAgICAgICBjb25zdF9jYXN0PFJl
bmRlclRleHQqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoMCk7CisgICAgICAgIAorICAgIHJldHVy
biBtX21pbldpZHRoOwogfQogCi12b2lkIFJlbmRlclRleHQ6OmNhbGNNaW5NYXhXaWR0aEludGVy
bmFsKGludCBsZWFkV2lkdGgpCitpbnQgUmVuZGVyVGV4dDo6bWF4UHJlZldpZHRoKCkgY29uc3QK
IHsKKyAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVy
VGV4dCo+KHRoaXMpLT5jYWxjUHJlZldpZHRocygwKTsKKyAgICAgICAgCisgICAgcmV0dXJuIG1f
bWF4V2lkdGg7Cit9CisKK3ZvaWQgUmVuZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWRX
aWR0aCkKK3sKKyAgICBBU1NFUlQobV9oYXNUYWIgfHwgcHJlZldpZHRoc0RpcnR5KCkpOworCiAg
ICAgbV9taW5XaWR0aCA9IDA7CiAgICAgbV9iZWdpbk1pbldpZHRoID0gMDsKICAgICBtX2VuZE1p
bldpZHRoID0gMDsKQEAgLTY2Miw3ICs2NzIsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNhbGNNaW5N
YXhXaWR0aEludGVybmFsCiAgICAgICAgIG1fZW5kTWluV2lkdGggPSBjdXJyTWF4V2lkdGg7CiAg
ICAgfQogCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFs
c2UpOwogfQogCiBib29sIFJlbmRlclRleHQ6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWdu
ZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25zdApAQCAtOTA1LDcgKzkxNSw3IEBAIHZvaWQgUmVu
ZGVyVGV4dDo6c2V0VGV4dChQYXNzUmVmUHRyPFN0cmkKICAgICAgICAgcmV0dXJuOwogCiAgICAg
c2V0VGV4dEludGVybmFsKHRleHQpOwotICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxj
KCk7CisgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiB9CiAKIGludCBS
ZW5kZXJUZXh0OjpoZWlnaHQoKSBjb25zdApAQCAtOTkwLDcgKzEwMDAsNyBAQCB1bnNpZ25lZCBp
bnQgUmVuZGVyVGV4dDo6d2lkdGgodW5zaWduZWQgCiAgICAgaW50IHc7CiAgICAgaWYgKCZmID09
ICZzdHlsZSgpLT5mb250KCkpIHsKICAgICAgICAgaWYgKCFzdHlsZSgpLT5wcmVzZXJ2ZU5ld2xp
bmUoKSAmJiAhZnJvbSAmJiBsZW4gPT0gdGV4dExlbmd0aCgpKQotICAgICAgICAgICAgdyA9IG1f
bWF4V2lkdGg7CisgICAgICAgICAgICB3ID0gbWF4UHJlZldpZHRoKCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHcgPSB3aWR0aEZyb21DYWNoZShmLCBmcm9tLCBsZW4sIHhQb3MpOwogICAg
IH0gZWxzZQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDE2ICs3NSwxNSBAQCBwdWJsaWM6CiAKICAgICB2
aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJv
eCA9IGZhbHNlKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsK
LSAgICB2aXJ0dWFsIGludCBtaW5XaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluV2lkdGg7IH0K
LSAgICB2aXJ0dWFsIGludCBtYXhXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4V2lkdGg7IH0K
LQotICAgIHZvaWQgdHJpbW1lZE1pbk1heFdpZHRoKGludCBsZWFkV2lkdGgsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1pblcsIGJvb2wmIGJlZ2luV1MsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50JiBlbmRNaW5XLCBib29sJiBlbmRXUywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBib29sJiBoYXNCcmVha2FibGVDaGFyLCBib29sJiBoYXNCcmVh
aywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGJlZ2luTWF4VywgaW50JiBlbmRN
YXhXLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWluVywgaW50JiBtYXhXLCBi
b29sJiBzdHJpcEZyb250U3BhY2VzKTsKKyAgICB2aXJ0dWFsIGludCBtaW5QcmVmV2lkdGgoKSBj
b25zdDsKKyAgICB2aXJ0dWFsIGludCBtYXhQcmVmV2lkdGgoKSBjb25zdDsKKworICAgIHZvaWQg
dHJpbW1lZFByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCYgYmVnaW5NaW5XLCBib29sJiBiZWdpbldTLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgaW50JiBlbmRNaW5XLCBib29sJiBlbmRXUywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wmIGhhc0JyZWFrYWJsZUNoYXIsIGJvb2wmIGhhc0JyZWFrLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaW50JiBiZWdpbk1heFcsIGludCYgZW5kTWF4VywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGludCYgbWluVywgaW50JiBtYXhXLCBib29sJiBzdHJpcEZyb250U3Bh
Y2VzKTsKIAogICAgIC8vIHJldHVybnMgdGhlIG1pbmltdW0geCBwb3NpdGlvbiBvZiBhbGwgcnVu
cyByZWxhdGl2ZSB0byB0aGUgcGFyZW50LgogICAgIC8vIGRlZmF1bHRzIHRvIDAuCkBAIC0xMjks
NiArMTI4LDcgQEAgcHVibGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBzZXRUZXh0SW50ZXJu
YWwoUGFzc1JlZlB0cjxTdHJpbmdJbXBsPik7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lk
dGhzKGludCBsZWFkV2lkdGgpOwogCiBwcml2YXRlOgogICAgIC8vIE1ha2UgbGVuZ3RoKCkgcHJp
dmF0ZSBzbyB0aGF0IGNhbGxlcnMgdGhhdCBoYXZlIGEgUmVuZGVyVGV4dCoKQEAgLTEzOCw4ICsx
MzgsNiBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBkZWxldGVUZXh0Qm94ZXMoKTsKICAgICBib29s
IGNvbnRhaW5zT25seVdoaXRlc3BhY2UodW5zaWduZWQgZnJvbSwgdW5zaWduZWQgbGVuKSBjb25z
dDsKLSAgICB2b2lkIGNhbGNNaW5NYXhXaWR0aEludGVybmFsKGludCBsZWFkV2lkdGgpOwotCiAg
ICAgaW50IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmLCBpbnQgc3RhcnQsIGludCBsZW4sIGlu
dCB4UG9zKSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lz
QWxsQVNDSUk7IH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCShyZXZpc2lvbiAyMDk5
NykKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTY4OCwxMyArNjg4LDE1IEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmxheW91dCgpCiAgICAg
UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKHJlbGF5b3V0Q2hpbGRyZW4pOwogfQogCi12b2lkIFJl
bmRlclRleHRDb250cm9sOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJUZXh0Q29udHJv
bDo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIG1fbWluV2lkdGggPSAwOwotICAgIG1fbWF4V2lk
dGggPSAwOworICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CisKKyAgICBtX21pblByZWZX
aWR0aCA9IDA7CisgICAgbV9tYXhQcmVmV2lkdGggPSAwOwogCiAgICAgaWYgKHN0eWxlKCktPndp
ZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAg
IG1fbWluV2lkdGggPSBtX21heFdpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53
aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRo
ID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVs
c2UgewogICAgICAgICAvLyBGaWd1cmUgb3V0IGhvdyBiaWcgYSB0ZXh0IGNvbnRyb2wgbmVlZHMg
dG8gYmUgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMKICAgICAgICAgLy8gKHVzaW5n
ICIwIiBhcyB0aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgpAQCAtNzEyLDIwICs3MTQsMjAgQEAgdm9p
ZCBSZW5kZXJUZXh0Q29udHJvbDo6Y2FsY01pbk1heFdpZHRoKAogICAgICAgICAgICAgaWYgKGZh
Y3RvciA8PSAwKQogICAgICAgICAgICAgICAgIGZhY3RvciA9IDIwOwogICAgICAgICB9Ci0gICAg
ICAgIG1fbWF4V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKGNoYXJXaWR0aCAqIGZhY3Rv
cikpICsgc2Nyb2xsYmFyU2l6ZTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBzdGF0aWNfY2Fz
dDxpbnQ+KGNlaWxmKGNoYXJXaWR0aCAqIGZhY3RvcikpICsgc2Nyb2xsYmFyU2l6ZTsKICAgICB9
CiAKICAgICBpZiAoc3R5bGUoKS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWlu
V2lkdGgoKS52YWx1ZSgpID4gMCkgewotICAgICAgICBtX21heFdpZHRoID0gbWF4KG1fbWF4V2lk
dGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0g
ICAgICAgIG1fbWluV2lkdGggPSBtYXgobV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBt
YXgobV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgo
KS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRo
LCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwogICAg
IH0gZWxzZSBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc1BlcmNlbnQoKSB8fCAoc3R5bGUoKS0+d2lk
dGgoKS5pc0F1dG8oKSAmJiBzdHlsZSgpLT5oZWlnaHQoKS5pc1BlcmNlbnQoKSkpCi0gICAgICAg
IG1fbWluV2lkdGggPSAwOworICAgICAgICBtX21pblByZWZXaWR0aCA9IDA7CiAgICAgZWxzZQot
ICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGgg
PSBtX21heFByZWZXaWR0aDsKIAogICAgIGlmIChzdHlsZSgpLT5tYXhXaWR0aCgpLmlzRml4ZWQo
KSAmJiBzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkgIT0gdW5kZWZpbmVkTGVuZ3RoKSB7Ci0g
ICAgICAgIG1fbWF4V2lkdGggPSBtaW4obV9tYXhXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5XaWR0aCA9IG1pbiht
X21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUo
KSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1pbihtX21heFByZWZXaWR0aCwgY2FsY0Nv
bnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9t
aW5QcmVmV2lkdGggPSBtaW4obV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfQogCiAgICAgaW50IHRvQWRkID0gcGFk
ZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQo
KSArCkBAIC03MzgsMTAgKzc0MCwxMCBAQCB2b2lkIFJlbmRlclRleHRDb250cm9sOjpjYWxjTWlu
TWF4V2lkdGgoCiAgICAgICAgIHRvQWRkICs9IG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpLT5i
b3JkZXJMZWZ0KCkgKyBtX2NhbmNlbEJ1dHRvbi0+cmVuZGVyZXIoKS0+Ym9yZGVyUmlnaHQoKSAr
CiAgICAgICAgICAgICAgICAgIG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpLT5wYWRkaW5nTGVm
dCgpICsgbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCktPnBhZGRpbmdSaWdodCgpOwogCi0gICAg
bV9taW5XaWR0aCArPSB0b0FkZDsKLSAgICBtX21heFdpZHRoICs9IHRvQWRkOworICAgIG1fbWlu
UHJlZldpZHRoICs9IHRvQWRkOworICAgIG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOwogCi0gICAg
c2V0TWluTWF4S25vd24oKTsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiB2
b2lkIFJlbmRlclRleHRDb250cm9sOjpmb3J3YXJkRXZlbnQoRXZlbnQqIGV2dCkKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJUZXh0Q29udHJvbC5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJUZXh0
Q29udHJvbC5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2
aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJldHVybiAiUmVuZGVyVGV4
dENvbnRyb2wiOyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgY2FsY0hlaWdodCgpOwotICAgIHZpcnR1
YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0
aHMoKTsKICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlTGVmdG92ZXJBbm9ueW1vdXNCb3hlcygpIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwogICAgIHZpcnR1YWwg
dm9pZCB1cGRhdGVGcm9tRWxlbWVudCgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gMjA5OTcp
CisrKyByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDEwICs1
MSwxMCBAQCBSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KE5vZGUqIG5vZGUsIEZyYW1lCiAgICAgLy8g
dHJ5IHRvIGNvbnRyYWluIHRoZSB3aWR0aCB0byB0aGUgdmlld3Mgd2lkdGgKICAgICBtX3dpZHRo
ID0gMDsKICAgICBtX2hlaWdodCA9IDA7Ci0gICAgbV9taW5XaWR0aCA9IDA7Ci0gICAgbV9tYXhX
aWR0aCA9IDA7CisgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgIG1fbWF4UHJlZldpZHRoID0g
MDsKIAotICAgIHNldE1pbk1heEtub3duKGZhbHNlKTsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHko
dHJ1ZSwgZmFsc2UpOwogICAgIAogICAgIHNldFBvc2l0aW9uZWQodHJ1ZSk7IC8vIHRvIDAsMCA6
KQogCkBAIC04MCwyOCArODAsMjMgQEAgdm9pZCBSZW5kZXJWaWV3OjpjYWxjV2lkdGgoKQogICAg
IG1fbWFyZ2luUmlnaHQgPSAwOwogfQogCi12b2lkIFJlbmRlclZpZXc6OmNhbGNNaW5NYXhXaWR0
aCgpCit2b2lkIFJlbmRlclZpZXc6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQoIW1p
bk1heEtub3duKCkpOworICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CiAKLSAgICBSZW5k
ZXJCbG9jazo6Y2FsY01pbk1heFdpZHRoKCk7CisgICAgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lk
dGhzKCk7CiAKLSAgICBtX21heFdpZHRoID0gbV9taW5XaWR0aDsKLQotICAgIHNldE1pbk1heEtu
b3duKCk7CisgICAgbV9tYXhQcmVmV2lkdGggPSBtX21pblByZWZXaWR0aDsKIH0KIAogdm9pZCBS
ZW5kZXJWaWV3OjpsYXlvdXQoKQogewogICAgIGlmIChwcmludGluZygpKQotICAgICAgICBtX21p
bldpZHRoID0gbV93aWR0aDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0
aCA9IG1fd2lkdGg7CiAKICAgICBib29sIHJlbGF5b3V0Q2hpbGRyZW4gPSAhcHJpbnRpbmcoKSAm
JiAoIW1fZnJhbWVWaWV3IHx8IG1fd2lkdGggIT0gbV9mcmFtZVZpZXctPnZpc2libGVXaWR0aCgp
IHx8IG1faGVpZ2h0ICE9IG1fZnJhbWVWaWV3LT52aXNpYmxlSGVpZ2h0KCkpOwogICAgIGlmIChy
ZWxheW91dENoaWxkcmVuKQogICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUsIGZhbHNl
KTsKLQotICAgIGlmIChyZWNhbGNNaW5NYXgoKSkKLSAgICAgICAgcmVjYWxjTWluTWF4V2lkdGhz
KCk7CiAgICAgCiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAgIFJlbmRlckJsb2NrOjps
YXlvdXQoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJWaWV3LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlclZpZXcuaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw3ICs0Miw3IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0aCgpOwogICAgIHZp
cnR1YWwgdm9pZCBjYWxjSGVpZ2h0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0
aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAgIHZpcnR1YWwgYm9v
bCBhYnNvbHV0ZVBvc2l0aW9uKGludCYgeFBvcywgaW50JiB5UG9zLCBib29sIGZpeGVkID0gZmFs
c2UpIGNvbnN0OwogCiAgICAgaW50IGRvY0hlaWdodCgpIGNvbnN0OwpJbmRleDogcmVuZGVyaW5n
L1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNiBAQCB2b2lkIFJlbmRlcldpZGdldDo6c2V0V2lkZ2V0
KFdpZGdldCogd2lkCiB2b2lkIFJlbmRlcldpZGdldDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgc2V0TmVl
ZHNMYXlvdXQoZmFsc2UpOwogfQpJbmRleDogcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1RhYmxlTGF5b3V0LmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVu
ZGVyaW5nL1RhYmxlTGF5b3V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgcHVi
bGljOgogCiAgICAgdmlydHVhbCB+VGFibGVMYXlvdXQoKSB7IH0KIAotICAgIHZpcnR1YWwgdm9p
ZCBjYWxjTWluTWF4V2lkdGgoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCkgPSAwOworICAg
IHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRo
KSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGxheW91dCgpID0gMDsKIAogcHJvdGVjdGVkOgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14142</attachid>
            <date>2007-04-22 22:05:47 -0700</date>
            <delta_ts>2007-04-24 23:20:44 -0700</delta_ts>
            <desc>Passes all layout tests.</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>158572</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDE5
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjQyIEBACisyMDA3LTA0
LTIyICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBSZWFyY2hpdGVj
dCBtaW5tYXh3aWR0aC4gIGNhbGNNaW5NYXhXaWR0aCBoYXMgYmVlbiByZW5hbWVkIHRvCisgICAg
ICAgIGNhbGNQcmVmV2lkdGhzLiAgVGhlIGNhbGN1bGF0aW9uIGlzIG5vdyBkb25lIGxhemlseSBv
bmx5IHdoZW4gbWluUHJlZldpZHRoCisgICAgICAgIG9yIG1heFByZWZXaWR0aCBhcmUgYXNrZWQg
Zm9yLiAgVGhlIHJlc3VsdCBvZiB0aGUgY2FsY3VsYXRpb24gaXMgY2FjaGVkLgorCisgICAgICAg
IFRoZSBuZXcgaW52YWxpZGF0aW9uIHNjaGVtZSBmb3IgcHJlZiB3aWR0aCBpbnZhbGlkYXRpb24g
Zm9sbG93cyB0aGUKKyAgICAgICAgY29udGFpbmluZyBibG9jayBoaWVyYXJjaHkgKGFuZCBrbm93
cyB0byBoYWx0IGF0IHBvc2l0aW9uZWQgb2JqZWN0cywgc2luY2UKKyAgICAgICAgdGhleSBjYW5u
b3QgaW5mbHVlbmNlIHRoZSBzaXplIG9mIHRoZWlyIGNvbnRhaW5lcnMpLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogY3NzL2Nzc3N0eWxlc2VsZWN0
b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTZWxlY3Rvcjo6aW5pdCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNvbHZlKToKKyAg
ICAgICAgKiBkb20vRG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnVw
ZGF0ZVN0eWxlU2VsZWN0b3IpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZSk6CisgICAgICAgICogcGFnZS9GcmFtZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
cmFtZTo6Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZ2UpOgorICAgICAgICAqIHBhZ2UvRnJh
bWVWaWV3LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAg
ICAgKiByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKToKKyAgICAgICAgKFdlYkNvcmU6OkF1dG9UYWJs
ZUxheW91dDo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6QXV0b1RhYmxlTGF5
b3V0OjpjYWxjRWZmZWN0aXZlV2lkdGgpOgorICAgICAgICAqIHJlbmRlcmluZy9BdXRvVGFibGVM
YXlvdXQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Q291bnRlck5vZGU6OnJlY291bnQpOgorICAgICAgICAqIHJlbmRlcmluZy9GaXhl
ZFRhYmxlTGF5b3V0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZpeGVkVGFibGVMYXlvdXQ6OmNh
bGNQcmVmV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oOgor
ICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGlu
ZUJveDo6SW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6aGFzVGV4dENo
aWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbmxpbmVGbG93Qm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZUZsb3dCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZsb3dCb3g6OklubGluZUZs
b3dCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQXBwbGV0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVu
Tm9uSW5saW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZCk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
bG9jazo6aGFuZGxlQ29tcGFjdENoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpyZXBhaW50T3ZlcmhhbmdpbmdGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OnBhaW50Q2hpbGRyZW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnBhaW50
RmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpmaWxsQmxvY2tTZWxlY3Rp
b25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjppbnNlcnRGbG9hdGluZ09i
amVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6ZmxvYXRSZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsb3dlc3RQb3NpdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cmlnaHRtb3N0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQmxvY2s6OmxlZnRtb3N0UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpnZXRDbGVhckRlbHRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpub2Rl
QXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lTWluTWF4SXRlcmF0b3I6OmVuZE9mSW5saW5lKToK
KyAgICAgICAgKFdlYkNvcmU6OklubGluZU1pbk1heEl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OmdldEJvcmRlclBhZGRpbmdNYXJnaW4pOgorICAgICAgICAoV2ViQ29yZTo6c2hv
dWxkR3Jvd1RhYmxlQ2VsbEZvckltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2Nr
OjpjYWxjSW5saW5lUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6
Y2FsY0Jsb2NrUHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmg6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OlJlbmRlckJveCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnNldFN0
eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWluUHJlZldpZHRoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bWF4UHJlZldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckJveDo6bm9kZUF0UG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpj
YWxjV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjV2lkdGhVc2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckNvbnRhaW5lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6
OnJlbW92ZUNoaWxkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OmFw
cGVuZENoaWxkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6Omluc2Vy
dENoaWxkTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OmxheW91dCk6
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyQ29udGFpbmVyOjptb3ZlQ2hpbGROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckNvbnRhaW5lcjo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5k
ZXJDb3VudGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmRpcnR5TGlu
ZUJveGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckNvdW50ZXI6OmNhbGNQcmVmV2lkdGhz
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGaWVsZHNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGaWVsZHNl
dDo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6Y2FsY1ByZWZXaWR0aHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5oOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJGbGV4aWJsZUJveDo6Y2FsY0hvcml6b250YWxQcmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxQcmVmV2lkdGhzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckZsZXhpYmxlQm94OjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6bGF5b3V0QmxvY2spOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxleGlibGVCb3g6OmFsbG93ZWRDaGlsZEZsZXgpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGbGV4aWJsZUJveC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGli
bGVCb3g6Omhhc011bHRpcGxlTGluZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGli
bGVCb3g6OmlzVmVydGljYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6
OmlzSG9yaXpvbnRhbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3cuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6YWJzb2x1dGVDbGlwcGVkT3ZlcmZsb3dSZWN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0OjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGcmFtZVNl
dDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZhcy5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpsYXlvdXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6
aW1hZ2VDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckltYWdlOjpsYXlvdXQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW1hZ2U6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5s
aW5lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlcklubGluZTo6YWRkQ2hpbGRUb0Zsb3cp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzcGxpdElubGluZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVySW5saW5lOjpzcGxpdEZsb3cpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJJbmxpbmUuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0Qm94OjpjYWxjUHJlZldpZHRocyk6CisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
TGlzdEl0ZW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZVZh
bHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmZpcnN0Tm9uTWFya2VyQ2hpbGQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdEl0ZW06OnVwZGF0ZU1hcmtlckxvY2F0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxpc3RJdGVtOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJMaXN0SXRlbTo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxp
c3RJdGVtOjpleHBsaWNpdFZhbHVlQ2hhbmdlZCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxpc3RJdGVtLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6c2V0U3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlckxpc3RNYXJrZXI6OmltYWdlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
aXN0TWFya2VyOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMaXN0
TWFya2VyOjp1cGRhdGVNYXJnaW5zKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGlzdE1h
cmtlci5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNZW51TGlzdDo6dXBkYXRlT3B0aW9uc1dpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlck1lbnVMaXN0OjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck1lbnVMaXN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVj
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OlJlbmRlck9iamVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUNoaWxkTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om1vdmVDaGlsZE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjphcHBlbmRDaGlsZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjppbnNlcnRDaGlsZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6YWRkTGF5ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6cmVtb3ZlTGF5ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bW92ZUxheWVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJPYmplY3Q6OnNldFByZWZXaWR0aHNEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmludmFsaWRhdGVDb250YWluaW5nQmxvY2tQcmVmV2lkdGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6YWRkQWJzb2x1dGVSZWN0Rm9yTGF5ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpjaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjppbmZvcm1hdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJPYmplY3Q6OmR1bXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpzZXRTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmRlc3Ryb3kpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6aGFzTGF5ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojpw
cmVmV2lkdGhzRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpzZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2Jq
ZWN0OjpzZXRIYXNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmNhbGNQ
cmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bWluUHJlZldpZHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bWF4UHJlZldpZHRoKToKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyUGFydC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQ
YXJ0OjpzZXRXaWRnZXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclBhcnRPYmplY3Q6OnVwZGF0ZVdpZGdldCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0T2JqZWN0OjpsYXlvdXQpOgorICAgICAgICAqIHJl
bmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJSZXBs
YWNlZDo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNl
ZC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJTVkdDb250YWluZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZH
SGlkZGVuQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVu
Q29udGFpbmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclNsaWRlcjo6Y2Fs
Y1ByZWZXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGFibGU6OmNhbGNXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpjYWxjUHJlZldpZHRocyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6c3BsaXRDb2x1bW4pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGU6OmFwcGVuZENvbHVtbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
YWJsZTo6cmVtb3ZlQ2hpbGROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGUu
aDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGFibGVDZWxsOjpzdHlsZU9yQ29sV2lkdGgpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVDZWxsOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNvbC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUYWJsZVJvdzo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlU2VjdGlvbjo6
cGFpbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVDaGls
ZE5vZGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaDoKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
ZXh0Ojp0cmltbWVkUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjppc1NwYWNlQWNjb3Jk
aW5nVG9TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjptaW5QcmVmV2lkdGgp
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6bWF4UHJlZldpZHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRleHQ6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRleHQ6OnNldFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6d2lk
dGgpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0Lmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHRD
b250cm9sOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHRD
b250cm9sLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVmlldzo6UmVuZGVyVmlldyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJWaWV3OjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3Ojps
YXlvdXQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJWaWV3Lmg6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlcldpZGdldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6
OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwOgorICAgICAg
ICAqIHJlbmRlcmluZy9Sb290SW5saW5lQm94Lmg6CisgICAgICAgIChXZWJDb3JlOjpSb290SW5s
aW5lQm94OjpzZXRIb3Jpem9udGFsT3ZlcmZsb3dQb3NpdGlvbnMpOgorICAgICAgICAoV2ViQ29y
ZTo6Um9vdElubGluZUJveDo6c2V0VmVydGljYWxTZWxlY3Rpb25Qb3NpdGlvbnMpOgorICAgICAg
ICAqIHJlbmRlcmluZy9UYWJsZUxheW91dC5oOgorCiAyMDA3LTA0LTIyICBNYWNpZWogU3RhY2hv
d2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gYW5kIEdl
b2ZmLgpJbmRleDogY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGNzcy9j
c3NzdHlsZXNlbGVjdG9yLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyBjc3MvY3Nzc3R5bGVzZWxl
Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwMSw3ICszMDEsNiBAQCB2b2lkIENTU1N0eWxl
U2VsZWN0b3I6OmluaXQoKQogewogICAgIGVsZW1lbnQgPSAwOwogICAgIHNldHRpbmdzID0gMDsK
LSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7
CiAgICAgbV9ydWxlTGlzdCA9IDA7CiAgICAgbV9jb2xsZWN0UnVsZXNPbmx5ID0gZmFsc2U7CkBA
IC01NjQsNyArNTYzLDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0Rm9yU3R5bGVSZXNv
bAogCiAgICAgc3R5bGUgPSAwOwogICAgIAotICAgIG1fbWF0Y2hlZFJ1bGVzLmNsZWFyKCk7CiAg
ICAgbV9tYXRjaGVkRGVjbHMuY2xlYXIoKTsKIAogICAgIG1fcnVsZUxpc3QgPSAwOwpJbmRleDog
ZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBkb20vRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAyMDk5NykKKysrIGRvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NTgsNyAr
MTk1OCw3IEBAIHZvaWQgRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlU2VsZWN0b3IoKQogI2VuZGlmCiAK
ICAgICBpZiAocmVuZGVyZXIoKSkgewotICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91
dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFu
ZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgaWYgKHZpZXcoKSkKICAgICAgICAgICAgIHZp
ZXcoKS0+c2NoZWR1bGVSZWxheW91dCgpOwogICAgIH0KSW5kZXg6IGh0bWwvSFRNTFRleHRBcmVh
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAko
cmV2aXNpb24gMjA5OTcpCisrKyBodG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzMsMTEgKzEzMywxMSBAQCB2b2lkIEhUTUxUZXh0QXJlYUVsZW1lbnQ6OnBh
cnNlTWFwcGVkQXR0CiAgICAgaWYgKGF0dHItPm5hbWUoKSA9PSByb3dzQXR0cikgewogICAgICAg
ICBtX3Jvd3MgPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRyLT52YWx1ZSgpLnRvSW50KCkgOiAzOwog
ICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJlbmRlcmVyKCktPnNldE5lZWRz
TGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgICAgICByZW5kZXJlcigpLT5zZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBjb2xzQXR0cikgewogICAgICAgICBtX2NvbHMgPSAhYXR0ci0+aXNOdWxsKCkgPyBhdHRy
LT52YWx1ZSgpLnRvSW50KCkgOiA2MDsKICAgICAgICAgaWYgKHJlbmRlcmVyKCkpCi0gICAgICAg
ICAgICByZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAg
ICAgICAgcmVuZGVyZXIoKS0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gd3JhcEF0dHIpIHsKICAgICAgICAgLy8gdmly
dHVhbCAvIHBoeXNpY2FsIGlzIE5ldHNjYXBlIGV4dGVuc2lvbiBvZiBIVE1MIDMuMCwgbm93IGRl
cHJlY2F0ZWQKICAgICAgICAgLy8gc29mdC8gaGFyZCAvIG9mZiBpcyByZWNvbW1lbmRhdGlvbiBm
b3IgSFRNTCA0IGV4dGVuc2lvbiBieSBJRSBhbmQgTlMgNApAQCAtMTUwLDcgKzE1MCw3IEBAIHZv
aWQgSFRNTFRleHRBcmVhRWxlbWVudDo6cGFyc2VNYXBwZWRBdHQKICAgICAgICAgZWxzZSBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgIm9mZiIpKQogICAgICAgICAgICAgbV93
cmFwID0gdGFfTm9XcmFwOwogICAgICAgICBpZiAocmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHJl
bmRlcmVyKCktPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgICAgICBy
ZW5kZXJlcigpLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhY2Nlc3NrZXlBdHRyKSB7CiAgICAgICAgIC8vIGlnbm9y
ZSBmb3IgdGhlIG1vbWVudAogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWduQXR0
cikgewpJbmRleDogcGFnZS9GcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9GcmFtZS5jcHAJ
KHJldmlzaW9uIDIwOTk3KQorKysgcGFnZS9GcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NzIsNyArMTM3Miw3IEBAIHZvaWQgRnJhbWU6OmZvcmNlTGF5b3V0V2l0aFBhZ2VXaWR0aFJhbmcK
ICAgICAgICAgLy8gVGhpcyBtYWdpYyBpcyBiYXNpY2FsbHkgY29waWVkIGZyb20ga2h0bWx2aWV3
OjpwcmludAogICAgICAgICBpbnQgcGFnZVcgPSAoaW50KWNlaWxmKG1pblBhZ2VXaWR0aCk7CiAg
ICAgICAgIHJvb3QtPnNldFdpZHRoKHBhZ2VXKTsKLSAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlv
dXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVm
V2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIGZvcmNlTGF5b3V0KCk7CiAgICAgICAgIAogICAgICAg
ICAvLyBJZiB3ZSBkb24ndCBmaXQgaW4gdGhlIG1pbmltdW0gcGFnZSB3aWR0aCwgd2UnbGwgbGF5
IG91dCBhZ2Fpbi4gSWYgd2UgZG9uJ3QgZml0IGluIHRoZQpAQCAtMTM4Myw3ICsxMzgzLDcgQEAg
dm9pZCBGcmFtZTo6Zm9yY2VMYXlvdXRXaXRoUGFnZVdpZHRoUmFuZwogICAgICAgICBpZiAocmln
aHRtb3N0UG9zID4gbWluUGFnZVdpZHRoKSB7CiAgICAgICAgICAgICBwYWdlVyA9IG1pbihyaWdo
dG1vc3RQb3MsIChpbnQpY2VpbGYobWF4UGFnZVdpZHRoKSk7CiAgICAgICAgICAgICByb290LT5z
ZXRXaWR0aChwYWdlVyk7Ci0gICAgICAgICAgICByb290LT5zZXROZWVkc0xheW91dEFuZE1pbk1h
eFJlY2FsYygpOworICAgICAgICAgICAgcm9vdC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCk7CiAgICAgICAgICAgICBmb3JjZUxheW91dCgpOwogICAgICAgICB9CiAgICAgfQpJ
bmRleDogcGFnZS9GcmFtZVZpZXcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBhZ2UvRnJhbWVWaWV3LmNw
cAkocmV2aXNpb24gMjA5OTcpCisrKyBwYWdlL0ZyYW1lVmlldy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQxMCwxMCArNDEwLDYgQEAgdm9pZCBGcmFtZVZpZXc6OmxheW91dChib29sIGFsbG93U3Vi
dHJlZQogICAgICAgICByb290LT5yZXBhaW50T2JqZWN0c0JlZm9yZUxheW91dCgpOwogICAgIH0K
IAotICAgIGlmIChzdWJ0cmVlKSB7Ci0gICAgICAgIGlmIChyb290LT5yZWNhbGNNaW5NYXgoKSkK
LSAgICAgICAgICAgIHJvb3QtPnJlY2FsY01pbk1heFdpZHRocygpOwotICAgIH0KICAgICBwYXVz
ZVNjaGVkdWxlZEV2ZW50cygpOwogICAgIHJvb3QtPmxheW91dCgpOwogICAgIGQtPmxheW91dFJv
b3QgPSAwOwpJbmRleDogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVu
ZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDEyICs3Niw5
IEBAIHZvaWQgQXV0b1RhYmxlTGF5b3V0OjpyZWNhbGNDb2x1bW4oaW50IGUKICAgICAgICAgICAg
ICAgICAgICAgLy8gYSBtaW4vbWF4IHdpZHRoIG9mIGF0IGxlYXN0IDFweCBmb3IgdGhpcyBjb2x1
bW4gbm93LgogICAgICAgICAgICAgICAgICAgICBsLm1pbldpZHRoID0gbWF4KGwubWluV2lkdGgs
IDEpOwogICAgICAgICAgICAgICAgICAgICBsLm1heFdpZHRoID0gbWF4KGwubWF4V2lkdGgsIDEp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoIWNlbGwtPm1pbk1heEtub3duKCkpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBjZWxsLT5jYWxjTWluTWF4V2lkdGgoKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKGNlbGwtPm1pbldpZHRoKCkgPiBsLm1pbldpZHRoKQotICAgICAgICAgICAgICAg
ICAgICAgICAgbC5taW5XaWR0aCA9IGNlbGwtPm1pbldpZHRoKCk7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChjZWxsLT5tYXhXaWR0aCgpID4gbC5tYXhXaWR0aCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgbC5tYXhXaWR0aCA9IGNlbGwtPm1heFdpZHRoKCk7CisgICAgICAgICAgICAgICAg
ICAgIGwubWluV2lkdGggPSBtYXgoY2VsbC0+bWluUHJlZldpZHRoKCksIGwubWluV2lkdGgpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+bWF4UHJlZldpZHRoKCkgPiBsLm1heFdpZHRo
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsLm1heFdpZHRoID0gY2VsbC0+bWF4UHJlZldp
ZHRoKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXhDb250cmlidXRvciA9IGNlbGw7CiAg
ICAgICAgICAgICAgICAgICAgIH0KIApAQCAtMjQ0LDcgKzI0MSw3IEBAIHN0YXRpYyBib29sIHNo
b3VsZFNjYWxlQ29sdW1ucyhSZW5kZXJUYWIKICAgICByZXR1cm4gc2NhbGU7CiB9CiAKLXZvaWQg
QXV0b1RhYmxlTGF5b3V0OjpjYWxjTWluTWF4V2lkdGgoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhX
aWR0aCkKK3ZvaWQgQXV0b1RhYmxlTGF5b3V0OjpjYWxjUHJlZldpZHRocyhpbnQmIG1pbldpZHRo
LCBpbnQmIG1heFdpZHRoKQogewogICAgIGZ1bGxSZWNhbGMoKTsKIApAQCAtMzE5LDggKzMxNiw4
IEBAIGludCBBdXRvVGFibGVMYXlvdXQ6OmNhbGNFZmZlY3RpdmVXaWR0aCgKIAogICAgICAgICBp
bnQgY29sID0gbV90YWJsZS0+Y29sVG9FZmZDb2woY2VsbC0+Y29sKCkpOwogICAgICAgICB1bnNp
Z25lZCBpbnQgbGFzdENvbCA9IGNvbDsKLSAgICAgICAgaW50IGNNaW5XaWR0aCA9IGNlbGwtPm1p
bldpZHRoKCkgKyBoc3BhY2luZzsKLSAgICAgICAgaW50IGNNYXhXaWR0aCA9IGNlbGwtPm1heFdp
ZHRoKCkgKyBoc3BhY2luZzsKKyAgICAgICAgaW50IGNNaW5XaWR0aCA9IGNlbGwtPm1pblByZWZX
aWR0aCgpICsgaHNwYWNpbmc7CisgICAgICAgIGludCBjTWF4V2lkdGggPSBjZWxsLT5tYXhQcmVm
V2lkdGgoKSArIGhzcGFjaW5nOwogICAgICAgICBpbnQgdG90YWxQZXJjZW50ID0gMDsKICAgICAg
ICAgaW50IG1pbldpZHRoID0gMDsKICAgICAgICAgaW50IG1heFdpZHRoID0gMDsKSW5kZXg6IHJl
bmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvQXV0b1Rh
YmxlTGF5b3V0LmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBAIHB1YmxpYzoKICAgICBBdXRvVGFi
bGVMYXlvdXQoUmVuZGVyVGFibGUqKTsKICAgICB+QXV0b1RhYmxlTGF5b3V0KCk7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgp
OworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQmIG1h
eFdpZHRoKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKIHByb3RlY3RlZDoKQEAgLTcy
LDggKzcyLDggQEAgcHJvdGVjdGVkOgogICAgICAgICBpbnQgY2FsY1dpZHRoOwogICAgIH07CiAK
LSAgICBWZWN0b3I8TGF5b3V0PiBtX2xheW91dFN0cnVjdDsKLSAgICBWZWN0b3I8UmVuZGVyVGFi
bGVDZWxsKj4gbV9zcGFuQ2VsbHM7CisgICAgVmVjdG9yPExheW91dCwgND4gbV9sYXlvdXRTdHJ1
Y3Q7CisgICAgVmVjdG9yPFJlbmRlclRhYmxlQ2VsbCosIDQ+IG1fc3BhbkNlbGxzOwogICAgIGJv
b2wgbV9oYXNQZXJjZW50IDogMTsKICAgICBtdXRhYmxlIGJvb2wgbV9wZXJjZW50YWdlc0RpcnR5
IDogMTsKICAgICBtdXRhYmxlIGJvb2wgbV9lZmZXaWR0aERpcnR5IDogMTsKSW5kZXg6IHJlbmRl
cmluZy9Db3VudGVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0NvdW50ZXJOb2Rl
LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Niw3ICs2Niw3IEBAIHZvaWQgQ291bnRlck5vZGU6OnJlY291bnQoKQog
ICAgICAgICBpZiAob2xkQ291bnQgPT0gbmV3Q291bnQpCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgaWYgKGMtPm1fcmVuZGVyZXItPmlzQ291bnRlcigpKQotICAgICAgICAgICAgYy0+bV9y
ZW5kZXJlci0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgICAgIGMt
Pm1fcmVuZGVyZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIH0K
IH0KIApJbmRleDogcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5k
ZXJpbmcvRml4ZWRUYWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MCw3ICsxODAs
NyBAQCBpbnQgRml4ZWRUYWJsZUxheW91dDo6Y2FsY1dpZHRoQXJyYXkoaW50CiAgICAgcmV0dXJu
IHVzZWRXaWR0aDsKIH0KIAotdm9pZCBGaXhlZFRhYmxlTGF5b3V0OjpjYWxjTWluTWF4V2lkdGgo
aW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCkKK3ZvaWQgRml4ZWRUYWJsZUxheW91dDo6Y2Fs
Y1ByZWZXaWR0aHMoaW50JiBtaW5XaWR0aCwgaW50JiBtYXhXaWR0aCkKIHsKICAgICAvLyBGSVhN
RTogVGhpcyBlbnRpcmUgY2FsY3VsYXRpb24gaXMgaW5jb3JyZWN0IGZvciBib3RoIG1pbndpZHRo
IGFuZCBtYXh3aWR0aC4KICAgICAKSW5kZXg6IHJlbmRlcmluZy9GaXhlZFRhYmxlTGF5b3V0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0ZpeGVkVGFibGVMYXlvdXQuaAkocmV2aXNpb24gMjA5
OTcpCisrKyByZW5kZXJpbmcvRml4ZWRUYWJsZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBAIGNsYXNzIEZpeGVkVGFibGVMYXlvdXQgOiBwdWJsaWMgVGFibGVMYXkKIHB1
YmxpYzoKICAgICBGaXhlZFRhYmxlTGF5b3V0KFJlbmRlclRhYmxlKik7CiAKLSAgICB2aXJ0dWFs
IHZvaWQgY2FsY01pbk1heFdpZHRoKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lkdGgpOworICAg
IHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRo
KTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAKIHByb3RlY3RlZDoKSW5kZXg6IHJlbmRl
cmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lQm94LmgJKHJl
dmlzaW9uIDIwOTk4KQorKysgcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBA
IC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2V4dHJhY3RlZChmYWxzZSkKICAg
ICAgICAgLCBtX2luY2x1ZGVMZWZ0RWRnZShmYWxzZSkKICAgICAgICAgLCBtX2luY2x1ZGVSaWdo
dEVkZ2UoZmFsc2UpCi0gICAgICAgICwgbV9oYXNUZXh0Q2hpbGRyZW4oZmFsc2UpCisgICAgICAg
ICwgbV9oYXNUZXh0Q2hpbGRyZW4odHJ1ZSkKICAgICAgICAgLCBtX2VuZHNXaXRoQnJlYWsoZmFs
c2UpCiAgICAgICAgICwgbV9oYXNTZWxlY3RlZENoaWxkcmVuKGZhbHNlKQogICAgICAgICAsIG1f
aGFzRWxsaXBzaXNCb3goZmFsc2UpCkBAIC04Myw3ICs4Myw3IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2V4dHJhY3RlZChleHRyYWN0ZWQpCiAgICAgICAgICwgbV9pbmNsdWRlTGVmdEVkZ2UoZmFs
c2UpCiAgICAgICAgICwgbV9pbmNsdWRlUmlnaHRFZGdlKGZhbHNlKQotICAgICAgICAsIG1faGFz
VGV4dENoaWxkcmVuKGZhbHNlKQorICAgICAgICAsIG1faGFzVGV4dENoaWxkcmVuKHRydWUpCiAg
ICAgICAgICwgbV9lbmRzV2l0aEJyZWFrKGZhbHNlKQogICAgICAgICAsIG1faGFzU2VsZWN0ZWRD
aGlsZHJlbihmYWxzZSkgICAKICAgICAgICAgLCBtX2hhc0VsbGlwc2lzQm94KGZhbHNlKQpAQCAt
MTg1LDcgKzE4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJhc2VsaW5lKGludCBiKSB7IG1f
YmFzZWxpbmUgPSBiOyB9CiAgICAgaW50IGJhc2VsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9iYXNl
bGluZTsgfQogCi0gICAgdmlydHVhbCBib29sIGhhc1RleHRDaGlsZHJlbigpIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICBib29sIGhhc1RleHRDaGlsZHJlbigpIGNvbnN0IHsgcmV0dXJuIG1faGFzVGV4
dENoaWxkcmVuOyB9CiAKICAgICB2aXJ0dWFsIGludCB0b3BPdmVyZmxvdygpIHsgcmV0dXJuIHlQ
b3MoKTsgfQogICAgIHZpcnR1YWwgaW50IGJvdHRvbU92ZXJmbG93KCkgeyByZXR1cm4geVBvcygp
ICsgaGVpZ2h0KCk7IH0KSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysg
cmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NzgsNyArNTc4
LDcgQEAgdm9pZCBJbmxpbmVGbG93Qm94OjpwYWludChSZW5kZXJPYmplY3Q6OgogICAgIC8vIDMu
IFBhaW50IG91ciBjaGlsZHJlbi4KICAgICBpZiAocGFpbnRQaGFzZSAhPSBQYWludFBoYXNlU2Vs
Zk91dGxpbmUpIHsKICAgICAgICAgZm9yIChJbmxpbmVCb3gqIGN1cnIgPSBmaXJzdENoaWxkKCk7
IGN1cnI7IGN1cnIgPSBjdXJyLT5uZXh0T25MaW5lKCkpIHsKLSAgICAgICAgICAgIGlmICghY3Vy
ci0+b2JqZWN0KCktPmxheWVyKCkpCisgICAgICAgICAgICBpZiAoIWN1cnItPm9iamVjdCgpLT5o
YXNMYXllcigpKQogICAgICAgICAgICAgICAgIGN1cnItPnBhaW50KGNoaWxkSW5mbywgdHgsIHR5
KTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkocmV2aXNpb24gMjA5OTcpCisr
KyByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2xhc3RDaGlsZCgwKQogICAgICAgICAsIG1fbWF4SG9y
aXpvbnRhbFZpc3VhbE92ZXJmbG93KDApCiAgICAgeworICAgICAgICBtX2hhc1RleHRDaGlsZHJl
biA9IGZhbHNlOwogICAgIH0KIAogICAgIFJlbmRlckZsb3cqIGZsb3dPYmplY3QoKTsKQEAgLTk4
LDggKzk5LDYgQEAgcHVibGljOgogICAgICAgICBtX2luY2x1ZGVSaWdodEVkZ2UgPSBpbmNsdWRl
UmlnaHQ7CiAgICAgfQogCi0gICAgdmlydHVhbCBib29sIGhhc1RleHRDaGlsZHJlbigpIHsgcmV0
dXJuIG1faGFzVGV4dENoaWxkcmVuOyB9Ci0KICAgICAvLyBIZWxwZXIgZnVuY3Rpb25zIHVzZWQg
ZHVyaW5nIGxpbmUgY29uc3RydWN0aW9uIGFuZCBwbGFjZW1lbnQuCiAgICAgdm9pZCBkZXRlcm1p
bmVTcGFjaW5nRm9yRmxvd0JveGVzKGJvb2wgbGFzdExpbmUsIFJlbmRlck9iamVjdCogZW5kT2Jq
ZWN0KTsKICAgICBpbnQgZ2V0Rmxvd1NwYWNpbmdXaWR0aCgpOwpJbmRleDogcmVuZGVyaW5nL1Jl
bmRlckFwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJ
KHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk1LDcgKzk1LDYgQEAgdm9pZCBSZW5kZXJBcHBsZXQ6OmNyZWF0ZVdpZGdldElm
TmVjZXNzYQogdm9pZCBSZW5kZXJBcHBsZXQ6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRz
TGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIGNhbGNXaWR0aCgp
OwogICAgIGNhbGNIZWlnaHQoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMjA5OTcpCisr
KyByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsOSArMzI1
LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5saW5lKAogICAgICAgICB7
CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAgIG8gPSBuby0+
bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGJveC0+YXBwZW5kQ2hpbGROb2RlKHJlbW92ZUNo
aWxkTm9kZShubykpOworICAgICAgICAgICAgYm94LT5tb3ZlQ2hpbGROb2RlKG5vKTsKICAgICAg
ICAgfQotICAgICAgICBib3gtPmFwcGVuZENoaWxkTm9kZShyZW1vdmVDaGlsZE5vZGUoaW5saW5l
UnVuRW5kKSk7CisgICAgICAgIGJveC0+bW92ZUNoaWxkTm9kZShpbmxpbmVSdW5FbmQpOwogICAg
IH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTM1MCwxMyArMzUwLDEyIEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICBpZiAoY2FuRGVsZXRlQW5vbnltb3VzQmxv
Y2tzICYmIHByZXYgJiYgbmV4dCkgewogICAgICAgICAvLyBUYWtlIGFsbCB0aGUgY2hpbGRyZW4g
b3V0IG9mIHRoZSB8bmV4dHwgYmxvY2sgYW5kIHB1dCB0aGVtIGluCiAgICAgICAgIC8vIHRoZSB8
cHJldnwgYmxvY2suCi0gICAgICAgIHByZXYtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxj
KCk7CisgICAgICAgIHByZXYtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwog
ICAgICAgICBSZW5kZXJPYmplY3QqIG8gPSBuZXh0LT5maXJzdENoaWxkKCk7CiAgICAgICAgIHdo
aWxlIChvKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAg
IG8gPSBuby0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHByZXYtPmFwcGVuZENoaWxkTm9k
ZShuZXh0LT5yZW1vdmVDaGlsZE5vZGUobm8pKTsKLSAgICAgICAgICAgIG5vLT5zZXROZWVkc0xh
eW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAgICAgcHJldi0+bW92ZUNoaWxkTm9kZShu
byk7CiAgICAgICAgIH0KICAKICAgICAgICAgUmVuZGVyQmxvY2sqIG5leHRCbG9jayA9IHN0YXRp
Y19jYXN0PFJlbmRlckJsb2NrKj4obmV4dCk7CkBAIC0zNzMsMTUgKzM3MiwxNCBAQCB2b2lkIFJl
bmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIC8vIFRoZSByZW1vdmFs
IGhhcyBrbm9ja2VkIHVzIGRvd24gdG8gY29udGFpbmluZyBvbmx5IGEgc2luZ2xlIGFub255bW91
cwogICAgICAgICAvLyBib3guICBXZSBjYW4gZ28gYWhlYWQgYW5kIHB1bGwgdGhlIGNvbnRlbnQg
cmlnaHQgYmFjayB1cCBpbnRvIG91cgogICAgICAgICAvLyBib3guCi0gICAgICAgIHNldE5lZWRz
TGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJlZldp
ZHRoc1JlY2FsYygpOwogICAgICAgICBSZW5kZXJCbG9jayogYW5vbkJsb2NrID0gc3RhdGljX2Nh
c3Q8UmVuZGVyQmxvY2sqPihyZW1vdmVDaGlsZE5vZGUoY2hpbGQpKTsKICAgICAgICAgbV9jaGls
ZHJlbklubGluZSA9IHRydWU7CiAgICAgICAgIFJlbmRlck9iamVjdCogbyA9IGFub25CbG9jay0+
Zmlyc3RDaGlsZCgpOwogICAgICAgICB3aGlsZSAobykgewogICAgICAgICAgICAgUmVuZGVyT2Jq
ZWN0KiBubyA9IG87CiAgICAgICAgICAgICBvID0gbm8tPm5leHRTaWJsaW5nKCk7Ci0gICAgICAg
ICAgICBhcHBlbmRDaGlsZE5vZGUoYW5vbkJsb2NrLT5yZW1vdmVDaGlsZE5vZGUobm8pKTsKLSAg
ICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAg
ICAgbW92ZUNoaWxkTm9kZShubyk7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBEZWxldGUgdGhl
IG5vdy1lbXB0eSBibG9jaydzIGxpbmVzIGFuZCBudWtlIGl0LgpAQCAtNDY0LDYgKzQ2Miw5IEBA
IGJvb2wgUmVuZGVyQmxvY2s6OmlzU2VsZkNvbGxhcHNpbmdCbG9jaygKIAogdm9pZCBSZW5kZXJC
bG9jazo6bGF5b3V0KCkKIHsKKyAgICAvLyBVcGRhdGUgb3VyIGZpcnN0IGxldHRlciBpbmZvIG5v
dy4KKyAgICB1cGRhdGVGaXJzdExldHRlcigpOworCiAgICAgLy8gVGFibGUgY2VsbHMgY2FsbCBs
YXlvdXRCbG9jayBkaXJlY3RseSwgc28gZG9uJ3QgYWRkIGFueSBsb2dpYyBoZXJlLiAgUHV0IGNv
ZGUgaW50bwogICAgIC8vIGxheW91dEJsb2NrKCkuCiAgICAgbGF5b3V0QmxvY2soZmFsc2UpOwpA
QCAtNDgxLDcgKzQ4Miw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dCgpCiB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pCiB7CiAgICAgQVNTRVJU
KG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIGlmIChp
c0lubGluZSgpICYmICFpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSAvLyBJbmxpbmUgPGZv
cm0+cyBpbnNpZGUgdmFyaW91cyB0YWJsZSBlbGVtZW50cyBjYW4KICAgICAgICAgcmV0dXJuOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2F1c2UgdXMgdG8gY29tZSBp
biBoZXJlLiAgSnVzdCBiYWlsLgpAQCAtNTM0LDcgKzUzNCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAvLwogICAgIC8vIFN0YXJ0IG91dCBieSBzZXR0
aW5nIG91ciBtYXJnaW4gdmFsdWVzIHRvIG91ciBjdXJyZW50IG1hcmdpbnMuICBUYWJsZSBjZWxs
cyBoYXZlCiAgICAgLy8gbm8gbWFyZ2lucywgc28gd2UgZG9uJ3QgZmlsbCBpbiB0aGUgdmFsdWVz
IGZvciB0YWJsZSBjZWxscy4KLSAgICBpZiAoIWlzVGFibGVDZWxsKCkpIHsKKyAgICBib29sIGlz
Q2VsbCA9IGlzVGFibGVDZWxsKCk7CisgICAgaWYgKCFpc0NlbGwpIHsKICAgICAgICAgaW5pdE1h
eE1hcmdpblZhbHVlcygpOwogCiAgICAgICAgIG1fdG9wTWFyZ2luUXVpcmsgPSBzdHlsZSgpLT5t
YXJnaW5Ub3AoKS5xdWlyaygpOwpAQCAtNTk0LDcgKzU5NSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmxheW91dEJsb2NrKGJvb2wgcmVsYXkKICAgICAgICAgbV9oZWlnaHQgKz0gYm9yZGVyQm90dG9t
KCkgKyBwYWRkaW5nQm90dG9tKCk7CiAgICAgfQogCi0gICAgaWYgKChpc1RhYmxlQ2VsbCgpIHx8
IGlzSW5saW5lKCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGlzUm9vdCgpKSAmJiAh
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc0NvbnRyb2xDbGlwKCkpCisgICAgaWYgKChpc0NlbGwg
fHwgaXNJbmxpbmUoKSB8fCBpc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgfHwgaXNSb290KCkpICYm
ICFoYXNPdmVyZmxvd0NsaXAoKSAmJiAhaGFzQ29udHJvbENsaXAoKSkKICAgICAgICAgYWRkVmlz
dWFsT3ZlcmZsb3coZmxvYXRSZWN0KCkpOwogCiAgICAgbGF5b3V0UG9zaXRpb25lZE9iamVjdHMo
cmVsYXlvdXRDaGlsZHJlbiB8fCBpc1Jvb3QoKSk7CkBAIC03NTQsNyArNzU1LDcgQEAgUmVuZGVy
T2JqZWN0KiBSZW5kZXJCbG9jazo6aGFuZGxlQ29tcGFjdAogICAgICAgICAgICAgY2hpbGQtPmNh
bGNXaWR0aCgpOwogICAgICAgICAgICAgaW50IGNoaWxkTWFyZ2lucyA9IGNoaWxkLT5tYXJnaW5M
ZWZ0KCkgKyBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgICAgIGludCBtYXJnaW4gPSBz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIgPyBjdXJyLT5tYXJnaW5MZWZ0KCkgOiBjdXJyLT5t
YXJnaW5SaWdodCgpOwotICAgICAgICAgICAgaWYgKG1hcmdpbiA+PSAoY2hpbGRNYXJnaW5zICsg
Y2hpbGQtPm1heFdpZHRoKCkpKSB7CisgICAgICAgICAgICBpZiAobWFyZ2luID49IChjaGlsZE1h
cmdpbnMgKyBjaGlsZC0+bWF4UHJlZldpZHRoKCkpKSB7CiAgICAgICAgICAgICAgICAgLy8gVGhl
IGNvbXBhY3Qgd2lsbCBmaXQgaW4gdGhlIG1hcmdpbi4KICAgICAgICAgICAgICAgICBoYW5kbGVk
ID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBjb21wYWN0SW5mby5zZXQoY2hpbGQsIGN1cnIpOwpA
QCAtMTI3OSw3ICsxMjgwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVwYWludE92ZXJoYW5naW5n
RmxvYQogICAgICAgICAgICAgLy8gT25seSByZXBhaW50IHRoZSBvYmplY3QgaWYgaXQgaXMgb3Zl
cmhhbmdpbmcsIGlzIG5vdCBpbiBpdHMgb3duIGxheWVyLCBhbmQKICAgICAgICAgICAgIC8vIGlz
IG91ciByZXNwb25zaWJpbGl0eSB0byBwYWludCAobm9QYWludCBpc24ndCBzZXQpLiBXaGVuIHBh
aW50QWxsRGVzY2VuZGFudHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgogICAgICAgICAgICAgLy8gY29u
ZGl0aW9uIGlzIHJlcGxhY2VkIHdpdGggYmVpbmcgYSBkZXNjZW5kYW50IG9mIHVzLgotICAgICAg
ICAgICAgaWYgKHItPmVuZFkgPiBtX2hlaWdodCAmJiAocGFpbnRBbGxEZXNjZW5kYW50cyAmJiBy
LT5ub2RlLT5pc0Rlc2NlbmRhbnRPZih0aGlzKSB8fCAhci0+bm9QYWludCkgJiYgIXItPm5vZGUt
PmxheWVyKCkpIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAoci0+ZW5kWSA+IG1f
aGVpZ2h0ICYmIChwYWludEFsbERlc2NlbmRhbnRzICYmIHItPm5vZGUtPmlzRGVzY2VuZGFudE9m
KHRoaXMpIHx8ICFyLT5ub1BhaW50KSAmJiAhci0+bm9kZS0+aGFzTGF5ZXIoKSkgeyAgICAgICAg
ICAgICAgICAKICAgICAgICAgICAgICAgICByLT5ub2RlLT5yZXBhaW50KCk7CiAgICAgICAgICAg
ICAgICAgci0+bm9kZS0+cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKCk7CiAgICAgICAgICAgICB9
CkBAIC0xNDMyLDcgKzE0MzMsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENoaWxkcmVuKFBh
aW50SW5mCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoIWNo
aWxkLT5sYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQorICAgICAgICBpZiAoIWNoaWxk
LT5oYXNMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQogICAgICAgICAgICAgY2hpbGQt
PnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sgZm9yIHBhZ2UtYnJlYWst
YWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQgYmFpbC4KQEAgLTE1MzEs
NyArMTUzMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRzKFBhaW50SW5mbyYKICAg
ICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGlu
Z09iamVjdHMpOwogICAgIGZvciAoOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQpIHsKICAgICAg
ICAgLy8gT25seSBwYWludCB0aGUgb2JqZWN0IGlmIG91ciBub1BhaW50IGZsYWcgaXNuJ3Qgc2V0
LgotICAgICAgICBpZiAoIXItPm5vUGFpbnQgJiYgIXItPm5vZGUtPmxheWVyKCkpIHsKKyAgICAg
ICAgaWYgKCFyLT5ub1BhaW50ICYmICFyLT5ub2RlLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAg
ICBQYWludEluZm8gY3VycmVudFBhaW50SW5mbyhwYWludEluZm8pOwogICAgICAgICAgICAgY3Vy
cmVudFBhaW50SW5mby5waGFzZSA9IHBhaW50U2VsZWN0aW9uID8gUGFpbnRQaGFzZVNlbGVjdGlv
biA6IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQ7CiAgICAgICAgICAgICBpbnQgY3VycmVudFRY
ID0gdHggKyByLT5sZWZ0IC0gci0+bm9kZS0+eFBvcygpICsgci0+bm9kZS0+bWFyZ2luTGVmdCgp
OwpAQCAtMTc0OCw3ICsxNzQ5LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxvY2s6OmZpbGxCbG9ja1Nl
bGVjdGlvbgogICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpKQogICAg
ICAgICAgICAgY29udGludWU7IC8vIFdlIG11c3QgYmUgYSBub3JtYWwgZmxvdyBvYmplY3QgaW4g
b3JkZXIgdG8gZXZlbiBiZSBjb25zaWRlcmVkLgogCi0gICAgICAgIGlmIChjdXJyLT5pc1JlbFBv
c2l0aW9uZWQoKSAmJiBjdXJyLT5sYXllcigpKSB7CisgICAgICAgIGlmIChjdXJyLT5pc1JlbFBv
c2l0aW9uZWQoKSAmJiBjdXJyLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICAvLyBJZiB0aGUg
cmVscG9zaXRpb24gb2Zmc2V0IGlzIGFueXRoaW5nIG90aGVyIHRoYW4gMCwgdGhlbiB0cmVhdCB0
aGlzIGp1c3QgbGlrZSBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1lbnQuCiAgICAgICAgICAg
ICAvLyBKdXN0IGRpc3JlZ2FyZCBpdCBjb21wbGV0ZWx5LgogICAgICAgICAgICAgaW50IHggPSAw
OwpAQCAtMTk4OSw3ICsxOTkwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6aW5zZXJ0RmxvYXRpbmdP
YmplY3QoUgogICAgICAgICBuZXdPYmotPnN0YXJ0WSA9IC0xOwogICAgICAgICBuZXdPYmotPmVu
ZFkgPSAtMTsKICAgICAgICAgbmV3T2JqLT53aWR0aCA9IG8tPndpZHRoKCkgKyBvLT5tYXJnaW5M
ZWZ0KCkgKyBvLT5tYXJnaW5SaWdodCgpOwotICAgICAgICBuZXdPYmotPm5vUGFpbnQgPSBvLT5s
YXllcigpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhlIGZsb2F0IHdpbGwgcGFpbnQgaXRzZWxm
LiAgT3RoZXJ3aXNlIHNvbWVvbmUgZWxzZSB3aWxsLgorICAgICAgICBuZXdPYmotPm5vUGFpbnQg
PSBvLT5oYXNMYXllcigpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhlIGZsb2F0IHdpbGwgcGFp
bnQgaXRzZWxmLiAgT3RoZXJ3aXNlIHNvbWVvbmUgZWxzZSB3aWxsLgogICAgIH0KICAgICBlbHNl
IHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBhcyBpbnNlcnRGbG9hdGlu
Z09iamVjdCgpIHNob3VsZCBvbmx5IGV2ZXIgYmUgY2FsbGVkIHdpdGggZmxvYXRpbmcKQEAgLTIy
NDMsNyArMjI0NCw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmZsb2F0UmVjdCgpIGNvbnN0CiAg
ICAgRmxvYXRpbmdPYmplY3QqIHI7CiAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9h
dGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICBmb3IgKDsgKHIgPSBpdC5j
dXJyZW50KCkpOyArK2l0KSB7Ci0gICAgICAgIGlmICghci0+bm9QYWludCAmJiAhci0+bm9kZS0+
bGF5ZXIoKSkgeworICAgICAgICBpZiAoIXItPm5vUGFpbnQgJiYgIXItPm5vZGUtPmhhc0xheWVy
KCkpIHsKICAgICAgICAgICAgIEludFJlY3QgY2hpbGRSZWN0ID0gci0+bm9kZS0+b3ZlcmZsb3dS
ZWN0KGZhbHNlKTsKICAgICAgICAgICAgIGNoaWxkUmVjdC5tb3ZlKHItPmxlZnQgKyByLT5ub2Rl
LT5tYXJnaW5MZWZ0KCksIHItPnN0YXJ0WSArIHItPm5vZGUtPm1hcmdpblRvcCgpKTsKICAgICAg
ICAgICAgIHJlc3VsdC51bml0ZShjaGlsZFJlY3QpOwpAQCAtMjI4Niw3ICsyMjg3LDcgQEAgaW50
IFJlbmRlckJsb2NrOjpsb3dlc3RQb3NpdGlvbihib29sIGluYwogICAgICAgICBGbG9hdGluZ09i
amVjdCogcjsKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVj
dD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgZm9yICggOyAociA9IGl0LmN1cnJl
bnQoKSk7ICsraXQgKSB7Ci0gICAgICAgICAgICBpZiAoIXItPm5vUGFpbnQgfHwgci0+bm9kZS0+
bGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKCFyLT5ub1BhaW50IHx8IHItPm5vZGUtPmhhc0xh
eWVyKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgbHAgPSByLT5zdGFydFkgKyByLT5ub2RlLT5t
YXJnaW5Ub3AoKSArIHItPm5vZGUtPmxvd2VzdFBvc2l0aW9uKGZhbHNlKTsKICAgICAgICAgICAg
ICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBscCk7CiAgICAgICAgICAgICB9CkBAIC0yMzM1LDcg
KzIzMzYsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0aW9uKGJvb2wgCiAgICAg
ICAgIEZsb2F0aW5nT2JqZWN0KiByOwogICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9y
PEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAgICAgICBmb3IgKCA7
IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApIHsKLSAgICAgICAgICAgIGlmICghci0+bm9QYWlu
dCB8fCByLT5ub2RlLT5sYXllcigpKSB7CisgICAgICAgICAgICBpZiAoIXItPm5vUGFpbnQgfHwg
ci0+bm9kZS0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGludCBycCA9IHItPmxlZnQg
KyByLT5ub2RlLT5tYXJnaW5MZWZ0KCkgKyByLT5ub2RlLT5yaWdodG1vc3RQb3NpdGlvbihmYWxz
ZSk7CiAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHJwKTsKICAgICAgICAgICAg
IH0KQEAgLTIzODksNyArMjM5MCw3IEBAIGludCBSZW5kZXJCbG9jazo6bGVmdG1vc3RQb3NpdGlv
bihib29sIGkKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHI7CiAgICAgICAgIERlcHJlY2F0ZWRQ
dHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7CiAg
ICAgICAgIGZvciAoIDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0ICkgewotICAgICAgICAgICAg
aWYgKCFyLT5ub1BhaW50IHx8IHItPm5vZGUtPmxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICgh
ci0+bm9QYWludCB8fCByLT5ub2RlLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgaW50
IGxwID0gci0+bGVmdCArIHItPm5vZGUtPm1hcmdpbkxlZnQoKSArIHItPm5vZGUtPmxlZnRtb3N0
UG9zaXRpb24oZmFsc2UpOwogICAgICAgICAgICAgICAgIGxlZnQgPSBtaW4obGVmdCwgbHApOwog
ICAgICAgICAgICAgfQpAQCAtMjUxNCw3ICsyNTE1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6YWRk
T3ZlcmhhbmdpbmdGbG9hdHMoUgogICAgICAgICAgICAgICAgIG1fZmxvYXRpbmdPYmplY3RzLT5h
cHBlbmQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGlm
ICghci0+bm9QYWludCAmJiAhci0+bm9kZS0+bGF5ZXIoKSkgeworICAgICAgICBpZiAoIXItPm5v
UGFpbnQgJiYgIXItPm5vZGUtPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgIEludFJlY3QgZmxv
YXRPdmVyZmxvd1JlY3QgPSByLT5ub2RlLT5vdmVyZmxvd1JlY3QoZmFsc2UpOwogICAgICAgICAg
ICAgZmxvYXRPdmVyZmxvd1JlY3QubW92ZShyLT5sZWZ0ICsgci0+bm9kZS0+bWFyZ2luTGVmdCgp
LCByLT5zdGFydFkgKyByLT5ub2RlLT5tYXJnaW5Ub3AoKSk7CiAgICAgICAgICAgICBmbG9hdHNP
dmVyZmxvd1JlY3QudW5pdGUoZmxvYXRPdmVyZmxvd1JlY3QpOwpAQCAtMjYzNiw3ICsyNjM3LDcg
QEAgaW50IFJlbmRlckJsb2NrOjpnZXRDbGVhckRlbHRhKFJlbmRlck9iagogICAgIC8vIChlYmF5
IG9uIHRoZSBQTFQsIGZpbmFuY2UueWFob28uY29tIGluIHRoZSByZWFsIHdvcmxkLCB2ZXJzaW9u
dHJhY2tlci5jb20gZm9yY2VzIGV2ZW4gYWxtb3N0IHN0cmljdCBtb2RlIG5vdCB0byB3b3JrKQog
ICAgIGludCByZXN1bHQgPSBjbGVhclNldCA/IG1heCgwLCBib3R0b20gLSBjaGlsZC0+eVBvcygp
KSA6IDA7CiAgICAgaWYgKCFyZXN1bHQgJiYgY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNoaWxk
LT5zdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiAKLSAgICAgICAgY2hpbGQtPm1pbldpZHRo
KCkgPiBsaW5lV2lkdGgoY2hpbGQtPnlQb3MoKSkgJiYgY2hpbGQtPm1pbldpZHRoKCkgPD0gYXZh
aWxhYmxlV2lkdGgoKSAmJiAKKyAgICAgICAgY2hpbGQtPm1pblByZWZXaWR0aCgpID4gbGluZVdp
ZHRoKGNoaWxkLT55UG9zKCkpICYmIGNoaWxkLT5taW5QcmVmV2lkdGgoKSA8PSBhdmFpbGFibGVX
aWR0aCgpICYmIAogICAgICAgICBkb2N1bWVudCgpLT5pblN0cmljdE1vZGUoKSkgICAKICAgICAg
ICAgcmVzdWx0ID0gbWF4KDAsIGZsb2F0Qm90dG9tKCkgLSBjaGlsZC0+eVBvcygpKTsKICAgICBy
ZXR1cm4gcmVzdWx0OwpAQCAtMjcwOSw3ICsyNzEwLDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9k
ZUF0UG9pbnQoY29uc3QgSGl0VAogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIG87CiAgICAg
ICAgICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9m
bG9hdGluZ09iamVjdHMpOwogICAgICAgICAgICAgZm9yIChpdC50b0xhc3QoKTsgKG8gPSBpdC5j
dXJyZW50KCkpOyAtLWl0KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFvLT5ub1BhaW50ICYmICFv
LT5ub2RlLT5sYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFvLT5ub1BhaW50ICYmICFv
LT5ub2RlLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgICAgIGludCB4b2Zmc2V0ID0g
c2Nyb2xsZWRYICsgby0+bGVmdCArIG8tPm5vZGUtPm1hcmdpbkxlZnQoKSAtIG8tPm5vZGUtPnhQ
b3MoKTsKICAgICAgICAgICAgICAgICAgICAgaW50IHlvZmZzZXQgPSAgc2Nyb2xsZWRZICsgby0+
c3RhcnRZICsgby0+bm9kZS0+bWFyZ2luVG9wKCkgLSBvLT5ub2RlLT55UG9zKCk7CiAgICAgICAg
ICAgICAgICAgICAgIGlmIChvLT5ub2RlLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgX3gsIF95
LCB4b2Zmc2V0LCB5b2Zmc2V0KSkgewpAQCAtMzIyOSw2MSArMzIzMCw1NyBAQCB2b2lkIFJlbmRl
ckJsb2NrOjphZGp1c3RSZWN0Rm9yQ29sdW1ucyhJCiAgICAgciA9IHJlc3VsdDsKIH0KIAotdm9p
ZCBSZW5kZXJCbG9jazo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNhbGNQ
cmVmV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQoICFtaW5NYXhLbm93bigpICk7CisgICAgQVNTRVJU
KHByZWZXaWR0aHNEaXJ0eSgpKTsKIAotI2lmZGVmIERFQlVHX0xBWU9VVAotICAgIGtkRGVidWco
IDYwNDAgKSA8PCByZW5kZXJOYW1lKCkgPDwgIihSZW5kZXJCbG9jayk6OmNhbGNNaW5NYXhXaWR0
aCgpIHRoaXM9IiA8PCB0aGlzIDw8IGVuZGw7Ci0jZW5kaWYKKyAgICB1cGRhdGVGaXJzdExldHRl
cigpOwogCiAgICAgaWYgKCFpc1RhYmxlQ2VsbCgpICYmIHN0eWxlKCktPndpZHRoKCkuaXNGaXhl
ZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluV2lkdGgg
PSBtX21heFdpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVl
KCkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwogICAgIGVsc2UgewotICAgICAg
ICBtX21pbldpZHRoID0gMDsKLSAgICAgICAgbV9tYXhXaWR0aCA9IDA7CisgICAgICAgIG1fbWlu
UHJlZldpZHRoID0gMDsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSAwOwogCiAgICAgICAgIGlm
IChjaGlsZHJlbklubGluZSgpKQotICAgICAgICAgICAgY2FsY0lubGluZU1pbk1heFdpZHRoKCk7
CisgICAgICAgICAgICBjYWxjSW5saW5lUHJlZldpZHRocygpOwogICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBjYWxjQmxvY2tNaW5NYXhXaWR0aCgpOwotCi0gICAgICAgIGlmKG1fbWF4V2lkdGgg
PCBtX21pbldpZHRoKSBtX21heFdpZHRoID0gbV9taW5XaWR0aDsKKyAgICAgICAgICAgIGNhbGNC
bG9ja1ByZWZXaWR0aHMoKTsKIAorICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21pblBy
ZWZXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOworICAgICAgICAKICAgICAgICAgaWYgKCFzdHlsZSgp
LT5hdXRvV3JhcCgpICYmIGNoaWxkcmVuSW5saW5lKCkpIHsKLSAgICAgICAgICAgIG1fbWluV2lk
dGggPSBtX21heFdpZHRoOworICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZX
aWR0aDsKICAgICAgICAgICAgIAogICAgICAgICAgICAgLy8gQSBob3Jpem9udGFsIG1hcnF1ZWUg
d2l0aCBpbmxpbmUgY2hpbGRyZW4gaGFzIG5vIG1pbmltdW0gd2lkdGguCiAgICAgICAgICAgICBp
ZiAobV9sYXllciAmJiBtX2xheWVyLT5tYXJxdWVlKCkgJiYgbV9sYXllci0+bWFycXVlZSgpLT5p
c0hvcml6b250YWwoKSkKLSAgICAgICAgICAgICAgICBtX21pbldpZHRoID0gMDsKKyAgICAgICAg
ICAgICAgICBtX21pblByZWZXaWR0aCA9IDA7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoaXNU
YWJsZUNlbGwoKSkgewotICAgICAgICAgICAgTGVuZ3RoIHcgPSBzdGF0aWNfY2FzdDxSZW5kZXJU
YWJsZUNlbGwqPih0aGlzKS0+c3R5bGVPckNvbFdpZHRoKCk7CisgICAgICAgICAgICBMZW5ndGgg
dyA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxlQ2VsbCo+KHRoaXMpLT5zdHlsZU9yQ29s
V2lkdGgoKTsKICAgICAgICAgICAgIGlmICh3LmlzRml4ZWQoKSAmJiB3LnZhbHVlKCkgPiAwKQot
ICAgICAgICAgICAgICAgIG1fbWF4V2lkdGggPSBtYXgobV9taW5XaWR0aCwgY2FsY0NvbnRlbnRC
b3hXaWR0aCh3LnZhbHVlKCkpKTsKKyAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1h
eChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aCh3LnZhbHVlKCkpKTsKICAgICAg
ICAgfQogICAgIH0KICAgICAKICAgICBpZiAoc3R5bGUoKS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkg
JiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4gMCkgewotICAgICAgICBtX21heFdpZHRo
ID0gbWF4KG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgo
KS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGggPSBtYXgobV9taW5XaWR0aCwgY2FsY0Nv
bnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9t
YXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5
bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4
KG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKSkpOwogICAgIH0KICAgICAKICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0Zp
eGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkg
ewotICAgICAgICBtX21heFdpZHRoID0gbWluKG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lk
dGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGggPSBt
aW4obV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZh
bHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNh
bGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAg
IG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9
IDA7CiAgICAgdG9BZGQgPSBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xl
ZnQoKSArIHBhZGRpbmdSaWdodCgpOwogCi0gICAgbV9taW5XaWR0aCArPSB0b0FkZDsKLSAgICBt
X21heFdpZHRoICs9IHRvQWRkOwotCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBtX21pblBy
ZWZXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCArPSB0b0FkZDsKIAotICAgIC8v
a2REZWJ1ZyggNjA0MCApIDw8ICJUZXh0OjpjYWxjTWluTWF4V2lkdGgoIiA8PCB0aGlzIDw8ICIp
OiBtaW4gPSAiIDw8IG1fbWluV2lkdGggPDwgIiBtYXggPSAiIDw8IG1fbWF4V2lkdGggPDwgZW5k
bDsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiBzdHJ1Y3QgSW5saW5lTWlu
TWF4SXRlcmF0b3IKQEAgLTMzMDAsOCArMzI5Nyw4IEBAIHN0cnVjdCBJbmxpbmVNaW5NYXhJdGVy
YXRvcgogICAgIFJlbmRlck9iamVjdCogY3VycmVudDsKICAgICBib29sIGVuZE9mSW5saW5lOwog
Ci0gICAgSW5saW5lTWluTWF4SXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBwLCBSZW5kZXJPYmplY3Qq
IG8sIGJvb2wgZW5kID0gZmFsc2UpCi0gICAgICAgIDpwYXJlbnQocCksIGN1cnJlbnQobyksIGVu
ZE9mSW5saW5lKGVuZCkge30KKyAgICBJbmxpbmVNaW5NYXhJdGVyYXRvcihSZW5kZXJPYmplY3Qq
IHAsIGJvb2wgZW5kID0gZmFsc2UpCisgICAgICAgIDpwYXJlbnQocCksIGN1cnJlbnQocCksIGVu
ZE9mSW5saW5lKGVuZCkge30KIAogICAgIFJlbmRlck9iamVjdCogbmV4dCgpOwogfTsKQEAgLTMz
MTEsOSArMzMwOCw3IEBAIFJlbmRlck9iamVjdCogSW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQK
ICAgICBSZW5kZXJPYmplY3QqIHJlc3VsdCA9IDA7CiAgICAgYm9vbCBvbGRFbmRPZklubGluZSA9
IGVuZE9mSW5saW5lOwogICAgIGVuZE9mSW5saW5lID0gZmFsc2U7Ci0gICAgd2hpbGUgKGN1cnJl
bnQgIT0gMCB8fCAoY3VycmVudCA9PSBwYXJlbnQpKQotICAgIHsKLSAgICAgICAgLy9rZERlYnVn
KCA2MDQwICkgPDwgImN1cnJlbnQgPSAiIDw8IGN1cnJlbnQgPDwgZW5kbDsKKyAgICB3aGlsZSAo
Y3VycmVudCB8fCBjdXJyZW50ID09IHBhcmVudCkgewogICAgICAgICBpZiAoIW9sZEVuZE9mSW5s
aW5lICYmCiAgICAgICAgICAgICAoY3VycmVudCA9PSBwYXJlbnQgfHwKICAgICAgICAgICAgICAo
IWN1cnJlbnQtPmlzRmxvYXRpbmcoKSAmJiAhY3VycmVudC0+aXNSZXBsYWNlZCgpICYmICFjdXJy
ZW50LT5pc1Bvc2l0aW9uZWQoKSkpKQpAQCAtMzMzOCwxMSArMzMzMywxMCBAQCBSZW5kZXJPYmpl
Y3QqIElubGluZU1pbk1heEl0ZXJhdG9yOjpuZXh0CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
IAotICAgICAgICBpZiAoIXJlc3VsdCkgYnJlYWs7CisgICAgICAgIGlmICghcmVzdWx0KQorICAg
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgaWYgKCFyZXN1bHQtPmlzUG9zaXRpb25lZCgpICYm
IChyZXN1bHQtPmlzVGV4dCgpIHx8IHJlc3VsdC0+aXNCUigpIHx8Ci0gICAgICAgICAgICByZXN1
bHQtPmlzRmxvYXRpbmcoKSB8fCByZXN1bHQtPmlzUmVwbGFjZWQoKSB8fAotICAgICAgICAgICAg
cmVzdWx0LT5pc0lubGluZUZsb3coKSkpCisgICAgICAgIGlmICghcmVzdWx0LT5pc1Bvc2l0aW9u
ZWQoKSAmJiAocmVzdWx0LT5pc1RleHQoKSB8fCByZXN1bHQtPmlzRmxvYXRpbmcoKSB8fCByZXN1
bHQtPmlzUmVwbGFjZWQoKSB8fCByZXN1bHQtPmlzSW5saW5lRmxvdygpKSkKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICAgICAgY3VycmVudCA9IHJlc3VsdDsKQEAgLTMzNjEsNyAr
MzM1NSw3IEBAIHN0YXRpYyBpbnQgZ2V0QlBNV2lkdGgoaW50IGNoaWxkVmFsdWUsIEwKICAgICBy
ZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZXRCb3JkZXJQYWRkaW5nTWFyZ2luKFJlbmRlck9i
amVjdCogY2hpbGQsIGJvb2wgZW5kT2ZJbmxpbmUpCitzdGF0aWMgaW50IGdldEJvcmRlclBhZGRp
bmdNYXJnaW4oY29uc3QgUmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9vbCBlbmRPZklubGluZSkKIHsK
ICAgICBSZW5kZXJTdHlsZSogY3N0eWxlID0gY2hpbGQtPnN0eWxlKCk7CiAgICAgaW50IHJlc3Vs
dCA9IDA7CkBAIC0zMzk0LDcgKzMzODgsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3RyaXBUcmFp
bGluZ1NwYWNlKGluCiAvLyBhbmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3Jv
dyB0byBmaXQgYW4gaW1hZ2UgaW5zaWRlIGl0IHVuZGVyCiAvLyB2ZXJ5IHNwZWNpZmljIGNpcnVj
dW1zdGFuY2VzLiBOb3Qgc3VwcG9ydGluZyB0aGUgcXVpcmsgaGFzIGNhdXNlZCB1cyB0bwogLy8g
bWlzLXJlbmRlciBzb21lIHJlYWwgc2l0ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcuKSAKLXN0YXRp
YyBib29sIHNob3VsZEdyb3dUYWJsZUNlbGxGb3JJbWFnZShSZW5kZXJCbG9jayogY29udGFpbmlu
Z0Jsb2NrLCBSZW5kZXJPYmplY3QqIGltYWdlLCBSZW5kZXJPYmplY3QqIGFkamFjZW50TGVhZikK
K3N0YXRpYyBib29sIHNob3VsZEdyb3dUYWJsZUNlbGxGb3JJbWFnZShjb25zdCBSZW5kZXJCbG9j
ayogY29udGFpbmluZ0Jsb2NrLCBjb25zdCBSZW5kZXJPYmplY3QqIGltYWdlLCBjb25zdCBSZW5k
ZXJPYmplY3QqIGFkamFjZW50TGVhZikKIHsKICAgICBpZiAoIWNvbnRhaW5pbmdCbG9jay0+c3R5
bGUoKS0+aHRtbEhhY2tzKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTM0MTQsMTAgKzM0
MDgsMTAgQEAgc3RhdGljIGJvb2wgc2hvdWxkR3Jvd1RhYmxlQ2VsbEZvckltYWdlKAogICAgIHJl
dHVybiB0cnVlOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5lTWluTWF4V2lkdGgo
KQordm9pZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZVByZWZXaWR0aHMoKQogewotICAgIGludCBp
bmxpbmVNYXg9MDsKLSAgICBpbnQgaW5saW5lTWluPTA7CisgICAgaW50IGlubGluZU1heCA9IDA7
CisgICAgaW50IGlubGluZU1pbiA9IDA7CiAKICAgICBpbnQgY3cgPSBjb250YWluaW5nQmxvY2so
KS0+Y29udGVudFdpZHRoKCk7CiAKQEAgLTM0MjksMTIgKzM0MjMsMTEgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2FsY0lubGluZU1pbk1heFdpZHRoKAogICAgIGJvb2wgYXV0b1dyYXAsIG9sZEF1dG9X
cmFwOwogICAgIGF1dG9XcmFwID0gb2xkQXV0b1dyYXAgPSBzdHlsZSgpLT5hdXRvV3JhcCgpOwog
Ci0gICAgSW5saW5lTWluTWF4SXRlcmF0b3IgY2hpbGRJdGVyYXRvcih0aGlzLCB0aGlzKTsKKyAg
ICBJbmxpbmVNaW5NYXhJdGVyYXRvciBjaGlsZEl0ZXJhdG9yKHRoaXMpOwogICAgIGJvb2wgYWRk
ZWRUZXh0SW5kZW50ID0gZmFsc2U7IC8vIE9ubHkgZ2V0cyBhZGRlZCBpbiBvbmNlLgogICAgIFJl
bmRlck9iamVjdCogcHJldkZsb2F0ID0gMDsKICAgICBSZW5kZXJPYmplY3QqIHByZXZpb3VzTGVh
ZiA9IDA7Ci0gICAgd2hpbGUgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjaGlsZEl0ZXJhdG9yLm5l
eHQoKSkKLSAgICB7CisgICAgd2hpbGUgKFJlbmRlck9iamVjdCogY2hpbGQgPSBjaGlsZEl0ZXJh
dG9yLm5leHQoKSkgewogICAgICAgICBJbmxpbmVNaW5NYXhJdGVyYXRvciBsZWFmSXRlcmF0b3Ig
PSBjaGlsZEl0ZXJhdG9yOwogICAgICAgICBSZW5kZXJPYmplY3QqIG5leHRMZWFmID0gbGVhZkl0
ZXJhdG9yLm5leHQoKTsKICAgICAgICAgd2hpbGUgKG5leHRMZWFmICYmIG5leHRMZWFmLT5pc0lu
bGluZUZsb3coKSkKQEAgLTM1MDAsMTYgKzM0OTMsOSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxj
SW5saW5lTWluTWF4V2lkdGgoCiAgICAgICAgICAgICAgICAgICAgIGludCBtYXJnaW5zID0gMDsK
ICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIGxlZnRNYXJnaW4gPSBjc3R5bGUtPm1hcmdpbkxl
ZnQoKTsKICAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHJpZ2h0TWFyZ2luID0gY3N0eWxlLT5t
YXJnaW5SaWdodCgpOwotICAgICAgICAgICAgICAgICAgICBib29sIHVzZUNhbGN1bGF0ZWRXaWR0
aHMgPSBjaGlsZC0+aXNMaXN0TWFya2VyKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0
TWFyZ2luLmlzUGVyY2VudCgpIHx8IHJpZ2h0TWFyZ2luLmlzUGVyY2VudCgpIHx8IHVzZUNhbGN1
bGF0ZWRXaWR0aHMpCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZC0+Y2FsY1dpZHRoKCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1c2VDYWxjdWxhdGVkV2lkdGhzIHx8IGxlZnRNYXJn
aW4uaXNQZXJjZW50KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5zICs9IGNoaWxk
LT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxlZnRNYXJnaW4u
aXNGaXhlZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAobGVmdE1hcmdpbi5pc0ZpeGVkKCkp
CiAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5zICs9IGxlZnRNYXJnaW4udmFsdWUoKTsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUNhbGN1bGF0ZWRXaWR0aHMgfHwgcmlnaHRNYXJn
aW4uaXNQZXJjZW50KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5zICs9IGNoaWxk
LT5tYXJnaW5SaWdodCgpOwotICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChyaWdodE1hcmdp
bi5pc0ZpeGVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChyaWdodE1hcmdpbi5pc0ZpeGVk
KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5zICs9IHJpZ2h0TWFyZ2luLnZhbHVl
KCk7CiAgICAgICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IG1hcmdpbnM7CiAgICAgICAgICAg
ICAgICAgICAgIGNoaWxkTWF4ICs9IG1hcmdpbnM7CkBAIC0zNTIwLDggKzM1MDYsOCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpjYWxjSW5saW5lTWluTWF4V2lkdGgoCiAgICAgICAgICAgICAgICAgLy8g
Q2FzZSAoMikuIElubGluZSByZXBsYWNlZCBlbGVtZW50cyBhbmQgZmxvYXRzLgogICAgICAgICAg
ICAgICAgIC8vIEdvIGFoZWFkIGFuZCB0ZXJtaW5hdGUgdGhlIGN1cnJlbnQgbGluZSBhcyBmYXIg
YXMKICAgICAgICAgICAgICAgICAvLyBtaW53aWR0aCBpcyBjb25jZXJuZWQuCi0gICAgICAgICAg
ICAgICAgY2hpbGRNaW4gKz0gY2hpbGQtPm1pbldpZHRoKCk7Ci0gICAgICAgICAgICAgICAgY2hp
bGRNYXggKz0gY2hpbGQtPm1heFdpZHRoKCk7CisgICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0g
Y2hpbGQtPm1pblByZWZXaWR0aCgpOworICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IGNoaWxk
LT5tYXhQcmVmV2lkdGgoKTsKIAogICAgICAgICAgICAgICAgIGJvb2wgY2xlYXJQcmV2aW91c0Zs
b2F0OwogICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpKSB7CkBAIC0zNTM0
LDE0ICszNTIwLDEzIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVNaW5NYXhXaWR0aCgK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBib29sIGdyb3dGb3JQcmV2aW91cyA9
IHNob3VsZEdyb3dUYWJsZUNlbGxGb3JJbWFnZSh0aGlzLCBjaGlsZCwgcHJldmlvdXNMZWFmKTsK
ICAgICAgICAgICAgICAgICBpZiAoIWdyb3dGb3JQcmV2aW91cyAmJiAoYXV0b1dyYXAgfHwgb2xk
QXV0b1dyYXApIHx8IGNsZWFyUHJldmlvdXNGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9taW5XaWR0aCA8IGlubGluZU1pbikKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWlu
V2lkdGggPSBpbmxpbmVNaW47CisgICAgICAgICAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICBpbmxp
bmVNaW4gPSAwOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIC8vIElmIHdl
J3JlIHN1cHBvc2VkIHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmbG9hdCwgdGhlbiB0ZXJtaW5hdGUg
bWF4d2lkdGggYXMgd2VsbC4KICAgICAgICAgICAgICAgICBpZiAoY2xlYXJQcmV2aW91c0Zsb2F0
KSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fbWF4V2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21h
eFdpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoaW5saW5l
TWF4LCBtX21heFByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCA9IDA7
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIApAQCAtMzU2NCw5ICszNTQ5LDgg
QEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZU1pbk1heFdpZHRoKAogCiAgICAgICAgICAg
ICAgICAgaWYgKGF1dG9XcmFwICYmICFzaG91bGRHcm93VGFibGVDZWxsRm9ySW1hZ2UodGhpcywg
Y2hpbGQsIG5leHRMZWFmKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBOb3cgY2hlY2sgb3Vy
IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX21pbldpZHRoIDwgaW5saW5lTWluKQot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5XaWR0aCA9IGlubGluZU1pbjsKLQorICAgICAg
ICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldp
ZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBz
dGFydCBhIG5ldyBsaW5lLgogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOwogICAg
ICAgICAgICAgICAgIH0KQEAgLTM1OTIsOSArMzU3Niw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNh
bGNJbmxpbmVNaW5NYXhXaWR0aCgKICAgICAgICAgICAgICAgICBpbnQgYmVnaW5NaW4sIGVuZE1p
bjsKICAgICAgICAgICAgICAgICBib29sIGJlZ2luV1MsIGVuZFdTOwogICAgICAgICAgICAgICAg
IGludCBiZWdpbk1heCwgZW5kTWF4OwotICAgICAgICAgICAgICAgIHQtPnRyaW1tZWRNaW5NYXhX
aWR0aChpbmxpbmVNYXgsIGJlZ2luTWluLCBiZWdpbldTLCBlbmRNaW4sIGVuZFdTLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNCcmVha2FibGVDaGFyLCBoYXNCcmVh
aywgYmVnaW5NYXgsIGVuZE1heCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hpbGRNaW4sIGNoaWxkTWF4LCBzdHJpcEZyb250U3BhY2VzKTsKKyAgICAgICAgICAgICAg
ICB0LT50cmltbWVkUHJlZldpZHRocyhpbmxpbmVNYXgsIGJlZ2luTWluLCBiZWdpbldTLCBlbmRN
aW4sIGVuZFdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JyZWFr
YWJsZUNoYXIsIGhhc0JyZWFrLCBiZWdpbk1heCwgZW5kTWF4LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkTWluLCBjaGlsZE1heCwgc3RyaXBGcm9udFNwYWNlcyk7
CiAKICAgICAgICAgICAgICAgICAvLyBUaGlzIHRleHQgb2JqZWN0IGlzIGluc2lnbmlmaWNhbnQg
YW5kIHdpbGwgbm90IGJlIHJlbmRlcmVkLiAgSnVzdAogICAgICAgICAgICAgICAgIC8vIGNvbnRp
bnVlLgpAQCAtMzYyMywxMyArMzYwNywxMiBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5l
TWluTWF4V2lkdGgoCiAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGhhdmUgYSBicmVha2FibGUgY2hhcmFjdGVyLiAgTm93IHdlIG5lZWQgdG8ga25vdyBp
ZgogICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzdGFydCBhbmQgZW5kIHdpdGggd2hpdGVzcGFj
ZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luV1MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKGJlZ2luV1MpCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQg
ZW5kIHRoZSBjdXJyZW50IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZihtX21pbldp
ZHRoIDwgaW5saW5lTWluKSBtX21pbldpZHRoID0gaW5saW5lTWluOwotICAgICAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxp
bmVNaW4sIG1fbWluUHJlZldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gKz0gYmVnaW5NaW47Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBpZihtX21pbldpZHRoIDwgaW5saW5lTWluKSBtX21pbldpZHRoID0gaW5saW5l
TWluOworICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5l
TWluLCBtX21pblByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZE1pbiAt
PSB0aTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0zNjM4LDI5ICszNjIxLDI3IEBAIHZv
aWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVNaW5NYXhXaWR0aCgKICAgICAgICAgICAgICAgICAg
ICAgaWYgKGVuZFdTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBlbmQgaW4gd2hp
dGVzcGFjZSwgd2hpY2ggbWVhbnMgd2UgY2FuIGdvIGFoZWFkCiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBhbmQgZW5kIG91ciBjdXJyZW50IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZihtX21pbldpZHRoIDwgaW5saW5lTWluKSBtX21pbldpZHRoID0gaW5saW5lTWluOworICAg
ICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21p
blByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOwogICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYobV9taW5XaWR0aCA8IGlubGluZU1pbikgbV9taW5XaWR0aCA9IGlu
bGluZU1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlu
bGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5l
TWluID0gZW5kTWluOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQog
CiAgICAgICAgICAgICAgICAgaWYgKGhhc0JyZWFrKSB7CiAgICAgICAgICAgICAgICAgICAgIGlu
bGluZU1heCArPSBiZWdpbk1heDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fbWF4V2lkdGgg
PCBpbmxpbmVNYXgpIG1fbWF4V2lkdGggPSBpbmxpbmVNYXg7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtX21heFdpZHRoIDwgY2hpbGRNYXgpIG1fbWF4V2lkdGggPSBjaGlsZE1heDsKKyAgICAg
ICAgICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFByZWZX
aWR0aCk7CisgICAgICAgICAgICAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KGNoaWxkTWF4
LCBtX21heFByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCA9IGVuZE1h
eDsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVNYXggKz0gY2hpbGRNYXg7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBpZihtX21pbldpZHRoIDwgaW5s
aW5lTWluKSBtX21pbldpZHRoID0gaW5saW5lTWluOwotICAgICAgICAgICAgaWYobV9tYXhXaWR0
aCA8IGlubGluZU1heCkgbV9tYXhXaWR0aCA9IGlubGluZU1heDsKKyAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lk
dGgpOworICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFBy
ZWZXaWR0aCk7CiAgICAgICAgICAgICBpbmxpbmVNaW4gPSBpbmxpbmVNYXggPSAwOwogICAgICAg
ICAgICAgc3RyaXBGcm9udFNwYWNlcyA9IHRydWU7CiAgICAgICAgICAgICB0cmFpbGluZ1NwYWNl
Q2hpbGQgPSAwOwpAQCAtMzY3NCwxNCArMzY1NSwxNCBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxj
SW5saW5lTWluTWF4V2lkdGgoCiAgICAgaWYgKHN0eWxlKCktPmNvbGxhcHNlV2hpdGVTcGFjZSgp
KQogICAgICAgICBzdHJpcFRyYWlsaW5nU3BhY2UoaW5saW5lTWF4LCBpbmxpbmVNaW4sIHRyYWls
aW5nU3BhY2VDaGlsZCk7CiAgICAgCi0gICAgbV9taW5XaWR0aCA9IG1heChpbmxpbmVNaW4sIG1f
bWluV2lkdGgpOwotICAgIG1fbWF4V2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFdpZHRoKTsK
KyAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKKyAg
ICBtX21heFByZWZXaWR0aCA9IG1heChpbmxpbmVNYXgsIG1fbWF4UHJlZldpZHRoKTsKIH0KIAog
Ly8gVXNlIGEgdmVyeSBsYXJnZSB2YWx1ZSAoaW4gZWZmZWN0IGluZmluaXRlKS4KICNkZWZpbmUg
QkxPQ0tfTUFYX1dJRFRIIDE1MDAwCiAKLXZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9ja01pbk1h
eFdpZHRoKCkKK3ZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9ja1ByZWZXaWR0aHMoKQogewogICAg
IGJvb2wgbm93cmFwID0gc3R5bGUoKS0+d2hpdGVTcGFjZSgpID09IE5PV1JBUDsKIApAQCAtMzY5
Nyw0OSArMzY3OCwzNSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tNaW5NYXhXaWR0aCgp
CiAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpIHx8IGNoaWxkLT5hdm9pZHNGbG9hdHMo
KSkgewogICAgICAgICAgICAgaW50IGZsb2F0VG90YWxXaWR0aCA9IGZsb2F0TGVmdFdpZHRoICsg
ZmxvYXRSaWdodFdpZHRoOwogICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHlsZSgpLT5jbGVhcigp
ICYgQ0xFRlQpIHsKLSAgICAgICAgICAgICAgICBtX21heFdpZHRoID0gbWF4KGZsb2F0VG90YWxX
aWR0aCwgbV9tYXhXaWR0aCk7CisgICAgICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgo
ZmxvYXRUb3RhbFdpZHRoLCBtX21heFByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgZmxvYXRM
ZWZ0V2lkdGggPSAwOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHls
ZSgpLT5jbGVhcigpICYgQ1JJR0hUKSB7Ci0gICAgICAgICAgICAgICAgbV9tYXhXaWR0aCA9IG1h
eChmbG9hdFRvdGFsV2lkdGgsIG1fbWF4V2lkdGgpOworICAgICAgICAgICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gbWF4KGZsb2F0VG90YWxXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOwogICAgICAgICAg
ICAgICAgIGZsb2F0UmlnaHRXaWR0aCA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAot
ICAgICAgICBMZW5ndGggbWwgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOwotICAgICAg
ICBMZW5ndGggbXIgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsKLQotICAgICAgICAv
LyBDYWxsIGNhbGNXaWR0aCBvbiB0aGUgY2hpbGQgdG8gZW5zdXJlIHRoYXQgb3VyIG1hcmdpbnMg
YXJlCi0gICAgICAgIC8vIHVwIHRvIGRhdGUuICBUaGlzIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGJl
Zm9yZSB0aGUgY2hpbGQgaGFzIGFjdHVhbGx5Ci0gICAgICAgIC8vIGNhbGN1bGF0ZWQgaXRzIG1h
cmdpbnMgKHdoaWNoIGFyZSBjb21wdXRlZCBpbnNpZGUgY2FsY1dpZHRoKS4KLSAgICAgICAgaWYg
KG1sLmlzUGVyY2VudCgpIHx8IG1yLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgY2FsY1dpZHRo
KCk7Ci0KICAgICAgICAgLy8gQSBtYXJnaW4gYmFzaWNhbGx5IGhhcyB0aHJlZSB0eXBlczogZml4
ZWQsIHBlcmNlbnRhZ2UsIGFuZCBhdXRvICh2YXJpYWJsZSkuCi0gICAgICAgIC8vIEF1dG8gbWFy
Z2lucyBzaW1wbHkgYmVjb21lIDAgd2hlbiBjb21wdXRpbmcgbWluL21heCB3aWR0aC4KKyAgICAg
ICAgLy8gQXV0byBhbmQgcGVyY2VudGFnZSBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNv
bXB1dGluZyBtaW4vbWF4IHdpZHRoLgogICAgICAgICAvLyBGaXhlZCBtYXJnaW5zIGNhbiBiZSBh
ZGRlZCBpbiBhcyBpcy4KLSAgICAgICAgLy8gUGVyY2VudGFnZSBtYXJnaW5zIGFyZSBjb21wdXRl
ZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHdpZHRoIHdlIGNhbGN1bGF0ZWQgaW4KLSAgICAgICAg
Ly8gdGhlIGNhbGNXaWR0aCBjYWxsIGFib3ZlLiAgSW4gdGhpcyBjYXNlIHdlIHVzZSB0aGUgYWN0
dWFsIGNhY2hlZCBtYXJnaW4gdmFsdWVzIG9uCi0gICAgICAgIC8vIHRoZSBSZW5kZXJPYmplY3Qg
aXRzZWxmLgorICAgICAgICBMZW5ndGggbWwgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgp
OworICAgICAgICBMZW5ndGggbXIgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsKICAg
ICAgICAgaW50IG1hcmdpbiA9IDAsIG1hcmdpbkxlZnQgPSAwLCBtYXJnaW5SaWdodCA9IDA7CiAg
ICAgICAgIGlmIChtbC5pc0ZpeGVkKCkpCiAgICAgICAgICAgICBtYXJnaW5MZWZ0ICs9IG1sLnZh
bHVlKCk7Ci0gICAgICAgIGVsc2UgaWYgKG1sLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgbWFy
Z2luTGVmdCArPSBjaGlsZC0+bWFyZ2luTGVmdCgpOwogICAgICAgICBpZiAobXIuaXNGaXhlZCgp
KQogICAgICAgICAgICAgbWFyZ2luUmlnaHQgKz0gbXIudmFsdWUoKTsKLSAgICAgICAgZWxzZSBp
ZiAobXIuaXNQZXJjZW50KCkpCi0gICAgICAgICAgICBtYXJnaW5SaWdodCArPSBjaGlsZC0+bWFy
Z2luUmlnaHQoKTsKICAgICAgICAgbWFyZ2luID0gbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0Owog
Ci0gICAgICAgIGludCB3ID0gY2hpbGQtPm1pbldpZHRoKCkgKyBtYXJnaW47Ci0gICAgICAgIGlm
IChtX21pbldpZHRoIDwgdykgbV9taW5XaWR0aCA9IHc7CisgICAgICAgIGludCB3ID0gY2hpbGQt
Pm1pblByZWZXaWR0aCgpICsgbWFyZ2luOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heCh3
LCBtX21pblByZWZXaWR0aCk7CiAgICAgICAgIAogICAgICAgICAvLyBJRSBpZ25vcmVzIHRhYmxl
cyBmb3IgY2FsY3VsYXRpb24gb2Ygbm93cmFwLiBNYWtlcyBzb21lIHNlbnNlLgotICAgICAgICBp
ZiAobm93cmFwICYmICFjaGlsZC0+aXNUYWJsZSgpICYmIG1fbWF4V2lkdGggPCB3KQotICAgICAg
ICAgICAgbV9tYXhXaWR0aCA9IHc7CisgICAgICAgIGlmIChub3dyYXAgJiYgIWNoaWxkLT5pc1Rh
YmxlKCkpCisgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heCh3LCBtX21heFByZWZXaWR0
aCk7CiAKLSAgICAgICAgdyA9IGNoaWxkLT5tYXhXaWR0aCgpICsgbWFyZ2luOworICAgICAgICB3
ID0gY2hpbGQtPm1heFByZWZXaWR0aCgpICsgbWFyZ2luOwogCiAgICAgICAgIGlmICghY2hpbGQt
PmlzRmxvYXRpbmcoKSkgewogICAgICAgICAgICAgaWYgKGNoaWxkLT5hdm9pZHNGbG9hdHMoKSkg
ewpAQCAtMzc0OCwxMSArMzcxNSwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tNaW5N
YXhXaWR0aCgpCiAgICAgICAgICAgICAgICAgLy8gaXMgc21hbGxlciB0aGFuIHRoZSBmbG9hdCB3
aWR0aC4KICAgICAgICAgICAgICAgICBpbnQgbWF4TGVmdCA9IG1hcmdpbkxlZnQgPiAwID8gbWF4
KGZsb2F0TGVmdFdpZHRoLCBtYXJnaW5MZWZ0KSA6IGZsb2F0TGVmdFdpZHRoICsgbWFyZ2luTGVm
dDsKICAgICAgICAgICAgICAgICBpbnQgbWF4UmlnaHQgPSBtYXJnaW5SaWdodCA+IDAgPyBtYXgo
ZmxvYXRSaWdodFdpZHRoLCBtYXJnaW5SaWdodCkgOiBmbG9hdFJpZ2h0V2lkdGggKyBtYXJnaW5S
aWdodDsKLSAgICAgICAgICAgICAgICB3ID0gY2hpbGQtPm1heFdpZHRoKCkgKyBtYXhMZWZ0ICsg
bWF4UmlnaHQ7CisgICAgICAgICAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSArIG1h
eExlZnQgKyBtYXhSaWdodDsKICAgICAgICAgICAgICAgICB3ID0gbWF4KHcsIGZsb2F0TGVmdFdp
ZHRoICsgZmxvYXRSaWdodFdpZHRoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtX21heFdpZHRoID0gbWF4KGZsb2F0TGVmdFdpZHRoICsgZmxvYXRS
aWdodFdpZHRoLCBtX21heFdpZHRoKTsKKyAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9
IG1heChmbG9hdExlZnRXaWR0aCArIGZsb2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOwog
ICAgICAgICAgICAgZmxvYXRMZWZ0V2lkdGggPSBmbG9hdFJpZ2h0V2lkdGggPSAwOwogICAgICAg
ICB9CiAgICAgICAgIApAQCAtMzc2Miw4ICszNzI5LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2Fs
Y0Jsb2NrTWluTWF4V2lkdGgoKQogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIGZs
b2F0UmlnaHRXaWR0aCArPSB3OwogICAgICAgICB9Ci0gICAgICAgIGVsc2UgaWYgKG1fbWF4V2lk
dGggPCB3KQotICAgICAgICAgICAgbV9tYXhXaWR0aCA9IHc7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KHcsIG1fbWF4UHJlZldpZHRoKTsKIAogICAgICAg
ICAvLyBBIHZlcnkgc3BlY2lmaWMgV2luSUUgcXVpcmsuCiAgICAgICAgIC8vIEV4YW1wbGU6CkBA
IC0zNzc5LDIyICszNzQ2LDIyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9ja01pbk1heFdp
ZHRoKCkKICAgICAgICAgLy8gV2UgY2FuIGFjaGlldmUgdGhpcyBlZmZlY3QgYnkgbWFraW5nIHRo
ZSBtYXh3aWR0aCBvZiBibG9ja3MgdGhhdCBjb250YWluIHRhYmxlcwogICAgICAgICAvLyB3aXRo
IHBlcmNlbnRhZ2Ugd2lkdGhzIGJlIGluZmluaXRlIChhcyBsb25nIGFzIHRoZXkgYXJlIG5vdCBp
bnNpZGUgYSB0YWJsZSBjZWxsKS4KICAgICAgICAgaWYgKHN0eWxlKCktPmh0bWxIYWNrcygpICYm
IGNoaWxkLT5zdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpICYmCi0gICAgICAgICAgICAhaXNU
YWJsZUNlbGwoKSAmJiBjaGlsZC0+aXNUYWJsZSgpICYmIG1fbWF4V2lkdGggPCBCTE9DS19NQVhf
V0lEVEgpIHsKKyAgICAgICAgICAgICFpc1RhYmxlQ2VsbCgpICYmIGNoaWxkLT5pc1RhYmxlKCkg
JiYgbV9tYXhQcmVmV2lkdGggPCBCTE9DS19NQVhfV0lEVEgpIHsKICAgICAgICAgICAgIFJlbmRl
ckJsb2NrKiBjYiA9IGNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgd2hpbGUgKCFjYi0+
aXNSZW5kZXJWaWV3KCkgJiYgIWNiLT5pc1RhYmxlQ2VsbCgpKQogICAgICAgICAgICAgICAgIGNi
ID0gY2ItPmNvbnRhaW5pbmdCbG9jaygpOwogICAgICAgICAgICAgaWYgKCFjYi0+aXNUYWJsZUNl
bGwoKSkKLSAgICAgICAgICAgICAgICBtX21heFdpZHRoID0gQkxPQ0tfTUFYX1dJRFRIOworICAg
ICAgICAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gQkxPQ0tfTUFYX1dJRFRIOwogICAgICAgICB9
CiAgICAgICAgIAogICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0K
IAogICAgIC8vIEFsd2F5cyBtYWtlIHN1cmUgdGhlc2UgdmFsdWVzIGFyZSBub24tbmVnYXRpdmUu
Ci0gICAgbV9taW5XaWR0aCA9IG1heCgwLCBtX21pbldpZHRoKTsKLSAgICBtX21heFdpZHRoID0g
bWF4KDAsIG1fbWF4V2lkdGgpOworICAgIG1fbWluUHJlZldpZHRoID0gbWF4KDAsIG1fbWluUHJl
ZldpZHRoKTsKKyAgICBtX21heFByZWZXaWR0aCA9IG1heCgwLCBtX21heFByZWZXaWR0aCk7CiAK
LSAgICBtX21heFdpZHRoID0gbWF4KGZsb2F0TGVmdFdpZHRoICsgZmxvYXRSaWdodFdpZHRoLCBt
X21heFdpZHRoKTsKKyAgICBtX21heFByZWZXaWR0aCA9IG1heChmbG9hdExlZnRXaWR0aCArIGZs
b2F0UmlnaHRXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOwogfQogCiBib29sIFJlbmRlckJsb2NrOjpo
YXNMaW5lSWZFbXB0eSgpIGNvbnN0CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMjA5OTcpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjAzLDkgKzIwMyw5IEBA
IHB1YmxpYzoKICAgICAvLyBCbG9jayBmbG93cyBzdWJjbGFzcyBhdmFpbGFibGVXaWR0aCB0byBo
YW5kbGUgbXVsdGkgY29sdW1uIGxheW91dCAoc2hyaW5raW5nIHRoZSB3aWR0aCBhdmFpbGFibGUg
dG8gY2hpbGRyZW4gd2hlbiBsYXlpbmcgb3V0LikKICAgICB2aXJ0dWFsIGludCBhdmFpbGFibGVX
aWR0aCgpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsK
LSAgICB2b2lkIGNhbGNJbmxpbmVNaW5NYXhXaWR0aCgpOwotICAgIHZvaWQgY2FsY0Jsb2NrTWlu
TWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICB2b2lk
IGNhbGNJbmxpbmVQcmVmV2lkdGhzKCk7CisgICAgdm9pZCBjYWxjQmxvY2tQcmVmV2lkdGhzKCk7
CiAKICAgICB2aXJ0dWFsIGludCBnZXRCYXNlbGluZU9mRmlyc3RMaW5lQm94KCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBpbnQgZ2V0QmFzZWxpbmVPZkxhc3RMaW5lQm94KCkgY29uc3Q7CkBAIC0yMTYs
NyArMjE2LDcgQEAgcHVibGljOgogICAgIC8vIE9idGFpbnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5n
IGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBjb250cmlidXRlcyBhIGZpcnN0LWxp
bmUgc3R5bGUgdG8gb3VyIGlubGluZQogICAgIC8vIGNoaWxkcmVuLgogICAgIHZpcnR1YWwgUmVu
ZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0
ZUZpcnN0TGV0dGVyKCk7CisgICAgdm9pZCB1cGRhdGVGaXJzdExldHRlcigpOwogCiAgICAgYm9v
bCBpblJvb3RCbG9ja0NvbnRleHQoKSBjb25zdDsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDIw
OTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDgg
KzY0LDggQEAgUmVuZGVyQm94OjpSZW5kZXJCb3goTm9kZSogbm9kZSkKICAgICAsIG1fbWFyZ2lu
UmlnaHQoMCkKICAgICAsIG1fbWFyZ2luVG9wKDApCiAgICAgLCBtX21hcmdpbkJvdHRvbSgwKQot
ICAgICwgbV9taW5XaWR0aCgtMSkKLSAgICAsIG1fbWF4V2lkdGgoLTEpCisgICAgLCBtX21pblBy
ZWZXaWR0aCgtMSkKKyAgICAsIG1fbWF4UHJlZldpZHRoKC0xKQogICAgICwgbV9sYXllcigwKQog
ICAgICwgbV9pbmxpbmVCb3hXcmFwcGVyKDApCiB7CkBAIC0xMzIsNiArMTMyLDggQEAgdm9pZCBS
ZW5kZXJCb3g6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZQogICAgIGlmIChtX2xheWVyKQogICAg
ICAgICBtX2xheWVyLT5zdHlsZUNoYW5nZWQoKTsKIAorICAgIHNldEhhc0xheWVyKG1fbGF5ZXIp
OworCiAgICAgLy8gU2V0IHRoZSB0ZXh0IGNvbG9yIGlmIHdlJ3JlIHRoZSBib2R5LgogICAgIGlm
IChpc0JvZHkoKSkKICAgICAgICAgZWxlbWVudCgpLT5kb2N1bWVudCgpLT5zZXRUZXh0Q29sb3Io
bmV3U3R5bGUtPmNvbG9yKCkpOwpAQCAtMTY2LDYgKzE2OCwyMiBAQCB2b2lkIFJlbmRlckJveDo6
ZGVzdHJveSgpCiAgICAgICAgIGxheWVyLT5kZXN0cm95KGFyZW5hKTsKIH0KIAoraW50IFJlbmRl
ckJveDo6bWluUHJlZldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkp
CisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNhbGNQcmVmV2lkdGhzKCk7
CisgICAgICAgIAorICAgIHJldHVybiBtX21pblByZWZXaWR0aDsKK30KKworaW50IFJlbmRlckJv
eDo6bWF4UHJlZldpZHRoKCkgY29uc3QKK3sKKyAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCisg
ICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyQm94Kj4odGhpcyktPmNhbGNQcmVmV2lkdGhzKCk7Cisg
ICAgICAgIAorICAgIHJldHVybiBtX21heFByZWZXaWR0aDsKK30KKwogaW50IFJlbmRlckJveDo6
b3ZlcnJpZGVTaXplKCkgY29uc3QKIHsKICAgICBpZiAoIWhhc092ZXJyaWRlU2l6ZSgpKQpAQCAt
MjUwLDcgKzI2OCw3IEBAIGJvb2wgUmVuZGVyQm94Ojpub2RlQXRQb2ludChjb25zdCBIaXRUZXMK
ICAgICAgICAgLy8gYXQgdGhlIG1vbWVudCAoYSBkZW1vdGVkIGlubGluZSA8Zm9ybT4gZm9yIGV4
YW1wbGUpLiBJZiB3ZSBldmVyIGltcGxlbWVudCBhCiAgICAgICAgIC8vIHRhYmxlLXNwZWNpZmlj
IGhpdC10ZXN0IG1ldGhvZCAod2hpY2ggd2Ugc2hvdWxkIGRvIGZvciBwZXJmb3JtYW5jZSByZWFz
b25zIGFueXdheSksCiAgICAgICAgIC8vIHRoZW4gd2UgY2FuIHJlbW92ZSB0aGlzIGNoZWNrLgot
ICAgICAgICBpZiAoIWNoaWxkLT5sYXllcigpICYmICFjaGlsZC0+aXNJbmxpbmVGbG93KCkgJiYg
Y2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBhY3Rpb24p
KSB7CisgICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgIWNoaWxkLT5pc0lubGluZUZs
b3coKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVzdWx0LCB4LCB5LCB0eCwgdHks
IGFjdGlvbikpIHsKICAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQ
b2ludCh4IC0gdHgsIHkgLSB0eSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KQEAgLTEwNjQsNyArMTA4Miw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjV2lkdGgoKQogICAg
ICAgICBtX21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0
aCk7CiAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjTWluVmFsdWUoY29u
dGFpbmVyV2lkdGgpOwogICAgICAgICBpZiAodHJlYXRBc1JlcGxhY2VkKQotICAgICAgICAgICAg
bV93aWR0aCA9IG1heCh3aWR0aC52YWx1ZSgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQo
KSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSwgbV9taW5XaWR0aCk7CisgICAgICAg
ICAgICBtX3dpZHRoID0gbWF4KHdpZHRoLnZhbHVlKCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJS
aWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpLCBtaW5QcmVmV2lkdGgoKSk7
CiAKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTEwOTMsOCArMTExMSw4IEBAIHZvaWQgUmVu
ZGVyQm94OjpjYWxjV2lkdGgoKQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG1fd2lkdGgg
PCBtX21pbldpZHRoICYmIHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSkgewotICAgICAg
ICBtX3dpZHRoID0gbV9taW5XaWR0aDsKKyAgICBpZiAoc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNX
aWR0aCgpKSB7CisgICAgICAgIG1fd2lkdGggPSBtYXgobV93aWR0aCwgbWluUHJlZldpZHRoKCkp
OwogICAgICAgICB3aWR0aCA9IExlbmd0aChtX3dpZHRoLCBGaXhlZCk7CiAgICAgfQogCkBAIC0x
MTM1LDggKzExNTMsOCBAQCBpbnQgUmVuZGVyQm94OjpjYWxjV2lkdGhVc2luZyhXaWR0aFR5cGUg
CiAgICAgICAgICAgICB3aWR0aCA9IGN3IC0gbWFyZ2luTGVmdCAtIG1hcmdpblJpZ2h0OwogCiAg
ICAgICAgIGlmIChzaXplc1RvSW50cmluc2ljV2lkdGgod2lkdGhUeXBlKSkgewotICAgICAgICAg
ICAgd2lkdGggPSBtYXgod2lkdGgsIG1fbWluV2lkdGgpOwotICAgICAgICAgICAgd2lkdGggPSBt
aW4od2lkdGgsIG1fbWF4V2lkdGgpOworICAgICAgICAgICAgd2lkdGggPSBtYXgod2lkdGgsIG1p
blByZWZXaWR0aCgpKTsKKyAgICAgICAgICAgIHdpZHRoID0gbWluKHdpZHRoLCBtYXhQcmVmV2lk
dGgoKSk7CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgd2lkdGggPSBjYWxjQm9yZGVy
Qm94V2lkdGgody5jYWxjVmFsdWUoY3cpKTsKQEAgLTE2NzEsOCArMTY4OSw4IEBAIHZvaWQgUmVu
ZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKICAgICAgICAgfQogICAgIH0KIAotICAg
IGlmIChtX3dpZHRoIDwgbV9taW5XaWR0aCAtIGJvcmRlcnNQbHVzUGFkZGluZyAmJiBzdHJldGNo
ZXNUb01pbkludHJpbnNpY1dpZHRoKCkpCi0gICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6b250YWxW
YWx1ZXMoTGVuZ3RoKG1fbWluV2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmcsIEZpeGVkKSwgY29u
dGFpbmVyQmxvY2ssIGNvbnRhaW5lckRpcmVjdGlvbiwKKyAgICBpZiAoc3RyZXRjaGVzVG9NaW5J
bnRyaW5zaWNXaWR0aCgpICYmIG1fd2lkdGggPCBtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVz
UGFkZGluZykKKyAgICAgICAgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhbHVlcyhMZW5ndGgobWlu
UHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmcsIEZpeGVkKSwgY29udGFpbmVyQmxvY2ss
IGNvbnRhaW5lckRpcmVjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb250YWluZXJXaWR0aCwgYm9yZGVyc1BsdXNQYWRkaW5nLAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGxlZnQsIHJpZ2h0LCBtYXJnaW5MZWZ0LCBtYXJnaW5SaWdodCwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3dpZHRoLCBtX21hcmdpbkxl
ZnQsIG1fbWFyZ2luUmlnaHQsIG1feCk7CkBAIC0xODA1LDggKzE4MjMsOCBAQCB2b2lkIFJlbmRl
ckJveDo6Y2FsY0Fic29sdXRlSG9yaXpvbnRhbFZhCiAgICAgICAgICAgICBpbnQgcmlnaHRWYWx1
ZSA9IHJpZ2h0LmNhbGNWYWx1ZShjb250YWluZXJXaWR0aCk7CiAKICAgICAgICAgICAgIC8vIEZJ
WE1FOiB3b3VsZCBpdCBiZSBiZXR0ZXIgdG8gaGF2ZSBzaHJpbmstdG8tZml0IGluIG9uZSBzdGVw
PwotICAgICAgICAgICAgaW50IHByZWZlcnJlZFdpZHRoID0gbV9tYXhXaWR0aCAtIGJvcmRlcnNQ
bHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1fbWluV2lk
dGggLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGgg
PSBtYXhQcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBw
cmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwog
ICAgICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSByaWdodFZh
bHVlOwogICAgICAgICAgICAgd2lkdGhWYWx1ZSA9IG1pbihtYXgocHJlZmVycmVkTWluV2lkdGgs
IGF2YWlsYWJsZVdpZHRoKSwgcHJlZmVycmVkV2lkdGgpOwogICAgICAgICAgICAgbGVmdFZhbHVl
ID0gYXZhaWxhYmxlU3BhY2UgLSAod2lkdGhWYWx1ZSArIHJpZ2h0VmFsdWUpOwpAQCAtMTgxNSw4
ICsxODMzLDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxWYQogICAg
ICAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOwogCiAg
ICAgICAgICAgICAvLyBGSVhNRTogd291bGQgaXQgYmUgYmV0dGVyIHRvIGhhdmUgc2hyaW5rLXRv
LWZpdCBpbiBvbmUgc3RlcD8KLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1fbWF4
V2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmc7Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkTWlu
V2lkdGggPSBtX21pbldpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgaW50
IHByZWZlcnJlZFdpZHRoID0gbWF4UHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7Cisg
ICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmV2lkdGgoKSAtIGJvcmRl
cnNQbHVzUGFkZGluZzsKICAgICAgICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJs
ZVNwYWNlIC0gbGVmdFZhbHVlOwogICAgICAgICAgICAgd2lkdGhWYWx1ZSA9IG1pbihtYXgocHJl
ZmVycmVkTWluV2lkdGgsIGF2YWlsYWJsZVdpZHRoKSwgcHJlZmVycmVkV2lkdGgpOwogICAgICAg
ICB9IGVsc2UgaWYgKGxlZnRJc0F1dG8gJiYgIXdpZHRoLmlzQXV0bygpICYmICFyaWdodElzQXV0
bykgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJveC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9SZW5kZXJCb3guaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyQm94LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTQyLDggKzQyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2
b2lkIGRlc3Ryb3koKTsKIAotICAgIHZpcnR1YWwgaW50IG1pbldpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9taW5XaWR0aDsgfQotICAgIHZpcnR1YWwgaW50IG1heFdpZHRoKCkgY29uc3QgeyByZXR1
cm4gbV9tYXhXaWR0aDsgfQorICAgIHZpcnR1YWwgaW50IG1pblByZWZXaWR0aCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgaW50IG1heFByZWZXaWR0aCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQg
b3ZlcnJpZGVTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgb3ZlcnJpZGVXaWR0aCgpIGNv
bnN0OwpAQCAtMTk1LDE3ICsxOTUsMTggQEAgcHJvdGVjdGVkOgogICAgIGludCBtX21hcmdpblRv
cDsKICAgICBpbnQgbV9tYXJnaW5Cb3R0b207CiAKLSAgICAvLyBUaGUgbWluaW11bSB3aWR0aCB0
aGUgZWxlbWVudCBuZWVkcyB0byBiZSBhYmxlIHRvIHJlbmRlcgotICAgIC8vIGl0cyBjb250ZW50
IHdpdGhvdXQgY2xpcHBpbmcuCi0gICAgaW50IG1fbWluV2lkdGg7Ci0gICAgLy8gVGhlIG1heGlt
dW0gd2lkdGggdGhlIGVsZW1lbnQgY2FuIGZpbGwgaG9yaXpvbnRhbGx5Ci0gICAgLy8gKHRoZSB3
aWR0aCBvZiB0aGUgZWxlbWVudCB3aXRoIGxpbmUgYnJlYWtpbmcgZGlzYWJsZWQpLgotICAgIGlu
dCBtX21heFdpZHRoOwotCi0gICAgLy8gQSBwb2ludGVyIHRvIG91ciBsYXllciBpZiB3ZSBoYXZl
IG9uZS4gIEN1cnJlbnRseSBvbmx5IHBvc2l0aW9uZWQgZWxlbWVudHMKLSAgICAvLyBhbmQgZmxv
YXRlcnMgaGF2ZSBsYXllcnMuCisgICAgLy8gVGhlIHByZWZlcnJlZCB3aWR0aCBvZiB0aGUgZWxl
bWVudCBpZiBpdCB3ZXJlIHRvIGJyZWFrIGl0cyBsaW5lcyBhdCBldmVyeSBwb3NzaWJsZSBvcHBv
cnR1bml0eS4KKyAgICBpbnQgbV9taW5QcmVmV2lkdGg7CisgICAgCisgICAgLy8gVGhlIHByZWZl
cnJlZCB3aWR0aCBvZiB0aGUgZWxlbWVudCBpZiBpdCBuZXZlciBicmVha3MgYW55IGxpbmVzIGF0
IGFsbC4KKyAgICBpbnQgbV9tYXhQcmVmV2lkdGg7CisKK3B1YmxpYzoKKyAgICAvLyBBIHBvaW50
ZXIgdG8gb3VyIGxheWVyIGlmIHdlIGhhdmUgb25lLiAgRXhwb3NlIHRoaXMgc28gdGhhdCBob3Qg
Y29kZSBjYW4gYXZvaWQgdGhlIFJlbmRlck9iamVjdCB2aXJ0dWFsIGZ1bmN0aW9uCisgICAgLy8g
Y2FsbC4KICAgICBSZW5kZXJMYXllciogbV9sYXllcjsKIAorcHJvdGVjdGVkOgogICAgIC8vIEZv
ciBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMsIHRoZSBpbmxpbmUgYm94IHRoYXQgb3ducyB1cy4K
ICAgICBJbmxpbmVCb3gqIG1faW5saW5lQm94V3JhcHBlcjsKIH07CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29udGFp
bmVyLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDMxICsxNTYsMzEgQEAgdm9pZCBSZW5kZXJDb250YWlu
ZXI6OmFkZENoaWxkKFJlbmRlck9iagogICAgIH0KIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJD
b250YWluZXI6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIG9sZENoaWxkKQorUmVuZGVy
T2JqZWN0KiBSZW5kZXJDb250YWluZXI6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIG9s
ZENoaWxkLCBib29sIGZ1bGxSZW1vdmUpCiB7CiAgICAgQVNTRVJUKG9sZENoaWxkLT5wYXJlbnQo
KSA9PSB0aGlzKTsKIAogICAgIC8vIFNvIHRoYXQgd2UnbGwgZ2V0IHRoZSBhcHByb3ByaWF0ZSBk
aXJ0eSBiaXQgc2V0IChlaXRoZXIgdGhhdCBhIG5vcm1hbCBmbG93IGNoaWxkIGdvdCB5YW5rZWQg
b3IKICAgICAvLyB0aGF0IGEgcG9zaXRpb25lZCBjaGlsZCBnb3QgeWFua2VkKS4gIFdlIGFsc28g
cmVwYWludCwgc28gdGhhdCB0aGUgYXJlYSBleHBvc2VkIHdoZW4gdGhlIGNoaWxkCiAgICAgLy8g
ZGlzYXBwZWFycyBnZXRzIHJlcGFpbnRlZCBwcm9wZXJseS4KLSAgICBpZiAoIWRvY3VtZW50QmVp
bmdEZXN0cm95ZWQoKSkgewotICAgICAgICBvbGRDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5N
YXhSZWNhbGMoKTsKKyAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSAmJiBmdWxsUmVt
b3ZlKSB7CisgICAgICAgIG9sZENoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNh
bGMoKTsKICAgICAgICAgb2xkQ2hpbGQtPnJlcGFpbnQoKTsKICAgICB9CiAgICAgICAgIAogICAg
IC8vIElmIHdlIGhhdmUgYSBsaW5lIGJveCB3cmFwcGVyLCBkZWxldGUgaXQuCiAgICAgb2xkQ2hp
bGQtPmRlbGV0ZUxpbmVCb3hXcmFwcGVyKCk7CiAKLSAgICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0
cm95ZWQoKSkgeworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpICYmIGZ1bGxSZW1v
dmUpIHsKICAgICAgICAgLy8gaWYgd2UgcmVtb3ZlIHZpc2libGUgY2hpbGQgZnJvbSBhbiBpbnZp
c2libGUgcGFyZW50LCB3ZSBkb24ndCBrbm93IHRoZSBsYXllciB2aXNpYmlsaXR5IGFueSBtb3Jl
CiAgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IDA7Ci0gICAgICAgIGlmIChtX3N0eWxlLT52
aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiBvbGRDaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgp
ID09IFZJU0lCTEUgJiYgIW9sZENoaWxkLT5sYXllcigpKSB7CisgICAgICAgIGlmIChtX3N0eWxl
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiBvbGRDaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUgJiYgIW9sZENoaWxkLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICBs
YXllciA9IGVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgICAgICBsYXllci0+ZGlydHlWaXNpYmxl
Q29udGVudFN0YXR1cygpOwogICAgICAgICB9CiAKICAgICAgICAgIC8vIEtlZXAgb3VyIGxheWVy
IGhpZXJhcmNoeSB1cGRhdGVkLgotICAgICAgICBpZiAob2xkQ2hpbGQtPmZpcnN0Q2hpbGQoKSB8
fCBvbGRDaGlsZC0+bGF5ZXIoKSkgeworICAgICAgICBpZiAob2xkQ2hpbGQtPmZpcnN0Q2hpbGQo
KSB8fCBvbGRDaGlsZC0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgaWYgKCFsYXllcikgbGF5
ZXIgPSBlbmNsb3NpbmdMYXllcigpOyAgICAgICAgICAgIAogICAgICAgICAgICAgb2xkQ2hpbGQt
PnJlbW92ZUxheWVycyhsYXllcik7CiAgICAgICAgIH0KQEAgLTM3NSw3ICszNzUsNyBAQCB2b2lk
IFJlbmRlckNvbnRhaW5lcjo6dXBkYXRlUHNldWRvQ2hpbGRGCiB9CiAKIAotdm9pZCBSZW5kZXJD
b250YWluZXI6OmFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqIG5ld0NoaWxkKQordm9pZCBS
ZW5kZXJDb250YWluZXI6OmFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqIG5ld0NoaWxkLCBi
b29sIGZ1bGxBcHBlbmQpCiB7CiAgICAgQVNTRVJUKG5ld0NoaWxkLT5wYXJlbnQoKSA9PSAwKTsK
ICAgICBBU1NFUlQoIWlzQmxvY2tGbG93KCkgfHwgKCFuZXdDaGlsZC0+aXNUYWJsZVNlY3Rpb24o
KSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVSb3coKSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVDZWxsKCkp
KTsKQEAgLTM5MSwzMyArMzkxLDM1IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphcHBlbmRDaGls
ZE5vZGUoUmUKIAogICAgIG1fbGFzdENoaWxkID0gbmV3Q2hpbGQ7CiAgICAgCi0gICAgLy8gS2Vl
cCBvdXIgbGF5ZXIgaGllcmFyY2h5IHVwZGF0ZWQuICBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBj
YXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgYW55IGNoaWxkcmVuCi0gICAgLy8gYW5kIGRvbid0IGhh
dmUgYSBsYXllciBhdHRhY2hlZCB0byBvdXJzZWx2ZXMuCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVy
ID0gMDsKLSAgICBpZiAobmV3Q2hpbGQtPmZpcnN0Q2hpbGQoKSB8fCBuZXdDaGlsZC0+bGF5ZXIo
KSkgewotICAgICAgICBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIG5ld0NoaWxk
LT5hZGRMYXllcnMobGF5ZXIsIG5ld0NoaWxkKTsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUgbmV3
IGNoaWxkIGlzIHZpc2libGUgYnV0IHRoaXMgb2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxheWVy
IGl0IGhhcyBzb21lIHZpc2libGUgY29udGVudAotICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUgZHJh
d24gYW5kIGxheWVyIHZpc2liaWxpdHkgb3B0aW1pemF0aW9uIGNhbid0IGJlIHVzZWQKLSAgICBp
ZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgJiYgbmV3Q2hpbGQtPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFuZXdDaGlsZC0+bGF5ZXIoKSkgewotICAgICAg
ICBpZiAoIWxheWVyKSBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAgIGxheWVyLT5z
ZXRIYXNWaXNpYmxlQ29udGVudCh0cnVlKTsKKyAgICBpZiAoZnVsbEFwcGVuZCkgeworICAgICAg
ICAvLyBLZWVwIG91ciBsYXllciBoaWVyYXJjaHkgdXBkYXRlZC4gIE9wdGltaXplIGZvciB0aGUg
Y29tbW9uIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4KKyAgICAgICAgLy8g
YW5kIGRvbid0IGhhdmUgYSBsYXllciBhdHRhY2hlZCB0byBvdXJzZWx2ZXMuCisgICAgICAgIFJl
bmRlckxheWVyKiBsYXllciA9IDA7CisgICAgICAgIGlmIChuZXdDaGlsZC0+Zmlyc3RDaGlsZCgp
IHx8IG5ld0NoaWxkLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBsYXllciA9IGVuY2xvc2lu
Z0xheWVyKCk7CisgICAgICAgICAgICBuZXdDaGlsZC0+YWRkTGF5ZXJzKGxheWVyLCBuZXdDaGls
ZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2libGUg
YnV0IHRoaXMgb2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZpc2li
bGUgY29udGVudAorICAgICAgICAvLyB0aGF0IG5lZWRzIHRvIGJlIGRyYXduIGFuZCBsYXllciB2
aXNpYmlsaXR5IG9wdGltaXphdGlvbiBjYW4ndCBiZSB1c2VkCisgICAgICAgIGlmIChzdHlsZSgp
LT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUgJiYgIW5ld0NoaWxkLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBp
ZiAoIWxheWVyKSBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgICAgICAgICBsYXllci0+
c2V0SGFzVmlzaWJsZUNvbnRlbnQodHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmICghbmV3Q2hpbGQtPmlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSAmJiBjaGlsZHJlbklubGlu
ZSgpKQorICAgICAgICAgICAgZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQobmV3Q2hpbGQpOwog
ICAgIH0KLSAgICAKLSAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMo
KTsgLy8gR29lcyB1cCB0aGUgY29udGFpbmluZyBibG9jayBoaWVyYXJjaHkuCisKKyAgICBuZXdD
aGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhl
IGNvbnRhaW5pbmcgYmxvY2sgaGllcmFyY2h5LgogICAgIGlmICghbm9ybWFsQ2hpbGROZWVkc0xh
eW91dCgpKQogICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUpOyAvLyBXZSBtYXkgc3Vw
cGx5IHRoZSBzdGF0aWMgcG9zaXRpb24gZm9yIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgY2hpbGQu
CiAgICAgCi0gICAgaWYgKCFuZXdDaGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGNo
aWxkcmVuSW5saW5lKCkpCi0gICAgICAgIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKG5ld0No
aWxkKTsKLSAgICAKICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQo
KSkKICAgICAgICAgZG9jdW1lbnQoKS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNoYW5nZWQo
dGhpcyk7CiB9CiAKLXZvaWQgUmVuZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyQ29u
dGFpbmVyOjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0
KiBiZWZvcmVDaGlsZCwgYm9vbCBmdWxsSW5zZXJ0KQogewogICAgIGlmICghYmVmb3JlQ2hpbGQp
IHsKICAgICAgICAgYXBwZW5kQ2hpbGROb2RlKGNoaWxkKTsKQEAgLTQ0MiwyOCArNDQ0LDMxIEBA
IHZvaWQgUmVuZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5vZGUoUmUKIAogICAgIGNoaWxkLT5z
ZXRQYXJlbnQodGhpcyk7CiAgICAgCi0gICAgLy8gS2VlcCBvdXIgbGF5ZXIgaGllcmFyY2h5IHVw
ZGF0ZWQuICBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUg
YW55IGNoaWxkcmVuCi0gICAgLy8gYW5kIGRvbid0IGhhdmUgYSBsYXllciBhdHRhY2hlZCB0byBv
dXJzZWx2ZXMuCi0gICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gMDsKLSAgICBpZiAoY2hpbGQtPmZp
cnN0Q2hpbGQoKSB8fCBjaGlsZC0+bGF5ZXIoKSkgewotICAgICAgICBsYXllciA9IGVuY2xvc2lu
Z0xheWVyKCk7Ci0gICAgICAgIGNoaWxkLT5hZGRMYXllcnMobGF5ZXIsIGNoaWxkKTsKLSAgICB9
Ci0KLSAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2libGUgYnV0IHRoaXMgb2JqZWN0IHdh
cyBub3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZpc2libGUgY29udGVudAotICAgIC8v
IHRoYXQgbmVlZHMgdG8gYmUgZHJhd24gYW5kIGxheWVyIHZpc2liaWxpdHkgb3B0aW1pemF0aW9u
IGNhbid0IGJlIHVzZWQKLSAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUg
JiYgY2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFjaGlsZC0+bGF5
ZXIoKSkgewotICAgICAgICBpZiAoIWxheWVyKSBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0g
ICAgICAgIGxheWVyLT5zZXRIYXNWaXNpYmxlQ29udGVudCh0cnVlKTsKKyAgICBpZiAoZnVsbElu
c2VydCkgeworICAgICAgICAvLyBLZWVwIG91ciBsYXllciBoaWVyYXJjaHkgdXBkYXRlZC4gIE9w
dGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRy
ZW4KKyAgICAgICAgLy8gYW5kIGRvbid0IGhhdmUgYSBsYXllciBhdHRhY2hlZCB0byBvdXJzZWx2
ZXMuCisgICAgICAgIFJlbmRlckxheWVyKiBsYXllciA9IDA7CisgICAgICAgIGlmIChjaGlsZC0+
Zmlyc3RDaGlsZCgpIHx8IGNoaWxkLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBsYXllciA9
IGVuY2xvc2luZ0xheWVyKCk7CisgICAgICAgICAgICBjaGlsZC0+YWRkTGF5ZXJzKGxheWVyLCBj
aGlsZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2li
bGUgYnV0IHRoaXMgb2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZp
c2libGUgY29udGVudAorICAgICAgICAvLyB0aGF0IG5lZWRzIHRvIGJlIGRyYXduIGFuZCBsYXll
ciB2aXNpYmlsaXR5IG9wdGltaXphdGlvbiBjYW4ndCBiZSB1c2VkCisgICAgICAgIGlmIChzdHls
ZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUgJiYgIWNoaWxkLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBpZiAo
IWxheWVyKSBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgICAgICAgICBsYXllci0+c2V0
SGFzVmlzaWJsZUNvbnRlbnQodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICAKKyAgICAgICAg
aWYgKCFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgICAg
ICBkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaGlsZChjaGlsZCk7CiAgICAgfQogCi0gICAgY2hpbGQt
PnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgY2hpbGQtPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghbm9ybWFsQ2hpbGROZWVkc0xheW91
dCgpKQogICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUpOyAvLyBXZSBtYXkgc3VwcGx5
IHRoZSBzdGF0aWMgcG9zaXRpb24gZm9yIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgY2hpbGQuCiAg
ICAgCi0gICAgaWYgKCFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxkcmVuSW5saW5lKCkpCi0g
ICAgICAgIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKGNoaWxkKTsKLSAgICAKICAgICBpZiAo
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7CiB9CkBAIC00NzEsNyAr
NDc2LDYgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6Omluc2VydENoaWxkTm9kZShSZQogdm9pZCBS
ZW5kZXJDb250YWluZXI6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwot
ICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBt
X2ZpcnN0Q2hpbGQ7CiAgICAgd2hpbGUgKGNoaWxkKSB7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
Q29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCShy
ZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNDMsMTIgKzQzLDE2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJv
eSgpOwogICAgIHZvaWQgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKIAotICAgIHZpcnR1YWwg
UmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVh
bCB2b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqKTsKLSAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3Jl
KTsKLQorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2Jq
ZWN0KiwgYm9vbCBmdWxsUmVtb3ZlID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGFwcGVuZENo
aWxkTm9kZShSZW5kZXJPYmplY3QqLCBib29sIGZ1bGxBcHBlbmQgPSB0cnVlKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9iamVj
dCogYmVmb3JlLCBib29sIGZ1bGxJbnNlcnQgPSB0cnVlKTsKKyAgICAKKyAgICAvLyBEZXNpZ25l
ZCBmb3Igc3BlZWQuICBEb24ndCB3YXN0ZSB0aW1lIGRvaW5nIGEgYnVuY2ggb2Ygd29yayBsaWtl
IGxheWVyIHVwZGF0aW5nIGFuZCByZXBhaW50aW5nIHdoZW4gd2Uga25vdyB0aGF0IG91cgorICAg
IC8vIGNoYW5nZSBpbiBwYXJlbnRhZ2UgaXMgbm90IGdvaW5nIHRvIGFmZmVjdCBhbnl0aGluZy4K
KyAgICB2aXJ0dWFsIHZvaWQgbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkKSB7IGFw
cGVuZENoaWxkTm9kZShjaGlsZC0+cGFyZW50KCktPnJlbW92ZUNoaWxkTm9kZShjaGlsZCwgZmFs
c2UpLCBmYWxzZSk7IH0KKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmly
dHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpIHsgc2V0TWluTWF4S25vd24odHJ1ZSk7IH0KKyAg
ICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKSB7IHNldFByZWZXaWR0aHNEaXJ0eShmYWxz
ZSk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0JveGVzKCk7
CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVyQ291bnRlci5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1Jl
bmRlckNvdW50ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQsMTAgKzI0NCwxNyBAQCBQYXNz
UmVmUHRyPFN0cmluZ0ltcGw+IFJlbmRlckNvdW50ZXI6Om9yCiAgICAgcmV0dXJuIHRleHQuaW1w
bCgpOwogfQogCi12b2lkIFJlbmRlckNvdW50ZXI6OmNhbGNNaW5NYXhXaWR0aCgpCit2b2lkIFJl
bmRlckNvdW50ZXI6OmRpcnR5TGluZUJveGVzKGJvb2wgZnVsbExheW91dCwgYm9vbCBkdW1teSkK
K3sKKyAgICBpZiAocHJlZldpZHRoc0RpcnR5KCkpCisgICAgICAgIGNhbGNQcmVmV2lkdGhzKDAp
OworICAgIFJlbmRlclRleHQ6OmRpcnR5TGluZUJveGVzKGZ1bGxMYXlvdXQsIGR1bW15KTsKK30K
Kwordm9pZCBSZW5kZXJDb3VudGVyOjpjYWxjUHJlZldpZHRocyhpbnQgbGVhZCkKIHsKICAgICBz
ZXRUZXh0SW50ZXJuYWwob3JpZ2luYWxUZXh0KCkpOwotICAgIFJlbmRlclRleHQ6OmNhbGNNaW5N
YXhXaWR0aCgpOworICAgIFJlbmRlclRleHQ6OmNhbGNQcmVmV2lkdGhzKGxlYWQpOwogfQogCiBz
dGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVDaGlsZHJlbihBdG9taWNTdHJpbmdJbXBsKiBp
ZGVudGlmaWVyLCBDb3VudGVyTm9kZSogbm9kZSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJDb3Vu
dGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkocmV2aXNpb24g
MjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUo
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJDb3VudGVyKCkgY29uc3Q7CiAgICAg
dmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsVGV4dCgpIGNvbnN0OwotICAg
IHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKKyAgICAKKyAgICB2b2lkIGRpcnR5TGlu
ZUJveGVzKGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQg
bGVhZFdpZHRoKTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZXMoUmVuZGVy
T2JqZWN0Kik7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyRmllbGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMSArNDEs
MTEgQEAgUmVuZGVyRmllbGRzZXQ6OlJlbmRlckZpZWxkc2V0KEhUTUxHZW5lcgogewogfQogCi12
b2lkIFJlbmRlckZpZWxkc2V0OjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJGaWVsZHNl
dDo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIFJlbmRlckJsb2NrOjpjYWxjTWluTWF4V2lkdGgo
KTsKKyAgICBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsKICAgICBpZiAoUmVuZGVyT2Jq
ZWN0KiBsZWdlbmQgPSBmaW5kTGVnZW5kKCkpIHsKLSAgICAgICAgaW50IGxlZ2VuZE1pbldpZHRo
ID0gbGVnZW5kLT5taW5XaWR0aCgpOworICAgICAgICBpbnQgbGVnZW5kTWluV2lkdGggPSBsZWdl
bmQtPm1pblByZWZXaWR0aCgpOwogCiAgICAgICAgIExlbmd0aCBsZWdlbmRNYXJnaW5MZWZ0ID0g
bGVnZW5kLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgIExlbmd0aCBsZWdlbmRNYXJn
aW5SaWdodCA9IGxlZ2VuZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOwpAQCAtNTYsNyArNTYsNyBA
QCB2b2lkIFJlbmRlckZpZWxkc2V0OjpjYWxjTWluTWF4V2lkdGgoKQogICAgICAgICBpZiAobGVn
ZW5kTWFyZ2luUmlnaHQuaXNGaXhlZCgpKQogICAgICAgICAgICAgbGVnZW5kTWluV2lkdGggKz0g
bGVnZW5kTWFyZ2luUmlnaHQudmFsdWUoKTsKIAotICAgICAgICBtX21pbldpZHRoID0gbWF4KG1f
bWluV2lkdGgsIGxlZ2VuZE1pbldpZHRoICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgp
ICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRo
ID0gbWF4KG1fbWluUHJlZldpZHRoLCBsZWdlbmRNaW5XaWR0aCArIHBhZGRpbmdMZWZ0KCkgKyBw
YWRkaW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkpOwogICAgIH0KIH0K
IApJbmRleDogcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlckZpZWxkc2V0LmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRl
ckZpZWxkc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogCiAg
ICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7CiAKLSAgICB2aXJ0dWFsIHZv
aWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7
CiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
ICAgICB2aXJ0dWFsIGJvb2wgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCk7IH0KICAgICB2aXJ0dWFsIGJv
b2wgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gMjA5OTcp
CisrKyByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMTgsMzkgKzIxOCw0MSBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRDb250cm9sOjpwYWlu
dE9iamVjCiAgICAgICAgIHBhaW50SW5mby5jb250ZXh0LT5yZXN0b3JlKCk7CiB9CiAKLXZvaWQg
UmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNhbGNNaW5NYXhXaWR0aCgpCit2b2lkIFJlbmRlckZp
bGVVcGxvYWRDb250cm9sOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgbV9taW5XaWR0aCA9IDA7
Ci0gICAgbV9tYXhXaWR0aCA9IDA7CisgICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKwor
ICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAgICBtX21heFByZWZXaWR0aCA9IDA7CiAKICAgICBp
ZiAoc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgp
ID4gMCkKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGggPSBjYWxjQ29udGVudEJveFdp
ZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFs
dWUoKSk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgaG93IGJpZyB0aGUgZmls
ZW5hbWUgc3BhY2UgbmVlZHMgdG8gYmUgZm9yIGEgZ2l2ZW4gbnVtYmVyIG9mIGNoYXJhY3RlcnMK
ICAgICAgICAgLy8gKHVzaW5nICIwIiBhcyB0aGUgbm9taW5hbCBjaGFyYWN0ZXIpLgogICAgICAg
ICBjb25zdCBVQ2hhciBjaCA9ICcwJzsKICAgICAgICAgZmxvYXQgY2hhcldpZHRoID0gc3R5bGUo
KS0+Zm9udCgpLmZsb2F0V2lkdGgoVGV4dFJ1bigmY2gsIDEpLCBUZXh0U3R5bGUoMCwgMCwgMCwg
ZmFsc2UsIGZhbHNlLCBmYWxzZSkpOwotICAgICAgICBtX21heFdpZHRoID0gKGludCljZWlsZihj
aGFyV2lkdGggKiBkZWZhdWx0V2lkdGhOdW1DaGFycyk7CisgICAgICAgIG1fbWF4UHJlZldpZHRo
ID0gKGludCljZWlsZihjaGFyV2lkdGggKiBkZWZhdWx0V2lkdGhOdW1DaGFycyk7CiAgICAgfQog
CiAgICAgaWYgKHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldp
ZHRoKCkudmFsdWUoKSA+IDApIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9IG1heChtX21heFdpZHRo
LCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAg
ICAgICBtX21pbldpZHRoID0gbWF4KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5
bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4
KG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwg
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9
IGVsc2UgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRo
KCkuaXNBdXRvKCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICBt
X21pbldpZHRoID0gMDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UKLSAg
ICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bV9tYXhQcmVmV2lkdGg7CiAKICAgICBpZiAoc3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkg
JiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAg
ICAgICBtX21heFdpZHRoID0gbWluKG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5
bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGggPSBtaW4obV9t
aW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkp
KTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtaW4obV9tYXhQcmVmV2lkdGgsIGNhbGNDb250
ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWlu
UHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxl
KCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KIAogICAgIGludCB0b0FkZCA9IHBhZGRp
bmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7
Ci0gICAgbV9taW5XaWR0aCArPSB0b0FkZDsKLSAgICBtX21heFdpZHRoICs9IHRvQWRkOworICAg
IG1fbWluUHJlZldpZHRoICs9IHRvQWRkOworICAgIG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOwog
Ci0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwog
fQogCiBIVE1MRmlsZVVwbG9hZElubmVyQnV0dG9uRWxlbWVudDo6SFRNTEZpbGVVcGxvYWRJbm5l
ckJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRvYywgTm9kZSogc2hhZG93UGFyZW50KQpJbmRleDog
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVy
aW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQx
LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7
CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZyb21FbGVtZW50KCk7Ci0gICAgdmlydHVhbCB2b2lk
IGNhbGNNaW5NYXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwog
ICAgIHZpcnR1YWwgdm9pZCBwYWludE9iamVjdChQYWludEluZm8mLCBpbnQgdHgsIGludCB0eSk7
CiAKICAgICB2b2lkIGNsaWNrKCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3gu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJldmlz
aW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA5LDUxICsxMDksMzYgQEAgUmVuZGVyRmxleGlibGVCb3g6On5SZW5kZXJGbGV4
aWJsZUJveCgpCiB7CiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jpem9udGFs
TWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y2FsY0hvcml6b250YWxQcmVm
V2lkdGhzKCkKIHsKICAgICBSZW5kZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAg
IHdoaWxlIChjaGlsZCkgewogICAgICAgICAvLyBwb3NpdGlvbmVkIGNoaWxkcmVuIGRvbid0IGFm
ZmVjdCB0aGUgbWlubWF4d2lkdGgKLSAgICAgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSB8
fCBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IENPTExBUFNFKQotICAgICAgICB7Cisg
ICAgICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0eWxlKCktPnZpc2li
aWxpdHkoKSA9PSBDT0xMQVBTRSkgewogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNp
YmxpbmcoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgaW50
IG1hcmdpbj0wOwotICAgICAgICAvLyAgYXV0byBtYXJnaW5zIGRvbid0IGFmZmVjdCBtaW53aWR0
aAotCisgICAgICAgIC8vIEEgbWFyZ2luIGJhc2ljYWxseSBoYXMgdGhyZWUgdHlwZXM6IGZpeGVk
LCBwZXJjZW50YWdlLCBhbmQgYXV0byAodmFyaWFibGUpLgorICAgICAgICAvLyBBdXRvIGFuZCBw
ZXJjZW50YWdlIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAwIHdoZW4gY29tcHV0aW5nIG1pbi9tYXgg
d2lkdGguCisgICAgICAgIC8vIEZpeGVkIG1hcmdpbnMgY2FuIGJlIGFkZGVkIGluIGFzIGlzLgog
ICAgICAgICBMZW5ndGggbWwgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOwogICAgICAg
ICBMZW5ndGggbXIgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsKKyAgICAgICAgaW50
IG1hcmdpbiA9IDAsIG1hcmdpbkxlZnQgPSAwLCBtYXJnaW5SaWdodCA9IDA7CisgICAgICAgIGlm
IChtbC5pc0ZpeGVkKCkpCisgICAgICAgICAgICBtYXJnaW5MZWZ0ICs9IG1sLnZhbHVlKCk7Cisg
ICAgICAgIGlmIChtci5pc0ZpeGVkKCkpCisgICAgICAgICAgICBtYXJnaW5SaWdodCArPSBtci52
YWx1ZSgpOworICAgICAgICBtYXJnaW4gPSBtYXJnaW5MZWZ0ICsgbWFyZ2luUmlnaHQ7CiAKLSAg
ICAgICAgLy8gQ2FsbCBjYWxjV2lkdGggb24gdGhlIGNoaWxkIHRvIGVuc3VyZSB0aGF0IG91ciBt
YXJnaW5zIGFyZQotICAgICAgICAvLyB1cCB0byBkYXRlLiAgVGhpcyBtZXRob2QgY2FuIGJlIGNh
bGxlZCBiZWZvcmUgdGhlIGNoaWxkIGhhcyBhY3R1YWxseQotICAgICAgICAvLyBjYWxjdWxhdGVk
IGl0cyBtYXJnaW5zICh3aGljaCBhcmUgY29tcHV0ZWQgaW5zaWRlIGNhbGNXaWR0aCkuCi0gICAg
ICAgIGNoaWxkLT5jYWxjV2lkdGgoKTsKLQotICAgICAgICBpZiAoIW1sLmlzQXV0bygpICYmICFt
ci5pc0F1dG8oKSkgewotICAgICAgICAgICAgaWYgKCFjaGlsZC0+c3R5bGUoKS0+d2lkdGgoKS5p
c0F1dG8oKSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+ZGlyZWN0aW9u
KCk9PUxUUikKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luID0gY2hpbGQtPm1hcmdpbkxlZnQo
KTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1hcmdpbiA9IGNo
aWxkLT5tYXJnaW5SaWdodCgpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
bWFyZ2luID0gY2hpbGQtPm1hcmdpbkxlZnQoKStjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLSAgICAg
ICAgfSBlbHNlIGlmICghbWwuaXNBdXRvKCkpCi0gICAgICAgICAgICBtYXJnaW4gPSBjaGlsZC0+
bWFyZ2luTGVmdCgpOwotICAgICAgICBlbHNlIGlmICghbXIuaXNBdXRvKCkpCi0gICAgICAgICAg
ICBtYXJnaW4gPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLQotICAgICAgICBpZiAobWFyZ2luIDwg
MCkgbWFyZ2luID0gMDsKLQotICAgICAgICBtX21pbldpZHRoICs9IGNoaWxkLT5taW5XaWR0aCgp
ICsgbWFyZ2luOwotICAgICAgICBtX21heFdpZHRoICs9IGNoaWxkLT5tYXhXaWR0aCgpICsgbWFy
Z2luOworICAgICAgICBtX21pblByZWZXaWR0aCArPSBjaGlsZC0+bWluUHJlZldpZHRoKCkgKyBt
YXJnaW47CisgICAgICAgIG1fbWF4UHJlZldpZHRoICs9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSAr
IG1hcmdpbjsKIAogICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpOwogICAgIH0g
ICAgCiB9CiAKLXZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNWZXJ0aWNhbE1pbk1heFdpZHRo
KCkKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNWZXJ0aWNhbFByZWZXaWR0aHMoKQogewog
ICAgIFJlbmRlck9iamVjdCAqY2hpbGQgPSBmaXJzdENoaWxkKCk7CiAgICAgd2hpbGUoY2hpbGQg
IT0gMCkKQEAgLTE2NCw4MyArMTQ5LDY2IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNW
ZXJ0aWNhbE1pbk0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAg
TGVuZ3RoIG1sID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxlZnQoKTsKLSAgICAgICAgTGVuZ3Ro
IG1yID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCk7Ci0KLSAgICAgICAgLy8gQ2FsbCBj
YWxjV2lkdGggb24gdGhlIGNoaWxkIHRvIGVuc3VyZSB0aGF0IG91ciBtYXJnaW5zIGFyZQotICAg
ICAgICAvLyB1cCB0byBkYXRlLiAgVGhpcyBtZXRob2QgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhl
IGNoaWxkIGhhcyBhY3R1YWxseQotICAgICAgICAvLyBjYWxjdWxhdGVkIGl0cyBtYXJnaW5zICh3
aGljaCBhcmUgY29tcHV0ZWQgaW5zaWRlIGNhbGNXaWR0aCkuCi0gICAgICAgIGlmIChtbC5pc1Bl
cmNlbnQoKSB8fCBtci5pc1BlcmNlbnQoKSkKLSAgICAgICAgICAgIGNhbGNXaWR0aCgpOwotCiAg
ICAgICAgIC8vIEEgbWFyZ2luIGJhc2ljYWxseSBoYXMgdGhyZWUgdHlwZXM6IGZpeGVkLCBwZXJj
ZW50YWdlLCBhbmQgYXV0byAodmFyaWFibGUpLgotICAgICAgICAvLyBBdXRvIG1hcmdpbnMgc2lt
cGx5IGJlY29tZSAwIHdoZW4gY29tcHV0aW5nIG1pbi9tYXggd2lkdGguCisgICAgICAgIC8vIEF1
dG8vcGVyY2VudGFnZSBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4v
bWF4IHdpZHRoLgogICAgICAgICAvLyBGaXhlZCBtYXJnaW5zIGNhbiBiZSBhZGRlZCBpbiBhcyBp
cy4KLSAgICAgICAgLy8gUGVyY2VudGFnZSBtYXJnaW5zIGFyZSBjb21wdXRlZCBhcyBhIHBlcmNl
bnRhZ2Ugb2YgdGhlIHdpZHRoIHdlIGNhbGN1bGF0ZWQgaW4KLSAgICAgICAgLy8gdGhlIGNhbGNX
aWR0aCBjYWxsIGFib3ZlLiAgSW4gdGhpcyBjYXNlIHdlIHVzZSB0aGUgYWN0dWFsIGNhY2hlZCBt
YXJnaW4gdmFsdWVzIG9uCi0gICAgICAgIC8vIHRoZSBSZW5kZXJPYmplY3QgaXRzZWxmLgorICAg
ICAgICBMZW5ndGggbWwgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luTGVmdCgpOworICAgICAgICBM
ZW5ndGggbXIgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgaW50IG1h
cmdpbiA9IDA7CiAgICAgICAgIGlmIChtbC5pc0ZpeGVkKCkpCiAgICAgICAgICAgICBtYXJnaW4g
Kz0gbWwudmFsdWUoKTsKLSAgICAgICAgZWxzZSBpZiAobWwuaXNQZXJjZW50KCkpCi0gICAgICAg
ICAgICBtYXJnaW4gKz0gY2hpbGQtPm1hcmdpbkxlZnQoKTsKLQogICAgICAgICBpZiAobXIuaXNG
aXhlZCgpKQogICAgICAgICAgICAgbWFyZ2luICs9IG1yLnZhbHVlKCk7Ci0gICAgICAgIGVsc2Ug
aWYgKG1yLmlzQXV0bygpKQotICAgICAgICAgICAgbWFyZ2luICs9IGNoaWxkLT5tYXJnaW5SaWdo
dCgpOwotCi0gICAgICAgIGlmIChtYXJnaW4gPCAwKSBtYXJnaW4gPSAwOwogICAgICAgICAKLSAg
ICAgICAgaW50IHcgPSBjaGlsZC0+bWluV2lkdGgoKSArIG1hcmdpbjsKLSAgICAgICAgaWYobV9t
aW5XaWR0aCA8IHcpIG1fbWluV2lkdGggPSB3OworICAgICAgICBpbnQgdyA9IGNoaWxkLT5taW5Q
cmVmV2lkdGgoKSArIG1hcmdpbjsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgodywgbV9t
aW5QcmVmV2lkdGgpOwogICAgICAgICAKLSAgICAgICAgdyA9IGNoaWxkLT5tYXhXaWR0aCgpICsg
bWFyZ2luOwotCi0gICAgICAgIGlmKG1fbWF4V2lkdGggPCB3KSBtX21heFdpZHRoID0gdzsKKyAg
ICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSArIG1hcmdpbjsKKyAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtYXgodywgbV9tYXhQcmVmV2lkdGgpOwogCiAgICAgICAgIGNoaWxkID0gY2hp
bGQtPm5leHRTaWJsaW5nKCk7CiAgICAgfSAgICAKIH0KIAotdm9pZCBSZW5kZXJGbGV4aWJsZUJv
eDo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNQcmVmV2lk
dGhzKCkKIHsKLSAgICBBU1NFUlQoICFtaW5NYXhLbm93bigpICk7Ci0KLSAgICBtX21pbldpZHRo
ID0gMDsKLSAgICBtX21heFdpZHRoID0gMDsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkp
OwogCi0gICAgaWYgKGhhc011bHRpcGxlTGluZXMoKSB8fCBpc1ZlcnRpY2FsKCkpCi0gICAgICAg
IGNhbGNWZXJ0aWNhbE1pbk1heFdpZHRoKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxjSG9yaXpv
bnRhbE1pbk1heFdpZHRoKCk7CisgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYm
IHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCisgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFs
dWUoKSk7CisgICAgZWxzZSB7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lk
dGggPSAwOworCisgICAgICAgIGlmIChoYXNNdWx0aXBsZUxpbmVzKCkgfHwgaXNWZXJ0aWNhbCgp
KQorICAgICAgICAgICAgY2FsY1ZlcnRpY2FsUHJlZldpZHRocygpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBjYWxjSG9yaXpvbnRhbFByZWZXaWR0aHMoKTsKIAotICAgIGlmKG1fbWF4V2lk
dGggPCBtX21pbldpZHRoKSBtX21heFdpZHRoID0gbV9taW5XaWR0aDsKKyAgICAgICAgbV9tYXhQ
cmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIG1fbWF4UHJlZldpZHRoKTsKKyAgICB9CiAK
LSAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52
YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGggPSBjYWxjQ29udGVu
dEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7Ci0gICAKICAgICBpZiAoc3R5bGUo
KS0+bWluV2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpID4g
MCkgewotICAgICAgICBtX21heFdpZHRoID0gbWF4KG1fbWF4V2lkdGgsIGNhbGNDb250ZW50Qm94
V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Ci0gICAgICAgIG1fbWluV2lkdGgg
PSBtYXgobV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgp
LnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgs
IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdp
ZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwogICAgIH0KICAgICAKICAgICBpZiAo
c3R5bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFdpZHRoID0gbWluKG1fbWF4
V2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7
Ci0gICAgICAgIG1fbWluV2lkdGggPSBtaW4obV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0
aChzdHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGgg
PSBtaW4obV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lk
dGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldp
ZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwog
ICAgIH0KIAotICAgIGludCB0b0FkZCA9IGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBw
YWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCk7Ci0gICAgbV9taW5XaWR0aCArPSB0b0FkZDsK
LSAgICBtX21heFdpZHRoICs9IHRvQWRkOworICAgIGludCB0b0FkZCA9IDA7CisgICAgdG9BZGQg
PSBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdS
aWdodCgpOworCisgICAgbV9taW5QcmVmV2lkdGggKz0gdG9BZGQ7CisgICAgbV9tYXhQcmVmV2lk
dGggKz0gdG9BZGQ7CiAKLSAgICBzZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0aHNE
aXJ0eShmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAg
QVNTRVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIHBv
c0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpICYmICFzZWxm
TmVlZHNMYXlvdXQoKSkgewogICAgICAgICAvLyBBbGwgd2UgaGF2ZSB0byBpcyBsYXkgb3V0IG91
ciBwb3NpdGlvbmVkIG9iamVjdHMuCkBAIC0xMTE3LDkgKzEwODUsOSBAQCBpbnQgUmVuZGVyRmxl
eGlibGVCb3g6OmFsbG93ZWRDaGlsZEZsZXgoCiAgICAgICAgICAgICAgICAgY2hpbGQtPnN0eWxl
KCktPm1heFdpZHRoKCkuaXNGaXhlZCgpKQogICAgICAgICAgICAgICAgIG1heFcgPSBjaGlsZC0+
c3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpOwogICAgICAgICAgICAgZWxzZSBpZiAoY2hpbGQt
PnN0eWxlKCktPm1heFdpZHRoKCkudHlwZSgpID09IEludHJpbnNpYykKLSAgICAgICAgICAgICAg
ICBtYXhXID0gY2hpbGQtPm1heFdpZHRoKCk7CisgICAgICAgICAgICAgICAgbWF4VyA9IGNoaWxk
LT5tYXhQcmVmV2lkdGgoKTsKICAgICAgICAgICAgIGVsc2UgaWYgKGNoaWxkLT5zdHlsZSgpLT5t
YXhXaWR0aCgpLnR5cGUoKSA9PSBNaW5JbnRyaW5zaWMpCi0gICAgICAgICAgICAgICAgbWF4VyA9
IGNoaWxkLT5taW5XaWR0aCgpOworICAgICAgICAgICAgICAgIG1heFcgPSBjaGlsZC0+bWluUHJl
ZldpZHRoKCk7CiAgICAgICAgICAgICBpZiAobWF4VyA9PSBJTlRfTUFYKQogICAgICAgICAgICAg
ICAgIHJldHVybiBtYXhXOwogICAgICAgICAgICAgcmV0dXJuIG1heCgwLCBtYXhXIC0gdyk7CkBA
IC0xMTM4LDE0ICsxMTA2LDE0IEBAIGludCBSZW5kZXJGbGV4aWJsZUJveDo6YWxsb3dlZENoaWxk
RmxleCgKIAogICAgIC8vIEZJWE1FOiBGb3Igbm93IGp1c3QgaGFuZGxlIGZpeGVkIHZhbHVlcy4K
ICAgICBpZiAoaXNIb3Jpem9udGFsKCkpIHsKLSAgICAgICAgaW50IG1pblcgPSBjaGlsZC0+bWlu
V2lkdGgoKTsKKyAgICAgICAgaW50IG1pblcgPSBjaGlsZC0+bWluUHJlZldpZHRoKCk7CiAgICAg
ICAgIGludCB3ID0gY2hpbGQtPm92ZXJyaWRlV2lkdGgoKSAtIChjaGlsZC0+Ym9yZGVyTGVmdCgp
ICsgY2hpbGQtPmJvcmRlclJpZ2h0KCkgKyBjaGlsZC0+cGFkZGluZ0xlZnQoKSArIGNoaWxkLT5w
YWRkaW5nUmlnaHQoKSk7CiAgICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+bWluV2lkdGgoKS5p
c0ZpeGVkKCkpCiAgICAgICAgICAgICBtaW5XID0gY2hpbGQtPnN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKTsKICAgICAgICAgZWxzZSBpZiAoY2hpbGQtPnN0eWxlKCktPm1pbldpZHRoKCkudHlw
ZSgpID09IEludHJpbnNpYykKLSAgICAgICAgICAgIG1pblcgPSBjaGlsZC0+bWF4V2lkdGgoKTsK
KyAgICAgICAgICAgIG1pblcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCk7CiAgICAgICAgIGVsc2Ug
aWYgKGNoaWxkLT5zdHlsZSgpLT5taW5XaWR0aCgpLnR5cGUoKSA9PSBNaW5JbnRyaW5zaWMpCi0g
ICAgICAgICAgICBtaW5XID0gY2hpbGQtPm1pbldpZHRoKCk7CisgICAgICAgICAgICBtaW5XID0g
Y2hpbGQtPm1pblByZWZXaWR0aCgpOwogICAgICAgICAgICAgCiAgICAgICAgIGludCBhbGxvd2Vk
U2hyaW5rYWdlID0gbWluKDAsIG1pblcgLSB3KTsKICAgICAgICAgcmV0dXJuIGFsbG93ZWRTaHJp
bmthZ2U7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5k
ZXJpbmcvUmVuZGVyRmxleGlibGVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBA
QCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsK
IAotICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKLSAgICB2b2lkIGNhbGNIb3Jp
em9udGFsTWluTWF4V2lkdGgoKTsKLSAgICB2b2lkIGNhbGNWZXJ0aWNhbE1pbk1heFdpZHRoKCk7
CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CisgICAgdm9pZCBjYWxjSG9yaXpv
bnRhbFByZWZXaWR0aHMoKTsKKyAgICB2b2lkIGNhbGNWZXJ0aWNhbFByZWZXaWR0aHMoKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCBsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwogICAg
IHZvaWQgbGF5b3V0SG9yaXpvbnRhbEJveChib29sIHJlbGF5b3V0Q2hpbGRyZW4pOwpAQCAtNTMs
OSArNTMsOSBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgaW50IGFsbG93ZWRDaGlsZEZsZXgo
UmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9vbCBleHBhbmRpbmcsIHVuc2lnbmVkIGdyb3VwKTsKIAot
ICAgIGJvb2wgaGFzTXVsdGlwbGVMaW5lcygpIHsgcmV0dXJuIHN0eWxlKCktPmJveExpbmVzKCkg
PT0gTVVMVElQTEU7IH0KLSAgICBib29sIGlzVmVydGljYWwoKSB7IHJldHVybiBzdHlsZSgpLT5i
b3hPcmllbnQoKSA9PSBWRVJUSUNBTDsgfQotICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgeyByZXR1
cm4gc3R5bGUoKS0+Ym94T3JpZW50KCkgPT0gSE9SSVpPTlRBTDsgfQorICAgIGJvb2wgaGFzTXVs
dGlwbGVMaW5lcygpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCktPmJveExpbmVzKCkgPT0gTVVMVElQ
TEU7IH0KKyAgICBib29sIGlzVmVydGljYWwoKSBjb25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3hP
cmllbnQoKSA9PSBWRVJUSUNBTDsgfQorICAgIGJvb2wgaXNIb3Jpem9udGFsKCkgY29uc3QgeyBy
ZXR1cm4gc3R5bGUoKS0+Ym94T3JpZW50KCkgPT0gSE9SSVpPTlRBTDsgfQogCiAgICAgYm9vbCBt
X2ZsZXhpbmdDaGlsZHJlbiA6IDE7CiAgICAgYm9vbCBtX3N0cmV0Y2hpbmdDaGlsZHJlbiA6IDE7
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckZsb3cuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJGbG93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1LDYgKzIyNSwxMCBAQCB2b2lkIFJlbmRlckZsb3c6
OmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoCiAgICAgaWYgKGlzSW5saW5lKCkgJiYgIWZpcnN0TGlu
ZUJveCgpKQogICAgICAgICByZXR1cm4gcGFyZW50KCktPmRpcnR5TGluZXNGcm9tQ2hhbmdlZENo
aWxkKHRoaXMpOwogICAgIAorICAgIC8vIElmIHdlIGhhdmUgbm8gZmlyc3QgbGluZSBib3gsIHRo
ZW4ganVzdCBiYWlsIGVhcmx5LgorICAgIGlmICghZmlyc3RMaW5lQm94KCkpCisgICAgICAgIHJl
dHVybjsKKwogICAgIC8vIFRyeSB0byBmaWd1cmUgb3V0IHdoaWNoIGxpbmUgYm94IHdlIGJlbG9u
ZyBpbi4gIEZpcnN0IHRyeSB0byBmaW5kIGEgcHJldmlvdXMKICAgICAvLyBsaW5lIGJveCBieSBl
eGFtaW5pbmcgb3VyIHNpYmxpbmdzLiAgSWYgd2UgZGlkbid0IGZpbmQgYSBsaW5lIGJveCwgdGhl
biB1c2Ugb3VyIAogICAgIC8vIHBhcmVudCdzIGZpcnN0IGxpbmUgYm94LgpAQCAtNDYzLDcgKzQ2
Nyw3IEBAIEludFJlY3QgUmVuZGVyRmxvdzo6YWJzb2x1dGVDbGlwcGVkT3ZlcmYKICAgICAgICAg
UmVuZGVyQmxvY2sqIGNiID0gY29udGFpbmluZ0Jsb2NrKCk7CiAgICAgICAgIGZvciAoUmVuZGVy
T2JqZWN0KiBpbmxpbmVGbG93ID0gdGhpczsgaW5saW5lRmxvdyAmJiBpbmxpbmVGbG93LT5pc0lu
bGluZUZsb3coKSAmJiBpbmxpbmVGbG93ICE9IGNiOyAKICAgICAgICAgICAgICBpbmxpbmVGbG93
ID0gaW5saW5lRmxvdy0+cGFyZW50KCkpIHsKLSAgICAgICAgICAgICBpZiAoaW5saW5lRmxvdy0+
c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBSZWxhdGl2ZVBvc2l0aW9uICYmIGlubGluZUZsb3ctPmxh
eWVyKCkpCisgICAgICAgICAgICAgaWYgKGlubGluZUZsb3ctPnN0eWxlKCktPnBvc2l0aW9uKCkg
PT0gUmVsYXRpdmVQb3NpdGlvbiAmJiBpbmxpbmVGbG93LT5oYXNMYXllcigpKQogICAgICAgICAg
ICAgICAgIGlubGluZUZsb3ctPmxheWVyKCktPnJlbGF0aXZlUG9zaXRpb25PZmZzZXQobGVmdCwg
dG9wKTsKICAgICAgICAgfQogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCShyZXZp
c2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODUsNyArODUsNiBAQCBib29sIFJlbmRlckZvcmVpZ25PYmplY3Q6OnJlcXVp
cmVzTGF5ZXIoCiB2b2lkIFJlbmRlckZvcmVpZ25PYmplY3Q6OmxheW91dCgpCiB7CiAgICAgQVNT
RVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIElu
dFJlY3Qgb2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJGcmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZy
YW1lU2V0LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyRnJhbWVTZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTMsNyArNDUzLDYgQEAgRnJhbWVFZGdlSW5mbyBSZW5k
ZXJGcmFtZVNldDo6ZWRnZUluZm8oKQogdm9pZCBSZW5kZXJGcmFtZVNldDo6bGF5b3V0KCkKIHsK
ICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKG1pbk1heEtub3duKCkpOwog
CiAgICAgaWYgKCFwYXJlbnQoKS0+aXNGcmFtZVNldCgpKSB7CiAgICAgICAgIEZyYW1lVmlldyog
diA9IHZpZXcoKS0+ZnJhbWVWaWV3KCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVySFRNTENhbnZh
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3BwCShyZXZp
c2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzksNyArNzksNiBAQCB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50KFBhaW50
SW5mbyYgCiB2b2lkIFJlbmRlckhUTUxDYW52YXM6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIEludFJlY3Qg
b2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAko
cmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzAsOCArMTcwLDggQEAgdm9pZCBSZW5kZXJJbWFnZTo6aW1hZ2VDaGFuZ2VkKENh
Y2hlZEltYQogICAgIGlmIChlbnN1cmVMYXlvdXQpIHsKICAgICAgICAgaWYgKCFzZWxmTmVlZHNM
YXlvdXQoKSkKICAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwotICAgICAgICBpZiAo
bWluTWF4S25vd24oKSkKLSAgICAgICAgICAgIHNldE1pbk1heEtub3duKGZhbHNlKTsKKyAgICAg
ICAgaWYgKCFwcmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgICAgIHNldFByZWZXaWR0aHNEaXJ0
eSh0cnVlKTsKICAgICB9IGVsc2UKICAgICAgICAgLy8gRklYTUU6IFdlIGFsd2F5cyBqdXN0IGRv
IGEgY29tcGxldGUgcmVwYWludCwgc2luY2Ugd2UgYWx3YXlzIHBhc3MgaW4gdGhlIGZ1bGwgaW1h
Z2UKICAgICAgICAgLy8gcmVjdCBhdCB0aGUgbW9tZW50IGFueXdheS4KQEAgLTMwMyw3ICszMDMs
NiBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWludEluZm8mIHBhaW50CiB2b2lkIFJlbmRl
ckltYWdlOjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NF
UlQobWluTWF4S25vd24oKSk7CiAKICAgICBJbnRSZWN0IG9sZEJvdW5kczsKICAgICBJbnRSZWN0
IG9sZE91dGxpbmVCb3g7CkBAIC00MzUsMjAgKzQzNCwyMCBAQCBpbnQgUmVuZGVySW1hZ2U6OmNh
bGNBc3BlY3RSYXRpb0hlaWdodCgpCiAgICAgcmV0dXJuIFJlbmRlclJlcGxhY2VkOjpjYWxjUmVw
bGFjZWRXaWR0aCgpICogaW50cmluc2ljSGVpZ2h0KCkgLyBpbnRyaW5zaWNXaWR0aCgpOwogfQog
Ci12b2lkIFJlbmRlckltYWdlOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJJbWFnZTo6
Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIEFTU0VSVCghbWluTWF4S25vd24oKSk7CisgICAgQVNT
RVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKIAotICAgIG1fbWF4V2lkdGggPSBjYWxjUmVwbGFjZWRX
aWR0aCgpICsgcGFkZGluZ0xlZnQoKSArIHBhZGRpbmdSaWdodCgpICsgYm9yZGVyTGVmdCgpICsg
Ym9yZGVyUmlnaHQoKTsKKyAgICBtX21heFByZWZXaWR0aCA9IGNhbGNSZXBsYWNlZFdpZHRoKCkg
KyBwYWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJS
aWdodCgpOwogCiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgc3R5bGUo
KS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkgfHwgCiAgICAgICAgIHN0eWxlKCktPm1heFdpZHRoKCku
aXNQZXJjZW50KCkgfHwgc3R5bGUoKS0+bWF4SGVpZ2h0KCkuaXNQZXJjZW50KCkgfHwKICAgICAg
ICAgc3R5bGUoKS0+bWluV2lkdGgoKS5pc1BlcmNlbnQoKSB8fCBzdHlsZSgpLT5taW5IZWlnaHQo
KS5pc1BlcmNlbnQoKSkKLSAgICAgICAgbV9taW5XaWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJl
ZldpZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoOwor
ICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoOwogCi0gICAgc2V0TWluTWF4
S25vd24oKTsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiBJbWFnZSogUmVu
ZGVySW1hZ2U6Om51bGxJbWFnZSgpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkocmV2aXNpb24gMjA5OTcpCisrKyBy
ZW5kZXJpbmcvUmVuZGVySW1hZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBpbnQgY2FsY1JlcGxhY2VkV2lkdGgoKSBjb25zdDsKICAgICB2
aXJ0dWFsIGludCBjYWxjUmVwbGFjZWRIZWlnaHQoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9p
ZCBjYWxjTWluTWF4V2lkdGgoKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsK
IAogICAgIEhUTUxNYXBFbGVtZW50KiBpbWFnZU1hcCgpOwogCkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVySW5saW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAko
cmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIyLDcgKzEyMiw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjphZGRDaGlsZFRvRmxv
dyhSZW5kZXIKIAogICAgIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQobmV3Q2hpbGQsYmVmb3Jl
Q2hpbGQpOwogCi0gICAgbmV3Q2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7
CisgICAgbmV3Q2hpbGQtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQog
CiBSZW5kZXJJbmxpbmUqIFJlbmRlcklubGluZTo6Y2xvbmVJbmxpbmUoUmVuZGVyRmxvdyogc3Jj
KQpAQCAtMTQ4LDcgKzE0OCw3IEBAIHZvaWQgUmVuZGVySW5saW5lOjpzcGxpdElubGluZXMoUmVu
ZGVyQmwKICAgICAgICAgUmVuZGVyT2JqZWN0KiB0bXAgPSBvOwogICAgICAgICBvID0gdG1wLT5u
ZXh0U2libGluZygpOwogICAgICAgICBjbG9uZS0+YWRkQ2hpbGRUb0Zsb3cocmVtb3ZlQ2hpbGRO
b2RlKHRtcCksIDApOwotICAgICAgICB0bXAtPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxj
KCk7CisgICAgICAgIHRtcC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgfQogCiAgICAgLy8gSG9vayB8Y2xvbmV8IHVwIGFzIHRoZSBjb250aW51YXRpb24gb2YgdGhl
IG1pZGRsZSBibG9jay4KQEAgLTE4NCw3ICsxODQsNyBAQCB2b2lkIFJlbmRlcklubGluZTo6c3Bs
aXRJbmxpbmVzKFJlbmRlckJsCiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIHRtcCA9IG87CiAg
ICAgICAgICAgICBvID0gdG1wLT5uZXh0U2libGluZygpOwogICAgICAgICAgICAgY2xvbmUtPmFk
ZENoaWxkVG9GbG93KGN1cnItPnJlbW92ZUNoaWxkTm9kZSh0bXApLCAwKTsKLSAgICAgICAgICAg
IHRtcC0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgICAgIHRtcC0+
c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICAvLyBLZWVwIHdhbGtpbmcgdXAgdGhlIGNoYWluLgpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQg
UmVuZGVySW5saW5lOjpzcGxpdEZsb3coUmVuZGVyT2JqZWMKICAgICAgICAgICAgIFJlbmRlck9i
amVjdCogbm8gPSBvOwogICAgICAgICAgICAgbyA9IG5vLT5uZXh0U2libGluZygpOwogICAgICAg
ICAgICAgcHJlLT5hcHBlbmRDaGlsZE5vZGUoYmxvY2stPnJlbW92ZUNoaWxkTm9kZShubykpOwot
ICAgICAgICAgICAgbm8tPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAg
ICAgICBuby0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTI1Niw5ICsyNTYsOSBAQCB2b2lkIFJlbmRlcklubGluZTo6c3BsaXRGbG93
KFJlbmRlck9iamVjCiAgICAgLy8gQWx3YXlzIGp1c3QgZG8gYSBmdWxsIGxheW91dCBpbiBvcmRl
ciB0byBlbnN1cmUgdGhhdCBsaW5lIGJveGVzIChlc3BlY2lhbGx5IHdyYXBwZXJzIGZvciBpbWFn
ZXMpCiAgICAgLy8gZ2V0IGRlbGV0ZWQgcHJvcGVybHkuICBCZWNhdXNlIG9iamVjdHMgbW92ZXMg
ZnJvbSB0aGUgcHJlIGJsb2NrIGludG8gdGhlIHBvc3QgYmxvY2ssIHdlIHdhbnQgdG8KICAgICAv
LyBtYWtlIG5ldyBsaW5lIGJveGVzIGluc3RlYWQgb2YgbGVhdmluZyB0aGUgb2xkIGxpbmUgYm94
ZXMgYXJvdW5kLgotICAgIHByZS0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKLSAg
ICBibG9jay0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKLSAgICBwb3N0LT5zZXRO
ZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIHByZS0+c2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CisgICAgYmxvY2stPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRo
c1JlY2FsYygpOworICAgIHBvc3QtPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygp
OwogfQogCiB2b2lkIFJlbmRlcklubGluZTo6cGFpbnQoUGFpbnRJbmZvJiBwYWludEluZm8sIGlu
dCB0eCwgaW50IHR5KQpAQCAtMjgyLDE3ICsyODIsNiBAQCB2b2lkIFJlbmRlcklubGluZTo6YWJz
b2x1dGVSZWN0cyhWZWN0b3I8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHR5IC0gY29udGFpbmluZ0Jsb2NrKCktPnlQb3MoKSArIGNvbnRpbnVhdGlvbigpLT55UG9zKCkp
OwogfQogCi12b2lkIFJlbmRlcklubGluZTo6Y2FsY01pbk1heFdpZHRoKCkKLXsKLSAgICBBU1NF
UlQoIW1pbk1heEtub3duKCkpOwotCi0gICAgLy8gSXJyZWxldmFudCwgc2luY2Ugc29tZSBlbmNs
b3NpbmcgYmxvY2sgd2lsbCBhY3R1YWxseSBtZWFzdXJlIHVzIGFuZCBvdXIgY2hpbGRyZW4uCi0g
ICAgbV9taW5XaWR0aCA9IDA7Ci0gICAgbV9tYXhXaWR0aCA9IDA7Ci0KLSAgICBzZXRNaW5NYXhL
bm93bigpOwotfQotCiBib29sIFJlbmRlcklubGluZTo6cmVxdWlyZXNMYXllcigpCiB7CiAgICAg
cmV0dXJuIGlzUm9vdCgpIHx8IGlzUmVsUG9zaXRpb25lZCgpIHx8IHN0eWxlKCktPm9wYWNpdHko
KSA8IDEuMGY7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9S
ZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsNiBAQCBwdWJsaWM6CiAK
ICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRU
ZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7
CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7Ci0KICAgICAvLyBvdmVycmlk
ZXMgUmVuZGVyT2JqZWN0CiAgICAgdmlydHVhbCBib29sIHJlcXVpcmVzTGF5ZXIoKTsKIApJbmRl
eDogcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyTGlz
dEJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExOCw3ICsxMTgsMTUgQEAgdm9pZCBSZW5kZXJM
aXN0Qm94Ojp1cGRhdGVGcm9tRWxlbWVudCgpCiAgICAgICAgIH0KICAgICAgICAgbV9vcHRpb25z
V2lkdGggPSBzdGF0aWNfY2FzdDxpbnQ+KGNlaWxmKHdpZHRoKSk7CiAgICAgICAgIG1fb3B0aW9u
c0NoYW5nZWQgPSBmYWxzZTsKLSAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMo
KTsKKyAgICAgICAgCisgICAgICAgIGlmICghbV92QmFyICYmIFNjcm9sbGJhcjo6aGFzUGxhdGZv
cm1TY3JvbGxiYXJzKCkpCisgICAgICAgICAgICBpZiAoRnJhbWVWaWV3KiB2aWV3ID0gbm9kZSgp
LT5kb2N1bWVudCgpLT52aWV3KCkpIHsKKyAgICAgICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1T
Y3JvbGxiYXI+IHdpZGdldCA9IG5ldyBQbGF0Zm9ybVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNj
cm9sbGJhciwgU21hbGxTY3JvbGxiYXIpOworICAgICAgICAgICAgICAgIHZpZXctPmFkZENoaWxk
KHdpZGdldC5nZXQoKSk7CisgICAgICAgICAgICAgICAgbV92QmFyID0gd2lkZ2V0LnJlbGVhc2Uo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kUHJl
ZldpZHRoc1JlY2FsYygpOwogICAgIH0KIH0KIApAQCAtMTUxLDQ3ICsxNTksMzkgQEAgdm9pZCBS
ZW5kZXJMaXN0Qm94OjpzY3JvbGxUb1JldmVhbFNlbGVjdAogICAgICAgICBzY3JvbGxUb1JldmVh
bEVsZW1lbnRBdExpc3RJbmRleChmaXJzdEluZGV4KTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0Qm94
OjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJMaXN0Qm94OjpjYWxjUHJlZldpZHRocygp
CiB7Ci0gICAgaWYgKCFtX3ZCYXIgJiYgU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNjcm9sbGJhcnMo
KSkKLSAgICAgICAgaWYgKEZyYW1lVmlldyogdmlldyA9IG5vZGUoKS0+ZG9jdW1lbnQoKS0+dmll
dygpKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UGxhdGZvcm1TY3JvbGxiYXI+IHdpZGdldCA9IG5l
dyBQbGF0Zm9ybVNjcm9sbGJhcih0aGlzLCBWZXJ0aWNhbFNjcm9sbGJhciwgU21hbGxTY3JvbGxi
YXIpOwotICAgICAgICAgICAgdmlldy0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKLSAgICAgICAg
ICAgIG1fdkJhciA9IHdpZGdldC5yZWxlYXNlKCk7Ci0gICAgICAgIH0KLQotICAgIGlmIChtX29w
dGlvbnNDaGFuZ2VkKQotICAgICAgICB1cGRhdGVGcm9tRWxlbWVudCgpOworICAgIEFTU0VSVCgh
bV9vcHRpb25zQ2hhbmdlZCk7CiAKLSAgICBtX21pbldpZHRoID0gMDsKLSAgICBtX21heFdpZHRo
ID0gMDsKKyAgICBtX21pblByZWZXaWR0aCA9IDA7CisgICAgbV9tYXhQcmVmV2lkdGggPSAwOwog
CiAgICAgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCku
dmFsdWUoKSA+IDApCi0gICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoID0gY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOworICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0
aCgpLnZhbHVlKCkpOwogICAgIGVsc2UgewotICAgICAgICBtX21heFdpZHRoID0gbV9vcHRpb25z
V2lkdGggKyAyICogb3B0aW9uc1NwYWNpbmdIb3Jpem9udGFsOworICAgICAgICBtX21heFByZWZX
aWR0aCA9IG1fb3B0aW9uc1dpZHRoICsgMiAqIG9wdGlvbnNTcGFjaW5nSG9yaXpvbnRhbDsKICAg
ICAgICAgaWYgKG1fdkJhcikKLSAgICAgICAgICAgIG1fbWF4V2lkdGggKz0gbV92QmFyLT53aWR0
aCgpOworICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggKz0gbV92QmFyLT53aWR0aCgpOwogICAg
IH0KIAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5t
aW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtYXgobV9tYXhX
aWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsK
LSAgICAgICAgbV9taW5XaWR0aCA9IG1heChtX21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9
IG1heChtX21heFByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0
aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lk
dGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAg
ICAgfSBlbHNlIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53
aWR0aCgpLmlzQXV0bygpICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkKLSAgICAg
ICAgbV9taW5XaWR0aCA9IDA7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBlbHNl
Ci0gICAgICAgIG1fbWluV2lkdGggPSBtX21heFdpZHRoOworICAgICAgICBtX21pblByZWZXaWR0
aCA9IG1fbWF4UHJlZldpZHRoOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhl
ZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsK
LSAgICAgICAgbV9tYXhXaWR0aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWlu
KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBw
YWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdo
dCgpOwotICAgIG1fbWluV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0b0FkZDsK
KyAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCArPSB0b0Fk
ZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCi0gICAgc2V0TWluTWF4S25vd24o
KTsKKyAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiBpbnQgUmVuZGVyTGlzdEJv
eDo6c2l6ZSgpIGNvbnN0CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVu
ZGVyaW5nL1JlbmRlckxpc3RCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNjEsNyArNjEsNyBAQCBw
dWJsaWM6CiAgICAgdmlydHVhbCBib29sIHNjcm9sbChTY3JvbGxEaXJlY3Rpb24sIFNjcm9sbEdy
YW51bGFyaXR5LCBmbG9hdCBtdWx0aXBsaWVyID0gMS4wZik7CiAgICAgdmlydHVhbCBib29sIGlz
U2Nyb2xsYWJsZSgpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgp
OworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAgIHZpcnR1YWwgc2hvcnQg
YmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94KSBjb25z
dDsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY0hlaWdodCgpOwogCkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEl0ZW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5j
cHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTcwLDEwICsxNzAsMTggQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBk
YXRlVmFsdWUoKQogICAgIGlmICghbV9oYXNFeHBsaWNpdFZhbHVlKSB7CiAgICAgICAgIG1faXNW
YWx1ZVVwVG9EYXRlID0gZmFsc2U7CiAgICAgICAgIGlmIChtX21hcmtlcikKLSAgICAgICAgICAg
IG1fbWFya2VyLT5zZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICAgICAg
bV9tYXJrZXItPnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIH0KIH0K
IAorc3RhdGljIFJlbmRlck9iamVjdCogZmlyc3ROb25NYXJrZXJDaGlsZChSZW5kZXJPYmplY3Qq
IHBhcmVudCkKK3sKKyAgICBSZW5kZXJPYmplY3QqIHJlc3VsdCA9IHBhcmVudC0+Zmlyc3RDaGls
ZCgpOworICAgIHdoaWxlIChyZXN1bHQgJiYgcmVzdWx0LT5pc0xpc3RNYXJrZXIoKSkKKyAgICAg
ICAgcmVzdWx0ID0gcmVzdWx0LT5uZXh0U2libGluZygpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZU1hcmtlckxvY2F0aW9uKCkKIHsKICAgICAv
LyBTYW5pdHkgY2hlY2sgdGhlIGxvY2F0aW9uIG9mIG91ciBtYXJrZXIuCkBAIC0xOTEsMzEgKzE5
OSwzMSBAQCB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2NhdGlvCiAgICAgICAg
ICAgICAgICAgbGluZUJveFBhcmVudCA9IHRoaXM7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAo
bWFya2VyUGFyICE9IGxpbmVCb3hQYXJlbnQgfHwgIW1fbWFya2VyLT5taW5NYXhLbm93bigpKSB7
CisgICAgICAgIGlmIChtYXJrZXJQYXIgIT0gbGluZUJveFBhcmVudCB8fCBtX21hcmtlci0+cHJl
ZldpZHRoc0RpcnR5KCkpIHsKKyAgICAgICAgICAgIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CiAgICAg
ICAgICAgICBtX21hcmtlci0+cmVtb3ZlKCk7CiAgICAgICAgICAgICBpZiAoIWxpbmVCb3hQYXJl
bnQpCiAgICAgICAgICAgICAgICAgbGluZUJveFBhcmVudCA9IHRoaXM7Ci0gICAgICAgICAgICBs
aW5lQm94UGFyZW50LT5hZGRDaGlsZChtX21hcmtlciwgbGluZUJveFBhcmVudC0+Zmlyc3RDaGls
ZCgpKTsKLSAgICAgICAgICAgIGlmICghbV9tYXJrZXItPm1pbk1heEtub3duKCkpCi0gICAgICAg
ICAgICAgICAgbV9tYXJrZXItPmNhbGNNaW5NYXhXaWR0aCgpOwotICAgICAgICAgICAgcmVjYWxj
TWluTWF4V2lkdGhzKCk7CisgICAgICAgICAgICBsaW5lQm94UGFyZW50LT5hZGRDaGlsZChtX21h
cmtlciwgZmlyc3ROb25NYXJrZXJDaGlsZChsaW5lQm94UGFyZW50KSk7CisgICAgICAgICAgICBp
ZiAobV9tYXJrZXItPnByZWZXaWR0aHNEaXJ0eSgpKQorICAgICAgICAgICAgICAgIG1fbWFya2Vy
LT5jYWxjUHJlZldpZHRocygpOwogICAgICAgICB9CiAgICAgfQogfQogCi12b2lkIFJlbmRlckxp
c3RJdGVtOjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJMaXN0SXRlbTo6Y2FsY1ByZWZX
aWR0aHMoKQogewotICAgIC8vIE1ha2Ugc3VyZSBvdXIgbWFya2VyIGlzIGluIHRoZSBjb3JyZWN0
IGxvY2F0aW9uLgotICAgIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7Ci0gICAgaWYgKCFtaW5NYXhL
bm93bigpKQotICAgICAgICBSZW5kZXJCbG9jazo6Y2FsY01pbk1heFdpZHRoKCk7CisgICAgQVNT
RVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICAKKyAgICBjb25zdF9jYXN0PFJlbmRlckxpc3RJ
dGVtKj4odGhpcyktPnVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7CisKKyAgICBSZW5kZXJCbG9jazo6
Y2FsY1ByZWZXaWR0aHMoKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6bGF5b3V0KCkKIHsK
LSAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKG1pbk1heEtub3duKCkpOwot
ICAgIAorICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsgCisKICAgICB1cGRhdGVNYXJrZXJMb2Nh
dGlvbigpOyAgICAKICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CiB9CkBAIC0yODUsNyArMjkz
LDcgQEAgY29uc3QgU3RyaW5nJiBSZW5kZXJMaXN0SXRlbTo6bWFya2VyVGV4dAogdm9pZCBSZW5k
ZXJMaXN0SXRlbTo6ZXhwbGljaXRWYWx1ZUNoYW5nZWQoKQogewogICAgIGlmIChtX21hcmtlcikK
LSAgICAgICAgbV9tYXJrZXItPnNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAg
ICAgIG1fbWFya2VyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBO
b2RlKiBsaXN0Tm9kZSA9IGVuY2xvc2luZ0xpc3Qobm9kZSgpKTsKICAgICBSZW5kZXJPYmplY3Qq
IGxpc3RSZW5kZXJlciA9IDA7CiAgICAgaWYgKGxpc3ROb2RlKQpAQCAtMjk2LDcgKzMwNCw3IEBA
IHZvaWQgUmVuZGVyTGlzdEl0ZW06OmV4cGxpY2l0VmFsdWVDaGFuZ2UKICAgICAgICAgICAgIGlm
ICghaXRlbS0+bV9oYXNFeHBsaWNpdFZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaXRlbS0+bV9p
c1ZhbHVlVXBUb0RhdGUgPSBmYWxzZTsKICAgICAgICAgICAgICAgICBpZiAoUmVuZGVyTGlzdE1h
cmtlciogbWFya2VyID0gaXRlbS0+bV9tYXJrZXIpCi0gICAgICAgICAgICAgICAgICAgIG1hcmtl
ci0+c2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgICAgICAgICAgICAg
bWFya2VyLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogfQpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgJKHJldmlzaW9uIDIwOTk3KQorKysg
cmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgdHgsIGlu
dCB0eSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNh
bGNNaW5NYXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogCiAg
ICAgdmlydHVhbCB2b2lkIHBvc2l0aW9uTGlzdE1hcmtlcigpOwogCkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RN
YXJrZXIuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDgyLDggKzQ4Miw4IEBAIFJlbmRlckxpc3RNYXJrZXI6
On5SZW5kZXJMaXN0TWFya2VyKCkKIAogdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpzZXRTdHlsZShS
ZW5kZXJTdHlsZSogcykKIHsKLSAgICBpZiAocyAmJiBzdHlsZSgpICYmIChzLT5saXN0U3R5bGVQ
b3NpdGlvbigpICE9IHN0eWxlKCktPmxpc3RTdHlsZVBvc2l0aW9uKCkgfHwgcy0+bGlzdFN0eWxl
VHlwZSgpICE9IHN0eWxlKCktPmxpc3RTdHlsZVR5cGUoKSkpCi0gICAgICAgIHNldE5lZWRzTGF5
b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgaWYgKHN0eWxlKCkgJiYgKHMtPmxpc3RTdHlsZVBv
c2l0aW9uKCkgIT0gc3R5bGUoKS0+bGlzdFN0eWxlUG9zaXRpb24oKSB8fCBzLT5saXN0U3R5bGVU
eXBlKCkgIT0gc3R5bGUoKS0+bGlzdFN0eWxlVHlwZSgpKSkKKyAgICAgICAgc2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgCiAgICAgUmVuZGVyQm94OjpzZXRTdHlsZShz
KTsKIApAQCAtNjI2LDggKzYyNiwyNSBAQCB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnBhaW50KFBh
aW50SW5mbyYgCiB2b2lkIFJlbmRlckxpc3RNYXJrZXI6OmxheW91dCgpCiB7CiAgICAgQVNTRVJU
KG5lZWRzTGF5b3V0KCkpOwotICAgIGlmICghbWluTWF4S25vd24oKSkKLSAgICAgICAgY2FsY01p
bk1heFdpZHRoKCk7CisgICAgQVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7CisKKyAgICBpZiAo
aXNJbWFnZSgpKSB7CisgICAgICAgIG1fd2lkdGggPSBtX2ltYWdlLT5pbWFnZSgpLT53aWR0aCgp
OworICAgICAgICBtX2hlaWdodCA9IG1faW1hZ2UtPmltYWdlKCktPmhlaWdodCgpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIG1fd2lkdGggPSBtaW5QcmVmV2lkdGgoKTsKKyAgICAgICAgbV9oZWln
aHQgPSBzdHlsZSgpLT5mb250KCkuaGVpZ2h0KCk7CisgICAgfQorCisgICAgbV9tYXJnaW5MZWZ0
ID0gbV9tYXJnaW5SaWdodCA9IDA7CisKKyAgICBMZW5ndGggbGVmdE1hcmdpbiA9IHN0eWxlKCkt
Pm1hcmdpbkxlZnQoKTsKKyAgICBMZW5ndGggcmlnaHRNYXJnaW4gPSBzdHlsZSgpLT5tYXJnaW5S
aWdodCgpOworICAgIGlmIChsZWZ0TWFyZ2luLmlzRml4ZWQoKSkKKyAgICAgICAgbV9tYXJnaW5M
ZWZ0ID0gbGVmdE1hcmdpbi52YWx1ZSgpOworICAgIGlmIChyaWdodE1hcmdpbi5pc0ZpeGVkKCkp
CisgICAgICAgIG1fbWFyZ2luUmlnaHQgPSByaWdodE1hcmdpbi52YWx1ZSgpOworCiAgICAgc2V0
TmVlZHNMYXlvdXQoZmFsc2UpOwogfQogCkBAIC02MzgsMjIgKzY1NSwyMSBAQCB2b2lkIFJlbmRl
ckxpc3RNYXJrZXI6OmltYWdlQ2hhbmdlZChDYWNoCiAgICAgICAgIHJldHVybjsKIAogICAgIGlm
IChtX3dpZHRoICE9IG1faW1hZ2UtPmltYWdlU2l6ZSgpLndpZHRoKCkgfHwgbV9oZWlnaHQgIT0g
bV9pbWFnZS0+aW1hZ2VTaXplKCkuaGVpZ2h0KCkgfHwgbV9pbWFnZS0+ZXJyb3JPY2N1cnJlZCgp
KQotICAgICAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgICAgICBzZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAgICBlbHNlCiAgICAgICAgIHJlcGFp
bnQoKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpjYWxjTWluTWF4V2lkdGgoKQordm9p
ZCBSZW5kZXJMaXN0TWFya2VyOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgQVNTRVJUKCFtaW5N
YXhLbm93bigpKTsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgbV90ZXh0
ID0gIiI7CiAKICAgICBpZiAoaXNJbWFnZSgpKSB7Ci0gICAgICAgIG1fd2lkdGggPSBtX2ltYWdl
LT5pbWFnZSgpLT53aWR0aCgpOwotICAgICAgICBtX2hlaWdodCA9IG1faW1hZ2UtPmltYWdlKCkt
PmhlaWdodCgpOwotICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IG1fd2lkdGg7Ci0g
ICAgICAgIHNldE1pbk1heEtub3duKCk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQ
cmVmV2lkdGggPSBtX2ltYWdlLT5pbWFnZSgpLT53aWR0aCgpOworICAgICAgICBzZXRQcmVmV2lk
dGhzRGlydHkoZmFsc2UpOworICAgICAgICB1cGRhdGVNYXJnaW5zKCk7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CiAKQEAgLTY5OSw4NiArNzE1LDg5IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6
Y2FsY01pbk1heFdpZHRoKCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIG1fd2lk
dGggPSB3aWR0aDsKLSAgICBtX21pbldpZHRoID0gd2lkdGg7Ci0gICAgbV9tYXhXaWR0aCA9IHdp
ZHRoOwotCi0gICAgLy8gRklYTUU6IEEgbGl0dGxlIHN0cmFuZ2UgdG8gc2V0IHRoZSBoZWlnaHQg
aW4gY2FsY01pbk1heFdpZHRoLgotICAgIG1faGVpZ2h0ID0gZm9udC5oZWlnaHQoKTsKKyAgICBt
X21pblByZWZXaWR0aCA9IHdpZHRoOworICAgIG1fbWF4UHJlZldpZHRoID0gd2lkdGg7CiAKLSAg
ICBzZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CisgICAg
CisgICAgdXBkYXRlTWFyZ2lucygpOwogfQogCi12b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNhbGNX
aWR0aCgpCit2b2lkIFJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMoKQogewotICAgIC8v
IG1fd2lkdGggaXMgc2V0IGluIGNhbGNNaW5NYXhXaWR0aCgpCiAgICAgY29uc3QgRm9udCYgZm9u
dCA9IHN0eWxlKCktPmZvbnQoKTsKIAorICAgIGludCBtYXJnaW5MZWZ0ID0gMDsKKyAgICBpbnQg
bWFyZ2luUmlnaHQgPSAwOworCiAgICAgaWYgKGlzSW5zaWRlKCkpIHsKICAgICAgICAgaWYgKGlz
SW1hZ2UoKSkgewogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikg
ewotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAgbV9t
YXJnaW5SaWdodCA9IGNNYXJrZXJQYWRkaW5nOworICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQg
PSAwOworICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gY01hcmtlclBhZGRpbmc7CiAgICAg
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IGNNYXJrZXJQ
YWRkaW5nOwotICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAwOworICAgICAgICAgICAg
ICAgIG1hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKKyAgICAgICAgICAgICAgICBtYXJnaW5S
aWdodCA9IDA7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBzd2l0Y2ggKHN0eWxlKCkt
Pmxpc3RTdHlsZVR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBESVNDOgogICAgICAgICAgICAg
Y2FzZSBDSVJDTEU6CiAgICAgICAgICAgICBjYXNlIFNRVUFSRToKICAgICAgICAgICAgICAgICBp
ZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bWFyZ2luTGVmdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gZm9u
dC5hc2NlbnQoKSAtIG1fd2lkdGggKyAxOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0
ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gZm9udC5hc2NlbnQoKSAt
IG1pblByZWZXaWR0aCgpICsgMTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBmb250LmFzY2VudCgpIC0gbV93aWR0aCArIDE7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAtMTsKKyAgICAgICAgICAgICAgICAg
ICAgbWFyZ2luTGVmdCA9IGZvbnQuYXNjZW50KCkgLSBtaW5QcmVmV2lkdGgoKSArIDE7CisgICAg
ICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gLTE7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBtX21hcmdpbkxlZnQgPSAwOwotICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAwOwor
ICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAwOworICAgICAgICAgICAgICAgIG1hcmdpblJp
Z2h0ID0gMDsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChzdHlsZSgpLT5k
aXJlY3Rpb24oKSA9PSBMVFIpIHsKICAgICAgICAgICAgIGlmIChpc0ltYWdlKCkpCi0gICAgICAg
ICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gLW1fd2lkdGggLSBjTWFya2VyUGFkZGluZzsKKyAgICAg
ICAgICAgICAgICBtYXJnaW5MZWZ0ID0gLW1pblByZWZXaWR0aCgpIC0gY01hcmtlclBhZGRpbmc7
CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBpbnQgb2Zmc2V0ID0gZm9udC5h
c2NlbnQoKSAqIDIgLyAzOwogICAgICAgICAgICAgICAgIHN3aXRjaCAoc3R5bGUoKS0+bGlzdFN0
eWxlVHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgRElTQzoKICAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDSVJDTEU6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU1FVQVJFOgot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gLW9mZnNldCAtIGNNYXJrZXJQ
YWRkaW5nIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAtb2Zmc2V0
IC0gY01hcmtlclBhZGRpbmcgLSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICAgICAgICAgIGNhc2UgTE5PTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X21hcmdpbkxlZnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IDA7
CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1fdGV4dC5pc0Vt
cHR5KCkgPyAwIDogLW1fd2lkdGggLSBvZmZzZXQgLyAyOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWFyZ2luTGVmdCA9IG1fdGV4dC5pc0VtcHR5KCkgPyAwIDogLW1pblByZWZXaWR0aCgpIC0g
b2Zmc2V0IC8gMjsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXNJbWFnZSgpKQotICAgICAgICAgICAgICAgIG1fbWFy
Z2luTGVmdCA9IGNNYXJrZXJQYWRkaW5nOworICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBj
TWFya2VyUGFkZGluZzsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSBmb250LmFzY2VudCgpICogMiAvIDM7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChz
dHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBESVND
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIENJUkNMRToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBvZmZz
ZXQgKyBjTWFya2VyUGFkZGluZyArIDEgLSBtX3dpZHRoOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWFyZ2luTGVmdCA9IG9mZnNldCArIGNNYXJrZXJQYWRkaW5nICsgMSAtIG1pblByZWZXaWR0
aCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAg
IGNhc2UgTE5PTkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwor
ICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IDA7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IG1fdGV4dC5pc0VtcHR5KCkgPyAwIDogb2Zmc2V0
IC8gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBtX3RleHQuaXNFbXB0
eSgpID8gMCA6IG9mZnNldCAvIDI7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
ICAgICAgICB9Ci0gICAgICAgIG1fbWFyZ2luUmlnaHQgPSAtbV9tYXJnaW5MZWZ0IC0gbV93aWR0
aDsKKyAgICAgICAgbWFyZ2luUmlnaHQgPSAtbWFyZ2luTGVmdCAtIG1pblByZWZXaWR0aCgpOwog
ICAgIH0KKyAgICAKKyAgICBzdHlsZSgpLT5zZXRNYXJnaW5MZWZ0KExlbmd0aChtYXJnaW5MZWZ0
LCBGaXhlZCkpOworICAgIHN0eWxlKCktPnNldE1hcmdpblJpZ2h0KExlbmd0aChtYXJnaW5SaWdo
dCwgRml4ZWQpKTsKIH0KIAogc2hvcnQgUmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29s
LCBib29sKSBjb25zdApJbmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCShyZXZpc2lvbiAyMDk5NykKKysr
IHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDEyICs0
NywxMCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKLSAgICB2aXJ0dWFsIHZv
aWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7
CiAKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKik7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7Ci0KICAgICB2aXJ0dWFsIElubGluZUJveCogY3JlYXRl
SW5saW5lQm94KGJvb2wsIGJvb2wsIGJvb2wpOwogCiAgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVp
Z2h0KGJvb2wgZmlyc3RMaW5lLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CkBA
IC02OSwxMCArNjcsMTIgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSW50UmVjdCBzZWxlY3Rpb25S
ZWN0KCk7CiAgICAgdmlydHVhbCBib29sIGNhbkJlU2VsZWN0aW9uTGVhZigpIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KIAorICAgIHZvaWQgdXBkYXRlTWFyZ2lucygpOworCiBwcml2YXRlOgogICAg
IEludFJlY3QgZ2V0UmVsYXRpdmVNYXJrZXJSZWN0KCk7CiAKLSAgICBTdHJpbmcgbV90ZXh0Owor
ICAgIG11dGFibGUgU3RyaW5nIG1fdGV4dDsKICAgICBDYWNoZWRJbWFnZSogbV9pbWFnZTsKICAg
ICBSZW5kZXJMaXN0SXRlbSogbV9saXN0SXRlbTsKICAgICBTZWxlY3Rpb25TdGF0ZSBtX3NlbGVj
dGlvblN0YXRlOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyTWVudUxpc3QuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJl
bmRlcmluZy9SZW5kZXJNZW51TGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCw3ICsxMzAs
NyBAQCB2b2lkIFJlbmRlck1lbnVMaXN0Ojp1cGRhdGVPcHRpb25zV2lkdGgoCiAgICAgICAgIHJl
dHVybjsKIAogICAgIG1fb3B0aW9uc1dpZHRoID0gd2lkdGg7Ci0gICAgc2V0TmVlZHNMYXlvdXRB
bmRNaW5NYXhSZWNhbGMoKTsKKyAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMo
KTsKIH0KIAogdm9pZCBSZW5kZXJNZW51TGlzdDo6dXBkYXRlRnJvbUVsZW1lbnQoKQpAQCAtMTk4
LDM0ICsxOTgsMzQgQEAgSW50UmVjdCBSZW5kZXJNZW51TGlzdDo6Y29udHJvbENsaXBSZWN0KAog
ICAgICAgICAgICAgICAgICAgIGNvbnRlbnRXaWR0aCgpLCBjb250ZW50SGVpZ2h0KCkpOwogfQog
Ci12b2lkIFJlbmRlck1lbnVMaXN0OjpjYWxjTWluTWF4V2lkdGgoKQordm9pZCBSZW5kZXJNZW51
TGlzdDo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIG1fbWluV2lkdGggPSAwOwotICAgIG1fbWF4
V2lkdGggPSAwOworICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAgICBtX21heFByZWZXaWR0aCA9
IDA7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lk
dGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGggPSBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgICAgIG1fbWlu
UHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCkt
PndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxzZQotICAgICAgICBtX21heFdpZHRoID0gbWF4KG1f
b3B0aW9uc1dpZHRoLCB0aGVtZSgpLT5taW5pbXVtTWVudUxpc3RTaXplKHN0eWxlKCkpKTsKKyAg
ICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9vcHRpb25zV2lkdGgsIHRoZW1lKCktPm1pbmlt
dW1NZW51TGlzdFNpemUoc3R5bGUoKSkpOwogCiAgICAgaWYgKHN0eWxlKCktPm1pbldpZHRoKCku
aXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKLSAgICAgICAg
bV9tYXhXaWR0aCA9IG1heChtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCkt
Pm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWF4KG1fbWluV2lk
dGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7Cisg
ICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJv
eFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZX
aWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5t
aW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9IGVsc2UgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNQ
ZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkgJiYgc3R5bGUoKS0+aGVpZ2h0
KCkuaXNQZXJjZW50KCkpKQotICAgICAgICBtX21pbldpZHRoID0gMDsKKyAgICAgICAgbV9taW5Q
cmVmV2lkdGggPSAwOwogICAgIGVsc2UKLSAgICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGg7
CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGg7CiAKICAgICBpZiAoc3R5
bGUoKS0+bWF4V2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgp
ICE9IHVuZGVmaW5lZExlbmd0aCkgewotICAgICAgICBtX21heFdpZHRoID0gbWluKG1fbWF4V2lk
dGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7Ci0g
ICAgICAgIG1fbWluV2lkdGggPSBtaW4obV9taW5XaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBt
aW4obV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgo
KS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWluKG1fbWluUHJlZldpZHRo
LCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwogICAg
IH0KIAogICAgIGludCB0b0FkZCA9IHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSArIGJv
cmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7Ci0gICAgbV9taW5XaWR0aCArPSB0b0FkZDsKLSAg
ICBtX21heFdpZHRoICs9IHRvQWRkOworICAgIG1fbWluUHJlZldpZHRoICs9IHRvQWRkOworICAg
IG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOwogCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBz
ZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiB2b2lkIFJlbmRlck1lbnVMaXN0OjpzaG93
UG9wdXAoKQpJbmRleDogcmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlck1lbnVMaXN0LmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5n
L1JlbmRlck1lbnVMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcgKzU3LDcgQEAgcHVibGlj
OgogCiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgeyByZXR1cm4g
IlJlbmRlck1lbnVMaXN0IjsgfQogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgp
OworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogCiAgICAgYm9vbCBwb3B1cElz
VmlzaWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fcG9wdXBJc1Zpc2libGU7IH0KICAgICB2b2lkIHNo
b3dQb3B1cCgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3NiwxNyArMTc2LDE3IEBA
IFJlbmRlck9iamVjdDo6UmVuZGVyT2JqZWN0KE5vZGUqIG5vZGUpCiAgICAgLCBtX25lZWRzTGF5
b3V0KGZhbHNlKQogICAgICwgbV9ub3JtYWxDaGlsZE5lZWRzTGF5b3V0KGZhbHNlKQogICAgICwg
bV9wb3NDaGlsZE5lZWRzTGF5b3V0KGZhbHNlKQotICAgICwgbV9taW5NYXhLbm93bihmYWxzZSkK
KyAgICAsIG1fcHJlZldpZHRoc0RpcnR5KGZhbHNlKQogICAgICwgbV9mbG9hdGluZyhmYWxzZSkK
ICAgICAsIG1fcG9zaXRpb25lZChmYWxzZSkKICAgICAsIG1fcmVsUG9zaXRpb25lZChmYWxzZSkK
ICAgICAsIG1fcGFpbnRCYWNrZ3JvdW5kKGZhbHNlKQogICAgICwgbV9pc0Fub255bW91cyhub2Rl
ID09IG5vZGUtPmRvY3VtZW50KCkpCi0gICAgLCBtX3JlY2FsY01pbk1heChmYWxzZSkKICAgICAs
IG1faXNUZXh0KGZhbHNlKQogICAgICwgbV9pbmxpbmUodHJ1ZSkKICAgICAsIG1fcmVwbGFjZWQo
ZmFsc2UpCiAgICAgLCBtX2lzRHJhZ2dpbmcoZmFsc2UpCisgICAgLCBtX2hhc0xheWVyKGZhbHNl
KQogICAgICwgbV9oYXNPdmVyZmxvd0NsaXAoZmFsc2UpCiAgICAgLCBtX2hhc092ZXJyaWRlU2l6
ZShmYWxzZSkKICAgICAsIG1faGFzQ291bnRlck5vZGVNYXAoZmFsc2UpCkBAIC0yNTIsNyArMjUy
LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmFkZENoaWxkKFJlbmRlck9iamVjdAogICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogfQogCi1SZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6cmVtb3Zl
Q2hpbGROb2RlKFJlbmRlck9iamVjdCopCitSZW5kZXJPYmplY3QqIFJlbmRlck9iamVjdDo6cmVt
b3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCosIGJvb2wpCiB7CiAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgcmV0dXJuIDA7CkBAIC0yNjMsMTIgKzI2MywxNyBAQCB2b2lkIFJlbmRlck9i
amVjdDo6cmVtb3ZlQ2hpbGQoUmVuZGVyT2JqCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiB9
CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjphcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KikKK3Zv
aWQgUmVuZGVyT2JqZWN0Ojptb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCopCiB7CiAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjppbnNlcnRDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiwgUmVuZGVyT2JqZWN0KikKK3ZvaWQgUmVuZGVyT2JqZWN0OjphcHBl
bmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCkKK3sKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBSZW5kZXJPYmplY3Q6Omluc2VydENoaWxkTm9kZShSZW5kZXJPYmpl
Y3QqLCBSZW5kZXJPYmplY3QqLCBib29sKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQpAQCAtMzg1LDcgKzM5MCw3IEBAIFJlbmRlck9iamVjdCogUmVuZGVyT2JqZWN0OjpsYXN0TGVh
ZkNoaWwKIHN0YXRpYyB2b2lkIGFkZExheWVycyhSZW5kZXJPYmplY3QqIG9iaiwgUmVuZGVyTGF5
ZXIqIHBhcmVudExheWVyLCBSZW5kZXJPYmplY3QqJiBuZXdPYmplY3QsCiAgICAgICAgICAgICAg
ICAgICAgICAgUmVuZGVyTGF5ZXIqJiBiZWZvcmVDaGlsZCkKIHsKLSAgICBpZiAob2JqLT5sYXll
cigpKSB7CisgICAgaWYgKG9iai0+aGFzTGF5ZXIoKSkgewogICAgICAgICBpZiAoIWJlZm9yZUNo
aWxkICYmIG5ld09iamVjdCkgewogICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBmaWd1cmUgb3V0
IHRoZSBsYXllciB0aGF0IGZvbGxvd3MgbmV3T2JqZWN0LiAgV2Ugb25seSBkbwogICAgICAgICAg
ICAgLy8gdGhpcyB0aGUgZmlyc3QgdGltZSB3ZSBmaW5kIGEgY2hpbGQgbGF5ZXIsIGFuZCB0aGVu
IHdlIHVwZGF0ZSB0aGUKQEAgLTQxNiw3ICs0MjEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6cmVt
b3ZlTGF5ZXJzKFJlbmRlckxhCiAgICAgaWYgKCFwYXJlbnRMYXllcikKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKGxheWVyKCkpIHsKKyAgICBpZiAoaGFzTGF5ZXIoKSkgewogICAgICAgICBw
YXJlbnRMYXllci0+cmVtb3ZlQ2hpbGQobGF5ZXIoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CkBAIC00MzAsNyArNDM1LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6Om1vdmVMYXllcnMoUmVuZGVy
TGF5ZQogICAgIGlmICghbmV3UGFyZW50KQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobGF5
ZXIoKSkgeworICAgIGlmIChoYXNMYXllcigpKSB7CiAgICAgICAgIGlmIChvbGRQYXJlbnQpCiAg
ICAgICAgICAgICBvbGRQYXJlbnQtPnJlbW92ZUNoaWxkKGxheWVyKCkpOwogICAgICAgICBuZXdQ
YXJlbnQtPmFkZENoaWxkKGxheWVyKCkpOwpAQCAtNDk5LDEwICs1MDQsNiBAQCBSZW5kZXJCbG9j
ayogUmVuZGVyT2JqZWN0OjpmaXJzdExpbmVCbG9jCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQg
UmVuZGVyT2JqZWN0Ojp1cGRhdGVGaXJzdExldHRlcigpCi17Ci19Ci0KIGludCBSZW5kZXJPYmpl
Y3Q6Om9mZnNldExlZnQoKSBjb25zdAogewogICAgIFJlbmRlck9iamVjdCogb2Zmc2V0UGFyID0g
b2Zmc2V0UGFyZW50KCk7CkBAIC02NTQsNiArNjU1LDI5IEBAIHZvaWQgUmVuZGVyT2JqZWN0Ojpt
YXJrQWxsRGVzY2VuZGFudHNXaXQKIHsKIH0KIAordm9pZCBSZW5kZXJPYmplY3Q6OnNldFByZWZX
aWR0aHNEaXJ0eShib29sIGIsIGJvb2wgbWFya1BhcmVudHMpCit7CisgICAgYm9vbCBwcmVmV2lk
dGhzRGlydHkgPSBtX3ByZWZXaWR0aHNEaXJ0eTsKKyAgICBtX3ByZWZXaWR0aHNEaXJ0eSA9IGI7
CisgICAgaWYgKGIpIHsKKyAgICAgICAgaWYgKCFwcmVmV2lkdGhzRGlydHkgJiYgbWFya1BhcmVu
dHMgJiYgKHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbiAmJiBzdHlsZSgpLT5w
b3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24pKQorICAgICAgICAgICAgaW52YWxpZGF0ZUNv
bnRhaW5pbmdCbG9ja1ByZWZXaWR0aHMoKTsKKyAgICB9Cit9CisKK3ZvaWQgUmVuZGVyT2JqZWN0
OjppbnZhbGlkYXRlQ29udGFpbmluZ0Jsb2NrUHJlZldpZHRocygpCit7CisgICAgUmVuZGVyT2Jq
ZWN0KiBvID0gY29udGFpbmluZ0Jsb2NrKCk7CisgICAgd2hpbGUgKG8gJiYgIW8tPm1fcHJlZldp
ZHRoc0RpcnR5KSB7CisgICAgICAgIG8tPm1fcHJlZldpZHRoc0RpcnR5ID0gdHJ1ZTsKKyAgICAg
ICAgaWYgKG8tPnN0eWxlKCktPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbiB8fCBvLT5zdHls
ZSgpLT5wb3NpdGlvbigpID09IEFic29sdXRlUG9zaXRpb24pCisgICAgICAgICAgICAvLyBBIHBv
c2l0aW9uZWQgb2JqZWN0IGhhcyBubyBlZmZlY3Qgb24gdGhlIG1pbi9tYXggd2lkdGggb2YgaXRz
IGNvbnRhaW5pbmcgYmxvY2sgZXZlci4gIFdlIGNhbiBvcHRpbWl6ZSB0aGlzCisgICAgICAgICAg
ICAvLyBjYXNlIGFuZCBubyBnbyB1cCBhbnkgZnVydGhlci4KKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBvID0gby0+Y29udGFpbmluZ0Jsb2NrKCk7CisgICAgfQorfQorCiB2b2lkIFJlbmRl
ck9iamVjdDo6c2V0TmVlZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzKQogewogICAg
IGJvb2wgYWxyZWFkeU5lZWRlZExheW91dCA9IG1fbmVlZHNMYXlvdXQ7CkBAIC03MTAsOCArNzM0
LDEyIEBAIHZvaWQgUmVuZGVyT2JqZWN0OjptYXJrQ29udGFpbmluZ0Jsb2Nrc0YKIAogUmVuZGVy
QmxvY2sqIFJlbmRlck9iamVjdDo6Y29udGFpbmluZ0Jsb2NrKCkgY29uc3QKIHsKLSAgICBpZiAo
aXNUYWJsZUNlbGwoKSkKLSAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRh
YmxlQ2VsbCo+KHRoaXMpLT50YWJsZSgpOworICAgIGlmIChpc1RhYmxlQ2VsbCgpKSB7CisgICAg
ICAgIGlmIChwYXJlbnQoKSkKKyAgICAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJUYWJsZUNlbGwqPih0aGlzKS0+dGFibGUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCiAgICAgaWYgKGlzUmVuZGVyVmlldygpKQogICAgICAgICByZXR1cm4gKFJlbmRlckJsb2Nr
Kil0aGlzOwogCkBAIC0xNjAxLDcgKzE2MjksNyBAQCBJbnRSZWN0IFJlbmRlck9iamVjdDo6YWJz
b2x1dGVCb3VuZGluZ0JvCiAKIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRBYnNvbHV0ZVJlY3RGb3JM
YXllcihJbnRSZWN0JiByZXN1bHQpCiB7Ci0gICAgaWYgKGxheWVyKCkpCisgICAgaWYgKGhhc0xh
eWVyKCkpCiAgICAgICAgIHJlc3VsdC51bml0ZShhYnNvbHV0ZUJvdW5kaW5nQm94UmVjdCgpKTsK
ICAgICBmb3IgKFJlbmRlck9iamVjdCogY3VycmVudCA9IGZpcnN0Q2hpbGQoKTsgY3VycmVudDsg
Y3VycmVudCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCkpCiAgICAgICAgIGN1cnJlbnQtPmFkZEFi
c29sdXRlUmVjdEZvckxheWVyKHJlc3VsdCk7CkBAIC0xODM0LDcgKzE4NjIsNyBAQCB2b2lkIFJl
bmRlck9iamVjdDo6cmVwYWludE92ZXJoYW5naW5nRmxvCiAKIGJvb2wgUmVuZGVyT2JqZWN0Ojpj
aGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSBjb25zdAogewotICAgIHJldHVybiAhZG9jdW1l
bnQoKS0+dmlldygpLT5uZWVkc0Z1bGxSZXBhaW50KCkgJiYgIWxheWVyKCk7CisgICAgcmV0dXJu
ICFkb2N1bWVudCgpLT52aWV3KCktPm5lZWRzRnVsbFJlcGFpbnQoKSAmJiAhaGFzTGF5ZXIoKTsK
IH0KIAogdm9pZCBSZW5kZXJPYmplY3Q6OnJlcGFpbnRPYmplY3RzQmVmb3JlTGF5b3V0KCkKQEAg
LTE5MTMsOCArMTk0MSw2IEBAIERlcHJlY2F0ZWRTdHJpbmcgUmVuZGVyT2JqZWN0OjppbmZvcm1h
dGkKICAgICAgICAgdHMgPDwgInBzICI7CiAgICAgaWYgKG5lZWRzTGF5b3V0KCkpCiAgICAgICAg
IHRzIDw8ICJubCAiOwotICAgIGlmIChtX3JlY2FsY01pbk1heCkKLSAgICAgICAgdHMgPDwgInJt
bSAiOwogICAgIGlmIChzdHlsZSgpICYmIHN0eWxlKCktPnpJbmRleCgpKQogICAgICAgICB0cyA8
PCAiekk6ICIgPDwgc3R5bGUoKS0+ekluZGV4KCk7CiAgICAgaWYgKGVsZW1lbnQoKSkgewpAQCAt
MTk1NCw4ICsxOTgwLDggQEAgdm9pZCBSZW5kZXJPYmplY3Q6OmR1bXAoVGV4dFN0cmVhbSogc3Ry
ZQogICAgICAgICAqc3RyZWFtIDw8ICIgcGFpbnRCYWNrZ3JvdW5kIjsKICAgICBpZiAobmVlZHNM
YXlvdXQoKSkKICAgICAgICAgKnN0cmVhbSA8PCAiIG5lZWRzTGF5b3V0IjsKLSAgICBpZiAobWlu
TWF4S25vd24oKSkKLSAgICAgICAgKnN0cmVhbSA8PCAiIG1pbk1heEtub3duIjsKKyAgICBpZiAo
cHJlZldpZHRoc0RpcnR5KCkpCisgICAgICAgICpzdHJlYW0gPDwgIiBwcmVmV2lkdGhzRGlydHki
OwogICAgICpzdHJlYW0gPDwgZW5kbDsKIAogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJz
dENoaWxkKCk7CkBAIC0yMTQxLDcgKzIxNjcsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5
bGUoUmVuZGVyU3R5bGUqCiAKICAgICAgICAgICAgIGlmICgobV9zdHlsZS0+aGFzQXV0b1pJbmRl
eCgpICE9IHN0eWxlLT5oYXNBdXRvWkluZGV4KCkgfHwKICAgICAgICAgICAgICAgICAgICAgbV9z
dHlsZS0+ekluZGV4KCkgIT0gc3R5bGUtPnpJbmRleCgpIHx8Ci0gICAgICAgICAgICAgICAgICAg
IG1fc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBzdHlsZS0+dmlzaWJpbGl0eSgpKSAmJiBsYXllcigp
KSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBzdHlsZS0+
dmlzaWJpbGl0eSgpKSAmJiBoYXNMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgbGF5ZXIoKS0+
c3RhY2tpbmdDb250ZXh0KCktPmRpcnR5Wk9yZGVyTGlzdHMoKTsKICAgICAgICAgICAgICAgICBp
ZiAobV9zdHlsZS0+aGFzQXV0b1pJbmRleCgpICE9IHN0eWxlLT5oYXNBdXRvWkluZGV4KCkgfHwK
ICAgICAgICAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBzdHlsZS0+
dmlzaWJpbGl0eSgpKQpAQCAtMjE2MSw3ICsyMTg3LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNl
dFN0eWxlKFJlbmRlclN0eWxlKgogICAgICAgICBkID0gbV9zdHlsZS0+ZGlmZihzdHlsZSk7CiAK
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBsYXllcigpLCBqdXN0IHRyZWF0IGEgUmVwYWludExh
eWVyIGhpbnQgYXMgYSBub3JtYWwgUmVwYWludC4KLSAgICAgICAgaWYgKGQgPT0gUmVuZGVyU3R5
bGU6OlJlcGFpbnRMYXllciAmJiAhbGF5ZXIoKSkKKyAgICAgICAgaWYgKGQgPT0gUmVuZGVyU3R5
bGU6OlJlcGFpbnRMYXllciAmJiAhaGFzTGF5ZXIoKSkKICAgICAgICAgICAgIGQgPSBSZW5kZXJT
dHlsZTo6UmVwYWludDsKIAogICAgICAgICAvLyBUaGUgYmFja2dyb3VuZCBvZiB0aGUgcm9vdCBl
bGVtZW50IG9yIHRoZSBib2R5IGVsZW1lbnQgY291bGQgcHJvcGFnYXRlIHVwIHRvCkBAIC0yMTgy
LDcgKzIyMDgsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqCiAK
ICAgICAgICAgLy8gV2hlbiBhIGxheW91dCBoaW50IGhhcHBlbnMsIHdlIGdvIGFoZWFkIGFuZCBk
byBhIHJlcGFpbnQgb2YgdGhlIGxheWVyLCBzaW5jZSB0aGUgbGF5ZXIgY291bGQKICAgICAgICAg
Ly8gZW5kIHVwIGJlaW5nIGRlc3Ryb3llZC4KLSAgICAgICAgaWYgKGQgPT0gUmVuZGVyU3R5bGU6
OkxheW91dCAmJiBsYXllcigpICYmCisgICAgICAgIGlmIChkID09IFJlbmRlclN0eWxlOjpMYXlv
dXQgJiYgaGFzTGF5ZXIoKSAmJgogICAgICAgICAgICAgICAgIChtX3N0eWxlLT5wb3NpdGlvbigp
ICE9IHN0eWxlLT5wb3NpdGlvbigpIHx8CiAgICAgICAgICAgICAgICAgIG1fc3R5bGUtPnpJbmRl
eCgpICE9IHN0eWxlLT56SW5kZXgoKSB8fAogICAgICAgICAgICAgICAgICBtX3N0eWxlLT5oYXNB
dXRvWkluZGV4KCkgIT0gc3R5bGUtPmhhc0F1dG9aSW5kZXgoKSB8fApAQCAtMjIzNyw2ICsyMjYz
LDcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnNldFN0eWxlKFJlbmRlclN0eWxlKgogICAgICAgICBt
X3JlbFBvc2l0aW9uZWQgPSBmYWxzZTsKICAgICAgICAgbV9wYWludEJhY2tncm91bmQgPSBmYWxz
ZTsKICAgICAgICAgbV9oYXNPdmVyZmxvd0NsaXAgPSBmYWxzZTsKKyAgICAgICAgbV9oYXNMYXll
ciA9IGZhbHNlOwogICAgIH0KIAogICAgIGlmICh2aWV3KCktPmZyYW1lVmlldygpKSB7CkBAIC0y
MjczLDcgKzIzMDAsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0U3R5bGUoUmVuZGVyU3R5bGUq
CiAgICAgLy8gV2UgZG8gaGF2ZSB0byBzY2hlZHVsZSBsYXlvdXRzLCB0aG91Z2gsIHNpbmNlIGEg
c3R5bGUgY2hhbmdlIGNhbiBmb3JjZSB1cyB0bwogICAgIC8vIG5lZWQgdG8gcmVsYXlvdXQuCiAg
ICAgaWYgKGQgPT0gUmVuZGVyU3R5bGU6OkxheW91dCAmJiBtX3BhcmVudCkKLSAgICAgICAgc2V0
TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQ
cmVmV2lkdGhzUmVjYWxjKCk7CiAgICAgZWxzZSBpZiAobV9wYXJlbnQgJiYgIWlzVGV4dCgpICYm
IChkID09IFJlbmRlclN0eWxlOjpSZXBhaW50TGF5ZXIgfHwgZCA9PSBSZW5kZXJTdHlsZTo6UmVw
YWludCkpCiAgICAgICAgIC8vIERvIGEgcmVwYWludCB3aXRoIHRoZSBuZXcgc3R5bGUgbm93LCBl
LmcuLCBmb3IgZXhhbXBsZSBpZiB3ZSBnbyBmcm9tCiAgICAgICAgIC8vIG5vdCBoYXZpbmcgYW4g
b3V0bGluZSB0byBoYXZpbmcgYW4gb3V0bGluZS4KQEAgLTI0OTIsNyArMjUxOSw4IEBAIHZvaWQg
UmVuZGVyT2JqZWN0OjpkZXN0cm95KCkKICAgICBpZiAobV9oYXNDb3VudGVyTm9kZU1hcCkKICAg
ICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2Rlcyh0aGlzKTsKIAotICAgIGRv
Y3VtZW50KCktPmF4T2JqZWN0Q2FjaGUoKS0+cmVtb3ZlKHRoaXMpOworICAgIGlmIChBWE9iamVj
dENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxlZCgpKQorICAgICAgICBkb2N1bWVudCgpLT5heE9i
amVjdENhY2hlKCktPnJlbW92ZSh0aGlzKTsKIAogICAgIC8vIEJ5IGRlZmF1bHQgbm8gcmVmLWNv
dW50aW5nLiBSZW5kZXJXaWRnZXQ6OmRlc3Ryb3koKSBkb2Vzbid0IGNhbGwKICAgICAvLyB0aGlz
IGZ1bmN0aW9uIGJlY2F1c2UgaXQgbmVlZHMgdG8gZG8gcmVmLWNvdW50aW5nLiBJZiBhbnl0aGlu
ZwpAQCAtMjcwMSw0MiArMjcyOSw2IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjppbnZhbGlkYXRlVmVy
dGljYWxQb3MKICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyT2JqZWN0OjpyZWNhbGNNaW5NYXhXaWR0
aHMoKQotewotICAgIEFTU0VSVChtX3JlY2FsY01pbk1heCk7Ci0KLSAgICBtX3JlY2FsY01pbk1h
eCA9IGZhbHNlOwotICAgIHVwZGF0ZUZpcnN0TGV0dGVyKCk7Ci0KLSAgICBSZW5kZXJPYmplY3Qq
IGNoaWxkID0gZmlyc3RDaGlsZCgpOwotICAgIHdoaWxlIChjaGlsZCkgewotICAgICAgICBpbnQg
Y21pbiA9IDA7Ci0gICAgICAgIGludCBjbWF4ID0gMDsKLSAgICAgICAgYm9vbCB0ZXN0ID0gZmFs
c2U7Ci0gICAgICAgIGlmICgobV9taW5NYXhLbm93biAmJiBjaGlsZC0+bV9yZWNhbGNNaW5NYXgp
IHx8ICFjaGlsZC0+bV9taW5NYXhLbm93bikgewotICAgICAgICAgICAgY21pbiA9IGNoaWxkLT5t
aW5XaWR0aCgpOwotICAgICAgICAgICAgY21heCA9IGNoaWxkLT5tYXhXaWR0aCgpOwotICAgICAg
ICAgICAgdGVzdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkLT5tX3JlY2Fs
Y01pbk1heCkKLSAgICAgICAgICAgIGNoaWxkLT5yZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICAg
ICAgaWYgKCFjaGlsZC0+bV9taW5NYXhLbm93bikKLSAgICAgICAgICAgIGNoaWxkLT5jYWxjTWlu
TWF4V2lkdGgoKTsKLSAgICAgICAgaWYgKG1fbWluTWF4S25vd24gJiYgdGVzdCAmJiAoY21pbiAh
PSBjaGlsZC0+bWluV2lkdGgoKSB8fCBjbWF4ICE9IGNoaWxkLT5tYXhXaWR0aCgpKSkKLSAgICAg
ICAgICAgIG1fbWluTWF4S25vd24gPSBmYWxzZTsKLSAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyB3ZSBuZWVkIHRvIHJlY2FsY3VsYXRlLCBpZiB0
aGUgY29udGFpbnMgaW5saW5lIGNoaWxkcmVuLCBhcyB0aGUgY2hhbmdlIGNvdWxkIGhhdmUKLSAg
ICAvLyBoYXBwZW5lZCBzb21ld2hlcmUgZGVlcCBpbnNpZGUgdGhlIGNoaWxkIHRyZWUuIEFsc28g
ZG8gdGhpcyBmb3IgYmxvY2tzIG9yIHRhYmxlcyB0aGF0Ci0gICAgLy8gYXJlIGlubGluZSAoaS5l
LiwgaW5saW5lLWJsb2NrIGFuZCBpbmxpbmUtdGFibGUpLgotICAgIGlmICgoIWlzSW5saW5lKCkg
fHwgaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSkgJiYgY2hpbGRyZW5JbmxpbmUoKSkKLSAg
ICAgICAgbV9taW5NYXhLbm93biA9IGZhbHNlOwotCi0gICAgaWYgKCFtX21pbk1heEtub3duKQot
ICAgICAgICBjYWxjTWluTWF4V2lkdGgoKTsKLX0KLQogdm9pZCBSZW5kZXJPYmplY3Q6OnNjaGVk
dWxlUmVsYXlvdXQoKQogewogICAgIGlmIChpc1JlbmRlclZpZXcoKSkgewpJbmRleDogcmVuZGVy
aW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTE3Niw3ICsxNzYsNiBAQCBwdWJsaWM6CiAgICAgLy8gT2J0YWlucyB0aGUgbmVh
cmVzdCBlbmNsb3NpbmcgYmxvY2sgKGluY2x1ZGluZyB0aGlzIGJsb2NrKSB0aGF0IGNvbnRyaWJ1
dGVzIGEgZmlyc3QtbGluZSBzdHlsZSB0byBvdXIgaW5saW5lCiAgICAgLy8gY2hpbGRyZW4uCiAg
ICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2soKSBjb25zdDsKLSAgICB2aXJ0
dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKIAogICAgIC8vIENhbGxlZCB3aGVuIGFuIG9i
amVjdCB0aGF0IHdhcyBmbG9hdGluZyBvciBwb3NpdGlvbmVkIGJlY29tZXMgYSBub3JtYWwgZmxv
dyBvYmplY3QKICAgICAvLyBhZ2Fpbi4gIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRoZSByZW5kZXIg
dHJlZSB1cGRhdGVzIGFzIG5lZWRlZCB0byBhY2NvbW1vZGF0ZSB0aGUgbmV3CkBAIC0yMDUsOSAr
MjA0LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGJvb2wgY3JlYXRlc0Fub255bW91c1dyYXBw
ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgLy8gcmF3IHRyZWUgbWFuaXB1bGF0
aW9uCi0gICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIHJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmpl
Y3QqKTsKLSAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwot
ICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVu
ZGVyT2JqZWN0KiBiZWZvcmUpOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGls
ZE5vZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsUmVtb3ZlID0gdHJ1ZSk7CisgICAgdmlydHVh
bCB2b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqLCBib29sIGZ1bGxBcHBlbmQgPSB0
cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hp
bGQsIFJlbmRlck9iamVjdCogYmVmb3JlLCBib29sIGZ1bGxJbnNlcnQgPSB0cnVlKTsKKyAgICAv
LyBEZXNpZ25lZCBmb3Igc3BlZWQuICBEb24ndCB3YXN0ZSB0aW1lIGRvaW5nIGEgYnVuY2ggb2Yg
d29yayBsaWtlIGxheWVyIHVwZGF0aW5nIGFuZCByZXBhaW50aW5nIHdoZW4gd2Uga25vdyB0aGF0
IG91cgorICAgIC8vIGNoYW5nZSBpbiBwYXJlbnRhZ2UgaXMgbm90IGdvaW5nIHRvIGFmZmVjdCBh
bnl0aGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqKTsK
ICAgICAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KIAogcHJvdGVj
dGVkOgpAQCAtMzA5LDcgKzMxMSw5IEBAIHB1YmxpYzoKICAgICBib29sIGlzUnVuSW4oKSBjb25z
dCB7IHJldHVybiBzdHlsZSgpLT5kaXNwbGF5KCkgPT0gUlVOX0lOOyB9IC8vIHJ1bi1pbiBvYmpl
Y3QKICAgICBib29sIGlzRHJhZ2dpbmcoKSBjb25zdCB7IHJldHVybiBtX2lzRHJhZ2dpbmc7IH0K
ICAgICBib29sIGlzUmVwbGFjZWQoKSBjb25zdCB7IHJldHVybiBtX3JlcGxhY2VkOyB9IC8vIGEg
InJlcGxhY2VkIiBlbGVtZW50IChzZWUgQ1NTKQotCisgICAgCisgICAgYm9vbCBoYXNMYXllcigp
IGNvbnN0IHsgcmV0dXJuIG1faGFzTGF5ZXI7IH0KKyAgICAKICAgICBib29sIGhhc0JveERlY29y
YXRpb25zKCkgY29uc3QgeyByZXR1cm4gbV9wYWludEJhY2tncm91bmQ7IH0KICAgICBib29sIG11
c3RSZXBhaW50QmFja2dyb3VuZE9yQm9yZGVyKCkgY29uc3Q7CiAKQEAgLTMxOCw4ICszMjIsNyBA
QCBwdWJsaWM6CiAgICAgYm9vbCBwb3NDaGlsZE5lZWRzTGF5b3V0KCkgY29uc3QgeyByZXR1cm4g
bV9wb3NDaGlsZE5lZWRzTGF5b3V0OyB9CiAgICAgYm9vbCBub3JtYWxDaGlsZE5lZWRzTGF5b3V0
KCkgY29uc3QgeyByZXR1cm4gbV9ub3JtYWxDaGlsZE5lZWRzTGF5b3V0OyB9CiAKLSAgICBib29s
IG1pbk1heEtub3duKCkgY29uc3QgeyByZXR1cm4gbV9taW5NYXhLbm93bjsgfQotICAgIGJvb2wg
cmVjYWxjTWluTWF4KCkgY29uc3QgeyByZXR1cm4gbV9yZWNhbGNNaW5NYXg7IH0KKyAgICBib29s
IHByZWZXaWR0aHNEaXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJlZldpZHRoc0RpcnR5OyB9CiAK
ICAgICBib29sIGlzU2VsZWN0aW9uQm9yZGVyKCkgY29uc3Q7CiAKQEAgLTM2OCwyNCArMzcxLDEy
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFy
ZW50cyA9IHRydWUpOwogICAgIHZvaWQgc2V0Q2hpbGROZWVkc0xheW91dChib29sIGIsIGJvb2wg
bWFya1BhcmVudHMgPSB0cnVlKTsKIAotICAgIHZvaWQgc2V0TWluTWF4S25vd24oYm9vbCBiID0g
dHJ1ZSkKLSAgICB7Ci0gICAgICAgIG1fbWluTWF4S25vd24gPSBiOwotICAgICAgICBpZiAoIWIp
IHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogbyA9IHRoaXM7Ci0gICAgICAgICAgICBSZW5k
ZXJPYmplY3QqIHJvb3QgPSB0aGlzOwotICAgICAgICAgICAgd2hpbGUobykgeyAvLyBGSVhNRTog
JiYgIW8tPm1fcmVjYWxjTWluTWF4ICkgewotICAgICAgICAgICAgICAgIG8tPm1fcmVjYWxjTWlu
TWF4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByb290ID0gbzsKLSAgICAgICAgICAgICAgICBv
ID0gby0+bV9wYXJlbnQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICB2
b2lkIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCkKLSAgICB7Ci0gICAgICAgIHNldE1p
bk1heEtub3duKGZhbHNlKTsKKyAgICB2b2lkIHNldFByZWZXaWR0aHNEaXJ0eShib29sLCBib29s
IG1hcmtQYXJlbnRzID0gdHJ1ZSk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udGFpbmluZ0Jsb2Nr
UHJlZldpZHRocygpOworICAgIAorICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCkgewogICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICAgICAgc2V0UHJl
ZldpZHRoc0RpcnR5KHRydWUpOwogICAgIH0KIAogICAgIHZvaWQgc2V0UG9zaXRpb25lZChib29s
IGIgPSB0cnVlKSAgeyBtX3Bvc2l0aW9uZWQgPSBiOyAgfQpAQCAtMzk2LDYgKzM4Nyw3IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFJlbmRlclRleHQoKSB7IG1faXNUZXh0ID0gdHJ1ZTsgfQogICAg
IHZvaWQgc2V0UmVwbGFjZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX3JlcGxhY2VkID0gYjsgfQogICAg
IHZvaWQgc2V0SGFzT3ZlcmZsb3dDbGlwKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNPdmVyZmxvd0Ns
aXAgPSBiOyB9CisgICAgdm9pZCBzZXRIYXNMYXllcihib29sIGIgPSB0cnVlKSB7IG1faGFzTGF5
ZXIgPSBiOyB9CiAKICAgICB2b2lkIHNjaGVkdWxlUmVsYXlvdXQoKTsKIApAQCAtNDU4LDI1ICs0
NTAsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQgY2xpcHksIGludCBjbGlwaCwgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgaW50IGhl
aWdodCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNs
dWRlTGVmdEVkZ2UgPSB0cnVlLCBib29sIGluY2x1ZGVSaWdodEVkZ2UgPSB0cnVlKSB7IH0KIAot
ICAgIC8qCi0gICAgICogVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtICYgbWF4
aW11bSB3aWR0aCB0aGF0IHRoZSBvYmplY3QKLSAgICAgKiBjYW4gYmUgc2V0IHRvLgotICAgICAq
Ci0gICAgICogd2hlbiB0aGUgRWxlbWVudCBjYWxscyBzZXRNaW5NYXhLbm93bih0cnVlKSwgY2Fs
Y01pbk1heFdpZHRoKCkgd2lsbAotICAgICAqIGJlIG5vIGxvbmdlciBjYWxsZWQuCi0gICAgICoK
LSAgICAgKiB3aGVuIGEgZWxlbWVudCBoYXMgYSBmaXhlZCBzaXplLCBtX21pbldpZHRoIGFuZCBt
X21heFdpZHRoIHNob3VsZCBiZQotICAgICAqIHNldCB0byB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBo
YXMgdGhlIHNwZWNpYWwgbWVhbmluZyB0aGF0IG1fd2lkdGgsCi0gICAgICogY29udGFpbnMgdGhl
IGFjdHVhbCB2YWx1ZS4KLSAgICAgKgotICAgICAqIGFzc3VtZXMgY2FsY01pbk1heFdpZHRoIGhh
cyBhbHJlYWR5IGJlZW4gY2FsbGVkIGZvciBhbGwgY2hpbGRyZW4uCi0gICAgICovCi0gICAgdmly
dHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpIHsgfQotCi0gICAgLyoKLSAgICAgKiBEb2VzIHRo
ZSBtaW4gbWF4IHdpZHRoIHJlY2FsY3VsYXRpb25zIGFmdGVyIGNoYW5nZXMuCi0gICAgICovCi0g
ICAgdm9pZCByZWNhbGNNaW5NYXhXaWR0aHMoKTsKKyAgICAKKyAgICAvLyBUaGlzIGZ1bmN0aW9u
IGNhbGN1bGF0ZXMgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gcHJlZmVycmVkIHdpZHRocyBmb3Ig
YW4gb2JqZWN0LgorICAgIC8vIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCBpbiBzaHJpbmstdG8tZml0
IGxheW91dCBzeXN0ZW1zLiAgVGhlc2UgaW5jbHVkZSB0YWJsZXMsIHBvc2l0aW9uZWQgb2JqZWN0
cywgZmxvYXRzCisgICAgLy8gYW5kIGZsZXhpYmxlIGJveGVzLgorICAgIHZpcnR1YWwgdm9pZCBj
YWxjUHJlZldpZHRocygpIHt9CiAKICAgICAvKgogICAgICAqIENhbGN1bGF0ZXMgdGhlIGFjdHVh
bCB3aWR0aCBvZiB0aGUgb2JqZWN0IChvbmx5IGZvciBub24gaW5saW5lCkBAIC02ODUsOCArNjYz
LDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGFkZEZvY3VzUmluZ1JlY3RzKEdyYXBo
aWNzQ29udGV4dCosIGludCB0eCwgaW50IHR5KTsKIAotICAgIHZpcnR1YWwgaW50IG1pbldpZHRo
KCkgY29uc3QgeyByZXR1cm4gMDsgfQotICAgIHZpcnR1YWwgaW50IG1heFdpZHRoKCkgY29uc3Qg
eyByZXR1cm4gMDsgfQorICAgIHZpcnR1YWwgaW50IG1pblByZWZXaWR0aCgpIGNvbnN0IHsgcmV0
dXJuIDA7IH0KKyAgICB2aXJ0dWFsIGludCBtYXhQcmVmV2lkdGgoKSBjb25zdCB7IHJldHVybiAw
OyB9CiAKICAgICBSZW5kZXJTdHlsZSogc3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlOyB9
CiAgICAgUmVuZGVyU3R5bGUqIGZpcnN0TGluZVN0eWxlKCkgY29uc3Q7CkBAIC05MTIsNyArODkw
LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fbmVlZHNMYXlvdXQgICAgICAgICAgICAgICA6IDE7
CiAgICAgYm9vbCBtX25vcm1hbENoaWxkTmVlZHNMYXlvdXQgICAgOiAxOwogICAgIGJvb2wgbV9w
b3NDaGlsZE5lZWRzTGF5b3V0ICAgICAgIDogMTsKLSAgICBib29sIG1fbWluTWF4S25vd24gICAg
ICAgICAgICAgICA6IDE7CisgICAgYm9vbCBtX3ByZWZXaWR0aHNEaXJ0eSAgICAgICAgICAgOiAx
OwogICAgIGJvb2wgbV9mbG9hdGluZyAgICAgICAgICAgICAgICAgIDogMTsKIAogICAgIGJvb2wg
bV9wb3NpdGlvbmVkICAgICAgICAgICAgICAgIDogMTsKQEAgLTkyMSwxMiArODk5LDEyIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWNr
Z3JvdW5kIHBhaW50aW5nIHBoYXNlIChiYWNrZ3JvdW5kLCBib3JkZXIsIGV0YykKIAogICAgIGJv
b2wgbV9pc0Fub255bW91cyAgICAgICAgICAgICAgIDogMTsKLSAgICBib29sIG1fcmVjYWxjTWlu
TWF4ICAgICAgICAgICAgICA6IDE7CiAgICAgYm9vbCBtX2lzVGV4dCAgICAgICAgICAgICAgICAg
ICAgOiAxOwogICAgIGJvb2wgbV9pbmxpbmUgICAgICAgICAgICAgICAgICAgIDogMTsKICAgICBi
b29sIG1fcmVwbGFjZWQgICAgICAgICAgICAgICAgICA6IDE7CiAgICAgYm9vbCBtX2lzRHJhZ2dp
bmcgICAgICAgICAgICAgICAgOiAxOwogCisgICAgYm9vbCBtX2hhc0xheWVyICAgICAgICAgICAg
ICAgICAgOiAxOwogICAgIGJvb2wgbV9oYXNPdmVyZmxvd0NsaXAgICAgICAgICAgIDogMTsKIAog
ICAgIGJvb2wgbV9oYXNPdmVycmlkZVNpemUgICAgICAgICAgIDogMTsKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJQYXJ0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyUGFydC5jcHAJ
KHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclBhcnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02Myw3ICs2Myw3IEBAIHZvaWQgUmVuZGVyUGFydDo6c2V0V2lkZ2V0KFdpZGdldCog
d2lkZ2UKICAgICAgICAgICAgIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCktPnJlZigp
OwogICAgICAgICBSZW5kZXJXaWRnZXQ6OnNldFdpZGdldCh3aWRnZXQpOwogCi0gICAgICAgIHNl
dE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgIHNldE5lZWRzTGF5b3V0QW5k
UHJlZldpZHRoc1JlY2FsYygpOwogCiAgICAgICAgIC8vIG1ha2Ugc3VyZSB0aGUgc2Nyb2xsYmFy
cyBhcmUgc2V0IGNvcnJlY3RseSBmb3IgcmVzdG9yZQogICAgICAgICAvLyAjIyMgZmluZCBiZXR0
ZXIgZml4CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVjdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlclBhcnRPYmplY3QuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJl
bmRlcmluZy9SZW5kZXJQYXJ0T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA3LDcgKzEw
Nyw3IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRlV2lkZ2V0KCkKICAgVmVjdG9yPFN0
cmluZz4gcGFyYW1WYWx1ZXM7CiAgIEZyYW1lKiBmcmFtZSA9IG1fdmlldy0+ZnJhbWUoKTsKIAot
ICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICBzZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsKIAogICBpZiAoZWxlbWVudCgpLT5oYXNUYWdOYW1lKG9iamVjdFRh
ZykpIHsKIApAQCAtMjQ1LDcgKzI0NSw2IEBAIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6dXBkYXRl
V2lkZ2V0KCkKIHZvaWQgUmVuZGVyUGFydE9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKG1pbk1heEtub3duKCkpOwogCiAgICAgY2FsY1dp
ZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclJlcGxhY2Vk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyUmVwbGFjZWQuY3BwCShyZXZpc2lv
biAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc1LDE4ICs3NSwxOCBAQCBib29sIFJlbmRlclJlcGxhY2VkOjpzaG91bGRQYWludChQYWlu
dEluCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgUmVuZGVyUmVwbGFjZWQ6OmNhbGNNaW5N
YXhXaWR0aCgpCit2b2lkIFJlbmRlclJlcGxhY2VkOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAg
QVNTRVJUKCFtaW5NYXhLbm93bigpKTsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwog
CiAgICAgaW50IHdpZHRoID0gY2FsY1JlcGxhY2VkV2lkdGgoKSArIHBhZGRpbmdMZWZ0KCkgKyBw
YWRkaW5nUmlnaHQoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCk7CiAgICAgaWYgKHN0
eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRoKCkuaXNBdXRvKCkg
JiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKSB7Ci0gICAgICAgIG1fbWluV2lkdGgg
PSAwOwotICAgICAgICBtX21heFdpZHRoID0gd2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRo
ID0gMDsKKyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSB3aWR0aDsKICAgICB9IGVsc2UKLSAgICAg
ICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGggPSB3aWR0aDsKKyAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtX21heFByZWZXaWR0aCA9IHdpZHRoOwogCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAg
ICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCiBzaG9ydCBSZW5kZXJSZXBsYWNlZDo6
bGluZUhlaWdodChib29sLCBib29sKSBjb25zdApJbmRleDogcmVuZGVyaW5nL1JlbmRlclJlcGxh
Y2VkLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHJldmlzaW9u
IDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM1LDcgKzM1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29s
IGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1
YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5l
Qm94ID0gZmFsc2UpIGNvbnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgp
OworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogCiAgICAgdmlydHVhbCB2b2lk
IHBhaW50KFBhaW50SW5mbyYsIGludCB0eCwgaW50IHR5KSA9IDA7CiAKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJT
VkdDb250YWluZXIuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSwxNyArODUsOSBAQCBzaG9ydCBSZW5k
ZXJTVkdDb250YWluZXI6OmJhc2VsaW5lUG9zaXRpCiAgICAgcmV0dXJuIGhlaWdodCgpICsgbWFy
Z2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKTsKIH0KIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6
OmNhbGNNaW5NYXhXaWR0aCgpCi17Ci0gICAgQVNTRVJUKCFtaW5NYXhLbm93bigpKTsKLSAgICBt
X21pbldpZHRoID0gbV9tYXhXaWR0aCA9IDA7Ci0gICAgc2V0TWluTWF4S25vd24oKTsKLX0KLQog
dm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5
b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKIAogICAgIGNhbGNWaWV3cG9ydCgp
OwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRl
cmluZy9SZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNyArNjMsNiBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVpZ2h0KGJvb2wgYiwgYm9vbCBpc1Jv
b3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3Np
dGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKICAgICAKLSAg
ICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CiAgICAgdmlydHVhbCB2b2lkIGxheW91
dCgpOwogICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50
IHBhcmVudFkpOwogICAgIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5j
cHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5l
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCw2IEBAIHNob3J0IFJlbmRlclNWR0hp
ZGRlbkNvbnRhaW5lcjo6YmFzZWxpbmUKICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBSZW5kZXJT
VkdIaWRkZW5Db250YWluZXI6OmNhbGNNaW5NYXhXaWR0aCgpCi17Ci0gICAgQVNTRVJUKCFtaW5N
YXhLbm93bigpKTsKLSAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IDA7Ci0gICAgc2V0TWlu
TWF4S25vd24oKTsKLX0KLQogdm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmxheW91dCgp
CiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclNW
R0hpZGRlbkNvbnRhaW5lci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRk
ZW5Db250YWluZXIuaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDYgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQoYm9vbCBiLCBib29s
IGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAgICAgICAgIHZpcnR1YWwgc2hvcnQgYmFz
ZWxpbmVQb3NpdGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsK
ICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjTWluTWF4V2lkdGgoKTsKICAgICAg
ICAgdmlydHVhbCB2b2lkIGxheW91dCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKICAgICAgICAgCkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNW
R1RleHQuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyArNTgsNiBAQCBib29sIFJlbmRlclNWR1RleHQ6OnJl
cXVpcmVzTGF5ZXIoKQogdm9pZCBSZW5kZXJTVkdUZXh0OjpsYXlvdXQoKQogewogICAgIEFTU0VS
VChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBJbnRS
ZWN0IG9sZEJvdW5kczsKICAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7CkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyU2xpZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU2xpZGVy
LmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTMyLDM0ICsxMzIsMzQgQEAgc2hvcnQgUmVuZGVyU2xpZGVyOjpiYXNl
bGluZVBvc2l0aW9uKGJvbwogICAgIHJldHVybiBoZWlnaHQoKSArIG1hcmdpblRvcCgpOwogfQog
Ci12b2lkIFJlbmRlclNsaWRlcjo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgUmVuZGVyU2xpZGVy
OjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgbV9taW5XaWR0aCA9IDA7Ci0gICAgbV9tYXhXaWR0
aCA9IDA7CisgICAgbV9taW5QcmVmV2lkdGggPSAwOworICAgIG1fbWF4UHJlZldpZHRoID0gMDsK
IAogICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgp
LnZhbHVlKCkgPiAwKQotICAgICAgICBtX21pbldpZHRoID0gbV9tYXhXaWR0aCA9IGNhbGNDb250
ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKKyAgICAgICAgbV9taW5QcmVm
V2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lk
dGgoKS52YWx1ZSgpKTsKICAgICBlbHNlCi0gICAgICAgIG1fbWF4V2lkdGggPSBkZWZhdWx0VHJh
Y2tMZW5ndGg7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gZGVmYXVsdFRyYWNrTGVuZ3RoOwog
CiAgICAgaWYgKHN0eWxlKCktPm1pbldpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldp
ZHRoKCkudmFsdWUoKSA+IDApIHsKLSAgICAgICAgbV9tYXhXaWR0aCA9IG1heChtX21heFdpZHRo
LCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSkpOwotICAg
ICAgICBtX21pbldpZHRoID0gbWF4KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5
bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4
KG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwg
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9
IGVsc2UgaWYgKHN0eWxlKCktPndpZHRoKCkuaXNQZXJjZW50KCkgfHwgKHN0eWxlKCktPndpZHRo
KCkuaXNBdXRvKCkgJiYgc3R5bGUoKS0+aGVpZ2h0KCkuaXNQZXJjZW50KCkpKQotICAgICAgICBt
X21pbldpZHRoID0gMDsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIGVsc2UKLSAg
ICAgICAgbV9taW5XaWR0aCA9IG1fbWF4V2lkdGg7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bV9tYXhQcmVmV2lkdGg7CiAgICAgCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhl
ZCgpICYmIHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsK
LSAgICAgICAgbV9tYXhXaWR0aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWlu
KG1fbWluV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1
ZSgpKSk7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxj
Q29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1pbihtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChz
dHlsZSgpLT5tYXhXaWR0aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBw
YWRkaW5nTGVmdCgpICsgcGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdo
dCgpOwotICAgIG1fbWluV2lkdGggKz0gdG9BZGQ7Ci0gICAgbV9tYXhXaWR0aCArPSB0b0FkZDsK
KyAgICBtX21pblByZWZXaWR0aCArPSB0b0FkZDsKKyAgICBtX21heFByZWZXaWR0aCArPSB0b0Fk
ZDsKIAotICAgIHNldE1pbk1heEtub3duKCk7IAorICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxz
ZSk7IAogfQogCiB2b2lkIFJlbmRlclNsaWRlcjo6c2V0U3R5bGUoUmVuZGVyU3R5bGUqIG5ld1N0
eWxlKQpJbmRleDogcmVuZGVyaW5nL1JlbmRlclNsaWRlci5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRl
cmluZy9SZW5kZXJTbGlkZXIuaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVy
U2xpZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdCB7IHJl
dHVybiAiUmVuZGVyU2xpZGVyIjsgfQogCiAgICAgICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQ
b3NpdGlvbiggYm9vbCwgYm9vbCApIGNvbnN0OwotICAgICAgICB2aXJ0dWFsIHZvaWQgY2FsY01p
bk1heFdpZHRoKCk7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAg
ICAgICB2aXJ0dWFsIHZvaWQgc2V0U3R5bGUoUmVuZGVyU3R5bGUqKTsKICAgICAgICAgdmlydHVh
bCB2b2lkIGxheW91dCgpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRnJvbUVsZW1lbnQo
KTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzMsOCArMjMzLDcgQEAgdm9pZCBSZW5kZXJU
YWJsZTo6Y2FsY1dpZHRoKCkKICAgICBpZiAod2lkdGhUeXBlID4gUmVsYXRpdmUgJiYgc3R5bGUo
KS0+d2lkdGgoKS5pc1Bvc2l0aXZlKCkpIHsKICAgICAgICAgLy8gUGVyY2VudCBvciBmaXhlZCB0
YWJsZQogICAgICAgICBtX3dpZHRoID0gc3R5bGUoKS0+d2lkdGgoKS5jYWxjTWluVmFsdWUoYXZh
aWxhYmxlV2lkdGgpOwotICAgICAgICBpZiAobV9taW5XaWR0aCA+IG1fd2lkdGgpCi0gICAgICAg
ICAgICBtX3dpZHRoID0gbV9taW5XaWR0aDsKKyAgICAgICAgbV93aWR0aCA9IG1heChtaW5QcmVm
V2lkdGgoKSwgbV93aWR0aCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLy8gQW4gYXV0byB3aWR0
aCB0YWJsZSBzaG91bGQgc2hyaW5rIHRvIGZpdCB3aXRoaW4gdGhlIGxpbmUgd2lkdGggaWYgbmVj
ZXNzYXJ5IGluIG9yZGVyIHRvIAogICAgICAgICAvLyBhdm9pZCBvdmVybGFwcGluZyBmbG9hdHMu
CkBAIC0yNTEsMTAgKzI1MCwxMCBAQCB2b2lkIFJlbmRlclRhYmxlOjpjYWxjV2lkdGgoKQogICAg
ICAgICBpbnQgYXZhaWxDb250ZW50V2lkdGggPSBtYXgoMCwgYXZhaWxhYmxlV2lkdGggLSBtYXJn
aW5Ub3RhbCk7CiAgICAgICAgIAogICAgICAgICAvLyBFbnN1cmUgd2UgYXJlbid0IGJpZ2dlciB0
aGFuIG91ciBtYXggd2lkdGggb3Igc21hbGxlciB0aGFuIG91ciBtaW4gd2lkdGguCi0gICAgICAg
IG1fd2lkdGggPSBtaW4oYXZhaWxDb250ZW50V2lkdGgsIG1fbWF4V2lkdGgpOworICAgICAgICBt
X3dpZHRoID0gbWluKGF2YWlsQ29udGVudFdpZHRoLCBtYXhQcmVmV2lkdGgoKSk7CiAgICAgfQog
ICAgIAotICAgIG1fd2lkdGggPSBtYXgobV93aWR0aCwgbV9taW5XaWR0aCk7CisgICAgbV93aWR0
aCA9IG1heChtX3dpZHRoLCBtaW5QcmVmV2lkdGgoKSk7CiAKICAgICAvLyBGaW5hbGx5LCB3aXRo
IG91ciB0cnVlIHdpZHRoIGRldGVybWluZWQsIGNvbXB1dGUgb3VyIG1hcmdpbnMgZm9yIHJlYWwu
CiAgICAgbV9tYXJnaW5SaWdodCA9IDA7CkBAIC0yNjUsOCArMjY0LDYgQEAgdm9pZCBSZW5kZXJU
YWJsZTo6Y2FsY1dpZHRoKCkKIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiB7CiAgICAgQVNT
RVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVChtaW5NYXhLbm93bigpKTsKLSAgICBBU1NF
UlQoIW1fbmVlZHNTZWN0aW9uUmVjYWxjKTsKIAogICAgIGlmIChwb3NDaGlsZE5lZWRzTGF5b3V0
KCkgJiYgIW5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsK
ICAgICAgICAgLy8gQWxsIHdlIGhhdmUgdG8gZG8gaXMgbGF5IG91dCBvdXIgcG9zaXRpb25lZCBv
YmplY3RzLgpAQCAtMjc1LDYgKzI3Miw4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7Cisg
ICAgICAgIAogICAgIEludFJlY3Qgb2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJv
eDsKICAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpOwpAQCAtNTI4LDE5ICs1MjcsMTkgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cGFpbnRCb3hEZWNv
cmF0aW9ucyhQYQogICAgICAgICBwYWludEJvcmRlcihwYWludEluZm8uY29udGV4dCwgdHgsIHR5
LCB3LCBoLCBzdHlsZSgpKTsKIH0KIAotdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY01pbk1heFdpZHRo
KCkKK3ZvaWQgUmVuZGVyVGFibGU6OmNhbGNQcmVmV2lkdGhzKCkKIHsKLSAgICBBU1NFUlQoIW1p
bk1heEtub3duKCkpOworICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICByZWNh
bGNTZWN0aW9uc0lmTmVlZGVkKCk7CiAgICAgcmVjYWxjSG9yaXpvbnRhbEJvcmRlcnMoKTsKIAot
ICAgIG1fdGFibGVMYXlvdXQtPmNhbGNNaW5NYXhXaWR0aChtX21pbldpZHRoLCBtX21heFdpZHRo
KTsKKyAgICBtX3RhYmxlTGF5b3V0LT5jYWxjUHJlZldpZHRocyhtX21pblByZWZXaWR0aCwgbV9t
YXhQcmVmV2lkdGgpOwogCiAgICAgaWYgKG1fY2FwdGlvbikKLSAgICAgICAgbV9taW5XaWR0aCA9
IG1heChtX21pbldpZHRoLCBtX2NhcHRpb24tPm1pbldpZHRoKCkpOworICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgbV9jYXB0aW9uLT5taW5QcmVmV2lkdGgoKSk7
CiAKLSAgICBzZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7
CiB9CiAKIHZvaWQgUmVuZGVyVGFibGU6OnNwbGl0Q29sdW1uKGludCBwb3MsIGludCBmaXJzdFNw
YW4pCkBAIC01NjEsNyArNTYwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6c3BsaXRDb2x1bW4oaW50
IHBvcywgaQogICAgIH0KIAogICAgIG1fY29sdW1uUG9zLnJlc2l6ZShudW1FZmZDb2xzKCkgKyAx
KTsKLSAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAgIHNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCiB2b2lkIFJlbmRlclRhYmxlOjphcHBlbmRD
b2x1bW4oaW50IHNwYW4pCkBAIC01NzksNyArNTc4LDcgQEAgdm9pZCBSZW5kZXJUYWJsZTo6YXBw
ZW5kQ29sdW1uKGludCBzcGFuKQogICAgIH0KIAogICAgIG1fY29sdW1uUG9zLnJlc2l6ZShudW1F
ZmZDb2xzKCkgKyAxKTsKLSAgICBzZXROZWVkc0xheW91dEFuZE1pbk1heFJlY2FsYygpOworICAg
IHNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCiBSZW5kZXJUYWJsZUNv
bCogUmVuZGVyVGFibGU6OmNvbEVsZW1lbnQoaW50IGNvbCkgY29uc3QKQEAgLTY4NiwxMCArNjg1
LDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OnJlY2FsY1NlY3Rpb25zKCkKICAgICBzZXROZWVkc0xh
eW91dCh0cnVlKTsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJUYWJsZTo6cmVtb3ZlQ2hpbGRO
b2RlKFJlbmRlck9iamVjdCogY2hpbGQpCitSZW5kZXJPYmplY3QqIFJlbmRlclRhYmxlOjpyZW1v
dmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9vbCBmdWxsUmVtb3ZlKQogewogICAg
IHNldE5lZWRzU2VjdGlvblJlY2FsYygpOwotICAgIHJldHVybiBSZW5kZXJDb250YWluZXI6OnJl
bW92ZUNoaWxkTm9kZShjaGlsZCk7CisgICAgcmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6cmVtb3Zl
Q2hpbGROb2RlKGNoaWxkLCBmdWxsUmVtb3ZlKTsKIH0KIAogaW50IFJlbmRlclRhYmxlOjpjYWxj
Qm9yZGVyTGVmdCgpIGNvbnN0CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGUuaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5k
ZXJpbmcvUmVuZGVyVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAyLDcgKzEwMiw3IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFpbnRJbmZvJiwgaW50IHR4LCBpbnQgdHkp
OwogICAgIHZpcnR1YWwgdm9pZCBwYWludEJveERlY29yYXRpb25zKFBhaW50SW5mbyYsIGludCB0
eCwgaW50IHR5KTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7Ci0gICAgdmlydHVhbCB2b2lk
IGNhbGNNaW5NYXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwog
CiAgICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmlyc3RMaW5lQmxvY2soKSBjb25zdDsKICAgICB2
aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJs
aWM6CiAgICAgYm9vbCBuZWVkc1NlY3Rpb25SZWNhbGMoKSBjb25zdCB7IHJldHVybiBtX25lZWRz
U2VjdGlvblJlY2FsYzsgfQogICAgIHZvaWQgc2V0TmVlZHNTZWN0aW9uUmVjYWxjKCkgeyBtX25l
ZWRzU2VjdGlvblJlY2FsYyA9IHRydWU7IH0KIAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBy
ZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0Kik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IHJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqLCBib29sIGZ1bGxSZW1vdmUgPSB0cnVlKTsK
IAogICAgIFJlbmRlclRhYmxlU2VjdGlvbiogc2VjdGlvbkFib3ZlKGNvbnN0IFJlbmRlclRhYmxl
U2VjdGlvbiosIGJvb2wgc2tpcEVtcHR5U2VjdGlvbnMgPSBmYWxzZSkgY29uc3Q7CiAgICAgUmVu
ZGVyVGFibGVTZWN0aW9uKiBzZWN0aW9uQmVsb3coY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiwg
Ym9vbCBza2lwRW1wdHlTZWN0aW9ucyA9IGZhbHNlKSBjb25zdDsKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJUYWJsZUNlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNl
bGwuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MCwxNCArNzAsMTQgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OnVwZGF0ZUZyb21FbGVtZW50KAogICAgICAgICBtX2NvbHVtblNwYW4gPSB0Yy0+Y29sU3Bhbigp
OwogICAgICAgICBtX3Jvd1NwYW4gPSB0Yy0+cm93U3BhbigpOwogICAgICAgICBpZiAoKG9sZFJT
cGFuICE9IG1fcm93U3BhbiB8fCBvbGRDU3BhbiAhPSBtX2NvbHVtblNwYW4pICYmIHN0eWxlKCkg
JiYgcGFyZW50KCkpIHsKLSAgICAgICAgICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxj
KCk7CisgICAgICAgICAgICBzZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKICAg
ICAgICAgICAgIGlmIChzZWN0aW9uKCkpCiAgICAgICAgICAgICAgICAgc2VjdGlvbigpLT5zZXRO
ZWVkc0NlbGxSZWNhbGMoKTsKICAgICAgICAgfQogICAgIH0KIH0KIAotTGVuZ3RoIFJlbmRlclRh
YmxlQ2VsbDo6c3R5bGVPckNvbFdpZHRoKCkKK0xlbmd0aCBSZW5kZXJUYWJsZUNlbGw6OnN0eWxl
T3JDb2xXaWR0aCgpIGNvbnN0CiB7CiAgICAgTGVuZ3RoIHcgPSBzdHlsZSgpLT53aWR0aCgpOwog
ICAgIGlmIChjb2xTcGFuKCkgPiAxIHx8ICF3LmlzQXV0bygpKQpAQCAtOTUsMTUgKzk1LDE0IEBA
IExlbmd0aCBSZW5kZXJUYWJsZUNlbGw6OnN0eWxlT3JDb2xXaWR0aCgKICAgICByZXR1cm4gdzsK
IH0KIAotdm9pZCBSZW5kZXJUYWJsZUNlbGw6OmNhbGNNaW5NYXhXaWR0aCgpCit2b2lkIFJlbmRl
clRhYmxlQ2VsbDo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIC8vIHJlY2FsY01pbk1heFdpZHRo
cyB3b3JrcyBkZXB0aCBmaXJzdC4gIEhvd2V2ZXIsIHRoZSBjaGlsZCBjZWxscyByZWx5IG9uIHRo
ZSBncmlkcyB1cCBpbiB0aGUKLSAgICAvLyBzZWN0aW9ucyB0byBkbyB0aGVpciBjYWxjTWluTWF4
V2lkdGhzIHdvcmsuICBOb3JtYWxseSB0aGUgc2VjdGlvbnMgYXJlIHNldCB1cCBlYXJseSwgYXMg
dGFibGUKLSAgICAvLyBjZWxscyBhcmUgYWRkZWQsIGJ1dCByZWxheW91dCBjYW4gY2F1c2UgdGhl
IGNlbGxzIHRvIGJlIGZyZWVkLCBsZWF2aW5nIHN0YWxlIHB0cnMgaW4gdGhlIHNlY3Rpb25zJwor
ICAgIC8vIFRoZSBjaGlsZCBjZWxscyByZWx5IG9uIHRoZSBncmlkcyB1cCBpbiB0aGUgc2VjdGlv
bnMgdG8gZG8gdGhlaXIgY2FsY1ByZWZXaWR0aHMgd29yay4gIE5vcm1hbGx5IHRoZSBzZWN0aW9u
cyBhcmUgc2V0IHVwIGVhcmx5LCBhcyB0YWJsZQorICAgIC8vIGNlbGxzIGFyZSBhZGRlZCwgYnV0
IHJlbGF5b3V0IGNhbiBjYXVzZSB0aGUgY2VsbHMgdG8gYmUgZnJlZWQsIGxlYXZpbmcgc3RhbGUg
cG9pbnRlcnMgaW4gdGhlIHNlY3Rpb25zJwogICAgIC8vIGdyaWRzLiAgV2UgbXVzdCByZWZyZXNo
IHRob3NlIGdyaWRzIGJlZm9yZSB0aGUgY2hpbGQgY2VsbHMgdHJ5IHRvIHVzZSB0aGVtLgogICAg
IHRhYmxlKCktPnJlY2FsY1NlY3Rpb25zSWZOZWVkZWQoKTsKIAotICAgIFJlbmRlckJsb2NrOjpj
YWxjTWluTWF4V2lkdGgoKTsKKyAgICBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsKICAg
ICBpZiAoZWxlbWVudCgpICYmIHN0eWxlKCktPmF1dG9XcmFwKCkpIHsKICAgICAgICAgLy8gU2Vl
IGlmIG5vd3JhcCB3YXMgc2V0LgogICAgICAgICBMZW5ndGggdyA9IHN0eWxlT3JDb2xXaWR0aCgp
OwpAQCAtMTE0LDggKzExMyw3IEBAIHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjYWxjTWluTWF4V2lk
dGgoKQogICAgICAgICAgICAgLy8gdG8gbWFrZSB0aGUgbWlud2lkdGggb2YgdGhlIGNlbGwgaW50
byB0aGUgZml4ZWQgd2lkdGguICBUaGV5IGRvIHRoaXMKICAgICAgICAgICAgIC8vIGV2ZW4gaW4g
c3RyaWN0IG1vZGUsIHNvIGRvIG5vdCBtYWtlIHRoaXMgYSBxdWlyay4gIEFmZmVjdGVkIHRoZSB0
b3AKICAgICAgICAgICAgIC8vIG9mIGhpcHRvcC5jb20uCi0gICAgICAgICAgICBpZiAobV9taW5X
aWR0aCA8IHcudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtX21pbldpZHRoID0gdy52YWx1ZSgp
OworICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgody52YWx1ZSgpLCBtX21pblByZWZX
aWR0aCk7CiAgICAgfQogfQogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCShyZXZpc2lvbiAyMDk5NykK
KysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsMTEg
KzU3LDExIEBAIHB1YmxpYzoKICAgICBSZW5kZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb24oKSBjb25z
dCB7IHJldHVybiBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZVNlY3Rpb24qPihwYXJlbnQoKS0+cGFy
ZW50KCkpOyB9CiAgICAgUmVuZGVyVGFibGUqIHRhYmxlKCkgY29uc3QgeyByZXR1cm4gc3RhdGlj
X2Nhc3Q8UmVuZGVyVGFibGUqPihwYXJlbnQoKS0+cGFyZW50KCktPnBhcmVudCgpKTsgfQogCi0g
ICAgTGVuZ3RoIHN0eWxlT3JDb2xXaWR0aCgpOworICAgIExlbmd0aCBzdHlsZU9yQ29sV2lkdGgo
KSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCByZXF1aXJlc0xheWVyKCk7CiAKLSAgICB2aXJ0
dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lk
dGhzKCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0aCgpOwogICAgIHZpcnR1YWwgdm9pZCBz
ZXRXaWR0aChpbnQpOwogICAgIHZpcnR1YWwgdm9pZCBzZXRTdHlsZShSZW5kZXJTdHlsZSopOwpJ
bmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyVGFibGVDb2wuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZUNvbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDcgQEAgdm9pZCBSZW5k
ZXJUYWJsZUNvbDo6dXBkYXRlRnJvbUVsZW1lbnQoKQogICAgIH0gZWxzZQogICAgICAgICBtX3Nw
YW4gPSAhKHN0eWxlKCkgJiYgc3R5bGUoKS0+ZGlzcGxheSgpID09IFRBQkxFX0NPTFVNTl9HUk9V
UCk7CiAgICAgaWYgKG1fc3BhbiAhPSBvbGRTcGFuICYmIHN0eWxlKCkgJiYgcGFyZW50KCkpCi0g
ICAgICAgIHNldE5lZWRzTGF5b3V0QW5kTWluTWF4UmVjYWxjKCk7CisgICAgICAgIHNldE5lZWRz
TGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogfQogCiBib29sIFJlbmRlclRhYmxlQ29sOjpp
c0NoaWxkQWxsb3dlZChSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJTdHlsZSogc3R5bGUpIGNv
bnN0CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5n
L1JlbmRlclRhYmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw2IEBAIHZv
aWQgUmVuZGVyVGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKIHZvaWQgUmVuZGVyVGFibGVS
b3c6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCht
aW5NYXhLbm93bigpKTsKIAogICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAgICAgICAgaWYg
KGNoaWxkLT5pc1RhYmxlQ2VsbCgpKSB7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0
aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAko
cmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODkxLDYgKzg5MSw4IEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpw
YWludChQYWludEluZm8KICAgICAgICAgICAgICAgICBpZiAoIWNlbGwgfHwgKHIgPiBzdGFydHJv
dyAmJiAoY2VsbEF0KHIgLSAxLCBjKS5jZWxsID09IGNlbGwpKSkKICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CiAKKyAgICAgICAgICAgICAgICBSZW5kZXJUYWJsZVJvdyogcm93ID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyVGFibGVSb3cqPihjZWxsLT5wYXJlbnQoKSk7CisKICAgICAgICAgICAg
ICAgICBpZiAocGFpbnRQaGFzZSA9PSBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kIHx8IHBhaW50
UGhhc2UgPT0gUGFpbnRQaGFzZUNoaWxkQmxvY2tCYWNrZ3JvdW5kKSB7CiAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gaGFuZGxlIHBhaW50aW5nIGEgc3RhY2sgb2YgYmFja2dyb3Vu
ZHMuICBUaGlzIHN0YWNrIChmcm9tIGJvdHRvbSB0byB0b3ApIGNvbnNpc3RzIG9mCiAgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBjb2x1bW4gZ3JvdXAsIGNvbHVtbiwgcm93IGdyb3VwLCByb3cs
IGFuZCB0aGVuIHRoZSBjZWxsLgpAQCAtODk5LDggKzkwMSw2IEBAIHZvaWQgUmVuZGVyVGFibGVT
ZWN0aW9uOjpwYWludChQYWludEluZm8KICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbCAmJiBj
b2wtPnBhcmVudCgpLT5zdHlsZSgpLT5kaXNwbGF5KCkgPT0gVEFCTEVfQ09MVU1OX0dST1VQKQog
ICAgICAgICAgICAgICAgICAgICAgICAgY29sR3JvdXAgPSBjb2wtPnBhcmVudCgpOwogCi0gICAg
ICAgICAgICAgICAgICAgIFJlbmRlck9iamVjdCogcm93ID0gY2VsbC0+cGFyZW50KCk7Ci0KICAg
ICAgICAgICAgICAgICAgICAgLy8gQ29sdW1uIGdyb3VwcyBhbmQgY29sdW1ucyBmaXJzdC4KICAg
ICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IENvbHVtbnMgYW5kIGNvbHVtbiBncm91cHMgZG8g
bm90IGN1cnJlbnRseSBzdXBwb3J0IG9wYWNpdHksIGFuZCB0aGV5IGFyZSBiZWluZyBwYWludGVk
ICJ0b28gbGF0ZSIgaW4KICAgICAgICAgICAgICAgICAgICAgLy8gdGhlIHN0YWNrLCBzaW5jZSB3
ZSBoYXZlIGFscmVhZHkgb3BlbmVkIGEgdHJhbnNwYXJlbmN5IGxheWVyIChwb3RlbnRpYWxseSkg
Zm9yIHRoZSB0YWJsZSByb3cgZ3JvdXAuCkBAIC05MTQsMTEgKzkxNCwxMSBAQCB2b2lkIFJlbmRl
clRhYmxlU2VjdGlvbjo6cGFpbnQoUGFpbnRJbmZvCiAKICAgICAgICAgICAgICAgICAgICAgLy8g
UGFpbnQgdGhlIHJvdyBuZXh0LCBidXQgb25seSBpZiBpdCBkb2Vzbid0IGhhdmUgYSBsYXllci4g
IElmIGEgcm93IGhhcyBhIGxheWVyLCBpdCB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvcgogICAgICAg
ICAgICAgICAgICAgICAvLyBwYWludGluZyB0aGUgcm93IGJhY2tncm91bmQgZm9yIHRoZSBjZWxs
LgotICAgICAgICAgICAgICAgICAgICBpZiAoIXJvdy0+bGF5ZXIoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKCFyb3ctPmhhc0xheWVyKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxs
LT5wYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0eSwgcm93KTsKICAg
ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBpZiAoKCFjZWxsLT5sYXllcigpICYm
ICFjZWxsLT5wYXJlbnQoKS0+bGF5ZXIoKSkgfHwgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50UGhh
c2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMpCisgICAgICAgICAgICAgICAgaWYgKCghY2VsbC0+aGFz
TGF5ZXIoKSAmJiAhcm93LT5oYXNMYXllcigpKSB8fCBwYWludEluZm8ucGhhc2UgPT0gUGFpbnRQ
aGFzZUNvbGxhcHNlZFRhYmxlQm9yZGVycykKICAgICAgICAgICAgICAgICAgICAgY2VsbC0+cGFp
bnQocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xMDA0
LDEwICsxMDA0LDEwIEBAIHZvaWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbihpbnQK
ICAgICB9CiB9CiAKLVJlbmRlck9iamVjdCogUmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVDaGls
ZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCkKK1JlbmRlck9iamVjdCogUmVuZGVyVGFibGVTZWN0
aW9uOjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9vbCBmdWxsUmVtb3Zl
KQogewogICAgIHNldE5lZWRzQ2VsbFJlY2FsYygpOwotICAgIHJldHVybiBSZW5kZXJDb250YWlu
ZXI6OnJlbW92ZUNoaWxkTm9kZShjaGlsZCk7CisgICAgcmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6
cmVtb3ZlQ2hpbGROb2RlKGNoaWxkLCBmdWxsUmVtb3ZlKTsKIH0KIAogLy8gSGl0IFRlc3RpbmcK
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5k
ZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAg
cHVibGljOgogCiAgICAgaW50IGdldEJhc2VsaW5lKGludCByb3cpIHsgcmV0dXJuIG1fZ3JpZFty
b3ddLmJhc2VMaW5lOyB9CiAKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogcmVtb3ZlQ2hpbGRO
b2RlKFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGls
ZE5vZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsUmVtb3ZlID0gdHJ1ZSk7CiAKICAgICB2aXJ0
dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0
JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MTYsMTIgKzQxNiwxMiBAQCBBTFdBWVNfSU5MSU5FIGludCBSZW5k
ZXJUZXh0Ojp3aWR0aEZyb21DCiAgICAgcmV0dXJuIGYud2lkdGgoVGV4dFJ1bih0ZXh0KCktPmNo
YXJhY3RlcnMoKSArIHN0YXJ0LCBsZW4pLCBUZXh0U3R5bGUoYWxsb3dUYWJzKCksIHhQb3MpKTsK
IH0KIAotdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkTWluTWF4V2lkdGgoaW50IGxlYWRXaWR0aCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NaW5XLCBib29s
JiBiZWdpbldTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBlbmRN
aW5XLCBib29sJiBlbmRXUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wmIGhhc0JyZWFrYWJsZUNoYXIsIGJvb2wmIGhhc0JyZWFrLAotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaW50JiBiZWdpbk1heFcsIGludCYgZW5kTWF4VywKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWluVywgaW50JiBtYXhXLCBib29sJiBz
dHJpcEZyb250U3BhY2VzKQordm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyhpbnQg
bGVhZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGJlZ2lu
TWluVywgYm9vbCYgYmVnaW5XUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
aW50JiBlbmRNaW5XLCBib29sJiBlbmRXUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCYgaGFzQnJlYWthYmxlQ2hhciwgYm9vbCYgaGFzQnJlYWssCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NYXhXLCBpbnQmIGVuZE1heFcsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCYgbWluVywgaW50JiBtYXhXLCBi
b29sJiBzdHJpcEZyb250U3BhY2VzKQogewogICAgIGJvb2wgY29sbGFwc2VXaGl0ZVNwYWNlID0g
c3R5bGUoKS0+Y29sbGFwc2VXaGl0ZVNwYWNlKCk7CiAgICAgaWYgKCFjb2xsYXBzZVdoaXRlU3Bh
Y2UpCkBAIC00MzQsOCArNDM0LDggQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkTWluTWF4V2lk
dGgoaW50IAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1faGFzVGFiKQotICAg
ICAgICBjYWxjTWluTWF4V2lkdGhJbnRlcm5hbChsZWFkV2lkdGgpOworICAgIGlmIChtX2hhc1Rh
YiB8fCBwcmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgY2FsY1ByZWZXaWR0aHMobGVhZFdpZHRo
KTsKIAogICAgIG1pblcgPSBtX21pbldpZHRoOwogICAgIG1heFcgPSBtX21heFdpZHRoOwpAQCAt
NDkzLDIxICs0OTMsMzEgQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkTWluTWF4V2lkdGgoaW50
IAogICAgIH0KIH0KIAotdm9pZCBSZW5kZXJUZXh0OjpjYWxjTWluTWF4V2lkdGgoKQoraW5saW5l
IGJvb2wgaXNTcGFjZUFjY29yZGluZ1RvU3R5bGUoVUNoYXIgYywgUmVuZGVyU3R5bGUqIHN0eWxl
KQogewotICAgIC8vIFVzZSAwIGZvciB0aGUgbGVhZFdpZHRoLiBJZiB0aGUgdGV4dCBjb250YWlu
cyBhIHZhcmlhYmxlIHdpZHRoIHRhYiwgdGhlIHJlYWwgd2lkdGgKLSAgICAvLyB3aWxsIGdldCBt
ZWFzdXJlZCB3aGVuIHRyaW1tZWRNaW5NYXhXaWR0aCBjYWxscyBhZ2FpbiB3aXRoIHRoZSByZWFs
IGxlYWRXaWR0aC4KLSAgICBBU1NFUlQoIW1pbk1heEtub3duKCkpOwotICAgIGNhbGNNaW5NYXhX
aWR0aEludGVybmFsKDApOworICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSBub0JyZWFrU3Bh
Y2UgJiYgc3R5bGUtPm5ic3BNb2RlKCkgPT0gU1BBQ0UpOwogfQogCi1pbmxpbmUgYm9vbCBpc1Nw
YWNlQWNjb3JkaW5nVG9TdHlsZShVQ2hhciBjLCBSZW5kZXJTdHlsZSogc3R5bGUpCitpbnQgUmVu
ZGVyVGV4dDo6bWluUHJlZldpZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYyA9PSAnICcgfHwg
KGMgPT0gbm9CcmVha1NwYWNlICYmIHN0eWxlLT5uYnNwTW9kZSgpID09IFNQQUNFKTsKKyAgICBp
ZiAocHJlZldpZHRoc0RpcnR5KCkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRo
aXMpLT5jYWxjUHJlZldpZHRocygwKTsKKyAgICAgICAgCisgICAgcmV0dXJuIG1fbWluV2lkdGg7
CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoSW50ZXJuYWwoaW50IGxlYWRX
aWR0aCkKK2ludCBSZW5kZXJUZXh0OjptYXhQcmVmV2lkdGgoKSBjb25zdAogeworICAgIGlmIChw
cmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJUZXh0Kj4odGhpcykt
PmNhbGNQcmVmV2lkdGhzKDApOworICAgICAgICAKKyAgICByZXR1cm4gbV9tYXhXaWR0aDsKK30K
Kwordm9pZCBSZW5kZXJUZXh0OjpjYWxjUHJlZldpZHRocyhpbnQgbGVhZFdpZHRoKQoreworICAg
IEFTU0VSVChtX2hhc1RhYiB8fCBwcmVmV2lkdGhzRGlydHkoKSk7CisKICAgICBtX21pbldpZHRo
ID0gMDsKICAgICBtX2JlZ2luTWluV2lkdGggPSAwOwogICAgIG1fZW5kTWluV2lkdGggPSAwOwpA
QCAtNjYyLDcgKzY3Miw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y2FsY01pbk1heFdpZHRoSW50ZXJu
YWwKICAgICAgICAgbV9lbmRNaW5XaWR0aCA9IGN1cnJNYXhXaWR0aDsKICAgICB9CiAKLSAgICBz
ZXRNaW5NYXhLbm93bigpOworICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIGJv
b2wgUmVuZGVyVGV4dDo6Y29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNp
Z25lZCBsZW4pIGNvbnN0CkBAIC05MDUsNyArOTE1LDcgQEAgdm9pZCBSZW5kZXJUZXh0OjpzZXRU
ZXh0KFBhc3NSZWZQdHI8U3RyaQogICAgICAgICByZXR1cm47CiAKICAgICBzZXRUZXh0SW50ZXJu
YWwodGV4dCk7Ci0gICAgc2V0TmVlZHNMYXlvdXRBbmRNaW5NYXhSZWNhbGMoKTsKKyAgICBzZXRO
ZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKIH0KIAogaW50IFJlbmRlclRleHQ6Omhl
aWdodCgpIGNvbnN0CkBAIC05OTAsNyArMTAwMCw3IEBAIHVuc2lnbmVkIGludCBSZW5kZXJUZXh0
Ojp3aWR0aCh1bnNpZ25lZCAKICAgICBpbnQgdzsKICAgICBpZiAoJmYgPT0gJnN0eWxlKCktPmZv
bnQoKSkgewogICAgICAgICBpZiAoIXN0eWxlKCktPnByZXNlcnZlTmV3bGluZSgpICYmICFmcm9t
ICYmIGxlbiA9PSB0ZXh0TGVuZ3RoKCkpCi0gICAgICAgICAgICB3ID0gbV9tYXhXaWR0aDsKKyAg
ICAgICAgICAgIHcgPSBtYXhQcmVmV2lkdGgoKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAg
dyA9IHdpZHRoRnJvbUNhY2hlKGYsIGZyb20sIGxlbiwgeFBvcyk7CiAgICAgfSBlbHNlCkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNzUsMTYgKzc1LDE1IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgc2hvcnQg
bGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNv
bnN0OwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNNaW5NYXhXaWR0aCgpOwotICAgIHZpcnR1YWwg
aW50IG1pbldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9taW5XaWR0aDsgfQotICAgIHZpcnR1YWwg
aW50IG1heFdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9tYXhXaWR0aDsgfQotCi0gICAgdm9pZCB0
cmltbWVkTWluTWF4V2lkdGgoaW50IGxlYWRXaWR0aCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpbnQmIGJlZ2luTWluVywgYm9vbCYgYmVnaW5XUywKLSAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpbnQmIGVuZE1pblcsIGJvb2wmIGVuZFdTLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wmIGhhc0JyZWFrYWJsZUNoYXIsIGJvb2wmIGhhc0JyZWFrLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGludCYgYmVnaW5NYXhXLCBpbnQmIGVuZE1heFcsCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgaW50JiBtaW5XLCBpbnQmIG1heFcsIGJvb2wmIHN0cmlwRnJv
bnRTcGFjZXMpOworICAgIHZpcnR1YWwgaW50IG1pblByZWZXaWR0aCgpIGNvbnN0OworICAgIHZp
cnR1YWwgaW50IG1heFByZWZXaWR0aCgpIGNvbnN0OworCisgICAgdm9pZCB0cmltbWVkUHJlZldp
ZHRocyhpbnQgbGVhZFdpZHRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50JiBiZWdp
bk1pblcsIGJvb2wmIGJlZ2luV1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIGVu
ZE1pblcsIGJvb2wmIGVuZFdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCYgaGFz
QnJlYWthYmxlQ2hhciwgYm9vbCYgaGFzQnJlYWssCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpbnQmIGJlZ2luTWF4VywgaW50JiBlbmRNYXhXLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50JiBtaW5XLCBpbnQmIG1heFcsIGJvb2wmIHN0cmlwRnJvbnRTcGFjZXMpOwogCiAgICAg
Ly8gcmV0dXJucyB0aGUgbWluaW11bSB4IHBvc2l0aW9uIG9mIGFsbCBydW5zIHJlbGF0aXZlIHRv
IHRoZSBwYXJlbnQuCiAgICAgLy8gZGVmYXVsdHMgdG8gMC4KQEAgLTEyOSw2ICsxMjgsNyBAQCBw
dWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFRleHRJbnRlcm5hbChQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoaW50IGxlYWRX
aWR0aCk7CiAKIHByaXZhdGU6CiAgICAgLy8gTWFrZSBsZW5ndGgoKSBwcml2YXRlIHNvIHRoYXQg
Y2FsbGVycyB0aGF0IGhhdmUgYSBSZW5kZXJUZXh0KgpAQCAtMTM4LDggKzEzOCw2IEBAIHByaXZh
dGU6CiAKICAgICB2b2lkIGRlbGV0ZVRleHRCb3hlcygpOwogICAgIGJvb2wgY29udGFpbnNPbmx5
V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNvbnN0OwotICAgIHZvaWQg
Y2FsY01pbk1heFdpZHRoSW50ZXJuYWwoaW50IGxlYWRXaWR0aCk7Ci0KICAgICBpbnQgd2lkdGhG
cm9tQ2FjaGUoY29uc3QgRm9udCYsIGludCBzdGFydCwgaW50IGxlbiwgaW50IHhQb3MpIGNvbnN0
OwogICAgIGJvb2wgaXNBbGxBU0NJSSgpIGNvbnN0IHsgcmV0dXJuIG1faXNBbGxBU0NJSTsgfQog
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGV4dENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJUZXh0Q29udHJvbC5jcHAJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVy
aW5nL1JlbmRlclRleHRDb250cm9sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjg4LDEzICs2ODgs
MTUgQEAgdm9pZCBSZW5kZXJUZXh0Q29udHJvbDo6bGF5b3V0KCkKICAgICBSZW5kZXJCbG9jazo6
bGF5b3V0QmxvY2socmVsYXlvdXRDaGlsZHJlbik7CiB9CiAKLXZvaWQgUmVuZGVyVGV4dENvbnRy
b2w6OmNhbGNNaW5NYXhXaWR0aCgpCit2b2lkIFJlbmRlclRleHRDb250cm9sOjpjYWxjUHJlZldp
ZHRocygpCiB7Ci0gICAgbV9taW5XaWR0aCA9IDA7Ci0gICAgbV9tYXhXaWR0aCA9IDA7CisgICAg
QVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKworICAgIG1fbWluUHJlZldpZHRoID0gMDsKKyAg
ICBtX21heFByZWZXaWR0aCA9IDA7CiAKICAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVk
KCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5XaWR0aCA9
IG1fbWF4V2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUo
KSk7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVu
dEJveFdpZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CiAgICAgZWxzZSB7CiAgICAgICAg
IC8vIEZpZ3VyZSBvdXQgaG93IGJpZyBhIHRleHQgY29udHJvbCBuZWVkcyB0byBiZSBmb3IgYSBn
aXZlbiBudW1iZXIgb2YgY2hhcmFjdGVycwogICAgICAgICAvLyAodXNpbmcgIjAiIGFzIHRoZSBu
b21pbmFsIGNoYXJhY3RlcikuCkBAIC03MTIsMjAgKzcxNCwyMCBAQCB2b2lkIFJlbmRlclRleHRD
b250cm9sOjpjYWxjTWluTWF4V2lkdGgoCiAgICAgICAgICAgICBpZiAoZmFjdG9yIDw9IDApCiAg
ICAgICAgICAgICAgICAgZmFjdG9yID0gMjA7CiAgICAgICAgIH0KLSAgICAgICAgbV9tYXhXaWR0
aCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYoY2hhcldpZHRoICogZmFjdG9yKSkgKyBzY3JvbGxi
YXJTaXplOworICAgICAgICBtX21heFByZWZXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYo
Y2hhcldpZHRoICogZmFjdG9yKSkgKyBzY3JvbGxiYXJTaXplOwogICAgIH0KIAogICAgIGlmIChz
dHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVl
KCkgPiAwKSB7Ci0gICAgICAgIG1fbWF4V2lkdGggPSBtYXgobV9tYXhXaWR0aCwgY2FsY0NvbnRl
bnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKLSAgICAgICAgbV9taW5X
aWR0aCA9IG1heChtX21pbldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldp
ZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZX
aWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsK
KyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIGNhbGNDb250ZW50
Qm94V2lkdGgoc3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgfSBlbHNlIGlmIChz
dHlsZSgpLT53aWR0aCgpLmlzUGVyY2VudCgpIHx8IChzdHlsZSgpLT53aWR0aCgpLmlzQXV0bygp
ICYmIHN0eWxlKCktPmhlaWdodCgpLmlzUGVyY2VudCgpKSkKLSAgICAgICAgbV9taW5XaWR0aCA9
IDA7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBlbHNlCi0gICAgICAgIG1fbWlu
V2lkdGggPSBtX21heFdpZHRoOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldp
ZHRoOwogCiAgICAgaWYgKHN0eWxlKCktPm1heFdpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCkt
Pm1heFdpZHRoKCkudmFsdWUoKSAhPSB1bmRlZmluZWRMZW5ndGgpIHsKLSAgICAgICAgbV9tYXhX
aWR0aCA9IG1pbihtX21heFdpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1heFdp
ZHRoKCkudmFsdWUoKSkpOwotICAgICAgICBtX21pbldpZHRoID0gbWluKG1fbWluV2lkdGgsIGNh
bGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+bWF4V2lkdGgoKS52YWx1ZSgpKSk7CisgICAgICAg
IG1fbWF4UHJlZldpZHRoID0gbWluKG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPm1heFdpZHRoKCkudmFsdWUoKSkpOworICAgICAgICBtX21pblByZWZXaWR0aCA9
IG1pbihtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5tYXhXaWR0
aCgpLnZhbHVlKCkpKTsKICAgICB9CiAKICAgICBpbnQgdG9BZGQgPSBwYWRkaW5nTGVmdCgpICsg
cGFkZGluZ1JpZ2h0KCkgKyBib3JkZXJMZWZ0KCkgKyBib3JkZXJSaWdodCgpICsKQEAgLTczOCwx
MCArNzQwLDEwIEBAIHZvaWQgUmVuZGVyVGV4dENvbnRyb2w6OmNhbGNNaW5NYXhXaWR0aCgKICAg
ICAgICAgdG9BZGQgKz0gbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCktPmJvcmRlckxlZnQoKSAr
IG1fY2FuY2VsQnV0dG9uLT5yZW5kZXJlcigpLT5ib3JkZXJSaWdodCgpICsKICAgICAgICAgICAg
ICAgICAgbV9jYW5jZWxCdXR0b24tPnJlbmRlcmVyKCktPnBhZGRpbmdMZWZ0KCkgKyBtX2NhbmNl
bEJ1dHRvbi0+cmVuZGVyZXIoKS0+cGFkZGluZ1JpZ2h0KCk7CiAKLSAgICBtX21pbldpZHRoICs9
IHRvQWRkOwotICAgIG1fbWF4V2lkdGggKz0gdG9BZGQ7CisgICAgbV9taW5QcmVmV2lkdGggKz0g
dG9BZGQ7CisgICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CiAKLSAgICBzZXRNaW5NYXhLbm93
bigpOworICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyVGV4
dENvbnRyb2w6OmZvcndhcmRFdmVudChFdmVudCogZXZ0KQpJbmRleDogcmVuZGVyaW5nL1JlbmRl
clRleHRDb250cm9sLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9s
LmgJKHJldmlzaW9uIDIwOTk3KQorKysgcmVuZGVyaW5nL1JlbmRlclRleHRDb250cm9sLmgJKHdv
cmtpbmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3Qg
Y2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IHsgcmV0dXJuICJSZW5kZXJUZXh0Q29udHJvbCI7IH0K
IAogICAgIHZpcnR1YWwgdm9pZCBjYWxjSGVpZ2h0KCk7Ci0gICAgdmlydHVhbCB2b2lkIGNhbGNN
aW5NYXhXaWR0aCgpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwogICAgIHZp
cnR1YWwgdm9pZCByZW1vdmVMZWZ0b3ZlckFub255bW91c0JveGVzKCkgeyB9CiAgICAgdmlydHVh
bCB2b2lkIHNldFN0eWxlKFJlbmRlclN0eWxlKik7CiAgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUZy
b21FbGVtZW50KCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVmlldy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmlu
Zy9SZW5kZXJWaWV3LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTAgKzUxLDEwIEBAIFJlbmRl
clZpZXc6OlJlbmRlclZpZXcoTm9kZSogbm9kZSwgRnJhbWUKICAgICAvLyB0cnkgdG8gY29udHJh
aW4gdGhlIHdpZHRoIHRvIHRoZSB2aWV3cyB3aWR0aAogICAgIG1fd2lkdGggPSAwOwogICAgIG1f
aGVpZ2h0ID0gMDsKLSAgICBtX21pbldpZHRoID0gMDsKLSAgICBtX21heFdpZHRoID0gMDsKKyAg
ICBtX21pblByZWZXaWR0aCA9IDA7CisgICAgbV9tYXhQcmVmV2lkdGggPSAwOwogCi0gICAgc2V0
TWluTWF4S25vd24oZmFsc2UpOworICAgIHNldFByZWZXaWR0aHNEaXJ0eSh0cnVlLCBmYWxzZSk7
CiAgICAgCiAgICAgc2V0UG9zaXRpb25lZCh0cnVlKTsgLy8gdG8gMCwwIDopCiAKQEAgLTgwLDI4
ICs4MCwyMyBAQCB2b2lkIFJlbmRlclZpZXc6OmNhbGNXaWR0aCgpCiAgICAgbV9tYXJnaW5SaWdo
dCA9IDA7CiB9CiAKLXZvaWQgUmVuZGVyVmlldzo6Y2FsY01pbk1heFdpZHRoKCkKK3ZvaWQgUmVu
ZGVyVmlldzo6Y2FsY1ByZWZXaWR0aHMoKQogewotICAgIEFTU0VSVCghbWluTWF4S25vd24oKSk7
CisgICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKIAotICAgIFJlbmRlckJsb2NrOjpjYWxj
TWluTWF4V2lkdGgoKTsKKyAgICBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsKIAotICAg
IG1fbWF4V2lkdGggPSBtX21pbldpZHRoOwotCi0gICAgc2V0TWluTWF4S25vd24oKTsKKyAgICBt
X21heFByZWZXaWR0aCA9IG1fbWluUHJlZldpZHRoOwogfQogCiB2b2lkIFJlbmRlclZpZXc6Omxh
eW91dCgpCiB7CiAgICAgaWYgKHByaW50aW5nKCkpCi0gICAgICAgIG1fbWluV2lkdGggPSBtX3dp
ZHRoOworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gbV93aWR0aDsK
IAogICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9ICFwcmludGluZygpICYmICghbV9mcmFtZVZp
ZXcgfHwgbV93aWR0aCAhPSBtX2ZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCkgfHwgbV9oZWlnaHQg
IT0gbV9mcmFtZVZpZXctPnZpc2libGVIZWlnaHQoKSk7CiAgICAgaWYgKHJlbGF5b3V0Q2hpbGRy
ZW4pCiAgICAgICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwotCi0gICAgaWYg
KHJlY2FsY01pbk1heCgpKQotICAgICAgICByZWNhbGNNaW5NYXhXaWR0aHMoKTsKICAgICAKICAg
ICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlclZpZXcuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
Vmlldy5oCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmluZy9SZW5kZXJWaWV3LmgJKHdvcmtp
bmcgY29weSkKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBsYXlv
dXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7CiAgICAgdmlydHVhbCB2b2lkIGNh
bGNIZWlnaHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY01pbk1heFdpZHRoKCk7CisgICAgdmly
dHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgdmlydHVhbCBib29sIGFic29sdXRlUG9z
aXRpb24oaW50JiB4UG9zLCBpbnQmIHlQb3MsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7CiAK
ICAgICBpbnQgZG9jSGVpZ2h0KCkgY29uc3Q7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkocmV2aXNpb24g
MjA5OTcpCisrKyByZW5kZXJpbmcvUmVuZGVyV2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTUwLDcgKzE1MCw2IEBAIHZvaWQgUmVuZGVyV2lkZ2V0OjpzZXRXaWRnZXQoV2lkZ2V0KiB3aWQK
IHZvaWQgUmVuZGVyV2lkZ2V0OjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgp
KTsKLSAgICBBU1NFUlQobWluTWF4S25vd24oKSk7CiAKICAgICBzZXROZWVkc0xheW91dChmYWxz
ZSk7CiB9CkluZGV4OiByZW5kZXJpbmcvUm9vdElubGluZUJveC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1Jvb3RJbmxpbmVCb3guY3BwCShyZXZpc2lvbiAyMDk5NykKKysrIHJlbmRlcmlu
Zy9Sb290SW5saW5lQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzc2LDI2ICszNzYsNCBAQCB2
b2lkIFJvb3RJbmxpbmVCb3g6OnNldFZlcnRpY2FsT3ZlcmZsb3dQCiAgICAgbV9vdmVyZmxvdy0+
bV9ib3R0b21PdmVyZmxvdyA9IGJvdHRvbTsgCiB9CiAKLXZvaWQgUm9vdElubGluZUJveDo6c2V0
SG9yaXpvbnRhbE92ZXJmbG93UG9zaXRpb25zKGludCBsZWZ0LCBpbnQgcmlnaHQpIAoteyAKLSAg
ICBpZiAoIW1fb3ZlcmZsb3cpIHsKLSAgICAgICAgaWYgKGxlZnQgPT0gbV94ICYmIHJpZ2h0ID09
IG1feCArIG1fd2lkdGgpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIG1fb3ZlcmZsb3cg
PSBuZXcgKG1fb2JqZWN0LT5yZW5kZXJBcmVuYSgpKSBPdmVyZmxvdyh0aGlzKTsgICAgICAgCi0g
ICAgfQotICAgIG1fb3ZlcmZsb3ctPm1fbGVmdE92ZXJmbG93ID0gbGVmdDsgCi0gICAgbV9vdmVy
Zmxvdy0+bV9yaWdodE92ZXJmbG93ID0gcmlnaHQ7IAotfQotCi12b2lkIFJvb3RJbmxpbmVCb3g6
OnNldFZlcnRpY2FsU2VsZWN0aW9uUG9zaXRpb25zKGludCB0b3AsIGludCBib3R0b20pIAoteyAK
LSAgICBpZiAoIW1fb3ZlcmZsb3cpIHsKLSAgICAgICAgaWYgKHRvcCA9PSBtX3kgJiYgYm90dG9t
ID09IG1feSArIG1faGVpZ2h0KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBtX292ZXJm
bG93ID0gbmV3IChtX29iamVjdC0+cmVuZGVyQXJlbmEoKSkgT3ZlcmZsb3codGhpcyk7Ci0gICAg
fQotICAgIG1fb3ZlcmZsb3ctPm1fc2VsZWN0aW9uVG9wID0gdG9wOyAKLSAgICBtX292ZXJmbG93
LT5tX3NlbGVjdGlvbkJvdHRvbSA9IGJvdHRvbTsgCi19Ci0KIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IHJlbmRlcmluZy9Sb290SW5saW5lQm94LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1Jvb3RJbmxpbmVCb3guaAkocmV2aXNpb24gMjA5OTcpCisrKyByZW5kZXJpbmcvUm9vdElu
bGluZUJveC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjksNiArMTY5LDI4IEBAIHByb3RlY3RlZDoK
ICAgICBXVEY6OlVuaWNvZGU6OkRpcmVjdGlvbiBtX2xpbmVCcmVha0JpZGlTdGF0dXNMYXN0IDog
NTsKIH07CiAKK2lubGluZSB2b2lkIFJvb3RJbmxpbmVCb3g6OnNldEhvcml6b250YWxPdmVyZmxv
d1Bvc2l0aW9ucyhpbnQgbGVmdCwgaW50IHJpZ2h0KSAKK3sgCisgICAgaWYgKCFtX292ZXJmbG93
KSB7CisgICAgICAgIGlmIChsZWZ0ID09IG1feCAmJiByaWdodCA9PSBtX3ggKyBtX3dpZHRoKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBtX292ZXJmbG93ID0gbmV3IChtX29iamVjdC0+
cmVuZGVyQXJlbmEoKSkgT3ZlcmZsb3codGhpcyk7ICAgICAgIAorICAgIH0KKyAgICBtX292ZXJm
bG93LT5tX2xlZnRPdmVyZmxvdyA9IGxlZnQ7IAorICAgIG1fb3ZlcmZsb3ctPm1fcmlnaHRPdmVy
ZmxvdyA9IHJpZ2h0OyAKK30KKworaW5saW5lIHZvaWQgUm9vdElubGluZUJveDo6c2V0VmVydGlj
YWxTZWxlY3Rpb25Qb3NpdGlvbnMoaW50IHRvcCwgaW50IGJvdHRvbSkgCit7IAorICAgIGlmICgh
bV9vdmVyZmxvdykgeworICAgICAgICBpZiAodG9wID09IG1feSAmJiBib3R0b20gPT0gbV95ICsg
bV9oZWlnaHQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1fb3ZlcmZsb3cgPSBuZXcg
KG1fb2JqZWN0LT5yZW5kZXJBcmVuYSgpKSBPdmVyZmxvdyh0aGlzKTsKKyAgICB9CisgICAgbV9v
dmVyZmxvdy0+bV9zZWxlY3Rpb25Ub3AgPSB0b3A7IAorICAgIG1fb3ZlcmZsb3ctPm1fc2VsZWN0
aW9uQm90dG9tID0gYm90dG9tOyAKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAjZW5k
aWYgLy8gUm9vdElubGluZUJveF9oCkluZGV4OiByZW5kZXJpbmcvVGFibGVMYXlvdXQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSByZW5kZXJpbmcvVGFibGVMYXlvdXQuaAkocmV2aXNpb24gMjA5OTcpCisrKyBy
ZW5kZXJpbmcvVGFibGVMYXlvdXQuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIH5UYWJsZUxheW91dCgpIHsgfQogCi0gICAgdmlydHVhbCB2
b2lkIGNhbGNNaW5NYXhXaWR0aChpbnQmIG1pbldpZHRoLCBpbnQmIG1heFdpZHRoKSA9IDA7Cisg
ICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKGludCYgbWluV2lkdGgsIGludCYgbWF4V2lk
dGgpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCkgPSAwOwogCiBwcm90ZWN0ZWQ6Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14168</attachid>
            <date>2007-04-24 23:20:44 -0700</date>
            <delta_ts>2007-04-25 00:40:07 -0700</delta_ts>
            <desc>first reduced patch (still passes all layout tests)</desc>
            <filename>ReducedPatch.txt</filename>
            <type>text/plain</type>
            <size>82108</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGNzcy9jc3NzdHlsZXNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBjc3MvY3Nzc3R5
bGVzZWxlY3Rvci5jcHAJKHJldmlzaW9uIDIxMDgwKQorKysgY3NzL2Nzc3N0eWxlc2VsZWN0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMDEsNyArMzAxLDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjppbml0KCkKIHsKICAgICBlbGVtZW50ID0gMDsKICAgICBzZXR0aW5ncyA9IDA7Ci0gICAg
bV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsKICAgICBtX21hdGNoZWREZWNscy5jbGVhcigpOwogICAg
IG1fcnVsZUxpc3QgPSAwOwogICAgIG1fY29sbGVjdFJ1bGVzT25seSA9IGZhbHNlOwpAQCAtNTY0
LDcgKzU2Myw2IEBAIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2wKIAog
ICAgIHN0eWxlID0gMDsKICAgICAKLSAgICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIG1f
bWF0Y2hlZERlY2xzLmNsZWFyKCk7CiAKICAgICBtX3J1bGVMaXN0ID0gMDsKSW5kZXg6IHBhZ2Uv
RnJhbWVWaWV3LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdlL0ZyYW1lVmlldy5jcHAJKHJldmlzaW9u
IDIxMDgwKQorKysgcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTAsMTAg
KzQxMCw2IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUKICAgICAg
ICAgcm9vdC0+cmVwYWludE9iamVjdHNCZWZvcmVMYXlvdXQoKTsKICAgICB9CiAKLSAgICBpZiAo
c3VidHJlZSkgewotICAgICAgICBpZiAocm9vdC0+cmVjYWxjTWluTWF4KCkpCi0gICAgICAgICAg
ICByb290LT5yZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICB9CiAgICAgcGF1c2VTY2hlZHVsZWRF
dmVudHMoKTsKICAgICByb290LT5sYXlvdXQoKTsKICAgICBkLT5sYXlvdXRSb290ID0gMDsKSW5k
ZXg6IHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmlu
Zy9BdXRvVGFibGVMYXlvdXQuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9BdXRv
VGFibGVMYXlvdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NiwxMCArNzYsNyBAQCB2b2lkIEF1
dG9UYWJsZUxheW91dDo6cmVjYWxjQ29sdW1uKGludCBlCiAgICAgICAgICAgICAgICAgICAgIC8v
IGEgbWluL21heCB3aWR0aCBvZiBhdCBsZWFzdCAxcHggZm9yIHRoaXMgY29sdW1uIG5vdy4KICAg
ICAgICAgICAgICAgICAgICAgbC5taW5XaWR0aCA9IG1heChsLm1pbldpZHRoLCAxKTsKICAgICAg
ICAgICAgICAgICAgICAgbC5tYXhXaWR0aCA9IG1heChsLm1heFdpZHRoLCAxKTsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKGNlbGwtPnByZWZXaWR0aHNEaXJ0eSgpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgY2VsbC0+Y2FsY1ByZWZXaWR0aHMoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGNlbGwtPm1pblByZWZXaWR0aCgpID4gbC5taW5XaWR0aCkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGwubWluV2lkdGggPSBjZWxsLT5taW5QcmVmV2lkdGgoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbC5taW5XaWR0aCA9IG1heChjZWxsLT5taW5QcmVmV2lkdGgoKSwgbC5taW5XaWR0aCk7CiAg
ICAgICAgICAgICAgICAgICAgIGlmIChjZWxsLT5tYXhQcmVmV2lkdGgoKSA+IGwubWF4V2lkdGgp
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIGwubWF4V2lkdGggPSBjZWxsLT5tYXhQcmVmV2lk
dGgoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIG1heENvbnRyaWJ1dG9yID0gY2VsbDsKSW5k
ZXg6IHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcv
QXV0b1RhYmxlTGF5b3V0LmgJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL0F1dG9UYWJs
ZUxheW91dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Miw4ICs3Miw4IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgaW50IGNhbGNXaWR0aDsKICAgICB9OwogCi0gICAgVmVjdG9yPExheW91dD4gbV9sYXlv
dXRTdHJ1Y3Q7Ci0gICAgVmVjdG9yPFJlbmRlclRhYmxlQ2VsbCo+IG1fc3BhbkNlbGxzOworICAg
IFZlY3RvcjxMYXlvdXQsIDQ+IG1fbGF5b3V0U3RydWN0OworICAgIFZlY3RvcjxSZW5kZXJUYWJs
ZUNlbGwqLCA0PiBtX3NwYW5DZWxsczsKICAgICBib29sIG1faGFzUGVyY2VudCA6IDE7CiAgICAg
bXV0YWJsZSBib29sIG1fcGVyY2VudGFnZXNEaXJ0eSA6IDE7CiAgICAgbXV0YWJsZSBib29sIG1f
ZWZmV2lkdGhEaXJ0eSA6IDE7CkluZGV4OiByZW5kZXJpbmcvSW5saW5lQm94LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL0lubGluZUJveC5oCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmlu
Zy9JbmxpbmVCb3guaAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIsNyBAQCBwdWJsaWM6CiAg
ICAgICAgICwgbV9leHRyYWN0ZWQoZmFsc2UpCiAgICAgICAgICwgbV9pbmNsdWRlTGVmdEVkZ2Uo
ZmFsc2UpCiAgICAgICAgICwgbV9pbmNsdWRlUmlnaHRFZGdlKGZhbHNlKQotICAgICAgICAsIG1f
aGFzVGV4dENoaWxkcmVuKGZhbHNlKQorICAgICAgICAsIG1faGFzVGV4dENoaWxkcmVuKHRydWUp
CiAgICAgICAgICwgbV9lbmRzV2l0aEJyZWFrKGZhbHNlKQogICAgICAgICAsIG1faGFzU2VsZWN0
ZWRDaGlsZHJlbihmYWxzZSkKICAgICAgICAgLCBtX2hhc0VsbGlwc2lzQm94KGZhbHNlKQpAQCAt
ODMsNyArODMsNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9leHRyYWN0ZWQoZXh0cmFjdGVkKQog
ICAgICAgICAsIG1faW5jbHVkZUxlZnRFZGdlKGZhbHNlKQogICAgICAgICAsIG1faW5jbHVkZVJp
Z2h0RWRnZShmYWxzZSkKLSAgICAgICAgLCBtX2hhc1RleHRDaGlsZHJlbihmYWxzZSkKKyAgICAg
ICAgLCBtX2hhc1RleHRDaGlsZHJlbih0cnVlKQogICAgICAgICAsIG1fZW5kc1dpdGhCcmVhayhm
YWxzZSkKICAgICAgICAgLCBtX2hhc1NlbGVjdGVkQ2hpbGRyZW4oZmFsc2UpICAgCiAgICAgICAg
ICwgbV9oYXNFbGxpcHNpc0JveChmYWxzZSkKQEAgLTE4NSw3ICsxODUsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCBzZXRCYXNlbGluZShpbnQgYikgeyBtX2Jhc2VsaW5lID0gYjsgfQogICAgIGludCBi
YXNlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZWxpbmU7IH0KIAotICAgIHZpcnR1YWwgYm9v
bCBoYXNUZXh0Q2hpbGRyZW4oKSB7IHJldHVybiB0cnVlOyB9CisgICAgYm9vbCBoYXNUZXh0Q2hp
bGRyZW4oKSBjb25zdCB7IHJldHVybiBtX2hhc1RleHRDaGlsZHJlbjsgfQogCiAgICAgdmlydHVh
bCBpbnQgdG9wT3ZlcmZsb3coKSB7IHJldHVybiB5UG9zKCk7IH0KICAgICB2aXJ0dWFsIGludCBi
b3R0b21PdmVyZmxvdygpIHsgcmV0dXJuIHlQb3MoKSArIGhlaWdodCgpOyB9CkluZGV4OiByZW5k
ZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93
Qm94LmgJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29y
a2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9sYXN0Q2hp
bGQoMCkKICAgICAgICAgLCBtX21heEhvcml6b250YWxWaXN1YWxPdmVyZmxvdygwKQogICAgIHsK
KyAgICAgICAgbV9oYXNUZXh0Q2hpbGRyZW4gPSBmYWxzZTsKICAgICB9CiAKICAgICBSZW5kZXJG
bG93KiBmbG93T2JqZWN0KCk7CkBAIC05OCw4ICs5OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9p
bmNsdWRlUmlnaHRFZGdlID0gaW5jbHVkZVJpZ2h0OwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9v
bCBoYXNUZXh0Q2hpbGRyZW4oKSB7IHJldHVybiBtX2hhc1RleHRDaGlsZHJlbjsgfQotCiAgICAg
Ly8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGR1cmluZyBsaW5lIGNvbnN0cnVjdGlvbiBhbmQgcGxh
Y2VtZW50LgogICAgIHZvaWQgZGV0ZXJtaW5lU3BhY2luZ0ZvckZsb3dCb3hlcyhib29sIGxhc3RM
aW5lLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCk7CiAgICAgaW50IGdldEZsb3dTcGFjaW5nV2lk
dGgoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9S
ZW5kZXJBcHBsZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw2IEBAIHZvaWQgUmVu
ZGVyQXBwbGV0OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKIHZvaWQgUmVuZGVyQXBwbGV0OjpsYXlv
dXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIXByZWZXaWR0
aHNEaXJ0eSgpKTsKIAogICAgIGNhbGNXaWR0aCgpOwogICAgIGNhbGNIZWlnaHQoKTsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
ckJsb2NrLmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMjUsOSArMzI1LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFr
ZUNoaWxkcmVuTm9uSW5saW5lKAogICAgICAgICB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3Qq
IG5vID0gbzsKICAgICAgICAgICAgIG8gPSBuby0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAg
IGJveC0+YXBwZW5kQ2hpbGROb2RlKHJlbW92ZUNoaWxkTm9kZShubykpOworICAgICAgICAgICAg
Ym94LT5tb3ZlQ2hpbGROb2RlKG5vKTsKICAgICAgICAgfQotICAgICAgICBib3gtPmFwcGVuZENo
aWxkTm9kZShyZW1vdmVDaGlsZE5vZGUoaW5saW5lUnVuRW5kKSk7CisgICAgICAgIGJveC0+bW92
ZUNoaWxkTm9kZShpbmxpbmVSdW5FbmQpOwogICAgIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTM1
NSw4ICszNTUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAg
ICAgICAgIHdoaWxlIChvKSB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAg
ICAgICAgICAgIG8gPSBuby0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHByZXYtPmFwcGVu
ZENoaWxkTm9kZShuZXh0LT5yZW1vdmVDaGlsZE5vZGUobm8pKTsKLSAgICAgICAgICAgIG5vLT5z
ZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgICAgIHByZXYtPm1v
dmVDaGlsZE5vZGUobm8pOwogICAgICAgICB9CiAgCiAgICAgICAgIFJlbmRlckJsb2NrKiBuZXh0
QmxvY2sgPSBzdGF0aWNfY2FzdDxSZW5kZXJCbG9jayo+KG5leHQpOwpAQCAtMzgwLDggKzM3OSw3
IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgd2hp
bGUgKG8pIHsKICAgICAgICAgICAgIFJlbmRlck9iamVjdCogbm8gPSBvOwogICAgICAgICAgICAg
byA9IG5vLT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgYXBwZW5kQ2hpbGROb2RlKGFub25C
bG9jay0+cmVtb3ZlQ2hpbGROb2RlKG5vKSk7Ci0gICAgICAgICAgICBuby0+c2V0TmVlZHNMYXlv
dXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CisgICAgICAgICAgICBtb3ZlQ2hpbGROb2RlKG5vKTsK
ICAgICAgICAgfQogCiAgICAgICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGlu
ZXMgYW5kIG51a2UgaXQuCkBAIC00NjQsNiArNDYyLDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNT
ZWxmQ29sbGFwc2luZ0Jsb2NrKAogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogeworICAg
IC8vIFVwZGF0ZSBvdXIgZmlyc3QgbGV0dGVyIGluZm8gbm93LgorICAgIHVwZGF0ZUZpcnN0TGV0
dGVyKCk7CisKICAgICAvLyBUYWJsZSBjZWxscyBjYWxsIGxheW91dEJsb2NrIGRpcmVjdGx5LCBz
byBkb24ndCBhZGQgYW55IGxvZ2ljIGhlcmUuICBQdXQgY29kZSBpbnRvCiAgICAgLy8gbGF5b3V0
QmxvY2soKS4KICAgICBsYXlvdXRCbG9jayhmYWxzZSk7CkBAIC00ODEsNyArNDgyLDYgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6bGF5b3V0KCkKIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAg
QVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICBpZiAoaXNJbmxpbmUoKSAmJiAhaXNJ
bmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSkgLy8gSW5saW5lIDxmb3JtPnMgaW5zaWRlIHZhcmlv
dXMgdGFibGUgZWxlbWVudHMgY2FuCiAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIC8vIGNhdXNlIHVzIHRvIGNvbWUgaW4gaGVyZS4gIEp1c3QgYmFp
bC4KQEAgLTUzNCw3ICs1MzQsOCBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgLy8KICAgICAvLyBTdGFydCBvdXQgYnkgc2V0dGluZyBvdXIgbWFyZ2luIHZh
bHVlcyB0byBvdXIgY3VycmVudCBtYXJnaW5zLiAgVGFibGUgY2VsbHMgaGF2ZQogICAgIC8vIG5v
IG1hcmdpbnMsIHNvIHdlIGRvbid0IGZpbGwgaW4gdGhlIHZhbHVlcyBmb3IgdGFibGUgY2VsbHMu
Ci0gICAgaWYgKCFpc1RhYmxlQ2VsbCgpKSB7CisgICAgYm9vbCBpc0NlbGwgPSBpc1RhYmxlQ2Vs
bCgpOworICAgIGlmICghaXNDZWxsKSB7CiAgICAgICAgIGluaXRNYXhNYXJnaW5WYWx1ZXMoKTsK
IAogICAgICAgICBtX3RvcE1hcmdpblF1aXJrID0gc3R5bGUoKS0+bWFyZ2luVG9wKCkucXVpcmso
KTsKQEAgLTU5NCw3ICs1OTUsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhib29s
IHJlbGF5CiAgICAgICAgIG1faGVpZ2h0ICs9IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRv
bSgpOwogICAgIH0KIAotICAgIGlmICgoaXNUYWJsZUNlbGwoKSB8fCBpc0lubGluZSgpIHx8IGlz
RmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCBpc1Jvb3QoKSkgJiYgIWhhc092ZXJmbG93Q2xpcCgp
ICYmICFoYXNDb250cm9sQ2xpcCgpKQorICAgIGlmICgoaXNDZWxsIHx8IGlzSW5saW5lKCkgfHwg
aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGlzUm9vdCgpKSAmJiAhaGFzT3ZlcmZsb3dDbGlw
KCkgJiYgIWhhc0NvbnRyb2xDbGlwKCkpCiAgICAgICAgIGFkZFZpc3VhbE92ZXJmbG93KGZsb2F0
UmVjdCgpKTsKIAogICAgIGxheW91dFBvc2l0aW9uZWRPYmplY3RzKHJlbGF5b3V0Q2hpbGRyZW4g
fHwgaXNSb290KCkpOwpAQCAtMTI3OSw3ICsxMjgwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cmVw
YWludE92ZXJoYW5naW5nRmxvYQogICAgICAgICAgICAgLy8gT25seSByZXBhaW50IHRoZSBvYmpl
Y3QgaWYgaXQgaXMgb3ZlcmhhbmdpbmcsIGlzIG5vdCBpbiBpdHMgb3duIGxheWVyLCBhbmQKICAg
ICAgICAgICAgIC8vIGlzIG91ciByZXNwb25zaWJpbGl0eSB0byBwYWludCAobm9QYWludCBpc24n
dCBzZXQpLiBXaGVuIHBhaW50QWxsRGVzY2VuZGFudHMgaXMgdHJ1ZSwgdGhlIGxhdHRlcgogICAg
ICAgICAgICAgLy8gY29uZGl0aW9uIGlzIHJlcGxhY2VkIHdpdGggYmVpbmcgYSBkZXNjZW5kYW50
IG9mIHVzLgotICAgICAgICAgICAgaWYgKHItPmVuZFkgPiBtX2hlaWdodCAmJiAocGFpbnRBbGxE
ZXNjZW5kYW50cyAmJiByLT5ub2RlLT5pc0Rlc2NlbmRhbnRPZih0aGlzKSB8fCAhci0+bm9QYWlu
dCkgJiYgIXItPm5vZGUtPmxheWVyKCkpIHsgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBp
ZiAoci0+ZW5kWSA+IG1faGVpZ2h0ICYmIChwYWludEFsbERlc2NlbmRhbnRzICYmIHItPm5vZGUt
PmlzRGVzY2VuZGFudE9mKHRoaXMpIHx8ICFyLT5ub1BhaW50KSAmJiAhci0+bm9kZS0+aGFzTGF5
ZXIoKSkgeyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICByLT5ub2RlLT5yZXBhaW50
KCk7CiAgICAgICAgICAgICAgICAgci0+bm9kZS0+cmVwYWludE92ZXJoYW5naW5nRmxvYXRzKCk7
CiAgICAgICAgICAgICB9CkBAIC0xNDQ5LDcgKzE0NTAsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpw
YWludENoaWxkcmVuKFBhaW50SW5mCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAot
ICAgICAgICBpZiAoIWNoaWxkLT5sYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQorICAg
ICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmICFjaGlsZC0+aXNGbG9hdGluZygpKQogICAg
ICAgICAgICAgY2hpbGQtPnBhaW50KGluZm8sIHR4LCB0eSk7CiAKICAgICAgICAgLy8gQ2hlY2sg
Zm9yIHBhZ2UtYnJlYWstYWZ0ZXI6IGFsd2F5cywgYW5kIGlmIGl0J3Mgc2V0LCBicmVhayBhbmQg
YmFpbC4KQEAgLTE1NDgsNyArMTU0OSw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50RmxvYXRz
KFBhaW50SW5mbyYKICAgICBEZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0
PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwogICAgIGZvciAoOyAociA9IGl0LmN1cnJlbnQoKSk7
ICsraXQpIHsKICAgICAgICAgLy8gT25seSBwYWludCB0aGUgb2JqZWN0IGlmIG91ciBub1BhaW50
IGZsYWcgaXNuJ3Qgc2V0LgotICAgICAgICBpZiAoIXItPm5vUGFpbnQgJiYgIXItPm5vZGUtPmxh
eWVyKCkpIHsKKyAgICAgICAgaWYgKCFyLT5ub1BhaW50ICYmICFyLT5ub2RlLT5oYXNMYXllcigp
KSB7CiAgICAgICAgICAgICBQYWludEluZm8gY3VycmVudFBhaW50SW5mbyhwYWludEluZm8pOwog
ICAgICAgICAgICAgY3VycmVudFBhaW50SW5mby5waGFzZSA9IHBhaW50U2VsZWN0aW9uID8gUGFp
bnRQaGFzZVNlbGVjdGlvbiA6IFBhaW50UGhhc2VCbG9ja0JhY2tncm91bmQ7CiAgICAgICAgICAg
ICBpbnQgY3VycmVudFRYID0gdHggKyByLT5sZWZ0IC0gci0+bm9kZS0+eFBvcygpICsgci0+bm9k
ZS0+bWFyZ2luTGVmdCgpOwpAQCAtMTc2NSw3ICsxNzY2LDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxv
Y2s6OmZpbGxCbG9ja1NlbGVjdGlvbgogICAgICAgICBpZiAoY3Vyci0+aXNGbG9hdGluZ09yUG9z
aXRpb25lZCgpKQogICAgICAgICAgICAgY29udGludWU7IC8vIFdlIG11c3QgYmUgYSBub3JtYWwg
ZmxvdyBvYmplY3QgaW4gb3JkZXIgdG8gZXZlbiBiZSBjb25zaWRlcmVkLgogCi0gICAgICAgIGlm
IChjdXJyLT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjdXJyLT5sYXllcigpKSB7CisgICAgICAgIGlm
IChjdXJyLT5pc1JlbFBvc2l0aW9uZWQoKSAmJiBjdXJyLT5oYXNMYXllcigpKSB7CiAgICAgICAg
ICAgICAvLyBJZiB0aGUgcmVscG9zaXRpb24gb2Zmc2V0IGlzIGFueXRoaW5nIG90aGVyIHRoYW4g
MCwgdGhlbiB0cmVhdCB0aGlzIGp1c3QgbGlrZSBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGVsZW1l
bnQuCiAgICAgICAgICAgICAvLyBKdXN0IGRpc3JlZ2FyZCBpdCBjb21wbGV0ZWx5LgogICAgICAg
ICAgICAgaW50IHggPSAwOwpAQCAtMjAwNiw3ICsyMDA3LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6
aW5zZXJ0RmxvYXRpbmdPYmplY3QoUgogICAgICAgICBuZXdPYmotPnN0YXJ0WSA9IC0xOwogICAg
ICAgICBuZXdPYmotPmVuZFkgPSAtMTsKICAgICAgICAgbmV3T2JqLT53aWR0aCA9IG8tPndpZHRo
KCkgKyBvLT5tYXJnaW5MZWZ0KCkgKyBvLT5tYXJnaW5SaWdodCgpOwotICAgICAgICBuZXdPYmot
Pm5vUGFpbnQgPSBvLT5sYXllcigpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhlIGZsb2F0IHdp
bGwgcGFpbnQgaXRzZWxmLiAgT3RoZXJ3aXNlIHNvbWVvbmUgZWxzZSB3aWxsLgorICAgICAgICBu
ZXdPYmotPm5vUGFpbnQgPSBvLT5oYXNMYXllcigpOyAvLyBJZiBhIGxheWVyIGV4aXN0cywgdGhl
IGZsb2F0IHdpbGwgcGFpbnQgaXRzZWxmLiAgT3RoZXJ3aXNlIHNvbWVvbmUgZWxzZSB3aWxsLgog
ICAgIH0KICAgICBlbHNlIHsKICAgICAgICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBh
cyBpbnNlcnRGbG9hdGluZ09iamVjdCgpIHNob3VsZCBvbmx5IGV2ZXIgYmUgY2FsbGVkIHdpdGgg
ZmxvYXRpbmcKQEAgLTIyNjAsNyArMjI2MSw3IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6OmZsb2F0
UmVjdCgpIGNvbnN0CiAgICAgRmxvYXRpbmdPYmplY3QqIHI7CiAgICAgRGVwcmVjYXRlZFB0ckxp
c3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICBm
b3IgKDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0KSB7Ci0gICAgICAgIGlmICghci0+bm9QYWlu
dCAmJiAhci0+bm9kZS0+bGF5ZXIoKSkgeworICAgICAgICBpZiAoIXItPm5vUGFpbnQgJiYgIXIt
Pm5vZGUtPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgIEludFJlY3QgY2hpbGRSZWN0ID0gci0+
bm9kZS0+b3ZlcmZsb3dSZWN0KGZhbHNlKTsKICAgICAgICAgICAgIGNoaWxkUmVjdC5tb3ZlKHIt
PmxlZnQgKyByLT5ub2RlLT5tYXJnaW5MZWZ0KCksIHItPnN0YXJ0WSArIHItPm5vZGUtPm1hcmdp
blRvcCgpKTsKICAgICAgICAgICAgIHJlc3VsdC51bml0ZShjaGlsZFJlY3QpOwpAQCAtMjMwMyw3
ICsyMzA0LDcgQEAgaW50IFJlbmRlckJsb2NrOjpsb3dlc3RQb3NpdGlvbihib29sIGluYwogICAg
ICAgICBGbG9hdGluZ09iamVjdCogcjsKICAgICAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRv
cjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAgICAgZm9yICgg
OyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQgKSB7Ci0gICAgICAgICAgICBpZiAoIXItPm5vUGFp
bnQgfHwgci0+bm9kZS0+bGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKCFyLT5ub1BhaW50IHx8
IHItPm5vZGUtPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgbHAgPSByLT5zdGFy
dFkgKyByLT5ub2RlLT5tYXJnaW5Ub3AoKSArIHItPm5vZGUtPmxvd2VzdFBvc2l0aW9uKGZhbHNl
KTsKICAgICAgICAgICAgICAgICBib3R0b20gPSBtYXgoYm90dG9tLCBscCk7CiAgICAgICAgICAg
ICB9CkBAIC0yMzUyLDcgKzIzNTMsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OnJpZ2h0bW9zdFBvc2l0
aW9uKGJvb2wgCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwogICAgICAgICBEZXByZWNhdGVk
UHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwog
ICAgICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApIHsKLSAgICAgICAgICAg
IGlmICghci0+bm9QYWludCB8fCByLT5ub2RlLT5sYXllcigpKSB7CisgICAgICAgICAgICBpZiAo
IXItPm5vUGFpbnQgfHwgci0+bm9kZS0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgICAgIGlu
dCBycCA9IHItPmxlZnQgKyByLT5ub2RlLT5tYXJnaW5MZWZ0KCkgKyByLT5ub2RlLT5yaWdodG1v
c3RQb3NpdGlvbihmYWxzZSk7CiAgICAgICAgICAgICAgICAgcmlnaHQgPSBtYXgocmlnaHQsIHJw
KTsKICAgICAgICAgICAgIH0KQEAgLTI0MDYsNyArMjQwNyw3IEBAIGludCBSZW5kZXJCbG9jazo6
bGVmdG1vc3RQb3NpdGlvbihib29sIGkKICAgICAgICAgRmxvYXRpbmdPYmplY3QqIHI7CiAgICAg
ICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0
aW5nT2JqZWN0cyk7CiAgICAgICAgIGZvciAoIDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0ICkg
ewotICAgICAgICAgICAgaWYgKCFyLT5ub1BhaW50IHx8IHItPm5vZGUtPmxheWVyKCkpIHsKKyAg
ICAgICAgICAgIGlmICghci0+bm9QYWludCB8fCByLT5ub2RlLT5oYXNMYXllcigpKSB7CiAgICAg
ICAgICAgICAgICAgaW50IGxwID0gci0+bGVmdCArIHItPm5vZGUtPm1hcmdpbkxlZnQoKSArIHIt
Pm5vZGUtPmxlZnRtb3N0UG9zaXRpb24oZmFsc2UpOwogICAgICAgICAgICAgICAgIGxlZnQgPSBt
aW4obGVmdCwgbHApOwogICAgICAgICAgICAgfQpAQCAtMjUzMSw3ICsyNTMyLDcgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMoUgogICAgICAgICAgICAgICAgIG1fZmxv
YXRpbmdPYmplY3RzLT5hcHBlbmQoZmxvYXRpbmdPYmopOwogICAgICAgICAgICAgfQogICAgICAg
ICB9Ci0gICAgICAgIGlmICghci0+bm9QYWludCAmJiAhci0+bm9kZS0+bGF5ZXIoKSkgeworICAg
ICAgICBpZiAoIXItPm5vUGFpbnQgJiYgIXItPm5vZGUtPmhhc0xheWVyKCkpIHsKICAgICAgICAg
ICAgIEludFJlY3QgZmxvYXRPdmVyZmxvd1JlY3QgPSByLT5ub2RlLT5vdmVyZmxvd1JlY3QoZmFs
c2UpOwogICAgICAgICAgICAgZmxvYXRPdmVyZmxvd1JlY3QubW92ZShyLT5sZWZ0ICsgci0+bm9k
ZS0+bWFyZ2luTGVmdCgpLCByLT5zdGFydFkgKyByLT5ub2RlLT5tYXJnaW5Ub3AoKSk7CiAgICAg
ICAgICAgICBmbG9hdHNPdmVyZmxvd1JlY3QudW5pdGUoZmxvYXRPdmVyZmxvd1JlY3QpOwpAQCAt
MjcyNiw3ICsyNzI3LDcgQEAgYm9vbCBSZW5kZXJCbG9jazo6bm9kZUF0UG9pbnQoY29uc3QgSGl0
VAogICAgICAgICAgICAgRmxvYXRpbmdPYmplY3QqIG87CiAgICAgICAgICAgICBEZXByZWNhdGVk
UHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09iamVjdHMpOwog
ICAgICAgICAgICAgZm9yIChpdC50b0xhc3QoKTsgKG8gPSBpdC5jdXJyZW50KCkpOyAtLWl0KSB7
Ci0gICAgICAgICAgICAgICAgaWYgKCFvLT5ub1BhaW50ICYmICFvLT5ub2RlLT5sYXllcigpKSB7
CisgICAgICAgICAgICAgICAgaWYgKCFvLT5ub1BhaW50ICYmICFvLT5ub2RlLT5oYXNMYXllcigp
KSB7CiAgICAgICAgICAgICAgICAgICAgIGludCB4b2Zmc2V0ID0gc2Nyb2xsZWRYICsgby0+bGVm
dCArIG8tPm5vZGUtPm1hcmdpbkxlZnQoKSAtIG8tPm5vZGUtPnhQb3MoKTsKICAgICAgICAgICAg
ICAgICAgICAgaW50IHlvZmZzZXQgPSAgc2Nyb2xsZWRZICsgby0+c3RhcnRZICsgby0+bm9kZS0+
bWFyZ2luVG9wKCkgLSBvLT5ub2RlLT55UG9zKCk7CiAgICAgICAgICAgICAgICAgICAgIGlmIChv
LT5ub2RlLT5oaXRUZXN0KHJlcXVlc3QsIHJlc3VsdCwgX3gsIF95LCB4b2Zmc2V0LCB5b2Zmc2V0
KSkgewpAQCAtMzI1MCw5ICszMjUxLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0
aHMoKQogewogICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CiAKLSNpZmRlZiBERUJVR19M
QVlPVVQKLSAgICBrZERlYnVnKCA2MDQwICkgPDwgcmVuZGVyTmFtZSgpIDw8ICIoUmVuZGVyQmxv
Y2spOjpjYWxjUHJlZldpZHRocygpIHRoaXM9IiA8PCB0aGlzIDw8IGVuZGw7Ci0jZW5kaWYKKyAg
ICB1cGRhdGVGaXJzdExldHRlcigpOwogCiAgICAgaWYgKCFpc1RhYmxlQ2VsbCgpICYmIHN0eWxl
KCktPndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCiAg
ICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVudEJveFdp
ZHRoKHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CkBAIC0zMjY1LDggKzMyNjQsOCBAQCB2b2lk
IFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocygpCiAgICAgICAgIGVsc2UKICAgICAgICAgICAg
IGNhbGNCbG9ja1ByZWZXaWR0aHMoKTsKIAotICAgICAgICBpZihtX21heFByZWZXaWR0aCA8IG1f
bWluUHJlZldpZHRoKSBtX21heFByZWZXaWR0aCA9IG1fbWluUHJlZldpZHRoOwotCisgICAgICAg
IG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBtX21heFByZWZXaWR0aCk7Cisg
ICAgICAgIAogICAgICAgICBpZiAoIXN0eWxlKCktPmF1dG9XcmFwKCkgJiYgY2hpbGRyZW5Jbmxp
bmUoKSkgewogICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aDsKICAg
ICAgICAgICAgIApAQCAtMzI3Niw3ICszMjc1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY1By
ZWZXaWR0aHMoKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzVGFibGVDZWxsKCkpIHsKLSAg
ICAgICAgICAgIExlbmd0aCB3ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4odGhpcykt
PnN0eWxlT3JDb2xXaWR0aCgpOworICAgICAgICAgICAgTGVuZ3RoIHcgPSBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJUYWJsZUNlbGwqPih0aGlzKS0+c3R5bGVPckNvbFdpZHRoKCk7CiAgICAgICAg
ICAgICBpZiAody5pc0ZpeGVkKCkgJiYgdy52YWx1ZSgpID4gMCkKICAgICAgICAgICAgICAgICBt
X21heFByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aCh3
LnZhbHVlKCkpKTsKICAgICAgICAgfQpAQCAtMzI5OSw4ICszMjk4LDYgQEAgdm9pZCBSZW5kZXJC
bG9jazo6Y2FsY1ByZWZXaWR0aHMoKQogICAgIG1fbWF4UHJlZldpZHRoICs9IHRvQWRkOwogCiAg
ICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKLQotICAgIC8va2REZWJ1ZyggNjA0MCApIDw8
ICJUZXh0OjpjYWxjUHJlZldpZHRocygiIDw8IHRoaXMgPDwgIik6IG1pbiA9ICIgPDwgbV9taW5Q
cmVmV2lkdGggPDwgIiBtYXggPSAiIDw8IG1fbWF4UHJlZldpZHRoIDw8IGVuZGw7CiB9CiAKIHN0
cnVjdCBJbmxpbmVNaW5NYXhJdGVyYXRvcgpAQCAtMzMxNyw4ICszMzE0LDggQEAgc3RydWN0IElu
bGluZU1pbk1heEl0ZXJhdG9yCiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50OwogICAgIGJvb2wg
ZW5kT2ZJbmxpbmU7CiAKLSAgICBJbmxpbmVNaW5NYXhJdGVyYXRvcihSZW5kZXJPYmplY3QqIHAs
IFJlbmRlck9iamVjdCogbywgYm9vbCBlbmQgPSBmYWxzZSkKLSAgICAgICAgOnBhcmVudChwKSwg
Y3VycmVudChvKSwgZW5kT2ZJbmxpbmUoZW5kKSB7fQorICAgIElubGluZU1pbk1heEl0ZXJhdG9y
KFJlbmRlck9iamVjdCogcCwgYm9vbCBlbmQgPSBmYWxzZSkKKyAgICAgICAgOnBhcmVudChwKSwg
Y3VycmVudChwKSwgZW5kT2ZJbmxpbmUoZW5kKSB7fQogCiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0
KCk7CiB9OwpAQCAtMzMyOCw5ICszMzI1LDcgQEAgUmVuZGVyT2JqZWN0KiBJbmxpbmVNaW5NYXhJ
dGVyYXRvcjo6bmV4dAogICAgIFJlbmRlck9iamVjdCogcmVzdWx0ID0gMDsKICAgICBib29sIG9s
ZEVuZE9mSW5saW5lID0gZW5kT2ZJbmxpbmU7CiAgICAgZW5kT2ZJbmxpbmUgPSBmYWxzZTsKLSAg
ICB3aGlsZSAoY3VycmVudCAhPSAwIHx8IChjdXJyZW50ID09IHBhcmVudCkpCi0gICAgewotICAg
ICAgICAvL2tkRGVidWcoIDYwNDAgKSA8PCAiY3VycmVudCA9ICIgPDwgY3VycmVudCA8PCBlbmRs
OworICAgIHdoaWxlIChjdXJyZW50IHx8IGN1cnJlbnQgPT0gcGFyZW50KSB7CiAgICAgICAgIGlm
ICghb2xkRW5kT2ZJbmxpbmUgJiYKICAgICAgICAgICAgIChjdXJyZW50ID09IHBhcmVudCB8fAog
ICAgICAgICAgICAgICghY3VycmVudC0+aXNGbG9hdGluZygpICYmICFjdXJyZW50LT5pc1JlcGxh
Y2VkKCkgJiYgIWN1cnJlbnQtPmlzUG9zaXRpb25lZCgpKSkpCkBAIC0zMzU1LDExICszMzUwLDEw
IEBAIFJlbmRlck9iamVjdCogSW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIGlmICghcmVzdWx0KSBicmVhazsKKyAgICAgICAgaWYg
KCFyZXN1bHQpCisgICAgICAgICAgICBicmVhazsKIAotICAgICAgICBpZiAoIXJlc3VsdC0+aXNQ
b3NpdGlvbmVkKCkgJiYgKHJlc3VsdC0+aXNUZXh0KCkgfHwgcmVzdWx0LT5pc0JSKCkgfHwKLSAg
ICAgICAgICAgIHJlc3VsdC0+aXNGbG9hdGluZygpIHx8IHJlc3VsdC0+aXNSZXBsYWNlZCgpIHx8
Ci0gICAgICAgICAgICByZXN1bHQtPmlzSW5saW5lRmxvdygpKSkKKyAgICAgICAgaWYgKCFyZXN1
bHQtPmlzUG9zaXRpb25lZCgpICYmIChyZXN1bHQtPmlzVGV4dCgpIHx8IHJlc3VsdC0+aXNGbG9h
dGluZygpIHx8IHJlc3VsdC0+aXNSZXBsYWNlZCgpIHx8IHJlc3VsdC0+aXNJbmxpbmVGbG93KCkp
KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICBjdXJyZW50ID0gcmVzdWx0
OwpAQCAtMzM3OCw3ICszMzcyLDcgQEAgc3RhdGljIGludCBnZXRCUE1XaWR0aChpbnQgY2hpbGRW
YWx1ZSwgTAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldEJvcmRlclBhZGRpbmdN
YXJnaW4oUmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9vbCBlbmRPZklubGluZSkKK3N0YXRpYyBpbnQg
Z2V0Qm9yZGVyUGFkZGluZ01hcmdpbihjb25zdCBSZW5kZXJPYmplY3QqIGNoaWxkLCBib29sIGVu
ZE9mSW5saW5lKQogewogICAgIFJlbmRlclN0eWxlKiBjc3R5bGUgPSBjaGlsZC0+c3R5bGUoKTsK
ICAgICBpbnQgcmVzdWx0ID0gMDsKQEAgLTM0MTEsNyArMzQwNSw3IEBAIHN0YXRpYyBpbmxpbmUg
dm9pZCBzdHJpcFRyYWlsaW5nU3BhY2UoaW4KIC8vIGFuZCBPcGVyYSB3aWxsIGFsbG93IGEgdGFi
bGUgY2VsbCB0byBncm93IHRvIGZpdCBhbiBpbWFnZSBpbnNpZGUgaXQgdW5kZXIKIC8vIHZlcnkg
c3BlY2lmaWMgY2lydWN1bXN0YW5jZXMuIE5vdCBzdXBwb3J0aW5nIHRoZSBxdWlyayBoYXMgY2F1
c2VkIHVzIHRvCiAvLyBtaXMtcmVuZGVyIHNvbWUgcmVhbCBzaXRlcy4gKFNlZSBCdWd6aWxsYSAx
MDUxNy4pIAotc3RhdGljIGJvb2wgc2hvdWxkR3Jvd1RhYmxlQ2VsbEZvckltYWdlKFJlbmRlckJs
b2NrKiBjb250YWluaW5nQmxvY2ssIFJlbmRlck9iamVjdCogaW1hZ2UsIFJlbmRlck9iamVjdCog
YWRqYWNlbnRMZWFmKQorc3RhdGljIGJvb2wgc2hvdWxkR3Jvd1RhYmxlQ2VsbEZvckltYWdlKGNv
bnN0IFJlbmRlckJsb2NrKiBjb250YWluaW5nQmxvY2ssIGNvbnN0IFJlbmRlck9iamVjdCogaW1h
Z2UsIGNvbnN0IFJlbmRlck9iamVjdCogYWRqYWNlbnRMZWFmKQogewogICAgIGlmICghY29udGFp
bmluZ0Jsb2NrLT5zdHlsZSgpLT5odG1sSGFja3MoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMzQzMyw4ICszNDI3LDggQEAgc3RhdGljIGJvb2wgc2hvdWxkR3Jvd1RhYmxlQ2VsbEZvcklt
YWdlKAogCiB2b2lkIFJlbmRlckJsb2NrOjpjYWxjSW5saW5lUHJlZldpZHRocygpCiB7Ci0gICAg
aW50IGlubGluZU1heD0wOwotICAgIGludCBpbmxpbmVNaW49MDsKKyAgICBpbnQgaW5saW5lTWF4
ID0gMDsKKyAgICBpbnQgaW5saW5lTWluID0gMDsKIAogICAgIGludCBjdyA9IGNvbnRhaW5pbmdC
bG9jaygpLT5jb250ZW50V2lkdGgoKTsKIApAQCAtMzQ0NiwxMiArMzQ0MCwxMSBAQCB2b2lkIFJl
bmRlckJsb2NrOjpjYWxjSW5saW5lUHJlZldpZHRocygpCiAgICAgYm9vbCBhdXRvV3JhcCwgb2xk
QXV0b1dyYXA7CiAgICAgYXV0b1dyYXAgPSBvbGRBdXRvV3JhcCA9IHN0eWxlKCktPmF1dG9XcmFw
KCk7CiAKLSAgICBJbmxpbmVNaW5NYXhJdGVyYXRvciBjaGlsZEl0ZXJhdG9yKHRoaXMsIHRoaXMp
OworICAgIElubGluZU1pbk1heEl0ZXJhdG9yIGNoaWxkSXRlcmF0b3IodGhpcyk7CiAgICAgYm9v
bCBhZGRlZFRleHRJbmRlbnQgPSBmYWxzZTsgLy8gT25seSBnZXRzIGFkZGVkIGluIG9uY2UuCiAg
ICAgUmVuZGVyT2JqZWN0KiBwcmV2RmxvYXQgPSAwOwogICAgIFJlbmRlck9iamVjdCogcHJldmlv
dXNMZWFmID0gMDsKLSAgICB3aGlsZSAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGNoaWxkSXRlcmF0
b3IubmV4dCgpKQotICAgIHsKKyAgICB3aGlsZSAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGNoaWxk
SXRlcmF0b3IubmV4dCgpKSB7CiAgICAgICAgIElubGluZU1pbk1heEl0ZXJhdG9yIGxlYWZJdGVy
YXRvciA9IGNoaWxkSXRlcmF0b3I7CiAgICAgICAgIFJlbmRlck9iamVjdCogbmV4dExlYWYgPSBs
ZWFmSXRlcmF0b3IubmV4dCgpOwogICAgICAgICB3aGlsZSAobmV4dExlYWYgJiYgbmV4dExlYWYt
PmlzSW5saW5lRmxvdygpKQpAQCAtMzUxNywxNiArMzUxMCw5IEBAIHZvaWQgUmVuZGVyQmxvY2s6
OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKICAgICAgICAgICAgICAgICAgICAgaW50IG1hcmdpbnMg
PSAwOwogICAgICAgICAgICAgICAgICAgICBMZW5ndGggbGVmdE1hcmdpbiA9IGNzdHlsZS0+bWFy
Z2luTGVmdCgpOwogICAgICAgICAgICAgICAgICAgICBMZW5ndGggcmlnaHRNYXJnaW4gPSBjc3R5
bGUtPm1hcmdpblJpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgdXNlQ2FsY3VsYXRl
ZFdpZHRocyA9IGNoaWxkLT5pc0xpc3RNYXJrZXIoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGxlZnRNYXJnaW4uaXNQZXJjZW50KCkgfHwgcmlnaHRNYXJnaW4uaXNQZXJjZW50KCkgfHwgdXNl
Q2FsY3VsYXRlZFdpZHRocykKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkLT5jYWxjV2lk
dGgoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHVzZUNhbGN1bGF0ZWRXaWR0aHMgfHwgbGVm
dE1hcmdpbi5pc1BlcmNlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbnMgKz0g
Y2hpbGQtPm1hcmdpbkxlZnQoKTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAobGVmdE1h
cmdpbi5pc0ZpeGVkKCkpCisgICAgICAgICAgICAgICAgICAgIGlmIChsZWZ0TWFyZ2luLmlzRml4
ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbnMgKz0gbGVmdE1hcmdpbi52YWx1
ZSgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodXNlQ2FsY3VsYXRlZFdpZHRocyB8fCByaWdo
dE1hcmdpbi5pc1BlcmNlbnQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbnMgKz0g
Y2hpbGQtPm1hcmdpblJpZ2h0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJpZ2h0
TWFyZ2luLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJpZ2h0TWFyZ2luLmlz
Rml4ZWQoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbnMgKz0gcmlnaHRNYXJnaW4u
dmFsdWUoKTsKICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0gbWFyZ2luczsKICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRNYXggKz0gbWFyZ2luczsKQEAgLTM1NTEsOCArMzUzNyw3IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBib29sIGdyb3dGb3JQcmV2aW91cyA9IHNob3VsZEdyb3dUYWJs
ZUNlbGxGb3JJbWFnZSh0aGlzLCBjaGlsZCwgcHJldmlvdXNMZWFmKTsKICAgICAgICAgICAgICAg
ICBpZiAoIWdyb3dGb3JQcmV2aW91cyAmJiAoYXV0b1dyYXAgfHwgb2xkQXV0b1dyYXApIHx8IGNs
ZWFyUHJldmlvdXNGbG9hdCkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9taW5QcmVmV2lk
dGggPCBpbmxpbmVNaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9
IGlubGluZU1pbjsKKyAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5s
aW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9
IDA7CiAgICAgICAgICAgICAgICAgfQogCkBAIC0zNTgxLDkgKzM1NjYsOCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjYWxjSW5saW5lUHJlZldpZHRocygpCiAKICAgICAgICAgICAgICAgICBpZiAoYXV0
b1dyYXAgJiYgIXNob3VsZEdyb3dUYWJsZUNlbGxGb3JJbWFnZSh0aGlzLCBjaGlsZCwgbmV4dExl
YWYpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBjaGVjayBvdXIgbGluZS4KLSAgICAg
ICAgICAgICAgICAgICAgaWYgKG1fbWluUHJlZldpZHRoIDwgaW5saW5lTWluKQotICAgICAgICAg
ICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBpbmxpbmVNaW47Ci0KKyAgICAgICAgICAg
ICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7
CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAvLyBOb3cgc3RhcnQg
YSBuZXcgbGluZS4KICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluID0gMDsKICAgICAgICAg
ICAgICAgICB9CkBAIC0zNjQwLDEzICszNjI0LDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJ
bmxpbmVQcmVmV2lkdGhzKCkKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gV2UgaGF2ZSBhIGJyZWFrYWJsZSBjaGFyYWN0ZXIuICBOb3cgd2UgbmVlZCB0byBr
bm93IGlmCiAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHN0YXJ0IGFuZCBlbmQgd2l0aCB3aGl0
ZXNwYWNlLgotICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5XUykgeworICAgICAgICAgICAg
ICAgICAgICBpZiAoYmVnaW5XUykKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvIGFoZWFk
IGFuZCBlbmQgdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1f
bWluUHJlZldpZHRoIDwgaW5saW5lTWluKSBtX21pblByZWZXaWR0aCA9IGlubGluZU1pbjsKLSAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluICs9IGJlZ2luTWluOwot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYobV9taW5QcmVmV2lkdGggPCBpbmxpbmVNaW4pIG1f
bWluUHJlZldpZHRoID0gaW5saW5lTWluOworICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5Q
cmVmV2lkdGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICBjaGlsZE1pbiAtPSB0aTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0z
NjU1LDI5ICszNjM4LDI3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhz
KCkKICAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFdTKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAvLyBXZSBlbmQgaW4gd2hpdGVzcGFjZSwgd2hpY2ggbWVhbnMgd2UgY2FuIGdvIGFoZWFk
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZW5kIG91ciBjdXJyZW50IGxpbmUuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZihtX21pblByZWZXaWR0aCA8IGlubGluZU1pbikgbV9t
aW5QcmVmV2lkdGggPSBpbmxpbmVNaW47CisgICAgICAgICAgICAgICAgICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgIGlubGluZU1pbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihtX21pblByZWZX
aWR0aCA8IGlubGluZU1pbikgbV9taW5QcmVmV2lkdGggPSBpbmxpbmVNaW47CisgICAgICAgICAg
ICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldp
ZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IGVuZE1pbjsKICAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlm
IChoYXNCcmVhaykgewogICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggKz0gYmVnaW5NYXg7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX21heFByZWZXaWR0aCA8IGlubGluZU1heCkgbV9t
YXhQcmVmV2lkdGggPSBpbmxpbmVNYXg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX21heFBy
ZWZXaWR0aCA8IGNoaWxkTWF4KSBtX21heFByZWZXaWR0aCA9IGNoaWxkTWF4OworICAgICAgICAg
ICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChpbmxpbmVNYXgsIG1fbWF4UHJlZldpZHRo
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoY2hpbGRNYXgsIG1f
bWF4UHJlZldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWF4ID0gZW5kTWF4Owog
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAg
ICAgIGlubGluZU1heCArPSBjaGlsZE1heDsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
ICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmKG1fbWluUHJlZldpZHRoIDwgaW5s
aW5lTWluKSBtX21pblByZWZXaWR0aCA9IGlubGluZU1pbjsKLSAgICAgICAgICAgIGlmKG1fbWF4
UHJlZldpZHRoIDwgaW5saW5lTWF4KSBtX21heFByZWZXaWR0aCA9IGlubGluZU1heDsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KGlubGluZU1pbiwg
bV9taW5QcmVmV2lkdGgpOworICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgoaW5saW5l
TWF4LCBtX21heFByZWZXaWR0aCk7CiAgICAgICAgICAgICBpbmxpbmVNaW4gPSBpbmxpbmVNYXgg
PSAwOwogICAgICAgICAgICAgc3RyaXBGcm9udFNwYWNlcyA9IHRydWU7CiAgICAgICAgICAgICB0
cmFpbGluZ1NwYWNlQ2hpbGQgPSAwOwpAQCAtMzcyMywzOCArMzcwNCwyNCBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
Ci0gICAgICAgIExlbmd0aCBtbCA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCk7Ci0gICAg
ICAgIExlbmd0aCBtciA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpOwotCi0gICAgICAg
IC8vIENhbGwgY2FsY1dpZHRoIG9uIHRoZSBjaGlsZCB0byBlbnN1cmUgdGhhdCBvdXIgbWFyZ2lu
cyBhcmUKLSAgICAgICAgLy8gdXAgdG8gZGF0ZS4gIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQg
YmVmb3JlIHRoZSBjaGlsZCBoYXMgYWN0dWFsbHkKLSAgICAgICAgLy8gY2FsY3VsYXRlZCBpdHMg
bWFyZ2lucyAod2hpY2ggYXJlIGNvbXB1dGVkIGluc2lkZSBjYWxjV2lkdGgpLgotICAgICAgICBp
ZiAobWwuaXNQZXJjZW50KCkgfHwgbXIuaXNQZXJjZW50KCkpCi0gICAgICAgICAgICBjYWxjV2lk
dGgoKTsKLQogICAgICAgICAvLyBBIG1hcmdpbiBiYXNpY2FsbHkgaGFzIHRocmVlIHR5cGVzOiBm
aXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1dG8gKHZhcmlhYmxlKS4KLSAgICAgICAgLy8gQXV0byBt
YXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4vbWF4IHdpZHRoLgorICAg
ICAgICAvLyBBdXRvIGFuZCBwZXJjZW50YWdlIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAwIHdoZW4g
Y29tcHV0aW5nIG1pbi9tYXggd2lkdGguCiAgICAgICAgIC8vIEZpeGVkIG1hcmdpbnMgY2FuIGJl
IGFkZGVkIGluIGFzIGlzLgotICAgICAgICAvLyBQZXJjZW50YWdlIG1hcmdpbnMgYXJlIGNvbXB1
dGVkIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgd2lkdGggd2UgY2FsY3VsYXRlZCBpbgotICAgICAg
ICAvLyB0aGUgY2FsY1dpZHRoIGNhbGwgYWJvdmUuICBJbiB0aGlzIGNhc2Ugd2UgdXNlIHRoZSBh
Y3R1YWwgY2FjaGVkIG1hcmdpbiB2YWx1ZXMgb24KLSAgICAgICAgLy8gdGhlIFJlbmRlck9iamVj
dCBpdHNlbGYuCisgICAgICAgIExlbmd0aCBtbCA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0
KCk7CisgICAgICAgIExlbmd0aCBtciA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpOwog
ICAgICAgICBpbnQgbWFyZ2luID0gMCwgbWFyZ2luTGVmdCA9IDAsIG1hcmdpblJpZ2h0ID0gMDsK
ICAgICAgICAgaWYgKG1sLmlzRml4ZWQoKSkKICAgICAgICAgICAgIG1hcmdpbkxlZnQgKz0gbWwu
dmFsdWUoKTsKLSAgICAgICAgZWxzZSBpZiAobWwuaXNQZXJjZW50KCkpCi0gICAgICAgICAgICBt
YXJnaW5MZWZ0ICs9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgIGlmIChtci5pc0ZpeGVk
KCkpCiAgICAgICAgICAgICBtYXJnaW5SaWdodCArPSBtci52YWx1ZSgpOwotICAgICAgICBlbHNl
IGlmIChtci5pc1BlcmNlbnQoKSkKLSAgICAgICAgICAgIG1hcmdpblJpZ2h0ICs9IGNoaWxkLT5t
YXJnaW5SaWdodCgpOwogICAgICAgICBtYXJnaW4gPSBtYXJnaW5MZWZ0ICsgbWFyZ2luUmlnaHQ7
CiAKICAgICAgICAgaW50IHcgPSBjaGlsZC0+bWluUHJlZldpZHRoKCkgKyBtYXJnaW47Ci0gICAg
ICAgIGlmIChtX21pblByZWZXaWR0aCA8IHcpIG1fbWluUHJlZldpZHRoID0gdzsKKyAgICAgICAg
bV9taW5QcmVmV2lkdGggPSBtYXgodywgbV9taW5QcmVmV2lkdGgpOwogICAgICAgICAKICAgICAg
ICAgLy8gSUUgaWdub3JlcyB0YWJsZXMgZm9yIGNhbGN1bGF0aW9uIG9mIG5vd3JhcC4gTWFrZXMg
c29tZSBzZW5zZS4KLSAgICAgICAgaWYgKG5vd3JhcCAmJiAhY2hpbGQtPmlzVGFibGUoKSAmJiBt
X21heFByZWZXaWR0aCA8IHcpCi0gICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IHc7CisgICAg
ICAgIGlmIChub3dyYXAgJiYgIWNoaWxkLT5pc1RhYmxlKCkpCisgICAgICAgICAgICBtX21heFBy
ZWZXaWR0aCA9IG1heCh3LCBtX21heFByZWZXaWR0aCk7CiAKICAgICAgICAgdyA9IGNoaWxkLT5t
YXhQcmVmV2lkdGgoKSArIG1hcmdpbjsKIApAQCAtMzc3OSw4ICszNzQ2LDggQEAgdm9pZCBSZW5k
ZXJCbG9jazo6Y2FsY0Jsb2NrUHJlZldpZHRocygpCiAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgZmxvYXRSaWdodFdpZHRoICs9IHc7CiAgICAgICAgIH0KLSAgICAgICAgZWxzZSBp
ZiAobV9tYXhQcmVmV2lkdGggPCB3KQotICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSB3Owor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heCh3LCBtX21heFBy
ZWZXaWR0aCk7CiAKICAgICAgICAgLy8gQSB2ZXJ5IHNwZWNpZmljIFdpbklFIHF1aXJrLgogICAg
ICAgICAvLyBFeGFtcGxlOgpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYsNyBAQCBwdWJs
aWM6CiAgICAgLy8gT2J0YWlucyB0aGUgbmVhcmVzdCBlbmNsb3NpbmcgYmxvY2sgKGluY2x1ZGlu
ZyB0aGlzIGJsb2NrKSB0aGF0IGNvbnRyaWJ1dGVzIGEgZmlyc3QtbGluZSBzdHlsZSB0byBvdXIg
aW5saW5lCiAgICAgLy8gY2hpbGRyZW4uCiAgICAgdmlydHVhbCBSZW5kZXJCbG9jayogZmlyc3RM
aW5lQmxvY2soKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIoKTsK
KyAgICB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CiAKICAgICBib29sIGluUm9vdEJsb2NrQ29u
dGV4dCgpIGNvbnN0OwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSByZW5kZXJpbmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDYgKzEzMiw4IEBAIHZvaWQg
UmVuZGVyQm94OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmUKICAgICBpZiAobV9sYXllcikKICAg
ICAgICAgbV9sYXllci0+c3R5bGVDaGFuZ2VkKCk7CiAKKyAgICBzZXRIYXNMYXllcihtX2xheWVy
KTsKKwogICAgIC8vIFNldCB0aGUgdGV4dCBjb2xvciBpZiB3ZSdyZSB0aGUgYm9keS4KICAgICBp
ZiAoaXNCb2R5KCkpCiAgICAgICAgIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS0+c2V0VGV4dENvbG9y
KG5ld1N0eWxlLT5jb2xvcigpKTsKQEAgLTE2Niw2ICsxNjgsMjIgQEAgdm9pZCBSZW5kZXJCb3g6
OmRlc3Ryb3koKQogICAgICAgICBsYXllci0+ZGVzdHJveShhcmVuYSk7CiB9CiAKK2ludCBSZW5k
ZXJCb3g6Om1pblByZWZXaWR0aCgpIGNvbnN0Cit7CisgICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgp
KQorICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJveCo+KHRoaXMpLT5jYWxjUHJlZldpZHRocygp
OworICAgICAgICAKKyAgICByZXR1cm4gbV9taW5QcmVmV2lkdGg7Cit9CisKK2ludCBSZW5kZXJC
b3g6Om1heFByZWZXaWR0aCgpIGNvbnN0Cit7CisgICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQor
ICAgICAgICBjb25zdF9jYXN0PFJlbmRlckJveCo+KHRoaXMpLT5jYWxjUHJlZldpZHRocygpOwor
ICAgICAgICAKKyAgICByZXR1cm4gbV9tYXhQcmVmV2lkdGg7Cit9CisKIGludCBSZW5kZXJCb3g6
Om92ZXJyaWRlU2l6ZSgpIGNvbnN0CiB7CiAgICAgaWYgKCFoYXNPdmVycmlkZVNpemUoKSkKQEAg
LTEwNTcsNyArMTA3NSw3IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjV2lkdGgoKQogICAgICAgICBt
X21hcmdpbkxlZnQgPSBtYXJnaW5MZWZ0LmNhbGNNaW5WYWx1ZShjb250YWluZXJXaWR0aCk7CiAg
ICAgICAgIG1fbWFyZ2luUmlnaHQgPSBtYXJnaW5SaWdodC5jYWxjTWluVmFsdWUoY29udGFpbmVy
V2lkdGgpOwogICAgICAgICBpZiAodHJlYXRBc1JlcGxhY2VkKQotICAgICAgICAgICAgbV93aWR0
aCA9IG1heCh3aWR0aC52YWx1ZSgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmlnaHQoKSArIHBh
ZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSwgbV9taW5QcmVmV2lkdGgpOworICAgICAgICAg
ICAgbV93aWR0aCA9IG1heCh3aWR0aC52YWx1ZSgpICsgYm9yZGVyTGVmdCgpICsgYm9yZGVyUmln
aHQoKSArIHBhZGRpbmdMZWZ0KCkgKyBwYWRkaW5nUmlnaHQoKSwgbWluUHJlZldpZHRoKCkpOwog
CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMDg2LDggKzExMDQsOCBAQCB2b2lkIFJlbmRl
ckJveDo6Y2FsY1dpZHRoKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChtX3dpZHRoIDwg
bV9taW5QcmVmV2lkdGggJiYgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpKSB7Ci0gICAg
ICAgIG1fd2lkdGggPSBtX21pblByZWZXaWR0aDsKKyAgICBpZiAoc3RyZXRjaGVzVG9NaW5JbnRy
aW5zaWNXaWR0aCgpKSB7CisgICAgICAgIG1fd2lkdGggPSBtYXgobV93aWR0aCwgbWluUHJlZldp
ZHRoKCkpOwogICAgICAgICB3aWR0aCA9IExlbmd0aChtX3dpZHRoLCBGaXhlZCk7CiAgICAgfQog
CkBAIC0xMTI4LDggKzExNDYsOCBAQCBpbnQgUmVuZGVyQm94OjpjYWxjV2lkdGhVc2luZyhXaWR0
aFR5cGUgCiAgICAgICAgICAgICB3aWR0aCA9IGN3IC0gbWFyZ2luTGVmdCAtIG1hcmdpblJpZ2h0
OwogCiAgICAgICAgIGlmIChzaXplc1RvSW50cmluc2ljV2lkdGgod2lkdGhUeXBlKSkgewotICAg
ICAgICAgICAgd2lkdGggPSBtYXgod2lkdGgsIG1fbWluUHJlZldpZHRoKTsKLSAgICAgICAgICAg
IHdpZHRoID0gbWluKHdpZHRoLCBtX21heFByZWZXaWR0aCk7CisgICAgICAgICAgICB3aWR0aCA9
IG1heCh3aWR0aCwgbWluUHJlZldpZHRoKCkpOworICAgICAgICAgICAgd2lkdGggPSBtaW4od2lk
dGgsIG1heFByZWZXaWR0aCgpKTsKICAgICAgICAgfQogICAgIH0gZWxzZQogICAgICAgICB3aWR0
aCA9IGNhbGNCb3JkZXJCb3hXaWR0aCh3LmNhbGNWYWx1ZShjdykpOwpAQCAtMTY2NCw4ICsxNjgy
LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwoKQogICAgICAgICB9
CiAgICAgfQogCi0gICAgaWYgKG1fd2lkdGggPCBtX21pblByZWZXaWR0aCAtIGJvcmRlcnNQbHVz
UGFkZGluZyAmJiBzdHJldGNoZXNUb01pbkludHJpbnNpY1dpZHRoKCkpCi0gICAgICAgIGNhbGNB
YnNvbHV0ZUhvcml6b250YWxWYWx1ZXMoTGVuZ3RoKG1fbWluUHJlZldpZHRoIC0gYm9yZGVyc1Bs
dXNQYWRkaW5nLCBGaXhlZCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24sCisg
ICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSAmJiBtX3dpZHRoIDwgbWluUHJl
ZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmcpCisgICAgICAgIGNhbGNBYnNvbHV0ZUhvcml6
b250YWxWYWx1ZXMoTGVuZ3RoKG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nLCBG
aXhlZCksIGNvbnRhaW5lckJsb2NrLCBjb250YWluZXJEaXJlY3Rpb24sCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyV2lkdGgsIGJvcmRlcnNQbHVzUGFkZGlu
ZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWZ0LCByaWdodCwgbWFy
Z2luTGVmdCwgbWFyZ2luUmlnaHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbV93aWR0aCwgbV9tYXJnaW5MZWZ0LCBtX21hcmdpblJpZ2h0LCBtX3gpOwpAQCAtMTc5OCw4
ICsxODE2LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWxWYQogICAg
ICAgICAgICAgaW50IHJpZ2h0VmFsdWUgPSByaWdodC5jYWxjVmFsdWUoY29udGFpbmVyV2lkdGgp
OwogCiAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQgaXQgYmUgYmV0dGVyIHRvIGhhdmUgc2hy
aW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8KLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRXaWR0aCA9
IG1fbWF4UHJlZldpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwotICAgICAgICAgICAgaW50IHBy
ZWZlcnJlZE1pbldpZHRoID0gbV9taW5QcmVmV2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmc7Cisg
ICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtYXhQcmVmV2lkdGgoKSAtIGJvcmRlcnNQ
bHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1pblByZWZX
aWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwogICAgICAgICAgICAgaW50IGF2YWlsYWJsZVdp
ZHRoID0gYXZhaWxhYmxlU3BhY2UgLSByaWdodFZhbHVlOwogICAgICAgICAgICAgd2lkdGhWYWx1
ZSA9IG1pbihtYXgocHJlZmVycmVkTWluV2lkdGgsIGF2YWlsYWJsZVdpZHRoKSwgcHJlZmVycmVk
V2lkdGgpOwogICAgICAgICAgICAgbGVmdFZhbHVlID0gYXZhaWxhYmxlU3BhY2UgLSAod2lkdGhW
YWx1ZSArIHJpZ2h0VmFsdWUpOwpAQCAtMTgwOCw4ICsxODI2LDggQEAgdm9pZCBSZW5kZXJCb3g6
OmNhbGNBYnNvbHV0ZUhvcml6b250YWxWYQogICAgICAgICAgICAgbGVmdFZhbHVlID0gbGVmdC5j
YWxjVmFsdWUoY29udGFpbmVyV2lkdGgpOwogCiAgICAgICAgICAgICAvLyBGSVhNRTogd291bGQg
aXQgYmUgYmV0dGVyIHRvIGhhdmUgc2hyaW5rLXRvLWZpdCBpbiBvbmUgc3RlcD8KLSAgICAgICAg
ICAgIGludCBwcmVmZXJyZWRXaWR0aCA9IG1fbWF4UHJlZldpZHRoIC0gYm9yZGVyc1BsdXNQYWRk
aW5nOwotICAgICAgICAgICAgaW50IHByZWZlcnJlZE1pbldpZHRoID0gbV9taW5QcmVmV2lkdGgg
LSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBt
YXhQcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKKyAgICAgICAgICAgIGludCBwcmVm
ZXJyZWRNaW5XaWR0aCA9IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1BsdXNQYWRkaW5nOwogICAg
ICAgICAgICAgaW50IGF2YWlsYWJsZVdpZHRoID0gYXZhaWxhYmxlU3BhY2UgLSBsZWZ0VmFsdWU7
CiAgICAgICAgICAgICB3aWR0aFZhbHVlID0gbWluKG1heChwcmVmZXJyZWRNaW5XaWR0aCwgYXZh
aWxhYmxlV2lkdGgpLCBwcmVmZXJyZWRXaWR0aCk7CiAgICAgICAgIH0gZWxzZSBpZiAobGVmdElz
QXV0byAmJiAhd2lkdGguaXNBdXRvKCkgJiYgIXJpZ2h0SXNBdXRvKSB7CkluZGV4OiByZW5kZXJp
bmcvUmVuZGVyQm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJveC5oCShyZXZp
c2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJCb3guaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsOCArNDIsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHZvaWQgZGVzdHJveSgpOwogCi0g
ICAgdmlydHVhbCBpbnQgbWluUHJlZldpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9taW5QcmVmV2lk
dGg7IH0KLSAgICB2aXJ0dWFsIGludCBtYXhQcmVmV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21h
eFByZWZXaWR0aDsgfQorICAgIHZpcnR1YWwgaW50IG1pblByZWZXaWR0aCgpIGNvbnN0OworICAg
IHZpcnR1YWwgaW50IG1heFByZWZXaWR0aCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBpbnQgb3Zl
cnJpZGVTaXplKCkgY29uc3Q7CiAgICAgdmlydHVhbCBpbnQgb3ZlcnJpZGVXaWR0aCgpIGNvbnN0
OwpAQCAtMTgyLDYgKzE4MiwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgY2FsY0Fic29sdXRlVmVy
dGljYWxSZXBsYWNlZCgpOwogICAgIHZvaWQgY2FsY0Fic29sdXRlSG9yaXpvbnRhbFJlcGxhY2Vk
KCk7CiAKKyAgICAvLyBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIG1pbmltdW0gYW5kIG1h
eGltdW0gcHJlZmVycmVkIHdpZHRocyBmb3IgYW4gb2JqZWN0LgorICAgIC8vIFRoZXNlIHZhbHVl
cyBhcmUgdXNlZCBpbiBzaHJpbmstdG8tZml0IGxheW91dCBzeXN0ZW1zLgorICAgIC8vIFRoZXNl
IGluY2x1ZGUgdGFibGVzLCBwb3NpdGlvbmVkIG9iamVjdHMsIGZsb2F0cyBhbmQgZmxleGlibGUg
Ym94ZXMuCisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCkgPSAwOworCiBwcm90ZWN0
ZWQ6CiAgICAgLy8gVGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgY29udGVudHMgKyBib3JkZXJzICsg
cGFkZGluZy4KICAgICBpbnQgbV93aWR0aDsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJDb250YWlu
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCShyZXZp
c2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTYsMTQgKzE1NiwxNCBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6YWRkQ2hpbGQo
UmVuZGVyT2JqCiAgICAgfQogfQogCi1SZW5kZXJPYmplY3QqIFJlbmRlckNvbnRhaW5lcjo6cmVt
b3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogb2xkQ2hpbGQpCitSZW5kZXJPYmplY3QqIFJlbmRl
ckNvbnRhaW5lcjo6cmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogb2xkQ2hpbGQsIGJvb2wg
ZnVsbFJlbW92ZSkKIHsKICAgICBBU1NFUlQob2xkQ2hpbGQtPnBhcmVudCgpID09IHRoaXMpOwog
CiAgICAgLy8gU28gdGhhdCB3ZSdsbCBnZXQgdGhlIGFwcHJvcHJpYXRlIGRpcnR5IGJpdCBzZXQg
KGVpdGhlciB0aGF0IGEgbm9ybWFsIGZsb3cgY2hpbGQgZ290IHlhbmtlZCBvcgogICAgIC8vIHRo
YXQgYSBwb3NpdGlvbmVkIGNoaWxkIGdvdCB5YW5rZWQpLiAgV2UgYWxzbyByZXBhaW50LCBzbyB0
aGF0IHRoZSBhcmVhIGV4cG9zZWQgd2hlbiB0aGUgY2hpbGQKICAgICAvLyBkaXNhcHBlYXJzIGdl
dHMgcmVwYWludGVkIHByb3Blcmx5LgotICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgp
KSB7CisgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkgJiYgZnVsbFJlbW92ZSkgewog
ICAgICAgICBvbGRDaGlsZC0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgICAgIG9sZENoaWxkLT5yZXBhaW50KCk7CiAgICAgfQpAQCAtMTcxLDcgKzE3MSw3IEBAIFJl
bmRlck9iamVjdCogUmVuZGVyQ29udGFpbmVyOjpyZW1vdmVDaGkKICAgICAvLyBJZiB3ZSBoYXZl
IGEgbGluZSBib3ggd3JhcHBlciwgZGVsZXRlIGl0LgogICAgIG9sZENoaWxkLT5kZWxldGVMaW5l
Qm94V3JhcHBlcigpOwogCi0gICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVkKCkpIHsKKyAg
ICBpZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSAmJiBmdWxsUmVtb3ZlKSB7CiAgICAgICAg
IC8vIGlmIHdlIHJlbW92ZSB2aXNpYmxlIGNoaWxkIGZyb20gYW4gaW52aXNpYmxlIHBhcmVudCwg
d2UgZG9uJ3Qga25vdyB0aGUgbGF5ZXIgdmlzaWJpbGl0eSBhbnkgbW9yZQogICAgICAgICBSZW5k
ZXJMYXllciogbGF5ZXIgPSAwOwogICAgICAgICBpZiAobV9zdHlsZS0+dmlzaWJpbGl0eSgpICE9
IFZJU0lCTEUgJiYgb2xkQ2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYm
ICFvbGRDaGlsZC0+aGFzTGF5ZXIoKSkgewpAQCAtMzc1LDcgKzM3NSw3IEBAIHZvaWQgUmVuZGVy
Q29udGFpbmVyOjp1cGRhdGVQc2V1ZG9DaGlsZEYKIH0KIAogCi12b2lkIFJlbmRlckNvbnRhaW5l
cjo6YXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCogbmV3Q2hpbGQpCit2b2lkIFJlbmRlckNv
bnRhaW5lcjo6YXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIGJvb2wgZnVs
bEFwcGVuZCkKIHsKICAgICBBU1NFUlQobmV3Q2hpbGQtPnBhcmVudCgpID09IDApOwogICAgIEFT
U0VSVCghaXNCbG9ja0Zsb3coKSB8fCAoIW5ld0NoaWxkLT5pc1RhYmxlU2VjdGlvbigpICYmICFu
ZXdDaGlsZC0+aXNUYWJsZVJvdygpICYmICFuZXdDaGlsZC0+aXNUYWJsZUNlbGwoKSkpOwpAQCAt
MzkxLDM1ICszOTEsMzcgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6OmFwcGVuZENoaWxkTm9kZShS
ZQogCiAgICAgbV9sYXN0Q2hpbGQgPSBuZXdDaGlsZDsKICAgICAKLSAgICAvLyBLZWVwIG91ciBs
YXllciBoaWVyYXJjaHkgdXBkYXRlZC4gIE9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hl
cmUgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4KLSAgICAvLyBhbmQgZG9uJ3QgaGF2ZSBhIGxh
eWVyIGF0dGFjaGVkIHRvIG91cnNlbHZlcy4KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSAwOwot
ICAgIGlmIChuZXdDaGlsZC0+Zmlyc3RDaGlsZCgpIHx8IG5ld0NoaWxkLT5sYXllcigpKSB7Ci0g
ICAgICAgIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgbmV3Q2hpbGQtPmFkZExh
eWVycyhsYXllciwgbmV3Q2hpbGQpOwotICAgIH0KLQotICAgIC8vIGlmIHRoZSBuZXcgY2hpbGQg
aXMgdmlzaWJsZSBidXQgdGhpcyBvYmplY3Qgd2FzIG5vdCwgdGVsbCB0aGUgbGF5ZXIgaXQgaGFz
IHNvbWUgdmlzaWJsZSBjb250ZW50Ci0gICAgLy8gdGhhdCBuZWVkcyB0byBiZSBkcmF3biBhbmQg
bGF5ZXIgdmlzaWJpbGl0eSBvcHRpbWl6YXRpb24gY2FuJ3QgYmUgdXNlZAotICAgIGlmIChzdHls
ZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dmlzaWJp
bGl0eSgpID09IFZJU0lCTEUgJiYgIW5ld0NoaWxkLT5sYXllcigpKSB7Ci0gICAgICAgIGlmICgh
bGF5ZXIpCisgICAgaWYgKGZ1bGxBcHBlbmQpIHsKKyAgICAgICAgLy8gS2VlcCBvdXIgbGF5ZXIg
aGllcmFyY2h5IHVwZGF0ZWQuICBPcHRpbWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHdl
IGRvbid0IGhhdmUgYW55IGNoaWxkcmVuCisgICAgICAgIC8vIGFuZCBkb24ndCBoYXZlIGEgbGF5
ZXIgYXR0YWNoZWQgdG8gb3Vyc2VsdmVzLgorICAgICAgICBSZW5kZXJMYXllciogbGF5ZXIgPSAw
OworICAgICAgICBpZiAobmV3Q2hpbGQtPmZpcnN0Q2hpbGQoKSB8fCBuZXdDaGlsZC0+aGFzTGF5
ZXIoKSkgewogICAgICAgICAgICAgbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOwotICAgICAgICBp
ZiAobGF5ZXIpCi0gICAgICAgICAgICBsYXllci0+c2V0SGFzVmlzaWJsZUNvbnRlbnQodHJ1ZSk7
CisgICAgICAgICAgICBuZXdDaGlsZC0+YWRkTGF5ZXJzKGxheWVyLCBuZXdDaGlsZCk7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2libGUgYnV0IHRoaXMg
b2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZpc2libGUgY29udGVu
dAorICAgICAgICAvLyB0aGF0IG5lZWRzIHRvIGJlIGRyYXduIGFuZCBsYXllciB2aXNpYmlsaXR5
IG9wdGltaXphdGlvbiBjYW4ndCBiZSB1c2VkCisgICAgICAgIGlmIChzdHlsZSgpLT52aXNpYmls
aXR5KCkgIT0gVklTSUJMRSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJ
U0lCTEUgJiYgIW5ld0NoaWxkLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBpZiAoIWxheWVy
KQorICAgICAgICAgICAgICAgIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICAgICAgICAg
IGlmIChsYXllcikKKyAgICAgICAgICAgICAgICBsYXllci0+c2V0SGFzVmlzaWJsZUNvbnRlbnQo
dHJ1ZSk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmICghbmV3Q2hpbGQtPmlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSAmJiBjaGlsZHJlbklubGluZSgpKQorICAgICAgICAgICAgZGly
dHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQobmV3Q2hpbGQpOwogICAgIH0KLSAgICAKKwogICAgIG5l
d0NoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsgLy8gR29lcyB1cCB0
aGUgY29udGFpbmluZyBibG9jayBoaWVyYXJjaHkuCiAgICAgaWYgKCFub3JtYWxDaGlsZE5lZWRz
TGF5b3V0KCkpCiAgICAgICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7IC8vIFdlIG1heSBz
dXBwbHkgdGhlIHN0YXRpYyBwb3NpdGlvbiBmb3IgYW4gYWJzb2x1dGUgcG9zaXRpb25lZCBjaGls
ZC4KICAgICAKLSAgICBpZiAoIW5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYg
Y2hpbGRyZW5JbmxpbmUoKSkKLSAgICAgICAgZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQobmV3
Q2hpbGQpOwotICAgIAogICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5hYmxl
ZCgpKQogICAgICAgICBkb2N1bWVudCgpLT5heE9iamVjdENhY2hlKCktPmNoaWxkcmVuQ2hhbmdl
ZCh0aGlzKTsKIH0KIAotdm9pZCBSZW5kZXJDb250YWluZXI6Omluc2VydENoaWxkTm9kZShSZW5k
ZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQordm9pZCBSZW5kZXJD
b250YWluZXI6Omluc2VydENoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmpl
Y3QqIGJlZm9yZUNoaWxkLCBib29sIGZ1bGxJbnNlcnQpCiB7CiAgICAgaWYgKCFiZWZvcmVDaGls
ZCkgewogICAgICAgICBhcHBlbmRDaGlsZE5vZGUoY2hpbGQpOwpAQCAtNDQ0LDMwICs0NDYsMzMg
QEAgdm9pZCBSZW5kZXJDb250YWluZXI6Omluc2VydENoaWxkTm9kZShSZQogCiAgICAgY2hpbGQt
PnNldFBhcmVudCh0aGlzKTsKICAgICAKLSAgICAvLyBLZWVwIG91ciBsYXllciBoaWVyYXJjaHkg
dXBkYXRlZC4gIE9wdGltaXplIGZvciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2
ZSBhbnkgY2hpbGRyZW4KLSAgICAvLyBhbmQgZG9uJ3QgaGF2ZSBhIGxheWVyIGF0dGFjaGVkIHRv
IG91cnNlbHZlcy4KLSAgICBSZW5kZXJMYXllciogbGF5ZXIgPSAwOwotICAgIGlmIChjaGlsZC0+
Zmlyc3RDaGlsZCgpIHx8IGNoaWxkLT5sYXllcigpKSB7Ci0gICAgICAgIGxheWVyID0gZW5jbG9z
aW5nTGF5ZXIoKTsKLSAgICAgICAgY2hpbGQtPmFkZExheWVycyhsYXllciwgY2hpbGQpOwotICAg
IH0KLQotICAgIC8vIGlmIHRoZSBuZXcgY2hpbGQgaXMgdmlzaWJsZSBidXQgdGhpcyBvYmplY3Qg
d2FzIG5vdCwgdGVsbCB0aGUgbGF5ZXIgaXQgaGFzIHNvbWUgdmlzaWJsZSBjb250ZW50Ci0gICAg
Ly8gdGhhdCBuZWVkcyB0byBiZSBkcmF3biBhbmQgbGF5ZXIgdmlzaWJpbGl0eSBvcHRpbWl6YXRp
b24gY2FuJ3QgYmUgdXNlZAotICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJM
RSAmJiBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lCTEUgJiYgIWNoaWxkLT5s
YXllcigpKSB7Ci0gICAgICAgIGlmICghbGF5ZXIpCisgICAgaWYgKGZ1bGxJbnNlcnQpIHsKKyAg
ICAgICAgLy8gS2VlcCBvdXIgbGF5ZXIgaGllcmFyY2h5IHVwZGF0ZWQuICBPcHRpbWl6ZSBmb3Ig
dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgYW55IGNoaWxkcmVuCisgICAgICAg
IC8vIGFuZCBkb24ndCBoYXZlIGEgbGF5ZXIgYXR0YWNoZWQgdG8gb3Vyc2VsdmVzLgorICAgICAg
ICBSZW5kZXJMYXllciogbGF5ZXIgPSAwOworICAgICAgICBpZiAoY2hpbGQtPmZpcnN0Q2hpbGQo
KSB8fCBjaGlsZC0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAgbGF5ZXIgPSBlbmNsb3NpbmdM
YXllcigpOwotICAgICAgICBpZiAobGF5ZXIpCi0gICAgICAgICAgICBsYXllci0+c2V0SGFzVmlz
aWJsZUNvbnRlbnQodHJ1ZSk7CisgICAgICAgICAgICBjaGlsZC0+YWRkTGF5ZXJzKGxheWVyLCBj
aGlsZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2li
bGUgYnV0IHRoaXMgb2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZp
c2libGUgY29udGVudAorICAgICAgICAvLyB0aGF0IG5lZWRzIHRvIGJlIGRyYXduIGFuZCBsYXll
ciB2aXNpYmlsaXR5IG9wdGltaXphdGlvbiBjYW4ndCBiZSB1c2VkCisgICAgICAgIGlmIChzdHls
ZSgpLT52aXNpYmlsaXR5KCkgIT0gVklTSUJMRSAmJiBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0
eSgpID09IFZJU0lCTEUgJiYgIWNoaWxkLT5oYXNMYXllcigpKSB7CisgICAgICAgICAgICBpZiAo
IWxheWVyKQorICAgICAgICAgICAgICAgIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKKyAgICAg
ICAgICAgIGlmIChsYXllcikKKyAgICAgICAgICAgICAgICBsYXllci0+c2V0SGFzVmlzaWJsZUNv
bnRlbnQodHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICAKKyAgICAgICAgaWYgKCFjaGlsZC0+
aXNGbG9hdGluZygpICYmIGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgICAgICBkaXJ0eUxpbmVz
RnJvbUNoYW5nZWRDaGlsZChjaGlsZCk7CiAgICAgfQogCiAgICAgY2hpbGQtPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgIGlmICghbm9ybWFsQ2hpbGROZWVkc0xheW91
dCgpKQogICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KHRydWUpOyAvLyBXZSBtYXkgc3VwcGx5
IHRoZSBzdGF0aWMgcG9zaXRpb24gZm9yIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgY2hpbGQuCiAg
ICAgCi0gICAgaWYgKCFjaGlsZC0+aXNGbG9hdGluZygpICYmIGNoaWxkcmVuSW5saW5lKCkpCi0g
ICAgICAgIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKGNoaWxkKTsKLSAgICAKICAgICBpZiAo
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7CiB9CkBAIC00NzUsNyAr
NDgwLDYgQEAgdm9pZCBSZW5kZXJDb250YWluZXI6Omluc2VydENoaWxkTm9kZShSZQogdm9pZCBS
ZW5kZXJDb250YWluZXI6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwot
ICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgUmVuZGVyT2JqZWN0KiBjaGls
ZCA9IG1fZmlyc3RDaGlsZDsKICAgICB3aGlsZSAoY2hpbGQpIHsKSW5kZXg6IHJlbmRlcmluZy9S
ZW5kZXJDb250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVy
LmgJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTQgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBk
ZXN0cm95KCk7CiAgICAgdm9pZCBkZXN0cm95TGVmdG92ZXJDaGlsZHJlbigpOwogCi0gICAgdmly
dHVhbCBSZW5kZXJPYmplY3QqIHJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgYXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwotICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmUpOwotCisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIHJlbW92ZUNoaWxkTm9kZShSZW5k
ZXJPYmplY3QqLCBib29sIGZ1bGxSZW1vdmUgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBw
ZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCosIGJvb2wgZnVsbEFwcGVuZCA9IHRydWUpOworICAg
IHZpcnR1YWwgdm9pZCBpbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmUsIGJvb2wgZnVsbEluc2VydCA9IHRydWUpOworICAgIAorICAgIC8vIERl
c2lnbmVkIGZvciBzcGVlZC4gIERvbid0IHdhc3RlIHRpbWUgZG9pbmcgYSBidW5jaCBvZiB3b3Jr
IGxpa2UgbGF5ZXIgdXBkYXRpbmcgYW5kIHJlcGFpbnRpbmcgd2hlbiB3ZSBrbm93IHRoYXQgb3Vy
CisgICAgLy8gY2hhbmdlIGluIHBhcmVudGFnZSBpcyBub3QgZ29pbmcgdG8gYWZmZWN0IGFueXRo
aW5nLgorICAgIHZpcnR1YWwgdm9pZCBtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQp
IHsgYXBwZW5kQ2hpbGROb2RlKGNoaWxkLT5wYXJlbnQoKS0+cmVtb3ZlQ2hpbGROb2RlKGNoaWxk
LCBmYWxzZSksIGZhbHNlKTsgfQorICAgIAogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKSB7IHNldFByZWZXaWR0aHNEaXJ0eShmYWxz
ZSk7IH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJp
bmcvUmVuZGVyQ291bnRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCwxMCArMjQ0LDE3IEBA
IFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gUmVuZGVyQ291bnRlcjo6b3IKICAgICByZXR1cm4gdGV4
dC5pbXBsKCk7CiB9CiAKLXZvaWQgUmVuZGVyQ291bnRlcjo6Y2FsY1ByZWZXaWR0aHMoKQordm9p
ZCBSZW5kZXJDb3VudGVyOjpkaXJ0eUxpbmVCb3hlcyhib29sIGZ1bGxMYXlvdXQsIGJvb2wgZHVt
bXkpCit7CisgICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQorICAgICAgICBjYWxjUHJlZldpZHRo
cygwKTsKKyAgICBSZW5kZXJUZXh0OjpkaXJ0eUxpbmVCb3hlcyhmdWxsTGF5b3V0LCBkdW1teSk7
Cit9CisKK3ZvaWQgUmVuZGVyQ291bnRlcjo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWQpCiB7CiAg
ICAgc2V0VGV4dEludGVybmFsKG9yaWdpbmFsVGV4dCgpKTsKLSAgICBSZW5kZXJUZXh0OjpjYWxj
UHJlZldpZHRocygpOworICAgIFJlbmRlclRleHQ6OmNhbGNQcmVmV2lkdGhzKGxlYWQpOwogfQog
CiBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVDaGlsZHJlbihBdG9taWNTdHJpbmdJbXBs
KiBpZGVudGlmaWVyLCBDb3VudGVyTm9kZSogbm9kZSkKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJD
b3VudGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkocmV2aXNp
b24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNSw3ICszNSw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHJlbmRlck5h
bWUoKSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJDb3VudGVyKCkgY29uc3Q7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IG9yaWdpbmFsVGV4dCgpIGNvbnN0Owot
ICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOworICAgIAorICAgIHZvaWQgZGlydHlM
aW5lQm94ZXMoYm9vbCwgYm9vbCk7CisgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKGlu
dCBsZWFkV2lkdGgpOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlcyhSZW5k
ZXJPYmplY3QqKTsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCShy
ZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTIzMSw2ICsyMzEsOCBAQCB2b2lkIFJlbmRlckZpbGVVcGxvYWRD
b250cm9sOjpwYWludE9iamVjCiAKIHZvaWQgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6OmNhbGNQ
cmVmV2lkdGhzKCkKIHsKKyAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOworCiAgICAgbV9t
aW5QcmVmV2lkdGggPSAwOwogICAgIG1fbWF4UHJlZldpZHRoID0gMDsKIApJbmRleDogcmVuZGVy
aW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
RmxleGlibGVCb3guY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJGbGV4
aWJsZUJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCwzNyArMTE0LDIyIEBAIHZvaWQgUmVu
ZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jpem9udGFsUHIKICAgICBSZW5kZXJPYmplY3QgKmNoaWxk
ID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjaGlsZCkgewogICAgICAgICAvLyBwb3NpdGlv
bmVkIGNoaWxkcmVuIGRvbid0IGFmZmVjdCB0aGUgbWlubWF4d2lkdGgKLSAgICAgICAgaWYgKGNo
aWxkLT5pc1Bvc2l0aW9uZWQoKSB8fCBjaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IENP
TExBUFNFKQotICAgICAgICB7CisgICAgICAgIGlmIChjaGlsZC0+aXNQb3NpdGlvbmVkKCkgfHwg
Y2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkgewogICAgICAgICAgICAg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAg
ICAgICB9CiAKLSAgICAgICAgaW50IG1hcmdpbj0wOwotICAgICAgICAvLyAgYXV0byBtYXJnaW5z
IGRvbid0IGFmZmVjdCBtaW53aWR0aAotCisgICAgICAgIC8vIEEgbWFyZ2luIGJhc2ljYWxseSBo
YXMgdGhyZWUgdHlwZXM6IGZpeGVkLCBwZXJjZW50YWdlLCBhbmQgYXV0byAodmFyaWFibGUpLgor
ICAgICAgICAvLyBBdXRvIGFuZCBwZXJjZW50YWdlIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAwIHdo
ZW4gY29tcHV0aW5nIG1pbi9tYXggd2lkdGguCisgICAgICAgIC8vIEZpeGVkIG1hcmdpbnMgY2Fu
IGJlIGFkZGVkIGluIGFzIGlzLgogICAgICAgICBMZW5ndGggbWwgPSBjaGlsZC0+c3R5bGUoKS0+
bWFyZ2luTGVmdCgpOwogICAgICAgICBMZW5ndGggbXIgPSBjaGlsZC0+c3R5bGUoKS0+bWFyZ2lu
UmlnaHQoKTsKLQotICAgICAgICAvLyBDYWxsIGNhbGNXaWR0aCBvbiB0aGUgY2hpbGQgdG8gZW5z
dXJlIHRoYXQgb3VyIG1hcmdpbnMgYXJlCi0gICAgICAgIC8vIHVwIHRvIGRhdGUuICBUaGlzIG1l
dGhvZCBjYW4gYmUgY2FsbGVkIGJlZm9yZSB0aGUgY2hpbGQgaGFzIGFjdHVhbGx5Ci0gICAgICAg
IC8vIGNhbGN1bGF0ZWQgaXRzIG1hcmdpbnMgKHdoaWNoIGFyZSBjb21wdXRlZCBpbnNpZGUgY2Fs
Y1dpZHRoKS4KLSAgICAgICAgY2hpbGQtPmNhbGNXaWR0aCgpOwotCi0gICAgICAgIGlmICghbWwu
aXNBdXRvKCkgJiYgIW1yLmlzQXV0bygpKSB7Ci0gICAgICAgICAgICBpZiAoIWNoaWxkLT5zdHls
ZSgpLT53aWR0aCgpLmlzQXV0bygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5zdHls
ZSgpLT5kaXJlY3Rpb24oKT09TFRSKQotICAgICAgICAgICAgICAgICAgICBtYXJnaW4gPSBjaGls
ZC0+bWFyZ2luTGVmdCgpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgbWFyZ2luID0gY2hpbGQtPm1hcmdpblJpZ2h0KCk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAg
ICAgICAgICAgICAgICBtYXJnaW4gPSBjaGlsZC0+bWFyZ2luTGVmdCgpK2NoaWxkLT5tYXJnaW5S
aWdodCgpOwotICAgICAgICB9IGVsc2UgaWYgKCFtbC5pc0F1dG8oKSkKLSAgICAgICAgICAgIG1h
cmdpbiA9IGNoaWxkLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgIGVsc2UgaWYgKCFtci5pc0F1dG8o
KSkKLSAgICAgICAgICAgIG1hcmdpbiA9IGNoaWxkLT5tYXJnaW5SaWdodCgpOwotCi0gICAgICAg
IG1hcmdpbiA9IG1heChtYXJnaW4sIDApOworICAgICAgICBpbnQgbWFyZ2luID0gMCwgbWFyZ2lu
TGVmdCA9IDAsIG1hcmdpblJpZ2h0ID0gMDsKKyAgICAgICAgaWYgKG1sLmlzRml4ZWQoKSkKKyAg
ICAgICAgICAgIG1hcmdpbkxlZnQgKz0gbWwudmFsdWUoKTsKKyAgICAgICAgaWYgKG1yLmlzRml4
ZWQoKSkKKyAgICAgICAgICAgIG1hcmdpblJpZ2h0ICs9IG1yLnZhbHVlKCk7CisgICAgICAgIG1h
cmdpbiA9IG1hcmdpbkxlZnQgKyBtYXJnaW5SaWdodDsKIAogICAgICAgICBtX21pblByZWZXaWR0
aCArPSBjaGlsZC0+bWluUHJlZldpZHRoKCkgKyBtYXJnaW47CiAgICAgICAgIG1fbWF4UHJlZldp
ZHRoICs9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSArIG1hcmdpbjsKQEAgLTE2NCwzOSArMTQ5LDIy
IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNWZXJ0aWNhbFByZWYKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CiAKLSAgICAgICAgTGVuZ3RoIG1sID0gY2hpbGQtPnN0eWxl
KCktPm1hcmdpbkxlZnQoKTsKLSAgICAgICAgTGVuZ3RoIG1yID0gY2hpbGQtPnN0eWxlKCktPm1h
cmdpblJpZ2h0KCk7Ci0KLSAgICAgICAgLy8gQ2FsbCBjYWxjV2lkdGggb24gdGhlIGNoaWxkIHRv
IGVuc3VyZSB0aGF0IG91ciBtYXJnaW5zIGFyZQotICAgICAgICAvLyB1cCB0byBkYXRlLiAgVGhp
cyBtZXRob2QgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGNoaWxkIGhhcyBhY3R1YWxseQotICAg
ICAgICAvLyBjYWxjdWxhdGVkIGl0cyBtYXJnaW5zICh3aGljaCBhcmUgY29tcHV0ZWQgaW5zaWRl
IGNhbGNXaWR0aCkuCi0gICAgICAgIGlmIChtbC5pc1BlcmNlbnQoKSB8fCBtci5pc1BlcmNlbnQo
KSkKLSAgICAgICAgICAgIGNhbGNXaWR0aCgpOwotCiAgICAgICAgIC8vIEEgbWFyZ2luIGJhc2lj
YWxseSBoYXMgdGhyZWUgdHlwZXM6IGZpeGVkLCBwZXJjZW50YWdlLCBhbmQgYXV0byAodmFyaWFi
bGUpLgotICAgICAgICAvLyBBdXRvIG1hcmdpbnMgc2ltcGx5IGJlY29tZSAwIHdoZW4gY29tcHV0
aW5nIG1pbi9tYXggd2lkdGguCisgICAgICAgIC8vIEF1dG8vcGVyY2VudGFnZSBtYXJnaW5zIHNp
bXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4vbWF4IHdpZHRoLgogICAgICAgICAvLyBG
aXhlZCBtYXJnaW5zIGNhbiBiZSBhZGRlZCBpbiBhcyBpcy4KLSAgICAgICAgLy8gUGVyY2VudGFn
ZSBtYXJnaW5zIGFyZSBjb21wdXRlZCBhcyBhIHBlcmNlbnRhZ2Ugb2YgdGhlIHdpZHRoIHdlIGNh
bGN1bGF0ZWQgaW4KLSAgICAgICAgLy8gdGhlIGNhbGNXaWR0aCBjYWxsIGFib3ZlLiAgSW4gdGhp
cyBjYXNlIHdlIHVzZSB0aGUgYWN0dWFsIGNhY2hlZCBtYXJnaW4gdmFsdWVzIG9uCi0gICAgICAg
IC8vIHRoZSBSZW5kZXJPYmplY3QgaXRzZWxmLgorICAgICAgICBMZW5ndGggbWwgPSBjaGlsZC0+
c3R5bGUoKS0+bWFyZ2luTGVmdCgpOworICAgICAgICBMZW5ndGggbXIgPSBjaGlsZC0+c3R5bGUo
KS0+bWFyZ2luUmlnaHQoKTsKICAgICAgICAgaW50IG1hcmdpbiA9IDA7CiAgICAgICAgIGlmICht
bC5pc0ZpeGVkKCkpCiAgICAgICAgICAgICBtYXJnaW4gKz0gbWwudmFsdWUoKTsKLSAgICAgICAg
ZWxzZSBpZiAobWwuaXNQZXJjZW50KCkpCi0gICAgICAgICAgICBtYXJnaW4gKz0gY2hpbGQtPm1h
cmdpbkxlZnQoKTsKLQogICAgICAgICBpZiAobXIuaXNGaXhlZCgpKQogICAgICAgICAgICAgbWFy
Z2luICs9IG1yLnZhbHVlKCk7Ci0gICAgICAgIGVsc2UgaWYgKG1yLmlzQXV0bygpKQotICAgICAg
ICAgICAgbWFyZ2luICs9IGNoaWxkLT5tYXJnaW5SaWdodCgpOwotCi0gICAgICAgIG1hcmdpbiA9
IG1heChtYXJnaW4sIDApOwogICAgICAgICAKICAgICAgICAgaW50IHcgPSBjaGlsZC0+bWluUHJl
ZldpZHRoKCkgKyBtYXJnaW47Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJl
ZldpZHRoLCB3KTsKKyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgodywgbV9taW5QcmVmV2lk
dGgpOwogICAgICAgICAKICAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSArIG1hcmdp
bjsKLSAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIHcpOworICAg
ICAgICBtX21heFByZWZXaWR0aCA9IG1heCh3LCBtX21heFByZWZXaWR0aCk7CiAKICAgICAgICAg
Y2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICB9ICAgIApAQCAtMjA2LDE5ICsxNzQs
MTkgQEAgdm9pZCBSZW5kZXJGbGV4aWJsZUJveDo6Y2FsY1ByZWZXaWR0aHMoKQogewogICAgIEFT
U0VSVChwcmVmV2lkdGhzRGlydHkoKSk7CiAKLSAgICBtX21pblByZWZXaWR0aCA9IDA7Ci0gICAg
bV9tYXhQcmVmV2lkdGggPSAwOworICAgIGlmIChzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAm
JiBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPiAwKQorICAgICAgICBtX21pblByZWZXaWR0aCA9
IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZh
bHVlKCkpOworICAgIGVsc2UgeworICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldp
ZHRoID0gMDsKIAotICAgIGlmIChoYXNNdWx0aXBsZUxpbmVzKCkgfHwgaXNWZXJ0aWNhbCgpKQot
ICAgICAgICBjYWxjVmVydGljYWxQcmVmV2lkdGhzKCk7Ci0gICAgZWxzZQotICAgICAgICBjYWxj
SG9yaXpvbnRhbFByZWZXaWR0aHMoKTsKKyAgICAgICAgaWYgKGhhc011bHRpcGxlTGluZXMoKSB8
fCBpc1ZlcnRpY2FsKCkpCisgICAgICAgICAgICBjYWxjVmVydGljYWxQcmVmV2lkdGhzKCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOwogCi0g
ICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIG1fbWluUHJlZldpZHRoKTsK
KyAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgobV9taW5QcmVmV2lkdGgsIG1fbWF4UHJlZldp
ZHRoKTsKKyAgICB9CiAKLSAgICBpZiAoc3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5
bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4gMCkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21h
eFByZWZXaWR0aCA9IGNhbGNDb250ZW50Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgp
KTsKLSAgIAogICAgIGlmIChzdHlsZSgpLT5taW5XaWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgp
LT5taW5XaWR0aCgpLnZhbHVlKCkgPiAwKSB7CiAgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4
KG1fbWF4UHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRoKCku
dmFsdWUoKSkpOwogICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwg
Y2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT5taW5XaWR0aCgpLnZhbHVlKCkpKTsKQEAgLTIz
OSw3ICsyMDcsNiBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjUHJlZldpZHRocygpCiB2
b2lkIFJlbmRlckZsZXhpYmxlQm94OjpsYXlvdXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4p
CiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldpZHRoc0Rp
cnR5KCkpOwogCiAgICAgaWYgKCFyZWxheW91dENoaWxkcmVuICYmIHBvc0NoaWxkTmVlZHNMYXlv
dXQoKSAmJiAhbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpICYmICFzZWxmTmVlZHNMYXlvdXQoKSkg
ewogICAgICAgICAvLyBBbGwgd2UgaGF2ZSB0byBpcyBsYXkgb3V0IG91ciBwb3NpdGlvbmVkIG9i
amVjdHMuCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVu
ZGVyaW5nL1JlbmRlckZsb3cuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5k
ZXJGbG93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjIxLDEwICsyMjEsMTQgQEAgdm9pZCBSZW5k
ZXJGbG93OjpkaXJ0eUxpbmVzRnJvbUNoYW5nZWRDaAogICAgIGlmICghcGFyZW50KCkgfHwgKHNl
bGZOZWVkc0xheW91dCgpICYmICFpc0lubGluZUZsb3coKSkgfHwgaXNUYWJsZSgpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICAvLyBGb3IgYW4gZW1wdHkgaW5saW5lLCBnbyBhaGVhZCBhbmQgcHJv
cGFnYXRlIHRoZSBjaGVjayB1cCB0byBvdXIgcGFyZW50LgotICAgIGlmIChpc0lubGluZSgpICYm
ICFmaXJzdExpbmVCb3goKSkKLSAgICAgICAgcmV0dXJuIHBhcmVudCgpLT5kaXJ0eUxpbmVzRnJv
bUNoYW5nZWRDaGlsZCh0aGlzKTsKLSAgICAKKyAgICAvLyBJZiB3ZSBoYXZlIG5vIGZpcnN0IGxp
bmUgYm94LCB0aGVuIGp1c3QgYmFpbCBlYXJseS4KKyAgICBpZiAoIWZpcnN0TGluZUJveCgpKSB7
CisgICAgICAgIC8vIEZvciBhbiBlbXB0eSBpbmxpbmUsIGdvIGFoZWFkIGFuZCBwcm9wYWdhdGUg
dGhlIGNoZWNrIHVwIHRvIG91ciBwYXJlbnQuCisgICAgICAgIGlmIChpc0lubGluZSgpKQorICAg
ICAgICAgICAgcGFyZW50KCktPmRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKHRoaXMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCiAgICAgLy8gVHJ5IHRvIGZpZ3VyZSBvdXQgd2hpY2ggbGlu
ZSBib3ggd2UgYmVsb25nIGluLiAgRmlyc3QgdHJ5IHRvIGZpbmQgYSBwcmV2aW91cwogICAgIC8v
IGxpbmUgYm94IGJ5IGV4YW1pbmluZyBvdXIgc2libGluZ3MuICBJZiB3ZSBkaWRuJ3QgZmluZCBh
IGxpbmUgYm94LCB0aGVuIHVzZSBvdXIgCiAgICAgLy8gcGFyZW50J3MgZmlyc3QgbGluZSBib3gu
CkBAIC0yNTEsNyArMjU1LDcgQEAgdm9pZCBSZW5kZXJGbG93OjpkaXJ0eUxpbmVzRnJvbUNoYW5n
ZWRDaAogICAgICAgICBpZiAoYm94KQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGlm
ICghYm94ICYmIGZpcnN0TGluZUJveCgpKQorICAgIGlmICghYm94KQogICAgICAgICBib3ggPSBm
aXJzdExpbmVCb3goKS0+cm9vdCgpOwogCiAgICAgLy8gSWYgd2UgZm91bmQgYSBsaW5lIGJveCwg
dGhlbiBkaXJ0eSBpdC4KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGb3JlaWduT2JqZWN0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5jcHAJKHJldmlzaW9u
IDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC04NSw3ICs4NSw2IEBAIGJvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6cmVxdWlyZXNM
YXllcigKIHZvaWQgUmVuZGVyRm9yZWlnbk9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICBJ
bnRSZWN0IG9sZEJvdW5kczsKICAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7CkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyRnJhbWVTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJG
cmFtZVNldC5jcHAJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlckZyYW1lU2V0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDcgKzQ1Myw2IEBAIEZyYW1lRWRnZUluZm8gUmVu
ZGVyRnJhbWVTZXQ6OmVkZ2VJbmZvKCkKIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OmxheW91dCgpCiB7
CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5
KCkpOwogCiAgICAgaWYgKCFwYXJlbnQoKS0+aXNGcmFtZVNldCgpKSB7CiAgICAgICAgIEZyYW1l
VmlldyogdiA9IHZpZXcoKS0+ZnJhbWVWaWV3KCk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVySFRN
TENhbnZhcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckhUTUxDYW52YXMuY3Bw
CShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQCB2b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50
KFBhaW50SW5mbyYgCiB2b2lkIFJlbmRlckhUTUxDYW52YXM6OmxheW91dCgpCiB7CiAgICAgQVNT
RVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkpOwogCiAg
ICAgSW50UmVjdCBvbGRCb3VuZHM7CiAgICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwpJbmRleDog
cmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVy
SW1hZ2UuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwMyw3ICszMDMsNiBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWlu
dChQYWludEluZm8mIHBhaW50CiB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXQoKQogewogICAgIEFT
U0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIXByZWZXaWR0aHNEaXJ0eSgpKTsKIAog
ICAgIEludFJlY3Qgb2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJJbmxpbmUuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMTcgKzI5Miw2IEBAIHZvaWQgUmVuZGVySW5saW5l
OjphYnNvbHV0ZVJlY3RzKFZlY3RvcjwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgdHkgLSBjb250YWluaW5nQmxvY2soKS0+eVBvcygpICsgY29udGludWF0aW9uKCktPnlQ
b3MoKSk7CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjpjYWxjUHJlZldpZHRocygpCi17Ci0gICAg
QVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKLQotICAgIC8vIElycmVsZXZhbnQsIHNpbmNlIHNv
bWUgZW5jbG9zaW5nIGJsb2NrIHdpbGwgYWN0dWFsbHkgbWVhc3VyZSB1cyBhbmQgb3VyIGNoaWxk
cmVuLgotICAgIG1fbWluUHJlZldpZHRoID0gMDsKLSAgICBtX21heFByZWZXaWR0aCA9IDA7Ci0K
LSAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwotfQotCiBib29sIFJlbmRlcklubGluZTo6
cmVxdWlyZXNMYXllcigpCiB7CiAgICAgcmV0dXJuIGlzUm9vdCgpIHx8IGlzUmVsUG9zaXRpb25l
ZCgpIHx8IHN0eWxlKCktPm9wYWNpdHkoKSA8IDEuMGY7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
SW5saW5lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlcklubGluZS5oCShyZXZpc2lv
biAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAt
NTgsOCArNTgsNiBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29u
c3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgs
IGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0
aHMoKTsKLQogICAgIC8vIG92ZXJyaWRlcyBSZW5kZXJPYmplY3QKICAgICB2aXJ0dWFsIGJvb2wg
cmVxdWlyZXNMYXllcigpOwogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyTGlzdEJveC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3BwCShyZXZpc2lvbiAyMTA4MCkK
KysrIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE4LDYg
KzExOCwxNCBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50KCkKICAgICAg
ICAgfQogICAgICAgICBtX29wdGlvbnNXaWR0aCA9IHN0YXRpY19jYXN0PGludD4oY2VpbGYod2lk
dGgpKTsKICAgICAgICAgbV9vcHRpb25zQ2hhbmdlZCA9IGZhbHNlOworICAgICAgICAKKyAgICAg
ICAgaWYgKCFtX3ZCYXIgJiYgU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNjcm9sbGJhcnMoKSkKKyAg
ICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBub2RlKCktPmRvY3VtZW50KCktPnZpZXco
KSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4gd2lkZ2V0ID0g
bmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBTbWFsbFNjcm9s
bGJhcik7CisgICAgICAgICAgICAgICAgdmlldy0+YWRkQ2hpbGQod2lkZ2V0LmdldCgpKTsKKyAg
ICAgICAgICAgICAgICBtX3ZCYXIgPSB3aWRnZXQucmVsZWFzZSgpOworICAgICAgICAgICAgfQor
ICAgICAgICAKICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVjYWxjKCk7CiAg
ICAgfQogfQpAQCAtMTUzLDE1ICsxNjEsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnNjcm9sbFRv
UmV2ZWFsU2VsZWN0CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6Y2FsY1ByZWZXaWR0aHMoKQogewot
ICAgIGlmICghbV92QmFyICYmIFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxiYXJzKCkpCi0g
ICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBub2RlKCktPmRvY3VtZW50KCktPnZpZXcoKSkg
ewotICAgICAgICAgICAgUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiB3aWRnZXQgPSBuZXcgUGxh
dGZvcm1TY3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIFNtYWxsU2Nyb2xsYmFyKTsK
LSAgICAgICAgICAgIHZpZXctPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7Ci0gICAgICAgICAgICBt
X3ZCYXIgPSB3aWRnZXQucmVsZWFzZSgpOwotICAgICAgICB9Ci0KLSAgICBpZiAobV9vcHRpb25z
Q2hhbmdlZCkKLSAgICAgICAgdXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICBBU1NFUlQoIW1fb3B0
aW9uc0NoYW5nZWQpOwogCiAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIG1fbWF4UHJlZldp
ZHRoID0gMDsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVtLmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5k
ZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDE0
IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06OnVwZGF0ZVZhbHVlKCkKICAgICB9CiB9CiAKK3N0YXRp
YyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9uTWFya2VyQ2hpbGQoUmVuZGVyT2JqZWN0KiBwYXJlbnQp
Cit7CisgICAgUmVuZGVyT2JqZWN0KiByZXN1bHQgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAg
ICB3aGlsZSAocmVzdWx0ICYmIHJlc3VsdC0+aXNMaXN0TWFya2VyKCkpCisgICAgICAgIHJlc3Vs
dCA9IHJlc3VsdC0+bmV4dFNpYmxpbmcoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lk
IFJlbmRlckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2NhdGlvbigpCiB7CiAgICAgLy8gU2FuaXR5
IGNoZWNrIHRoZSBsb2NhdGlvbiBvZiBvdXIgbWFya2VyLgpAQCAtMTkyLDMwICsyMDAsMzAgQEAg
dm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBkYXRlTWFya2VyTG9jYXRpbwogICAgICAgICB9CiAKICAg
ICAgICAgaWYgKG1hcmtlclBhciAhPSBsaW5lQm94UGFyZW50IHx8IG1fbWFya2VyLT5wcmVmV2lk
dGhzRGlydHkoKSkgeworICAgICAgICAgICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKICAgICAgICAg
ICAgIG1fbWFya2VyLT5yZW1vdmUoKTsKICAgICAgICAgICAgIGlmICghbGluZUJveFBhcmVudCkK
ICAgICAgICAgICAgICAgICBsaW5lQm94UGFyZW50ID0gdGhpczsKLSAgICAgICAgICAgIGxpbmVC
b3hQYXJlbnQtPmFkZENoaWxkKG1fbWFya2VyLCBsaW5lQm94UGFyZW50LT5maXJzdENoaWxkKCkp
OworICAgICAgICAgICAgbGluZUJveFBhcmVudC0+YWRkQ2hpbGQobV9tYXJrZXIsIGZpcnN0Tm9u
TWFya2VyQ2hpbGQobGluZUJveFBhcmVudCkpOwogICAgICAgICAgICAgaWYgKG1fbWFya2VyLT5w
cmVmV2lkdGhzRGlydHkoKSkKICAgICAgICAgICAgICAgICBtX21hcmtlci0+Y2FsY1ByZWZXaWR0
aHMoKTsKLSAgICAgICAgICAgIHJlY2FsY01pbk1heFdpZHRocygpOwogICAgICAgICB9CiAgICAg
fQogfQogCiB2b2lkIFJlbmRlckxpc3RJdGVtOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgLy8g
TWFrZSBzdXJlIG91ciBtYXJrZXIgaXMgaW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCisgICAgQVNT
RVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKKyAgICAKICAgICB1cGRhdGVNYXJrZXJMb2NhdGlvbigp
OwotICAgIGlmIChwcmVmV2lkdGhzRGlydHkoKSkKLSAgICAgICAgUmVuZGVyQmxvY2s6OmNhbGNQ
cmVmV2lkdGhzKCk7CisKKyAgICBSZW5kZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsKIH0KIAog
dm9pZCBSZW5kZXJMaXN0SXRlbTo6bGF5b3V0KCkKIHsKLSAgICBBU1NFUlQobmVlZHNMYXlvdXQo
KSk7Ci0gICAgQVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7Ci0gICAgCisgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOyAKKwogICAgIHVwZGF0ZU1hcmtlckxvY2F0aW9uKCk7ICAgIAogICAgIFJl
bmRlckJsb2NrOjpsYXlvdXQoKTsKIH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHJldmlz
aW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MjYsOCArNjI2LDI1IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFp
bnRJbmZvJiAKIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7Ci0gICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQotICAgICAgICBjYWxj
UHJlZldpZHRocygpOworICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkpOworCisgICAgaWYg
KGlzSW1hZ2UoKSkgeworICAgICAgICBtX3dpZHRoID0gbV9pbWFnZS0+aW1hZ2UoKS0+d2lkdGgo
KTsKKyAgICAgICAgbV9oZWlnaHQgPSBtX2ltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3dpZHRoID0gbWluUHJlZldpZHRoKCk7CisgICAgICAgIG1faGVp
Z2h0ID0gc3R5bGUoKS0+Zm9udCgpLmhlaWdodCgpOworICAgIH0KKworICAgIG1fbWFyZ2luTGVm
dCA9IG1fbWFyZ2luUmlnaHQgPSAwOworCisgICAgTGVuZ3RoIGxlZnRNYXJnaW4gPSBzdHlsZSgp
LT5tYXJnaW5MZWZ0KCk7CisgICAgTGVuZ3RoIHJpZ2h0TWFyZ2luID0gc3R5bGUoKS0+bWFyZ2lu
UmlnaHQoKTsKKyAgICBpZiAobGVmdE1hcmdpbi5pc0ZpeGVkKCkpCisgICAgICAgIG1fbWFyZ2lu
TGVmdCA9IGxlZnRNYXJnaW4udmFsdWUoKTsKKyAgICBpZiAocmlnaHRNYXJnaW4uaXNGaXhlZCgp
KQorICAgICAgICBtX21hcmdpblJpZ2h0ID0gcmlnaHRNYXJnaW4udmFsdWUoKTsKKwogICAgIHNl
dE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApAQCAtNjUwLDEwICs2NjcsOSBAQCB2b2lkIFJlbmRl
ckxpc3RNYXJrZXI6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBtX3RleHQgPSAiIjsKIAogICAgIGlm
IChpc0ltYWdlKCkpIHsKLSAgICAgICAgbV93aWR0aCA9IG1faW1hZ2UtPmltYWdlKCktPndpZHRo
KCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbV9pbWFnZS0+aW1hZ2UoKS0+aGVpZ2h0KCk7Ci0gICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBtX3dpZHRoOworICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gbV9pbWFnZS0+aW1hZ2UoKS0+d2lkdGgo
KTsKICAgICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICAgICAgdXBkYXRlTWFy
Z2lucygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02OTksODYgKzcxNSw4MyBAQCB2
b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNhbGNQcmVmV2lkdGhzKCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIG1fd2lkdGggPSB3aWR0aDsKICAgICBtX21pblByZWZXaWR0aCA9IHdp
ZHRoOwogICAgIG1fbWF4UHJlZldpZHRoID0gd2lkdGg7CiAKLSAgICAvLyBGSVhNRTogQSBsaXR0
bGUgc3RyYW5nZSB0byBzZXQgdGhlIGhlaWdodCBpbiBjYWxjUHJlZldpZHRocy4KLSAgICBtX2hl
aWdodCA9IGZvbnQuaGVpZ2h0KCk7Ci0KICAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwor
ICAgIAorICAgIHVwZGF0ZU1hcmdpbnMoKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpj
YWxjV2lkdGgoKQordm9pZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5zKCkKIHsKLSAg
ICAvLyBtX3dpZHRoIGlzIHNldCBpbiBjYWxjUHJlZldpZHRocygpCiAgICAgY29uc3QgRm9udCYg
Zm9udCA9IHN0eWxlKCktPmZvbnQoKTsKIAorICAgIGludCBtYXJnaW5MZWZ0ID0gMDsKKyAgICBp
bnQgbWFyZ2luUmlnaHQgPSAwOworCiAgICAgaWYgKGlzSW5zaWRlKCkpIHsKICAgICAgICAgaWYg
KGlzSW1hZ2UoKSkgewotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UikgewotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAg
bV9tYXJnaW5SaWdodCA9IGNNYXJrZXJQYWRkaW5nOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKLSAgICAgICAgICAg
ICAgICBtX21hcmdpblJpZ2h0ID0gMDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQg
PSBjTWFya2VyUGFkZGluZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXJn
aW5MZWZ0ID0gY01hcmtlclBhZGRpbmc7CiAgICAgICAgIH0gZWxzZSBzd2l0Y2ggKHN0eWxlKCkt
Pmxpc3RTdHlsZVR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBESVNDOgogICAgICAgICAgICAg
Y2FzZSBDSVJDTEU6CiAgICAgICAgICAgICBjYXNlIFNRVUFSRToKICAgICAgICAgICAgICAgICBp
ZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bWFyZ2luTGVmdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gZm9u
dC5hc2NlbnQoKSAtIG1fd2lkdGggKyAxOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0
ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gZm9udC5hc2NlbnQoKSAt
IG1pblByZWZXaWR0aCgpICsgMTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBmb250LmFzY2VudCgpIC0gbV93aWR0aCArIDE7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAtMTsKKyAgICAgICAgICAgICAgICAg
ICAgbWFyZ2luTGVmdCA9IGZvbnQuYXNjZW50KCkgLSBtaW5QcmVmV2lkdGgoKSArIDE7CisgICAg
ICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gLTE7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBtX21hcmdpbkxlZnQgPSAwOwotICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAwOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewogICAgICAgICAgICAgaWYgKGlzSW1h
Z2UoKSkKLSAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAtbV93aWR0aCAtIGNNYXJrZXJQ
YWRkaW5nOworICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAtbWluUHJlZldpZHRoKCkgLSBj
TWFya2VyUGFkZGluZzsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSBmb250LmFzY2VudCgpICogMiAvIDM7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChz
dHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBESVND
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIENJUkNMRToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAtb2Zm
c2V0IC0gY01hcmtlclBhZGRpbmcgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2lu
TGVmdCA9IC1vZmZzZXQgLSBjTWFya2VyUGFkZGluZyAtIDE7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMTk9ORToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbWFyZ2luTGVmdCA9IG1fdGV4dC5pc0VtcHR5KCkgPyAwIDogLW1fd2lkdGggLSBvZmZz
ZXQgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IG1fdGV4dC5pc0Vt
cHR5KCkgPyAwIDogLW1pblByZWZXaWR0aCgpIC0gb2Zmc2V0IC8gMjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXNJ
bWFnZSgpKQotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IGNNYXJrZXJQYWRkaW5nOwor
ICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBmb250LmFzY2VudCgpICogMiAv
IDM7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBESVNDOgogICAgICAgICAgICAgICAgICAgICBjYXNl
IENJUkNMRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTUVVBUkU6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBvZmZzZXQgKyBjTWFya2VyUGFkZGluZyArIDEgLSBt
X3dpZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IG9mZnNldCArIGNN
YXJrZXJQYWRkaW5nICsgMSAtIG1pblByZWZXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTE5PTkU6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX21hcmdpbkxlZnQgPSBtX3RleHQuaXNFbXB0eSgpID8gMCA6IG9mZnNldCAvIDI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gbV90ZXh0LmlzRW1wdHkoKSA/IDAgOiBv
ZmZzZXQgLyAyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBtX21hcmdpblJpZ2h0ID0gLW1fbWFyZ2luTGVmdCAtIG1fd2lkdGg7CisgICAgICAg
IG1hcmdpblJpZ2h0ID0gLW1hcmdpbkxlZnQgLSBtaW5QcmVmV2lkdGgoKTsKICAgICB9CisKKyAg
ICBzdHlsZSgpLT5zZXRNYXJnaW5MZWZ0KExlbmd0aChtYXJnaW5MZWZ0LCBGaXhlZCkpOworICAg
IHN0eWxlKCktPnNldE1hcmdpblJpZ2h0KExlbmd0aChtYXJnaW5SaWdodCwgRml4ZWQpKTsKIH0K
IAogc2hvcnQgUmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdApJ
bmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyTGlzdE1hcmtlci5oCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5k
ZXJMaXN0TWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDggKzUxLDYgQEAgcHVibGljOgog
CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSopOwogCi0gICAgdmly
dHVhbCB2b2lkIGNhbGNXaWR0aCgpOwotCiAgICAgdmlydHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlu
bGluZUJveChib29sLCBib29sLCBib29sKTsKIAogICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdo
dChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwpAQCAt
NjksMTAgKzY3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVj
dCgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVjdGlvbkxlYWYoKSBjb25zdCB7IHJldHVy
biB0cnVlOyB9CiAKKyAgICB2b2lkIHVwZGF0ZU1hcmdpbnMoKTsKKwogcHJpdmF0ZToKICAgICBJ
bnRSZWN0IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwogCi0gICAgU3RyaW5nIG1fdGV4dDsKKyAg
ICBtdXRhYmxlIFN0cmluZyBtX3RleHQ7CiAgICAgQ2FjaGVkSW1hZ2UqIG1faW1hZ2U7CiAgICAg
UmVuZGVyTGlzdEl0ZW0qIG1fbGlzdEl0ZW07CiAgICAgU2VsZWN0aW9uU3RhdGUgbV9zZWxlY3Rp
b25TdGF0ZTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTcgKzE3NiwxNyBAQCBS
ZW5kZXJPYmplY3Q6OlJlbmRlck9iamVjdChOb2RlKiBub2RlKQogICAgICwgbV9uZWVkc0xheW91
dChmYWxzZSkKICAgICAsIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dChmYWxzZSkKICAgICAsIG1f
cG9zQ2hpbGROZWVkc0xheW91dChmYWxzZSkKLSAgICAsIG1fcHJlZldpZHRoc0RpcnR5KHRydWUp
CisgICAgLCBtX3ByZWZXaWR0aHNEaXJ0eShmYWxzZSkKICAgICAsIG1fZmxvYXRpbmcoZmFsc2Up
CiAgICAgLCBtX3Bvc2l0aW9uZWQoZmFsc2UpCiAgICAgLCBtX3JlbFBvc2l0aW9uZWQoZmFsc2Up
CiAgICAgLCBtX3BhaW50QmFja2dyb3VuZChmYWxzZSkKICAgICAsIG1faXNBbm9ueW1vdXMobm9k
ZSA9PSBub2RlLT5kb2N1bWVudCgpKQotICAgICwgbV9yZWNhbGNNaW5NYXgoZmFsc2UpCiAgICAg
LCBtX2lzVGV4dChmYWxzZSkKICAgICAsIG1faW5saW5lKHRydWUpCiAgICAgLCBtX3JlcGxhY2Vk
KGZhbHNlKQogICAgICwgbV9pc0RyYWdnaW5nKGZhbHNlKQorICAgICwgbV9oYXNMYXllcihmYWxz
ZSkKICAgICAsIG1faGFzT3ZlcmZsb3dDbGlwKGZhbHNlKQogICAgICwgbV9oYXNPdmVycmlkZVNp
emUoZmFsc2UpCiAgICAgLCBtX2hhc0NvdW50ZXJOb2RlTWFwKGZhbHNlKQpAQCAtMjUyLDcgKzI1
Miw3IEBAIHZvaWQgUmVuZGVyT2JqZWN0OjphZGRDaGlsZChSZW5kZXJPYmplY3QKICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnJlbW92
ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnJl
bW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqLCBib29sKQogewogICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwogICAgIHJldHVybiAwOwpAQCAtMjYzLDEyICsyNjMsMTcgQEAgdm9pZCBSZW5kZXJP
YmplY3Q6OnJlbW92ZUNoaWxkKFJlbmRlck9iagogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
fQogCi12b2lkIFJlbmRlck9iamVjdDo6YXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCopCit2
b2lkIFJlbmRlck9iamVjdDo6bW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqKQogewogICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6aW5zZXJ0Q2hpbGRO
b2RlKFJlbmRlck9iamVjdCosIFJlbmRlck9iamVjdCopCit2b2lkIFJlbmRlck9iamVjdDo6YXBw
ZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCosIGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Cit9CisKK3ZvaWQgUmVuZGVyT2JqZWN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2Jq
ZWN0KiwgUmVuZGVyT2JqZWN0KiwgYm9vbCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
IH0KQEAgLTQ5OSwxMCArNTA0LDYgQEAgUmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Zmlyc3RM
aW5lQmxvYwogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlRmly
c3RMZXR0ZXIoKQotewotfQotCiBpbnQgUmVuZGVyT2JqZWN0OjpvZmZzZXRMZWZ0KCkgY29uc3QK
IHsKICAgICBSZW5kZXJPYmplY3QqIG9mZnNldFBhciA9IG9mZnNldFBhcmVudCgpOwpAQCAtNjU0
LDYgKzY1NSwyNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFya0FsbERlc2NlbmRhbnRzV2l0CiB7
CiB9CiAKK3ZvaWQgUmVuZGVyT2JqZWN0OjpzZXRQcmVmV2lkdGhzRGlydHkoYm9vbCBiLCBib29s
IG1hcmtQYXJlbnRzKQoreworICAgIGJvb2wgYWxyZWFkeURpcnR5ID0gbV9wcmVmV2lkdGhzRGly
dHk7CisgICAgbV9wcmVmV2lkdGhzRGlydHkgPSBiOworICAgIGlmIChiICYmICFhbHJlYWR5RGly
dHkgJiYgbWFya1BhcmVudHMgJiYgKHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlv
biAmJiBzdHlsZSgpLT5wb3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24pKQorICAgICAgICBp
bnZhbGlkYXRlQ29udGFpbmluZ0Jsb2NrUHJlZldpZHRocygpOworfQorCit2b2lkIFJlbmRlck9i
amVjdDo6aW52YWxpZGF0ZUNvbnRhaW5pbmdCbG9ja1ByZWZXaWR0aHMoKQoreworICAgIFJlbmRl
ck9iamVjdCogbyA9IGNvbnRhaW5pbmdCbG9jaygpOworICAgIHdoaWxlIChvICYmICFvLT5tX3By
ZWZXaWR0aHNEaXJ0eSkgeworICAgICAgICBvLT5tX3ByZWZXaWR0aHNEaXJ0eSA9IHRydWU7Cisg
ICAgICAgIGlmIChvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gfHwgby0+
c3R5bGUoKS0+cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKQorICAgICAgICAgICAgLy8g
QSBwb3NpdGlvbmVkIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtaW4vbWF4IHdpZHRoIG9m
IGl0cyBjb250YWluaW5nIGJsb2NrIGV2ZXIuCisgICAgICAgICAgICAvLyBXZSBjYW4gb3B0aW1p
emUgdGhpcyBjYXNlIGFuZCBub3QgZ28gdXAgYW55IGZ1cnRoZXIuCisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgbyA9IG8tPmNvbnRhaW5pbmdCbG9jaygpOworICAgIH0KK30KKwogdm9pZCBS
ZW5kZXJPYmplY3Q6OnNldE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cykKIHsK
ICAgICBib29sIGFscmVhZHlOZWVkZWRMYXlvdXQgPSBtX25lZWRzTGF5b3V0OwpAQCAtNzEwLDgg
KzczMiwxMiBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFya0NvbnRhaW5pbmdCbG9ja3NGCiAKIFJl
bmRlckJsb2NrKiBSZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jaygpIGNvbnN0CiB7Ci0gICAg
aWYgKGlzVGFibGVDZWxsKCkpCi0gICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5k
ZXJUYWJsZUNlbGwqPih0aGlzKS0+dGFibGUoKTsKKyAgICBpZiAoaXNUYWJsZUNlbGwoKSkgewor
ICAgICAgICBpZiAocGFyZW50KCkpCisgICAgICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u
c3QgUmVuZGVyVGFibGVDZWxsKj4odGhpcyktPnRhYmxlKCk7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKwogICAgIGlmIChpc1JlbmRlclZpZXcoKSkKICAgICAgICAgcmV0dXJuIChSZW5kZXJC
bG9jayopdGhpczsKIApAQCAtMTkxMyw4ICsxOTM5LDYgQEAgRGVwcmVjYXRlZFN0cmluZyBSZW5k
ZXJPYmplY3Q6OmluZm9ybWF0aQogICAgICAgICB0cyA8PCAicHMgIjsKICAgICBpZiAobmVlZHNM
YXlvdXQoKSkKICAgICAgICAgdHMgPDwgIm5sICI7Ci0gICAgaWYgKG1fcmVjYWxjTWluTWF4KQot
ICAgICAgICB0cyA8PCAicm1tICI7CiAgICAgaWYgKHN0eWxlKCkgJiYgc3R5bGUoKS0+ekluZGV4
KCkpCiAgICAgICAgIHRzIDw8ICJ6STogIiA8PCBzdHlsZSgpLT56SW5kZXgoKTsKICAgICBpZiAo
ZWxlbWVudCgpKSB7CkBAIC0yMjM3LDYgKzIyNjEsNyBAQCB2b2lkIFJlbmRlck9iamVjdDo6c2V0
U3R5bGUoUmVuZGVyU3R5bGUqCiAgICAgICAgIG1fcmVsUG9zaXRpb25lZCA9IGZhbHNlOwogICAg
ICAgICBtX3BhaW50QmFja2dyb3VuZCA9IGZhbHNlOwogICAgICAgICBtX2hhc092ZXJmbG93Q2xp
cCA9IGZhbHNlOworICAgICAgICBtX2hhc0xheWVyID0gZmFsc2U7CiAgICAgfQogCiAgICAgaWYg
KHZpZXcoKS0+ZnJhbWVWaWV3KCkpIHsKQEAgLTI3MDIsNDIgKzI3MjcsNiBAQCB2b2lkIFJlbmRl
ck9iamVjdDo6aW52YWxpZGF0ZVZlcnRpY2FsUG9zCiAgICAgfQogfQogCi12b2lkIFJlbmRlck9i
amVjdDo6cmVjYWxjTWluTWF4V2lkdGhzKCkKLXsKLSAgICBBU1NFUlQobV9yZWNhbGNNaW5NYXgp
OwotCi0gICAgbV9yZWNhbGNNaW5NYXggPSBmYWxzZTsKLSAgICB1cGRhdGVGaXJzdExldHRlcigp
OwotCi0gICAgUmVuZGVyT2JqZWN0KiBjaGlsZCA9IGZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAo
Y2hpbGQpIHsKLSAgICAgICAgaW50IGNtaW4gPSAwOwotICAgICAgICBpbnQgY21heCA9IDA7Ci0g
ICAgICAgIGJvb2wgdGVzdCA9IGZhbHNlOwotICAgICAgICBpZiAoKCFtX3ByZWZXaWR0aHNEaXJ0
eSAmJiBjaGlsZC0+bV9yZWNhbGNNaW5NYXgpIHx8IGNoaWxkLT5tX3ByZWZXaWR0aHNEaXJ0eSkg
ewotICAgICAgICAgICAgY21pbiA9IGNoaWxkLT5taW5QcmVmV2lkdGgoKTsKLSAgICAgICAgICAg
IGNtYXggPSBjaGlsZC0+bWF4UHJlZldpZHRoKCk7Ci0gICAgICAgICAgICB0ZXN0ID0gdHJ1ZTsK
LSAgICAgICAgfQotICAgICAgICBpZiAoY2hpbGQtPm1fcmVjYWxjTWluTWF4KQotICAgICAgICAg
ICAgY2hpbGQtPnJlY2FsY01pbk1heFdpZHRocygpOwotICAgICAgICBpZiAoY2hpbGQtPm1fcHJl
ZldpZHRoc0RpcnR5KQotICAgICAgICAgICAgY2hpbGQtPmNhbGNQcmVmV2lkdGhzKCk7Ci0gICAg
ICAgIGlmICghbV9wcmVmV2lkdGhzRGlydHkgJiYgdGVzdCAmJiAoY21pbiAhPSBjaGlsZC0+bWlu
UHJlZldpZHRoKCkgfHwgY21heCAhPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkpKQotICAgICAgICAg
ICAgbV9wcmVmV2lkdGhzRGlydHkgPSB0cnVlOwotICAgICAgICBjaGlsZCA9IGNoaWxkLT5uZXh0
U2libGluZygpOwotICAgIH0KLQotICAgIC8vIHdlIG5lZWQgdG8gcmVjYWxjdWxhdGUsIGlmIHRo
ZSBjb250YWlucyBpbmxpbmUgY2hpbGRyZW4sIGFzIHRoZSBjaGFuZ2UgY291bGQgaGF2ZQotICAg
IC8vIGhhcHBlbmVkIHNvbWV3aGVyZSBkZWVwIGluc2lkZSB0aGUgY2hpbGQgdHJlZS4gQWxzbyBk
byB0aGlzIGZvciBibG9ja3Mgb3IgdGFibGVzIHRoYXQKLSAgICAvLyBhcmUgaW5saW5lIChpLmUu
LCBpbmxpbmUtYmxvY2sgYW5kIGlubGluZS10YWJsZSkuCi0gICAgaWYgKCghaXNJbmxpbmUoKSB8
fCBpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpKSAmJiBjaGlsZHJlbklubGluZSgpKQotICAg
ICAgICBtX3ByZWZXaWR0aHNEaXJ0eSA9IHRydWU7Ci0KLSAgICBpZiAobV9wcmVmV2lkdGhzRGly
dHkpCi0gICAgICAgIGNhbGNQcmVmV2lkdGhzKCk7Ci19Ci0KIHZvaWQgUmVuZGVyT2JqZWN0Ojpz
Y2hlZHVsZVJlbGF5b3V0KCkKIHsKICAgICBpZiAoaXNSZW5kZXJWaWV3KCkpIHsKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyT2Jq
ZWN0LmgJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNTMsNyArMTUzLDYgQEAgcHVibGljOgogICAgIFJlbmRlck9iamVjdCog
bGFzdExlYWZDaGlsZCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBSZW5kZXJMYXllciogbGF5ZXIo
KSBjb25zdCB7IHJldHVybiAwOyB9Ci0gICAgYm9vbCBoYXNMYXllcigpIGNvbnN0IHsgcmV0dXJu
ICEhbGF5ZXIoKTsgfQogICAgIFJlbmRlckxheWVyKiBlbmNsb3NpbmdMYXllcigpIGNvbnN0Owog
ICAgIHZvaWQgYWRkTGF5ZXJzKFJlbmRlckxheWVyKiBwYXJlbnRMYXllciwgUmVuZGVyT2JqZWN0
KiBuZXdPYmplY3QpOwogICAgIHZvaWQgcmVtb3ZlTGF5ZXJzKFJlbmRlckxheWVyKiBwYXJlbnRM
YXllcik7CkBAIC0xNzcsNyArMTc2LDYgQEAgcHVibGljOgogICAgIC8vIE9idGFpbnMgdGhlIG5l
YXJlc3QgZW5jbG9zaW5nIGJsb2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBjb250cmli
dXRlcyBhIGZpcnN0LWxpbmUgc3R5bGUgdG8gb3VyIGlubGluZQogICAgIC8vIGNoaWxkcmVuLgog
ICAgIHZpcnR1YWwgUmVuZGVyQmxvY2sqIGZpcnN0TGluZUJsb2NrKCkgY29uc3Q7Ci0gICAgdmly
dHVhbCB2b2lkIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CiAKICAgICAvLyBDYWxsZWQgd2hlbiBhbiBv
YmplY3QgdGhhdCB3YXMgZmxvYXRpbmcgb3IgcG9zaXRpb25lZCBiZWNvbWVzIGEgbm9ybWFsIGZs
b3cgb2JqZWN0CiAgICAgLy8gYWdhaW4uICBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgcmVuZGVy
IHRyZWUgdXBkYXRlcyBhcyBuZWVkZWQgdG8gYWNjb21tb2RhdGUgdGhlIG5ldwpAQCAtMjA2LDkg
KzIwNCwxMiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBib29sIGNyZWF0ZXNBbm9ueW1vdXNXcmFw
cGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIC8vIHJhdyB0cmVlIG1hbmlwdWxh
dGlvbgotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2Jq
ZWN0Kik7Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQsIFJl
bmRlck9iamVjdCogYmVmb3JlKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogcmVtb3ZlQ2hp
bGROb2RlKFJlbmRlck9iamVjdCosIGJvb2wgZnVsbFJlbW92ZSA9IHRydWUpOworICAgIHZpcnR1
YWwgdm9pZCBhcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsQXBwZW5kID0g
dHJ1ZSk7CisgICAgdmlydHVhbCB2b2lkIGluc2VydENoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNo
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZSwgYm9vbCBmdWxsSW5zZXJ0ID0gdHJ1ZSk7CisgICAg
Ly8gRGVzaWduZWQgZm9yIHNwZWVkLiAgRG9uJ3Qgd2FzdGUgdGltZSBkb2luZyBhIGJ1bmNoIG9m
IHdvcmsgbGlrZSBsYXllciB1cGRhdGluZyBhbmQgcmVwYWludGluZyB3aGVuIHdlIGtub3cgdGhh
dCBvdXIKKyAgICAvLyBjaGFuZ2UgaW4gcGFyZW50YWdlIGlzIG5vdCBnb2luZyB0byBhZmZlY3Qg
YW55dGhpbmcuCisgICAgdmlydHVhbCB2b2lkIG1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0Kik7
CiAgICAgLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAKIHByb3Rl
Y3RlZDoKQEAgLTMxMCw3ICszMTEsOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1J1bkluKCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS0+ZGlzcGxheSgpID09IFJVTl9JTjsgfSAvLyBydW4taW4gb2Jq
ZWN0CiAgICAgYm9vbCBpc0RyYWdnaW5nKCkgY29uc3QgeyByZXR1cm4gbV9pc0RyYWdnaW5nOyB9
CiAgICAgYm9vbCBpc1JlcGxhY2VkKCkgY29uc3QgeyByZXR1cm4gbV9yZXBsYWNlZDsgfSAvLyBh
ICJyZXBsYWNlZCIgZWxlbWVudCAoc2VlIENTUykKLQorICAgIAorICAgIGJvb2wgaGFzTGF5ZXIo
KSBjb25zdCB7IHJldHVybiBtX2hhc0xheWVyOyB9CisgICAgCiAgICAgYm9vbCBoYXNCb3hEZWNv
cmF0aW9ucygpIGNvbnN0IHsgcmV0dXJuIG1fcGFpbnRCYWNrZ3JvdW5kOyB9CiAgICAgYm9vbCBt
dXN0UmVwYWludEJhY2tncm91bmRPckJvcmRlcigpIGNvbnN0OwogCkBAIC0zMjAsNyArMzIzLDYg
QEAgcHVibGljOgogICAgIGJvb2wgbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpIGNvbnN0IHsgcmV0
dXJuIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dDsgfQogCiAgICAgYm9vbCBwcmVmV2lkdGhzRGly
dHkoKSBjb25zdCB7IHJldHVybiBtX3ByZWZXaWR0aHNEaXJ0eTsgfQotICAgIGJvb2wgcmVjYWxj
TWluTWF4KCkgY29uc3QgeyByZXR1cm4gbV9yZWNhbGNNaW5NYXg7IH0KIAogICAgIGJvb2wgaXNT
ZWxlY3Rpb25Cb3JkZXIoKSBjb25zdDsKIApAQCAtMzY5LDI0ICszNzEsMTMgQEAgcHVibGljOgog
ICAgIHZvaWQgc2V0TmVlZHNMYXlvdXQoYm9vbCBiLCBib29sIG1hcmtQYXJlbnRzID0gdHJ1ZSk7
CiAgICAgdm9pZCBzZXRDaGlsZE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cyA9
IHRydWUpOwogCi0gICAgdm9pZCBzZXRQcmVmV2lkdGhzRGlydHkoYm9vbCBiKQotICAgIHsKLSAg
ICAgICAgbV9wcmVmV2lkdGhzRGlydHkgPSBiOwotICAgICAgICBpZiAoYikgewotICAgICAgICAg
ICAgUmVuZGVyT2JqZWN0KiBvID0gdGhpczsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogcm9v
dCA9IHRoaXM7Ci0gICAgICAgICAgICB3aGlsZShvKSB7IC8vIEZJWE1FOiAmJiAhby0+bV9yZWNh
bGNNaW5NYXggKSB7Ci0gICAgICAgICAgICAgICAgby0+bV9yZWNhbGNNaW5NYXggPSB0cnVlOwot
ICAgICAgICAgICAgICAgIHJvb3QgPSBvOwotICAgICAgICAgICAgICAgIG8gPSBvLT5tX3BhcmVu
dDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQorICAgIHZvaWQgc2V0UHJlZldp
ZHRoc0RpcnR5KGJvb2wsIGJvb2wgbWFya1BhcmVudHMgPSB0cnVlKTsKKyAgICB2b2lkIGludmFs
aWRhdGVDb250YWluaW5nQmxvY2tQcmVmV2lkdGhzKCk7CisgICAgCiAgICAgdm9pZCBzZXROZWVk
c0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKQogICAgIHsKLSAgICAgICAgc2V0UHJlZldpZHRo
c0RpcnR5KHRydWUpOwogICAgICAgICBzZXROZWVkc0xheW91dCh0cnVlKTsKKyAgICAgICAgc2V0
UHJlZldpZHRoc0RpcnR5KHRydWUpOwogICAgIH0KIAogICAgIHZvaWQgc2V0UG9zaXRpb25lZChi
b29sIGIgPSB0cnVlKSAgeyBtX3Bvc2l0aW9uZWQgPSBiOyAgfQpAQCAtMzk3LDYgKzM4OCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFJlbmRlclRleHQoKSB7IG1faXNUZXh0ID0gdHJ1ZTsgfQog
ICAgIHZvaWQgc2V0UmVwbGFjZWQoYm9vbCBiID0gdHJ1ZSkgeyBtX3JlcGxhY2VkID0gYjsgfQog
ICAgIHZvaWQgc2V0SGFzT3ZlcmZsb3dDbGlwKGJvb2wgYiA9IHRydWUpIHsgbV9oYXNPdmVyZmxv
d0NsaXAgPSBiOyB9CisgICAgdm9pZCBzZXRIYXNMYXllcihib29sIGIgPSB0cnVlKSB7IG1faGFz
TGF5ZXIgPSBiOyB9CiAKICAgICB2b2lkIHNjaGVkdWxlUmVsYXlvdXQoKTsKIApAQCAtNDU5LDI2
ICs0NTEsNyBAQCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGludCBjbGlweSwgaW50IGNsaXBoLCBpbnQgdHgsIGludCB0eSwgaW50IHdpZHRoLCBpbnQg
aGVpZ2h0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIGlu
Y2x1ZGVMZWZ0RWRnZSA9IHRydWUsIGJvb2wgaW5jbHVkZVJpZ2h0RWRnZSA9IHRydWUpIHsgfQog
Ci0gICAgLyoKLSAgICAgKiBUaGlzIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIG1pbmltdW0gJiBt
YXhpbXVtIHdpZHRoIHRoYXQgdGhlIG9iamVjdAotICAgICAqIGNhbiBiZSBzZXQgdG8uCi0gICAg
ICoKLSAgICAgKiB3aGVuIHRoZSBFbGVtZW50IGNhbGxzIHNldFByZWZXaWR0aHNEaXJ0eShmYWxz
ZSksIGNhbGNQcmVmV2lkdGhzKCkgd2lsbAotICAgICAqIGJlIG5vIGxvbmdlciBjYWxsZWQuCi0g
ICAgICoKLSAgICAgKiB3aGVuIGEgZWxlbWVudCBoYXMgYSBmaXhlZCBzaXplLCBtX21pblByZWZX
aWR0aCBhbmQgbV9tYXhQcmVmV2lkdGggc2hvdWxkIGJlCi0gICAgICogc2V0IHRvIHRoZSBzYW1l
IHZhbHVlLiBUaGlzIGhhcyB0aGUgc3BlY2lhbCBtZWFuaW5nIHRoYXQgbV93aWR0aCwKLSAgICAg
KiBjb250YWlucyB0aGUgYWN0dWFsIHZhbHVlLgotICAgICAqCi0gICAgICogYXNzdW1lcyBjYWxj
UHJlZldpZHRocyBoYXMgYWxyZWFkeSBiZWVuIGNhbGxlZCBmb3IgYWxsIGNoaWxkcmVuLgotICAg
ICAqLwotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpIHsgfQotCi0gICAgLyoKLSAg
ICAgKiBEb2VzIHRoZSBtaW4gbWF4IHdpZHRoIHJlY2FsY3VsYXRpb25zIGFmdGVyIGNoYW5nZXMu
Ci0gICAgICovCi0gICAgdm9pZCByZWNhbGNNaW5NYXhXaWR0aHMoKTsKLQorICAgIAogICAgIC8q
CiAgICAgICogQ2FsY3VsYXRlcyB0aGUgYWN0dWFsIHdpZHRoIG9mIHRoZSBvYmplY3QgKG9ubHkg
Zm9yIG5vbiBpbmxpbmUKICAgICAgKiBvYmplY3RzKQpAQCAtOTIyLDEyICs4OTUsMTIgQEAgcHJp
dmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJhY2tn
cm91bmQgcGFpbnRpbmcgcGhhc2UgKGJhY2tncm91bmQsIGJvcmRlciwgZXRjKQogCiAgICAgYm9v
bCBtX2lzQW5vbnltb3VzICAgICAgICAgICAgICAgOiAxOwotICAgIGJvb2wgbV9yZWNhbGNNaW5N
YXggICAgICAgICAgICAgIDogMTsKICAgICBib29sIG1faXNUZXh0ICAgICAgICAgICAgICAgICAg
ICA6IDE7CiAgICAgYm9vbCBtX2lubGluZSAgICAgICAgICAgICAgICAgICAgOiAxOwogICAgIGJv
b2wgbV9yZXBsYWNlZCAgICAgICAgICAgICAgICAgIDogMTsKICAgICBib29sIG1faXNEcmFnZ2lu
ZyAgICAgICAgICAgICAgICA6IDE7CiAKKyAgICBib29sIG1faGFzTGF5ZXIgICAgICAgICAgICAg
ICAgICA6IDE7CiAgICAgYm9vbCBtX2hhc092ZXJmbG93Q2xpcCAgICAgICAgICAgOiAxOwogCiAg
ICAgYm9vbCBtX2hhc092ZXJyaWRlU2l6ZSAgICAgICAgICAgOiAxOwpJbmRleDogcmVuZGVyaW5n
L1JlbmRlclBhcnRPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJQYXJ0
T2JqZWN0LmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyUGFydE9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NSw3ICsyNDUsNiBAQCB2b2lkIFJlbmRlclBhcnRP
YmplY3Q6OnVwZGF0ZVdpZGdldCgpCiB2b2lkIFJlbmRlclBhcnRPYmplY3Q6OmxheW91dCgpCiB7
CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5
KCkpOwogCiAgICAgY2FsY1dpZHRoKCk7CiAgICAgY2FsY0hlaWdodCgpOwpJbmRleDogcmVuZGVy
aW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
clNWR0NvbnRhaW5lci5jcHAJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlclNW
R0NvbnRhaW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg1LDE3ICs4NSw5IEBAIHNob3J0IFJl
bmRlclNWR0NvbnRhaW5lcjo6YmFzZWxpbmVQb3NpdGkKICAgICByZXR1cm4gaGVpZ2h0KCkgKyBt
YXJnaW5Ub3AoKSArIG1hcmdpbkJvdHRvbSgpOwogfQogCi12b2lkIFJlbmRlclNWR0NvbnRhaW5l
cjo6Y2FsY1ByZWZXaWR0aHMoKQotewotICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7Ci0g
ICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IDA7Ci0gICAgc2V0UHJlZldpZHRo
c0RpcnR5KGZhbHNlKTsKLX0KLQogdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmxheW91dCgpCiB7
CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5
KCkpOwogCiAgICAgY2FsY1ZpZXdwb3J0KCk7CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJTVkdD
b250YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmgJ
KHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Myw3ICs2Myw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHNob3J0IGxp
bmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAgICAg
dmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9uKGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94
ID0gZmFsc2UpIGNvbnN0OwogICAgIAotICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygp
OwogICAgIHZpcnR1YWwgdm9pZCBsYXlvdXQoKTsKICAgICB2aXJ0dWFsIHZvaWQgcGFpbnQoUGFp
bnRJbmZvJiwgaW50IHBhcmVudFgsIGludCBwYXJlbnRZKTsKICAgICAKSW5kZXg6IHJlbmRlcmlu
Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmlu
Zy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwxMyAr
NTQsNiBAQCBzaG9ydCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6OmJhc2VsaW5lCiAgICAgcmV0
dXJuIDA7CiB9CiAKLXZvaWQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyOjpjYWxjUHJlZldpZHRo
cygpCi17Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKLSAgICBtX21pblByZWZXaWR0
aCA9IG1fbWF4UHJlZldpZHRoID0gMDsKLSAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwot
fQotCiB2b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRhaW5lcjo6bGF5b3V0KCkKIHsKICAgICBBU1NF
UlQobmVlZHNMYXlvdXQoKSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFp
bmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5o
CShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sIGIsIGJvb2wgaXNSb290TGluZUJv
eCA9IGZhbHNlKSBjb25zdDsKICAgICAgICAgdmlydHVhbCBzaG9ydCBiYXNlbGluZVBvc2l0aW9u
KGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgICAgICAKLSAg
ICAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBsYXlvdXQoKTsKICAgICAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5mbyYsIGludCBw
YXJlbnRYLCBpbnQgcGFyZW50WSk7CiAgICAgICAgIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclNW
R1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJTVkdUZXh0LmNwcAkocmV2
aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyU1ZHVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU4LDcgKzU4LDYgQEAgYm9vbCBSZW5kZXJTVkdUZXh0OjpyZXF1aXJlc0xheWVyKCkK
IHZvaWQgUmVuZGVyU1ZHVGV4dDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQo
KSk7Ci0gICAgQVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICBJbnRSZWN0IG9sZEJv
dW5kczsKICAgICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVy
VGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlz
aW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMzLDcgKzIzMyw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OmNhbGNXaWR0aCgpCiAgICAgaWYg
KHdpZHRoVHlwZSA+IFJlbGF0aXZlICYmIHN0eWxlKCktPndpZHRoKCkuaXNQb3NpdGl2ZSgpKSB7
CiAgICAgICAgIC8vIFBlcmNlbnQgb3IgZml4ZWQgdGFibGUKICAgICAgICAgbV93aWR0aCA9IHN0
eWxlKCktPndpZHRoKCkuY2FsY01pblZhbHVlKGF2YWlsYWJsZVdpZHRoKTsKLSAgICAgICAgbV93
aWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgbV93aWR0aCk7CisgICAgICAgIG1fd2lkdGggPSBt
YXgobWluUHJlZldpZHRoKCksIG1fd2lkdGgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8vIEFu
IGF1dG8gd2lkdGggdGFibGUgc2hvdWxkIHNocmluayB0byBmaXQgd2l0aGluIHRoZSBsaW5lIHdp
ZHRoIGlmIG5lY2Vzc2FyeSBpbiBvcmRlciB0byAKICAgICAgICAgLy8gYXZvaWQgb3ZlcmxhcHBp
bmcgZmxvYXRzLgpAQCAtMjUwLDEwICsyNTAsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY1dp
ZHRoKCkKICAgICAgICAgaW50IGF2YWlsQ29udGVudFdpZHRoID0gbWF4KDAsIGF2YWlsYWJsZVdp
ZHRoIC0gbWFyZ2luVG90YWwpOwogICAgICAgICAKICAgICAgICAgLy8gRW5zdXJlIHdlIGFyZW4n
dCBiaWdnZXIgdGhhbiBvdXIgbWF4IHdpZHRoIG9yIHNtYWxsZXIgdGhhbiBvdXIgbWluIHdpZHRo
LgotICAgICAgICBtX3dpZHRoID0gbWluKGF2YWlsQ29udGVudFdpZHRoLCBtX21heFByZWZXaWR0
aCk7CisgICAgICAgIG1fd2lkdGggPSBtaW4oYXZhaWxDb250ZW50V2lkdGgsIG1heFByZWZXaWR0
aCgpKTsKICAgICB9CiAgICAgCi0gICAgbV93aWR0aCA9IG1heChtX3dpZHRoLCBtX21pblByZWZX
aWR0aCk7CisgICAgbV93aWR0aCA9IG1heChtX3dpZHRoLCBtaW5QcmVmV2lkdGgoKSk7CiAKICAg
ICAvLyBGaW5hbGx5LCB3aXRoIG91ciB0cnVlIHdpZHRoIGRldGVybWluZWQsIGNvbXB1dGUgb3Vy
IG1hcmdpbnMgZm9yIHJlYWwuCiAgICAgbV9tYXJnaW5SaWdodCA9IDA7CkBAIC0yNjQsOCArMjY0
LDYgQEAgdm9pZCBSZW5kZXJUYWJsZTo6Y2FsY1dpZHRoKCkKIHZvaWQgUmVuZGVyVGFibGU6Omxh
eW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldp
ZHRoc0RpcnR5KCkpOwotICAgIEFTU0VSVCghbV9uZWVkc1NlY3Rpb25SZWNhbGMpOwogCiAgICAg
aWYgKHBvc0NoaWxkTmVlZHNMYXlvdXQoKSAmJiAhbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpICYm
ICFzZWxmTmVlZHNMYXlvdXQoKSkgewogICAgICAgICAvLyBBbGwgd2UgaGF2ZSB0byBkbyBpcyBs
YXkgb3V0IG91ciBwb3NpdGlvbmVkIG9iamVjdHMuCkBAIC0yNzQsNiArMjcyLDggQEAgdm9pZCBS
ZW5kZXJUYWJsZTo6bGF5b3V0KCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHJlY2Fs
Y1NlY3Rpb25zSWZOZWVkZWQoKTsKKyAgICAgICAgCiAgICAgSW50UmVjdCBvbGRCb3VuZHM7CiAg
ICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwogICAgIGJvb2wgY2hlY2tGb3JSZXBhaW50ID0gY2hl
Y2tGb3JSZXBhaW50RHVyaW5nTGF5b3V0KCk7CkBAIC02ODUsMTAgKzY4NSwxMCBAQCB2b2lkIFJl
bmRlclRhYmxlOjpyZWNhbGNTZWN0aW9ucygpCiAgICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CiB9
CiAKLVJlbmRlck9iamVjdCogUmVuZGVyVGFibGU6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmpl
Y3QqIGNoaWxkKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJUYWJsZTo6cmVtb3ZlQ2hpbGROb2RlKFJl
bmRlck9iamVjdCogY2hpbGQsIGJvb2wgZnVsbFJlbW92ZSkKIHsKICAgICBzZXROZWVkc1NlY3Rp
b25SZWNhbGMoKTsKLSAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpyZW1vdmVDaGlsZE5vZGUo
Y2hpbGQpOworICAgIHJldHVybiBSZW5kZXJDb250YWluZXI6OnJlbW92ZUNoaWxkTm9kZShjaGls
ZCwgZnVsbFJlbW92ZSk7CiB9CiAKIGludCBSZW5kZXJUYWJsZTo6Y2FsY0JvcmRlckxlZnQoKSBj
b25zdApJbmRleDogcmVuZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmgJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlclRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2NSw3ICsxNjUsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBuZWVkc1NlY3Rpb25SZWNhbGMoKSBjb25zdCB7IHJldHVybiBtX25lZWRzU2VjdGlvblJlY2Fs
YzsgfQogICAgIHZvaWQgc2V0TmVlZHNTZWN0aW9uUmVjYWxjKCkgeyBtX25lZWRzU2VjdGlvblJl
Y2FsYyA9IHRydWU7IH0KIAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0Kik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIHJlbW92ZUNoaWxk
Tm9kZShSZW5kZXJPYmplY3QqLCBib29sIGZ1bGxSZW1vdmUgPSB0cnVlKTsKIAogICAgIFJlbmRl
clRhYmxlU2VjdGlvbiogc2VjdGlvbkFib3ZlKGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiosIGJv
b2wgc2tpcEVtcHR5U2VjdGlvbnMgPSBmYWxzZSkgY29uc3Q7CiAgICAgUmVuZGVyVGFibGVTZWN0
aW9uKiBzZWN0aW9uQmVsb3coY29uc3QgUmVuZGVyVGFibGVTZWN0aW9uKiwgYm9vbCBza2lwRW1w
dHlTZWN0aW9ucyA9IGZhbHNlKSBjb25zdDsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZVJv
dy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRhYmxlUm93LmNwcAkocmV2aXNp
b24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMTIsNyArMTEyLDYgQEAgdm9pZCBSZW5kZXJUYWJsZVJvdzo6YWRkQ2hpbGQoUmVuZGVy
T2JqZQogdm9pZCBSZW5kZXJUYWJsZVJvdzo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNM
YXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5u
ZXh0U2libGluZygpKSB7CiAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSkgewpJbmRl
eDogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5n
L1JlbmRlclRhYmxlU2VjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMDQsMTAgKzEwMDQs
MTAgQEAgdm9pZCBSZW5kZXJUYWJsZVNlY3Rpb246OnNwbGl0Q29sdW1uKGludAogICAgIH0KIH0K
IAotUmVuZGVyT2JqZWN0KiBSZW5kZXJUYWJsZVNlY3Rpb246OnJlbW92ZUNoaWxkTm9kZShSZW5k
ZXJPYmplY3QqIGNoaWxkKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJUYWJsZVNlY3Rpb246OnJlbW92
ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkLCBib29sIGZ1bGxSZW1vdmUpCiB7CiAgICAg
c2V0TmVlZHNDZWxsUmVjYWxjKCk7Ci0gICAgcmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6cmVtb3Zl
Q2hpbGROb2RlKGNoaWxkKTsKKyAgICByZXR1cm4gUmVuZGVyQ29udGFpbmVyOjpyZW1vdmVDaGls
ZE5vZGUoY2hpbGQsIGZ1bGxSZW1vdmUpOwogfQogCiAvLyBIaXQgVGVzdGluZwpJbmRleDogcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5k
ZXJUYWJsZVNlY3Rpb24uaAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyVGFi
bGVTZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw3ICsxMjEsNyBAQCBwdWJsaWM6CiAK
ICAgICBpbnQgZ2V0QmFzZWxpbmUoaW50IHJvdykgeyByZXR1cm4gbV9ncmlkW3Jvd10uYmFzZUxp
bmU7IH0KIAotICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVy
T2JqZWN0Kik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIHJlbW92ZUNoaWxkTm9kZShSZW5k
ZXJPYmplY3QqLCBib29sIGZ1bGxSZW1vdmUgPSB0cnVlKTsKIAogICAgIHZpcnR1YWwgYm9vbCBu
b2RlQXRQb2ludChjb25zdCBIaXRUZXN0UmVxdWVzdCYsIEhpdFRlc3RSZXN1bHQmLCBpbnQgeCwg
aW50IHksIGludCB0eCwgaW50IHR5LCBIaXRUZXN0QWN0aW9uKTsKIApJbmRleDogcmVuZGVyaW5n
L1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
cmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzNSw4ICs0MzUsOCBAQCB2b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRQcmVmV2lkdGhz
KGludCBsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAobV9oYXNUYWIpCi0gICAg
ICAgIGNhbGNQcmVmV2lkdGhzSW50ZXJuYWwobGVhZFdpZHRoKTsKKyAgICBpZiAobV9oYXNUYWIg
fHwgcHJlZldpZHRoc0RpcnR5KCkpCisgICAgICAgIGNhbGNQcmVmV2lkdGhzKGxlYWRXaWR0aCk7
CiAKICAgICBtaW5XID0gbV9taW5XaWR0aDsKICAgICBtYXhXID0gbV9tYXhXaWR0aDsKQEAgLTQ5
NCwyMSArNDk0LDMxIEBAIHZvaWQgUmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMoaW50IGwK
ICAgICB9CiB9CiAKLXZvaWQgUmVuZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoKQoraW5saW5lIGJv
b2wgaXNTcGFjZUFjY29yZGluZ1RvU3R5bGUoVUNoYXIgYywgUmVuZGVyU3R5bGUqIHN0eWxlKQog
ewotICAgIC8vIFVzZSAwIGZvciB0aGUgbGVhZFdpZHRoLiBJZiB0aGUgdGV4dCBjb250YWlucyBh
IHZhcmlhYmxlIHdpZHRoIHRhYiwgdGhlIHJlYWwgd2lkdGgKLSAgICAvLyB3aWxsIGdldCBtZWFz
dXJlZCB3aGVuIHRyaW1tZWRNaW5NYXhXaWR0aCBjYWxscyBhZ2FpbiB3aXRoIHRoZSByZWFsIGxl
YWRXaWR0aC4KLSAgICBBU1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwotICAgIGNhbGNQcmVmV2lk
dGhzSW50ZXJuYWwoMCk7CisgICAgcmV0dXJuIGMgPT0gJyAnIHx8IChjID09IG5vQnJlYWtTcGFj
ZSAmJiBzdHlsZS0+bmJzcE1vZGUoKSA9PSBTUEFDRSk7CiB9CiAKLWlubGluZSBib29sIGlzU3Bh
Y2VBY2NvcmRpbmdUb1N0eWxlKFVDaGFyIGMsIFJlbmRlclN0eWxlKiBzdHlsZSkKK2ludCBSZW5k
ZXJUZXh0OjptaW5QcmVmV2lkdGgoKSBjb25zdAogewotICAgIHJldHVybiBjID09ICcgJyB8fCAo
YyA9PSBub0JyZWFrU3BhY2UgJiYgc3R5bGUtPm5ic3BNb2RlKCkgPT0gU1BBQ0UpOworICAgIGlm
IChwcmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgY29uc3RfY2FzdDxSZW5kZXJUZXh0Kj4odGhp
cyktPmNhbGNQcmVmV2lkdGhzKDApOworICAgICAgICAKKyAgICByZXR1cm4gbV9taW5XaWR0aDsK
IH0KIAotdm9pZCBSZW5kZXJUZXh0OjpjYWxjUHJlZldpZHRoc0ludGVybmFsKGludCBsZWFkV2lk
dGgpCitpbnQgUmVuZGVyVGV4dDo6bWF4UHJlZldpZHRoKCkgY29uc3QKIHsKKyAgICBpZiAocHJl
ZldpZHRoc0RpcnR5KCkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLT5j
YWxjUHJlZldpZHRocygwKTsKKyAgICAgICAgCisgICAgcmV0dXJuIG1fbWF4V2lkdGg7Cit9CisK
K3ZvaWQgUmVuZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCkKK3sKKyAgICBB
U1NFUlQobV9oYXNUYWIgfHwgcHJlZldpZHRoc0RpcnR5KCkpOworCiAgICAgbV9taW5XaWR0aCA9
IDA7CiAgICAgbV9iZWdpbk1pbldpZHRoID0gMDsKICAgICBtX2VuZE1pbldpZHRoID0gMDsKQEAg
LTk5MSw3ICsxMDAxLDcgQEAgdW5zaWduZWQgaW50IFJlbmRlclRleHQ6OndpZHRoKHVuc2lnbmVk
IAogICAgIGludCB3OwogICAgIGlmICgmZiA9PSAmc3R5bGUoKS0+Zm9udCgpKSB7CiAgICAgICAg
IGlmICghc3R5bGUoKS0+cHJlc2VydmVOZXdsaW5lKCkgJiYgIWZyb20gJiYgbGVuID09IHRleHRM
ZW5ndGgoKSkKLSAgICAgICAgICAgIHcgPSBtX21heFdpZHRoOworICAgICAgICAgICAgdyA9IG1h
eFByZWZXaWR0aCgpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICB3ID0gd2lkdGhGcm9tQ2Fj
aGUoZiwgZnJvbSwgbGVuLCB4UG9zKTsKICAgICB9IGVsc2UKSW5kZXg6IHJlbmRlcmluZy9SZW5k
ZXJUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlclRleHQuaAkocmV2aXNpb24g
MjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyVGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw5
ICs3NSw4IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sIGZp
cnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogCi0gICAgdmlydHVh
bCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7Ci0gICAgdmlydHVhbCBpbnQgbWluUHJlZldpZHRoKCkg
Y29uc3QgeyByZXR1cm4gbV9taW5XaWR0aDsgfQotICAgIHZpcnR1YWwgaW50IG1heFByZWZXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWF4V2lkdGg7IH0KKyAgICB2aXJ0dWFsIGludCBtaW5QcmVm
V2lkdGgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBtYXhQcmVmV2lkdGgoKSBjb25zdDsKIAog
ICAgIHZvaWQgdHJpbW1lZFByZWZXaWR0aHMoaW50IGxlYWRXaWR0aCwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGludCYgYmVnaW5NaW5XLCBib29sJiBiZWdpbldTLApAQCAtMTI5LDYgKzEy
OCw3IEBAIHB1YmxpYzoKIAogcHJvdGVjdGVkOgogICAgIHZvaWQgc2V0VGV4dEludGVybmFsKFBh
c3NSZWZQdHI8U3RyaW5nSW1wbD4pOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhp
bnQgbGVhZFdpZHRoKTsKIAogcHJpdmF0ZToKICAgICAvLyBNYWtlIGxlbmd0aCgpIHByaXZhdGUg
c28gdGhhdCBjYWxsZXJzIHRoYXQgaGF2ZSBhIFJlbmRlclRleHQqCkBAIC0xMzgsOCArMTM4LDYg
QEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZGVsZXRlVGV4dEJveGVzKCk7CiAgICAgYm9vbCBjb250
YWluc09ubHlXaGl0ZXNwYWNlKHVuc2lnbmVkIGZyb20sIHVuc2lnbmVkIGxlbikgY29uc3Q7Ci0g
ICAgdm9pZCBjYWxjUHJlZldpZHRoc0ludGVybmFsKGludCBsZWFkV2lkdGgpOwotCiAgICAgaW50
IHdpZHRoRnJvbUNhY2hlKGNvbnN0IEZvbnQmLCBpbnQgc3RhcnQsIGludCBsZW4sIGludCB4UG9z
KSBjb25zdDsKICAgICBib29sIGlzQWxsQVNDSUkoKSBjb25zdCB7IHJldHVybiBtX2lzQWxsQVND
SUk7IH0KIApJbmRleDogcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJWaWV3LmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVu
ZGVyVmlldy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDcgKzU0LDcgQEAgUmVuZGVyVmlldzo6
UmVuZGVyVmlldyhOb2RlKiBub2RlLCBGcmFtZQogICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAg
ICBtX21heFByZWZXaWR0aCA9IDA7CiAKLSAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7Cisg
ICAgc2V0UHJlZldpZHRoc0RpcnR5KHRydWUsIGZhbHNlKTsKICAgICAKICAgICBzZXRQb3NpdGlv
bmVkKHRydWUpOyAvLyB0byAwLDAgOikKIApAQCAtODcsMjEgKzg3LDE2IEBAIHZvaWQgUmVuZGVy
Vmlldzo6Y2FsY1ByZWZXaWR0aHMoKQogICAgIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRocygp
OwogCiAgICAgbV9tYXhQcmVmV2lkdGggPSBtX21pblByZWZXaWR0aDsKLQotICAgIHNldFByZWZX
aWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKIHZvaWQgUmVuZGVyVmlldzo6bGF5b3V0KCkKIHsKICAg
ICBpZiAocHJpbnRpbmcoKSkKLSAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX3dpZHRoOworICAg
ICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gbV93aWR0aDsKIAogICAgIGJv
b2wgcmVsYXlvdXRDaGlsZHJlbiA9ICFwcmludGluZygpICYmICghbV9mcmFtZVZpZXcgfHwgbV93
aWR0aCAhPSBtX2ZyYW1lVmlldy0+dmlzaWJsZVdpZHRoKCkgfHwgbV9oZWlnaHQgIT0gbV9mcmFt
ZVZpZXctPnZpc2libGVIZWlnaHQoKSk7CiAgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4pCiAgICAg
ICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSwgZmFsc2UpOwotCi0gICAgaWYgKHJlY2FsY01p
bk1heCgpKQotICAgICAgICByZWNhbGNNaW5NYXhXaWR0aHMoKTsKICAgICAKICAgICBpZiAobmVl
ZHNMYXlvdXQoKSkKICAgICAgICAgUmVuZGVyQmxvY2s6OmxheW91dCgpOwpJbmRleDogcmVuZGVy
aW5nL1JlbmRlcldpZGdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlcldpZGdl
dC5jcHAJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlcldpZGdldC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE1MCw3ICsxNTAsNiBAQCB2b2lkIFJlbmRlcldpZGdldDo6c2V0V2lk
Z2V0KFdpZGdldCogd2lkCiB2b2lkIFJlbmRlcldpZGdldDo6bGF5b3V0KCkKIHsKICAgICBBU1NF
UlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAg
ICBzZXROZWVkc0xheW91dChmYWxzZSk7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14169</attachid>
            <date>2007-04-24 23:51:09 -0700</date>
            <delta_ts>2007-04-25 00:40:07 -0700</delta_ts>
            <desc>round 2 of changes to reduce the patch size</desc>
            <filename>ReduceRound2Patch.txt</filename>
            <type>text/plain</type>
            <size>36059</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDIxMDgx
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODcgQEAKKzIwMDctMDQt
MjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gc2Vjb25kIHJvdW5kIG9mIHByZXBhcmF0aW9u
IGZvciBIeWF0dCdzICJsYXp5IG1pbk1heFdpZHRoIiBjaGFuZ2UKKyAgICAgICAgICBodHRwOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQzMQorCisgICAgICAgIFRoZXNlIGFy
ZSBzbWFsbCBjaGFuZ2VzIHRoYXQgYXJlIGVpdGhlciBzYWZlIHRvIGRvIGZpcnN0LCBvciB1bnJl
bGF0ZWQgdG8gdGhlIG1haW4KKyAgICAgICAgY2hhbmdlIGluIEh5YXR0J3MgcGF0Y2guCisKKyAg
ICAgICAgLSBQcmVhbGxvY2F0ZSA0IGVudHJpZXMgZWFjaCBpbiBtX2xheW91dFN0cnVjdCBhbmQg
bV9zcGFuQ2VsbHMgdG8gc2F2ZSBhbGxvY2F0aW9uCisgICAgICAgICAgaW4gQXV0b1RhYmxlTGF5
b3V0LgorICAgICAgICAtIEFkZCBhbiBlYXJseSBleGl0IHRvIFJlbmRlckZsb3c6OmRpcnR5TGlu
ZXNGcm9tQ2hhbmdlZENoaWxkLgorICAgICAgICAtIENoYW5nZSBJbmxpbmVCb3g6Omhhc1RleHRD
aGlsZHJlbigpIHRvIHVzZSBhIGJpdCBkaXJlY3RseSBhbmQgbmV2ZXIgYSB2aXJ0dWFsIGZ1bmN0
aW9uLgorICAgICAgICAtIFNhdmUgYSB2aXJ0dWFsIGZ1bmN0aW9uIGNhbGwgYnkgdXNpbmcgYSBs
b2NhbCBib29sIHZhcmlhYmxlIGZvciBpc1RhYmxlQ2VsbCgpLgorCisgICAgICAgIC0gRml4IGNv
bnRhaW5pbmdCbG9jaygpIHNvIGl0IHJldHVybnMgMCBmb3IgdGFibGUgY2VsbHMgd2l0aCBubyBw
YXJlbnQuCisKKyAgICAgICAgLSBDaGFuZ2UgYWxsIGNhbGxlcnMgd2hvIGFyZSBnZXR0aW5nIGF0
IGxheWVyKCkgYXMgYSBib29sZWFuIHRvIHVzZSBoYXNMYXllcigpLgorICAgICAgICAtIENoYW5n
ZSBpZiBzdGF0ZW1lbnRzIHRvIG1heCgpIGZ1bmN0aW9uIGNhbGxzIChvbmx5IHRoZSBvbmVzIEh5
YXR0IGhhZCBpbiBoaXMgcGF0Y2gpLgorICAgICAgICAtIFJlbW92ZSBzb21lIG9sZCBrZERlYnVn
IGNhbGxzLgorICAgICAgICAtIFR3ZWFrIGZvcm1hdHRpbmcgb2Ygc29tZSBjb2RlLgorICAgICAg
ICAtIEFkZCBjb25zdCBpbiBvbmUgcGxhY2UuCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
aHRtbC5jcHA6CisgICAgICAgIChLSlM6OkhUTUxFbGVtZW50RnVuY3Rpb246OmNhbGxBc0Z1bmN0
aW9uKToKKyAgICAgICAgKiBwYWdlL0V2ZW50SGFuZGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpFdmVudEhhbmRsZXI6OmV2ZW50TWF5U3RhcnREcmFnKToKKyAgICAgICAgKiBwYWdlL0ZyYW1l
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpjbGVhclRpbWVycyk6CisgICAgICAgICog
cmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdXRvVGFi
bGVMYXlvdXQ6OnJlY2FsY0NvbHVtbik6CisgICAgICAgICogcmVuZGVyaW5nL0F1dG9UYWJsZUxh
eW91dC5oOgorICAgICAgICAqIHJlbmRlcmluZy9JbmxpbmVCb3guaDoKKyAgICAgICAgKFdlYkNv
cmU6OklubGluZUJveDo6SW5saW5lQm94KToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUJveDo6
aGFzVGV4dENoaWxkcmVuKToKKyAgICAgICAgKiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludCk6CisgICAgICAg
ICogcmVuZGVyaW5nL0lubGluZUZsb3dCb3guaDoKKyAgICAgICAgKFdlYkNvcmU6OklubGluZUZs
b3dCb3g6OklubGluZUZsb3dCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cGFpbnRDaGlsZHJlbik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cGFpbnRGbG9hdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6OmZpbGxCbG9ja1NlbGVjdGlvbkdhcHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
QmxvY2s6Omluc2VydEZsb2F0aW5nT2JqZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpmbG9hdFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxvd2VzdFBv
c2l0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3NpdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGVmdG1vc3RQb3NpdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6YWRkT3ZlcmhhbmdpbmdGbG9hdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpoaXRUZXN0Q29udGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OklubGluZU1pbk1h
eEl0ZXJhdG9yOjpuZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OmdldEJvcmRlclBhZGRpbmdNYXJn
aW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKToK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckNvbnRhaW5lcjo6YXBwZW5kQ2hpbGROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckNvbnRhaW5lcjo6aW5zZXJ0Q2hpbGROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyRmxleGlibGVCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVC
b3g6OmNhbGNIb3Jpem9udGFsUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJG
bGV4aWJsZUJveDo6Y2FsY1ZlcnRpY2FsUHJlZldpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckZsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvdzo6ZGlydHlMaW5l
c0Zyb21DaGFuZ2VkQ2hpbGQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlVmlzaWJpbGl0eVN0YXR1cyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbik6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OmNvbnRhaW5pbmdCbG9jayk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
clRhYmxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlOjpwYWludCk6CisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZWhpbmRDZWxsKToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVSb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFi
bGVSb3c6Om5vZGVBdFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlUm93Ojpw
YWludCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246Om5vZGVBdFBvaW50KToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjp3cml0
ZSk6CisKIDIwMDctMDQtMjQgIFN0ZXZlIEZhbGtlbmJ1cmcgIDxzZmFsa2VuQGFwcGxlLmNvbT4K
IAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiwgT2xpdmVyLgpJbmRleDogYmluZGluZ3MvanMv
a2pzX2h0bWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJpbmRpbmdzL2pzL2tqc19odG1sLmNwcAkocmV2
aXNpb24gMjEwODApCisrKyBiaW5kaW5ncy9qcy9ranNfaHRtbC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMjcsMTMgKzExMjcsMTMgQEAgSlNWYWx1ZSAqSFRNTEVsZW1lbnRGdW5jdGlvbjo6Y2Fs
bEFzRnVuYwogICAgIH0KICAgICBlbHNlIGlmIChlbGVtZW50Lmhhc0xvY2FsTmFtZShtYXJxdWVl
VGFnKSkgewogICAgICAgICBpZiAoaWQgPT0gSlNIVE1MRWxlbWVudDo6TWFycXVlZVN0YXJ0ICYm
IGVsZW1lbnQucmVuZGVyZXIoKSAmJiAKLSAgICAgICAgICAgIGVsZW1lbnQucmVuZGVyZXIoKS0+
bGF5ZXIoKSAmJgorICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5oYXNMYXllcigpICYm
CiAgICAgICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKSkgewog
ICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXllcigpLT5tYXJxdWVlKCktPnN0YXJ0
KCk7CiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogICAgICAg
ICBpZiAoaWQgPT0gSlNIVE1MRWxlbWVudDo6TWFycXVlZVN0b3AgJiYgZWxlbWVudC5yZW5kZXJl
cigpICYmIAotICAgICAgICAgICAgZWxlbWVudC5yZW5kZXJlcigpLT5sYXllcigpICYmCisgICAg
ICAgICAgICBlbGVtZW50LnJlbmRlcmVyKCktPmhhc0xheWVyKCkgJiYKICAgICAgICAgICAgIGVs
ZW1lbnQucmVuZGVyZXIoKS0+bGF5ZXIoKS0+bWFycXVlZSgpKSB7CiAgICAgICAgICAgICBlbGVt
ZW50LnJlbmRlcmVyKCktPmxheWVyKCktPm1hcnF1ZWUoKS0+c3RvcCgpOwogICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CkluZGV4OiBwYWdlL0V2ZW50SGFuZGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcGFnZS9FdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHBhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYyLDcgKzM2Miw3IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpldmVudE1heVN0YXJ0RHJhZyhjb24KICAgICAvLyB0aGF0IGl0cyBsb2dp
YyBuZWVkcyB0byBzdGF5IGluIHN5bmMgd2l0aCBoYW5kbGVNb3VzZU1vdmVFdmVudCgpIGFuZCB0
aGUgd2F5IHdlIHNldE1vdXNlRG93bk1heVN0YXJ0RHJhZwogICAgIC8vIGluIGhhbmRsZU1vdXNl
UHJlc3NFdmVudAogICAgIAotICAgIGlmICghbV9mcmFtZS0+cmVuZGVyZXIoKSB8fCAhbV9mcmFt
ZS0+cmVuZGVyZXIoKS0+bGF5ZXIoKQorICAgIGlmICghbV9mcmFtZS0+cmVuZGVyZXIoKSB8fCAh
bV9mcmFtZS0+cmVuZGVyZXIoKS0+aGFzTGF5ZXIoKQogICAgICAgICB8fCBldmVudC5idXR0b24o
KSAhPSBMZWZ0QnV0dG9uIHx8IGV2ZW50LmNsaWNrQ291bnQoKSAhPSAxKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgCkluZGV4OiBwYWdlL0ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwYWdl
L0ZyYW1lLmNwcAkocmV2aXNpb24gMjEwODApCisrKyBwYWdlL0ZyYW1lLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxNSw3ICsxNDE1LDcgQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVW
aWV3ICp2aWV3KQogICAgICAgICB2aWV3LT51bnNjaGVkdWxlUmVsYXlvdXQoKTsKICAgICAgICAg
aWYgKHZpZXctPmZyYW1lKCkpIHsKICAgICAgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IHZp
ZXctPmZyYW1lKCktPmRvY3VtZW50KCk7Ci0gICAgICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9j
dW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCktPmxheWVyKCkpCisgICAg
ICAgICAgICBpZiAoZG9jdW1lbnQgJiYgZG9jdW1lbnQtPnJlbmRlcmVyKCkgJiYgZG9jdW1lbnQt
PnJlbmRlcmVyKCktPmhhc0xheWVyKCkpCiAgICAgICAgICAgICAgICAgZG9jdW1lbnQtPnJlbmRl
cmVyKCktPmxheWVyKCktPnN1c3BlbmRNYXJxdWVlcygpOwogICAgICAgICB9CiAgICAgfQpJbmRl
eDogcmVuZGVyaW5nL0F1dG9UYWJsZUxheW91dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L0F1dG9UYWJsZUxheW91dC5jcHAJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL0F1dG9U
YWJsZUxheW91dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDggKzc4LDcgQEAgdm9pZCBBdXRv
VGFibGVMYXlvdXQ6OnJlY2FsY0NvbHVtbihpbnQgZQogICAgICAgICAgICAgICAgICAgICBsLm1h
eFdpZHRoID0gbWF4KGwubWF4V2lkdGgsIDEpOwogICAgICAgICAgICAgICAgICAgICBpZiAoY2Vs
bC0+cHJlZldpZHRoc0RpcnR5KCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5jYWxj
UHJlZldpZHRocygpOwotICAgICAgICAgICAgICAgICAgICBpZiAoY2VsbC0+bWluUHJlZldpZHRo
KCkgPiBsLm1pbldpZHRoKQotICAgICAgICAgICAgICAgICAgICAgICAgbC5taW5XaWR0aCA9IGNl
bGwtPm1pblByZWZXaWR0aCgpOworICAgICAgICAgICAgICAgICAgICBsLm1pbldpZHRoID0gbWF4
KGNlbGwtPm1pblByZWZXaWR0aCgpLCBsLm1pbldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
aWYgKGNlbGwtPm1heFByZWZXaWR0aCgpID4gbC5tYXhXaWR0aCkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgbC5tYXhXaWR0aCA9IGNlbGwtPm1heFByZWZXaWR0aCgpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgbWF4Q29udHJpYnV0b3IgPSBjZWxsOwpJbmRleDogcmVuZGVyaW5nL0F1dG9U
YWJsZUxheW91dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9BdXRvVGFibGVMYXlvdXQuaAko
cmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvQXV0b1RhYmxlTGF5b3V0LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDggKzcyLDggQEAgcHJvdGVjdGVkOgogICAgICAgICBpbnQgY2FsY1dpZHRo
OwogICAgIH07CiAKLSAgICBWZWN0b3I8TGF5b3V0PiBtX2xheW91dFN0cnVjdDsKLSAgICBWZWN0
b3I8UmVuZGVyVGFibGVDZWxsKj4gbV9zcGFuQ2VsbHM7CisgICAgVmVjdG9yPExheW91dCwgND4g
bV9sYXlvdXRTdHJ1Y3Q7CisgICAgVmVjdG9yPFJlbmRlclRhYmxlQ2VsbCosIDQ+IG1fc3BhbkNl
bGxzOwogICAgIGJvb2wgbV9oYXNQZXJjZW50IDogMTsKICAgICBtdXRhYmxlIGJvb2wgbV9wZXJj
ZW50YWdlc0RpcnR5IDogMTsKICAgICBtdXRhYmxlIGJvb2wgbV9lZmZXaWR0aERpcnR5IDogMTsK
SW5kZXg6IHJlbmRlcmluZy9JbmxpbmVCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5s
aW5lQm94LmgJKHJldmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL0lubGluZUJveC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01Miw3ICs1Miw3IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2V4dHJhY3Rl
ZChmYWxzZSkKICAgICAgICAgLCBtX2luY2x1ZGVMZWZ0RWRnZShmYWxzZSkKICAgICAgICAgLCBt
X2luY2x1ZGVSaWdodEVkZ2UoZmFsc2UpCi0gICAgICAgICwgbV9oYXNUZXh0Q2hpbGRyZW4oZmFs
c2UpCisgICAgICAgICwgbV9oYXNUZXh0Q2hpbGRyZW4odHJ1ZSkKICAgICAgICAgLCBtX2VuZHNX
aXRoQnJlYWsoZmFsc2UpCiAgICAgICAgICwgbV9oYXNTZWxlY3RlZENoaWxkcmVuKGZhbHNlKQog
ICAgICAgICAsIG1faGFzRWxsaXBzaXNCb3goZmFsc2UpCkBAIC04Myw3ICs4Myw3IEBAIHB1Ymxp
YzoKICAgICAgICAgLCBtX2V4dHJhY3RlZChleHRyYWN0ZWQpCiAgICAgICAgICwgbV9pbmNsdWRl
TGVmdEVkZ2UoZmFsc2UpCiAgICAgICAgICwgbV9pbmNsdWRlUmlnaHRFZGdlKGZhbHNlKQotICAg
ICAgICAsIG1faGFzVGV4dENoaWxkcmVuKGZhbHNlKQorICAgICAgICAsIG1faGFzVGV4dENoaWxk
cmVuKHRydWUpCiAgICAgICAgICwgbV9lbmRzV2l0aEJyZWFrKGZhbHNlKQogICAgICAgICAsIG1f
aGFzU2VsZWN0ZWRDaGlsZHJlbihmYWxzZSkgICAKICAgICAgICAgLCBtX2hhc0VsbGlwc2lzQm94
KGZhbHNlKQpAQCAtMTg1LDcgKzE4NSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldEJhc2VsaW5l
KGludCBiKSB7IG1fYmFzZWxpbmUgPSBiOyB9CiAgICAgaW50IGJhc2VsaW5lKCkgY29uc3QgeyBy
ZXR1cm4gbV9iYXNlbGluZTsgfQogCi0gICAgdmlydHVhbCBib29sIGhhc1RleHRDaGlsZHJlbigp
IHsgcmV0dXJuIHRydWU7IH0KKyAgICBib29sIGhhc1RleHRDaGlsZHJlbigpIGNvbnN0IHsgcmV0
dXJuIG1faGFzVGV4dENoaWxkcmVuOyB9CiAKICAgICB2aXJ0dWFsIGludCB0b3BPdmVyZmxvdygp
IHsgcmV0dXJuIHlQb3MoKTsgfQogICAgIHZpcnR1YWwgaW50IGJvdHRvbU92ZXJmbG93KCkgeyBy
ZXR1cm4geVBvcygpICsgaGVpZ2h0KCk7IH0KSW5kZXg6IHJlbmRlcmluZy9JbmxpbmVGbG93Qm94
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5jcHAJKHJldmlzaW9u
IDIxMDgwKQorKysgcmVuZGVyaW5nL0lubGluZUZsb3dCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzIsNyArNTMyLDcgQEAgYm9vbCBJbmxpbmVGbG93Qm94Ojpub2RlQXRQb2ludChjb25zdCBI
aQogewogICAgIC8vIENoZWNrIGNoaWxkcmVuIGZpcnN0LgogICAgIGZvciAoSW5saW5lQm94KiBj
dXJyID0gbGFzdENoaWxkKCk7IGN1cnI7IGN1cnIgPSBjdXJyLT5wcmV2T25MaW5lKCkpIHsKLSAg
ICAgICAgaWYgKCFjdXJyLT5vYmplY3QoKS0+bGF5ZXIoKSAmJiBjdXJyLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSkpIHsKKyAgICAgICAgaWYgKCFjdXJyLT5vYmpl
Y3QoKS0+aGFzTGF5ZXIoKSAmJiBjdXJyLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgs
IHksIHR4LCB0eSkpIHsKICAgICAgICAgICAgIG9iamVjdCgpLT51cGRhdGVIaXRUZXN0UmVzdWx0
KHJlc3VsdCwgSW50UG9pbnQoeCAtIHR4LCB5IC0gdHkpKTsKICAgICAgICAgICAgIHJldHVybiB0
cnVlOwogICAgICAgICB9CkluZGV4OiByZW5kZXJpbmcvSW5saW5lRmxvd0JveC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVGbG93Qm94LmgJKHJldmlzaW9uIDIxMDgwKQorKysgcmVu
ZGVyaW5nL0lubGluZUZsb3dCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBw
dWJsaWM6CiAgICAgICAgICwgbV9sYXN0Q2hpbGQoMCkKICAgICAgICAgLCBtX21heEhvcml6b250
YWxWaXN1YWxPdmVyZmxvdygwKQogICAgIHsKKyAgICAgICAgbV9oYXNUZXh0Q2hpbGRyZW4gPSBm
YWxzZTsKICAgICB9CiAKICAgICBSZW5kZXJGbG93KiBmbG93T2JqZWN0KCk7CkBAIC05OCw4ICs5
OSw2IEBAIHB1YmxpYzoKICAgICAgICAgbV9pbmNsdWRlUmlnaHRFZGdlID0gaW5jbHVkZVJpZ2h0
OwogICAgIH0KIAotICAgIHZpcnR1YWwgYm9vbCBoYXNUZXh0Q2hpbGRyZW4oKSB7IHJldHVybiBt
X2hhc1RleHRDaGlsZHJlbjsgfQotCiAgICAgLy8gSGVscGVyIGZ1bmN0aW9ucyB1c2VkIGR1cmlu
ZyBsaW5lIGNvbnN0cnVjdGlvbiBhbmQgcGxhY2VtZW50LgogICAgIHZvaWQgZGV0ZXJtaW5lU3Bh
Y2luZ0ZvckZsb3dCb3hlcyhib29sIGxhc3RMaW5lLCBSZW5kZXJPYmplY3QqIGVuZE9iamVjdCk7
CiAgICAgaW50IGdldEZsb3dTcGFjaW5nV2lkdGgoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkocmV2aXNp
b24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01MzQsNyArNTM0LDggQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eQogICAgIC8vCiAgICAgLy8gU3RhcnQgb3V0IGJ5IHNldHRpbmcgb3VyIG1hcmdpbiB2YWx1ZXMg
dG8gb3VyIGN1cnJlbnQgbWFyZ2lucy4gIFRhYmxlIGNlbGxzIGhhdmUKICAgICAvLyBubyBtYXJn
aW5zLCBzbyB3ZSBkb24ndCBmaWxsIGluIHRoZSB2YWx1ZXMgZm9yIHRhYmxlIGNlbGxzLgotICAg
IGlmICghaXNUYWJsZUNlbGwoKSkgeworICAgIGJvb2wgaXNDZWxsID0gaXNUYWJsZUNlbGwoKTsK
KyAgICBpZiAoIWlzQ2VsbCkgewogICAgICAgICBpbml0TWF4TWFyZ2luVmFsdWVzKCk7CiAKICAg
ICAgICAgbV90b3BNYXJnaW5RdWlyayA9IHN0eWxlKCktPm1hcmdpblRvcCgpLnF1aXJrKCk7CkBA
IC01OTQsNyArNTk1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2soYm9vbCByZWxh
eQogICAgICAgICBtX2hlaWdodCArPSBib3JkZXJCb3R0b20oKSArIHBhZGRpbmdCb3R0b20oKTsK
ICAgICB9CiAKLSAgICBpZiAoKGlzVGFibGVDZWxsKCkgfHwgaXNJbmxpbmUoKSB8fCBpc0Zsb2F0
aW5nT3JQb3NpdGlvbmVkKCkgfHwgaXNSb290KCkpICYmICFoYXNPdmVyZmxvd0NsaXAoKSAmJiAh
aGFzQ29udHJvbENsaXAoKSkKKyAgICBpZiAoKGlzQ2VsbCB8fCBpc0lubGluZSgpIHx8IGlzRmxv
YXRpbmdPclBvc2l0aW9uZWQoKSB8fCBpc1Jvb3QoKSkgJiYgIWhhc092ZXJmbG93Q2xpcCgpICYm
ICFoYXNDb250cm9sQ2xpcCgpKQogICAgICAgICBhZGRWaXN1YWxPdmVyZmxvdyhmbG9hdFJlY3Qo
KSk7CiAKICAgICBsYXlvdXRQb3NpdGlvbmVkT2JqZWN0cyhyZWxheW91dENoaWxkcmVuIHx8IGlz
Um9vdCgpKTsKQEAgLTEyNzksNyArMTI4MCw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OnJlcGFpbnRP
dmVyaGFuZ2luZ0Zsb2EKICAgICAgICAgICAgIC8vIE9ubHkgcmVwYWludCB0aGUgb2JqZWN0IGlm
IGl0IGlzIG92ZXJoYW5naW5nLCBpcyBub3QgaW4gaXRzIG93biBsYXllciwgYW5kCiAgICAgICAg
ICAgICAvLyBpcyBvdXIgcmVzcG9uc2liaWxpdHkgdG8gcGFpbnQgKG5vUGFpbnQgaXNuJ3Qgc2V0
KS4gV2hlbiBwYWludEFsbERlc2NlbmRhbnRzIGlzIHRydWUsIHRoZSBsYXR0ZXIKICAgICAgICAg
ICAgIC8vIGNvbmRpdGlvbiBpcyByZXBsYWNlZCB3aXRoIGJlaW5nIGEgZGVzY2VuZGFudCBvZiB1
cy4KLSAgICAgICAgICAgIGlmIChyLT5lbmRZID4gbV9oZWlnaHQgJiYgKHBhaW50QWxsRGVzY2Vu
ZGFudHMgJiYgci0+bm9kZS0+aXNEZXNjZW5kYW50T2YodGhpcykgfHwgIXItPm5vUGFpbnQpICYm
ICFyLT5ub2RlLT5sYXllcigpKSB7ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKHIt
PmVuZFkgPiBtX2hlaWdodCAmJiAocGFpbnRBbGxEZXNjZW5kYW50cyAmJiByLT5ub2RlLT5pc0Rl
c2NlbmRhbnRPZih0aGlzKSB8fCAhci0+bm9QYWludCkgJiYgIXItPm5vZGUtPmhhc0xheWVyKCkp
IHsgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgci0+bm9kZS0+cmVwYWludCgpOwog
ICAgICAgICAgICAgICAgIHItPm5vZGUtPnJlcGFpbnRPdmVyaGFuZ2luZ0Zsb2F0cygpOwogICAg
ICAgICAgICAgfQpAQCAtMTQ0OSw3ICsxNDUwLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRD
aGlsZHJlbihQYWludEluZgogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAg
ICAgaWYgKCFjaGlsZC0+bGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSkKKyAgICAgICAg
aWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSkKICAgICAgICAg
ICAgIGNoaWxkLT5wYWludChpbmZvLCB0eCwgdHkpOwogCiAgICAgICAgIC8vIENoZWNrIGZvciBw
YWdlLWJyZWFrLWFmdGVyOiBhbHdheXMsIGFuZCBpZiBpdCdzIHNldCwgYnJlYWsgYW5kIGJhaWwu
CkBAIC0xNTQ4LDcgKzE1NDksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludEZsb2F0cyhQYWlu
dEluZm8mCiAgICAgRGVwcmVjYXRlZFB0ckxpc3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQo
Km1fZmxvYXRpbmdPYmplY3RzKTsKICAgICBmb3IgKDsgKHIgPSBpdC5jdXJyZW50KCkpOyArK2l0
KSB7CiAgICAgICAgIC8vIE9ubHkgcGFpbnQgdGhlIG9iamVjdCBpZiBvdXIgbm9QYWludCBmbGFn
IGlzbid0IHNldC4KLSAgICAgICAgaWYgKCFyLT5ub1BhaW50ICYmICFyLT5ub2RlLT5sYXllcigp
KSB7CisgICAgICAgIGlmICghci0+bm9QYWludCAmJiAhci0+bm9kZS0+aGFzTGF5ZXIoKSkgewog
ICAgICAgICAgICAgUGFpbnRJbmZvIGN1cnJlbnRQYWludEluZm8ocGFpbnRJbmZvKTsKICAgICAg
ICAgICAgIGN1cnJlbnRQYWludEluZm8ucGhhc2UgPSBwYWludFNlbGVjdGlvbiA/IFBhaW50UGhh
c2VTZWxlY3Rpb24gOiBQYWludFBoYXNlQmxvY2tCYWNrZ3JvdW5kOwogICAgICAgICAgICAgaW50
IGN1cnJlbnRUWCA9IHR4ICsgci0+bGVmdCAtIHItPm5vZGUtPnhQb3MoKSArIHItPm5vZGUtPm1h
cmdpbkxlZnQoKTsKQEAgLTE3NjUsNyArMTc2Niw3IEBAIEdhcFJlY3RzIFJlbmRlckJsb2NrOjpm
aWxsQmxvY2tTZWxlY3Rpb24KICAgICAgICAgaWYgKGN1cnItPmlzRmxvYXRpbmdPclBvc2l0aW9u
ZWQoKSkKICAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBXZSBtdXN0IGJlIGEgbm9ybWFsIGZsb3cg
b2JqZWN0IGluIG9yZGVyIHRvIGV2ZW4gYmUgY29uc2lkZXJlZC4KIAotICAgICAgICBpZiAoY3Vy
ci0+aXNSZWxQb3NpdGlvbmVkKCkgJiYgY3Vyci0+bGF5ZXIoKSkgeworICAgICAgICBpZiAoY3Vy
ci0+aXNSZWxQb3NpdGlvbmVkKCkgJiYgY3Vyci0+aGFzTGF5ZXIoKSkgewogICAgICAgICAgICAg
Ly8gSWYgdGhlIHJlbHBvc2l0aW9uIG9mZnNldCBpcyBhbnl0aGluZyBvdGhlciB0aGFuIDAsIHRo
ZW4gdHJlYXQgdGhpcyBqdXN0IGxpa2UgYW4gYWJzb2x1dGUgcG9zaXRpb25lZCBlbGVtZW50Lgog
ICAgICAgICAgICAgLy8gSnVzdCBkaXNyZWdhcmQgaXQgY29tcGxldGVseS4KICAgICAgICAgICAg
IGludCB4ID0gMDsKQEAgLTIwMDYsNyArMjAwNyw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6Omluc2Vy
dEZsb2F0aW5nT2JqZWN0KFIKICAgICAgICAgbmV3T2JqLT5zdGFydFkgPSAtMTsKICAgICAgICAg
bmV3T2JqLT5lbmRZID0gLTE7CiAgICAgICAgIG5ld09iai0+d2lkdGggPSBvLT53aWR0aCgpICsg
by0+bWFyZ2luTGVmdCgpICsgby0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAgbmV3T2JqLT5ub1Bh
aW50ID0gby0+bGF5ZXIoKTsgLy8gSWYgYSBsYXllciBleGlzdHMsIHRoZSBmbG9hdCB3aWxsIHBh
aW50IGl0c2VsZi4gIE90aGVyd2lzZSBzb21lb25lIGVsc2Ugd2lsbC4KKyAgICAgICAgbmV3T2Jq
LT5ub1BhaW50ID0gby0+aGFzTGF5ZXIoKTsgLy8gSWYgYSBsYXllciBleGlzdHMsIHRoZSBmbG9h
dCB3aWxsIHBhaW50IGl0c2VsZi4gIE90aGVyd2lzZSBzb21lb25lIGVsc2Ugd2lsbC4KICAgICB9
CiAgICAgZWxzZSB7CiAgICAgICAgIC8vIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgYXMgaW5z
ZXJ0RmxvYXRpbmdPYmplY3QoKSBzaG91bGQgb25seSBldmVyIGJlIGNhbGxlZCB3aXRoIGZsb2F0
aW5nCkBAIC0yMjYwLDcgKzIyNjEsNyBAQCBJbnRSZWN0IFJlbmRlckJsb2NrOjpmbG9hdFJlY3Qo
KSBjb25zdAogICAgIEZsb2F0aW5nT2JqZWN0KiByOwogICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRl
cmF0b3I8RmxvYXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7CiAgICAgZm9yICg7
IChyID0gaXQuY3VycmVudCgpKTsgKytpdCkgewotICAgICAgICBpZiAoIXItPm5vUGFpbnQgJiYg
IXItPm5vZGUtPmxheWVyKCkpIHsKKyAgICAgICAgaWYgKCFyLT5ub1BhaW50ICYmICFyLT5ub2Rl
LT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICBJbnRSZWN0IGNoaWxkUmVjdCA9IHItPm5vZGUt
Pm92ZXJmbG93UmVjdChmYWxzZSk7CiAgICAgICAgICAgICBjaGlsZFJlY3QubW92ZShyLT5sZWZ0
ICsgci0+bm9kZS0+bWFyZ2luTGVmdCgpLCByLT5zdGFydFkgKyByLT5ub2RlLT5tYXJnaW5Ub3Ao
KSk7CiAgICAgICAgICAgICByZXN1bHQudW5pdGUoY2hpbGRSZWN0KTsKQEAgLTIzMDMsNyArMjMw
NCw3IEBAIGludCBSZW5kZXJCbG9jazo6bG93ZXN0UG9zaXRpb24oYm9vbCBpbmMKICAgICAgICAg
RmxvYXRpbmdPYmplY3QqIHI7CiAgICAgICAgIERlcHJlY2F0ZWRQdHJMaXN0SXRlcmF0b3I8Rmxv
YXRpbmdPYmplY3Q+IGl0KCptX2Zsb2F0aW5nT2JqZWN0cyk7CiAgICAgICAgIGZvciAoIDsgKHIg
PSBpdC5jdXJyZW50KCkpOyArK2l0ICkgewotICAgICAgICAgICAgaWYgKCFyLT5ub1BhaW50IHx8
IHItPm5vZGUtPmxheWVyKCkpIHsKKyAgICAgICAgICAgIGlmICghci0+bm9QYWludCB8fCByLT5u
b2RlLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICAgICAgaW50IGxwID0gci0+c3RhcnRZICsg
ci0+bm9kZS0+bWFyZ2luVG9wKCkgKyByLT5ub2RlLT5sb3dlc3RQb3NpdGlvbihmYWxzZSk7CiAg
ICAgICAgICAgICAgICAgYm90dG9tID0gbWF4KGJvdHRvbSwgbHApOwogICAgICAgICAgICAgfQpA
QCAtMjM1Miw3ICsyMzUzLDcgQEAgaW50IFJlbmRlckJsb2NrOjpyaWdodG1vc3RQb3NpdGlvbihi
b29sIAogICAgICAgICBGbG9hdGluZ09iamVjdCogcjsKICAgICAgICAgRGVwcmVjYXRlZFB0ckxp
c3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAg
ICAgZm9yICggOyAociA9IGl0LmN1cnJlbnQoKSk7ICsraXQgKSB7Ci0gICAgICAgICAgICBpZiAo
IXItPm5vUGFpbnQgfHwgci0+bm9kZS0+bGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKCFyLT5u
b1BhaW50IHx8IHItPm5vZGUtPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgICAgICBpbnQgcnAg
PSByLT5sZWZ0ICsgci0+bm9kZS0+bWFyZ2luTGVmdCgpICsgci0+bm9kZS0+cmlnaHRtb3N0UG9z
aXRpb24oZmFsc2UpOwogICAgICAgICAgICAgICAgIHJpZ2h0ID0gbWF4KHJpZ2h0LCBycCk7CiAg
ICAgICAgICAgICB9CkBAIC0yNDA2LDcgKzI0MDcsNyBAQCBpbnQgUmVuZGVyQmxvY2s6OmxlZnRt
b3N0UG9zaXRpb24oYm9vbCBpCiAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiByOwogICAgICAgICBE
ZXByZWNhdGVkUHRyTGlzdEl0ZXJhdG9yPEZsb2F0aW5nT2JqZWN0PiBpdCgqbV9mbG9hdGluZ09i
amVjdHMpOwogICAgICAgICBmb3IgKCA7IChyID0gaXQuY3VycmVudCgpKTsgKytpdCApIHsKLSAg
ICAgICAgICAgIGlmICghci0+bm9QYWludCB8fCByLT5ub2RlLT5sYXllcigpKSB7CisgICAgICAg
ICAgICBpZiAoIXItPm5vUGFpbnQgfHwgci0+bm9kZS0+aGFzTGF5ZXIoKSkgewogICAgICAgICAg
ICAgICAgIGludCBscCA9IHItPmxlZnQgKyByLT5ub2RlLT5tYXJnaW5MZWZ0KCkgKyByLT5ub2Rl
LT5sZWZ0bW9zdFBvc2l0aW9uKGZhbHNlKTsKICAgICAgICAgICAgICAgICBsZWZ0ID0gbWluKGxl
ZnQsIGxwKTsKICAgICAgICAgICAgIH0KQEAgLTI1MzEsNyArMjUzMiw3IEBAIHZvaWQgUmVuZGVy
QmxvY2s6OmFkZE92ZXJoYW5naW5nRmxvYXRzKFIKICAgICAgICAgICAgICAgICBtX2Zsb2F0aW5n
T2JqZWN0cy0+YXBwZW5kKGZsb2F0aW5nT2JqKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBpZiAoIXItPm5vUGFpbnQgJiYgIXItPm5vZGUtPmxheWVyKCkpIHsKKyAgICAgICAg
aWYgKCFyLT5ub1BhaW50ICYmICFyLT5ub2RlLT5oYXNMYXllcigpKSB7CiAgICAgICAgICAgICBJ
bnRSZWN0IGZsb2F0T3ZlcmZsb3dSZWN0ID0gci0+bm9kZS0+b3ZlcmZsb3dSZWN0KGZhbHNlKTsK
ICAgICAgICAgICAgIGZsb2F0T3ZlcmZsb3dSZWN0Lm1vdmUoci0+bGVmdCArIHItPm5vZGUtPm1h
cmdpbkxlZnQoKSwgci0+c3RhcnRZICsgci0+bm9kZS0+bWFyZ2luVG9wKCkpOwogICAgICAgICAg
ICAgZmxvYXRzT3ZlcmZsb3dSZWN0LnVuaXRlKGZsb2F0T3ZlcmZsb3dSZWN0KTsKQEAgLTI3MjYs
NyArMjcyNyw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6Om5vZGVBdFBvaW50KGNvbnN0IEhpdFQKICAg
ICAgICAgICAgIEZsb2F0aW5nT2JqZWN0KiBvOwogICAgICAgICAgICAgRGVwcmVjYXRlZFB0ckxp
c3RJdGVyYXRvcjxGbG9hdGluZ09iamVjdD4gaXQoKm1fZmxvYXRpbmdPYmplY3RzKTsKICAgICAg
ICAgICAgIGZvciAoaXQudG9MYXN0KCk7IChvID0gaXQuY3VycmVudCgpKTsgLS1pdCkgewotICAg
ICAgICAgICAgICAgIGlmICghby0+bm9QYWludCAmJiAhby0+bm9kZS0+bGF5ZXIoKSkgeworICAg
ICAgICAgICAgICAgIGlmICghby0+bm9QYWludCAmJiAhby0+bm9kZS0+aGFzTGF5ZXIoKSkgewog
ICAgICAgICAgICAgICAgICAgICBpbnQgeG9mZnNldCA9IHNjcm9sbGVkWCArIG8tPmxlZnQgKyBv
LT5ub2RlLT5tYXJnaW5MZWZ0KCkgLSBvLT5ub2RlLT54UG9zKCk7CiAgICAgICAgICAgICAgICAg
ICAgIGludCB5b2Zmc2V0ID0gIHNjcm9sbGVkWSArIG8tPnN0YXJ0WSArIG8tPm5vZGUtPm1hcmdp
blRvcCgpIC0gby0+bm9kZS0+eVBvcygpOwogICAgICAgICAgICAgICAgICAgICBpZiAoby0+bm9k
ZS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIF94LCBfeSwgeG9mZnNldCwgeW9mZnNldCkpIHsK
QEAgLTI4MDEsNyArMjgwMiw3IEBAIGJvb2wgUmVuZGVyQmxvY2s6OmhpdFRlc3RDb250ZW50cyhj
b25zdCAKICAgICAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gbGFzdENoaWxkKCk7IGNo
aWxkOyBjaGlsZCA9IGNoaWxkLT5wcmV2aW91c1NpYmxpbmcoKSkgewogICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGhhdmUgdG8gc2tpcCBvdmVyIGlubGluZSBmbG93cywgc2luY2UgdGhleSBjYW4g
c2hvdyB1cCBpbnNpZGUgUmVuZGVyVGFibGVzIGF0IHRoZSBtb21lbnQgKGEgZGVtb3RlZCBpbmxp
bmUgPGZvcm0+IGZvciBleGFtcGxlKS4gIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEKICAgICAgICAg
ICAgIC8vIHRhYmxlLXNwZWNpZmljIGhpdC10ZXN0IG1ldGhvZCAod2hpY2ggd2Ugc2hvdWxkIGRv
IGZvciBwZXJmb3JtYW5jZSByZWFzb25zIGFueXdheSksIHRoZW4gd2UgY2FuIHJlbW92ZSB0aGlz
IGNoZWNrLgotICAgICAgICAgICAgaWYgKCFjaGlsZC0+bGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxv
YXRpbmcoKSAmJiAhY2hpbGQtPmlzSW5saW5lRmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChy
ZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgY2hpbGRIaXRUZXN0KSkgeworICAgICAgICAg
ICAgaWYgKCFjaGlsZC0+aGFzTGF5ZXIoKSAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiAhY2hp
bGQtPmlzSW5saW5lRmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQs
IHgsIHksIHR4LCB0eSwgY2hpbGRIaXRUZXN0KSkgewogICAgICAgICAgICAgICAgIHVwZGF0ZUhp
dFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludCh4IC0gdHgsIHkgLSB0eSkpOwogICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQpAQCAtMzI1MCwxMCArMzI1MSw2IEBA
IHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCkKIHsKICAgICBBU1NFUlQocHJlZldp
ZHRoc0RpcnR5KCkpOwogCi0jaWZkZWYgREVCVUdfTEFZT1VUCi0gICAga2REZWJ1ZyggNjA0MCAp
IDw8IHJlbmRlck5hbWUoKSA8PCAiKFJlbmRlckJsb2NrKTo6Y2FsY1ByZWZXaWR0aHMoKSB0aGlz
PSIgPDwgdGhpcyA8PCBlbmRsOwotI2VuZGlmCi0KICAgICBpZiAoIWlzVGFibGVDZWxsKCkgJiYg
c3R5bGUoKS0+d2lkdGgoKS5pc0ZpeGVkKCkgJiYgc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpID4g
MCkKICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IGNhbGNDb250ZW50
Qm94V2lkdGgoc3R5bGUoKS0+d2lkdGgoKS52YWx1ZSgpKTsKICAgICBlbHNlIHsKQEAgLTMyNjUs
NyArMzI2Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCkKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgY2FsY0Jsb2NrUHJlZldpZHRocygpOwogCi0gICAgICAgIGlmKG1f
bWF4UHJlZldpZHRoIDwgbV9taW5QcmVmV2lkdGgpIG1fbWF4UHJlZldpZHRoID0gbV9taW5QcmVm
V2lkdGg7CisgICAgICAgIG1fbWF4UHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCBtX21h
eFByZWZXaWR0aCk7CiAKICAgICAgICAgaWYgKCFzdHlsZSgpLT5hdXRvV3JhcCgpICYmIGNoaWxk
cmVuSW5saW5lKCkpIHsKICAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lk
dGg7CkBAIC0zMjk5LDggKzMyOTYsNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjUHJlZldpZHRo
cygpCiAgICAgbV9tYXhQcmVmV2lkdGggKz0gdG9BZGQ7CiAKICAgICBzZXRQcmVmV2lkdGhzRGly
dHkoZmFsc2UpOwotCi0gICAgLy9rZERlYnVnKCA2MDQwICkgPDwgIlRleHQ6OmNhbGNQcmVmV2lk
dGhzKCIgPDwgdGhpcyA8PCAiKTogbWluID0gIiA8PCBtX21pblByZWZXaWR0aCA8PCAiIG1heCA9
ICIgPDwgbV9tYXhQcmVmV2lkdGggPDwgZW5kbDsKIH0KIAogc3RydWN0IElubGluZU1pbk1heEl0
ZXJhdG9yCkBAIC0zMzI4LDkgKzMzMjMsNyBAQCBSZW5kZXJPYmplY3QqIElubGluZU1pbk1heEl0
ZXJhdG9yOjpuZXh0CiAgICAgUmVuZGVyT2JqZWN0KiByZXN1bHQgPSAwOwogICAgIGJvb2wgb2xk
RW5kT2ZJbmxpbmUgPSBlbmRPZklubGluZTsKICAgICBlbmRPZklubGluZSA9IGZhbHNlOwotICAg
IHdoaWxlIChjdXJyZW50ICE9IDAgfHwgKGN1cnJlbnQgPT0gcGFyZW50KSkKLSAgICB7Ci0gICAg
ICAgIC8va2REZWJ1ZyggNjA0MCApIDw8ICJjdXJyZW50ID0gIiA8PCBjdXJyZW50IDw8IGVuZGw7
CisgICAgd2hpbGUgKGN1cnJlbnQgfHwgY3VycmVudCA9PSBwYXJlbnQpIHsKICAgICAgICAgaWYg
KCFvbGRFbmRPZklubGluZSAmJgogICAgICAgICAgICAgKGN1cnJlbnQgPT0gcGFyZW50IHx8CiAg
ICAgICAgICAgICAgKCFjdXJyZW50LT5pc0Zsb2F0aW5nKCkgJiYgIWN1cnJlbnQtPmlzUmVwbGFj
ZWQoKSAmJiAhY3VycmVudC0+aXNQb3NpdGlvbmVkKCkpKSkKQEAgLTMzNTUsMTIgKzMzNDgsMTEg
QEAgUmVuZGVyT2JqZWN0KiBJbmxpbmVNaW5NYXhJdGVyYXRvcjo6bmV4dAogICAgICAgICAgICAg
fQogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCFyZXN1bHQpIGJyZWFrOwotCi0gICAgICAgIGlm
ICghcmVzdWx0LT5pc1Bvc2l0aW9uZWQoKSAmJiAocmVzdWx0LT5pc1RleHQoKSB8fCByZXN1bHQt
PmlzQlIoKSB8fAotICAgICAgICAgICAgcmVzdWx0LT5pc0Zsb2F0aW5nKCkgfHwgcmVzdWx0LT5p
c1JlcGxhY2VkKCkgfHwKLSAgICAgICAgICAgIHJlc3VsdC0+aXNJbmxpbmVGbG93KCkpKQorICAg
ICAgICBpZiAoIXJlc3VsdCkKICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICghcmVz
dWx0LT5pc1Bvc2l0aW9uZWQoKSAmJiAocmVzdWx0LT5pc1RleHQoKSB8fCByZXN1bHQtPmlzRmxv
YXRpbmcoKSB8fCByZXN1bHQtPmlzUmVwbGFjZWQoKSB8fCByZXN1bHQtPmlzSW5saW5lRmxvdygp
KSkKKyAgICAgICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgICAgIGN1cnJlbnQgPSByZXN1
bHQ7CiAgICAgICAgIHJlc3VsdCA9IDA7CkBAIC0zMzc4LDcgKzMzNzAsNyBAQCBzdGF0aWMgaW50
IGdldEJQTVdpZHRoKGludCBjaGlsZFZhbHVlLCBMCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRp
YyBpbnQgZ2V0Qm9yZGVyUGFkZGluZ01hcmdpbihSZW5kZXJPYmplY3QqIGNoaWxkLCBib29sIGVu
ZE9mSW5saW5lKQorc3RhdGljIGludCBnZXRCb3JkZXJQYWRkaW5nTWFyZ2luKGNvbnN0IFJlbmRl
ck9iamVjdCogY2hpbGQsIGJvb2wgZW5kT2ZJbmxpbmUpCiB7CiAgICAgUmVuZGVyU3R5bGUqIGNz
dHlsZSA9IGNoaWxkLT5zdHlsZSgpOwogICAgIGludCByZXN1bHQgPSAwOwpAQCAtMzQzMyw4ICsz
NDI1LDggQEAgc3RhdGljIGJvb2wgc2hvdWxkR3Jvd1RhYmxlQ2VsbEZvckltYWdlKAogCiB2b2lk
IFJlbmRlckJsb2NrOjpjYWxjSW5saW5lUHJlZldpZHRocygpCiB7Ci0gICAgaW50IGlubGluZU1h
eD0wOwotICAgIGludCBpbmxpbmVNaW49MDsKKyAgICBpbnQgaW5saW5lTWF4ID0gMDsKKyAgICBp
bnQgaW5saW5lTWluID0gMDsKIAogICAgIGludCBjdyA9IGNvbnRhaW5pbmdCbG9jaygpLT5jb250
ZW50V2lkdGgoKTsKIApAQCAtMzU1MSw4ICszNTQzLDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2Fs
Y0lubGluZVByZWZXaWR0aHMoKQogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGJv
b2wgZ3Jvd0ZvclByZXZpb3VzID0gc2hvdWxkR3Jvd1RhYmxlQ2VsbEZvckltYWdlKHRoaXMsIGNo
aWxkLCBwcmV2aW91c0xlYWYpOwogICAgICAgICAgICAgICAgIGlmICghZ3Jvd0ZvclByZXZpb3Vz
ICYmIChhdXRvV3JhcCB8fCBvbGRBdXRvV3JhcCkgfHwgY2xlYXJQcmV2aW91c0Zsb2F0KSB7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChtX21pblByZWZXaWR0aCA8IGlubGluZU1pbikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbWluUHJlZldpZHRoID0gaW5saW5lTWluOworICAgICAgICAg
ICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRo
KTsKICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluID0gMDsKICAgICAgICAgICAgICAgICB9
CiAKQEAgLTM1ODEsOCArMzU3Miw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVm
V2lkdGhzKCkKIAogICAgICAgICAgICAgICAgIGlmIChhdXRvV3JhcCAmJiAhc2hvdWxkR3Jvd1Rh
YmxlQ2VsbEZvckltYWdlKHRoaXMsIGNoaWxkLCBuZXh0TGVhZikpIHsKICAgICAgICAgICAgICAg
ICAgICAgLy8gTm93IGNoZWNrIG91ciBsaW5lLgotICAgICAgICAgICAgICAgICAgICBpZiAobV9t
aW5QcmVmV2lkdGggPCBpbmxpbmVNaW4pCi0gICAgICAgICAgICAgICAgICAgICAgICBtX21pblBy
ZWZXaWR0aCA9IGlubGluZU1pbjsKKyAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGgg
PSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAKICAgICAgICAgICAgICAgICAgICAg
Ly8gTm93IHN0YXJ0IGEgbmV3IGxpbmUuCiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9
IDA7CkBAIC0zNjQwLDEzICszNjMwLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQ
cmVmV2lkdGhzKCkKICAgICAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
Ly8gV2UgaGF2ZSBhIGJyZWFrYWJsZSBjaGFyYWN0ZXIuICBOb3cgd2UgbmVlZCB0byBrbm93IGlm
CiAgICAgICAgICAgICAgICAgICAgIC8vIHdlIHN0YXJ0IGFuZCBlbmQgd2l0aCB3aGl0ZXNwYWNl
LgotICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5XUykgeworICAgICAgICAgICAgICAgICAg
ICBpZiAoYmVnaW5XUykKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEdvIGFoZWFkIGFuZCBl
bmQgdGhlIGN1cnJlbnQgbGluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKG1fbWluUHJl
ZldpZHRoIDwgaW5saW5lTWluKSBtX21pblByZWZXaWR0aCA9IGlubGluZU1pbjsKLSAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lkdGggPSBt
YXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAgIGVsc2Ug
ewogICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluICs9IGJlZ2luTWluOwotICAgICAg
ICAgICAgICAgICAgICAgICAgaWYobV9taW5QcmVmV2lkdGggPCBpbmxpbmVNaW4pIG1fbWluUHJl
ZldpZHRoID0gaW5saW5lTWluOworICAgICAgICAgICAgICAgICAgICAgICAgbV9taW5QcmVmV2lk
dGggPSBtYXgoaW5saW5lTWluLCBtX21pblByZWZXaWR0aCk7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBjaGlsZE1pbiAtPSB0aTsKICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0zNjU1LDI5
ICszNjQ0LDI2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKICAg
ICAgICAgICAgICAgICAgICAgaWYgKGVuZFdTKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAv
LyBXZSBlbmQgaW4gd2hpdGVzcGFjZSwgd2hpY2ggbWVhbnMgd2UgY2FuIGdvIGFoZWFkCiAgICAg
ICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZW5kIG91ciBjdXJyZW50IGxpbmUuCi0gICAgICAg
ICAgICAgICAgICAgICAgICBpZihtX21pblByZWZXaWR0aCA8IGlubGluZU1pbikgbV9taW5QcmVm
V2lkdGggPSBpbmxpbmVNaW47CisgICAgICAgICAgICAgICAgICAgICAgICBtX21pblByZWZXaWR0
aCA9IG1heChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAg
ICAgIGlubGluZU1pbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZihtX21pblByZWZXaWR0aCA8
IGlubGluZU1pbikgbV9taW5QcmVmV2lkdGggPSBpbmxpbmVNaW47CisgICAgICAgICAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX21pblByZWZXaWR0aCA9IG1h
eChpbmxpbmVNaW4sIG1fbWluUHJlZldpZHRoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlu
bGluZU1pbiA9IGVuZE1pbjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IH0KIAogICAgICAgICAgICAgICAgIGlmIChoYXNCcmVhaykgewogICAgICAgICAgICAgICAgICAg
ICBpbmxpbmVNYXggKz0gYmVnaW5NYXg7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX21heFBy
ZWZXaWR0aCA8IGlubGluZU1heCkgbV9tYXhQcmVmV2lkdGggPSBpbmxpbmVNYXg7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChtX21heFByZWZXaWR0aCA8IGNoaWxkTWF4KSBtX21heFByZWZXaWR0
aCA9IGNoaWxkTWF4OworICAgICAgICAgICAgICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChp
bmxpbmVNYXgsIG1fbWF4UHJlZldpZHRoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9tYXhQcmVm
V2lkdGggPSBtYXgoY2hpbGRNYXgsIG1fbWF4UHJlZldpZHRoKTsKICAgICAgICAgICAgICAgICAg
ICAgaW5saW5lTWF4ID0gZW5kTWF4OwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCArPSBjaGlsZE1heDsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmKG1fbWluUHJlZldpZHRoIDwgaW5saW5lTWluKSBtX21pblByZWZXaWR0aCA9IGlubGluZU1p
bjsKLSAgICAgICAgICAgIGlmKG1fbWF4UHJlZldpZHRoIDwgaW5saW5lTWF4KSBtX21heFByZWZX
aWR0aCA9IGlubGluZU1heDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fbWluUHJl
ZldpZHRoID0gbWF4KGlubGluZU1pbiwgbV9taW5QcmVmV2lkdGgpOworICAgICAgICAgICAgbV9t
YXhQcmVmV2lkdGggPSBtYXgoaW5saW5lTWF4LCBtX21heFByZWZXaWR0aCk7CiAgICAgICAgICAg
ICBpbmxpbmVNaW4gPSBpbmxpbmVNYXggPSAwOwogICAgICAgICAgICAgc3RyaXBGcm9udFNwYWNl
cyA9IHRydWU7CiAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hpbGQgPSAwOwpAQCAtMzc1MCwx
MSArMzczNiwxMSBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkKICAg
ICAgICAgbWFyZ2luID0gbWFyZ2luTGVmdCArIG1hcmdpblJpZ2h0OwogCiAgICAgICAgIGludCB3
ID0gY2hpbGQtPm1pblByZWZXaWR0aCgpICsgbWFyZ2luOwotICAgICAgICBpZiAobV9taW5QcmVm
V2lkdGggPCB3KSBtX21pblByZWZXaWR0aCA9IHc7CisgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bWF4KHcsIG1fbWluUHJlZldpZHRoKTsKICAgICAgICAgCiAgICAgICAgIC8vIElFIGlnbm9yZXMg
dGFibGVzIGZvciBjYWxjdWxhdGlvbiBvZiBub3dyYXAuIE1ha2VzIHNvbWUgc2Vuc2UuCi0gICAg
ICAgIGlmIChub3dyYXAgJiYgIWNoaWxkLT5pc1RhYmxlKCkgJiYgbV9tYXhQcmVmV2lkdGggPCB3
KQotICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSB3OworICAgICAgICBpZiAobm93cmFwICYm
ICFjaGlsZC0+aXNUYWJsZSgpKQorICAgICAgICAgICAgbV9tYXhQcmVmV2lkdGggPSBtYXgodywg
bV9tYXhQcmVmV2lkdGgpOwogCiAgICAgICAgIHcgPSBjaGlsZC0+bWF4UHJlZldpZHRoKCkgKyBt
YXJnaW47CiAKQEAgLTM3NzgsOSArMzc2NCw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNCbG9j
a1ByZWZXaWR0aHMoKQogICAgICAgICAgICAgICAgIGZsb2F0TGVmdFdpZHRoICs9IHc7CiAgICAg
ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgZmxvYXRSaWdodFdpZHRoICs9IHc7Ci0gICAg
ICAgIH0KLSAgICAgICAgZWxzZSBpZiAobV9tYXhQcmVmV2lkdGggPCB3KQotICAgICAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSB3OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG1fbWF4UHJl
ZldpZHRoID0gbWF4KHcsIG1fbWF4UHJlZldpZHRoKTsKIAogICAgICAgICAvLyBBIHZlcnkgc3Bl
Y2lmaWMgV2luSUUgcXVpcmsuCiAgICAgICAgIC8vIEV4YW1wbGU6CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29udGFp
bmVyLmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzk0LDE0ICszOTQsMTQgQEAgdm9pZCBSZW5kZXJDb250YWlu
ZXI6OmFwcGVuZENoaWxkTm9kZShSZQogICAgIC8vIEtlZXAgb3VyIGxheWVyIGhpZXJhcmNoeSB1
cGRhdGVkLiAgT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSB3ZSBkb24ndCBoYXZl
IGFueSBjaGlsZHJlbgogICAgIC8vIGFuZCBkb24ndCBoYXZlIGEgbGF5ZXIgYXR0YWNoZWQgdG8g
b3Vyc2VsdmVzLgogICAgIFJlbmRlckxheWVyKiBsYXllciA9IDA7Ci0gICAgaWYgKG5ld0NoaWxk
LT5maXJzdENoaWxkKCkgfHwgbmV3Q2hpbGQtPmxheWVyKCkpIHsKKyAgICBpZiAobmV3Q2hpbGQt
PmZpcnN0Q2hpbGQoKSB8fCBuZXdDaGlsZC0+aGFzTGF5ZXIoKSkgewogICAgICAgICBsYXllciA9
IGVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIG5ld0NoaWxkLT5hZGRMYXllcnMobGF5ZXIsIG5l
d0NoaWxkKTsKICAgICB9CiAKICAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2libGUgYnV0
IHRoaXMgb2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZpc2libGUg
Y29udGVudAogICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUgZHJhd24gYW5kIGxheWVyIHZpc2liaWxp
dHkgb3B0aW1pemF0aW9uIGNhbid0IGJlIHVzZWQKLSAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0
eSgpICE9IFZJU0lCTEUgJiYgbmV3Q2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJ
QkxFICYmICFuZXdDaGlsZC0+bGF5ZXIoKSkgeworICAgIGlmIChzdHlsZSgpLT52aXNpYmlsaXR5
KCkgIT0gVklTSUJMRSAmJiBuZXdDaGlsZC0+c3R5bGUoKS0+dmlzaWJpbGl0eSgpID09IFZJU0lC
TEUgJiYgIW5ld0NoaWxkLT5oYXNMYXllcigpKSB7CiAgICAgICAgIGlmICghbGF5ZXIpCiAgICAg
ICAgICAgICBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CiAgICAgICAgIGlmIChsYXllcikKQEAg
LTQ0NywxNCArNDQ3LDE0IEBAIHZvaWQgUmVuZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5vZGUo
UmUKICAgICAvLyBLZWVwIG91ciBsYXllciBoaWVyYXJjaHkgdXBkYXRlZC4gIE9wdGltaXplIGZv
ciB0aGUgY29tbW9uIGNhc2Ugd2hlcmUgd2UgZG9uJ3QgaGF2ZSBhbnkgY2hpbGRyZW4KICAgICAv
LyBhbmQgZG9uJ3QgaGF2ZSBhIGxheWVyIGF0dGFjaGVkIHRvIG91cnNlbHZlcy4KICAgICBSZW5k
ZXJMYXllciogbGF5ZXIgPSAwOwotICAgIGlmIChjaGlsZC0+Zmlyc3RDaGlsZCgpIHx8IGNoaWxk
LT5sYXllcigpKSB7CisgICAgaWYgKGNoaWxkLT5maXJzdENoaWxkKCkgfHwgY2hpbGQtPmhhc0xh
eWVyKCkpIHsKICAgICAgICAgbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOwogICAgICAgICBjaGls
ZC0+YWRkTGF5ZXJzKGxheWVyLCBjaGlsZCk7CiAgICAgfQogCiAgICAgLy8gaWYgdGhlIG5ldyBj
aGlsZCBpcyB2aXNpYmxlIGJ1dCB0aGlzIG9iamVjdCB3YXMgbm90LCB0ZWxsIHRoZSBsYXllciBp
dCBoYXMgc29tZSB2aXNpYmxlIGNvbnRlbnQKICAgICAvLyB0aGF0IG5lZWRzIHRvIGJlIGRyYXdu
IGFuZCBsYXllciB2aXNpYmlsaXR5IG9wdGltaXphdGlvbiBjYW4ndCBiZSB1c2VkCi0gICAgaWYg
KHN0eWxlKCktPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFICYmIGNoaWxkLT5zdHlsZSgpLT52aXNp
YmlsaXR5KCkgPT0gVklTSUJMRSAmJiAhY2hpbGQtPmxheWVyKCkpIHsKKyAgICBpZiAoc3R5bGUo
KS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgJiYgY2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHko
KSA9PSBWSVNJQkxFICYmICFjaGlsZC0+aGFzTGF5ZXIoKSkgewogICAgICAgICBpZiAoIWxheWVy
KQogICAgICAgICAgICAgbGF5ZXIgPSBlbmNsb3NpbmdMYXllcigpOwogICAgICAgICBpZiAobGF5
ZXIpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHJlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJldmlzaW9uIDIxMDgwKQorKysgcmVu
ZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0LDggKzEx
NCw3IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jpem9udGFsUHIKICAgICBSZW5k
ZXJPYmplY3QgKmNoaWxkID0gZmlyc3RDaGlsZCgpOwogICAgIHdoaWxlIChjaGlsZCkgewogICAg
ICAgICAvLyBwb3NpdGlvbmVkIGNoaWxkcmVuIGRvbid0IGFmZmVjdCB0aGUgbWlubWF4d2lkdGgK
LSAgICAgICAgaWYgKGNoaWxkLT5pc1Bvc2l0aW9uZWQoKSB8fCBjaGlsZC0+c3R5bGUoKS0+dmlz
aWJpbGl0eSgpID09IENPTExBUFNFKQotICAgICAgICB7CisgICAgICAgIGlmIChjaGlsZC0+aXNQ
b3NpdGlvbmVkKCkgfHwgY2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBDT0xMQVBTRSkg
ewogICAgICAgICAgICAgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xOTMsMTAgKzE5MiwxMCBAQCB2b2lkIFJlbmRlckZs
ZXhpYmxlQm94OjpjYWxjVmVydGljYWxQcmVmCiAgICAgICAgIG1hcmdpbiA9IG1heChtYXJnaW4s
IDApOwogICAgICAgICAKICAgICAgICAgaW50IHcgPSBjaGlsZC0+bWluUHJlZldpZHRoKCkgKyBt
YXJnaW47Ci0gICAgICAgIG1fbWluUHJlZldpZHRoID0gbWF4KG1fbWluUHJlZldpZHRoLCB3KTsK
KyAgICAgICAgbV9taW5QcmVmV2lkdGggPSBtYXgodywgbV9taW5QcmVmV2lkdGgpOwogICAgICAg
ICAKICAgICAgICAgdyA9IGNoaWxkLT5tYXhQcmVmV2lkdGgoKSArIG1hcmdpbjsKLSAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIHcpOworICAgICAgICBtX21heFBy
ZWZXaWR0aCA9IG1heCh3LCBtX21heFByZWZXaWR0aCk7CiAKICAgICAgICAgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKTsKICAgICB9ICAgIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckZsb3cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2aXNpb24gMjEw
ODApCisrKyByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSwx
MCArMjIxLDE0IEBAIHZvaWQgUmVuZGVyRmxvdzo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2gKICAg
ICBpZiAoIXBhcmVudCgpIHx8IChzZWxmTmVlZHNMYXlvdXQoKSAmJiAhaXNJbmxpbmVGbG93KCkp
IHx8IGlzVGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8gRm9yIGFuIGVtcHR5IGlu
bGluZSwgZ28gYWhlYWQgYW5kIHByb3BhZ2F0ZSB0aGUgY2hlY2sgdXAgdG8gb3VyIHBhcmVudC4K
LSAgICBpZiAoaXNJbmxpbmUoKSAmJiAhZmlyc3RMaW5lQm94KCkpCi0gICAgICAgIHJldHVybiBw
YXJlbnQoKS0+ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQodGhpcyk7Ci0gICAgCisgICAgLy8g
SWYgd2UgaGF2ZSBubyBmaXJzdCBsaW5lIGJveCwgdGhlbiBqdXN0IGJhaWwgZWFybHkuCisgICAg
aWYgKCFmaXJzdExpbmVCb3goKSkgeworICAgICAgICAvLyBGb3IgYW4gZW1wdHkgaW5saW5lLCBn
byBhaGVhZCBhbmQgcHJvcGFnYXRlIHRoZSBjaGVjayB1cCB0byBvdXIgcGFyZW50LgorICAgICAg
ICBpZiAoaXNJbmxpbmUoKSkKKyAgICAgICAgICAgIHBhcmVudCgpLT5kaXJ0eUxpbmVzRnJvbUNo
YW5nZWRDaGlsZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIC8vIFRyeSB0
byBmaWd1cmUgb3V0IHdoaWNoIGxpbmUgYm94IHdlIGJlbG9uZyBpbi4gIEZpcnN0IHRyeSB0byBm
aW5kIGEgcHJldmlvdXMKICAgICAvLyBsaW5lIGJveCBieSBleGFtaW5pbmcgb3VyIHNpYmxpbmdz
LiAgSWYgd2UgZGlkbid0IGZpbmQgYSBsaW5lIGJveCwgdGhlbiB1c2Ugb3VyIAogICAgIC8vIHBh
cmVudCdzIGZpcnN0IGxpbmUgYm94LgpAQCAtMjUxLDcgKzI1NSw3IEBAIHZvaWQgUmVuZGVyRmxv
dzo6ZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2gKICAgICAgICAgaWYgKGJveCkKICAgICAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICBpZiAoIWJveCAmJiBmaXJzdExpbmVCb3goKSkKKyAgICBpZiAo
IWJveCkKICAgICAgICAgYm94ID0gZmlyc3RMaW5lQm94KCktPnJvb3QoKTsKIAogICAgIC8vIElm
IHdlIGZvdW5kIGEgbGluZSBib3gsIHRoZW4gZGlydHkgaXQuCkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHAJKHJl
dmlzaW9uIDIxMDgwKQorKysgcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjkxLDExICsyOTEsMTEgQEAgdm9pZCBSZW5kZXJMYXllcjo6dXBkYXRlVmlzaWJpbGl0
eVN0YXR1cwogICAgICAgICAgICAgbV9oYXNWaXNpYmxlQ29udGVudCA9IGZhbHNlOwogICAgICAg
ICAgICAgUmVuZGVyT2JqZWN0KiByID0gbV9vYmplY3QtPmZpcnN0Q2hpbGQoKTsKICAgICAgICAg
ICAgIHdoaWxlIChyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHItPnN0eWxlKCktPnZpc2liaWxp
dHkoKSA9PSBWSVNJQkxFICYmICFyLT5sYXllcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKHIt
PnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFyLT5oYXNMYXllcigpKSB7CiAg
ICAgICAgICAgICAgICAgICAgIG1faGFzVmlzaWJsZUNvbnRlbnQgPSB0cnVlOwogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYg
KHItPmZpcnN0Q2hpbGQoKSAmJiAhci0+bGF5ZXIoKSkKKyAgICAgICAgICAgICAgICBpZiAoci0+
Zmlyc3RDaGlsZCgpICYmICFyLT5oYXNMYXllcigpKQogICAgICAgICAgICAgICAgICAgICByID0g
ci0+Zmlyc3RDaGlsZCgpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHItPm5leHRTaWJsaW5n
KCkpCiAgICAgICAgICAgICAgICAgICAgIHIgPSByLT5uZXh0U2libGluZygpOwpAQCAtMzI2LDcg
KzMyNiw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVyUG9zaXRpb24oKQogICAgICAg
ICAvLyBXZSBtdXN0IGFkanVzdCBvdXIgcG9zaXRpb24gYnkgd2Fsa2luZyB1cCB0aGUgcmVuZGVy
IHRyZWUgbG9va2luZyBmb3IgdGhlCiAgICAgICAgIC8vIG5lYXJlc3QgZW5jbG9zaW5nIG9iamVj
dCB3aXRoIGEgbGF5ZXIuCiAgICAgICAgIFJlbmRlck9iamVjdCogY3VyciA9IG1fb2JqZWN0LT5w
YXJlbnQoKTsKLSAgICAgICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmxheWVyKCkpIHsKKyAgICAg
ICAgd2hpbGUgKGN1cnIgJiYgIWN1cnItPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgIGlmICgh
Y3Vyci0+aXNUYWJsZVJvdygpKSB7CiAgICAgICAgICAgICAgICAgLy8gUm93cyBhbmQgY2VsbHMg
c2hhcmUgdGhlIHNhbWUgY29vcmRpbmF0ZSBzcGFjZSAodGhhdCBvZiB0aGUgc2VjdGlvbikuCiAg
ICAgICAgICAgICAgICAgLy8gT21pdCB0aGVtIHdoZW4gY29tcHV0aW5nIG91ciB4cG9zL3lwb3Mu
CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEwLDE0ICs3MTAsMTggQEAgdm9pZCBSZW5k
ZXJPYmplY3Q6Om1hcmtDb250YWluaW5nQmxvY2tzRgogCiBSZW5kZXJCbG9jayogUmVuZGVyT2Jq
ZWN0Ojpjb250YWluaW5nQmxvY2soKSBjb25zdAogewotICAgIGlmIChpc1RhYmxlQ2VsbCgpKQot
ICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyVGFibGVDZWxsKj4odGhpcykt
PnRhYmxlKCk7CisgICAgaWYgKGlzVGFibGVDZWxsKCkpIHsKKyAgICAgICAgaWYgKHBhcmVudCgp
KQorICAgICAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRhYmxlQ2VsbCo+
KHRoaXMpLT50YWJsZSgpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICBpZiAoaXNS
ZW5kZXJWaWV3KCkpCi0gICAgICAgIHJldHVybiAoUmVuZGVyQmxvY2sqKXRoaXM7CisgICAgICAg
IHJldHVybiBjb25zdF9jYXN0PFJlbmRlckJsb2NrKj4oc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVy
QmxvY2sqPih0aGlzKSk7CiAKICAgICBSZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsKICAgICBp
ZiAoIWlzVGV4dCgpICYmIG1fc3R5bGUtPnBvc2l0aW9uKCkgPT0gRml4ZWRQb3NpdGlvbikgewot
ICAgICAgICB3aGlsZSAoIG8gJiYgIW8tPmlzUmVuZGVyVmlldygpICkKKyAgICAgICAgd2hpbGUg
KG8gJiYgIW8tPmlzUmVuZGVyVmlldygpKQogICAgICAgICAgICAgbyA9IG8tPnBhcmVudCgpOwog
ICAgIH0gZWxzZSBpZiAoIWlzVGV4dCgpICYmIG1fc3R5bGUtPnBvc2l0aW9uKCkgPT0gQWJzb2x1
dGVQb3NpdGlvbikgewogICAgICAgICB3aGlsZSAobyAmJiAoby0+c3R5bGUoKS0+cG9zaXRpb24o
KSA9PSBTdGF0aWNQb3NpdGlvbiB8fCAoby0+aXNJbmxpbmUoKSAmJiAhby0+aXNSZXBsYWNlZCgp
KSkgJiYgIW8tPmlzUmVuZGVyVmlldygpKSB7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZS5jcHAJKHJldmlzaW9uIDIx
MDgwKQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcz
LDcgKzQ3Myw3IEBAIHZvaWQgUmVuZGVyVGFibGU6OnBhaW50KFBhaW50SW5mbyYgcGFpbnQKICAg
ICBpbmZvLnBhaW50aW5nUm9vdCA9IHBhaW50aW5nUm9vdEZvckNoaWxkcmVuKHBhaW50SW5mbyk7
CiAKICAgICBmb3IgKFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7IGNoaWxkOyBj
aGlsZCA9IGNoaWxkLT5uZXh0U2libGluZygpKSB7Ci0gICAgICAgIGlmICghY2hpbGQtPmxheWVy
KCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigpIHx8IGNoaWxkID09IG1fY2FwdGlvbikpCisg
ICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkgJiYgKGNoaWxkLT5pc1RhYmxlU2VjdGlvbigp
IHx8IGNoaWxkID09IG1fY2FwdGlvbikpCiAgICAgICAgICAgICBjaGlsZC0+cGFpbnQoaW5mbywg
dHgsIHR5KTsKICAgICB9CiAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCShyZXZpc2lvbiAyMTA4
MCkKKysrIHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
ODMsNyArNzgzLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZQog
ICAgIGlmIChiZ0xheWVyLT5oYXNJbWFnZSgpIHx8IGMuaXNWYWxpZCgpKSB7CiAgICAgICAgIC8v
IFdlIGhhdmUgdG8gY2xpcCBoZXJlIGJlY2F1c2UgdGhlIGJhY2tncm91bmQgd291bGQgcGFpbnQK
ICAgICAgICAgLy8gb24gdG9wIG9mIHRoZSBib3JkZXJzIG90aGVyd2lzZS4gIFRoaXMgb25seSBt
YXR0ZXJzIGZvciBjZWxscyBhbmQgcm93cy4KLSAgICAgICAgYm9vbCBzaG91bGRDbGlwID0gYmFj
a2dyb3VuZE9iamVjdC0+bGF5ZXIoKSAmJiAoYmFja2dyb3VuZE9iamVjdCA9PSB0aGlzIHx8IGJh
Y2tncm91bmRPYmplY3QgPT0gcGFyZW50KCkpICYmIHRhYmxlRWx0LT5jb2xsYXBzZUJvcmRlcnMo
KTsKKyAgICAgICAgYm9vbCBzaG91bGRDbGlwID0gYmFja2dyb3VuZE9iamVjdC0+aGFzTGF5ZXIo
KSAmJiAoYmFja2dyb3VuZE9iamVjdCA9PSB0aGlzIHx8IGJhY2tncm91bmRPYmplY3QgPT0gcGFy
ZW50KCkpICYmIHRhYmxlRWx0LT5jb2xsYXBzZUJvcmRlcnMoKTsKICAgICAgICAgaWYgKHNob3Vs
ZENsaXApIHsKICAgICAgICAgICAgIEludFJlY3QgY2xpcFJlY3QodHggKyBib3JkZXJMZWZ0KCks
IHR5ICsgYm9yZGVyVG9wKCksCiAgICAgICAgICAgICAgICAgdyAtIGJvcmRlckxlZnQoKSAtIGJv
cmRlclJpZ2h0KCksIGggLSBib3JkZXJUb3AoKSAtIGJvcmRlckJvdHRvbSgpKTsKSW5kZXg6IHJl
bmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRl
clRhYmxlUm93LmNwcAkocmV2aXNpb24gMjEwODApCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVS
b3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgYm9vbCBSZW5kZXJUYWJs
ZVJvdzo6bm9kZUF0UG9pbnQoY29uc3QgSAogICAgICAgICAvLyBhdCB0aGUgbW9tZW50IChhIGRl
bW90ZWQgaW5saW5lIDxmb3JtPiBmb3IgZXhhbXBsZSkuIElmIHdlIGV2ZXIgaW1wbGVtZW50IGEK
ICAgICAgICAgLy8gdGFibGUtc3BlY2lmaWMgaGl0LXRlc3QgbWV0aG9kICh3aGljaCB3ZSBzaG91
bGQgZG8gZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMgYW55d2F5KSwKICAgICAgICAgLy8gdGhlbiB3
ZSBjYW4gcmVtb3ZlIHRoaXMgY2hlY2suCi0gICAgICAgIGlmICghY2hpbGQtPmxheWVyKCkgJiYg
IWNoaWxkLT5pc0lubGluZUZsb3coKSAmJiBjaGlsZC0+bm9kZUF0UG9pbnQocmVxdWVzdCwgcmVz
dWx0LCB4LCB5LCB0eCwgdHksIGFjdGlvbikpIHsKKyAgICAgICAgaWYgKCFjaGlsZC0+aGFzTGF5
ZXIoKSAmJiAhY2hpbGQtPmlzSW5saW5lRmxvdygpICYmIGNoaWxkLT5ub2RlQXRQb2ludChyZXF1
ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKSkgewogICAgICAgICAgICAgdXBkYXRl
SGl0VGVzdFJlc3VsdChyZXN1bHQsIEludFBvaW50KHggLSB0eCwgeSAtIHR5KSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTY5LDcgKzE2OSw3IEBAIHZvaWQgUmVu
ZGVyVGFibGVSb3c6OnBhaW50KFBhaW50SW5mbyYgcGEKICAgICAgICAgICAgICAgICBSZW5kZXJU
YWJsZUNlbGwqIGNlbGwgPSBzdGF0aWNfY2FzdDxSZW5kZXJUYWJsZUNlbGwqPihjaGlsZCk7CiAg
ICAgICAgICAgICAgICAgY2VsbC0+cGFpbnRCYWNrZ3JvdW5kc0JlaGluZENlbGwocGFpbnRJbmZv
LCB0eCwgdHksIHRoaXMpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFjaGlsZC0+
bGF5ZXIoKSkKKyAgICAgICAgICAgIGlmICghY2hpbGQtPmhhc0xheWVyKCkpCiAgICAgICAgICAg
ICAgICAgY2hpbGQtPnBhaW50KHBhaW50SW5mbywgdHgsIHR5KTsKICAgICAgICAgfQogICAgIH0K
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJl
bmRlcmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRl
cmluZy9SZW5kZXJUYWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDIzLDcgKzEw
MjMsNyBAQCBib29sIFJlbmRlclRhYmxlU2VjdGlvbjo6bm9kZUF0UG9pbnQoY29uCiAgICAgICAg
IC8vIGF0IHRoZSBtb21lbnQgKGEgZGVtb3RlZCBpbmxpbmUgPGZvcm0+IGZvciBleGFtcGxlKS4g
SWYgd2UgZXZlciBpbXBsZW1lbnQgYQogICAgICAgICAvLyB0YWJsZS1zcGVjaWZpYyBoaXQtdGVz
dCBtZXRob2QgKHdoaWNoIHdlIHNob3VsZCBkbyBmb3IgcGVyZm9ybWFuY2UgcmVhc29ucyBhbnl3
YXkpLAogICAgICAgICAvLyB0aGVuIHdlIGNhbiByZW1vdmUgdGhpcyBjaGVjay4KLSAgICAgICAg
aWYgKCFjaGlsZC0+bGF5ZXIoKSAmJiAhY2hpbGQtPmlzSW5saW5lRmxvdygpICYmIGNoaWxkLT5u
b2RlQXRQb2ludChyZXF1ZXN0LCByZXN1bHQsIHgsIHksIHR4LCB0eSwgYWN0aW9uKSkgeworICAg
ICAgICBpZiAoIWNoaWxkLT5oYXNMYXllcigpICYmICFjaGlsZC0+aXNJbmxpbmVGbG93KCkgJiYg
Y2hpbGQtPm5vZGVBdFBvaW50KHJlcXVlc3QsIHJlc3VsdCwgeCwgeSwgdHgsIHR5LCBhY3Rpb24p
KSB7CiAgICAgICAgICAgICB1cGRhdGVIaXRUZXN0UmVzdWx0KHJlc3VsdCwgSW50UG9pbnQoeCAt
IHR4LCB5IC0gdHkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkluZGV4
OiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlclRyZWVBc1RleHQuY3BwCShyZXZpc2lvbiAyMTA4MCkKKysrIHJlbmRlcmluZy9SZW5k
ZXJUcmVlQXNUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzM4LDcgKzMzOCw3IEBAIHZvaWQg
d3JpdGUoVGV4dFN0cmVhbSYgdHMsIGNvbnN0IFJlbmRlck8KICAgICB9CiAKICAgICBmb3IgKFJl
bmRlck9iamVjdCogY2hpbGQgPSBvLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQt
Pm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxkLT5sYXllcigpKQorICAgICAgICBp
ZiAoY2hpbGQtPmhhc0xheWVyKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgd3Jp
dGUodHMsICpjaGlsZCwgaW5kZW50ICsgMSk7CiAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>14170</attachid>
            <date>2007-04-25 00:40:07 -0700</date>
            <delta_ts>2007-04-25 12:01:38 -0700</delta_ts>
            <desc>more reduced patch, passes layout tests (code 99% by Hyatt, not me)</desc>
            <filename>LazyPatch.txt</filename>
            <type>text/plain</type>
            <size>70779</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMTA4MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMyIEBACisyMDA3LTA0LTI1ICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNv
bT4KKworICAgICAgICBSZWFyY2hpdGVjdCBjYWxjUHJlZldpZHRocy4gIFRoZSBjYWxjdWxhdGlv
biBpcyBub3cgZG9uZSBsYXppbHkgb25seSB3aGVuIG1pblByZWZXaWR0aAorICAgICAgICBvciBt
YXhQcmVmV2lkdGggYXJlIGFza2VkIGZvci4gIFRoZSByZXN1bHQgb2YgdGhlIGNhbGN1bGF0aW9u
IGlzIGNhY2hlZC4KKworICAgICAgICBUaGUgbmV3IGludmFsaWRhdGlvbiBzY2hlbWUgZm9yIHBy
ZWYgd2lkdGggaW52YWxpZGF0aW9uIGZvbGxvd3MgdGhlCisgICAgICAgIGNvbnRhaW5pbmcgYmxv
Y2sgaGllcmFyY2h5IGFuZCBrbm93cyB0byBoYWx0IGF0IHBvc2l0aW9uZWQgb2JqZWN0cywgc2lu
Y2UKKyAgICAgICAgdGhleSBjYW5ub3QgaW5mbHVlbmNlIHRoZSBzaXplIG9mIHRoZWlyIGNvbnRh
aW5lcnMuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBjc3MvY3Nzc3R5bGVzZWxlY3Rvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNl
bGVjdG9yOjppbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2VsZWN0b3I6OmluaXRG
b3JTdHlsZVJlc29sdmUpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lVmlldzo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QXBwbGV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckFwcGxldDo6bGF5b3V0KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6Om1ha2VDaGlsZHJlbk5vbklubGluZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJCbG9jazo6cmVtb3ZlQ2hpbGQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Omxh
eW91dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6bGF5b3V0QmxvY2spOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAgICAgKFdl
YkNvcmU6OklubGluZU1pbk1heEl0ZXJhdG9yOjplbmRPZklubGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpzaG91bGRHcm93VGFibGVDZWxsRm9ySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQm94LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6c2V0U3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94
OjptaW5QcmVmV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjptYXhQcmVmV2lk
dGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjV2lkdGgpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQm94OjpjYWxjV2lkdGhVc2luZyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJCb3g6OmNhbGNBYnNvbHV0ZUhvcml6b250YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKToKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyQm94Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckNvbnRhaW5lci5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OnJlbW92ZUNoaWxkTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OmFwcGVuZENoaWxkTm9kZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6Omluc2VydENoaWxkTm9kZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJDb250YWluZXI6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckNvbnRhaW5lci5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjpt
b3ZlQ2hpbGROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpkaXJ0eUxpbmVCb3hlcyk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpjYWxjUHJlZldpZHRocyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlckNvdW50ZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmlsZVVw
bG9hZENvbnRyb2wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmlsZVVwbG9hZENvbnRy
b2w6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxleGlibGVC
b3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6OmNhbGNIb3Jpem9u
dGFsUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJveDo6Y2Fs
Y1ZlcnRpY2FsUHJlZldpZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbGV4aWJsZUJv
eDo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxleGlibGVCb3g6
OmxheW91dEJsb2NrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRm9yZWlnbk9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGb3JlaWduT2JqZWN0OjpsYXlvdXQpOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJGcmFtZVNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJGcmFtZVNldDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySFRNTENh
bnZhcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJIVE1MQ2FudmFzOjpsYXlvdXQpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJJbWFnZTo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmNw
cDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVySW5saW5lLmg6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckxpc3RCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6
dXBkYXRlRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdEJveDo6Y2Fs
Y1ByZWZXaWR0aHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpmaXJzdE5vbk1hcmtlckNoaWxkKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxpc3RJdGVtOjp1cGRhdGVNYXJrZXJMb2NhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMaXN0SXRlbTo6Y2FsY1ByZWZXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGlzdEl0ZW06OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJr
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnVwZGF0ZU1hcmdpbnMpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OlJlbmRlck9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnJlbW92ZUNoaWxkTm9kZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6Om1vdmVDaGlsZE5vZGUpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjphcHBlbmRDaGlsZE5vZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyT2JqZWN0OjppbnNlcnRDaGlsZE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyT2JqZWN0OjpzZXRQcmVmV2lkdGhzRGlydHkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
T2JqZWN0OjppbnZhbGlkYXRlQ29udGFpbmluZ0Jsb2NrUHJlZldpZHRocyk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmluZm9ybWF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
bmRlck9iamVjdDo6c2V0U3R5bGUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3Qu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck9iamVjdDo6bGF5ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0OjpoYXNMYXllcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJP
YmplY3Q6OnByZWZXaWR0aHNEaXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6
OnNldE5lZWRzTGF5b3V0QW5kUHJlZldpZHRoc1JlY2FsYyk6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJPYmplY3Q6OnNldEhhc0xheWVyKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyUGFy
dE9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJQYXJ0T2JqZWN0OjpsYXlvdXQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJTVkdDb250YWluZXIuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlk
ZGVuQ29udGFpbmVyLmNwcDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29u
dGFpbmVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyU1ZHVGV4dDo6bGF5b3V0KToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGFibGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGU6OmNhbGNXaWR0
aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZTo6bGF5b3V0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlOjpyZW1vdmVDaGlsZE5vZGUpOgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5oOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUYWJsZVJvdy5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVJvdzo6bGF5b3V0KToKKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRhYmxlU2VjdGlvbjo6cmVtb3ZlQ2hpbGROb2RlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyVGFibGVTZWN0aW9uLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6dHJpbW1lZFByZWZXaWR0aHMpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNTcGFjZUFjY29yZGluZ1RvU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyVGV4dDo6bWluUHJlZldpZHRoKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6
Om1heFByZWZXaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjpjYWxjUHJlZldp
ZHRocyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojp3aWR0aCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVmlldy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJWaWV3OjpSZW5kZXJWaWV3KToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclZpZXc6OmNhbGNQcmVmV2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclZpZXc6OmxheW91dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlcldpZGdldC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJXaWRnZXQ6OmxheW91dCk6CisKIDIwMDctMDQt
MjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hY2llai4KSW5kZXg6IFdlYkNvcmUvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCShyZXZpc2lvbiAyMTA4MikK
KysrIFdlYkNvcmUvY3NzL2Nzc3N0eWxlc2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MDEsNyArMzAxLDYgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjppbml0KCkKIHsKICAgICBlbGVt
ZW50ID0gMDsKICAgICBzZXR0aW5ncyA9IDA7Ci0gICAgbV9tYXRjaGVkUnVsZXMuY2xlYXIoKTsK
ICAgICBtX21hdGNoZWREZWNscy5jbGVhcigpOwogICAgIG1fcnVsZUxpc3QgPSAwOwogICAgIG1f
Y29sbGVjdFJ1bGVzT25seSA9IGZhbHNlOwpAQCAtNTY0LDcgKzU2Myw2IEBAIHZvaWQgQ1NTU3R5
bGVTZWxlY3Rvcjo6aW5pdEZvclN0eWxlUmVzb2wKIAogICAgIHN0eWxlID0gMDsKICAgICAKLSAg
ICBtX21hdGNoZWRSdWxlcy5jbGVhcigpOwogICAgIG1fbWF0Y2hlZERlY2xzLmNsZWFyKCk7CiAK
ICAgICBtX3J1bGVMaXN0ID0gMDsKSW5kZXg6IFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCShyZXZpc2lvbiAyMTA4MikK
KysrIFdlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTAsMTAg
KzQxMCw2IEBAIHZvaWQgRnJhbWVWaWV3OjpsYXlvdXQoYm9vbCBhbGxvd1N1YnRyZWUKICAgICAg
ICAgcm9vdC0+cmVwYWludE9iamVjdHNCZWZvcmVMYXlvdXQoKTsKICAgICB9CiAKLSAgICBpZiAo
c3VidHJlZSkgewotICAgICAgICBpZiAocm9vdC0+cmVjYWxjTWluTWF4KCkpCi0gICAgICAgICAg
ICByb290LT5yZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICB9CiAgICAgcGF1c2VTY2hlZHVsZWRF
dmVudHMoKTsKICAgICByb290LT5sYXlvdXQoKTsKICAgICBkLT5sYXlvdXRSb290ID0gMDsKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckFwcGxldC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQXBwbGV0LmNwcAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJBcHBsZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5
NSw2IEBAIHZvaWQgUmVuZGVyQXBwbGV0OjpjcmVhdGVXaWRnZXRJZk5lY2Vzc2EKIHZvaWQgUmVu
ZGVyQXBwbGV0OjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBB
U1NFUlQoIXByZWZXaWR0aHNEaXJ0eSgpKTsKIAogICAgIGNhbGNXaWR0aCgpOwogICAgIGNhbGNI
ZWlnaHQoKTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDIxMDgy
KQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMjUsOSArMzI1LDkgQEAgdm9pZCBSZW5kZXJCbG9jazo6bWFrZUNoaWxkcmVuTm9uSW5saW5l
KAogICAgICAgICB7CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAg
ICAgIG8gPSBuby0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGJveC0+YXBwZW5kQ2hpbGRO
b2RlKHJlbW92ZUNoaWxkTm9kZShubykpOworICAgICAgICAgICAgYm94LT5tb3ZlQ2hpbGROb2Rl
KG5vKTsKICAgICAgICAgfQotICAgICAgICBib3gtPmFwcGVuZENoaWxkTm9kZShyZW1vdmVDaGls
ZE5vZGUoaW5saW5lUnVuRW5kKSk7CisgICAgICAgIGJveC0+bW92ZUNoaWxkTm9kZShpbmxpbmVS
dW5FbmQpOwogICAgIH0KIAogI2lmbmRlZiBOREVCVUcKQEAgLTM1NSw4ICszNTUsNyBAQCB2b2lk
IFJlbmRlckJsb2NrOjpyZW1vdmVDaGlsZChSZW5kZXJPYmplCiAgICAgICAgIHdoaWxlIChvKSB7
CiAgICAgICAgICAgICBSZW5kZXJPYmplY3QqIG5vID0gbzsKICAgICAgICAgICAgIG8gPSBuby0+
bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIHByZXYtPmFwcGVuZENoaWxkTm9kZShuZXh0LT5y
ZW1vdmVDaGlsZE5vZGUobm8pKTsKLSAgICAgICAgICAgIG5vLT5zZXROZWVkc0xheW91dEFuZFBy
ZWZXaWR0aHNSZWNhbGMoKTsKKyAgICAgICAgICAgIHByZXYtPm1vdmVDaGlsZE5vZGUobm8pOwog
ICAgICAgICB9CiAgCiAgICAgICAgIFJlbmRlckJsb2NrKiBuZXh0QmxvY2sgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJCbG9jayo+KG5leHQpOwpAQCAtMzgwLDggKzM3OSw3IEBAIHZvaWQgUmVuZGVyQmxv
Y2s6OnJlbW92ZUNoaWxkKFJlbmRlck9iamUKICAgICAgICAgd2hpbGUgKG8pIHsKICAgICAgICAg
ICAgIFJlbmRlck9iamVjdCogbm8gPSBvOwogICAgICAgICAgICAgbyA9IG5vLT5uZXh0U2libGlu
ZygpOwotICAgICAgICAgICAgYXBwZW5kQ2hpbGROb2RlKGFub25CbG9jay0+cmVtb3ZlQ2hpbGRO
b2RlKG5vKSk7Ci0gICAgICAgICAgICBuby0+c2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7CisgICAgICAgICAgICBtb3ZlQ2hpbGROb2RlKG5vKTsKICAgICAgICAgfQogCiAgICAg
ICAgIC8vIERlbGV0ZSB0aGUgbm93LWVtcHR5IGJsb2NrJ3MgbGluZXMgYW5kIG51a2UgaXQuCkBA
IC00NjQsNiArNDYyLDkgQEAgYm9vbCBSZW5kZXJCbG9jazo6aXNTZWxmQ29sbGFwc2luZ0Jsb2Nr
KAogCiB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXQoKQogeworICAgIC8vIFVwZGF0ZSBvdXIgZmly
c3QgbGV0dGVyIGluZm8gbm93LgorICAgIHVwZGF0ZUZpcnN0TGV0dGVyKCk7CisKICAgICAvLyBU
YWJsZSBjZWxscyBjYWxsIGxheW91dEJsb2NrIGRpcmVjdGx5LCBzbyBkb24ndCBhZGQgYW55IGxv
Z2ljIGhlcmUuICBQdXQgY29kZSBpbnRvCiAgICAgLy8gbGF5b3V0QmxvY2soKS4KICAgICBsYXlv
dXRCbG9jayhmYWxzZSk7CkBAIC00ODEsNyArNDgyLDYgQEAgdm9pZCBSZW5kZXJCbG9jazo6bGF5
b3V0KCkKIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJl
bikKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFwcmVmV2lkdGhz
RGlydHkoKSk7CiAKICAgICBpZiAoaXNJbmxpbmUoKSAmJiAhaXNJbmxpbmVCbG9ja09ySW5saW5l
VGFibGUoKSkgLy8gSW5saW5lIDxmb3JtPnMgaW5zaWRlIHZhcmlvdXMgdGFibGUgZWxlbWVudHMg
Y2FuCiAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IC8vIGNhdXNlIHVzIHRvIGNvbWUgaW4gaGVyZS4gIEp1c3QgYmFpbC4KQEAgLTMyNTEsNiArMzI1
MSw4IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCkKIHsKICAgICBBU1NFUlQo
cHJlZldpZHRoc0RpcnR5KCkpOwogCisgICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKKwogICAgIGlm
ICghaXNUYWJsZUNlbGwoKSAmJiBzdHlsZSgpLT53aWR0aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgp
LT53aWR0aCgpLnZhbHVlKCkgPiAwKQogICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fbWF4UHJl
ZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkpOwog
ICAgIGVsc2UgewpAQCAtMzI3Myw3ICszMjc1LDcgQEAgdm9pZCBSZW5kZXJCbG9jazo6Y2FsY1By
ZWZXaWR0aHMoKQogICAgICAgICB9CiAKICAgICAgICAgaWYgKGlzVGFibGVDZWxsKCkpIHsKLSAg
ICAgICAgICAgIExlbmd0aCB3ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4odGhpcykt
PnN0eWxlT3JDb2xXaWR0aCgpOworICAgICAgICAgICAgTGVuZ3RoIHcgPSBzdGF0aWNfY2FzdDxj
b25zdCBSZW5kZXJUYWJsZUNlbGwqPih0aGlzKS0+c3R5bGVPckNvbFdpZHRoKCk7CiAgICAgICAg
ICAgICBpZiAody5pc0ZpeGVkKCkgJiYgdy52YWx1ZSgpID4gMCkKICAgICAgICAgICAgICAgICBt
X21heFByZWZXaWR0aCA9IG1heChtX21pblByZWZXaWR0aCwgY2FsY0NvbnRlbnRCb3hXaWR0aCh3
LnZhbHVlKCkpKTsKICAgICAgICAgfQpAQCAtMzMxMiw4ICszMzE0LDggQEAgc3RydWN0IElubGlu
ZU1pbk1heEl0ZXJhdG9yCiAgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50OwogICAgIGJvb2wgZW5k
T2ZJbmxpbmU7CiAKLSAgICBJbmxpbmVNaW5NYXhJdGVyYXRvcihSZW5kZXJPYmplY3QqIHAsIFJl
bmRlck9iamVjdCogbywgYm9vbCBlbmQgPSBmYWxzZSkKLSAgICAgICAgOnBhcmVudChwKSwgY3Vy
cmVudChvKSwgZW5kT2ZJbmxpbmUoZW5kKSB7fQorICAgIElubGluZU1pbk1heEl0ZXJhdG9yKFJl
bmRlck9iamVjdCogcCwgYm9vbCBlbmQgPSBmYWxzZSkKKyAgICAgICAgOnBhcmVudChwKSwgY3Vy
cmVudChwKSwgZW5kT2ZJbmxpbmUoZW5kKSB7fQogCiAgICAgUmVuZGVyT2JqZWN0KiBuZXh0KCk7
CiB9OwpAQCAtMzQwMyw3ICszNDA1LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHN0cmlwVHJhaWxp
bmdTcGFjZShpbgogLy8gYW5kIE9wZXJhIHdpbGwgYWxsb3cgYSB0YWJsZSBjZWxsIHRvIGdyb3cg
dG8gZml0IGFuIGltYWdlIGluc2lkZSBpdCB1bmRlcgogLy8gdmVyeSBzcGVjaWZpYyBjaXJ1Y3Vt
c3RhbmNlcy4gTm90IHN1cHBvcnRpbmcgdGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8KIC8vIG1p
cy1yZW5kZXIgc29tZSByZWFsIHNpdGVzLiAoU2VlIEJ1Z3ppbGxhIDEwNTE3LikgCi1zdGF0aWMg
Ym9vbCBzaG91bGRHcm93VGFibGVDZWxsRm9ySW1hZ2UoUmVuZGVyQmxvY2sqIGNvbnRhaW5pbmdC
bG9jaywgUmVuZGVyT2JqZWN0KiBpbWFnZSwgUmVuZGVyT2JqZWN0KiBhZGphY2VudExlYWYpCitz
dGF0aWMgYm9vbCBzaG91bGRHcm93VGFibGVDZWxsRm9ySW1hZ2UoY29uc3QgUmVuZGVyQmxvY2sq
IGNvbnRhaW5pbmdCbG9jaywgY29uc3QgUmVuZGVyT2JqZWN0KiBpbWFnZSwgY29uc3QgUmVuZGVy
T2JqZWN0KiBhZGphY2VudExlYWYpCiB7CiAgICAgaWYgKCFjb250YWluaW5nQmxvY2stPnN0eWxl
KCktPmh0bWxIYWNrcygpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0zNDM4LDEyICszNDQw
LDExIEBAIHZvaWQgUmVuZGVyQmxvY2s6OmNhbGNJbmxpbmVQcmVmV2lkdGhzKCkKICAgICBib29s
IGF1dG9XcmFwLCBvbGRBdXRvV3JhcDsKICAgICBhdXRvV3JhcCA9IG9sZEF1dG9XcmFwID0gc3R5
bGUoKS0+YXV0b1dyYXAoKTsKIAotICAgIElubGluZU1pbk1heEl0ZXJhdG9yIGNoaWxkSXRlcmF0
b3IodGhpcywgdGhpcyk7CisgICAgSW5saW5lTWluTWF4SXRlcmF0b3IgY2hpbGRJdGVyYXRvcih0
aGlzKTsKICAgICBib29sIGFkZGVkVGV4dEluZGVudCA9IGZhbHNlOyAvLyBPbmx5IGdldHMgYWRk
ZWQgaW4gb25jZS4KICAgICBSZW5kZXJPYmplY3QqIHByZXZGbG9hdCA9IDA7CiAgICAgUmVuZGVy
T2JqZWN0KiBwcmV2aW91c0xlYWYgPSAwOwotICAgIHdoaWxlIChSZW5kZXJPYmplY3QqIGNoaWxk
ID0gY2hpbGRJdGVyYXRvci5uZXh0KCkpCi0gICAgeworICAgIHdoaWxlIChSZW5kZXJPYmplY3Qq
IGNoaWxkID0gY2hpbGRJdGVyYXRvci5uZXh0KCkpIHsKICAgICAgICAgSW5saW5lTWluTWF4SXRl
cmF0b3IgbGVhZkl0ZXJhdG9yID0gY2hpbGRJdGVyYXRvcjsKICAgICAgICAgUmVuZGVyT2JqZWN0
KiBuZXh0TGVhZiA9IGxlYWZJdGVyYXRvci5uZXh0KCk7CiAgICAgICAgIHdoaWxlIChuZXh0TGVh
ZiAmJiBuZXh0TGVhZi0+aXNJbmxpbmVGbG93KCkpCkBAIC0zNTA5LDE2ICszNTEwLDkgQEAgdm9p
ZCBSZW5kZXJCbG9jazo6Y2FsY0lubGluZVByZWZXaWR0aHMoKQogICAgICAgICAgICAgICAgICAg
ICBpbnQgbWFyZ2lucyA9IDA7CiAgICAgICAgICAgICAgICAgICAgIExlbmd0aCBsZWZ0TWFyZ2lu
ID0gY3N0eWxlLT5tYXJnaW5MZWZ0KCk7CiAgICAgICAgICAgICAgICAgICAgIExlbmd0aCByaWdo
dE1hcmdpbiA9IGNzdHlsZS0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAgYm9v
bCB1c2VDYWxjdWxhdGVkV2lkdGhzID0gY2hpbGQtPmlzTGlzdE1hcmtlcigpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAobGVmdE1hcmdpbi5pc1BlcmNlbnQoKSB8fCByaWdodE1hcmdpbi5pc1Bl
cmNlbnQoKSB8fCB1c2VDYWxjdWxhdGVkV2lkdGhzKQotICAgICAgICAgICAgICAgICAgICAgICAg
Y2hpbGQtPmNhbGNXaWR0aCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAodXNlQ2FsY3VsYXRl
ZFdpZHRocyB8fCBsZWZ0TWFyZ2luLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbWFyZ2lucyArPSBjaGlsZC0+bWFyZ2luTGVmdCgpOwotICAgICAgICAgICAgICAgICAgICBl
bHNlIGlmIChsZWZ0TWFyZ2luLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxl
ZnRNYXJnaW4uaXNGaXhlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2lucyArPSBs
ZWZ0TWFyZ2luLnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh1c2VDYWxjdWxhdGVk
V2lkdGhzIHx8IHJpZ2h0TWFyZ2luLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbWFyZ2lucyArPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLSAgICAgICAgICAgICAgICAgICAg
ZWxzZSBpZiAocmlnaHRNYXJnaW4uaXNGaXhlZCgpKQorICAgICAgICAgICAgICAgICAgICBpZiAo
cmlnaHRNYXJnaW4uaXNGaXhlZCgpKQogICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2lucyAr
PSByaWdodE1hcmdpbi52YWx1ZSgpOwogICAgICAgICAgICAgICAgICAgICBjaGlsZE1pbiArPSBt
YXJnaW5zOwogICAgICAgICAgICAgICAgICAgICBjaGlsZE1heCArPSBtYXJnaW5zOwpAQCAtMzcw
OSwzMCArMzcwMywxNiBAQCB2b2lkIFJlbmRlckJsb2NrOjpjYWxjQmxvY2tQcmVmV2lkdGhzKCkK
ICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIExlbmd0aCBtbCA9IGNoaWxkLT5z
dHlsZSgpLT5tYXJnaW5MZWZ0KCk7Ci0gICAgICAgIExlbmd0aCBtciA9IGNoaWxkLT5zdHlsZSgp
LT5tYXJnaW5SaWdodCgpOwotCi0gICAgICAgIC8vIENhbGwgY2FsY1dpZHRoIG9uIHRoZSBjaGls
ZCB0byBlbnN1cmUgdGhhdCBvdXIgbWFyZ2lucyBhcmUKLSAgICAgICAgLy8gdXAgdG8gZGF0ZS4g
IFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjaGlsZCBoYXMgYWN0dWFsbHkK
LSAgICAgICAgLy8gY2FsY3VsYXRlZCBpdHMgbWFyZ2lucyAod2hpY2ggYXJlIGNvbXB1dGVkIGlu
c2lkZSBjYWxjV2lkdGgpLgotICAgICAgICBpZiAobWwuaXNQZXJjZW50KCkgfHwgbXIuaXNQZXJj
ZW50KCkpCi0gICAgICAgICAgICBjYWxjV2lkdGgoKTsKLQogICAgICAgICAvLyBBIG1hcmdpbiBi
YXNpY2FsbHkgaGFzIHRocmVlIHR5cGVzOiBmaXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1dG8gKHZh
cmlhYmxlKS4KLSAgICAgICAgLy8gQXV0byBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNv
bXB1dGluZyBtaW4vbWF4IHdpZHRoLgorICAgICAgICAvLyBBdXRvIGFuZCBwZXJjZW50YWdlIG1h
cmdpbnMgc2ltcGx5IGJlY29tZSAwIHdoZW4gY29tcHV0aW5nIG1pbi9tYXggd2lkdGguCiAgICAg
ICAgIC8vIEZpeGVkIG1hcmdpbnMgY2FuIGJlIGFkZGVkIGluIGFzIGlzLgotICAgICAgICAvLyBQ
ZXJjZW50YWdlIG1hcmdpbnMgYXJlIGNvbXB1dGVkIGFzIGEgcGVyY2VudGFnZSBvZiB0aGUgd2lk
dGggd2UgY2FsY3VsYXRlZCBpbgotICAgICAgICAvLyB0aGUgY2FsY1dpZHRoIGNhbGwgYWJvdmUu
ICBJbiB0aGlzIGNhc2Ugd2UgdXNlIHRoZSBhY3R1YWwgY2FjaGVkIG1hcmdpbiB2YWx1ZXMgb24K
LSAgICAgICAgLy8gdGhlIFJlbmRlck9iamVjdCBpdHNlbGYuCisgICAgICAgIExlbmd0aCBtbCA9
IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5MZWZ0KCk7CisgICAgICAgIExlbmd0aCBtciA9IGNoaWxk
LT5zdHlsZSgpLT5tYXJnaW5SaWdodCgpOwogICAgICAgICBpbnQgbWFyZ2luID0gMCwgbWFyZ2lu
TGVmdCA9IDAsIG1hcmdpblJpZ2h0ID0gMDsKICAgICAgICAgaWYgKG1sLmlzRml4ZWQoKSkKICAg
ICAgICAgICAgIG1hcmdpbkxlZnQgKz0gbWwudmFsdWUoKTsKLSAgICAgICAgZWxzZSBpZiAobWwu
aXNQZXJjZW50KCkpCi0gICAgICAgICAgICBtYXJnaW5MZWZ0ICs9IGNoaWxkLT5tYXJnaW5MZWZ0
KCk7CiAgICAgICAgIGlmIChtci5pc0ZpeGVkKCkpCiAgICAgICAgICAgICBtYXJnaW5SaWdodCAr
PSBtci52YWx1ZSgpOwotICAgICAgICBlbHNlIGlmIChtci5pc1BlcmNlbnQoKSkKLSAgICAgICAg
ICAgIG1hcmdpblJpZ2h0ICs9IGNoaWxkLT5tYXJnaW5SaWdodCgpOwogICAgICAgICBtYXJnaW4g
PSBtYXJnaW5MZWZ0ICsgbWFyZ2luUmlnaHQ7CiAKICAgICAgICAgaW50IHcgPSBjaGlsZC0+bWlu
UHJlZldpZHRoKCkgKyBtYXJnaW47CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9j
ay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlz
aW9uIDIxMDgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkod29ya2luZyBj
b3B5KQpAQCAtMjE2LDcgKzIxNiw3IEBAIHB1YmxpYzoKICAgICAvLyBPYnRhaW5zIHRoZSBuZWFy
ZXN0IGVuY2xvc2luZyBibG9jayAoaW5jbHVkaW5nIHRoaXMgYmxvY2spIHRoYXQgY29udHJpYnV0
ZXMgYSBmaXJzdC1saW5lIHN0eWxlIHRvIG91ciBpbmxpbmUKICAgICAvLyBjaGlsZHJlbi4KICAg
ICB2aXJ0dWFsIFJlbmRlckJsb2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwotICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVGaXJzdExldHRlcigpOworICAgIHZvaWQgdXBkYXRlRmlyc3RMZXR0ZXIo
KTsKIAogICAgIGJvb2wgaW5Sb290QmxvY2tDb250ZXh0KCkgY29uc3Q7CiAKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQm94LmNwcAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTYsNiArMTE2LDcgQEAgdm9pZCBSZW5k
ZXJCb3g6OnNldFN0eWxlKFJlbmRlclN0eWxlKiBuZQogICAgICAgICAgICAgaWYgKHdhc0Zsb2F0
aW5nICYmIGlzRmxvYXRpbmcoKSkKICAgICAgICAgICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0
KHRydWUpOwogICAgICAgICAgICAgbV9sYXllciA9IG5ldyAocmVuZGVyQXJlbmEoKSkgUmVuZGVy
TGF5ZXIodGhpcyk7CisgICAgICAgICAgICBzZXRIYXNMYXllcih0cnVlKTsKICAgICAgICAgICAg
IG1fbGF5ZXItPmluc2VydE9ubHlUaGlzTGF5ZXIoKTsKICAgICAgICAgICAgIGlmIChwYXJlbnQo
KSAmJiAhbmVlZHNMYXlvdXQoKSAmJiBjb250YWluaW5nQmxvY2soKSkKICAgICAgICAgICAgICAg
ICBtX2xheWVyLT51cGRhdGVMYXllclBvc2l0aW9ucygpOwpAQCAtMTI0LDYgKzEyNSw3IEBAIHZv
aWQgUmVuZGVyQm94OjpzZXRTdHlsZShSZW5kZXJTdHlsZSogbmUKICAgICAgICAgQVNTRVJUKG1f
bGF5ZXItPnBhcmVudCgpKTsKICAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gbV9sYXllcjsK
ICAgICAgICAgbV9sYXllciA9IDA7CisgICAgICAgIHNldEhhc0xheWVyKGZhbHNlKTsKICAgICAg
ICAgbGF5ZXItPnJlbW92ZU9ubHlUaGlzTGF5ZXIoKTsKICAgICAgICAgaWYgKHdhc0Zsb2F0aW5n
ICYmIGlzRmxvYXRpbmcoKSkKICAgICAgICAgICAgIHNldENoaWxkTmVlZHNMYXlvdXQodHJ1ZSk7
CkBAIC0xNjYsNiArMTY4LDIyIEBAIHZvaWQgUmVuZGVyQm94OjpkZXN0cm95KCkKICAgICAgICAg
bGF5ZXItPmRlc3Ryb3koYXJlbmEpOwogfQogCitpbnQgUmVuZGVyQm94OjptaW5QcmVmV2lkdGgo
KSBjb25zdAoreworICAgIGlmIChwcmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgY29uc3RfY2Fz
dDxSZW5kZXJCb3gqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICAgICAgCisgICAgcmV0
dXJuIG1fbWluUHJlZldpZHRoOworfQorCitpbnQgUmVuZGVyQm94OjptYXhQcmVmV2lkdGgoKSBj
b25zdAoreworICAgIGlmIChwcmVmV2lkdGhzRGlydHkoKSkKKyAgICAgICAgY29uc3RfY2FzdDxS
ZW5kZXJCb3gqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICAgICAgCisgICAgcmV0dXJu
IG1fbWF4UHJlZldpZHRoOworfQorCiBpbnQgUmVuZGVyQm94OjpvdmVycmlkZVNpemUoKSBjb25z
dAogewogICAgIGlmICghaGFzT3ZlcnJpZGVTaXplKCkpCkBAIC0xMDU3LDcgKzEwNzUsNyBAQCB2
b2lkIFJlbmRlckJveDo6Y2FsY1dpZHRoKCkKICAgICAgICAgbV9tYXJnaW5MZWZ0ID0gbWFyZ2lu
TGVmdC5jYWxjTWluVmFsdWUoY29udGFpbmVyV2lkdGgpOwogICAgICAgICBtX21hcmdpblJpZ2h0
ID0gbWFyZ2luUmlnaHQuY2FsY01pblZhbHVlKGNvbnRhaW5lcldpZHRoKTsKICAgICAgICAgaWYg
KHRyZWF0QXNSZXBsYWNlZCkKLSAgICAgICAgICAgIG1fd2lkdGggPSBtYXgod2lkdGgudmFsdWUo
KSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgpICsgcGFkZGlu
Z1JpZ2h0KCksIG1fbWluUHJlZldpZHRoKTsKKyAgICAgICAgICAgIG1fd2lkdGggPSBtYXgod2lk
dGgudmFsdWUoKSArIGJvcmRlckxlZnQoKSArIGJvcmRlclJpZ2h0KCkgKyBwYWRkaW5nTGVmdCgp
ICsgcGFkZGluZ1JpZ2h0KCksIG1pblByZWZXaWR0aCgpKTsKIAogICAgICAgICByZXR1cm47CiAg
ICAgfQpAQCAtMTA4Niw4ICsxMTA0LDggQEAgdm9pZCBSZW5kZXJCb3g6OmNhbGNXaWR0aCgpCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAobV93aWR0aCA8IG1fbWluUHJlZldpZHRoICYmIHN0
cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSkgewotICAgICAgICBtX3dpZHRoID0gbV9taW5Q
cmVmV2lkdGg7CisgICAgaWYgKHN0cmV0Y2hlc1RvTWluSW50cmluc2ljV2lkdGgoKSkgeworICAg
ICAgICBtX3dpZHRoID0gbWF4KG1fd2lkdGgsIG1pblByZWZXaWR0aCgpKTsKICAgICAgICAgd2lk
dGggPSBMZW5ndGgobV93aWR0aCwgRml4ZWQpOwogICAgIH0KIApAQCAtMTEyOCw4ICsxMTQ2LDgg
QEAgaW50IFJlbmRlckJveDo6Y2FsY1dpZHRoVXNpbmcoV2lkdGhUeXBlIAogICAgICAgICAgICAg
d2lkdGggPSBjdyAtIG1hcmdpbkxlZnQgLSBtYXJnaW5SaWdodDsKIAogICAgICAgICBpZiAoc2l6
ZXNUb0ludHJpbnNpY1dpZHRoKHdpZHRoVHlwZSkpIHsKLSAgICAgICAgICAgIHdpZHRoID0gbWF4
KHdpZHRoLCBtX21pblByZWZXaWR0aCk7Ci0gICAgICAgICAgICB3aWR0aCA9IG1pbih3aWR0aCwg
bV9tYXhQcmVmV2lkdGgpOworICAgICAgICAgICAgd2lkdGggPSBtYXgod2lkdGgsIG1pblByZWZX
aWR0aCgpKTsKKyAgICAgICAgICAgIHdpZHRoID0gbWluKHdpZHRoLCBtYXhQcmVmV2lkdGgoKSk7
CiAgICAgICAgIH0KICAgICB9IGVsc2UKICAgICAgICAgd2lkdGggPSBjYWxjQm9yZGVyQm94V2lk
dGgody5jYWxjVmFsdWUoY3cpKTsKQEAgLTE2NjQsOCArMTY4Miw4IEBAIHZvaWQgUmVuZGVyQm94
OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmICht
X3dpZHRoIDwgbV9taW5QcmVmV2lkdGggLSBib3JkZXJzUGx1c1BhZGRpbmcgJiYgc3RyZXRjaGVz
VG9NaW5JbnRyaW5zaWNXaWR0aCgpKQotICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFs
dWVzKExlbmd0aChtX21pblByZWZXaWR0aCAtIGJvcmRlcnNQbHVzUGFkZGluZywgRml4ZWQpLCBj
b250YWluZXJCbG9jaywgY29udGFpbmVyRGlyZWN0aW9uLAorICAgIGlmIChzdHJldGNoZXNUb01p
bkludHJpbnNpY1dpZHRoKCkgJiYgbV93aWR0aCA8IG1pblByZWZXaWR0aCgpIC0gYm9yZGVyc1Bs
dXNQYWRkaW5nKQorICAgICAgICBjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmFsdWVzKExlbmd0aCht
aW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZywgRml4ZWQpLCBjb250YWluZXJCbG9j
aywgY29udGFpbmVyRGlyZWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRhaW5lcldpZHRoLCBib3JkZXJzUGx1c1BhZGRpbmcsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbGVmdCwgcmlnaHQsIG1hcmdpbkxlZnQsIG1hcmdpblJpZ2h0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fd2lkdGgsIG1fbWFyZ2lu
TGVmdCwgbV9tYXJnaW5SaWdodCwgbV94KTsKQEAgLTE3OTgsOCArMTgxNiw4IEBAIHZvaWQgUmVu
ZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9udGFsVmEKICAgICAgICAgICAgIGludCByaWdodFZh
bHVlID0gcmlnaHQuY2FsY1ZhbHVlKGNvbnRhaW5lcldpZHRoKTsKIAogICAgICAgICAgICAgLy8g
RklYTUU6IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZlIHNocmluay10by1maXQgaW4gb25lIHN0
ZXA/Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lkdGggPSBtX21heFByZWZXaWR0aCAtIGJv
cmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGludCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1f
bWluUHJlZldpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5nOworICAgICAgICAgICAgaW50IHByZWZl
cnJlZFdpZHRoID0gbWF4UHJlZldpZHRoKCkgLSBib3JkZXJzUGx1c1BhZGRpbmc7CisgICAgICAg
ICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5QcmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVz
UGFkZGluZzsKICAgICAgICAgICAgIGludCBhdmFpbGFibGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNl
IC0gcmlnaHRWYWx1ZTsKICAgICAgICAgICAgIHdpZHRoVmFsdWUgPSBtaW4obWF4KHByZWZlcnJl
ZE1pbldpZHRoLCBhdmFpbGFibGVXaWR0aCksIHByZWZlcnJlZFdpZHRoKTsKICAgICAgICAgICAg
IGxlZnRWYWx1ZSA9IGF2YWlsYWJsZVNwYWNlIC0gKHdpZHRoVmFsdWUgKyByaWdodFZhbHVlKTsK
QEAgLTE4MDgsOCArMTgyNiw4IEBAIHZvaWQgUmVuZGVyQm94OjpjYWxjQWJzb2x1dGVIb3Jpem9u
dGFsVmEKICAgICAgICAgICAgIGxlZnRWYWx1ZSA9IGxlZnQuY2FsY1ZhbHVlKGNvbnRhaW5lcldp
ZHRoKTsKIAogICAgICAgICAgICAgLy8gRklYTUU6IHdvdWxkIGl0IGJlIGJldHRlciB0byBoYXZl
IHNocmluay10by1maXQgaW4gb25lIHN0ZXA/Ci0gICAgICAgICAgICBpbnQgcHJlZmVycmVkV2lk
dGggPSBtX21heFByZWZXaWR0aCAtIGJvcmRlcnNQbHVzUGFkZGluZzsKLSAgICAgICAgICAgIGlu
dCBwcmVmZXJyZWRNaW5XaWR0aCA9IG1fbWluUHJlZldpZHRoIC0gYm9yZGVyc1BsdXNQYWRkaW5n
OworICAgICAgICAgICAgaW50IHByZWZlcnJlZFdpZHRoID0gbWF4UHJlZldpZHRoKCkgLSBib3Jk
ZXJzUGx1c1BhZGRpbmc7CisgICAgICAgICAgICBpbnQgcHJlZmVycmVkTWluV2lkdGggPSBtaW5Q
cmVmV2lkdGgoKSAtIGJvcmRlcnNQbHVzUGFkZGluZzsKICAgICAgICAgICAgIGludCBhdmFpbGFi
bGVXaWR0aCA9IGF2YWlsYWJsZVNwYWNlIC0gbGVmdFZhbHVlOwogICAgICAgICAgICAgd2lkdGhW
YWx1ZSA9IG1pbihtYXgocHJlZmVycmVkTWluV2lkdGgsIGF2YWlsYWJsZVdpZHRoKSwgcHJlZmVy
cmVkV2lkdGgpOwogICAgICAgICB9IGVsc2UgaWYgKGxlZnRJc0F1dG8gJiYgIXdpZHRoLmlzQXV0
bygpICYmICFyaWdodElzQXV0bykgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHJldmlzaW9u
IDIxMDgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQm94LmgJKHdvcmtpbmcgY29weSkK
QEAgLTQyLDggKzQyLDggQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsK
IAotICAgIHZpcnR1YWwgaW50IG1pblByZWZXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluUHJl
ZldpZHRoOyB9Ci0gICAgdmlydHVhbCBpbnQgbWF4UHJlZldpZHRoKCkgY29uc3QgeyByZXR1cm4g
bV9tYXhQcmVmV2lkdGg7IH0KKyAgICB2aXJ0dWFsIGludCBtaW5QcmVmV2lkdGgoKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGludCBtYXhQcmVmV2lkdGgoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgaW50
IG92ZXJyaWRlU2l6ZSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IG92ZXJyaWRlV2lkdGgoKSBj
b25zdDsKQEAgLTE4Miw2ICsxODIsMTEgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNhbGNBYnNvbHV0
ZVZlcnRpY2FsUmVwbGFjZWQoKTsKICAgICB2b2lkIGNhbGNBYnNvbHV0ZUhvcml6b250YWxSZXBs
YWNlZCgpOwogCisgICAgLy8gVGhpcyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtIGFu
ZCBtYXhpbXVtIHByZWZlcnJlZCB3aWR0aHMgZm9yIGFuIG9iamVjdC4KKyAgICAvLyBUaGVzZSB2
YWx1ZXMgYXJlIHVzZWQgaW4gc2hyaW5rLXRvLWZpdCBsYXlvdXQgc3lzdGVtcy4KKyAgICAvLyBU
aGVzZSBpbmNsdWRlIHRhYmxlcywgcG9zaXRpb25lZCBvYmplY3RzLCBmbG9hdHMgYW5kIGZsZXhp
YmxlIGJveGVzLgorICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpID0gMDsKKwogcHJv
dGVjdGVkOgogICAgIC8vIFRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIGNvbnRlbnRzICsgYm9yZGVy
cyArIHBhZGRpbmcuCiAgICAgaW50IG1fd2lkdGg7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJDb250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDIxMDgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyQ29udGFpbmVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTU2LDE0ICsxNTYsMTQgQEAgdm9p
ZCBSZW5kZXJDb250YWluZXI6OmFkZENoaWxkKFJlbmRlck9iagogICAgIH0KIH0KIAotUmVuZGVy
T2JqZWN0KiBSZW5kZXJDb250YWluZXI6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIG9s
ZENoaWxkKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJDb250YWluZXI6OnJlbW92ZUNoaWxkTm9kZShS
ZW5kZXJPYmplY3QqIG9sZENoaWxkLCBib29sIGZ1bGxSZW1vdmUpCiB7CiAgICAgQVNTRVJUKG9s
ZENoaWxkLT5wYXJlbnQoKSA9PSB0aGlzKTsKIAogICAgIC8vIFNvIHRoYXQgd2UnbGwgZ2V0IHRo
ZSBhcHByb3ByaWF0ZSBkaXJ0eSBiaXQgc2V0IChlaXRoZXIgdGhhdCBhIG5vcm1hbCBmbG93IGNo
aWxkIGdvdCB5YW5rZWQgb3IKICAgICAvLyB0aGF0IGEgcG9zaXRpb25lZCBjaGlsZCBnb3QgeWFu
a2VkKS4gIFdlIGFsc28gcmVwYWludCwgc28gdGhhdCB0aGUgYXJlYSBleHBvc2VkIHdoZW4gdGhl
IGNoaWxkCiAgICAgLy8gZGlzYXBwZWFycyBnZXRzIHJlcGFpbnRlZCBwcm9wZXJseS4KLSAgICBp
ZiAoIWRvY3VtZW50QmVpbmdEZXN0cm95ZWQoKSkgeworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rl
c3Ryb3llZCgpICYmIGZ1bGxSZW1vdmUpIHsKICAgICAgICAgb2xkQ2hpbGQtPnNldE5lZWRzTGF5
b3V0QW5kUHJlZldpZHRoc1JlY2FsYygpOwogICAgICAgICBvbGRDaGlsZC0+cmVwYWludCgpOwog
ICAgIH0KQEAgLTE3MSw3ICsxNzEsNyBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckNvbnRhaW5lcjo6
cmVtb3ZlQ2hpCiAgICAgLy8gSWYgd2UgaGF2ZSBhIGxpbmUgYm94IHdyYXBwZXIsIGRlbGV0ZSBp
dC4KICAgICBvbGRDaGlsZC0+ZGVsZXRlTGluZUJveFdyYXBwZXIoKTsKIAotICAgIGlmICghZG9j
dW1lbnRCZWluZ0Rlc3Ryb3llZCgpKSB7CisgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJveWVk
KCkgJiYgZnVsbFJlbW92ZSkgewogICAgICAgICAvLyBpZiB3ZSByZW1vdmUgdmlzaWJsZSBjaGls
ZCBmcm9tIGFuIGludmlzaWJsZSBwYXJlbnQsIHdlIGRvbid0IGtub3cgdGhlIGxheWVyIHZpc2li
aWxpdHkgYW55IG1vcmUKICAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gMDsKICAgICAgICAg
aWYgKG1fc3R5bGUtPnZpc2liaWxpdHkoKSAhPSBWSVNJQkxFICYmIG9sZENoaWxkLT5zdHlsZSgp
LT52aXNpYmlsaXR5KCkgPT0gVklTSUJMRSAmJiAhb2xkQ2hpbGQtPmhhc0xheWVyKCkpIHsKQEAg
LTM3NSw3ICszNzUsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6dXBkYXRlUHNldWRvQ2hpbGRG
CiB9CiAKIAotdm9pZCBSZW5kZXJDb250YWluZXI6OmFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmpl
Y3QqIG5ld0NoaWxkKQordm9pZCBSZW5kZXJDb250YWluZXI6OmFwcGVuZENoaWxkTm9kZShSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBib29sIGZ1bGxBcHBlbmQpCiB7CiAgICAgQVNTRVJUKG5ld0No
aWxkLT5wYXJlbnQoKSA9PSAwKTsKICAgICBBU1NFUlQoIWlzQmxvY2tGbG93KCkgfHwgKCFuZXdD
aGlsZC0+aXNUYWJsZVNlY3Rpb24oKSAmJiAhbmV3Q2hpbGQtPmlzVGFibGVSb3coKSAmJiAhbmV3
Q2hpbGQtPmlzVGFibGVDZWxsKCkpKTsKQEAgLTM5MSwzNSArMzkxLDM3IEBAIHZvaWQgUmVuZGVy
Q29udGFpbmVyOjphcHBlbmRDaGlsZE5vZGUoUmUKIAogICAgIG1fbGFzdENoaWxkID0gbmV3Q2hp
bGQ7CiAgICAgCi0gICAgLy8gS2VlcCBvdXIgbGF5ZXIgaGllcmFyY2h5IHVwZGF0ZWQuICBPcHRp
bWl6ZSBmb3IgdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgYW55IGNoaWxkcmVu
Ci0gICAgLy8gYW5kIGRvbid0IGhhdmUgYSBsYXllciBhdHRhY2hlZCB0byBvdXJzZWx2ZXMuCi0g
ICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gMDsKLSAgICBpZiAobmV3Q2hpbGQtPmZpcnN0Q2hpbGQo
KSB8fCBuZXdDaGlsZC0+aGFzTGF5ZXIoKSkgewotICAgICAgICBsYXllciA9IGVuY2xvc2luZ0xh
eWVyKCk7Ci0gICAgICAgIG5ld0NoaWxkLT5hZGRMYXllcnMobGF5ZXIsIG5ld0NoaWxkKTsKLSAg
ICB9Ci0KLSAgICAvLyBpZiB0aGUgbmV3IGNoaWxkIGlzIHZpc2libGUgYnV0IHRoaXMgb2JqZWN0
IHdhcyBub3QsIHRlbGwgdGhlIGxheWVyIGl0IGhhcyBzb21lIHZpc2libGUgY29udGVudAotICAg
IC8vIHRoYXQgbmVlZHMgdG8gYmUgZHJhd24gYW5kIGxheWVyIHZpc2liaWxpdHkgb3B0aW1pemF0
aW9uIGNhbid0IGJlIHVzZWQKLSAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lC
TEUgJiYgbmV3Q2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFuZXdD
aGlsZC0+aGFzTGF5ZXIoKSkgewotICAgICAgICBpZiAoIWxheWVyKQorICAgIGlmIChmdWxsQXBw
ZW5kKSB7CisgICAgICAgIC8vIEtlZXAgb3VyIGxheWVyIGhpZXJhcmNoeSB1cGRhdGVkLiAgT3B0
aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3aGVyZSB3ZSBkb24ndCBoYXZlIGFueSBjaGlsZHJl
bgorICAgICAgICAvLyBhbmQgZG9uJ3QgaGF2ZSBhIGxheWVyIGF0dGFjaGVkIHRvIG91cnNlbHZl
cy4KKyAgICAgICAgUmVuZGVyTGF5ZXIqIGxheWVyID0gMDsKKyAgICAgICAgaWYgKG5ld0NoaWxk
LT5maXJzdENoaWxkKCkgfHwgbmV3Q2hpbGQtPmhhc0xheWVyKCkpIHsKICAgICAgICAgICAgIGxh
eWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAgaWYgKGxheWVyKQotICAgICAgICAgICAg
bGF5ZXItPnNldEhhc1Zpc2libGVDb250ZW50KHRydWUpOworICAgICAgICAgICAgbmV3Q2hpbGQt
PmFkZExheWVycyhsYXllciwgbmV3Q2hpbGQpOworICAgICAgICB9CisKKyAgICAgICAgLy8gaWYg
dGhlIG5ldyBjaGlsZCBpcyB2aXNpYmxlIGJ1dCB0aGlzIG9iamVjdCB3YXMgbm90LCB0ZWxsIHRo
ZSBsYXllciBpdCBoYXMgc29tZSB2aXNpYmxlIGNvbnRlbnQKKyAgICAgICAgLy8gdGhhdCBuZWVk
cyB0byBiZSBkcmF3biBhbmQgbGF5ZXIgdmlzaWJpbGl0eSBvcHRpbWl6YXRpb24gY2FuJ3QgYmUg
dXNlZAorICAgICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgJiYgbmV3
Q2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFuZXdDaGlsZC0+aGFz
TGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAgICAgICAgICBsYXll
ciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgICAgICAgICBpZiAobGF5ZXIpCisgICAgICAgICAg
ICAgICAgbGF5ZXItPnNldEhhc1Zpc2libGVDb250ZW50KHRydWUpOworICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoIW5ld0NoaWxkLT5pc0Zsb2F0aW5nT3JQb3NpdGlvbmVkKCkgJiYg
Y2hpbGRyZW5JbmxpbmUoKSkKKyAgICAgICAgICAgIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxk
KG5ld0NoaWxkKTsKICAgICB9Ci0gICAgCisKICAgICBuZXdDaGlsZC0+c2V0TmVlZHNMYXlvdXRB
bmRQcmVmV2lkdGhzUmVjYWxjKCk7IC8vIEdvZXMgdXAgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGll
cmFyY2h5LgogICAgIGlmICghbm9ybWFsQ2hpbGROZWVkc0xheW91dCgpKQogICAgICAgICBzZXRD
aGlsZE5lZWRzTGF5b3V0KHRydWUpOyAvLyBXZSBtYXkgc3VwcGx5IHRoZSBzdGF0aWMgcG9zaXRp
b24gZm9yIGFuIGFic29sdXRlIHBvc2l0aW9uZWQgY2hpbGQuCiAgICAgCi0gICAgaWYgKCFuZXdD
aGlsZC0+aXNGbG9hdGluZ09yUG9zaXRpb25lZCgpICYmIGNoaWxkcmVuSW5saW5lKCkpCi0gICAg
ICAgIGRpcnR5TGluZXNGcm9tQ2hhbmdlZENoaWxkKG5ld0NoaWxkKTsKLSAgICAKICAgICBpZiAo
QVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuYWJsZWQoKSkKICAgICAgICAgZG9jdW1lbnQo
KS0+YXhPYmplY3RDYWNoZSgpLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7CiB9CiAKLXZvaWQgUmVu
ZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVy
T2JqZWN0KiBiZWZvcmVDaGlsZCkKK3ZvaWQgUmVuZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCwgYm9vbCBm
dWxsSW5zZXJ0KQogewogICAgIGlmICghYmVmb3JlQ2hpbGQpIHsKICAgICAgICAgYXBwZW5kQ2hp
bGROb2RlKGNoaWxkKTsKQEAgLTQ0NCwzMCArNDQ2LDMzIEBAIHZvaWQgUmVuZGVyQ29udGFpbmVy
OjppbnNlcnRDaGlsZE5vZGUoUmUKIAogICAgIGNoaWxkLT5zZXRQYXJlbnQodGhpcyk7CiAgICAg
Ci0gICAgLy8gS2VlcCBvdXIgbGF5ZXIgaGllcmFyY2h5IHVwZGF0ZWQuICBPcHRpbWl6ZSBmb3Ig
dGhlIGNvbW1vbiBjYXNlIHdoZXJlIHdlIGRvbid0IGhhdmUgYW55IGNoaWxkcmVuCi0gICAgLy8g
YW5kIGRvbid0IGhhdmUgYSBsYXllciBhdHRhY2hlZCB0byBvdXJzZWx2ZXMuCi0gICAgUmVuZGVy
TGF5ZXIqIGxheWVyID0gMDsKLSAgICBpZiAoY2hpbGQtPmZpcnN0Q2hpbGQoKSB8fCBjaGlsZC0+
aGFzTGF5ZXIoKSkgewotICAgICAgICBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7Ci0gICAgICAg
IGNoaWxkLT5hZGRMYXllcnMobGF5ZXIsIGNoaWxkKTsKLSAgICB9Ci0KLSAgICAvLyBpZiB0aGUg
bmV3IGNoaWxkIGlzIHZpc2libGUgYnV0IHRoaXMgb2JqZWN0IHdhcyBub3QsIHRlbGwgdGhlIGxh
eWVyIGl0IGhhcyBzb21lIHZpc2libGUgY29udGVudAotICAgIC8vIHRoYXQgbmVlZHMgdG8gYmUg
ZHJhd24gYW5kIGxheWVyIHZpc2liaWxpdHkgb3B0aW1pemF0aW9uIGNhbid0IGJlIHVzZWQKLSAg
ICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUgJiYgY2hpbGQtPnN0eWxlKCkt
PnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYmICFjaGlsZC0+aGFzTGF5ZXIoKSkgewotICAgICAg
ICBpZiAoIWxheWVyKQorICAgIGlmIChmdWxsSW5zZXJ0KSB7CisgICAgICAgIC8vIEtlZXAgb3Vy
IGxheWVyIGhpZXJhcmNoeSB1cGRhdGVkLiAgT3B0aW1pemUgZm9yIHRoZSBjb21tb24gY2FzZSB3
aGVyZSB3ZSBkb24ndCBoYXZlIGFueSBjaGlsZHJlbgorICAgICAgICAvLyBhbmQgZG9uJ3QgaGF2
ZSBhIGxheWVyIGF0dGFjaGVkIHRvIG91cnNlbHZlcy4KKyAgICAgICAgUmVuZGVyTGF5ZXIqIGxh
eWVyID0gMDsKKyAgICAgICAgaWYgKGNoaWxkLT5maXJzdENoaWxkKCkgfHwgY2hpbGQtPmhhc0xh
eWVyKCkpIHsKICAgICAgICAgICAgIGxheWVyID0gZW5jbG9zaW5nTGF5ZXIoKTsKLSAgICAgICAg
aWYgKGxheWVyKQotICAgICAgICAgICAgbGF5ZXItPnNldEhhc1Zpc2libGVDb250ZW50KHRydWUp
OworICAgICAgICAgICAgY2hpbGQtPmFkZExheWVycyhsYXllciwgY2hpbGQpOworICAgICAgICB9
CisKKyAgICAgICAgLy8gaWYgdGhlIG5ldyBjaGlsZCBpcyB2aXNpYmxlIGJ1dCB0aGlzIG9iamVj
dCB3YXMgbm90LCB0ZWxsIHRoZSBsYXllciBpdCBoYXMgc29tZSB2aXNpYmxlIGNvbnRlbnQKKyAg
ICAgICAgLy8gdGhhdCBuZWVkcyB0byBiZSBkcmF3biBhbmQgbGF5ZXIgdmlzaWJpbGl0eSBvcHRp
bWl6YXRpb24gY2FuJ3QgYmUgdXNlZAorICAgICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgp
ICE9IFZJU0lCTEUgJiYgY2hpbGQtPnN0eWxlKCktPnZpc2liaWxpdHkoKSA9PSBWSVNJQkxFICYm
ICFjaGlsZC0+aGFzTGF5ZXIoKSkgeworICAgICAgICAgICAgaWYgKCFsYXllcikKKyAgICAgICAg
ICAgICAgICBsYXllciA9IGVuY2xvc2luZ0xheWVyKCk7CisgICAgICAgICAgICBpZiAobGF5ZXIp
CisgICAgICAgICAgICAgICAgbGF5ZXItPnNldEhhc1Zpc2libGVDb250ZW50KHRydWUpOworICAg
ICAgICB9CisKKyAgICAgICAgCisgICAgICAgIGlmICghY2hpbGQtPmlzRmxvYXRpbmcoKSAmJiBj
aGlsZHJlbklubGluZSgpKQorICAgICAgICAgICAgZGlydHlMaW5lc0Zyb21DaGFuZ2VkQ2hpbGQo
Y2hpbGQpOwogICAgIH0KIAogICAgIGNoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNS
ZWNhbGMoKTsKICAgICBpZiAoIW5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSkKICAgICAgICAgc2V0
Q2hpbGROZWVkc0xheW91dCh0cnVlKTsgLy8gV2UgbWF5IHN1cHBseSB0aGUgc3RhdGljIHBvc2l0
aW9uIGZvciBhbiBhYnNvbHV0ZSBwb3NpdGlvbmVkIGNoaWxkLgogICAgIAotICAgIGlmICghY2hp
bGQtPmlzRmxvYXRpbmcoKSAmJiBjaGlsZHJlbklubGluZSgpKQotICAgICAgICBkaXJ0eUxpbmVz
RnJvbUNoYW5nZWRDaGlsZChjaGlsZCk7Ci0gICAgCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGU6OmFj
Y2Vzc2liaWxpdHlFbmFibGVkKCkpCiAgICAgICAgIGRvY3VtZW50KCktPmF4T2JqZWN0Q2FjaGUo
KS0+Y2hpbGRyZW5DaGFuZ2VkKHRoaXMpOwogfQpAQCAtNDc1LDcgKzQ4MCw2IEBAIHZvaWQgUmVu
ZGVyQ29udGFpbmVyOjppbnNlcnRDaGlsZE5vZGUoUmUKIHZvaWQgUmVuZGVyQ29udGFpbmVyOjps
YXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIXByZWZX
aWR0aHNEaXJ0eSgpKTsKIAogICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBtX2ZpcnN0Q2hpbGQ7
CiAgICAgd2hpbGUgKGNoaWxkKSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250
YWluZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIu
aAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb250YWluZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDE0IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGVzdHJveSgpOwogICAgIHZvaWQgZGVzdHJveUxlZnRvdmVyQ2hpbGRyZW4oKTsKIAot
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0Kik7
Ci0gICAgdmlydHVhbCB2b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqKTsKLSAgICB2
aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQsIFJlbmRlck9i
amVjdCogYmVmb3JlKTsKLQorICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsUmVtb3ZlID0gdHJ1ZSk7CisgICAgdmlydHVhbCB2
b2lkIGFwcGVuZENoaWxkTm9kZShSZW5kZXJPYmplY3QqLCBib29sIGZ1bGxBcHBlbmQgPSB0cnVl
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0Q2hpbGROb2RlKFJlbmRlck9iamVjdCogY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlLCBib29sIGZ1bGxJbnNlcnQgPSB0cnVlKTsKKyAgICAKKyAg
ICAvLyBEZXNpZ25lZCBmb3Igc3BlZWQuICBEb24ndCB3YXN0ZSB0aW1lIGRvaW5nIGEgYnVuY2gg
b2Ygd29yayBsaWtlIGxheWVyIHVwZGF0aW5nIGFuZCByZXBhaW50aW5nIHdoZW4gd2Uga25vdyB0
aGF0IG91cgorICAgIC8vIGNoYW5nZSBpbiBwYXJlbnRhZ2UgaXMgbm90IGdvaW5nIHRvIGFmZmVj
dCBhbnl0aGluZy4KKyAgICB2aXJ0dWFsIHZvaWQgbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3Qq
IGNoaWxkKSB7IGFwcGVuZENoaWxkTm9kZShjaGlsZC0+cGFyZW50KCktPnJlbW92ZUNoaWxkTm9k
ZShjaGlsZCwgZmFsc2UpLCBmYWxzZSk7IH0KKyAgICAKICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0
KCk7CiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCkgeyBzZXRQcmVmV2lkdGhzRGly
dHkoZmFsc2UpOyB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCShyZXZp
c2lvbiAyMTA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDQsMTAgKzI0NCwxNyBAQCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IFJl
bmRlckNvdW50ZXI6Om9yCiAgICAgcmV0dXJuIHRleHQuaW1wbCgpOwogfQogCi12b2lkIFJlbmRl
ckNvdW50ZXI6OmNhbGNQcmVmV2lkdGhzKCkKK3ZvaWQgUmVuZGVyQ291bnRlcjo6ZGlydHlMaW5l
Qm94ZXMoYm9vbCBmdWxsTGF5b3V0LCBib29sIGR1bW15KQoreworICAgIGlmIChwcmVmV2lkdGhz
RGlydHkoKSkKKyAgICAgICAgY2FsY1ByZWZXaWR0aHMoMCk7CisgICAgUmVuZGVyVGV4dDo6ZGly
dHlMaW5lQm94ZXMoZnVsbExheW91dCwgZHVtbXkpOworfQorCit2b2lkIFJlbmRlckNvdW50ZXI6
OmNhbGNQcmVmV2lkdGhzKGludCBsZWFkKQogewogICAgIHNldFRleHRJbnRlcm5hbChvcmlnaW5h
bFRleHQoKSk7Ci0gICAgUmVuZGVyVGV4dDo6Y2FsY1ByZWZXaWR0aHMoKTsKKyAgICBSZW5kZXJU
ZXh0OjpjYWxjUHJlZldpZHRocyhsZWFkKTsKIH0KIAogc3RhdGljIHZvaWQgZGVzdHJveUNvdW50
ZXJOb2RlQ2hpbGRyZW4oQXRvbWljU3RyaW5nSW1wbCogaWRlbnRpZmllciwgQ291bnRlck5vZGUq
IG5vZGUpCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCShyZXZpc2lvbiAyMTA4MikK
KysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MzUsNyArMzUsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1l
KCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGlzUmVuZGVyQ291bnRlcigpIGNvbnN0OwogICAg
IHZpcnR1YWwgUGFzc1JlZlB0cjxTdHJpbmdJbXBsPiBvcmlnaW5hbFRleHQoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKKyAgICAKKyAgICB2b2lkIGRpcnR5TGlu
ZUJveGVzKGJvb2wsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocyhpbnQg
bGVhZFdpZHRoKTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZXMoUmVuZGVy
T2JqZWN0Kik7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250
cm9sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2Fk
Q29udHJvbC5jcHAJKHJldmlzaW9uIDIxMDgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RmlsZVVwbG9hZENvbnRyb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMzEsNiArMjMxLDggQEAg
dm9pZCBSZW5kZXJGaWxlVXBsb2FkQ29udHJvbDo6cGFpbnRPYmplYwogCiB2b2lkIFJlbmRlckZp
bGVVcGxvYWRDb250cm9sOjpjYWxjUHJlZldpZHRocygpCiB7CisgICAgQVNTRVJUKHByZWZXaWR0
aHNEaXJ0eSgpKTsKKwogICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBtX21heFByZWZXaWR0
aCA9IDA7CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsZXhpYmxlQm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbGV4aWJsZUJveC5jcHAJKHJl
dmlzaW9uIDIxMDgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRmxleGlibGVCb3guY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTksMzEgKzExOSwxNyBAQCB2b2lkIFJlbmRlckZsZXhpYmxl
Qm94OjpjYWxjSG9yaXpvbnRhbFByCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQog
Ci0gICAgICAgIGludCBtYXJnaW49MDsKLSAgICAgICAgLy8gIGF1dG8gbWFyZ2lucyBkb24ndCBh
ZmZlY3QgbWlud2lkdGgKLQorICAgICAgICAvLyBBIG1hcmdpbiBiYXNpY2FsbHkgaGFzIHRocmVl
IHR5cGVzOiBmaXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1dG8gKHZhcmlhYmxlKS4KKyAgICAgICAg
Ly8gQXV0byBhbmQgcGVyY2VudGFnZSBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1
dGluZyBtaW4vbWF4IHdpZHRoLgorICAgICAgICAvLyBGaXhlZCBtYXJnaW5zIGNhbiBiZSBhZGRl
ZCBpbiBhcyBpcy4KICAgICAgICAgTGVuZ3RoIG1sID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpbkxl
ZnQoKTsKICAgICAgICAgTGVuZ3RoIG1yID0gY2hpbGQtPnN0eWxlKCktPm1hcmdpblJpZ2h0KCk7
Ci0KLSAgICAgICAgLy8gQ2FsbCBjYWxjV2lkdGggb24gdGhlIGNoaWxkIHRvIGVuc3VyZSB0aGF0
IG91ciBtYXJnaW5zIGFyZQotICAgICAgICAvLyB1cCB0byBkYXRlLiAgVGhpcyBtZXRob2QgY2Fu
IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGNoaWxkIGhhcyBhY3R1YWxseQotICAgICAgICAvLyBjYWxj
dWxhdGVkIGl0cyBtYXJnaW5zICh3aGljaCBhcmUgY29tcHV0ZWQgaW5zaWRlIGNhbGNXaWR0aCku
Ci0gICAgICAgIGNoaWxkLT5jYWxjV2lkdGgoKTsKLQotICAgICAgICBpZiAoIW1sLmlzQXV0bygp
ICYmICFtci5pc0F1dG8oKSkgewotICAgICAgICAgICAgaWYgKCFjaGlsZC0+c3R5bGUoKS0+d2lk
dGgoKS5pc0F1dG8oKSkgewotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+c3R5bGUoKS0+ZGly
ZWN0aW9uKCk9PUxUUikKLSAgICAgICAgICAgICAgICAgICAgbWFyZ2luID0gY2hpbGQtPm1hcmdp
bkxlZnQoKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1hcmdp
biA9IGNoaWxkLT5tYXJnaW5SaWdodCgpOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICAgICAgbWFyZ2luID0gY2hpbGQtPm1hcmdpbkxlZnQoKStjaGlsZC0+bWFyZ2luUmlnaHQoKTsK
LSAgICAgICAgfSBlbHNlIGlmICghbWwuaXNBdXRvKCkpCi0gICAgICAgICAgICBtYXJnaW4gPSBj
aGlsZC0+bWFyZ2luTGVmdCgpOwotICAgICAgICBlbHNlIGlmICghbXIuaXNBdXRvKCkpCi0gICAg
ICAgICAgICBtYXJnaW4gPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLQotICAgICAgICBtYXJnaW4g
PSBtYXgobWFyZ2luLCAwKTsKKyAgICAgICAgaW50IG1hcmdpbiA9IDAsIG1hcmdpbkxlZnQgPSAw
LCBtYXJnaW5SaWdodCA9IDA7CisgICAgICAgIGlmIChtbC5pc0ZpeGVkKCkpCisgICAgICAgICAg
ICBtYXJnaW5MZWZ0ICs9IG1sLnZhbHVlKCk7CisgICAgICAgIGlmIChtci5pc0ZpeGVkKCkpCisg
ICAgICAgICAgICBtYXJnaW5SaWdodCArPSBtci52YWx1ZSgpOworICAgICAgICBtYXJnaW4gPSBt
YXJnaW5MZWZ0ICsgbWFyZ2luUmlnaHQ7CiAKICAgICAgICAgbV9taW5QcmVmV2lkdGggKz0gY2hp
bGQtPm1pblByZWZXaWR0aCgpICsgbWFyZ2luOwogICAgICAgICBtX21heFByZWZXaWR0aCArPSBj
aGlsZC0+bWF4UHJlZldpZHRoKCkgKyBtYXJnaW47CkBAIC0xNjMsMzMgKzE0OSwxNiBAQCB2b2lk
IFJlbmRlckZsZXhpYmxlQm94OjpjYWxjVmVydGljYWxQcmVmCiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQogCi0gICAgICAgIExlbmd0aCBtbCA9IGNoaWxkLT5zdHlsZSgpLT5tYXJn
aW5MZWZ0KCk7Ci0gICAgICAgIExlbmd0aCBtciA9IGNoaWxkLT5zdHlsZSgpLT5tYXJnaW5SaWdo
dCgpOwotCi0gICAgICAgIC8vIENhbGwgY2FsY1dpZHRoIG9uIHRoZSBjaGlsZCB0byBlbnN1cmUg
dGhhdCBvdXIgbWFyZ2lucyBhcmUKLSAgICAgICAgLy8gdXAgdG8gZGF0ZS4gIFRoaXMgbWV0aG9k
IGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBjaGlsZCBoYXMgYWN0dWFsbHkKLSAgICAgICAgLy8g
Y2FsY3VsYXRlZCBpdHMgbWFyZ2lucyAod2hpY2ggYXJlIGNvbXB1dGVkIGluc2lkZSBjYWxjV2lk
dGgpLgotICAgICAgICBpZiAobWwuaXNQZXJjZW50KCkgfHwgbXIuaXNQZXJjZW50KCkpCi0gICAg
ICAgICAgICBjYWxjV2lkdGgoKTsKLQogICAgICAgICAvLyBBIG1hcmdpbiBiYXNpY2FsbHkgaGFz
IHRocmVlIHR5cGVzOiBmaXhlZCwgcGVyY2VudGFnZSwgYW5kIGF1dG8gKHZhcmlhYmxlKS4KLSAg
ICAgICAgLy8gQXV0byBtYXJnaW5zIHNpbXBseSBiZWNvbWUgMCB3aGVuIGNvbXB1dGluZyBtaW4v
bWF4IHdpZHRoLgorICAgICAgICAvLyBBdXRvL3BlcmNlbnRhZ2UgbWFyZ2lucyBzaW1wbHkgYmVj
b21lIDAgd2hlbiBjb21wdXRpbmcgbWluL21heCB3aWR0aC4KICAgICAgICAgLy8gRml4ZWQgbWFy
Z2lucyBjYW4gYmUgYWRkZWQgaW4gYXMgaXMuCi0gICAgICAgIC8vIFBlcmNlbnRhZ2UgbWFyZ2lu
cyBhcmUgY29tcHV0ZWQgYXMgYSBwZXJjZW50YWdlIG9mIHRoZSB3aWR0aCB3ZSBjYWxjdWxhdGVk
IGluCi0gICAgICAgIC8vIHRoZSBjYWxjV2lkdGggY2FsbCBhYm92ZS4gIEluIHRoaXMgY2FzZSB3
ZSB1c2UgdGhlIGFjdHVhbCBjYWNoZWQgbWFyZ2luIHZhbHVlcyBvbgotICAgICAgICAvLyB0aGUg
UmVuZGVyT2JqZWN0IGl0c2VsZi4KKyAgICAgICAgTGVuZ3RoIG1sID0gY2hpbGQtPnN0eWxlKCkt
Pm1hcmdpbkxlZnQoKTsKKyAgICAgICAgTGVuZ3RoIG1yID0gY2hpbGQtPnN0eWxlKCktPm1hcmdp
blJpZ2h0KCk7CiAgICAgICAgIGludCBtYXJnaW4gPSAwOwogICAgICAgICBpZiAobWwuaXNGaXhl
ZCgpKQogICAgICAgICAgICAgbWFyZ2luICs9IG1sLnZhbHVlKCk7Ci0gICAgICAgIGVsc2UgaWYg
KG1sLmlzUGVyY2VudCgpKQotICAgICAgICAgICAgbWFyZ2luICs9IGNoaWxkLT5tYXJnaW5MZWZ0
KCk7Ci0KICAgICAgICAgaWYgKG1yLmlzRml4ZWQoKSkKICAgICAgICAgICAgIG1hcmdpbiArPSBt
ci52YWx1ZSgpOwotICAgICAgICBlbHNlIGlmIChtci5pc0F1dG8oKSkKLSAgICAgICAgICAgIG1h
cmdpbiArPSBjaGlsZC0+bWFyZ2luUmlnaHQoKTsKLQotICAgICAgICBtYXJnaW4gPSBtYXgobWFy
Z2luLCAwKTsKICAgICAgICAgCiAgICAgICAgIGludCB3ID0gY2hpbGQtPm1pblByZWZXaWR0aCgp
ICsgbWFyZ2luOwogICAgICAgICBtX21pblByZWZXaWR0aCA9IG1heCh3LCBtX21pblByZWZXaWR0
aCk7CkBAIC0yMDUsMTkgKzE3NCwxOSBAQCB2b2lkIFJlbmRlckZsZXhpYmxlQm94OjpjYWxjUHJl
ZldpZHRocygpCiB7CiAgICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKIAotICAgIG1fbWlu
UHJlZldpZHRoID0gMDsKLSAgICBtX21heFByZWZXaWR0aCA9IDA7CisgICAgaWYgKHN0eWxlKCkt
PndpZHRoKCkuaXNGaXhlZCgpICYmIHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSA+IDApCisgICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBjYWxjQ29udGVudEJveFdpZHRo
KHN0eWxlKCktPndpZHRoKCkudmFsdWUoKSk7CisgICAgZWxzZSB7CisgICAgICAgIG1fbWluUHJl
ZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSAwOwogCi0gICAgaWYgKGhhc011bHRpcGxlTGluZXMo
KSB8fCBpc1ZlcnRpY2FsKCkpCi0gICAgICAgIGNhbGNWZXJ0aWNhbFByZWZXaWR0aHMoKTsKLSAg
ICBlbHNlCi0gICAgICAgIGNhbGNIb3Jpem9udGFsUHJlZldpZHRocygpOworICAgICAgICBpZiAo
aGFzTXVsdGlwbGVMaW5lcygpIHx8IGlzVmVydGljYWwoKSkKKyAgICAgICAgICAgIGNhbGNWZXJ0
aWNhbFByZWZXaWR0aHMoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FsY0hvcml6b250
YWxQcmVmV2lkdGhzKCk7CiAKLSAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21heFByZWZXaWR0
aCwgbV9taW5QcmVmV2lkdGgpOworICAgICAgICBtX21heFByZWZXaWR0aCA9IG1heChtX21pblBy
ZWZXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOworICAgIH0KIAotICAgIGlmIChzdHlsZSgpLT53aWR0
aCgpLmlzRml4ZWQoKSAmJiBzdHlsZSgpLT53aWR0aCgpLnZhbHVlKCkgPiAwKQotICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gY2FsY0NvbnRlbnRCb3hXaWR0aChzdHls
ZSgpLT53aWR0aCgpLnZhbHVlKCkpOwotICAgCiAgICAgaWYgKHN0eWxlKCktPm1pbldpZHRoKCku
aXNGaXhlZCgpICYmIHN0eWxlKCktPm1pbldpZHRoKCkudmFsdWUoKSA+IDApIHsKICAgICAgICAg
bV9tYXhQcmVmV2lkdGggPSBtYXgobV9tYXhQcmVmV2lkdGgsIGNhbGNDb250ZW50Qm94V2lkdGgo
c3R5bGUoKS0+bWluV2lkdGgoKS52YWx1ZSgpKSk7CiAgICAgICAgIG1fbWluUHJlZldpZHRoID0g
bWF4KG1fbWluUHJlZldpZHRoLCBjYWxjQ29udGVudEJveFdpZHRoKHN0eWxlKCktPm1pbldpZHRo
KCkudmFsdWUoKSkpOwpAQCAtMjM4LDcgKzIwNyw2IEBAIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6
OmNhbGNQcmVmV2lkdGhzKCkKIHZvaWQgUmVuZGVyRmxleGlibGVCb3g6OmxheW91dEJsb2NrKGJv
b2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAg
QVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICBpZiAoIXJlbGF5b3V0Q2hpbGRyZW4g
JiYgcG9zQ2hpbGROZWVkc0xheW91dCgpICYmICFub3JtYWxDaGlsZE5lZWRzTGF5b3V0KCkgJiYg
IXNlbGZOZWVkc0xheW91dCgpKSB7CiAgICAgICAgIC8vIEFsbCB3ZSBoYXZlIHRvIGlzIGxheSBv
dXQgb3VyIHBvc2l0aW9uZWQgb2JqZWN0cy4KSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZvcmVpZ25PYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckZvcmVpZ25PYmplY3QuY3BwCShyZXZpc2lvbiAyMTA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckZvcmVpZ25PYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw3ICs4NSw2IEBA
IGJvb2wgUmVuZGVyRm9yZWlnbk9iamVjdDo6cmVxdWlyZXNMYXllcigKIHZvaWQgUmVuZGVyRm9y
ZWlnbk9iamVjdDo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAg
QVNTRVJUKCFwcmVmV2lkdGhzRGlydHkoKSk7CiAKICAgICBJbnRSZWN0IG9sZEJvdW5kczsKICAg
ICBJbnRSZWN0IG9sZE91dGxpbmVCb3g7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJG
cmFtZVNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRnJhbWVT
ZXQuY3BwCShyZXZpc2lvbiAyMTA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZyYW1l
U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUzLDcgKzQ1Myw2IEBAIEZyYW1lRWRnZUluZm8g
UmVuZGVyRnJhbWVTZXQ6OmVkZ2VJbmZvKCkKIHZvaWQgUmVuZGVyRnJhbWVTZXQ6OmxheW91dCgp
CiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldpZHRoc0Rp
cnR5KCkpOwogCiAgICAgaWYgKCFwYXJlbnQoKS0+aXNGcmFtZVNldCgpKSB7CiAgICAgICAgIEZy
YW1lVmlldyogdiA9IHZpZXcoKS0+ZnJhbWVWaWV3KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJIVE1MQ2FudmFzLmNwcAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJIVE1MQ2FudmFzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNiBAQCB2
b2lkIFJlbmRlckhUTUxDYW52YXM6OnBhaW50KFBhaW50SW5mbyYgCiB2b2lkIFJlbmRlckhUTUxD
YW52YXM6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VS
VCghcHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgSW50UmVjdCBvbGRCb3VuZHM7CiAgICAgSW50
UmVjdCBvbGRPdXRsaW5lQm94OwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAkocmV2
aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMwMyw3ICszMDMsNiBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludChQYWlu
dEluZm8mIHBhaW50CiB2b2lkIFJlbmRlckltYWdlOjpsYXlvdXQoKQogewogICAgIEFTU0VSVChu
ZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIXByZWZXaWR0aHNEaXJ0eSgpKTsKIAogICAgIElu
dFJlY3Qgb2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJveDsKSW5kZXg6IFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlcklubGluZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVySW5saW5lLmNwcAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJJbmxpbmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOTIsMTcgKzI5Miw2IEBA
IHZvaWQgUmVuZGVySW5saW5lOjphYnNvbHV0ZVJlY3RzKFZlY3RvcjwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdHkgLSBjb250YWluaW5nQmxvY2soKS0+eVBvcygpICsg
Y29udGludWF0aW9uKCktPnlQb3MoKSk7CiB9CiAKLXZvaWQgUmVuZGVySW5saW5lOjpjYWxjUHJl
ZldpZHRocygpCi17Ci0gICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKLQotICAgIC8vIEly
cmVsZXZhbnQsIHNpbmNlIHNvbWUgZW5jbG9zaW5nIGJsb2NrIHdpbGwgYWN0dWFsbHkgbWVhc3Vy
ZSB1cyBhbmQgb3VyIGNoaWxkcmVuLgotICAgIG1fbWluUHJlZldpZHRoID0gMDsKLSAgICBtX21h
eFByZWZXaWR0aCA9IDA7Ci0KLSAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwotfQotCiBi
b29sIFJlbmRlcklubGluZTo6cmVxdWlyZXNMYXllcigpCiB7CiAgICAgcmV0dXJuIGlzUm9vdCgp
IHx8IGlzUmVsUG9zaXRpb25lZCgpIHx8IHN0eWxlKCktPm9wYWNpdHkoKSA8IDEuMGY7CkluZGV4
OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJJbmxpbmUuaAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJJbmxpbmUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOCArNTgsNiBAQCBw
dWJsaWM6CiAKICAgICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVl
c3QmLCBIaXRUZXN0UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVz
dEFjdGlvbik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKLQogICAgIC8v
IG92ZXJyaWRlcyBSZW5kZXJPYmplY3QKICAgICB2aXJ0dWFsIGJvb2wgcmVxdWlyZXNMYXllcigp
OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkocmV2aXNpb24gMjEwODIp
CisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTE4LDYgKzExOCwxNCBAQCB2b2lkIFJlbmRlckxpc3RCb3g6OnVwZGF0ZUZyb21FbGVtZW50
KCkKICAgICAgICAgfQogICAgICAgICBtX29wdGlvbnNXaWR0aCA9IHN0YXRpY19jYXN0PGludD4o
Y2VpbGYod2lkdGgpKTsKICAgICAgICAgbV9vcHRpb25zQ2hhbmdlZCA9IGZhbHNlOworICAgICAg
ICAKKyAgICAgICAgaWYgKCFtX3ZCYXIgJiYgU2Nyb2xsYmFyOjpoYXNQbGF0Zm9ybVNjcm9sbGJh
cnMoKSkKKyAgICAgICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBub2RlKCktPmRvY3VtZW50
KCktPnZpZXcoKSkgeworICAgICAgICAgICAgICAgIFJlZlB0cjxQbGF0Zm9ybVNjcm9sbGJhcj4g
d2lkZ2V0ID0gbmV3IFBsYXRmb3JtU2Nyb2xsYmFyKHRoaXMsIFZlcnRpY2FsU2Nyb2xsYmFyLCBT
bWFsbFNjcm9sbGJhcik7CisgICAgICAgICAgICAgICAgdmlldy0+YWRkQ2hpbGQod2lkZ2V0Lmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBtX3ZCYXIgPSB3aWRnZXQucmVsZWFzZSgpOworICAgICAg
ICAgICAgfQorICAgICAgICAKICAgICAgICAgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhzUmVj
YWxjKCk7CiAgICAgfQogfQpAQCAtMTUzLDE1ICsxNjEsNyBAQCB2b2lkIFJlbmRlckxpc3RCb3g6
OnNjcm9sbFRvUmV2ZWFsU2VsZWN0CiAKIHZvaWQgUmVuZGVyTGlzdEJveDo6Y2FsY1ByZWZXaWR0
aHMoKQogewotICAgIGlmICghbV92QmFyICYmIFNjcm9sbGJhcjo6aGFzUGxhdGZvcm1TY3JvbGxi
YXJzKCkpCi0gICAgICAgIGlmIChGcmFtZVZpZXcqIHZpZXcgPSBub2RlKCktPmRvY3VtZW50KCkt
PnZpZXcoKSkgewotICAgICAgICAgICAgUmVmUHRyPFBsYXRmb3JtU2Nyb2xsYmFyPiB3aWRnZXQg
PSBuZXcgUGxhdGZvcm1TY3JvbGxiYXIodGhpcywgVmVydGljYWxTY3JvbGxiYXIsIFNtYWxsU2Ny
b2xsYmFyKTsKLSAgICAgICAgICAgIHZpZXctPmFkZENoaWxkKHdpZGdldC5nZXQoKSk7Ci0gICAg
ICAgICAgICBtX3ZCYXIgPSB3aWRnZXQucmVsZWFzZSgpOwotICAgICAgICB9Ci0KLSAgICBpZiAo
bV9vcHRpb25zQ2hhbmdlZCkKLSAgICAgICAgdXBkYXRlRnJvbUVsZW1lbnQoKTsKKyAgICBBU1NF
UlQoIW1fb3B0aW9uc0NoYW5nZWQpOwogCiAgICAgbV9taW5QcmVmV2lkdGggPSAwOwogICAgIG1f
bWF4UHJlZldpZHRoID0gMDsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RJdGVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0SXRlbS5jcHAJ
KHJldmlzaW9uIDIxMDgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdEl0ZW0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNzQsNiArMTc0LDE0IEBAIHZvaWQgUmVuZGVyTGlzdEl0ZW06
OnVwZGF0ZVZhbHVlKCkKICAgICB9CiB9CiAKK3N0YXRpYyBSZW5kZXJPYmplY3QqIGZpcnN0Tm9u
TWFya2VyQ2hpbGQoUmVuZGVyT2JqZWN0KiBwYXJlbnQpCit7CisgICAgUmVuZGVyT2JqZWN0KiBy
ZXN1bHQgPSBwYXJlbnQtPmZpcnN0Q2hpbGQoKTsKKyAgICB3aGlsZSAocmVzdWx0ICYmIHJlc3Vs
dC0+aXNMaXN0TWFya2VyKCkpCisgICAgICAgIHJlc3VsdCA9IHJlc3VsdC0+bmV4dFNpYmxpbmco
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIFJlbmRlckxpc3RJdGVtOjp1cGRhdGVN
YXJrZXJMb2NhdGlvbigpCiB7CiAgICAgLy8gU2FuaXR5IGNoZWNrIHRoZSBsb2NhdGlvbiBvZiBv
dXIgbWFya2VyLgpAQCAtMTkyLDMwICsyMDAsMzAgQEAgdm9pZCBSZW5kZXJMaXN0SXRlbTo6dXBk
YXRlTWFya2VyTG9jYXRpbwogICAgICAgICB9CiAKICAgICAgICAgaWYgKG1hcmtlclBhciAhPSBs
aW5lQm94UGFyZW50IHx8IG1fbWFya2VyLT5wcmVmV2lkdGhzRGlydHkoKSkgeworICAgICAgICAg
ICAgdXBkYXRlRmlyc3RMZXR0ZXIoKTsKICAgICAgICAgICAgIG1fbWFya2VyLT5yZW1vdmUoKTsK
ICAgICAgICAgICAgIGlmICghbGluZUJveFBhcmVudCkKICAgICAgICAgICAgICAgICBsaW5lQm94
UGFyZW50ID0gdGhpczsKLSAgICAgICAgICAgIGxpbmVCb3hQYXJlbnQtPmFkZENoaWxkKG1fbWFy
a2VyLCBsaW5lQm94UGFyZW50LT5maXJzdENoaWxkKCkpOworICAgICAgICAgICAgbGluZUJveFBh
cmVudC0+YWRkQ2hpbGQobV9tYXJrZXIsIGZpcnN0Tm9uTWFya2VyQ2hpbGQobGluZUJveFBhcmVu
dCkpOwogICAgICAgICAgICAgaWYgKG1fbWFya2VyLT5wcmVmV2lkdGhzRGlydHkoKSkKICAgICAg
ICAgICAgICAgICBtX21hcmtlci0+Y2FsY1ByZWZXaWR0aHMoKTsKLSAgICAgICAgICAgIHJlY2Fs
Y01pbk1heFdpZHRocygpOwogICAgICAgICB9CiAgICAgfQogfQogCiB2b2lkIFJlbmRlckxpc3RJ
dGVtOjpjYWxjUHJlZldpZHRocygpCiB7Ci0gICAgLy8gTWFrZSBzdXJlIG91ciBtYXJrZXIgaXMg
aW4gdGhlIGNvcnJlY3QgbG9jYXRpb24uCisgICAgQVNTRVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsK
KyAgICAKICAgICB1cGRhdGVNYXJrZXJMb2NhdGlvbigpOwotICAgIGlmIChwcmVmV2lkdGhzRGly
dHkoKSkKLSAgICAgICAgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCk7CisKKyAgICBSZW5k
ZXJCbG9jazo6Y2FsY1ByZWZXaWR0aHMoKTsKIH0KIAogdm9pZCBSZW5kZXJMaXN0SXRlbTo6bGF5
b3V0KCkKIHsKLSAgICBBU1NFUlQobmVlZHNMYXlvdXQoKSk7Ci0gICAgQVNTRVJUKCFwcmVmV2lk
dGhzRGlydHkoKSk7Ci0gICAgCisgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOyAKKwogICAgIHVw
ZGF0ZU1hcmtlckxvY2F0aW9uKCk7ICAgIAogICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKIH0K
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCShyZXZpc2lvbiAyMTA4
MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MjYsOCArNjI2LDI1IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFp
bnRJbmZvJiAKIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6bGF5b3V0KCkKIHsKICAgICBBU1NFUlQo
bmVlZHNMYXlvdXQoKSk7Ci0gICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQotICAgICAgICBjYWxj
UHJlZldpZHRocygpOworICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkpOworCisgICAgaWYg
KGlzSW1hZ2UoKSkgeworICAgICAgICBtX3dpZHRoID0gbV9pbWFnZS0+aW1hZ2UoKS0+d2lkdGgo
KTsKKyAgICAgICAgbV9oZWlnaHQgPSBtX2ltYWdlLT5pbWFnZSgpLT5oZWlnaHQoKTsKKyAgICB9
IGVsc2UgeworICAgICAgICBtX3dpZHRoID0gbWluUHJlZldpZHRoKCk7CisgICAgICAgIG1faGVp
Z2h0ID0gc3R5bGUoKS0+Zm9udCgpLmhlaWdodCgpOworICAgIH0KKworICAgIG1fbWFyZ2luTGVm
dCA9IG1fbWFyZ2luUmlnaHQgPSAwOworCisgICAgTGVuZ3RoIGxlZnRNYXJnaW4gPSBzdHlsZSgp
LT5tYXJnaW5MZWZ0KCk7CisgICAgTGVuZ3RoIHJpZ2h0TWFyZ2luID0gc3R5bGUoKS0+bWFyZ2lu
UmlnaHQoKTsKKyAgICBpZiAobGVmdE1hcmdpbi5pc0ZpeGVkKCkpCisgICAgICAgIG1fbWFyZ2lu
TGVmdCA9IGxlZnRNYXJnaW4udmFsdWUoKTsKKyAgICBpZiAocmlnaHRNYXJnaW4uaXNGaXhlZCgp
KQorICAgICAgICBtX21hcmdpblJpZ2h0ID0gcmlnaHRNYXJnaW4udmFsdWUoKTsKKwogICAgIHNl
dE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0KIApAQCAtNjUwLDEwICs2NjcsOSBAQCB2b2lkIFJlbmRl
ckxpc3RNYXJrZXI6OmNhbGNQcmVmV2lkdGhzKCkKICAgICBtX3RleHQgPSAiIjsKIAogICAgIGlm
IChpc0ltYWdlKCkpIHsKLSAgICAgICAgbV93aWR0aCA9IG1faW1hZ2UtPmltYWdlKCktPndpZHRo
KCk7Ci0gICAgICAgIG1faGVpZ2h0ID0gbV9pbWFnZS0+aW1hZ2UoKS0+aGVpZ2h0KCk7Ci0gICAg
ICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBtX3dpZHRoOworICAgICAgICBt
X21pblByZWZXaWR0aCA9IG1fbWF4UHJlZldpZHRoID0gbV9pbWFnZS0+aW1hZ2UoKS0+d2lkdGgo
KTsKICAgICAgICAgc2V0UHJlZldpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICAgICAgdXBkYXRlTWFy
Z2lucygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC02OTksODYgKzcxNSw4MyBAQCB2
b2lkIFJlbmRlckxpc3RNYXJrZXI6OmNhbGNQcmVmV2lkdGhzKCkKICAgICAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIG1fd2lkdGggPSB3aWR0aDsKICAgICBtX21pblByZWZXaWR0aCA9IHdp
ZHRoOwogICAgIG1fbWF4UHJlZldpZHRoID0gd2lkdGg7CiAKLSAgICAvLyBGSVhNRTogQSBsaXR0
bGUgc3RyYW5nZSB0byBzZXQgdGhlIGhlaWdodCBpbiBjYWxjUHJlZldpZHRocy4KLSAgICBtX2hl
aWdodCA9IGZvbnQuaGVpZ2h0KCk7Ci0KICAgICBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpOwor
ICAgIAorICAgIHVwZGF0ZU1hcmdpbnMoKTsKIH0KIAotdm9pZCBSZW5kZXJMaXN0TWFya2VyOjpj
YWxjV2lkdGgoKQordm9pZCBSZW5kZXJMaXN0TWFya2VyOjp1cGRhdGVNYXJnaW5zKCkKIHsKLSAg
ICAvLyBtX3dpZHRoIGlzIHNldCBpbiBjYWxjUHJlZldpZHRocygpCiAgICAgY29uc3QgRm9udCYg
Zm9udCA9IHN0eWxlKCktPmZvbnQoKTsKIAorICAgIGludCBtYXJnaW5MZWZ0ID0gMDsKKyAgICBp
bnQgbWFyZ2luUmlnaHQgPSAwOworCiAgICAgaWYgKGlzSW5zaWRlKCkpIHsKICAgICAgICAgaWYg
KGlzSW1hZ2UoKSkgewotICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UikgewotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IDA7Ci0gICAgICAgICAgICAgICAg
bV9tYXJnaW5SaWdodCA9IGNNYXJrZXJQYWRkaW5nOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKLSAgICAgICAgICAg
ICAgICBtX21hcmdpblJpZ2h0ID0gMDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChz
dHlsZSgpLT5kaXJlY3Rpb24oKSA9PSBMVFIpCisgICAgICAgICAgICAgICAgbWFyZ2luUmlnaHQg
PSBjTWFya2VyUGFkZGluZzsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtYXJn
aW5MZWZ0ID0gY01hcmtlclBhZGRpbmc7CiAgICAgICAgIH0gZWxzZSBzd2l0Y2ggKHN0eWxlKCkt
Pmxpc3RTdHlsZVR5cGUoKSkgewogICAgICAgICAgICAgY2FzZSBESVNDOgogICAgICAgICAgICAg
Y2FzZSBDSVJDTEU6CiAgICAgICAgICAgICBjYXNlIFNRVUFSRToKICAgICAgICAgICAgICAgICBp
ZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1f
bWFyZ2luTGVmdCA9IC0xOwotICAgICAgICAgICAgICAgICAgICBtX21hcmdpblJpZ2h0ID0gZm9u
dC5hc2NlbnQoKSAtIG1fd2lkdGggKyAxOworICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0
ID0gLTE7CisgICAgICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gZm9udC5hc2NlbnQoKSAt
IG1pblByZWZXaWR0aCgpICsgMTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBmb250LmFzY2VudCgpIC0gbV93aWR0aCArIDE7Ci0g
ICAgICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAtMTsKKyAgICAgICAgICAgICAgICAg
ICAgbWFyZ2luTGVmdCA9IGZvbnQuYXNjZW50KCkgLSBtaW5QcmVmV2lkdGgoKSArIDE7CisgICAg
ICAgICAgICAgICAgICAgIG1hcmdpblJpZ2h0ID0gLTE7CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAg
ICBtX21hcmdpbkxlZnQgPSAwOwotICAgICAgICAgICAgICAgIG1fbWFyZ2luUmlnaHQgPSAwOwor
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExUUikgewogICAgICAgICAgICAgaWYgKGlzSW1h
Z2UoKSkKLSAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAtbV93aWR0aCAtIGNNYXJrZXJQ
YWRkaW5nOworICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSAtbWluUHJlZldpZHRoKCkgLSBj
TWFya2VyUGFkZGluZzsKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIGludCBv
ZmZzZXQgPSBmb250LmFzY2VudCgpICogMiAvIDM7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChz
dHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBESVND
OgogICAgICAgICAgICAgICAgICAgICBjYXNlIENJUkNMRToKICAgICAgICAgICAgICAgICAgICAg
Y2FzZSBTUVVBUkU6Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAtb2Zm
c2V0IC0gY01hcmtlclBhZGRpbmcgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2lu
TGVmdCA9IC1vZmZzZXQgLSBjTWFya2VyUGFkZGluZyAtIDE7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgY2FzZSBMTk9ORToKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAg
ICAgIG1fbWFyZ2luTGVmdCA9IG1fdGV4dC5pc0VtcHR5KCkgPyAwIDogLW1fd2lkdGggLSBvZmZz
ZXQgLyAyOworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IG1fdGV4dC5pc0Vt
cHR5KCkgPyAwIDogLW1pblByZWZXaWR0aCgpIC0gb2Zmc2V0IC8gMjsKICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBpZiAoaXNJ
bWFnZSgpKQotICAgICAgICAgICAgICAgIG1fbWFyZ2luTGVmdCA9IGNNYXJrZXJQYWRkaW5nOwor
ICAgICAgICAgICAgICAgIG1hcmdpbkxlZnQgPSBjTWFya2VyUGFkZGluZzsKICAgICAgICAgICAg
IGVsc2UgewogICAgICAgICAgICAgICAgIGludCBvZmZzZXQgPSBmb250LmFzY2VudCgpICogMiAv
IDM7CiAgICAgICAgICAgICAgICAgc3dpdGNoIChzdHlsZSgpLT5saXN0U3R5bGVUeXBlKCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgY2FzZSBESVNDOgogICAgICAgICAgICAgICAgICAgICBjYXNl
IENJUkNMRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBTUVVBUkU6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSBvZmZzZXQgKyBjTWFya2VyUGFkZGluZyArIDEgLSBt
X3dpZHRoOworICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2luTGVmdCA9IG9mZnNldCArIGNN
YXJrZXJQYWRkaW5nICsgMSAtIG1pblByZWZXaWR0aCgpOwogICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTE5PTkU6Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX21hcmdpbkxlZnQgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtX21hcmdpbkxlZnQgPSBtX3RleHQuaXNFbXB0eSgpID8gMCA6IG9mZnNldCAvIDI7CisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXJnaW5MZWZ0ID0gbV90ZXh0LmlzRW1wdHkoKSA/IDAgOiBv
ZmZzZXQgLyAyOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQot
ICAgICAgICBtX21hcmdpblJpZ2h0ID0gLW1fbWFyZ2luTGVmdCAtIG1fd2lkdGg7CisgICAgICAg
IG1hcmdpblJpZ2h0ID0gLW1hcmdpbkxlZnQgLSBtaW5QcmVmV2lkdGgoKTsKICAgICB9CisKKyAg
ICBzdHlsZSgpLT5zZXRNYXJnaW5MZWZ0KExlbmd0aChtYXJnaW5MZWZ0LCBGaXhlZCkpOworICAg
IHN0eWxlKCktPnNldE1hcmdpblJpZ2h0KExlbmd0aChtYXJnaW5SaWdodCwgRml4ZWQpKTsKIH0K
IAogc2hvcnQgUmVuZGVyTGlzdE1hcmtlcjo6bGluZUhlaWdodChib29sLCBib29sKSBjb25zdApJ
bmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuaAkocmV2aXNpb24gMjEwODIpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTUxLDggKzUxLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChD
YWNoZWRJbWFnZSopOwogCi0gICAgdmlydHVhbCB2b2lkIGNhbGNXaWR0aCgpOwotCiAgICAgdmly
dHVhbCBJbmxpbmVCb3gqIGNyZWF0ZUlubGluZUJveChib29sLCBib29sLCBib29sKTsKIAogICAg
IHZpcnR1YWwgc2hvcnQgbGluZUhlaWdodChib29sIGZpcnN0TGluZSwgYm9vbCBpc1Jvb3RMaW5l
Qm94ID0gZmFsc2UpIGNvbnN0OwpAQCAtNjksMTAgKzY3LDEyIEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIEludFJlY3Qgc2VsZWN0aW9uUmVjdCgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5CZVNlbGVj
dGlvbkxlYWYoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKKyAgICB2b2lkIHVwZGF0ZU1hcmdp
bnMoKTsKKwogcHJpdmF0ZToKICAgICBJbnRSZWN0IGdldFJlbGF0aXZlTWFya2VyUmVjdCgpOwog
Ci0gICAgU3RyaW5nIG1fdGV4dDsKKyAgICBtdXRhYmxlIFN0cmluZyBtX3RleHQ7CiAgICAgQ2Fj
aGVkSW1hZ2UqIG1faW1hZ2U7CiAgICAgUmVuZGVyTGlzdEl0ZW0qIG1fbGlzdEl0ZW07CiAgICAg
U2VsZWN0aW9uU3RhdGUgbV9zZWxlY3Rpb25TdGF0ZTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
T2JqZWN0LmNwcAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzYsMTcgKzE3NiwxNyBAQCBSZW5kZXJPYmpl
Y3Q6OlJlbmRlck9iamVjdChOb2RlKiBub2RlKQogICAgICwgbV9uZWVkc0xheW91dChmYWxzZSkK
ICAgICAsIG1fbm9ybWFsQ2hpbGROZWVkc0xheW91dChmYWxzZSkKICAgICAsIG1fcG9zQ2hpbGRO
ZWVkc0xheW91dChmYWxzZSkKLSAgICAsIG1fcHJlZldpZHRoc0RpcnR5KHRydWUpCisgICAgLCBt
X3ByZWZXaWR0aHNEaXJ0eShmYWxzZSkKICAgICAsIG1fZmxvYXRpbmcoZmFsc2UpCiAgICAgLCBt
X3Bvc2l0aW9uZWQoZmFsc2UpCiAgICAgLCBtX3JlbFBvc2l0aW9uZWQoZmFsc2UpCiAgICAgLCBt
X3BhaW50QmFja2dyb3VuZChmYWxzZSkKICAgICAsIG1faXNBbm9ueW1vdXMobm9kZSA9PSBub2Rl
LT5kb2N1bWVudCgpKQotICAgICwgbV9yZWNhbGNNaW5NYXgoZmFsc2UpCiAgICAgLCBtX2lzVGV4
dChmYWxzZSkKICAgICAsIG1faW5saW5lKHRydWUpCiAgICAgLCBtX3JlcGxhY2VkKGZhbHNlKQog
ICAgICwgbV9pc0RyYWdnaW5nKGZhbHNlKQorICAgICwgbV9oYXNMYXllcihmYWxzZSkKICAgICAs
IG1faGFzT3ZlcmZsb3dDbGlwKGZhbHNlKQogICAgICwgbV9oYXNPdmVycmlkZVNpemUoZmFsc2Up
CiAgICAgLCBtX2hhc0NvdW50ZXJOb2RlTWFwKGZhbHNlKQpAQCAtMjUyLDcgKzI1Miw3IEBAIHZv
aWQgUmVuZGVyT2JqZWN0OjphZGRDaGlsZChSZW5kZXJPYmplY3QKICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKIH0KIAotUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnJlbW92ZUNoaWxkTm9k
ZShSZW5kZXJPYmplY3QqKQorUmVuZGVyT2JqZWN0KiBSZW5kZXJPYmplY3Q6OnJlbW92ZUNoaWxk
Tm9kZShSZW5kZXJPYmplY3QqLCBib29sKQogewogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgIHJldHVybiAwOwpAQCAtMjYzLDEyICsyNjMsMTcgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OnJl
bW92ZUNoaWxkKFJlbmRlck9iagogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogfQogCi12b2lk
IFJlbmRlck9iamVjdDo6YXBwZW5kQ2hpbGROb2RlKFJlbmRlck9iamVjdCopCit2b2lkIFJlbmRl
ck9iamVjdDo6bW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqKQogewogICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6aW5zZXJ0Q2hpbGROb2RlKFJlbmRl
ck9iamVjdCosIFJlbmRlck9iamVjdCopCit2b2lkIFJlbmRlck9iamVjdDo6YXBwZW5kQ2hpbGRO
b2RlKFJlbmRlck9iamVjdCosIGJvb2wpCit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK3ZvaWQgUmVuZGVyT2JqZWN0OjppbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiwgUmVu
ZGVyT2JqZWN0KiwgYm9vbCkKIHsKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0KQEAgLTQ5
OSwxMCArNTA0LDYgQEAgUmVuZGVyQmxvY2sqIFJlbmRlck9iamVjdDo6Zmlyc3RMaW5lQmxvYwog
ICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlck9iamVjdDo6dXBkYXRlRmlyc3RMZXR0ZXIo
KQotewotfQotCiBpbnQgUmVuZGVyT2JqZWN0OjpvZmZzZXRMZWZ0KCkgY29uc3QKIHsKICAgICBS
ZW5kZXJPYmplY3QqIG9mZnNldFBhciA9IG9mZnNldFBhcmVudCgpOwpAQCAtNjU0LDYgKzY1NSwy
NyBAQCB2b2lkIFJlbmRlck9iamVjdDo6bWFya0FsbERlc2NlbmRhbnRzV2l0CiB7CiB9CiAKK3Zv
aWQgUmVuZGVyT2JqZWN0OjpzZXRQcmVmV2lkdGhzRGlydHkoYm9vbCBiLCBib29sIG1hcmtQYXJl
bnRzKQoreworICAgIGJvb2wgYWxyZWFkeURpcnR5ID0gbV9wcmVmV2lkdGhzRGlydHk7CisgICAg
bV9wcmVmV2lkdGhzRGlydHkgPSBiOworICAgIGlmIChiICYmICFhbHJlYWR5RGlydHkgJiYgbWFy
a1BhcmVudHMgJiYgKHN0eWxlKCktPnBvc2l0aW9uKCkgIT0gRml4ZWRQb3NpdGlvbiAmJiBzdHls
ZSgpLT5wb3NpdGlvbigpICE9IEFic29sdXRlUG9zaXRpb24pKQorICAgICAgICBpbnZhbGlkYXRl
Q29udGFpbmluZ0Jsb2NrUHJlZldpZHRocygpOworfQorCit2b2lkIFJlbmRlck9iamVjdDo6aW52
YWxpZGF0ZUNvbnRhaW5pbmdCbG9ja1ByZWZXaWR0aHMoKQoreworICAgIFJlbmRlck9iamVjdCog
byA9IGNvbnRhaW5pbmdCbG9jaygpOworICAgIHdoaWxlIChvICYmICFvLT5tX3ByZWZXaWR0aHNE
aXJ0eSkgeworICAgICAgICBvLT5tX3ByZWZXaWR0aHNEaXJ0eSA9IHRydWU7CisgICAgICAgIGlm
IChvLT5zdHlsZSgpLT5wb3NpdGlvbigpID09IEZpeGVkUG9zaXRpb24gfHwgby0+c3R5bGUoKS0+
cG9zaXRpb24oKSA9PSBBYnNvbHV0ZVBvc2l0aW9uKQorICAgICAgICAgICAgLy8gQSBwb3NpdGlv
bmVkIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uIHRoZSBtaW4vbWF4IHdpZHRoIG9mIGl0cyBjb250
YWluaW5nIGJsb2NrIGV2ZXIuCisgICAgICAgICAgICAvLyBXZSBjYW4gb3B0aW1pemUgdGhpcyBj
YXNlIGFuZCBub3QgZ28gdXAgYW55IGZ1cnRoZXIuCisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgbyA9IG8tPmNvbnRhaW5pbmdCbG9jaygpOworICAgIH0KK30KKwogdm9pZCBSZW5kZXJPYmpl
Y3Q6OnNldE5lZWRzTGF5b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cykKIHsKICAgICBib29s
IGFscmVhZHlOZWVkZWRMYXlvdXQgPSBtX25lZWRzTGF5b3V0OwpAQCAtMTkxNyw4ICsxOTM5LDYg
QEAgRGVwcmVjYXRlZFN0cmluZyBSZW5kZXJPYmplY3Q6OmluZm9ybWF0aQogICAgICAgICB0cyA8
PCAicHMgIjsKICAgICBpZiAobmVlZHNMYXlvdXQoKSkKICAgICAgICAgdHMgPDwgIm5sICI7Ci0g
ICAgaWYgKG1fcmVjYWxjTWluTWF4KQotICAgICAgICB0cyA8PCAicm1tICI7CiAgICAgaWYgKHN0
eWxlKCkgJiYgc3R5bGUoKS0+ekluZGV4KCkpCiAgICAgICAgIHRzIDw8ICJ6STogIiA8PCBzdHls
ZSgpLT56SW5kZXgoKTsKICAgICBpZiAoZWxlbWVudCgpKSB7CkBAIC0yNzA2LDQyICsyNzI2LDYg
QEAgdm9pZCBSZW5kZXJPYmplY3Q6OmludmFsaWRhdGVWZXJ0aWNhbFBvcwogICAgIH0KIH0KIAot
dm9pZCBSZW5kZXJPYmplY3Q6OnJlY2FsY01pbk1heFdpZHRocygpCi17Ci0gICAgQVNTRVJUKG1f
cmVjYWxjTWluTWF4KTsKLQotICAgIG1fcmVjYWxjTWluTWF4ID0gZmFsc2U7Ci0gICAgdXBkYXRl
Rmlyc3RMZXR0ZXIoKTsKLQotICAgIFJlbmRlck9iamVjdCogY2hpbGQgPSBmaXJzdENoaWxkKCk7
Ci0gICAgd2hpbGUgKGNoaWxkKSB7Ci0gICAgICAgIGludCBjbWluID0gMDsKLSAgICAgICAgaW50
IGNtYXggPSAwOwotICAgICAgICBib29sIHRlc3QgPSBmYWxzZTsKLSAgICAgICAgaWYgKCghbV9w
cmVmV2lkdGhzRGlydHkgJiYgY2hpbGQtPm1fcmVjYWxjTWluTWF4KSB8fCBjaGlsZC0+bV9wcmVm
V2lkdGhzRGlydHkpIHsKLSAgICAgICAgICAgIGNtaW4gPSBjaGlsZC0+bWluUHJlZldpZHRoKCk7
Ci0gICAgICAgICAgICBjbWF4ID0gY2hpbGQtPm1heFByZWZXaWR0aCgpOwotICAgICAgICAgICAg
dGVzdCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGNoaWxkLT5tX3JlY2FsY01pbk1h
eCkKLSAgICAgICAgICAgIGNoaWxkLT5yZWNhbGNNaW5NYXhXaWR0aHMoKTsKLSAgICAgICAgaWYg
KGNoaWxkLT5tX3ByZWZXaWR0aHNEaXJ0eSkKLSAgICAgICAgICAgIGNoaWxkLT5jYWxjUHJlZldp
ZHRocygpOwotICAgICAgICBpZiAoIW1fcHJlZldpZHRoc0RpcnR5ICYmIHRlc3QgJiYgKGNtaW4g
IT0gY2hpbGQtPm1pblByZWZXaWR0aCgpIHx8IGNtYXggIT0gY2hpbGQtPm1heFByZWZXaWR0aCgp
KSkKLSAgICAgICAgICAgIG1fcHJlZldpZHRoc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKTsKLSAgICB9Ci0KLSAgICAvLyB3ZSBuZWVkIHRvIHJlY2Fs
Y3VsYXRlLCBpZiB0aGUgY29udGFpbnMgaW5saW5lIGNoaWxkcmVuLCBhcyB0aGUgY2hhbmdlIGNv
dWxkIGhhdmUKLSAgICAvLyBoYXBwZW5lZCBzb21ld2hlcmUgZGVlcCBpbnNpZGUgdGhlIGNoaWxk
IHRyZWUuIEFsc28gZG8gdGhpcyBmb3IgYmxvY2tzIG9yIHRhYmxlcyB0aGF0Ci0gICAgLy8gYXJl
IGlubGluZSAoaS5lLiwgaW5saW5lLWJsb2NrIGFuZCBpbmxpbmUtdGFibGUpLgotICAgIGlmICgo
IWlzSW5saW5lKCkgfHwgaXNJbmxpbmVCbG9ja09ySW5saW5lVGFibGUoKSkgJiYgY2hpbGRyZW5J
bmxpbmUoKSkKLSAgICAgICAgbV9wcmVmV2lkdGhzRGlydHkgPSB0cnVlOwotCi0gICAgaWYgKG1f
cHJlZldpZHRoc0RpcnR5KQotICAgICAgICBjYWxjUHJlZldpZHRocygpOwotfQotCiB2b2lkIFJl
bmRlck9iamVjdDo6c2NoZWR1bGVSZWxheW91dCgpCiB7CiAgICAgaWYgKGlzUmVuZGVyVmlldygp
KSB7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkocmV2aXNpb24gMjEwODIpCisrKyBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTUzLDcg
KzE1Myw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIGxhc3RMZWFmQ2hpbGQoKSBjb25z
dDsKIAogICAgIHZpcnR1YWwgUmVuZGVyTGF5ZXIqIGxheWVyKCkgY29uc3QgeyByZXR1cm4gMDsg
fQotICAgIGJvb2wgaGFzTGF5ZXIoKSBjb25zdCB7IHJldHVybiAhIWxheWVyKCk7IH0KICAgICBS
ZW5kZXJMYXllciogZW5jbG9zaW5nTGF5ZXIoKSBjb25zdDsKICAgICB2b2lkIGFkZExheWVycyhS
ZW5kZXJMYXllciogcGFyZW50TGF5ZXIsIFJlbmRlck9iamVjdCogbmV3T2JqZWN0KTsKICAgICB2
b2lkIHJlbW92ZUxheWVycyhSZW5kZXJMYXllciogcGFyZW50TGF5ZXIpOwpAQCAtMTc3LDcgKzE3
Niw2IEBAIHB1YmxpYzoKICAgICAvLyBPYnRhaW5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBibG9j
ayAoaW5jbHVkaW5nIHRoaXMgYmxvY2spIHRoYXQgY29udHJpYnV0ZXMgYSBmaXJzdC1saW5lIHN0
eWxlIHRvIG91ciBpbmxpbmUKICAgICAvLyBjaGlsZHJlbi4KICAgICB2aXJ0dWFsIFJlbmRlckJs
b2NrKiBmaXJzdExpbmVCbG9jaygpIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVGaXJz
dExldHRlcigpOwogCiAgICAgLy8gQ2FsbGVkIHdoZW4gYW4gb2JqZWN0IHRoYXQgd2FzIGZsb2F0
aW5nIG9yIHBvc2l0aW9uZWQgYmVjb21lcyBhIG5vcm1hbCBmbG93IG9iamVjdAogICAgIC8vIGFn
YWluLiAgV2UgaGF2ZSB0byBtYWtlIHN1cmUgdGhlIHJlbmRlciB0cmVlIHVwZGF0ZXMgYXMgbmVl
ZGVkIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcKQEAgLTIwNiw5ICsyMDQsMTIgQEAgcHVibGljOgog
ICAgIHZpcnR1YWwgYm9vbCBjcmVhdGVzQW5vbnltb3VzV3JhcHBlcigpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9CiAKICAgICAvLyByYXcgdHJlZSBtYW5pcHVsYXRpb24KLSAgICB2aXJ0dWFsIFJl
bmRlck9iamVjdCogcmVtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwotICAgIHZpcnR1YWwg
dm9pZCBhcHBlbmRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0Kik7Ci0gICAgdmlydHVhbCB2b2lkIGlu
c2VydENoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZSk7
CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIHJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3Qq
LCBib29sIGZ1bGxSZW1vdmUgPSB0cnVlKTsKKyAgICB2aXJ0dWFsIHZvaWQgYXBwZW5kQ2hpbGRO
b2RlKFJlbmRlck9iamVjdCosIGJvb2wgZnVsbEFwcGVuZCA9IHRydWUpOworICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBi
ZWZvcmUsIGJvb2wgZnVsbEluc2VydCA9IHRydWUpOworICAgIC8vIERlc2lnbmVkIGZvciBzcGVl
ZC4gIERvbid0IHdhc3RlIHRpbWUgZG9pbmcgYSBidW5jaCBvZiB3b3JrIGxpa2UgbGF5ZXIgdXBk
YXRpbmcgYW5kIHJlcGFpbnRpbmcgd2hlbiB3ZSBrbm93IHRoYXQgb3VyCisgICAgLy8gY2hhbmdl
IGluIHBhcmVudGFnZSBpcyBub3QgZ29pbmcgdG8gYWZmZWN0IGFueXRoaW5nLgorICAgIHZpcnR1
YWwgdm9pZCBtb3ZlQ2hpbGROb2RlKFJlbmRlck9iamVjdCopOwogICAgIC8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogCiBwcm90ZWN0ZWQ6CkBAIC0zMTAsNyArMzEx
LDkgQEAgcHVibGljOgogICAgIGJvb2wgaXNSdW5JbigpIGNvbnN0IHsgcmV0dXJuIHN0eWxlKCkt
PmRpc3BsYXkoKSA9PSBSVU5fSU47IH0gLy8gcnVuLWluIG9iamVjdAogICAgIGJvb2wgaXNEcmFn
Z2luZygpIGNvbnN0IHsgcmV0dXJuIG1faXNEcmFnZ2luZzsgfQogICAgIGJvb2wgaXNSZXBsYWNl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVwbGFjZWQ7IH0gLy8gYSAicmVwbGFjZWQiIGVsZW1lbnQg
KHNlZSBDU1MpCi0KKyAgICAKKyAgICBib29sIGhhc0xheWVyKCkgY29uc3QgeyByZXR1cm4gbV9o
YXNMYXllcjsgfQorICAgIAogICAgIGJvb2wgaGFzQm94RGVjb3JhdGlvbnMoKSBjb25zdCB7IHJl
dHVybiBtX3BhaW50QmFja2dyb3VuZDsgfQogICAgIGJvb2wgbXVzdFJlcGFpbnRCYWNrZ3JvdW5k
T3JCb3JkZXIoKSBjb25zdDsKIApAQCAtMzIwLDcgKzMyMyw2IEBAIHB1YmxpYzoKICAgICBib29s
IG5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX25vcm1hbENoaWxkTmVl
ZHNMYXlvdXQ7IH0KIAogICAgIGJvb2wgcHJlZldpZHRoc0RpcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9wcmVmV2lkdGhzRGlydHk7IH0KLSAgICBib29sIHJlY2FsY01pbk1heCgpIGNvbnN0IHsgcmV0
dXJuIG1fcmVjYWxjTWluTWF4OyB9CiAKICAgICBib29sIGlzU2VsZWN0aW9uQm9yZGVyKCkgY29u
c3Q7CiAKQEAgLTM2OSwyNCArMzcxLDEzIEBAIHB1YmxpYzoKICAgICB2b2lkIHNldE5lZWRzTGF5
b3V0KGJvb2wgYiwgYm9vbCBtYXJrUGFyZW50cyA9IHRydWUpOwogICAgIHZvaWQgc2V0Q2hpbGRO
ZWVkc0xheW91dChib29sIGIsIGJvb2wgbWFya1BhcmVudHMgPSB0cnVlKTsKIAotICAgIHZvaWQg
c2V0UHJlZldpZHRoc0RpcnR5KGJvb2wgYikKLSAgICB7Ci0gICAgICAgIG1fcHJlZldpZHRoc0Rp
cnR5ID0gYjsKLSAgICAgICAgaWYgKGIpIHsKLSAgICAgICAgICAgIFJlbmRlck9iamVjdCogbyA9
IHRoaXM7Ci0gICAgICAgICAgICBSZW5kZXJPYmplY3QqIHJvb3QgPSB0aGlzOwotICAgICAgICAg
ICAgd2hpbGUobykgeyAvLyBGSVhNRTogJiYgIW8tPm1fcmVjYWxjTWluTWF4ICkgewotICAgICAg
ICAgICAgICAgIG8tPm1fcmVjYWxjTWluTWF4ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICByb290
ID0gbzsKLSAgICAgICAgICAgICAgICBvID0gby0+bV9wYXJlbnQ7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLSAgICB9Ci0KKyAgICB2b2lkIHNldFByZWZXaWR0aHNEaXJ0eShib29sLCBib29s
IG1hcmtQYXJlbnRzID0gdHJ1ZSk7CisgICAgdm9pZCBpbnZhbGlkYXRlQ29udGFpbmluZ0Jsb2Nr
UHJlZldpZHRocygpOworICAgIAogICAgIHZvaWQgc2V0TmVlZHNMYXlvdXRBbmRQcmVmV2lkdGhz
UmVjYWxjKCkKICAgICB7Ci0gICAgICAgIHNldFByZWZXaWR0aHNEaXJ0eSh0cnVlKTsKICAgICAg
ICAgc2V0TmVlZHNMYXlvdXQodHJ1ZSk7CisgICAgICAgIHNldFByZWZXaWR0aHNEaXJ0eSh0cnVl
KTsKICAgICB9CiAKICAgICB2b2lkIHNldFBvc2l0aW9uZWQoYm9vbCBiID0gdHJ1ZSkgIHsgbV9w
b3NpdGlvbmVkID0gYjsgIH0KQEAgLTM5Nyw2ICszODgsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRSZW5kZXJUZXh0KCkgeyBtX2lzVGV4dCA9IHRydWU7IH0KICAgICB2b2lkIHNldFJlcGxhY2Vk
KGJvb2wgYiA9IHRydWUpIHsgbV9yZXBsYWNlZCA9IGI7IH0KICAgICB2b2lkIHNldEhhc092ZXJm
bG93Q2xpcChib29sIGIgPSB0cnVlKSB7IG1faGFzT3ZlcmZsb3dDbGlwID0gYjsgfQorICAgIHZv
aWQgc2V0SGFzTGF5ZXIoYm9vbCBiID0gdHJ1ZSkgeyBtX2hhc0xheWVyID0gYjsgfQogCiAgICAg
dm9pZCBzY2hlZHVsZVJlbGF5b3V0KCk7CiAKQEAgLTQ1OSwyNiArNDUxLDcgQEAgcHVibGljOgog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2xpcHksIGludCBj
bGlwaCwgaW50IHR4LCBpbnQgdHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCBpbmNsdWRlTGVmdEVkZ2UgPSB0cnVl
LCBib29sIGluY2x1ZGVSaWdodEVkZ2UgPSB0cnVlKSB7IH0KIAotICAgIC8qCi0gICAgICogVGhp
cyBmdW5jdGlvbiBjYWxjdWxhdGVzIHRoZSBtaW5pbXVtICYgbWF4aW11bSB3aWR0aCB0aGF0IHRo
ZSBvYmplY3QKLSAgICAgKiBjYW4gYmUgc2V0IHRvLgotICAgICAqCi0gICAgICogd2hlbiB0aGUg
RWxlbWVudCBjYWxscyBzZXRQcmVmV2lkdGhzRGlydHkoZmFsc2UpLCBjYWxjUHJlZldpZHRocygp
IHdpbGwKLSAgICAgKiBiZSBubyBsb25nZXIgY2FsbGVkLgotICAgICAqCi0gICAgICogd2hlbiBh
IGVsZW1lbnQgaGFzIGEgZml4ZWQgc2l6ZSwgbV9taW5QcmVmV2lkdGggYW5kIG1fbWF4UHJlZldp
ZHRoIHNob3VsZCBiZQotICAgICAqIHNldCB0byB0aGUgc2FtZSB2YWx1ZS4gVGhpcyBoYXMgdGhl
IHNwZWNpYWwgbWVhbmluZyB0aGF0IG1fd2lkdGgsCi0gICAgICogY29udGFpbnMgdGhlIGFjdHVh
bCB2YWx1ZS4KLSAgICAgKgotICAgICAqIGFzc3VtZXMgY2FsY1ByZWZXaWR0aHMgaGFzIGFscmVh
ZHkgYmVlbiBjYWxsZWQgZm9yIGFsbCBjaGlsZHJlbi4KLSAgICAgKi8KLSAgICB2aXJ0dWFsIHZv
aWQgY2FsY1ByZWZXaWR0aHMoKSB7IH0KLQotICAgIC8qCi0gICAgICogRG9lcyB0aGUgbWluIG1h
eCB3aWR0aCByZWNhbGN1bGF0aW9ucyBhZnRlciBjaGFuZ2VzLgotICAgICAqLwotICAgIHZvaWQg
cmVjYWxjTWluTWF4V2lkdGhzKCk7Ci0KKyAgICAKICAgICAvKgogICAgICAqIENhbGN1bGF0ZXMg
dGhlIGFjdHVhbCB3aWR0aCBvZiB0aGUgb2JqZWN0IChvbmx5IGZvciBub24gaW5saW5lCiAgICAg
ICogb2JqZWN0cykKQEAgLTkyMiwxMiArODk1LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBiYWNrZ3JvdW5kIHBhaW50aW5nIHBoYXNl
IChiYWNrZ3JvdW5kLCBib3JkZXIsIGV0YykKIAogICAgIGJvb2wgbV9pc0Fub255bW91cyAgICAg
ICAgICAgICAgIDogMTsKLSAgICBib29sIG1fcmVjYWxjTWluTWF4ICAgICAgICAgICAgICA6IDE7
CiAgICAgYm9vbCBtX2lzVGV4dCAgICAgICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wgbV9p
bmxpbmUgICAgICAgICAgICAgICAgICAgIDogMTsKICAgICBib29sIG1fcmVwbGFjZWQgICAgICAg
ICAgICAgICAgICA6IDE7CiAgICAgYm9vbCBtX2lzRHJhZ2dpbmcgICAgICAgICAgICAgICAgOiAx
OwogCisgICAgYm9vbCBtX2hhc0xheWVyICAgICAgICAgICAgICAgICAgOiAxOwogICAgIGJvb2wg
bV9oYXNPdmVyZmxvd0NsaXAgICAgICAgICAgIDogMTsKIAogICAgIGJvb2wgbV9oYXNPdmVycmlk
ZVNpemUgICAgICAgICAgIDogMTsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRPYmpl
Y3QuY3BwCShyZXZpc2lvbiAyMTA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclBhcnRP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNyArMjQ1LDYgQEAgdm9pZCBSZW5kZXJQ
YXJ0T2JqZWN0Ojp1cGRhdGVXaWRnZXQoKQogdm9pZCBSZW5kZXJQYXJ0T2JqZWN0OjpsYXlvdXQo
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIXByZWZXaWR0aHNE
aXJ0eSgpKTsKIAogICAgIGNhbGNXaWR0aCgpOwogICAgIGNhbGNIZWlnaHQoKTsKSW5kZXg6IFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR0NvbnRhaW5lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHQ29udGFpbmVyLmNwcAkocmV2aXNpb24gMjEwODIpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04NSwxNyArODUsOSBAQCBzaG9ydCBSZW5kZXJTVkdDb250YWluZXI6OmJhc2VsaW5lUG9z
aXRpCiAgICAgcmV0dXJuIGhlaWdodCgpICsgbWFyZ2luVG9wKCkgKyBtYXJnaW5Cb3R0b20oKTsK
IH0KIAotdm9pZCBSZW5kZXJTVkdDb250YWluZXI6OmNhbGNQcmVmV2lkdGhzKCkKLXsKLSAgICBB
U1NFUlQocHJlZldpZHRoc0RpcnR5KCkpOwotICAgIG1fbWluUHJlZldpZHRoID0gbV9tYXhQcmVm
V2lkdGggPSAwOwotICAgIHNldFByZWZXaWR0aHNEaXJ0eShmYWxzZSk7Ci19Ci0KIHZvaWQgUmVu
ZGVyU1ZHQ29udGFpbmVyOjpsYXlvdXQoKQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsK
LSAgICBBU1NFUlQoIXByZWZXaWR0aHNEaXJ0eSgpKTsKIAogICAgIGNhbGNWaWV3cG9ydCgpOwog
CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAkocmV2aXNpb24gMjEw
ODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTVkdDb250YWluZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBzaG9ydCBsaW5lSGVp
Z2h0KGJvb2wgYiwgYm9vbCBpc1Jvb3RMaW5lQm94ID0gZmFsc2UpIGNvbnN0OwogICAgIHZpcnR1
YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGIsIGJvb2wgaXNSb290TGluZUJveCA9IGZh
bHNlKSBjb25zdDsKICAgICAKLSAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZXaWR0aHMoKTsKICAg
ICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAgICAgdmlydHVhbCB2b2lkIHBhaW50KFBhaW50SW5m
byYsIGludCBwYXJlbnRYLCBpbnQgcGFyZW50WSk7CiAgICAgCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJTVkdIaWRkZW5Db250YWluZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNWR0hpZGRlbkNvbnRhaW5lci5jcHAJKHJldmlzaW9uIDIxMDgyKQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTQsMTMgKzU0LDYgQEAgc2hvcnQgUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVy
OjpiYXNlbGluZQogICAgIHJldHVybiAwOwogfQogCi12b2lkIFJlbmRlclNWR0hpZGRlbkNvbnRh
aW5lcjo6Y2FsY1ByZWZXaWR0aHMoKQotewotICAgIEFTU0VSVChwcmVmV2lkdGhzRGlydHkoKSk7
Ci0gICAgbV9taW5QcmVmV2lkdGggPSBtX21heFByZWZXaWR0aCA9IDA7Ci0gICAgc2V0UHJlZldp
ZHRoc0RpcnR5KGZhbHNlKTsKLX0KLQogdm9pZCBSZW5kZXJTVkdIaWRkZW5Db250YWluZXI6Omxh
eW91dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgJKHJldmlzaW9uIDIxMDgyKQorKysg
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyU1ZHSGlkZGVuQ29udGFpbmVyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2aXJ0dWFs
IHNob3J0IGxpbmVIZWlnaHQoYm9vbCBiLCBib29sIGlzUm9vdExpbmVCb3ggPSBmYWxzZSkgY29u
c3Q7CiAgICAgICAgIHZpcnR1YWwgc2hvcnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGIsIGJvb2wg
aXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKICAgICAgICAgCi0gICAgICAgIHZpcnR1YWwg
dm9pZCBjYWxjUHJlZldpZHRocygpOwogICAgICAgICB2aXJ0dWFsIHZvaWQgbGF5b3V0KCk7CiAg
ICAgICAgIHZpcnR1YWwgdm9pZCBwYWludChQYWludEluZm8mLCBpbnQgcGFyZW50WCwgaW50IHBh
cmVudFkpOwogICAgICAgICAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCShy
ZXZpc2lvbiAyMTA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclNWR1RleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OCw3ICs1OCw2IEBAIGJvb2wgUmVuZGVyU1ZHVGV4dDo6cmVxdWly
ZXNMYXllcigpCiB2b2lkIFJlbmRlclNWR1RleHQ6OmxheW91dCgpCiB7CiAgICAgQVNTRVJUKG5l
ZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldpZHRoc0RpcnR5KCkpOwogCiAgICAgSW50
UmVjdCBvbGRCb3VuZHM7CiAgICAgSW50UmVjdCBvbGRPdXRsaW5lQm94OwpJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlLmNwcAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMyw3ICsyMzMsNyBAQCB2b2lk
IFJlbmRlclRhYmxlOjpjYWxjV2lkdGgoKQogICAgIGlmICh3aWR0aFR5cGUgPiBSZWxhdGl2ZSAm
JiBzdHlsZSgpLT53aWR0aCgpLmlzUG9zaXRpdmUoKSkgewogICAgICAgICAvLyBQZXJjZW50IG9y
IGZpeGVkIHRhYmxlCiAgICAgICAgIG1fd2lkdGggPSBzdHlsZSgpLT53aWR0aCgpLmNhbGNNaW5W
YWx1ZShhdmFpbGFibGVXaWR0aCk7Ci0gICAgICAgIG1fd2lkdGggPSBtYXgobV9taW5QcmVmV2lk
dGgsIG1fd2lkdGgpOworICAgICAgICBtX3dpZHRoID0gbWF4KG1pblByZWZXaWR0aCgpLCBtX3dp
ZHRoKTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBBbiBhdXRvIHdpZHRoIHRhYmxlIHNob3Vs
ZCBzaHJpbmsgdG8gZml0IHdpdGhpbiB0aGUgbGluZSB3aWR0aCBpZiBuZWNlc3NhcnkgaW4gb3Jk
ZXIgdG8gCiAgICAgICAgIC8vIGF2b2lkIG92ZXJsYXBwaW5nIGZsb2F0cy4KQEAgLTI1MCwxMCAr
MjUwLDEwIEBAIHZvaWQgUmVuZGVyVGFibGU6OmNhbGNXaWR0aCgpCiAgICAgICAgIGludCBhdmFp
bENvbnRlbnRXaWR0aCA9IG1heCgwLCBhdmFpbGFibGVXaWR0aCAtIG1hcmdpblRvdGFsKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIEVuc3VyZSB3ZSBhcmVuJ3QgYmlnZ2VyIHRoYW4gb3VyIG1heCB3
aWR0aCBvciBzbWFsbGVyIHRoYW4gb3VyIG1pbiB3aWR0aC4KLSAgICAgICAgbV93aWR0aCA9IG1p
bihhdmFpbENvbnRlbnRXaWR0aCwgbV9tYXhQcmVmV2lkdGgpOworICAgICAgICBtX3dpZHRoID0g
bWluKGF2YWlsQ29udGVudFdpZHRoLCBtYXhQcmVmV2lkdGgoKSk7CiAgICAgfQogICAgIAotICAg
IG1fd2lkdGggPSBtYXgobV93aWR0aCwgbV9taW5QcmVmV2lkdGgpOworICAgIG1fd2lkdGggPSBt
YXgobV93aWR0aCwgbWluUHJlZldpZHRoKCkpOwogCiAgICAgLy8gRmluYWxseSwgd2l0aCBvdXIg
dHJ1ZSB3aWR0aCBkZXRlcm1pbmVkLCBjb21wdXRlIG91ciBtYXJnaW5zIGZvciByZWFsLgogICAg
IG1fbWFyZ2luUmlnaHQgPSAwOwpAQCAtMjY0LDggKzI2NCw2IEBAIHZvaWQgUmVuZGVyVGFibGU6
OmNhbGNXaWR0aCgpCiB2b2lkIFJlbmRlclRhYmxlOjpsYXlvdXQoKQogewogICAgIEFTU0VSVChu
ZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIXByZWZXaWR0aHNEaXJ0eSgpKTsKLSAgICBBU1NF
UlQoIW1fbmVlZHNTZWN0aW9uUmVjYWxjKTsKIAogICAgIGlmIChwb3NDaGlsZE5lZWRzTGF5b3V0
KCkgJiYgIW5vcm1hbENoaWxkTmVlZHNMYXlvdXQoKSAmJiAhc2VsZk5lZWRzTGF5b3V0KCkpIHsK
ICAgICAgICAgLy8gQWxsIHdlIGhhdmUgdG8gZG8gaXMgbGF5IG91dCBvdXIgcG9zaXRpb25lZCBv
YmplY3RzLgpAQCAtMjc0LDYgKzI3Miw4IEBAIHZvaWQgUmVuZGVyVGFibGU6OmxheW91dCgpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICByZWNhbGNTZWN0aW9uc0lmTmVlZGVkKCk7Cisg
ICAgICAgIAogICAgIEludFJlY3Qgb2xkQm91bmRzOwogICAgIEludFJlY3Qgb2xkT3V0bGluZUJv
eDsKICAgICBib29sIGNoZWNrRm9yUmVwYWludCA9IGNoZWNrRm9yUmVwYWludER1cmluZ0xheW91
dCgpOwpAQCAtNjg1LDEwICs2ODUsMTAgQEAgdm9pZCBSZW5kZXJUYWJsZTo6cmVjYWxjU2VjdGlv
bnMoKQogICAgIHNldE5lZWRzTGF5b3V0KHRydWUpOwogfQogCi1SZW5kZXJPYmplY3QqIFJlbmRl
clRhYmxlOjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCkKK1JlbmRlck9iamVj
dCogUmVuZGVyVGFibGU6OnJlbW92ZUNoaWxkTm9kZShSZW5kZXJPYmplY3QqIGNoaWxkLCBib29s
IGZ1bGxSZW1vdmUpCiB7CiAgICAgc2V0TmVlZHNTZWN0aW9uUmVjYWxjKCk7Ci0gICAgcmV0dXJu
IFJlbmRlckNvbnRhaW5lcjo6cmVtb3ZlQ2hpbGROb2RlKGNoaWxkKTsKKyAgICByZXR1cm4gUmVu
ZGVyQ29udGFpbmVyOjpyZW1vdmVDaGlsZE5vZGUoY2hpbGQsIGZ1bGxSZW1vdmUpOwogfQogCiBp
bnQgUmVuZGVyVGFibGU6OmNhbGNCb3JkZXJMZWZ0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGFibGUuaAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNjUsNyArMTY1LDcgQEAgcHVibGljOgogICAgIGJv
b2wgbmVlZHNTZWN0aW9uUmVjYWxjKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1NlY3Rpb25SZWNh
bGM7IH0KICAgICB2b2lkIHNldE5lZWRzU2VjdGlvblJlY2FsYygpIHsgbV9uZWVkc1NlY3Rpb25S
ZWNhbGMgPSB0cnVlOyB9CiAKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogcmVtb3ZlQ2hpbGRO
b2RlKFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1vdmVDaGls
ZE5vZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsUmVtb3ZlID0gdHJ1ZSk7CiAKICAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24qIHNlY3Rpb25BYm92ZShjb25zdCBSZW5kZXJUYWJsZVNlY3Rpb24qLCBi
b29sIHNraXBFbXB0eVNlY3Rpb25zID0gZmFsc2UpIGNvbnN0OwogICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiogc2VjdGlvbkJlbG93KGNvbnN0IFJlbmRlclRhYmxlU2VjdGlvbiosIGJvb2wgc2tpcEVt
cHR5U2VjdGlvbnMgPSBmYWxzZSkgY29uc3Q7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUYWJsZVJvdy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFi
bGVSb3cuY3BwCShyZXZpc2lvbiAyMTA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRh
YmxlUm93LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEyLDcgKzExMiw2IEBAIHZvaWQgUmVuZGVy
VGFibGVSb3c6OmFkZENoaWxkKFJlbmRlck9iamUKIHZvaWQgUmVuZGVyVGFibGVSb3c6OmxheW91
dCgpCiB7CiAgICAgQVNTRVJUKG5lZWRzTGF5b3V0KCkpOwotICAgIEFTU0VSVCghcHJlZldpZHRo
c0RpcnR5KCkpOwogCiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNoaWxkID0gZmlyc3RDaGlsZCgp
OyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewogICAgICAgICBpZiAoY2hp
bGQtPmlzVGFibGVDZWxsKCkpIHsKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRhYmxl
U2VjdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGFibGVT
ZWN0aW9uLmNwcAkocmV2aXNpb24gMjEwODIpCisrKyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
YWJsZVNlY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDA0LDEwICsxMDA0LDEwIEBAIHZv
aWQgUmVuZGVyVGFibGVTZWN0aW9uOjpzcGxpdENvbHVtbihpbnQKICAgICB9CiB9CiAKLVJlbmRl
ck9iamVjdCogUmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0
KiBjaGlsZCkKK1JlbmRlck9iamVjdCogUmVuZGVyVGFibGVTZWN0aW9uOjpyZW1vdmVDaGlsZE5v
ZGUoUmVuZGVyT2JqZWN0KiBjaGlsZCwgYm9vbCBmdWxsUmVtb3ZlKQogewogICAgIHNldE5lZWRz
Q2VsbFJlY2FsYygpOwotICAgIHJldHVybiBSZW5kZXJDb250YWluZXI6OnJlbW92ZUNoaWxkTm9k
ZShjaGlsZCk7CisgICAgcmV0dXJuIFJlbmRlckNvbnRhaW5lcjo6cmVtb3ZlQ2hpbGROb2RlKGNo
aWxkLCBmdWxsUmVtb3ZlKTsKIH0KIAogLy8gSGl0IFRlc3RpbmcKSW5kZXg6IFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCShyZXZpc2lvbiAyMTA4MikKKysrIFdlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlclRhYmxlU2VjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIx
LDcgQEAgcHVibGljOgogCiAgICAgaW50IGdldEJhc2VsaW5lKGludCByb3cpIHsgcmV0dXJuIG1f
Z3JpZFtyb3ddLmJhc2VMaW5lOyB9CiAKLSAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogcmVtb3Zl
Q2hpbGROb2RlKFJlbmRlck9iamVjdCopOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiByZW1v
dmVDaGlsZE5vZGUoUmVuZGVyT2JqZWN0KiwgYm9vbCBmdWxsUmVtb3ZlID0gdHJ1ZSk7CiAKICAg
ICB2aXJ0dWFsIGJvb2wgbm9kZUF0UG9pbnQoY29uc3QgSGl0VGVzdFJlcXVlc3QmLCBIaXRUZXN0
UmVzdWx0JiwgaW50IHgsIGludCB5LCBpbnQgdHgsIGludCB0eSwgSGl0VGVzdEFjdGlvbik7CiAK
SW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiAyMTA4MikKKysrIFdlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzUsOCArNDM1
LDggQEAgdm9pZCBSZW5kZXJUZXh0Ojp0cmltbWVkUHJlZldpZHRocyhpbnQgbAogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCi0gICAgaWYgKG1faGFzVGFiKQotICAgICAgICBjYWxjUHJlZldpZHRo
c0ludGVybmFsKGxlYWRXaWR0aCk7CisgICAgaWYgKG1faGFzVGFiIHx8IHByZWZXaWR0aHNEaXJ0
eSgpKQorICAgICAgICBjYWxjUHJlZldpZHRocyhsZWFkV2lkdGgpOwogCiAgICAgbWluVyA9IG1f
bWluV2lkdGg7CiAgICAgbWF4VyA9IG1fbWF4V2lkdGg7CkBAIC00OTQsMjEgKzQ5NCwzMSBAQCB2
b2lkIFJlbmRlclRleHQ6OnRyaW1tZWRQcmVmV2lkdGhzKGludCBsCiAgICAgfQogfQogCi12b2lk
IFJlbmRlclRleHQ6OmNhbGNQcmVmV2lkdGhzKCkKK2lubGluZSBib29sIGlzU3BhY2VBY2NvcmRp
bmdUb1N0eWxlKFVDaGFyIGMsIFJlbmRlclN0eWxlKiBzdHlsZSkKIHsKLSAgICAvLyBVc2UgMCBm
b3IgdGhlIGxlYWRXaWR0aC4gSWYgdGhlIHRleHQgY29udGFpbnMgYSB2YXJpYWJsZSB3aWR0aCB0
YWIsIHRoZSByZWFsIHdpZHRoCi0gICAgLy8gd2lsbCBnZXQgbWVhc3VyZWQgd2hlbiB0cmltbWVk
TWluTWF4V2lkdGggY2FsbHMgYWdhaW4gd2l0aCB0aGUgcmVhbCBsZWFkV2lkdGguCi0gICAgQVNT
RVJUKHByZWZXaWR0aHNEaXJ0eSgpKTsKLSAgICBjYWxjUHJlZldpZHRoc0ludGVybmFsKDApOwor
ICAgIHJldHVybiBjID09ICcgJyB8fCAoYyA9PSBub0JyZWFrU3BhY2UgJiYgc3R5bGUtPm5ic3BN
b2RlKCkgPT0gU1BBQ0UpOwogfQogCi1pbmxpbmUgYm9vbCBpc1NwYWNlQWNjb3JkaW5nVG9TdHls
ZShVQ2hhciBjLCBSZW5kZXJTdHlsZSogc3R5bGUpCitpbnQgUmVuZGVyVGV4dDo6bWluUHJlZldp
ZHRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYyA9PSAnICcgfHwgKGMgPT0gbm9CcmVha1NwYWNl
ICYmIHN0eWxlLT5uYnNwTW9kZSgpID09IFNQQUNFKTsKKyAgICBpZiAocHJlZldpZHRoc0RpcnR5
KCkpCisgICAgICAgIGNvbnN0X2Nhc3Q8UmVuZGVyVGV4dCo+KHRoaXMpLT5jYWxjUHJlZldpZHRo
cygwKTsKKyAgICAgICAgCisgICAgcmV0dXJuIG1fbWluV2lkdGg7CiB9CiAKLXZvaWQgUmVuZGVy
VGV4dDo6Y2FsY1ByZWZXaWR0aHNJbnRlcm5hbChpbnQgbGVhZFdpZHRoKQoraW50IFJlbmRlclRl
eHQ6Om1heFByZWZXaWR0aCgpIGNvbnN0CiB7CisgICAgaWYgKHByZWZXaWR0aHNEaXJ0eSgpKQor
ICAgICAgICBjb25zdF9jYXN0PFJlbmRlclRleHQqPih0aGlzKS0+Y2FsY1ByZWZXaWR0aHMoMCk7
CisgICAgICAgIAorICAgIHJldHVybiBtX21heFdpZHRoOworfQorCit2b2lkIFJlbmRlclRleHQ6
OmNhbGNQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgpCit7CisgICAgQVNTRVJUKG1faGFzVGFiIHx8
IHByZWZXaWR0aHNEaXJ0eSgpKTsKKwogICAgIG1fbWluV2lkdGggPSAwOwogICAgIG1fYmVnaW5N
aW5XaWR0aCA9IDA7CiAgICAgbV9lbmRNaW5XaWR0aCA9IDA7CkBAIC05OTEsNyArMTAwMSw3IEBA
IHVuc2lnbmVkIGludCBSZW5kZXJUZXh0Ojp3aWR0aCh1bnNpZ25lZCAKICAgICBpbnQgdzsKICAg
ICBpZiAoJmYgPT0gJnN0eWxlKCktPmZvbnQoKSkgewogICAgICAgICBpZiAoIXN0eWxlKCktPnBy
ZXNlcnZlTmV3bGluZSgpICYmICFmcm9tICYmIGxlbiA9PSB0ZXh0TGVuZ3RoKCkpCi0gICAgICAg
ICAgICB3ID0gbV9tYXhXaWR0aDsKKyAgICAgICAgICAgIHcgPSBtYXhQcmVmV2lkdGgoKTsKICAg
ICAgICAgZWxzZQogICAgICAgICAgICAgdyA9IHdpZHRoRnJvbUNhY2hlKGYsIGZyb20sIGxlbiwg
eFBvcyk7CiAgICAgfSBlbHNlCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCShyZXZpc2lvbiAy
MTA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNzUsOSArNzUsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIHNob3J0IGxpbmVIZWlnaHQo
Ym9vbCBmaXJzdExpbmUsIGJvb2wgaXNSb290TGluZUJveCA9IGZhbHNlKSBjb25zdDsKIAotICAg
IHZpcnR1YWwgdm9pZCBjYWxjUHJlZldpZHRocygpOwotICAgIHZpcnR1YWwgaW50IG1pblByZWZX
aWR0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbWluV2lkdGg7IH0KLSAgICB2aXJ0dWFsIGludCBtYXhQ
cmVmV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX21heFdpZHRoOyB9CisgICAgdmlydHVhbCBpbnQg
bWluUHJlZldpZHRoKCkgY29uc3Q7CisgICAgdmlydHVhbCBpbnQgbWF4UHJlZldpZHRoKCkgY29u
c3Q7CiAKICAgICB2b2lkIHRyaW1tZWRQcmVmV2lkdGhzKGludCBsZWFkV2lkdGgsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbnQmIGJlZ2luTWluVywgYm9vbCYgYmVnaW5XUywKQEAgLTEy
OSw2ICsxMjgsNyBAQCBwdWJsaWM6CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIHNldFRleHRJbnRl
cm5hbChQYXNzUmVmUHRyPFN0cmluZ0ltcGw+KTsKKyAgICB2aXJ0dWFsIHZvaWQgY2FsY1ByZWZX
aWR0aHMoaW50IGxlYWRXaWR0aCk7CiAKIHByaXZhdGU6CiAgICAgLy8gTWFrZSBsZW5ndGgoKSBw
cml2YXRlIHNvIHRoYXQgY2FsbGVycyB0aGF0IGhhdmUgYSBSZW5kZXJUZXh0KgpAQCAtMTM4LDgg
KzEzOCw2IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGRlbGV0ZVRleHRCb3hlcygpOwogICAgIGJv
b2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZSh1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCBsZW4pIGNv
bnN0OwotICAgIHZvaWQgY2FsY1ByZWZXaWR0aHNJbnRlcm5hbChpbnQgbGVhZFdpZHRoKTsKLQog
ICAgIGludCB3aWR0aEZyb21DYWNoZShjb25zdCBGb250JiwgaW50IHN0YXJ0LCBpbnQgbGVuLCBp
bnQgeFBvcykgY29uc3Q7CiAgICAgYm9vbCBpc0FsbEFTQ0lJKCkgY29uc3QgeyByZXR1cm4gbV9p
c0FsbEFTQ0lJOyB9CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCShyZXZpc2lvbiAy
MTA4MikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclZpZXcuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCwxMiArNTQsMTMgQEAgUmVuZGVyVmlldzo6UmVuZGVyVmlldyhOb2RlKiBub2RlLCBG
cmFtZQogICAgIG1fbWluUHJlZldpZHRoID0gMDsKICAgICBtX21heFByZWZXaWR0aCA9IDA7CiAK
LSAgICBzZXRQcmVmV2lkdGhzRGlydHkodHJ1ZSk7CisgICAgc2V0UHJlZldpZHRoc0RpcnR5KHRy
dWUsIGZhbHNlKTsKICAgICAKICAgICBzZXRQb3NpdGlvbmVkKHRydWUpOyAvLyB0byAwLDAgOikK
IAogICAgIC8vIENyZWF0ZSBhIG5ldyByb290IGxheWVyIGZvciBvdXIgbGF5ZXIgaGllcmFyY2h5
LgogICAgIG1fbGF5ZXIgPSBuZXcgKG5vZGUtPmRvY3VtZW50KCktPnJlbmRlckFyZW5hKCkpIFJl
bmRlckxheWVyKHRoaXMpOworICAgIHNldEhhc0xheWVyKHRydWUpOwogfQogCiBSZW5kZXJWaWV3
Ojp+UmVuZGVyVmlldygpCkBAIC04NywyMSArODgsMTYgQEAgdm9pZCBSZW5kZXJWaWV3OjpjYWxj
UHJlZldpZHRocygpCiAgICAgUmVuZGVyQmxvY2s6OmNhbGNQcmVmV2lkdGhzKCk7CiAKICAgICBt
X21heFByZWZXaWR0aCA9IG1fbWluUHJlZldpZHRoOwotCi0gICAgc2V0UHJlZldpZHRoc0RpcnR5
KGZhbHNlKTsKIH0KIAogdm9pZCBSZW5kZXJWaWV3OjpsYXlvdXQoKQogewogICAgIGlmIChwcmlu
dGluZygpKQotICAgICAgICBtX21pblByZWZXaWR0aCA9IG1fd2lkdGg7CisgICAgICAgIG1fbWlu
UHJlZldpZHRoID0gbV9tYXhQcmVmV2lkdGggPSBtX3dpZHRoOwogCiAgICAgYm9vbCByZWxheW91
dENoaWxkcmVuID0gIXByaW50aW5nKCkgJiYgKCFtX2ZyYW1lVmlldyB8fCBtX3dpZHRoICE9IG1f
ZnJhbWVWaWV3LT52aXNpYmxlV2lkdGgoKSB8fCBtX2hlaWdodCAhPSBtX2ZyYW1lVmlldy0+dmlz
aWJsZUhlaWdodCgpKTsKICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbikKICAgICAgICAgc2V0Q2hp
bGROZWVkc0xheW91dCh0cnVlLCBmYWxzZSk7Ci0KLSAgICBpZiAocmVjYWxjTWluTWF4KCkpCi0g
ICAgICAgIHJlY2FsY01pbk1heFdpZHRocygpOwogICAgIAogICAgIGlmIChuZWVkc0xheW91dCgp
KQogICAgICAgICBSZW5kZXJCbG9jazo6bGF5b3V0KCk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJXaWRnZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
cldpZGdldC5jcHAJKHJldmlzaW9uIDIxMDgyKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
V2lkZ2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUwLDcgKzE1MCw2IEBAIHZvaWQgUmVuZGVy
V2lkZ2V0OjpzZXRXaWRnZXQoV2lkZ2V0KiB3aWQKIHZvaWQgUmVuZGVyV2lkZ2V0OjpsYXlvdXQo
KQogewogICAgIEFTU0VSVChuZWVkc0xheW91dCgpKTsKLSAgICBBU1NFUlQoIXByZWZXaWR0aHNE
aXJ0eSgpKTsKIAogICAgIHNldE5lZWRzTGF5b3V0KGZhbHNlKTsKIH0K
</data>
<flag name="review"
          id="5752"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>