<?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>136049</bug_id>
          
          <creation_ts>2014-08-18 14:25:05 -0700</creation_ts>
          <short_desc>Tighten RenderCounter typing</short_desc>
          <delta_ts>2014-08-18 15:18:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1029875</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-18 14:25:05 -0700</bug_when>
    <thetext>yep</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029876</commentid>
    <comment_count>1</comment_count>
      <attachid>236785</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-18 14:31:24 -0700</bug_when>
    <thetext>Created attachment 236785
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029877</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-08-18 14:32:47 -0700</bug_when>
    <thetext>Attachment 236785 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderElement.h:237:  Please declare enum bitfields as unsigned integral types.  [runtime/enum_bitfields] [5]
Total errors found: 1 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029889</commentid>
    <comment_count>3</comment_count>
      <attachid>236785</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-08-18 14:40:34 -0700</bug_when>
    <thetext>Comment on attachment 236785
patch

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

&gt; Source/WebCore/rendering/RenderCounter.cpp:294
&gt;      // Real text nodes don&apos;t have their own style so they can&apos;t have counters.
&gt;      // We can&apos;t even look at their styles or we&apos;ll see extra resets and increments!
&gt; -    if (object-&gt;isText())
&gt; -        return nullptr;
&gt;  

Should delete this comment. It no longer applies.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1029901</commentid>
    <comment_count>4</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2014-08-18 15:18:44 -0700</bug_when>
    <thetext>https://trac.webkit.org/r172730</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>236785</attachid>
            <date>2014-08-18 14:31:24 -0700</date>
            <delta_ts>2014-08-18 14:40:34 -0700</delta_ts>
            <desc>patch</desc>
            <filename>counter-tighten.patch</filename>
            <type>text/plain</type>
            <size>36612</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3MjcyNikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDE0LTA4LTE4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBUaWdodGVuIFJlbmRlckNvdW50
