<?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>94909</bug_id>
          
          <creation_ts>2012-08-24 00:17:20 -0700</creation_ts>
          <short_desc>[V8] V8DOMWindowShell could use some cleanup</short_desc>
          <delta_ts>2012-09-10 10:33:27 -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>New Bugs</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>
          <dependson>95120</dependson>
    
    <dependson>95122</dependson>
    
    <dependson>95124</dependson>
    
    <dependson>95126</dependson>
    
    <dependson>95130</dependson>
    
    <dependson>95132</dependson>
    
    <dependson>95133</dependson>
    
    <dependson>95145</dependson>
    
    <dependson>95147</dependson>
    
    <dependson>95151</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Adam Barth">abarth</assigned_to>
          <cc>eric</cc>
    
    <cc>haraken</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>703843</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-24 00:17:20 -0700</bug_when>
    <thetext>[V8] V8DOMWindowShell could use some cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703844</commentid>
    <comment_count>1</comment_count>
      <attachid>160350</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-24 00:18:01 -0700</bug_when>
    <thetext>Created attachment 160350
Work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703845</commentid>
    <comment_count>2</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-08-24 00:18:20 -0700</bug_when>
    <thetext>This patch probably tries to do too much at once.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>703854</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-08-24 00:39:37 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; This patch probably tries to do too much at once.

Yeah.  But a bunch of good ideas here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>716239</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-09-10 10:33:27 -0700</bug_when>
    <thetext>There&apos;s always more we can do here, but let&apos;s close this bug for now and deal with other improvements separately.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>160350</attachid>
            <date>2012-08-24 00:18:01 -0700</date>
            <delta_ts>2012-08-24 00:18:01 -0700</delta_ts>
            <desc>Work in progress</desc>
            <filename>bug-94909-20120824001757.patch</filename>
            <type>text/plain</type>
            <size>35588</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI2NDg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjcxZTllYzQxZGMyMDI4
OWM4MWZjMTUxMDAzMWRkZTI1MGIwMzc0My4uYjcxOWM0ZjlmNTlhODVmZWQxNDdjNmFiOGJmMmQz
ZWM4OTc3N2QwZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEyLTA4LTI0ICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1Y4XSBWOERPTVdpbmRvd1No
ZWxsIGNvdWxkIHVzZSBzb21lIGNsZWFudXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTk0OTA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgQWRkaXRpb25hbCBpbmZvcm1hdGlvbiBvZiB0aGUgY2hhbmdlIHN1
Y2ggYXMgYXBwcm9hY2gsIHJhdGlvbmFsZS4gUGxlYXNlIGFkZCBwZXItZnVuY3Rpb24gZGVzY3Jp
cHRpb25zIGJlbG93IChPT1BTISkuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIChPT1BTISkuCisK
KyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JWOC5wbToKKyAgICAgICAg
KEdlbmVyYXRlVG9WOENvbnZlcnRlcnMpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVz
dC9WOC9WOFRlc3RBY3RpdmVET01PYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VjhUZXN0
QWN0aXZlRE9NT2JqZWN0Ojp3cmFwU2xvdyk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVyOjpldmFs
dWF0ZUluSXNvbGF0ZWRXb3JsZCk6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHRDb250cm9sbGVy
OjptYWluV29ybGRDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcmlwdENvbnRyb2xsZXI6
Om1hdGNoZXNDdXJyZW50Q29udGV4dCk6CisgICAgICAgICogYmluZGluZ3MvdjgvVjhET01XaW5k
b3dTaGVsbC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRGYXRhbEVycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnJlcG9ydFVuY2F1Z2h0RXhjZXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmRGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXBvcnRVbnNhZmVKYXZhU2NyaXB0QWNj
ZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OmluaXRpYWxpemVWOElmTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OmNoZWNrRG9jdW1lbnRXcmFwcGVyKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aXNDb250ZXh0SW5pdGlhbGl6ZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6ZGlzcG9zZUNvbnRleHQpOgorICAg
ICAgICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6Y2xlYXJGb3JDbG9zZSk6CisgICAgICAg
IChXZWJDb3JlOjpWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZvck5hdmlnYXRpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6VjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlY4RE9NV2luZG93U2hlbGw6OmluaXRpYWxpemVDb250ZXh0KToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmg6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFY4RE9NV2luZG93U2hlbGwpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXb3JrZXJDb250
ZXh0RXhlY3V0aW9uUHJveHk6OmluaXRpYWxpemVJZk5lZWRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHk6OmV2YWx1YXRlKToKKyAgICAgICAgKiBiaW5k
aW5ncy92OC9Xb3JrZXJDb250ZXh0RXhlY3V0aW9uUHJveHkuaDoKKyAgICAgICAgKFdvcmtlckNv
bnRleHRFeGVjdXRpb25Qcm94eSk6CisKIDIwMTItMDgtMjMgIEFkYW0gQmFydGggIDxhYmFydGhA
d2Via2l0Lm9yZz4KIAogICAgICAgICBbVjhdIEltcHJvdmUgdGhlIGRldmVsb3BlciBlcmdvbm9t
aWNzIG9mIFNjb3BlZFBlcnNpc3RlbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvclY4LnBtIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9yVjgucG0KaW5kZXggNTk2OWQyZDQ3N2U0MjQ1NjM1YjI1YmNi
YzcwNmY2Zjc4Y2M3MjI1MS4uNDE3YjAxNDJhNzQ2NzFhYTFiNDg4ZDY2ZDNiYTU1YjBhMzBkMWJj
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy9Db2RlR2VuZXJh
dG9yVjgucG0KQEAgLTMzNjgsOCArMzM2OCw4IEBAIEVORAogCiAgICAgaWYgKElzU3ViVHlwZSgk
ZGF0YU5vZGUsICJEb2N1bWVudCIpKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVO
RCk7Ci0gICAgaWYgKGZyYW1lICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+Y29u
dGV4dCgpLklzRW1wdHkoKSAmJiBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmluaXRD
b250ZXh0SWZOZWVkZWQoKSkgewotICAgICAgICAvLyBpbml0Q29udGV4dElmTmVlZGVkIG1heSBo
YXZlIGNyZWF0ZWQgYSB3cmFwcGVyIGZvciB0aGUgb2JqZWN0LCByZXRyeSBmcm9tIHRoZSBzdGFy
dC4KKyAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgpLT5jb250
ZXh0KCkuSXNFbXB0eSgpICYmIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdGlh
bGl6ZUlmTmVlZGVkKCkpIHsKKyAgICAgICAgLy8gaW5pdGlhbGl6ZUlmTmVlZGVkIG1heSBoYXZl
IGNyZWF0ZWQgYSB3cmFwcGVyIGZvciB0aGUgb2JqZWN0LCByZXRyeSBmcm9tIHRoZSBzdGFydC4K
ICAgICAgICAgcmV0dXJuICR7Y2xhc3NOYW1lfTo6d3JhcChpbXBsLmdldCgpLCBpc29sYXRlKTsK
ICAgICB9CiBFTkQKQEAgLTMzODMsNyArMzM4Myw3IEBAIEVORAogICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgPDxFTkQpOwogICAgIGlmIChpbXBsLT5mcmFtZSgpKSB7CiAgICAgICAgIGZyYW1l
ID0gaW1wbC0+ZnJhbWUoKTsKLSAgICAgICAgZnJhbWUtPnNjcmlwdCgpLT53aW5kb3dTaGVsbCgp
LT5pbml0Q29udGV4dElmTmVlZGVkKCk7CisgICAgICAgIGZyYW1lLT5zY3JpcHQoKS0+d2luZG93
U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7CiAgICAgfQogRU5ECiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Y4L1Y4VGVzdEFjdGl2
ZURPTU9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgv
VjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAppbmRleCAyMzg3MmU5NjExMDA2YTNmZjE2YjQ1OWVi
MTIyMDc0OThjZGJjYjQyLi40OGNlYjFjNDIyZmEwMjA5NDZmMWJjN2NlN2NlYTE2ZGI5NGYzMDZl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvVjgvVjhU
ZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvVjgvVjhUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcApAQCAtMTgzLDcgKzE4Myw3IEBA
IHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gVjhUZXN0QWN0aXZlRE9NT2JqZWN0Ojp3cmFwU2xvdyhQ
YXNzUmVmUHRyPFRlc3RBY3RpdmVET01PCiAgICAgRnJhbWUqIGZyYW1lID0gMDsKICAgICBpZiAo
aW1wbC0+ZnJhbWUoKSkgewogICAgICAgICBmcmFtZSA9IGltcGwtPmZyYW1lKCk7Ci0gICAgICAg
IGZyYW1lLT5zY3JpcHQoKS0+d2luZG93U2hlbGwoKS0+aW5pdENvbnRleHRJZk5lZWRlZCgpOwor
ICAgICAgICBmcmFtZS0+c2NyaXB0KCktPndpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRl
ZCgpOwogICAgIH0KIAogICAgIC8vIEVudGVyIHRoZSBub2RlJ3MgY29udGV4dCBhbmQgY3JlYXRl
IHRoZSB3cmFwcGVyIGluIHRoYXQgY29udGV4dC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3Y4L1NjcmlwdENvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvdjgvU2NyaXB0Q29udHJvbGxlci5jcHAKaW5kZXggMWZiMzZiMzc0NzE3Y2VkZDFhMTQ5OGQ4
ZmZkNmI3NjY0YTUwMzM1Ni4uMWY5ZWJlNTM0OTM3M2ZjNmYwMzg4YmY0YjcxYTJkNTc5MzVlNmRm
NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0Q29udHJvbGxlci5j
cHAKQEAgLTMzMyw3ICszMzMsNyBAQCB2b2lkIFNjcmlwdENvbnRyb2xsZXI6OmV2YWx1YXRlSW5J
c29sYXRlZFdvcmxkKHVuc2lnbmVkIHdvcmxkSUQsIGNvbnN0IFZlY3RvcjxTYwogICAgIHY4OjpI
YW5kbGVTY29wZSBoYW5kbGVTY29wZTsKIAogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgbmVlZCB0
byBnZXQgcmVvcmdhbml6ZWQgb25jZSB3ZSBoYXZlIGEgd2luZG93U2hlbGwgZm9yIHRoZSBpc29s
YXRlZCB3b3JsZC4KLSAgICBpZiAoIXdpbmRvd1NoZWxsKCktPmluaXRDb250ZXh0SWZOZWVkZWQo
KSkKKyAgICBpZiAoIXdpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpKQogICAgICAg
ICByZXR1cm47CiAKICAgICB2ODo6TG9jYWw8djg6OkFycmF5PiB2OFJlc3VsdHM7CkBAIC00MjMs
NyArNDIzLDcgQEAgdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBTY3JpcHRDb250cm9sbGVyOjpjdXJy
ZW50V29ybGRDb250ZXh0KCkKIAogdjg6OkxvY2FsPHY4OjpDb250ZXh0PiBTY3JpcHRDb250cm9s
bGVyOjptYWluV29ybGRDb250ZXh0KCkKIHsKLSAgICB3aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4
dElmTmVlZGVkKCk7CisgICAgd2luZG93U2hlbGwoKS0+aW5pdGlhbGl6ZUlmTmVlZGVkKCk7CiAg
ICAgcmV0dXJuIHY4OjpMb2NhbDx2ODo6Q29udGV4dD46Ok5ldyh3aW5kb3dTaGVsbCgpLT5jb250
ZXh0KCkpOwogfQogCkBAIC00NDcsNyArNDQ3LDcgQEAgYm9vbCBTY3JpcHRDb250cm9sbGVyOjpt
YXRjaGVzQ3VycmVudENvbnRleHQoKQogICAgICAgICBpZiAobV9mcmFtZSAhPSB0b0ZyYW1lSWZO
b3REZXRhY2hlZChjb250ZXh0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9IGVs
c2UgewotICAgICAgICB3aW5kb3dTaGVsbCgpLT5pbml0Q29udGV4dElmTmVlZGVkKCk7CisgICAg
ICAgIHdpbmRvd1NoZWxsKCktPmluaXRpYWxpemVJZk5lZWRlZCgpOwogICAgICAgICBjb250ZXh0
ID0gd2luZG93U2hlbGwoKS0+Y29udGV4dCgpOwogICAgIH0KICAgICByZXR1cm4gY29udGV4dCA9
PSB2ODo6Q29udGV4dDo6R2V0Q3VycmVudCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAppbmRleCA1YTA2MjZhN2QxZDQ1NGZjNTAyMTRlNGE4
MjI4NDZlNTk3ZWZhMTE1Li42YmJlY2Y2ZGM5YjhlNmEwYmJhYTFkZDMyODhkZDUwN2Q1NjAxNmFj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxs
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNw
cApAQCAtNjIsMTcgKzYyLDExIEBACiAjaW5jbHVkZSAiVjhPYmplY3RDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIlY4UGVyQ29udGV4dERhdGEuaCIKICNpbmNsdWRlICJXb3JrZXJDb250ZXh0RXhl
Y3V0aW9uUHJveHkuaCIKLQogI2luY2x1ZGUgPGFsZ29yaXRobT4KICNpbmNsdWRlIDxzdGRpby5o
PgogI2luY2x1ZGUgPHV0aWxpdHk+CiAjaW5jbHVkZSA8djgtZGVidWcuaD4KICNpbmNsdWRlIDx2
OC5oPgotCi0jaWYgRU5BQkxFKEpBVkFTQ1JJUFRfSTE4Tl9BUEkpCi0jaW5jbHVkZSA8djgtaTE4
bi9pbmNsdWRlL2V4dGVuc2lvbi5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogI2luY2x1ZGUgPHd0Zi9Pd25BcnJheVB0ci5oPgogI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KQEAgLTgwLDc4ICs3NCw2MiBAQAogI2luY2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5o
PgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAotbmFtZXNwYWNlIFdlYkNvcmUgewor
I2lmIEVOQUJMRShKQVZBU0NSSVBUX0kxOE5fQVBJKQorI2luY2x1ZGUgPHY4LWkxOG4vaW5jbHVk
ZS9leHRlbnNpb24uaD4KKyNlbmRpZgogCi1zdGF0aWMgdm9pZCBoYW5kbGVGYXRhbEVycm9ySW5W
OCgpCi17Ci0gICAgLy8gRklYTUU6IFdlIHRlbXBvcmFyaWx5IGRlYWwgd2l0aCBWOCBpbnRlcm5h
bCBlcnJvciBzaXR1YXRpb25zCi0gICAgLy8gc3VjaCBhcyBvdXQtb2YtbWVtb3J5IGJ5IGNyYXNo
aW5nIHRoZSByZW5kZXJlci4KLSAgICBDUkFTSCgpOwotfQorbmFtZXNwYWNlIFdlYkNvcmUgewog
Ci1zdGF0aWMgdm9pZCByZXBvcnRGYXRhbEVycm9ySW5WOChjb25zdCBjaGFyKiBsb2NhdGlvbiwg
Y29uc3QgY2hhciogbWVzc2FnZSkKK3N0YXRpYyB2b2lkIHJlcG9ydEZhdGFsRXJyb3IoY29uc3Qg
Y2hhciogbG9jYXRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiB7Ci0gICAgLy8gVjggaXMgc2h1
dGRvd24sIHdlIGNhbm5vdCB1c2UgVjggYXBpLgotICAgIC8vIFRoZSBvbmx5IHRoaW5nIHdlIGNh
biBkbyBpcyB0byBkaXNhYmxlIEphdmFTY3JpcHQuCi0gICAgLy8gRklYTUU6IGNsZWFuIHVwIFY4
UHJveHkgYW5kIGRpc2FibGUgSmF2YVNjcmlwdC4KLSAgICBpbnQgbWVtb3J5VXNhZ2VNQiA9IC0x
OwotI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIG1lbW9yeVVzYWdlTUIgPSBNZW1vcnlVc2Fn
ZVN1cHBvcnQ6OmFjdHVhbE1lbW9yeVVzYWdlTUIoKTsKLSNlbmRpZgorICAgIGludCBtZW1vcnlV
c2FnZU1CID0gTWVtb3J5VXNhZ2VTdXBwb3J0OjphY3R1YWxNZW1vcnlVc2FnZU1CKCk7CiAgICAg
cHJpbnRmKCJWOCBlcnJvcjogJXMgKCVzKS4gIEN1cnJlbnQgbWVtb3J5IHVzYWdlOiAlZCBNQlxu
IiwgbWVzc2FnZSwgbG9jYXRpb24sIG1lbW9yeVVzYWdlTUIpOwotICAgIGhhbmRsZUZhdGFsRXJy
b3JJblY4KCk7CisgICAgQ1JBU0goKTsKIH0KIAotc3RhdGljIHZvaWQgdjhVbmNhdWdodEV4Y2Vw
dGlvbkhhbmRsZXIodjg6OkhhbmRsZTx2ODo6TWVzc2FnZT4gbWVzc2FnZSwgdjg6OkhhbmRsZTx2
ODo6VmFsdWU+IGRhdGEpCitzdGF0aWMgdm9pZCByZXBvcnRVbmNhdWdodEV4Y2VwdGlvbih2ODo6
SGFuZGxlPHY4OjpNZXNzYWdlPiBtZXNzYWdlLCB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZGF0YSkK
IHsKLSAgICAvLyBVc2UgdGhlIGZyYW1lIHdoZXJlIEphdmFTY3JpcHQgaXMgY2FsbGVkIGZyb20u
Ci0gICAgRnJhbWUqIGZyYW1lID0gZmlyc3RGcmFtZShCaW5kaW5nU3RhdGU6Omluc3RhbmNlKCkp
OwotICAgIGlmICghZnJhbWUpCisgICAgRE9NV2luZG93KiBmaXJzdFdpbmRvdyA9IGZpcnN0RE9N
V2luZG93KEJpbmRpbmdTdGF0ZTo6aW5zdGFuY2UoKSk7CisgICAgaWYgKCFmaXJzdFdpbmRvdy0+
aXNDdXJyZW50bHlEaXNwbGF5ZWRJbkZyYW1lKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHY4
OjpIYW5kbGU8djg6OlN0cmluZz4gZXJyb3JNZXNzYWdlU3RyaW5nID0gbWVzc2FnZS0+R2V0KCk7
Ci0gICAgQVNTRVJUKCFlcnJvck1lc3NhZ2VTdHJpbmcuSXNFbXB0eSgpKTsKLSAgICBTdHJpbmcg
ZXJyb3JNZXNzYWdlID0gdG9XZWJDb3JlU3RyaW5nKGVycm9yTWVzc2FnZVN0cmluZyk7CisgICAg
U3RyaW5nIGVycm9yTWVzc2FnZSA9IHRvV2ViQ29yZVN0cmluZyhtZXNzYWdlLT5HZXQoKSk7CiAK
ICAgICB2ODo6SGFuZGxlPHY4OjpTdGFja1RyYWNlPiBzdGFja1RyYWNlID0gbWVzc2FnZS0+R2V0
U3RhY2tUcmFjZSgpOwogICAgIFJlZlB0cjxTY3JpcHRDYWxsU3RhY2s+IGNhbGxTdGFjazsKLSAg
ICAvLyBDdXJyZW50bHkgc3RhY2sgdHJhY2UgaXMgb25seSBjb2xsZWN0ZWQgd2hlbiBpbnNwZWN0
b3IgaXMgb3Blbi4KICAgICBpZiAoIXN0YWNrVHJhY2UuSXNFbXB0eSgpICYmIHN0YWNrVHJhY2Ut
PkdldEZyYW1lQ291bnQoKSA+IDApCiAgICAgICAgIGNhbGxTdGFjayA9IGNyZWF0ZVNjcmlwdENh
bGxTdGFjayhzdGFja1RyYWNlLCBTY3JpcHRDYWxsU3RhY2s6Om1heENhbGxTdGFja1NpemVUb0Nh
cHR1cmUpOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFsdWU+IHJlc291cmNlTmFtZSA9IG1lc3Nh
Z2UtPkdldFNjcmlwdFJlc291cmNlTmFtZSgpOwotICAgIGJvb2wgdXNlVVJMID0gcmVzb3VyY2VO
YW1lLklzRW1wdHkoKSB8fCAhcmVzb3VyY2VOYW1lLT5Jc1N0cmluZygpOwotICAgIERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpOwotICAgIFN0cmluZyByZXNvdXJjZU5hbWVT
dHJpbmcgPSB1c2VVUkwgPyBkb2N1bWVudC0+dXJsKCkgOiB0b1dlYkNvcmVTdHJpbmcocmVzb3Vy
Y2VOYW1lKTsKLSAgICBkb2N1bWVudC0+cmVwb3J0RXhjZXB0aW9uKGVycm9yTWVzc2FnZSwgbWVz
c2FnZS0+R2V0TGluZU51bWJlcigpLCByZXNvdXJjZU5hbWVTdHJpbmcsIGNhbGxTdGFjayk7Cisg
ICAgYm9vbCBzaG91bGRVc2VEb2N1bWVudFVSTCA9IHJlc291cmNlTmFtZS5Jc0VtcHR5KCkgfHwg
IXJlc291cmNlTmFtZS0+SXNTdHJpbmcoKTsKKworICAgIFN0cmluZyByZXNvdXJjZSA9IHNob3Vs
ZFVzZURvY3VtZW50VVJMID8gZmlyc3RXaW5kb3ctPmRvY3VtZW50KCktPnVybCgpIDogdG9XZWJD
b3JlU3RyaW5nKHJlc291cmNlTmFtZSk7CisgICAgZmlyc3RXaW5kb3ctPmRvY3VtZW50KCktPnJl
cG9ydEV4Y2VwdGlvbihlcnJvck1lc3NhZ2UsIG1lc3NhZ2UtPkdldExpbmVOdW1iZXIoKSwgcmVz
b3VyY2UsIGNhbGxTdGFjayk7CiB9CiAKLS8vIFJldHVybnMgdGhlIG93bmVyIGZyYW1lIHBvaW50
ZXIgb2YgYSBET00gd3JhcHBlciBvYmplY3QuIEl0IG9ubHkgd29ya3MgZm9yCi0vLyB0aGVzZSBE
T00gb2JqZWN0cyByZXF1aXJpbmcgY3Jvc3MtZG9tYWluIGFjY2VzcyBjaGVjay4KLXN0YXRpYyBG
cmFtZSogZ2V0VGFyZ2V0RnJhbWUodjg6OkxvY2FsPHY4OjpPYmplY3Q+IGhvc3QsIHY4OjpMb2Nh
bDx2ODo6VmFsdWU+IGRhdGEpCitzdGF0aWMgRnJhbWUqIGZpbmRGcmFtZSh2ODo6TG9jYWw8djg6
Ok9iamVjdD4gaG9zdCwgdjg6OkxvY2FsPHY4OjpWYWx1ZT4gZGF0YSkKIHsKLSAgICBGcmFtZSog
dGFyZ2V0ID0gMDsKICAgICBXcmFwcGVyVHlwZUluZm8qIHR5cGUgPSBXcmFwcGVyVHlwZUluZm86
OnVud3JhcChkYXRhKTsKKwogICAgIGlmIChWOERPTVdpbmRvdzo6aW5mby5lcXVhbHModHlwZSkp
IHsKLSAgICAgICAgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3cgPSBWOERPTVdyYXBwZXI6
Omxvb2t1cERPTVdyYXBwZXIoVjhET01XaW5kb3c6OkdldFRlbXBsYXRlKCksIGhvc3QpOwotICAg
ICAgICBpZiAod2luZG93LklzRW1wdHkoKSkKLSAgICAgICAgICAgIHJldHVybiB0YXJnZXQ7Ci0K
LSAgICAgICAgRE9NV2luZG93KiB0YXJnZXRXaW5kb3cgPSBWOERPTVdpbmRvdzo6dG9OYXRpdmUo
d2luZG93KTsKLSAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0V2luZG93LT5mcmFtZSgpOwotICAgIH0g
ZWxzZSBpZiAoVjhIaXN0b3J5OjppbmZvLmVxdWFscyh0eXBlKSkgewotICAgICAgICBIaXN0b3J5
KiBoaXN0b3J5ID0gVjhIaXN0b3J5Ojp0b05hdGl2ZShob3N0KTsKLSAgICAgICAgdGFyZ2V0ID0g
aGlzdG9yeS0+ZnJhbWUoKTsKLSAgICB9IGVsc2UgaWYgKFY4TG9jYXRpb246OmluZm8uZXF1YWxz
KHR5cGUpKSB7Ci0gICAgICAgIExvY2F0aW9uKiBsb2NhdGlvbiA9IFY4TG9jYXRpb246OnRvTmF0
aXZlKGhvc3QpOwotICAgICAgICB0YXJnZXQgPSBsb2NhdGlvbi0+ZnJhbWUoKTsKKyAgICAgICAg
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0gVjhET01XcmFwcGVyOjpsb29r
dXBET01XcmFwcGVyKFY4RE9NV2luZG93OjpHZXRUZW1wbGF0ZSgpLCBob3N0KTsKKyAgICAgICAg
aWYgKHdpbmRvd1dyYXBwZXIuSXNFbXB0eSgpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAg
ICAgIHJldHVybiBWOERPTVdpbmRvdzo6dG9OYXRpdmUod2luZG93V3JhcHBlciktPmZyYW1lKCk7
CiAgICAgfQotICAgIHJldHVybiB0YXJnZXQ7CisKKyAgICBpZiAoVjhIaXN0b3J5OjppbmZvLmVx
dWFscyh0eXBlKSkKKyAgICAgICAgcmV0dXJuIFY4SGlzdG9yeTo6dG9OYXRpdmUoaG9zdCktPmZy
YW1lKCk7CisKKyAgICBpZiAoVjhMb2NhdGlvbjo6aW5mby5lcXVhbHModHlwZSkpCisgICAgICAg
IHJldHVybiBWOExvY2F0aW9uOjp0b05hdGl2ZShob3N0KS0+ZnJhbWUoKTsKKworICAgIHJldHVy
biAwOwogfQogCiBzdGF0aWMgdm9pZCByZXBvcnRVbnNhZmVKYXZhU2NyaXB0QWNjZXNzKHY4OjpM
b2NhbDx2ODo6T2JqZWN0PiBob3N0LCB2ODo6QWNjZXNzVHlwZSB0eXBlLCB2ODo6TG9jYWw8djg6
OlZhbHVlPiBkYXRhKQogewotICAgIEZyYW1lKiB0YXJnZXQgPSBnZXRUYXJnZXRGcmFtZShob3N0
LCBkYXRhKTsKKyAgICBGcmFtZSogdGFyZ2V0ID0gZmluZEZyYW1lKGhvc3QsIGRhdGEpOwogICAg
IGlmICghdGFyZ2V0KQogICAgICAgICByZXR1cm47CiAgICAgRE9NV2luZG93KiB0YXJnZXRXaW5k
b3cgPSB0YXJnZXQtPmRvY3VtZW50KCktPmRvbVdpbmRvdygpOwpAQCAtMTY4LDEwICsxNDYsMTAg
QEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVY4SWZOZWVkZWQoKQogICAgIGluaXRpYWxpemVkID0g
dHJ1ZTsKIAogICAgIHY4OjpWODo6SWdub3JlT3V0T2ZNZW1vcnlFeGNlcHRpb24oKTsKLSAgICB2
ODo6Vjg6OlNldEZhdGFsRXJyb3JIYW5kbGVyKHJlcG9ydEZhdGFsRXJyb3JJblY4KTsKKyAgICB2
ODo6Vjg6OlNldEZhdGFsRXJyb3JIYW5kbGVyKHJlcG9ydEZhdGFsRXJyb3IpOwogICAgIHY4OjpW
ODo6U2V0R2xvYmFsR0NQcm9sb2d1ZUNhbGxiYWNrKCZWOEdDQ29udHJvbGxlcjo6Z2NQcm9sb2d1
ZSk7CiAgICAgdjg6OlY4OjpTZXRHbG9iYWxHQ0VwaWxvZ3VlQ2FsbGJhY2soJlY4R0NDb250cm9s
bGVyOjpnY0VwaWxvZ3VlKTsKLSAgICB2ODo6Vjg6OkFkZE1lc3NhZ2VMaXN0ZW5lcigmdjhVbmNh
dWdodEV4Y2VwdGlvbkhhbmRsZXIpOworICAgIHY4OjpWODo6QWRkTWVzc2FnZUxpc3RlbmVyKCZy
ZXBvcnRVbmNhdWdodEV4Y2VwdGlvbik7CiAgICAgdjg6OlY4OjpTZXRGYWlsZWRBY2Nlc3NDaGVj
a0NhbGxiYWNrRnVuY3Rpb24ocmVwb3J0VW5zYWZlSmF2YVNjcmlwdEFjY2Vzcyk7CiAjaWYgRU5B
QkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCiAgICAgU2NyaXB0UHJvZmlsZXI6OmluaXRpYWxpemUo
KTsKQEAgLTE4Myw2ICsxNjEsMTIgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVY4SWZOZWVkZWQo
KQogICAgIHY4OjpWODo6U2V0RmxhZ3NGcm9tU3RyaW5nKGVzNVJlYWRvbmx5RmxhZywgc2l6ZW9m
KGVzNVJlYWRvbmx5RmxhZykpOwogfQogCitzdGF0aWMgdm9pZCBjaGVja0RvY3VtZW50V3JhcHBl
cih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIsIERvY3VtZW50KiBkb2N1bWVudCkKK3sK
KyAgICBBU1NFUlQoVjhEb2N1bWVudDo6dG9OYXRpdmUod3JhcHBlcikgPT0gZG9jdW1lbnQpOwor
ICAgIEFTU0VSVCghZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkgfHwgKFY4RG9jdW1lbnQ6OnRv
TmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3JhcHBlci0+R2V0UHJvdG90eXBl
KCkpKSA9PSBkb2N1bWVudCkpOworfQorCiBQYXNzUmVmUHRyPFY4RE9NV2luZG93U2hlbGw+IFY4
RE9NV2luZG93U2hlbGw6OmNyZWF0ZShGcmFtZSogZnJhbWUpCiB7CiAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBWOERPTVdpbmRvd1NoZWxsKGZyYW1lKSk7CkBAIC0xOTUsMTMgKzE3OSwxMSBAQCBW
OERPTVdpbmRvd1NoZWxsOjpWOERPTVdpbmRvd1NoZWxsKEZyYW1lKiBmcmFtZSkKIAogYm9vbCBW
OERPTVdpbmRvd1NoZWxsOjppc0NvbnRleHRJbml0aWFsaXplZCgpCiB7Ci0gICAgLy8gbV9jb250
ZXh0LCBtX2dsb2JhbCwgYW5kIG1fd3JhcHBlckJvaWxlcnBsYXRlcyBzaG91bGQKLSAgICAvLyBh
bGwgYmUgbm9uLWVtcHR5IGlmIGlmIG1fY29udGV4dCBpcyBub24tZW1wdHkuCiAgICAgQVNTRVJU
KG1fY29udGV4dC5pc0VtcHR5KCkgfHwgIW1fZ2xvYmFsLmlzRW1wdHkoKSk7CiAgICAgcmV0dXJu
ICFtX2NvbnRleHQuaXNFbXB0eSgpOwogfQogCi12b2lkIFY4RE9NV2luZG93U2hlbGw6OmRpc3Bv
c2VDb250ZXh0SGFuZGxlcygpCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OmRpc3Bvc2VDb250ZXh0
KCkKIHsKICAgICBpZiAoIW1fY29udGV4dC5pc0VtcHR5KCkpIHsKICAgICAgICAgbV9mcmFtZS0+
bG9hZGVyKCktPmNsaWVudCgpLT53aWxsUmVsZWFzZVNjcmlwdENvbnRleHQobV9jb250ZXh0Lmdl
dCgpLCAwKTsKQEAgLTIxMCw3ICsxOTIsNyBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6OmRpc3Bv
c2VDb250ZXh0SGFuZGxlcygpCiAgICAgICAgIC8vIEl0J3MgbGlrZWx5IHRoYXQgZGlzcG9zaW5n
IHRoZSBjb250ZXh0IGhhcyBjcmVhdGVkIGEgbG90IG9mCiAgICAgICAgIC8vIGdhcmJhZ2UuIE5v
dGlmeSBWOCBhYm91dCB0aGlzIHNvIGl0J2xsIGhhdmUgYSBjaGFuY2Ugb2YgY2xlYW5pbmcKICAg
ICAgICAgLy8gaXQgdXAgd2hlbiBpZGxlLgotICAgICAgICBib29sIGlzTWFpbkZyYW1lID0gbV9m
cmFtZS0+cGFnZSgpICYmIChtX2ZyYW1lLT5wYWdlKCktPm1haW5GcmFtZSgpID09IG1fZnJhbWUp
OyAKKyAgICAgICAgYm9vbCBpc01haW5GcmFtZSA9ICFtX2ZyYW1lLT50cmVlKCktPnBhcmVudCgp
OyAKICAgICAgICAgVjhHQ0ZvckNvbnRleHREaXNwb3NlOjppbnN0YW5jZSgpLm5vdGlmeUNvbnRl
eHREaXNwb3NlZChpc01haW5GcmFtZSk7CiAgICAgfQogCkBAIC0yMjgsOCArMjEwLDggQEAgdm9p
ZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckZvckNsb3NlKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotICAgIGNsZWFyRG9jdW1lbnRXcmFwcGVy
KCk7Ci0gICAgZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7CisgICAgbV9kb2N1bWVudFdyYXBwZXIu
Y2xlYXIoKTsKKyAgICBkaXNwb3NlQ29udGV4dCgpOwogfQogCiB2b2lkIFY4RE9NV2luZG93U2hl
bGw6OmNsZWFyRm9yTmF2aWdhdGlvbigpCkBAIC0yMzgsMjEgKzIyMCwyMCBAQCB2b2lkIFY4RE9N
V2luZG93U2hlbGw6OmNsZWFyRm9yTmF2aWdhdGlvbigpCiAgICAgICAgIHJldHVybjsKIAogICAg
IHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICBjbGVhckRvY3VtZW50V3JhcHBlcigp
OworICAgIG1fZG9jdW1lbnRXcmFwcGVyLmNsZWFyKCk7CiAKLSAgICAvLyBGSVhNRTogU2hvdWxk
IHdlIGNyZWF0ZSBhIG5ldyBMb2NhbCBoYW5kbGUgaGVyZT8KLSAgICB2ODo6Q29udGV4dDo6U2Nv
cGUgY29udGV4dFNjb3BlKG1fY29udGV4dC5nZXQoKSk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3Bl
IHNjb3BlKG1fY29udGV4dC5nZXQoKSk7CiAKLSAgICAvLyBDbGVhciB0aGUgZG9jdW1lbnQgd3Jh
cHBlciBjYWNoZSBiZWZvcmUgdHVybmluZyBvbiBhY2Nlc3MgY2hlY2tzIG9uCisgICAgLy8gQ2xl
YXIgdGhlIGRvY3VtZW50IHByb3BlcnR5IGJlZm9yZSB0dXJuaW5nIG9uIGFjY2VzcyBjaGVja3Mg
b24KICAgICAvLyB0aGUgb2xkIERPTVdpbmRvdyB3cmFwcGVyLiBUaGlzIHdheSwgYWNjZXNzIHRv
IHRoZSBkb2N1bWVudCB3cmFwcGVyCiAgICAgLy8gd2lsbCBiZSBwcm90ZWN0ZWQgYnkgdGhlIHNl
Y3VyaXR5IGNoZWNrcyBvbiB0aGUgRE9NV2luZG93IHdyYXBwZXIuCi0gICAgY2xlYXJEb2N1bWVu
dFdyYXBwZXJDYWNoZSgpOworICAgIGNsZWFyRG9jdW1lbnRQcm9wZXJ0eSgpOwogCiAgICAgdjg6
OkhhbmRsZTx2ODo6T2JqZWN0PiB3aW5kb3dXcmFwcGVyID0gVjhET01XcmFwcGVyOjpsb29rdXBE
T01XcmFwcGVyKFY4RE9NV2luZG93OjpHZXRUZW1wbGF0ZSgpLCBtX2dsb2JhbC5nZXQoKSk7CiAg
ICAgQVNTRVJUKCF3aW5kb3dXcmFwcGVyLklzRW1wdHkoKSk7CiAgICAgd2luZG93V3JhcHBlci0+
VHVybk9uQWNjZXNzQ2hlY2soKTsKICAgICBtX2NvbnRleHQtPkRldGFjaEdsb2JhbCgpOwotICAg
IGRpc3Bvc2VDb250ZXh0SGFuZGxlcygpOworICAgIGRpc3Bvc2VDb250ZXh0KCk7CiB9CiAKIC8v
IENyZWF0ZSBhIG5ldyBlbnZpcm9ubWVudCBhbmQgc2V0dXAgdGhlIGdsb2JhbCBvYmplY3QuCkBA
IC0yNjEsMTEgKzI0MiwxMSBAQCB2b2lkIFY4RE9NV2luZG93U2hlbGw6OmNsZWFyRm9yTmF2aWdh
dGlvbigpCiAvLyBhbGxvdyBwcm9wZXJ0aWVzIG9mIHRoZSBKUyBET01XaW5kb3cgaW5zdGFuY2Ug
dG8gYmUgc2hhZG93ZWQsIHdlCiAvLyB1c2UgYSBzaGFkb3cgb2JqZWN0IGFzIHRoZSBnbG9iYWwg
b2JqZWN0IGFuZCB1c2UgdGhlIEpTIERPTVdpbmRvdwogLy8gaW5zdGFuY2UgYXMgdGhlIHByb3Rv
dHlwZSBmb3IgdGhhdCBzaGFkb3cgb2JqZWN0LiBUaGUgSlMgRE9NV2luZG93Ci0vLyBpbnN0YW5j
ZSBpcyB1bmRldGVjdGFibGUgZnJvbSBqYXZhc2NyaXB0IGNvZGUgYmVjYXVzZSB0aGUgX19wcm90
b19fCisvLyBpbnN0YW5jZSBpcyB1bmRldGVjdGFibGUgZnJvbSBKYXZhU2NyaXB0IGNvZGUgYmVj
YXVzZSB0aGUgX19wcm90b19fCiAvLyBhY2Nlc3NvcnMgc2tpcCB0aGF0IG9iamVjdC4KIC8vCiAv
LyBUaGUgc2hhZG93IG9iamVjdCBhbmQgdGhlIERPTVdpbmRvdyBpbnN0YW5jZSBhcmUgc2VlbiBh
cyBvbmUgb2JqZWN0Ci0vLyBmcm9tIGphdmFzY3JpcHQuIFRoZSBqYXZhc2NyaXB0IG9iamVjdCB0
aGF0IGNvcnJlc3BvbmRzIHRvIGEKKy8vIGZyb20gSmF2YVNjcmlwdC4gVGhlIEphdmFTY3JpcHQg
b2JqZWN0IHRoYXQgY29ycmVzcG9uZHMgdG8gYQogLy8gRE9NV2luZG93IGluc3RhbmNlIGlzIHRo
ZSBzaGFkb3cgb2JqZWN0LiBXaGVuIG1hcHBpbmcgYSBET01XaW5kb3cKIC8vIGluc3RhbmNlIHRv
IGEgVjggb2JqZWN0LCB3ZSByZXR1cm4gdGhlIHNoYWRvdyBvYmplY3QuCiAvLwpAQCAtMjczLDYg
KzI1NCw3IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6Y2xlYXJGb3JOYXZpZ2F0aW9uKCkKIC8v
ICAgMSkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3MjQ5CiAvLyAg
IDIpIGh0dHBzOi8vd2lraS5tb3ppbGxhLm9yZy9HZWNrbzpTcGxpdFdpbmRvdwogLy8gICAzKSBo
dHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTY2MzkKKy8vCiAv
LyB3ZSBuZWVkIHRvIHNwbGl0IHRoZSBzaGFkb3cgb2JqZWN0IGZ1cnRoZXIgaW50byB0d28gb2Jq
ZWN0czoKIC8vIGFuIG91dGVyIHdpbmRvdyBhbmQgYW4gaW5uZXIgd2luZG93LiBUaGUgaW5uZXIg
d2luZG93IGlzIHRoZSBoaWRkZW4KIC8vIHByb3RvdHlwZSBvZiB0aGUgb3V0ZXIgd2luZG93LiBU
aGUgaW5uZXIgd2luZG93IGlzIHRoZSBkZWZhdWx0CkBAIC0yOTAsMTMgKzI3MiwxMiBAQCB2b2lk
IFY4RE9NV2luZG93U2hlbGw6OmNsZWFyRm9yTmF2aWdhdGlvbigpCiAvLyB0aGUgZnJhbWUuIEhv
d2V2ZXIsIGEgbmV3IGlubmVyIHdpbmRvdyBpcyBjcmVhdGVkIGZvciB0aGUgbmV3IHBhZ2UuCiAv
LyBJZiB0aGVyZSBhcmUgSlMgY29kZSBob2xkcyBhIGNsb3N1cmUgdG8gdGhlIG9sZCBpbm5lciB3
aW5kb3csCiAvLyBpdCB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIHRoZSBvdXRlciB3aW5kb3cgdmlh
IGl0cyBnbG9iYWwgb2JqZWN0LgotYm9vbCBWOERPTVdpbmRvd1NoZWxsOjppbml0Q29udGV4dElm
TmVlZGVkKCkKK2Jvb2wgVjhET01XaW5kb3dTaGVsbDo6aW5pdGlhbGl6ZUlmTmVlZGVkKCkKIHsK
ICAgICBpZiAoIW1fY29udGV4dC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogCiAg
ICAgdjg6OkhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOwotCiAgICAgaW5pdGlhbGl6ZVY4SWZOZWVk
ZWQoKTsKIAogICAgIG1fY29udGV4dC5hZG9wdChjcmVhdGVOZXdDb250ZXh0KG1fZ2xvYmFsLmdl
dCgpLCAwLCAwKSk7CkBAIC0zMDQsNjcgKzI4NSw1NyBAQCBib29sIFY4RE9NV2luZG93U2hlbGw6
OmluaXRDb250ZXh0SWZOZWVkZWQoKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICB2ODo6
TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQgPSB2ODo6TG9jYWw8djg6OkNvbnRleHQ+OjpOZXco
bV9jb250ZXh0LmdldCgpKTsKLSAgICB2ODo6Q29udGV4dDo6U2NvcGUgY29udGV4dFNjb3BlKGNv
bnRleHQpOwotCi0gICAgaWYgKG1fZ2xvYmFsLmlzRW1wdHkoKSkgewotICAgICAgICBtX2dsb2Jh
bC5zZXQoY29udGV4dC0+R2xvYmFsKCkpOwotICAgICAgICBpZiAobV9nbG9iYWwuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIG1fcGVyQ29udGV4dERhdGEgPSBW
OFBlckNvbnRleHREYXRhOjpjcmVhdGUobV9jb250ZXh0LmdldCgpKTsKLSAgICBpZiAoIW1fcGVy
Q29udGV4dERhdGEtPmluaXQoKSkgewotICAgICAgICBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGlmICghaW5zdGFsbERPTVdpbmRv
dyhjb250ZXh0LCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5kb21XaW5kb3coKSkpIHsKLSAgICAgICAg
ZGlzcG9zZUNvbnRleHRIYW5kbGVzKCk7CisgICAgdjg6OkNvbnRleHQ6OlNjb3BlIHNjb3BlKGNv
bnRleHQpOworICAgIGlmICghaW5pdGlhbGl6ZUNvbnRleHQoY29udGV4dCkpIHsKKyAgICAgICAg
ZGlzcG9zZUNvbnRleHQoKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAogICAgIHVw
ZGF0ZURvY3VtZW50KCk7CisgICAgdXBkYXRlU2VjdXJpdHlPcmlnaW4oKTsKIAotICAgIHNldFNl
Y3VyaXR5VG9rZW4oKTsKLQotICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICBj
b250ZXh0LT5BbGxvd0NvZGVHZW5lcmF0aW9uRnJvbVN0cmluZ3MobV9mcmFtZS0+ZG9jdW1lbnQo
KS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93RXZhbCgwLCBDb250ZW50U2VjdXJpdHlQ
b2xpY3k6OlN1cHByZXNzUmVwb3J0KSk7CisgICAgY29udGV4dC0+QWxsb3dDb2RlR2VuZXJhdGlv
bkZyb21TdHJpbmdzKG1fZnJhbWUtPmRvY3VtZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgp
LT5hbGxvd0V2YWwoMCwgQ29udGVudFNlY3VyaXR5UG9saWN5OjpTdXBwcmVzc1JlcG9ydCkpOwog
CiAgICAgbV9mcmFtZS0+bG9hZGVyKCktPmNsaWVudCgpLT5kaWRDcmVhdGVTY3JpcHRDb250ZXh0
KG1fY29udGV4dC5nZXQoKSwgMCwgMCk7Ci0KICAgICAvLyBGSVhNRTogVGhpcyBpcyB3cm9uZy4g
V2Ugc2hvdWxkIGFjdHVhbGx5IGRvIHRoaXMgZm9yIHRoZSBwcm9wZXIgd29ybGQgb25jZQogICAg
IC8vIHdlIGRvIGlzb2xhdGVkIHdvcmxkcyB0aGUgV2ViQ29yZSB3YXkuCiAgICAgbV9mcmFtZS0+
bG9hZGVyKCktPmRpc3BhdGNoRGlkQ2xlYXJXaW5kb3dPYmplY3RJbldvcmxkKDApOwotCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXY4OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOERPTVdpbmRv
d1NoZWxsOjpjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xvYmFsLCBp
bnQgZXh0ZW5zaW9uR3JvdXAsIGludCB3b3JsZElkKQorYm9vbCBWOERPTVdpbmRvd1NoZWxsOjpp
bml0aWFsaXplQ29udGV4dCh2ODo6TG9jYWw8djg6OkNvbnRleHQ+IGNvbnRleHQpCiB7Ci0gICAg
djg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+IHJlc3VsdDsKKyAgICBpZiAobV9nbG9iYWwuaXNF
bXB0eSgpKSB7CisgICAgICAgIG1fZ2xvYmFsLnNldChjb250ZXh0LT5HbG9iYWwoKSk7CisgICAg
ICAgIGlmIChtX2dsb2JhbC5pc0VtcHR5KCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQogCisgICAgbV9wZXJDb250ZXh0RGF0YSA9IFY4UGVyQ29udGV4dERhdGE6OmNyZWF0ZShj
b250ZXh0KTsKKyAgICBpZiAoIW1fcGVyQ29udGV4dERhdGEtPmluaXQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGluc3RhbGxET01XaW5kb3coY29udGV4dCwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+ZG9tV2luZG93KCkpKTsKK30KKwordjg6OlBlcnNpc3RlbnQ8djg6OkNv
bnRleHQ+IFY4RE9NV2luZG93U2hlbGw6OmNyZWF0ZU5ld0NvbnRleHQodjg6OkhhbmRsZTx2ODo6
T2JqZWN0PiBnbG9iYWwsIGludCBleHRlbnNpb25Hcm91cCwgaW50IHdvcmxkSWQpCit7CiAgICAg
Ly8gVGhlIGFjdGl2ZURvY3VtZW50TG9hZGVyIHBvaW50ZXIgY291bGQgYmUgMCBkdXJpbmcgZnJh
bWUgc2h1dGRvd24uCisgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBjaGVjayB0aGlzIGhlcmU/CiAg
ICAgaWYgKCFtX2ZyYW1lLT5sb2FkZXIoKS0+YWN0aXZlRG9jdW1lbnRMb2FkZXIoKSkKLSAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgcmV0dXJuIHY4OjpQZXJzaXN0ZW50PHY4OjpDb250
ZXh0PigpOwogCi0gICAgLy8gQ3JlYXRlIGEgbmV3IGVudmlyb25tZW50IHVzaW5nIGFuIGVtcHR5
IHRlbXBsYXRlIGZvciB0aGUgc2hhZG93Ci0gICAgLy8gb2JqZWN0LiBSZXVzZSB0aGUgZ2xvYmFs
IG9iamVjdCBpZiBvbmUgaGFzIGJlZW4gY3JlYXRlZCBlYXJsaWVyLgotICAgIHY4OjpQZXJzaXN0
ZW50PHY4OjpPYmplY3RUZW1wbGF0ZT4gZ2xvYmFsVGVtcGxhdGUgPSBWOERPTVdpbmRvdzo6R2V0
U2hhZG93T2JqZWN0VGVtcGxhdGUoKTsKLSAgICBpZiAoZ2xvYmFsVGVtcGxhdGUuSXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHY4OjpQZXJzaXN0ZW50PHY4OjpPYmplY3RU
ZW1wbGF0ZT4gc2hhZG93T2JqZWN0VGVtcGxhdGUgPSBWOERPTVdpbmRvdzo6R2V0U2hhZG93T2Jq
ZWN0VGVtcGxhdGUoKTsKKyAgICBpZiAoc2hhZG93T2JqZWN0VGVtcGxhdGUuSXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4gdjg6OlBlcnNpc3RlbnQ8djg6OkNvbnRleHQ+KCk7CiAKLSAgICAvLyBV
c2VkIHRvIGF2b2lkIHNsZWVwIGNhbGxzIGluIHVubG9hZCBoYW5kbGVycy4KICAgICBTY3JpcHRD
b250cm9sbGVyOjpyZWdpc3RlckV4dGVuc2lvbklmTmVlZGVkKERhdGVFeHRlbnNpb246OmdldCgp
KTsKIAogI2lmIEVOQUJMRShKQVZBU0NSSVBUX0kxOE5fQVBJKQotICAgIC8vIEVuYWJsZXMgZXhw
ZXJpbWVudGFsIGkxOG4gQVBJIGluIFY4LgogICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpqYXZhU2NyaXB0STE4TkFQSUVuYWJsZWQoKSkKICAgICAgICAgU2NyaXB0Q29udHJvbGxlcjo6
cmVnaXN0ZXJFeHRlbnNpb25JZk5lZWRlZCh2OF9pMThuOjpFeHRlbnNpb246OmdldCgpKTsKICNl
bmRpZgogCi0gICAgLy8gRHluYW1pY2FsbHkgdGVsbCB2OCBhYm91dCBvdXIgZXh0ZW5zaW9ucyBu
b3cuCiAgICAgY29uc3QgVjhFeHRlbnNpb25zJiBleHRlbnNpb25zID0gU2NyaXB0Q29udHJvbGxl
cjo6cmVnaXN0ZXJlZEV4dGVuc2lvbnMoKTsKICAgICBPd25BcnJheVB0cjxjb25zdCBjaGFyKj4g
ZXh0ZW5zaW9uTmFtZXMgPSBhZG9wdEFycmF5UHRyKG5ldyBjb25zdCBjaGFyKltleHRlbnNpb25z
LnNpemUoKV0pOwogICAgIGludCBpbmRleCA9IDA7CkBAIC0zNzYsMTkxICszNDcsMTA2IEBAIHY4
OjpQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBWOERPTVdpbmRvd1NoZWxsOjpjcmVhdGVOZXdDb250
ZXh0KHY4OjpIYW5kbGU8djg6Ok9iCiAKICAgICAgICAgZXh0ZW5zaW9uTmFtZXNbaW5kZXgrK10g
PSBleHRlbnNpb25zW2ldLT5uYW1lKCk7CiAgICAgfQotICAgIHY4OjpFeHRlbnNpb25Db25maWd1
cmF0aW9uIGV4dGVuc2lvbkNvbmZpZ3VyYXRpb24oaW5kZXgsIGV4dGVuc2lvbk5hbWVzLmdldCgp
KTsKLSAgICByZXN1bHQgPSB2ODo6Q29udGV4dDo6TmV3KCZleHRlbnNpb25Db25maWd1cmF0aW9u
LCBnbG9iYWxUZW1wbGF0ZSwgZ2xvYmFsKTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19CiAKLXZv
aWQgVjhET01XaW5kb3dTaGVsbDo6c2V0Q29udGV4dCh2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiBj
b250ZXh0KQotewotICAgIG1fY29udGV4dC5zZXQoY29udGV4dCk7CisgICAgdjg6OkV4dGVuc2lv
bkNvbmZpZ3VyYXRpb24gZXh0ZW5zaW9uQ29uZmlndXJhdGlvbihpbmRleCwgZXh0ZW5zaW9uTmFt
ZXMuZ2V0KCkpOworICAgIHJldHVybiB2ODo6Q29udGV4dDo6TmV3KCZleHRlbnNpb25Db25maWd1
cmF0aW9uLCBzaGFkb3dPYmplY3RUZW1wbGF0ZSwgZ2xvYmFsKTsKIH0KIAogYm9vbCBWOERPTVdp
bmRvd1NoZWxsOjppbnN0YWxsRE9NV2luZG93KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGNvbnRl
eHQsIERPTVdpbmRvdyogd2luZG93KQogewotICAgIC8vIENyZWF0ZSBhIG5ldyBKUyB3aW5kb3cg
b2JqZWN0IGFuZCB1c2UgaXQgYXMgdGhlIHByb3RvdHlwZSBmb3IgdGhlICBzaGFkb3cgZ2xvYmFs
IG9iamVjdC4KICAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvbj4gd2luZG93Q29uc3RydWN0b3Ig
PSBWOERPTVdyYXBwZXI6OmNvbnN0cnVjdG9yRm9yVHlwZSgmVjhET01XaW5kb3c6OmluZm8sIHdp
bmRvdyk7Ci0gICAgdjg6OkxvY2FsPHY4OjpPYmplY3Q+IGpzV2luZG93ID0gVjhPYmplY3RDb25z
dHJ1Y3Rvcjo6bmV3SW5zdGFuY2Uod2luZG93Q29uc3RydWN0b3IpOwotICAgIC8vIEJhaWwgb3V0
IGlmIGFsbG9jYXRpb24gZmFpbGVkLgotICAgIGlmIChqc1dpbmRvdy5Jc0VtcHR5KCkpCisgICAg
djg6OkxvY2FsPHY4OjpPYmplY3Q+IHdpbmRvd1dyYXBwZXIgPSBWOE9iamVjdENvbnN0cnVjdG9y
OjpuZXdJbnN0YW5jZSh3aW5kb3dDb25zdHJ1Y3Rvcik7CisgICAgaWYgKHdpbmRvd1dyYXBwZXIu
SXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBWOERPTVdpbmRvdzo6aW5z
dGFsbFBlckNvbnRleHRQcm9wZXJ0aWVzKGpzV2luZG93LCB3aW5kb3cpOworICAgIFY4RE9NV2lu
ZG93OjppbnN0YWxsUGVyQ29udGV4dFByb3BlcnRpZXMod2luZG93V3JhcHBlciwgd2luZG93KTsK
IAotICAgIC8vIFdyYXAgdGhlIHdpbmRvdy4KLSAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBw
ZXIoanNXaW5kb3csICZWOERPTVdpbmRvdzo6aW5mbywgd2luZG93KTsKLSAgICBWOERPTVdyYXBw
ZXI6OnNldERPTVdyYXBwZXIodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChqc1dpbmRvdy0+
R2V0UHJvdG90eXBlKCkpLCAmVjhET01XaW5kb3c6OmluZm8sIHdpbmRvdyk7Ci0gICAgVjhET01X
cmFwcGVyOjpzZXRKU1dyYXBwZXJGb3JET01PYmplY3QoUGFzc1JlZlB0cjxET01XaW5kb3c+KHdp
bmRvdyksIGpzV2luZG93KTsKKyAgICBWOERPTVdyYXBwZXI6OnNldERPTVdyYXBwZXIod2luZG93
V3JhcHBlciwgJlY4RE9NV2luZG93OjppbmZvLCB3aW5kb3cpOworICAgIFY4RE9NV3JhcHBlcjo6
c2V0RE9NV3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0KHdpbmRvd1dyYXBwZXIt
PkdldFByb3RvdHlwZSgpKSwgJlY4RE9NV2luZG93OjppbmZvLCB3aW5kb3cpOworICAgIFY4RE9N
V3JhcHBlcjo6c2V0SlNXcmFwcGVyRm9yRE9NT2JqZWN0KFBhc3NSZWZQdHI8RE9NV2luZG93Pih3
aW5kb3cpLCB3aW5kb3dXcmFwcGVyKTsKIAotICAgIC8vIEluc2VydCB0aGUgd2luZG93IGluc3Rh
bmNlIGFzIHRoZSBwcm90b3R5cGUgb2YgdGhlIHNoYWRvdyBvYmplY3QuCi0gICAgdjg6OkhhbmRs
ZTx2ODo6T2JqZWN0PiB2OFJlYWxHbG9iYWwgPSB2ODo6SGFuZGxlPHY4OjpPYmplY3Q+OjpDYXN0
KGNvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7Ci0gICAgVjhET01XcmFwcGVyOjpz
ZXRET01XcmFwcGVyKHY4UmVhbEdsb2JhbCwgJlY4RE9NV2luZG93OjppbmZvLCB3aW5kb3cpOwot
ICAgIHY4UmVhbEdsb2JhbC0+U2V0UHJvdG90eXBlKGpzV2luZG93KTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGlubmVyR2xvYmFsID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChj
b250ZXh0LT5HbG9iYWwoKS0+R2V0UHJvdG90eXBlKCkpOworICAgIFY4RE9NV3JhcHBlcjo6c2V0
RE9NV3JhcHBlcihpbm5lckdsb2JhbCwgJlY4RE9NV2luZG93OjppbmZvLCB3aW5kb3cpOworICAg
IGlubmVyR2xvYmFsLT5TZXRQcm90b3R5cGUod2luZG93V3JhcHBlcik7CiAgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6dXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4
OjpIYW5kbGU8djg6Ok9iamVjdD4gd3JhcHBlcikKIHsKLSAgICBjbGVhckRvY3VtZW50V3JhcHBl
cigpOwotCi0gICAgQVNTRVJUKG1fZG9jdW1lbnQuaXNFbXB0eSgpKTsKLSAgICBtX2RvY3VtZW50
LnNldCh3cmFwcGVyKTsKLX0KLQotdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckRvY3VtZW50
V3JhcHBlcigpCi17Ci0gICAgbV9kb2N1bWVudC5jbGVhcigpOwotfQotCi1zdGF0aWMgdm9pZCBj
aGVja0RvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxlPHY4OjpPYmplY3Q+IHdyYXBwZXIsIERvY3Vt
ZW50KiBkb2N1bWVudCkKLXsKLSAgICBBU1NFUlQoVjhEb2N1bWVudDo6dG9OYXRpdmUod3JhcHBl
cikgPT0gZG9jdW1lbnQpOwotICAgIEFTU0VSVCghZG9jdW1lbnQtPmlzSFRNTERvY3VtZW50KCkg
fHwgKFY4RG9jdW1lbnQ6OnRvTmF0aXZlKHY4OjpIYW5kbGU8djg6Ok9iamVjdD46OkNhc3Qod3Jh
cHBlci0+R2V0UHJvdG90eXBlKCkpKSA9PSBkb2N1bWVudCkpOworICAgIG1fZG9jdW1lbnRXcmFw
cGVyLnNldCh3cmFwcGVyKTsKIH0KIAotdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1
bWVudFdyYXBwZXJDYWNoZSgpCit2b2lkIFY4RE9NV2luZG93U2hlbGw6OnVwZGF0ZURvY3VtZW50
UHJvcGVydHkoKQogewotICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIHVzZSBhIG5ldyBMb2NhbCBoYW5kbGUgaGVyZT8KKyAgICB2ODo6SGFu
ZGxlU2NvcGUgc2NvcGU7CiAgICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNvbnRleHRTY29wZShtX2Nv
bnRleHQuZ2V0KCkpOwogCi0gICAgLy8gSWYgdGhlIGRvY3VtZW50IGhhcyBubyBmcmFtZSwgTm9k
ZVRvVjhPYmplY3QgbWlnaHQgZ2V0IHRoZQotICAgIC8vIGRvY3VtZW50IHdyYXBwZXIgZm9yIGEg
ZG9jdW1lbnQgdGhhdCBpcyBhYm91dCB0byBiZSBkZWxldGVkLgotICAgIC8vIElmIHRoZSBGb3Jj
ZVNldCBiZWxvdyBjYXVzZXMgYSBnYXJiYWdlIGNvbGxlY3Rpb24sIHRoZSBkb2N1bWVudAotICAg
IC8vIG1pZ2h0IGdldCBkZWxldGVkIGFuZCB0aGUgZ2xvYmFsIGhhbmRsZSBmb3IgdGhlIGRvY3Vt
ZW50Ci0gICAgLy8gd3JhcHBlciBjbGVhcmVkLiBVc2luZyB0aGUgY2xlYXJlZCBnbG9iYWwgaGFu
ZGxlIHdpbGwgbGVhZCB0bwotICAgIC8vIGNyYXNoZXMuIEluIHRoaXMgY2FzZSB3ZSBjbGVhciB0
aGUgY2FjaGUgYW5kIGxldCB0aGUgRE9NV2luZG93Ci0gICAgLy8gYWNjZXNzb3IgaGFuZGxlIGFj
Y2VzcyB0byB0aGUgZG9jdW1lbnQuCi0gICAgLy8gRklYTUU6IFRoaXMgc2hvdWxkIG5vdCBiZSBw
b3NzaWJsZSBhbnltb3JlLgotICAgIGlmICghbV9mcmFtZS0+ZG9jdW1lbnQoKS0+ZnJhbWUoKSkg
ewotICAgICAgICBjbGVhckRvY3VtZW50V3JhcHBlckNhY2hlKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KICAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZG9jdW1lbnRXcmFwcGVyID0gdG9W
OChtX2ZyYW1lLT5kb2N1bWVudCgpKTsKLSAgICBBU1NFUlQoZG9jdW1lbnRXcmFwcGVyID09IG1f
ZG9jdW1lbnQuZ2V0KCkgfHwgbV9kb2N1bWVudC5pc0VtcHR5KCkpOwotICAgIGlmIChtX2RvY3Vt
ZW50LmlzRW1wdHkoKSkKLSAgICAgICAgdXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8
djg6Ok9iamVjdD46OkNhc3QoZG9jdW1lbnRXcmFwcGVyKSk7Ci0gICAgY2hlY2tEb2N1bWVudFdy
YXBwZXIobV9kb2N1bWVudC5nZXQoKSwgbV9mcmFtZS0+ZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBJ
ZiBpbnN0YW50aWF0aW9uIG9mIHRoZSBkb2N1bWVudCB3cmFwcGVyIGZhaWxzLCBjbGVhciB0aGUg
Y2FjaGUKLSAgICAvLyBhbmQgbGV0IHRoZSBET01XaW5kb3cgYWNjZXNzb3IgaGFuZGxlIGFjY2Vz
cyB0byB0aGUgZG9jdW1lbnQuCiAgICAgaWYgKGRvY3VtZW50V3JhcHBlci5Jc0VtcHR5KCkpIHsK
LSAgICAgICAgY2xlYXJEb2N1bWVudFdyYXBwZXJDYWNoZSgpOworICAgICAgICBjbGVhckRvY3Vt
ZW50UHJvcGVydHkoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKwogICAgIEFTU0VSVChkb2N1
bWVudFdyYXBwZXItPklzT2JqZWN0KCkpOwotICAgIG1fY29udGV4dC0+R2xvYmFsKCktPkZvcmNl
U2V0KHY4OjpTdHJpbmc6Ok5ldygiZG9jdW1lbnQiKSwgZG9jdW1lbnRXcmFwcGVyLCBzdGF0aWNf
Y2FzdDx2ODo6UHJvcGVydHlBdHRyaWJ1dGU+KHY4OjpSZWFkT25seSB8IHY4OjpEb250RGVsZXRl
KSk7CisgICAgQVNTRVJUKGRvY3VtZW50V3JhcHBlciA9PSBtX2RvY3VtZW50V3JhcHBlci5nZXQo
KSB8fCBtX2RvY3VtZW50V3JhcHBlci5pc0VtcHR5KCkpOworICAgIGlmIChtX2RvY3VtZW50V3Jh
cHBlci5pc0VtcHR5KCkpCisgICAgICAgIHVwZGF0ZURvY3VtZW50V3JhcHBlcih2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+OjpDYXN0KGRvY3VtZW50V3JhcHBlcikpOworCisgICAgY2hlY2tEb2N1bWVu
dFdyYXBwZXIobV9kb2N1bWVudFdyYXBwZXIuZ2V0KCksIG1fZnJhbWUtPmRvY3VtZW50KCkpOwor
CisgICAgbV9jb250ZXh0LT5HbG9iYWwoKS0+Rm9yY2VTZXQodjg6OlN0cmluZzo6TmV3U3ltYm9s
KCJkb2N1bWVudCIpLCBkb2N1bWVudFdyYXBwZXIsIHN0YXRpY19jYXN0PHY4OjpQcm9wZXJ0eUF0
dHJpYnV0ZT4odjg6OlJlYWRPbmx5IHwgdjg6OkRvbnREZWxldGUpKTsKIAogICAgIC8vIFdlIGFs
c28gc3Rhc2ggYSByZWZlcmVuY2UgdG8gdGhlIGRvY3VtZW50IG9uIHRoZSByZWFsIGdsb2JhbCBv
YmplY3Qgc28gdGhhdAogICAgIC8vIERPTVdpbmRvdyBvYmplY3RzIHdlIG9idGFpbiBmcm9tIEph
dmFTY3JpcHQgcmVmZXJlbmNlcyBhcmUgZ3VhcmFudGVlZCB0byBoYXZlCiAgICAgLy8gbGl2ZSBE
b2N1bWVudCBvYmplY3RzLgotICAgIHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gdjhSZWFsR2xvYmFs
ID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdChtX2NvbnRleHQtPkdsb2JhbCgpLT5HZXRQ
cm90b3R5cGUoKSk7Ci0gICAgdjhSZWFsR2xvYmFsLT5TZXRIaWRkZW5WYWx1ZShWOEhpZGRlblBy
b3BlcnR5TmFtZTo6ZG9jdW1lbnQoKSwgZG9jdW1lbnRXcmFwcGVyKTsKKyAgICB2ODo6SGFuZGxl
PHY4OjpPYmplY3Q+IGlubmVyR2xvYmFsID0gdjg6OkhhbmRsZTx2ODo6T2JqZWN0Pjo6Q2FzdCht
X2NvbnRleHQtPkdsb2JhbCgpLT5HZXRQcm90b3R5cGUoKSk7CisgICAgaW5uZXJHbG9iYWwtPlNl
dEhpZGRlblZhbHVlKFY4SGlkZGVuUHJvcGVydHlOYW1lOjpkb2N1bWVudCgpLCBkb2N1bWVudFdy
YXBwZXIpOwogfQogCi12b2lkIFY4RE9NV2luZG93U2hlbGw6OmNsZWFyRG9jdW1lbnRXcmFwcGVy
Q2FjaGUoKQordm9pZCBWOERPTVdpbmRvd1NoZWxsOjpjbGVhckRvY3VtZW50UHJvcGVydHkoKQog
ewogICAgIEFTU0VSVCghbV9jb250ZXh0LmlzRW1wdHkoKSk7Ci0gICAgbV9jb250ZXh0LT5HbG9i
YWwoKS0+Rm9yY2VEZWxldGUodjg6OlN0cmluZzo6TmV3KCJkb2N1bWVudCIpKTsKLX0KLQotdm9p
ZCBWOERPTVdpbmRvd1NoZWxsOjpzZXRTZWN1cml0eVRva2VuKCkKLXsKLSAgICBEb2N1bWVudCog
ZG9jdW1lbnQgPSBtX2ZyYW1lLT5kb2N1bWVudCgpOwotCi0gICAgLy8gRklYTUU6IFRoaXMgc2hv
dWxkbid0IGJlIHBvc3NpYmxlIGFueW1vcmUuCi0gICAgaWYgKCFkb2N1bWVudCkgewotICAgICAg
ICBtX2NvbnRleHQtPlVzZURlZmF1bHRTZWN1cml0eVRva2VuKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBBc2sgdGhlIGRvY3VtZW50J3MgU2VjdXJpdHlPcmlnaW4gdG8gZ2Vu
ZXJhdGUgYSBzZWN1cml0eSB0b2tlbi4KLSAgICAvLyBJZiB0d28gdG9rZW5zIGFyZSBlcXVhbCwg
dGhlbiB0aGUgU2VjdXJpdHlPcmlnaW5zIGNhbkFjY2VzcyBlYWNoIG90aGVyLgotICAgIC8vIElm
IHR3byB0b2tlbnMgYXJlIG5vdCBlcXVhbCwgdGhlbiB3ZSBoYXZlIHRvIGNhbGwgY2FuQWNjZXNz
LgotICAgIC8vIE5vdGU6IHdlIGNhbid0IHVzZSB0aGUgSFRUUE9yaWdpbiBpZiBpdCB3YXMgc2V0
IGZyb20gdGhlIERPTS4KLSAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0gZG9jdW1lbnQtPnNl
Y3VyaXR5T3JpZ2luKCk7Ci0gICAgU3RyaW5nIHRva2VuOwotICAgIGlmICghb3JpZ2luLT5kb21h
aW5XYXNTZXRJbkRPTSgpKQotICAgICAgICB0b2tlbiA9IGRvY3VtZW50LT5zZWN1cml0eU9yaWdp
bigpLT50b1N0cmluZygpOwotCi0gICAgLy8gQW4gZW1wdHkgb3IgIm51bGwiIHRva2VuIG1lYW5z
IHdlIGFsd2F5cyBoYXZlIHRvIGNhbGwKLSAgICAvLyBjYW5BY2Nlc3MuIFRoZSB0b1N0cmluZyBt
ZXRob2Qgb24gc2VjdXJpdHlPcmlnaW5zIHJldHVybnMgdGhlCi0gICAgLy8gc3RyaW5nICJudWxs
IiBmb3IgZW1wdHkgc2VjdXJpdHkgb3JpZ2lucyBhbmQgZm9yIHNlY3VyaXR5Ci0gICAgLy8gb3Jp
Z2lucyB0aGF0IHNob3VsZCBvbmx5IGFsbG93IGFjY2VzcyB0byB0aGVtc2VsdmVzLiBJbiB0aGlz
Ci0gICAgLy8gY2FzZSwgd2UgdXNlIHRoZSBnbG9iYWwgb2JqZWN0IGFzIHRoZSBzZWN1cml0eSB0
b2tlbiB0byBhdm9pZAotICAgIC8vIGNhbGxpbmcgY2FuQWNjZXNzIHdoZW4gYSBzY3JpcHQgYWNj
ZXNzZXMgaXRzIG93biBvYmplY3RzLgotICAgIGlmICh0b2tlbi5pc0VtcHR5KCkgfHwgdG9rZW4g
PT0gIm51bGwiKSB7Ci0gICAgICAgIG1fY29udGV4dC0+VXNlRGVmYXVsdFNlY3VyaXR5VG9rZW4o
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIENTdHJpbmcgdXRmOFRva2VuID0gdG9r
ZW4udXRmOCgpOwotICAgIC8vIE5PVEU6IFY4IGRvZXMgaWRlbnRpdHkgY29tcGFyaXNvbiBpbiBm
YXN0IHBhdGgsIG11c3QgdXNlIGEgc3ltYm9sCi0gICAgLy8gYXMgdGhlIHNlY3VyaXR5IHRva2Vu
LgotICAgIG1fY29udGV4dC0+U2V0U2VjdXJpdHlUb2tlbih2ODo6U3RyaW5nOjpOZXdTeW1ib2wo
dXRmOFRva2VuLmRhdGEoKSwgdXRmOFRva2VuLmxlbmd0aCgpKSk7CisgICAgbV9jb250ZXh0LT5H
bG9iYWwoKS0+Rm9yY2VEZWxldGUodjg6OlN0cmluZzo6TmV3U3ltYm9sKCJkb2N1bWVudCIpKTsK
IH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjp1cGRhdGVEb2N1bWVudCgpCiB7Ci0gICAgLy8g
RklYTUU6IFRoaXMgc2hvdWxkbid0IGJlIHBvc3NpYmxlIGFueW1vcmUuCi0gICAgaWYgKCFtX2Zy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KICAgICBpZiAobV9nbG9iYWwuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUaGVyZSBpcyBhbiBleGlzdGluZyBK
YXZhU2NyaXB0IHdyYXBwZXIgZm9yIHRoZSBnbG9iYWwgb2JqZWN0Ci0gICAgLy8gb2YgdGhpcyBm
cmFtZS4gSmF2YVNjcmlwdCBjb2RlIGluIG90aGVyIGZyYW1lcyBtaWdodCBob2xkIGEKLSAgICAv
LyByZWZlcmVuY2UgdG8gdGhpcyB3cmFwcGVyLiBXZSBlYWdlcmx5IGluaXRpYWxpemUgdGhlIEph
dmFTY3JpcHQKLSAgICAvLyBjb250ZXh0IGZvciB0aGUgbmV3IGRvY3VtZW50IHRvIG1ha2UgcHJv
cGVydHkgYWNjZXNzIG9uIHRoZQotICAgIC8vIGdsb2JhbCBvYmplY3Qgd3JhcHBlciBzdWNjZWVk
LgotICAgIGlmICghaW5pdENvbnRleHRJZk5lZWRlZCgpKQorICAgIGlmICghaW5pdGlhbGl6ZUlm
TmVlZGVkKCkpCiAgICAgICAgIHJldHVybjsKLQotICAgIC8vIFdlIGhhdmUgYSBuZXcgZG9jdW1l
bnQgYW5kIHdlIG5lZWQgdG8gdXBkYXRlIHRoZSBjYWNoZS4KLSAgICB1cGRhdGVEb2N1bWVudFdy
YXBwZXJDYWNoZSgpOwotCisgICAgdXBkYXRlRG9jdW1lbnRQcm9wZXJ0eSgpOwogICAgIHVwZGF0
ZVNlY3VyaXR5T3JpZ2luKCk7CiB9CiAKLXN0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gZ2V0
dGVyKHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBwcm9wZXJ0eSwgY29uc3Qgdjg6OkFjY2Vzc29ySW5m
byYgaW5mbykKK3N0YXRpYyB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gbmFtZWRJdGVtR2V0dGVyRm9y
SFRNTERvY3VtZW50KHY4OjpMb2NhbDx2ODo6U3RyaW5nPiBwcm9wZXJ0eSwgY29uc3Qgdjg6OkFj
Y2Vzc29ySW5mbyYgaW5mbykKIHsKLSAgICAvLyBGSVhNRTogQ29uc2lkZXIgcGFzc2luZyBBdG9t
aWNTdHJpbmdJbXBsIGRpcmVjdGx5LgogICAgIEF0b21pY1N0cmluZyBuYW1lID0gdG9XZWJDb3Jl
QXRvbWljU3RyaW5nKHByb3BlcnR5KTsKLSAgICBIVE1MRG9jdW1lbnQqIGh0bWxEb2N1bWVudCA9
IFY4SFRNTERvY3VtZW50Ojp0b05hdGl2ZShpbmZvLkhvbGRlcigpKTsKLSAgICBBU1NFUlQoaHRt
bERvY3VtZW50KTsKLSAgICB2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gcmVzdWx0ID0gVjhIVE1MRG9j
dW1lbnQ6OkdldE5hbWVkUHJvcGVydHkoaHRtbERvY3VtZW50LCBuYW1lLCBpbmZvLkdldElzb2xh
dGUoKSk7CisgICAgSFRNTERvY3VtZW50KiBkb2N1bWVudCA9IFY4SFRNTERvY3VtZW50Ojp0b05h
dGl2ZShpbmZvLkhvbGRlcigpKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQpOworCisgICAgdjg6Okhh
bmRsZTx2ODo6VmFsdWU+IHJlc3VsdCA9IFY4SFRNTERvY3VtZW50OjpHZXROYW1lZFByb3BlcnR5
KGRvY3VtZW50LCBuYW1lLCBpbmZvLkdldElzb2xhdGUoKSk7CiAgICAgaWYgKCFyZXN1bHQuSXNF
bXB0eSgpKQogICAgICAgICByZXR1cm4gcmVzdWx0OworCiAgICAgdjg6OkhhbmRsZTx2ODo6VmFs
dWU+IHByb3RvdHlwZSA9IGluZm8uSG9sZGVyKCktPkdldFByb3RvdHlwZSgpOwogICAgIGlmIChw
cm90b3R5cGUtPklzT2JqZWN0KCkpCiAgICAgICAgIHJldHVybiBwcm90b3R5cGUuQXM8djg6Ok9i
amVjdD4oKS0+R2V0KHByb3BlcnR5KTsKLSAgICByZXR1cm4gdjg6OlVuZGVmaW5lZCgpOworCisg
ICAgcmV0dXJuIHY4OjpVbmRlZmluZWQoaW5mby5HZXRJc29sYXRlKCkpOwogfQogCiB2b2lkIFY4
RE9NV2luZG93U2hlbGw6Om5hbWVkSXRlbUFkZGVkKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICBpZiAoIWluaXRDb250ZXh0SWZOZWVkZWQo
KSkKKyAgICBpZiAoIWluaXRpYWxpemVJZk5lZWRlZCgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICB2ODo6SGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Ci0gICAgdjg6OkNvbnRleHQ6OlNjb3BlIGNv
bnRleHRTY29wZShtX2NvbnRleHQuZ2V0KCkpOworICAgIHY4OjpDb250ZXh0OjpTY29wZSBzY29w
ZShtX2NvbnRleHQuZ2V0KCkpOwogCi0gICAgQVNTRVJUKCFtX2RvY3VtZW50LmlzRW1wdHkoKSk7
Ci0gICAgY2hlY2tEb2N1bWVudFdyYXBwZXIobV9kb2N1bWVudC5nZXQoKSwgZG9jdW1lbnQpOwot
ICAgIG1fZG9jdW1lbnQtPlNldEFjY2Vzc29yKHY4U3RyaW5nKG5hbWUpLCBnZXR0ZXIpOworICAg
IEFTU0VSVCghbV9kb2N1bWVudFdyYXBwZXIuaXNFbXB0eSgpKTsKKyAgICBjaGVja0RvY3VtZW50
V3JhcHBlcihtX2RvY3VtZW50V3JhcHBlci5nZXQoKSwgZG9jdW1lbnQpOworICAgIG1fZG9jdW1l
bnRXcmFwcGVyLT5TZXRBY2Nlc3Nvcih2OFN0cmluZyhuYW1lKSwgbmFtZWRJdGVtR2V0dGVyRm9y
SFRNTERvY3VtZW50KTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1NoZWxsOjpuYW1lZEl0ZW1SZW1v
dmVkKEhUTUxEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKQEAg
LTU2OCwyMyArNDU0LDM1IEBAIHZvaWQgVjhET01XaW5kb3dTaGVsbDo6bmFtZWRJdGVtUmVtb3Zl
ZChIVE1MRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBBdG9taWNTdHJpCiAgICAgaWYgKGRvY3Vt
ZW50LT5oYXNOYW1lZEl0ZW0obmFtZS5pbXBsKCkpIHx8IGRvY3VtZW50LT5oYXNFeHRyYU5hbWVk
SXRlbShuYW1lLmltcGwoKSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghaW5pdENvbnRl
eHRJZk5lZWRlZCgpKQorICAgIGlmICghaW5pdGlhbGl6ZUlmTmVlZGVkKCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKLSAgICB2ODo6Q29udGV4
dDo6U2NvcGUgY29udGV4dFNjb3BlKG1fY29udGV4dC5nZXQoKSk7CisgICAgdjg6OkNvbnRleHQ6
OlNjb3BlIHNjb3BlKG1fY29udGV4dC5nZXQoKSk7CiAKLSAgICBBU1NFUlQoIW1fZG9jdW1lbnQu
aXNFbXB0eSgpKTsKLSAgICBjaGVja0RvY3VtZW50V3JhcHBlcihtX2RvY3VtZW50LmdldCgpLCBk
b2N1bWVudCk7Ci0gICAgbV9kb2N1bWVudC0+RGVsZXRlKHY4U3RyaW5nKG5hbWUpKTsKKyAgICBB
U1NFUlQoIW1fZG9jdW1lbnRXcmFwcGVyLmlzRW1wdHkoKSk7CisgICAgY2hlY2tEb2N1bWVudFdy
YXBwZXIobV9kb2N1bWVudFdyYXBwZXIuZ2V0KCksIGRvY3VtZW50KTsKKyAgICBtX2RvY3VtZW50
V3JhcHBlci0+RGVsZXRlKHY4U3RyaW5nKG5hbWUpKTsKIH0KIAogdm9pZCBWOERPTVdpbmRvd1No
ZWxsOjp1cGRhdGVTZWN1cml0eU9yaWdpbigpCiB7CiAgICAgaWYgKG1fY29udGV4dC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybjsKKwogICAgIHY4OjpIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsK
LSAgICBzZXRTZWN1cml0eVRva2VuKCk7CisKKyAgICBTZWN1cml0eU9yaWdpbiogb3JpZ2luID0g
bV9mcmFtZS0+ZG9jdW1lbnQoKS0+c2VjdXJpdHlPcmlnaW4oKTsKKyAgICBTdHJpbmcgdG9rZW4g
PSBvcmlnaW4tPnRvU3RyaW5nKCk7CisKKyAgICBpZiAob3JpZ2luLT5kb21haW5XYXNTZXRJbkRP
TSgpIHx8IHRva2VuID09ICJudWxsIikgeworICAgICAgICBtX2NvbnRleHQtPlVzZURlZmF1bHRT
ZWN1cml0eVRva2VuKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDU3RyaW5nIHRv
a2VuQXNVVEY4ID0gdG9rZW4udXRmOCgpOworICAgIC8vIE5PVEU6IFY4IGRvZXMgaWRlbnRpdHkg
Y29tcGFyaXNvbiBpbiBmYXN0IHBhdGgsIHNvIHdlIG11c3QgdXNlIGEgc3ltYm9sIGFzIHRoZSBz
ZWN1cml0eSB0b2tlbi4KKyAgICBtX2NvbnRleHQtPlNldFNlY3VyaXR5VG9rZW4odjg6OlN0cmlu
Zzo6TmV3U3ltYm9sKHRva2VuQXNVVEY4LmRhdGEoKSwgdG9rZW5Bc1VURjgubGVuZ3RoKCkpKTsK
IH0KIAogfSAvLyBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92
OC9WOERPTVdpbmRvd1NoZWxsLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdp
bmRvd1NoZWxsLmgKaW5kZXggZTJmZjgxOTM3MGUzNWRkZTBmYTVmOGRjZTAxOTViMmI4MTEzMDdh
ZS4uYzc4MDJmNjY2NGJlNzI1YTQ4OWIyMzdjZjg1OTlhNjgzMzNlYmE5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuaApAQCAtNDcsMzEgKzQ3LDI2
IEBAIGNsYXNzIERPTVdpbmRvdzsKIGNsYXNzIEZyYW1lOwogY2xhc3MgSFRNTERvY3VtZW50Owog
Ci0vLyBWOFdpbmRvd1NoZWxsIHJlcHJlc2VudHMgYWxsIHRoZSBwZXItZ2xvYmFsIG9iamVjdCBz
dGF0ZSBmb3IgYSBGcmFtZSB0aGF0Ci0vLyBwZXJzaXN0IGJldHdlZW4gbmF2aWdhdGlvbnMuCiBj
bGFzcyBWOERPTVdpbmRvd1NoZWxsIDogcHVibGljIFJlZkNvdW50ZWQ8VjhET01XaW5kb3dTaGVs
bD4gewogcHVibGljOgogICAgIHN0YXRpYyBQYXNzUmVmUHRyPFY4RE9NV2luZG93U2hlbGw+IGNy
ZWF0ZShGcmFtZSopOwogCiAgICAgdjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29udGV4dC5nZXQoKTsgfQogCi0gICAgLy8gVXBkYXRlIGRvY3VtZW50
IG9iamVjdCBvZiB0aGUgZnJhbWUuCiAgICAgdm9pZCB1cGRhdGVEb2N1bWVudCgpOwogCiAgICAg
dm9pZCBuYW1lZEl0ZW1BZGRlZChIVE1MRG9jdW1lbnQqLCBjb25zdCBBdG9taWNTdHJpbmcmKTsK
ICAgICB2b2lkIG5hbWVkSXRlbVJlbW92ZWQoSFRNTERvY3VtZW50KiwgY29uc3QgQXRvbWljU3Ry
aW5nJik7CiAKLSAgICAvLyBVcGRhdGUgdGhlIHNlY3VyaXR5IG9yaWdpbiBvZiBhIGRvY3VtZW50
Ci0gICAgLy8gKGUuZy4sIGFmdGVyIHNldHRpbmcgZG9jb3VtZW50LmRvbWFpbikuCisgICAgLy8g
VXBkYXRlIHRoZSBzZWN1cml0eSBvcmlnaW4gb2YgYSBkb2N1bWVudCAoZS5nLiwgYWZ0ZXIgc2V0
dGluZyBkb2N1bWVudC5kb21haW4pLgogICAgIHZvaWQgdXBkYXRlU2VjdXJpdHlPcmlnaW4oKTsK
IAogICAgIGJvb2wgaXNDb250ZXh0SW5pdGlhbGl6ZWQoKTsKIAogICAgIHY4OjpQZXJzaXN0ZW50
PHY4OjpDb250ZXh0PiBjcmVhdGVOZXdDb250ZXh0KHY4OjpIYW5kbGU8djg6Ok9iamVjdD4gZ2xv
YmFsLCBpbnQgZXh0ZW5zaW9uR3JvdXAsIGludCB3b3JsZElkKTsKLSAgICB2b2lkIHNldENvbnRl
eHQodjg6OkhhbmRsZTx2ODo6Q29udGV4dD4pOwogICAgIHN0YXRpYyBib29sIGluc3RhbGxET01X
aW5kb3codjg6OkhhbmRsZTx2ODo6Q29udGV4dD4gY29udGV4dCwgRE9NV2luZG93Kik7CiAKLSAg
ICBib29sIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICBib29sIGluaXRpYWxpemVJZk5lZWRl
ZCgpOwogICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRXcmFwcGVyKHY4OjpIYW5kbGU8djg6Ok9iamVj
dD4gd3JhcHBlcik7CiAKICAgICB2b2lkIGNsZWFyRm9yTmF2aWdhdGlvbigpOwpAQCAtODIsMTkg
Kzc3LDEzIEBAIHB1YmxpYzoKICAgICBWOFBlckNvbnRleHREYXRhKiBwZXJDb250ZXh0RGF0YSgp
IHsgcmV0dXJuIG1fcGVyQ29udGV4dERhdGEuZ2V0KCk7IH0KIAogcHJpdmF0ZToKLSAgICBWOERP
TVdpbmRvd1NoZWxsKEZyYW1lKik7CisgICAgZXhwbGljaXQgVjhET01XaW5kb3dTaGVsbChGcmFt
ZSopOwogCi0gICAgdm9pZCBkaXNwb3NlQ29udGV4dEhhbmRsZXMoKTsKKyAgICB2b2lkIGluaXRp
YWxpemVDb250ZXh0KHY4OjpMb2NhbDx2ODo6Q29udGV4dD4pOworICAgIHZvaWQgZGlzcG9zZUNv
bnRleHQoKTsKIAotICAgIHZvaWQgc2V0U2VjdXJpdHlUb2tlbigpOwotICAgIHZvaWQgY2xlYXJE
b2N1bWVudFdyYXBwZXIoKTsKLQotICAgIC8vIFRoZSBKYXZhU2NyaXB0IHdyYXBwZXIgZm9yIHRo
ZSBkb2N1bWVudCBvYmplY3QgaXMgY2FjaGVkIG9uIHRoZSBnbG9iYWwKLSAgICAvLyBvYmplY3Qg
Zm9yIGZhc3QgYWNjZXNzLiBVcGRhdGVEb2N1bWVudFdyYXBwZXJDYWNoZSBzZXRzIHRoZSB3cmFw
cGVyCi0gICAgLy8gZm9yIHRoZSBjdXJyZW50IGRvY3VtZW50IG9uIHRoZSBnbG9iYWwgb2JqZWN0
LiBDbGVhckRvY3VtZW50V3JhcHBlckNhY2hlCi0gICAgLy8gZGVsZXRlcyB0aGUgZG9jdW1lbnQg
d3JhcHBlciBmcm9tIHRoZSBnbG9iYWwgb2JqZWN0LgotICAgIHZvaWQgdXBkYXRlRG9jdW1lbnRX
cmFwcGVyQ2FjaGUoKTsKLSAgICB2b2lkIGNsZWFyRG9jdW1lbnRXcmFwcGVyQ2FjaGUoKTsKKyAg
ICB2b2lkIHVwZGF0ZURvY3VtZW50UHJvcGVydHkoKTsKKyAgICB2b2lkIGNsZWFyRG9jdW1lbnRQ
cm9wZXJ0eSgpOwogCiAgICAgRnJhbWUqIG1fZnJhbWU7CiAKQEAgLTEwMiw3ICs5MSw3IEBAIHBy
aXZhdGU6CiAKICAgICBTY29wZWRQZXJzaXN0ZW50PHY4OjpDb250ZXh0PiBtX2NvbnRleHQ7CiAg
ICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6T2JqZWN0PiBtX2dsb2JhbDsKLSAgICBTY29wZWRQZXJz
aXN0ZW50PHY4OjpPYmplY3Q+IG1fZG9jdW1lbnQ7CisgICAgU2NvcGVkUGVyc2lzdGVudDx2ODo6
T2JqZWN0PiBtX2RvY3VtZW50V3JhcHBlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVj
dXRpb25Qcm94eS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9Xb3JrZXJDb250ZXh0
RXhlY3V0aW9uUHJveHkuY3BwCmluZGV4IGU3MDU5ZmU2OTI4ZTgwNmE1NTI2ODk5NWQxYzgyN2E4
OTQ4MTQ3ZWEuLjBjNGFiZjcxYjc3MDk0NzcyMzBiMWNkZGRhYTlhNzg0Y2ZmZjA1ZWMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtlckNvbnRleHRFeGVjdXRpb25Q
cm94eS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmNwcApAQCAtMTM1LDcgKzEzNSw3IEBAIHZvaWQgV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5Ojppbml0SXNvbGF0ZSgpCiAgICAgVjhQZXJJc29sYXRlRGF0YTo6ZW5zdXJl
SW5pdGlhbGl6ZWQodjg6Oklzb2xhdGU6OkdldEN1cnJlbnQoKSk7CiB9CiAKLWJvb2wgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0Q29udGV4dElmTmVlZGVkKCkKK2Jvb2wgV29ya2Vy
Q29udGV4dEV4ZWN1dGlvblByb3h5Ojppbml0aWFsaXplSWZOZWVkZWQoKQogewogICAgIC8vIEJh
aWwgb3V0IGlmIHRoZSBjb250ZXh0IGhhcyBhbHJlYWR5IGJlZW4gaW5pdGlhbGl6ZWQuCiAgICAg
aWYgKCFtX2NvbnRleHQuSXNFbXB0eSgpKQpAQCAtMjA2LDcgKzIwNiw3IEBAIFNjcmlwdFZhbHVl
IFdvcmtlckNvbnRleHRFeGVjdXRpb25Qcm94eTo6ZXZhbHVhdGUoY29uc3QgU3RyaW5nJiBzY3Jp
cHQsIGNvbnN0IFN0CiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIGhzOwogCi0gICAgaWYgKCFpbml0
Q29udGV4dElmTmVlZGVkKCkpCisgICAgaWYgKCFpbml0aWFsaXplSWZOZWVkZWQoKSkKICAgICAg
ICAgcmV0dXJuIFNjcmlwdFZhbHVlKCk7CiAKICAgICB2ODo6Q29udGV4dDo6U2NvcGUgc2NvcGUo
bV9jb250ZXh0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1dvcmtl
ckNvbnRleHRFeGVjdXRpb25Qcm94eS5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29y
a2VyQ29udGV4dEV4ZWN1dGlvblByb3h5LmgKaW5kZXggNWJjMjgxMjhjZGQ2Y2JiMjZjOTc0NTFk
ODViMzIzY2NkMjBhMTEwMC4uMjIwYjE0MjI1NTY2Mjc0YzA1NmM2YmUyOWMzNGI3YmIyY2I5OTcy
NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29udGV4dEV4
ZWN1dGlvblByb3h5LmgKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvV29ya2VyQ29u
dGV4dEV4ZWN1dGlvblByb3h5LmgKQEAgLTc4LDcgKzc4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiAgICAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBpbml0SXNvbGF0ZSgpOwotICAgICAgICBi
b29sIGluaXRDb250ZXh0SWZOZWVkZWQoKTsKKyAgICAgICAgYm9vbCBpbml0aWFsaXplSWZOZWVk
ZWQoKTsKICAgICAgICAgdm9pZCBkaXNwb3NlKCk7CiAKICAgICAgICAgLy8gUnVuIGFuIGFscmVh
ZHkgY29tcGlsZWQgc2NyaXB0Lgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>