<?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>163964</bug_id>
          
          <creation_ts>2016-10-25 12:29:58 -0700</creation_ts>
          <short_desc>[CSS Parser] Improvements to selector parsing</short_desc>
          <delta_ts>2016-10-25 16:24:02 -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>CSS</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></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>
          <cc>commit-queue</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1244354</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-25 12:29:58 -0700</bug_when>
    <thetext>[CSS Parser] Improvements to selector parsing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244364</commentid>
    <comment_count>1</comment_count>
      <attachid>292803</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-25 12:44:53 -0700</bug_when>
    <thetext>Created attachment 292803
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244461</commentid>
    <comment_count>2</comment_count>
      <attachid>292827</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-25 14:50:43 -0700</bug_when>
    <thetext>Created attachment 292827
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1244465</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-10-25 14:53:02 -0700</bug_when>
    <thetext>Attachment 292827 did not pass style-queue:


ERROR: Source/WebCore/css/parser/CSSParserValues.cpp:413:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/css/CSSSelector.h:250:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 2 in 9 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>1244521</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2016-10-25 16:24:02 -0700</bug_when>
    <thetext>Fixed in r207854.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292803</attachid>
            <date>2016-10-25 12:44:53 -0700</date>
            <delta_ts>2016-10-25 14:50:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23407</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzgzNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE2LTEwLTI1ICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1MgUGFyc2VyXSBJbXByb3ZlbWVu