ZXIgdHlwaW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xMzYwNDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZW5kZXJPYmplY3QqIC0+IFJlbmRlckVsZW1lbnQmCisKKyAgICAgICAgKiByZW5kZXJpbmcv
Q291bnRlck5vZGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q291bnRlck5vZGU6OkNvdW50ZXJO
b2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50ZXJOb2RlOjpjcmVhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6c2hvd1RyZWVBbmRNYXJrKToKKyAgICAgICAgKiByZW5kZXJpbmcvQ291bnRlck5v
ZGUuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNvdW50ZXJOb2RlOjpvd25lcik6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNJ
blByZU9yZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcmVudE9yUHNldWRvSG9zdEVsZW1lbnQp
OgorICAgICAgICAoV2ViQ29yZTo6cHJldmlvdXNTaWJsaW5nT3JQYXJlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6YXJlUmVuZGVyZXJzRWxlbWVudHNTaWJsaW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpuZXh0SW5QcmVPcmRlcik6CisgICAgICAgIChXZWJDb3JlOjpwbGFuQ291bnRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpmaW5kUGxhY2VGb3JDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6Om1h
a2VDb3VudGVyTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpvcmlnaW5h
bFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveUNvdW50ZXJOb2RlV2l0aG91dE1hcFJl
bW92YWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJO
b2Rlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5v
ZGUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJSZW1vdmVkRnJv
bVRyZWUpOgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlQ291bnRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQpOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyQ291bnRlcjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQpOgorICAgICAgICAo
c2hvd0NvdW50ZXJSZW5kZXJlclRyZWUpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJDb3Vu
dGVyLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6UmVuZGVyRWxlbWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJFbGVtZW50OjppbnNlcnRDaGlsZEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckVsZW1lbnQ6OnJlbW92ZUNoaWxkSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6c3R5bGVEaWRDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
RWxlbWVudDo6d2lsbEJlRGVzdHJveWVkKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6aGFzQ291bnRlck5vZGVN
YXApOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c2V0SGFzQ291bnRlck5vZGVN
YXApOgorICAgICAgICAKKyAgICAgICAgICAgIE1vdmUgQ291bnRlck5vZGVNYXAgdG8gUmVuZGVy
RWxlbWVudCBmcm9tIFJlbmRlck9iamVjdC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0Ojp3aWxsQmVEZXN0cm95
ZWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlck9iamVjdDo6UmVuZGVyT2JqZWN0Qml0ZmllbGRzOjpSZW5kZXJPYmplY3RCaXRm
aWVsZHMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpoYXNDb3VudGVyTm9kZU1h
cCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OnNldEhhc0NvdW50
ZXJOb2RlTWFwKTogRGVsZXRlZC4KKwogMjAxNC0wOC0xOCAgUHJ6ZW15c2xhdyBLdWN6eW5za2kg
IDxwLmt1Y3p5bnNraUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBGaXggdW5pbnRlbnRpb25hbCBp
bnRlZ2VyIG92ZXJmbG93IGJlZm9yZSB3aWRlbgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL0NvdW50ZXJOb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvQ291bnRlck5vZGUuY3BwCShyZXZpc2lvbiAxNzI3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvQ291bnRlck5vZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMSArMjgsMTEg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1Db3VudGVyTm9kZTo6Q291bnRlck5vZGUoUmVu
ZGVyRWxlbWVudCogbywgYm9vbCBoYXNSZXNldFR5cGUsIGludCB2YWx1ZSkKK0NvdW50ZXJOb2Rl
OjpDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50JiBvd25lciwgYm9vbCBoYXNSZXNldFR5cGUsIGlu
dCB2YWx1ZSkKICAgICA6IG1faGFzUmVzZXRUeXBlKGhhc1Jlc2V0VHlwZSkKICAgICAsIG1fdmFs
dWUodmFsdWUpCiAgICAgLCBtX2NvdW50SW5QYXJlbnQoMCkKLSAgICAsIG1fb3duZXIobykKKyAg
ICAsIG1fb3duZXIob3duZXIpCiAgICAgLCBtX3Jvb3RSZW5kZXJlcigwKQogICAgICwgbV9wYXJl
bnQoMCkKICAgICAsIG1fcHJldmlvdXNTaWJsaW5nKDApCkBAIC05MCw3ICs5MCw3IEBAIENvdW50
ZXJOb2RlOjp+Q291bnRlck5vZGUoKQogICAgIHJlc2V0UmVuZGVyZXJzKCk7CiB9CiAKLVBhc3NS
ZWZQdHI8Q291bnRlck5vZGU+IENvdW50ZXJOb2RlOjpjcmVhdGUoUmVuZGVyRWxlbWVudCogb3du
ZXIsIGJvb2wgaGFzUmVzZXRUeXBlLCBpbnQgdmFsdWUpCitQYXNzUmVmUHRyPENvdW50ZXJOb2Rl
PiBDb3VudGVyTm9kZTo6Y3JlYXRlKFJlbmRlckVsZW1lbnQmIG93bmVyLCBib29sIGhhc1Jlc2V0
VHlwZSwgaW50IHZhbHVlKQogewogICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ291bnRlck5vZGUo
b3duZXIsIGhhc1Jlc2V0VHlwZSwgdmFsdWUpKTsKIH0KQEAgLTM2NSw3ICszNjUsNyBAQCBzdGF0
aWMgdm9pZCBzaG93VHJlZUFuZE1hcmsoY29uc3QgQ291bnRlCiAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiJXAgJXM6ICVkICVkIFA6JXAgUFM6JXAgTlM6JXAgUjolcFxuIiwKICAgICAgICAgICAg
IGN1cnJlbnQsIGN1cnJlbnQtPmFjdHNBc1Jlc2V0KCkgPyAicmVzZXRfX19fIiA6ICJpbmNyZW1l
bnQiLCBjdXJyZW50LT52YWx1ZSgpLAogICAgICAgICAgICAgY3VycmVudC0+Y291bnRJblBhcmVu
dCgpLCBjdXJyZW50LT5wYXJlbnQoKSwgY3VycmVudC0+cHJldmlvdXNTaWJsaW5nKCksCi0gICAg
ICAgICAgICBjdXJyZW50LT5uZXh0U2libGluZygpLCBjdXJyZW50LT5vd25lcigpKTsKKyAgICAg
ICAgICAgIGN1cnJlbnQtPm5leHRTaWJsaW5nKCksICZjdXJyZW50LT5vd25lcigpKTsKICAgICB9
CiAgICAgZmZsdXNoKHN0ZGVycik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
Q291bnRlck5vZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvQ291
bnRlck5vZGUuaAkocmV2aXNpb24gMTcyNzE1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L0NvdW50ZXJOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQyLDEzICs0MiwxMyBAQCBjbGFzcyBS
ZW5kZXJFbGVtZW50OwogCiBjbGFzcyBDb3VudGVyTm9kZSA6IHB1YmxpYyBSZWZDb3VudGVkPENv
dW50ZXJOb2RlPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8Q291bnRlck5vZGU+
IGNyZWF0ZShSZW5kZXJFbGVtZW50KiwgYm9vbCBpc1Jlc2V0LCBpbnQgdmFsdWUpOworICAgIHN0
YXRpYyBQYXNzUmVmUHRyPENvdW50ZXJOb2RlPiBjcmVhdGUoUmVuZGVyRWxlbWVudCYsIGJvb2wg
aXNSZXNldCwgaW50IHZhbHVlKTsKICAgICB+Q291bnRlck5vZGUoKTsKICAgICBib29sIGFjdHNB
c1Jlc2V0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSZXNldFR5cGUgfHwgIW1fcGFyZW50OyB9CiAg
ICAgYm9vbCBoYXNSZXNldFR5cGUoKSBjb25zdCB7IHJldHVybiBtX2hhc1Jlc2V0VHlwZTsgfQog
ICAgIGludCB2YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KICAgICBpbnQgY291bnRJ
blBhcmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fY291bnRJblBhcmVudDsgfQotICAgIFJlbmRlckVs
ZW1lbnQqIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQorICAgIFJlbmRlckVsZW1l
bnQmIG93bmVyKCkgY29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQogICAgIHZvaWQgYWRkUmVuZGVy
ZXIoUmVuZGVyQ291bnRlciopOwogICAgIHZvaWQgcmVtb3ZlUmVuZGVyZXIoUmVuZGVyQ291bnRl
ciopOwogCkBAIC03MSw3ICs3MSw3IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUNoaWxkKENv
dW50ZXJOb2RlKik7CiAKIHByaXZhdGU6Ci0gICAgQ291bnRlck5vZGUoUmVuZGVyRWxlbWVudCos
IGJvb2wgaXNSZXNldCwgaW50IHZhbHVlKTsKKyAgICBDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50
JiwgYm9vbCBpc1Jlc2V0LCBpbnQgdmFsdWUpOwogICAgIGludCBjb21wdXRlQ291bnRJblBhcmVu
dCgpIGNvbnN0OwogICAgIC8vIEludmFsaWRhdGVzIHRoZSB0ZXh0IGluIHRoZSByZW5kZXJlciBv
ZiB0aGlzIGNvdW50ZXIsIGlmIGFueSwKICAgICAvLyBhbmQgaW4gdGhlIHJlbmRlcmVycyBvZiBh
bGwgZGVzY2VuZGFudHMgb2YgdGhpcyBjb3VudGVyLCBpZiBhbnkuCkBAIC04MSw3ICs4MSw3IEBA
IHByaXZhdGU6CiAgICAgYm9vbCBtX2hhc1Jlc2V0VHlwZTsKICAgICBpbnQgbV92YWx1ZTsKICAg
ICBpbnQgbV9jb3VudEluUGFyZW50OwotICAgIFJlbmRlckVsZW1lbnQqIG1fb3duZXI7CisgICAg
UmVuZGVyRWxlbWVudCYgbV9vd25lcjsKICAgICBSZW5kZXJDb3VudGVyKiBtX3Jvb3RSZW5kZXJl
cjsKIAogICAgIENvdW50ZXJOb2RlKiBtX3BhcmVudDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQ291bnRlci5jcHAJKHJldmlzaW9uIDE3MjcxNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJDb3VudGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQs
OSArNDQsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogCiB0eXBlZGVmIEhhc2hNYXA8QXRvbWljU3RyaW5nLCBSZWZQdHI8Q291bnRlck5vZGU+PiBD
b3VudGVyTWFwOwotdHlwZWRlZiBIYXNoTWFwPGNvbnN0IFJlbmRlck9iamVjdCosIHN0ZDo6dW5p
cXVlX3B0cjxDb3VudGVyTWFwPj4gQ291bnRlck1hcHM7Cit0eXBlZGVmIEhhc2hNYXA8Y29uc3Qg
UmVuZGVyRWxlbWVudCosIHN0ZDo6dW5pcXVlX3B0cjxDb3VudGVyTWFwPj4gQ291bnRlck1hcHM7
CiAKLXN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRlck9iamVjdCosIGNv
bnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwgYm9vbCBhbHdheXNDcmVhdGVDb3VudGVyKTsK
K3N0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmRlckVsZW1lbnQmLCBjb25z
dCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wgYWx3YXlzQ3JlYXRlQ291bnRlcik7CiAK
IHN0YXRpYyBDb3VudGVyTWFwcyYgY291bnRlck1hcHMoKQogewpAQCAtNTYsNjggKzU2LDY0IEBA
IHN0YXRpYyBDb3VudGVyTWFwcyYgY291bnRlck1hcHMoKQogCiAvLyBUaGlzIGZ1bmN0aW9uIHBy
b2Nlc3NlcyB0aGUgcmVuZGVyZXIgdHJlZSBpbiB0aGUgb3JkZXIgb2YgdGhlIERPTSB0cmVlCiAv
LyBpbmNsdWRpbmcgcHNldWRvIGVsZW1lbnRzIGFzIGRlZmluZWQgaW4gQ1NTIDIuMS4KLXN0YXRp
YyBSZW5kZXJPYmplY3QqIHByZXZpb3VzSW5QcmVPcmRlcihjb25zdCBSZW5kZXJPYmplY3QqIG9i
amVjdCkKK3N0YXRpYyBSZW5kZXJFbGVtZW50KiBwcmV2aW91c0luUHJlT3JkZXIoY29uc3QgUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgRWxlbWVudCogc2VsZiA9IHRvRWxlbWVudChv
YmplY3QtPm5vZGUoKSk7Ci0gICAgRWxlbWVudCogcHJldmlvdXMgPSBFbGVtZW50VHJhdmVyc2Fs
OjpwcmV2aW91c0luY2x1ZGluZ1BzZXVkbyhzZWxmKTsKKyAgICBFbGVtZW50KiBwcmV2aW91cyA9
IEVsZW1lbnRUcmF2ZXJzYWw6OnByZXZpb3VzSW5jbHVkaW5nUHNldWRvKHJlbmRlcmVyLmVsZW1l
bnQoKSk7CiAgICAgd2hpbGUgKHByZXZpb3VzICYmICFwcmV2aW91cy0+cmVuZGVyZXIoKSkKICAg
ICAgICAgcHJldmlvdXMgPSBFbGVtZW50VHJhdmVyc2FsOjpwcmV2aW91c0luY2x1ZGluZ1BzZXVk
byhwcmV2aW91cyk7CiAgICAgcmV0dXJuIHByZXZpb3VzID8gcHJldmlvdXMtPnJlbmRlcmVyKCkg
OiAwOwogfQogCi1zdGF0aWMgaW5saW5lIEVsZW1lbnQqIHBhcmVudE9yUHNldWRvSG9zdEVsZW1l
bnQoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmplY3QpCitzdGF0aWMgaW5saW5lIEVsZW1lbnQqIHBh
cmVudE9yUHNldWRvSG9zdEVsZW1lbnQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7
Ci0gICAgaWYgKG9iamVjdC0+bm9kZSgpLT5pc1BzZXVkb0VsZW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuIHRvUHNldWRvRWxlbWVudChvYmplY3QtPm5vZGUoKSktPmhvc3RFbGVtZW50KCk7Ci0gICAg
cmV0dXJuIHRvRWxlbWVudChvYmplY3QtPm5vZGUoKSktPnBhcmVudEVsZW1lbnQoKTsKKyAgICBp
ZiAocmVuZGVyZXIuaXNQc2V1ZG9FbGVtZW50KCkpCisgICAgICAgIHJldHVybiByZW5kZXJlci5n
ZW5lcmF0aW5nRWxlbWVudCgpOworICAgIHJldHVybiByZW5kZXJlci5lbGVtZW50KCkgPyByZW5k
ZXJlci5lbGVtZW50KCktPnBhcmVudEVsZW1lbnQoKSA6IG51bGxwdHI7CiB9CiAKIC8vIFRoaXMg
ZnVuY3Rpb24gcHJvY2Vzc2VzIHRoZSByZW5kZXJlciB0cmVlIGluIHRoZSBvcmRlciBvZiB0aGUg
RE9NIHRyZWUKIC8vIGluY2x1ZGluZyBwc2V1ZG8gZWxlbWVudHMgYXMgZGVmaW5lZCBpbiBDU1Mg
Mi4xLgotc3RhdGljIFJlbmRlck9iamVjdCogcHJldmlvdXNTaWJsaW5nT3JQYXJlbnQoY29uc3Qg
UmVuZGVyT2JqZWN0KiBvYmplY3QpCitzdGF0aWMgUmVuZGVyRWxlbWVudCogcHJldmlvdXNTaWJs
aW5nT3JQYXJlbnQoY29uc3QgUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCiB7Ci0gICAgRWxlbWVu
dCogc2VsZiA9IHRvRWxlbWVudChvYmplY3QtPm5vZGUoKSk7Ci0gICAgRWxlbWVudCogcHJldmlv
dXMgPSBFbGVtZW50VHJhdmVyc2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyhzZWxmKTsK
KyAgICBFbGVtZW50KiBwcmV2aW91cyA9IEVsZW1lbnRUcmF2ZXJzYWw6OnBzZXVkb0F3YXJlUHJl
dmlvdXNTaWJsaW5nKHJlbmRlcmVyLmVsZW1lbnQoKSk7CiAgICAgd2hpbGUgKHByZXZpb3VzICYm
ICFwcmV2aW91cy0+cmVuZGVyZXIoKSkKICAgICAgICAgcHJldmlvdXMgPSBFbGVtZW50VHJhdmVy
c2FsOjpwc2V1ZG9Bd2FyZVByZXZpb3VzU2libGluZyhwcmV2aW91cyk7CiAgICAgaWYgKHByZXZp
b3VzKQogICAgICAgICByZXR1cm4gcHJldmlvdXMtPnJlbmRlcmVyKCk7Ci0gICAgcHJldmlvdXMg
PSBwYXJlbnRPclBzZXVkb0hvc3RFbGVtZW50KG9iamVjdCk7Ci0gICAgcmV0dXJuIHByZXZpb3Vz
ID8gcHJldmlvdXMtPnJlbmRlcmVyKCkgOiAwOworICAgIHByZXZpb3VzID0gcGFyZW50T3JQc2V1
ZG9Ib3N0RWxlbWVudChyZW5kZXJlcik7CisgICAgcmV0dXJuIHByZXZpb3VzID8gcHJldmlvdXMt
PnJlbmRlcmVyKCkgOiBudWxscHRyOwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgYXJlUmVuZGVy
ZXJzRWxlbWVudHNTaWJsaW5ncyhSZW5kZXJPYmplY3QqIGZpcnN0LCBSZW5kZXJPYmplY3QqIHNl
Y29uZCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBhcmVSZW5kZXJlcnNFbGVtZW50c1NpYmxpbmdzKGNv
bnN0IFJlbmRlckVsZW1lbnQmIGZpcnN0LCBjb25zdCBSZW5kZXJFbGVtZW50JiBzZWNvbmQpCiB7
CiAgICAgcmV0dXJuIHBhcmVudE9yUHNldWRvSG9zdEVsZW1lbnQoZmlyc3QpID09IHBhcmVudE9y
UHNldWRvSG9zdEVsZW1lbnQoc2Vjb25kKTsKIH0KIAogLy8gVGhpcyBmdW5jdGlvbiBwcm9jZXNz
ZXMgdGhlIHJlbmRlcmVyIHRyZWUgaW4gdGhlIG9yZGVyIG9mIHRoZSBET00gdHJlZQogLy8gaW5j
bHVkaW5nIHBzZXVkbyBlbGVtZW50cyBhcyBkZWZpbmVkIGluIENTUyAyLjEuCi1zdGF0aWMgUmVu
ZGVyRWxlbWVudCogbmV4dEluUHJlT3JkZXIoY29uc3QgUmVuZGVyRWxlbWVudCogZWxlbWVudCwg
Y29uc3QgRWxlbWVudCogc3RheVdpdGhpbiwgYm9vbCBza2lwRGVzY2VuZGFudHMgPSBmYWxzZSkK
K3N0YXRpYyBSZW5kZXJFbGVtZW50KiBuZXh0SW5QcmVPcmRlcihjb25zdCBSZW5kZXJFbGVtZW50
JiByZW5kZXJlciwgY29uc3QgRWxlbWVudCogc3RheVdpdGhpbiwgYm9vbCBza2lwRGVzY2VuZGFu
dHMgPSBmYWxzZSkKIHsKLSAgICBFbGVtZW50KiBzZWxmID0gZWxlbWVudC0+ZWxlbWVudCgpOwor
ICAgIEVsZW1lbnQqIHNlbGYgPSByZW5kZXJlci5lbGVtZW50KCk7CiAgICAgRWxlbWVudCogbmV4
dCA9IHNraXBEZXNjZW5kYW50cyA/IEVsZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1
ZG9Ta2lwcGluZ0NoaWxkcmVuKHNlbGYsIHN0YXlXaXRoaW4pIDogRWxlbWVudFRyYXZlcnNhbDo6
bmV4dEluY2x1ZGluZ1BzZXVkbyhzZWxmLCBzdGF5V2l0aGluKTsKICAgICB3aGlsZSAobmV4dCAm
JiAhbmV4dC0+cmVuZGVyZXIoKSkKICAgICAgICAgbmV4dCA9IHNraXBEZXNjZW5kYW50cyA/IEVs
ZW1lbnRUcmF2ZXJzYWw6Om5leHRJbmNsdWRpbmdQc2V1ZG9Ta2lwcGluZ0NoaWxkcmVuKG5leHQs
IHN0YXlXaXRoaW4pIDogRWxlbWVudFRyYXZlcnNhbDo6bmV4dEluY2x1ZGluZ1BzZXVkbyhuZXh0
LCBzdGF5V2l0aGluKTsKICAgICByZXR1cm4gbmV4dCA/IG5leHQtPnJlbmRlcmVyKCkgOiAwOwog
fQogCi1zdGF0aWMgYm9vbCBwbGFuQ291bnRlcihSZW5kZXJFbGVtZW50KiBvYmplY3QsIGNvbnN0
IEF0b21pY1N0cmluZyYgaWRlbnRpZmllciwgYm9vbCYgaXNSZXNldCwgaW50JiB2YWx1ZSkKK3N0
YXRpYyBib29sIHBsYW5Db3VudGVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBjb25zdCBBdG9t
aWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wmIGlzUmVzZXQsIGludCYgdmFsdWUpCiB7Ci0gICAg
QVNTRVJUKG9iamVjdCk7Ci0KICAgICAvLyBXZSBtdXN0IGhhdmUgYSBnZW5lcmF0aW5nIG5vZGUg
b3IgZWxzZSB3ZSBjYW5ub3QgaGF2ZSBhIGNvdW50ZXIuCi0gICAgRWxlbWVudCogZ2VuZXJhdGlu
Z0VsZW1lbnQgPSBvYmplY3QtPmdlbmVyYXRpbmdFbGVtZW50KCk7CisgICAgRWxlbWVudCogZ2Vu
ZXJhdGluZ0VsZW1lbnQgPSByZW5kZXJlci5nZW5lcmF0aW5nRWxlbWVudCgpOwogICAgIGlmICgh
Z2VuZXJhdGluZ0VsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSA9IG9iamVjdC0+c3R5bGUoKTsKKyAgICBjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUgPSByZW5kZXJlci5zdHlsZSgpOwogCiAgICAgc3dpdGNoIChzdHlsZS5zdHlsZVR5
cGUoKSkgewogICAgIGNhc2UgTk9QU0VVRE86CiAgICAgICAgIC8vIFNvbWV0aW1lcyBlbGVtZW50
cyBoYXZlIG1vcmUgdGhlbiBvbmUgcmVuZGVyZXIuIE9ubHkgdGhlIGZpcnN0IG9uZSBnZXRzIHRo
ZSBjb3VudGVyCiAgICAgICAgIC8vIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY3NzL2NvdW50ZXIt
Y3Jhc2guaHRtbAotICAgICAgICBpZiAoZ2VuZXJhdGluZ0VsZW1lbnQtPnJlbmRlcmVyKCkgIT0g
b2JqZWN0KQorICAgICAgICBpZiAoZ2VuZXJhdGluZ0VsZW1lbnQtPnJlbmRlcmVyKCkgIT0gJnJl
bmRlcmVyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBicmVhazsKICAgICBj
YXNlIEJFRk9SRToKQEAgLTEzNSw5ICsxMzEsOSBAQCBzdGF0aWMgYm9vbCBwbGFuQ291bnRlcihS
ZW5kZXJFbGVtZW50KiBvCiAgICAgfQogCiAgICAgaWYgKGlkZW50aWZpZXIgPT0gImxpc3QtaXRl
bSIpIHsKLSAgICAgICAgaWYgKG9iamVjdC0+aXNMaXN0SXRlbSgpKSB7Ci0gICAgICAgICAgICBp
ZiAodG9SZW5kZXJMaXN0SXRlbShvYmplY3QpLT5oYXNFeHBsaWNpdFZhbHVlKCkpIHsKLSAgICAg
ICAgICAgICAgICB2YWx1ZSA9IHRvUmVuZGVyTGlzdEl0ZW0ob2JqZWN0KS0+ZXhwbGljaXRWYWx1
ZSgpOworICAgICAgICBpZiAocmVuZGVyZXIuaXNMaXN0SXRlbSgpKSB7CisgICAgICAgICAgICBp
ZiAodG9SZW5kZXJMaXN0SXRlbShyZW5kZXJlcikuaGFzRXhwbGljaXRWYWx1ZSgpKSB7CisgICAg
ICAgICAgICAgICAgdmFsdWUgPSB0b1JlbmRlckxpc3RJdGVtKHJlbmRlcmVyKS5leHBsaWNpdFZh
bHVlKCk7CiAgICAgICAgICAgICAgICAgaXNSZXNldCA9IHRydWU7CiAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9CkBAIC0xNDUsMTMgKzE0MSwxMyBAQCBzdGF0aWMg
Ym9vbCBwbGFuQ291bnRlcihSZW5kZXJFbGVtZW50KiBvCiAgICAgICAgICAgICBpc1Jlc2V0ID0g
ZmFsc2U7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAo
RWxlbWVudCogZSA9IG9iamVjdC0+ZWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoZS0+aGFz
VGFnTmFtZShvbFRhZykpIHsKLSAgICAgICAgICAgICAgICB2YWx1ZSA9IHRvSFRNTE9MaXN0RWxl
bWVudChlKS0+c3RhcnQoKTsKKyAgICAgICAgaWYgKEVsZW1lbnQqIGVsZW1lbnQgPSByZW5kZXJl
ci5lbGVtZW50KCkpIHsKKyAgICAgICAgICAgIGlmIChlbGVtZW50LT5oYXNUYWdOYW1lKG9sVGFn
KSkgeworICAgICAgICAgICAgICAgIHZhbHVlID0gdG9IVE1MT0xpc3RFbGVtZW50KGVsZW1lbnQp
LT5zdGFydCgpOwogICAgICAgICAgICAgICAgIGlzUmVzZXQgPSB0cnVlOwogICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGUtPmhhc1Rh
Z05hbWUodWxUYWcpIHx8IGUtPmhhc1RhZ05hbWUobWVudVRhZykgfHwgZS0+aGFzVGFnTmFtZShk
aXJUYWcpKSB7CisgICAgICAgICAgICBpZiAoZWxlbWVudC0+aGFzVGFnTmFtZSh1bFRhZykgfHwg
ZWxlbWVudC0+aGFzVGFnTmFtZShtZW51VGFnKSB8fCBlbGVtZW50LT5oYXNUYWdOYW1lKGRpclRh
ZykpIHsKICAgICAgICAgICAgICAgICB2YWx1ZSA9IDA7CiAgICAgICAgICAgICAgICAgaXNSZXNl
dCA9IHRydWU7CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNzgsMjAgKzE3NCwy
MCBAQCBzdGF0aWMgYm9vbCBwbGFuQ291bnRlcihSZW5kZXJFbGVtZW50KiBvCiAvLyByZXNldCBu
b2RlLgogLy8gLSBOb24tcmVzZXQgQ291bnRlck5vZGVzIGNhbm5vdCBoYXZlIGRlc2NlbmRhbnRz
LgogCi1zdGF0aWMgYm9vbCBmaW5kUGxhY2VGb3JDb3VudGVyKFJlbmRlck9iamVjdCogY291bnRl
ck93bmVyLCBjb25zdCBBdG9taWNTdHJpbmcmIGlkZW50aWZpZXIsIGJvb2wgaXNSZXNldCwgUmVm
UHRyPENvdW50ZXJOb2RlPiYgcGFyZW50LCBSZWZQdHI8Q291bnRlck5vZGU+JiBwcmV2aW91c1Np
YmxpbmcpCitzdGF0aWMgYm9vbCBmaW5kUGxhY2VGb3JDb3VudGVyKFJlbmRlckVsZW1lbnQmIGNv
dW50ZXJPd25lciwgY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyLCBib29sIGlzUmVzZXQs
IFJlZlB0cjxDb3VudGVyTm9kZT4mIHBhcmVudCwgUmVmUHRyPENvdW50ZXJOb2RlPiYgcHJldmlv
dXNTaWJsaW5nKQogewogICAgIC8vIFdlIGNhbm5vdCBzdG9wIHNlYXJjaGluZyBmb3IgY291bnRl
cnMgd2l0aCB0aGUgc2FtZSBpZGVudGlmaWVyIGJlZm9yZSB3ZSBhbHNvCiAgICAgLy8gY2hlY2sg
dGhpcyByZW5kZXJlciwgYmVjYXVzZSBpdCBtYXkgYWZmZWN0IHRoZSBwb3NpdGlvbmluZyBpbiB0
aGUgdHJlZSBvZiBvdXIgY291bnRlci4KLSAgICBSZW5kZXJPYmplY3QqIHNlYXJjaEVuZFJlbmRl
cmVyID0gcHJldmlvdXNTaWJsaW5nT3JQYXJlbnQoY291bnRlck93bmVyKTsKKyAgICBSZW5kZXJF
bGVtZW50KiBzZWFyY2hFbmRSZW5kZXJlciA9IHByZXZpb3VzU2libGluZ09yUGFyZW50KGNvdW50
ZXJPd25lcik7CiAgICAgLy8gV2UgY2hlY2sgcmVuZGVyZXJzIGluIHByZU9yZGVyIGZyb20gdGhl
IHJlbmRlcmVyIHRoYXQgb3VyIGNvdW50ZXIgaXMgYXR0YWNoZWQgdG8KICAgICAvLyB0b3dhcmRz
IHRoZSBiZWdpbmluZyBvZiB0aGUgZG9jdW1lbnQgZm9yIGNvdW50ZXJzIHdpdGggdGhlIHNhbWUg
aWRlbnRpZmllciBhcyB0aGUgb25lCiAgICAgLy8gd2UgYXJlIHRyeWluZyB0byBmaW5kIGEgcGxh
Y2UgZm9yLiBUaGlzIGlzIHRoZSBuZXh0IHJlbmRlcmVyIHRvIGJlIGNoZWNrZWQuCi0gICAgUmVu
ZGVyT2JqZWN0KiBjdXJyZW50UmVuZGVyZXIgPSBwcmV2aW91c0luUHJlT3JkZXIoY291bnRlck93
bmVyKTsKKyAgICBSZW5kZXJFbGVtZW50KiBjdXJyZW50UmVuZGVyZXIgPSBwcmV2aW91c0luUHJl
T3JkZXIoY291bnRlck93bmVyKTsKICAgICBwcmV2aW91c1NpYmxpbmcgPSAwOwogICAgIFJlZlB0
cjxDb3VudGVyTm9kZT4gcHJldmlvdXNTaWJsaW5nUHJvdGVjdG9yID0gMDsKIAogICAgIHdoaWxl
IChjdXJyZW50UmVuZGVyZXIpIHsKLSAgICAgICAgQ291bnRlck5vZGUqIGN1cnJlbnRDb3VudGVy
ID0gbWFrZUNvdW50ZXJOb2RlKGN1cnJlbnRSZW5kZXJlciwgaWRlbnRpZmllciwgZmFsc2UpOwor
ICAgICAgICBDb3VudGVyTm9kZSogY3VycmVudENvdW50ZXIgPSBtYWtlQ291bnRlck5vZGUoKmN1
cnJlbnRSZW5kZXJlciwgaWRlbnRpZmllciwgZmFsc2UpOwogICAgICAgICBpZiAoc2VhcmNoRW5k
UmVuZGVyZXIgPT0gY3VycmVudFJlbmRlcmVyKSB7CiAgICAgICAgICAgICAvLyBXZSBtYXkgYmUg
YXQgdGhlIGVuZCBvZiBvdXIgc2VhcmNoLgogICAgICAgICAgICAgaWYgKGN1cnJlbnRDb3VudGVy
KSB7CkBAIC0xOTksNyArMTk1LDcgQEAgc3RhdGljIGJvb2wgZmluZFBsYWNlRm9yQ291bnRlcihS
ZW5kZXJPYgogICAgICAgICAgICAgICAgIGlmIChwcmV2aW91c1NpYmxpbmdQcm90ZWN0b3IpIHsg
Ly8gQnV0IHdlIGFscmVhZHkgZm91bmQgYW5vdGhlciBjb3VudGVyIHRoYXQgd2UgY29tZSBhZnRl
ci4KICAgICAgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRDb3VudGVyLT5hY3RzQXNSZXNldCgp
KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSBmb3VuZCBhIHJlc2V0IGNvdW50ZXIg
dGhhdCBpcyBvbiBhIHJlbmRlcmVyIHRoYXQgaXMgYSBzaWJsaW5nIG9mIG91cnMgb3IgYSBwYXJl
bnQuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNSZXNldCAmJiBhcmVSZW5kZXJlcnNF
bGVtZW50c1NpYmxpbmdzKGN1cnJlbnRSZW5kZXJlciwgY291bnRlck93bmVyKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKGlzUmVzZXQgJiYgYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJs
aW5ncygqY3VycmVudFJlbmRlcmVyLCBjb3VudGVyT3duZXIpKSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIGFsc28gYSByZXNldCBjb3VudGVyIGFuZCB0aGUgcHJldmlv
dXMgcmVzZXQgd2FzIG9uIGEgc2libGluZyByZW5kZXJlcgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGhlbmNlIHdlIGFyZSB0aGUgbmV4dCBzaWJsaW5nIG9mIHRoYXQgY291bnRlciBp
ZiB0aGF0IHJlc2V0IGlzIG5vdCBhIHJvb3Qgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyB3ZSBhcmUgYSByb290IG5vZGUgaWYgdGhhdCByZXNldCBpcyBhIHJvb3QuCkBAIC0yMjAs
NyArMjE2LDcgQEAgc3RhdGljIGJvb2wgZmluZFBsYWNlRm9yQ291bnRlcihSZW5kZXJPYgogICAg
ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudENvdW50ZXIsIHRoZSBjb3VudGVyIGF0IHRo
ZSBFbmRTZWFyY2hSZW5kZXJlciwgaXMgbm90IHJlc2V0LgotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWlzUmVzZXQgfHwgIWFyZVJlbmRlcmVyc0VsZW1lbnRzU2libGluZ3MoY3VycmVudFJlbmRl
cmVyLCBjb3VudGVyT3duZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghaXNSZXNldCB8
fCAhYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJsaW5ncygqY3VycmVudFJlbmRlcmVyLCBjb3VudGVy
T3duZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgbm9kZSB3ZSBhcmUg
cGxhY2luZyBpcyBub3QgcmVzZXQgb3Igd2UgaGF2ZSBmb3VuZCBhIGNvdW50ZXIgdGhhdCBpcyBh
dHRhY2hlZAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gYW4gYW5jZXN0b3Igb2YgdGhl
IHBsYWNlZCBjb3VudGVyJ3Mgb3duZXIgcmVuZGVyZXIgd2Uga25vdyB3ZSBhcmUgYSBzaWJsaW5n
IG9mIHRoYXQgbm9kZS4KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Q291bnRl
ci0+cGFyZW50KCkgIT0gcHJldmlvdXNTaWJsaW5nUHJvdGVjdG9yLT5wYXJlbnQoKSkKQEAgLTIz
Niw3ICsyMzIsNyBAQCBzdGF0aWMgYm9vbCBmaW5kUGxhY2VGb3JDb3VudGVyKFJlbmRlck9iCiAg
ICAgICAgICAgICAgICAgICAgIC8vIHByZXZpb3VzU2libGluZywgYW5kIHdoZW4gd2UgYXJlIGEg
c2libGluZyBvZiB0aGUgZW5kIGNvdW50ZXIgd2UgbXVzdCBzZXQgcHJldmlvdXNTaWJsaW5nCiAg
ICAgICAgICAgICAgICAgICAgIC8vIHRvIGN1cnJlbnRDb3VudGVyLgogICAgICAgICAgICAgICAg
ICAgICBpZiAoY3VycmVudENvdW50ZXItPmFjdHNBc1Jlc2V0KCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIChpc1Jlc2V0ICYmIGFyZVJlbmRlcmVyc0VsZW1lbnRzU2libGluZ3MoY3Vy
cmVudFJlbmRlcmVyLCBjb3VudGVyT3duZXIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoaXNSZXNldCAmJiBhcmVSZW5kZXJlcnNFbGVtZW50c1NpYmxpbmdzKCpjdXJyZW50UmVuZGVy
ZXIsIGNvdW50ZXJPd25lcikpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQg
PSBjdXJyZW50Q291bnRlci0+cGFyZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cHJldmlvdXNTaWJsaW5nID0gY3VycmVudENvdW50ZXI7CiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHBhcmVudDsKQEAgLTI0NSw3ICsyNDEsNyBAQCBzdGF0aWMgYm9vbCBmaW5k
UGxhY2VGb3JDb3VudGVyKFJlbmRlck9iCiAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c1NpYmxpbmcgPSBwcmV2aW91c1NpYmxpbmdQcm90ZWN0b3IuZ2V0KCk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgICAgICBpZiAoIWlzUmVzZXQgfHwgIWFyZVJlbmRlcmVyc0VsZW1lbnRzU2libGluZ3Mo
Y3VycmVudFJlbmRlcmVyLCBjb3VudGVyT3duZXIpKSB7CisgICAgICAgICAgICAgICAgICAgIGlm
ICghaXNSZXNldCB8fCAhYXJlUmVuZGVyZXJzRWxlbWVudHNTaWJsaW5ncygqY3VycmVudFJlbmRl
cmVyLCBjb3VudGVyT3duZXIpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnQgPSBj
dXJyZW50Q291bnRlci0+cGFyZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2aW91
c1NpYmxpbmcgPSBjdXJyZW50Q291bnRlcjsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMjU3LDcgKzI1Myw3IEBAIHN0YXRpYyBib29sIGZpbmRQbGFjZUZvckNvdW50
ZXIoUmVuZGVyT2IKICAgICAgICAgICAgIC8vIGdvb2QgY291bnRlciwgb3Igd2UgYXJlIGEgcmVz
ZXQgbm9kZSBhbmQgdGhlIGNvdW50ZXIgb24gdGhlIHByZXZpb3VzIHNpYmxpbmcKICAgICAgICAg
ICAgIC8vIG9mIG91ciBvd25lciByZW5kZXJlciB3YXMgbm90IGEgcmVzZXQgY291bnRlci4KICAg
ICAgICAgICAgIC8vIFNldCBhIG5ldyBnb2FsIGZvciB0aGUgZW5kIG9mIHRoZSBzZWFyY2guCi0g
ICAgICAgICAgICBzZWFyY2hFbmRSZW5kZXJlciA9IHByZXZpb3VzU2libGluZ09yUGFyZW50KGN1
cnJlbnRSZW5kZXJlcik7CisgICAgICAgICAgICBzZWFyY2hFbmRSZW5kZXJlciA9IHByZXZpb3Vz
U2libGluZ09yUGFyZW50KCpjdXJyZW50UmVuZGVyZXIpOwogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgLy8gV2UgYXJlIHNlYXJjaGluZyBkZXNjZW5kYW50cyBvZiBhIHByZXZpb3VzIHNp
Ymxpbmcgb2YgdGhlIHJlbmRlcmVyIHRoYXQgdGhlCiAgICAgICAgICAgICAvLyBjb3VudGVyIGJl
aW5nIHBsYWNlZCBpcyBhdHRhY2hlZCB0by4KQEAgLTI3MCwxMiArMjY2LDEyIEBAIHN0YXRpYyBi
b29sIGZpbmRQbGFjZUZvckNvdW50ZXIoUmVuZGVyT2IKICAgICAgICAgICAgICAgICAgICAgICAg
IHByZXZpb3VzU2libGluZ1Byb3RlY3RvciA9IGN1cnJlbnRDb3VudGVyOwogICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gV2UgYXJlIG5vIGxvbmdlciBpbnRlcmVzdGVkIGluIHByZXZpb3VzIHNp
YmxpbmdzIG9mIHRoZSBjdXJyZW50UmVuZGVyZXIgb3IgdGhlaXIgY2hpbGRyZW4KICAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIGFzIGNvdW50ZXJzIHRoZXkgbWF5IGhhdmUgYXR0YWNoZWQgY2Fu
bm90IGJlIHRoZSBwcmV2aW91cyBzaWJsaW5nIG9mIHRoZSBjb3VudGVyIHdlIGFyZSBwbGFjaW5n
LgotICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFJlbmRlcmVyID0gcGFyZW50T3JQc2V1
ZG9Ib3N0RWxlbWVudChjdXJyZW50UmVuZGVyZXIpLT5yZW5kZXJlcigpOworICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFJlbmRlcmVyID0gcGFyZW50T3JQc2V1ZG9Ib3N0RWxlbWVudCgq
Y3VycmVudFJlbmRlcmVyKS0+cmVuZGVyZXIoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIHByZXZpb3VzU2libGluZ1Byb3RlY3RvciA9IGN1cnJlbnRDb3Vu
dGVyOwotICAgICAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJlciA9IHByZXZpb3VzU2libGluZ09y
UGFyZW50KGN1cnJlbnRSZW5kZXJlcik7CisgICAgICAgICAgICAgICAgY3VycmVudFJlbmRlcmVy
ID0gcHJldmlvdXNTaWJsaW5nT3JQYXJlbnQoKmN1cnJlbnRSZW5kZXJlcik7CiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTI4NCwyNiArMjgw
LDIwIEBAIHN0YXRpYyBib29sIGZpbmRQbGFjZUZvckNvdW50ZXIoUmVuZGVyT2IKICAgICAgICAg
Ly8gcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgd291bGQgY3JlYXRlIG1vcmUgY29kZSBkdXBsaWNh
dGlvbiB0aGFuIGlzIHdvcnRod2hpbGUgaW4gbXkgb3BwaW5pb24gYW5kIG1heSBmdXJ0aGVyCiAg
ICAgICAgIC8vIGltcGVkZSB0aGUgcmVhZGFiaWxpdHkgb2YgdGhpcyBhbHJlYWR5IGNvbXBsZXgg
YWxnb3JpdGhtLgogICAgICAgICBpZiAocHJldmlvdXNTaWJsaW5nUHJvdGVjdG9yKQotICAgICAg
ICAgICAgY3VycmVudFJlbmRlcmVyID0gcHJldmlvdXNTaWJsaW5nT3JQYXJlbnQoY3VycmVudFJl
bmRlcmVyKTsKKyAgICAgICAgICAgIGN1cnJlbnRSZW5kZXJlciA9IHByZXZpb3VzU2libGluZ09y
UGFyZW50KCpjdXJyZW50UmVuZGVyZXIpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJy
ZW50UmVuZGVyZXIgPSBwcmV2aW91c0luUHJlT3JkZXIoY3VycmVudFJlbmRlcmVyKTsKKyAgICAg
ICAgICAgIGN1cnJlbnRSZW5kZXJlciA9IHByZXZpb3VzSW5QcmVPcmRlcigqY3VycmVudFJlbmRl
cmVyKTsKICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1zdGF0aWMgQ291bnRlck5vZGUq
IG1ha2VDb3VudGVyTm9kZShSZW5kZXJPYmplY3QqIG9iamVjdCwgY29uc3QgQXRvbWljU3RyaW5n
JiBpZGVudGlmaWVyLCBib29sIGFsd2F5c0NyZWF0ZUNvdW50ZXIpCitzdGF0aWMgQ291bnRlck5v
ZGUqIG1ha2VDb3VudGVyTm9kZShSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgY29uc3QgQXRvbWlj
U3RyaW5nJiBpZGVudGlmaWVyLCBib29sIGFsd2F5c0NyZWF0ZUNvdW50ZXIpCiB7Ci0gICAgQVNT
RVJUKG9iamVjdCk7Ci0KICAgICAvLyBSZWFsIHRleHQgbm9kZXMgZG9uJ3QgaGF2ZSB0aGVpciBv
d24gc3R5bGUgc28gdGhleSBjYW4ndCBoYXZlIGNvdW50ZXJzLgogICAgIC8vIFdlIGNhbid0IGV2
ZW4gbG9vayBhdCB0aGVpciBzdHlsZXMgb3Igd2UnbGwgc2VlIGV4dHJhIHJlc2V0cyBhbmQgaW5j
cmVtZW50cyEKLSAgICBpZiAob2JqZWN0LT5pc1RleHQoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CiAKLSAgICBSZW5kZXJFbGVtZW50KiBlbGVtZW50ID0gdG9SZW5kZXJFbGVtZW50KG9iamVj
dCk7Ci0KLSAgICBpZiAoZWxlbWVudC0+aGFzQ291bnRlck5vZGVNYXAoKSkgewotICAgICAgICBp
ZiAoQ291bnRlck1hcCogbm9kZU1hcCA9IGNvdW50ZXJNYXBzKCkuZ2V0KGVsZW1lbnQpKSB7Cisg
ICAgaWYgKHJlbmRlcmVyLmhhc0NvdW50ZXJOb2RlTWFwKCkpIHsKKyAgICAgICAgaWYgKENvdW50
ZXJNYXAqIG5vZGVNYXAgPSBjb3VudGVyTWFwcygpLmdldCgmcmVuZGVyZXIpKSB7CiAgICAgICAg
ICAgICBpZiAoQ291bnRlck5vZGUqIG5vZGUgPSBub2RlTWFwLT5nZXQoaWRlbnRpZmllcikpCiAg
ICAgICAgICAgICAgICAgcmV0dXJuIG5vZGU7CiAgICAgICAgIH0KQEAgLTMxMSwyMSArMzAxLDIx
IEBAIHN0YXRpYyBDb3VudGVyTm9kZSogbWFrZUNvdW50ZXJOb2RlKFJlbmQKIAogICAgIGJvb2wg
aXNSZXNldCA9IGZhbHNlOwogICAgIGludCB2YWx1ZSA9IDA7Ci0gICAgaWYgKCFwbGFuQ291bnRl
cihlbGVtZW50LCBpZGVudGlmaWVyLCBpc1Jlc2V0LCB2YWx1ZSkgJiYgIWFsd2F5c0NyZWF0ZUNv
dW50ZXIpCisgICAgaWYgKCFwbGFuQ291bnRlcihyZW5kZXJlciwgaWRlbnRpZmllciwgaXNSZXNl
dCwgdmFsdWUpICYmICFhbHdheXNDcmVhdGVDb3VudGVyKQogICAgICAgICByZXR1cm4gbnVsbHB0
cjsKIAogICAgIFJlZlB0cjxDb3VudGVyTm9kZT4gbmV3UGFyZW50ID0gMDsKICAgICBSZWZQdHI8
Q291bnRlck5vZGU+IG5ld1ByZXZpb3VzU2libGluZyA9IDA7Ci0gICAgUmVmUHRyPENvdW50ZXJO
b2RlPiBuZXdOb2RlID0gQ291bnRlck5vZGU6OmNyZWF0ZShlbGVtZW50LCBpc1Jlc2V0LCB2YWx1
ZSk7Ci0gICAgaWYgKGZpbmRQbGFjZUZvckNvdW50ZXIoZWxlbWVudCwgaWRlbnRpZmllciwgaXNS
ZXNldCwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcpKQorICAgIFJlZlB0cjxDb3VudGVy
Tm9kZT4gbmV3Tm9kZSA9IENvdW50ZXJOb2RlOjpjcmVhdGUocmVuZGVyZXIsIGlzUmVzZXQsIHZh
bHVlKTsKKyAgICBpZiAoZmluZFBsYWNlRm9yQ291bnRlcihyZW5kZXJlciwgaWRlbnRpZmllciwg
aXNSZXNldCwgbmV3UGFyZW50LCBuZXdQcmV2aW91c1NpYmxpbmcpKQogICAgICAgICBuZXdQYXJl
bnQtPmluc2VydEFmdGVyKG5ld05vZGUuZ2V0KCksIG5ld1ByZXZpb3VzU2libGluZy5nZXQoKSwg
aWRlbnRpZmllcik7CiAgICAgQ291bnRlck1hcCogbm9kZU1hcDsKLSAgICBpZiAoZWxlbWVudC0+
aGFzQ291bnRlck5vZGVNYXAoKSkKLSAgICAgICAgbm9kZU1hcCA9IGNvdW50ZXJNYXBzKCkuZ2V0
KGVsZW1lbnQpOworICAgIGlmIChyZW5kZXJlci5oYXNDb3VudGVyTm9kZU1hcCgpKQorICAgICAg
ICBub2RlTWFwID0gY291bnRlck1hcHMoKS5nZXQoJnJlbmRlcmVyKTsKICAgICBlbHNlIHsKICAg
ICAgICAgbm9kZU1hcCA9IG5ldyBDb3VudGVyTWFwOwotICAgICAgICBjb3VudGVyTWFwcygpLnNl
dChlbGVtZW50LCBzdGQ6OnVuaXF1ZV9wdHI8Q291bnRlck1hcD4obm9kZU1hcCkpOwotICAgICAg
ICBlbGVtZW50LT5zZXRIYXNDb3VudGVyTm9kZU1hcCh0cnVlKTsKKyAgICAgICAgY291bnRlck1h
cHMoKS5zZXQoJnJlbmRlcmVyLCBzdGQ6OnVuaXF1ZV9wdHI8Q291bnRlck1hcD4obm9kZU1hcCkp
OworICAgICAgICByZW5kZXJlci5zZXRIYXNDb3VudGVyTm9kZU1hcCh0cnVlKTsKICAgICB9CiAg
ICAgbm9kZU1hcC0+c2V0KGlkZW50aWZpZXIsIG5ld05vZGUpOwogICAgIGlmIChuZXdOb2RlLT5w
YXJlbnQoKSkKQEAgLTMzMyw5ICszMjMsOSBAQCBzdGF0aWMgQ291bnRlck5vZGUqIG1ha2VDb3Vu
dGVyTm9kZShSZW5kCiAgICAgLy8gQ2hlY2tpbmcgaWYgc29tZSBub2RlcyB0aGF0IHdlcmUgcHJl
dmlvdXNseSBjb3VudGVyIHRyZWUgcm9vdCBub2RlcwogICAgIC8vIHNob3VsZCBiZWNvbWUgY2hp
bGRyZW4gb2YgdGhpcyBub2RlIG5vdy4KICAgICBDb3VudGVyTWFwcyYgbWFwcyA9IGNvdW50ZXJN
YXBzKCk7Ci0gICAgRWxlbWVudCogc3RheVdpdGhpbiA9IHBhcmVudE9yUHNldWRvSG9zdEVsZW1l
bnQoZWxlbWVudCk7CisgICAgRWxlbWVudCogc3RheVdpdGhpbiA9IHBhcmVudE9yUHNldWRvSG9z
dEVsZW1lbnQocmVuZGVyZXIpOwogICAgIGJvb2wgc2tpcERlc2NlbmRhbnRzOwotICAgIGZvciAo
UmVuZGVyRWxlbWVudCogY3VycmVudFJlbmRlcmVyID0gbmV4dEluUHJlT3JkZXIoZWxlbWVudCwg
c3RheVdpdGhpbik7IGN1cnJlbnRSZW5kZXJlcjsgY3VycmVudFJlbmRlcmVyID0gbmV4dEluUHJl
T3JkZXIoY3VycmVudFJlbmRlcmVyLCBzdGF5V2l0aGluLCBza2lwRGVzY2VuZGFudHMpKSB7Cisg
ICAgZm9yIChSZW5kZXJFbGVtZW50KiBjdXJyZW50UmVuZGVyZXIgPSBuZXh0SW5QcmVPcmRlcihy
ZW5kZXJlciwgc3RheVdpdGhpbik7IGN1cnJlbnRSZW5kZXJlcjsgY3VycmVudFJlbmRlcmVyID0g
bmV4dEluUHJlT3JkZXIoKmN1cnJlbnRSZW5kZXJlciwgc3RheVdpdGhpbiwgc2tpcERlc2NlbmRh
bnRzKSkgewogICAgICAgICBza2lwRGVzY2VuZGFudHMgPSBmYWxzZTsKICAgICAgICAgaWYgKCFj
dXJyZW50UmVuZGVyZXItPmhhc0NvdW50ZXJOb2RlTWFwKCkpCiAgICAgICAgICAgICBjb250aW51
ZTsKQEAgLTM0NSw3ICszMzUsNyBAQCBzdGF0aWMgQ291bnRlck5vZGUqIG1ha2VDb3VudGVyTm9k
ZShSZW5kCiAgICAgICAgIHNraXBEZXNjZW5kYW50cyA9IHRydWU7CiAgICAgICAgIGlmIChjdXJy
ZW50Q291bnRlci0+cGFyZW50KCkpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgaWYg
KHN0YXlXaXRoaW4gPT0gcGFyZW50T3JQc2V1ZG9Ib3N0RWxlbWVudChjdXJyZW50UmVuZGVyZXIp
ICYmIGN1cnJlbnRDb3VudGVyLT5oYXNSZXNldFR5cGUoKSkKKyAgICAgICAgaWYgKHN0YXlXaXRo
aW4gPT0gcGFyZW50T3JQc2V1ZG9Ib3N0RWxlbWVudCgqY3VycmVudFJlbmRlcmVyKSAmJiBjdXJy
ZW50Q291bnRlci0+aGFzUmVzZXRUeXBlKCkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
bmV3Tm9kZS0+aW5zZXJ0QWZ0ZXIoY3VycmVudENvdW50ZXIsIG5ld05vZGUtPmxhc3RDaGlsZCgp
LCBpZGVudGlmaWVyKTsKICAgICB9CkBAIC0zOTksNyArMzg5LDcgQEAgU3RyaW5nIFJlbmRlckNv
dW50ZXI6Om9yaWdpbmFsVGV4dCgpIGNvbgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgYmVmb3JlQWZ0ZXJDb250YWluZXIgPSBiZWZvcmVBZnRlckNvbnRhaW5lci0+cGFyZW50
KCk7CiAgICAgICAgIH0KLSAgICAgICAgbWFrZUNvdW50ZXJOb2RlKGJlZm9yZUFmdGVyQ29udGFp
bmVyLCBtX2NvdW50ZXIuaWRlbnRpZmllcigpLCB0cnVlKS0+YWRkUmVuZGVyZXIoY29uc3RfY2Fz
dDxSZW5kZXJDb3VudGVyKj4odGhpcykpOworICAgICAgICBtYWtlQ291bnRlck5vZGUoKmJlZm9y
ZUFmdGVyQ29udGFpbmVyLCBtX2NvdW50ZXIuaWRlbnRpZmllcigpLCB0cnVlKS0+YWRkUmVuZGVy
ZXIoY29uc3RfY2FzdDxSZW5kZXJDb3VudGVyKj4odGhpcykpOwogICAgICAgICBBU1NFUlQobV9j
b3VudGVyTm9kZSk7CiAgICAgfQogICAgIENvdW50ZXJOb2RlKiBjaGlsZCA9IG1fY291bnRlck5v
ZGU7CkBAIC00NTYsMTcgKzQ0NiwxNyBAQCBzdGF0aWMgdm9pZCBkZXN0cm95Q291bnRlck5vZGVX
aXRob3V0TWFwCiAgICAgZm9yIChSZWZQdHI8Q291bnRlck5vZGU+IGNoaWxkID0gbm9kZS0+bGFz
dERlc2NlbmRhbnQoKTsgY2hpbGQgJiYgY2hpbGQgIT0gbm9kZTsgY2hpbGQgPSBwcmV2aW91cykg
ewogICAgICAgICBwcmV2aW91cyA9IGNoaWxkLT5wcmV2aW91c0luUHJlT3JkZXIoKTsKICAgICAg
ICAgY2hpbGQtPnBhcmVudCgpLT5yZW1vdmVDaGlsZChjaGlsZC5nZXQoKSk7Ci0gICAgICAgIEFT
U0VSVChjb3VudGVyTWFwcygpLmdldChjaGlsZC0+b3duZXIoKSktPmdldChpZGVudGlmaWVyKSA9
PSBjaGlsZCk7Ci0gICAgICAgIGNvdW50ZXJNYXBzKCkuZ2V0KGNoaWxkLT5vd25lcigpKS0+cmVt
b3ZlKGlkZW50aWZpZXIpOworICAgICAgICBBU1NFUlQoY291bnRlck1hcHMoKS5nZXQoJmNoaWxk
LT5vd25lcigpKS0+Z2V0KGlkZW50aWZpZXIpID09IGNoaWxkKTsKKyAgICAgICAgY291bnRlck1h
cHMoKS5nZXQoJmNoaWxkLT5vd25lcigpKS0+cmVtb3ZlKGlkZW50aWZpZXIpOwogICAgIH0KICAg
ICBpZiAoQ291bnRlck5vZGUqIHBhcmVudCA9IG5vZGUtPnBhcmVudCgpKQogICAgICAgICBwYXJl
bnQtPnJlbW92ZUNoaWxkKG5vZGUpOwogfQogCi12b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lD
b3VudGVyTm9kZXMoUmVuZGVyT2JqZWN0KiBvd25lcikKK3ZvaWQgUmVuZGVyQ291bnRlcjo6ZGVz
dHJveUNvdW50ZXJOb2RlcyhSZW5kZXJFbGVtZW50JiBvd25lcikKIHsKICAgICBDb3VudGVyTWFw
cyYgbWFwcyA9IGNvdW50ZXJNYXBzKCk7Ci0gICAgQ291bnRlck1hcHM6Oml0ZXJhdG9yIG1hcHNJ
dGVyYXRvciA9IG1hcHMuZmluZChvd25lcik7CisgICAgQ291bnRlck1hcHM6Oml0ZXJhdG9yIG1h
cHNJdGVyYXRvciA9IG1hcHMuZmluZCgmb3duZXIpOwogICAgIGlmIChtYXBzSXRlcmF0b3IgPT0g
bWFwcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIENvdW50ZXJNYXAqIG1hcCA9IG1hcHNJ
dGVyYXRvci0+dmFsdWUuZ2V0KCk7CkBAIC00NzUsMTIgKzQ2NSwxMiBAQCB2b2lkIFJlbmRlckNv
dW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZXMoCiAgICAgICAgIGRlc3Ryb3lDb3VudGVyTm9kZVdp
dGhvdXRNYXBSZW1vdmFsKGl0LT5rZXksIGl0LT52YWx1ZS5nZXQoKSk7CiAgICAgfQogICAgIG1h
cHMucmVtb3ZlKG1hcHNJdGVyYXRvcik7Ci0gICAgb3duZXItPnNldEhhc0NvdW50ZXJOb2RlTWFw
KGZhbHNlKTsKKyAgICBvd25lci5zZXRIYXNDb3VudGVyTm9kZU1hcChmYWxzZSk7CiB9CiAKLXZv
aWQgUmVuZGVyQ291bnRlcjo6ZGVzdHJveUNvdW50ZXJOb2RlKFJlbmRlck9iamVjdCogb3duZXIs
IGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcikKK3ZvaWQgUmVuZGVyQ291bnRlcjo6ZGVz
dHJveUNvdW50ZXJOb2RlKFJlbmRlckVsZW1lbnQmIG93bmVyLCBjb25zdCBBdG9taWNTdHJpbmcm
IGlkZW50aWZpZXIpCiB7Ci0gICAgQ291bnRlck1hcCogbWFwID0gY291bnRlck1hcHMoKS5nZXQo
b3duZXIpOworICAgIENvdW50ZXJNYXAqIG1hcCA9IGNvdW50ZXJNYXBzKCkuZ2V0KCZvd25lcik7
CiAgICAgaWYgKCFtYXApCiAgICAgICAgIHJldHVybjsKICAgICBDb3VudGVyTWFwOjppdGVyYXRv
ciBtYXBJdGVyYXRvciA9IG1hcC0+ZmluZChpZGVudGlmaWVyKTsKQEAgLTUwMSw3ICs0OTEsNyBA
QCB2b2lkIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9kZShSCiAgICAgLy8gbWFwIGFz
c29jaWF0ZWQgd2l0aCBhIHJlbmRlcmVyLCBzbyB0aGVyZSBpcyBubyByaXNrIGluIGxlYWtpbmcg
dGhlIG1hcC4KIH0KIAotdm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclJlbW92ZWRGcm9tVHJl
ZShSZW5kZXJPYmplY3QmIHJlbmRlcmVyKQordm9pZCBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclJl
bW92ZWRGcm9tVHJlZShSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKIHsKICAgICBpZiAoIXJlbmRl
cmVyLnZpZXcoKS5oYXNSZW5kZXJDb3VudGVycygpKQogICAgICAgICByZXR1cm47CkBAIC01MDks
MjUgKzQ5OSwyNiBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyUmVtb3ZlZEZyb21UCiAg
ICAgaWYgKCFjdXJyZW50UmVuZGVyZXIpCiAgICAgICAgIGN1cnJlbnRSZW5kZXJlciA9ICZyZW5k
ZXJlcjsKICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICBkZXN0cm95Q291bnRlck5vZGVzKGN1
cnJlbnRSZW5kZXJlcik7CisgICAgICAgIGlmIChjdXJyZW50UmVuZGVyZXItPmlzUmVuZGVyRWxl
bWVudCgpKQorICAgICAgICAgICAgZGVzdHJveUNvdW50ZXJOb2Rlcyh0b1JlbmRlckVsZW1lbnQo
KmN1cnJlbnRSZW5kZXJlcikpOwogICAgICAgICBpZiAoY3VycmVudFJlbmRlcmVyID09ICZyZW5k
ZXJlcikKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjdXJyZW50UmVuZGVyZXIgPSBjdXJy
ZW50UmVuZGVyZXItPnByZXZpb3VzSW5QcmVPcmRlcigpOwogICAgIH0KIH0KIAotc3RhdGljIHZv
aWQgdXBkYXRlQ291bnRlcnMoUmVuZGVyT2JqZWN0KiByZW5kZXJlcikKK3N0YXRpYyB2b2lkIHVw
ZGF0ZUNvdW50ZXJzKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQogewotICAgIGNvbnN0IENvdW50
ZXJEaXJlY3RpdmVNYXAqIGRpcmVjdGl2ZU1hcCA9IHJlbmRlcmVyLT5zdHlsZSgpLmNvdW50ZXJE
aXJlY3RpdmVzKCk7CisgICAgY29uc3QgQ291bnRlckRpcmVjdGl2ZU1hcCogZGlyZWN0aXZlTWFw
ID0gcmVuZGVyZXIuc3R5bGUoKS5jb3VudGVyRGlyZWN0aXZlcygpOwogICAgIGlmICghZGlyZWN0
aXZlTWFwKQogICAgICAgICByZXR1cm47CiAgICAgQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3Rf
aXRlcmF0b3IgZW5kID0gZGlyZWN0aXZlTWFwLT5lbmQoKTsKLSAgICBpZiAoIXJlbmRlcmVyLT5o
YXNDb3VudGVyTm9kZU1hcCgpKSB7CisgICAgaWYgKCFyZW5kZXJlci5oYXNDb3VudGVyTm9kZU1h
cCgpKSB7CiAgICAgICAgIGZvciAoQ291bnRlckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3Ig
aXQgPSBkaXJlY3RpdmVNYXAtPmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKICAgICAgICAgICAg
IG1ha2VDb3VudGVyTm9kZShyZW5kZXJlciwgaXQtPmtleSwgZmFsc2UpOwogICAgICAgICByZXR1
cm47CiAgICAgfQotICAgIENvdW50ZXJNYXAqIGNvdW50ZXJNYXAgPSBjb3VudGVyTWFwcygpLmdl
dChyZW5kZXJlcik7CisgICAgQ291bnRlck1hcCogY291bnRlck1hcCA9IGNvdW50ZXJNYXBzKCku
Z2V0KCZyZW5kZXJlcik7CiAgICAgQVNTRVJUKGNvdW50ZXJNYXApOwogICAgIGZvciAoQ291bnRl
ckRpcmVjdGl2ZU1hcDo6Y29uc3RfaXRlcmF0b3IgaXQgPSBkaXJlY3RpdmVNYXAtPmJlZ2luKCk7
IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBSZWZQdHI8Q291bnRlck5vZGU+IG5vZGUgPSBj
b3VudGVyTWFwLT5nZXQoaXQtPmtleSk7CkBAIC01NTEsMjUgKzU0MiwyNyBAQCBzdGF0aWMgdm9p
ZCB1cGRhdGVDb3VudGVycyhSZW5kZXJPYmplY3QqCiAgICAgfQogfQogCi12b2lkIFJlbmRlckNv
dW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCit2
b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3VidHJlZUF0dGFjaGVkKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyKQogewotICAgIGlmICghcmVuZGVyZXItPnZpZXcoKS5oYXNSZW5kZXJDb3VudGVy
cygpKQorICAgIGlmICghcmVuZGVyZXIudmlldygpLmhhc1JlbmRlckNvdW50ZXJzKCkpCiAgICAg
ICAgIHJldHVybjsKLSAgICBOb2RlKiBub2RlID0gcmVuZGVyZXItPm5vZGUoKTsKLSAgICBpZiAo
bm9kZSAmJiAhbm9kZS0+aXNQc2V1ZG9FbGVtZW50KCkpCi0gICAgICAgIG5vZGUgPSBub2RlLT5w
YXJlbnROb2RlKCk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IHJlbmRlcmVyLmVsZW1lbnQoKTsK
KyAgICBpZiAoZWxlbWVudCAmJiAhZWxlbWVudC0+aXNQc2V1ZG9FbGVtZW50KCkpCisgICAgICAg
IGVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgZWxzZQotICAgICAgICBu
b2RlID0gcmVuZGVyZXItPmdlbmVyYXRpbmdOb2RlKCk7Ci0gICAgaWYgKG5vZGUgJiYgIW5vZGUt
PnJlbmRlcmVyKCkpCisgICAgICAgIGVsZW1lbnQgPSByZW5kZXJlci5nZW5lcmF0aW5nRWxlbWVu
dCgpOworICAgIGlmIChlbGVtZW50ICYmICFlbGVtZW50LT5yZW5kZXJlcigpKQogICAgICAgICBy
ZXR1cm47IC8vIE5vIG5lZWQgdG8gdXBkYXRlIGlmIHRoZSBwYXJlbnQgaXMgbm90IGF0dGFjaGVk
IHlldAotICAgIGZvciAoUmVuZGVyT2JqZWN0KiBkZXNjZW5kYW50ID0gcmVuZGVyZXI7IGRlc2Nl
bmRhbnQ7IGRlc2NlbmRhbnQgPSBkZXNjZW5kYW50LT5uZXh0SW5QcmVPcmRlcihyZW5kZXJlcikp
Ci0gICAgICAgIHVwZGF0ZUNvdW50ZXJzKGRlc2NlbmRhbnQpOworICAgIGZvciAoUmVuZGVyT2Jq
ZWN0KiBkZXNjZW5kYW50ID0gJnJlbmRlcmVyOyBkZXNjZW5kYW50OyBkZXNjZW5kYW50ID0gZGVz
Y2VuZGFudC0+bmV4dEluUHJlT3JkZXIoJnJlbmRlcmVyKSkgeworICAgICAgICBpZiAoZGVzY2Vu
ZGFudC0+aXNSZW5kZXJFbGVtZW50KCkpCisgICAgICAgICAgICB1cGRhdGVDb3VudGVycyh0b1Jl
bmRlckVsZW1lbnQoKmRlc2NlbmRhbnQpKTsKKyAgICB9CiB9CiAKLXZvaWQgUmVuZGVyQ291bnRl
cjo6cmVuZGVyZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiByZW5kZXJlciwgY29uc3QgUmVu
ZGVyU3R5bGUqIG9sZFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpCit2b2lkIFJl
bmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHls
ZSkKIHsKLSAgICBOb2RlKiBub2RlID0gcmVuZGVyZXItPmdlbmVyYXRpbmdOb2RlKCk7Ci0gICAg
aWYgKCFub2RlIHx8ICFub2RlLT5yZW5kZXJlcigpKQorICAgIEVsZW1lbnQqIGVsZW1lbnQgPSBy
ZW5kZXJlci5nZW5lcmF0aW5nRWxlbWVudCgpOworICAgIGlmICghZWxlbWVudCB8fCAhZWxlbWVu
dC0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOyAvLyBjYW5ub3QgaGF2ZSBnZW5lcmF0ZWQg
Y29udGVudCBvciBpZiBpdCBjYW4gaGF2ZSwgaXQgd2lsbCBiZSBoYW5kbGVkIGR1cmluZyBhdHRh
Y2hpbmcKICAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBuZXdDb3VudGVyRGlyZWN0aXZl
czsKICAgICBjb25zdCBDb3VudGVyRGlyZWN0aXZlTWFwKiBvbGRDb3VudGVyRGlyZWN0aXZlczsK
QEAgLTU5NSw3ICs1ODgsNyBAQCB2b2lkIFJlbmRlckNvdW50ZXI6OnJlbmRlcmVyU3R5bGVDaGFu
Z2VkCiAgICAgICAgICAgICAgICAgICAgIFJlbmRlckNvdW50ZXI6OmRlc3Ryb3lDb3VudGVyTm9k
ZShyZW5kZXJlciwgaXQtPmtleSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAocmVuZGVyZXItPmhhc0NvdW50ZXJOb2RlTWFwKCkpCisgICAgICAgICAg
ICBpZiAocmVuZGVyZXIuaGFzQ291bnRlck5vZGVNYXAoKSkKICAgICAgICAgICAgICAgICBSZW5k
ZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKHJlbmRlcmVyKTsKICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAobmV3U3R5bGUgJiYgKG5ld0NvdW50ZXJEaXJlY3RpdmVzID0gbmV3U3R5bGUt
PmNvdW50ZXJEaXJlY3RpdmVzKCkpKSB7CkBAIC02MjMsMTMgKzYxNiwxNSBAQCB2b2lkIHNob3dD
b3VudGVyUmVuZGVyZXJUcmVlKGNvbnN0IFdlYkNvCiAKICAgICBBdG9taWNTdHJpbmcgaWRlbnRp
Zmllcihjb3VudGVyTmFtZSk7CiAgICAgZm9yIChjb25zdCBXZWJDb3JlOjpSZW5kZXJPYmplY3Qq
IGN1cnJlbnQgPSByb290OyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+bmV4dEluUHJlT3Jk
ZXIoKSkgeworICAgICAgICBpZiAoIWN1cnJlbnQtPmlzUmVuZGVyRWxlbWVudCgpKQorICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJWMiLCAoY3VycmVudCA9
PSByZW5kZXJlcikgPyAnKicgOiAnICcpOwogICAgICAgICBmb3IgKGNvbnN0IFdlYkNvcmU6OlJl
bmRlck9iamVjdCogcGFyZW50ID0gY3VycmVudDsgcGFyZW50ICYmIHBhcmVudCAhPSByb290OyBw
YXJlbnQgPSBwYXJlbnQtPnBhcmVudCgpKQogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIg
ICAgIik7CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXAgTjolcCBQOiVwIFBTOiVwIE5TOiVw
IEM6JXBcbiIsCiAgICAgICAgICAgICBjdXJyZW50LCBjdXJyZW50LT5ub2RlKCksIGN1cnJlbnQt
PnBhcmVudCgpLCBjdXJyZW50LT5wcmV2aW91c1NpYmxpbmcoKSwKLSAgICAgICAgICAgIGN1cnJl
bnQtPm5leHRTaWJsaW5nKCksIGN1cnJlbnQtPmhhc0NvdW50ZXJOb2RlTWFwKCkgPwotICAgICAg
ICAgICAgY291bnRlck5hbWUgPyBXZWJDb3JlOjpjb3VudGVyTWFwcygpLmdldChjdXJyZW50KS0+
Z2V0KGlkZW50aWZpZXIpIDogKFdlYkNvcmU6OkNvdW50ZXJOb2RlKikxIDogKFdlYkNvcmU6OkNv
dW50ZXJOb2RlKikwKTsKKyAgICAgICAgICAgIGN1cnJlbnQtPm5leHRTaWJsaW5nKCksIHRvUmVu
ZGVyRWxlbWVudChjdXJyZW50KS0+aGFzQ291bnRlck5vZGVNYXAoKSA/CisgICAgICAgICAgICBj
b3VudGVyTmFtZSA/IFdlYkNvcmU6OmNvdW50ZXJNYXBzKCkuZ2V0KHRvUmVuZGVyRWxlbWVudChj
dXJyZW50KSktPmdldChpZGVudGlmaWVyKSA6IChXZWJDb3JlOjpDb3VudGVyTm9kZSopMSA6IChX
ZWJDb3JlOjpDb3VudGVyTm9kZSopMCk7CiAgICAgfQogICAgIGZmbHVzaChzdGRlcnIpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckNvdW50ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCShyZXZpc2lvbiAx
NzI3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQ291bnRlci5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTEgQEAgcHVibGljOgogICAgIFJlbmRlckNvdW50ZXIo
RG9jdW1lbnQmLCBjb25zdCBDb3VudGVyQ29udGVudCYpOwogICAgIHZpcnR1YWwgflJlbmRlckNv
dW50ZXIoKTsKIAotICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lDb3VudGVyTm9kZXMoUmVuZGVyT2Jq
ZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgZGVzdHJveUNvdW50ZXJOb2RlKFJlbmRlck9iamVjdCos
IGNvbnN0IEF0b21pY1N0cmluZyYgaWRlbnRpZmllcik7Ci0gICAgc3RhdGljIHZvaWQgcmVuZGVy
ZXJTdWJ0cmVlQXR0YWNoZWQoUmVuZGVyT2JqZWN0Kik7Ci0gICAgc3RhdGljIHZvaWQgcmVuZGVy
ZXJSZW1vdmVkRnJvbVRyZWUoUmVuZGVyT2JqZWN0Jik7Ci0gICAgc3RhdGljIHZvaWQgcmVuZGVy
ZXJTdHlsZUNoYW5nZWQoUmVuZGVyT2JqZWN0KiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogbmV3U3R5bGUpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lD
b3VudGVyTm9kZXMoUmVuZGVyRWxlbWVudCYpOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3lDb3Vu
dGVyTm9kZShSZW5kZXJFbGVtZW50JiwgY29uc3QgQXRvbWljU3RyaW5nJiBpZGVudGlmaWVyKTsK
KyAgICBzdGF0aWMgdm9pZCByZW5kZXJlclN1YnRyZWVBdHRhY2hlZChSZW5kZXJFbGVtZW50Jik7
CisgICAgc3RhdGljIHZvaWQgcmVuZGVyZXJSZW1vdmVkRnJvbVRyZWUoUmVuZGVyRWxlbWVudCYp
OworICAgIHN0YXRpYyB2b2lkIHJlbmRlcmVyU3R5bGVDaGFuZ2VkKFJlbmRlckVsZW1lbnQmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBuZXdTdHlsZSk7
CiAKICAgICB2b2lkIHVwZGF0ZUNvdW50ZXIoKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMTcyNzE1KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NSw2
ICs4NSw3IEBAIGlubGluZSBSZW5kZXJFbGVtZW50OjpSZW5kZXJFbGVtZW50KENvbnQKICAgICAs
IG1fcmVuZGVySW5saW5lQWx3YXlzQ3JlYXRlc0xpbmVCb3hlcyhmYWxzZSkKICAgICAsIG1fcmVu
ZGVyQm94TmVlZHNMYXp5UmVwYWludChmYWxzZSkKICAgICAsIG1faGFzUGF1c2VkSW1hZ2VBbmlt
YXRpb25zKGZhbHNlKQorICAgICwgbV9oYXNDb3VudGVyTm9kZU1hcChmYWxzZSkKICAgICAsIG1f
Zmlyc3RDaGlsZChudWxscHRyKQogICAgICwgbV9sYXN0Q2hpbGQobnVsbHB0cikKICAgICAsIG1f
c3R5bGUoV1RGOjptb3ZlKHN0eWxlKSkKQEAgLTU2OCw3ICs1NjksOCBAQCB2b2lkIFJlbmRlckVs
ZW1lbnQ6Omluc2VydENoaWxkSW50ZXJuYWwoCiAgICAgaWYgKCFkb2N1bWVudEJlaW5nRGVzdHJv
eWVkKCkpIHsKICAgICAgICAgaWYgKG5vdGlmeUNoaWxkcmVuID09IE5vdGlmeUNoaWxkcmVuKQog
ICAgICAgICAgICAgbmV3Q2hpbGQtPmluc2VydGVkSW50b1RyZWUoKTsKLSAgICAgICAgUmVuZGVy
Q291bnRlcjo6cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQobmV3Q2hpbGQpOworICAgICAgICBpZiAo
bmV3Q2hpbGQtPmlzUmVuZGVyRWxlbWVudCgpKQorICAgICAgICAgICAgUmVuZGVyQ291bnRlcjo6
cmVuZGVyZXJTdWJ0cmVlQXR0YWNoZWQodG9SZW5kZXJFbGVtZW50KCpuZXdDaGlsZCkpOwogICAg
IH0KIAogICAgIG5ld0NoaWxkLT5zZXROZWVkc0xheW91dEFuZFByZWZXaWR0aHNSZWNhbGMoKTsK
QEAgLTYzNiw4ICs2MzgsOCBAQCBSZW5kZXJPYmplY3QqIFJlbmRlckVsZW1lbnQ6OnJlbW92ZUNo
aWxkCiAKICAgICAvLyByZW5kZXJlclJlbW92ZWRGcm9tVHJlZSB3YWxrcyB0aGUgd2hvbGUgc3Vi
dHJlZS4gV2UgY2FuIGltcHJvdmUgcGVyZm9ybWFuY2UKICAgICAvLyBieSBza2lwcGluZyB0aGlz
IHN0ZXAgd2hlbiBkZXN0cm95aW5nIHRoZSBlbnRpcmUgdHJlZS4KLSAgICBpZiAoIWRvY3VtZW50
QmVpbmdEZXN0cm95ZWQoKSkKLSAgICAgICAgUmVuZGVyQ291bnRlcjo6cmVuZGVyZXJSZW1vdmVk
RnJvbVRyZWUob2xkQ2hpbGQpOworICAgIGlmICghZG9jdW1lbnRCZWluZ0Rlc3Ryb3llZCgpICYm
IG9sZENoaWxkLmlzUmVuZGVyRWxlbWVudCgpKQorICAgICAgICBSZW5kZXJDb3VudGVyOjpyZW5k
ZXJlclJlbW92ZWRGcm9tVHJlZSh0b1JlbmRlckVsZW1lbnQob2xkQ2hpbGQpKTsKIAogICAgIGlm
IChBWE9iamVjdENhY2hlKiBjYWNoZSA9IGRvY3VtZW50KCkuZXhpc3RpbmdBWE9iamVjdENhY2hl
KCkpCiAgICAgICAgIGNhY2hlLT5jaGlsZHJlbkNoYW5nZWQodGhpcyk7CkBAIC05MjAsNyArOTIy
LDcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpzdHlsZURpZENoYW5nZShTdHlsZQogICAgICAgICBy
ZXR1cm47CiAgICAgCiAgICAgaWYgKGRpZmYgPT0gU3R5bGVEaWZmZXJlbmNlTGF5b3V0IHx8IGRp
ZmYgPT0gU3R5bGVEaWZmZXJlbmNlU2ltcGxpZmllZExheW91dCkgewotICAgICAgICBSZW5kZXJD
b3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZCh0aGlzLCBvbGRTdHlsZSwgJm1fc3R5bGUuZ2V0
KCkpOworICAgICAgICBSZW5kZXJDb3VudGVyOjpyZW5kZXJlclN0eWxlQ2hhbmdlZCgqdGhpcywg
b2xkU3R5bGUsICZtX3N0eWxlLmdldCgpKTsKIAogICAgICAgICAvLyBJZiB0aGUgb2JqZWN0IGFs
cmVhZHkgbmVlZHMgbGF5b3V0LCB0aGVuIHNldE5lZWRzTGF5b3V0IHdvbid0IGRvCiAgICAgICAg
IC8vIGFueSB3b3JrLiBCdXQgaWYgdGhlIGNvbnRhaW5pbmcgYmxvY2sgaGFzIGNoYW5nZWQsIHRo
ZW4gd2UgbWF5IG5lZWQKQEAgLTEwMDcsNiArMTAwOSw5IEBAIHZvaWQgUmVuZGVyRWxlbWVudDo6
d2lsbEJlRGVzdHJveWVkKCkKIAogICAgIGRlc3Ryb3lMZWZ0b3ZlckNoaWxkcmVuKCk7CiAKKyAg
ICBpZiAoaGFzQ291bnRlck5vZGVNYXAoKSkKKyAgICAgICAgUmVuZGVyQ291bnRlcjo6ZGVzdHJv
eUNvdW50ZXJOb2RlcygqdGhpcyk7CisKICAgICBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ryb3ll
ZCgpOwogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5oCShyZXZpc2lvbiAxNzI3MTUpCisrKyBTb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTksNiArMTU5LDkg
QEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVuZGVyQm94TmVlZHNMYXp5UmVwYWludChib29sIGIp
IHsgbV9yZW5kZXJCb3hOZWVkc0xhenlSZXBhaW50ID0gYjsgfQogICAgIGJvb2wgcmVuZGVyQm94
TmVlZHNMYXp5UmVwYWludCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVuZGVyQm94TmVlZHNMYXp5UmVw
YWludDsgfQogCisgICAgYm9vbCBoYXNDb3VudGVyTm9kZU1hcCgpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzQ291bnRlck5vZGVNYXA7IH0KKyAgICB2b2lkIHNldEhhc0NvdW50ZXJOb2RlTWFwKGJvb2wg
ZikgeyBtX2hhc0NvdW50ZXJOb2RlTWFwID0gZjsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBC
YXNlVHlwZUZsYWdzIHsKICAgICAgICAgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdEZsYWcgPSAxIDw8
IDAsCkBAIC0yMzEsNiArMjM0LDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcmVuZGVySW5saW5l
QWx3YXlzQ3JlYXRlc0xpbmVCb3hlcyA6IDE7CiAgICAgYm9vbCBtX3JlbmRlckJveE5lZWRzTGF6
eVJlcGFpbnQgOiAxOwogICAgIGJvb2wgbV9oYXNQYXVzZWRJbWFnZUFuaW1hdGlvbnMgOiAxOwor
ICAgIGJvb2wgbV9oYXNDb3VudGVyTm9kZU1hcCA6IDE7CiAKICAgICBSZW5kZXJPYmplY3QqIG1f
Zmlyc3RDaGlsZDsKICAgICBSZW5kZXJPYmplY3QqIG1fbGFzdENoaWxkOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5jcHAJKHJldmlzaW9uIDE3MjcxNSkKKysr
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xOTQxLDE0ICsxOTQxLDYgQEAgdm9pZCBSZW5kZXJPYmplY3Q6OndpbGxCZURlc3Ryb3ll
ZCgpCiAgICAgaWYgKEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gZG9jdW1lbnQoKS5leGlzdGluZ0FY
T2JqZWN0Q2FjaGUoKSkKICAgICAgICAgY2FjaGUtPnJlbW92ZSh0aGlzKTsKIAotICAgIC8vIElm
IHRoaXMgcmVuZGVyZXIgaGFkIGEgcGFyZW50LCByZW1vdmUgc2hvdWxkIGhhdmUgZGVzdHJveWVk
IGFueSBjb3VudGVycwotICAgIC8vIGF0dGFjaGVkIHRvIHRoaXMgcmVuZGVyZXIgYW5kIG1hcmtl
ZCB0aGUgYWZmZWN0ZWQgb3RoZXIgY291bnRlcnMgZm9yCi0gICAgLy8gcmVldmFsdWF0aW9uLiBU
aGlzIGFwcGFyZW50bHkgcmVkdW5kYW50IGNoZWNrIGlzIGhlcmUgZm9yIHRoZSBjYXNlIHdoZW4K
LSAgICAvLyB0aGlzIHJlbmRlcmVyIGhhZCBubyBwYXJlbnQgYXQgdGhlIHRpbWUgcmVtb3ZlKCkg
d2FzIGNhbGxlZC4KLQotICAgIGlmIChoYXNDb3VudGVyTm9kZU1hcCgpKQotICAgICAgICBSZW5k
ZXJDb3VudGVyOjpkZXN0cm95Q291bnRlck5vZGVzKHRoaXMpOwotCiAgICAgLy8gRklYTUU6IFdv
dWxkIGxpa2UgdG8gZG8gdGhpcyBpbiBSZW5kZXJCb3hNb2RlbE9iamVjdCwgYnV0IHRoZSB0aW1p
bmcgaXMgc28gY29tcGxpY2F0ZWQgdGhhdCB0aGlzIGNhbid0IGVhc2lseQogICAgIC8vIGJlIG1v
dmVkIGludG8gUmVuZGVyQm94TW9kZWxPYmplY3Q6OmRlc3Ryb3kuCiAgICAgaWYgKGhhc0xheWVy
KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgJKHJldmlz
aW9uIDE3MjcxNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzkwLDggKzM5MCw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNBZnRlckNvbnRlbnQoY29uc3QgUmVuZGVyT2JqZWN0KiBvYmopIHsgcmV0dXJu
IG9iaiAmJiBvYmotPmlzQWZ0ZXJDb250ZW50KCk7IH0KICAgICBzdGF0aWMgaW5saW5lIGJvb2wg
aXNCZWZvcmVPckFmdGVyQ29udGVudChjb25zdCBSZW5kZXJPYmplY3QqIG9iaikgeyByZXR1cm4g
b2JqICYmIG9iai0+aXNCZWZvcmVPckFmdGVyQ29udGVudCgpOyB9CiAKLSAgICBib29sIGhhc0Nv
dW50ZXJOb2RlTWFwKCkgY29uc3QgeyByZXR1cm4gbV9iaXRmaWVsZHMuaGFzQ291bnRlck5vZGVN
YXAoKTsgfQotICAgIHZvaWQgc2V0SGFzQ291bnRlck5vZGVNYXAoYm9vbCBoYXNDb3VudGVyTm9k
ZU1hcCkgeyBtX2JpdGZpZWxkcy5zZXRIYXNDb3VudGVyTm9kZU1hcChoYXNDb3VudGVyTm9kZU1h
cCk7IH0KICAgICBib29sIGV2ZXJIYWRMYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2JpdGZpZWxk
cy5ldmVySGFkTGF5b3V0KCk7IH0KIAogICAgIGJvb2wgY2hpbGRyZW5JbmxpbmUoKSBjb25zdCB7
IHJldHVybiBtX2JpdGZpZWxkcy5jaGlsZHJlbklubGluZSgpOyB9CkBAIC05NjEsNyArOTU5LDYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICwgbV9oYXNPdmVyZmxvd0NsaXAoZmFsc2UpCiAgICAg
ICAgICAgICAsIG1faGFzVHJhbnNmb3JtKGZhbHNlKQogICAgICAgICAgICAgLCBtX2hhc1JlZmxl
Y3Rpb24oZmFsc2UpCi0gICAgICAgICAgICAsIG1faGFzQ291bnRlck5vZGVNYXAoZmFsc2UpCiAg
ICAgICAgICAgICAsIG1fZXZlckhhZExheW91dChmYWxzZSkKICAgICAgICAgICAgICwgbV9jaGls
ZHJlbklubGluZShmYWxzZSkKICAgICAgICAgICAgICwgbV9wb3NpdGlvbmVkU3RhdGUoSXNTdGF0
aWNhbGx5UG9zaXRpb25lZCkKQEAgLTk3MSw3ICs5NjgsNyBAQCBwcml2YXRlOgogICAgICAgICB7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIC8vIDMyIGJpdHMgaGF2ZSBiZWVuIHVzZWQg
aGVyZS4gVGhlcmUgYXJlIG5vIGJpdHMgYXZhaWxhYmxlLgorICAgICAgICAvLyAzMSBiaXRzIGhh
dmUgYmVlbiB1c2VkIGhlcmUuIFRoZXJlIGlzIG9uZSBiaXQgYXZhaWxhYmxlLgogICAgICAgICBB
RERfQk9PTEVBTl9CSVRGSUVMRChuZWVkc0xheW91dCwgTmVlZHNMYXlvdXQpOwogICAgICAgICBB
RERfQk9PTEVBTl9CSVRGSUVMRChuZWVkc1Bvc2l0aW9uZWRNb3ZlbWVudExheW91dCwgTmVlZHNQ
b3NpdGlvbmVkTW92ZW1lbnRMYXlvdXQpOwogICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChu
b3JtYWxDaGlsZE5lZWRzTGF5b3V0LCBOb3JtYWxDaGlsZE5lZWRzTGF5b3V0KTsKQEAgLTk5NCw3
ICs5OTEsNiBAQCBwcml2YXRlOgogICAgICAgICBBRERfQk9PTEVBTl9CSVRGSUVMRChoYXNUcmFu
c2Zvcm0sIEhhc1RyYW5zZm9ybSk7CiAgICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxEKGhhc1Jl
ZmxlY3Rpb24sIEhhc1JlZmxlY3Rpb24pOwogCi0gICAgICAgIEFERF9CT09MRUFOX0JJVEZJRUxE
KGhhc0NvdW50ZXJOb2RlTWFwLCBIYXNDb3VudGVyTm9kZU1hcCk7CiAgICAgICAgIEFERF9CT09M
RUFOX0JJVEZJRUxEKGV2ZXJIYWRMYXlvdXQsIEV2ZXJIYWRMYXlvdXQpOwogCiAgICAgICAgIC8v
IGZyb20gUmVuZGVyQmxvY2sK
</data>
<flag name="review"
          id="261458"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>