<?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>23487</bug_id>
          
          <creation_ts>2009-01-22 17:23:58 -0800</creation_ts>
          <short_desc>Eliminate the borderTopExtra lie from RenderBox::y()</short_desc>
          <delta_ts>2009-01-22 19:48:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Tables</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="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>106664</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-22 17:23:58 -0800</bug_when>
    <thetext>Rework table cells so that the y() coordinate never lies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106675</commentid>
    <comment_count>1</comment_count>
      <attachid>26950</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-22 18:41:04 -0800</bug_when>
    <thetext>Created attachment 26950
Patch that not only passes but also progresses layout tests :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106676</commentid>
    <comment_count>2</comment_count>
      <attachid>26950</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-01-22 19:00:50 -0800</bug_when>
    <thetext>Comment on attachment 26950
Patch that not only passes but also progresses layout tests :)

r=me, afaict this looks like it should help perf, but maybe i&apos;m mistaken.  anyhoo, r=me is conditional on perf being good.

also looking at the bit fields for m_intrinsicPaddingTop, m_intrinsicPaddingBottom, and m_widthChanged -- i think we should look at rearranging these to place n_widthChanged first, to reduce the liklihood that we&apos;ll end up with either horrific load alignment and/or an unnecessary word being added to RenderTableCell</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>106683</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2009-01-22 19:48:29 -0800</bug_when>
    <thetext>Fixed.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>26950</attachid>
            <date>2009-01-22 18:41:04 -0800</date>
            <delta_ts>2009-01-22 19:00:50 -0800</delta_ts>
            <desc>Patch that not only passes but also progresses layout tests :)</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>57521</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDQwMTQw
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTU2IEBACisyMDA5LTAx
LTIyICBEYXZpZCBIeWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBUaGlzIHBhdGNo
IGNvbXBsZXRlbHkgcmV3b3JrcyB2ZXJ0aWNhbCBhbGlnbm1lbnQgb2YgdGFibGUgY2VsbHMuICBU
aGUgY3VycmVudCBzeXN0ZW0gdXNlcyBtZXRob2RzIGNhbGxlZCBib3JkZXJUb3BFeHRyYSgpIGFu
ZCBib3JkZXJCb3R0b21FeHRyYSgpIHRvCisgICAgICAgIGFkZCBleHRyYSBzcGFjZSBhYm92ZSBh
bmQgYmVsb3cgdGhlIGNvbnRlbnQgb2YgYSBjZWxsLiAgVGhpcyBzeXN0ZW0gd2FzIG5vdCBjb25m
aW5lZCB0byB0aGUgdGFibGUgY29kZSBhbmQgc3BpbGxlZCBvdXQgaW50byBhbGwgdGhlIG90aGVy
IFJlbmRlck9iamVjdHMuCisgICAgICAgIFRoZSB5LXBvc2l0aW9uIG9mIHRoZSB0YWJsZSBjZWxs
IGJveCB3YXMgc2V0IHRvIHRoZSBvdXRlciBlZGdlIG9mIHRoZSBjZWxsLCBidXQgdGhlIHkoKSBt
ZXRob2Qgb2YgUmVuZGVyQm94IGxpZWQgYW5kIGFkZGVkIGluIGJvcmRlclRvcEV4dHJhKCkuICBo
ZWlnaHQoKQorICAgICAgICBhbHNvIGV4Y2x1ZGVkIHRoZSBleHRyYSBzcGFjZSwgc28gZGlkIG5v
dCBhY2N1cmF0ZWx5IHJlZmxlY3QgdGhlIHRydWUgc2l6ZSBvZiB0aGUgY2VsbC4KKyAgICAgICAg
CisgICAgICAgIFdpdGggdGhlIG5ldyBzeXN0ZW0sIHRoZSB0YWJsZSBjZWxsIGJveCBpcyBjb21w
bGV0ZWx5IGFjY3VyYXRlLiAgVGhlIGV4dHJhIHNwYWNlIGJlY29tZXMgcGFydCBvZiB0aGUgcGFk
ZGluZyBvZiB0aGUgY2VsbC4gIFBhZGRpbmcgaGFzIGJlZW4gcmV3b3JrZWQgc28gdGhhdAorICAg
ICAgICBhZGRpdGlvbmFsIGludHJpbnNpYyBwYWRkaW5nIGNhbiBiZSBhZGRlZCBvbiB0byB0aGUg
c3BlY2lmaWVkIHBhZGRpbmcgZnJvbSBzdHlsZS4gIE9ubHkgdGhlIHRhYmxlIGNvZGUgaGFzIHRv
IGRlYWwgd2l0aCB0aGUgZXh0cmEgY2VsbCBwYWRkaW5nLgorCisgICAgICAgIGxvY2FsVG9BYnNv
bHV0ZUZvckNvbnRlbnQgaGFzIG5vdyBiZWVuIHJlbW92ZWQsIHNpbmNlIHRoZXJlIG5vIGxvbmdl
ciBoYXMgdG8gYmUgYSBzcGVjaWFsIGhhY2tlZCBjb250ZW50IGJveC4KKworICAgICAgICBBIG51
bWJlciBvZiB0YWJsZSBsYXlvdXQgdGVzdHMgcHJvZ3Jlc3Mgd2l0aCB0aGlzIGNoYW5nZSwgc2lu
Y2UgdGhlIG5ldyBsYXlvdXQgc3lzdGVtIGFjdHVhbGx5IGZpeGVzIGV4aXN0aW5nIGJ1Z3MgaW4g
YmFzZWxpbmUgYWxpZ25tZW50IG9mIGNlbGxzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb246OmdldFBy
b3BlcnR5Q1NTVmFsdWUpOgorICAgICAgICBNYWtlIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
biBhc2sgZm9yIHBhZGRpbmcgdmFsdWVzIHRoYXQgZXhjbHVkZSB0aGUgYnVpbHQtaW4gaW50cmlu
c2ljIHBhZGRpbmcuICBUaGlzIGVuc3VyZXMgdGhhdCBnZXRDb21wdXRlZFN0eWxlIGNvbnRpbnVl
cworICAgICAgICB0byBnaXZlIHRoZSByaWdodCBhbnN3ZXIuCisgICAgCisgICAgICAgICogZG9t
L0NvbnRhaW5lck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q29udGFpbmVyTm9kZTo6Z2V0
TG93ZXJSaWdodENvcm5lcik6CisgICAgICAgICogZWRpdGluZy92aXNpYmxlX3VuaXRzLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnByZXZpb3VzTGluZVBvc2l0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6Om5leHRMaW5lUG9zaXRpb24pOgorICAgICAgICAqIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUpOgorICAgICAg
ICBSZW1vdmUgYm9yZGVyVG9wRXh0cmEoKS9ib3JkZXJCb3R0b21FeHRyYSgpIGhhY2tzIGFuZCBs
b2NhbFRvQWJzb2x1dGVGb3JDb250ZW50IGNhbGxzLgorICAgICAgICAKKyAgICAgICAgKiByZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6Om92
ZXJmbG93UmVjdCk6CisgICAgICAgIFJlbW92ZSBib3JkZXJUb3BFeHRyYSgpL2JvcmRlckJvdHRv
bUV4dHJhKCkgaGFja3MgYW5kIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQgY2FsbHMuCisgICAg
ICAgIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6OmxheW91dEJsb2NrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9h
dHMpOgorICAgICAgICBUaGUgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzIGxvZ2lj
IGhhcyBiZWVuIHJld29ya2VkLiAgVGFibGUgY2VsbHMgYW5kIGZpZWxkc2V0cyBkaWQgbm90IHBy
b3Blcmx5IGhhbmRsZSBmbG9hdHMgdGhhdCBzcGlsbGVkIGludG8gdGhlIGJvdHRvbSBwYWRkaW5n
LiAgVGhlCisgICAgICAgIHJlc3VsdGluZyBib3ggbmVlZGVkIHRvIG5vdCBvbmx5IGV4cGFuZCB0
byBlbmNvbXBhc3MgdGhlIGZsb2F0LCBidXQgYWxzbyBuZWVkZWQgdG8gcGxhY2UgdGhlIGZ1bGwg
Ym90dG9tIHBhZGRpbmcgYWZ0ZXIgdGhlIGZsb2F0LiAgVGhlIHN3aXRjaCB0byBtYWtlIHRoZSBl
eHRyYSB0YWJsZSBjZWxsCisgICAgICAgIHNwYWNlIGludG8gcGFkZGluZyBleHBvc2VkIHRoaXMg
aXNzdWUuICBObyBleHRyYSBsYXlvdXQgdGVzdCBpcyByZXF1aXJlZCwgc2luY2UgYW4gZXhpc3Rp
bmcgdGFibGUgbGF5b3V0IHRlc3QgZXhwb3NlcyB0aGlzIGlzc3VlIGFuZCBwcm9ncmVzc2VzIHRv
IG1hdGNoIEZpcmVmb3ggd2l0aAorICAgICAgICB0aGlzIGNoYW5nZS4KKyAgICAKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0cyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJCbG9jazo6cGFpbnRTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQmxvY2s6OmZpbGxTZWxlY3Rpb25HYXBzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrOjpub2RlQXRQb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6cG9zaXRp
b25Gb3JDb29yZGluYXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJCbG9jazo6b2Zmc2V0
Rm9yQ29udGVudHMpOgorICAgICAgICBSZW1vdmUgYm9yZGVyVG9wRXh0cmEoKS9ib3JkZXJCb3R0
b21FeHRyYSgpIGhhY2tzIGFuZCBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50IGNhbGxzLgorICAg
IAorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5oOgorICAgICAgICBBZGQgdGhlIG5l
dyBzaW1wbGlmaWVkIG1ldGhvZCBmb3IgZXhwYW5kaW5nIHRvIGVuY29tcGFzcyBvdmVyaGFuZ2lu
ZyBmbG9hdHMuICBUaGUgbWV0aG9kIGhhcyBiZWVuIGRldmlydHVhbGl6ZWQgYW5kIG1hZGUgdG8g
aW5jbHVkZSBhbGwgb2YgdGhlIGNhc2VzIChhbmQgbm90IGp1c3QgYSBzdWJzZXQpLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJC
b3g6OmFic29sdXRlUmVjdHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94OjphYnNvbHV0
ZVF1YWRzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJCb3g6OnBhaW50TWFzayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCb3g6OmdldE92ZXJmbG93Q2xpcFJlY3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojph
YnNvbHV0ZVRvTG9jYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpsb2NhbFRvQWJz
b2x1dGVRdWFkKToKKyAgICAgICAgUmVtb3ZlIGJvcmRlclRvcEV4dHJhKCkvYm9yZGVyQm90dG9t
RXh0cmEoKSBoYWNrcyBhbmQgbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudCBjYWxscy4KKyAgICAg
ICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJveC5oOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyQm94Ojp5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJveDo6bG9jYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQm94Ojpib3JkZXJCb3hSZWN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckJveDo6b2Zmc2V0SGVpZ2h0KToKKyAgICAgICAgUmVtb3ZlIGJvcmRlclRv
cEV4dHJhKCkvYm9yZGVyQm90dG9tRXh0cmEoKSBoYWNrcyBhbmQgbG9jYWxUb0Fic29sdXRlRm9y
Q29udGVudCBjYWxscy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb250YWluZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ29udGFpbmVyOjphZGRMaW5lQm94UmVjdHMpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGaWVsZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJGaWVsZHNldDo6cGFpbnRNYXNrKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
RmllbGRzZXQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZpZWxkc2V0Ojphdm9pZHNGbG9h
dHMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckZsb3c6OmxvY2FsQ2FyZXRSZWN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnVwZGF0ZUxheWVy
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXI6OmhpdFRlc3RMYXllcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJMYXllcjo6Ym91bmRpbmdCb3gpOgorICAgICAgICAqIHJlbmRlcmluZy9S
ZW5kZXJMaXN0Qm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RCb3g6OmlzUG9p
bnRJbk92ZXJmbG93Q29udHJvbCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmFic29sdXRlVG9Mb2NhbCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZVF1YWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpvZmZzZXRGcm9tQ29udGFpbmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlck9iamVjdDo6cGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJPYmplY3Q6OnBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0
OjpwYWRkaW5nTGVmdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnBhZGRpbmdS
aWdodCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyT2JqZWN0OjpoYXNPdmVyaGFuZ2luZ0Zsb2F0cyk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxh
Y2VkOjpzZWxlY3Rpb25SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclJlcGxhY2VkOjps
b2NhbFNlbGVjdGlvblJlY3QpOgorICAgICAgICBSZW1vdmUgYm9yZGVyVG9wRXh0cmEoKS9ib3Jk
ZXJCb3R0b21FeHRyYSgpIGhhY2tzIGFuZCBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50IGNhbGxz
LiAgQWxzbyBtb2RpZmVkIHBhZGRpbmdMZWZ0L1RvcC9SaWdodC9Cb3R0b20gdG8gdGFrZSBhbiBh
cmd1bWVudCBpbmRpY2F0aW5nCisgICAgICAgIHdoZXRoZXIgb3Igbm90IHRoZSBpbnRyaW5zaWMg
cGFkZGluZyBvZiBhbiBvYmplY3Qgc2hvdWxkIGJlIGluY2x1ZGVkIChieSBkZWZhdWx0IGl0IGlz
KS4gIGdldENvbXB1dGVkU3R5bGUgbmVlZHMgdG8gZXhjbHVkZSBpdCwgd2hpY2ggaXMgd2h5IHRo
aXMgYXJndW1lbnQgaXMKKyAgICAgICAgbmVjZXNzYXJ5LgorCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlclRhYmxlQ2VsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6
OlJlbmRlclRhYmxlQ2VsbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBh
ZGRpbmdUb3ApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWRkaW5nQm90
dG9tKToKKyAgICAgICAgVGhlIG5ldyBwYWRkaW5nVG9wKCkgYW5kIHBhZGRpbmdCb3R0b20oKSBt
ZXRob2RzIG9uIHRhYmxlIGNlbGxzIGluY2x1ZGUgdGhlIGV4dHJhIGludHJpbnNpYyBwYWRkaW5n
LgorICAgIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpzZXRPdmVycmlkZVNp
emUpOgorICAgICAgICBXaGVuIGEgdGFibGUncyBvdmVycmlkZSBzaXplIGdldHMgYWx0ZXJlZCwg
dGhlIGludHJpbnNpYyBwYWRkaW5nIG5lZWRzIHRvIGJlIGNsZWFyZWQuCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjphYnNvbHV0ZUNsaXBwZWRPdmVyZmxvd1Jl
Y3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQWJzb2x1dGVS
ZXBhaW50UmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmJhc2VsaW5l
UG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVDZWxsOjpwYWludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNCZWhpbmRD
ZWxsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6cGFpbnRCb3hEZWNvcmF0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OnBhaW50TWFzayk6Cisg
ICAgICAgIFJlbW92ZSBib3JkZXJUb3BFeHRyYSgpL2JvcmRlckJvdHRvbUV4dHJhKCkgaGFja3Mg
YW5kIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQgY2FsbHMuCisgICAgICAgIAorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRh
YmxlQ2VsbDo6c2V0SW50cmluc2ljUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJUYWJsZUNlbGw6OnNldEludHJpbnNpY1BhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyVGFibGVDZWxsOjpzZXRJbnRyaW5zaWNQYWRkaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRhYmxlQ2VsbDo6Y2xlYXJJbnRyaW5zaWNQYWRkaW5nKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRhYmxlQ2VsbDo6aW50cmluc2ljUGFkZGluZ1RvcCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUYWJsZUNlbGw6OmludHJpbnNpY1BhZGRpbmdCb3R0b20pOgorICAgICAg
ICBBZGQgbmV3IGhlbHBlciBtZXRob2RzIGZvciBnZXR0aW5nL3NldHRpbmcgYSBjZWxsJ3MgaW50
cmluc2ljIHBhZGRpbmcuCisgICAgCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRhYmxlU2Vj
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUYWJsZVNlY3Rpb246OmNhbGNSb3dI
ZWlnaHQpOgorICAgICAgICBjYWxjUm93SGVpZ2h0IGhhcyBiZWVuIG1vZGlmaWVkIHRvIGV4Y2x1
ZGUgdGhlIGludHJpbnNpYyBwYWRkaW5nIHdoZW4gY2FsY3VsYXRpbmcgdGhlIGJhc2UgaGVpZ2h0
IG9mIHJvd3MgcHJpb3IgdG8gZmxleGluZy4gIEJlY2F1c2UgYSBjZWxsIG5vdyBpbmNsdWRlcyB0
aGF0CisgICAgICAgIGV4dHJhIHNwYWNlLCBpdCBoYXMgdG8gYmUgc3VidHJhY3RlZCBvdXQgaW4g
dGhpcyBtZXRob2QuCisgICAgICAgIAorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGFibGVTZWN0
aW9uOjpsYXlvdXRSb3dzKToKKyAgICAgICAgTW9kaWZ5IHRoZSBjb2RlIHRoYXQgc2V0cyB1cCB0
aGUgaW50cmluc2ljIHBhZGRpbmcgc28gdGhhdCBpdCBkb2VzIGEgcmVsYXlvdXQgaWYgdGhlIGlu
dHJpbnNpYyBwYWRkaW5nIGNoYW5nZXMuICAgVGhlcmUgd2FzIGFsc28gYW4gZXJyb3Igd2hlcmUg
dGhlIGJhc2VsaW5lCisgICAgICAgIHBvc2l0aW9uIG1pc21hdGNoZWQgbGVhZGluZyB0byBuZWdh
dGl2ZSBpbnRyaW5zaWMgcGFkZGluZyBiZWluZyBhZGRlZCBpbiAodGhpcyBlcnJvciBleGlzdHMg
aW4gVG9UKS4gIFRoZSBjb2RlIG5vdyBwcm9wZXJseSBpZ25vcmVzIGNlbGxzIHRoYXQgZG9uJ3Qg
ZXN0YWJsaXNoCisgICAgICAgIGEgYmFzZWxpbmUuICBBIG51bWJlciBvZiB0ZXN0cyBwcm9ncmVz
cyB3aXRoIHRoaXMgY2hhbmdlLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
VGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0OjphZGRMaW5lQm94UmVjdHMp
OgorICAgICAgICBSZW1vdmUgYm9yZGVyVG9wRXh0cmEoKS9ib3JkZXJCb3R0b21FeHRyYSgpIGhh
Y2tzIGFuZCBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50IGNhbGxzLgorICAgICAgICAKKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyVHJlZUFzVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpv
cGVyYXRvcjw8KToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVGV4dFJ1bik6CisgICAgICAgIE1v
ZGlmeSB0aGUgcmVuZGVyIHRyZWUgZHVtcGluZyBjb2RlIHRvIGNvbnRpbnVlIHRvIHByb2R1Y2Ug
dGhlIHNhbWUgcmVzdWx0cyBhcyBiZWZvcmUuICBUaGlzIGlzIHJlYWxseSBhIGhhY2ssIHNpbmNl
IHdlJ3JlIG5vdyBjYXBhYmxlIG9mIGluZGljYXRpbmcgdGhlIGNvcnJlY3QKKyAgICAgICAgcG9z
aXRpb24gZm9yIHRoZSBkZXNjZW5kYW50cyBvZiBjZWxscyB3aXRoIGludHJpbnNpYyBwYWRkaW5n
IChhbmQgYWxzbyBpbmRpY2F0aW5nIHdoYXQgdGhlIGNvcnJlY3QgY2VsbCBib3ggaXMpLiAgQSBm
dXR1cmUgcGF0Y2ggY2FuIHJlbW92ZSB0aGVzZSBoYWNrcyBzbyB0aGF0IHRoZQorICAgICAgICBs
YXlvdXQgdGVzdCByZXN1bHRzIGNhbiBhbGwgYmUgcmVnZW5lcmF0ZWQuCisKIDIwMDktMDEtMjIg
IEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEp1
c3RpbiBHYXJjaWEuCkluZGV4OiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNp
b24gNDAxMTcpCisrKyBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtODYzLDE5ICs4NjMsMTkgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gQ1NTQ29t
cHV0ZWRTdHlsZURlYwogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVh
dGUoc3R5bGUtPm92ZXJmbG93WSgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBhZGRpbmdU
b3A6CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVuZGVyZXItPnBhZGRpbmdUb3AoKSwgQ1NTUHJpbWl0
aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZh
bHVlOjpjcmVhdGUocmVuZGVyZXItPnBhZGRpbmdUb3AoZmFsc2UpLCBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BYKTsKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHN0eWxlLT5wYWRkaW5nVG9wKCkpOwogICAgICAgICBjYXNlIENTU1Byb3BlcnR5UGFkZGluZ1Jp
Z2h0OgogICAgICAgICAgICAgaWYgKHJlbmRlcmVyKQotICAgICAgICAgICAgICAgIHJldHVybiBD
U1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlbmRlcmVyLT5wYWRkaW5nUmlnaHQoKSwgQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2
ZVZhbHVlOjpjcmVhdGUocmVuZGVyZXItPnBhZGRpbmdSaWdodChmYWxzZSksIENTU1ByaW1pdGl2
ZVZhbHVlOjpDU1NfUFgpOwogICAgICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpj
cmVhdGUoc3R5bGUtPnBhZGRpbmdSaWdodCgpKTsKICAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVBh
ZGRpbmdCb3R0b206CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpCi0gICAgICAgICAgICAgICAg
cmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVuZGVyZXItPnBhZGRpbmdCb3R0b20o
KSwgQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVuZGVyZXItPnBhZGRpbmdCb3R0b20oZmFsc2UpLCBD
U1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1BYKTsKICAgICAgICAgICAgIHJldHVybiBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKHN0eWxlLT5wYWRkaW5nQm90dG9tKCkpOwogICAgICAgICBjYXNlIENT
U1Byb3BlcnR5UGFkZGluZ0xlZnQ6CiAgICAgICAgICAgICBpZiAocmVuZGVyZXIpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocmVuZGVyZXItPnBhZGRp
bmdMZWZ0KCksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOworICAgICAgICAgICAgICAgIHJl
dHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHJlbmRlcmVyLT5wYWRkaW5nTGVmdChmYWxz
ZSksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUFgpOwogICAgICAgICAgICAgcmV0dXJuIENTU1By
aW1pdGl2ZVZhbHVlOjpjcmVhdGUoc3R5bGUtPnBhZGRpbmdMZWZ0KCkpOwogICAgICAgICBjYXNl
IENTU1Byb3BlcnR5UGFnZUJyZWFrQWZ0ZXI6CiAgICAgICAgICAgICByZXR1cm4gQ1NTUHJpbWl0
aXZlVmFsdWU6OmNyZWF0ZShzdHlsZS0+cGFnZUJyZWFrQWZ0ZXIoKSk7CkluZGV4OiBkb20vQ29u
dGFpbmVyTm9kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0NvbnRhaW5lck5vZGUuY3BwCShyZXZp
c2lvbiA0MDExNykKKysrIGRvbS9Db250YWluZXJOb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzIyLDggKzcyMiw3IEBAIGJvb2wgQ29udGFpbmVyTm9kZTo6Z2V0TG93ZXJSaWdodENvcm5lcigK
ICAgICB7CiAgICAgICAgIFJlbmRlckJveCogYm94ID0gUmVuZGVyQm94Ojp0b1JlbmRlckJveChv
KTsKICAgICAgICAgcG9pbnQgPSBvLT5sb2NhbFRvQWJzb2x1dGUoKTsKLSAgICAgICAgcG9pbnQu
bW92ZShib3gtPndpZHRoKCksCi0gICAgICAgICAgICAgICAgICAgYm94LT5oZWlnaHQoKSArIGJv
eC0+Ym9yZGVyVG9wRXh0cmEoKSArIGJveC0+Ym9yZGVyQm90dG9tRXh0cmEoKSk7CisgICAgICAg
IHBvaW50Lm1vdmUoYm94LT53aWR0aCgpLCBib3gtPmhlaWdodCgpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCkluZGV4OiBlZGl0aW5nL3Zpc2libGVfdW5pdHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIGVkaXRpbmcvdmlzaWJsZV91bml0cy5jcHAJKHJldmlzaW9uIDQwMTE3KQorKysgZWRp
dGluZy92aXNpYmxlX3VuaXRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDk0LDcgKzQ5NCw3IEBA
IFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0xpbmVQb3NpdGlvbihjb24KICAgICAKICAgICBpZiAo
cm9vdCkgewogICAgICAgICAvLyBGSVhNRTogQ2FuIGJlIHdyb25nIGZvciBtdWx0aS1jb2x1bW4g
bGF5b3V0IGFuZCB3aXRoIHRyYW5zZm9ybXMuCi0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0g
Y29udGFpbmluZ0Jsb2NrLT5sb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KEZsb2F0UG9pbnQoKSk7
CisgICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gY29udGFpbmluZ0Jsb2NrLT5sb2NhbFRvQWJz
b2x1dGUoRmxvYXRQb2ludCgpKTsKICAgICAgICAgaWYgKGNvbnRhaW5pbmdCbG9jay0+aGFzT3Zl
cmZsb3dDbGlwKCkpCiAgICAgICAgICAgICBhYnNQb3MgLT0gY29udGFpbmluZ0Jsb2NrLT5sYXll
cigpLT5zY3JvbGxlZENvbnRlbnRPZmZzZXQoKTsKICAgICAgICAgUmVuZGVyT2JqZWN0ICpyZW5k
ZXJlciA9IHJvb3QtPmNsb3Nlc3RMZWFmQ2hpbGRGb3JYUG9zKHggLSBhYnNQb3MueCgpLCBpc0Vk
aXRhYmxlUG9zaXRpb24ocCkpLT5vYmplY3QoKTsKQEAgLTU5NSw3ICs1OTUsNyBAQCBWaXNpYmxl
UG9zaXRpb24gbmV4dExpbmVQb3NpdGlvbihjb25zdCBWCiAgICAgCiAgICAgaWYgKHJvb3QpIHsK
ICAgICAgICAgLy8gRklYTUU6IENhbiBiZSB3cm9uZyBmb3IgbXVsdGktY29sdW1uIGxheW91dCBh
bmQgd2l0aCB0cmFuc2Zvcm1zLgotICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGNvbnRhaW5p
bmdCbG9jay0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgICAg
ICBGbG9hdFBvaW50IGFic1BvcyA9IGNvbnRhaW5pbmdCbG9jay0+bG9jYWxUb0Fic29sdXRlKEZs
b2F0UG9pbnQoKSk7CiAgICAgICAgIGlmIChjb250YWluaW5nQmxvY2stPmhhc092ZXJmbG93Q2xp
cCgpKQogICAgICAgICAgICAgYWJzUG9zIC09IGNvbnRhaW5pbmdCbG9jay0+bGF5ZXIoKS0+c2Ny
b2xsZWRDb250ZW50T2Zmc2V0KCk7CiAgICAgICAgIFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBy
b290LT5jbG9zZXN0TGVhZkNoaWxkRm9yWFBvcyh4IC0gYWJzUG9zLngoKSwgaXNFZGl0YWJsZVBv
c2l0aW9uKHApKS0+b2JqZWN0KCk7CkluZGV4OiByZW5kZXJpbmcvTGF5b3V0U3RhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHJlbmRlcmluZy9MYXlvdXRTdGF0ZS5jcHAJKHJldmlzaW9uIDQwMTE3KQor
KysgcmVuZGVyaW5nL0xheW91dFN0YXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODgsNyArODgs
NyBAQCBMYXlvdXRTdGF0ZTo6TGF5b3V0U3RhdGUoUmVuZGVyT2JqZWN0KiByCiAjZW5kaWYKIHsK
ICAgICBSZW5kZXJPYmplY3QqIGNvbnRhaW5lciA9IHJvb3QtPmNvbnRhaW5lcigpOwotICAgIEZs
b2F0UG9pbnQgYWJzQ29udGVudFBvaW50ID0gY29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGVGb3JD
b250ZW50KEZsb2F0UG9pbnQoKSwgZmFsc2UsIHRydWUpOworICAgIEZsb2F0UG9pbnQgYWJzQ29u
dGVudFBvaW50ID0gY29udGFpbmVyLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpLCBmYWxz
ZSwgdHJ1ZSk7CiAgICAgbV9vZmZzZXQgPSBJbnRTaXplKGFic0NvbnRlbnRQb2ludC54KCksIGFi
c0NvbnRlbnRQb2ludC55KCkpOwogfQogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAJKHJldmlzaW9uIDQwMTE3
KQorKysgcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEwLDgg
KzUxMCw4IEBAIEludFJlY3QgUmVuZGVyQmxvY2s6Om92ZXJmbG93UmVjdChib29sIGkKICAgICBp
ZiAoIWluY2x1ZGVJbnRlcmlvciAmJiBoYXNPdmVyZmxvd0NsaXAoKSkKICAgICAgICAgcmV0dXJu
IGJvcmRlckJveFJlY3QoKTsKICAgICBpbnQgbCA9IG92ZXJmbG93TGVmdChpbmNsdWRlSW50ZXJp
b3IpOwotICAgIGludCB0ID0gbWluKG92ZXJmbG93VG9wKGluY2x1ZGVJbnRlcmlvciksIC1ib3Jk
ZXJUb3BFeHRyYSgpKTsKLSAgICByZXR1cm4gSW50UmVjdChsLCB0LCBvdmVyZmxvd1dpZHRoKGlu
Y2x1ZGVJbnRlcmlvcikgLSBsLCBtYXgob3ZlcmZsb3dIZWlnaHQoaW5jbHVkZUludGVyaW9yKSwg
aGVpZ2h0KCkgKyBib3JkZXJCb3R0b21FeHRyYSgpKSAtIHQpOworICAgIGludCB0ID0gb3ZlcmZs
b3dUb3AoaW5jbHVkZUludGVyaW9yKTsKKyAgICByZXR1cm4gSW50UmVjdChsLCB0LCBvdmVyZmxv
d1dpZHRoKGluY2x1ZGVJbnRlcmlvcikgLSBsLCBtYXgob3ZlcmZsb3dIZWlnaHQoaW5jbHVkZUlu
dGVyaW9yKSwgaGVpZ2h0KCkpIC0gdCk7CiB9CiAKIGJvb2wgUmVuZGVyQmxvY2s6OmlzU2VsZkNv
bGxhcHNpbmdCbG9jaygpIGNvbnN0CkBAIC02NTksOCArNjU5LDcgQEAgdm9pZCBSZW5kZXJCbG9j
azo6bGF5b3V0QmxvY2soYm9vbCByZWxheQogCiAgICAgLy8gRXhwYW5kIG91ciBpbnRyaW5zaWMg
aGVpZ2h0IHRvIGVuY29tcGFzcyBmbG9hdHMuCiAgICAgaW50IHRvQWRkID0gYm9yZGVyQm90dG9t
KCkgKyBwYWRkaW5nQm90dG9tKCkgKyBob3Jpem9udGFsU2Nyb2xsYmFySGVpZ2h0KCk7Ci0gICAg
aWYgKGZsb2F0Qm90dG9tKCkgPiAoaGVpZ2h0KCkgLSB0b0FkZCkgJiYgKGlzSW5saW5lQmxvY2tP
cklubGluZVRhYmxlKCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGhhc092ZXJmbG93
Q2xpcCgpIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocGFyZW50KCkg
JiYgcGFyZW50KCktPmlzRmxleGlibGVCb3goKSB8fCBtX2hhc0NvbHVtbnMpKSkKKyAgICBpZiAo
ZmxvYXRCb3R0b20oKSA+IChoZWlnaHQoKSAtIHRvQWRkKSAmJiBleHBhbmRzVG9FbmNsb3NlT3Zl
cmhhbmdpbmdGbG9hdHMoKSkKICAgICAgICAgc2V0SGVpZ2h0KGZsb2F0Qm90dG9tKCkgKyB0b0Fk
ZCk7CiAgICAgCiAgICAgLy8gTm93IGxheSBvdXQgb3VyIGNvbHVtbnMgd2l0aGluIHRoaXMgaW50
cmluc2ljIGhlaWdodCwgc2luY2UgdGhleSBjYW4gc2xpZ2h0bHkgYWZmZWN0IHRoZSBpbnRyaW5z
aWMgaGVpZ2h0IGFzCkBAIC02OTMsMTEgKzY5Miw2IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmxheW91
dEJsb2NrKGJvb2wgcmVsYXkKICAgICBpZiAocHJldmlvdXNIZWlnaHQgIT0gaGVpZ2h0KCkpCiAg
ICAgICAgIHJlbGF5b3V0Q2hpbGRyZW4gPSB0cnVlOwogCi0gICAgLy8gU29tZSBjbGFzc2VzIG9m
IG9iamVjdHMgKGZsb2F0cyBhbmQgZmllbGRzZXRzIHdpdGggbm8gc3BlY2lmaWVkIGhlaWdodHMg
YW5kIHRhYmxlIGNlbGxzKSBleHBhbmQgdG8gZW5jb21wYXNzCi0gICAgLy8gb3Zlcmhhbmdpbmcg
ZmxvYXRzLgotICAgIGlmIChoYXNPdmVyaGFuZ2luZ0Zsb2F0cygpICYmIGV4cGFuZHNUb0VuY2xv
c2VPdmVyaGFuZ2luZ0Zsb2F0cygpKQotICAgICAgICBzZXRIZWlnaHQoZmxvYXRCb3R0b20oKSAr
IGJvcmRlckJvdHRvbSgpICsgcGFkZGluZ0JvdHRvbSgpKTsKLQogICAgIGlmICgoaXNDZWxsIHx8
IGlzSW5saW5lKCkgfHwgaXNGbG9hdGluZ09yUG9zaXRpb25lZCgpIHx8IGlzUm9vdCgpKSAmJiAh
aGFzT3ZlcmZsb3dDbGlwKCkgJiYgIWhhc0NvbnRyb2xDbGlwKCkpCiAgICAgICAgIGFkZFZpc3Vh
bE92ZXJmbG93KGZsb2F0UmVjdCgpKTsKIApAQCAtNzY0LDYgKzc1OCwxMSBAQCB2b2lkIFJlbmRl
ckJsb2NrOjpsYXlvdXRCbG9jayhib29sIHJlbGF5CiAgICAgc2V0TmVlZHNMYXlvdXQoZmFsc2Up
OwogfQogCitib29sIFJlbmRlckJsb2NrOjpleHBhbmRzVG9FbmNsb3NlT3ZlcmhhbmdpbmdGbG9h
dHMoKSBjb25zdAoreworICAgIHJldHVybiBpc0lubGluZUJsb2NrT3JJbmxpbmVUYWJsZSgpIHx8
IGlzRmxvYXRpbmdPclBvc2l0aW9uZWQoKSB8fCBoYXNPdmVyZmxvd0NsaXAoKSB8fCAocGFyZW50
KCkgJiYgcGFyZW50KCktPmlzRmxleGlibGVCb3goKSkgfHwgbV9oYXNDb2x1bW5zIHx8IGlzVGFi
bGVDZWxsKCkgfHwgaXNGaWVsZHNldCgpOworfQorCiB2b2lkIFJlbmRlckJsb2NrOjphZGp1c3RQ
b3NpdGlvbmVkQmxvY2soUmVuZGVyT2JqZWN0KiBjaGlsZCwgY29uc3QgTWFyZ2luSW5mbyYgbWFy
Z2luSW5mbykKIHsKICAgICBpZiAoY2hpbGQtPmhhc1N0YXRpY1goKSkgewpAQCAtMTg5NiwxMSAr
MTg5NSwxMSBAQCBHYXBSZWN0cyBSZW5kZXJCbG9jazo6c2VsZWN0aW9uR2FwUmVjdHMoCiAgICAg
ICAgIHJldHVybiBHYXBSZWN0cygpOwogCiAgICAgLy8gRklYTUU6IHRoaXMgaXMgYnJva2VuIHdp
dGggdHJhbnNmb3JtcwotICAgIEZsb2F0UG9pbnQgYWJzQ29udGVudFBvaW50ID0gbG9jYWxUb0Fi
c29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgIEZsb2F0UG9pbnQgYWJzQ29udGVu
dFBvaW50ID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7CiAgICAgaWYgKGhhc092ZXJm
bG93Q2xpcCgpKQogICAgICAgICBhYnNDb250ZW50UG9pbnQgLT0gbGF5ZXIoKS0+c2Nyb2xsZWRD
b250ZW50T2Zmc2V0KCk7CiAKLSAgICBpbnQgbGFzdFRvcCA9IC1ib3JkZXJUb3BFeHRyYSgpOwor
ICAgIGludCBsYXN0VG9wID0gMDsKICAgICBpbnQgbGFzdExlZnQgPSBsZWZ0U2VsZWN0aW9uT2Zm
c2V0KHRoaXMsIGxhc3RUb3ApOwogICAgIGludCBsYXN0UmlnaHQgPSByaWdodFNlbGVjdGlvbk9m
ZnNldCh0aGlzLCBsYXN0VG9wKTsKICAgICAKQEAgLTE5MTAsNyArMTkwOSw3IEBAIEdhcFJlY3Rz
IFJlbmRlckJsb2NrOjpzZWxlY3Rpb25HYXBSZWN0cygKIHZvaWQgUmVuZGVyQmxvY2s6OnBhaW50
U2VsZWN0aW9uKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBpbnQgdHgsIGludCB0eSkKIHsKICAgICBp
ZiAoc2hvdWxkUGFpbnRTZWxlY3Rpb25HYXBzKCkgJiYgcGFpbnRJbmZvLnBoYXNlID09IFBhaW50
UGhhc2VGb3JlZ3JvdW5kKSB7Ci0gICAgICAgIGludCBsYXN0VG9wID0gLWJvcmRlclRvcEV4dHJh
KCk7CisgICAgICAgIGludCBsYXN0VG9wID0gMDsKICAgICAgICAgaW50IGxhc3RMZWZ0ID0gbGVm
dFNlbGVjdGlvbk9mZnNldCh0aGlzLCBsYXN0VG9wKTsKICAgICAgICAgaW50IGxhc3RSaWdodCA9
IHJpZ2h0U2VsZWN0aW9uT2Zmc2V0KHRoaXMsIGxhc3RUb3ApOwogICAgICAgICBwYWludEluZm8u
Y29udGV4dC0+c2F2ZSgpOwpAQCAtMTk3Myw3ICsxOTcyLDcgQEAgR2FwUmVjdHMgUmVuZGVyQmxv
Y2s6OmZpbGxTZWxlY3Rpb25HYXBzKAogCiAgICAgLy8gR28gYWhlYWQgYW5kIGZpbGwgdGhlIHZl
cnRpY2FsIGdhcCBhbGwgdGhlIHdheSB0byB0aGUgYm90dG9tIG9mIG91ciBibG9jayBpZiB0aGUg
c2VsZWN0aW9uIGV4dGVuZHMgcGFzdCBvdXIgYmxvY2suCiAgICAgaWYgKHJvb3RCbG9jayA9PSB0
aGlzICYmIChtX3NlbGVjdGlvblN0YXRlICE9IFNlbGVjdGlvbkJvdGggJiYgbV9zZWxlY3Rpb25T
dGF0ZSAhPSBTZWxlY3Rpb25FbmQpKQotICAgICAgICByZXN1bHQudW5pdGVDZW50ZXIoZmlsbFZl
cnRpY2FsU2VsZWN0aW9uR2FwKGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsIHR5ICsgaGVp
Z2h0KCkgKyBib3JkZXJCb3R0b21FeHRyYSgpLAorICAgICAgICByZXN1bHQudW5pdGVDZW50ZXIo
ZmlsbFZlcnRpY2FsU2VsZWN0aW9uR2FwKGxhc3RUb3AsIGxhc3RMZWZ0LCBsYXN0UmlnaHQsIHR5
ICsgaGVpZ2h0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgcm9vdEJsb2NrLCBibG9ja1gsIGJsb2NrWSwgcGFpbnRJbmZvKSk7CiAgICAgcmV0
dXJuIHJlc3VsdDsKIH0KQEAgLTMxNjQsMTAgKzMxNjMsOSBAQCBib29sIFJlbmRlckJsb2NrOjpu
b2RlQXRQb2ludChjb25zdCBIaXRUCiAKICAgICAvLyBOb3cgaGl0IHRlc3Qgb3VyIGJhY2tncm91
bmQKICAgICBpZiAoIWlubGluZUZsb3cgJiYgKGhpdFRlc3RBY3Rpb24gPT0gSGl0VGVzdEJsb2Nr
QmFja2dyb3VuZCB8fCBoaXRUZXN0QWN0aW9uID09IEhpdFRlc3RDaGlsZEJsb2NrQmFja2dyb3Vu
ZCkpIHsKLSAgICAgICAgaW50IHRvcEV4dHJhID0gYm9yZGVyVG9wRXh0cmEoKTsKLSAgICAgICAg
SW50UmVjdCBib3VuZHNSZWN0KHR4LCB0eSAtIHRvcEV4dHJhLCB3aWR0aCgpLCBoZWlnaHQoKSAr
IHRvcEV4dHJhICsgYm9yZGVyQm90dG9tRXh0cmEoKSk7CisgICAgICAgIEludFJlY3QgYm91bmRz
UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdodCgpKTsKICAgICAgICAgaWYgKHZpc2libGVUb0hp
dFRlc3RpbmcoKSAmJiBib3VuZHNSZWN0LmNvbnRhaW5zKF94LCBfeSkpIHsKLSAgICAgICAgICAg
IHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQb2ludChfeCAtIHR4LCBfeSAtIHR5ICsg
dG9wRXh0cmEpKTsKKyAgICAgICAgICAgIHVwZGF0ZUhpdFRlc3RSZXN1bHQocmVzdWx0LCBJbnRQ
b2ludChfeCAtIHR4LCBfeSAtIHR5KSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KQEAgLTMyNzUsNyArMzI3Myw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5kZXJC
bG9jazo6cG9zaXRpb25Gb3IKICAgICAgICAgcmV0dXJuIFJlbmRlckZsb3c6OnBvc2l0aW9uRm9y
Q29vcmRpbmF0ZXMoeCwgeSk7IAogCiAgICAgaW50IHRvcCA9IGJvcmRlclRvcCgpOwotICAgIGlu
dCBib3R0b20gPSB0b3AgKyBib3JkZXJUb3BFeHRyYSgpICsgcGFkZGluZ1RvcCgpICsgY29udGVu
dEhlaWdodCgpICsgcGFkZGluZ0JvdHRvbSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKKyAgICBp
bnQgYm90dG9tID0gdG9wICsgcGFkZGluZ1RvcCgpICsgY29udGVudEhlaWdodCgpICsgcGFkZGlu
Z0JvdHRvbSgpOwogCiAgICAgaW50IGxlZnQgPSBib3JkZXJMZWZ0KCk7CiAgICAgaW50IHJpZ2h0
ID0gbGVmdCArIHBhZGRpbmdMZWZ0KCkgKyBjb250ZW50V2lkdGgoKSArIHBhZGRpbmdSaWdodCgp
OwpAQCAtMzM4Niw4ICszMzg0LDYgQEAgVmlzaWJsZVBvc2l0aW9uIFJlbmRlckJsb2NrOjpwb3Np
dGlvbkZvcgogCiB2b2lkIFJlbmRlckJsb2NrOjpvZmZzZXRGb3JDb250ZW50cyhpbnQmIHR4LCBp
bnQmIHR5KSBjb25zdAogewotICAgIHR5IC09IGJvcmRlclRvcEV4dHJhKCk7Ci0gICAgCiAgICAg
aWYgKGhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICBtX2xheWVyLT5hZGRTY3JvbGxlZENvbnRl
bnRPZmZzZXQodHgsIHR5KTsKIApJbmRleDogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHJldmlzaW9uIDQwMTE3KQorKysgcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzMSw2ICszMzEsOCBAQCBw
cml2YXRlOgogICAgIHZvaWQgY2FsY0NvbHVtbldpZHRoKCk7CiAgICAgaW50IGxheW91dENvbHVt
bnMoaW50IGVuZE9mQ29udGVudCA9IC0xKTsKIAorICAgIGJvb2wgZXhwYW5kc1RvRW5jbG9zZU92
ZXJoYW5naW5nRmxvYXRzKCkgY29uc3Q7CisKIHByb3RlY3RlZDoKICAgICBzdHJ1Y3QgRmxvYXRp
bmdPYmplY3QgewogICAgICAgICBlbnVtIFR5cGUgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlckJv
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHJldmlzaW9uIDQw
MTE3KQorKysgcmVuZGVyaW5nL1JlbmRlckJveC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3
ICszNTIsNyBAQCB2b2lkIFJlbmRlckJveDo6YWJzb2x1dGVSZWN0cyhWZWN0b3I8SW50CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eCAtIHgoKSArIGNvbnRpbnVhdGlvbi0+
Y29udGFpbmluZ0Jsb2NrKCktPngoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHR5IC0geSgpICsgY29udGludWF0aW9uLT5jb250YWluaW5nQmxvY2soKS0+eSgpLCB0b3BM
ZXZlbCk7CiAgICAgfSBlbHNlCi0gICAgICAgIHJlY3RzLmFwcGVuZChJbnRSZWN0KHR4LCB0eSwg
d2lkdGgoKSwgaGVpZ2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEo
KSkpOworICAgICAgICByZWN0cy5hcHBlbmQoSW50UmVjdCh0eCwgdHksIHdpZHRoKCksIGhlaWdo
dCgpKSk7CiB9CiAKIHZvaWQgUmVuZGVyQm94OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG9hdFF1
YWQ+JiBxdWFkcywgYm9vbCB0b3BMZXZlbCkKQEAgLTM2NywxMyArMzY3LDEzIEBAIHZvaWQgUmVu
ZGVyQm94OjphYnNvbHV0ZVF1YWRzKFZlY3RvcjxGbG8KICAgICAgICAgcXVhZHMuYXBwZW5kKGxv
Y2FsVG9BYnNvbHV0ZVF1YWQobG9jYWxSZWN0KSk7CiAgICAgICAgIGNvbnRpbnVhdGlvbi0+YWJz
b2x1dGVRdWFkcyhxdWFkcywgdG9wTGV2ZWwpOwogICAgIH0gZWxzZQotICAgICAgICBxdWFkcy5h
cHBlbmQobG9jYWxUb0Fic29sdXRlUXVhZChGbG9hdFJlY3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0
KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSkpKTsKKyAgICAgICAg
cXVhZHMuYXBwZW5kKGxvY2FsVG9BYnNvbHV0ZVF1YWQoRmxvYXRSZWN0KDAsIDAsIHdpZHRoKCks
IGhlaWdodCgpKSkpOwogfQogCiBJbnRSZWN0IFJlbmRlckJveDo6YWJzb2x1dGVDb250ZW50Qm94
KCkgY29uc3QKIHsKICAgICBJbnRSZWN0IHJlY3QgPSBjb250ZW50Qm94UmVjdCgpOwotICAgIEZs
b2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkp
OworICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoKSk7
CiAgICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIHJldHVybiByZWN0
OwogfQpAQCAtNjQ3LDggKzY0Nyw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludEJveERlY29yYXRp
b25zKFBhaW4KICAgICB9CiAKICAgICBpbnQgdyA9IHdpZHRoKCk7Ci0gICAgaW50IGggPSBoZWln
aHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOwotICAgIHR5IC09
IGJvcmRlclRvcEV4dHJhKCk7CisgICAgaW50IGggPSBoZWlnaHQoKTsKIAogICAgIC8vIGJvcmRl
ci1maXQgY2FuIGFkanVzdCB3aGVyZSB3ZSBwYWludCBvdXIgYm9yZGVyIGFuZCBiYWNrZ3JvdW5k
LiAgSWYgc2V0LCB3ZSBzbnVnbHkgZml0IG91ciBsaW5lIGJveCBkZXNjZW5kYW50cy4gIChUaGUg
aUNoYXQKICAgICAvLyBiYWxsb29uIGxheW91dCBpcyBhbiBleGFtcGxlIG9mIHRoaXMpLgpAQCAt
Njg5LDggKzY4OCw3IEBAIHZvaWQgUmVuZGVyQm94OjpwYWludE1hc2soUGFpbnRJbmZvJiBwYWkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgaW50IHcgPSB3aWR0aCgpOwotICAgIGludCBoID0gaGVp
Z2h0KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKLSAgICB0eSAt
PSBib3JkZXJUb3BFeHRyYSgpOworICAgIGludCBoID0gaGVpZ2h0KCk7CiAKICAgICAvLyBib3Jk
ZXItZml0IGNhbiBhZGp1c3Qgd2hlcmUgd2UgcGFpbnQgb3VyIGJvcmRlciBhbmQgYmFja2dyb3Vu
ZC4gIElmIHNldCwgd2Ugc251Z2x5IGZpdCBvdXIgbGluZSBib3ggZGVzY2VuZGFudHMuICAoVGhl
IGlDaGF0CiAgICAgLy8gYmFsbG9vbiBsYXlvdXQgaXMgYW4gZXhhbXBsZSBvZiB0aGlzKS4KQEAg
LTExNTQsNyArMTE1Miw3IEBAIEludFJlY3QgUmVuZGVyQm94OjpnZXRPdmVyZmxvd0NsaXBSZWN0
KGkKICAgICBpbnQgY2xpcFggPSB0eCArIGJMZWZ0OwogICAgIGludCBjbGlwWSA9IHR5ICsgYlRv
cDsKICAgICBpbnQgY2xpcFdpZHRoID0gd2lkdGgoKSAtIGJMZWZ0IC0gYm9yZGVyUmlnaHQoKTsK
LSAgICBpbnQgY2xpcEhlaWdodCA9IGhlaWdodCgpIC0gYlRvcCAtIGJvcmRlckJvdHRvbSgpICsg
Ym9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7CisgICAgaW50IGNsaXBIZWln
aHQgPSBoZWlnaHQoKSAtIGJUb3AgLSBib3JkZXJCb3R0b20oKTsKIAogICAgIC8vIFN1YnRyYWN0
IG91dCBzY3JvbGxiYXJzIGlmIHdlIGhhdmUgdGhlbS4KICAgICBpZiAobV9sYXllcikgewpAQCAt
MTI2Niw3ICsxMjY0LDcgQEAgRmxvYXRQb2ludCBSZW5kZXJCb3g6OmxvY2FsVG9BYnNvbHV0ZShG
bAogCiAgICAgICAgIGxvY2FsUG9pbnQgKz0gb2Zmc2V0RnJvbUNvbnRhaW5lcihvKTsKIAotICAg
ICAgICByZXR1cm4gby0+bG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChsb2NhbFBvaW50LCBmaXhl
ZCwgdXNlVHJhbnNmb3Jtcyk7CisgICAgICAgIHJldHVybiBvLT5sb2NhbFRvQWJzb2x1dGUobG9j
YWxQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwogICAgIH0KICAgICAKICAgICByZXR1cm4g
RmxvYXRQb2ludCgpOwpAQCAtMTI4NiwxNiArMTI4NCw5IEBAIEZsb2F0UG9pbnQgUmVuZGVyQm94
OjphYnNvbHV0ZVRvTG9jYWwoRmwKICAgICBSZW5kZXJPYmplY3QqIG8gPSBjb250YWluZXIoKTsK
ICAgICBpZiAobykgewogICAgICAgICBGbG9hdFBvaW50IGxvY2FsUG9pbnQgPSBvLT5hYnNvbHV0
ZVRvTG9jYWwoY29udGFpbmVyUG9pbnQsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zKTsKLQotICAgICAg
ICAvLyBUYWtlIGludG8gYWNjb3VudCBzcGFjZSBhYm92ZSBhIHZlcnRpY2FsbHkgYWxpZ25lZCB0
YWJsZSBjZWxsCi0gICAgICAgIC8vIChzZWUgbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudCgpKQot
ICAgICAgICBsb2NhbFBvaW50Lm1vdmUoMC4wZiwgLXN0YXRpY19jYXN0PGZsb2F0Pihib3JkZXJU
b3BFeHRyYSgpKSk7Ci0KICAgICAgICAgbG9jYWxQb2ludCAtPSBvZmZzZXRGcm9tQ29udGFpbmVy
KG8pOwotCiAgICAgICAgIGlmICh1c2VUcmFuc2Zvcm1zICYmIG1fbGF5ZXIgJiYgbV9sYXllci0+
dHJhbnNmb3JtKCkpCiAgICAgICAgICAgICBsb2NhbFBvaW50ID0gbV9sYXllci0+dHJhbnNmb3Jt
KCktPmludmVyc2UoKS5tYXBQb2ludChsb2NhbFBvaW50KTsKLSAgICAgICAgCiAgICAgICAgIHJl
dHVybiBsb2NhbFBvaW50OwogICAgIH0KICAgICAKQEAgLTEzMTQsMTMgKzEzMDUsNyBAQCBGbG9h
dFF1YWQgUmVuZGVyQm94Ojpsb2NhbFRvQWJzb2x1dGVRdWFkCiAgICAgICAgICAgICBmaXhlZCA9
IGZhbHNlOyAgLy8gRWxlbWVudHMgd2l0aCB0cmFuc2Zvcm1zIGFjdCBhcyBhIGNvbnRhaW5pbmcg
YmxvY2sgZm9yIGZpeGVkIHBvc2l0aW9uIGRlc2NlbmRhbnRzCiAgICAgICAgICAgICBxdWFkID0g
bV9sYXllci0+dHJhbnNmb3JtKCktPm1hcFF1YWQocXVhZCk7CiAgICAgICAgIH0KLQogICAgICAg
ICBxdWFkICs9IG9mZnNldEZyb21Db250YWluZXIobyk7Ci0KLSAgICAgICAgLy8gVGFrZSBpbnRv
IGFjY291bnQgc3BhY2UgYWJvdmUgYSB2ZXJ0aWNhbGx5IGFsaWduZWQgdGFibGUgY2VsbAotICAg
ICAgICAvLyAoc2VlIGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoKSkKLSAgICAgICAgcXVhZC5t
b3ZlKDAuMGYsIHN0YXRpY19jYXN0PGZsb2F0PihvLT5ib3JkZXJUb3BFeHRyYSgpKSk7Ci0KICAg
ICAgICAgcmV0dXJuIG8tPmxvY2FsVG9BYnNvbHV0ZVF1YWQocXVhZCwgZml4ZWQpOwogICAgIH0K
ICAgICAKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJCb3guaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJp
bmcvUmVuZGVyQm94LmgJKHJldmlzaW9uIDQwMTE3KQorKysgcmVuZGVyaW5nL1JlbmRlckJveC5o
CSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgY29u
c3QgUmVuZGVyQm94KiB0b0NvbnN0UmVuZGVyQm94KGNvbnN0IFJlbmRlck9iamVjdCogbykgeyBB
U1NFUlQoIW8gfHwgby0+aXNCb3goKSk7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJC
b3gqPihvKTt9CiAgICAgCiAgICAgaW50IHgoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC54
KCk7IH0KLSAgICBpbnQgeSgpIGNvbnN0IHsgcmV0dXJuIG1fZnJhbWVSZWN0LnkoKSArIGJvcmRl
clRvcEV4dHJhKCk7IH0gLy8gRklYTUU6IE5lZWQgdG8gZGVhbCB3aXRoIHRoZSBib3JkZXJUb3BF
eHRyYSgpIGxpZSBpbiBhIHNhbmUgd2F5LgorICAgIGludCB5KCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZVJlY3QueSgpOyB9CiAgICAgaW50IHdpZHRoKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3Qud2lkdGgoKTsgfQogICAgIGludCBoZWlnaHQoKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVj
dC5oZWlnaHQoKTsgfQogICAgIApAQCAtNDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBz
ZXRXaWR0aChpbnQgd2lkdGgpIHsgbV9mcmFtZVJlY3Quc2V0V2lkdGgod2lkdGgpOyB9CiAgICAg
dm9pZCBzZXRIZWlnaHQoaW50IGhlaWdodCkgeyBtX2ZyYW1lUmVjdC5zZXRIZWlnaHQoaGVpZ2h0
KTsgfQogICAgIAotICAgIEludFBvaW50IGxvY2F0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9mcmFt
ZVJlY3QubG9jYXRpb24oKTsgfSAvLyBGSVhNRTogQmUgYXdhcmUgdGhhdCB0aGlzIGlzIG5vdCBl
cXVpdmFsZW50IHRvIHgoKSwgeSgpIGJlY2F1c2Ugb2YgeSgpJ3MgYm9yZGVyVG9wRXh0cmEoKSBs
aWUhCisgICAgSW50UG9pbnQgbG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2ZyYW1lUmVjdC5s
b2NhdGlvbigpOyB9CiAgICAgSW50U2l6ZSBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9mcmFtZVJl
Y3Quc2l6ZSgpOyB9CiAKICAgICB2b2lkIHNldExvY2F0aW9uKGNvbnN0IEludFBvaW50JiBsb2Nh
dGlvbikgeyBtX2ZyYW1lUmVjdC5zZXRMb2NhdGlvbihsb2NhdGlvbik7IH0KQEAgLTYxLDcgKzYx
LDcgQEAgcHVibGljOgogICAgIEludFJlY3QgZnJhbWVSZWN0KCkgY29uc3QgeyByZXR1cm4gbV9m
cmFtZVJlY3Q7IH0KICAgICB2b2lkIHNldEZyYW1lUmVjdChjb25zdCBJbnRSZWN0JiByZWN0KSB7
IG1fZnJhbWVSZWN0ID0gcmVjdDsgfQogCi0gICAgSW50UmVjdCBib3JkZXJCb3hSZWN0KCkgY29u
c3QgeyByZXR1cm4gSW50UmVjdCgwLCAtYm9yZGVyVG9wRXh0cmEoKSwgd2lkdGgoKSwgaGVpZ2h0
KCkgKyBib3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKSk7IH0KKyAgICBJbnRS
ZWN0IGJvcmRlckJveFJlY3QoKSBjb25zdCB7IHJldHVybiBJbnRSZWN0KDAsIDAsIHdpZHRoKCks
IGhlaWdodCgpKTsgfQogICAgIAogICAgIC8vIFRoZSBjb250ZW50IGFyZWEgb2YgdGhlIGJveCAo
ZXhjbHVkZXMgcGFkZGluZyBhbmQgYm9yZGVyKS4KICAgICBJbnRSZWN0IGNvbnRlbnRCb3hSZWN0
KCkgY29uc3QgeyByZXR1cm4gSW50UmVjdChib3JkZXJMZWZ0KCkgKyBwYWRkaW5nTGVmdCgpLCBi
b3JkZXJUb3AoKSArIHBhZGRpbmdUb3AoKSwgY29udGVudFdpZHRoKCksIGNvbnRlbnRIZWlnaHQo
KSk7IH0KQEAgLTk2LDcgKzk2LDcgQEAgcHVibGljOgogICAgIC8vIElFIGV4dGVuc2lvbnMuIFVz
ZWQgdG8gY2FsY3VsYXRlIG9mZnNldFdpZHRoL0hlaWdodC4gIE92ZXJyaWRkZW4gYnkgaW5saW5l
cyAoUmVuZGVyRmxvdykKICAgICAvLyB0byByZXR1cm4gdGhlIHJlbWFpbmluZyB3aWR0aCBvbiBh
IGdpdmVuIGxpbmUgKGFuZCB0aGUgaGVpZ2h0IG9mIGEgc2luZ2xlIGxpbmUpLgogICAgIHZpcnR1
YWwgaW50IG9mZnNldFdpZHRoKCkgY29uc3QgeyByZXR1cm4gd2lkdGgoKTsgfQotICAgIHZpcnR1
YWwgaW50IG9mZnNldEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIGhlaWdodCgpICsgYm9yZGVyVG9w
RXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7IH0KKyAgICB2aXJ0dWFsIGludCBvZmZzZXRI
ZWlnaHQoKSBjb25zdCB7IHJldHVybiBoZWlnaHQoKTsgfQogICAgIHZpcnR1YWwgaW50IG9mZnNl
dExlZnQoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBvZmZzZXRUb3AoKSBjb25zdDsKICAgICB2
aXJ0dWFsIFJlbmRlckJveCogb2Zmc2V0UGFyZW50KCkgY29uc3Q7CkluZGV4OiByZW5kZXJpbmcv
UmVuZGVyQ29udGFpbmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyQ29udGFp
bmVyLmNwcAkocmV2aXNpb24gNDAxMTcpCisrKyByZW5kZXJpbmcvUmVuZGVyQ29udGFpbmVyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNjcxLDcgKzY3MSw3IEBAIFZpc2libGVQb3NpdGlvbiBSZW5k
ZXJDb250YWluZXI6OnBvc2l0aW8KIHZvaWQgUmVuZGVyQ29udGFpbmVyOjphZGRMaW5lQm94UmVj
dHMoVmVjdG9yPEludFJlY3Q+JiByZWN0cywgdW5zaWduZWQgc3RhcnQsIHVuc2lnbmVkIGVuZCwg
Ym9vbCkKIHsKICAgICBpZiAoIW1fZmlyc3RDaGlsZCAmJiAoaXNJbmxpbmUoKSB8fCBpc0Fub255
bW91c0Jsb2NrKCkpKSB7Ci0gICAgICAgIEZsb2F0UG9pbnQgYWJzUG9zID0gbG9jYWxUb0Fic29s
dXRlRm9yQ29udGVudChGbG9hdFBvaW50KCkpOworICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9
IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOwogICAgICAgICBhYnNvbHV0ZVJlY3RzKHJl
Y3RzLCBhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAg
LTY4Miw3ICs2ODIsNyBAQCB2b2lkIFJlbmRlckNvbnRhaW5lcjo6YWRkTGluZUJveFJlY3RzKFZl
CiAgICAgdW5zaWduZWQgb2Zmc2V0ID0gc3RhcnQ7CiAgICAgZm9yIChSZW5kZXJPYmplY3QqIGNo
aWxkID0gY2hpbGRBdChzdGFydCk7IGNoaWxkICYmIG9mZnNldCA8IGVuZDsgY2hpbGQgPSBjaGls
ZC0+bmV4dFNpYmxpbmcoKSwgKytvZmZzZXQpIHsKICAgICAgICAgaWYgKGNoaWxkLT5pc1RleHQo
KSB8fCBjaGlsZC0+aXNJbmxpbmUoKSB8fCBjaGlsZC0+aXNBbm9ueW1vdXNCbG9jaygpKSB7Ci0g
ICAgICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGNoaWxkLT5sb2NhbFRvQWJzb2x1dGVGb3JD
b250ZW50KEZsb2F0UG9pbnQoKSk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGFic1BvcyA9IGNo
aWxkLT5sb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKICAgICAgICAgICAgIGNoaWxkLT5h
YnNvbHV0ZVJlY3RzKHJlY3RzLCBhYnNQb3MueCgpLCBhYnNQb3MueSgpKTsKICAgICAgICAgfQog
ICAgIH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJGaWVsZHNldC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
cmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmNwcAkocmV2aXNpb24gNDAxMTcpCisrKyByZW5kZXJp
bmcvUmVuZGVyRmllbGRzZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsNyArMTIxLDcgQEAg
UmVuZGVyQm94KiBSZW5kZXJGaWVsZHNldDo6ZmluZExlZ2VuZCgpIAogdm9pZCBSZW5kZXJGaWVs
ZHNldDo6cGFpbnRCb3hEZWNvcmF0aW9ucyhQYWludEluZm8mIHBhaW50SW5mbywgaW50IHR4LCBp
bnQgdHkpCiB7CiAgICAgaW50IHcgPSB3aWR0aCgpOwotICAgIGludCBoID0gaGVpZ2h0KCkgKyBi
b3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKKyAgICBpbnQgaCA9IGhlaWdo
dCgpOwogICAgIFJlbmRlckJveCogbGVnZW5kID0gZmluZExlZ2VuZCgpOwogICAgIGlmICghbGVn
ZW5kKQogICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBhaW50Qm94RGVjb3JhdGlvbnMocGFp
bnRJbmZvLCB0eCwgdHkpOwpAQCAtMTI5LDcgKzEyOSw3IEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6
OnBhaW50Qm94RGVjb3JhdGlvbnMKICAgICBpbnQgeU9mZiA9IChsZWdlbmQtPnkoKSA+IDApID8g
MCA6IChsZWdlbmQtPmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKICAgICBpbnQgbGVnZW5k
Qm90dG9tID0gdHkgKyBsZWdlbmQtPnkoKSArIGxlZ2VuZC0+aGVpZ2h0KCk7CiAgICAgaCAtPSB5
T2ZmOwotICAgIHR5ICs9IHlPZmYgLSBib3JkZXJUb3BFeHRyYSgpOworICAgIHR5ICs9IHlPZmY7
CiAKICAgICBpbnQgbXkgPSBtYXgodHksIHBhaW50SW5mby5yZWN0LnkoKSk7CiAgICAgaW50IGVu
ZCA9IG1pbihwYWludEluZm8ucmVjdC5ib3R0b20oKSwgdHkgKyBoKTsKQEAgLTE2NywxNCArMTY3
LDE0IEBAIHZvaWQgUmVuZGVyRmllbGRzZXQ6OnBhaW50TWFzayhQYWludEluZm8KICAgICAgICAg
cmV0dXJuOwogCiAgICAgaW50IHcgPSB3aWR0aCgpOwotICAgIGludCBoID0gaGVpZ2h0KCkgKyBi
b3JkZXJUb3BFeHRyYSgpICsgYm9yZGVyQm90dG9tRXh0cmEoKTsKKyAgICBpbnQgaCA9IGhlaWdo
dCgpOwogICAgIFJlbmRlckJveCogbGVnZW5kID0gZmluZExlZ2VuZCgpOwogICAgIGlmICghbGVn
ZW5kKQogICAgICAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBhaW50TWFzayhwYWludEluZm8sIHR4
LCB0eSk7CiAKICAgICBpbnQgeU9mZiA9IChsZWdlbmQtPnkoKSA+IDApID8gMCA6IChsZWdlbmQt
PmhlaWdodCgpIC0gYm9yZGVyVG9wKCkpIC8gMjsKICAgICBoIC09IHlPZmY7Ci0gICAgdHkgKz0g
eU9mZiAtIGJvcmRlclRvcEV4dHJhKCk7CisgICAgdHkgKz0geU9mZjsKIAogICAgIGludCBteSA9
IG1heCh0eSwgcGFpbnRJbmZvLnJlY3QueSgpKTsKICAgICBpbnQgZW5kID0gbWluKHBhaW50SW5m
by5yZWN0LmJvdHRvbSgpLCB0eSArIGgpOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgJKHJldmlzaW9uIDQw
MTE3KQorKysgcmVuZGVyaW5nL1JlbmRlckZpZWxkc2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDcgKzQxLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGNhbGNQcmVmV2lkdGhzKCk7
CiAgICAgdmlydHVhbCBib29sIGF2b2lkc0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
LSAgICB2aXJ0dWFsIGJvb2wgZXhwYW5kc1RvRW5jbG9zZU92ZXJoYW5naW5nRmxvYXRzKCkgY29u
c3QgeyByZXR1cm4gc3R5bGUoKS0+aGVpZ2h0KCkuaXNBdXRvKCk7IH0KICAgICB2aXJ0dWFsIGJv
b2wgc3RyZXRjaGVzVG9NaW5JbnRyaW5zaWNXaWR0aCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
IAogICAgIFJlbmRlckJveCogZmluZExlZ2VuZCgpIGNvbnN0OwpJbmRleDogcmVuZGVyaW5nL1Jl
bmRlckZsb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJGbG93LmNwcAkocmV2
aXNpb24gNDAxMTcpCisrKyByZW5kZXJpbmcvUmVuZGVyRmxvdy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4NiwxMCArNjg2LDEwIEBAIEludFJlY3QgUmVuZGVyRmxvdzo6bG9jYWxDYXJldFJlY3Qo
SW5saW4KIAogICAgICAgICAgICAgaW50IG15UmlnaHQgPSB4ICsgY2FyZXRXaWR0aDsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiB3aHkgY2FsbCBsb2NhbFRvQWJzb2x1dGVGb3JDb250ZW50KCkgdHdp
Y2UgaGVyZSwgdG9vPwotICAgICAgICAgICAgRmxvYXRQb2ludCBhYnNSaWdodFBvaW50ID0gbG9j
YWxUb0Fic29sdXRlRm9yQ29udGVudChGbG9hdFBvaW50KG15UmlnaHQsIDApKTsKKyAgICAgICAg
ICAgIEZsb2F0UG9pbnQgYWJzUmlnaHRQb2ludCA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50
KG15UmlnaHQsIDApKTsKIAogICAgICAgICAgICAgaW50IGNvbnRhaW5lclJpZ2h0ID0gY29udGFp
bmluZ0Jsb2NrKCktPngoKSArIGNvbnRhaW5pbmdCbG9ja1dpZHRoKCk7Ci0gICAgICAgICAgICBG
bG9hdFBvaW50IGFic0NvbnRhaW5lclBvaW50ID0gbG9jYWxUb0Fic29sdXRlRm9yQ29udGVudChG
bG9hdFBvaW50KGNvbnRhaW5lclJpZ2h0LCAwKSk7CisgICAgICAgICAgICBGbG9hdFBvaW50IGFi
c0NvbnRhaW5lclBvaW50ID0gbG9jYWxUb0Fic29sdXRlKEZsb2F0UG9pbnQoY29udGFpbmVyUmln
aHQsIDApKTsKIAogICAgICAgICAgICAgKmV4dHJhV2lkdGhUb0VuZE9mTGluZSA9IGFic0NvbnRh
aW5lclBvaW50LngoKSAtIGFic1JpZ2h0UG9pbnQueCgpOwogICAgICAgICB9CkluZGV4OiByZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAJKHJldmlzaW9uIDQwMTE3KQorKysgcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQgUmVuZGVyTGF5ZXI6OnVwZGF0ZUxh
eWVyUG9zaXRpb24oKQogICAgIGNsZWFyQ2xpcFJlY3RzKCk7CiAKICAgICBpbnQgeCA9IHJlbmRl
cmVyKCktPngoKTsKLSAgICBpbnQgeSA9IHJlbmRlcmVyKCktPnkoKSAtIHJlbmRlcmVyKCktPmJv
cmRlclRvcEV4dHJhKCk7CisgICAgaW50IHkgPSByZW5kZXJlcigpLT55KCk7CiAKICAgICBpZiAo
IXJlbmRlcmVyKCktPmlzUG9zaXRpb25lZCgpICYmIHJlbmRlcmVyKCktPnBhcmVudCgpKSB7CiAg
ICAgICAgIC8vIFdlIG11c3QgYWRqdXN0IG91ciBwb3NpdGlvbiBieSB3YWxraW5nIHVwIHRoZSBy
ZW5kZXIgdHJlZSBsb29raW5nIGZvciB0aGUKQEAgLTM5Myw3ICszOTMsNiBAQCB2b2lkIFJlbmRl
ckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGN1cnIgPSBjdXJyLT5wYXJlbnRCb3goKTsKICAgICAgICAgfQotICAgICAgICB5ICs9IGN1cnIt
PmJvcmRlclRvcEV4dHJhKCk7CiAgICAgICAgIGlmIChjdXJyLT5pc1RhYmxlUm93KCkpIHsKICAg
ICAgICAgICAgIC8vIFB1dCBvdXJzZWx2ZXMgaW50byB0aGUgcm93IGNvb3JkaW5hdGUgc3BhY2Uu
CiAgICAgICAgICAgICB4IC09IGN1cnItPngoKTsKQEAgLTQzMyw3ICs0MzIsNyBAQCB2b2lkIFJl
bmRlckxheWVyOjp1cGRhdGVMYXllclBvc2l0aW9uKCkKICAgICAgICAgc2V0SGVpZ2h0KGlubGlu
ZUZsb3ctPmJvdW5kaW5nQm94SGVpZ2h0KCkpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHNldFdp
ZHRoKHJlbmRlcmVyKCktPndpZHRoKCkpOwotICAgICAgICBzZXRIZWlnaHQocmVuZGVyZXIoKS0+
aGVpZ2h0KCkgKyByZW5kZXJlcigpLT5ib3JkZXJUb3BFeHRyYSgpICsgcmVuZGVyZXIoKS0+Ym9y
ZGVyQm90dG9tRXh0cmEoKSk7CisgICAgICAgIHNldEhlaWdodChyZW5kZXJlcigpLT5oZWlnaHQo
KSk7CiAgICAgfQogCiAgICAgaWYgKCFyZW5kZXJlcigpLT5oYXNPdmVyZmxvd0NsaXAoKSkgewpA
QCAtMTczMyw3ICsxNzMyLDcgQEAgUmVuZGVyTGF5ZXI6OnBhaW50TGF5ZXIoUmVuZGVyTGF5ZXIq
IHJvbwogICAgIGludCB4ID0gbGF5ZXJCb3VuZHMueCgpOwogICAgIGludCB5ID0gbGF5ZXJCb3Vu
ZHMueSgpOwogICAgIGludCB0eCA9IHggLSByZW5kZXJlcigpLT54KCk7Ci0gICAgaW50IHR5ID0g
eSAtIHJlbmRlcmVyKCktPnkoKSArIHJlbmRlcmVyKCktPmJvcmRlclRvcEV4dHJhKCk7CisgICAg
aW50IHR5ID0geSAtIHJlbmRlcmVyKCktPnkoKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgCiAgICAgLy8gRW5zdXJlIG91ciBsaXN0cyBhcmUgdXAtdG8tZGF0ZS4KICAgICB1cGRhdGVa
T3JkZXJMaXN0cygpOwpAQCAtMTk1Nyw3ICsxOTU2LDcgQEAgUmVuZGVyTGF5ZXIqIFJlbmRlckxh
eWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgIGlmIChmZ1JlY3QuY29udGFpbnMoaGl0VGVzdFBvaW50
KSAmJiAKICAgICAgICAgcmVuZGVyZXIoKS0+aGl0VGVzdChyZXF1ZXN0LCByZXN1bHQsIGhpdFRl
c3RQb2ludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXllckJvdW5kcy54KCkgLSBy
ZW5kZXJlcigpLT54KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMu
eSgpIC0gcmVuZGVyZXIoKS0+eSgpICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSwgCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGF5ZXJCb3VuZHMueSgpIC0gcmVuZGVyZXIoKS0+
eSgpLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0RGVzY2VuZGFudHMpKSB7
CiAgICAgICAgIC8vIEZvciBwb3NpdGlvbmVkIGdlbmVyYXRlZCBjb250ZW50LCB3ZSBtaWdodCBz
dGlsbCBub3QgaGF2ZSBhCiAgICAgICAgIC8vIG5vZGUgYnkgdGhlIHRpbWUgd2UgZ2V0IHRvIHRo
ZSBsYXllciBsZXZlbCwgc2luY2Ugbm9uZSBvZgpAQCAtMTk4Nyw3ICsxOTg2LDcgQEAgUmVuZGVy
TGF5ZXIqIFJlbmRlckxheWVyOjpoaXRUZXN0TGF5ZXIoUgogICAgIGlmIChiZ1JlY3QuY29udGFp
bnMoaGl0VGVzdFBvaW50KSAmJgogICAgICAgICByZW5kZXJlcigpLT5oaXRUZXN0KHJlcXVlc3Qs
IHJlc3VsdCwgaGl0VGVzdFBvaW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVy
Qm91bmRzLngoKSAtIHJlbmRlcmVyKCktPngoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsYXllckJvdW5kcy55KCkgLSByZW5kZXJlcigpLT55KCkgKyByZW5kZXJlcigpLT5ib3JkZXJU
b3BFeHRyYSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxheWVyQm91bmRzLnkoKSAt
IHJlbmRlcmVyKCktPnkoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIaXRUZXN0U2Vs
ZikpIHsKICAgICAgICAgaWYgKCFyZXN1bHQuaW5uZXJOb2RlKCkgfHwgIXJlc3VsdC5pbm5lck5v
blNoYXJlZE5vZGUoKSkgewogICAgICAgICAgICAgTm9kZSogZSA9IGVuY2xvc2luZ0VsZW1lbnQo
KTsKQEAgLTIyMzEsMTAgKzIyMzAsOCBAQCBJbnRSZWN0IFJlbmRlckxheWVyOjpib3VuZGluZ0Jv
eChjb25zdCBSCiAgICAgICAgIGZvciAoUmVuZGVyT2JqZWN0KiBjaGlsZCA9IHJlbmRlcmVyKCkt
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKICAg
ICAgICAgICAgIGlmIChjaGlsZC0+aXNUYWJsZUNlbGwoKSkgewogICAgICAgICAgICAgICAgIElu
dFJlY3QgYmJveCA9IFJlbmRlckJveDo6dG9SZW5kZXJCb3goY2hpbGQpLT5ib3JkZXJCb3hSZWN0
KCk7Ci0gICAgICAgICAgICAgICAgYmJveC5tb3ZlKDAsIGNoaWxkLT5ib3JkZXJUb3BFeHRyYSgp
KTsKICAgICAgICAgICAgICAgICByZXN1bHQudW5pdGUoYmJveCk7CiAgICAgICAgICAgICAgICAg
SW50UmVjdCBvdmVyZmxvd1JlY3QgPSByZW5kZXJlcigpLT5vdmVyZmxvd1JlY3QoZmFsc2UpOwot
ICAgICAgICAgICAgICAgIG92ZXJmbG93UmVjdC5tb3ZlKDAsIGNoaWxkLT5ib3JkZXJUb3BFeHRy
YSgpKTsKICAgICAgICAgICAgICAgICBpZiAoYmJveCAhPSBvdmVyZmxvd1JlY3QpCiAgICAgICAg
ICAgICAgICAgICAgIHJlc3VsdC51bml0ZShvdmVyZmxvd1JlY3QpOwogICAgICAgICAgICAgfQpA
QCAtMjI1MiwxMSArMjI0OSw3IEBAIEludFJlY3QgUmVuZGVyTGF5ZXI6OmJvdW5kaW5nQm94KGNv
bnN0IFIKICAgICAgICAgfQogCiAgICAgICAgIC8vIFdlIGhhdmUgdG8gYWRqdXN0IHRoZSB4L3kg
b2YgdGhpcyByZXN1bHQgc28gdGhhdCBpdCBpcyBpbiB0aGUgY29vcmRpbmF0ZSBzcGFjZSBvZiB0
aGUgbGF5ZXIuCi0gICAgICAgIC8vIFdlIGFsc28gaGF2ZSB0byBhZGQgaW4gaW50cmluc2ljUGFk
ZGluZ1RvcCBoZXJlLCBzaW5jZSBib3JkZXJCb3hSZWN0KCksIGluIG9yZGVyIHRvIHBsYXkgd2Vs
bCB3aXRoIG1ldGhvZHMgbGlrZQotICAgICAgICAvLyBmbG9hdFJlY3QgdGhhdCBkZWFsIHdpdGgg
Y2hpbGQgY29udGVudCwgdXNlcyBhbiBvcmlnaW4gb2YgKDAsMCkgdGhhdCBpcyBhdCB0aGUgY2hp
bGQgY29udGVudCBib3ggKHNvCi0gICAgICAgIC8vIGJvcmRlciBib3ggcmV0dXJucyBhIHkgY29v
cmQgb2YgLWJvcmRlclRvcEV4dHJhKCkuICBUaGUgbGF5ZXIsIGhvd2V2ZXIsIHVzZXMgdGhlIG91
dGVyIGJveC4gIFRoaXMgaXMgYWxsCi0gICAgICAgIC8vIHJlYWxseSBjb25mdXNpbmcuCi0gICAg
ICAgIHJlc3VsdC5tb3ZlKG1feCwgbV95ICsgcmVuZGVyZXIoKS0+Ym9yZGVyVG9wRXh0cmEoKSk7
CisgICAgICAgIHJlc3VsdC5tb3ZlKG1feCwgbV95KTsKICAgICB9CiAgICAgCiAgICAgLy8gQ29u
dmVydCB0aGUgYm91bmRpbmcgYm94IHRvIGFuIGFic29sdXRlIHBvc2l0aW9uLiAgV2UgY2FuIGRv
IHRoaXMgZWFzaWx5IGJ5IGxvb2tpbmcgYXQgdGhlIGRlbHRhCkluZGV4OiByZW5kZXJpbmcvUmVu
ZGVyTGlzdEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckxpc3RCb3guY3Bw
CShyZXZpc2lvbiA0MDExNykKKysrIHJlbmRlcmluZy9SZW5kZXJMaXN0Qm94LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcwLDkgKzM3MCw5IEBAIGJvb2wgUmVuZGVyTGlzdEJveDo6aXNQb2ludElu
T3ZlcmZsb3dDb24KICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgSW50UmVjdCB2ZXJ0UmVj
dChfdHggKyB3aWR0aCgpIC0gYm9yZGVyUmlnaHQoKSAtIG1fdkJhci0+d2lkdGgoKSwKLSAgICAg
ICAgICAgICAgICAgICBfdHkgKyBib3JkZXJUb3AoKSAtIGJvcmRlclRvcEV4dHJhKCksCi0gICAg
ICAgICAgICAgICAgICAgbV92QmFyLT53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgIGhlaWdo
dCgpICsgYm9yZGVyVG9wRXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCkgLSBib3JkZXJUb3Ao
KSAtIGJvcmRlckJvdHRvbSgpKTsKKyAgICAgICAgICAgICAgICAgICAgIF90eSwKKyAgICAgICAg
ICAgICAgICAgICAgIG1fdkJhci0+d2lkdGgoKSwKKyAgICAgICAgICAgICAgICAgICAgIGhlaWdo
dCgpIC0gYm9yZGVyVG9wKCkgLSBib3JkZXJCb3R0b20oKSk7CiAKICAgICBpZiAodmVydFJlY3Qu
Y29udGFpbnMoX3gsIF95KSkgewogICAgICAgICByZXN1bHQuc2V0U2Nyb2xsYmFyKG1fdkJhci5n
ZXQoKSk7CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBy
ZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmNwcAkocmV2aXNpb24gNDAxMTgpCisrKyByZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjI1Niw3ICsyMjU2LDYgQEAgRmxv
YXRQb2ludCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZQogewogICAgIFJlbmRlck9iamVj
dCogbyA9IHBhcmVudCgpOwogICAgIGlmIChvKSB7Ci0gICAgICAgIGxvY2FsUG9pbnQubW92ZSgw
LjBmLCBzdGF0aWNfY2FzdDxmbG9hdD4oby0+Ym9yZGVyVG9wRXh0cmEoKSkpOwogICAgICAgICBp
ZiAoby0+aGFzT3ZlcmZsb3dDbGlwKCkpCiAgICAgICAgICAgICBsb2NhbFBvaW50IC09IG8tPmxh
eWVyKCktPnNjcm9sbGVkQ29udGVudE9mZnNldCgpOwogICAgICAgICByZXR1cm4gby0+bG9jYWxU
b0Fic29sdXRlKGxvY2FsUG9pbnQsIGZpeGVkLCB1c2VUcmFuc2Zvcm1zKTsKQEAgLTIyNzAsNyAr
MjI2OSw2IEBAIEZsb2F0UG9pbnQgUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRvTG9jYWwKICAgICBS
ZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsKICAgICBpZiAobykgewogICAgICAgICBGbG9hdFBv
aW50IGxvY2FsUG9pbnQgPSBvLT5hYnNvbHV0ZVRvTG9jYWwoY29udGFpbmVyUG9pbnQsIGZpeGVk
LCB1c2VUcmFuc2Zvcm1zKTsKLSAgICAgICAgbG9jYWxQb2ludC5tb3ZlKDAuMGYsIC1zdGF0aWNf
Y2FzdDxmbG9hdD4oby0+Ym9yZGVyVG9wRXh0cmEoKSkpOwogICAgICAgICBpZiAoby0+aGFzT3Zl
cmZsb3dDbGlwKCkpCiAgICAgICAgICAgICBsb2NhbFBvaW50ICs9IG8tPmxheWVyKCktPnNjcm9s
bGVkQ29udGVudE9mZnNldCgpOwogICAgICAgICByZXR1cm4gbG9jYWxQb2ludDsKQEAgLTIyODMs
NyArMjI4MSw2IEBAIEZsb2F0UXVhZCBSZW5kZXJPYmplY3Q6OmxvY2FsVG9BYnNvbHV0ZVEKICAg
ICBSZW5kZXJPYmplY3QqIG8gPSBwYXJlbnQoKTsKICAgICBpZiAobykgewogICAgICAgICBGbG9h
dFF1YWQgcXVhZCA9IGxvY2FsUXVhZDsKLSAgICAgICAgcXVhZC5tb3ZlKDAuMGYsIHN0YXRpY19j
YXN0PGZsb2F0PihvLT5ib3JkZXJUb3BFeHRyYSgpKSk7CiAgICAgICAgIGlmIChvLT5oYXNPdmVy
Zmxvd0NsaXAoKSkKICAgICAgICAgICAgIHF1YWQgLT0gby0+bGF5ZXIoKS0+c2Nyb2xsZWRDb250
ZW50T2Zmc2V0KCk7CiAgICAgICAgIHJldHVybiBvLT5sb2NhbFRvQWJzb2x1dGVRdWFkKHF1YWQs
IGZpeGVkKTsKQEAgLTIyOTcsOCArMjI5NCw2IEBAIEludFNpemUgUmVuZGVyT2JqZWN0OjpvZmZz
ZXRGcm9tQ29udGFpbmUKICAgICBBU1NFUlQobyA9PSBjb250YWluZXIoKSk7CiAKICAgICBJbnRT
aXplIG9mZnNldDsKLSAgICBvZmZzZXQuZXhwYW5kKDAsIG8tPmJvcmRlclRvcEV4dHJhKCkpOwot
CiAgICAgaWYgKG8tPmhhc092ZXJmbG93Q2xpcCgpKQogICAgICAgICBvZmZzZXQgLT0gby0+bGF5
ZXIoKS0+c2Nyb2xsZWRDb250ZW50T2Zmc2V0KCk7CiAKQEAgLTIzMTMsNyArMjMwOCw3IEBAIElu
dFJlY3QgUmVuZGVyT2JqZWN0Ojpsb2NhbENhcmV0UmVjdChJbmwKICAgICByZXR1cm4gSW50UmVj
dCgpOwogfQogCi1pbnQgUmVuZGVyT2JqZWN0OjpwYWRkaW5nVG9wKCkgY29uc3QKK2ludCBSZW5k
ZXJPYmplY3Q6OnBhZGRpbmdUb3AoYm9vbCkgY29uc3QKIHsKICAgICBpbnQgdyA9IDA7CiAgICAg
TGVuZ3RoIHBhZGRpbmcgPSBtX3N0eWxlLT5wYWRkaW5nVG9wKCk7CkBAIC0yMzIyLDcgKzIzMTcs
NyBAQCBpbnQgUmVuZGVyT2JqZWN0OjpwYWRkaW5nVG9wKCkgY29uc3QKICAgICByZXR1cm4gcGFk
ZGluZy5jYWxjTWluVmFsdWUodyk7CiB9CiAKLWludCBSZW5kZXJPYmplY3Q6OnBhZGRpbmdCb3R0
b20oKSBjb25zdAoraW50IFJlbmRlck9iamVjdDo6cGFkZGluZ0JvdHRvbShib29sKSBjb25zdAog
ewogICAgIGludCB3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdC
b3R0b20oKTsKQEAgLTIzMzEsNyArMjMyNiw3IEBAIGludCBSZW5kZXJPYmplY3Q6OnBhZGRpbmdC
b3R0b20oKSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nLmNhbGNNaW5WYWx1ZSh3KTsKIH0KIAot
aW50IFJlbmRlck9iamVjdDo6cGFkZGluZ0xlZnQoKSBjb25zdAoraW50IFJlbmRlck9iamVjdDo6
cGFkZGluZ0xlZnQoYm9vbCkgY29uc3QKIHsKICAgICBpbnQgdyA9IDA7CiAgICAgTGVuZ3RoIHBh
ZGRpbmcgPSBzdHlsZSgpLT5wYWRkaW5nTGVmdCgpOwpAQCAtMjM0MCw3ICsyMzM1LDcgQEAgaW50
IFJlbmRlck9iamVjdDo6cGFkZGluZ0xlZnQoKSBjb25zdAogICAgIHJldHVybiBwYWRkaW5nLmNh
bGNNaW5WYWx1ZSh3KTsKIH0KIAotaW50IFJlbmRlck9iamVjdDo6cGFkZGluZ1JpZ2h0KCkgY29u
c3QKK2ludCBSZW5kZXJPYmplY3Q6OnBhZGRpbmdSaWdodChib29sKSBjb25zdAogewogICAgIGlu
dCB3ID0gMDsKICAgICBMZW5ndGggcGFkZGluZyA9IHN0eWxlKCktPnBhZGRpbmdSaWdodCgpOwpJ
bmRleDogcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJPYmplY3QuaAkocmV2aXNpb24gNDAxMTgpCisrKyByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgJKHdvcmtpbmcgY29weSkKQEAgLTU2NywxNSArNTY3LDYgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgRmxvYXRQb2ludCBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCBsb2NhbFBvaW50ID0gRmxv
YXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNmb3JtcyA9IGZhbHNl
KSBjb25zdDsKICAgICB2aXJ0dWFsIEZsb2F0UG9pbnQgYWJzb2x1dGVUb0xvY2FsKEZsb2F0UG9p
bnQsIGJvb2wgZml4ZWQgPSBmYWxzZSwgYm9vbCB1c2VUcmFuc2Zvcm1zID0gZmFsc2UpIGNvbnN0
OwogCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIGRlYWwgd2l0aCB0aGUgZXh0cmEg
dG9wIHNwYWNlIHRoYXQgY2FuIG9jY3VyIGluIHRhYmxlIGNlbGxzIChjYWxsZWQgaW50cmluc2lj
UGFkZGluZ1RvcCkuCi0gICAgLy8gVGhlIGNoaWxkcmVuIG9mIHRoZSBjZWxsIGRvIG5vdCBmYWN0
b3IgdGhpcyBzcGFjZSBpbiwgc28gd2UgaGF2ZSB0byBhZGQgaXQgaW4uICBBbnkgY29kZSB0aGF0
IHdhbnRzIHRvCi0gICAgLy8gYWNjdXJhdGVseSBkZWFsIHdpdGggdGhlIGNvbnRlbnRzIG9mIGEg
Y2VsbCBtdXN0IGNhbGwgdGhpcyBmdW5jdGlvbiBpbnN0YWQgb2YgYWJzb2x1dGVQb3NpdGlvbi4K
LSAgICBGbG9hdFBvaW50IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCBsb2Nh
bFBvaW50ID0gRmxvYXRQb2ludCgpLCBib29sIGZpeGVkID0gZmFsc2UsIGJvb2wgdXNlVHJhbnNm
b3JtcyA9IGZhbHNlKSBjb25zdAotICAgIHsKLSAgICAgICAgbG9jYWxQb2ludC5tb3ZlKDAuMGYs
IHN0YXRpY19jYXN0PGZsb2F0Pihib3JkZXJUb3BFeHRyYSgpKSk7Ci0gICAgICAgIHJldHVybiBs
b2NhbFRvQWJzb2x1dGUobG9jYWxQb2ludCwgZml4ZWQsIHVzZVRyYW5zZm9ybXMpOwotICAgIH0K
LQogICAgIC8vIENvbnZlcnQgYSBsb2NhbCBxdWFkIHRvIGFuIGFic29sdXRlIHF1YWQsIHRha2lu
ZyB0cmFuc2Zvcm1zIGludG8gYWNjb3VudC4KICAgICB2aXJ0dWFsIEZsb2F0UXVhZCBsb2NhbFRv
QWJzb2x1dGVRdWFkKGNvbnN0IEZsb2F0UXVhZCYsIGJvb2wgZml4ZWQgPSBmYWxzZSkgY29uc3Q7
CiAKQEAgLTYxMiwxMyArNjAzLDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGludCBtYXJnaW5S
aWdodCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KIAogICAgIC8vIFZpcnR1YWwgc2luY2UgdGFibGUg
Y2VsbHMgb3ZlcnJpZGUKLSAgICB2aXJ0dWFsIGludCBwYWRkaW5nVG9wKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBpbnQgcGFkZGluZ0JvdHRvbSgpIGNvbnN0OwotICAgIHZpcnR1YWwgaW50IHBhZGRp
bmdMZWZ0KCkgY29uc3Q7Ci0gICAgdmlydHVhbCBpbnQgcGFkZGluZ1JpZ2h0KCkgY29uc3Q7Ci0K
LSAgICB2aXJ0dWFsIGludCBib3JkZXJUb3BFeHRyYSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLSAg
ICB2aXJ0dWFsIGludCBib3JkZXJCb3R0b21FeHRyYSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyAg
ICB2aXJ0dWFsIGludCBwYWRkaW5nVG9wKGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0
cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwYWRkaW5nQm90dG9tKGJvb2wgaW5jbHVkZUlu
dHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBwYWRkaW5nTGVm
dChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nID0gdHJ1ZSkgY29uc3Q7CisgICAgdmlydHVh
bCBpbnQgcGFkZGluZ1JpZ2h0KGJvb2wgaW5jbHVkZUludHJpbnNpY1BhZGRpbmcgPSB0cnVlKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgaW50IGJvcmRlclRvcCgpIGNvbnN0IHsgcmV0dXJuIHN0eWxl
KCktPmJvcmRlclRvcFdpZHRoKCk7IH0KICAgICB2aXJ0dWFsIGludCBib3JkZXJCb3R0b20oKSBj
b25zdCB7IHJldHVybiBzdHlsZSgpLT5ib3JkZXJCb3R0b21XaWR0aCgpOyB9CkBAIC02OTQsNyAr
NjgyLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBjb250YWluc0Zsb2F0cygpIHsgcmV0
dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGNvbnRhaW5zRmxvYXQoUmVuZGVyT2JqZWN0
KikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaGFzT3ZlcmhhbmdpbmdGbG9h
dHMoKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBleHBhbmRzVG9FbmNsb3Nl
T3ZlcmhhbmdpbmdGbG9hdHMoKSBjb25zdCB7IHJldHVybiBpc0Zsb2F0aW5nKCkgJiYgc3R5bGUo
KS0+aGVpZ2h0KCkuaXNBdXRvKCk7IH0KIAogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVQb3NpdGlv
bmVkT2JqZWN0cyhSZW5kZXJCbG9jayopIHsgfQogCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyUmVw
bGFjZWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJSZXBsYWNlZC5jcHAJKHJl
dmlzaW9uIDQwMTE3KQorKysgcmVuZGVyaW5nL1JlbmRlclJlcGxhY2VkLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjU0LDcgKzI1NCw3IEBAIEludFJlY3QgUmVuZGVyUmVwbGFjZWQ6OnNlbGVjdGlv
blJlY3QoYm8KICAgICBpZiAoY2xpcFRvVmlzaWJsZUNvbnRlbnQpCiAgICAgICAgIGNvbXB1dGVB
YnNvbHV0ZVJlcGFpbnRSZWN0KHJlY3QpOwogICAgIGVsc2UgewotICAgICAgICBGbG9hdFBvaW50
IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKKyAgICAg
ICAgRmxvYXRQb2ludCBhYnNQb3MgPSBsb2NhbFRvQWJzb2x1dGUoRmxvYXRQb2ludCgpKTsKICAg
ICAgICAgcmVjdC5tb3ZlKGFic1Bvcy54KCksIGFic1Bvcy55KCkpOwogICAgIH0KICAgICAKQEAg
LTI2OCw3ICsyNjgsNyBAQCBJbnRSZWN0IFJlbmRlclJlcGxhY2VkOjpsb2NhbFNlbGVjdGlvblJl
CiAKICAgICBpZiAoIW1faW5saW5lQm94V3JhcHBlcikKICAgICAgICAgLy8gV2UncmUgYSBibG9j
ay1sZXZlbCByZXBsYWNlZCBlbGVtZW50LiAgSnVzdCByZXR1cm4gb3VyIG93biBkaW1lbnNpb25z
LgotICAgICAgICByZXR1cm4gSW50UmVjdCgwLCAwLCB3aWR0aCgpLCBoZWlnaHQoKSArIGJvcmRl
clRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpKTsKKyAgICAgICAgcmV0dXJuIEludFJl
Y3QoMCwgMCwgd2lkdGgoKSwgaGVpZ2h0KCkpOwogCiAgICAgUmVuZGVyQmxvY2sqIGNiID0gIGNv
bnRhaW5pbmdCbG9jaygpOwogICAgIGlmICghY2IpCkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFi
bGVDZWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAko
cmV2aXNpb24gNDAxMTcpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDMsOCArNDMsOCBAQCBSZW5kZXJUYWJsZUNlbGw6OlJlbmRlclRhYmxlQ2Vs
bChOb2RlKiBuCiAgICAgLCBtX2NvbHVtbigtMSkKICAgICAsIG1fcm93U3BhbigxKQogICAgICwg
bV9jb2x1bW5TcGFuKDEpCi0gICAgLCBtX3RvcEV4dHJhKDApCi0gICAgLCBtX2JvdHRvbUV4dHJh
KDApCisgICAgLCBtX2ludHJpbnNpY1BhZGRpbmdUb3AoMCkKKyAgICAsIG1faW50cmluc2ljUGFk
ZGluZ0JvdHRvbSgwKQogICAgICwgbV93aWR0aENoYW5nZWQoZmFsc2UpCiAgICAgLCBtX3BlcmNl
bnRhZ2VIZWlnaHQoMCkKIHsKQEAgLTEzNyw2ICsxMzcsMjIgQEAgdm9pZCBSZW5kZXJUYWJsZUNl
bGw6OmxheW91dCgpCiAgICAgbV93aWR0aENoYW5nZWQgPSBmYWxzZTsKIH0KIAoraW50IFJlbmRl
clRhYmxlQ2VsbDo6cGFkZGluZ1RvcChib29sIGluY2x1ZGVJbnRyaW5zaWNQYWRkaW5nKSBjb25z
dAoreworICAgIHJldHVybiBSZW5kZXJCbG9jazo6cGFkZGluZ1RvcCgpICsgKGluY2x1ZGVJbnRy
aW5zaWNQYWRkaW5nID8gaW50cmluc2ljUGFkZGluZ1RvcCgpIDogMCk7Cit9CisKK2ludCBSZW5k
ZXJUYWJsZUNlbGw6OnBhZGRpbmdCb3R0b20oYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZykg
Y29uc3QKK3sKKyAgICByZXR1cm4gUmVuZGVyQmxvY2s6OnBhZGRpbmdCb3R0b20oKSArIChpbmNs
dWRlSW50cmluc2ljUGFkZGluZyA/IGludHJpbnNpY1BhZGRpbmdCb3R0b20oKSA6IDApOworfQor
Cit2b2lkIFJlbmRlclRhYmxlQ2VsbDo6c2V0T3ZlcnJpZGVTaXplKGludCBzaXplKQoreworICAg
IGNsZWFySW50cmluc2ljUGFkZGluZygpOworICAgIFJlbmRlckJsb2NrOjpzZXRPdmVycmlkZVNp
emUoc2l6ZSk7Cit9CisKIEludFJlY3QgUmVuZGVyVGFibGVDZWxsOjphYnNvbHV0ZUNsaXBwZWRP
dmVyZmxvd1JlY3QoKQogewogICAgIC8vIElmIHRoZSB0YWJsZSBncmlkIGlzIGRpcnR5LCB3ZSBj
YW5ub3QgZ2V0IHJlbGlhYmxlIGluZm9ybWF0aW9uIGFib3V0IGFkam9pbmluZyBjZWxscywKQEAg
LTE3Nyw4ICsxOTMsOCBAQCBJbnRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6YWJzb2x1dGVDbGlwcGVk
CiAgICAgICAgIH0KICAgICB9CiAgICAgbGVmdCA9IG1heChsZWZ0LCAtb3ZlcmZsb3dMZWZ0KGZh
bHNlKSk7Ci0gICAgdG9wID0gbWF4KHRvcCwgLW92ZXJmbG93VG9wKGZhbHNlKSAtIGJvcmRlclRv
cEV4dHJhKCkpOwotICAgIEludFJlY3QgcigtbGVmdCwgLWJvcmRlclRvcEV4dHJhKCkgLSB0b3As
IGxlZnQgKyBtYXgod2lkdGgoKSArIHJpZ2h0LCBvdmVyZmxvd1dpZHRoKGZhbHNlKSksIGJvcmRl
clRvcEV4dHJhKCkgKyB0b3AgKyBtYXgoaGVpZ2h0KCkgKyBib3R0b20gKyBib3JkZXJCb3R0b21F
eHRyYSgpLCBvdmVyZmxvd0hlaWdodChmYWxzZSkpKTsKKyAgICB0b3AgPSBtYXgodG9wLCAtb3Zl
cmZsb3dUb3AoZmFsc2UpKTsKKyAgICBJbnRSZWN0IHIoLWxlZnQsIC0gdG9wLCBsZWZ0ICsgbWF4
KHdpZHRoKCkgKyByaWdodCwgb3ZlcmZsb3dXaWR0aChmYWxzZSkpLCB0b3AgKyBtYXgoaGVpZ2h0
KCkgKyBib3R0b20sIG92ZXJmbG93SGVpZ2h0KGZhbHNlKSkpOwogCiAgICAgaWYgKFJlbmRlclZp
ZXcqIHYgPSB2aWV3KCkpCiAgICAgICAgIHIubW92ZSh2LT5sYXlvdXREZWx0YSgpKTsKQEAgLTE4
OSw3ICsyMDUsNyBAQCBJbnRSZWN0IFJlbmRlclRhYmxlQ2VsbDo6YWJzb2x1dGVDbGlwcGVkCiAK
IHZvaWQgUmVuZGVyVGFibGVDZWxsOjpjb21wdXRlQWJzb2x1dGVSZXBhaW50UmVjdChJbnRSZWN0
JiByLCBib29sIGZpeGVkKQogewotICAgIHIuc2V0WShyLnkoKSArIG1fdG9wRXh0cmEpOworICAg
IHIuc2V0WShyLnkoKSk7CiAgICAgUmVuZGVyVmlldyogdiA9IHZpZXcoKTsKICAgICBpZiAoKCF2
IHx8ICF2LT5sYXlvdXRTdGF0ZUVuYWJsZWQoKSkgJiYgcGFyZW50KCkpCiAgICAgICAgIHIubW92
ZSgtcGFyZW50Qm94KCktPngoKSwgLXBhcmVudEJveCgpLT55KCkpOyAvLyBSb3dzIGFyZSBpbiB0
aGUgc2FtZSBjb29yZGluYXRlIHNwYWNlLCBzbyBkb24ndCBhZGQgdGhlaXIgb2Zmc2V0IGluLgpA
QCAtMjMxLDExICsyNDcsOSBAQCBpbnQgUmVuZGVyVGFibGVDZWxsOjpiYXNlbGluZVBvc2l0aW9u
KGJvCiAgICAgLy8gPGh0dHA6Ly93d3cudzMub3JnL1RSLzIwMDcvQ1ItQ1NTMjEtMjAwNzA3MTkv
dGFibGVzLmh0bWwjaGVpZ2h0LWxheW91dD46IFRoZSBiYXNlbGluZSBvZiBhIGNlbGwgaXMgdGhl
IGJhc2VsaW5lIG9mCiAgICAgLy8gdGhlIGZpcnN0IGluLWZsb3cgbGluZSBib3ggaW4gdGhlIGNl
bGwsIG9yIHRoZSBmaXJzdCBpbi1mbG93IHRhYmxlLXJvdyBpbiB0aGUgY2VsbCwgd2hpY2hldmVy
IGNvbWVzIGZpcnN0LiBJZiB0aGVyZQogICAgIC8vIGlzIG5vIHN1Y2ggbGluZSBib3ggb3IgdGFi
bGUtcm93LCB0aGUgYmFzZWxpbmUgaXMgdGhlIGJvdHRvbSBvZiBjb250ZW50IGVkZ2Ugb2YgdGhl
IGNlbGwgYm94LgotCiAgICAgaW50IGZpcnN0TGluZUJhc2VsaW5lID0gZ2V0QmFzZWxpbmVPZkZp
cnN0TGluZUJveCgpOwogICAgIGlmIChmaXJzdExpbmVCYXNlbGluZSAhPSAtMSkKICAgICAgICAg
cmV0dXJuIGZpcnN0TGluZUJhc2VsaW5lOwotCiAgICAgcmV0dXJuIHBhZGRpbmdUb3AoKSArIGJv
cmRlclRvcCgpICsgY29udGVudEhlaWdodCgpOwogfQogCkBAIC02MzgsMTUgKzY1MiwxMyBAQCB2
b2lkIFJlbmRlclRhYmxlQ2VsbDo6cGFpbnQoUGFpbnRJbmZvJiBwCiAKICAgICBpZiAocGFpbnRJ
bmZvLnBoYXNlID09IFBhaW50UGhhc2VDb2xsYXBzZWRUYWJsZUJvcmRlcnMgJiYgc3R5bGUoKS0+
dmlzaWJpbGl0eSgpID09IFZJU0lCTEUpIHsKICAgICAgICAgaWYgKHR5IC0gdGFibGUoKS0+b3V0
ZXJCb3JkZXJUb3AoKSA+PSBwYWludEluZm8ucmVjdC5ib3R0b20oKSArIG9zIHx8Ci0gICAgICAg
ICAgICAgICAgdHkgKyBtX3RvcEV4dHJhICsgaGVpZ2h0KCkgKyBtX2JvdHRvbUV4dHJhICsgdGFi
bGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20oKSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKKyAg
ICAgICAgICAgICAgICB0eSArIGhlaWdodCgpICsgdGFibGUoKS0+b3V0ZXJCb3JkZXJCb3R0b20o
KSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgaW50IHcgPSB3aWR0aCgpOwotICAgICAgICBpbnQgaCA9IGhlaWdodCgpICsgYm9yZGVyVG9w
RXh0cmEoKSArIGJvcmRlckJvdHRvbUV4dHJhKCk7Ci0gICAgICAgIHBhaW50Q29sbGFwc2VkQm9y
ZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgpOworICAgICAgICBwYWludENvbGxh
cHNlZEJvcmRlcihwYWludEluZm8uY29udGV4dCwgdHgsIHR5LCB3aWR0aCgpLCBoZWlnaHQoKSk7
CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHR5ICsgb3ZlcmZsb3dUb3AoZmFsc2UpID49IHBh
aW50SW5mby5yZWN0LmJvdHRvbSgpICsgb3MgfHwgdHkgKyBtX3RvcEV4dHJhICsgb3ZlcmZsb3dI
ZWlnaHQoZmFsc2UpICsgbV9ib3R0b21FeHRyYSA8PSBwYWludEluZm8ucmVjdC55KCkgLSBvcykK
KyAgICAgICAgaWYgKHR5ICsgb3ZlcmZsb3dUb3AoZmFsc2UpID49IHBhaW50SW5mby5yZWN0LmJv
dHRvbSgpICsgb3MgfHwgdHkgKyBvdmVyZmxvd0hlaWdodChmYWxzZSkgPD0gcGFpbnRJbmZvLnJl
Y3QueSgpIC0gb3MpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFJlbmRlckJsb2NrOjpw
YWludE9iamVjdChwYWludEluZm8sIHR4LCB0eSArIG1fdG9wRXh0cmEpOworICAgICAgICBSZW5k
ZXJCbG9jazo6cGFpbnRPYmplY3QocGFpbnRJbmZvLCB0eCwgdHkpOwogICAgIH0KIH0KIApAQCAt
ODA4LDEyICs4MjAsMTEgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50QmFja2dyb3VuZHNC
ZQogCiAgICAgaWYgKGJhY2tncm91bmRPYmplY3QgIT0gdGhpcykgewogICAgICAgICB0eCArPSB4
KCk7Ci0gICAgICAgIHR5ICs9IG1fZnJhbWVSZWN0LnkoKSArIG1fdG9wRXh0cmE7CisgICAgICAg
IHR5ICs9IG1fZnJhbWVSZWN0LnkoKTsKICAgICB9CiAKICAgICBpbnQgdyA9IHdpZHRoKCk7Ci0g
ICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRy
YSgpOwotICAgIHR5IC09IGJvcmRlclRvcEV4dHJhKCk7CisgICAgaW50IGggPSBoZWlnaHQoKTsK
IAogICAgIGludCBteSA9IG1heCh0eSwgcGFpbnRJbmZvLnJlY3QueSgpKTsKICAgICBpbnQgZW5k
ID0gbWluKHBhaW50SW5mby5yZWN0LmJvdHRvbSgpLCB0eSArIGgpOwpAQCAtODQ1LDEwICs4NTYs
MTAgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Qm94RGVjb3JhdGlvbgogICAgICAgICBy
ZXR1cm47CiAKICAgICBpbnQgdyA9IHdpZHRoKCk7Ci0gICAgaW50IGggPSBoZWlnaHQoKSArIGJv
cmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0b21FeHRyYSgpOworICAgIGludCBoID0gaGVpZ2h0
KCk7CiAgICAKICAgICBpZiAoc3R5bGUoKS0+Ym94U2hhZG93KCkpCi0gICAgICAgIHBhaW50Qm94
U2hhZG93KHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHkgLSBib3JkZXJUb3BFeHRyYSgpLCB3LCBo
LCBzdHlsZSgpKTsKKyAgICAgICAgcGFpbnRCb3hTaGFkb3cocGFpbnRJbmZvLmNvbnRleHQsIHR4
LCB0eSwgdywgaCwgc3R5bGUoKSk7CiAgICAgCiAgICAgLy8gUGFpbnQgb3VyIGNlbGwgYmFja2dy
b3VuZC4KICAgICBwYWludEJhY2tncm91bmRzQmVoaW5kQ2VsbChwYWludEluZm8sIHR4LCB0eSwg
dGhpcyk7CkBAIC04NTYsNyArODY3LDYgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6OnBhaW50Qm94
RGVjb3JhdGlvbgogICAgIGlmICghc3R5bGUoKS0+aGFzQm9yZGVyKCkgfHwgdGFibGVFbHQtPmNv
bGxhcHNlQm9yZGVycygpKQogICAgICAgICByZXR1cm47CiAKLSAgICB0eSAtPSBib3JkZXJUb3BF
eHRyYSgpOwogICAgIHBhaW50Qm9yZGVyKHBhaW50SW5mby5jb250ZXh0LCB0eCwgdHksIHcsIGgs
IHN0eWxlKCkpOwogfQogCkBAIC04NzAsNyArODgwLDcgQEAgdm9pZCBSZW5kZXJUYWJsZUNlbGw6
OnBhaW50TWFzayhQYWludEluZgogICAgICAgICByZXR1cm47CiAKICAgICBpbnQgdyA9IHdpZHRo
KCk7Ci0gICAgaW50IGggPSBoZWlnaHQoKSArIGJvcmRlclRvcEV4dHJhKCkgKyBib3JkZXJCb3R0
b21FeHRyYSgpOworICAgIGludCBoID0gaGVpZ2h0KCk7CiAgICAKICAgICBpbnQgbXkgPSBtYXgo
dHksIHBhaW50SW5mby5yZWN0LnkoKSk7CiAgICAgaW50IGVuZCA9IG1pbihwYWludEluZm8ucmVj
dC5ib3R0b20oKSwgdHkgKyBoKTsKSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUYWJsZUNlbGwuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVDZWxsLmgJKHJldmlzaW9uIDQwMTE3
KQorKysgcmVuZGVyaW5nL1JlbmRlclRhYmxlQ2VsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4
ICs2NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgY2FsY1dpZHRoKCk7CiAgICAgdm9p
ZCB1cGRhdGVXaWR0aChpbnQpOwogCi0gICAgdmlydHVhbCBib29sIGV4cGFuZHNUb0VuY2xvc2VP
dmVyaGFuZ2luZ0Zsb2F0cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KLQogICAgIGludCBib3Jk
ZXJMZWZ0KCkgY29uc3Q7CiAgICAgaW50IGJvcmRlclJpZ2h0KCkgY29uc3Q7CiAgICAgaW50IGJv
cmRlclRvcCgpIGNvbnN0OwpAQCAtMTA0LDExICsxMDIsMTggQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCBpbnQgYmFzZWxpbmVQb3NpdGlvbihib29sIGZpcnN0TGluZSA9IGZhbHNlLCBib29sIGlz
Um9vdExpbmVCb3ggPSBmYWxzZSkgY29uc3Q7CiAKLSAgICB2b2lkIHNldENlbGxUb3BFeHRyYShp
bnQgcCkgeyBtX3RvcEV4dHJhID0gcDsgfQotICAgIHZvaWQgc2V0Q2VsbEJvdHRvbUV4dHJhKGlu
dCBwKSB7IG1fYm90dG9tRXh0cmEgPSBwOyB9CisgICAgdm9pZCBzZXRJbnRyaW5zaWNQYWRkaW5n
VG9wKGludCBwKSB7IG1faW50cmluc2ljUGFkZGluZ1RvcCA9IHA7IH0KKyAgICB2b2lkIHNldElu
dHJpbnNpY1BhZGRpbmdCb3R0b20oaW50IHApIHsgbV9pbnRyaW5zaWNQYWRkaW5nQm90dG9tID0g
cDsgfQorICAgIHZvaWQgc2V0SW50cmluc2ljUGFkZGluZyhpbnQgdG9wLCBpbnQgYm90dG9tKSB7
IHNldEludHJpbnNpY1BhZGRpbmdUb3AodG9wKTsgc2V0SW50cmluc2ljUGFkZGluZ0JvdHRvbShi
b3R0b20pOyB9CisgICAgdm9pZCBjbGVhckludHJpbnNpY1BhZGRpbmcoKSB7IHNldEludHJpbnNp
Y1BhZGRpbmcoMCwgMCk7IH0KKworICAgIGludCBpbnRyaW5zaWNQYWRkaW5nVG9wKCkgY29uc3Qg
eyByZXR1cm4gbV9pbnRyaW5zaWNQYWRkaW5nVG9wOyB9CisgICAgaW50IGludHJpbnNpY1BhZGRp
bmdCb3R0b20oKSBjb25zdCB7IHJldHVybiBtX2ludHJpbnNpY1BhZGRpbmdCb3R0b207IH0KKwor
ICAgIHZpcnR1YWwgaW50IHBhZGRpbmdUb3AoYm9vbCBpbmNsdWRlSW50cmluc2ljUGFkZGluZyA9
IHRydWUpIGNvbnN0OworICAgIHZpcnR1YWwgaW50IHBhZGRpbmdCb3R0b20oYm9vbCBpbmNsdWRl
SW50cmluc2ljUGFkZGluZyA9IHRydWUpIGNvbnN0OwogCi0gICAgdmlydHVhbCBpbnQgYm9yZGVy
VG9wRXh0cmEoKSBjb25zdCB7IHJldHVybiBtX3RvcEV4dHJhOyB9Ci0gICAgdmlydHVhbCBpbnQg
Ym9yZGVyQm90dG9tRXh0cmEoKSBjb25zdCB7IHJldHVybiBtX2JvdHRvbUV4dHJhOyB9CisgICAg
dmlydHVhbCB2b2lkIHNldE92ZXJyaWRlU2l6ZShpbnQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCB2b2lkIHN0eWxlV2lsbENoYW5nZShSZW5kZXJTdHlsZTo6RGlmZiwgY29uc3QgUmVuZGVy
U3R5bGUqIG5ld1N0eWxlKTsKQEAgLTExOSw4ICsxMjQsOCBAQCBwcml2YXRlOgogICAgIGludCBt
X2NvbHVtbjsKICAgICBpbnQgbV9yb3dTcGFuOwogICAgIGludCBtX2NvbHVtblNwYW47Ci0gICAg
aW50IG1fdG9wRXh0cmEgOiAzMTsKLSAgICBpbnQgbV9ib3R0b21FeHRyYSA6IDMxOworICAgIGlu
dCBtX2ludHJpbnNpY1BhZGRpbmdUb3AgOiAzMTsKKyAgICBpbnQgbV9pbnRyaW5zaWNQYWRkaW5n
Qm90dG9tIDogMzE7CiAgICAgYm9vbCBtX3dpZHRoQ2hhbmdlZCA6IDE7CiAgICAgaW50IG1fcGVy
Y2VudGFnZUhlaWdodDsKIH07CkluZGV4OiByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkocmV2aXNp
b24gNDAxMTcpCisrKyByZW5kZXJpbmcvUmVuZGVyVGFibGVTZWN0aW9uLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzQwLDEyICszNDAsMTYgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6Y2FsY1Jv
d0hlaWdodCgpCiAgICAgICAgICAgICAgICAgY2VsbC0+bGF5b3V0SWZOZWVkZWQoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICAgICAgaW50IGFkanVzdGVkUGFkZGluZ1Rv
cCA9IGNlbGwtPnBhZGRpbmdUb3AoKSAtIGNlbGwtPmludHJpbnNpY1BhZGRpbmdUb3AoKTsKKyAg
ICAgICAgICAgIGludCBhZGp1c3RlZFBhZGRpbmdCb3R0b20gPSBjZWxsLT5wYWRkaW5nQm90dG9t
KCkgLSBjZWxsLT5pbnRyaW5zaWNQYWRkaW5nQm90dG9tKCk7CisgICAgICAgICAgICBpbnQgYWRq
dXN0ZWRIZWlnaHQgPSBjZWxsLT5oZWlnaHQoKSAtIChjZWxsLT5pbnRyaW5zaWNQYWRkaW5nVG9w
KCkgKyBjZWxsLT5pbnRyaW5zaWNQYWRkaW5nQm90dG9tKCkpOworICAgICAgICAKICAgICAgICAg
ICAgIC8vIEV4cGxpY2l0IGhlaWdodHMgdXNlIHRoZSBib3JkZXIgYm94IGluIHF1aXJrcyBtb2Rl
LiAgSW4gc3RyaWN0IG1vZGUgZG8gdGhlIHJpZ2h0CiAgICAgICAgICAgICAvLyB0aGluZyBhbmQg
YWN0dWFsbHkgYWRkIGluIHRoZSBib3JkZXIgYW5kIHBhZGRpbmcuCiAgICAgICAgICAgICBjaCA9
IGNlbGwtPnN0eWxlKCktPmhlaWdodCgpLmNhbGNWYWx1ZSgwKSArIAotICAgICAgICAgICAgICAg
IChjZWxsLT5zdHlsZSgpLT5odG1sSGFja3MoKSA/IDAgOiAoY2VsbC0+cGFkZGluZ1RvcCgpICsg
Y2VsbC0+cGFkZGluZ0JvdHRvbSgpICsKKyAgICAgICAgICAgICAgICAoY2VsbC0+c3R5bGUoKS0+
aHRtbEhhY2tzKCkgPyAwIDogKGFkanVzdGVkUGFkZGluZ1RvcCArIGFkanVzdGVkUGFkZGluZ0Jv
dHRvbSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjZWxsLT5ib3JkZXJUb3AoKSArIGNlbGwtPmJvcmRlckJvdHRvbSgpKSk7Ci0gICAgICAgICAg
ICBjaCA9IG1heChjaCwgY2VsbC0+aGVpZ2h0KCkpOworICAgICAgICAgICAgY2ggPSBtYXgoY2gs
IGFkanVzdGVkSGVpZ2h0KTsKIAogICAgICAgICAgICAgcG9zID0gbV9yb3dQb3NbaW5keF0gKyBj
aCArIChtX2dyaWRbcl0ucm93UmVuZGVyZXIgPyBzcGFjaW5nIDogMCk7CiAKQEAgLTM1Niw4ICsz
NjAsOCBAQCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpjYWxjUm93SGVpZ2h0KCkKICAgICAgICAg
ICAgIGlmICh2YSA9PSBCQVNFTElORSB8fCB2YSA9PSBURVhUX0JPVFRPTSB8fCB2YSA9PSBURVhU
X1RPUCB8fCB2YSA9PSBTVVBFUiB8fCB2YSA9PSBTVUIpIHsKICAgICAgICAgICAgICAgICBpbnQg
YiA9IGNlbGwtPmJhc2VsaW5lUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICBpZiAoYiA+IGNl
bGwtPmJvcmRlclRvcCgpICsgY2VsbC0+cGFkZGluZ1RvcCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGJhc2VsaW5lID0gbWF4KGJhc2VsaW5lLCBiKTsKLSAgICAgICAgICAgICAgICAgICAgYmRl
c2MgPSBtYXgoYmRlc2MsIG1fcm93UG9zW2luZHhdICsgY2ggLSBiKTsKKyAgICAgICAgICAgICAg
ICAgICAgYmFzZWxpbmUgPSBtYXgoYmFzZWxpbmUsIGIgLSBjZWxsLT5pbnRyaW5zaWNQYWRkaW5n
VG9wKCkpOworICAgICAgICAgICAgICAgICAgICBiZGVzYyA9IG1heChiZGVzYywgbV9yb3dQb3Nb
aW5keF0gKyBjaCAtIChiIC0gY2VsbC0+aW50cmluc2ljUGFkZGluZ1RvcCgpKSk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC01MDMsMTAgKzUwNywxMSBA
QCBpbnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0CiAgICAgICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CisgICAgICAgICAgICAK
ICAgICAgICAgICAgIGlmIChjZWxsQ2hpbGRyZW5GbGV4KSB7CiAgICAgICAgICAgICAgICAgLy8g
QWxpZ25tZW50IHdpdGhpbiBhIGNlbGwgaXMgYmFzZWQgb2ZmIHRoZSBjYWxjdWxhdGVkCiAgICAg
ICAgICAgICAgICAgLy8gaGVpZ2h0LCB3aGljaCBiZWNvbWVzIGlycmVsZXZhbnQgb25jZSB0aGUg
Y2VsbCBoYXMKLSAgICAgICAgICAgICAgICAvLyBiZWVuIHJlc2l6ZWQgYmFzZWQgb2ZmIGl0cyBw
ZXJjZW50YWdlLiAtZHdoCisgICAgICAgICAgICAgICAgLy8gYmVlbiByZXNpemVkIGJhc2VkIG9m
ZiBpdHMgcGVyY2VudGFnZS4KICAgICAgICAgICAgICAgICBjZWxsLT5zZXRPdmVycmlkZVNpemUo
bWF4KDAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJIZWln
aHQgLSBjZWxsLT5ib3JkZXJUb3AoKSAtIGNlbGwtPnBhZGRpbmdUb3AoKSAtIAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZWxsLT5ib3JkZXJC
b3R0b20oKSAtIGNlbGwtPnBhZGRpbmdCb3R0b20oKSkpOwpAQCAtNTIxLDYgKzUyNiwxMCBAQCBp
bnQgUmVuZGVyVGFibGVTZWN0aW9uOjpsYXlvdXRSb3dzKGludCB0CiAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCisgICAgICAgICAgICBpbnQgb2xkVGUgPSBj
ZWxsLT5pbnRyaW5zaWNQYWRkaW5nVG9wKCk7CisgICAgICAgICAgICBpbnQgb2xkQmUgPSBjZWxs
LT5pbnRyaW5zaWNQYWRkaW5nQm90dG9tKCk7CisgICAgICAgICAgICBpbnQgaGVpZ2h0V2l0aG91
dEludHJpbnNpY1BhZGRpbmcgPSBjZWxsLT5oZWlnaHQoKSAtIG9sZFRlIC0gb2xkQmU7CisgICAg
ICAgICAgICAKICAgICAgICAgICAgIGludCB0ZSA9IDA7CiAgICAgICAgICAgICBzd2l0Y2ggKGNl
bGwtPnN0eWxlKCktPnZlcnRpY2FsQWxpZ24oKSkgewogICAgICAgICAgICAgICAgIGNhc2UgU1VC
OgpAQCAtNTI4LDMxICs1MzcsMzUgQEAgaW50IFJlbmRlclRhYmxlU2VjdGlvbjo6bGF5b3V0Um93
cyhpbnQgdAogICAgICAgICAgICAgICAgIGNhc2UgVEVYVF9UT1A6CiAgICAgICAgICAgICAgICAg
Y2FzZSBURVhUX0JPVFRPTToKICAgICAgICAgICAgICAgICBjYXNlIEJBU0VMSU5FOgotICAgICAg
ICAgICAgICAgICAgICB0ZSA9IGdldEJhc2VsaW5lKHIpIC0gY2VsbC0+YmFzZWxpbmVQb3NpdGlv
bigpOworICAgICAgICAgICAgICAgICAgICBpbnQgYiA9IGNlbGwtPmJhc2VsaW5lUG9zaXRpb24o
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGIgPiBjZWxsLT5ib3JkZXJUb3AoKSArIGNlbGwt
PnBhZGRpbmdUb3AoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRlID0gZ2V0QmFzZWxpbmUo
cikgLSAoYiAtIG9sZFRlKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg
ICAgICAgY2FzZSBUT1A6CiAgICAgICAgICAgICAgICAgICAgIHRlID0gMDsKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBNSURETEU6Ci0gICAgICAgICAg
ICAgICAgICAgIHRlID0gKHJIZWlnaHQgLSBjZWxsLT5oZWlnaHQoKSkgLyAyOworICAgICAgICAg
ICAgICAgICAgICB0ZSA9IChySGVpZ2h0IC0gaGVpZ2h0V2l0aG91dEludHJpbnNpY1BhZGRpbmcp
IC8gMjsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBC
T1RUT006Ci0gICAgICAgICAgICAgICAgICAgIHRlID0gckhlaWdodCAtIGNlbGwtPmhlaWdodCgp
OworICAgICAgICAgICAgICAgICAgICB0ZSA9IHJIZWlnaHQgLSBoZWlnaHRXaXRob3V0SW50cmlu
c2ljUGFkZGluZzsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICBpbnQgb2xkVGUgPSBjZWxsLT5ib3JkZXJUb3BFeHRy
YSgpOwotICAgICAgICAgICAgaW50IG9sZEJlID0gY2VsbC0+Ym9yZGVyQm90dG9tRXh0cmEoKTsK
LSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGludCBiZSA9IHJIZWlnaHQgLSBjZWxsLT5o
ZWlnaHQoKSAtIHRlOwotICAgICAgICAgICAgY2VsbC0+c2V0Q2VsbFRvcEV4dHJhKHRlKTsKLSAg
ICAgICAgICAgIGNlbGwtPnNldENlbGxCb3R0b21FeHRyYShiZSk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGludCBiZSA9IHJIZWlnaHQgLSBoZWlnaHRXaXRob3V0SW50cmluc2ljUGFkZGlu
ZyAtIHRlOworICAgICAgICAgICAgY2VsbC0+c2V0SW50cmluc2ljUGFkZGluZ1RvcCh0ZSk7Cisg
ICAgICAgICAgICBjZWxsLT5zZXRJbnRyaW5zaWNQYWRkaW5nQm90dG9tKGJlKTsKKyAgICAgICAg
ICAgIGlmICh0ZSAhPSBvbGRUZSB8fCBiZSAhPSBvbGRCZSkgeworICAgICAgICAgICAgICAgIGNl
bGwtPnNldE5lZWRzTGF5b3V0KHRydWUsIGZhbHNlKTsKKyAgICAgICAgICAgICAgICBjZWxsLT5s
YXlvdXRJZk5lZWRlZCgpOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBpZiAoKHRlICE9
IG9sZFRlIHx8IGJlID4gb2xkQmUpICYmICF0YWJsZSgpLT5zZWxmTmVlZHNMYXlvdXQoKSAmJiBj
ZWxsLT5jaGVja0ZvclJlcGFpbnREdXJpbmdMYXlvdXQoKSkKICAgICAgICAgICAgICAgICBjZWxs
LT5yZXBhaW50KCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEludFJlY3Qgb2xkQ2VsbFJl
Y3QoY2VsbC0+eCgpLCBjZWxsLT55KCkgLSBjZWxsLT5ib3JkZXJUb3BFeHRyYSgpICwgY2VsbC0+
d2lkdGgoKSwgY2VsbC0+aGVpZ2h0KCkpOworICAgICAgICAgICAgSW50UmVjdCBvbGRDZWxsUmVj
dChjZWxsLT54KCksIGNlbGwtPnkoKSAsIGNlbGwtPndpZHRoKCksIGNlbGwtPmhlaWdodCgpKTsK
ICAgICAgICAgCiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gUlRMKSB7
CiAgICAgICAgICAgICAgICAgY2VsbC0+c2V0TG9jYXRpb24odGFibGUoKS0+Y29sdW1uUG9zaXRp
b25zKClbbkVmZkNvbHNdIC0gdGFibGUoKS0+Y29sdW1uUG9zaXRpb25zKClbdGFibGUoKS0+Y29s
VG9FZmZDb2woY2VsbC0+Y29sKCkgKyBjZWxsLT5jb2xTcGFuKCkpXSArIGhzcGFjaW5nLCBtX3Jv
d1Bvc1tyaW5keF0pOwpJbmRleDogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gNDAxMTcpCisrKyByZW5kZXJp
bmcvUmVuZGVyVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyMSw3ICsyMjEsNyBAQCB2b2lk
IFJlbmRlclRleHQ6OmFkZExpbmVCb3hSZWN0cyhWZWN0b3I8CiAgICAgc3RhcnQgPSBtaW4oc3Rh
cnQsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihJTlRfTUFYKSk7CiAgICAgZW5kID0gbWluKGVuZCwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KElOVF9NQVgpKTsKICAgICAKLSAgICBGbG9hdFBvaW50IGFi
c1BvcyA9IGxvY2FsVG9BYnNvbHV0ZUZvckNvbnRlbnQoRmxvYXRQb2ludCgpKTsKKyAgICBGbG9h
dFBvaW50IGFic1BvcyA9IGxvY2FsVG9BYnNvbHV0ZShGbG9hdFBvaW50KCkpOwogCiAgICAgZm9y
IChJbmxpbmVUZXh0Qm94KiBib3ggPSBmaXJzdFRleHRCb3goKTsgYm94OyBib3ggPSBib3gtPm5l
eHRUZXh0Qm94KCkpIHsKICAgICAgICAgLy8gTm90ZTogYm94LT5lbmQoKSByZXR1cm5zIHRoZSBp
bmRleCBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIsIG5vdCB0aGUgaW5kZXggcGFzdCBpdApJbmRleDog
cmVuZGVyaW5nL1JlbmRlclRyZWVBc1RleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9S
ZW5kZXJUcmVlQXNUZXh0LmNwcAkocmV2aXNpb24gNDAxMTcpCisrKyByZW5kZXJpbmcvUmVuZGVy
VHJlZUFzVGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MSwyNiArMTgxLDM2IEBAIHN0YXRp
YyBUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFRleHRTdHJlYW0KICAgICAgICAgfQogICAgIH0KIAor
ICAgIGJvb2wgYWRqdXN0Rm9yVGFibGVDZWxscyA9IG8uY29udGFpbmluZ0Jsb2NrKCktPmlzVGFi
bGVDZWxsKCk7CisKICAgICBJbnRSZWN0IHI7CiAgICAgaWYgKG8uaXNUZXh0KCkpIHsKICAgICAg
ICAgLy8gRklYTUU6IFdvdWxkIGJlIGJldHRlciB0byBkdW1wIHRoZSBib3VuZGluZyBib3ggeCBh
bmQgeSByYXRoZXIgdGhhbiB0aGUgZmlyc3QgcnVuJ3MgeCBhbmQgeSwgYnV0IHRoYXQgd291bGQg
aW52b2x2ZSB1cGRhdGluZwogICAgICAgICAvLyBtYW55IHRlc3QgcmVzdWx0cy4KICAgICAgICAg
Y29uc3QgUmVuZGVyVGV4dCYgdGV4dCA9IHN0YXRpY19jYXN0PGNvbnN0IFJlbmRlclRleHQmPihv
KTsKICAgICAgICAgciA9IEludFJlY3QodGV4dC5maXJzdFJ1blgoKSwgdGV4dC5maXJzdFJ1blko
KSwgdGV4dC5ib3VuZGluZ0JveFdpZHRoKCksIHRleHQuYm91bmRpbmdCb3hIZWlnaHQoKSk7Cisg
ICAgICAgIGlmIChhZGp1c3RGb3JUYWJsZUNlbGxzICYmICF0ZXh0LmZpcnN0VGV4dEJveCgpKQor
ICAgICAgICAgICAgYWRqdXN0Rm9yVGFibGVDZWxscyA9IGZhbHNlOwogICAgIH0gZWxzZSBpZiAo
by5pc0JveCgpKSB7CiAgICAgICAgIGlmIChvLmlzUmVuZGVySW5saW5lKCkpIHsKICAgICAgICAg
ICAgIC8vIEZJWE1FOiBXb3VsZCBiZSBiZXR0ZXIgbm90IHRvIGp1c3QgZHVtcCAwLCAwIGFzIHRo
ZSB4IGFuZCB5IGhlcmUuCiAgICAgICAgICAgICBjb25zdCBSZW5kZXJJbmxpbmUmIGlubGluZUZs
b3cgPSBzdGF0aWNfY2FzdDxjb25zdCBSZW5kZXJJbmxpbmUmPihvKTsKICAgICAgICAgICAgIHIg
PSBJbnRSZWN0KDAsIDAsIGlubGluZUZsb3cuYm91bmRpbmdCb3hXaWR0aCgpLCBpbmxpbmVGbG93
LmJvdW5kaW5nQm94SGVpZ2h0KCkpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLy8g
RklYTUU6IFdlIGNhbid0IGp1c3QgdXNlIHRoZSBhY3R1YWwgZnJhbWVSZWN0IG9mIHRoZSBib3gg
YmVjYXVzZSBkdW1wIHJlbmRlciB0cmVlIGR1bXBzIHRoZSAiaW5uZXIgYm94IiBvZiB0YWJsZSBj
ZWxscy4KLSAgICAgICAgICAgIC8vIEJlY2F1c2Ugb2YgdGhlIGxpZSB3ZSBoYXZlIHRvIGNhbGwg
eSgpLiAgV2Ugd291bGQgbGlrZSB0byBmaXggZHVtcCByZW5kZXIgdHJlZSB0byBkdW1wIHRoZSBh
Y3R1YWwgZGltZW5zaW9ucyBvZiB0aGUgdGFibGUKLSAgICAgICAgICAgIC8vIGNlbGwgaW5jbHVk
aW5nIHRoZSBleHRyYSBpbnRyaW5zaWMgcGFkZGluZy4KLSAgICAgICAgICAgIGNvbnN0IFJlbmRl
ckJveCYgYm94ID0gc3RhdGljX2Nhc3Q8Y29uc3QgUmVuZGVyQm94Jj4obyk7Ci0gICAgICAgICAg
ICByID0gSW50UmVjdChib3gueCgpLCBib3gueSgpLCBib3gud2lkdGgoKSwgYm94LmhlaWdodCgp
KTsKLSAgICAgICAgfQorICAgICAgICAgICAgYWRqdXN0Rm9yVGFibGVDZWxscyA9IGZhbHNlOwor
ICAgICAgICB9IGVsc2UgaWYgKG8uaXNUYWJsZUNlbGwoKSkgeworICAgICAgICAgICAgLy8gRklY
TUU6IERlbGliZXJhdGVseSBkdW1wIHRoZSAiaW5uZXIiIGJveCBvZiB0YWJsZSBjZWxscywgc2lu
Y2UgdGhhdCBpcyB3aGF0IGN1cnJlbnQgcmVzdWx0cyByZWZsZWN0LiAgV2UnZCBsaWtlCisgICAg
ICAgICAgICAvLyB0byBjbGVhbiB1cCB0aGUgcmVzdWx0cyB0byBkdW1wIGJvdGggdGhlIG91dGVy
IGJveCBhbmQgdGhlIGludHJpbnNpYyBwYWRkaW5nIHNvIHRoYXQgYm90aCBiaXRzIG9mIGluZm9y
bWF0aW9uIGFyZQorICAgICAgICAgICAgLy8gY2FwdHVyZWQgYnkgdGhlIHJlc3VsdHMuCisgICAg
ICAgICAgICBjb25zdCBSZW5kZXJUYWJsZUNlbGwmIGNlbGwgPSBzdGF0aWNfY2FzdDxjb25zdCBS
ZW5kZXJUYWJsZUNlbGwmPihvKTsKKyAgICAgICAgICAgIHIgPSBJbnRSZWN0KGNlbGwueCgpLCBj
ZWxsLnkoKSArIGNlbGwuaW50cmluc2ljUGFkZGluZ1RvcCgpLCBjZWxsLndpZHRoKCksIGNlbGwu
aGVpZ2h0KCkgLSBjZWxsLmludHJpbnNpY1BhZGRpbmdUb3AoKSAtIGNlbGwuaW50cmluc2ljUGFk
ZGluZ0JvdHRvbSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByID0gc3RhdGljX2Nh
c3Q8Y29uc3QgUmVuZGVyQm94Jj4obykuZnJhbWVSZWN0KCk7CiAgICAgfQogCisgICAgLy8gRklY
TUU6IFRlbXBvcmFyeSBpbiBvcmRlciB0byBlbnN1cmUgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0
aW5nIGxheW91dCB0ZXN0IHJlc3VsdHMuCisgICAgaWYgKGFkanVzdEZvclRhYmxlQ2VsbHMpCisg
ICAgICAgIHIubW92ZSgwLCAtc3RhdGljX2Nhc3Q8UmVuZGVyVGFibGVDZWxsKj4oby5jb250YWlu
aW5nQmxvY2soKSktPmludHJpbnNpY1BhZGRpbmdUb3AoKSk7CisKICAgICB0cyA8PCAiICIgPDwg
cjsKIAogICAgIGlmICghKG8uaXNUZXh0KCkgJiYgIW8uaXNCUigpKSkgewpAQCAtMzI0LDcgKzMz
NCwxMSBAQCBzdGF0aWMgVGV4dFN0cmVhbSAmb3BlcmF0b3I8PChUZXh0U3RyZWFtCiAKIHN0YXRp
YyB2b2lkIHdyaXRlVGV4dFJ1bihUZXh0U3RyZWFtJiB0cywgY29uc3QgUmVuZGVyVGV4dCYgbywg
Y29uc3QgSW5saW5lVGV4dEJveCYgcnVuKQogewotICAgIHRzIDw8ICJ0ZXh0IHJ1biBhdCAoIiA8
PCBydW4ubV94IDw8ICIsIiA8PCBydW4ubV95IDw8ICIpIHdpZHRoICIgPDwgcnVuLm1fd2lkdGg7
CisgICAgLy8gRklYTUU6IFRhYmxlIGNlbGwgYWRqdXN0bWVudCBpcyB0ZW1wb3JhcnkgdW50aWwg
cmVzdWx0cyBjYW4gYmUgdXBkYXRlZC4KKyAgICBpbnQgeSA9IHJ1bi5tX3k7CisgICAgaWYgKG8u
Y29udGFpbmluZ0Jsb2NrKCktPmlzVGFibGVDZWxsKCkpCisgICAgICAgIHkgLT0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGFibGVDZWxsKj4oby5jb250YWluaW5nQmxvY2soKSktPmludHJpbnNpY1BhZGRp
bmdUb3AoKTsKKyAgICB0cyA8PCAidGV4dCBydW4gYXQgKCIgPDwgcnVuLm1feCA8PCAiLCIgPDwg
eSA8PCAiKSB3aWR0aCAiIDw8IHJ1bi5tX3dpZHRoOwogICAgIGlmIChydW4uZGlyZWN0aW9uKCkg
PT0gUlRMIHx8IHJ1bi5tX2Rpck92ZXJyaWRlKSB7CiAgICAgICAgIHRzIDw8IChydW4uZGlyZWN0
aW9uKCkgPT0gUlRMID8gIiBSVEwiIDogIiBMVFIiKTsKICAgICAgICAgaWYgKHJ1bi5tX2Rpck92
ZXJyaWRlKQo=
</data>
<flag name="review"
          id="12911"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>