dHMgdG8gc2VsZWN0b3IgcGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzOTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU2VsZWN0b3I6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6c2V0TnRoKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpzZXRBdHRyaWJ1dGVWYWx1ZU1hdGNoaW5nSXNDYXNlSW5zZW5zaXRp
dmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpTdHlsZVNoZWV0Q29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJBcHBlbmRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cnVsZUF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRDb250ZW50czo6cnVsZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRDb250ZW50czo6Y2xlYXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
Q29udGVudHM6OndyYXBwZXJJbnNlcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hl
ZXRDb250ZW50czo6d3JhcHBlckRlbGV0ZVJ1bGUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0
Q29udGVudHMuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclNlbGVjdG9y
OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnNl
dEFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXROdGgp
OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3VtZUxhbmdBcmd1bWVudExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21wb3VuZFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzUHNldWRvQ2xhc3NGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1BzZXVkb0Vs
ZW1lbnRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29u
c3VtZVBzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3Vt
ZUNvbWJpbmF0b3IpOgorCiAyMDE2LTEwLTI1ICBDb21taXQgUXVldWUgIDxjb21taXQtcXVldWVA
d2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2VkLCByb2xsaW5nIG91dCByMjA3ODI3IGFu
ZCByMjA3ODI4LgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1NlbGVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAy
MDc3NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03NjMsNiArNzYzLDE0IEBAIHZvaWQgQ1NTU2VsZWN0b3I6OnNldEF0dHJpYnV0ZShj
b25zdCBRdWEKICAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9hdHRyaWJ1dGVDYW5vbmljYWxMb2Nh
bE5hbWUgPSBpc0Nhc2VJbnNlbnNpdGl2ZSA/IHZhbHVlLmxvY2FsTmFtZSgpLmNvbnZlcnRUb0FT
Q0lJTG93ZXJjYXNlKCkgOiB2YWx1ZS5sb2NhbE5hbWUoKTsKIH0KIAordm9pZCBDU1NTZWxlY3Rv
cjo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlLCBib29sIGNvbnZlcnRU
b0xvd2VyY2FzZSwgQXR0cmlidXRlTWF0Y2hUeXBlIG1hdGNoVHlwZSkKK3sKKyAgICBjcmVhdGVS
YXJlRGF0YSgpOworICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZSA9IHZhbHVlOwor
ICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZUNhbm9uaWNhbExvY2FsTmFtZSA9IGNv
bnZlcnRUb0xvd2VyY2FzZSA/IHZhbHVlLmxvY2FsTmFtZSgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJj
YXNlKCkgOiB2YWx1ZS5sb2NhbE5hbWUoKTsKKyAgICBtX2Nhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0
ZVZhbHVlTWF0Y2hpbmcgPSBtYXRjaFR5cGUgPT0gQ2FzZUluc2Vuc2l0aXZlOworfQorICAgIAog
dm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
IHsKICAgICBjcmVhdGVSYXJlRGF0YSgpOwpAQCAtNzgxLDYgKzc4OSwxNiBAQCB2b2lkIENTU1Nl
bGVjdG9yOjpzZXRTZWxlY3Rvckxpc3Qoc3RkOjp1CiAgICAgbV9kYXRhLm1fcmFyZURhdGEtPm1f
c2VsZWN0b3JMaXN0ID0gV1RGTW92ZShzZWxlY3Rvckxpc3QpOwogfQogCit2b2lkIENTU1NlbGVj
dG9yOjpzZXROdGgoaW50IGEsIGludCBiKQoreworICAgIGNyZWF0ZVJhcmVEYXRhKCk7CisgICAg
bV9wYXJzZWROdGggPSB0cnVlOyAvLyBGSVhNRS1ORVdQQVJTRVI6IENhbiByZW1vdmUgdGhpcyBw
YXJzZWQgYm9vbGVhbiBvbmNlIG9sZCBwYXJzZXIgaXMgZ29uZS4KKyAgICBtX2RhdGEubV9yYXJl
RGF0YS0+bV9hID0gYTsKKyAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9iID0gYjsKK30KKyAgICAK
Ky8vIEZJWE1FLU5FV1BBUlNFUjogQWxsIHRoZSBjb2RlIHRvIHBhcnNlIG50aC1jaGlsZCBzdHVm
ZiBjYW4gYmUgcmVtb3ZlZCB3aGVuCisvLyB0aGUgbmV3IHBhcnNlciBpcyBlbmFibGVkLgogYm9v
bCBDU1NTZWxlY3Rvcjo6cGFyc2VOdGgoKSBjb25zdAogewogICAgIGlmICghbV9oYXNSYXJlRGF0
YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCShyZXZpc2lvbiAyMDc3NjYpCisrKyBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMjQ0LDkg
KzI0NCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGNvbnN0IENTU1NlbGVjdG9y
TGlzdCogc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNSYXJlRGF0YSA/IG1fZGF0
YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC5nZXQoKSA6IG51bGxwdHI7IH0KIAogICAgICAg
ICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwotICAgICAgICB2b2lkIHNldEF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCBpc0Nhc2VJbnNlbnNpdGl2ZSk7Cisg
ICAgICAgIAorICAgICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRoZXNlIHR3byBtZXRob2RzIGNh
biBnbyBhd2F5IG9uY2UgdGhlIG9sZCBwYXJzZXIgaXMgZ29uZS4KKyAgICAgICAgdm9pZCBzZXRB
dHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGJvb2wpOworICAgICAgICB2b2lkIHNldEF0
dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNpdGl2ZShib29sIGlzQ2FzZUluc2Vuc2l0
aXZlKSB7CisgICAgICAgICAgICBtX2Nhc2VJbnNlbnNpdGl2ZUF0dHJpYnV0ZVZhbHVlTWF0Y2hp
bmcgPSBpc0Nhc2VJbnNlbnNpdGl2ZTsKKyAgICAgICAgfQorICAgICAgICB2b2lkIHNldEF0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCBjb252ZXJ0VG9Mb3dlcmNhc2UsIEF0dHJp
YnV0ZU1hdGNoVHlwZSk7CisgICAgICAgIHZvaWQgc2V0TnRoKGludCBhLCBpbnQgYik7CiAgICAg
ICAgIHZvaWQgc2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJik7Ci0gICAgICAgIHZvaWQg
c2V0QXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0aXZlKGJvb2wpOwogICAgICAg
ICB2b2lkIHNldExhbmdBcmd1bWVudExpc3Qoc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxBdG9taWNT
dHJpbmc+Pik7CiAgICAgICAgIHZvaWQgc2V0U2VsZWN0b3JMaXN0KHN0ZDo6dW5pcXVlX3B0cjxD
U1NTZWxlY3Rvckxpc3Q+KTsKIApAQCAtNTgwLDEyICs1ODYsNiBAQCBpbmxpbmUgY29uc3QgQXRv
bWljU3RyaW5nJiBDU1NTZWxlY3Rvcjo6CiAgICAgcmV0dXJuICpyZWludGVycHJldF9jYXN0PGNv
bnN0IEF0b21pY1N0cmluZyo+KG1faGFzUmFyZURhdGEgPyAmbV9kYXRhLm1fcmFyZURhdGEtPm1f
dmFsdWUgOiAmbV9kYXRhLm1fdmFsdWUpOwogfQogCi1pbmxpbmUgdm9pZCBDU1NTZWxlY3Rvcjo6
c2V0QXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0aXZlKGJvb2wgaXNDYXNlSW5z
ZW5zaXRpdmUpCi17Ci0gICAgQVNTRVJUKGlzQXR0cmlidXRlU2VsZWN0b3IoKSAmJiBtYXRjaCgp
ICE9IENTU1NlbGVjdG9yOjpTZXQpOwotICAgIG1fY2FzZUluc2Vuc2l0aXZlQXR0cmlidXRlVmFs
dWVNYXRjaGluZyA9IGlzQ2FzZUluc2Vuc2l0aXZlOwotfQotCiBpbmxpbmUgYm9vbCBDU1NTZWxl
Y3Rvcjo6YXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0aXZlKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVWYWx1ZU1hdGNoaW5nOwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50cy5jcHAJKHJldmlzaW9uIDIw
Nzc2NykKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIFN0eWxlU2hlZXRDb250ZW50czo6U3R5bGVTaGVl
dENvbnRlbnRzKGMKICAgICAsIG1fb3JpZ2luYWxVUkwoby5tX29yaWdpbmFsVVJMKQogICAgICwg
bV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShvLm1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUpCiAg
ICAgLCBtX2ltcG9ydFJ1bGVzKG8ubV9pbXBvcnRSdWxlcy5zaXplKCkpCisgICAgLCBtX25hbWVz
cGFjZVJ1bGVzKG8ubV9uYW1lc3BhY2VSdWxlcy5zaXplKCkpCiAgICAgLCBtX2NoaWxkUnVsZXMo
by5tX2NoaWxkUnVsZXMuc2l6ZSgpKQogICAgICwgbV9uYW1lc3BhY2VzKG8ubV9uYW1lc3BhY2Vz
KQogICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKG8ubV9kZWZhdWx0TmFtZXNwYWNlKQpAQCAtMTQy
LDYgKzE0MywxNiBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6cGFyc2VyQXBwZW5kUnVsCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoaXM8U3R5bGVSdWxlTmFtZXNwYWNlPihy
dWxlKSkgeworICAgICAgICAvLyBQYXJzZXIgZW5mb3JjZXMgdGhhdCBAbmFtZXNwYWNlIHJ1bGVz
IGNvbWUgYmVmb3JlIGFsbCBydWxlcyBvdGhlciB0aGFuCisgICAgICAgIC8vIGltcG9ydC9jaGFy
c2V0IHJ1bGVzCisgICAgICAgIEFTU0VSVChtX2NoaWxkUnVsZXMuaXNFbXB0eSgpKTsKKyAgICAg
ICAgU3R5bGVSdWxlTmFtZXNwYWNlJiBuYW1lc3BhY2VSdWxlID0gZG93bmNhc3Q8U3R5bGVSdWxl
TmFtZXNwYWNlPihydWxlLmdldCgpKTsKKyAgICAgICAgcGFyc2VyQWRkTmFtZXNwYWNlKG5hbWVz
cGFjZVJ1bGUucHJlZml4KCksIG5hbWVzcGFjZVJ1bGUudXJpKCkpOworICAgICAgICBtX25hbWVz
cGFjZVJ1bGVzLmFwcGVuZChkb3duY2FzdDxTdHlsZVJ1bGVOYW1lc3BhY2U+KHJ1bGUucHRyKCkp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChpczxTdHlsZVJ1bGVNZWRpYT4o
cnVsZSkpCiAgICAgICAgIHJlcG9ydE1lZGlhUXVlcnlXYXJuaW5nSWZOZWVkZWQoc2luZ2xlT3du
ZXJEb2N1bWVudCgpLCBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4ocnVsZS5nZXQoKSkubWVkaWFR
dWVyaWVzKCkpOwogCkBAIC0xNjQsNiArMTc1LDEyIEBAIFN0eWxlUnVsZUJhc2UqIFN0eWxlU2hl
ZXRDb250ZW50czo6cnVsZUEKICAgICAgICAgcmV0dXJuIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0
b3JJbmRleF0uZ2V0KCk7CiAKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMu
c2l6ZSgpOworICAgIAorICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9uYW1lc3BhY2VSdWxl
cy5zaXplKCkpCisgICAgICAgIHJldHVybiBtX25hbWVzcGFjZVJ1bGVzW2NoaWxkVmVjdG9ySW5k
ZXhdLmdldCgpOworICAgIAorICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9uYW1lc3BhY2VSdWxl
cy5zaXplKCk7CisgICAgCiAgICAgcmV0dXJuIG1fY2hpbGRSdWxlc1tjaGlsZFZlY3RvckluZGV4
XS5nZXQoKTsKIH0KIApAQCAtMTcxLDYgKzE4OCw3IEBAIHVuc2lnbmVkIFN0eWxlU2hlZXRDb250
ZW50czo6cnVsZUNvdW50KCkKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSAwOwogICAgIHJlc3Vs
dCArPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKKyAgICByZXN1bHQgKz0gbV9uYW1lc3BhY2VSdWxl
cy5zaXplKCk7CiAgICAgcmVzdWx0ICs9IG1fY2hpbGRSdWxlcy5zaXplKCk7CiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KQEAgLTE4Nyw2ICsyMDUsNyBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6
Y2xlYXJSdWxlcygpCiAgICAgICAgIG1faW1wb3J0UnVsZXNbaV0tPmNsZWFyUGFyZW50U3R5bGVT
aGVldCgpOwogICAgIH0KICAgICBtX2ltcG9ydFJ1bGVzLmNsZWFyKCk7CisgICAgbV9uYW1lc3Bh
Y2VSdWxlcy5jbGVhcigpOwogICAgIG1fY2hpbGRSdWxlcy5jbGVhcigpOwogICAgIGNsZWFyQ2hh
cnNldFJ1bGUoKTsKIH0KQEAgLTIyMSw2ICsyNDAsMzEgQEAgYm9vbCBTdHlsZVNoZWV0Q29udGVu
dHM6OndyYXBwZXJJbnNlcnRSdQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgY2hpbGRWZWN0
b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKIAorICAgIAorICAgIGlmIChjaGlsZFZl
Y3RvckluZGV4IDwgbV9uYW1lc3BhY2VSdWxlcy5zaXplKCkgfHwgKGNoaWxkVmVjdG9ySW5kZXgg
PT0gbV9uYW1lc3BhY2VSdWxlcy5zaXplKCkgJiYgcnVsZS0+aXNOYW1lc3BhY2VSdWxlKCkpKSB7
CisgICAgICAgIC8vIEluc2VydGluZyBub24tbmFtZXNwYWNlIHJ1bGVzIG90aGVyIHRoYW4gaW1w
b3J0IHJ1bGUgYmVmb3JlIEBuYW1lc3BhY2UgaXMKKyAgICAgICAgLy8gbm90IGFsbG93ZWQuCisg
ICAgICAgIGlmICghaXM8U3R5bGVSdWxlTmFtZXNwYWNlPihydWxlKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgLy8gSW5zZXJ0aW5nIEBuYW1lc3BhY2UgcnVsZSB3aGVuIHJ1
bGVzIG90aGVyIHRoYW4gaW1wb3J0L25hbWVzcGFjZS9jaGFyc2V0CisgICAgICAgIC8vIGFyZSBw
cmVzZW50IGlzIG5vdCBhbGxvd2VkLgorICAgICAgICBpZiAoIW1fY2hpbGRSdWxlcy5pc0VtcHR5
KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIAorICAgICAgICBTdHlsZVJ1
bGVOYW1lc3BhY2UmIG5hbWVzcGFjZVJ1bGUgPSBkb3duY2FzdDxTdHlsZVJ1bGVOYW1lc3BhY2U+
KHJ1bGUuZ2V0KCkpOworICAgICAgICBtX25hbWVzcGFjZVJ1bGVzLmluc2VydChpbmRleCwgZG93
bmNhc3Q8U3R5bGVSdWxlTmFtZXNwYWNlPihydWxlLnB0cigpKSk7CisgICAgICAgIAorICAgICAg
ICAvLyBGb3Igbm93IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBJRSBhbmQgRmlyZWZveCBpZiBhIG5h
bWVzcGFjZSBydWxlIHdpdGggdGhlIHNhbWUKKyAgICAgICAgLy8gcHJlZml4IGlzIGFkZGVkLCBp
dCBvdmVyd3JpdGVzIHByZXZpb3VzIG9uZXMuCisgICAgICAgIC8vIEZJWE1FOiBUaGUgZXZlbnR1
YWwgY29ycmVjdCBiZWhhdmlvciB3b3VsZCBiZSB0byBlbnN1cmUgdGhhdCB0aGUgbGFzdCB2YWx1
ZSBpbgorICAgICAgICAvLyB0aGUgbGlzdCB3aW5zLgorICAgICAgICBwYXJzZXJBZGROYW1lc3Bh
Y2UobmFtZXNwYWNlUnVsZS5wcmVmaXgoKSwgbmFtZXNwYWNlUnVsZS51cmkoKSk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoaXM8U3R5bGVSdWxlTmFtZXNwYWNlPihydWxl
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9uYW1l
c3BhY2VSdWxlcy5zaXplKCk7CisKICAgICAvLyBJZiB0aGUgbnVtYmVyIG9mIHNlbGVjdG9ycyB3
b3VsZCBvdmVyZmxvdyBSdWxlRGF0YSwgd2UgZHJvcCB0aGUgb3BlcmF0aW9uLgogICAgIGlmIChp
czxTdHlsZVJ1bGU+KHJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVsZT4ocnVsZS5nZXQoKSkuc2Vs
ZWN0b3JMaXN0KCkuY29tcG9uZW50Q291bnQoKSA+IFJ1bGVEYXRhOjptYXhpbXVtU2VsZWN0b3JD
b21wb25lbnRDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjQyLDYgKzI4NiwxNCBA
QCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6d3JhcHBlckRlbGV0ZVJ1CiAgICAgfQogICAgIGNo
aWxkVmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAKKyAgICBpZiAoY2hpbGRW
ZWN0b3JJbmRleCA8IG1fbmFtZXNwYWNlUnVsZXMuc2l6ZSgpKSB7CisgICAgICAgIGlmICghbV9j
aGlsZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbV9uYW1l
c3BhY2VSdWxlcy5yZW1vdmUoY2hpbGRWZWN0b3JJbmRleCk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX25hbWVzcGFjZVJ1bGVzLnNpemUoKTsKKwog
ICAgIG1fY2hpbGRSdWxlcy5yZW1vdmUoY2hpbGRWZWN0b3JJbmRleCk7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgJKHJldmlzaW9uIDIwNzc2NykKKysr
IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAkod29ya2luZyBjb3B5KQpA
QCAtNDEsNiArNDEsNyBAQCBjbGFzcyBOb2RlOwogY2xhc3MgU2VjdXJpdHlPcmlnaW47CiBjbGFz
cyBTdHlsZVJ1bGVCYXNlOwogY2xhc3MgU3R5bGVSdWxlSW1wb3J0OworY2xhc3MgU3R5bGVSdWxl
TmFtZXNwYWNlOwogCiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHMgZmluYWwgOiBwdWJsaWMgUmVm
Q291bnRlZDxTdHlsZVNoZWV0Q29udGVudHM+IHsKIHB1YmxpYzoKQEAgLTEwNCw2ICsxMDUsNyBA
QCBwdWJsaWM6CiAgICAgLy8gUnVsZXMgb3RoZXIgdGhhbiBAY2hhcnNldCBhbmQgQGltcG9ydC4K
ICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+PiYgY2hpbGRSdWxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fY2hpbGRSdWxlczsgfQogICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5
bGVSdWxlSW1wb3J0Pj4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRSdWxl
czsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlTmFtZXNwYWNlPj4mIG5hbWVz
cGFjZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lc3BhY2VSdWxlczsgfQogCiAgICAgdm9p
ZCBub3RpZnlMb2FkZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0Kik7CiAgICAgCkBA
IC0xNTQsNiArMTU2LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmluZyBtX2VuY29kaW5nRnJvbUNo
YXJzZXRSdWxlOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0Pj4gbV9pbXBvcnRS
dWxlczsKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZU5hbWVzcGFjZT4+IG1fbmFtZXNwYWNl
UnVsZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPj4gbV9jaGlsZFJ1bGVzOwog
ICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEF0b21pY1N0cmluZz4gUHJlZml4TmFt
ZXNwYWNlVVJJTWFwOwogICAgIFByZWZpeE5hbWVzcGFjZVVSSU1hcCBtX25hbWVzcGFjZXM7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDc3
NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDkgKzY0LDExIEBACiAjaW5jbHVkZSAiQ1NTUmVmbGVjdFZhbHVlLmgiCiAj
aW5jbHVkZSAiQ1NTUmV2ZXJ0VmFsdWUuaCIKICNpbmNsdWRlICJDU1NTZWxlY3Rvci5oIgorI2lu
Y2x1ZGUgIkNTU1NlbGVjdG9yUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NTU2hhZG93VmFsdWUuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiQ1NTVGltaW5nRnVuY3Rpb25W
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Rva2VuaXplci5oIgogI2luY2x1ZGUgIkNTU1VuaWNvZGVS
YW5nZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVW5zZXRWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1Zh
bHVlS2V5d29yZHMuaCIKQEAgLTE0MTEsNyArMTQxMywxMSBAQCBDb2xvciBDU1NQYXJzZXI6OnBh
cnNlU3lzdGVtQ29sb3IoY29uc3QgCiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNv
bnN0IFN0cmluZyYgc3RyaW5nLCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKIHsKLSAg
ICBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgPSAmc2VsZWN0b3JMaXN0OworICAgIGlm
IChtX2NvbnRleHQudXNlTmV3UGFyc2VyICYmIG1fY29udGV4dC5tb2RlICE9IFVBU2hlZXRNb2Rl
KSB7CisgICAgICAgIENTU1Rva2VuaXplcjo6U2NvcGUgc2NvcGUoc3RyaW5nKTsKKyAgICAgICAg
c2VsZWN0b3JMaXN0ID0gQ1NTU2VsZWN0b3JQYXJzZXI6OnBhcnNlU2VsZWN0b3Ioc2NvcGUudG9r
ZW5SYW5nZSgpLCBtX2NvbnRleHQsIG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQog
CiAgICAgc2V0dXBQYXJzZXIoIkAtd2Via2l0LXNlbGVjdG9yeyIsIHN0cmluZywgIn0iKTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5oCShyZXZp
c2lvbiAyMDc3ODMpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVl
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjIsOSArMjIyLDE1IEBAIHB1YmxpYzoKICAgICBzdGQ6
OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3I+IHJlbGVhc2VTZWxlY3RvcigpIHsgcmV0dXJuIFdURk1v
dmUobV9zZWxlY3Rvcik7IH0KIAogICAgIHZvaWQgc2V0VmFsdWUoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRWYWx1ZSh2YWx1ZSk7IH0KKyAgICAKKyAgICAvLyBG
SVhNRS1ORVdQQVJTRVI6IFRoZXNlIHR3byBtZXRob2RzIGNhbiBnbyBhd2F5IG9uY2Ugb2xkIHBh
cnNlciBpcyBnb25lLgogICAgIHZvaWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IHZhbHVlLCBib29sIGlzQ2FzZUluc2Vuc2l0aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0
ZSh2YWx1ZSwgaXNDYXNlSW5zZW5zaXRpdmUpOyB9Ci0gICAgdm9pZCBzZXRBcmd1bWVudChjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldEFyZ3VtZW50KHZhbHVlKTsg
fQogICAgIHZvaWQgc2V0QXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0aXZlKGJv
b2wgaXNDYXNlSW5zZW5zaXRpdmUpIHsgbV9zZWxlY3Rvci0+c2V0QXR0cmlidXRlVmFsdWVNYXRj
aGluZ0lzQ2FzZUluc2Vuc2l0aXZlKGlzQ2FzZUluc2Vuc2l0aXZlKTsgfQorICAgIAorICAgIHZv
aWQgc2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZhbHVlLCBib29sIGNvbnZlcnRU
b0xvd2VyY2FzZSwgQ1NTU2VsZWN0b3I6OkF0dHJpYnV0ZU1hdGNoVHlwZSB0eXBlKSB7IG1fc2Vs
ZWN0b3ItPnNldEF0dHJpYnV0ZSh2YWx1ZSwgY29udmVydFRvTG93ZXJjYXNlLCB0eXBlKTsgfQor
ICAgIAorICAgIHZvaWQgc2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkgeyBt
X3NlbGVjdG9yLT5zZXRBcmd1bWVudCh2YWx1ZSk7IH0KKyAgICB2b2lkIHNldE50aChpbnQgYSwg
aW50IGIpIHsgbV9zZWxlY3Rvci0+c2V0TnRoKGEsIGIpOyB9CiAgICAgdm9pZCBzZXRNYXRjaChD
U1NTZWxlY3Rvcjo6TWF0Y2ggdmFsdWUpIHsgbV9zZWxlY3Rvci0+c2V0TWF0Y2godmFsdWUpOyB9
CiAgICAgdm9pZCBzZXRSZWxhdGlvbihDU1NTZWxlY3Rvcjo6UmVsYXRpb25UeXBlIHZhbHVlKSB7
IG1fc2VsZWN0b3ItPnNldFJlbGF0aW9uKHZhbHVlKTsgfQogICAgIHZvaWQgc2V0Rm9yUGFnZSgp
IHsgbV9zZWxlY3Rvci0+c2V0Rm9yUGFnZSgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
cGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAkocmV2aXNpb24gMjA3NzgzKQorKysg
U291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NTZWxlY3RvclBhcnNlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMCwyMSArMTAwLDI2IEBAIENTU1NlbGVjdG9yTGlzdCBDU1NTZWxlY3RvclBh
cnNlcjo6Y29uc3UKICAgICByZXR1cm4gbGlzdDsKIH0KIAotc3RhdGljIHZvaWQgY29uc3VtZUxh
bmdBcmd1bWVudExpc3Qoc3RkOjp1bmlxdWVfcHRyPFZlY3RvcjxBdG9taWNTdHJpbmc+PiYgYXJn
dW1lbnRMaXN0LCBDU1NQYXJzZXJUb2tlblJhbmdlJiByYW5nZSkKK3N0YXRpYyBib29sIGNvbnN1
bWVMYW5nQXJndW1lbnRMaXN0KHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8QXRvbWljU3RyaW5nPj4m
IGFyZ3VtZW50TGlzdCwgQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7CiAgICAgY29uc3Qg
Q1NTUGFyc2VyVG9rZW4mIGlkZW50ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2Uo
KTsKLSAgICBpZiAoaWRlbnQudHlwZSgpICE9IElkZW50VG9rZW4pCi0gICAgICAgIHJldHVybjsK
LSAgICBhcmd1bWVudExpc3QtPmFwcGVuZChpZGVudC52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCkp
OworICAgIGlmIChpZGVudC50eXBlKCkgIT0gSWRlbnRUb2tlbiAmJiBpZGVudC50eXBlKCkgIT0g
U3RyaW5nVG9rZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBTdHJpbmdWaWV3IHN0cmlu
ZyA9IGlkZW50LnZhbHVlKCk7CisgICAgaWYgKHN0cmluZy5zdGFydHNXaXRoKCItLSIpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgYXJndW1lbnRMaXN0LT5hcHBlbmQoc3RyaW5nLnRvQXRv
bWljU3RyaW5nKCkpOwogICAgIHdoaWxlICghcmFuZ2UuYXRFbmQoKSAmJiByYW5nZS5wZWVrKCku
dHlwZSgpID09IENvbW1hVG9rZW4pIHsKICAgICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1do
aXRlc3BhY2UoKTsKICAgICAgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4mIGlkZW50ID0gcmFuZ2Uu
Y29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKLSAgICAgICAgaWYgKGlkZW50LnR5cGUoKSAh
PSBJZGVudFRva2VuKSB7Ci0gICAgICAgICAgICBhcmd1bWVudExpc3QtPmNsZWFyKCk7Ci0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgYXJndW1lbnRMaXN0LT5hcHBlbmQo
aWRlbnQudmFsdWUoKS50b0F0b21pY1N0cmluZygpKTsKKyAgICAgICAgaWYgKGlkZW50LnR5cGUo
KSAhPSBJZGVudFRva2VuICYmIGlkZW50LnR5cGUoKSAhPSBTdHJpbmdUb2tlbikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgU3RyaW5nVmlldyBzdHJpbmcgPSBpZGVudC52YWx1
ZSgpOworICAgICAgICBpZiAoc3RyaW5nLnN0YXJ0c1dpdGgoIi0tIikpCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIGFyZ3VtZW50TGlzdC0+YXBwZW5kKHN0cmluZy50b0F0b21p
Y1N0cmluZygpKTsKICAgICB9CisgICAgcmV0dXJuIHJhbmdlLmF0RW5kKCk7CiB9CiAgICAgCiBu
YW1lc3BhY2UgewpAQCAtMjc0LDggKzI3OSw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJT
ZWxlY3Rvcj4gQ1NTU2UKICAgICAgICAgaWYgKGNvbXBvdW5kU2VsZWN0b3ItPm1hdGNoKCkgPT0g
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQpCiAgICAgICAgICAgICBjb21wb3VuZFBzZXVkb0Vs
ZW1lbnQgPSBjb21wb3VuZFNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpOwogICAgIH0KLSAg
ICBpZiAobV9jb250ZXh0LmlzSFRNTERvY3VtZW50KQotICAgICAgICBlbGVtZW50TmFtZSA9IGVs
ZW1lbnROYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7CiAKICAgICB3aGlsZSAoc3RkOjp1
bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBzaW1wbGVTZWxlY3RvciA9IGNvbnN1bWVTaW1w
bGVTZWxlY3RvcihyYW5nZSkpIHsKICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3NDcKQEAgLTQxNyw5ICs0MjAsNiBAQCBzdGQ6OnVu
aXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlCiAgICAgICAgIHJldHVybiBudWxscHRy
OwogICAgIGJsb2NrLmNvbnN1bWVXaGl0ZXNwYWNlKCk7CiAKLSAgICBpZiAobV9jb250ZXh0Lmlz
SFRNTERvY3VtZW50KQotICAgICAgICBhdHRyaWJ1dGVOYW1lID0gYXR0cmlidXRlTmFtZS5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpOwotCiAgICAgQXRvbWljU3RyaW5nIG5hbWVzcGFjZVVSSSA9
IGRldGVybWluZU5hbWVzcGFjZShuYW1lc3BhY2VQcmVmaXgpOwogICAgIGlmIChuYW1lc3BhY2VV
UkkuaXNOdWxsKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwpAQCAtNDMxLDcgKzQzMSw3IEBA
IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTU2UKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNlbGVjdG9yID0gc3RkOjp1bmlxdWVfcHRyPENTU1Bh
cnNlclNlbGVjdG9yPihuZXcgQ1NTUGFyc2VyU2VsZWN0b3IoKSk7CiAKICAgICBpZiAoYmxvY2su
YXRFbmQoKSkgewotICAgICAgICBzZWxlY3Rvci0+c2V0QXR0cmlidXRlKHF1YWxpZmllZE5hbWUs
IENTU1NlbGVjdG9yOjpDYXNlU2Vuc2l0aXZlKTsKKyAgICAgICAgc2VsZWN0b3ItPnNldEF0dHJp
YnV0ZShxdWFsaWZpZWROYW1lLCBtX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQsIENTU1NlbGVjdG9y
OjpDYXNlU2Vuc2l0aXZlKTsKICAgICAgICAgc2VsZWN0b3ItPnNldE1hdGNoKENTU1NlbGVjdG9y
OjpTZXQpOwogICAgICAgICByZXR1cm4gc2VsZWN0b3I7CiAgICAgfQpAQCAtNDQyLDEzICs0NDIs
NDkgQEAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZQogICAgIGlmIChh
dHRyaWJ1dGVWYWx1ZS50eXBlKCkgIT0gSWRlbnRUb2tlbiAmJiBhdHRyaWJ1dGVWYWx1ZS50eXBl
KCkgIT0gU3RyaW5nVG9rZW4pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIHNlbGVjdG9y
LT5zZXRWYWx1ZShhdHRyaWJ1dGVWYWx1ZS52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCkpOwotICAg
IHNlbGVjdG9yLT5zZXRBdHRyaWJ1dGUocXVhbGlmaWVkTmFtZSwgY29uc3VtZUF0dHJpYnV0ZUZs
YWdzKGJsb2NrKSk7CisgICAgCisgICAgc2VsZWN0b3ItPnNldEF0dHJpYnV0ZShxdWFsaWZpZWRO
YW1lLCBtX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQsIGNvbnN1bWVBdHRyaWJ1dGVGbGFncyhibG9j
aykpOwogCiAgICAgaWYgKCFibG9jay5hdEVuZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsK
ICAgICByZXR1cm4gc2VsZWN0b3I7CiB9CiAKK3N0YXRpYyBib29sIGlzUHNldWRvQ2xhc3NGdW5j
dGlvbihDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NUeXBlIHBzZXVkb0NsYXNzVHlwZSkKK3sKKyAg
ICBzd2l0Y2ggKHBzZXVkb0NsYXNzVHlwZSkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzTm90OgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTWF0Y2hlczoKKyAg
ICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc050aENoaWxkOgorICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdENoaWxkOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzTnRoT2ZUeXBlOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRo
TGFzdE9mVHlwZToKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xhbmc6CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6
UHNldWRvQ2xhc3NIb3N0OgorI2lmIEVOQUJMRV9DU1NfU0VMRUNUT1JTX0xFVkVMNAorICAgIGNh
c2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRGlyOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBz
ZXVkb0NsYXNzUm9sZToKKyNlbmRpZgorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorICAgIAorc3Rh
dGljIGJvb2wgaXNQc2V1ZG9FbGVtZW50RnVuY3Rpb24oQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1l
bnRUeXBlIHBzZXVkb0VsZW1lbnRUeXBlKQoreworICAgIHN3aXRjaCAocHNldWRvRWxlbWVudFR5
cGUpIHsKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50Q3VlOgorICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRTbG90dGVkOgorICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOwor
fQorCiBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1NlbGVjdG9yUGFyc2Vy
Ojpjb25zdW1lUHNldWRvKENTU1BhcnNlclRva2VuUmFuZ2UmIHJhbmdlKQogewogICAgIEFTU0VS
VChyYW5nZS5wZWVrKCkudHlwZSgpID09IENvbG9uVG9rZW4pOwpAQCAtNDc2LDcgKzUxMiw4IEBA
IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTU2UKIAogICAgIGlmICh0b2tl
bi50eXBlKCkgPT0gSWRlbnRUb2tlbikgewogICAgICAgICByYW5nZS5jb25zdW1lKCk7Ci0gICAg
ICAgIGlmICgoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnQg
JiYgc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0Vs
ZW1lbnRVbmtub3duKSB8fCAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVk
b0NsYXNzICYmIHNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NVbmtub3duKSkKKyAgICAgICAgaWYgKChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NT
ZWxlY3Rvcjo6UHNldWRvRWxlbWVudCAmJiAoc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkg
PT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRVbmtub3duIHx8IGlzUHNldWRvRWxlbWVudEZ1
bmN0aW9uKHNlbGVjdG9yLT5wc2V1ZG9FbGVtZW50VHlwZSgpKSkpCisgICAgICAgICAgICB8fCAo
c2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzICYmIChzZWxlY3Rv
ci0+cHNldWRvQ2xhc3NUeXBlKCkgPT0gQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzVW5rbm93biB8
fCBpc1BzZXVkb0NsYXNzRnVuY3Rpb24oc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpKSkpKQog
ICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgICAgIHJldHVybiBzZWxlY3RvcjsKICAg
ICB9CkBAIC00ODksMTMgKzUyNiwxMiBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0
b3I+IENTU1NlCiAgICAgaWYgKHNlbGVjdG9yLT5tYXRjaCgpID09IENTU1NlbGVjdG9yOjpQc2V1
ZG9DbGFzcykgewogICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSkg
ewogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc05vdDogewotICAgICAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBpbm5lclNlbGVjdG9yID0gY29u
c3VtZUNvbXBvdW5kU2VsZWN0b3IoYmxvY2spOwotICAgICAgICAgICAgYmxvY2suY29uc3VtZVdo
aXRlc3BhY2UoKTsKLSAgICAgICAgICAgIGlmICghaW5uZXJTZWxlY3RvciB8fCAhYmxvY2suYXRF
bmQoKSkKKyAgICAgICAgICAgIERpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSBzY29wZSh0aGlz
KTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9y
TGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+KG5ldyBDU1NTZWxlY3Rvckxp
c3QoKSk7CisgICAgICAgICAgICAqc2VsZWN0b3JMaXN0ID0gY29uc3VtZUNvbXBsZXhTZWxlY3Rv
ckxpc3QoYmxvY2spOworICAgICAgICAgICAgaWYgKCFzZWxlY3Rvckxpc3QtPmNvbXBvbmVudENv
dW50KCkgfHwgIWJsb2NrLmF0RW5kKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPj4g
c2VsZWN0b3JWZWN0b3I7Ci0gICAgICAgICAgICBzZWxlY3RvclZlY3Rvci5hcHBlbmQoV1RGTW92
ZShpbm5lclNlbGVjdG9yKSk7Ci0gICAgICAgICAgICBzZWxlY3Rvci0+YWRvcHRTZWxlY3RvclZl
Y3RvcihzZWxlY3RvclZlY3Rvcik7CisgICAgICAgICAgICBzZWxlY3Rvci0+c2V0U2VsZWN0b3JM
aXN0KFdURk1vdmUoc2VsZWN0b3JMaXN0KSk7CiAgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3I7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOdGhDaGls
ZDoKQEAgLTUwNiwzMSArNTQyLDYwIEBAIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rv
cj4gQ1NTU2UKICAgICAgICAgICAgIGlmICghY29uc3VtZUFOUGx1c0IoYmxvY2ssIGFiKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgICAgIGJsb2NrLmNvbnN1bWVX
aGl0ZXNwYWNlKCk7Ci0gICAgICAgICAgICBpZiAoIWJsb2NrLmF0RW5kKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgICAgICBzZWxlY3Rvci0+c2V0QXJndW1lbnQo
QXRvbWljU3RyaW5nOjpudW1iZXIoYWIuZmlyc3QgKiBhYi5zZWNvbmQpKTsKKyAgICAgICAgICAg
IGlmICghYmxvY2suYXRFbmQoKSkgeworICAgICAgICAgICAgICAgIGlmIChibG9jay5wZWVrKCku
dHlwZSgpICE9IElkZW50VG9rZW4pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBpZGVudCA9IGJsb2NrLmNv
bnN1bWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3JpbmdBU0NJSUNhc2UoaWRl
bnQudmFsdWUoKSwgIm9mIikpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICAgICAgICAgIERpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSBzY29wZSh0aGlzKTsK
KyAgICAgICAgICAgICAgICBibG9jay5jb25zdW1lV2hpdGVzcGFjZSgpOworICAgICAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9yTGlzdCA9IHN0ZDo6
dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+KG5ldyBDU1NTZWxlY3Rvckxpc3QoKSk7CisgICAg
ICAgICAgICAgICAgKnNlbGVjdG9yTGlzdCA9IGNvbnN1bWVDb21wbGV4U2VsZWN0b3JMaXN0KGJs
b2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yTGlzdC0+Y29tcG9uZW50Q291bnQo
KSB8fCAhYmxvY2suYXRFbmQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgICAgICAgICAgICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZNb3ZlKHNlbGVj
dG9yTGlzdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2VsZWN0b3ItPnNldE50aChh
Yi5maXJzdCwgYWIuc2Vjb25kKTsKICAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcjsKICAgICAg
ICAgfQogICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0xhbmc6IHsKICAgICAg
ICAgICAgIC8vIEZJWE1FOiBDU1MgU2VsZWN0b3JzIExldmVsIDQgYWxsb3dzIDpsYW5nKCotZm9v
KQogICAgICAgICAgICAgYXV0byBhcmd1bWVudExpc3QgPSBzdGQ6Om1ha2VfdW5pcXVlPFZlY3Rv
cjxBdG9taWNTdHJpbmc+PigpOwotICAgICAgICAgICAgY29uc3VtZUxhbmdBcmd1bWVudExpc3Qo
YXJndW1lbnRMaXN0LCBibG9jayk7Ci0gICAgICAgICAgICBpZiAoYXJndW1lbnRMaXN0LT5pc0Vt
cHR5KCkpCisgICAgICAgICAgICBpZiAoIWNvbnN1bWVMYW5nQXJndW1lbnRMaXN0KGFyZ3VtZW50
TGlzdCwgYmxvY2spKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAg
ICAgc2VsZWN0b3ItPnNldExhbmdBcmd1bWVudExpc3QoV1RGTW92ZShhcmd1bWVudExpc3QpKTsK
ICAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcjsKICAgICAgICAgfQorICAgICAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc01hdGNoZXM6IHsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9yTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NT
ZWxlY3Rvckxpc3Q+KG5ldyBDU1NTZWxlY3Rvckxpc3QoKSk7CisgICAgICAgICAgICAqc2VsZWN0
b3JMaXN0ID0gY29uc3VtZUNvbXBsZXhTZWxlY3Rvckxpc3QoYmxvY2spOworICAgICAgICAgICAg
aWYgKCFzZWxlY3Rvckxpc3QtPmNvbXBvbmVudENvdW50KCkgfHwgIWJsb2NrLmF0RW5kKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBzZWxlY3Rvci0+c2V0
U2VsZWN0b3JMaXN0KFdURk1vdmUoc2VsZWN0b3JMaXN0KSk7CisgICAgICAgICAgICByZXR1cm4g
c2VsZWN0b3I7CisgICAgICAgIH0KICAgICAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBTdXBwb3J0
IDpob3N0LWNvbnRleHQKICAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6
CiAgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzSG9zdDogewogICAgICAgICAg
ICAgRGlzYWxsb3dQc2V1ZG9FbGVtZW50c1Njb3BlIHNjb3BlKHRoaXMpOwogICAgICAgICAgICAg
c3RkOjp1bmlxdWVfcHRyPENTU1NlbGVjdG9yTGlzdD4gc2VsZWN0b3JMaXN0ID0gc3RkOjp1bmlx
dWVfcHRyPENTU1NlbGVjdG9yTGlzdD4obmV3IENTU1NlbGVjdG9yTGlzdCgpKTsKICAgICAgICAg
ICAgICpzZWxlY3Rvckxpc3QgPSBjb25zdW1lQ29tcG91bmRTZWxlY3Rvckxpc3QoYmxvY2spOwot
ICAgICAgICAgICAgaWYgKCFzZWxlY3Rvckxpc3QtPmlzVmFsaWQoKSB8fCAhYmxvY2suYXRFbmQo
KSkKKyAgICAgICAgICAgIGlmICghc2VsZWN0b3JMaXN0LT5jb21wb25lbnRDb3VudCgpIHx8ICFi
bG9jay5hdEVuZCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwogICAgICAgICAg
ICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZNb3ZlKHNlbGVjdG9yTGlzdCkpOwogICAg
ICAgICAgICAgcmV0dXJuIHNlbGVjdG9yOwogICAgICAgICB9CisjaWYgRU5BQkxFX0NTU19TRUxF
Q1RPUlNfTEVWRUw0CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzRGlyOgor
ICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1JvbGU6IHsKKyAgICAgICAgICAg
IGNvbnN0IENTU1BhcnNlclRva2VuJiBpZGVudCA9IGJsb2NrLmNvbnN1bWVJbmNsdWRpbmdXaGl0
ZXNwYWNlKCk7CisgICAgICAgICAgICBpZiAoaWRlbnQudHlwZSgpICE9IElkZW50VG9rZW4pCisg
ICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICBzZWxlY3Rvci0+c2V0
QXJndW1lbnQoaWRlbnQudmFsdWUoKS50b0F0b21pY1N0cmluZygpKTsKKyAgICAgICAgICAgIHJl
dHVybiBzZWxlY3RvcjsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAgIGRlZmF1bHQ6CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAtNTg2LDYgKzY1MSwxMyBAQCBDU1NTZWxlY3Rv
cjo6UmVsYXRpb25UeXBlIENTU1NlbGVjdG9yUGFyCiAgICAgICAgICAgICByZXR1cm4gQ1NTU2Vs
ZWN0b3I6OkRpcmVjdEFkamFjZW50OwogICAgICAgICBpZiAoZGVsaW1pdGVyID09ICd+JykKICAg
ICAgICAgICAgIHJldHVybiBDU1NTZWxlY3Rvcjo6SW5kaXJlY3RBZGphY2VudDsKKyNpZiBFTkFC
TEVfQ1NTX1NFTEVDVE9SU19MRVZFTDQKKyAgICAgICAgLy8gRklYTUUtTkVXUEFSU0VSOiBOZWVk
IHRvIHNldCB0aGF0IHRoaXMgd2FzIGEgPj4gc28gc2VyaWFsaXphdGlvbiBpcyBjb3JyZWN0Cisg
ICAgICAgIGlmIChkZWxpbWl0ZXIgPT0gJz4nICYmIHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gRGVs
aW1pdGVyVG9rZW4gJiYgcmFuZ2UucGVlaygpLmRlbGltaXRlcigpID09ICc+JykgeworICAgICAg
ICAgICAgcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICAgICAgICAgIHJl
dHVybiBDU1NTZWxlY3Rvcjo6RGVzY2VuZGFudDsKKyAgICAgICAgfQorI2VuZGlmCiAgICAgICAg
IHJldHVybiBDU1NTZWxlY3Rvcjo6Q2hpbGQ7CiAgICAgfQogCg==
</data>
<flag name="review"
          id="315793"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>292827</attachid>
            <date>2016-10-25 14:50:43 -0700</date>
            <delta_ts>2016-10-25 14:52:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>28100</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNzgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQwIEBACisyMDE2LTEwLTI1ICBEYXZlIEh5
