<?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>140875</bug_id>
          
          <creation_ts>2015-01-25 16:26:01 -0800</creation_ts>
          <short_desc>Streamline SVGUseElement shadow tree handling and make it use SVGElementInstance less</short_desc>
          <delta_ts>2015-01-25 19:22:15 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</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>
          
          <blocked>140602</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>andersca</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>sam</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1064039</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-25 16:26:01 -0800</bug_when>
    <thetext>Streamline SVGUseElement and make it use SVGElementInstance less</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064044</commentid>
    <comment_count>1</comment_count>
      <attachid>245317</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-25 16:58:56 -0800</bug_when>
    <thetext>Created attachment 245317
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064046</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2015-01-25 17:01:25 -0800</bug_when>
    <thetext>Added a few people to the cc list. Antti, Kling, note the element iterator bug fix and assertion enhancement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064062</commentid>
    <comment_count>3</comment_count>
      <attachid>245317</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-25 19:22:12 -0800</bug_when>
    <thetext>Comment on attachment 245317
Patch

Clearing flags on attachment: 245317

Committed r179101: &lt;http://trac.webkit.org/changeset/179101&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1064063</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-01-25 19:22:15 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>245317</attachid>
            <date>2015-01-25 16:58:56 -0800</date>
            <delta_ts>2015-01-25 19:22:12 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-140875-20150125165858.patch</filename>
            <type>text/plain</type>
            <size>43352</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5MDY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMDA5Yjg5ZTM0NzM4YjU5
ZDQ1NDVkZWNjZGE3MzU2OGFhODAxM2U4Ni4uYzFlMmM5N2JlMjhiMTZkZTI4ZmVhNzhmNmZhZTQ2
YzQxYzBmYjEyYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk4IEBACisyMDE1LTAxLTI1ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBTdHJlYW1saW5lIFNWR1VzZUVs
ZW1lbnQgc2hhZG93IHRyZWUgaGFuZGxpbmcgYW5kIG1ha2UgaXQgdXNlIFNWR0VsZW1lbnRJbnN0
YW5jZSBsZXNzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDA4NzUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBSZWZhY3RvcmluZyBvZiBjb2RlIHRoYXQgaXMgcHJldHR5IHdlbGwgY292ZXJlZCBieSBleGlz
dGluZyB0ZXN0cywgc28KKyAgICAgICAgbm90IGFkZGluZyBuZXcgdGVzdHMuCisKKyAgICAgICAg
SW5zcGlyZWQgYnkgd29yayBSb2IgQnVpcyBkaWQgaW4gQmxpbms6CisKKyAgICAgICAgICAgIGh0
dHA6Ly9zcmMuY2hyb21pdW0ub3JnL3ZpZXd2Yy9ibGluaz92aWV3PXJldmlzaW9uJnJldmlzaW9u
PTE3MzI3MworCisgICAgICAgIEFsdGhnb3VoIHRoYXQgaXMgbGVzcyB0aGFuIGhhbGYgb2Ygd2hh
dCBlbmRlZCB1cCBpbiB0aGlzIHBhdGNoLgorCisgICAgICAgICogZG9tL0NvbnRhaW5lck5vZGUu
aDogRml4ZWQgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uIHNvIGl0IGNhbiBiZQorICAgICAgICBj
b3BpZWQgd2l0aG91dCBjYXVzaW5nIGFuIHVuZGVyZmxvdyBvZiBOb0V2ZW50RGlzcGF0Y2hBc3Nl
cnRpb246OnNfY291bnQuCisgICAgICAgIE1hZGUgdGhlIGNvcHkgY29uc3RydWN0b3IgY2FsbCB0
aGUgZGVmYXVsdCBjb25zdHJ1Y3Rvci4gQWxzbyBjaGFuZ2VkIGl0CisgICAgICAgIHRvIGJlIGJh
c2VkIG9uIEFTU0VSVF9ESVNBQkxFRCByYXRoZXIgdGhhbiBOREVCVUcgYW5kIHR3ZWFrZWQgaXQg
YSBiaXQuCisKKyAgICAgICAgKiBkb20vRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucy5oOiBSZW1v
dmVkIGFuIHVubmVjZXNzYXJ5IGluY2x1ZGUgYW5kCisgICAgICAgIGFuIHVubmVjZXNzYXJ5IGRl
ZmF1bHQgY29uc3RydWN0b3IuIENoYW5nZWQgdG8gdXNlIFdURjo6T3B0aW9uYWwgaW5zdGVhZAor
ICAgICAgICBvZiBXVEY6Ok93blB0ciB0byBoYW5kbGUgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9u
LCB3aGljaCBtYWtlcyB0aGlzIGNsYXNzCisgICAgICAgIGNvcHlhYmxlIGFuZCBhc3NpZ25hYmxl
LCB3aGljaCBpbiB0dXJuIG1ha2VzIHRoZSBpdGVyYXRvcnMgYmFzZWQgb24gdGhpcworICAgICAg
ICBjb3B5YWJsZSBhbmQgYXNzaWduYWJsZSwgd2hpY2ggaXMgd2hhdCBJIG5lZWRlZCBpbiBTVkdV
c2VFbGVtZW50IGNvZGUuCisgICAgICAgIEFsc28gc2ltcGxpZmllZCBjb2RlIGluIGEgY291cGxl
IHBsYWNlcy4KKworICAgICAgICAqIGRvbS9UeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0b3Iu
aDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvckFkYXB0
ZXI8RWxlbWVudFR5cGU+Ojpmcm9tKToKKyAgICAgICAgRml4ZWQgYW4gZXJyb3Igd2hlcmUgdGhl
IGFyZ3VtZW50cyB0byBUcmF2ZXJzYWw6Om5leHQgd2VyZSBwYXNzZWQgYmFja3dhcmRzLgorICAg
ICAgICBUaGlzIGxlZCB0byBpbmNvbXBsZXRlIGl0ZXJhdGlvbiBpbiBTVkdVc2VFbGVtZW50IGNv
ZGUsIGFuZCBhbiBpbW1lZGlhdGUKKyAgICAgICAgYXNzZXJ0aW9uIGZhaWx1cmUuIFByb2JhYmx5
IGNvdWxkIHVzZSBzb21lIHVuaXQgdGVzdCBjb3ZlcmFnZSwgdG9vLgorICAgICAgICAoV2ViQ29y
ZTo6VHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRlcmF0b3JBZGFwdGVyPEVsZW1lbnRUeXBl
Pjo6ZnJvbSk6CisgICAgICAgIERpdHRvLgorCisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6YW5pbWF0ZWRJbnN0YW5jZVJv
b3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6dHJhbnNmZXJT
aXplQXR0cmlidXRlc1RvU2hhZG93VHJlZVRhcmdldENsb25lKToKKyAgICAgICAgUmVtb3ZlZCB0
aGUgb3JpZ2luYWxFbGVtZW50IGFyZ3VtZW50LCBzaW5jZSB3ZSBjYW4gdXNlIHRoZSBjb3JyZXNw
b25kaW5nRWxlbWVudAorICAgICAgICB0byBnZXQgYmFjayB0byBpdC4gUmVtb3ZlZCB0aGUgdXNl
RWxlbWVudCBhcmd1bWVudCBhbmQgY2hhbmdlZCB0aGlzIGludG8gYQorICAgICAgICBtZW1iZXIg
ZnVuY3Rpb24uCisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpzdmdBdHRyaWJ1dGVD
aGFuZ2VkKTogVXBkYXRlZCBmb3IgYWJvdmUgY2hhbmdlcy4KKyAgICAgICAgKFdlYkNvcmU6OnN1
YnRyZWVDb250YWluc0Rpc2FsbG93ZWRFbGVtZW50KTogRGVsZXRlZCB0aGlzIGZ1bmN0aW9uLCBi
ZWNhdXNlCisgICAgICAgIGl0IHdhcyBvbmx5IHVzZWQgdG8gb3B0aW1pemUgYnkgbm90IGNhbGxp
bmcgcmVtb3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRyZWUsCisgICAgICAgIGJ1dCB0aGF0
IGZ1bmN0aW9uIGlzIGFscmVhZHkgc2ltaWxhcmx5IGVmZmljaWVudCB3aGVuIGNhbGxlZCB0byBk
byBub3RoaW5nLCBzbworICAgICAgICB0aGUgcHJlZmxpZ2h0IHdhcyBub3QgdXNlZnVsLgorICAg
ICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6Y2xlYXJSZXNvdXJjZVJlZmVyZW5jZXMpOiBD
YWxsIHVzZXJBZ2VudFNoYWRvd1Jvb3QKKyAgICAgICAgaW5zdGVhZCBvZiBzaGFkb3dSb290IGZv
ciBjbGFyaXR5LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6YnVpbGRQZW5kaW5n
UmVzb3VyY2UpOiBQYXNzIGEgcmVmZXJlbmNlIGluc3RlYWQgb2YKKyAgICAgICAgYSBwb2ludGVy
IHRvIGJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlLCBzaW5jZSBpdCdzIGd1YXJhbnRlZWQgdG8g
bm90IGJlIG51bGwuCisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpzaGFkb3dUcmVl
VGFyZ2V0Q2xvbmUpOiBBZGRlZC4gUmV0dXJucyB0aGUgU1ZHIGVsZW1lbnQKKyAgICAgICAgaW5z
aWRlIHRoZSBzaGFkb3cgdHJlZSB0aGF0IGNvcnJlc3BvbmRzIHRvIHRoZSB1c2UgZWxlbWVudCdz
IHRhcmdldC4KKyAgICAgICAgKFdlYkNvcmU6OlNWR1VzZUVsZW1lbnQ6OmJ1aWxkU2hhZG93QW5k
SW5zdGFuY2VUcmVlKTogQ2hhbmdlZCBhcmd1bWVudCB0eXBlCisgICAgICAgIHRvIGEgcmVmZXJl
bmNlIGluc3RlYWQgb2YgYSBwb2ludGVyLiBSZW1vdmVkIGNvbW1lbnRzIGV4cGxhaW5pbmcgd2h5
IHdlIGhhdmUKKyAgICAgICAgYW4gaW5zdGFuY2UgdHJlZSwgc2luY2Ugc29vbiB3ZSB3aWxsIG5v
dCBoYXZlIG9uZS4gUmVtb3ZlZCBtYW55IGNvbW1lbnRzIHRoYXQKKyAgICAgICAgc2ltcGx5IHN0
YXRlIHRoZSBuYW1lcyBvZiB0aGUgZnVuY3Rpb25zIHRoZXkgYXJlIGNvbW1lbnRpbmcgb24gYW5k
IHBlcmhhcHMgYSB0aW55CisgICAgICAgIGJpdCBtb3JlLiBDaGFuZ2VkIHRvIG5vdCB1c2UgbV90
YXJnZXRFbGVtZW50SW5zdGFuY2UgYXMgbXVjaCwgZGVhbGluZyB3aXRoIHRoZQorICAgICAgICBz
aGFkb3cgdHJlZSBkaXJlY3RseSBpbnN0ZWFkIG9mIHRocm91Z2ggdGhlIGluc3RhbmNlIHRyZWUu
CisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50Ojp0b0NsaXBQYXRoKTogVXNlIHNoYWRv
d1RyZWVUYXJnZXRDbG9uZSBpbnN0ZWFkIG9mCisgICAgICAgIGdldHRpbmcgYXQgdGhlIGVsZW1l
bnQgdGhyb3VnaCBtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS4KKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OnJlbmRlcmVyQ2xpcENoaWxkKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpyZW1vdmVEaXNhbGxvd2VkRWxlbWVudHNGcm9tU3VidHJlZSk6IFJlbW92ZWQgdGhlIGlubGlu
ZSBrZXl3b3JkLAorICAgICAgICBzaW5jZSB0aGVyZSdzIG5vIGdvb2QgcmVhc29uIHRvIGlubGlu
ZSB0aGlmIGZ1bmN0aW9uJ3MgYm9keS4gSW1wcm92ZWQgbG9jYWwKKyAgICAgICAgdmFyaWFibGUg
bmFtZXMgYW5kIHVzZWQgYSBtb2Rlcm4gZm9yIGxvb3AuIEFsc28gbW92ZWQgdGhlIGNvbW1lbnQg
YWJvdXQgd2h5CisgICAgICAgIHRoaXMgZnVuY3Rpb24gaXMgdXNlZCBoZXJlIGluc2lkZSB0aGUg
ZnVuY3Rpb24gaW5zdGVhZCBvZiByZXBlYXRpbmcgaXQgYXQKKyAgICAgICAgZWFjaCBjYWxsIHNp
dGUuCisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50OjpidWlsZFNoYWRvd1RyZWUpOiBD
aGFuZ2VkIHRvIHRha2UgYSByZWZlcmVuY2UKKyAgICAgICAgaW5zdGVhZCBvZiBhIHBvaW50ZXIu
IE1vdmVkIHRoZSBjaGVjayB0byBzZWUgaWYgdGhlIHRhcmdldCBpcyBkaXNhbGxvd2VkCisgICAg
ICAgIG91dCBvZiB0aGlzIGZ1bmN0aW9uIGFuZCBpbnRvIGJ1aWxkU2hhZG93QW5kSW5zdGFuY2VU
cmVlLCB3aGljaCBuZWVkcyB0bworICAgICAgICBoYW5kbGUgdGhhdCBmYWlsdXJlIGV4cGxpY2l0
bHkuIFRpZ2h0ZW5lZCB1cCB0aGUgY29kZSBhIGJpdCwgdXNpbmcgUmVmIGluc3RlYWQKKyAgICAg
ICAgb2YgUmVmUHRyLCBwdXR0aW5nIHRoZSBjb21tZW50IGFib3V0IHJlbW92ZURpc2FsbG93ZWRF
bGVtZW50c0Zyb21TdWJ0cmVlIGludG8KKyAgICAgICAgdGhhdCBmdW5jdGlvbiBpdHNlbGYsIGFu
ZCByZW1vdmluZyB0aGUgdW5uZWVkZWQgc3VidHJlZUNvbnRhaW5zRGlzYWxsb3dlZEVsZW1lbnQK
KyAgICAgICAgY2hlY2sgZW50aXJlbHkuCisgICAgICAgIChXZWJDb3JlOjpTVkdVc2VFbGVtZW50
OjpleHBhbmRVc2VFbGVtZW50c0luU2hhZG93VHJlZSk6IFJlbW92ZWQgdGhlIGFyZ3VtZW50LAor
ICAgICAgICBnZXR0aW5nIHRoZSBzaGFkb3cgdHJlZSBmcm9tIHRoZSBzaGFkb3dUcmVlIGZ1bmN0
aW9uIGluc3RlYWQuIFdhbGsgdGhlIHRyZWUKKyAgICAgICAgaXRlcmF0aXZlbHkgaW5zdGVhZCBv
ZiByZWN1cnNpdmVseSwgdXNpbmcgdGhlIGRlc2NlbmRhbnRzT2ZUeXBlIGZ1bmN0aW9uLgorICAg
ICAgICBSZWFycmFuZ2VkIGFuZCBzdHJlYW1saW5lZCB0aGUgbG9naWMuCisgICAgICAgIChXZWJD
b3JlOjpTVkdVc2VFbGVtZW50OjpleHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93VHJlZSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6dHJhbnNmZXJFdmVudExpc3Rl
bmVyc1RvU2hhZG93VHJlZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVu
dDo6dHJhbnNmZXJBdHRyaWJ1dGVzVG9TaGFkb3dUcmVlUmVwbGFjZW1lbnQpOiBSZW5hbWVkCisg
ICAgICAgIHRoaXMgdG8gYXZvaWQgdGhlIHRlcm0gInJlcGxhY2VkIGVsZW1lbnQiLCB3aGljaCBp
cyBub3QgYSByZWFzb25hYmxlIHdheSB0bworICAgICAgICByZWZlciB0byB0aGUgPGc+IGVsZW1l
bnQgaW4gdGhlIHNoYWRvdyB0cmVlIHRoYXQgcmVwbGFjZXMgdGhlIDx1c2U+IGVsZW1lbnQuCisg
ICAgICAgIENoYW5nZWQgdGhlIGFyZ3VtZW50IHR5cGUgdG8gU1ZHR0VsZW1lbnQgdG8gbWFrZSBp
dCBoYXJkZXIgdG8gbWlzdXNlIHRoaXMKKyAgICAgICAgZnVuY3Rpb24gYnkgYWNjaWRlbnQsIGFu
ZCBtYWRlIHRoZSB1c2UgZWxlbWVudCBiZSAidGhpcyIgaW5zdGVhZCBvZiBwYXNzaW5nCisgICAg
ICAgIGl0IGFzIGFuIGFyZ3VtZW50LgorICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6
c2VsZkhhc1JlbGF0aXZlTGVuZ3Rocyk6IENhbGwgaGFzUmVsYXRpdmVMZW5ndGhzCisgICAgICAg
IG9uIHRoZSB0YXJnZXQgaW5zaWRlIHRoZSBzaGFkb3cgdHJlZSByYXRoZXIgdGhhbiB0aGUgb3Jp
Z2luYWwgdGFyZ2V0LCB3aGljaAorICAgICAgICBtYWtlcyBtb3JlIHNlbnNlIGFueXdheSwgYW5k
IGlzIHN0cmFpZ2h0Zm9yd2FyZCBub3cgdGhhdCB3ZSBoYXZlIHRoZQorICAgICAgICBzaGFkb3dU
cmVlVGFyZ2V0Q2xvbmUgZnVuY3Rpb24uIFJlbW92ZXMgdXNlIG9mIG1fdGFyZ2V0RWxlbWVudElu
c3RhbmNlIGhlcmUuCisKKyAgICAgICAgKiBzdmcvU1ZHVXNlRWxlbWVudC5oOiBVcGRhdGVkIGZv
ciBhYm92ZSBjaGFuZ2VzLgorCisgICAgICAgICogc3ZnL1NWR1VzZUVsZW1lbnQuaWRsOiBSZW1v
dmVkIGFuaW1hdGVkSW5zdGFuY2VSb290IGFuZCB0d2Vha2VkIGZvcm1hdHRpbmcuCisKIDIwMTUt
MDEtMjQgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIE1vdmUgaGVp
Z2h0L3dpZHRoIGltcGxlbWVudGF0aW9uIGZvciB1c2UgZWxlbWVudCBmcm9tIFJlbmRlclNWR1Zp
ZXdwb3J0Q29udGFpbmVyIHRvIFNWR1VzZUVsZW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Db250YWluZXJOb2RlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ29udGFpbmVyTm9k
ZS5oCmluZGV4IDRkZmY5OTIxMGIxMTM3YmU4NzNkYjcwYzVkZDJhMWFiM2ZkNzI0YTMuLmQ1MGI2
MDRjOGY3ZTQ3N2IxYWE4N2FhNDFkNmI3MmY5YzNkODNmM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Db250YWluZXJOb2RlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0NvbnRh
aW5lck5vZGUuaApAQCAtMiw3ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtu
b2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3Rv
IChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtNDcsMTYgKzQ3LDIxIEBAIGNsYXNzIE5vRXZlbnREaXNwYXRj
aEFzc2VydGlvbiB7CiBwdWJsaWM6CiAgICAgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uKCkKICAg
ICB7Ci0jaWZuZGVmIE5ERUJVRworI2lmICFBU1NFUlRfRElTQUJMRUQKICAgICAgICAgaWYgKCFp
c01haW5UaHJlYWQoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgc19jb3VudCsrOwor
ICAgICAgICArK3NfY291bnQ7CiAjZW5kaWYKICAgICB9CiAKKyAgICBOb0V2ZW50RGlzcGF0Y2hB
c3NlcnRpb24oY29uc3QgTm9FdmVudERpc3BhdGNoQXNzZXJ0aW9uJikKKyAgICAgICAgOiBOb0V2
ZW50RGlzcGF0Y2hBc3NlcnRpb24oKQorICAgIHsKKyAgICB9CisKICAgICB+Tm9FdmVudERpc3Bh
dGNoQXNzZXJ0aW9uKCkKICAgICB7Ci0jaWZuZGVmIE5ERUJVRworI2lmICFBU1NFUlRfRElTQUJM
RUQKICAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgQVNTRVJUKHNfY291bnQpOwpAQCAtNjQsMTggKzY5LDIwIEBAIHB1YmxpYzoKICNlbmRp
ZgogICAgIH0KIAotI2lmbmRlZiBOREVCVUcKICAgICBzdGF0aWMgYm9vbCBpc0V2ZW50RGlzcGF0
Y2hGb3JiaWRkZW4oKQogICAgIHsKLSAgICAgICAgaWYgKCFpc01haW5UaHJlYWQoKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHNfY291bnQ7Ci0gICAgfQorI2lm
IEFTU0VSVF9ESVNBQkxFRAorICAgICAgICByZXR1cm4gZmFsc2U7CisjZWxzZQorICAgICAgICBy
ZXR1cm4gaXNNYWluVGhyZWFkKCkgJiYgc19jb3VudDsKICNlbmRpZgorICAgIH0KKworI2lmICFB
U1NFUlRfRElTQUJMRUQKIAogcHJpdmF0ZToKLSNpZm5kZWYgTkRFQlVHCiAgICAgV0VCQ09SRV9F
WFBPUlQgc3RhdGljIHVuc2lnbmVkIHNfY291bnQ7CisKICNlbmRpZgogfTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRJdGVyYXRvckFzc2VydGlvbnMuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zLmgKaW5kZXggYzA1NGJhMzcx
NTRhYjE1Yzk4OTBiNjI1ZDkzMzRhNTQwNTQwZjNmZS4uMDMwMzU0ZGNjYzMyZTQxNjIyZjk4YTA3
MGFhODI0MzVjYzg5NzEwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRJ
dGVyYXRvckFzc2VydGlvbnMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEl0ZXJh
dG9yQXNzZXJ0aW9ucy5oCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMt
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTI2LDQ1ICsyNiw0MCBAQAogI2lmbmRlZiBFbGVtZW50SXRlcmF0b3JB
c3NlcnRpb25zX2gKICNkZWZpbmUgRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9uc19oCiAKLSNpbmNs
dWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zIHsKIHB1YmxpYzoKLSAgICBF
bGVtZW50SXRlcmF0b3JBc3NlcnRpb25zKCk7Ci0gICAgRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9u
cyhjb25zdCBFbGVtZW50KiBmaXJzdCk7CisgICAgRWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucyhj
b25zdCBFbGVtZW50KiBmaXJzdCA9IG51bGxwdHIpOwogICAgIGJvb2wgZG9tVHJlZUhhc011dGF0
ZWQoKSBjb25zdDsKICAgICB2b2lkIGRyb3BFdmVudERpc3BhdGNoQXNzZXJ0aW9uKCk7CiAKIHBy
aXZhdGU6CiAgICAgY29uc3QgRG9jdW1lbnQqIG1fZG9jdW1lbnQ7CiAgICAgdWludDY0X3QgbV9p
bml0aWFsRE9NVHJlZVZlcnNpb247Ci0gICAgT3duUHRyPE5vRXZlbnREaXNwYXRjaEFzc2VydGlv
bj4gbV9ub0V2ZW50RGlzcGF0Y2hBc3NlcnRpb247CisgICAgT3B0aW9uYWw8Tm9FdmVudERpc3Bh
dGNoQXNzZXJ0aW9uPiBtX2V2ZW50RGlzcGF0Y2hBc3NlcnRpb247CiB9OwogCi1pbmxpbmUgRWxl
bWVudEl0ZXJhdG9yQXNzZXJ0aW9uczo6RWxlbWVudEl0ZXJhdG9yQXNzZXJ0aW9ucygpCi0gICAg
OiBtX2RvY3VtZW50KG51bGxwdHIpCi0gICAgLCBtX2luaXRpYWxET01UcmVlVmVyc2lvbigwKQot
ewotfQorLy8gRklYTUU6IE5vIHJlYWwgcG9pbnQgaW4gZG9pbmcgdGhlc2UgYXMgaW5saW5lczsg
dGhleSBhcmUgZm9yIGRlYnVnZ2luZyBhbmQgd2UgdXN1YWxseSB0dXJuIG9mZiBpbmxpbmluZyBp
biBkZWJ1ZyBidWlsZHMuCiAKIGlubGluZSBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25zOjpFbGVt
ZW50SXRlcmF0b3JBc3NlcnRpb25zKGNvbnN0IEVsZW1lbnQqIGZpcnN0KQogICAgIDogbV9kb2N1
bWVudChmaXJzdCA/ICZmaXJzdC0+ZG9jdW1lbnQoKSA6IG51bGxwdHIpCi0gICAgLCBtX2luaXRp
YWxET01UcmVlVmVyc2lvbihtX2RvY3VtZW50ID8gbV9kb2N1bWVudC0+ZG9tVHJlZVZlcnNpb24o
KSA6IDApCi0gICAgLCBtX25vRXZlbnREaXNwYXRjaEFzc2VydGlvbihtX2RvY3VtZW50ID8gYWRv
cHRQdHIobmV3IE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbikgOiBudWxscHRyKQorICAgICwgbV9p
bml0aWFsRE9NVHJlZVZlcnNpb24oZmlyc3QgPyBtX2RvY3VtZW50LT5kb21UcmVlVmVyc2lvbigp
IDogMCkKIHsKKyAgICBpZiAoZmlyc3QpCisgICAgICAgIG1fZXZlbnREaXNwYXRjaEFzc2VydGlv
biA9IE5vRXZlbnREaXNwYXRjaEFzc2VydGlvbigpOwogfQogCiBpbmxpbmUgYm9vbCBFbGVtZW50
SXRlcmF0b3JBc3NlcnRpb25zOjpkb21UcmVlSGFzTXV0YXRlZCgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1faW5pdGlhbERPTVRyZWVWZXJzaW9uICYmIG1fZG9jdW1lbnQgJiYgbV9kb2N1bWVudC0+
ZG9tVHJlZVZlcnNpb24oKSAhPSBtX2luaXRpYWxET01UcmVlVmVyc2lvbjsKKyAgICByZXR1cm4g
bV9kb2N1bWVudCAmJiBtX2RvY3VtZW50LT5kb21UcmVlVmVyc2lvbigpICE9IG1faW5pdGlhbERP
TVRyZWVWZXJzaW9uOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50SXRlcmF0b3JBc3NlcnRpb25z
Ojpkcm9wRXZlbnREaXNwYXRjaEFzc2VydGlvbigpCiB7Ci0gICAgbV9ub0V2ZW50RGlzcGF0Y2hB
c3NlcnRpb24gPSBudWxscHRyOworICAgIG1fZXZlbnREaXNwYXRjaEFzc2VydGlvbiA9IE51bGxv
cHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1lbnRE
ZXNjZW5kYW50SXRlcmF0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9UeXBlZEVsZW1lbnREZXNj
ZW5kYW50SXRlcmF0b3IuaAppbmRleCAyNWIwZjYwZGUyMzNmMzY5ZDZhYWIxMjk3MWIwNjA0MGFh
YmFhNzcxLi45NGVlM2MwOTQ5NWFlZDc5OTVjY2E0MWM3MGEzYWE2YjEwYmYyMWNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1R5cGVkRWxlbWVudERlc2NlbmRhbnRJdGVyYXRvci5o
CkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTE1NSw3ICsxNTUsNyBAQCBpbmxpbmUgVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVs
ZW1lbnRUeXBlPiBUeXBlZEVsZW1lbnREZXNjZW5kYW50SXRlcmF0bwogICAgIEFTU0VSVChkZXNj
ZW5kYW50LmlzRGVzY2VuZGFudE9mKCZtX3Jvb3QpKTsKICAgICBpZiAoaXM8RWxlbWVudFR5cGU+
KGRlc2NlbmRhbnQpKQogICAgICAgICByZXR1cm4gVHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJh
dG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIGRvd25jYXN0PEVsZW1lbnRUeXBlPigmZGVzY2VuZGFu
dCkpOwotICAgIEVsZW1lbnRUeXBlKiBuZXh0ID0gVHJhdmVyc2FsPEVsZW1lbnRUeXBlPjo6bmV4
dCgmbV9yb290LCAmZGVzY2VuZGFudCk7CisgICAgRWxlbWVudFR5cGUqIG5leHQgPSBUcmF2ZXJz
YWw8RWxlbWVudFR5cGU+OjpuZXh0KCZkZXNjZW5kYW50LCAmbV9yb290KTsKICAgICByZXR1cm4g
VHlwZWRFbGVtZW50RGVzY2VuZGFudEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIG5leHQp
OwogfQogCkBAIC0yMDQsNyArMjA0LDcgQEAgaW5saW5lIFR5cGVkRWxlbWVudERlc2NlbmRhbnRD
b25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPiBUeXBlZEVsZW1lbnREZXNjZW5kYW50Q28KICAgICBB
U1NFUlQoZGVzY2VuZGFudC5pc0Rlc2NlbmRhbnRPZigmbV9yb290KSk7CiAgICAgaWYgKGlzPEVs
ZW1lbnRUeXBlPihkZXNjZW5kYW50KSkKICAgICAgICAgcmV0dXJuIFR5cGVkRWxlbWVudERlc2Nl
bmRhbnRDb25zdEl0ZXJhdG9yPEVsZW1lbnRUeXBlPihtX3Jvb3QsIGRvd25jYXN0PEVsZW1lbnRU
eXBlPigmZGVzY2VuZGFudCkpOwotICAgIGNvbnN0IEVsZW1lbnRUeXBlKiBuZXh0ID0gVHJhdmVy
c2FsPEVsZW1lbnRUeXBlPjo6bmV4dCgmbV9yb290LCAmZGVzY2VuZGFudCk7CisgICAgY29uc3Qg
RWxlbWVudFR5cGUqIG5leHQgPSBUcmF2ZXJzYWw8RWxlbWVudFR5cGU+OjpuZXh0KCZkZXNjZW5k
YW50LCAmbV9yb290KTsKICAgICByZXR1cm4gVHlwZWRFbGVtZW50RGVzY2VuZGFudENvbnN0SXRl
cmF0b3I8RWxlbWVudFR5cGU+KG1fcm9vdCwgbmV4dCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdV
c2VFbGVtZW50LmNwcAppbmRleCA4MzM0MjVhNzRmYWU1M2ZlNjk0NmY0N2NlMDI5ZjhjNWFlZmZk
NWRlLi4yM2IwZDFhYzM0OWZmNDk4MmVjN2NmNTIyZGE1N2I0NGMwMDk1OWQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDExIFRvcmNoIE1vYmlsZSAoQmVpamluZykgQ28uIEx0ZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZAogICogQ29weXJp
Z2h0IChDKSAyMDEyIFJlbmF0YSBIb2RvdmFuIDxyZW5pQHdlYmtpdC5vcmc+CisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCkBAIC0xMTUsMTIgKzExNiw2IEBAIFNWR0VsZW1lbnRJbnN0YW5jZSogU1ZHVXNlRWxl
bWVudDo6aW5zdGFuY2VSb290KCkKICAgICByZXR1cm4gbV90YXJnZXRFbGVtZW50SW5zdGFuY2Uu
Z2V0KCk7CiB9CiAKLVNWR0VsZW1lbnRJbnN0YW5jZSogU1ZHVXNlRWxlbWVudDo6YW5pbWF0ZWRJ
bnN0YW5jZVJvb3QoKSBjb25zdAotewotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgbWUuCi0gICAg
cmV0dXJuIDA7Ci19Ci0KIGJvb2wgU1ZHVXNlRWxlbWVudDo6aXNTdXBwb3J0ZWRBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUpCiB7CiAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPEhhc2hTZXQ8UXVhbGlmaWVkTmFtZT4+IHN1cHBvcnRlZEF0dHJpYnV0ZXM7CkBAIC0yMTMs
NyArMjA4LDcgQEAgRG9jdW1lbnQqIFNWR1VzZUVsZW1lbnQ6OmV4dGVybmFsRG9jdW1lbnQoKSBj
b25zdAogICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB1cGRhdGVXaWR0aEFuZEhlaWdo
dChTVkdFbGVtZW50JiBzaGFkb3dFbGVtZW50LCBjb25zdCBTVkdVc2VFbGVtZW50JiB1c2VFbGVt
ZW50LCBjb25zdCBTVkdFbGVtZW50JiBvcmlnaW5hbEVsZW1lbnQpCit2b2lkIFNWR1VzZUVsZW1l
bnQ6OnRyYW5zZmVyU2l6ZUF0dHJpYnV0ZXNUb1NoYWRvd1RyZWVUYXJnZXRDbG9uZShTVkdFbGVt
ZW50JiBzaGFkb3dFbGVtZW50KSBjb25zdAogewogICAgIC8vIEZJWE1FOiBUaGUgY2hlY2sgZm9y
IHZhbHVlSW5TcGVjaWZpZWRVbml0cyBiZWluZyBub24temVybyBiZWxvdyBpcyBhIHdvcmthcm91
bmQgZm9yIHRoZSBmYWN0CiAgICAgLy8gdGhhdCB3ZSBjdXJyZW50bHkgaGF2ZSBubyBnb29kIHdh
eSB0byB0ZWxsIHdoZXRoZXIgYSBwYXJ0aWN1bGFyIGFuaW1hdGFibGUgYXR0cmlidXRlIGlzIGEg
dmFsdWUKQEAgLTIyMywxMyArMjE4LDEzIEBAIHN0YXRpYyB2b2lkIHVwZGF0ZVdpZHRoQW5kSGVp
Z2h0KFNWR0VsZW1lbnQmIHNoYWRvd0VsZW1lbnQsIGNvbnN0IFNWR1VzZUVsZW1lbnQmCiAgICAg
ICAgIC8vIElmIGF0dHJpYnV0ZXMgd2lkdGggYW5kL29yIGhlaWdodCBhcmUgcHJvdmlkZWQgb24g
dGhlICd1c2UnIGVsZW1lbnQsIHRoZW4gdGhlc2UgYXR0cmlidXRlcwogICAgICAgICAvLyB3aWxs
IGJlIHRyYW5zZmVycmVkIHRvIHRoZSBnZW5lcmF0ZWQgJ3N2ZycuIElmIGF0dHJpYnV0ZXMgd2lk
dGggYW5kL29yIGhlaWdodCBhcmUgbm90IHNwZWNpZmllZCwKICAgICAgICAgLy8gdGhlIGdlbmVy
YXRlZCAnc3ZnJyBlbGVtZW50IHdpbGwgdXNlIHZhbHVlcyBvZiAxMDAlIGZvciB0aGVzZSBhdHRy
aWJ1dGVzLgotICAgICAgICBzaGFkb3dFbGVtZW50LnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lk
dGhBdHRyLCAodXNlRWxlbWVudC53aWR0aElzVmFsaWQoKSAmJiB1c2VFbGVtZW50LndpZHRoKCku
dmFsdWVJblNwZWNpZmllZFVuaXRzKCkpID8gQXRvbWljU3RyaW5nKHVzZUVsZW1lbnQud2lkdGgo
KS52YWx1ZUFzU3RyaW5nKCkpIDogIjEwMCUiKTsKLSAgICAgICAgc2hhZG93RWxlbWVudC5zZXRB
dHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsICh1c2VFbGVtZW50LmhlaWdodElzVmFsaWQo
KSAmJiB1c2VFbGVtZW50LmhlaWdodCgpLnZhbHVlSW5TcGVjaWZpZWRVbml0cygpKSA/IEF0b21p
Y1N0cmluZyh1c2VFbGVtZW50LmhlaWdodCgpLnZhbHVlQXNTdHJpbmcoKSkgOiAiMTAwJSIpOwor
ICAgICAgICBzaGFkb3dFbGVtZW50LnNldEF0dHJpYnV0ZShTVkdOYW1lczo6d2lkdGhBdHRyLCAo
d2lkdGhJc1ZhbGlkKCkgJiYgd2lkdGgoKS52YWx1ZUluU3BlY2lmaWVkVW5pdHMoKSkgPyBBdG9t
aWNTdHJpbmcod2lkdGgoKS52YWx1ZUFzU3RyaW5nKCkpIDogIjEwMCUiKTsKKyAgICAgICAgc2hh
ZG93RWxlbWVudC5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIChoZWlnaHRJc1Zh
bGlkKCkgJiYgaGVpZ2h0KCkudmFsdWVJblNwZWNpZmllZFVuaXRzKCkpID8gQXRvbWljU3RyaW5n
KGhlaWdodCgpLnZhbHVlQXNTdHJpbmcoKSkgOiAiMTAwJSIpOwogICAgIH0gZWxzZSBpZiAoaXM8
U1ZHU1ZHRWxlbWVudD4oc2hhZG93RWxlbWVudCkpIHsKICAgICAgICAgLy8gU3BlYyAoPHVzZT4g
b24gPHN2Zz4pOiBJZiBhdHRyaWJ1dGVzIHdpZHRoIGFuZC9vciBoZWlnaHQgYXJlIHByb3ZpZGVk
IG9uIHRoZSAndXNlJyBlbGVtZW50LCB0aGVuIHRoZXNlCiAgICAgICAgIC8vIHZhbHVlcyB3aWxs
IG92ZXJyaWRlIHRoZSBjb3JyZXNwb25kaW5nIGF0dHJpYnV0ZXMgb24gdGhlICdzdmcnIGluIHRo
ZSBnZW5lcmF0ZWQgdHJlZS4KLSAgICAgICAgc2hhZG93RWxlbWVudC5zZXRBdHRyaWJ1dGUoU1ZH
TmFtZXM6OndpZHRoQXR0ciwgKHVzZUVsZW1lbnQud2lkdGhJc1ZhbGlkKCkgJiYgdXNlRWxlbWVu
dC53aWR0aCgpLnZhbHVlSW5TcGVjaWZpZWRVbml0cygpKSA/IEF0b21pY1N0cmluZyh1c2VFbGVt
ZW50LndpZHRoKCkudmFsdWVBc1N0cmluZygpKSA6IG9yaWdpbmFsRWxlbWVudC5nZXRBdHRyaWJ1
dGUoU1ZHTmFtZXM6OndpZHRoQXR0cikpOwotICAgICAgICBzaGFkb3dFbGVtZW50LnNldEF0dHJp
YnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0ciwgKHVzZUVsZW1lbnQuaGVpZ2h0SXNWYWxpZCgpICYm
IHVzZUVsZW1lbnQuaGVpZ2h0KCkudmFsdWVJblNwZWNpZmllZFVuaXRzKCkpID8gQXRvbWljU3Ry
aW5nKHVzZUVsZW1lbnQuaGVpZ2h0KCkudmFsdWVBc1N0cmluZygpKSA6IG9yaWdpbmFsRWxlbWVu
dC5nZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIpKTsKKyAgICAgICAgc2hhZG93RWxl
bWVudC5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0ciwgKHdpZHRoSXNWYWxpZCgpICYm
IHdpZHRoKCkudmFsdWVJblNwZWNpZmllZFVuaXRzKCkpID8gQXRvbWljU3RyaW5nKHdpZHRoKCku
dmFsdWVBc1N0cmluZygpKSA6IHNoYWRvd0VsZW1lbnQuY29ycmVzcG9uZGluZ0VsZW1lbnQoKS0+
Z2V0QXR0cmlidXRlKFNWR05hbWVzOjp3aWR0aEF0dHIpKTsKKyAgICAgICAgc2hhZG93RWxlbWVu
dC5zZXRBdHRyaWJ1dGUoU1ZHTmFtZXM6OmhlaWdodEF0dHIsIChoZWlnaHRJc1ZhbGlkKCkgJiYg
aGVpZ2h0KCkudmFsdWVJblNwZWNpZmllZFVuaXRzKCkpID8gQXRvbWljU3RyaW5nKGhlaWdodCgp
LnZhbHVlQXNTdHJpbmcoKSkgOiBzaGFkb3dFbGVtZW50LmNvcnJlc3BvbmRpbmdFbGVtZW50KCkt
PmdldEF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cikpOwogICAgIH0KIH0KIApAQCAtMjQ4
LDggKzI0Myw3IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6c3ZnQXR0cmlidXRlQ2hhbmdlZChjb25z
dCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSkKICAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIHVu
bmVjZXNzYXJpbHkgaW5lZmZpY2llbnQgdG8gZG8gdGhpcyB3b3JrIGFueSB0aW1lIHdlIGNoYW5n
ZSAieCIgb3IgInkiLgogICAgICAgICAgICAgLy8gRklYTUU6IEl0J3MgdW5uZWNlc3NhcmlseSBp
bmVmZmljaWVudCB0byB1cGRhdGUgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IGVhY2ggdGltZSBlaXRo
ZXIgaXMgY2hhbmdlZC4KICAgICAgICAgICAgIEFTU0VSVChtX3RhcmdldEVsZW1lbnRJbnN0YW5j
ZS0+c2hhZG93VHJlZUVsZW1lbnQoKSk7Ci0gICAgICAgICAgICBBU1NFUlQobV90YXJnZXRFbGVt
ZW50SW5zdGFuY2UtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCkpOwotICAgICAgICAgICAgdXBkYXRl
V2lkdGhBbmRIZWlnaHQoKm1fdGFyZ2V0RWxlbWVudEluc3RhbmNlLT5zaGFkb3dUcmVlRWxlbWVu
dCgpLCAqdGhpcywgKm1fdGFyZ2V0RWxlbWVudEluc3RhbmNlLT5jb3JyZXNwb25kaW5nRWxlbWVu
dCgpKTsKKyAgICAgICAgICAgIHRyYW5zZmVyU2l6ZUF0dHJpYnV0ZXNUb1NoYWRvd1RyZWVUYXJn
ZXRDbG9uZSgqbV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCkpOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkp
CiAgICAgICAgICAgICBSZW5kZXJTVkdSZXNvdXJjZTo6bWFya0ZvckxheW91dEFuZFBhcmVudFJl
c291cmNlSW52YWxpZGF0aW9uKCpyZW5kZXJlcik7CkBAIC0zMjksMjEgKzMyMywxMSBAQCBzdGF0
aWMgYm9vbCBpc0Rpc2FsbG93ZWRFbGVtZW50KGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpCiAgICAg
cmV0dXJuICFhbGxvd2VkRWxlbWVudFRhZ3MuZ2V0KCkuY29udGFpbnM8U1ZHQXR0cmlidXRlSGFz
aFRyYW5zbGF0b3I+KGVsZW1lbnQudGFnUU5hbWUoKSk7CiB9CiAKLXN0YXRpYyBib29sIHN1YnRy
ZWVDb250YWluc0Rpc2FsbG93ZWRFbGVtZW50KFNWR0VsZW1lbnQmIHN0YXJ0KQotewotICAgIGZv
ciAoYXV0byYgZWxlbWVudCA6IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+KHN0YXJ0KSkgewot
ICAgICAgICBpZiAoaXNEaXNhbGxvd2VkRWxlbWVudChlbGVtZW50KSkKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQogdm9pZCBTVkdVc2VF
bGVtZW50OjpjbGVhclJlc291cmNlUmVmZXJlbmNlcygpCiB7CiAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZCB0cnkgdG8gb3B0aW1pemUgdGhpcywgdG8gYXQgbGVhc3QgYWxsb3cgcGFydGlhbCByZWNs
b25lcy4KLSAgICBpZiAoU2hhZG93Um9vdCogc2hhZG93VHJlZVJvb3RFbGVtZW50ID0gc2hhZG93
Um9vdCgpKQotICAgICAgICBzaGFkb3dUcmVlUm9vdEVsZW1lbnQtPnJlbW92ZUNoaWxkcmVuKCk7
CisgICAgaWYgKFNoYWRvd1Jvb3QqIHJvb3QgPSB1c2VyQWdlbnRTaGFkb3dSb290KCkpCisgICAg
ICAgIHJvb3QtPnJlbW92ZUNoaWxkcmVuKCk7CiAKICAgICBpZiAobV90YXJnZXRFbGVtZW50SW5z
dGFuY2UpIHsKICAgICAgICAgbV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPmRldGFjaCgpOwpAQCAt
Mzc5LDE0ICszNjMsMjIgQEAgdm9pZCBTVkdVc2VFbGVtZW50OjpidWlsZFBlbmRpbmdSZXNvdXJj
ZSgpCiAgICAgfQogCiAgICAgaWYgKHRhcmdldC0+aXNTVkdFbGVtZW50KCkpIHsKLSAgICAgICAg
YnVpbGRTaGFkb3dBbmRJbnN0YW5jZVRyZWUoZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0KSk7
CisgICAgICAgIGJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKGRvd25jYXN0PFNWR0VsZW1lbnQ+
KCp0YXJnZXQpKTsKICAgICAgICAgaW52YWxpZGF0ZURlcGVuZGVudFNoYWRvd1RyZWVzKCk7CiAg
ICAgfQogCiAgICAgQVNTRVJUKCFtX25lZWRzU2hhZG93VHJlZVJlY3JlYXRpb24pOwogfQogCi12
b2lkIFNWR1VzZUVsZW1lbnQ6OmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKFNWR0VsZW1lbnQq
IHRhcmdldCkKK1NWR0VsZW1lbnQqIFNWR1VzZUVsZW1lbnQ6OnNoYWRvd1RyZWVUYXJnZXRDbG9u
ZSgpIGNvbnN0Cit7CisgICAgYXV0byogcm9vdCA9IHVzZXJBZ2VudFNoYWRvd1Jvb3QoKTsKKyAg
ICBpZiAoIXJvb3QpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBkb3duY2Fz
dDxTVkdFbGVtZW50Pihyb290LT5maXJzdENoaWxkKCkpOworfQorCit2b2lkIFNWR1VzZUVsZW1l
bnQ6OmJ1aWxkU2hhZG93QW5kSW5zdGFuY2VUcmVlKFNWR0VsZW1lbnQmIHRhcmdldCkKIHsKICAg
ICBBU1NFUlQoIW1fdGFyZ2V0RWxlbWVudEluc3RhbmNlKTsKIApAQCAtMzk2LDgwICszODgsNTIg
QEAgdm9pZCBTVkdVc2VFbGVtZW50OjpidWlsZFNoYWRvd0FuZEluc3RhbmNlVHJlZShTVkdFbGVt
ZW50KiB0YXJnZXQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIERvIG5vdCBhbGxvdyBzZWxm
LXJlZmVyZW5jaW5nLgotICAgIC8vICd0YXJnZXQnIG1heSBiZSBudWxsLCBpZiBpdCdzIGEgbm9u
IFNWRyBuYW1lc3BhY2VkIGVsZW1lbnQuCi0gICAgaWYgKCF0YXJnZXQgfHwgdGFyZ2V0ID09IHRo
aXMpCisgICAgaWYgKCZ0YXJnZXQgPT0gdGhpcykKICAgICAgICAgcmV0dXJuOwogCi0gICAgLy8g
V2h5IGEgc2VwZXJhdGVkIGluc3RhbmNlL3NoYWRvdyB0cmVlPyBTVkcgZGVtYW5kcyBpdDoKLSAg
ICAvLyBUaGUgaW5zdGFuY2UgdHJlZSBpcyBhY2Nlc2FibGUgZnJvbSBKYXZhU2NyaXB0LCBhbmQg
aGFzIHRvCi0gICAgLy8gZXhwb3NlIGEgMToxIGNvcHkgb2YgdGhlIHJlZmVyZW5jZWQgdHJlZSwg
d2hlcmVhcyBpbnRlcm5hbGx5IHdlIG5lZWQKLSAgICAvLyB0byBhbHRlciB0aGUgdHJlZSBmb3Ig
Y29ycmVjdCAidXNlLW9uLXN5bWJvbCIsICJ1c2Utb24tc3ZnIiBzdXBwb3J0LgotCi0gICAgLy8g
QnVpbGQgaW5zdGFuY2UgdHJlZS4gQ3JlYXRlIHJvb3QgU1ZHRWxlbWVudEluc3RhbmNlIG9iamVj
dCBmb3IgdGhlIGZpcnN0IHN1Yi10cmVlIG5vZGUuCi0gICAgLy8KKyAgICAvLyBCdWlsZCBpbnN0
YW5jZSB0cmVlLgogICAgIC8vIFNwZWM6IElmIHRoZSAndXNlJyBlbGVtZW50IHJlZmVyZW5jZXMg
YSBzaW1wbGUgZ3JhcGhpY3MgZWxlbWVudCBzdWNoIGFzIGEgJ3JlY3QnLCB0aGVuIHRoZXJlIGlz
IG9ubHkgYQogICAgIC8vIHNpbmdsZSBTVkdFbGVtZW50SW5zdGFuY2Ugb2JqZWN0LCBhbmQgdGhl
IGNvcnJlc3BvbmRpbmdFbGVtZW50IGF0dHJpYnV0ZSBvbiB0aGlzIFNWR0VsZW1lbnRJbnN0YW5j
ZSBvYmplY3QKICAgICAvLyBpcyB0aGUgU1ZHUmVjdEVsZW1lbnQgdGhhdCBjb3JyZXNwb25kcyB0
byB0aGUgcmVmZXJlbmNlZCAncmVjdCcgZWxlbWVudC4KLSAgICBtX3RhcmdldEVsZW1lbnRJbnN0
YW5jZSA9IFNWR0VsZW1lbnRJbnN0YW5jZTo6Y3JlYXRlKHRoaXMsIHRoaXMsIHRhcmdldCk7Cisg
ICAgbV90YXJnZXRFbGVtZW50SW5zdGFuY2UgPSBTVkdFbGVtZW50SW5zdGFuY2U6OmNyZWF0ZSh0
aGlzLCB0aGlzLCAmdGFyZ2V0KTsKIAogICAgIC8vIEV2ZW50dWFsbHkgZW50ZXIgcmVjdXJzaW9u
IHRvIGJ1aWxkIFNWR0VsZW1lbnRJbnN0YW5jZSBvYmplY3RzIGZvciB0aGUgc3ViLXRyZWUgY2hp
bGRyZW4KICAgICBib29sIGZvdW5kUHJvYmxlbSA9IGZhbHNlOwotICAgIGJ1aWxkSW5zdGFuY2VU
cmVlKHRhcmdldCwgbV90YXJnZXRFbGVtZW50SW5zdGFuY2UuZ2V0KCksIGZvdW5kUHJvYmxlbSwg
ZmFsc2UpOworICAgIGJ1aWxkSW5zdGFuY2VUcmVlKCZ0YXJnZXQsIG1fdGFyZ2V0RWxlbWVudElu
c3RhbmNlLmdldCgpLCBmb3VuZFByb2JsZW0sIGZhbHNlKTsKIAogICAgIGlmIChpbnN0YW5jZVRy
ZWVJc0xvYWRpbmcobV90YXJnZXRFbGVtZW50SW5zdGFuY2UuZ2V0KCkpKQogICAgICAgICByZXR1
cm47CiAKLSAgICAvLyBTVkcgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBzYXkgYSB3b3JkIGFib3V0
IDx1c2U+ICYgY3ljbGVzLiBNeSB2aWV3IG9uIHRoaXMgaXM6IGp1c3QgaWdub3JlIGl0IQorICAg
IC8vIFNWRyBzcGVjaWZpY2F0aW9uIGRvZXMgbm90IHNheSBhIHdvcmQgYWJvdXQgPHVzZT4gYW5k
IGN5Y2xlcy4gTXkgdmlldyBvbiB0aGlzIGlzOiBqdXN0IGlnbm9yZSBpdCEKICAgICAvLyBOb24t
YXBwZWFyaW5nIDx1c2U+IGNvbnRlbnQgaXMgZWFzaWVyIHRvIGRlYnVnLCB0aGVuIGhhbGYtYXBw
ZWFyaW5nIGNvbnRlbnQuCiAgICAgaWYgKGZvdW5kUHJvYmxlbSkgewogICAgICAgICBjbGVhclJl
c291cmNlUmVmZXJlbmNlcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgLy8gQXNz
dXJlIGluc3RhbmNlIHRyZWUgYnVpbGRpbmcgd2FzIHN1Y2Nlc3NmdWxsCisgICAgLy8gQXNzdXJl
IGluc3RhbmNlIHRyZWUgYnVpbGRpbmcgd2FzIHN1Y2Nlc3NmdWwuCiAgICAgQVNTRVJUKG1fdGFy
Z2V0RWxlbWVudEluc3RhbmNlKTsKICAgICBBU1NFUlQoIW1fdGFyZ2V0RWxlbWVudEluc3RhbmNl
LT5zaGFkb3dUcmVlRWxlbWVudCgpKTsKICAgICBBU1NFUlQobV90YXJnZXRFbGVtZW50SW5zdGFu
Y2UtPmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KCkgPT0gdGhpcyk7CiAgICAgQVNTRVJUKG1fdGFy
Z2V0RWxlbWVudEluc3RhbmNlLT5kaXJlY3RVc2VFbGVtZW50KCkgPT0gdGhpcyk7Ci0gICAgQVNT
RVJUKG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlLT5jb3JyZXNwb25kaW5nRWxlbWVudCgpID09IHRh
cmdldCk7Ci0KLSAgICBTaGFkb3dSb290KiBzaGFkb3dUcmVlUm9vdEVsZW1lbnQgPSBzaGFkb3dS
b290KCk7Ci0gICAgQVNTRVJUKHNoYWRvd1RyZWVSb290RWxlbWVudCk7Ci0KLSAgICAvLyBCdWls
ZCBzaGFkb3cgdHJlZSBmcm9tIGluc3RhbmNlIHRyZWUKLSAgICAvLyBUaGlzIGFsc28gaGFuZGxl
cyB0aGUgc3BlY2lhbCBjYXNlczogPHVzZT4gb24gPHN5bWJvbD4sIDx1c2U+IG9uIDxzdmc+Lgot
ICAgIGJ1aWxkU2hhZG93VHJlZSh0YXJnZXQsIG1fdGFyZ2V0RWxlbWVudEluc3RhbmNlLmdldCgp
KTsKLQotICAgIC8vIEV4cGFuZCBhbGwgPHVzZT4gZWxlbWVudHMgaW4gdGhlIHNoYWRvdyB0cmVl
LgotICAgIC8vIEV4cGFuZCBtZWFuczogcmVwbGFjZSB0aGUgYWN0dWFsIDx1c2U+IGVsZW1lbnQg
Ynkgd2hhdCBpdCByZWZlcmVuY2VzLgotICAgIGV4cGFuZFVzZUVsZW1lbnRzSW5TaGFkb3dUcmVl
KHNoYWRvd1RyZWVSb290RWxlbWVudCk7Ci0KLSAgICAvLyBFeHBhbmQgYWxsIDxzeW1ib2w+IGVs
ZW1lbnRzIGluIHRoZSBzaGFkb3cgdHJlZS4KLSAgICAvLyBFeHBhbmQgbWVhbnM6IHJlcGxhY2Ug
dGhlIGFjdHVhbCA8c3ltYm9sPiBlbGVtZW50IGJ5IHRoZSA8c3ZnPiBlbGVtZW50LgotICAgIGV4
cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKHNoYWRvd1RyZWVSb290RWxlbWVudCk7Ci0K
LSAgICAvLyBOb3cgdGhhdCB0aGUgc2hhZG93IHRyZWUgaXMgY29tcGxldGx5IGV4cGFuZGVkLCB3
ZSBjYW4gYXNzb2NpYXRlCi0gICAgLy8gc2hhZG93IHRyZWUgZWxlbWVudHMgPC0+IGluc3RhbmNl
cyBpbiB0aGUgaW5zdGFuY2UgdHJlZS4KLSAgICBhc3NvY2lhdGVJbnN0YW5jZXNXaXRoU2hhZG93
VHJlZUVsZW1lbnRzKHNoYWRvd1RyZWVSb290RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBtX3Rhcmdl
dEVsZW1lbnRJbnN0YW5jZS5nZXQoKSk7Ci0KLSAgICBBU1NFUlQobV90YXJnZXRFbGVtZW50SW5z
dGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCkpOwotICAgIEFTU0VSVChtX3RhcmdldEVsZW1lbnRJ
bnN0YW5jZS0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSB0YXJnZXQpOwotICAgIHVwZGF0ZVdp
ZHRoQW5kSGVpZ2h0KCptX3RhcmdldEVsZW1lbnRJbnN0YW5jZS0+c2hhZG93VHJlZUVsZW1lbnQo
KSwgKnRoaXMsICp0YXJnZXQpOworICAgIEFTU0VSVChtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS0+
Y29ycmVzcG9uZGluZ0VsZW1lbnQoKSA9PSAmdGFyZ2V0KTsKIAotICAgIC8vIElmIG5vIHNoYWRv
dyB0cmVlIGVsZW1lbnQgaXMgcHJlc2VudCwgdGhpcyBtZWFucyB0aGF0IHRoZSByZWZlcmVuY2Ug
cm9vdAotICAgIC8vIGVsZW1lbnQgd2FzIHJlbW92ZWQsIGFzIGl0IGlzIGRpc2FsbG93ZWQgKGll
LiA8dXNlPiBvbiA8Zm9yZWlnbk9iamVjdD4pCi0gICAgLy8gRG8gTk9UIGxlYXZlIGFuIGluY29u
c2lzdGVudCBpbnN0YW5jZSB0cmVlIGFyb3VuZCwgaW5zdGVhZCBkZXN0cnVjdCBpdC4KLSAgICBp
ZiAoIW1fdGFyZ2V0RWxlbWVudEluc3RhbmNlLT5zaGFkb3dUcmVlRWxlbWVudCgpKSB7CisgICAg
aWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQodGFyZ2V0KSkgewogICAgICAgICBjbGVhclJlc291cmNl
UmVmZXJlbmNlcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQVNTRVJUKG1fdGFy
Z2V0RWxlbWVudEluc3RhbmNlLT5zaGFkb3dUcmVlRWxlbWVudCgpLT5wYXJlbnROb2RlKCkgPT0g
c2hhZG93VHJlZVJvb3RFbGVtZW50KTsKKyAgICBidWlsZFNoYWRvd1RyZWUodGFyZ2V0KTsKKyAg
ICBleHBhbmRVc2VFbGVtZW50c0luU2hhZG93VHJlZSgpOworICAgIGV4cGFuZFN5bWJvbEVsZW1l
bnRzSW5TaGFkb3dUcmVlKCk7CiAKLSAgICAvLyBUcmFuc2ZlciBldmVudCBsaXN0ZW5lcnMgYXNz
aWduZWQgdG8gdGhlIHJlZmVyZW5jZWQgZWxlbWVudCB0byBvdXIgc2hhZG93IHRyZWUgZWxlbWVu
dHMuCi0gICAgdHJhbnNmZXJFdmVudExpc3RlbmVyc1RvU2hhZG93VHJlZShtX3RhcmdldEVsZW1l
bnRJbnN0YW5jZS5nZXQoKSk7CisgICAgQVNTRVJUKHNoYWRvd1RyZWVUYXJnZXRDbG9uZSgpKTsK
KyAgICBTVkdFbGVtZW50JiBzaGFkb3dUcmVlVGFyZ2V0Q2xvbmUgPSAqdGhpcy0+c2hhZG93VHJl
ZVRhcmdldENsb25lKCk7CisgICAgYXNzb2NpYXRlSW5zdGFuY2VzV2l0aFNoYWRvd1RyZWVFbGVt
ZW50cygmc2hhZG93VHJlZVRhcmdldENsb25lLCBtX3RhcmdldEVsZW1lbnRJbnN0YW5jZS5nZXQo
KSk7CiAKLSAgICAvLyBVcGRhdGUgcmVsYXRpdmUgbGVuZ3RoIGluZm9ybWF0aW9uLgorICAgIHRy
YW5zZmVyU2l6ZUF0dHJpYnV0ZXNUb1NoYWRvd1RyZWVUYXJnZXRDbG9uZShzaGFkb3dUcmVlVGFy
Z2V0Q2xvbmUpOworCisgICAgdHJhbnNmZXJFdmVudExpc3RlbmVyc1RvU2hhZG93VHJlZSgpOwog
ICAgIHVwZGF0ZVJlbGF0aXZlTGVuZ3Roc0luZm9ybWF0aW9uKCk7CiB9CiAKQEAgLTQ5Myw3ICs0
NTcsNyBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnRvQ2xpcFBhdGgoUGF0aCYgcGF0aCkKIHsKICAg
ICBBU1NFUlQocGF0aC5pc0VtcHR5KCkpOwogCi0gICAgU1ZHRWxlbWVudCogZWxlbWVudCA9IG1f
dGFyZ2V0RWxlbWVudEluc3RhbmNlID8gbV90YXJnZXRFbGVtZW50SW5zdGFuY2UtPnNoYWRvd1Ry
ZWVFbGVtZW50KCkgOiBudWxscHRyOworICAgIFNWR0VsZW1lbnQqIGVsZW1lbnQgPSBzaGFkb3dU
cmVlVGFyZ2V0Q2xvbmUoKTsKICAgICBpZiAoaXM8U1ZHR3JhcGhpY3NFbGVtZW50PihlbGVtZW50
KSkgewogICAgICAgICBpZiAoIWlzRGlyZWN0UmVmZXJlbmNlKCplbGVtZW50KSkgewogICAgICAg
ICAgICAgLy8gU3BlYzogSW5kaXJlY3QgcmVmZXJlbmNlcyBhcmUgYW4gZXJyb3IgKDE0LjMuNSkK
QEAgLTUxMCwxNiArNDc0LDExIEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6dG9DbGlwUGF0aChQYXRo
JiBwYXRoKQogCiBSZW5kZXJFbGVtZW50KiBTVkdVc2VFbGVtZW50OjpyZW5kZXJlckNsaXBDaGls
ZCgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3RhcmdldEVsZW1lbnRJbnN0YW5jZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0KLSAgICBhdXRvKiBlbGVtZW50ID0gbV90YXJnZXRFbGVtZW50SW5z
dGFuY2UtPnNoYWRvd1RyZWVFbGVtZW50KCk7CisgICAgYXV0byogZWxlbWVudCA9IHNoYWRvd1Ry
ZWVUYXJnZXRDbG9uZSgpOwogICAgIGlmICghZWxlbWVudCkKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KICAgICBpZiAoIWlzRGlyZWN0UmVmZXJlbmNlKCplbGVtZW50KSkKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0KICAgICByZXR1cm4gZWxlbWVudC0+cmVuZGVyZXIoKTsKIH0KIApAQCAt
NjA4LDE2NCArNTY3LDEzMiBAQCBib29sIFNWR1VzZUVsZW1lbnQ6Omhhc0N5Y2xlVXNlUmVmZXJl
bmNpbmcoU1ZHVXNlRWxlbWVudCogdXNlLCBTVkdFbGVtZW50SW5zdGFuYwogICAgIHJldHVybiBm
YWxzZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50c0Zy
b21TdWJ0cmVlKFNWR0VsZW1lbnQmIHN1YnRyZWUpCitzdGF0aWMgdm9pZCByZW1vdmVEaXNhbGxv
d2VkRWxlbWVudHNGcm9tU3VidHJlZShTVkdFbGVtZW50JiBzdWJ0cmVlKQogeworICAgIC8vIFJl
bW92ZSBkaXNhbGxvd2VkIGVsZW1lbnRzIGFmdGVyIHRoZSBmYWN0IHJhdGhlciB0aGFuIG5vdCBj
bG9uaW5nIHRoZW0gaW4gdGhlIGZpcnN0IHBsYWNlLgorICAgIC8vIFRoaXMgb3B0aW1pemVzIGZv
ciB0aGUgbm9ybWFsIGNhc2Ugd2hlcmUgbm9uZSBvZiB0aG9zZSBlbGVtZW50cyBhcmUgcHJlc2Vu
dC4KKworICAgIC8vIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBvbmx5IG9uIGVsZW1lbnRzIGluIHN1
YnRyZWVzIHRoYXQgYXJlIG5vdCB5ZXQgaW4gZG9jdW1lbnRzLCBzbworICAgIC8vIG11dGF0aW9u
IGV2ZW50cyBhcmUgbm90IGEgZmFjdG9yOyB0aGVyZSBhcmUgbm8gZXZlbnQgbGlzdGVuZXJzIHRv
IGhhbmRsZSB0aG9zZSBldmVudHMuCisgICAgLy8gQXNzZXJ0IHRoYXQgaXQncyBub3QgaW4gYSBk
b2N1bWVudCB0byBtYWtlIHN1cmUgY2FsbGVycyBhcmUgc3RpbGwgdXNpbmcgaXQgdGhpcyB3YXku
CiAgICAgQVNTRVJUKCFzdWJ0cmVlLmluRG9jdW1lbnQoKSk7Ci0gICAgVmVjdG9yPEVsZW1lbnQq
PiB0b1JlbW92ZTsKLSAgICBhdXRvIGl0ID0gZGVzY2VuZGFudHNPZlR5cGU8RWxlbWVudD4oc3Vi
dHJlZSkuYmVnaW4oKTsKLSAgICBhdXRvIGVuZCA9IGRlc2NlbmRhbnRzT2ZUeXBlPEVsZW1lbnQ+
KHN1YnRyZWUpLmVuZCgpOwotICAgIHdoaWxlIChpdCAhPSBlbmQpIHsKKworICAgIFZlY3RvcjxF
bGVtZW50Kj4gZGlzYWxsb3dlZEVsZW1lbnRzOworICAgIGF1dG8gZGVzY2VuZGFudHMgPSBkZXNj
ZW5kYW50c09mVHlwZTxFbGVtZW50PihzdWJ0cmVlKTsKKyAgICBhdXRvIGVuZCA9IGRlc2NlbmRh
bnRzLmVuZCgpOworICAgIGZvciAoYXV0byBpdCA9IGRlc2NlbmRhbnRzLmJlZ2luKCk7IGl0ICE9
IGVuZDsgKSB7CiAgICAgICAgIGlmIChpc0Rpc2FsbG93ZWRFbGVtZW50KCppdCkpIHsKLSAgICAg
ICAgICAgIHRvUmVtb3ZlLmFwcGVuZCgmKml0KTsKKyAgICAgICAgICAgIGRpc2FsbG93ZWRFbGVt
ZW50cy5hcHBlbmQoJippdCk7CiAgICAgICAgICAgICBpdC50cmF2ZXJzZU5leHRTa2lwcGluZ0No
aWxkcmVuKCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogICAgICAgICArK2l0
OwogICAgIH0KLSAgICAvLyBUaGUgc3VidHJlZSBpcyBub3QgaW4gZG9jdW1lbnQgc28gdGhpcyB3
b24ndCBnZW5lcmF0ZSBldmVudHMgdGhhdCBjb3VsZCBtdXRhdGUgdGhlIHRyZWUuCi0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvUmVtb3ZlLnNpemUoKTsgKytpKQotICAgICAgICB0b1Jl
bW92ZVtpXS0+cGFyZW50Tm9kZSgpLT5yZW1vdmVDaGlsZCh0b1JlbW92ZVtpXSk7CisgICAgZm9y
IChFbGVtZW50KiBlbGVtZW50IDogZGlzYWxsb3dlZEVsZW1lbnRzKQorICAgICAgICBlbGVtZW50
LT5wYXJlbnROb2RlKCktPnJlbW92ZUNoaWxkKGVsZW1lbnQpOwogfQogCi12b2lkIFNWR1VzZUVs
ZW1lbnQ6OmJ1aWxkU2hhZG93VHJlZShTVkdFbGVtZW50KiB0YXJnZXQsIFNWR0VsZW1lbnRJbnN0
YW5jZSogdGFyZ2V0SW5zdGFuY2UpCit2b2lkIFNWR1VzZUVsZW1lbnQ6OmJ1aWxkU2hhZG93VHJl
ZShTVkdFbGVtZW50JiB0YXJnZXQpCiB7Ci0gICAgQVNTRVJUKHRhcmdldCk7IC8vIEZJWE1FOiBE
b24ndCBiZSBhIHBvaW50ZXIhCi0KLSAgICAvLyBGb3IgaW5zdGFuY2UgPHVzZT4gb24gPGZvcmVp
Z25PYmplY3Q+IChkaXJlY3QgY2FzZSkuCi0gICAgaWYgKGlzRGlzYWxsb3dlZEVsZW1lbnQoKnRh
cmdldCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIFJlZlB0cjxTVkdFbGVtZW50PiBuZXdDaGls
ZCA9IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0SW5zdGFuY2UtPmNvcnJl
c3BvbmRpbmdFbGVtZW50KCktPmNsb25lRWxlbWVudFdpdGhDaGlsZHJlbihkb2N1bWVudCgpKSk7
Ci0KLSAgICAvLyBXZSBkb24ndCB3YWxrIHRoZSB0YXJnZXQgdHJlZSBlbGVtZW50LWJ5LWVsZW1l
bnQsIGFuZCBjbG9uZSBlYWNoIGVsZW1lbnQsCi0gICAgLy8gYnV0IGluc3RlYWQgdXNlIGNsb25l
RWxlbWVudFdpdGhDaGlsZHJlbigpLiBUaGlzIGlzIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGNv
bW1vbgotICAgIC8vIGNhc2Ugd2hlcmUgPHVzZT4gZG9lc24ndCBjb250YWluIGRpc2FsbG93ZWQg
ZWxlbWVudHMgKGllLiA8Zm9yZWlnbk9iamVjdD4pLgotICAgIC8vIFRob3VnaCBpZiB0aGVyZSBh
cmUgZGlzYWxsb3dlZCBlbGVtZW50cyBpbiB0aGUgc3VidHJlZSwgd2UgaGF2ZSB0byByZW1vdmUg
dGhlbS4KLSAgICAvLyBGb3IgaW5zdGFuY2U6IDx1c2U+IG9uIDxnPiBjb250YWluaW5nIDxmb3Jl
aWduT2JqZWN0PiAoaW5kaXJlY3QgY2FzZSkuCi0gICAgaWYgKHN1YnRyZWVDb250YWluc0Rpc2Fs
bG93ZWRFbGVtZW50KCpuZXdDaGlsZCkpCi0gICAgICAgIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50
c0Zyb21TdWJ0cmVlKCpuZXdDaGlsZCk7Ci0KLSAgICBzaGFkb3dSb290KCktPmFwcGVuZENoaWxk
KG5ld0NoaWxkLnJlbGVhc2UoKSk7CisgICAgUmVmPFNWR0VsZW1lbnQ+IGNsb25lZFRhcmdldCA9
IHN0YXRpY19wb2ludGVyX2Nhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0LmNsb25lRWxlbWVudFdpdGhD
aGlsZHJlbihkb2N1bWVudCgpKSkucmVsZWFzZU5vbk51bGwoKTsKKyAgICByZW1vdmVEaXNhbGxv
d2VkRWxlbWVudHNGcm9tU3VidHJlZShjbG9uZWRUYXJnZXQuZ2V0KCkpOworICAgIGVuc3VyZVVz
ZXJBZ2VudFNoYWRvd1Jvb3QoKS5hcHBlbmRDaGlsZChXVEY6Om1vdmUoY2xvbmVkVGFyZ2V0KSk7
CiB9CiAKLXZvaWQgU1ZHVXNlRWxlbWVudDo6ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUo
Tm9kZSogZWxlbWVudCkKK3ZvaWQgU1ZHVXNlRWxlbWVudDo6ZXhwYW5kVXNlRWxlbWVudHNJblNo
YWRvd1RyZWUoKQogewogICAgIC8vIFdoeSBleHBhbmQgdGhlIDx1c2U+IGVsZW1lbnRzIGluIHRo
ZSBzaGFkb3cgdHJlZSBoZXJlLCBhbmQgbm90IGp1c3QKLSAgICAvLyBkbyB0aGlzIGRpcmVjdGx5
IGluIGJ1aWxkU2hhZG93VHJlZSwgaWYgd2UgZW5jb3VudGVyIGEgPHVzZT4gZWxlbWVudD8KLSAg
ICAvLwotICAgIC8vIFNob3J0IGFuc3dlcjogQmVjYXVzZSB3ZSBtYXkgbWlzcyB0byBleHBhbmQg
c29tZSBlbGVtZW50cy4gSWUuIGlmIGEgPHN5bWJvbD4KLSAgICAvLyBjb250YWlucyA8dXNlPiB0
YWdzLCB3ZSdkIG1pc3MgdGhlbS4gU28gb25jZSB3ZSdyZSBkb25lIHdpdGggc2V0dGluJyB1cCB0
aGUKLSAgICAvLyBhY3R1YWwgc2hhZG93IHRyZWUgKGFmdGVyIHRoZSBzcGVjaWFsIGNhc2UgbW9k
aWZpY2F0aW9uIGZvciBzdmcvc3ltYm9sKSB3ZSBoYXZlCi0gICAgLy8gdG8gd2FsayBpdCBjb21w
bGV0ZWx5IGFuZCBleHBhbmQgYWxsIDx1c2U+IGVsZW1lbnRzLgotICAgIGlmIChpczxTVkdVc2VF
bGVtZW50PigqZWxlbWVudCkpIHsKLSAgICAgICAgU1ZHVXNlRWxlbWVudCYgdXNlID0gZG93bmNh
c3Q8U1ZHVXNlRWxlbWVudD4oKmVsZW1lbnQpOwotICAgICAgICBBU1NFUlQoIXVzZS5jYWNoZWRE
b2N1bWVudElzU3RpbGxMb2FkaW5nKCkpOworICAgIC8vIGRvIHRoaXMgZGlyZWN0bHkgaW4gYnVp
bGRTaGFkb3dUcmVlLCBhcyB3ZSBlbmNvdW50ZXIgZWFjaCA8dXNlPiBlbGVtZW50PworICAgIC8v
IEJlY2F1c2Ugd2UgbWlnaHQgbWlzcyBleHBhbmRpbmcgc29tZSBlbGVtZW50cyBpZiB3ZSBkaWQg
aXQgdGhlbi4gSWYgYSA8c3ltYm9sPgorICAgIC8vIGNvbnRhaW5lZCA8dXNlPiBlbGVtZW50cywg
d2UnZCBtaXNzIHRob3NlLgogCi0gICAgICAgIEFTU0VSVChyZWZlcmVuY2VkRG9jdW1lbnQoKSk7
Ci0gICAgICAgIEVsZW1lbnQqIHRhcmdldEVsZW1lbnQgPSBTVkdVUklSZWZlcmVuY2U6OnRhcmdl
dEVsZW1lbnRGcm9tSVJJU3RyaW5nKHVzZS5ocmVmKCksICpyZWZlcmVuY2VkRG9jdW1lbnQoKSk7
Ci0gICAgICAgIFNWR0VsZW1lbnQqIHRhcmdldCA9IG51bGxwdHI7Ci0gICAgICAgIGlmICh0YXJn
ZXRFbGVtZW50ICYmIHRhcmdldEVsZW1lbnQtPmlzU1ZHRWxlbWVudCgpKQotICAgICAgICAgICAg
dGFyZ2V0ID0gZG93bmNhc3Q8U1ZHRWxlbWVudD4odGFyZ2V0RWxlbWVudCk7CisgICAgYXV0byBk
ZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR1VzZUVsZW1lbnQ+KCp1c2VyQWdlbnRT
aGFkb3dSb290KCkpOworICAgIGF1dG8gZW5kID0gZGVzY2VuZGFudHMuZW5kKCk7CisgICAgZm9y
IChhdXRvIGl0ID0gZGVzY2VuZGFudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyApIHsKKyAgICAgICAg
U1ZHVXNlRWxlbWVudCYgb3JpZ2luYWwgPSAqaXQ7CisgICAgICAgIGl0ID0gZW5kOyAvLyBFZmZp
Y2llbnRseSBxdWlldHMgYXNzZXJ0aW9ucyBkdWUgdG8gdGhlIG91dHN0YW5kaW5nIGl0ZXJhdG9y
LgogCi0gICAgICAgIC8vIERvbid0IEFTU0VSVCh0YXJnZXQpIGhlcmUsIGl0IG1heSBiZSAicGVu
ZGluZyIsIHRvby4KLSAgICAgICAgLy8gU2V0dXAgc3ViLXNoYWRvdyB0cmVlIHJvb3Qgbm9kZQot
ICAgICAgICBSZWZQdHI8U1ZHR0VsZW1lbnQ+IGNsb25lUGFyZW50ID0gU1ZHR0VsZW1lbnQ6OmNy
ZWF0ZShTVkdOYW1lczo6Z1RhZywgKnJlZmVyZW5jZWREb2N1bWVudCgpKTsKLSAgICAgICAgdXNl
LmNsb25lQ2hpbGROb2RlcyhjbG9uZVBhcmVudC5nZXQoKSk7CisgICAgICAgIEFTU0VSVCghb3Jp
Z2luYWwuY2FjaGVkRG9jdW1lbnRJc1N0aWxsTG9hZGluZygpKTsKIAogICAgICAgICAvLyBTcGVj
OiBJbiB0aGUgZ2VuZXJhdGVkIGNvbnRlbnQsIHRoZSAndXNlJyB3aWxsIGJlIHJlcGxhY2VkIGJ5
ICdnJywgd2hlcmUgYWxsIGF0dHJpYnV0ZXMgZnJvbSB0aGUKICAgICAgICAgLy8gJ3VzZScgZWxl
bWVudCBleGNlcHQgZm9yIHgsIHksIHdpZHRoLCBoZWlnaHQgYW5kIHhsaW5rOmhyZWYgYXJlIHRy
YW5zZmVycmVkIHRvIHRoZSBnZW5lcmF0ZWQgJ2cnIGVsZW1lbnQuCi0gICAgICAgIHRyYW5zZmVy
VXNlQXR0cmlidXRlc1RvUmVwbGFjZWRFbGVtZW50KCZ1c2UsIGNsb25lUGFyZW50LmdldCgpKTsK
IAotICAgICAgICBpZiAodGFyZ2V0ICYmICFpc0Rpc2FsbG93ZWRFbGVtZW50KCp0YXJnZXQpKSB7
Ci0gICAgICAgICAgICBSZWZQdHI8RWxlbWVudD4gbmV3Q2hpbGQgPSB0YXJnZXQtPmNsb25lRWxl
bWVudFdpdGhDaGlsZHJlbihkb2N1bWVudCgpKTsKLSAgICAgICAgICAgIHVwZGF0ZVdpZHRoQW5k
SGVpZ2h0KGRvd25jYXN0PFNWR0VsZW1lbnQ+KCpuZXdDaGlsZCksIHVzZSwgKnRhcmdldCk7Ci0g
ICAgICAgICAgICBjbG9uZVBhcmVudC0+YXBwZW5kQ2hpbGQobmV3Q2hpbGQucmVsZWFzZSgpKTsK
KyAgICAgICAgLy8gRklYTUU6IElzIGl0IHJpZ2h0IHRvIHVzZSByZWZlcmVuY2VkRG9jdW1lbnQo
KSBoZXJlIGluc3RlYWQgb2YganVzdCBkb2N1bWVudCgpPworICAgICAgICAvLyBDYW4gYSBzaGFk
b3cgdHJlZSB3aXRoaW4gdGhpcyBkb2N1bWVudCByZWFsbHkgY29udGFpbiBlbGVtZW50cyB0aGF0
IGFyZSBpbiBhCisgICAgICAgIC8vIGRpZmZlcmVudCBkb2N1bWVudD8KKyAgICAgICAgQVNTRVJU
KHJlZmVyZW5jZWREb2N1bWVudCgpKTsKKyAgICAgICAgYXV0byByZXBsYWNlbWVudCA9IFNWR0dF
bGVtZW50OjpjcmVhdGUoU1ZHTmFtZXM6OmdUYWcsICpyZWZlcmVuY2VkRG9jdW1lbnQoKSk7CisK
KyAgICAgICAgb3JpZ2luYWwudHJhbnNmZXJBdHRyaWJ1dGVzVG9TaGFkb3dUcmVlUmVwbGFjZW1l
bnQocmVwbGFjZW1lbnQuZ2V0KCkpOworICAgICAgICBvcmlnaW5hbC5jbG9uZUNoaWxkTm9kZXMo
cmVwbGFjZW1lbnQucHRyKCkpOworCisgICAgICAgIFJlZlB0cjxTVkdFbGVtZW50PiBjbG9uZWRU
YXJnZXQ7CisgICAgICAgIEVsZW1lbnQqIHRhcmdldENhbmRpZGF0ZSA9IFNWR1VSSVJlZmVyZW5j
ZTo6dGFyZ2V0RWxlbWVudEZyb21JUklTdHJpbmcob3JpZ2luYWwuaHJlZigpLCAqcmVmZXJlbmNl
ZERvY3VtZW50KCkpOworICAgICAgICBpZiAoaXM8U1ZHRWxlbWVudD4odGFyZ2V0Q2FuZGlkYXRl
KSAmJiAhaXNEaXNhbGxvd2VkRWxlbWVudChkb3duY2FzdDxTVkdFbGVtZW50PigqdGFyZ2V0Q2Fu
ZGlkYXRlKSkpIHsKKyAgICAgICAgICAgIFNWR0VsZW1lbnQmIG9yaWdpbmFsVGFyZ2V0ID0gZG93
bmNhc3Q8U1ZHRWxlbWVudD4oKnRhcmdldENhbmRpZGF0ZSk7CisgICAgICAgICAgICBjbG9uZWRU
YXJnZXQgPSBzdGF0aWNfcG9pbnRlcl9jYXN0PFNWR0VsZW1lbnQ+KG9yaWdpbmFsVGFyZ2V0LmNs
b25lRWxlbWVudFdpdGhDaGlsZHJlbihkb2N1bWVudCgpKSk7CisgICAgICAgICAgICAvLyBTZXQg
dGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudCBoZXJlIHNvIHRyYW5zZmVyU2l6ZUF0dHJpYnV0ZXNU
b1NoYWRvd1RyZWVUYXJnZXRDbG9uZQorICAgICAgICAgICAgLy8gY2FuIHVzZSBpdC4gSXQgd2ls
bCBiZSBzZXQgYWdhaW4gbGF0ZXIgaW4gYXNzb2NpYXRlSW5zdGFuY2VzV2l0aFNoYWRvd1RyZWVF
bGVtZW50cywKKyAgICAgICAgICAgIC8vIGJ1dCBpdCBkb2VzIG5vIGhhcm0gdG8gc2V0IGl0IHR3
aWNlLgorICAgICAgICAgICAgY2xvbmVkVGFyZ2V0LT5zZXRDb3JyZXNwb25kaW5nRWxlbWVudCgm
b3JpZ2luYWxUYXJnZXQpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQtPmFwcGVuZENoaWxkKGNs
b25lZFRhcmdldCk7CiAgICAgICAgIH0KIAotICAgICAgICAvLyBXZSBkb24ndCB3YWxrIHRoZSB0
YXJnZXQgdHJlZSBlbGVtZW50LWJ5LWVsZW1lbnQsIGFuZCBjbG9uZSBlYWNoIGVsZW1lbnQsCi0g
ICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHVzZSBjbG9uZUVsZW1lbnRXaXRoQ2hpbGRyZW4oKS4gVGhp
cyBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIHRoZSBjb21tb24KLSAgICAgICAgLy8gY2FzZSB3aGVy
ZSA8dXNlPiBkb2Vzbid0IGNvbnRhaW4gZGlzYWxsb3dlZCBlbGVtZW50cyAoaWUuIDxmb3JlaWdu
T2JqZWN0PikuCi0gICAgICAgIC8vIFRob3VnaCBpZiB0aGVyZSBhcmUgZGlzYWxsb3dlZCBlbGVt
ZW50cyBpbiB0aGUgc3VidHJlZSwgd2UgaGF2ZSB0byByZW1vdmUgdGhlbS4KLSAgICAgICAgLy8g
Rm9yIGluc3RhbmNlOiA8dXNlPiBvbiA8Zz4gY29udGFpbmluZyA8Zm9yZWlnbk9iamVjdD4gKGlu
ZGlyZWN0IGNhc2UpLgotICAgICAgICBpZiAoc3VidHJlZUNvbnRhaW5zRGlzYWxsb3dlZEVsZW1l
bnQoKmNsb25lUGFyZW50KSkKLSAgICAgICAgICAgIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50c0Zy
b21TdWJ0cmVlKCpjbG9uZVBhcmVudCk7Ci0KLSAgICAgICAgUmVmUHRyPE5vZGU+IHJlcGxhY2lu
Z0VsZW1lbnQoY2xvbmVQYXJlbnQuZ2V0KCkpOwotCi0gICAgICAgIC8vIFJlcGxhY2UgPHVzZT4g
d2l0aCByZWZlcmVuY2VkIGNvbnRlbnQuCi0gICAgICAgIEFTU0VSVCh1c2UucGFyZW50Tm9kZSgp
KTsKLSAgICAgICAgdXNlLnBhcmVudE5vZGUoKS0+cmVwbGFjZUNoaWxkKGNsb25lUGFyZW50LnJl
bGVhc2UoKSwgJnVzZSk7Ci0KLSAgICAgICAgLy8gRXhwYW5kIHRoZSBzaWJsaW5ncyBiZWNhdXNl
IHRoZSAqZWxlbWVudCogaXMgcmVwbGFjZWQgYW5kIHdlIHdpbGwKLSAgICAgICAgLy8gbG9zZSB0
aGUgc2libGluZyBjaGFpbiB3aGVuIHdlIGFyZSBiYWNrIGZyb20gcmVjdXJzaW9uLgotICAgICAg
ICBlbGVtZW50ID0gcmVwbGFjaW5nRWxlbWVudC5nZXQoKTsKLSAgICAgICAgZm9yIChSZWZQdHI8
Tm9kZT4gc2libGluZyA9IGVsZW1lbnQtPm5leHRTaWJsaW5nKCk7IHNpYmxpbmc7IHNpYmxpbmcg
PSBzaWJsaW5nLT5uZXh0U2libGluZygpKQotICAgICAgICAgICAgZXhwYW5kVXNlRWxlbWVudHNJ
blNoYWRvd1RyZWUoc2libGluZy5nZXQoKSk7Ci0gICAgfQorICAgICAgICByZW1vdmVEaXNhbGxv
d2VkRWxlbWVudHNGcm9tU3VidHJlZShyZXBsYWNlbWVudC5nZXQoKSk7CisKKyAgICAgICAgLy8g
UmVwbGFjZSA8dXNlPiB3aXRoIHRoZSA8Zz4gZWxlbWVudCB3ZSBjcmVhdGVkLgorICAgICAgICBv
cmlnaW5hbC5wYXJlbnROb2RlKCktPnJlcGxhY2VDaGlsZChyZXBsYWNlbWVudC5wdHIoKSwgJm9y
aWdpbmFsKTsKKworICAgICAgICAvLyBDYWxsIHRyYW5zZmVyU2l6ZUF0dHJpYnV0ZXNUb1NoYWRv
d1RyZWVUYXJnZXRDbG9uZSBhZnRlciBwdXR0aW5nIHRoZSBjbG9uZWQgZWxlbWVudHMgaW50byB0
aGUKKyAgICAgICAgLy8gc2hhZG93IHRyZWUgc28gaXQgY2FuIHVzZSBTVkdFbGVtZW50Ojpjb3Jy
ZXNwb25kaW5nRWxlbWVudCB3aXRob3V0IHRyaWdnZXJpbmcgYW4gYXNzZXJ0aW9uLgorICAgICAg
ICBpZiAoY2xvbmVkVGFyZ2V0KQorICAgICAgICAgICAgb3JpZ2luYWwudHJhbnNmZXJTaXplQXR0
cmlidXRlc1RvU2hhZG93VHJlZVRhcmdldENsb25lKCpjbG9uZWRUYXJnZXQpOwogCi0gICAgZm9y
IChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBlbGVtZW50LT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBleHBhbmRVc2VFbGVtZW50c0luU2hh
ZG93VHJlZShjaGlsZC5nZXQoKSk7CisgICAgICAgIC8vIENvbnRpbnVlIGl0ZXJhdGluZyBmcm9t
IHRoZSA8Zz4gZWxlbWVudCBzaW5jZSB0aGUgPHVzZT4gZWxlbWVudCB3YXMgcmVwbGFjZWQuCisg
ICAgICAgIGl0ID0gZGVzY2VuZGFudHMuZnJvbShyZXBsYWNlbWVudC5nZXQoKSk7CisgICAgfQog
fQogCi12b2lkIFNWR1VzZUVsZW1lbnQ6OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVl
KE5vZGUqIG5vZGUpCit2b2lkIFNWR1VzZUVsZW1lbnQ6OmV4cGFuZFN5bWJvbEVsZW1lbnRzSW5T
aGFkb3dUcmVlKCkKIHsKLSAgICBpZiAoaXM8U1ZHU3ltYm9sRWxlbWVudD4oKm5vZGUpKSB7Cisg
ICAgYXV0byBkZXNjZW5kYW50cyA9IGRlc2NlbmRhbnRzT2ZUeXBlPFNWR1N5bWJvbEVsZW1lbnQ+
KCp1c2VyQWdlbnRTaGFkb3dSb290KCkpOworICAgIGF1dG8gZW5kID0gZGVzY2VuZGFudHMuZW5k
KCk7CisgICAgZm9yIChhdXRvIGl0ID0gZGVzY2VuZGFudHMuYmVnaW4oKTsgaXQgIT0gZW5kOyAp
IHsKKyAgICAgICAgU1ZHU3ltYm9sRWxlbWVudCYgb3JpZ2luYWwgPSAqaXQ7CisgICAgICAgIGl0
ID0gZW5kOyAvLyBFZmZpY2llbnRseSBxdWlldHMgYXNzZXJ0aW9ucyBkdWUgdG8gdGhlIG91dHN0
YW5kaW5nIGl0ZXJhdG9yLgorCiAgICAgICAgIC8vIFNwZWM6IFRoZSByZWZlcmVuY2VkICdzeW1i
b2wnIGFuZCBpdHMgY29udGVudHMgYXJlIGRlZXAtY2xvbmVkIGludG8gdGhlIGdlbmVyYXRlZCB0
cmVlLAogICAgICAgICAvLyB3aXRoIHRoZSBleGNlcHRpb24gdGhhdCB0aGUgJ3N5bWJvbCcgaXMg
cmVwbGFjZWQgYnkgYW4gJ3N2ZycuIFRoaXMgZ2VuZXJhdGVkICdzdmcnIHdpbGwKICAgICAgICAg
Ly8gYWx3YXlzIGhhdmUgZXhwbGljaXQgdmFsdWVzIGZvciBhdHRyaWJ1dGVzIHdpZHRoIGFuZCBo
ZWlnaHQuIElmIGF0dHJpYnV0ZXMgd2lkdGggYW5kL29yCiAgICAgICAgIC8vIGhlaWdodCBhcmUg
cHJvdmlkZWQgb24gdGhlICd1c2UnIGVsZW1lbnQsIHRoZW4gdGhlc2UgYXR0cmlidXRlcyB3aWxs
IGJlIHRyYW5zZmVycmVkIHRvCiAgICAgICAgIC8vIHRoZSBnZW5lcmF0ZWQgJ3N2ZycuIElmIGF0
dHJpYnV0ZXMgd2lkdGggYW5kL29yIGhlaWdodCBhcmUgbm90IHNwZWNpZmllZCwgdGhlIGdlbmVy
YXRlZAogICAgICAgICAvLyAnc3ZnJyBlbGVtZW50IHdpbGwgdXNlIHZhbHVlcyBvZiAxMDAlIGZv
ciB0aGVzZSBhdHRyaWJ1dGVzLgotICAgICAgICBSZWZQdHI8U1ZHU1ZHRWxlbWVudD4gc3ZnRWxl
bWVudCA9IFNWR1NWR0VsZW1lbnQ6OmNyZWF0ZShTVkdOYW1lczo6c3ZnVGFnLCAqcmVmZXJlbmNl
ZERvY3VtZW50KCkpOwogCi0gICAgICAgIC8vIFRyYW5zZmVyIGFsbCBkYXRhIChhdHRyaWJ1dGVz
LCBldGMuKSBmcm9tIDxzeW1ib2w+IHRvIHRoZSBuZXcgPHN2Zz4gZWxlbWVudC4KLSAgICAgICAg
c3ZnRWxlbWVudC0+Y2xvbmVEYXRhRnJvbUVsZW1lbnQoZG93bmNhc3Q8U1ZHU3ltYm9sRWxlbWVu
dD4oKm5vZGUpKTsKLQotICAgICAgICAvLyBPbmx5IGNsb25lIHN5bWJvbCBjaGlsZHJlbiwgYW5k
IGFkZCB0aGVtIHRvIHRoZSBuZXcgPHN2Zz4gZWxlbWVudAotICAgICAgICBmb3IgKE5vZGUqIGNo
aWxkID0gbm9kZS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxp
bmcoKSkgewotICAgICAgICAgICAgUmVmUHRyPE5vZGU+IG5ld0NoaWxkID0gY2hpbGQtPmNsb25l
Tm9kZSh0cnVlKTsKLSAgICAgICAgICAgIHN2Z0VsZW1lbnQtPmFwcGVuZENoaWxkKG5ld0NoaWxk
LnJlbGVhc2UoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICAvLyBXZSBkb24ndCB3YWxrIHRoZSB0
YXJnZXQgdHJlZSBlbGVtZW50LWJ5LWVsZW1lbnQsIGFuZCBjbG9uZSBlYWNoIGVsZW1lbnQsCi0g
ICAgICAgIC8vIGJ1dCBpbnN0ZWFkIHVzZSBjbG9uZU5vZGUoZGVlcD10cnVlKS4gVGhpcyBpcyBh
biBvcHRpbWl6YXRpb24gZm9yIHRoZSBjb21tb24KLSAgICAgICAgLy8gY2FzZSB3aGVyZSA8dXNl
PiBkb2Vzbid0IGNvbnRhaW4gZGlzYWxsb3dlZCBlbGVtZW50cyAoaWUuIDxmb3JlaWduT2JqZWN0
PikuCi0gICAgICAgIC8vIFRob3VnaCBpZiB0aGVyZSBhcmUgZGlzYWxsb3dlZCBlbGVtZW50cyBp
biB0aGUgc3VidHJlZSwgd2UgaGF2ZSB0byByZW1vdmUgdGhlbS4KLSAgICAgICAgLy8gRm9yIGlu
c3RhbmNlOiA8dXNlPiBvbiA8Zz4gY29udGFpbmluZyA8Zm9yZWlnbk9iamVjdD4gKGluZGlyZWN0
IGNhc2UpLgotICAgICAgICBpZiAoc3VidHJlZUNvbnRhaW5zRGlzYWxsb3dlZEVsZW1lbnQoKnN2
Z0VsZW1lbnQpKQotICAgICAgICAgICAgcmVtb3ZlRGlzYWxsb3dlZEVsZW1lbnRzRnJvbVN1YnRy
ZWUoKnN2Z0VsZW1lbnQpOwotCi0gICAgICAgIFJlZlB0cjxTVkdTVkdFbGVtZW50PiByZXBsYWNp
bmdFbGVtZW50KHN2Z0VsZW1lbnQuZ2V0KCkpOworICAgICAgICAvLyBGSVhNRTogSXMgaXQgcmln
aHQgdG8gdXNlIHJlZmVyZW5jZWREb2N1bWVudCgpIGhlcmUgaW5zdGVhZCBvZiBqdXN0IGRvY3Vt
ZW50KCk/CisgICAgICAgIC8vIENhbiBhIHNoYWRvdyB0cmVlIHdpdGhpbiB0aGlzIGRvY3VtZW50
IHJlYWxseSBjb250YWluIGVsZW1lbnRzIHRoYXQgYXJlIGluIGEKKyAgICAgICAgLy8gZGlmZmVy
ZW50IGRvY3VtZW50PworICAgICAgICBBU1NFUlQocmVmZXJlbmNlZERvY3VtZW50KCkpOworICAg
ICAgICBhdXRvIHJlcGxhY2VtZW50ID0gU1ZHU1ZHRWxlbWVudDo6Y3JlYXRlKFNWR05hbWVzOjpz
dmdUYWcsICpyZWZlcmVuY2VkRG9jdW1lbnQoKSk7CisgICAgICAgIHJlcGxhY2VtZW50LT5jbG9u
ZURhdGFGcm9tRWxlbWVudChvcmlnaW5hbCk7CisgICAgICAgIG9yaWdpbmFsLmNsb25lQ2hpbGRO
b2RlcyhyZXBsYWNlbWVudC5wdHIoKSk7CisgICAgICAgIHJlbW92ZURpc2FsbG93ZWRFbGVtZW50
c0Zyb21TdWJ0cmVlKHJlcGxhY2VtZW50LmdldCgpKTsKIAotICAgICAgICAvLyBSZXBsYWNlIDxz
eW1ib2w+IHdpdGggPHN2Zz4uCi0gICAgICAgIG5vZGUtPnBhcmVudE5vZGUoKS0+cmVwbGFjZUNo
aWxkKHN2Z0VsZW1lbnQucmVsZWFzZSgpLCBub2RlKTsKKyAgICAgICAgLy8gUmVwbGFjZSA8c3lt
Ym9sPiB3aXRoIHRoZSA8c3ZnPiBlbGVtZW50IHdlIGNyZWF0ZWQuCisgICAgICAgIG9yaWdpbmFs
LnBhcmVudE5vZGUoKS0+cmVwbGFjZUNoaWxkKHJlcGxhY2VtZW50LnB0cigpLCAmb3JpZ2luYWwp
OwogCi0gICAgICAgIC8vIEV4cGFuZCB0aGUgc2libGluZ3MgYmVjYXVzZSB0aGUgKmVsZW1lbnQq
IGlzIHJlcGxhY2VkIGFuZCB3ZSB3aWxsCi0gICAgICAgIC8vIGxvc2UgdGhlIHNpYmxpbmcgY2hh
aW4gd2hlbiB3ZSBhcmUgYmFjayBmcm9tIHJlY3Vyc2lvbi4KLSAgICAgICAgbm9kZSA9IHJlcGxh
Y2luZ0VsZW1lbnQuZ2V0KCk7Ci0gICAgICAgIGZvciAoUmVmUHRyPE5vZGU+IHNpYmxpbmcgPSBu
b2RlLT5uZXh0U2libGluZygpOyBzaWJsaW5nOyBzaWJsaW5nID0gc2libGluZy0+bmV4dFNpYmxp
bmcoKSkKLSAgICAgICAgICAgIGV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKHNpYmxp
bmcuZ2V0KCkpOworICAgICAgICAvLyBDb250aW51ZSBpdGVyYXRpbmcgZnJvbSB0aGUgPHN2Zz4g
ZWxlbWVudCBzaW5jZSB0aGUgPHN5bWJvbD4gZWxlbWVudCB3YXMgcmVwbGFjZWQuCisgICAgICAg
IGl0ID0gZGVzY2VuZGFudHMuZnJvbShyZXBsYWNlbWVudC5nZXQoKSk7CiAgICAgfQotCi0gICAg
Zm9yIChSZWZQdHI8Tm9kZT4gY2hpbGQgPSBub2RlLT5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGls
ZCA9IGNoaWxkLT5uZXh0U2libGluZygpKQotICAgICAgICBleHBhbmRTeW1ib2xFbGVtZW50c0lu
U2hhZG93VHJlZShjaGlsZC5nZXQoKSk7CiB9CiAKLXZvaWQgU1ZHVXNlRWxlbWVudDo6dHJhbnNm
ZXJFdmVudExpc3RlbmVyc1RvU2hhZG93VHJlZShTVkdFbGVtZW50SW5zdGFuY2UqIHRhcmdldCkK
K3ZvaWQgU1ZHVXNlRWxlbWVudDo6dHJhbnNmZXJFdmVudExpc3RlbmVyc1RvU2hhZG93VHJlZSgp
CiB7Ci0gICAgaWYgKCF0YXJnZXQpCi0gICAgICAgIHJldHVybjsKLQotICAgIFNWR0VsZW1lbnQq
IG9yaWdpbmFsRWxlbWVudCA9IHRhcmdldC0+Y29ycmVzcG9uZGluZ0VsZW1lbnQoKTsKLSAgICBB
U1NFUlQob3JpZ2luYWxFbGVtZW50KTsKLQotICAgIGlmIChTVkdFbGVtZW50KiBzaGFkb3dUcmVl
RWxlbWVudCA9IHRhcmdldC0+c2hhZG93VHJlZUVsZW1lbnQoKSkgewotICAgICAgICBpZiAoRXZl
bnRUYXJnZXREYXRhKiBkYXRhID0gb3JpZ2luYWxFbGVtZW50LT5ldmVudFRhcmdldERhdGEoKSkK
LSAgICAgICAgICAgIGRhdGEtPmV2ZW50TGlzdGVuZXJNYXAuY29weUV2ZW50TGlzdGVuZXJzTm90
Q3JlYXRlZEZyb21NYXJrdXBUb1RhcmdldChzaGFkb3dUcmVlRWxlbWVudCk7CisgICAgQVNTRVJU
KHVzZXJBZ2VudFNoYWRvd1Jvb3QoKSk7CisgICAgZm9yIChhdXRvJiBkZXNjZW5kYW50IDogZGVz
Y2VuZGFudHNPZlR5cGU8U1ZHRWxlbWVudD4oKnVzZXJBZ2VudFNoYWRvd1Jvb3QoKSkpIHsKKyAg
ICAgICAgQVNTRVJUKGRlc2NlbmRhbnQuY29ycmVzcG9uZGluZ0VsZW1lbnQoKSk7CisgICAgICAg
IGlmIChFdmVudFRhcmdldERhdGEqIGRhdGEgPSBkZXNjZW5kYW50LmNvcnJlc3BvbmRpbmdFbGVt
ZW50KCktPmV2ZW50VGFyZ2V0RGF0YSgpKQorICAgICAgICAgICAgZGF0YS0+ZXZlbnRMaXN0ZW5l
ck1hcC5jb3B5RXZlbnRMaXN0ZW5lcnNOb3RDcmVhdGVkRnJvbU1hcmt1cFRvVGFyZ2V0KCZkZXNj
ZW5kYW50KTsKICAgICB9Ci0KLSAgICBmb3IgKFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2Ug
PSB0YXJnZXQtPmZpcnN0Q2hpbGQoKTsgaW5zdGFuY2U7IGluc3RhbmNlID0gaW5zdGFuY2UtPm5l
eHRTaWJsaW5nKCkpCi0gICAgICAgIHRyYW5zZmVyRXZlbnRMaXN0ZW5lcnNUb1NoYWRvd1RyZWUo
aW5zdGFuY2UpOwogfQogCiB2b2lkIFNWR1VzZUVsZW1lbnQ6OmFzc29jaWF0ZUluc3RhbmNlc1dp
dGhTaGFkb3dUcmVlRWxlbWVudHMoTm9kZSogdGFyZ2V0LCBTVkdFbGVtZW50SW5zdGFuY2UqIHRh
cmdldEluc3RhbmNlKQpAQCAtODU5LDM2ICs3ODYsMjQgQEAgdm9pZCBTVkdVc2VFbGVtZW50Ojpp
bnZhbGlkYXRlRGVwZW5kZW50U2hhZG93VHJlZXMoKQogICAgIH0KIH0KIAotdm9pZCBTVkdVc2VF
bGVtZW50Ojp0cmFuc2ZlclVzZUF0dHJpYnV0ZXNUb1JlcGxhY2VkRWxlbWVudChTVkdFbGVtZW50
KiBmcm9tLCBTVkdFbGVtZW50KiB0bykgY29uc3QKK3ZvaWQgU1ZHVXNlRWxlbWVudDo6dHJhbnNm
ZXJBdHRyaWJ1dGVzVG9TaGFkb3dUcmVlUmVwbGFjZW1lbnQoU1ZHR0VsZW1lbnQmIHJlcGxhY2Vt
ZW50KSBjb25zdAogewotICAgIEFTU0VSVChmcm9tKTsKLSAgICBBU1NFUlQodG8pOworICAgIHJl
cGxhY2VtZW50LmNsb25lRGF0YUZyb21FbGVtZW50KCp0aGlzKTsKIAotICAgIHRvLT5jbG9uZURh
dGFGcm9tRWxlbWVudCgqZnJvbSk7Ci0KLSAgICB0by0+cmVtb3ZlQXR0cmlidXRlKFNWR05hbWVz
Ojp4QXR0cik7Ci0gICAgdG8tPnJlbW92ZUF0dHJpYnV0ZShTVkdOYW1lczo6eUF0dHIpOwotICAg
IHRvLT5yZW1vdmVBdHRyaWJ1dGUoU1ZHTmFtZXM6OndpZHRoQXR0cik7Ci0gICAgdG8tPnJlbW92
ZUF0dHJpYnV0ZShTVkdOYW1lczo6aGVpZ2h0QXR0cik7Ci0gICAgdG8tPnJlbW92ZUF0dHJpYnV0
ZShYTGlua05hbWVzOjpocmVmQXR0cik7CisgICAgcmVwbGFjZW1lbnQucmVtb3ZlQXR0cmlidXRl
KFNWR05hbWVzOjp4QXR0cik7CisgICAgcmVwbGFjZW1lbnQucmVtb3ZlQXR0cmlidXRlKFNWR05h
bWVzOjp5QXR0cik7CisgICAgcmVwbGFjZW1lbnQucmVtb3ZlQXR0cmlidXRlKFNWR05hbWVzOjp3
aWR0aEF0dHIpOworICAgIHJlcGxhY2VtZW50LnJlbW92ZUF0dHJpYnV0ZShTVkdOYW1lczo6aGVp
Z2h0QXR0cik7CisgICAgcmVwbGFjZW1lbnQucmVtb3ZlQXR0cmlidXRlKFhMaW5rTmFtZXM6Omhy
ZWZBdHRyKTsKIH0KIAogYm9vbCBTVkdVc2VFbGVtZW50OjpzZWxmSGFzUmVsYXRpdmVMZW5ndGhz
KCkgY29uc3QKIHsKLSAgICBpZiAoeCgpLmlzUmVsYXRpdmUoKQotICAgICB8fCB5KCkuaXNSZWxh
dGl2ZSgpCi0gICAgIHx8IHdpZHRoKCkuaXNSZWxhdGl2ZSgpCi0gICAgIHx8IGhlaWdodCgpLmlz
UmVsYXRpdmUoKSkKKyAgICBpZiAoeCgpLmlzUmVsYXRpdmUoKSB8fCB5KCkuaXNSZWxhdGl2ZSgp
IHx8IHdpZHRoKCkuaXNSZWxhdGl2ZSgpIHx8IGhlaWdodCgpLmlzUmVsYXRpdmUoKSkKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAKLSAgICBpZiAoIW1fdGFyZ2V0RWxlbWVudEluc3RhbmNlKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTVkdFbGVtZW50KiBlbGVtZW50ID0gbV90YXJnZXRF
bGVtZW50SW5zdGFuY2UtPmNvcnJlc3BvbmRpbmdFbGVtZW50KCk7Ci0gICAgaWYgKCFlbGVtZW50
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gZWxlbWVudC0+aGFzUmVsYXRp
dmVMZW5ndGhzKCk7CisgICAgYXV0byogdGFyZ2V0ID0gc2hhZG93VHJlZVRhcmdldENsb25lKCk7
CisgICAgcmV0dXJuIHRhcmdldCAmJiB0YXJnZXQtPmhhc1JlbGF0aXZlTGVuZ3RocygpOwogfQog
CiB2b2lkIFNWR1VzZUVsZW1lbnQ6Om5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiByZXNv
dXJjZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmggYi9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNlRWxlbWVudC5oCmluZGV4IGMyYzk0ZTgyZTIwMTRkNDE2
YzhlNjJjOGZmZDJmMDllN2M2NWE4MmQuLjhlYzZlZjc4MGVjYjc0ZWEzNDc1N2M5MzE2NmFhZjFj
YjkxMzQ5YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdVc2VFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaApAQCAtMSw2ICsxLDcgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggTmlrb2xh
cyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTM0LDYgKzM1LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDYWNoZWRT
VkdEb2N1bWVudDsKIGNsYXNzIFNWR0VsZW1lbnRJbnN0YW5jZTsKK2NsYXNzIFNWR0dFbGVtZW50
OwogCiBjbGFzcyBTVkdVc2VFbGVtZW50IGZpbmFsIDogcHVibGljIFNWR0dyYXBoaWNzRWxlbWVu
dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdWJsaWMgU1ZHRXh0ZXJuYWxSZXNvdXJj
ZXNSZXF1aXJlZCwKQEAgLTQ0LDcgKzQ2LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgflNWR1Vz
ZUVsZW1lbnQoKTsKIAogICAgIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2VSb290KCk7Ci0g
ICAgU1ZHRWxlbWVudEluc3RhbmNlKiBhbmltYXRlZEluc3RhbmNlUm9vdCgpIGNvbnN0OwogICAg
IFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFuY2VGb3JTaGFkb3dUcmVlRWxlbWVudChOb2RlKikg
Y29uc3Q7CiAgICAgdm9pZCBpbnZhbGlkYXRlU2hhZG93VHJlZSgpOwogICAgIHZvaWQgaW52YWxp
ZGF0ZURlcGVuZGVudFNoYWRvd1RyZWVzKCk7CkBAIC03Myw3ICs3NCw3IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCB2b2lkIHRvQ2xpcFBhdGgoUGF0aCYpIG92ZXJyaWRlOwogCiAgICAgdm9pZCBj
bGVhclJlc291cmNlUmVmZXJlbmNlcygpOwotICAgIHZvaWQgYnVpbGRTaGFkb3dBbmRJbnN0YW5j
ZVRyZWUoU1ZHRWxlbWVudCogdGFyZ2V0KTsKKyAgICB2b2lkIGJ1aWxkU2hhZG93QW5kSW5zdGFu
Y2VUcmVlKFNWR0VsZW1lbnQmIHRhcmdldCk7CiAgICAgdm9pZCBkZXRhY2hJbnN0YW5jZSgpOwog
CiAgICAgdmlydHVhbCBib29sIGhhdmVMb2FkZWRSZXF1aXJlZFJlc291cmNlcygpIG92ZXJyaWRl
IHsgcmV0dXJuIFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OmhhdmVMb2FkZWRSZXF1aXJl
ZFJlc291cmNlcygpOyB9CkBAIC04NSwxOSArODYsMTkgQEAgcHJpdmF0ZToKICAgICB2b2lkIGJ1
aWxkSW5zdGFuY2VUcmVlKFNWR0VsZW1lbnQqIHRhcmdldCwgU1ZHRWxlbWVudEluc3RhbmNlKiB0
YXJnZXRJbnN0YW5jZSwgYm9vbCYgZm91bmRDeWNsZSwgYm9vbCBmb3VuZFVzZSk7CiAgICAgYm9v
bCBoYXNDeWNsZVVzZVJlZmVyZW5jaW5nKFNWR1VzZUVsZW1lbnQqLCBTVkdFbGVtZW50SW5zdGFu
Y2UqIHRhcmdldEluc3RhbmNlLCBTVkdFbGVtZW50KiYgbmV3VGFyZ2V0KTsKIAotICAgIC8vIFNo
YWRvdyB0cmVlIGhhbmRsaW5nCi0gICAgdm9pZCBidWlsZFNoYWRvd1RyZWUoU1ZHRWxlbWVudCog
dGFyZ2V0LCBTVkdFbGVtZW50SW5zdGFuY2UqIHRhcmdldEluc3RhbmNlKTsKLQotICAgIHZvaWQg
ZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUoTm9kZSogZWxlbWVudCk7Ci0gICAgdm9pZCBl
eHBhbmRTeW1ib2xFbGVtZW50c0luU2hhZG93VHJlZShOb2RlKiBlbGVtZW50KTsKKyAgICAvLyBT
aGFkb3cgdHJlZSBoYW5kbGluZy4KKyAgICB2b2lkIGJ1aWxkU2hhZG93VHJlZShTVkdFbGVtZW50
JiB0YXJnZXQpOworICAgIHZvaWQgZXhwYW5kVXNlRWxlbWVudHNJblNoYWRvd1RyZWUoKTsKKyAg
ICB2b2lkIGV4cGFuZFN5bWJvbEVsZW1lbnRzSW5TaGFkb3dUcmVlKCk7CisgICAgU1ZHRWxlbWVu
dCogc2hhZG93VHJlZVRhcmdldENsb25lKCkgY29uc3Q7CisgICAgdm9pZCB0cmFuc2ZlckV2ZW50
TGlzdGVuZXJzVG9TaGFkb3dUcmVlKCk7CisgICAgdm9pZCB0cmFuc2ZlckF0dHJpYnV0ZXNUb1No
YWRvd1RyZWVSZXBsYWNlbWVudChTVkdHRWxlbWVudCYpIGNvbnN0OworICAgIHZvaWQgdHJhbnNm
ZXJTaXplQXR0cmlidXRlc1RvU2hhZG93VHJlZVRhcmdldENsb25lKFNWR0VsZW1lbnQmKSBjb25z
dDsKIAogICAgIC8vICJUcmVlIGNvbm5lY3RvciIgCiAgICAgdm9pZCBhc3NvY2lhdGVJbnN0YW5j
ZXNXaXRoU2hhZG93VHJlZUVsZW1lbnRzKE5vZGUqIHRhcmdldCwgU1ZHRWxlbWVudEluc3RhbmNl
KiB0YXJnZXRJbnN0YW5jZSk7CiAgICAgU1ZHRWxlbWVudEluc3RhbmNlKiBpbnN0YW5jZUZvclNo
YWRvd1RyZWVFbGVtZW50KE5vZGUqIGVsZW1lbnQsIFNWR0VsZW1lbnRJbnN0YW5jZSogaW5zdGFu
Y2UpIGNvbnN0OwogCi0gICAgdm9pZCB0cmFuc2ZlclVzZUF0dHJpYnV0ZXNUb1JlcGxhY2VkRWxl
bWVudChTVkdFbGVtZW50KiBmcm9tLCBTVkdFbGVtZW50KiB0bykgY29uc3Q7Ci0gICAgdm9pZCB0
cmFuc2ZlckV2ZW50TGlzdGVuZXJzVG9TaGFkb3dUcmVlKFNWR0VsZW1lbnRJbnN0YW5jZSogdGFy
Z2V0KTsKLQogICAgIEJFR0lOX0RFQ0xBUkVfQU5JTUFURURfUFJPUEVSVElFUyhTVkdVc2VFbGVt
ZW50KQogICAgICAgICBERUNMQVJFX0FOSU1BVEVEX0xFTkdUSChYLCB4KQogICAgICAgICBERUNM
QVJFX0FOSU1BVEVEX0xFTkdUSChZLCB5KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3Zn
L1NWR1VzZUVsZW1lbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR1VzZUVsZW1lbnQuaWRs
CmluZGV4IGEwNTY0YzY5NTE0MzdkOTMwMDFkY2M4YjFjYWYxNzBkZDI1Mzc1MzkuLjhjZjAxNjVl
ZTAyZTIxODgwNTY3ODAxOTQyNTUzZDlhZmE4NDgwZmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N2Zy9TVkdVc2VFbGVtZW50LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHVXNl
RWxlbWVudC5pZGwKQEAgLTI0LDEzICsyNCwxMiBAQAogICovCiAKIGludGVyZmFjZSBTVkdVc2VF
bGVtZW50IDogU1ZHR3JhcGhpY3NFbGVtZW50IHsKLSAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZH
QW5pbWF0ZWRMZW5ndGggICB4OwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZExl
bmd0aCAgIHk7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTGVuZ3RoICAgd2lk
dGg7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0FuaW1hdGVkTGVuZ3RoICAgaGVpZ2h0Owor
ICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBTVkdBbmltYXRlZExlbmd0aCB4OworICAgIHJlYWRvbmx5
IGF0dHJpYnV0ZSBTVkdBbmltYXRlZExlbmd0aCB5OworICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBT
VkdBbmltYXRlZExlbmd0aCB3aWR0aDsKKyAgICByZWFkb25seSBhdHRyaWJ1dGUgU1ZHQW5pbWF0
ZWRMZW5ndGggaGVpZ2h0OwogCiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0VsZW1lbnRJbnN0
YW5jZSBpbnN0YW5jZVJvb3Q7Ci0gICAgcmVhZG9ubHkgYXR0cmlidXRlIFNWR0VsZW1lbnRJbnN0
YW5jZSBhbmltYXRlZEluc3RhbmNlUm9vdDsKIH07CiAKIFNWR1VzZUVsZW1lbnQgaW1wbGVtZW50
cyBTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>