YXR0ICA8aHlhdHRAYXBwbGUuY29tPgorCisgICAgICAgIFtDU1MgUGFyc2VyXSBJbXByb3ZlbWVu
dHMgdG8gc2VsZWN0b3IgcGFyc2luZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTYzOTY0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTU2VsZWN0b3I6OnNldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3Rv
cjo6c2V0TnRoKToKKyAgICAgICAgKiBjc3MvQ1NTU2VsZWN0b3IuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yOjpzZXRBdHRyaWJ1dGVWYWx1ZU1hdGNoaW5nSXNDYXNlSW5zZW5zaXRp
dmUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0Q29udGVudHMuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpTdHlsZVNoZWV0Q29udGVudHMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTaGVldENvbnRlbnRzOjpwYXJzZXJBcHBlbmRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRDb250ZW50czo6cnVsZUF0KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRDb250ZW50czo6cnVsZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRDb250ZW50czo6Y2xlYXJSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0
Q29udGVudHM6OndyYXBwZXJJbnNlcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hl
ZXRDb250ZW50czo6d3JhcHBlckRlbGV0ZVJ1bGUpOgorICAgICAgICAqIGNzcy9TdHlsZVNoZWV0
Q29udGVudHMuaDoKKyAgICAgICAgKiBjc3MvcGFyc2VyL0NTU1BhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXJDb250ZXh0OjpDU1NQYXJzZXJDb250ZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgICogY3NzL3BhcnNl
ci9DU1NQYXJzZXJWYWx1ZXMuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclNlbGVjdG9y
OjpzZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyU2VsZWN0b3I6OnNl
dEFyZ3VtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlclNlbGVjdG9yOjpzZXROdGgp
OgorICAgICAgICAqIGNzcy9wYXJzZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6Y29uc3VtZUxhbmdBcmd1bWVudExpc3QpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
U2VsZWN0b3JQYXJzZXI6OmNvbnN1bWVDb21wb3VuZFNlbGVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1NlbGVjdG9yUGFyc2VyOjpjb25zdW1lQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmlzUHNldWRvQ2xhc3NGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppc1BzZXVkb0Vs
ZW1lbnRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29u
c3VtZVBzZXVkbyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTZWxlY3RvclBhcnNlcjo6Y29uc3Vt
ZUNvbWJpbmF0b3IpOgorCiAyMDE2LTEwLTI1ICBFcmljIENhcmxzb24gIDxlcmljLmNhcmxzb25A
YXBwbGUuY29tPgogCiAgICAgICAgIFtNZWRpYVN0cmVhbV0gQWRkICJoYXMgY2FwdHVyZSBkZXZp
Y2UiIGJpdCB0byBtZWRpYSBzdGF0ZSBmbGFncwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NT
U1NlbGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0
b3IuY3BwCShyZXZpc2lvbiAyMDc4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NjMsNiArNzYzLDE0IEBAIHZvaWQgQ1NTU2VsZWN0
b3I6OnNldEF0dHJpYnV0ZShjb25zdCBRdWEKICAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9hdHRy
aWJ1dGVDYW5vbmljYWxMb2NhbE5hbWUgPSBpc0Nhc2VJbnNlbnNpdGl2ZSA/IHZhbHVlLmxvY2Fs
TmFtZSgpLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgOiB2YWx1ZS5sb2NhbE5hbWUoKTsKIH0K
IAordm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHZh
bHVlLCBib29sIGNvbnZlcnRUb0xvd2VyY2FzZSwgQXR0cmlidXRlTWF0Y2hUeXBlIG1hdGNoVHlw
ZSkKK3sKKyAgICBjcmVhdGVSYXJlRGF0YSgpOworICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2F0
dHJpYnV0ZSA9IHZhbHVlOworICAgIG1fZGF0YS5tX3JhcmVEYXRhLT5tX2F0dHJpYnV0ZUNhbm9u
aWNhbExvY2FsTmFtZSA9IGNvbnZlcnRUb0xvd2VyY2FzZSA/IHZhbHVlLmxvY2FsTmFtZSgpLmNv
bnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkgOiB2YWx1ZS5sb2NhbE5hbWUoKTsKKyAgICBtX2Nhc2VJ
bnNlbnNpdGl2ZUF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmcgPSBtYXRjaFR5cGUgPT0gQ2FzZUluc2Vu
c2l0aXZlOworfQorICAgIAogdm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXJndW1lbnQoY29uc3QgQXRv
bWljU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBjcmVhdGVSYXJlRGF0YSgpOwpAQCAtNzgxLDYgKzc4
OSwxNiBAQCB2b2lkIENTU1NlbGVjdG9yOjpzZXRTZWxlY3Rvckxpc3Qoc3RkOjp1CiAgICAgbV9k
YXRhLm1fcmFyZURhdGEtPm1fc2VsZWN0b3JMaXN0ID0gV1RGTW92ZShzZWxlY3Rvckxpc3QpOwog
fQogCit2b2lkIENTU1NlbGVjdG9yOjpzZXROdGgoaW50IGEsIGludCBiKQoreworICAgIGNyZWF0
ZVJhcmVEYXRhKCk7CisgICAgbV9wYXJzZWROdGggPSB0cnVlOyAvLyBGSVhNRS1ORVdQQVJTRVI6
IENhbiByZW1vdmUgdGhpcyBwYXJzZWQgYm9vbGVhbiBvbmNlIG9sZCBwYXJzZXIgaXMgZ29uZS4K
KyAgICBtX2RhdGEubV9yYXJlRGF0YS0+bV9hID0gYTsKKyAgICBtX2RhdGEubV9yYXJlRGF0YS0+
bV9iID0gYjsKK30KKyAgICAKKy8vIEZJWE1FLU5FV1BBUlNFUjogQWxsIHRoZSBjb2RlIHRvIHBh
cnNlIG50aC1jaGlsZCBzdHVmZiBjYW4gYmUgcmVtb3ZlZCB3aGVuCisvLyB0aGUgbmV3IHBhcnNl
ciBpcyBlbmFibGVkLgogYm9vbCBDU1NTZWxlY3Rvcjo6cGFyc2VOdGgoKSBjb25zdAogewogICAg
IGlmICghbV9oYXNSYXJlRGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rv
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTZWxlY3Rvci5oCShyZXZp
c2lvbiAyMDc4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU2VsZWN0b3IuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQ0LDkgKzI0NCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IGNvbnN0IENTU1NlbGVjdG9yTGlzdCogc2VsZWN0b3JMaXN0KCkgY29uc3QgeyByZXR1cm4gbV9o
YXNSYXJlRGF0YSA/IG1fZGF0YS5tX3JhcmVEYXRhLT5tX3NlbGVjdG9yTGlzdC5nZXQoKSA6IG51
bGxwdHI7IH0KIAogICAgICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYpOwot
ICAgICAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCBpc0Nh
c2VJbnNlbnNpdGl2ZSk7CisgICAgICAgIAorICAgICAgICAvLyBGSVhNRS1ORVdQQVJTRVI6IFRo
ZXNlIHR3byBtZXRob2RzIGNhbiBnbyBhd2F5IG9uY2UgdGhlIG9sZCBwYXJzZXIgaXMgZ29uZS4K
KyAgICAgICAgdm9pZCBzZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYsIGJvb2wpOwor
ICAgICAgICB2b2lkIHNldEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNpdGl2ZShi
b29sIGlzQ2FzZUluc2Vuc2l0aXZlKSB7CisgICAgICAgICAgICBtX2Nhc2VJbnNlbnNpdGl2ZUF0
dHJpYnV0ZVZhbHVlTWF0Y2hpbmcgPSBpc0Nhc2VJbnNlbnNpdGl2ZTsKKyAgICAgICAgfQorICAg
ICAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiwgYm9vbCBjb252ZXJ0
VG9Mb3dlcmNhc2UsIEF0dHJpYnV0ZU1hdGNoVHlwZSk7CisgICAgICAgIHZvaWQgc2V0TnRoKGlu
dCBhLCBpbnQgYik7CiAgICAgICAgIHZvaWQgc2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5n
Jik7Ci0gICAgICAgIHZvaWQgc2V0QXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0
aXZlKGJvb2wpOwogICAgICAgICB2b2lkIHNldExhbmdBcmd1bWVudExpc3Qoc3RkOjp1bmlxdWVf
cHRyPFZlY3RvcjxBdG9taWNTdHJpbmc+Pik7CiAgICAgICAgIHZvaWQgc2V0U2VsZWN0b3JMaXN0
KHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+KTsKIApAQCAtNTgwLDEyICs1ODYsNiBA
QCBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBDU1NTZWxlY3Rvcjo6CiAgICAgcmV0dXJuICpy
ZWludGVycHJldF9jYXN0PGNvbnN0IEF0b21pY1N0cmluZyo+KG1faGFzUmFyZURhdGEgPyAmbV9k
YXRhLm1fcmFyZURhdGEtPm1fdmFsdWUgOiAmbV9kYXRhLm1fdmFsdWUpOwogfQogCi1pbmxpbmUg
dm9pZCBDU1NTZWxlY3Rvcjo6c2V0QXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vuc2l0
aXZlKGJvb2wgaXNDYXNlSW5zZW5zaXRpdmUpCi17Ci0gICAgQVNTRVJUKGlzQXR0cmlidXRlU2Vs
ZWN0b3IoKSAmJiBtYXRjaCgpICE9IENTU1NlbGVjdG9yOjpTZXQpOwotICAgIG1fY2FzZUluc2Vu
c2l0aXZlQXR0cmlidXRlVmFsdWVNYXRjaGluZyA9IGlzQ2FzZUluc2Vuc2l0aXZlOwotfQotCiBp
bmxpbmUgYm9vbCBDU1NTZWxlY3Rvcjo6YXR0cmlidXRlVmFsdWVNYXRjaGluZ0lzQ2FzZUluc2Vu
c2l0aXZlKCkgY29uc3QKIHsKICAgICByZXR1cm4gbV9jYXNlSW5zZW5zaXRpdmVBdHRyaWJ1dGVW
YWx1ZU1hdGNoaW5nOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlU2hlZXRDb250ZW50
cy5jcHAJKHJldmlzaW9uIDIwNzgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0
Q29udGVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw2ICs4MCw3IEBAIFN0eWxlU2hlZXRD
b250ZW50czo6U3R5bGVTaGVldENvbnRlbnRzKGMKICAgICAsIG1fb3JpZ2luYWxVUkwoby5tX29y
aWdpbmFsVVJMKQogICAgICwgbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZShvLm1fZW5jb2RpbmdG
cm9tQ2hhcnNldFJ1bGUpCiAgICAgLCBtX2ltcG9ydFJ1bGVzKG8ubV9pbXBvcnRSdWxlcy5zaXpl
KCkpCisgICAgLCBtX25hbWVzcGFjZVJ1bGVzKG8ubV9uYW1lc3BhY2VSdWxlcy5zaXplKCkpCiAg
ICAgLCBtX2NoaWxkUnVsZXMoby5tX2NoaWxkUnVsZXMuc2l6ZSgpKQogICAgICwgbV9uYW1lc3Bh
Y2VzKG8ubV9uYW1lc3BhY2VzKQogICAgICwgbV9kZWZhdWx0TmFtZXNwYWNlKG8ubV9kZWZhdWx0
TmFtZXNwYWNlKQpAQCAtMTQyLDYgKzE0MywxNiBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6
cGFyc2VyQXBwZW5kUnVsCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBpZiAoaXM8U3R5
bGVSdWxlTmFtZXNwYWNlPihydWxlKSkgeworICAgICAgICAvLyBQYXJzZXIgZW5mb3JjZXMgdGhh
dCBAbmFtZXNwYWNlIHJ1bGVzIGNvbWUgYmVmb3JlIGFsbCBydWxlcyBvdGhlciB0aGFuCisgICAg
ICAgIC8vIGltcG9ydC9jaGFyc2V0IHJ1bGVzCisgICAgICAgIEFTU0VSVChtX2NoaWxkUnVsZXMu
aXNFbXB0eSgpKTsKKyAgICAgICAgU3R5bGVSdWxlTmFtZXNwYWNlJiBuYW1lc3BhY2VSdWxlID0g
ZG93bmNhc3Q8U3R5bGVSdWxlTmFtZXNwYWNlPihydWxlLmdldCgpKTsKKyAgICAgICAgcGFyc2Vy
QWRkTmFtZXNwYWNlKG5hbWVzcGFjZVJ1bGUucHJlZml4KCksIG5hbWVzcGFjZVJ1bGUudXJpKCkp
OworICAgICAgICBtX25hbWVzcGFjZVJ1bGVzLmFwcGVuZChkb3duY2FzdDxTdHlsZVJ1bGVOYW1l
c3BhY2U+KHJ1bGUucHRyKCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIGlmIChp
czxTdHlsZVJ1bGVNZWRpYT4ocnVsZSkpCiAgICAgICAgIHJlcG9ydE1lZGlhUXVlcnlXYXJuaW5n
SWZOZWVkZWQoc2luZ2xlT3duZXJEb2N1bWVudCgpLCBkb3duY2FzdDxTdHlsZVJ1bGVNZWRpYT4o
cnVsZS5nZXQoKSkubWVkaWFRdWVyaWVzKCkpOwogCkBAIC0xNjQsNiArMTc1LDEyIEBAIFN0eWxl
UnVsZUJhc2UqIFN0eWxlU2hlZXRDb250ZW50czo6cnVsZUEKICAgICAgICAgcmV0dXJuIG1faW1w
b3J0UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0uZ2V0KCk7CiAKICAgICBjaGlsZFZlY3RvckluZGV4
IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOworICAgIAorICAgIGlmIChjaGlsZFZlY3RvckluZGV4
IDwgbV9uYW1lc3BhY2VSdWxlcy5zaXplKCkpCisgICAgICAgIHJldHVybiBtX25hbWVzcGFjZVJ1
bGVzW2NoaWxkVmVjdG9ySW5kZXhdLmdldCgpOworICAgIAorICAgIGNoaWxkVmVjdG9ySW5kZXgg
LT0gbV9uYW1lc3BhY2VSdWxlcy5zaXplKCk7CisgICAgCiAgICAgcmV0dXJuIG1fY2hpbGRSdWxl
c1tjaGlsZFZlY3RvckluZGV4XS5nZXQoKTsKIH0KIApAQCAtMTcxLDYgKzE4OCw3IEBAIHVuc2ln
bmVkIFN0eWxlU2hlZXRDb250ZW50czo6cnVsZUNvdW50KCkKIHsKICAgICB1bnNpZ25lZCByZXN1
bHQgPSAwOwogICAgIHJlc3VsdCArPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKKyAgICByZXN1bHQg
Kz0gbV9uYW1lc3BhY2VSdWxlcy5zaXplKCk7CiAgICAgcmVzdWx0ICs9IG1fY2hpbGRSdWxlcy5z
aXplKCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTE4Nyw2ICsyMDUsNyBAQCB2b2lkIFN0
eWxlU2hlZXRDb250ZW50czo6Y2xlYXJSdWxlcygpCiAgICAgICAgIG1faW1wb3J0UnVsZXNbaV0t
PmNsZWFyUGFyZW50U3R5bGVTaGVldCgpOwogICAgIH0KICAgICBtX2ltcG9ydFJ1bGVzLmNsZWFy
KCk7CisgICAgbV9uYW1lc3BhY2VSdWxlcy5jbGVhcigpOwogICAgIG1fY2hpbGRSdWxlcy5jbGVh
cigpOwogICAgIGNsZWFyQ2hhcnNldFJ1bGUoKTsKIH0KQEAgLTIyMSw2ICsyNDAsMzEgQEAgYm9v
bCBTdHlsZVNoZWV0Q29udGVudHM6OndyYXBwZXJJbnNlcnRSdQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKIAorICAg
IAorICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9uYW1lc3BhY2VSdWxlcy5zaXplKCkgfHwg
KGNoaWxkVmVjdG9ySW5kZXggPT0gbV9uYW1lc3BhY2VSdWxlcy5zaXplKCkgJiYgcnVsZS0+aXNO
YW1lc3BhY2VSdWxlKCkpKSB7CisgICAgICAgIC8vIEluc2VydGluZyBub24tbmFtZXNwYWNlIHJ1
bGVzIG90aGVyIHRoYW4gaW1wb3J0IHJ1bGUgYmVmb3JlIEBuYW1lc3BhY2UgaXMKKyAgICAgICAg
Ly8gbm90IGFsbG93ZWQuCisgICAgICAgIGlmICghaXM8U3R5bGVSdWxlTmFtZXNwYWNlPihydWxl
KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gSW5zZXJ0aW5nIEBuYW1l
c3BhY2UgcnVsZSB3aGVuIHJ1bGVzIG90aGVyIHRoYW4gaW1wb3J0L25hbWVzcGFjZS9jaGFyc2V0
CisgICAgICAgIC8vIGFyZSBwcmVzZW50IGlzIG5vdCBhbGxvd2VkLgorICAgICAgICBpZiAoIW1f
Y2hpbGRSdWxlcy5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IAorICAgICAgICBTdHlsZVJ1bGVOYW1lc3BhY2UmIG5hbWVzcGFjZVJ1bGUgPSBkb3duY2FzdDxT
dHlsZVJ1bGVOYW1lc3BhY2U+KHJ1bGUuZ2V0KCkpOworICAgICAgICBtX25hbWVzcGFjZVJ1bGVz
Lmluc2VydChpbmRleCwgZG93bmNhc3Q8U3R5bGVSdWxlTmFtZXNwYWNlPihydWxlLnB0cigpKSk7
CisgICAgICAgIAorICAgICAgICAvLyBGb3Igbm93IHRvIGJlIGNvbXBhdGlibGUgd2l0aCBJRSBh
bmQgRmlyZWZveCBpZiBhIG5hbWVzcGFjZSBydWxlIHdpdGggdGhlIHNhbWUKKyAgICAgICAgLy8g
cHJlZml4IGlzIGFkZGVkLCBpdCBvdmVyd3JpdGVzIHByZXZpb3VzIG9uZXMuCisgICAgICAgIC8v
IEZJWE1FOiBUaGUgZXZlbnR1YWwgY29ycmVjdCBiZWhhdmlvciB3b3VsZCBiZSB0byBlbnN1cmUg
dGhhdCB0aGUgbGFzdCB2YWx1ZSBpbgorICAgICAgICAvLyB0aGUgbGlzdCB3aW5zLgorICAgICAg
ICBwYXJzZXJBZGROYW1lc3BhY2UobmFtZXNwYWNlUnVsZS5wcmVmaXgoKSwgbmFtZXNwYWNlUnVs
ZS51cmkoKSk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoaXM8U3R5bGVS
dWxlTmFtZXNwYWNlPihydWxlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGNoaWxkVmVj
dG9ySW5kZXggLT0gbV9uYW1lc3BhY2VSdWxlcy5zaXplKCk7CisKICAgICAvLyBJZiB0aGUgbnVt
YmVyIG9mIHNlbGVjdG9ycyB3b3VsZCBvdmVyZmxvdyBSdWxlRGF0YSwgd2UgZHJvcCB0aGUgb3Bl
cmF0aW9uLgogICAgIGlmIChpczxTdHlsZVJ1bGU+KHJ1bGUpICYmIGRvd25jYXN0PFN0eWxlUnVs
ZT4ocnVsZS5nZXQoKSkuc2VsZWN0b3JMaXN0KCkuY29tcG9uZW50Q291bnQoKSA+IFJ1bGVEYXRh
OjptYXhpbXVtU2VsZWN0b3JDb21wb25lbnRDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpA
QCAtMjQyLDYgKzI4NiwxNCBAQCB2b2lkIFN0eWxlU2hlZXRDb250ZW50czo6d3JhcHBlckRlbGV0
ZVJ1CiAgICAgfQogICAgIGNoaWxkVmVjdG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7
CiAKKyAgICBpZiAoY2hpbGRWZWN0b3JJbmRleCA8IG1fbmFtZXNwYWNlUnVsZXMuc2l6ZSgpKSB7
CisgICAgICAgIGlmICghbV9jaGlsZFJ1bGVzLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgbV9uYW1lc3BhY2VSdWxlcy5yZW1vdmUoY2hpbGRWZWN0b3JJbmRleCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX25hbWVzcGFj
ZVJ1bGVzLnNpemUoKTsKKwogICAgIG1fY2hpbGRSdWxlcy5yZW1vdmUoY2hpbGRWZWN0b3JJbmRl
eCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVTaGVldENvbnRlbnRzLmgJKHJl
dmlzaW9uIDIwNzgzOSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVNoZWV0Q29udGVudHMu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsNyBAQCBjbGFzcyBOb2RlOwogY2xhc3MgU2Vj
dXJpdHlPcmlnaW47CiBjbGFzcyBTdHlsZVJ1bGVCYXNlOwogY2xhc3MgU3R5bGVSdWxlSW1wb3J0
OworY2xhc3MgU3R5bGVSdWxlTmFtZXNwYWNlOwogCiBjbGFzcyBTdHlsZVNoZWV0Q29udGVudHMg
ZmluYWwgOiBwdWJsaWMgUmVmQ291bnRlZDxTdHlsZVNoZWV0Q29udGVudHM+IHsKIHB1YmxpYzoK
QEAgLTEwNCw2ICsxMDUsNyBAQCBwdWJsaWM6CiAgICAgLy8gUnVsZXMgb3RoZXIgdGhhbiBAY2hh
cnNldCBhbmQgQGltcG9ydC4KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+
PiYgY2hpbGRSdWxlcygpIGNvbnN0IHsgcmV0dXJuIG1fY2hpbGRSdWxlczsgfQogICAgIGNvbnN0
IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxlSW1wb3J0Pj4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9pbXBvcnRSdWxlczsgfQorICAgIGNvbnN0IFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
TmFtZXNwYWNlPj4mIG5hbWVzcGFjZVJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lc3BhY2VS
dWxlczsgfQogCiAgICAgdm9pZCBub3RpZnlMb2FkZWRTaGVldChjb25zdCBDYWNoZWRDU1NTdHls
ZVNoZWV0Kik7CiAgICAgCkBAIC0xNTQsNiArMTU2LDcgQEAgcHJpdmF0ZToKIAogICAgIFN0cmlu
ZyBtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlOwogICAgIFZlY3RvcjxSZWZQdHI8U3R5bGVSdWxl
SW1wb3J0Pj4gbV9pbXBvcnRSdWxlczsKKyAgICBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZU5hbWVz
cGFjZT4+IG1fbmFtZXNwYWNlUnVsZXM7CiAgICAgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNl
Pj4gbV9jaGlsZFJ1bGVzOwogICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9taWNTdHJpbmcsIEF0b21p
Y1N0cmluZz4gUHJlZml4TmFtZXNwYWNlVVJJTWFwOwogICAgIFByZWZpeE5hbWVzcGFjZVVSSU1h
cCBtX25hbWVzcGFjZXM7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXIu
Y3BwCShyZXZpc2lvbiAyMDc4MzkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1Bh
cnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDkgKzY0LDExIEBACiAjaW5jbHVkZSAiQ1NT
UmVmbGVjdFZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUmV2ZXJ0VmFsdWUuaCIKICNpbmNsdWRlICJD
U1NTZWxlY3Rvci5oIgorI2luY2x1ZGUgIkNTU1NlbGVjdG9yUGFyc2VyLmgiCiAjaW5jbHVkZSAi
Q1NTU2hhZG93VmFsdWUuaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAi
Q1NTVGltaW5nRnVuY3Rpb25WYWx1ZS5oIgorI2luY2x1ZGUgIkNTU1Rva2VuaXplci5oIgogI2lu
Y2x1ZGUgIkNTU1VuaWNvZGVSYW5nZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTVW5zZXRWYWx1ZS5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKQEAgLTE0MTEsOCArMTQxMywxNCBAQCBD
b2xvciBDU1NQYXJzZXI6OnBhcnNlU3lzdGVtQ29sb3IoY29uc3QgCiAKIHZvaWQgQ1NTUGFyc2Vy
OjpwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5nLCBDU1NTZWxlY3Rvckxpc3QmIHNl
bGVjdG9yTGlzdCkKIHsKLSAgICBtX3NlbGVjdG9yTGlzdEZvclBhcnNlU2VsZWN0b3IgPSAmc2Vs
ZWN0b3JMaXN0OworICAgIGlmIChtX2NvbnRleHQudXNlTmV3UGFyc2VyICYmIG1fY29udGV4dC5t
b2RlICE9IFVBU2hlZXRNb2RlKSB7CisgICAgICAgIENTU1Rva2VuaXplcjo6U2NvcGUgc2NvcGUo
c3RyaW5nKTsKKyAgICAgICAgc2VsZWN0b3JMaXN0ID0gQ1NTU2VsZWN0b3JQYXJzZXI6OnBhcnNl
U2VsZWN0b3Ioc2NvcGUudG9rZW5SYW5nZSgpLCBtX2NvbnRleHQsIG51bGxwdHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQogCisgICAgbV9zZWxlY3Rvckxpc3RGb3JQYXJzZVNlbGVjdG9yID0g
JnNlbGVjdG9yTGlzdDsKKyAgICAKICAgICBzZXR1cFBhcnNlcigiQC13ZWJraXQtc2VsZWN0b3J7
Iiwgc3RyaW5nLCAifSIpOwogCiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvcGFyc2VyL0NTU1BhcnNlclZhbHVlcy5jcHAJKHJldmlzaW9uIDIwNzgz
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDEwLDcgKzQxMCwxMyBAQCB2b2lkIENTU1BhcnNlclNlbGVjdG9yOjpz
ZXRMYW5nQXJndW1lbnRMCiAgICAgICAgIGFyZ3VtZW50TGlzdC0+YXBwZW5kKGxhbmd1YWdlQXJn
dW1lbnQpOwogICAgIG1fc2VsZWN0b3ItPnNldExhbmdBcmd1bWVudExpc3QoV1RGTW92ZShhcmd1
bWVudExpc3QpKTsKIH0KLSAgICAKKyAgIAordm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0TGFu
Z0FyZ3VtZW50TGlzdChzdGQ6OnVuaXF1ZV9wdHI8VmVjdG9yPEF0b21pY1N0cmluZz4+IGFyZ3Vt
ZW50TGlzdCkKK3sKKyAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFhcmd1bWVudExpc3QtPmlzRW1w
dHkoKSwgIk5vIENTUyBTZWxlY3RvciB0YWtlcyBhbiBlbXB0eSBhcmd1bWVudCBsaXN0LiIpOwor
ICAgIG1fc2VsZWN0b3ItPnNldExhbmdBcmd1bWVudExpc3QoV1RGTW92ZShhcmd1bWVudExpc3Qp
KTsKK30KKwogdm9pZCBDU1NQYXJzZXJTZWxlY3Rvcjo6c2V0U2VsZWN0b3JMaXN0KHN0ZDo6dW5p
cXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9yTGlzdCkKIHsKICAgICBtX3NlbGVjdG9y
LT5zZXRTZWxlY3Rvckxpc3QoV1RGTW92ZShzZWxlY3Rvckxpc3QpKTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9wYXJzZXIvQ1NTUGFyc2VyVmFsdWVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaAkocmV2aXNpb24gMjA3ODM5KQor
KysgU291cmNlL1dlYkNvcmUvY3NzL3BhcnNlci9DU1NQYXJzZXJWYWx1ZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMjIyLDkgKzIyMiwxNSBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRyPENT
U1NlbGVjdG9yPiByZWxlYXNlU2VsZWN0b3IoKSB7IHJldHVybiBXVEZNb3ZlKG1fc2VsZWN0b3Ip
OyB9CiAKICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgbV9z
ZWxlY3Rvci0+c2V0VmFsdWUodmFsdWUpOyB9CisgICAgCisgICAgLy8gRklYTUUtTkVXUEFSU0VS
OiBUaGVzZSB0d28gbWV0aG9kcyBjYW4gZ28gYXdheSBvbmNlIG9sZCBwYXJzZXIgaXMgZ29uZS4K
ICAgICB2b2lkIHNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiB2YWx1ZSwgYm9vbCBp
c0Nhc2VJbnNlbnNpdGl2ZSkgeyBtX3NlbGVjdG9yLT5zZXRBdHRyaWJ1dGUodmFsdWUsIGlzQ2Fz
ZUluc2Vuc2l0aXZlKTsgfQotICAgIHZvaWQgc2V0QXJndW1lbnQoY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5zZXRBcmd1bWVudCh2YWx1ZSk7IH0KICAgICB2b2lkIHNl
dEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNlbnNpdGl2ZShib29sIGlzQ2FzZUluc2Vu
c2l0aXZlKSB7IG1fc2VsZWN0b3ItPnNldEF0dHJpYnV0ZVZhbHVlTWF0Y2hpbmdJc0Nhc2VJbnNl
bnNpdGl2ZShpc0Nhc2VJbnNlbnNpdGl2ZSk7IH0KKyAgICAKKyAgICB2b2lkIHNldEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiB2YWx1ZSwgYm9vbCBjb252ZXJ0VG9Mb3dlcmNhc2UsIENT
U1NlbGVjdG9yOjpBdHRyaWJ1dGVNYXRjaFR5cGUgdHlwZSkgeyBtX3NlbGVjdG9yLT5zZXRBdHRy
aWJ1dGUodmFsdWUsIGNvbnZlcnRUb0xvd2VyY2FzZSwgdHlwZSk7IH0KKyAgICAKKyAgICB2b2lk
IHNldEFyZ3VtZW50KGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUpIHsgbV9zZWxlY3Rvci0+c2V0
QXJndW1lbnQodmFsdWUpOyB9CisgICAgdm9pZCBzZXROdGgoaW50IGEsIGludCBiKSB7IG1fc2Vs
ZWN0b3ItPnNldE50aChhLCBiKTsgfQogICAgIHZvaWQgc2V0TWF0Y2goQ1NTU2VsZWN0b3I6Ok1h
dGNoIHZhbHVlKSB7IG1fc2VsZWN0b3ItPnNldE1hdGNoKHZhbHVlKTsgfQogICAgIHZvaWQgc2V0
UmVsYXRpb24oQ1NTU2VsZWN0b3I6OlJlbGF0aW9uVHlwZSB2YWx1ZSkgeyBtX3NlbGVjdG9yLT5z
ZXRSZWxhdGlvbih2YWx1ZSk7IH0KICAgICB2b2lkIHNldEZvclBhZ2UoKSB7IG1fc2VsZWN0b3It
PnNldEZvclBhZ2UoKTsgfQpAQCAtMjM1LDYgKzI0MSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQg
YWRvcHRTZWxlY3RvclZlY3RvcihWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVj
dG9yPj4mIHNlbGVjdG9yVmVjdG9yKTsKICAgICB2b2lkIHNldExhbmdBcmd1bWVudExpc3QoY29u
c3QgVmVjdG9yPENTU1BhcnNlclN0cmluZz4mIHN0cmluZ1ZlY3Rvcik7CisgICAgdm9pZCBzZXRM
YW5nQXJndW1lbnRMaXN0KHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8QXRvbWljU3RyaW5nPj4pOwog
ICAgIHZvaWQgc2V0U2VsZWN0b3JMaXN0KHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+
KTsKIAogICAgIHZvaWQgc2V0UHNldWRvQ2xhc3NWYWx1ZShjb25zdCBDU1NQYXJzZXJTdHJpbmcm
IHBzZXVkb0NsYXNzU3RyaW5nKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJzZXIvQ1NT
U2VsZWN0b3JQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9wYXJz
ZXIvQ1NTU2VsZWN0b3JQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDc4MzkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvcGFyc2VyL0NTU1NlbGVjdG9yUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTAwLDYgKzEwMCwyOCBAQCBDU1NTZWxlY3Rvckxpc3QgQ1NTU2VsZWN0b3JQYXJzZXI6OmNvbnN1
CiAgICAgcmV0dXJuIGxpc3Q7CiB9CiAKK3N0YXRpYyBib29sIGNvbnN1bWVMYW5nQXJndW1lbnRM
aXN0KHN0ZDo6dW5pcXVlX3B0cjxWZWN0b3I8QXRvbWljU3RyaW5nPj4mIGFyZ3VtZW50TGlzdCwg
Q1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCit7CisgICAgY29uc3QgQ1NTUGFyc2VyVG9rZW4m
IGlkZW50ID0gcmFuZ2UuY29uc3VtZUluY2x1ZGluZ1doaXRlc3BhY2UoKTsKKyAgICBpZiAoaWRl
bnQudHlwZSgpICE9IElkZW50VG9rZW4gJiYgaWRlbnQudHlwZSgpICE9IFN0cmluZ1Rva2VuKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgU3RyaW5nVmlldyBzdHJpbmcgPSBpZGVudC52YWx1
ZSgpOworICAgIGlmIChzdHJpbmcuc3RhcnRzV2l0aCgiLS0iKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIGFyZ3VtZW50TGlzdC0+YXBwZW5kKHN0cmluZy50b0F0b21pY1N0cmluZygpKTsK
KyAgICB3aGlsZSAoIXJhbmdlLmF0RW5kKCkgJiYgcmFuZ2UucGVlaygpLnR5cGUoKSA9PSBDb21t
YVRva2VuKSB7CisgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7Cisg
ICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBpZGVudCA9IHJhbmdlLmNvbnN1bWVJbmNsdWRp
bmdXaGl0ZXNwYWNlKCk7CisgICAgICAgIGlmIChpZGVudC50eXBlKCkgIT0gSWRlbnRUb2tlbiAm
JiBpZGVudC50eXBlKCkgIT0gU3RyaW5nVG9rZW4pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIFN0cmluZ1ZpZXcgc3RyaW5nID0gaWRlbnQudmFsdWUoKTsKKyAgICAgICAgaWYg
KHN0cmluZy5zdGFydHNXaXRoKCItLSIpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICBhcmd1bWVudExpc3QtPmFwcGVuZChzdHJpbmcudG9BdG9taWNTdHJpbmcoKSk7CisgICAg
fQorICAgIHJldHVybiByYW5nZS5hdEVuZCgpOworfQorCiBuYW1lc3BhY2UgewogCiBlbnVtIENv
bXBvdW5kU2VsZWN0b3JGbGFncyB7CkBAIC0yNTcsOCArMjc5LDYgQEAgc3RkOjp1bmlxdWVfcHRy
PENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZQogICAgICAgICBpZiAoY29tcG91bmRTZWxlY3Rvci0+
bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudCkKICAgICAgICAgICAgIGNvbXBv
dW5kUHNldWRvRWxlbWVudCA9IGNvbXBvdW5kU2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCk7
CiAgICAgfQotICAgIGlmIChtX2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpCi0gICAgICAgIGVsZW1l
bnROYW1lID0gZWxlbWVudE5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKTsKIAogICAgIHdo
aWxlIChzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IHNpbXBsZVNlbGVjdG9yID0g
Y29uc3VtZVNpbXBsZVNlbGVjdG9yKHJhbmdlKSkgewogICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTc0NwpAQCAtNDAwLDkgKzQyMCw2
IEBAIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTU2UKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CiAgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKIAotICAgIGlmICht
X2NvbnRleHQuaXNIVE1MRG9jdW1lbnQpCi0gICAgICAgIGF0dHJpYnV0ZU5hbWUgPSBhdHRyaWJ1
dGVOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCk7Ci0KICAgICBBdG9taWNTdHJpbmcgbmFt
ZXNwYWNlVVJJID0gZGV0ZXJtaW5lTmFtZXNwYWNlKG5hbWVzcGFjZVByZWZpeCk7CiAgICAgaWYg
KG5hbWVzcGFjZVVSSS5pc051bGwoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00MTQs
NyArNDMxLDcgQEAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZQogICAg
IHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gc2VsZWN0b3IgPSBzdGQ6OnVuaXF1
ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+KG5ldyBDU1NQYXJzZXJTZWxlY3RvcigpKTsKIAogICAg
IGlmIChibG9jay5hdEVuZCgpKSB7Ci0gICAgICAgIHNlbGVjdG9yLT5zZXRBdHRyaWJ1dGUocXVh
bGlmaWVkTmFtZSwgQ1NTU2VsZWN0b3I6OkNhc2VTZW5zaXRpdmUpOworICAgICAgICBzZWxlY3Rv
ci0+c2V0QXR0cmlidXRlKHF1YWxpZmllZE5hbWUsIG1fY29udGV4dC5pc0hUTUxEb2N1bWVudCwg
Q1NTU2VsZWN0b3I6OkNhc2VTZW5zaXRpdmUpOwogICAgICAgICBzZWxlY3Rvci0+c2V0TWF0Y2go
Q1NTU2VsZWN0b3I6OlNldCk7CiAgICAgICAgIHJldHVybiBzZWxlY3RvcjsKICAgICB9CkBAIC00
MjUsMTMgKzQ0Miw0OSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTUGFyc2VyU2VsZWN0b3I+IENTU1Nl
CiAgICAgaWYgKGF0dHJpYnV0ZVZhbHVlLnR5cGUoKSAhPSBJZGVudFRva2VuICYmIGF0dHJpYnV0
ZVZhbHVlLnR5cGUoKSAhPSBTdHJpbmdUb2tlbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgc2VsZWN0b3ItPnNldFZhbHVlKGF0dHJpYnV0ZVZhbHVlLnZhbHVlKCkudG9BdG9taWNTdHJp
bmcoKSk7Ci0gICAgc2VsZWN0b3ItPnNldEF0dHJpYnV0ZShxdWFsaWZpZWROYW1lLCBjb25zdW1l
QXR0cmlidXRlRmxhZ3MoYmxvY2spKTsKKyAgICAKKyAgICBzZWxlY3Rvci0+c2V0QXR0cmlidXRl
KHF1YWxpZmllZE5hbWUsIG1fY29udGV4dC5pc0hUTUxEb2N1bWVudCwgY29uc3VtZUF0dHJpYnV0
ZUZsYWdzKGJsb2NrKSk7CiAKICAgICBpZiAoIWJsb2NrLmF0RW5kKCkpCiAgICAgICAgIHJldHVy
biBudWxscHRyOwogICAgIHJldHVybiBzZWxlY3RvcjsKIH0KIAorc3RhdGljIGJvb2wgaXNQc2V1
ZG9DbGFzc0Z1bmN0aW9uKENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc1R5cGUgcHNldWRvQ2xhc3NU
eXBlKQoreworICAgIHN3aXRjaCAocHNldWRvQ2xhc3NUeXBlKSB7CisgICAgY2FzZSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3NOb3Q6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NN
YXRjaGVzOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoQ2hpbGQ6CisgICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOdGhMYXN0Q2hpbGQ6CisgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NOdGhPZlR5cGU6CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvQ2xhc3NOdGhMYXN0T2ZUeXBlOgorICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNz
TGFuZzoKKyAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0FueToKKyAgICBjYXNlIENT
U1NlbGVjdG9yOjpQc2V1ZG9DbGFzc0hvc3Q6CisjaWYgRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVW
RUw0CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NEaXI6CisgICAgY2FzZSBDU1NT
ZWxlY3Rvcjo6UHNldWRvQ2xhc3NSb2xlOgorI2VuZGlmCisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9
CisgICAgCitzdGF0aWMgYm9vbCBpc1BzZXVkb0VsZW1lbnRGdW5jdGlvbihDU1NTZWxlY3Rvcjo6
UHNldWRvRWxlbWVudFR5cGUgcHNldWRvRWxlbWVudFR5cGUpCit7CisgICAgc3dpdGNoIChwc2V1
ZG9FbGVtZW50VHlwZSkgeworICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWU6
CisgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNsb3R0ZWQ6CisgICAgICAgIHJl
dHVybiB0cnVlOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKIHN0ZDo6dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4gQ1NTU2Vs
ZWN0b3JQYXJzZXI6OmNvbnN1bWVQc2V1ZG8oQ1NTUGFyc2VyVG9rZW5SYW5nZSYgcmFuZ2UpCiB7
CiAgICAgQVNTRVJUKHJhbmdlLnBlZWsoKS50eXBlKCkgPT0gQ29sb25Ub2tlbik7CkBAIC00NTks
NyArNTEyLDggQEAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBDU1NTZQogCiAg
ICAgaWYgKHRva2VuLnR5cGUoKSA9PSBJZGVudFRva2VuKSB7CiAgICAgICAgIHJhbmdlLmNvbnN1
bWUoKTsKLSAgICAgICAgaWYgKChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudCAmJiBzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rv
cjo6UHNldWRvRWxlbWVudFVua25vd24pIHx8IChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvQ2xhc3MgJiYgc2VsZWN0b3ItPnBzZXVkb0NsYXNzVHlwZSgpID09IENTU1Nl
bGVjdG9yOjpQc2V1ZG9DbGFzc1Vua25vd24pKQorICAgICAgICBpZiAoKHNlbGVjdG9yLT5tYXRj
aCgpID09IENTU1NlbGVjdG9yOjpQc2V1ZG9FbGVtZW50ICYmIChzZWxlY3Rvci0+cHNldWRvRWxl
bWVudFR5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFVua25vd24gfHwgaXNQc2V1
ZG9FbGVtZW50RnVuY3Rpb24oc2VsZWN0b3ItPnBzZXVkb0VsZW1lbnRUeXBlKCkpKSkKKyAgICAg
ICAgICAgIHx8IChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3Mg
JiYgKHNlbGVjdG9yLT5wc2V1ZG9DbGFzc1R5cGUoKSA9PSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NVbmtub3duIHx8IGlzUHNldWRvQ2xhc3NGdW5jdGlvbihzZWxlY3Rvci0+cHNldWRvQ2xhc3NU
eXBlKCkpKSkpCiAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICAgICAgcmV0dXJuIHNl
bGVjdG9yOwogICAgIH0KQEAgLTQ2OSw3NyArNTIzLDExMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+IENTU1NlCiAgICAgaWYgKHRva2VuLnR5cGUoKSAhPSBGdW5jdGlvblRv
a2VuKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAotICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBz
ZXVkb0NsYXNzVHlwZSgpKSB7Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NOb3Q6
IHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVjdG9yPiBpbm5lclNlbGVj
dG9yID0gY29uc3VtZUNvbXBvdW5kU2VsZWN0b3IoYmxvY2spOwotICAgICAgICBibG9jay5jb25z
dW1lV2hpdGVzcGFjZSgpOwotICAgICAgICBpZiAoIWlubmVyU2VsZWN0b3IgfHwgIWJsb2NrLmF0
RW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxDU1NQYXJzZXJTZWxlY3Rvcj4+IHNlbGVjdG9yVmVjdG9yOwotICAgICAgICBz
ZWxlY3RvclZlY3Rvci5hcHBlbmQoV1RGTW92ZShpbm5lclNlbGVjdG9yKSk7Ci0gICAgICAgIHNl
bGVjdG9yLT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKLSAgICAgICAgcmV0
dXJuIHNlbGVjdG9yOwotICAgIH0KLSAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFzc050
aENoaWxkOgotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdENoaWxkOgot
ICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoT2ZUeXBlOgotICAgIGNhc2UgQ1NT
U2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoTGFzdE9mVHlwZTogewotICAgICAgICBzdGQ6OnBhaXI8
aW50LCBpbnQ+IGFiOwotICAgICAgICBpZiAoIWNvbnN1bWVBTlBsdXNCKGJsb2NrLCBhYikpCi0g
ICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAgICAgYmxvY2suY29uc3VtZVdoaXRlc3Bh
Y2UoKTsKLSAgICAgICAgaWYgKCFibG9jay5hdEVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51
bGxwdHI7Ci0gICAgICAgIHNlbGVjdG9yLT5zZXRBcmd1bWVudChBdG9taWNTdHJpbmc6Om51bWJl
cihhYi5maXJzdCAqIGFiLnNlY29uZCkpOwotICAgICAgICByZXR1cm4gc2VsZWN0b3I7Ci0gICAg
fQotICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTGFuZzogewotICAgICAgICAvLyBG
SVhNRTogQ1NTIFNlbGVjdG9ycyBMZXZlbCA0IGFsbG93cyA6bGFuZygqLWZvbykKLSAgICAgICAg
Y29uc3QgQ1NTUGFyc2VyVG9rZW4mIGlkZW50ID0gYmxvY2suY29uc3VtZUluY2x1ZGluZ1doaXRl
c3BhY2UoKTsKLSAgICAgICAgaWYgKGlkZW50LnR5cGUoKSAhPSBJZGVudFRva2VuIHx8ICFibG9j
ay5hdEVuZCgpKQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgICAgIHNlbGVjdG9y
LT5zZXRBcmd1bWVudChpZGVudC52YWx1ZSgpLnRvQXRvbWljU3RyaW5nKCkpOwotICAgICAgICBy
ZXR1cm4gc2VsZWN0b3I7Ci0gICAgfQotICAgIC8vIEZJWE1FLU5FV1BBUlNFUjogU3VwcG9ydCA6
aG9zdC1jb250ZXh0Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NBbnk6Ci0gICAg
Y2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NIb3N0OiB7Ci0gICAgICAgIERpc2FsbG93UHNl
dWRvRWxlbWVudHNTY29wZSBzY29wZSh0aGlzKTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENT
U1NlbGVjdG9yTGlzdD4gc2VsZWN0b3JMaXN0ID0gc3RkOjp1bmlxdWVfcHRyPENTU1NlbGVjdG9y
TGlzdD4obmV3IENTU1NlbGVjdG9yTGlzdCgpKTsKLSAgICAgICAgKnNlbGVjdG9yTGlzdCA9IGNv
bnN1bWVDb21wb3VuZFNlbGVjdG9yTGlzdChibG9jayk7Ci0gICAgICAgIGlmICghc2VsZWN0b3JM
aXN0LT5pc1ZhbGlkKCkgfHwgIWJsb2NrLmF0RW5kKCkpCi0gICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAgICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZNb3ZlKHNlbGVjdG9y
TGlzdCkpOwotICAgICAgICByZXR1cm4gc2VsZWN0b3I7Ci0gICAgfQotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KKyAgICBpZiAoc2VsZWN0b3ItPm1hdGNoKCkgPT0gQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzKSB7CisgICAgICAgIHN3aXRjaCAoc2VsZWN0b3ItPnBzZXVkb0Ns
YXNzVHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTm90OiB7
CisgICAgICAgICAgICBEaXNhbGxvd1BzZXVkb0VsZW1lbnRzU2NvcGUgc2NvcGUodGhpcyk7Cisg
ICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PiBzZWxlY3Rvckxpc3Qg
PSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PihuZXcgQ1NTU2VsZWN0b3JMaXN0KCkp
OworICAgICAgICAgICAgKnNlbGVjdG9yTGlzdCA9IGNvbnN1bWVDb21wbGV4U2VsZWN0b3JMaXN0
KGJsb2NrKTsKKyAgICAgICAgICAgIGlmICghc2VsZWN0b3JMaXN0LT5jb21wb25lbnRDb3VudCgp
IHx8ICFibG9jay5hdEVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAg
ICAgICAgICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZNb3ZlKHNlbGVjdG9yTGlzdCkp
OworICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yOworICAgICAgICB9CisgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzTnRoQ2hpbGQ6CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0
b3I6OlBzZXVkb0NsYXNzTnRoTGFzdENoaWxkOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc050aE9mVHlwZToKKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xh
c3NOdGhMYXN0T2ZUeXBlOiB7CisgICAgICAgICAgICBzdGQ6OnBhaXI8aW50LCBpbnQ+IGFiOwor
ICAgICAgICAgICAgaWYgKCFjb25zdW1lQU5QbHVzQihibG9jaywgYWIpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOworICAgICAgICAgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2Uo
KTsKKyAgICAgICAgICAgIGlmICghYmxvY2suYXRFbmQoKSkgeworICAgICAgICAgICAgICAgIGlm
IChibG9jay5wZWVrKCkudHlwZSgpICE9IElkZW50VG9rZW4pCisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBp
ZGVudCA9IGJsb2NrLmNvbnN1bWUoKTsKKyAgICAgICAgICAgICAgICBpZiAoIWVxdWFsSWdub3Jp
bmdBU0NJSUNhc2UoaWRlbnQudmFsdWUoKSwgIm9mIikpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgICAgIERpc2FsbG93UHNldWRvRWxlbWVudHNTY29w
ZSBzY29wZSh0aGlzKTsKKyAgICAgICAgICAgICAgICBibG9jay5jb25zdW1lV2hpdGVzcGFjZSgp
OworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVj
dG9yTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+KG5ldyBDU1NTZWxlY3Rv
ckxpc3QoKSk7CisgICAgICAgICAgICAgICAgKnNlbGVjdG9yTGlzdCA9IGNvbnN1bWVDb21wbGV4
U2VsZWN0b3JMaXN0KGJsb2NrKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlbGVjdG9yTGlzdC0+
Y29tcG9uZW50Q291bnQoKSB8fCAhYmxvY2suYXRFbmQoKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgICAgICAgICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlz
dChXVEZNb3ZlKHNlbGVjdG9yTGlzdCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2Vs
ZWN0b3ItPnNldE50aChhYi5maXJzdCwgYWIuc2Vjb25kKTsKKyAgICAgICAgICAgIHJldHVybiBz
ZWxlY3RvcjsKKyAgICAgICAgfQorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9DbGFz
c0xhbmc6IHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBDU1MgU2VsZWN0b3JzIExldmVsIDQgYWxs
b3dzIDpsYW5nKCotZm9vKQorICAgICAgICAgICAgYXV0byBhcmd1bWVudExpc3QgPSBzdGQ6Om1h
a2VfdW5pcXVlPFZlY3RvcjxBdG9taWNTdHJpbmc+PigpOworICAgICAgICAgICAgaWYgKCFjb25z
dW1lTGFuZ0FyZ3VtZW50TGlzdChhcmd1bWVudExpc3QsIGJsb2NrKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIHNlbGVjdG9yLT5zZXRMYW5nQXJndW1lbnRM
aXN0KFdURk1vdmUoYXJndW1lbnRMaXN0KSk7CisgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3I7
CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNldWRvQ2xhc3NNYXRjaGVz
OiB7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PiBzZWxlY3Rv
ckxpc3QgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PihuZXcgQ1NTU2VsZWN0b3JM
aXN0KCkpOworICAgICAgICAgICAgKnNlbGVjdG9yTGlzdCA9IGNvbnN1bWVDb21wbGV4U2VsZWN0
b3JMaXN0KGJsb2NrKTsKKyAgICAgICAgICAgIGlmICghc2VsZWN0b3JMaXN0LT5jb21wb25lbnRD
b3VudCgpIHx8ICFibG9jay5hdEVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBudWxscHRy
OworICAgICAgICAgICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZNb3ZlKHNlbGVjdG9y
TGlzdCkpOworICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yOworICAgICAgICB9CisgICAgICAg
IC8vIEZJWE1FLU5FV1BBUlNFUjogU3VwcG9ydCA6aG9zdC1jb250ZXh0CisgICAgICAgIGNhc2Ug
Q1NTU2VsZWN0b3I6OlBzZXVkb0NsYXNzQW55OgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQ
c2V1ZG9DbGFzc0hvc3Q6IHsKKyAgICAgICAgICAgIERpc2FsbG93UHNldWRvRWxlbWVudHNTY29w
ZSBzY29wZSh0aGlzKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxp
c3Q+IHNlbGVjdG9yTGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+KG5ldyBD
U1NTZWxlY3Rvckxpc3QoKSk7CisgICAgICAgICAgICAqc2VsZWN0b3JMaXN0ID0gY29uc3VtZUNv
bXBvdW5kU2VsZWN0b3JMaXN0KGJsb2NrKTsKKyAgICAgICAgICAgIGlmICghc2VsZWN0b3JMaXN0
LT5jb21wb25lbnRDb3VudCgpIHx8ICFibG9jay5hdEVuZCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICAgICAgc2VsZWN0b3ItPnNldFNlbGVjdG9yTGlzdChXVEZN
b3ZlKHNlbGVjdG9yTGlzdCkpOworICAgICAgICAgICAgcmV0dXJuIHNlbGVjdG9yOworICAgICAg
ICB9CisjaWYgRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0CisgICAgICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0NsYXNzRGlyOgorICAgICAgICBjYXNlIENTU1NlbGVjdG9yOjpQc2V1ZG9D
bGFzc1JvbGU6IHsKKyAgICAgICAgICAgIGNvbnN0IENTU1BhcnNlclRva2VuJiBpZGVudCA9IGJs
b2NrLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNlKCk7CisgICAgICAgICAgICBpZiAoaWRlbnQu
dHlwZSgpICE9IElkZW50VG9rZW4pCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgICAgICAgICBzZWxlY3Rvci0+c2V0QXJndW1lbnQoaWRlbnQudmFsdWUoKS50b0F0b21pY1N0
cmluZygpKTsKKyAgICAgICAgICAgIHJldHVybiBzZWxlY3RvcjsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAg
c3dpdGNoIChzZWxlY3Rvci0+cHNldWRvRWxlbWVudFR5cGUoKSkgewotICAgIGNhc2UgQ1NTU2Vs
ZWN0b3I6OlBzZXVkb0VsZW1lbnRDdWU6IHsKLSAgICAgICAgRGlzYWxsb3dQc2V1ZG9FbGVtZW50
c1Njb3BlIHNjb3BlKHRoaXMpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JM
aXN0PiBzZWxlY3Rvckxpc3QgPSBzdGQ6OnVuaXF1ZV9wdHI8Q1NTU2VsZWN0b3JMaXN0PihuZXcg
Q1NTU2VsZWN0b3JMaXN0KCkpOwotICAgICAgICAqc2VsZWN0b3JMaXN0ID0gY29uc3VtZUNvbXBv
dW5kU2VsZWN0b3JMaXN0KGJsb2NrKTsKLSAgICAgICAgaWYgKCFzZWxlY3Rvckxpc3QtPmlzVmFs
aWQoKSB8fCAhYmxvY2suYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAg
ICAgICBzZWxlY3Rvci0+c2V0U2VsZWN0b3JMaXN0KFdURk1vdmUoc2VsZWN0b3JMaXN0KSk7Ci0g
ICAgICAgIHJldHVybiBzZWxlY3RvcjsKICAgICB9Ci0gICAgY2FzZSBDU1NTZWxlY3Rvcjo6UHNl
dWRvRWxlbWVudFNsb3R0ZWQ6IHsKLSAgICAgICAgRGlzYWxsb3dQc2V1ZG9FbGVtZW50c1Njb3Bl
IHNjb3BlKHRoaXMpOworICAgIAorICAgIGlmIChzZWxlY3Rvci0+bWF0Y2goKSA9PSBDU1NTZWxl
Y3Rvcjo6UHNldWRvRWxlbWVudCkgeworICAgICAgICBzd2l0Y2ggKHNlbGVjdG9yLT5wc2V1ZG9F
bGVtZW50VHlwZSgpKSB7CisgICAgICAgIGNhc2UgQ1NTU2VsZWN0b3I6OlBzZXVkb0VsZW1lbnRD
dWU6IHsKKyAgICAgICAgICAgIERpc2FsbG93UHNldWRvRWxlbWVudHNTY29wZSBzY29wZSh0aGlz
KTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+IHNlbGVjdG9y
TGlzdCA9IHN0ZDo6dW5pcXVlX3B0cjxDU1NTZWxlY3Rvckxpc3Q+KG5ldyBDU1NTZWxlY3Rvckxp
c3QoKSk7CisgICAgICAgICAgICAqc2VsZWN0b3JMaXN0ID0gY29uc3VtZUNvbXBvdW5kU2VsZWN0
b3JMaXN0KGJsb2NrKTsKKyAgICAgICAgICAgIGlmICghc2VsZWN0b3JMaXN0LT5pc1ZhbGlkKCkg
fHwgIWJsb2NrLmF0RW5kKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgICAgICBzZWxlY3Rvci0+c2V0U2VsZWN0b3JMaXN0KFdURk1vdmUoc2VsZWN0b3JMaXN0KSk7
CisgICAgICAgICAgICByZXR1cm4gc2VsZWN0b3I7CisgICAgICAgIH0KKyAgICAgICAgY2FzZSBD
U1NTZWxlY3Rvcjo6UHNldWRvRWxlbWVudFNsb3R0ZWQ6IHsKKyAgICAgICAgICAgIERpc2FsbG93
UHNldWRvRWxlbWVudHNTY29wZSBzY29wZSh0aGlzKTsKIAotICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8Q1NTUGFyc2VyU2VsZWN0b3I+IGlubmVyU2VsZWN0b3IgPSBjb25zdW1lQ29tcG91bmRTZWxl
Y3RvcihibG9jayk7Ci0gICAgICAgIGJsb2NrLmNvbnN1bWVXaGl0ZXNwYWNlKCk7Ci0gICAgICAg
IGlmICghaW5uZXJTZWxlY3RvciB8fCAhYmxvY2suYXRFbmQoKSkKLSAgICAgICAgICAgIHJldHVy
biBudWxscHRyOwotICAgICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPENTU1BhcnNlclNlbGVj
dG9yPj4gc2VsZWN0b3JWZWN0b3I7Ci0gICAgICAgIHNlbGVjdG9yVmVjdG9yLmFwcGVuZChXVEZN
b3ZlKGlubmVyU2VsZWN0b3IpKTsKLSAgICAgICAgc2VsZWN0b3ItPmFkb3B0U2VsZWN0b3JWZWN0
b3Ioc2VsZWN0b3JWZWN0b3IpOwotICAgICAgICByZXR1cm4gc2VsZWN0b3I7Ci0gICAgfQotICAg
IGRlZmF1bHQ6Ci0gICAgICAgIGJyZWFrOworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPENT
U1BhcnNlclNlbGVjdG9yPiBpbm5lclNlbGVjdG9yID0gY29uc3VtZUNvbXBvdW5kU2VsZWN0b3Io
YmxvY2spOworICAgICAgICAgICAgYmxvY2suY29uc3VtZVdoaXRlc3BhY2UoKTsKKyAgICAgICAg
ICAgIGlmICghaW5uZXJTZWxlY3RvciB8fCAhYmxvY2suYXRFbmQoKSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8Q1NT
UGFyc2VyU2VsZWN0b3I+PiBzZWxlY3RvclZlY3RvcjsKKyAgICAgICAgICAgIHNlbGVjdG9yVmVj
dG9yLmFwcGVuZChXVEZNb3ZlKGlubmVyU2VsZWN0b3IpKTsKKyAgICAgICAgICAgIHNlbGVjdG9y
LT5hZG9wdFNlbGVjdG9yVmVjdG9yKHNlbGVjdG9yVmVjdG9yKTsKKyAgICAgICAgICAgIHJldHVy
biBzZWxlY3RvcjsKKyAgICAgICAgfQorICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTU2NCw2ICs2
NTIsMTMgQEAgQ1NTU2VsZWN0b3I6OlJlbGF0aW9uVHlwZSBDU1NTZWxlY3RvclBhcgogICAgICAg
ICAgICAgcmV0dXJuIENTU1NlbGVjdG9yOjpEaXJlY3RBZGphY2VudDsKICAgICAgICAgaWYgKGRl
bGltaXRlciA9PSAnficpCiAgICAgICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkluZGlyZWN0
QWRqYWNlbnQ7CisjaWYgRU5BQkxFX0NTU19TRUxFQ1RPUlNfTEVWRUw0CisgICAgICAgIC8vIEZJ
WE1FLU5FV1BBUlNFUjogTmVlZCB0byBzZXQgdGhhdCB0aGlzIHdhcyBhID4+IHNvIHNlcmlhbGl6
YXRpb24gaXMgY29ycmVjdAorICAgICAgICBpZiAoZGVsaW1pdGVyID09ICc+JyAmJiByYW5nZS5w
ZWVrKCkudHlwZSgpID09IERlbGltaXRlclRva2VuICYmIHJhbmdlLnBlZWsoKS5kZWxpbWl0ZXIo
KSA9PSAnPicpIHsKKyAgICAgICAgICAgIHJhbmdlLmNvbnN1bWVJbmNsdWRpbmdXaGl0ZXNwYWNl
KCk7CisgICAgICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkRlc2NlbmRhbnQ7CisgICAgICAg
IH0KKyNlbmRpZgogICAgICAgICByZXR1cm4gQ1NTU2VsZWN0b3I6OkNoaWxkOwogICAgIH0KIAo=
</data>
<flag name="review"
          id="315817"
          type_id="1"
          status="+"
          setter="zalan"
    />
          </attachment>
      

    </bug>

</bugzilla>