<?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>109529</bug_id>
          
          <creation_ts>2013-02-11 17:48:49 -0800</creation_ts>
          <short_desc>Better names for ElementAttributeData &amp; subclasses.</short_desc>
          <delta_ts>2013-02-13 13:51:50 -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>DOM</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>109505</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Andreas Kling">kling</reporter>
          <assigned_to name="Andreas Kling">kling</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dglazkov</cc>
    
    <cc>d-r</cc>
    
    <cc>fmalita</cc>
    
    <cc>kling</cc>
    
    <cc>koivisto</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mifenton</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>830395</commentid>
    <comment_count>0</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-11 17:48:49 -0800</bug_when>
    <thetext>Here&apos;s what I&apos;m thinking:

ElementAttributeData =&gt; ElementData
MutableElementAttributeData =&gt; PrivateElementAttributeData
ImmutableElementAttributeDat a=&gt; SharableElementAttributeData

Element::attributeData() -&gt; Element::elementData()
Element::mutableAttributeData() =&gt; Element::ensurePrivateElementData()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830397</commentid>
    <comment_count>1</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-11 17:52:41 -0800</bug_when>
    <thetext>MutableElementAttributeData =&gt; PrivateElementData
ImmutableElementAttributeData =&gt; SharableElementData

Is what I meant, duh.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830413</commentid>
    <comment_count>2</comment_count>
      <attachid>187739</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-11 18:05:40 -0800</bug_when>
    <thetext>Created attachment 187739
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830443</commentid>
    <comment_count>3</comment_count>
      <attachid>187739</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 18:39:52 -0800</bug_when>
    <thetext>Comment on attachment 187739
Patch

Attachment 187739 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16487609</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830462</commentid>
    <comment_count>4</comment_count>
      <attachid>187753</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-11 19:11:14 -0800</bug_when>
    <thetext>Created attachment 187753
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830527</commentid>
    <comment_count>5</comment_count>
      <attachid>187753</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-11 21:15:33 -0800</bug_when>
    <thetext>Comment on attachment 187753
Patch

Attachment 187753 did not pass cr-linux-debug-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/16489683</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830531</commentid>
    <comment_count>6</comment_count>
      <attachid>187753</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-11 21:21:04 -0800</bug_when>
    <thetext>Comment on attachment 187753
Patch

Actually, let&apos;s move stuff to Element.h/cpp first so we get as much version control history as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832008</commentid>
    <comment_count>7</comment_count>
      <attachid>188108</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-13 10:05:03 -0800</bug_when>
    <thetext>Created attachment 188108
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832123</commentid>
    <comment_count>8</comment_count>
      <attachid>188134</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-13 11:46:09 -0800</bug_when>
    <thetext>Created attachment 188134
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832131</commentid>
    <comment_count>9</comment_count>
      <attachid>188134</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-02-13 11:51:20 -0800</bug_when>
    <thetext>Comment on attachment 188134
Patch

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

&gt; Source/WebCore/ChangeLog:17
&gt; +        - MutableElementAttributeData =&gt; PrivateElementData

&quot;Private&quot; is bit overloaded and does not pair that well with &quot;shareable&quot;. Maybe &quot;unique&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832179</commentid>
    <comment_count>10</comment_count>
      <attachid>188144</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-13 12:20:04 -0800</bug_when>
    <thetext>Created attachment 188144
Patch

Yeah okay, &quot;Unique&quot; is nice.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832308</commentid>
    <comment_count>11</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-02-13 13:51:50 -0800</bug_when>
    <thetext>Committed r142791: &lt;http://trac.webkit.org/changeset/142791&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187739</attachid>
            <date>2013-02-11 18:05:40 -0800</date>
            <delta_ts>2013-02-11 19:11:14 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109529.diff</filename>
            <type>text/plain</type>
            <size>78163</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNTMzYzQyLi5lNGYwMzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ2
IEBACisyMDEzLTAyLTExICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAg
ICAgICBCZXR0ZXIgbmFtZXMgZm9yIEVsZW1lbnRBdHRyaWJ1dGVEYXRhICYgc3ViY2xhc3Nlcy4K
KyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA5NTI5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRWxlbWVudEF0dHJpYnV0ZURhdGEgPT4g
RWxlbWVudERhdGEKKworICAgICAgICAgICAgQmVjYXVzZSBFbGVtZW50QXR0cmlidXRlRGF0YSB3
b24ndCBiZSBhIGdvb2QgbmFtZSBvbmNlIHdlIG1vdmUgc29tZSBub24tYXR0cmlidXRlIHJlbGF0
ZWQKKyAgICAgICAgICAgIHRoaW5ncyB0byB0aGlzIHN0cnVjdHVyZS4KKworICAgICAgICAtIE11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSA9PiBQcml2YXRlRWxlbWVudERhdGEKKworICAgICAg
ICAgICAgVGhlc2Ugb2JqZWN0cyBjb250YWluIGRhdGEgdGhhdCBpcyBwcml2YXRlIHRvIGEgc3Bl
Y2lmaWMgRWxlbWVudCwgYW5kIGNhbm5vdCBiZSBzaGFyZWQgd2l0aAorICAgICAgICAgICAgb3Ro
ZXIgRWxlbWVudHMuIFRoaXMgaXMgd2hhdCdzIGltcG9ydGFudCBhYm91dCBpdCwgbm90IHRoYXQg
aXRzIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBtdXRhYmxlLgorCisgICAgICAgIC0gSW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEgPT4gU2hhcmFibGVFbGVtZW50RGF0YQorCisgICAgICAgICAg
ICBUaGVzZSBvYmplY3RzIGNhbiBiZSBzaGFyZWQgd2l0aCBvdGhlciBFbGVtZW50cyB0aGF0IGhh
dmUgdGhlIHNhbWUgYXR0cmlidXRlIGtleS92YWx1ZSBwYWlycy4KKyAgICAgICAgICAgIFRoZSBm
YWN0IHRoYXQgaXRzIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBhIGZpeGVkLXNpemUgYXJyYXkgaXMg
dW5pbnRlcmVzdGluZyB0byBjbGllbnRzLgorCisgICAgICAgIEFsc28gcmVuYW1lZCBzb21lIGZ1
bmN0aW9ucyB0byByZWZsZWN0IHRoZSBjaGFuZ2VzIGluIGNsYXNzIG5hbWVzLgorCisgICAgICAg
ICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMpOgorICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OmVs
ZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmFibGVFbGVtZW50RGF0YUNhY2hlS2V5OjpTaGFy
YWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmFibGVFbGVt
ZW50RGF0YUNhY2hlS2V5OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJhYmxl
RWxlbWVudERhdGFDYWNoZUVudHJ5OjpTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSk6Cisg
ICAgICAgIChTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w6OmNhY2hlZFNoYXJhYmxlRWxlbWVudERhdGFXaXRo
QXR0cmlidXRlcyk6CisgICAgICAgICogZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wpOgor
ICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRl
dGFjaEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0cmlidXRlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6c2V0QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFN5bmNocm9u
aXplZExhenlBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmli
dXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2hvdWxkSW52YWxpZGF0ZURpc3RyaWJ1dGlvbldo
ZW5BdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnBhcnNlclNl
dEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlcyk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6YWRkQXR0cmlidXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
Z2V0QXR0cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1
dGVOb2RlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmNvbXB1dGVJbmhlcml0ZWRMYW5ndWFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpnZXRVUkxBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xv
bmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y3Jl
YXRlUHJpdmF0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVwb3J0TWVtb3J5
VXNhZ2UpOgorICAgICAgICAqIGRvbS9FbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
ZWxlbWVudERhdGEpOgorICAgICAgICAoRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50Ojp1cGRhdGVkRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5z
dXJlVXBkYXRlZEVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3Vy
ZUVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZhc3RIYXNBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZmFzdEdldEF0dHJpYnV0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjppZEZvclN0eWxlUmVzb2x1dGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjpjbGFzc05hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUl0
ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlSXRlbSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVJbnZhbGlkQXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50OjpoYXNJRCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpo
YXNDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVQcml2YXRlRWxlbWVu
dERhdGEpOgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OnNpemVGb3JTaGFyYWJsZUVsZW1lbnREYXRh
V2l0aEF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpjcmVh
dGVTaGFyYWJsZVdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRh
OjpjcmVhdGVQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJhYmxlRWxlbWVudERhdGE6
OlNoYXJhYmxlRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmFibGVFbGVtZW50
RGF0YTo6flNoYXJhYmxlRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERh
dGE6OkVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlByaXZhdGVFbGVtZW50RGF0YTo6
UHJpdmF0ZUVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjptYWtl
UHJpdmF0ZUNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6Om1ha2VTaGFyYWJs
ZUNvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmFkZEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6cmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnREYXRhOjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50RGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKToKKyAgICAg
ICAgKiBkb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAg
ICAgICAoRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmlzUHJp
dmF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6RWxlbWVudERhdGEpOgorICAg
ICAgICAoU2hhcmFibGVFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlRWxl
bWVudERhdGE6OlByaXZhdGVFbGVtZW50RGF0YSk6CisgICAgICAgIChQcml2YXRlRWxlbWVudERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmF0dHJpYnV0ZVZlY3Rvcik6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6aW1tdXRhYmxlQXR0cmlidXRlQXJyYXkpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnREYXRhOjpwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW0pOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleCk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6YXR0cmlidXRlSXRlbSk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50RGF0YTo6ZGVyZWYpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKToKKyAgICAgICAgKiBk
b20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojp1
cGRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojpl
bnN1cmVNdXRhYmxlSW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojpp
bmxpbmVTdHlsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50
OjpzZXRJbmxpbmVTdHlsZUZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxl
bWVudDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVs
ZW1lbnQ6OmlubGluZVN0eWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVt
ZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6cmVidWlsZFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAg
KiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6
aW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6aW52YWxpZGF0
ZVN0eWxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBodG1sL0NsYXNzTGlzdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpDbGFzc0xpc3Q6OmNsYXNzTmFtZXMpOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxD
b25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudCk6Cisg
ICAgICAgICogc3ZnL1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVu
dDo6dXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50
Lmg6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGVtZW50OjppbnZhbGlkYXRlU1ZHQXR0cmlidXRl
cyk6CisKIDIwMTMtMDItMTAgIFRpbSBIb3J0b24gIDx0aW1vdGh5X2hvcnRvbkBhcHBsZS5jb20+
CiAKICAgICAgICAgUkVHUkVTU0lPTiAocjEzMjQyMik6IFBhZ2UgY29udGVudCBhbmQgc2Nyb2xs
YmFycyBhcmUgaW5jb3JyZWN0bHkgb2Zmc2V0IGFmdGVyIHJlc3RvcmluZyBhIHBhZ2UgZnJvbSB0
aGUgcGFnZSBjYWNoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCmluZGV4IDE4Mjkw
ZjMuLjkxODRiZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKQEAgLTkyNCw3
ICs5MjQsNyBAQCBib29sIFN0eWxlUmVzb2x2ZXI6OmNhblNoYXJlU3R5bGVXaXRoQ29udHJvbChT
dHlsZWRFbGVtZW50KiBlbGVtZW50KSBjb25zdAogICAgIGlmICghdGhpc0lucHV0RWxlbWVudCB8
fCAhb3RoZXJJbnB1dEVsZW1lbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGlmICh0
aGlzSW5wdXRFbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmF0
dHJpYnV0ZURhdGEoKSkgeworICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5lbGVtZW50RGF0YSgp
ICE9IG90aGVySW5wdXRFbGVtZW50LT5lbGVtZW50RGF0YSgpKSB7CiAgICAgICAgIGlmICh0aGlz
SW5wdXRFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKSAhPSBvdGhlcklucHV0RWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZSh0eXBlQXR0cikpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIGlmICh0aGlzSW5wdXRFbGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRv
bmx5QXR0cikgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlB
dHRyKSkKQEAgLTk3NCw3ICs5NzQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZWxlbWVudEhhc0Rp
cmVjdGlvbkF1dG8oRWxlbWVudCogZWxlbWVudCkKIGJvb2wgU3R5bGVSZXNvbHZlcjo6c2hhcmlu
Z0NhbmRpZGF0ZUhhc0lkZW50aWNhbFN0eWxlQWZmZWN0aW5nQXR0cmlidXRlcyhTdHlsZWRFbGVt
ZW50KiBzaGFyaW5nQ2FuZGlkYXRlKSBjb25zdAogewogICAgIGNvbnN0IFN0YXRlJiBzdGF0ZSA9
IG1fc3RhdGU7Ci0gICAgaWYgKHN0YXRlLmVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSA9PSBzaGFy
aW5nQ2FuZGlkYXRlLT5hdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmVs
ZW1lbnREYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+ZWxlbWVudERhdGEoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgaWYgKHN0YXRlLmVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUoWE1M
TmFtZXM6OmxhbmdBdHRyKSAhPSBzaGFyaW5nQ2FuZGlkYXRlLT5mYXN0R2V0QXR0cmlidXRlKFhN
TE5hbWVzOjpsYW5nQXR0cikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcApp
bmRleCAwY2MxYjMzLi5iMTMwMWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCkBAIC0yMTAsNyArMjEwLDcg
QEAgY29uc3QgQXRvbWljU3RyaW5nJiBBdHRyOjp2YWx1ZSgpIGNvbnN0CiBBdHRyaWJ1dGUmIEF0
dHI6OmVsZW1lbnRBdHRyaWJ1dGUoKQogewogICAgIEFTU0VSVChtX2VsZW1lbnQpOwotICAgIEFT
U0VSVChtX2VsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSk7CisgICAgQVNTRVJUKG1fZWxlbWVudC0+
ZWxlbWVudERhdGEoKSk7CiAgICAgcmV0dXJuICptX2VsZW1lbnQtPmdldEF0dHJpYnV0ZUl0ZW0o
cXVhbGlmaWVkTmFtZSgpKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Rv
Y3VtZW50U2hhcmVkT2JqZWN0UG9vbC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRT
aGFyZWRPYmplY3RQb29sLmNwcAppbmRleCBiODVlZmY4Li5jNjQ5NDA2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcApAQCAtMzIsMTQgKzMy
LDE0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGFDYWNoZUtleSB7CitjbGFzcyBTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkg
ewogcHVibGljOgotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoY29u
c3QgQXR0cmlidXRlKiBhdHRyaWJ1dGVzLCB1bnNpZ25lZCBhdHRyaWJ1dGVDb3VudCkKKyAgICBT
aGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGVzLCB1
bnNpZ25lZCBhdHRyaWJ1dGVDb3VudCkKICAgICAgICAgOiBtX2F0dHJpYnV0ZXMoYXR0cmlidXRl
cykKICAgICAgICAgLCBtX2F0dHJpYnV0ZUNvdW50KGF0dHJpYnV0ZUNvdW50KQogICAgIHsgfQog
Ci0gICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
Q2FjaGVLZXkmIG90aGVyKSBjb25zdAorICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBTaGFyYWJs
ZUVsZW1lbnREYXRhQ2FjaGVLZXkmIG90aGVyKSBjb25zdAogICAgIHsKICAgICAgICAgaWYgKG1f
YXR0cmlidXRlQ291bnQgIT0gb3RoZXIubV9hdHRyaWJ1dGVDb3VudCkKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwpAQCAtNTYsNDAgKzU2LDQwIEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgbV9h
dHRyaWJ1dGVDb3VudDsKIH07CiAKLWNsYXNzIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
Q2FjaGVFbnRyeSB7CitjbGFzcyBTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSB7CiBwdWJs
aWM6Ci0gICAgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFDYWNoZUVudHJ5KGNvbnN0IElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkmIGssIFBhc3NSZWZQdHI8RWxlbWVu
dEF0dHJpYnV0ZURhdGE+IHYpCisgICAgU2hhcmFibGVFbGVtZW50RGF0YUNhY2hlRW50cnkoY29u
c3QgU2hhcmFibGVFbGVtZW50RGF0YUNhY2hlS2V5JiBrLCBQYXNzUmVmUHRyPEVsZW1lbnREYXRh
PiB2KQogICAgICAgICA6IGtleShrKQogICAgICAgICAsIHZhbHVlKHYpCiAgICAgeyB9CiAKLSAg
ICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5IGtleTsKLSAgICBSZWZQdHI8
RWxlbWVudEF0dHJpYnV0ZURhdGE+IHZhbHVlOworICAgIFNoYXJhYmxlRWxlbWVudERhdGFDYWNo
ZUtleSBrZXk7CisgICAgUmVmUHRyPEVsZW1lbnREYXRhPiB2YWx1ZTsKIH07CiAKLVBhc3NSZWZQ
dHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbDo6Y2FjaGVk
SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0
dHJpYnV0ZXMpCitQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBEb2N1bWVudFNoYXJlZE9iamVjdFBv
b2w6OmNhY2hlZFNoYXJhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlcyhjb25zdCBWZWN0b3I8
QXR0cmlidXRlPiYgYXR0cmlidXRlcykKIHsKICAgICBBU1NFUlQoIWF0dHJpYnV0ZXMuaXNFbXB0
eSgpKTsKIAotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkgY2FjaGVL
ZXkoYXR0cmlidXRlcy5kYXRhKCksIGF0dHJpYnV0ZXMuc2l6ZSgpKTsKKyAgICBTaGFyYWJsZUVs
ZW1lbnREYXRhQ2FjaGVLZXkgY2FjaGVLZXkoYXR0cmlidXRlcy5kYXRhKCksIGF0dHJpYnV0ZXMu
c2l6ZSgpKTsKICAgICB1bnNpZ25lZCBjYWNoZUhhc2ggPSBjYWNoZUtleS5oYXNoKCk7CiAKLSAg
ICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlOjppdGVyYXRvciBjYWNoZUl0ZXJh
dG9yID0gbV9pbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlLmFkZChjYWNoZUhhc2gs
IG51bGxwdHIpLml0ZXJhdG9yOworICAgIFNoYXJhYmxlRWxlbWVudERhdGFDYWNoZTo6aXRlcmF0
b3IgY2FjaGVJdGVyYXRvciA9IG1fc2hhcmFibGVFbGVtZW50RGF0YUNhY2hlLmFkZChjYWNoZUhh
c2gsIG51bGxwdHIpLml0ZXJhdG9yOwogICAgIGlmIChjYWNoZUl0ZXJhdG9yLT52YWx1ZSAmJiBj
YWNoZUl0ZXJhdG9yLT52YWx1ZS0+a2V5ICE9IGNhY2hlS2V5KQogICAgICAgICBjYWNoZUhhc2gg
PSAwOwogCi0gICAgUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBhdHRyaWJ1dGVEYXRhOwor
ICAgIFJlZlB0cjxFbGVtZW50RGF0YT4gZWxlbWVudERhdGE7CiAgICAgaWYgKGNhY2hlSGFzaCAm
JiBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkKLSAgICAgICAgYXR0cmlidXRlRGF0YSA9IGNhY2hlSXRl
cmF0b3ItPnZhbHVlLT52YWx1ZTsKKyAgICAgICAgZWxlbWVudERhdGEgPSBjYWNoZUl0ZXJhdG9y
LT52YWx1ZS0+dmFsdWU7CiAgICAgZWxzZQotICAgICAgICBhdHRyaWJ1dGVEYXRhID0gRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUltbXV0YWJsZShhdHRyaWJ1dGVzKTsKKyAgICAgICAgZWxl
bWVudERhdGEgPSBFbGVtZW50RGF0YTo6Y3JlYXRlU2hhcmFibGVXaXRoQXR0cmlidXRlcyhhdHRy
aWJ1dGVzKTsKIAogICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnZhbHVlKQot
ICAgICAgICByZXR1cm4gYXR0cmlidXRlRGF0YS5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBl
bGVtZW50RGF0YS5yZWxlYXNlKCk7CiAKLSAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0
UHRyKG5ldyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlRW50cnkoSW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGFDYWNoZUtleShhdHRyaWJ1dGVEYXRhLT5pbW11dGFibGVBdHRy
aWJ1dGVBcnJheSgpLCBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKSksIGF0dHJpYnV0ZURhdGEpKTsK
KyAgICBjYWNoZUl0ZXJhdG9yLT52YWx1ZSA9IGFkb3B0UHRyKG5ldyBTaGFyYWJsZUVsZW1lbnRE
YXRhQ2FjaGVFbnRyeShTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkoZWxlbWVudERhdGEtPmlt
bXV0YWJsZUF0dHJpYnV0ZUFycmF5KCksIGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVDb3VudCgpKSwg
ZWxlbWVudERhdGEpKTsKIAotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLnJlbGVhc2UoKTsKKyAg
ICByZXR1cm4gZWxlbWVudERhdGEucmVsZWFzZSgpOwogfQogCiBEb2N1bWVudFNoYXJlZE9iamVj
dFBvb2w6OkRvY3VtZW50U2hhcmVkT2JqZWN0UG9vbCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmgKaW5kZXggNTQwYzkxMy4uY2U0NTM1MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuaApAQCAtMzQsMjEg
KzM0LDIxIEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEF0dHJpYnV0ZTsKLWNsYXNz
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOwotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGFDYWNoZUVudHJ5OworY2xhc3MgRWxlbWVudERhdGE7CitjbGFzcyBTaGFyYWJsZUVsZW1lbnRE
YXRhQ2FjaGVFbnRyeTsKIAogY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sIHsKIHB1Ymxp
YzoKICAgICBzdGF0aWMgUGFzc093blB0cjxEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wpOyB9CiAg
ICAgfkRvY3VtZW50U2hhcmVkT2JqZWN0UG9vbCgpOwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50
QXR0cmlidXRlRGF0YT4gY2FjaGVkSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3Qg
VmVjdG9yPEF0dHJpYnV0ZT4mKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBjYWNoZWRT
aGFyYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
KTsKIAogcHJpdmF0ZToKICAgICBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2woKTsKIAotICAgIHR5
cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgT3duUHRyPEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhQ2FjaGU7Ci0gICAgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFDYWNoZSBtX2ltbXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGU7CisgICAgdHlwZWRlZiBIYXNoTWFwPHVuc2ln
bmVkLCBPd25QdHI8U2hhcmFibGVFbGVtZW50RGF0YUNhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVk
PiBTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGU7CisgICAgU2hhcmFibGVFbGVtZW50RGF0YUNhY2hl
IG1fc2hhcmFibGVFbGVtZW50RGF0YUNhY2hlOwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3Bw
CmluZGV4IGEyZGY2ZTYuLjFhMDA2NmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTI3NSw5
ICsyNzUsOSBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEVsZW1lbnQ6OmNsb25lRWxlbWVudFdpdGhv
dXRBdHRyaWJ1dGVzQW5kQ2hpbGRyZW4oKQogCiBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmRl
dGFjaEF0dHJpYnV0ZShzaXplX3QgaW5kZXgpCiB7Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEo
KSk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOwogCi0gICAgY29uc3QgQXR0cmlidXRlKiBh
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOworICAgIGNv
bnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZWxlbWVudERhdGEoKS0+YXR0cmlidXRlSXRlbShp
bmRleCk7CiAgICAgQVNTRVJUKGF0dHJpYnV0ZSk7CiAKICAgICBSZWZQdHI8QXR0cj4gYXR0ck5v
ZGUgPSBhdHRySWZFeGlzdHMoYXR0cmlidXRlLT5uYW1lKCkpOwpAQCAtMjkyLDEwICsyOTIsMTAg
QEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpkZXRhY2hBdHRyaWJ1dGUoc2l6ZV90IGluZGV4
KQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lKQogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEo
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0YSgp
LT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7CisgICAgc2l6ZV90IGluZGV4ID0gZWxlbWVu
dERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOwogICAgIGlmIChpbmRleCA9PSBu
b3RGb3VuZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC0zMTIsNyArMzEyLDcgQEAgdm9pZCBFbGVt
ZW50OjpzZXRCb29sZWFuQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGJvb2wg
dmFsdWUpCiAKIE5hbWVkTm9kZU1hcCogRWxlbWVudDo6YXR0cmlidXRlcygpIGNvbnN0CiB7Ci0g
ICAgZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKKyAgICBlbnN1cmVVcGRhdGVkRWxlbWVu
dERhdGEoKTsKICAgICBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRhID0gY29uc3RfY2FzdDxFbGVt
ZW50Kj4odGhpcyktPmVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpOwogICAgIGlmIChOYW1lZE5vZGVN
YXAqIGF0dHJpYnV0ZU1hcCA9IHJhcmVEYXRhLT5hdHRyaWJ1dGVNYXAoKSkKICAgICAgICAgcmV0
dXJuIGF0dHJpYnV0ZU1hcDsKQEAgLTMzMywxNCArMzMzLDE0IEBAIGJvb2wgRWxlbWVudDo6aGFz
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiAKIGNvbnN0IEF0b21p
Y1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
IGNvbnN0CiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0
YSgpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207CiAKLSAgICBpZiAoVU5MSUtFTFkobmFtZSA9
PSBzdHlsZUF0dHIgJiYgYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSkp
CisgICAgaWYgKFVOTElLRUxZKG5hbWUgPT0gc3R5bGVBdHRyICYmIGVsZW1lbnREYXRhKCktPm1f
c3R5bGVBdHRyaWJ1dGVJc0RpcnR5KSkKICAgICAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKTsK
IAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKFVOTElLRUxZKGF0dHJpYnV0ZURhdGEoKS0+bV9h
bmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkpCisgICAgaWYgKFVOTElLRUxZKGVsZW1lbnRE
YXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkpKQogICAgICAgICB1cGRhdGVB
bmltYXRlZFNWR0F0dHJpYnV0ZShuYW1lKTsKICNlbmRpZgogCkBAIC03MDUsMjMgKzcwNSwyMyBA
QCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZShjb25zdCBFbGVt
ZW50KiBlKQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkp
CisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207CiAKICAg
ICBib29sIGlnbm9yZUNhc2UgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpOwogCiAg
ICAgLy8gVXBkYXRlIHRoZSAnc3R5bGUnIGF0dHJpYnV0ZSBpZiBpdCdzIGludmFsaWQgYW5kIGJl
aW5nIHJlcXVlc3RlZDoKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRl
SXNEaXJ0eSAmJiBlcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNlKG5hbWUsIHN0eWxlQXR0ci5sb2Nh
bE5hbWUoKSwgaWdub3JlQ2FzZSkpCisgICAgaWYgKGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRy
aWJ1dGVJc0RpcnR5ICYmIGVxdWFsUG9zc2libHlJZ25vcmluZ0Nhc2UobmFtZSwgc3R5bGVBdHRy
LmxvY2FsTmFtZSgpLCBpZ25vcmVDYXNlKSkKICAgICAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUo
KTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRl
ZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkgeworICAgIGlmIChlbGVtZW50RGF0YSgpLT5tX2FuaW1h
dGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KSB7CiAgICAgICAgIC8vIFdlJ3JlIG5vdCBwYXNzaW5n
IGEgbmFtZXNwYWNlIGFyZ3VtZW50IG9uIHB1cnBvc2UuIFNWR05hbWVzOjoqQXR0ciBhcmUgZGVm
aW5lZCB3L28gbmFtZXNwYWNlcyBhcyB3ZWxsLgogICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0
dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBuYW1lLCBudWxsQXRvbSkpOwogICAgIH0K
ICNlbmRpZgogCi0gICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRl
RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIGlnbm9yZUNhc2UpKQorICAgIGlmIChjb25z
dCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnREYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0o
bmFtZSwgaWdub3JlQ2FzZSkpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAg
ICAgcmV0dXJuIG51bGxBdG9tOwogfQpAQCAtNzQwLDE5ICs3NDAsMTkgQEAgdm9pZCBFbGVtZW50
OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
bmcmIHZhbHVlLAogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUgPSBzaG91bGRJ
Z25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFtZTsKIAotICAgIHNp
emVfdCBpbmRleCA9IGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0
ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKKyAgICBzaXplX3QgaW5kZXggPSBlbnN1cmVVcGRh
dGVkRWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwgZmFsc2Up
OwogICAgIGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lID0gaW5kZXggIT0gbm90Rm91bmQgPyBh
dHRyaWJ1dGVJdGVtKGluZGV4KS0+bmFtZSgpIDogUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9j
YWxOYW1lLCBudWxsQXRvbSk7CiAgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIHFOYW1l
LCB2YWx1ZSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogfQogCiB2b2lk
IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBB
dG9taWNTdHJpbmcmIHZhbHVlKQogewotICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGVuc3VyZVVw
ZGF0ZWRBdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKSwgbmFtZSwg
dmFsdWUsIE5vdEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKKyAgICBzZXRBdHRy
aWJ1dGVJbnRlcm5hbChlbnN1cmVVcGRhdGVkRWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRl
bUluZGV4KG5hbWUpLCBuYW1lLCB2YWx1ZSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRy
aWJ1dGUpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnNldFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChtdXRhYmxlQXR0cmlidXRlRGF0YSgpLT5nZXRBdHRy
aWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBJblN5bmNocm9uaXphdGlvbk9mTGF6
eUF0dHJpYnV0ZSk7CisgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZW5zdXJlUHJpdmF0ZUVsZW1l
bnREYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKSwgbmFtZSwgdmFsdWUsIEluU3lu
Y2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKIH0KIAogaW5saW5lIHZvaWQgRWxlbWVudDo6
c2V0QXR0cmlidXRlSW50ZXJuYWwoc2l6ZV90IGluZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld1ZhbHVlLCBTeW5jaHJvbml6YXRpb25PZkxhenlB
dHRyaWJ1dGUgaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC03NzMsMTIgKzc3
MywxMiBAQCBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3Qg
aW5kZXgsIGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbQogCiAgICAgaWYgKG5ld1ZhbHVlICE9IGF0
dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpKSB7CiAgICAgICAgIC8vIElmIHRoZXJlIGlzIGFu
IEF0dHIgbm9kZSBob29rZWQgdG8gdGhpcyBhdHRyaWJ1dGUsIHRoZSBBdHRyOjpzZXRWYWx1ZSgp
IGNhbGwgYmVsb3cKLSAgICAgICAgLy8gd2lsbCB3cml0ZSBpbnRvIHRoZSBFbGVtZW50QXR0cmli
dXRlRGF0YS4KKyAgICAgICAgLy8gd2lsbCB3cml0ZSBpbnRvIHRoZSBFbGVtZW50RGF0YS4KICAg
ICAgICAgLy8gRklYTUU6IFJlZmFjdG9yIHRoaXMgc28gaXQgbWFrZXMgc29tZSBzZW5zZS4KICAg
ICAgICAgaWYgKFJlZlB0cjxBdHRyPiBhdHRyTm9kZSA9IGluU3luY2hyb25pemF0aW9uT2ZMYXp5
QXR0cmlidXRlID8gMCA6IGF0dHJJZkV4aXN0cyhuYW1lKSkKICAgICAgICAgICAgIGF0dHJOb2Rl
LT5zZXRWYWx1ZShuZXdWYWx1ZSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG11dGFibGVB
dHRyaWJ1dGVEYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT5zZXRWYWx1ZShuZXdWYWx1ZSk7
CisgICAgICAgICAgICBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKS0+YXR0cmlidXRlSXRlbShp
bmRleCktPnNldFZhbHVlKG5ld1ZhbHVlKTsKICAgICB9CiAKICAgICBpZiAoIWluU3luY2hyb25p
emF0aW9uT2ZMYXp5QXR0cmlidXRlKQpAQCAtODE4LDEwICs4MTgsMTAgQEAgdm9pZCBFbGVtZW50
OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21p
Y1N0cmluZyYgbmUKICAgICBib29sIHNob3VsZEludmFsaWRhdGVTdHlsZSA9IGZhbHNlOwogCiAg
ICAgaWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG5hbWUpKSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyBv
bGRJZCA9IGF0dHJpYnV0ZURhdGEoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKTsKKyAgICAgICAg
QXRvbWljU3RyaW5nIG9sZElkID0gZWxlbWVudERhdGEoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24o
KTsKICAgICAgICAgQXRvbWljU3RyaW5nIG5ld0lkID0gbWFrZUlkRm9yU3R5bGVSZXNvbHV0aW9u
KG5ld1ZhbHVlLCBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CiAgICAgICAgIGlmIChuZXdJ
ZCAhPSBvbGRJZCkgewotICAgICAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5zZXRJZEZvclN0eWxl
UmVzb2x1dGlvbihuZXdJZCk7CisgICAgICAgICAgICBlbGVtZW50RGF0YSgpLT5zZXRJZEZvclN0
eWxlUmVzb2x1dGlvbihuZXdJZCk7CiAgICAgICAgICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUg
PSB0ZXN0U2hvdWxkSW52YWxpZGF0ZVN0eWxlICYmIGNoZWNrTmVlZHNTdHlsZUludmFsaWRhdGlv
bkZvcklkQ2hhbmdlKG9sZElkLCBuZXdJZCwgc3R5bGVSZXNvbHZlcik7CiAgICAgICAgIH0KICAg
ICB9IGVsc2UgaWYgKG5hbWUgPT0gY2xhc3NBdHRyKQpAQCAtOTIwLDE5ICs5MjAsMTYgQEAgdm9p
ZCBFbGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuZXdD
bGFzc1N0cmluZykKICAgICBib29sIHNob3VsZEludmFsaWRhdGVTdHlsZSA9IGZhbHNlOwogCiAg
ICAgaWYgKGNsYXNzU3RyaW5nSGFzQ2xhc3NOYW1lKG5ld0NsYXNzU3RyaW5nKSkgewotICAgICAg
ICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVuc3VyZUF0dHJp
YnV0ZURhdGEoKTsKKyAgICAgICAgY29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZW5z
dXJlRWxlbWVudERhdGEoKTsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRGb2xkQ2FzZSA9IGRv
Y3VtZW50KCktPmluUXVpcmtzTW9kZSgpOwotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5n
IG9sZENsYXNzZXMgPSBhdHRyaWJ1dGVEYXRhLT5jbGFzc05hbWVzKCk7Ci0KLSAgICAgICAgYXR0
cmlidXRlRGF0YS0+c2V0Q2xhc3MobmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNlKTsKLQot
ICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzID0gYXR0cmlidXRlRGF0
YS0+Y2xhc3NOYW1lcygpOworICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nIG9sZENsYXNz
ZXMgPSBlbGVtZW50RGF0YS0+Y2xhc3NOYW1lcygpOworICAgICAgICBlbGVtZW50RGF0YS0+c2V0
Q2xhc3MobmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNlKTsKKyAgICAgICAgY29uc3QgU3Bh
Y2VTcGxpdFN0cmluZyYgbmV3Q2xhc3NlcyA9IGVsZW1lbnREYXRhLT5jbGFzc05hbWVzKCk7CiAg
ICAgICAgIHNob3VsZEludmFsaWRhdGVTdHlsZSA9IHRlc3RTaG91bGRJbnZhbGlkYXRlU3R5bGUg
JiYgY2hlY2tTZWxlY3RvckZvckNsYXNzQ2hhbmdlKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMsICpz
dHlsZVJlc29sdmVyKTsKLSAgICB9IGVsc2UgaWYgKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBhdHRyaWJ1dGVEYXRhID0gdGhpcy0+YXR0cmlidXRlRGF0YSgpKSB7Ci0gICAgICAgIGNvbnN0
IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMgPSBhdHRyaWJ1dGVEYXRhLT5jbGFzc05hbWVz
KCk7CisgICAgfSBlbHNlIGlmIChjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSB0aGlz
LT5lbGVtZW50RGF0YSgpKSB7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENs
YXNzZXMgPSBlbGVtZW50RGF0YS0+Y2xhc3NOYW1lcygpOwogICAgICAgICBzaG91bGRJbnZhbGlk
YXRlU3R5bGUgPSB0ZXN0U2hvdWxkSW52YWxpZGF0ZVN0eWxlICYmIGNoZWNrU2VsZWN0b3JGb3JD
bGFzc0NoYW5nZShvbGRDbGFzc2VzLCAqc3R5bGVSZXNvbHZlcik7Ci0KLSAgICAgICAgYXR0cmli
dXRlRGF0YS0+Y2xlYXJDbGFzcygpOworICAgICAgICBlbGVtZW50RGF0YS0+Y2xlYXJDbGFzcygp
OwogICAgIH0KIAogICAgIGlmIChoYXNSYXJlRGF0YSgpKQpAQCAtOTQ4LDcgKzk0NSw3IEBAIGJv
b2wgRWxlbWVudDo6c2hvdWxkSW52YWxpZGF0ZURpc3RyaWJ1dGlvbldoZW5BdHRyaWJ1dGVDaGFu
Z2VkKEVsZW1lbnRTaGFkb3cqIGVsCiAgICAgY29uc3QgU2VsZWN0UnVsZUZlYXR1cmVTZXQmIGZl
YXR1cmVTZXQgPSBlbGVtZW50U2hhZG93LT5kaXN0cmlidXRvcigpLmVuc3VyZVNlbGVjdEZlYXR1
cmVTZXQoZWxlbWVudFNoYWRvdyk7CiAKICAgICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkp
IHsKLSAgICAgICAgQXRvbWljU3RyaW5nIG9sZElkID0gYXR0cmlidXRlRGF0YSgpLT5pZEZvclN0
eWxlUmVzb2x1dGlvbigpOworICAgICAgICBBdG9taWNTdHJpbmcgb2xkSWQgPSBlbGVtZW50RGF0
YSgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOwogICAgICAgICBBdG9taWNTdHJpbmcgbmV3SWQg
PSBtYWtlSWRGb3JTdHlsZVJlc29sdXRpb24obmV3VmFsdWUsIGRvY3VtZW50KCktPmluUXVpcmtz
TW9kZSgpKTsKICAgICAgICAgaWYgKG5ld0lkICE9IG9sZElkKSB7CiAgICAgICAgICAgICBpZiAo
IW9sZElkLmlzRW1wdHkoKSAmJiBmZWF0dXJlU2V0Lmhhc1NlbGVjdG9yRm9ySWQob2xkSWQpKQpA
QCAtOTYxLDE0ICs5NTgsMTQgQEAgYm9vbCBFbGVtZW50OjpzaG91bGRJbnZhbGlkYXRlRGlzdHJp
YnV0aW9uV2hlbkF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudFNoYWRvdyogZWwKICAgICBpZiAobmFt
ZSA9PSBIVE1MTmFtZXM6OmNsYXNzQXR0cikgewogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0NsYXNzU3RyaW5nID0gbmV3VmFsdWU7CiAgICAgICAgIGlmIChjbGFzc1N0cmluZ0hhc0Ns
YXNzTmFtZShuZXdDbGFzc1N0cmluZykpIHsKLSAgICAgICAgICAgIGNvbnN0IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gZW5zdXJlQXR0cmlidXRlRGF0YSgpOworICAgICAg
ICAgICAgY29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZW5zdXJlRWxlbWVudERhdGEo
KTsKICAgICAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxkRm9sZENhc2UgPSBkb2N1bWVudCgpLT5p
blF1aXJrc01vZGUoKTsKLSAgICAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENs
YXNzZXMgPSBhdHRyaWJ1dGVEYXRhLT5jbGFzc05hbWVzKCk7CisgICAgICAgICAgICBjb25zdCBT
cGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEtPmNsYXNzTmFtZXMoKTsK
ICAgICAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcgbmV3Q2xhc3NlcyhuZXdDbGFzc1N0
cmluZywgc2hvdWxkRm9sZENhc2UpOwogICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3JGb3JD
bGFzc0NoYW5nZShvbGRDbGFzc2VzLCBuZXdDbGFzc2VzLCBmZWF0dXJlU2V0KSkKICAgICAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfSBlbHNlIGlmIChjb25zdCBFbGVtZW50QXR0
cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHRoaXMtPmF0dHJpYnV0ZURhdGEoKSkgewotICAg
ICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcyA9IGF0dHJpYnV0ZURh
dGEtPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgfSBlbHNlIGlmIChjb25zdCBFbGVtZW50RGF0YSog
ZWxlbWVudERhdGEgPSB0aGlzLT5lbGVtZW50RGF0YSgpKSB7CisgICAgICAgICAgICBjb25zdCBT
cGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEtPmNsYXNzTmFtZXMoKTsK
ICAgICAgICAgICAgIGlmIChjaGVja1NlbGVjdG9yRm9yQ2xhc3NDaGFuZ2Uob2xkQ2xhc3Nlcywg
ZmVhdHVyZVNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAg
LTk5OSw3ICs5OTYsNyBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMoY29uc3Qg
VmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZVZlY3RvciwgRnJhZwogICAgIEFTU0VSVCghaW5E
b2N1bWVudCgpKTsKICAgICBBU1NFUlQoIXBhcmVudE5vZGUoKSk7CiAKLSAgICBBU1NFUlQoIW1f
YXR0cmlidXRlRGF0YSk7CisgICAgQVNTRVJUKCFtX2VsZW1lbnREYXRhKTsKIAogICAgIGlmIChh
dHRyaWJ1dGVWZWN0b3IuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDI0LDEyICsx
MDIxLDEyIEBAIHZvaWQgRWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlcyhjb25zdCBWZWN0b3I8
QXR0cmlidXRlPiYgYXR0cmlidXRlVmVjdG9yLCBGcmFnCiAgICAgfQogCiAgICAgaWYgKGRvY3Vt
ZW50KCkgJiYgZG9jdW1lbnQoKS0+c2hhcmVkT2JqZWN0UG9vbCgpKQotICAgICAgICBtX2F0dHJp
YnV0ZURhdGEgPSBkb2N1bWVudCgpLT5zaGFyZWRPYmplY3RQb29sKCktPmNhY2hlZEltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGZpbHRlcmVkQXR0cmlidXRlcyk7CisgICAgICAgIG1fZWxl
bWVudERhdGEgPSBkb2N1bWVudCgpLT5zaGFyZWRPYmplY3RQb29sKCktPmNhY2hlZFNoYXJhYmxl
RWxlbWVudERhdGFXaXRoQXR0cmlidXRlcyhmaWx0ZXJlZEF0dHJpYnV0ZXMpOwogICAgIGVsc2UK
LSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUlt
bXV0YWJsZShmaWx0ZXJlZEF0dHJpYnV0ZXMpOworICAgICAgICBtX2VsZW1lbnREYXRhID0gRWxl
bWVudERhdGE6OmNyZWF0ZVNoYXJhYmxlV2l0aEF0dHJpYnV0ZXMoZmlsdGVyZWRBdHRyaWJ1dGVz
KTsKIAogICAgIC8vIEl0ZXJhdGUgb3ZlciB0aGUgc2V0IG9mIGF0dHJpYnV0ZXMgd2UgYWxyZWFk
eSBoYXZlIG9uIHRoZSBzdGFjayBpbiBjYXNlCi0gICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRh
dGVzIG1fYXR0cmlidXRlRGF0YS4KKyAgICAvLyBhdHRyaWJ1dGVDaGFuZ2VkIG11dGF0ZXMgbV9l
bGVtZW50RGF0YS4KICAgICAvLyBGSVhNRTogRmluZCBhIHdheSBzbyB3ZSBkb24ndCBoYXZlIHRv
IGRvIHRoaXMuCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGZpbHRlcmVkQXR0cmlidXRl
cy5zaXplKCk7ICsraSkKICAgICAgICAgYXR0cmlidXRlQ2hhbmdlZChmaWx0ZXJlZEF0dHJpYnV0
ZXNbaV0ubmFtZSgpLCBmaWx0ZXJlZEF0dHJpYnV0ZXNbaV0udmFsdWUoKSk7CkBAIC0xMDM4LDE5
ICsxMDM1LDE5IEBAIHZvaWQgRWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlcyhjb25zdCBWZWN0
b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlVmVjdG9yLCBGcmFnCiBib29sIEVsZW1lbnQ6Omhhc0F0
dHJpYnV0ZXMoKSBjb25zdAogewogICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Ci0gICAg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiBhdHRyaWJ1dGVEYXRhKCktPmxlbmd0aCgpOworICAg
IHJldHVybiBlbGVtZW50RGF0YSgpICYmIGVsZW1lbnREYXRhKCktPmF0dHJpYnV0ZUNvdW50KCk7
CiB9CiAKIGJvb2wgRWxlbWVudDo6aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVu
dCogb3RoZXIpIGNvbnN0CiB7Ci0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJp
YnV0ZURhdGEgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwotICAgIGNvbnN0IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBvdGhlckF0dHJpYnV0ZURhdGEgPSBvdGhlci0+dXBkYXRlZEF0dHJpYnV0ZURh
dGEoKTsKLSAgICBpZiAoYXR0cmlidXRlRGF0YSA9PSBvdGhlckF0dHJpYnV0ZURhdGEpCisgICAg
Y29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gdXBkYXRlZEVsZW1lbnREYXRhKCk7Cisg
ICAgY29uc3QgRWxlbWVudERhdGEqIG90aGVyRWxlbWVudERhdGEgPSBvdGhlci0+dXBkYXRlZEVs
ZW1lbnREYXRhKCk7CisgICAgaWYgKGVsZW1lbnREYXRhID09IG90aGVyRWxlbWVudERhdGEpCiAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChhdHRyaWJ1dGVEYXRhKQotICAgICAgICByZXR1
cm4gYXR0cmlidXRlRGF0YS0+aXNFcXVpdmFsZW50KG90aGVyQXR0cmlidXRlRGF0YSk7Ci0gICAg
aWYgKG90aGVyQXR0cmlidXRlRGF0YSkKLSAgICAgICAgcmV0dXJuIG90aGVyQXR0cmlidXRlRGF0
YS0+aXNFcXVpdmFsZW50KGF0dHJpYnV0ZURhdGEpOworICAgIGlmIChlbGVtZW50RGF0YSkKKyAg
ICAgICAgcmV0dXJuIGVsZW1lbnREYXRhLT5oYXNFcXVpdmFsZW50QXR0cmlidXRlcyhvdGhlckVs
ZW1lbnREYXRhKTsKKyAgICBpZiAob3RoZXJFbGVtZW50RGF0YSkKKyAgICAgICAgcmV0dXJuIG90
aGVyRWxlbWVudERhdGEtPmhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKGVsZW1lbnREYXRhKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY5MSwxNCArMTY4OCwxNCBAQCBQYXNzUmVmUHRyPEF0
dHI+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoQXR0ciogYXR0ck5vZGUsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogICAgIH0KIAogICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Ci0gICAgRWxl
bWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtdXRhYmxlQXR0cmlidXRlRGF0YSgp
OworICAgIFByaXZhdGVFbGVtZW50RGF0YSogcHJpdmF0ZURhdGEgPSBlbnN1cmVQcml2YXRlRWxl
bWVudERhdGEoKTsKIAotICAgIHNpemVfdCBpbmRleCA9IGF0dHJpYnV0ZURhdGEtPmdldEF0dHJp
YnV0ZUl0ZW1JbmRleChhdHRyTm9kZS0+cXVhbGlmaWVkTmFtZSgpKTsKKyAgICBzaXplX3QgaW5k
ZXggPSBwcml2YXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGF0dHJOb2RlLT5xdWFsaWZp
ZWROYW1lKCkpOwogICAgIGlmIChpbmRleCAhPSBub3RGb3VuZCkgewogICAgICAgICBpZiAob2xk
QXR0ck5vZGUpCi0gICAgICAgICAgICBkZXRhY2hBdHRyTm9kZUZyb21FbGVtZW50V2l0aFZhbHVl
KG9sZEF0dHJOb2RlLmdldCgpLCBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+
dmFsdWUoKSk7CisgICAgICAgICAgICBkZXRhY2hBdHRyTm9kZUZyb21FbGVtZW50V2l0aFZhbHVl
KG9sZEF0dHJOb2RlLmdldCgpLCBwcml2YXRlRGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPnZh
bHVlKCkpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBvbGRBdHRyTm9kZSA9IEF0dHI6OmNy
ZWF0ZShkb2N1bWVudCgpLCBhdHRyTm9kZS0+cXVhbGlmaWVkTmFtZSgpLCBhdHRyaWJ1dGVEYXRh
LT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKSk7CisgICAgICAgICAgICBvbGRBdHRyTm9k
ZSA9IEF0dHI6OmNyZWF0ZShkb2N1bWVudCgpLCBhdHRyTm9kZS0+cXVhbGlmaWVkTmFtZSgpLCBw
cml2YXRlRGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPnZhbHVlKCkpOwogICAgIH0KIAogICAg
IHNldEF0dHJpYnV0ZUludGVybmFsKGluZGV4LCBhdHRyTm9kZS0+cXVhbGlmaWVkTmFtZSgpLCBh
dHRyTm9kZS0+dmFsdWUoKSwgTm90SW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwpA
QCAtMTcyNywxMCArMTcyNCwxMCBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnJlbW92ZUF0
dHJpYnV0ZU5vZGUoQXR0ciogYXR0ciwgRXhjZXB0aW9uQ29kZSYgZWMpCiAKICAgICBBU1NFUlQo
ZG9jdW1lbnQoKSA9PSBhdHRyLT5kb2N1bWVudCgpKTsKIAotICAgIGNvbnN0IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gdXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKLSAgICBB
U1NFUlQoYXR0cmlidXRlRGF0YSk7CisgICAgY29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRh
ID0gdXBkYXRlZEVsZW1lbnREYXRhKCk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKTsKIAotICAg
IHNpemVfdCBpbmRleCA9IGF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChhdHRy
LT5xdWFsaWZpZWROYW1lKCkpOworICAgIHNpemVfdCBpbmRleCA9IGVsZW1lbnREYXRhLT5nZXRB
dHRyaWJ1dGVJdGVtSW5kZXgoYXR0ci0+cXVhbGlmaWVkTmFtZSgpKTsKICAgICBpZiAoaW5kZXgg
PT0gbm90Rm91bmQpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAgICAgICByZXR1
cm4gMDsKQEAgLTE3NjksMTAgKzE3NjYsMTAgQEAgdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1
dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnUKIHsK
ICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGF0dHJpYnV0ZUNv
dW50KCkpOwogCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtdXRh
YmxlQXR0cmlidXRlRGF0YSgpOworICAgIFByaXZhdGVFbGVtZW50RGF0YSogcHJpdmF0ZURhdGEg
PSBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKTsKIAotICAgIFF1YWxpZmllZE5hbWUgbmFtZSA9
IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT5uYW1lKCk7Ci0gICAgQXRvbWlj
U3RyaW5nIHZhbHVlQmVpbmdSZW1vdmVkID0gYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShp
bmRleCktPnZhbHVlKCk7CisgICAgUXVhbGlmaWVkTmFtZSBuYW1lID0gcHJpdmF0ZURhdGEtPmF0
dHJpYnV0ZUl0ZW0oaW5kZXgpLT5uYW1lKCk7CisgICAgQXRvbWljU3RyaW5nIHZhbHVlQmVpbmdS
ZW1vdmVkID0gcHJpdmF0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpOwogCiAg
ICAgaWYgKCFpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkgewogICAgICAgICBpZiAo
IXZhbHVlQmVpbmdSZW1vdmVkLmlzTnVsbCgpKQpAQCAtMTc4MCw5ICsxNzc3LDkgQEAgdm9pZCBF
bGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIFN5bmNocm9uaXph
dGlvbk9mTGF6eUF0dHJpYnUKICAgICB9CiAKICAgICBpZiAoUmVmUHRyPEF0dHI+IGF0dHJOb2Rl
ID0gYXR0cklmRXhpc3RzKG5hbWUpKQotICAgICAgICBkZXRhY2hBdHRyTm9kZUZyb21FbGVtZW50
V2l0aFZhbHVlKGF0dHJOb2RlLmdldCgpLCBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1dGVJdGVtKGlu
ZGV4KS0+dmFsdWUoKSk7CisgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFs
dWUoYXR0ck5vZGUuZ2V0KCksIHByaXZhdGVEYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFs
dWUoKSk7CiAKLSAgICBhdHRyaWJ1dGVEYXRhLT5yZW1vdmVBdHRyaWJ1dGUoaW5kZXgpOworICAg
IHByaXZhdGVEYXRhLT5yZW1vdmVBdHRyaWJ1dGUoaW5kZXgpOwogCiAgICAgaWYgKCFpblN5bmNo
cm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkKICAgICAgICAgZGlkUmVtb3ZlQXR0cmlidXRlKG5h
bWUpOwpAQCAtMTc5MiwyMCArMTc4OSwyMCBAQCB2b2lkIEVsZW1lbnQ6OmFkZEF0dHJpYnV0ZUlu
dGVybmFsKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZwogewog
ICAgIGlmICghaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCiAgICAgICAgIHdpbGxN
b2RpZnlBdHRyaWJ1dGUobmFtZSwgbnVsbEF0b20sIHZhbHVlKTsKLSAgICBtdXRhYmxlQXR0cmli
dXRlRGF0YSgpLT5hZGRBdHRyaWJ1dGUoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7CisgICAgZW5z
dXJlUHJpdmF0ZUVsZW1lbnREYXRhKCktPmFkZEF0dHJpYnV0ZShBdHRyaWJ1dGUobmFtZSwgdmFs
dWUpKTsKICAgICBpZiAoIWluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogICAgICAg
ICBkaWRBZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92
ZUF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFhdHRyaWJ1
dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlz
KSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7Ci0gICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0
YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobG9jYWxOYW1lLCBmYWxzZSk7CisgICAgc2l6ZV90
IGluZGV4ID0gZWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwg
ZmFsc2UpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgewotICAgICAgICBpZiAoVU5MSUtF
TFkobG9jYWxOYW1lID09IHN0eWxlQXR0cikgJiYgYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0
cmlidXRlSXNEaXJ0eSAmJiBpc1N0eWxlZEVsZW1lbnQoKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KGxvY2FsTmFtZSA9PSBzdHlsZUF0dHIpICYmIGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1
dGVJc0RpcnR5ICYmIGlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KHRoaXMpLT5yZW1vdmVBbGxJbmxpbmVTdHlsZVByb3BlcnRpZXMoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4MjAsMTAgKzE4MTcsMTAgQEAgdm9pZCBFbGVt
ZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3QKIAogUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVO
b2RlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICBjb25zdCBFbGVtZW50QXR0cmli
dXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgaWYg
KCFhdHRyaWJ1dGVEYXRhKQorICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IHVw
ZGF0ZWRFbGVtZW50RGF0YSgpOworICAgIGlmICghZWxlbWVudERhdGEpCiAgICAgICAgIHJldHVy
biAwOwotICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+Z2V0
QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpKTsKKyAg
ICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJ
dGVtKG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykpOwogICAgIGlmICghYXR0
cmlidXRlKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1cm4gZW5zdXJlQXR0cihhdHRyaWJ1
dGUtPm5hbWUoKSk7CkBAIC0xODMxLDEwICsxODI4LDEwIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxl
bWVudDo6Z2V0QXR0cmlidXRlTm9kZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAKIFBhc3NS
ZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZU5TKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKIHsKLSAgICBj
b25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHVwZGF0ZWRBdHRyaWJ1
dGVEYXRhKCk7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKQorICAgIGNvbnN0IEVsZW1lbnREYXRh
KiBlbGVtZW50RGF0YSA9IHVwZGF0ZWRFbGVtZW50RGF0YSgpOworICAgIGlmICghZWxlbWVudERh
dGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0g
YXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBs
b2NhbE5hbWUsIG5hbWVzcGFjZVVSSSkpOworICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRl
ID0gZWxlbWVudERhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
bG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKICAgICBpZiAoIWF0dHJpYnV0ZSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgcmV0dXJuIGVuc3VyZUF0dHIoYXR0cmlidXRlLT5uYW1lKCkpOwpAQCAt
MTg0MiwyMSArMTgzOSwyMSBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0
ZU5vZGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgYwogCiBib29sIEVsZW1l
bnQ6Omhhc0F0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAg
aWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICAvLyBUaGlzIGNhbGwgdG8gU3RyaW5nOjpsb3dlcigpIHNlZW1z
IHRvIGJlIHJlcXVpcmVkIGJ1dAogICAgIC8vIHRoZXJlIG1heSBiZSBhIHdheSB0byByZW1vdmUg
aXQuCiAgICAgQXRvbWljU3RyaW5nIGxvY2FsTmFtZSA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNh
c2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwotICAgIHJldHVybiB1cGRhdGVkQXR0cmli
dXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKGxvY2FsTmFtZSwgZmFsc2UpOworICAgIHJldHVy
biB1cGRhdGVkRWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShsb2NhbE5hbWUsIGZhbHNl
KTsKIH0KIAogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0CiB7Ci0g
ICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSB1cGRhdGVkQXR0
cmlidXRlRGF0YSgpOwotICAgIGlmICghYXR0cmlidXRlRGF0YSkKKyAgICBjb25zdCBFbGVtZW50
RGF0YSogZWxlbWVudERhdGEgPSB1cGRhdGVkRWxlbWVudERhdGEoKTsKKyAgICBpZiAoIWVsZW1l
bnREYXRhKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEt
PmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1l
c3BhY2VVUkkpKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oUXVh
bGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKIH0KIAogQ1NT
U3R5bGVEZWNsYXJhdGlvbiAqRWxlbWVudDo6c3R5bGUoKQpAQCAtMjE2MywxMSArMjE2MCwxMSBA
QCBBdG9taWNTdHJpbmcgRWxlbWVudDo6Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCkgY29uc3QK
ICAgICAvLyBUaGUgbGFuZ3VhZ2UgcHJvcGVydHkgaXMgaW5oZXJpdGVkLCBzbyB3ZSBpdGVyYXRl
IG92ZXIgdGhlIHBhcmVudHMgdG8gZmluZCB0aGUgZmlyc3QgbGFuZ3VhZ2UuCiAgICAgZG8gewog
ICAgICAgICBpZiAobi0+aXNFbGVtZW50Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY29uc3Qg
RWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBF
bGVtZW50Kj4obiktPmF0dHJpYnV0ZURhdGEoKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IEVs
ZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihuKS0+
ZWxlbWVudERhdGEoKSkgewogICAgICAgICAgICAgICAgIC8vIFNwZWM6IHhtbDpsYW5nIHRha2Vz
IHByZWNlZGVuY2UgLS0gaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwxLyNDXzcKLSAgICAgICAg
ICAgICAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhLT5n
ZXRBdHRyaWJ1dGVJdGVtKFhNTE5hbWVzOjpsYW5nQXR0cikpCisgICAgICAgICAgICAgICAgaWYg
KGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZWxlbWVudERhdGEtPmdldEF0dHJpYnV0ZUl0
ZW0oWE1MTmFtZXM6OmxhbmdBdHRyKSkKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhdHRy
aWJ1dGUtPnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29uc3QgQXR0cmlidXRl
KiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6
bGFuZ0F0dHIpKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gZWxlbWVudERhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpsYW5nQXR0
cikpCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOwogICAg
ICAgICAgICAgfQogICAgICAgICB9IGVsc2UgaWYgKG4tPmlzRG9jdW1lbnROb2RlKCkpIHsKQEAg
LTIzMzEsNyArMjMyOCw3IEBAIERPTVN0cmluZ01hcCogRWxlbWVudDo6ZGF0YXNldCgpCiBLVVJM
IEVsZW1lbnQ6OmdldFVSTEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25z
dAogewogI2lmICFBU1NFUlRfRElTQUJMRUQKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7Cisg
ICAgaWYgKGVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAgICAgICAgIEFTU0VSVChpc1VS
TEF0dHJpYnV0ZSgqYXR0cmlidXRlKSk7CiAgICAgfQpAQCAtMjM0Miw3ICsyMzM5LDcgQEAgS1VS
TCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29u
c3QKIEtVUkwgRWxlbWVudDo6Z2V0Tm9uRW1wdHlVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgaWYgKGF0dHJp
YnV0ZURhdGEoKSkgeworICAgIGlmIChlbGVtZW50RGF0YSgpKSB7CiAgICAgICAgIGlmIChjb25z
dCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAg
ICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1dGUoKmF0dHJpYnV0ZSkpOwogICAgIH0KQEAgLTI3NDks
OCArMjc0Niw4IEBAIHZvaWQgRWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoY29u
c3QgRWxlbWVudCYgb3RoZXIpCiAgICAgICAgIGRldGFjaEFsbEF0dHJOb2Rlc0Zyb21FbGVtZW50
KCk7CiAKICAgICBvdGhlci51cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAgIGlmICghb3Ro
ZXIubV9hdHRyaWJ1dGVEYXRhKSB7Ci0gICAgICAgIG1fYXR0cmlidXRlRGF0YS5jbGVhcigpOwor
ICAgIGlmICghb3RoZXIubV9lbGVtZW50RGF0YSkgeworICAgICAgICBtX2VsZW1lbnREYXRhLmNs
ZWFyKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTI3NjYsMjAgKzI3NjMsMjAgQEAg
dm9pZCBFbGVtZW50OjpjbG9uZUF0dHJpYnV0ZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBv
dGhlcikKICAgICBpZiAoIW9sZE5hbWUuaXNOdWxsKCkgfHwgIW5ld05hbWUuaXNOdWxsKCkpCiAg
ICAgICAgIHVwZGF0ZU5hbWUob2xkTmFtZSwgbmV3TmFtZSk7CiAKLSAgICAvLyBJZiAnb3RoZXIn
IGhhcyBhIG11dGFibGUgRWxlbWVudEF0dHJpYnV0ZURhdGEsIGNvbnZlcnQgaXQgdG8gYW4gaW1t
dXRhYmxlIG9uZSBzbyB3ZSBjYW4gc2hhcmUgaXQgYmV0d2VlbiBib3RoIGVsZW1lbnRzLgorICAg
IC8vIElmICdvdGhlcicgaGFzIGEgcHJpdmF0ZSBFbGVtZW50RGF0YSwgY29udmVydCBpdCB0byBh
IHNoYXJhYmxlIG9uZSBzbyB3ZSBjYW4gdXNlIGl0IGZvciBib3RoIGVsZW1lbnRzLgogICAgIC8v
IFdlIGNhbiBvbmx5IGRvIHRoaXMgaWYgdGhlcmUgaXMgbm8gQ1NTT00gd3JhcHBlciBmb3Igb3Ro
ZXIncyBpbmxpbmUgc3R5bGUsIGFuZCB0aGVyZSBhcmUgbm8gcHJlc2VudGF0aW9uIGF0dHJpYnV0
ZXMuCi0gICAgaWYgKG90aGVyLm1fYXR0cmlidXRlRGF0YS0+aXNNdXRhYmxlKCkKLSAgICAgICAg
JiYgIW90aGVyLm1fYXR0cmlidXRlRGF0YS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQot
ICAgICAgICAmJiAoIW90aGVyLm1fYXR0cmlidXRlRGF0YS0+aW5saW5lU3R5bGUoKSB8fCAhb3Ro
ZXIubV9hdHRyaWJ1dGVEYXRhLT5pbmxpbmVTdHlsZSgpLT5oYXNDU1NPTVdyYXBwZXIoKSkpCi0g
ICAgICAgIGNvbnN0X2Nhc3Q8RWxlbWVudCY+KG90aGVyKS5tX2F0dHJpYnV0ZURhdGEgPSBvdGhl
ci5tX2F0dHJpYnV0ZURhdGEtPm1ha2VJbW11dGFibGVDb3B5KCk7CisgICAgaWYgKG90aGVyLm1f
ZWxlbWVudERhdGEtPmlzUHJpdmF0ZSgpCisgICAgICAgICYmICFvdGhlci5tX2VsZW1lbnREYXRh
LT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpCisgICAgICAgICYmICghb3RoZXIubV9lbGVt
ZW50RGF0YS0+aW5saW5lU3R5bGUoKSB8fCAhb3RoZXIubV9lbGVtZW50RGF0YS0+aW5saW5lU3R5
bGUoKS0+aGFzQ1NTT01XcmFwcGVyKCkpKQorICAgICAgICBjb25zdF9jYXN0PEVsZW1lbnQmPihv
dGhlcikubV9lbGVtZW50RGF0YSA9IG90aGVyLm1fZWxlbWVudERhdGEtPm1ha2VTaGFyYWJsZUNv
cHkoKTsKIAotICAgIGlmICghb3RoZXIubV9hdHRyaWJ1dGVEYXRhLT5pc011dGFibGUoKSkKLSAg
ICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gb3RoZXIubV9hdHRyaWJ1dGVEYXRhOworICAgIGlmICgh
b3RoZXIubV9lbGVtZW50RGF0YS0+aXNQcml2YXRlKCkpCisgICAgICAgIG1fZWxlbWVudERhdGEg
PSBvdGhlci5tX2VsZW1lbnREYXRhOwogICAgIGVsc2UKLSAgICAgICAgbV9hdHRyaWJ1dGVEYXRh
ID0gb3RoZXIubV9hdHRyaWJ1dGVEYXRhLT5tYWtlTXV0YWJsZUNvcHkoKTsKKyAgICAgICAgbV9l
bGVtZW50RGF0YSA9IG90aGVyLm1fZWxlbWVudERhdGEtPm1ha2VQcml2YXRlQ29weSgpOwogCi0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCk7ICsr
aSkgewotICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGNvbnN0X2Nhc3Q8Y29u
c3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqPihtX2F0dHJpYnV0ZURhdGEuZ2V0KCkpLT5hdHRyaWJ1
dGVJdGVtKGkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VsZW1lbnREYXRhLT5h
dHRyaWJ1dGVDb3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1
dGUgPSBjb25zdF9jYXN0PGNvbnN0IEVsZW1lbnREYXRhKj4obV9lbGVtZW50RGF0YS5nZXQoKSkt
PmF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoYXR0cmlidXRlLT5u
YW1lKCksIGF0dHJpYnV0ZS0+dmFsdWUoKSk7CiAgICAgfQogfQpAQCAtMjc5MCwxMiArMjc4Nywx
MiBAQCB2b2lkIEVsZW1lbnQ6OmNsb25lRGF0YUZyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmIG90
aGVyKQogICAgIGNvcHlOb25BdHRyaWJ1dGVQcm9wZXJ0aWVzRnJvbUVsZW1lbnQob3RoZXIpOwog
fQogCi12b2lkIEVsZW1lbnQ6OmNyZWF0ZU11dGFibGVBdHRyaWJ1dGVEYXRhKCkKK3ZvaWQgRWxl
bWVudDo6Y3JlYXRlUHJpdmF0ZURhdGEoKQogewotICAgIGlmICghbV9hdHRyaWJ1dGVEYXRhKQot
ICAgICAgICBtX2F0dHJpYnV0ZURhdGEgPSBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlKCk7
CisgICAgaWYgKCFtX2VsZW1lbnREYXRhKQorICAgICAgICBtX2VsZW1lbnREYXRhID0gRWxlbWVu
dERhdGE6OmNyZWF0ZVByaXZhdGUoKTsKICAgICBlbHNlCi0gICAgICAgIG1fYXR0cmlidXRlRGF0
YSA9IG1fYXR0cmlidXRlRGF0YS0+bWFrZU11dGFibGVDb3B5KCk7CisgICAgICAgIG1fZWxlbWVu
dERhdGEgPSBtX2VsZW1lbnREYXRhLT5tYWtlUHJpdmF0ZUNvcHkoKTsKIH0KIAogdm9pZCBFbGVt
ZW50OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZv
KSBjb25zdApAQCAtMjgwMyw3ICsyODAwLDcgQEAgdm9pZCBFbGVtZW50OjpyZXBvcnRNZW1vcnlV
c2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAogICAgIE1lbW9y
eUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIFdlYkNvcmVNZW1vcnlUeXBl
czo6RE9NKTsKICAgICBDb250YWluZXJOb2RlOjpyZXBvcnRNZW1vcnlVc2FnZShtZW1vcnlPYmpl
Y3RJbmZvKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3RhZ05hbWUsICJ0YWdOYW1lIik7Ci0gICAg
aW5mby5hZGRNZW1iZXIobV9hdHRyaWJ1dGVEYXRhLCAiYXR0cmlidXRlRGF0YSIpOworICAgIGlu
Zm8uYWRkTWVtYmVyKG1fZWxlbWVudERhdGEsICJlbGVtZW50RGF0YSIpOwogfQogCiAjaWYgRU5B
QkxFKFNWRykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4IGRmMTYzM2QuLjY5MTg4MjIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnQuaApAQCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBQZXRlciBL
ZWxseSAocG1rQHBvc3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2
LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwLCAyMDExIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAw
OCwgMjAwOSwgMjAxMCwgMjAxMSwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTE4MCw4ICsxODAsOCBAQCBwdWJsaWM6CiAgICAgY29u
c3QgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKICAgICBj
b25zdCBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpIGNv
bnN0OwogICAgIEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
Jik7Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1J
bmRleChuYW1lKTsgfQotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0IHsg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUsIHNob3Vs
ZElnbm9yZUF0dHJpYnV0ZUNhc2UpOyB9CisgICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdCB7IHJldHVybiBlbGVtZW50RGF0YSgp
LT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7IH0KKyAgICBzaXplX3QgZ2V0QXR0cmlidXRl
SXRlbUluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRy
aWJ1dGVDYXNlKSBjb25zdCB7IHJldHVybiBlbGVtZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVt
SW5kZXgobmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7IH0KIAogICAgIHZvaWQgc2Ny
b2xsSW50b1ZpZXcoYm9vbCBhbGlnblRvVG9wID0gdHJ1ZSk7CiAgICAgdm9pZCBzY3JvbGxJbnRv
Vmlld0lmTmVlZGVkKGJvb2wgY2VudGVySWZOZWVkZWQgPSB0cnVlKTsKQEAgLTI2NSwxMSArMjY1
LDEzIEBAIHB1YmxpYzoKICAgICAvLyBPbmx5IGNhbGxlZCBieSB0aGUgcGFyc2VyIGltbWVkaWF0
ZWx5IGFmdGVyIGVsZW1lbnQgY29uc3RydWN0aW9uLgogICAgIHZvaWQgcGFyc2VyU2V0QXR0cmli
dXRlcyhjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
bik7CiAKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSgpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0cmlidXRlRGF0YS5nZXQoKTsgfQotICAgIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhKiBtdXRhYmxlQXR0cmlidXRlRGF0YSgpOwotICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1
dGVEYXRhKiBlbnN1cmVBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3Q7Ci0gICAgY29uc3QgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3Q7CisgICAgY29u
c3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50RGF0
YS5nZXQoKTsgfQorICAgIGNvbnN0IEVsZW1lbnREYXRhKiB1cGRhdGVkRWxlbWVudERhdGEoKSBj
b25zdDsKKyAgICBjb25zdCBFbGVtZW50RGF0YSogZW5zdXJlVXBkYXRlZEVsZW1lbnREYXRhKCkg
Y29uc3Q7CisgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzLgorICAgIGNvbnN0IEVsZW1lbnREYXRh
KiBlbnN1cmVFbGVtZW50RGF0YSgpIGNvbnN0OworCisgICAgUHJpdmF0ZUVsZW1lbnREYXRhKiBl
bnN1cmVQcml2YXRlRWxlbWVudERhdGEoKTsKIAogICAgIC8vIENsb25lcyBhdHRyaWJ1dGVzIG9u
bHkuCiAgICAgdm9pZCBjbG9uZUF0dHJpYnV0ZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50Jik7
CkBAIC02MDAsNyArNjAyLDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdW5yZWdpc3Rlck5hbWVk
Rmxvd0NvbnRlbnROb2RlKCk7CiAKLSAgICB2b2lkIGNyZWF0ZU11dGFibGVBdHRyaWJ1dGVEYXRh
KCk7CisgICAgdm9pZCBjcmVhdGVQcml2YXRlRGF0YSgpOwogCiAgICAgYm9vbCBzaG91bGRJbnZh
bGlkYXRlRGlzdHJpYnV0aW9uV2hlbkF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudFNoYWRvdyosIGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcmKTsKIApAQCAtNjEyLDcgKzYx
NCw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNyZWF0ZVJlbmRlcmVySWZOZWVkZWQoKTsKIAot
ICAgIFJlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gbV9hdHRyaWJ1dGVEYXRhOworICAgIFJl
ZlB0cjxFbGVtZW50RGF0YT4gbV9lbGVtZW50RGF0YTsKIH07CiAgICAgCiBpbmxpbmUgRWxlbWVu
dCogdG9FbGVtZW50KE5vZGUqIG5vZGUpCkBAIC02NzIsMjUgKzY3NCwyNSBAQCBpbmxpbmUgRWxl
bWVudCogRWxlbWVudDo6bmV4dEVsZW1lbnRTaWJsaW5nKCkgY29uc3QKICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8RWxlbWVudCo+KG4pOwogfQogCi1pbmxpbmUgY29uc3QgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIEVsZW1lbnQ6OnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3QKK2lubGluZSBjb25z
dCBFbGVtZW50RGF0YSogRWxlbWVudDo6dXBkYXRlZEVsZW1lbnREYXRhKCkgY29uc3QKIHsKICAg
ICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCk7
CisgICAgcmV0dXJuIGVsZW1lbnREYXRhKCk7CiB9CiAKLWlubGluZSBjb25zdCBFbGVtZW50QXR0
cmlidXRlRGF0YSogRWxlbWVudDo6ZW5zdXJlQXR0cmlidXRlRGF0YSgpCitpbmxpbmUgY29uc3Qg
RWxlbWVudERhdGEqIEVsZW1lbnQ6OmVuc3VyZVVwZGF0ZWRFbGVtZW50RGF0YSgpIGNvbnN0CiB7
Ci0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEo
KTsKLSAgICByZXR1cm4gbXV0YWJsZUF0dHJpYnV0ZURhdGEoKTsKKyAgICB1cGRhdGVJbnZhbGlk
QXR0cmlidXRlcygpOworICAgIGlmIChlbGVtZW50RGF0YSgpKQorICAgICAgICByZXR1cm4gZWxl
bWVudERhdGEoKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcyktPmVuc3Vy
ZVByaXZhdGVFbGVtZW50RGF0YSgpOwogfQogCi1pbmxpbmUgY29uc3QgRWxlbWVudEF0dHJpYnV0
ZURhdGEqIEVsZW1lbnQ6OmVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3QKK2lubGlu
ZSBjb25zdCBFbGVtZW50RGF0YSogRWxlbWVudDo6ZW5zdXJlRWxlbWVudERhdGEoKSBjb25zdAog
ewotICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Ci0gICAgaWYgKGF0dHJpYnV0ZURhdGEo
KSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKTsKLSAgICByZXR1cm4gY29uc3RfY2Fz
dDxFbGVtZW50Kj4odGhpcyktPm11dGFibGVBdHRyaWJ1dGVEYXRhKCk7CisgICAgaWYgKGVsZW1l
bnREYXRhKCkpCisgICAgICAgIHJldHVybiBlbGVtZW50RGF0YSgpOworICAgIHJldHVybiBjb25z
dF9jYXN0PEVsZW1lbnQqPih0aGlzKS0+ZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCk7CiB9CiAK
IGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWUoY29uc3QgQXRvbWljU3RyaW5nJiBvbGRO
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpCkBAIC03MzMsMTMgKzczNSwxMyBAQCBp
bmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJZChUcmVlU2NvcGUqIHNjb3BlLCBjb25zdCBBdG9t
aWNTdHJpbmcmIG9sZElkLCBjb25zdAogaW5saW5lIGJvb2wgRWxlbWVudDo6ZmFzdEhhc0F0dHJp
YnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogICAgIEFTU0VSVChmYXN0
QXR0cmlidXRlTG9va3VwQWxsb3dlZChuYW1lKSk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEo
KSAmJiBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgpICYm
IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiB9CiAKIGlubGluZSBjb25zdCBBdG9taWNTdHJpbmcm
IEVsZW1lbnQ6OmZhc3RHZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29u
c3QKIHsKICAgICBBU1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQobmFtZSkpOwotICAg
IGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICBpZiAoZWxlbWVudERhdGEoKSkgewogICAgICAg
ICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUp
KQogICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICB9CkBAIC03NDgs
MTMgKzc1MCwxMyBAQCBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0
QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiAKIGlubGluZSBib29sIEVsZW1l
bnQ6Omhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gYXR0
cmlidXRlRGF0YSgpICYmICFhdHRyaWJ1dGVEYXRhKCktPmlzRW1wdHkoKTsKKyAgICByZXR1cm4g
ZWxlbWVudERhdGEoKSAmJiBlbGVtZW50RGF0YSgpLT5hdHRyaWJ1dGVDb3VudCgpOwogfQogCiBp
bmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjppZEZvclN0eWxlUmVzb2x1dGlvbigp
IGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0lEKCkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRh
KCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRhKCktPmlk
Rm9yU3R5bGVSZXNvbHV0aW9uKCk7CiB9CiAKIGlubGluZSBib29sIEVsZW1lbnQ6OmlzSWRBdHRy
aWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUpIGNvbnN0CkBAIC03
ODQsNjMgKzc4Niw2MyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRJZEF0dHJpYnV0ZShjb25z
dCBBdG9taWNTdHJpbmcmIHZhbHVlKQogaW5saW5lIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIEVs
ZW1lbnQ6OmNsYXNzTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVChoYXNDbGFzcygpKTsKLSAg
ICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5j
bGFzc05hbWVzKCk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOworICAgIHJldHVybiBlbGVt
ZW50RGF0YSgpLT5jbGFzc05hbWVzKCk7CiB9CiAKIGlubGluZSBzaXplX3QgRWxlbWVudDo6YXR0
cmlidXRlQ291bnQoKSBjb25zdAogewotICAgIEFTU0VSVChhdHRyaWJ1dGVEYXRhKCkpOwotICAg
IHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmxlbmd0aCgpOworICAgIEFTU0VSVChlbGVtZW50RGF0
YSgpKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+YXR0cmlidXRlQ291bnQoKTsKIH0KIAog
aW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudDo6YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBp
bmRleCkgY29uc3QKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICByZXR1cm4g
YXR0cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGluZGV4KTsKKyAgICBBU1NFUlQoZWxlbWVu
dERhdGEoKSk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgp
OwogfQogCiBpbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVJdGVt
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGF0dHJpYnV0
ZURhdGEoKSk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShu
YW1lKTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRh
KCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiB9CiAKIGlubGluZSBBdHRyaWJ1dGUqIEVsZW1l
bnQ6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKLSAgICBB
U1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICByZXR1cm4gbXV0YWJsZUF0dHJpYnV0ZURhdGEo
KS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7Cisg
ICAgcmV0dXJuIGVuc3VyZVByaXZhdGVFbGVtZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5h
bWUpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygp
IGNvbnN0CiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0
YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxl
QXR0cmlidXRlSXNEaXJ0eSkKKyAgICBpZiAoZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJpYnV0
ZUlzRGlydHkpCiAgICAgICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCk7CiAKICNpZiBFTkFCTEUo
U1ZHKQotICAgIGlmIChhdHRyaWJ1dGVEYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJl
RGlydHkpCisgICAgaWYgKGVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJl
RGlydHkpCiAgICAgICAgIHVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGFueVFOYW1lKCkpOwog
I2VuZGlmCiB9CiAKIGlubGluZSBib29sIEVsZW1lbnQ6Omhhc0lEKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gYXR0cmlidXRlRGF0YSgpICYmIGF0dHJpYnV0ZURhdGEoKS0+aGFzSUQoKTsKKyAgICBy
ZXR1cm4gZWxlbWVudERhdGEoKSAmJiBlbGVtZW50RGF0YSgpLT5oYXNJRCgpOwogfQogCiBpbmxp
bmUgYm9vbCBFbGVtZW50OjpoYXNDbGFzcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGF0dHJpYnV0
ZURhdGEoKSAmJiBhdHRyaWJ1dGVEYXRhKCktPmhhc0NsYXNzKCk7CisgICAgcmV0dXJuIGVsZW1l
bnREYXRhKCkgJiYgZWxlbWVudERhdGEoKS0+aGFzQ2xhc3MoKTsKIH0KIAotaW5saW5lIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhKiBFbGVtZW50OjptdXRhYmxlQXR0cmlidXRlRGF0YSgpCitpbmxpbmUg
UHJpdmF0ZUVsZW1lbnREYXRhKiBFbGVtZW50OjplbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKQog
ewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpIHx8ICFhdHRyaWJ1dGVEYXRhKCktPmlzTXV0YWJs
ZSgpKQotICAgICAgICBjcmVhdGVNdXRhYmxlQXR0cmlidXRlRGF0YSgpOwotICAgIHJldHVybiBt
X2F0dHJpYnV0ZURhdGEuZ2V0KCk7CisgICAgaWYgKCFlbGVtZW50RGF0YSgpIHx8ICFlbGVtZW50
RGF0YSgpLT5pc1ByaXZhdGUoKSkKKyAgICAgICAgY3JlYXRlUHJpdmF0ZURhdGEoKTsKKyAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UHJpdmF0ZUVsZW1lbnREYXRhKj4obV9lbGVtZW50RGF0YS5nZXQo
KSk7CiB9CiAKIC8vIFB1dCBoZXJlIHRvIG1ha2UgdGhlbSBpbmxpbmUuCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAppbmRleCBlNjk3MWI3Li44NGUyNzM0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5jcHAKQEAgLTMsNyAr
Myw3IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtk
ZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkK
ICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAq
IENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIw
MDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIsIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDEyIE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKS4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMSw0NCArMzEsNDQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1zdHJ1Y3QgU2FtZVNpemVBc0VsZW1lbnRBdHRy
aWJ1dGVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0VsZW1lbnRBdHRyaWJ1dGVE
YXRhPiB7CitzdHJ1Y3QgU2FtZVNpemVBc0VsZW1lbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8
U2FtZVNpemVBc0VsZW1lbnREYXRhPiB7CiAgICAgdW5zaWduZWQgYml0ZmllbGQ7CiAgICAgdm9p
ZCogcmVmUHRyc1szXTsKIH07CiAKLUNPTVBJTEVfQVNTRVJUKHNpemVvZihFbGVtZW50QXR0cmli
dXRlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YSksIGVsZW1l
bnRfYXR0cmlidXRlX2RhdGFfc2hvdWxkX3N0YXlfc21hbGwpOworQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEVsZW1lbnREYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc0VsZW1lbnREYXRhKSwgZWxlbWVu
dF9kYXRhX3Nob3VsZF9zdGF5X3NtYWxsKTsKIAotc3RhdGljIHNpemVfdCBzaXplRm9ySW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGFXaXRoQXR0cmlidXRlQ291bnQodW5zaWduZWQgY291bnQp
CitzdGF0aWMgc2l6ZV90IHNpemVGb3JTaGFyYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJpYnV0ZUNv
dW50KHVuc2lnbmVkIGNvdW50KQogewotICAgIHJldHVybiBzaXplb2YoSW1tdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEpIC0gc2l6ZW9mKHZvaWQqKSArIHNpemVvZihBdHRyaWJ1dGUpICogY291
bnQ7CisgICAgcmV0dXJuIHNpemVvZihTaGFyYWJsZUVsZW1lbnREYXRhKSAtIHNpemVvZih2b2lk
KikgKyBzaXplb2YoQXR0cmlidXRlKSAqIGNvdW50OwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnRB
dHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlSW1tdXRhYmxlKGNvbnN0
IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQorUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4g
RWxlbWVudERhdGE6OmNyZWF0ZVNoYXJhYmxlV2l0aEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0
dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCiB7Ci0gICAgdm9pZCogc2xvdCA9IFdURjo6ZmFzdE1hbGxv
YyhzaXplRm9ySW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFXaXRoQXR0cmlidXRlQ291bnQo
YXR0cmlidXRlcy5zaXplKCkpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBJbW11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShhdHRyaWJ1dGVzKSk7CisgICAgdm9pZCogc2xvdCA9
IFdURjo6ZmFzdE1hbGxvYyhzaXplRm9yU2hhcmFibGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVD
b3VudChhdHRyaWJ1dGVzLnNpemUoKSkpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHNsb3Qp
IFNoYXJhYmxlRWxlbWVudERhdGEoYXR0cmlidXRlcykpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1l
bnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlKCkKK1Bhc3NSZWZQ
dHI8RWxlbWVudERhdGE+IEVsZW1lbnREYXRhOjpjcmVhdGVQcml2YXRlKCkKIHsKLSAgICByZXR1
cm4gYWRvcHRSZWYobmV3IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSk7CisgICAgcmV0dXJu
IGFkb3B0UmVmKG5ldyBQcml2YXRlRWxlbWVudERhdGEpOwogfQogCi1JbW11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9y
PEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCi0gICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShhdHRy
aWJ1dGVzLnNpemUoKSkKK1NoYXJhYmxlRWxlbWVudERhdGE6OlNoYXJhYmxlRWxlbWVudERhdGEo
Y29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCisgICAgOiBFbGVtZW50RGF0YShh
dHRyaWJ1dGVzLnNpemUoKSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcnJh
eVNpemU7ICsraSkKICAgICAgICAgbmV3ICgmcmVpbnRlcnByZXRfY2FzdDxBdHRyaWJ1dGUqPigm
bV9hdHRyaWJ1dGVBcnJheSlbaV0pIEF0dHJpYnV0ZShhdHRyaWJ1dGVzW2ldKTsKIH0KIAotSW1t
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6On5JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YSgpCitTaGFyYWJsZUVsZW1lbnREYXRhOjp+U2hhcmFibGVFbGVtZW50RGF0YSgpCiB7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJyYXlTaXplOyArK2kpCiAgICAgICAgIChyZWlu
dGVycHJldF9jYXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkufkF0dHJpYnV0
ZSgpOwogfQogCi1JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlcikK
LSAgICA6IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKG90aGVyLCBmYWxzZSkKK1NoYXJhYmxlRWxlbWVu
dERhdGE6OlNoYXJhYmxlRWxlbWVudERhdGEoY29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhJiBvdGhl
cikKKyAgICA6IEVsZW1lbnREYXRhKG90aGVyLCBmYWxzZSkKIHsKICAgICBBU1NFUlQoIW90aGVy
Lm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOwogCkBAIC04MSw5ICs4MSw5IEBAIEltbXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShj
b25zdCBNdXRhYmxlRWxlbWVuCiAgICAgICAgIG5ldyAoJnJlaW50ZXJwcmV0X2Nhc3Q8QXR0cmli
dXRlKj4oJm1fYXR0cmlidXRlQXJyYXkpW2ldKSBBdHRyaWJ1dGUoKm90aGVyLmF0dHJpYnV0ZUl0
ZW0oaSkpOwogfQogCi1FbGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEo
Y29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyLCBib29sIGlzTXV0YWJsZSkKLSAgICA6
IG1faXNNdXRhYmxlKGlzTXV0YWJsZSkKLSAgICAsIG1fYXJyYXlTaXplKGlzTXV0YWJsZSA/IDAg
OiBvdGhlci5sZW5ndGgoKSkKK0VsZW1lbnREYXRhOjpFbGVtZW50RGF0YShjb25zdCBFbGVtZW50
RGF0YSYgb3RoZXIsIGJvb2wgaXNQcml2YXRlKQorICAgIDogbV9pc1ByaXZhdGUoaXNQcml2YXRl
KQorICAgICwgbV9hcnJheVNpemUoaXNQcml2YXRlID8gMCA6IG90aGVyLmF0dHJpYnV0ZUNvdW50
KCkpCiAgICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eShvdGhlci5tX3By
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSkKICAgICAsIG1fc3R5bGVBdHRyaWJ1dGVJ
c0RpcnR5KG90aGVyLm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KQogI2lmIEVOQUJMRShTVkcpCkBA
IC05NSw2MyArOTUsNjIgQEAgRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVsZW1lbnRBdHRyaWJ1dGVE
YXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlciwgYm8KICAgICAvLyBOT1RFOiBU
aGUgaW5saW5lIHN0eWxlIGlzIGNvcGllZCBieSB0aGUgc3ViY2xhc3MgY29weSBjb25zdHJ1Y3Rv
ciBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0aCBpdCBoZXJlLgogfQogCi1NdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6Ok11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25z
dCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyKQotICAgIDogRWxlbWVudEF0dHJp
YnV0ZURhdGEob3RoZXIsIHRydWUpCitQcml2YXRlRWxlbWVudERhdGE6OlByaXZhdGVFbGVtZW50
RGF0YShjb25zdCBQcml2YXRlRWxlbWVudERhdGEmIG90aGVyKQorICAgIDogRWxlbWVudERhdGEo
b3RoZXIsIHRydWUpCiAgICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKG90aGVyLm1f
cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpCiAgICAgLCBtX2F0dHJpYnV0ZVZlY3RvcihvdGhl
ci5tX2F0dHJpYnV0ZVZlY3RvcikKIHsKICAgICBtX2lubGluZVN0eWxlID0gb3RoZXIubV9pbmxp
bmVTdHlsZSA/IG90aGVyLm1faW5saW5lU3R5bGUtPmNvcHkoKSA6IDA7CiB9CiAKLU11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YTo6TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlcikKLSAgICA6IEVsZW1lbnRBdHRyaWJ1
dGVEYXRhKG90aGVyLCB0cnVlKQorUHJpdmF0ZUVsZW1lbnREYXRhOjpQcml2YXRlRWxlbWVudERh
dGEoY29uc3QgU2hhcmFibGVFbGVtZW50RGF0YSYgb3RoZXIpCisgICAgOiBFbGVtZW50RGF0YShv
dGhlciwgdHJ1ZSkKIHsKLSAgICAvLyBBbiBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSBz
aG91bGQgbmV2ZXIgaGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxlUHJvcGVydHlTZXQgYXR0YWNo
ZWQuCi0gICAgQVNTRVJUKCFvdGhlci5tX2lubGluZVN0eWxlIHx8ICFvdGhlci5tX2lubGluZVN0
eWxlLT5pc011dGFibGUoKSk7CisgICAgLy8gQW4gU2hhcmFibGVFbGVtZW50RGF0YSBzaG91bGQg
bmV2ZXIgaGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxlUHJvcGVydHlTZXQgYXR0YWNoZWQuCisg
ICAgQVNTRVJUKCFvdGhlci5tX2lubGluZVN0eWxlIHx8ICFvdGhlci5tX2lubGluZVN0eWxlLT5p
c1ByaXZhdGUoKSk7CiAgICAgbV9pbmxpbmVTdHlsZSA9IG90aGVyLm1faW5saW5lU3R5bGU7CiAK
LSAgICBtX2F0dHJpYnV0ZVZlY3Rvci5yZXNlcnZlQ2FwYWNpdHkob3RoZXIubGVuZ3RoKCkpOwot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBvdGhlci5sZW5ndGgoKTsgKytpKQorICAgIG1f
YXR0cmlidXRlVmVjdG9yLnJlc2VydmVDYXBhY2l0eShvdGhlci5hdHRyaWJ1dGVDb3VudCgpKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgb3RoZXIuYXR0cmlidXRlQ291bnQoKTsgKytp
KQogICAgICAgICBtX2F0dHJpYnV0ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQob3RoZXIuaW1tdXRh
YmxlQXR0cmlidXRlQXJyYXkoKVtpXSk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0
ZURhdGE+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptYWtlTXV0YWJsZUNvcHkoKSBjb25zdAorUGFz
c1JlZlB0cjxFbGVtZW50RGF0YT4gRWxlbWVudERhdGE6Om1ha2VQcml2YXRlQ29weSgpIGNvbnN0
CiB7Ci0gICAgaWYgKGlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IE11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEmPigqdGhpcykpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE11dGFi
bGVFbGVtZW50QXR0cmlidXRlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBJbW11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YSY+KCp0aGlzKSkpOworICAgIGlmIChpc1ByaXZhdGUoKSkKKyAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQcml2YXRlRWxlbWVudERhdGEoc3RhdGljX2Nhc3Q8Y29uc3Qg
UHJpdmF0ZUVsZW1lbnREYXRhJj4oKnRoaXMpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQ
cml2YXRlRWxlbWVudERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgU2hhcmFibGVFbGVtZW50RGF0YSY+
KCp0aGlzKSkpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6bWFrZUltbXV0YWJsZUNvcHkoKSBjb25zdAorUGFzc1JlZlB0cjxFbGVt
ZW50RGF0YT4gRWxlbWVudERhdGE6Om1ha2VTaGFyYWJsZUNvcHkoKSBjb25zdAogewotICAgIEFT
U0VSVChpc011dGFibGUoKSk7Ci0gICAgdm9pZCogc2xvdCA9IFdURjo6ZmFzdE1hbGxvYyhzaXpl
Rm9ySW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFXaXRoQXR0cmlidXRlQ291bnQobXV0YWJs
ZUF0dHJpYnV0ZVZlY3RvcigpLnNpemUoKSkpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgKHNs
b3QpIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IE11dGFi
bGVFbGVtZW50QXR0cmlidXRlRGF0YSY+KCp0aGlzKSkpOworICAgIEFTU0VSVChpc1ByaXZhdGUo
KSk7CisgICAgdm9pZCogc2xvdCA9IFdURjo6ZmFzdE1hbGxvYyhzaXplRm9yU2hhcmFibGVFbGVt
ZW50RGF0YVdpdGhBdHRyaWJ1dGVDb3VudChhdHRyaWJ1dGVWZWN0b3IoKS5zaXplKCkpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBTaGFyYWJsZUVsZW1lbnREYXRhKHN0YXRpY19j
YXN0PGNvbnN0IFByaXZhdGVFbGVtZW50RGF0YSY+KCp0aGlzKSkpOwogfQogCi12b2lkIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjphZGRBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1dGUp
Cit2b2lkIEVsZW1lbnREYXRhOjphZGRBdHRyaWJ1dGUoY29uc3QgQXR0cmlidXRlJiBhdHRyaWJ1
dGUpCiB7Ci0gICAgQVNTRVJUKGlzTXV0YWJsZSgpKTsKLSAgICBtdXRhYmxlQXR0cmlidXRlVmVj
dG9yKCkuYXBwZW5kKGF0dHJpYnV0ZSk7CisgICAgQVNTRVJUKGlzUHJpdmF0ZSgpKTsKKyAgICBh
dHRyaWJ1dGVWZWN0b3IoKS5hcHBlbmQoYXR0cmlidXRlKTsKIH0KIAotdm9pZCBFbGVtZW50QXR0
cmlidXRlRGF0YTo6cmVtb3ZlQXR0cmlidXRlKHNpemVfdCBpbmRleCkKK3ZvaWQgRWxlbWVudERh
dGE6OnJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpCiB7Ci0gICAgQVNTRVJUKGlzTXV0YWJs
ZSgpKTsKKyAgICBBU1NFUlQoaXNQcml2YXRlKCkpOwogICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZ
X0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOwotICAgIG11dGFibGVBdHRyaWJ1dGVWZWN0
b3IoKS5yZW1vdmUoaW5kZXgpOworICAgIGF0dHJpYnV0ZVZlY3RvcigpLnJlbW92ZShpbmRleCk7
CiB9CiAKLWJvb2wgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmlzRXF1aXZhbGVudChjb25zdCBFbGVt
ZW50QXR0cmlidXRlRGF0YSogb3RoZXIpIGNvbnN0Citib29sIEVsZW1lbnREYXRhOjpoYXNFcXVp
dmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50RGF0YSogb3RoZXIpIGNvbnN0CiB7CiAgICAg
aWYgKCFvdGhlcikKLSAgICAgICAgcmV0dXJuIGlzRW1wdHkoKTsKKyAgICAgICAgcmV0dXJuICFh
dHRyaWJ1dGVDb3VudCgpOwogCi0gICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7Ci0gICAgaWYg
KGxlbiAhPSBvdGhlci0+bGVuZ3RoKCkpCisgICAgaWYgKGF0dHJpYnV0ZUNvdW50KCkgIT0gb3Ro
ZXItPmF0dHJpYnV0ZUNvdW50KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW47IGkrKykgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBhdHRyaWJ1dGVDb3VudCgpOyBpKyspIHsKICAgICAgICAgY29uc3QgQXR0cmlidXRlKiBh
dHRyaWJ1dGUgPSBhdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBjb25zdCBBdHRyaWJ1dGUqIG90
aGVyQXR0ciA9IG90aGVyLT5nZXRBdHRyaWJ1dGVJdGVtKGF0dHJpYnV0ZS0+bmFtZSgpKTsKICAg
ICAgICAgaWYgKCFvdGhlckF0dHIgfHwgYXR0cmlidXRlLT52YWx1ZSgpICE9IG90aGVyQXR0ci0+
dmFsdWUoKSkKQEAgLTE2MSwyNSArMTYwLDI1IEBAIGJvb2wgRWxlbWVudEF0dHJpYnV0ZURhdGE6
OmlzRXF1aXZhbGVudChjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogb3RoZXIpIGNvbnN0CiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlcG9ydE1l
bW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0Cit2b2lk
IEVsZW1lbnREYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlP
YmplY3RJbmZvKSBjb25zdAogewotICAgIHNpemVfdCBhY3R1YWxTaXplID0gbV9pc011dGFibGUg
PyBzaXplb2YoRWxlbWVudEF0dHJpYnV0ZURhdGEpIDogc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KG1fYXJyYXlTaXplKTsKKyAgICBzaXplX3Qg
YWN0dWFsU2l6ZSA9IG1faXNQcml2YXRlID8gc2l6ZW9mKEVsZW1lbnREYXRhKSA6IHNpemVGb3JT
aGFyYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJpYnV0ZUNvdW50KG1fYXJyYXlTaXplKTsKICAgICBN
ZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5
VHlwZXM6OkRPTSwgYWN0dWFsU2l6ZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9pbmxpbmVTdHls
ZSwgImlubGluZVN0eWxlIik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9jbGFzc05hbWVzLCAiY2xh
c3NOYW1lcyIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1faWRGb3JTdHlsZVJlc29sdXRpb24sICJp
ZEZvclN0eWxlUmVzb2x1dGlvbiIpOwotICAgIGlmIChtX2lzTXV0YWJsZSkgeworICAgIGlmIChp
c1ByaXZhdGUoKSkgewogICAgICAgICBpbmZvLmFkZE1lbWJlcihwcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpLCAicHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSIpOwotICAgICAgICBpbmZv
LmFkZE1lbWJlcihtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCksICJtdXRhYmxlQXR0cmlidXRlVmVj
dG9yIik7CisgICAgICAgIGluZm8uYWRkTWVtYmVyKGF0dHJpYnV0ZVZlY3RvcigpLCAiYXR0cmli
dXRlVmVjdG9yIik7CiAgICAgfQotICAgIGZvciAodW5zaWduZWQgaSA9IDAsIGxlbiA9IGxlbmd0
aCgpOyBpIDwgbGVuOyBpKyspCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJpYnV0
ZUNvdW50KCk7ICsraSkKICAgICAgICAgaW5mby5hZGRNZW1iZXIoKmF0dHJpYnV0ZUl0ZW0oaSks
ICIqYXR0cmlidXRlSXRlbSIpOwogfQogCi1zaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9v
bCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAorc2l6ZV90IEVsZW1lbnREYXRhOjpn
ZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJv
b2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKIHsKICAgICAvLyBDb250aW51ZSB0
byBjaGVja2luZyBjYXNlLWluc2Vuc2l0aXZlbHkgYW5kL29yIGZ1bGwgbmFtZXNwYWNlZCBuYW1l
cyBpZiBuZWNlc3Nhcnk6Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyAr
K2kpIHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQoKTsgKytp
KSB7CiAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlSXRlbShp
KTsKICAgICAgICAgaWYgKCFhdHRyaWJ1dGUtPm5hbWUoKS5oYXNQcmVmaXgoKSkgewogICAgICAg
ICAgICAgaWYgKHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UgJiYgZXF1YWxJZ25vcmluZ0Nhc2Uo
bmFtZSwgYXR0cmlidXRlLT5sb2NhbE5hbWUoKSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
QXR0cmlidXRlRGF0YS5oCmluZGV4IDY4ZjA2YmEuLmVkOWYxY2MgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4
LCAyMDEwLCAyMDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnko
LWllcykuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzQsMTQgKzM0LDE0IEBACiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIGNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YTsKLWNsYXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKK2NsYXNzIFNoYXJhYmxlRWxl
bWVudERhdGE7CitjbGFzcyBQcml2YXRlRWxlbWVudERhdGE7CiAKLWNsYXNzIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8RWxlbWVudEF0dHJpYnV0ZURhdGE+IHsKK2Ns
YXNzIEVsZW1lbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8RWxlbWVudERhdGE+IHsKICAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
bGVtZW50QXR0cmlidXRlRGF0YT4gY3JlYXRlKCk7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RWxl
bWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZUltbXV0YWJsZShjb25zdCBWZWN0b3I8QXR0cmlidXRl
PiYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBjcmVhdGVQcml2YXRlKCk7
CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudERhdGE+IGNyZWF0ZVNoYXJhYmxlV2l0aEF0
dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKIAogICAgIC8vIE92ZXJyaWRlIFJl
ZkNvdW50ZWQncyBkZXJlZigpIHRvIGVuc3VyZSBvcGVyYXRvciBkZWxldGUgaXMgY2FsbGVkIG9u
CiAgICAgLy8gdGhlIGFwcHJvcHJpYXRlIHN1YmNsYXNzIHR5cGUuCkBAIC01OSw4ICs1OSw3IEBA
IHB1YmxpYzoKICAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBwcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpIGNvbnN0OwogICAgIHZvaWQgc2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
UGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PikgY29uc3Q7CiAKLSAgICBzaXplX3QgbGVuZ3Ro
KCkgY29uc3Q7Ci0gICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIWxlbmd0aCgpOyB9
CisgICAgc2l6ZV90IGF0dHJpYnV0ZUNvdW50KCkgY29uc3Q7CiAKICAgICAvLyBJbnRlcm5hbCBp
bnRlcmZhY2UuCiAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKQEAgLTc3LDE2ICs3NiwxOCBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJRCgp
IGNvbnN0IHsgcmV0dXJuICFtX2lkRm9yU3R5bGVSZXNvbHV0aW9uLmlzTnVsbCgpOyB9CiAgICAg
Ym9vbCBoYXNDbGFzcygpIGNvbnN0IHsgcmV0dXJuICFtX2NsYXNzTmFtZXMuaXNOdWxsKCk7IH0K
IAotICAgIGJvb2wgaXNFcXVpdmFsZW50KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhl
cikgY29uc3Q7CisgICAgYm9vbCBoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50
RGF0YSogb3RoZXIpIGNvbnN0OwogCiAgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlP
YmplY3RJbmZvKikgY29uc3Q7CiAKLSAgICBib29sIGlzTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IG1faXNNdXRhYmxlOyB9CisgICAgYm9vbCBpc1ByaXZhdGUoKSBjb25zdCB7IHJldHVybiBtX2lz
UHJpdmF0ZTsgfQorCisgICAgLy8gRklYTUU6IEhpZGUgdGhpcy4KICAgICBjb25zdCBBdHRyaWJ1
dGUqIGltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KCkgY29uc3Q7CiAKIHByb3RlY3RlZDoKLSAgICBF
bGVtZW50QXR0cmlidXRlRGF0YSgpCi0gICAgICAgIDogbV9pc011dGFibGUodHJ1ZSkKKyAgICBF
bGVtZW50RGF0YSgpCisgICAgICAgIDogbV9pc1ByaXZhdGUodHJ1ZSkKICAgICAgICAgLCBtX2Fy
cmF5U2l6ZSgwKQogICAgICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5
KGZhbHNlKQogICAgICAgICAsIG1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKQpAQCAtOTUs
OCArOTYsOCBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKICAgICB7IH0KIAotICAgIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhKHVuc2lnbmVkIGFycmF5U2l6ZSkKLSAgICAgICAgOiBtX2lzTXV0YWJsZShmYWxz
ZSkKKyAgICBFbGVtZW50RGF0YSh1bnNpZ25lZCBhcnJheVNpemUpCisgICAgICAgIDogbV9pc1By
aXZhdGUoZmFsc2UpCiAgICAgICAgICwgbV9hcnJheVNpemUoYXJyYXlTaXplKQogICAgICAgICAs
IG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KGZhbHNlKQogICAgICAgICAsIG1f
c3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKQpAQCAtMTA1LDkgKzEwNiw5IEBAIHByb3RlY3Rl
ZDoKICNlbmRpZgogICAgIHsgfQogCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgRWxl
bWVudEF0dHJpYnV0ZURhdGEmLCBib29sIGlzTXV0YWJsZSk7CisgICAgRWxlbWVudERhdGEoY29u
c3QgRWxlbWVudERhdGEmLCBib29sIGlzUHJpdmF0ZSk7CiAKLSAgICB1bnNpZ25lZCBtX2lzTXV0
YWJsZSA6IDE7CisgICAgdW5zaWduZWQgbV9pc1ByaXZhdGUgOiAxOwogICAgIHVuc2lnbmVkIG1f
YXJyYXlTaXplIDogMjg7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3ByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlSXNEaXJ0eSA6IDE7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3N0eWxlQXR0cmli
dXRlSXNEaXJ0eSA6IDE7CkBAIC0xMjIsOCArMTIzLDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgU3R5bGVkRWxlbWVu
dDsKLSAgICBmcmllbmQgY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci0gICAg
ZnJpZW5kIGNsYXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKKyAgICBmcmllbmQgY2xh
c3MgU2hhcmFibGVFbGVtZW50RGF0YTsKKyAgICBmcmllbmQgY2xhc3MgUHJpdmF0ZUVsZW1lbnRE
YXRhOwogI2lmIEVOQUJMRShTVkcpCiAgICAgZnJpZW5kIGNsYXNzIFNWR0VsZW1lbnQ7CiAjZW5k
aWYKQEAgLTEzMiw3MSArMTMzLDcxIEBAIHByaXZhdGU6CiAgICAgY29uc3QgQXR0cmlidXRlKiBn
ZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKICAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4
U2xvd0Nhc2UoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJp
YnV0ZUNhc2UpIGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4g
bWFrZU11dGFibGVDb3B5KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRl
RGF0YT4gbWFrZUltbXV0YWJsZUNvcHkoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnRE
YXRhPiBtYWtlUHJpdmF0ZUNvcHkoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnREYXRh
PiBtYWtlU2hhcmFibGVDb3B5KCkgY29uc3Q7CiAKLSAgICBWZWN0b3I8QXR0cmlidXRlLCA0PiYg
bXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpOwotICAgIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+
JiBtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkgY29uc3Q7CisgICAgVmVjdG9yPEF0dHJpYnV0ZSwg
ND4mIGF0dHJpYnV0ZVZlY3RvcigpOworICAgIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBh
dHRyaWJ1dGVWZWN0b3IoKSBjb25zdDsKIH07CiAKLWNsYXNzIEltbXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsKK2NsYXNzIFNoYXJhYmxl
RWxlbWVudERhdGEgOiBwdWJsaWMgRWxlbWVudERhdGEgewogcHVibGljOgotICAgIEltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7Ci0gICAgSW1t
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhJik7Ci0gICAgfkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7CisgICAgU2hhcmFi
bGVFbGVtZW50RGF0YShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYpOworICAgIFNoYXJhYmxlRWxl
bWVudERhdGEoY29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhJik7CisgICAgflNoYXJhYmxlRWxlbWVu
dERhdGEoKTsKIAogICAgIHZvaWQqIG1fYXR0cmlidXRlQXJyYXk7CiB9OwogCi1jbGFzcyBNdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMgRWxlbWVudEF0dHJpYnV0ZURhdGEgewor
Y2xhc3MgUHJpdmF0ZUVsZW1lbnREYXRhIDogcHVibGljIEVsZW1lbnREYXRhIHsKIHB1YmxpYzoK
LSAgICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKSB7IH0KLSAgICBNdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEoY29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmKTsKLSAg
ICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhJik7CisgICAgUHJpdmF0ZUVsZW1lbnREYXRhKCkgeyB9CisgICAgUHJpdmF0ZUVsZW1l
bnREYXRhKGNvbnN0IFNoYXJhYmxlRWxlbWVudERhdGEmKTsKKyAgICBQcml2YXRlRWxlbWVudERh
dGEoY29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhJik7CiAKICAgICBtdXRhYmxlIFJlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlOwogICAgIFZlY3RvcjxB
dHRyaWJ1dGUsIDQ+IG1fYXR0cmlidXRlVmVjdG9yOwogfTsKIAotaW5saW5lIFZlY3RvcjxBdHRy
aWJ1dGUsIDQ+JiBFbGVtZW50QXR0cmlidXRlRGF0YTo6bXV0YWJsZUF0dHJpYnV0ZVZlY3Rvcigp
CitpbmxpbmUgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIEVsZW1lbnREYXRhOjphdHRyaWJ1dGVWZWN0
b3IoKQogewotICAgIEFTU0VSVChtX2lzTXV0YWJsZSk7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0
PE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0ZVZlY3RvcjsK
KyAgICBBU1NFUlQoaXNQcml2YXRlKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxQcml2YXRl
RWxlbWVudERhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7CiB9CiAKLWlubGluZSBjb25z
dCBWZWN0b3I8QXR0cmlidXRlLCA0PiYgRWxlbWVudEF0dHJpYnV0ZURhdGE6Om11dGFibGVBdHRy
aWJ1dGVWZWN0b3IoKSBjb25zdAoraW5saW5lIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBF
bGVtZW50RGF0YTo6YXR0cmlidXRlVmVjdG9yKCkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9pc011
dGFibGUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7CisgICAgQVNTRVJUKGlzUHJpdmF0
ZSgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhKj4o
dGhpcyktPm1fYXR0cmlidXRlVmVjdG9yOwogfQogCi1pbmxpbmUgY29uc3QgQXR0cmlidXRlKiBF
bGVtZW50QXR0cmlidXRlRGF0YTo6aW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSBjb25zdAoraW5s
aW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5
KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1faXNNdXRhYmxlKTsKLSAgICByZXR1cm4gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCBBdHRyaWJ1dGUqPigmc3RhdGljX2Nhc3Q8Y29uc3QgSW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVBcnJheSk7CisgICAgQVNT
RVJUKCFpc1ByaXZhdGUoKSk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXR0
cmlidXRlKj4oJnN0YXRpY19jYXN0PGNvbnN0IFNoYXJhYmxlRWxlbWVudERhdGEqPih0aGlzKS0+
bV9hdHRyaWJ1dGVBcnJheSk7CiB9CiAKLWlubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURh
dGE6Omxlbmd0aCgpIGNvbnN0CitpbmxpbmUgc2l6ZV90IEVsZW1lbnREYXRhOjphdHRyaWJ1dGVD
b3VudCgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzTXV0YWJsZSgpKQotICAgICAgICByZXR1cm4gbXV0
YWJsZUF0dHJpYnV0ZVZlY3RvcigpLnNpemUoKTsKKyAgICBpZiAoaXNQcml2YXRlKCkpCisgICAg
ICAgIHJldHVybiBhdHRyaWJ1dGVWZWN0b3IoKS5zaXplKCk7CiAgICAgcmV0dXJuIG1fYXJyYXlT
aXplOwogfQogCi1pbmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudEF0dHJpYnV0
ZURhdGE6OnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgY29uc3QKK2lubGluZSBjb25zdCBT
dHlsZVByb3BlcnR5U2V0KiBFbGVtZW50RGF0YTo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
KSBjb25zdAogewotICAgIGlmICghbV9pc011dGFibGUpCisgICAgaWYgKCFpc1ByaXZhdGUoKSkK
ICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpLT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
LmdldCgpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBQcml2YXRlRWxlbWVudERhdGEq
Pih0aGlzKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZS5nZXQoKTsKIH0KIAotaW5saW5l
IHZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnNldFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpIGNvbnN0CitpbmxpbmUgdm9pZCBF
bGVtZW50RGF0YTo6c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoUGFzc1JlZlB0cjxTdHls
ZVByb3BlcnR5U2V0PiBzdHlsZSkgY29uc3QKIHsKLSAgICBBU1NFUlQobV9pc011dGFibGUpOwot
ICAgIHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMp
LT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlID0gc3R5bGU7CisgICAgQVNTRVJUKGlzUHJp
dmF0ZSgpKTsKKyAgICBzdGF0aWNfY2FzdDxjb25zdCBQcml2YXRlRWxlbWVudERhdGEqPih0aGlz
KS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSA9IHN0eWxlOwogfQogCi1pbmxpbmUgQXR0
cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9t
aWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkKK2lubGluZSBB
dHRyaWJ1dGUqIEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmlu
ZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKQogewogICAgIHNpemVfdCBp
bmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCkBAIC0yMDQsNyArMjA1LDcgQEAgaW5s
aW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29u
c3QgQXRvbWljU3RyaW5nJiBuYW0KICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIGNvbnN0IEF0
dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRv
bWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0Citp
bmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50RGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29u
c3QKIHsKICAgICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSwgc2hv
dWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7CiAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQpAQCAt
MjEyLDkgKzIxMyw5IEBAIGlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluCiAgICAgcmV0dXJuIDA7CiB9
CiAKLWlubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1J
bmRleChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoraW5saW5lIHNpemVfdCBFbGVt
ZW50RGF0YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
IGNvbnN0CiB7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQoKTsgKytpKSB7CiAg
ICAgICAgIGlmIChhdHRyaWJ1dGVJdGVtKGkpLT5uYW1lKCkubWF0Y2hlcyhuYW1lKSkKICAgICAg
ICAgICAgIHJldHVybiBpOwogICAgIH0KQEAgLTIyMywxMyArMjI0LDEyIEBAIGlubGluZSBzaXpl
X3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBRdWFs
aWZpZWROYW1lJiBuCiAKIC8vIFdlIHVzZSBhIGJvb2xlYW4gcGFyYW1ldGVyIGluc3RlYWQgb2Yg
Y2FsbGluZyBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlIHNvIHRoYXQgdGhlIGNhbGxlcgogLy8g
Y2FuIHR1bmUgdGhlIGJlaGF2aW9yIChoYXNBdHRyaWJ1dGUgaXMgY2FzZSBzZW5zaXRpdmUgd2hl
cmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KS4KLWlubGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0
ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJv
b2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKK2lubGluZSBzaXplX3QgRWxlbWVu
dERhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJv
b2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKIHsKLSAgICB1bnNpZ25lZCBsZW4g
PSBsZW5ndGgoKTsKICAgICBib29sIGRvU2xvd0NoZWNrID0gc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZTsKIAogICAgIC8vIE9wdGltaXplIGZvciB0aGUgY2FzZSB3aGVyZSB0aGUgYXR0cmlidXRl
IGV4aXN0cyBhbmQgaXRzIG5hbWUgZXhhY3RseSBtYXRjaGVzLgotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW47ICsraSkgeworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRy
aWJ1dGVDb3VudCgpOyArK2kpIHsKICAgICAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUg
PSBhdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBpZiAoIWF0dHJpYnV0ZS0+bmFtZSgpLmhhc1By
ZWZpeCgpKSB7CiAgICAgICAgICAgICBpZiAobmFtZSA9PSBhdHRyaWJ1dGUtPmxvY2FsTmFtZSgp
KQpAQCAtMjQzLDQ3ICsyNDMsNDcgQEAgaW5saW5lIHNpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmEKICAgICByZXR1
cm4gbm90Rm91bmQ7CiB9CiAKLWlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0
CitpbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50RGF0YTo6Z2V0QXR0cmlidXRlSXRlbShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0
dHJpYnV0ZUNvdW50KCk7ICsraSkgewogICAgICAgICBpZiAoYXR0cmlidXRlSXRlbShpKS0+bmFt
ZSgpLm1hdGNoZXMobmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlSXRlbShpKTsK
ICAgICB9CiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCitp
bmxpbmUgQXR0cmlidXRlKiBFbGVtZW50RGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lKQogewotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgo
KTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJpYnV0ZUNvdW50KCk7
ICsraSkgewogICAgICAgICBpZiAoYXR0cmlidXRlSXRlbShpKS0+bmFtZSgpLm1hdGNoZXMobmFt
ZSkpCiAgICAgICAgICAgICByZXR1cm4gYXR0cmlidXRlSXRlbShpKTsKICAgICB9CiAgICAgcmV0
dXJuIDA7CiB9CiAKLWlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
OjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAoraW5saW5lIGNvbnN0IEF0dHJp
YnV0ZSogRWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgoKSk7
Ci0gICAgaWYgKG1faXNNdXRhYmxlKQotICAgICAgICByZXR1cm4gJm11dGFibGVBdHRyaWJ1dGVW
ZWN0b3IoKS5hdChpbmRleCk7CisgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04o
aW5kZXggPCBhdHRyaWJ1dGVDb3VudCgpKTsKKyAgICBpZiAoaXNQcml2YXRlKCkpCisgICAgICAg
IHJldHVybiAmYXR0cmlidXRlVmVjdG9yKCkuYXQoaW5kZXgpOwogICAgIHJldHVybiAmaW1tdXRh
YmxlQXR0cmlidXRlQXJyYXkoKVtpbmRleF07CiB9CiAKLWlubGluZSBBdHRyaWJ1dGUqIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KQoraW5saW5lIEF0
dHJpYnV0ZSogRWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpCiB7Ci0g
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgoKSk7Ci0g
ICAgcmV0dXJuICZtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuYXQoaW5kZXgpOworICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgYXR0cmlidXRlQ291bnQoKSk7Cisg
ICAgcmV0dXJuICZhdHRyaWJ1dGVWZWN0b3IoKS5hdChpbmRleCk7CiB9CiAKLWlubGluZSB2b2lk
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpkZXJlZigpCitpbmxpbmUgdm9pZCBFbGVtZW50RGF0YTo6
ZGVyZWYoKQogewogICAgIGlmICghZGVyZWZCYXNlKCkpCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2lzTXV0YWJsZSkKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PE11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpOworICAgIGlmIChpc1ByaXZhdGUoKSkKKyAgICAgICAg
ZGVsZXRlIHN0YXRpY19jYXN0PFByaXZhdGVFbGVtZW50RGF0YSo+KHRoaXMpOwogICAgIGVsc2UK
LSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
Kj4odGhpcyk7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTaGFyYWJsZUVsZW1lbnREYXRh
Kj4odGhpcyk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAppbmRleCBhNjFhMDdkLi5lMWM4MzIwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL05vZGUuY3BwCkBAIC0xNzY3LDcgKzE3NjcsNyBAQCB1bnNpZ25lZCBzaG9ydCBOb2Rl
Ojpjb21wYXJlRG9jdW1lbnRQb3NpdGlvbihOb2RlKiBvdGhlck5vZGUpCiAgICAgaWYgKGF0dHIx
ICYmIGF0dHIyICYmIHN0YXJ0MSA9PSBzdGFydDIgJiYgc3RhcnQxKSB7CiAgICAgICAgIC8vIFdl
IGFyZSBjb21wYXJpbmcgdHdvIGF0dHJpYnV0ZXMgb24gdGhlIHNhbWUgbm9kZS4gQ3Jhd2wgb3Vy
IGF0dHJpYnV0ZSBtYXAgYW5kIHNlZSB3aGljaCBvbmUgd2UgaGl0IGZpcnN0LgogICAgICAgICBF
bGVtZW50KiBvd25lcjEgPSBhdHRyMS0+b3duZXJFbGVtZW50KCk7Ci0gICAgICAgIG93bmVyMS0+
dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsgLy8gRm9yY2UgdXBkYXRlIGludmFsaWQgYXR0cmlidXRl
cy4KKyAgICAgICAgb3duZXIxLT51cGRhdGVkRWxlbWVudERhdGEoKTsgLy8gRm9yY2UgdXBkYXRl
IGludmFsaWQgYXR0cmlidXRlcy4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3duZXIxLT5h
dHRyaWJ1dGVDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3Ro
OyArK2kpIHsKICAgICAgICAgICAgIC8vIElmIG5laXRoZXIgb2YgdGhlIHR3byBkZXRlcm1pbmlu
ZyBub2RlcyBpcyBhIGNoaWxkIG5vZGUgYW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1lIGZvciBib3Ro
IGRldGVybWluaW5nIG5vZGVzLCB0aGVuIGFuIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwCmluZGV4IDI3YzMxNGEuLjlmOTlkM2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVu
dC5jcHAKQEAgLTEyOCw5ICsxMjgsOSBAQCBzdGF0aWMgUHJlc2VudGF0aW9uQXR0cmlidXRlQ2Fj
aGVDbGVhbmVyJiBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUNsZWFuZXIoKQogCiB2b2lkIFN0
eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
YXR0cmlidXRlRGF0YSgpKTsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0
cmlidXRlSXNEaXJ0eSk7Ci0gICAgYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNE
aXJ0eSA9IGZhbHNlOworICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICBBU1NFUlQoZWxl
bWVudERhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpOworICAgIGVsZW1lbnREYXRhKCkt
Pm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ID0gZmFsc2U7CiAgICAgaWYgKGNvbnN0IFN0eWxlUHJv
cGVydHlTZXQqIGlubGluZVN0eWxlID0gdGhpcy0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgY29u
c3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4odGhpcyktPnNldFN5bmNocm9uaXplZExhenlBdHRyaWJ1
dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogfQpAQCAtMTQ4LDcgKzE0OCw3
IEBAIENTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlZEVsZW1lbnQ6OnN0eWxlKCkKIAogU3R5bGVQ
cm9wZXJ0eVNldCogU3R5bGVkRWxlbWVudDo6ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKCkKIHsK
LSAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4mIGlubGluZVN0eWxlID0gbXV0YWJsZUF0dHJp
YnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4m
IGlubGluZVN0eWxlID0gZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCktPm1faW5saW5lU3R5bGU7
CiAgICAgaWYgKCFpbmxpbmVTdHlsZSkKICAgICAgICAgaW5saW5lU3R5bGUgPSBTdHlsZVByb3Bl
cnR5U2V0OjpjcmVhdGUoc3RyaWN0VG9DU1NQYXJzZXJNb2RlKGlzSFRNTEVsZW1lbnQoKSAmJiAh
ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpKTsKICAgICBlbHNlIGlmICghaW5saW5lU3R5bGUt
PmlzTXV0YWJsZSgpKQpAQCAtMTYxLDcgKzE2MSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YXR0
cmlidXRlQ2hhbmdlZChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJp
CiAgICAgaWYgKG5hbWUgPT0gc3R5bGVBdHRyKQogICAgICAgICBzdHlsZUF0dHJpYnV0ZUNoYW5n
ZWQobmV3VmFsdWUpOwogICAgIGVsc2UgaWYgKGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUp
KSB7Ci0gICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZUlzRGlydHkgPSB0cnVlOworICAgICAgICBlbGVtZW50RGF0YSgpLT5tX3ByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9IHRydWU7CiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMo
SW5saW5lU3R5bGVDaGFuZ2UpOwogICAgIH0KIApAQCAtMTcyLDE3ICsxNzIsMTcgQEAgUHJvcGVy
dHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZUNTU09N
V3JhcHBlcigpCiB7CiAgICAgaWYgKCFpbmxpbmVTdHlsZSgpIHx8ICFpbmxpbmVTdHlsZSgpLT5o
YXNDU1NPTVdyYXBwZXIoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBtdXRhYmxlQXR0cmlidXRlRGF0YSgpLT5t
X2lubGluZVN0eWxlLT5jc3NTdHlsZURlY2xhcmF0aW9uKCk7CisgICAgUHJvcGVydHlTZXRDU1NT
dHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEo
KS0+bV9pbmxpbmVTdHlsZS0+Y3NzU3R5bGVEZWNsYXJhdGlvbigpOwogICAgIEFTU0VSVChjc3Nv
bVdyYXBwZXIgJiYgY3Nzb21XcmFwcGVyLT5wYXJlbnRFbGVtZW50KCkgPT0gdGhpcyk7CiAgICAg
cmV0dXJuIGNzc29tV3JhcHBlcjsKIH0KIAogaW5saW5lIHZvaWQgU3R5bGVkRWxlbWVudDo6c2V0
SW5saW5lU3R5bGVGcm9tU3RyaW5nKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3U3R5bGVTdHJpbmcp
CiB7Ci0gICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+JiBpbmxpbmVTdHlsZSA9IGF0dHJpYnV0
ZURhdGEoKS0+bV9pbmxpbmVTdHlsZTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4mIGlu
bGluZVN0eWxlID0gZWxlbWVudERhdGEoKS0+bV9pbmxpbmVTdHlsZTsKIAogICAgIC8vIEF2b2lk
IHJlZHVuZGFudCB3b3JrIGlmIHdlJ3JlIHVzaW5nIHNoYXJlZCBhdHRyaWJ1dGUgZGF0YSB3aXRo
IGFscmVhZHkgcGFyc2VkIGlubGluZSBzdHlsZS4KLSAgICBpZiAoaW5saW5lU3R5bGUgJiYgIWF0
dHJpYnV0ZURhdGEoKS0+aXNNdXRhYmxlKCkpCisgICAgaWYgKGlubGluZVN0eWxlICYmICFlbGVt
ZW50RGF0YSgpLT5pc1ByaXZhdGUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgcmVj
b25zdHJ1Y3QgdGhlIHByb3BlcnR5IHNldCBpbnN0ZWFkIG9mIG11dGF0aW5nIGlmIHRoZXJlIGlz
IG5vIENTU09NIHdyYXBwZXIuCkBAIC0yMDUsMTEgKzIwNSwxMSBAQCB2b2lkIFN0eWxlZEVsZW1l
bnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0eWxlU3Ry
aW5nKQogICAgIGlmIChuZXdTdHlsZVN0cmluZy5pc051bGwoKSkgewogICAgICAgICBpZiAoUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBpbmxpbmVTdHlsZUNT
U09NV3JhcHBlcigpKQogICAgICAgICAgICAgY3Nzb21XcmFwcGVyLT5jbGVhclBhcmVudEVsZW1l
bnQoKTsKLSAgICAgICAgbXV0YWJsZUF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZS5jbGVh
cigpOworICAgICAgICBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKS0+bV9pbmxpbmVTdHlsZS5j
bGVhcigpOwogICAgIH0gZWxzZSBpZiAoZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5
KCktPmFsbG93SW5saW5lU3R5bGUoZG9jdW1lbnQoKS0+dXJsKCksIHN0YXJ0TGluZU51bWJlcikp
CiAgICAgICAgIHNldElubGluZVN0eWxlRnJvbVN0cmluZyhuZXdTdHlsZVN0cmluZyk7CiAKLSAg
ICBhdHRyaWJ1dGVEYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ID0gZmFsc2U7CisgICAg
ZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgPSBmYWxzZTsKIAogICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOwogICAgIEluc3BlY3Rvckluc3Ry
dW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihkb2N1bWVudCgpLCB0aGlzKTsKQEAg
LTIxOCw4ICsyMTgsOCBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0eWxlU3RyaW5nKQogdm9pZCBTdHlsZWRFbGVtZW50
OjppbmxpbmVTdHlsZUNoYW5nZWQoKQogewogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5l
U3R5bGVDaGFuZ2UpOwotICAgIEFTU0VSVChhdHRyaWJ1dGVEYXRhKCkpOwotICAgIGF0dHJpYnV0
ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgPSB0cnVlOworICAgIEFTU0VSVChlbGVt
ZW50RGF0YSgpKTsKKyAgICBlbGVtZW50RGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA9
IHRydWU7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVB
dHRyKGRvY3VtZW50KCksIHRoaXMpOwogfQogICAgIApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQg
U3R5bGVkRWxlbWVudDo6cmVtb3ZlQWxsSW5saW5lU3R5bGVQcm9wZXJ0aWVzKCkKIAogdm9pZCBT
dHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VS
TD4mIHVybHMpIGNvbnN0CiB7Ci0gICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGlu
ZVN0eWxlID0gYXR0cmlidXRlRGF0YSgpID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZSgp
IDogMCkKKyAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBlbGVt
ZW50RGF0YSgpID8gZWxlbWVudERhdGEoKS0+aW5saW5lU3R5bGUoKSA6IDApCiAgICAgICAgIGlu
bGluZVN0eWxlLT5hZGRTdWJyZXNvdXJjZVN0eWxlVVJMcyh1cmxzLCBkb2N1bWVudCgpLT5lbGVt
ZW50U2hlZXQoKS0+Y29udGVudHMoKSk7CiB9CiAKQEAgLTM0MCwxMSArMzQwLDExIEBAIHZvaWQg
U3R5bGVkRWxlbWVudDo6cmVidWlsZFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKICAgICAg
ICAgfQogICAgIH0KIAotICAgIC8vIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIGRvZXNu
J3Qgc3RvcmUgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZSBzdHlsZSwgc28gbWFrZSBzdXJlIHdlIGhh
dmUgYSBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEuCi0gICAgRWxlbWVudEF0dHJpYnV0ZURh
dGEqIGF0dHJpYnV0ZURhdGEgPSBtdXRhYmxlQXR0cmlidXRlRGF0YSgpOworICAgIC8vIFNoYXJh
YmxlRWxlbWVudERhdGEgZG9lc24ndCBzdG9yZSBwcmVzZW50YXRpb24gYXR0cmlidXRlIHN0eWxl
LCBzbyBtYWtlIHN1cmUgd2UgaGF2ZSBhIFByaXZhdGVFbGVtZW50RGF0YS4KKyAgICBQcml2YXRl
RWxlbWVudERhdGEqIHByaXZhdGVEYXRhID0gZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCk7CiAK
LSAgICBhdHRyaWJ1dGVEYXRhLT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9
IGZhbHNlOwotICAgIGF0dHJpYnV0ZURhdGEtPnNldFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KHN0eWxlLT5pc0VtcHR5KCkgPyAwIDogc3R5bGUpOworICAgIHByaXZhdGVEYXRhLT5tX3ByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9IGZhbHNlOworICAgIHByaXZhdGVEYXRhLT5z
ZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShzdHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxl
KTsKIAogICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnZhbHVlKQogICAgICAg
ICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5o
IGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAppbmRleCBlNDFhYWVmLi5iZjA2
MjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogYWRkaXRpb25hbFByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgaW52YWxpZGF0
ZVN0eWxlQXR0cmlidXRlKCk7CiAKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+
bV9pbmxpbmVTdHlsZS5nZXQoKSA6IDA7IH0KKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBp
bmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGVsZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgp
LT5tX2lubGluZVN0eWxlLmdldCgpIDogMDsgfQogICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3Vy
ZU11dGFibGVJbmxpbmVTdHlsZSgpOwogICAgIAogICAgIC8vIFVubGlrZSBTdHlsZVByb3BlcnR5
U2V0IHNldHRlcnMsIHRoZXNlIGltcGxlbWVudCBpbnZhbGlkYXRpb24uCkBAIC04NiwxNyArODYs
MTcgQEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQgU3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0
eWxlQXR0cmlidXRlKCkKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICBhdHRy
aWJ1dGVEYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ID0gdHJ1ZTsKKyAgICBBU1NFUlQo
ZWxlbWVudERhdGEoKSk7CisgICAgZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGly
dHkgPSB0cnVlOwogfQogCiBpbmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxl
bWVudDo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQogewotICAgIGlmICghYXR0cmlidXRl
RGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAg
aWYgKGF0dHJpYnV0ZURhdGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkp
CisgICAgaWYgKGVsZW1lbnREYXRhKCktPm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0Rp
cnR5KQogICAgICAgICByZWJ1aWxkUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKTsKLSAgICBy
ZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpOworICAg
IHJldHVybiBlbGVtZW50RGF0YSgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpOwogfQog
CiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlz
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlzdC5jcHAKaW5kZXggNzViYzM0My4u
ODZjNjk3MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DbGFzc0xpc3QuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCBj
b25zdCBTcGFjZVNwbGl0U3RyaW5nJiBDbGFzc0xpc3Q6OmNsYXNzTmFtZXMoKSBjb25zdAogICAg
ICAgICAgICAgbV9jbGFzc05hbWVzRm9yUXVpcmtzTW9kZSA9IGFkb3B0UHRyKG5ldyBTcGFjZVNw
bGl0U3RyaW5nKHZhbHVlKCksIGZhbHNlKSk7CiAgICAgICAgIHJldHVybiAqbV9jbGFzc05hbWVz
Rm9yUXVpcmtzTW9kZS5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZWxlbWVudC0+YXR0cmli
dXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAgcmV0dXJuIG1fZWxlbWVudC0+Y2xhc3NOYW1l
cygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggNTFlZDMyZS4uNzM3
YTQ2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1
Y3Rpb25TaXRlLmNwcApAQCAtMjEwLDcgKzIxMCw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbioK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tlbi0+YXR0cmlidXRlcygpLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0b2tl
bi0+YXR0cmlidXRlcygpLmF0KGkpOwotICAgICAgICBpZiAoIWVsZW1lbnQtPmF0dHJpYnV0ZURh
dGEoKSB8fCAhZWxlbWVudC0+Z2V0QXR0cmlidXRlSXRlbSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCkp
KQorICAgICAgICBpZiAoIWVsZW1lbnQtPmVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnQtPmdldEF0
dHJpYnV0ZUl0ZW0odG9rZW5BdHRyaWJ1dGUubmFtZSgpKSkKICAgICAgICAgICAgIGVsZW1lbnQt
PnNldEF0dHJpYnV0ZSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCksIHRva2VuQXR0cmlidXRlLnZhbHVl
KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCBhN2UzZjg5Li5i
NDhhZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01NDQsMTMgKzU0NCwxMyBA
QCB2b2lkIFNWR0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJgogCiB2b2lkIFNWR0VsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAg
aWYgKCFhdHRyaWJ1dGVEYXRhKCkgfHwgIWF0dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0
dHJpYnV0ZXNBcmVEaXJ0eSkKKyAgICBpZiAoIWVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnREYXRh
KCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFNWR0VsZW1lbnQqIG5vbkNvbnN0VGhpcyA9IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KHRo
aXMpOwogICAgIGlmIChuYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgbm9uQ29uc3RUaGlz
LT5sb2NhbEF0dHJpYnV0ZVRvUHJvcGVydHlNYXAoKS5zeW5jaHJvbml6ZVByb3BlcnRpZXMobm9u
Q29uc3RUaGlzKTsKLSAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmli
dXRlc0FyZURpcnR5ID0gZmFsc2U7CisgICAgICAgIGVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRT
VkdBdHRyaWJ1dGVzQXJlRGlydHkgPSBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAgbm9uQ29u
c3RUaGlzLT5sb2NhbEF0dHJpYnV0ZVRvUHJvcGVydHlNYXAoKS5zeW5jaHJvbml6ZVByb3BlcnR5
KG5vbkNvbnN0VGhpcywgbmFtZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAppbmRleCA3ZjYz
MTJmLi5iYTI5NzZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKQEAgLTc5LDcgKzc5LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0qIHN1cHBsZW1lbnRhbFRyYW5z
Zm9ybSgpIHsgcmV0dXJuIDA7IH0KIAotICAgIHZvaWQgaW52YWxpZGF0ZVNWR0F0dHJpYnV0ZXMo
KSB7IGVuc3VyZUF0dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0
eSA9IHRydWU7IH0KKyAgICB2b2lkIGludmFsaWRhdGVTVkdBdHRyaWJ1dGVzKCkgeyBlbnN1cmVF
bGVtZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5ID0gdHJ1ZTsgfQog
CiAgICAgY29uc3QgSGFzaFNldDxTVkdFbGVtZW50SW5zdGFuY2UqPiYgaW5zdGFuY2VzRm9yRWxl
bWVudCgpIGNvbnN0OwogCg==
</data>
<flag name="commit-queue"
          id="207653"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187753</attachid>
            <date>2013-02-11 19:11:14 -0800</date>
            <delta_ts>2013-02-11 21:21:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109529-v2.diff</filename>
            <type>text/plain</type>
            <size>78863</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCBjNTMzYzQyLi41MmI5MzFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ1
IEBACisyMDEzLTAyLTExICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAg
ICAgICBCZXR0ZXIgbmFtZXMgZm9yIEVsZW1lbnRBdHRyaWJ1dGVEYXRhICYgc3ViY2xhc3Nlcy4K
KyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA5NTI5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRWxlbWVudEF0dHJpYnV0ZURhdGEgPT4g
RWxlbWVudERhdGEKKworICAgICAgICAgICAgQmVjYXVzZSBFbGVtZW50QXR0cmlidXRlRGF0YSB3
b24ndCBiZSBhIGdvb2QgbmFtZSBvbmNlIHdlIG1vdmUgc29tZSBub24tYXR0cmlidXRlIHJlbGF0
ZWQKKyAgICAgICAgICAgIHRoaW5ncyB0byB0aGlzIHN0cnVjdHVyZS4KKworICAgICAgICAtIE11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSA9PiBQcml2YXRlRWxlbWVudERhdGEKKworICAgICAg
ICAgICAgVGhlc2Ugb2JqZWN0cyBjb250YWluIGRhdGEgdGhhdCBpcyBwcml2YXRlIHRvIGEgc3Bl
Y2lmaWMgRWxlbWVudCwgYW5kIGNhbm5vdCBiZSBzaGFyZWQgd2l0aAorICAgICAgICAgICAgb3Ro
ZXIgRWxlbWVudHMuIFRoaXMgaXMgd2hhdCdzIGltcG9ydGFudCBhYm91dCBpdCwgbm90IHRoYXQg
aXRzIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBtdXRhYmxlLgorCisgICAgICAgIC0gSW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEgPT4gU2hhcmFibGVFbGVtZW50RGF0YQorCisgICAgICAgICAg
ICBUaGVzZSBvYmplY3RzIGNhbiBiZSBzaGFyZWQgd2l0aCBvdGhlciBFbGVtZW50cyB0aGF0IGhh
dmUgdGhlIHNhbWUgYXR0cmlidXRlIGtleS92YWx1ZSBwYWlycy4KKyAgICAgICAgICAgIFRoZSBm
YWN0IHRoYXQgaXRzIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBhIGZpeGVkLXNpemUgYXJyYXkgaXMg
dW5pbnRlcmVzdGluZyB0byBjbGllbnRzLgorCisgICAgICAgIEFsc28gcmVuYW1lZCBzb21lIGZ1
bmN0aW9ucyB0byByZWZsZWN0IHRoZSBjaGFuZ2VzIGluIGNsYXNzIG5hbWVzLgorCisgICAgICAg
ICogY3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZl
cjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVz
b2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0
ZXMpOgorICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OmVs
ZW1lbnRBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmFibGVFbGVtZW50RGF0YUNhY2hlS2V5OjpTaGFy
YWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmFibGVFbGVt
ZW50RGF0YUNhY2hlS2V5OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJhYmxl
RWxlbWVudERhdGFDYWNoZUVudHJ5OjpTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSk6Cisg
ICAgICAgIChTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJDb3Jl
OjpEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w6OmNhY2hlZFNoYXJhYmxlRWxlbWVudERhdGFXaXRo
QXR0cmlidXRlcyk6CisgICAgICAgICogZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oOgor
ICAgICAgICAoRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sKToKKyAgICAgICAgKiBkb20vRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpkZXRhY2hBdHRyaWJ1dGUpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0
QXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRTeW5jaHJvbml6ZWRMYXp5QXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZUludGVybmFsKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6OnNob3VsZEludmFsaWRhdGVEaXN0cmlidXRpb25XaGVuQXR0cmlidXRlQ2hhbmdlZCk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6Omhhc0F0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudDo6c2V0QXR0cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1v
dmVBdHRyaWJ1dGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJp
YnV0ZUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmFkZEF0dHJpYnV0ZUlu
dGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZU5TKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnQ6Omhhc0F0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjpoYXNBdHRyaWJ1dGVOUyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpjb21wdXRl
SW5oZXJpdGVkTGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0VVJMQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldE5vbkVtcHR5VVJMQXR0cmli
dXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNsb25lQXR0cmlidXRlc0Zyb21FbGVt
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNyZWF0ZVByaXZhdGVEYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlcG9ydE1lbW9yeVVzYWdlKToKKyAgICAgICAgKiBk
b20vRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlSXRl
bUluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVsZW1lbnREYXRhKToKKyAgICAg
ICAgKEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXBkYXRlZEVsZW1lbnRE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVuc3VyZVVwZGF0ZWRFbGVtZW50RGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVFbGVtZW50RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpmYXN0SGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmZhc3RHZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6aGFzQXR0cmlidXRlc1dpdGhvdXRVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6aWRGb3JTdHlsZVJlc29sdXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xh
c3NOYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVDb3VudCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dDo6dXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
aGFzSUQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQ2xhc3MpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudDo6ZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKToKKyAgICAgICAgKiBk
b20vRWxlbWVudEF0dHJpYnV0ZURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2l6ZUZvclNo
YXJhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudERhdGE6OmNyZWF0ZVNoYXJhYmxlV2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudERhdGE6OmNyZWF0ZVByaXZhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmFibGVFbGVtZW50RGF0YTo6U2hhcmFibGVFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyYWJsZUVsZW1lbnREYXRhOjp+U2hhcmFibGVFbGVtZW50RGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50RGF0YTo6RWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UHJp
dmF0ZUVsZW1lbnREYXRhOjpQcml2YXRlRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudERhdGE6Om1ha2VQcml2YXRlQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
RGF0YTo6bWFrZVNoYXJhYmxlQ29weSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6
YWRkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpyZW1vdmVBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6Omhhc0VxdWl2YWxlbnRBdHRy
aWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpyZXBvcnRNZW1vcnlVc2Fn
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4
U2xvd0Nhc2UpOgorICAgICAgICAqIGRvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5oOgorICAgICAg
ICAoRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmlzUHJpdmF0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6RWxlbWVudERhdGEpOgorICAgICAg
ICAoU2hhcmFibGVFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQcml2YXRlRWxlbWVu
dERhdGE6OlByaXZhdGVFbGVtZW50RGF0YSk6CisgICAgICAgIChQcml2YXRlRWxlbWVudERhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmF0dHJpYnV0ZVZlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6aW1tdXRhYmxlQXR0cmlidXRlQXJyYXkpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnREYXRhOjpwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50RGF0YTo6c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW0pOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleCk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50RGF0YTo6YXR0cmlidXRlSXRlbSk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50RGF0YTo6ZGVyZWYpOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKToKKyAgICAgICAgKiBkb20v
U3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojp1cGRh
dGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjplbnN1
cmVNdXRhYmxlSW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6
YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojppbmxp
bmVTdHlsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50Ojpz
ZXRJbmxpbmVTdHlsZUZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1l
bnQ6OmlubGluZVN0eWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZWRFbGVtZW50
OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVk
RWxlbWVudDo6cmVidWlsZFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBk
b20vU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6aW5s
aW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0
eWxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OnByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBodG1sL0NsYXNzTGlzdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDbGFzc0xpc3Q6OmNsYXNzTmFtZXMpOgorICAgICAgICAqIGh0bWwvSFRN
TElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1
cGRhdGVUeXBlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1
dGVzRnJvbVRva2VuSW50b0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRl
KToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRWxl
bWVudDo6aW52YWxpZGF0ZVNWR0F0dHJpYnV0ZXMpOgorCiAyMDEzLTAyLTEwICBUaW0gSG9ydG9u
ICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04gKHIxMzI0
MjIpOiBQYWdlIGNvbnRlbnQgYW5kIHNjcm9sbGJhcnMgYXJlIGluY29ycmVjdGx5IG9mZnNldCBh
ZnRlciByZXN0b3JpbmcgYSBwYWdlIGZyb20gdGhlIHBhZ2UgY2FjaGUKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9T
dHlsZVJlc29sdmVyLmNwcAppbmRleCAxODI5MGYzLi45MTg0YmY1IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3Nz
L1N0eWxlUmVzb2x2ZXIuY3BwCkBAIC05MjQsNyArOTI0LDcgQEAgYm9vbCBTdHlsZVJlc29sdmVy
OjpjYW5TaGFyZVN0eWxlV2l0aENvbnRyb2woU3R5bGVkRWxlbWVudCogZWxlbWVudCkgY29uc3QK
ICAgICBpZiAoIXRoaXNJbnB1dEVsZW1lbnQgfHwgIW90aGVySW5wdXRFbGVtZW50KQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+YXR0cmlidXRlRGF0
YSgpICE9IG90aGVySW5wdXRFbGVtZW50LT5hdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICBpZiAodGhp
c0lucHV0RWxlbWVudC0+ZWxlbWVudERhdGEoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+ZWxlbWVu
dERhdGEoKSkgewogICAgICAgICBpZiAodGhpc0lucHV0RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0
ZSh0eXBlQXR0cikgIT0gb3RoZXJJbnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0
dHIpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodGhpc0lucHV0RWxl
bWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0dHIpICE9IG90aGVySW5wdXRFbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKHJlYWRvbmx5QXR0cikpCkBAIC05NzQsNyArOTc0LDcgQEAgc3Rh
dGljIGlubGluZSBib29sIGVsZW1lbnRIYXNEaXJlY3Rpb25BdXRvKEVsZW1lbnQqIGVsZW1lbnQp
CiBib29sIFN0eWxlUmVzb2x2ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFm
ZmVjdGluZ0F0dHJpYnV0ZXMoU3R5bGVkRWxlbWVudCogc2hhcmluZ0NhbmRpZGF0ZSkgY29uc3QK
IHsKICAgICBjb25zdCBTdGF0ZSYgc3RhdGUgPSBtX3N0YXRlOwotICAgIGlmIChzdGF0ZS5lbGVt
ZW50LT5hdHRyaWJ1dGVEYXRhKCkgPT0gc2hhcmluZ0NhbmRpZGF0ZS0+YXR0cmlidXRlRGF0YSgp
KQorICAgIGlmIChzdGF0ZS5lbGVtZW50LT5lbGVtZW50RGF0YSgpID09IHNoYXJpbmdDYW5kaWRh
dGUtPmVsZW1lbnREYXRhKCkpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChzdGF0ZS5l
bGVtZW50LT5mYXN0R2V0QXR0cmlidXRlKFhNTE5hbWVzOjpsYW5nQXR0cikgIT0gc2hhcmluZ0Nh
bmRpZGF0ZS0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0dHIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKaW5kZXggMGNjMWIzMy4uYjEzMDFiYSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9BdHRyLmNwcApAQCAtMjEwLDcgKzIxMCw3IEBAIGNvbnN0IEF0b21pY1N0cmluZyYgQXR0cjo6
dmFsdWUoKSBjb25zdAogQXR0cmlidXRlJiBBdHRyOjplbGVtZW50QXR0cmlidXRlKCkKIHsKICAg
ICBBU1NFUlQobV9lbGVtZW50KTsKLSAgICBBU1NFUlQobV9lbGVtZW50LT5hdHRyaWJ1dGVEYXRh
KCkpOworICAgIEFTU0VSVChtX2VsZW1lbnQtPmVsZW1lbnREYXRhKCkpOwogICAgIHJldHVybiAq
bV9lbGVtZW50LT5nZXRBdHRyaWJ1dGVJdGVtKHF1YWxpZmllZE5hbWUoKSk7CiB9CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5jcHAKaW5kZXggYjg1
ZWZmOC4uYzY0OTQwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hh
cmVkT2JqZWN0UG9vbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVk
T2JqZWN0UG9vbC5jcHAKQEAgLTMyLDE0ICszMiwxNCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWNsYXNzIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkgeworY2xhc3Mg
U2hhcmFibGVFbGVtZW50RGF0YUNhY2hlS2V5IHsKIHB1YmxpYzoKLSAgICBJbW11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5KGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlcywgdW5z
aWduZWQgYXR0cmlidXRlQ291bnQpCisgICAgU2hhcmFibGVFbGVtZW50RGF0YUNhY2hlS2V5KGNv
bnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlcywgdW5zaWduZWQgYXR0cmlidXRlQ291bnQpCiAgICAg
ICAgIDogbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiAgICAgICAgICwgbV9hdHRyaWJ1dGVDb3Vu
dChhdHRyaWJ1dGVDb3VudCkKICAgICB7IH0KIAotICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5JiBvdGhlcikgY29uc3QKKyAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgU2hhcmFibGVFbGVtZW50RGF0YUNhY2hlS2V5JiBvdGhlcikg
Y29uc3QKICAgICB7CiAgICAgICAgIGlmIChtX2F0dHJpYnV0ZUNvdW50ICE9IG90aGVyLm1fYXR0
cmlidXRlQ291bnQpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU2LDQwICs1Niw0MCBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1fYXR0cmlidXRlQ291bnQ7CiB9OwogCi1jbGFzcyBJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlRW50cnkgeworY2xhc3MgU2hhcmFibGVF
bGVtZW50RGF0YUNhY2hlRW50cnkgewogcHVibGljOgotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhQ2FjaGVFbnRyeShjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNh
Y2hlS2V5JiBrLCBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiB2KQorICAgIFNoYXJh
YmxlRWxlbWVudERhdGFDYWNoZUVudHJ5KGNvbnN0IFNoYXJhYmxlRWxlbWVudERhdGFDYWNoZUtl
eSYgaywgUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gdikKICAgICAgICAgOiBrZXkoaykKICAgICAg
ICAgLCB2YWx1ZSh2KQogICAgIHsgfQogCi0gICAgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGFDYWNoZUtleSBrZXk7Ci0gICAgUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiB2YWx1ZTsK
KyAgICBTaGFyYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkga2V5OworICAgIFJlZlB0cjxFbGVtZW50
RGF0YT4gdmFsdWU7CiB9OwogCi1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBEb2N1
bWVudFNoYXJlZE9iamVjdFBvb2w6OmNhY2hlZEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
KGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQorUGFzc1JlZlB0cjxFbGVtZW50
RGF0YT4gRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOjpjYWNoZWRTaGFyYWJsZUVsZW1lbnREYXRh
V2l0aEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCiB7CiAg
ICAgQVNTRVJUKCFhdHRyaWJ1dGVzLmlzRW1wdHkoKSk7CiAKLSAgICBJbW11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YUNhY2hlS2V5IGNhY2hlS2V5KGF0dHJpYnV0ZXMuZGF0YSgpLCBhdHRyaWJ1
dGVzLnNpemUoKSk7CisgICAgU2hhcmFibGVFbGVtZW50RGF0YUNhY2hlS2V5IGNhY2hlS2V5KGF0
dHJpYnV0ZXMuZGF0YSgpLCBhdHRyaWJ1dGVzLnNpemUoKSk7CiAgICAgdW5zaWduZWQgY2FjaGVI
YXNoID0gY2FjaGVLZXkuaGFzaCgpOwogCi0gICAgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGFDYWNoZTo6aXRlcmF0b3IgY2FjaGVJdGVyYXRvciA9IG1faW1tdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGFDYWNoZS5hZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKKyAgICBTaGFy
YWJsZUVsZW1lbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3IgPSBtX3NoYXJhYmxl
RWxlbWVudERhdGFDYWNoZS5hZGQoY2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKICAgICBp
ZiAoY2FjaGVJdGVyYXRvci0+dmFsdWUgJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUtPmtleSAhPSBj
YWNoZUtleSkKICAgICAgICAgY2FjaGVIYXNoID0gMDsKIAotICAgIFJlZlB0cjxFbGVtZW50QXR0
cmlidXRlRGF0YT4gYXR0cmlidXRlRGF0YTsKKyAgICBSZWZQdHI8RWxlbWVudERhdGE+IGVsZW1l
bnREYXRhOwogICAgIGlmIChjYWNoZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUpCi0gICAg
ICAgIGF0dHJpYnV0ZURhdGEgPSBjYWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CisgICAgICAg
IGVsZW1lbnREYXRhID0gY2FjaGVJdGVyYXRvci0+dmFsdWUtPnZhbHVlOwogICAgIGVsc2UKLSAg
ICAgICAgYXR0cmlidXRlRGF0YSA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFi
bGUoYXR0cmlidXRlcyk7CisgICAgICAgIGVsZW1lbnREYXRhID0gRWxlbWVudERhdGE6OmNyZWF0
ZVNoYXJhYmxlV2l0aEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAKICAgICBpZiAoIWNhY2hlSGFz
aCB8fCBjYWNoZUl0ZXJhdG9yLT52YWx1ZSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEu
cmVsZWFzZSgpOworICAgICAgICByZXR1cm4gZWxlbWVudERhdGEucmVsZWFzZSgpOwogCi0gICAg
Y2FjaGVJdGVyYXRvci0+dmFsdWUgPSBhZG9wdFB0cihuZXcgSW1tdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGFDYWNoZUVudHJ5KEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXko
YXR0cmlidXRlRGF0YS0+aW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSwgYXR0cmlidXRlRGF0YS0+
bGVuZ3RoKCkpLCBhdHRyaWJ1dGVEYXRhKSk7CisgICAgY2FjaGVJdGVyYXRvci0+dmFsdWUgPSBh
ZG9wdFB0cihuZXcgU2hhcmFibGVFbGVtZW50RGF0YUNhY2hlRW50cnkoU2hhcmFibGVFbGVtZW50
RGF0YUNhY2hlS2V5KGVsZW1lbnREYXRhLT5pbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpLCBlbGVt
ZW50RGF0YS0+YXR0cmlidXRlQ291bnQoKSksIGVsZW1lbnREYXRhKSk7CiAKLSAgICByZXR1cm4g
YXR0cmlidXRlRGF0YS5yZWxlYXNlKCk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRhLnJlbGVhc2Uo
KTsKIH0KIAogRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOjpEb2N1bWVudFNoYXJlZE9iamVjdFBv
b2woKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0
UG9vbC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oCmlu
ZGV4IDU0MGM5MTMuLmNlNDUzNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1
bWVudFNoYXJlZE9iamVjdFBvb2wuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRT
aGFyZWRPYmplY3RQb29sLmgKQEAgLTM0LDIxICszNCwyMSBAQAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBBdHRyaWJ1dGU7Ci1jbGFzcyBFbGVtZW50QXR0cmlidXRlRGF0YTsKLWNsYXNz
IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVFbnRyeTsKK2NsYXNzIEVsZW1lbnRE
YXRhOworY2xhc3MgU2hhcmFibGVFbGVtZW50RGF0YUNhY2hlRW50cnk7CiAKIGNsYXNzIERvY3Vt
ZW50U2hhcmVkT2JqZWN0UG9vbCB7CiBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25QdHI8RG9j
dW1lbnRTaGFyZWRPYmplY3RQb29sPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFB0cihuZXcgRG9j
dW1lbnRTaGFyZWRPYmplY3RQb29sKTsgfQogICAgIH5Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wo
KTsKIAotICAgIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNhY2hlZEltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CisgICAgUGFz
c1JlZlB0cjxFbGVtZW50RGF0YT4gY2FjaGVkU2hhcmFibGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1
dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CiAKIHByaXZhdGU6CiAgICAgRG9jdW1lbnRT
aGFyZWRPYmplY3RQb29sKCk7CiAKLSAgICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIE93blB0
cjxJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVk
PiBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlOwotICAgIEltbXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhQ2FjaGUgbV9pbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hl
OworICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwgT3duUHRyPFNoYXJhYmxlRWxlbWVudERh
dGFDYWNoZUVudHJ5PiwgQWxyZWFkeUhhc2hlZD4gU2hhcmFibGVFbGVtZW50RGF0YUNhY2hlOwor
ICAgIFNoYXJhYmxlRWxlbWVudERhdGFDYWNoZSBtX3NoYXJhYmxlRWxlbWVudERhdGFDYWNoZTsK
IH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCBhMmRmNmU2Li4xYTAwNjZkIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yNzUsOSArMjc1LDkgQEAgUGFzc1JlZlB0cjxFbGVtZW50
PiBFbGVtZW50OjpjbG9uZUVsZW1lbnRXaXRob3V0QXR0cmlidXRlc0FuZENoaWxkcmVuKCkKIAog
UGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpkZXRhY2hBdHRyaWJ1dGUoc2l6ZV90IGluZGV4KQog
ewotICAgIEFTU0VSVChhdHRyaWJ1dGVEYXRhKCkpOworICAgIEFTU0VSVChlbGVtZW50RGF0YSgp
KTsKIAotICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YSgpLT5h
dHRyaWJ1dGVJdGVtKGluZGV4KTsKKyAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVs
ZW1lbnREYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOwogICAgIEFTU0VSVChhdHRyaWJ1dGUp
OwogCiAgICAgUmVmUHRyPEF0dHI+IGF0dHJOb2RlID0gYXR0cklmRXhpc3RzKGF0dHJpYnV0ZS0+
bmFtZSgpKTsKQEAgLTI5MiwxMCArMjkyLDEwIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6
ZGV0YWNoQXR0cmlidXRlKHNpemVfdCBpbmRleCkKIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRy
aWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKLSAgICBpZiAoIWF0dHJpYnV0ZURh
dGEoKSkKKyAgICBpZiAoIWVsZW1lbnREYXRhKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIHNp
emVfdCBpbmRleCA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUp
OworICAgIHNpemVfdCBpbmRleCA9IGVsZW1lbnREYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChuYW1lKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpCiAgICAgICAgIHJldHVybjsKIApA
QCAtMzEyLDcgKzMxMiw3IEBAIHZvaWQgRWxlbWVudDo6c2V0Qm9vbGVhbkF0dHJpYnV0ZShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBib29sIHZhbHVlKQogCiBOYW1lZE5vZGVNYXAqIEVsZW1l
bnQ6OmF0dHJpYnV0ZXMoKSBjb25zdAogewotICAgIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRh
KCk7CisgICAgZW5zdXJlVXBkYXRlZEVsZW1lbnREYXRhKCk7CiAgICAgRWxlbWVudFJhcmVEYXRh
KiByYXJlRGF0YSA9IGNvbnN0X2Nhc3Q8RWxlbWVudCo+KHRoaXMpLT5lbnN1cmVFbGVtZW50UmFy
ZURhdGEoKTsKICAgICBpZiAoTmFtZWROb2RlTWFwKiBhdHRyaWJ1dGVNYXAgPSByYXJlRGF0YS0+
YXR0cmlidXRlTWFwKCkpCiAgICAgICAgIHJldHVybiBhdHRyaWJ1dGVNYXA7CkBAIC0zMzMsMTQg
KzMzMywxNCBAQCBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdAogCiBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmdldEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewotICAgIGlmICghYXR0cmlidXRl
RGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIG51bGxBdG9t
OwogCi0gICAgaWYgKFVOTElLRUxZKG5hbWUgPT0gc3R5bGVBdHRyICYmIGF0dHJpYnV0ZURhdGEo
KS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpKQorICAgIGlmIChVTkxJS0VMWShuYW1lID09IHN0
eWxlQXR0ciAmJiBlbGVtZW50RGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSkpCiAgICAg
ICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCk7CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlmIChV
TkxJS0VMWShhdHRyaWJ1dGVEYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkp
KQorICAgIGlmIChVTkxJS0VMWShlbGVtZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRl
c0FyZURpcnR5KSkKICAgICAgICAgdXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUobmFtZSk7CiAj
ZW5kaWYKIApAQCAtNzA1LDIzICs3MDUsMjMgQEAgc3RhdGljIGlubGluZSBib29sIHNob3VsZEln
bm9yZUF0dHJpYnV0ZUNhc2UoY29uc3QgRWxlbWVudCogZSkKIAogY29uc3QgQXRvbWljU3RyaW5n
JiBFbGVtZW50OjpnZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAog
ewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEoKSkKICAg
ICAgICAgcmV0dXJuIG51bGxBdG9tOwogCiAgICAgYm9vbCBpZ25vcmVDYXNlID0gc2hvdWxkSWdu
b3JlQXR0cmlidXRlQ2FzZSh0aGlzKTsKIAogICAgIC8vIFVwZGF0ZSB0aGUgJ3N0eWxlJyBhdHRy
aWJ1dGUgaWYgaXQncyBpbnZhbGlkIGFuZCBiZWluZyByZXF1ZXN0ZWQ6Ci0gICAgaWYgKGF0dHJp
YnV0ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgJiYgZXF1YWxQb3NzaWJseUlnbm9y
aW5nQ2FzZShuYW1lLCBzdHlsZUF0dHIubG9jYWxOYW1lKCksIGlnbm9yZUNhc2UpKQorICAgIGlm
IChlbGVtZW50RGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSAmJiBlcXVhbFBvc3NpYmx5
SWdub3JpbmdDYXNlKG5hbWUsIHN0eWxlQXR0ci5sb2NhbE5hbWUoKSwgaWdub3JlQ2FzZSkpCiAg
ICAgICAgIHVwZGF0ZVN0eWxlQXR0cmlidXRlKCk7CiAKICNpZiBFTkFCTEUoU1ZHKQotICAgIGlm
IChhdHRyaWJ1dGVEYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkpIHsKKyAg
ICBpZiAoZWxlbWVudERhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkgewog
ICAgICAgICAvLyBXZSdyZSBub3QgcGFzc2luZyBhIG5hbWVzcGFjZSBhcmd1bWVudCBvbiBwdXJw
b3NlLiBTVkdOYW1lczo6KkF0dHIgYXJlIGRlZmluZWQgdy9vIG5hbWVzcGFjZXMgYXMgd2VsbC4K
ICAgICAgICAgdXBkYXRlQW5pbWF0ZWRTVkdBdHRyaWJ1dGUoUXVhbGlmaWVkTmFtZShudWxsQXRv
bSwgbmFtZSwgbnVsbEF0b20pKTsKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChjb25zdCBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1l
LCBpZ25vcmVDYXNlKSkKKyAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVt
ZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIGlnbm9yZUNhc2UpKQogICAgICAgICBy
ZXR1cm4gYXR0cmlidXRlLT52YWx1ZSgpOwogICAgIHJldHVybiBudWxsQXRvbTsKIH0KQEAgLTc0
MCwxOSArNzQwLDE5IEBAIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlKGNvbnN0IEF0b21pY1N0
cmluZyYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSwKIAogICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5h
bWUubG93ZXIoKSA6IG5hbWU7CiAKLSAgICBzaXplX3QgaW5kZXggPSBlbnN1cmVVcGRhdGVkQXR0
cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobG9jYWxOYW1lLCBmYWxzZSk7Cisg
ICAgc2l6ZV90IGluZGV4ID0gZW5zdXJlVXBkYXRlZEVsZW1lbnREYXRhKCktPmdldEF0dHJpYnV0
ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKICAgICBjb25zdCBRdWFsaWZpZWROYW1lJiBx
TmFtZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUoKSA6
IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbnVsbEF0b20pOwogICAgIHNldEF0
dHJpYnV0ZUludGVybmFsKGluZGV4LCBxTmFtZSwgdmFsdWUsIE5vdEluU3luY2hyb25pemF0aW9u
T2ZMYXp5QXR0cmlidXRlKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBz
ZXRBdHRyaWJ1dGVJbnRlcm5hbChlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpLT5nZXRBdHRy
aWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBOb3RJblN5bmNocm9uaXphdGlvbk9m
TGF6eUF0dHJpYnV0ZSk7CisgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZW5zdXJlVXBkYXRlZEVs
ZW1lbnREYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKSwgbmFtZSwgdmFsdWUsIE5v
dEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKIH0KIAogdm9pZCBFbGVtZW50Ojpz
ZXRTeW5jaHJvbml6ZWRMYXp5QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNv
bnN0IEF0b21pY1N0cmluZyYgdmFsdWUpCiB7Ci0gICAgc2V0QXR0cmlidXRlSW50ZXJuYWwobXV0
YWJsZUF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpLCBuYW1lLCB2
YWx1ZSwgSW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOworICAgIHNldEF0dHJpYnV0
ZUludGVybmFsKGVuc3VyZVByaXZhdGVFbGVtZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5k
ZXgobmFtZSksIG5hbWUsIHZhbHVlLCBJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7
CiB9CiAKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZUludGVybmFsKHNpemVfdCBp
bmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdW
YWx1ZSwgU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlIGluU3luY2hyb25pemF0aW9uT2ZM
YXp5QXR0cmlidXRlKQpAQCAtNzczLDEyICs3NzMsMTIgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6
c2V0QXR0cmlidXRlSW50ZXJuYWwoc2l6ZV90IGluZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW0KIAogICAgIGlmIChuZXdWYWx1ZSAhPSBhdHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKSkg
ewogICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbiBBdHRyIG5vZGUgaG9va2VkIHRvIHRoaXMgYXR0
cmlidXRlLCB0aGUgQXR0cjo6c2V0VmFsdWUoKSBjYWxsIGJlbG93Ci0gICAgICAgIC8vIHdpbGwg
d3JpdGUgaW50byB0aGUgRWxlbWVudEF0dHJpYnV0ZURhdGEuCisgICAgICAgIC8vIHdpbGwgd3Jp
dGUgaW50byB0aGUgRWxlbWVudERhdGEuCiAgICAgICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlz
IHNvIGl0IG1ha2VzIHNvbWUgc2Vuc2UuCiAgICAgICAgIGlmIChSZWZQdHI8QXR0cj4gYXR0ck5v
ZGUgPSBpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSA/IDAgOiBhdHRySWZFeGlzdHMo
bmFtZSkpCiAgICAgICAgICAgICBhdHRyTm9kZS0+c2V0VmFsdWUobmV3VmFsdWUpOwogICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtdXRhYmxlQXR0cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVJdGVt
KGluZGV4KS0+c2V0VmFsdWUobmV3VmFsdWUpOworICAgICAgICAgICAgZW5zdXJlUHJpdmF0ZUVs
ZW1lbnREYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT5zZXRWYWx1ZShuZXdWYWx1ZSk7CiAg
ICAgfQogCiAgICAgaWYgKCFpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkKQEAgLTgx
OCwxMCArODE4LDEwIEBAIHZvaWQgRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5lCiAgICAgYm9vbCBzaG91bGRJ
bnZhbGlkYXRlU3R5bGUgPSBmYWxzZTsKIAogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1l
KSkgewotICAgICAgICBBdG9taWNTdHJpbmcgb2xkSWQgPSBhdHRyaWJ1dGVEYXRhKCktPmlkRm9y
U3R5bGVSZXNvbHV0aW9uKCk7CisgICAgICAgIEF0b21pY1N0cmluZyBvbGRJZCA9IGVsZW1lbnRE
YXRhKCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7CiAgICAgICAgIEF0b21pY1N0cmluZyBuZXdJ
ZCA9IG1ha2VJZEZvclN0eWxlUmVzb2x1dGlvbihuZXdWYWx1ZSwgZG9jdW1lbnQoKS0+aW5RdWly
a3NNb2RlKCkpOwogICAgICAgICBpZiAobmV3SWQgIT0gb2xkSWQpIHsKLSAgICAgICAgICAgIGF0
dHJpYnV0ZURhdGEoKS0+c2V0SWRGb3JTdHlsZVJlc29sdXRpb24obmV3SWQpOworICAgICAgICAg
ICAgZWxlbWVudERhdGEoKS0+c2V0SWRGb3JTdHlsZVJlc29sdXRpb24obmV3SWQpOwogICAgICAg
ICAgICAgc2hvdWxkSW52YWxpZGF0ZVN0eWxlID0gdGVzdFNob3VsZEludmFsaWRhdGVTdHlsZSAm
JiBjaGVja05lZWRzU3R5bGVJbnZhbGlkYXRpb25Gb3JJZENoYW5nZShvbGRJZCwgbmV3SWQsIHN0
eWxlUmVzb2x2ZXIpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChuYW1lID09IGNsYXNzQXR0
cikKQEAgLTkyMCwxOSArOTIwLDE2IEBAIHZvaWQgRWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVDaGFu
Z2VkKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3Q2xhc3NTdHJpbmcpCiAgICAgYm9vbCBzaG91bGRJ
bnZhbGlkYXRlU3R5bGUgPSBmYWxzZTsKIAogICAgIGlmIChjbGFzc1N0cmluZ0hhc0NsYXNzTmFt
ZShuZXdDbGFzc1N0cmluZykpIHsKLSAgICAgICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZURhdGEgPSBlbnN1cmVBdHRyaWJ1dGVEYXRhKCk7CisgICAgICAgIGNvbnN0IEVs
ZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVuc3VyZUVsZW1lbnREYXRhKCk7CiAgICAgICAgIGNv
bnN0IGJvb2wgc2hvdWxkRm9sZENhc2UgPSBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKTsKLSAg
ICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyBvbGRDbGFzc2VzID0gYXR0cmlidXRlRGF0YS0+
Y2xhc3NOYW1lcygpOwotCi0gICAgICAgIGF0dHJpYnV0ZURhdGEtPnNldENsYXNzKG5ld0NsYXNz
U3RyaW5nLCBzaG91bGRGb2xkQ2FzZSk7Ci0KLSAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmlu
ZyYgbmV3Q2xhc3NlcyA9IGF0dHJpYnV0ZURhdGEtPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgY29u
c3QgU3BhY2VTcGxpdFN0cmluZyBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEtPmNsYXNzTmFtZXMo
KTsKKyAgICAgICAgZWxlbWVudERhdGEtPnNldENsYXNzKG5ld0NsYXNzU3RyaW5nLCBzaG91bGRG
b2xkQ2FzZSk7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG5ld0NsYXNzZXMgPSBl
bGVtZW50RGF0YS0+Y2xhc3NOYW1lcygpOwogICAgICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUg
PSB0ZXN0U2hvdWxkSW52YWxpZGF0ZVN0eWxlICYmIGNoZWNrU2VsZWN0b3JGb3JDbGFzc0NoYW5n
ZShvbGRDbGFzc2VzLCBuZXdDbGFzc2VzLCAqc3R5bGVSZXNvbHZlcik7Ci0gICAgfSBlbHNlIGlm
IChjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHRoaXMtPmF0dHJp
YnV0ZURhdGEoKSkgewotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2Vz
ID0gYXR0cmlidXRlRGF0YS0+Y2xhc3NOYW1lcygpOworICAgIH0gZWxzZSBpZiAoY29uc3QgRWxl
bWVudERhdGEqIGVsZW1lbnREYXRhID0gdGhpcy0+ZWxlbWVudERhdGEoKSkgeworICAgICAgICBj
b25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEtPmNsYXNzTmFt
ZXMoKTsKICAgICAgICAgc2hvdWxkSW52YWxpZGF0ZVN0eWxlID0gdGVzdFNob3VsZEludmFsaWRh
dGVTdHlsZSAmJiBjaGVja1NlbGVjdG9yRm9yQ2xhc3NDaGFuZ2Uob2xkQ2xhc3NlcywgKnN0eWxl
UmVzb2x2ZXIpOwotCi0gICAgICAgIGF0dHJpYnV0ZURhdGEtPmNsZWFyQ2xhc3MoKTsKKyAgICAg
ICAgZWxlbWVudERhdGEtPmNsZWFyQ2xhc3MoKTsKICAgICB9CiAKICAgICBpZiAoaGFzUmFyZURh
dGEoKSkKQEAgLTk0OCw3ICs5NDUsNyBAQCBib29sIEVsZW1lbnQ6OnNob3VsZEludmFsaWRhdGVE
aXN0cmlidXRpb25XaGVuQXR0cmlidXRlQ2hhbmdlZChFbGVtZW50U2hhZG93KiBlbAogICAgIGNv
bnN0IFNlbGVjdFJ1bGVGZWF0dXJlU2V0JiBmZWF0dXJlU2V0ID0gZWxlbWVudFNoYWRvdy0+ZGlz
dHJpYnV0b3IoKS5lbnN1cmVTZWxlY3RGZWF0dXJlU2V0KGVsZW1lbnRTaGFkb3cpOwogCiAgICAg
aWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG5hbWUpKSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyBvbGRJ
ZCA9IGF0dHJpYnV0ZURhdGEoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKTsKKyAgICAgICAgQXRv
bWljU3RyaW5nIG9sZElkID0gZWxlbWVudERhdGEoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKTsK
ICAgICAgICAgQXRvbWljU3RyaW5nIG5ld0lkID0gbWFrZUlkRm9yU3R5bGVSZXNvbHV0aW9uKG5l
d1ZhbHVlLCBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CiAgICAgICAgIGlmIChuZXdJZCAh
PSBvbGRJZCkgewogICAgICAgICAgICAgaWYgKCFvbGRJZC5pc0VtcHR5KCkgJiYgZmVhdHVyZVNl
dC5oYXNTZWxlY3RvckZvcklkKG9sZElkKSkKQEAgLTk2MSwxNCArOTU4LDE0IEBAIGJvb2wgRWxl
bWVudDo6c2hvdWxkSW52YWxpZGF0ZURpc3RyaWJ1dGlvbldoZW5BdHRyaWJ1dGVDaGFuZ2VkKEVs
ZW1lbnRTaGFkb3cqIGVsCiAgICAgaWYgKG5hbWUgPT0gSFRNTE5hbWVzOjpjbGFzc0F0dHIpIHsK
ICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdDbGFzc1N0cmluZyA9IG5ld1ZhbHVlOwog
ICAgICAgICBpZiAoY2xhc3NTdHJpbmdIYXNDbGFzc05hbWUobmV3Q2xhc3NTdHJpbmcpKSB7Ci0g
ICAgICAgICAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVu
c3VyZUF0dHJpYnV0ZURhdGEoKTsKKyAgICAgICAgICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVt
ZW50RGF0YSA9IGVuc3VyZUVsZW1lbnREYXRhKCk7CiAgICAgICAgICAgICBjb25zdCBib29sIHNo
b3VsZEZvbGRDYXNlID0gZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCk7Ci0gICAgICAgICAgICBj
b25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gYXR0cmlidXRlRGF0YS0+Y2xhc3NO
YW1lcygpOworICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcyA9
IGVsZW1lbnREYXRhLT5jbGFzc05hbWVzKCk7CiAgICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0
U3RyaW5nIG5ld0NsYXNzZXMobmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNlKTsKICAgICAg
ICAgICAgIGlmIChjaGVja1NlbGVjdG9yRm9yQ2xhc3NDaGFuZ2Uob2xkQ2xhc3NlcywgbmV3Q2xh
c3NlcywgZmVhdHVyZVNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IH0gZWxzZSBpZiAoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSB0
aGlzLT5hdHRyaWJ1dGVEYXRhKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJp
bmcmIG9sZENsYXNzZXMgPSBhdHRyaWJ1dGVEYXRhLT5jbGFzc05hbWVzKCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoY29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gdGhpcy0+ZWxlbWVudERh
dGEoKSkgeworICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcyA9
IGVsZW1lbnREYXRhLT5jbGFzc05hbWVzKCk7CiAgICAgICAgICAgICBpZiAoY2hlY2tTZWxlY3Rv
ckZvckNsYXNzQ2hhbmdlKG9sZENsYXNzZXMsIGZlYXR1cmVTZXQpKQogICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC05OTksNyArOTk2LDcgQEAgdm9pZCBFbGVtZW50
OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVW
ZWN0b3IsIEZyYWcKICAgICBBU1NFUlQoIWluRG9jdW1lbnQoKSk7CiAgICAgQVNTRVJUKCFwYXJl
bnROb2RlKCkpOwogCi0gICAgQVNTRVJUKCFtX2F0dHJpYnV0ZURhdGEpOworICAgIEFTU0VSVCgh
bV9lbGVtZW50RGF0YSk7CiAKICAgICBpZiAoYXR0cmlidXRlVmVjdG9yLmlzRW1wdHkoKSkKICAg
ICAgICAgcmV0dXJuOwpAQCAtMTAyNCwxMiArMTAyMSwxMiBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNl
clNldEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZVZlY3Rvciwg
RnJhZwogICAgIH0KIAogICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPnNoYXJlZE9i
amVjdFBvb2woKSkKLSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gZG9jdW1lbnQoKS0+c2hhcmVk
T2JqZWN0UG9vbCgpLT5jYWNoZWRJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShmaWx0ZXJl
ZEF0dHJpYnV0ZXMpOworICAgICAgICBtX2VsZW1lbnREYXRhID0gZG9jdW1lbnQoKS0+c2hhcmVk
T2JqZWN0UG9vbCgpLT5jYWNoZWRTaGFyYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJpYnV0ZXMoZmls
dGVyZWRBdHRyaWJ1dGVzKTsKICAgICBlbHNlCi0gICAgICAgIG1fYXR0cmlidXRlRGF0YSA9IEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFibGUoZmlsdGVyZWRBdHRyaWJ1dGVzKTsK
KyAgICAgICAgbV9lbGVtZW50RGF0YSA9IEVsZW1lbnREYXRhOjpjcmVhdGVTaGFyYWJsZVdpdGhB
dHRyaWJ1dGVzKGZpbHRlcmVkQXR0cmlidXRlcyk7CiAKICAgICAvLyBJdGVyYXRlIG92ZXIgdGhl
IHNldCBvZiBhdHRyaWJ1dGVzIHdlIGFscmVhZHkgaGF2ZSBvbiB0aGUgc3RhY2sgaW4gY2FzZQot
ICAgIC8vIGF0dHJpYnV0ZUNoYW5nZWQgbXV0YXRlcyBtX2F0dHJpYnV0ZURhdGEuCisgICAgLy8g
YXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1fZWxlbWVudERhdGEuCiAgICAgLy8gRklYTUU6IEZp
bmQgYSB3YXkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzLgogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBmaWx0ZXJlZEF0dHJpYnV0ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGF0dHJp
YnV0ZUNoYW5nZWQoZmlsdGVyZWRBdHRyaWJ1dGVzW2ldLm5hbWUoKSwgZmlsdGVyZWRBdHRyaWJ1
dGVzW2ldLnZhbHVlKCkpOwpAQCAtMTAzOCwxOSArMTAzNSwxOSBAQCB2b2lkIEVsZW1lbnQ6OnBh
cnNlclNldEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZVZlY3Rv
ciwgRnJhZwogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICB1cGRh
dGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCkgJiYgYXR0
cmlidXRlRGF0YSgpLT5sZW5ndGgoKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiBlbGVt
ZW50RGF0YSgpLT5hdHRyaWJ1dGVDb3VudCgpOwogfQogCiBib29sIEVsZW1lbnQ6Omhhc0VxdWl2
YWxlbnRBdHRyaWJ1dGVzKGNvbnN0IEVsZW1lbnQqIG90aGVyKSBjb25zdAogewotICAgIGNvbnN0
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gdXBkYXRlZEF0dHJpYnV0ZURh
dGEoKTsKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogb3RoZXJBdHRyaWJ1dGVEYXRh
ID0gb3RoZXItPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgaWYgKGF0dHJpYnV0ZURhdGEg
PT0gb3RoZXJBdHRyaWJ1dGVEYXRhKQorICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0
YSA9IHVwZGF0ZWRFbGVtZW50RGF0YSgpOworICAgIGNvbnN0IEVsZW1lbnREYXRhKiBvdGhlckVs
ZW1lbnREYXRhID0gb3RoZXItPnVwZGF0ZWRFbGVtZW50RGF0YSgpOworICAgIGlmIChlbGVtZW50
RGF0YSA9PSBvdGhlckVsZW1lbnREYXRhKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBpZiAo
YXR0cmlidXRlRGF0YSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEtPmlzRXF1aXZhbGVu
dChvdGhlckF0dHJpYnV0ZURhdGEpOwotICAgIGlmIChvdGhlckF0dHJpYnV0ZURhdGEpCi0gICAg
ICAgIHJldHVybiBvdGhlckF0dHJpYnV0ZURhdGEtPmlzRXF1aXZhbGVudChhdHRyaWJ1dGVEYXRh
KTsKKyAgICBpZiAoZWxlbWVudERhdGEpCisgICAgICAgIHJldHVybiBlbGVtZW50RGF0YS0+aGFz
RXF1aXZhbGVudEF0dHJpYnV0ZXMob3RoZXJFbGVtZW50RGF0YSk7CisgICAgaWYgKG90aGVyRWxl
bWVudERhdGEpCisgICAgICAgIHJldHVybiBvdGhlckVsZW1lbnREYXRhLT5oYXNFcXVpdmFsZW50
QXR0cmlidXRlcyhlbGVtZW50RGF0YSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2OTEs
MTQgKzE2ODgsMTQgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2Rl
KEF0dHIqIGF0dHJOb2RlLCBFeGNlcHRpb25Db2RlJiBlYykKICAgICB9CiAKICAgICB1cGRhdGVJ
bnZhbGlkQXR0cmlidXRlcygpOwotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVE
YXRhID0gbXV0YWJsZUF0dHJpYnV0ZURhdGEoKTsKKyAgICBQcml2YXRlRWxlbWVudERhdGEqIHBy
aXZhdGVEYXRhID0gZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCk7CiAKLSAgICBzaXplX3QgaW5k
ZXggPSBhdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0ck5vZGUtPnF1YWxp
ZmllZE5hbWUoKSk7CisgICAgc2l6ZV90IGluZGV4ID0gcHJpdmF0ZURhdGEtPmdldEF0dHJpYnV0
ZUl0ZW1JbmRleChhdHRyTm9kZS0+cXVhbGlmaWVkTmFtZSgpKTsKICAgICBpZiAoaW5kZXggIT0g
bm90Rm91bmQpIHsKICAgICAgICAgaWYgKG9sZEF0dHJOb2RlKQotICAgICAgICAgICAgZGV0YWNo
QXR0ck5vZGVGcm9tRWxlbWVudFdpdGhWYWx1ZShvbGRBdHRyTm9kZS5nZXQoKSwgYXR0cmlidXRl
RGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPnZhbHVlKCkpOworICAgICAgICAgICAgZGV0YWNo
QXR0ck5vZGVGcm9tRWxlbWVudFdpdGhWYWx1ZShvbGRBdHRyTm9kZS5nZXQoKSwgcHJpdmF0ZURh
dGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpKTsKICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgb2xkQXR0ck5vZGUgPSBBdHRyOjpjcmVhdGUoZG9jdW1lbnQoKSwgYXR0ck5vZGUtPnF1
YWxpZmllZE5hbWUoKSwgYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPnZhbHVl
KCkpOworICAgICAgICAgICAgb2xkQXR0ck5vZGUgPSBBdHRyOjpjcmVhdGUoZG9jdW1lbnQoKSwg
YXR0ck5vZGUtPnF1YWxpZmllZE5hbWUoKSwgcHJpdmF0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5k
ZXgpLT52YWx1ZSgpKTsKICAgICB9CiAKICAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChpbmRleCwg
YXR0ck5vZGUtPnF1YWxpZmllZE5hbWUoKSwgYXR0ck5vZGUtPnZhbHVlKCksIE5vdEluU3luY2hy
b25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKQEAgLTE3MjcsMTAgKzE3MjQsMTAgQEAgUGFzc1Jl
ZlB0cjxBdHRyPiBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHIsIEV4Y2Vw
dGlvbkNvZGUmIGVjKQogCiAgICAgQVNTRVJUKGRvY3VtZW50KCkgPT0gYXR0ci0+ZG9jdW1lbnQo
KSk7CiAKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHVw
ZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEpOworICAgIGNv
bnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IHVwZGF0ZWRFbGVtZW50RGF0YSgpOworICAg
IEFTU0VSVChlbGVtZW50RGF0YSk7CiAKLSAgICBzaXplX3QgaW5kZXggPSBhdHRyaWJ1dGVEYXRh
LT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0ci0+cXVhbGlmaWVkTmFtZSgpKTsKKyAgICBzaXpl
X3QgaW5kZXggPSBlbGVtZW50RGF0YS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGF0dHItPnF1YWxp
ZmllZE5hbWUoKSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7CiAgICAgICAgIGVjID0g
Tk9UX0ZPVU5EX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CkBAIC0xNzY5LDEwICsxNzY2LDEwIEBA
IHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlSW50ZXJuYWwoc2l6ZV90IGluZGV4LCBTeW5j
aHJvbml6YXRpb25PZkxhenlBdHRyaWJ1CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1Q
TElDQVRJT04oaW5kZXggPCBhdHRyaWJ1dGVDb3VudCgpKTsKIAotICAgIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gbXV0YWJsZUF0dHJpYnV0ZURhdGEoKTsKKyAgICBQcml2
YXRlRWxlbWVudERhdGEqIHByaXZhdGVEYXRhID0gZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCk7
CiAKLSAgICBRdWFsaWZpZWROYW1lIG5hbWUgPSBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1dGVJdGVt
KGluZGV4KS0+bmFtZSgpOwotICAgIEF0b21pY1N0cmluZyB2YWx1ZUJlaW5nUmVtb3ZlZCA9IGF0
dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpOworICAgIFF1YWxpZmll
ZE5hbWUgbmFtZSA9IHByaXZhdGVEYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+bmFtZSgpOwor
ICAgIEF0b21pY1N0cmluZyB2YWx1ZUJlaW5nUmVtb3ZlZCA9IHByaXZhdGVEYXRhLT5hdHRyaWJ1
dGVJdGVtKGluZGV4KS0+dmFsdWUoKTsKIAogICAgIGlmICghaW5TeW5jaHJvbml6YXRpb25PZkxh
enlBdHRyaWJ1dGUpIHsKICAgICAgICAgaWYgKCF2YWx1ZUJlaW5nUmVtb3ZlZC5pc051bGwoKSkK
QEAgLTE3ODAsOSArMTc3Nyw5IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlSW50ZXJu
YWwoc2l6ZV90IGluZGV4LCBTeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1CiAgICAgfQogCiAg
ICAgaWYgKFJlZlB0cjxBdHRyPiBhdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhuYW1lKSkKLSAgICAg
ICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVudFdpdGhWYWx1ZShhdHRyTm9kZS5nZXQoKSwgYXR0
cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPnZhbHVlKCkpOworICAgICAgICBkZXRh
Y2hBdHRyTm9kZUZyb21FbGVtZW50V2l0aFZhbHVlKGF0dHJOb2RlLmdldCgpLCBwcml2YXRlRGF0
YS0+YXR0cmlidXRlSXRlbShpbmRleCktPnZhbHVlKCkpOwogCi0gICAgYXR0cmlidXRlRGF0YS0+
cmVtb3ZlQXR0cmlidXRlKGluZGV4KTsKKyAgICBwcml2YXRlRGF0YS0+cmVtb3ZlQXR0cmlidXRl
KGluZGV4KTsKIAogICAgIGlmICghaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCiAg
ICAgICAgIGRpZFJlbW92ZUF0dHJpYnV0ZShuYW1lKTsKQEAgLTE3OTIsMjAgKzE3ODksMjAgQEAg
dm9pZCBFbGVtZW50OjphZGRBdHRyaWJ1dGVJbnRlcm5hbChjb25zdCBRdWFsaWZpZWROYW1lJiBu
YW1lLCBjb25zdCBBdG9taWNTdHJpbmcKIHsKICAgICBpZiAoIWluU3luY2hyb25pemF0aW9uT2ZM
YXp5QXR0cmlidXRlKQogICAgICAgICB3aWxsTW9kaWZ5QXR0cmlidXRlKG5hbWUsIG51bGxBdG9t
LCB2YWx1ZSk7Ci0gICAgbXV0YWJsZUF0dHJpYnV0ZURhdGEoKS0+YWRkQXR0cmlidXRlKEF0dHJp
YnV0ZShuYW1lLCB2YWx1ZSkpOworICAgIGVuc3VyZVByaXZhdGVFbGVtZW50RGF0YSgpLT5hZGRB
dHRyaWJ1dGUoQXR0cmlidXRlKG5hbWUsIHZhbHVlKSk7CiAgICAgaWYgKCFpblN5bmNocm9uaXph
dGlvbk9mTGF6eUF0dHJpYnV0ZSkKICAgICAgICAgZGlkQWRkQXR0cmlidXRlKG5hbWUsIHZhbHVl
KTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5n
JiBuYW1lKQogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxlbWVudERh
dGEoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgQXRvbWljU3RyaW5nIGxvY2FsTmFtZSA9IHNo
b3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UodGhpcykgPyBuYW1lLmxvd2VyKCkgOiBuYW1lOwotICAg
IHNpemVfdCBpbmRleCA9IGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxv
Y2FsTmFtZSwgZmFsc2UpOworICAgIHNpemVfdCBpbmRleCA9IGVsZW1lbnREYXRhKCktPmdldEF0
dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKICAgICBpZiAoaW5kZXggPT0gbm90
Rm91bmQpIHsKLSAgICAgICAgaWYgKFVOTElLRUxZKGxvY2FsTmFtZSA9PSBzdHlsZUF0dHIpICYm
IGF0dHJpYnV0ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgJiYgaXNTdHlsZWRFbGVt
ZW50KCkpCisgICAgICAgIGlmIChVTkxJS0VMWShsb2NhbE5hbWUgPT0gc3R5bGVBdHRyKSAmJiBl
bGVtZW50RGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSAmJiBpc1N0eWxlZEVsZW1lbnQo
KSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFN0eWxlZEVsZW1lbnQqPih0aGlzKS0+cmVtb3Zl
QWxsSW5saW5lU3R5bGVQcm9wZXJ0aWVzKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0x
ODIwLDEwICsxODE3LDEwIEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTlMoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0CiAKIFBhc3NSZWZQdHI8
QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUp
CiB7Ci0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSB1cGRh
dGVkQXR0cmlidXRlRGF0YSgpOwotICAgIGlmICghYXR0cmlidXRlRGF0YSkKKyAgICBjb25zdCBF
bGVtZW50RGF0YSogZWxlbWVudERhdGEgPSB1cGRhdGVkRWxlbWVudERhdGEoKTsKKyAgICBpZiAo
IWVsZW1lbnREYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgc2hvdWxkSWdu
b3JlQXR0cmlidXRlQ2FzZSh0aGlzKSk7CisgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUg
PSBlbGVtZW50RGF0YS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKHRoaXMpKTsKICAgICBpZiAoIWF0dHJpYnV0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAg
ICAgcmV0dXJuIGVuc3VyZUF0dHIoYXR0cmlidXRlLT5uYW1lKCkpOwpAQCAtMTgzMSwxMCArMTgy
OCwxMCBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGUoY29uc3Qg
QXRvbWljU3RyaW5nJiBuYW1lKQogCiBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJp
YnV0ZU5vZGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbE5hbWUpCiB7Ci0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0
dHJpYnV0ZURhdGEgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwotICAgIGlmICghYXR0cmlidXRl
RGF0YSkKKyAgICBjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSB1cGRhdGVkRWxlbWVu
dERhdGEoKTsKKyAgICBpZiAoIWVsZW1lbnREYXRhKQogICAgICAgICByZXR1cm4gMDsKLSAgICBj
b25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0
ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKKyAg
ICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJ
dGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSk7CiAg
ICAgaWYgKCFhdHRyaWJ1dGUpCiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBlbnN1cmVB
dHRyKGF0dHJpYnV0ZS0+bmFtZSgpKTsKQEAgLTE4NDIsMjEgKzE4MzksMjEgQEAgUGFzc1JlZlB0
cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2RlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBu
YW1lc3BhY2VVUkksIGMKIAogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGUoY29uc3QgQXRvbWlj
U3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlm
ICghZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgLy8gVGhpcyBj
YWxsIHRvIFN0cmluZzo6bG93ZXIoKSBzZWVtcyB0byBiZSByZXF1aXJlZCBidXQKICAgICAvLyB0
aGVyZSBtYXkgYmUgYSB3YXkgdG8gcmVtb3ZlIGl0LgogICAgIEF0b21pY1N0cmluZyBsb2NhbE5h
bWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFt
ZTsKLSAgICByZXR1cm4gdXBkYXRlZEF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShs
b2NhbE5hbWUsIGZhbHNlKTsKKyAgICByZXR1cm4gdXBkYXRlZEVsZW1lbnREYXRhKCktPmdldEF0
dHJpYnV0ZUl0ZW0obG9jYWxOYW1lLCBmYWxzZSk7CiB9CiAKIGJvb2wgRWxlbWVudDo6aGFzQXR0
cmlidXRlTlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGNvbnN0IEF0b21pY1N0
cmluZyYgbG9jYWxOYW1lKSBjb25zdAogewotICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBhdHRyaWJ1dGVEYXRhID0gdXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKLSAgICBpZiAoIWF0dHJp
YnV0ZURhdGEpCisgICAgY29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gdXBkYXRlZEVs
ZW1lbnREYXRhKCk7CisgICAgaWYgKCFlbGVtZW50RGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5h
bWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSk7CisgICAgcmV0dXJuIGVsZW1l
bnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFt
ZSwgbmFtZXNwYWNlVVJJKSk7CiB9CiAKIENTU1N0eWxlRGVjbGFyYXRpb24gKkVsZW1lbnQ6OnN0
eWxlKCkKQEAgLTIxNjMsMTEgKzIxNjAsMTEgQEAgQXRvbWljU3RyaW5nIEVsZW1lbnQ6OmNvbXB1
dGVJbmhlcml0ZWRMYW5ndWFnZSgpIGNvbnN0CiAgICAgLy8gVGhlIGxhbmd1YWdlIHByb3BlcnR5
IGlzIGluaGVyaXRlZCwgc28gd2UgaXRlcmF0ZSBvdmVyIHRoZSBwYXJlbnRzIHRvIGZpbmQgdGhl
IGZpcnN0IGxhbmd1YWdlLgogICAgIGRvIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUo
KSkgewotICAgICAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1
dGVEYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVEYXRhKCkp
IHsKKyAgICAgICAgICAgIGlmIChjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBzdGF0
aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obiktPmVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgICAg
ICAgICAvLyBTcGVjOiB4bWw6bGFuZyB0YWtlcyBwcmVjZWRlbmNlIC0tIGh0dHA6Ly93d3cudzMu
b3JnL1RSL3hodG1sMS8jQ183Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSog
YXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbShYTUxOYW1lczo6bGFu
Z0F0dHIpKQorICAgICAgICAgICAgICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFhNTE5hbWVzOjpsYW5nQXR0cikpCiAgICAg
ICAgICAgICAgICAgICAgIHZhbHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOwotICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+
Z2V0QXR0cmlidXRlSXRlbShIVE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnREYXRhLT5nZXRBdHRy
aWJ1dGVJdGVtKEhUTUxOYW1lczo6bGFuZ0F0dHIpKQogICAgICAgICAgICAgICAgICAgICB2YWx1
ZSA9IGF0dHJpYnV0ZS0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlm
IChuLT5pc0RvY3VtZW50Tm9kZSgpKSB7CkBAIC0yMzMxLDcgKzIzMjgsNyBAQCBET01TdHJpbmdN
YXAqIEVsZW1lbnQ6OmRhdGFzZXQoKQogS1VSTCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1dGUoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0g
ICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkgeworICAgIGlmIChlbGVtZW50RGF0YSgpKSB7CiAgICAg
ICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFt
ZSkpCiAgICAgICAgICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1dGUoKmF0dHJpYnV0ZSkpOwogICAg
IH0KQEAgLTIzNDIsNyArMjMzOSw3IEBAIEtVUkwgRWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiBLVVJMIEVsZW1lbnQ6OmdldE5vbkVtcHR5
VVJMQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAjaWYgIUFT
U0VSVF9ESVNBQkxFRAotICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICBpZiAoZWxlbWVu
dERhdGEoKSkgewogICAgICAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBnZXRB
dHRyaWJ1dGVJdGVtKG5hbWUpKQogICAgICAgICAgICAgQVNTRVJUKGlzVVJMQXR0cmlidXRlKCph
dHRyaWJ1dGUpKTsKICAgICB9CkBAIC0yNzQ5LDggKzI3NDYsOCBAQCB2b2lkIEVsZW1lbnQ6OmNs
b25lQXR0cmlidXRlc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmIG90aGVyKQogICAgICAgICBk
ZXRhY2hBbGxBdHRyTm9kZXNGcm9tRWxlbWVudCgpOwogCiAgICAgb3RoZXIudXBkYXRlSW52YWxp
ZEF0dHJpYnV0ZXMoKTsKLSAgICBpZiAoIW90aGVyLm1fYXR0cmlidXRlRGF0YSkgewotICAgICAg
ICBtX2F0dHJpYnV0ZURhdGEuY2xlYXIoKTsKKyAgICBpZiAoIW90aGVyLm1fZWxlbWVudERhdGEp
IHsKKyAgICAgICAgbV9lbGVtZW50RGF0YS5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCkBAIC0yNzY2LDIwICsyNzYzLDIwIEBAIHZvaWQgRWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVz
RnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYgb3RoZXIpCiAgICAgaWYgKCFvbGROYW1lLmlzTnVs
bCgpIHx8ICFuZXdOYW1lLmlzTnVsbCgpKQogICAgICAgICB1cGRhdGVOYW1lKG9sZE5hbWUsIG5l
d05hbWUpOwogCi0gICAgLy8gSWYgJ290aGVyJyBoYXMgYSBtdXRhYmxlIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhLCBjb252ZXJ0IGl0IHRvIGFuIGltbXV0YWJsZSBvbmUgc28gd2UgY2FuIHNoYXJlIGl0
IGJldHdlZW4gYm90aCBlbGVtZW50cy4KKyAgICAvLyBJZiAnb3RoZXInIGhhcyBhIHByaXZhdGUg
RWxlbWVudERhdGEsIGNvbnZlcnQgaXQgdG8gYSBzaGFyYWJsZSBvbmUgc28gd2UgY2FuIHVzZSBp
dCBmb3IgYm90aCBlbGVtZW50cy4KICAgICAvLyBXZSBjYW4gb25seSBkbyB0aGlzIGlmIHRoZXJl
IGlzIG5vIENTU09NIHdyYXBwZXIgZm9yIG90aGVyJ3MgaW5saW5lIHN0eWxlLCBhbmQgdGhlcmUg
YXJlIG5vIHByZXNlbnRhdGlvbiBhdHRyaWJ1dGVzLgotICAgIGlmIChvdGhlci5tX2F0dHJpYnV0
ZURhdGEtPmlzTXV0YWJsZSgpCi0gICAgICAgICYmICFvdGhlci5tX2F0dHJpYnV0ZURhdGEtPnBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKLSAgICAgICAgJiYgKCFvdGhlci5tX2F0dHJpYnV0
ZURhdGEtPmlubGluZVN0eWxlKCkgfHwgIW90aGVyLm1fYXR0cmlidXRlRGF0YS0+aW5saW5lU3R5
bGUoKS0+aGFzQ1NTT01XcmFwcGVyKCkpKQotICAgICAgICBjb25zdF9jYXN0PEVsZW1lbnQmPihv
dGhlcikubV9hdHRyaWJ1dGVEYXRhID0gb3RoZXIubV9hdHRyaWJ1dGVEYXRhLT5tYWtlSW1tdXRh
YmxlQ29weSgpOworICAgIGlmIChvdGhlci5tX2VsZW1lbnREYXRhLT5pc1ByaXZhdGUoKQorICAg
ICAgICAmJiAhb3RoZXIubV9lbGVtZW50RGF0YS0+cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
KQorICAgICAgICAmJiAoIW90aGVyLm1fZWxlbWVudERhdGEtPmlubGluZVN0eWxlKCkgfHwgIW90
aGVyLm1fZWxlbWVudERhdGEtPmlubGluZVN0eWxlKCktPmhhc0NTU09NV3JhcHBlcigpKSkKKyAg
ICAgICAgY29uc3RfY2FzdDxFbGVtZW50Jj4ob3RoZXIpLm1fZWxlbWVudERhdGEgPSBvdGhlci5t
X2VsZW1lbnREYXRhLT5tYWtlU2hhcmFibGVDb3B5KCk7CiAKLSAgICBpZiAoIW90aGVyLm1fYXR0
cmlidXRlRGF0YS0+aXNNdXRhYmxlKCkpCi0gICAgICAgIG1fYXR0cmlidXRlRGF0YSA9IG90aGVy
Lm1fYXR0cmlidXRlRGF0YTsKKyAgICBpZiAoIW90aGVyLm1fZWxlbWVudERhdGEtPmlzUHJpdmF0
ZSgpKQorICAgICAgICBtX2VsZW1lbnREYXRhID0gb3RoZXIubV9lbGVtZW50RGF0YTsKICAgICBl
bHNlCi0gICAgICAgIG1fYXR0cmlidXRlRGF0YSA9IG90aGVyLm1fYXR0cmlidXRlRGF0YS0+bWFr
ZU11dGFibGVDb3B5KCk7CisgICAgICAgIG1fZWxlbWVudERhdGEgPSBvdGhlci5tX2VsZW1lbnRE
YXRhLT5tYWtlUHJpdmF0ZUNvcHkoKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
X2F0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgQXR0cmlidXRl
KiBhdHRyaWJ1dGUgPSBjb25zdF9jYXN0PGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4obV9h
dHRyaWJ1dGVEYXRhLmdldCgpKS0+YXR0cmlidXRlSXRlbShpKTsKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgbV9lbGVtZW50RGF0YS0+YXR0cmlidXRlQ291bnQoKTsgKytpKSB7CisgICAg
ICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gY29uc3RfY2FzdDxjb25zdCBFbGVtZW50
RGF0YSo+KG1fZWxlbWVudERhdGEuZ2V0KCkpLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICBh
dHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVlKCkpOwog
ICAgIH0KIH0KQEAgLTI3OTAsMTIgKzI3ODcsMTIgQEAgdm9pZCBFbGVtZW50OjpjbG9uZURhdGFG
cm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKICAgICBjb3B5Tm9uQXR0cmlidXRlUHJv
cGVydGllc0Zyb21FbGVtZW50KG90aGVyKTsKIH0KIAotdm9pZCBFbGVtZW50OjpjcmVhdGVNdXRh
YmxlQXR0cmlidXRlRGF0YSgpCit2b2lkIEVsZW1lbnQ6OmNyZWF0ZVByaXZhdGVEYXRhKCkKIHsK
LSAgICBpZiAoIW1fYXR0cmlidXRlRGF0YSkKLSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gRWxl
bWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZSgpOworICAgIGlmICghbV9lbGVtZW50RGF0YSkKKyAg
ICAgICAgbV9lbGVtZW50RGF0YSA9IEVsZW1lbnREYXRhOjpjcmVhdGVQcml2YXRlKCk7CiAgICAg
ZWxzZQotICAgICAgICBtX2F0dHJpYnV0ZURhdGEgPSBtX2F0dHJpYnV0ZURhdGEtPm1ha2VNdXRh
YmxlQ29weSgpOworICAgICAgICBtX2VsZW1lbnREYXRhID0gbV9lbGVtZW50RGF0YS0+bWFrZVBy
aXZhdGVDb3B5KCk7CiB9CiAKIHZvaWQgRWxlbWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKQEAgLTI4MDMsNyArMjgwMCw3IEBA
IHZvaWQgRWxlbWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5
T2JqZWN0SW5mbykgY29uc3QKICAgICBNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlPYmplY3RJ
bmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSk7CiAgICAgQ29udGFpbmVyTm9kZTo6
cmVwb3J0TWVtb3J5VXNhZ2UobWVtb3J5T2JqZWN0SW5mbyk7CiAgICAgaW5mby5hZGRNZW1iZXIo
bV90YWdOYW1lLCAidGFnTmFtZSIpOwotICAgIGluZm8uYWRkTWVtYmVyKG1fYXR0cmlidXRlRGF0
YSwgImF0dHJpYnV0ZURhdGEiKTsKKyAgICBpbmZvLmFkZE1lbWJlcihtX2VsZW1lbnREYXRhLCAi
ZWxlbWVudERhdGEiKTsKIH0KIAogI2lmIEVOQUJMRShTVkcpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaAppbmRl
eCBkZjE2MzNkLi42OTE4ODIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgKQEAgLTMsNyArMyw3IEBACiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKICAqICAgICAg
ICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKLSAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCwgMjAx
MSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDMs
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAsIDIwMTEsIDIwMTMgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xODAs
OCArMTgwLDggQEAgcHVibGljOgogICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSh1
bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAgICAgY29uc3QgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJ
dGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmKSBjb25zdDsKICAgICBBdHRyaWJ1dGUqIGdldEF0dHJp
YnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYpOwotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJ
dGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gYXR0cmli
dXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7IH0KLSAgICBzaXplX3QgZ2V0
QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJ
Z25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmdldEF0
dHJpYnV0ZUl0ZW1JbmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsgfQorICAg
IHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkg
Y29uc3QgeyByZXR1cm4gZWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUp
OyB9CisgICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QgeyByZXR1cm4gZWxl
bWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJp
YnV0ZUNhc2UpOyB9CiAKICAgICB2b2lkIHNjcm9sbEludG9WaWV3KGJvb2wgYWxpZ25Ub1RvcCA9
IHRydWUpOwogICAgIHZvaWQgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChib29sIGNlbnRlcklmTmVl
ZGVkID0gdHJ1ZSk7CkBAIC0yNjUsMTEgKzI2NSwxMyBAQCBwdWJsaWM6CiAgICAgLy8gT25seSBj
YWxsZWQgYnkgdGhlIHBhcnNlciBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNvbnN0cnVjdGlv
bi4KICAgICB2b2lkIHBhcnNlclNldEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
LCBGcmFnbWVudFNjcmlwdGluZ1Blcm1pc3Npb24pOwogCi0gICAgY29uc3QgRWxlbWVudEF0dHJp
YnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEu
Z2V0KCk7IH0KLSAgICBFbGVtZW50QXR0cmlidXRlRGF0YSogbXV0YWJsZUF0dHJpYnV0ZURhdGEo
KTsKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlQXR0cmlidXRlRGF0YSgp
OwotICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiB1cGRhdGVkQXR0cmlidXRlRGF0YSgp
IGNvbnN0OwotICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBlbnN1cmVVcGRhdGVkQXR0
cmlidXRlRGF0YSgpIGNvbnN0OworICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSgp
IGNvbnN0IHsgcmV0dXJuIG1fZWxlbWVudERhdGEuZ2V0KCk7IH0KKyAgICBjb25zdCBFbGVtZW50
RGF0YSogdXBkYXRlZEVsZW1lbnREYXRhKCkgY29uc3Q7CisgICAgY29uc3QgRWxlbWVudERhdGEq
IGVuc3VyZVVwZGF0ZWRFbGVtZW50RGF0YSgpIGNvbnN0OworICAgIC8vIEZJWE1FOiBSZW1vdmUg
dGhpcy4KKyAgICBjb25zdCBFbGVtZW50RGF0YSogZW5zdXJlRWxlbWVudERhdGEoKSBjb25zdDsK
KworICAgIFByaXZhdGVFbGVtZW50RGF0YSogZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCk7CiAK
ICAgICAvLyBDbG9uZXMgYXR0cmlidXRlcyBvbmx5LgogICAgIHZvaWQgY2xvbmVBdHRyaWJ1dGVz
RnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYpOwpAQCAtNjAwLDcgKzYwMiw3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIHVucmVnaXN0ZXJOYW1lZEZsb3dDb250ZW50Tm9kZSgpOwogCi0gICAgdm9p
ZCBjcmVhdGVNdXRhYmxlQXR0cmlidXRlRGF0YSgpOworICAgIHZvaWQgY3JlYXRlUHJpdmF0ZURh
dGEoKTsKIAogICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZURpc3RyaWJ1dGlvbldoZW5BdHRyaWJ1
dGVDaGFuZ2VkKEVsZW1lbnRTaGFkb3cqLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJik7CiAKQEAgLTYxMiw3ICs2MTQsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
cmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CiAKLSAgICBSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURh
dGE+IG1fYXR0cmlidXRlRGF0YTsKKyAgICBSZWZQdHI8RWxlbWVudERhdGE+IG1fZWxlbWVudERh
dGE7CiB9OwogICAgIAogaW5saW5lIEVsZW1lbnQqIHRvRWxlbWVudChOb2RlKiBub2RlKQpAQCAt
NjcyLDI1ICs2NzQsMjUgQEAgaW5saW5lIEVsZW1lbnQqIEVsZW1lbnQ6Om5leHRFbGVtZW50U2li
bGluZygpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKIH0KIAot
aW5saW5lIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBFbGVtZW50Ojp1cGRhdGVkQXR0cmli
dXRlRGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgRWxlbWVudERhdGEqIEVsZW1lbnQ6OnVwZGF0
ZWRFbGVtZW50RGF0YSgpIGNvbnN0CiB7CiAgICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsK
LSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgpOwog
fQogCi1pbmxpbmUgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIEVsZW1lbnQ6OmVuc3VyZUF0
dHJpYnV0ZURhdGEoKQoraW5saW5lIGNvbnN0IEVsZW1lbnREYXRhKiBFbGVtZW50OjplbnN1cmVV
cGRhdGVkRWxlbWVudERhdGEoKSBjb25zdAogewotICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpCi0g
ICAgICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCk7Ci0gICAgcmV0dXJuIG11dGFibGVBdHRyaWJ1
dGVEYXRhKCk7CisgICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoZWxlbWVu
dERhdGEoKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnREYXRhKCk7CisgICAgcmV0dXJuIGNvbnN0
X2Nhc3Q8RWxlbWVudCo+KHRoaXMpLT5lbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKTsKIH0KIAot
aW5saW5lIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBFbGVtZW50OjplbnN1cmVVcGRhdGVk
QXR0cmlidXRlRGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgRWxlbWVudERhdGEqIEVsZW1lbnQ6
OmVuc3VyZUVsZW1lbnREYXRhKCkgY29uc3QKIHsKLSAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRl
cygpOwotICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVE
YXRhKCk7Ci0gICAgcmV0dXJuIGNvbnN0X2Nhc3Q8RWxlbWVudCo+KHRoaXMpLT5tdXRhYmxlQXR0
cmlidXRlRGF0YSgpOworICAgIGlmIChlbGVtZW50RGF0YSgpKQorICAgICAgICByZXR1cm4gZWxl
bWVudERhdGEoKTsKKyAgICByZXR1cm4gY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcyktPmVuc3Vy
ZVByaXZhdGVFbGVtZW50RGF0YSgpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVO
YW1lKGNvbnN0IEF0b21pY1N0cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdO
YW1lKQpAQCAtNzMzLDEzICs3MzUsMTMgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6dXBkYXRlSWQo
VHJlZVNjb3BlKiBzY29wZSwgY29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QKIGlubGlu
ZSBib29sIEVsZW1lbnQ6OmZhc3RIYXNBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSkgY29uc3QKIHsKICAgICBBU1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQobmFtZSkp
OwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCkgJiYgZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsK
KyAgICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogfQog
CiBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZhc3RBdHRyaWJ1
dGVMb29rdXBBbGxvd2VkKG5hbWUpKTsKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAg
aWYgKGVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmli
dXRlID0gZ2V0QXR0cmlidXRlSXRlbShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1
dGUtPnZhbHVlKCk7CiAgICAgfQpAQCAtNzQ4LDEzICs3NTAsMTMgQEAgaW5saW5lIGNvbnN0IEF0
b21pY1N0cmluZyYgRWxlbWVudDo6ZmFzdEdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKQogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0
ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiAhYXR0cmlidXRlRGF0
YSgpLT5pc0VtcHR5KCk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRhKCkgJiYgZWxlbWVudERhdGEo
KS0+YXR0cmlidXRlQ291bnQoKTsKIH0KIAogaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxl
bWVudDo6aWRGb3JTdHlsZVJlc29sdXRpb24oKSBjb25zdAogewogICAgIEFTU0VSVChoYXNJRCgp
KTsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOwor
ICAgIHJldHVybiBlbGVtZW50RGF0YSgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOwogfQogCiBp
bmxpbmUgYm9vbCBFbGVtZW50Ojppc0lkQXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1l
JiBhdHRyaWJ1dGVOYW1lKSBjb25zdApAQCAtNzg0LDYzICs3ODYsNjMgQEAgaW5saW5lIHZvaWQg
RWxlbWVudDo6c2V0SWRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIGlubGlu
ZSBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBFbGVtZW50OjpjbGFzc05hbWVzKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQoaGFzQ2xhc3MoKSk7Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0g
ICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+Y2xhc3NOYW1lcygpOworICAgIEFTU0VSVChlbGVt
ZW50RGF0YSgpKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1lcygpOwogfQog
CiBpbmxpbmUgc2l6ZV90IEVsZW1lbnQ6OmF0dHJpYnV0ZUNvdW50KCkgY29uc3QKIHsKLSAgICBB
U1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5sZW5n
dGgoKTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRh
KCktPmF0dHJpYnV0ZUNvdW50KCk7CiB9CiAKIGlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1l
bnQ6OmF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGF0
dHJpYnV0ZURhdGEoKSk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRl
bShpbmRleCk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOworICAgIHJldHVybiBlbGVtZW50
RGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGluZGV4KTsKIH0KIAogaW5saW5lIGNvbnN0IEF0dHJpYnV0
ZSogRWxlbWVudDo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBj
b25zdAogewotICAgIEFTU0VSVChhdHRyaWJ1dGVEYXRhKCkpOwotICAgIHJldHVybiBhdHRyaWJ1
dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRh
KCkpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwog
fQogCiBpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUpCiB7Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAg
cmV0dXJuIG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7Cisg
ICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOworICAgIHJldHVybiBlbnN1cmVQcml2YXRlRWxlbWVu
dERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgRWxlbWVu
dDo6dXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKSBjb25zdAogewotICAgIGlmICghYXR0cmlidXRl
RGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKGF0dHJpYnV0ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpCisgICAgaWYgKGVs
ZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KQogICAgICAgICB1cGRhdGVTdHls
ZUF0dHJpYnV0ZSgpOwogCiAjaWYgRU5BQkxFKFNWRykKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgp
LT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KQorICAgIGlmIChlbGVtZW50RGF0YSgp
LT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KQogICAgICAgICB1cGRhdGVBbmltYXRl
ZFNWR0F0dHJpYnV0ZShhbnlRTmFtZSgpKTsKICNlbmRpZgogfQogCiBpbmxpbmUgYm9vbCBFbGVt
ZW50OjpoYXNJRCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiBhdHRy
aWJ1dGVEYXRhKCktPmhhc0lEKCk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRhKCkgJiYgZWxlbWVu
dERhdGEoKS0+aGFzSUQoKTsKIH0KIAogaW5saW5lIGJvb2wgRWxlbWVudDo6aGFzQ2xhc3MoKSBj
b25zdAogewotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCkgJiYgYXR0cmlidXRlRGF0YSgpLT5o
YXNDbGFzcygpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgpICYmIGVsZW1lbnREYXRhKCktPmhh
c0NsYXNzKCk7CiB9CiAKLWlubGluZSBFbGVtZW50QXR0cmlidXRlRGF0YSogRWxlbWVudDo6bXV0
YWJsZUF0dHJpYnV0ZURhdGEoKQoraW5saW5lIFByaXZhdGVFbGVtZW50RGF0YSogRWxlbWVudDo6
ZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCkKIHsKLSAgICBpZiAoIWF0dHJpYnV0ZURhdGEoKSB8
fCAhYXR0cmlidXRlRGF0YSgpLT5pc011dGFibGUoKSkKLSAgICAgICAgY3JlYXRlTXV0YWJsZUF0
dHJpYnV0ZURhdGEoKTsKLSAgICByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmdldCgpOworICAgIGlm
ICghZWxlbWVudERhdGEoKSB8fCAhZWxlbWVudERhdGEoKS0+aXNQcml2YXRlKCkpCisgICAgICAg
IGNyZWF0ZVByaXZhdGVEYXRhKCk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFByaXZhdGVFbGVt
ZW50RGF0YSo+KG1fZWxlbWVudERhdGEuZ2V0KCkpOwogfQogCiAvLyBQdXQgaGVyZSB0byBtYWtl
IHRoZW0gaW5saW5lLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRy
aWJ1dGVEYXRhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50QXR0cmlidXRlRGF0YS5j
cHAKaW5kZXggZTY5NzFiNy4uODRlMjczNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVu
dEF0dHJpYnV0ZURhdGEuY3BwCkBAIC0zLDcgKzMsNyBAQAogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAx
IFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDgsIDIwMTAsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEwLCAy
MDEyLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAo
QykgMjAxMiBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykuCiAg
KgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgpAQCAtMzEsNDQgKzMxLDQ0IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAot
c3RydWN0IFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVk
PFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YT4geworc3RydWN0IFNhbWVTaXplQXNFbGVt
ZW50RGF0YSA6IHB1YmxpYyBSZWZDb3VudGVkPFNhbWVTaXplQXNFbGVtZW50RGF0YT4gewogICAg
IHVuc2lnbmVkIGJpdGZpZWxkOwogICAgIHZvaWQqIHJlZlB0cnNbM107CiB9OwogCi1DT01QSUxF
X0FTU0VSVChzaXplb2YoRWxlbWVudEF0dHJpYnV0ZURhdGEpID09IHNpemVvZihTYW1lU2l6ZUFz
RWxlbWVudEF0dHJpYnV0ZURhdGEpLCBlbGVtZW50X2F0dHJpYnV0ZV9kYXRhX3Nob3VsZF9zdGF5
X3NtYWxsKTsKK0NPTVBJTEVfQVNTRVJUKHNpemVvZihFbGVtZW50RGF0YSkgPT0gc2l6ZW9mKFNh
bWVTaXplQXNFbGVtZW50RGF0YSksIGVsZW1lbnRfZGF0YV9zaG91bGRfc3RheV9zbWFsbCk7CiAK
LXN0YXRpYyBzaXplX3Qgc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0
dHJpYnV0ZUNvdW50KHVuc2lnbmVkIGNvdW50KQorc3RhdGljIHNpemVfdCBzaXplRm9yU2hhcmFi
bGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVDb3VudCh1bnNpZ25lZCBjb3VudCkKIHsKLSAgICBy
ZXR1cm4gc2l6ZW9mKEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKSAtIHNpemVvZih2b2lk
KikgKyBzaXplb2YoQXR0cmlidXRlKSAqIGNvdW50OworICAgIHJldHVybiBzaXplb2YoU2hhcmFi
bGVFbGVtZW50RGF0YSkgLSBzaXplb2Yodm9pZCopICsgc2l6ZW9mKEF0dHJpYnV0ZSkgKiBjb3Vu
dDsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gRWxlbWVudEF0dHJpYnV0
ZURhdGE6OmNyZWF0ZUltbXV0YWJsZShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRl
cykKK1Bhc3NSZWZQdHI8RWxlbWVudERhdGE+IEVsZW1lbnREYXRhOjpjcmVhdGVTaGFyYWJsZVdp
dGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQogewotICAg
IHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KGF0dHJpYnV0ZXMuc2l6ZSgpKSk7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKG5ldyAoc2xvdCkgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoYXR0
cmlidXRlcykpOworICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvclNoYXJh
YmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlQ291bnQoYXR0cmlidXRlcy5zaXplKCkpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBTaGFyYWJsZUVsZW1lbnREYXRhKGF0dHJpYnV0
ZXMpKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gRWxlbWVudEF0dHJp
YnV0ZURhdGE6OmNyZWF0ZSgpCitQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBFbGVtZW50RGF0YTo6
Y3JlYXRlUHJpdmF0ZSgpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEpOworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJpdmF0ZUVsZW1lbnRE
YXRhKTsKIH0KIAotSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6OkltbXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQotICAg
IDogRWxlbWVudEF0dHJpYnV0ZURhdGEoYXR0cmlidXRlcy5zaXplKCkpCitTaGFyYWJsZUVsZW1l
bnREYXRhOjpTaGFyYWJsZUVsZW1lbnREYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRy
aWJ1dGVzKQorICAgIDogRWxlbWVudERhdGEoYXR0cmlidXRlcy5zaXplKCkpCiB7CiAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fYXJyYXlTaXplOyArK2kpCiAgICAgICAgIG5ldyAoJnJl
aW50ZXJwcmV0X2Nhc3Q8QXR0cmlidXRlKj4oJm1fYXR0cmlidXRlQXJyYXkpW2ldKSBBdHRyaWJ1
dGUoYXR0cmlidXRlc1tpXSk7CiB9CiAKLUltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjp+
SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKQorU2hhcmFibGVFbGVtZW50RGF0YTo6flNo
YXJhYmxlRWxlbWVudERhdGEoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2Fy
cmF5U2l6ZTsgKytpKQogICAgICAgICAocmVpbnRlcnByZXRfY2FzdDxBdHRyaWJ1dGUqPigmbV9h
dHRyaWJ1dGVBcnJheSlbaV0pLn5BdHRyaWJ1dGUoKTsKIH0KIAotSW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGE6OkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXIpCi0gICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShv
dGhlciwgZmFsc2UpCitTaGFyYWJsZUVsZW1lbnREYXRhOjpTaGFyYWJsZUVsZW1lbnREYXRhKGNv
bnN0IFByaXZhdGVFbGVtZW50RGF0YSYgb3RoZXIpCisgICAgOiBFbGVtZW50RGF0YShvdGhlciwg
ZmFsc2UpCiB7CiAgICAgQVNTRVJUKCFvdGhlci5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KTsKIApAQCAtODEsOSArODEsOSBAQCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1t
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbgogICAgICAgICBu
ZXcgKCZyZWludGVycHJldF9jYXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkg
QXR0cmlidXRlKCpvdGhlci5hdHRyaWJ1dGVJdGVtKGkpKTsKIH0KIAotRWxlbWVudEF0dHJpYnV0
ZURhdGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBv
dGhlciwgYm9vbCBpc011dGFibGUpCi0gICAgOiBtX2lzTXV0YWJsZShpc011dGFibGUpCi0gICAg
LCBtX2FycmF5U2l6ZShpc011dGFibGUgPyAwIDogb3RoZXIubGVuZ3RoKCkpCitFbGVtZW50RGF0
YTo6RWxlbWVudERhdGEoY29uc3QgRWxlbWVudERhdGEmIG90aGVyLCBib29sIGlzUHJpdmF0ZSkK
KyAgICA6IG1faXNQcml2YXRlKGlzUHJpdmF0ZSkKKyAgICAsIG1fYXJyYXlTaXplKGlzUHJpdmF0
ZSA/IDAgOiBvdGhlci5hdHRyaWJ1dGVDb3VudCgpKQogICAgICwgbV9wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZUlzRGlydHkob3RoZXIubV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGly
dHkpCiAgICAgLCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0eShvdGhlci5tX3N0eWxlQXR0cmlidXRl
SXNEaXJ0eSkKICNpZiBFTkFCTEUoU1ZHKQpAQCAtOTUsNjMgKzk1LDYyIEBAIEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0
YSYgb3RoZXIsIGJvCiAgICAgLy8gTk9URTogVGhlIGlubGluZSBzdHlsZSBpcyBjb3BpZWQgYnkg
dGhlIHN1YmNsYXNzIGNvcHkgY29uc3RydWN0b3Igc2luY2Ugd2UgZG9uJ3Qga25vdyB3aGF0IHRv
IGRvIHdpdGggaXQgaGVyZS4KIH0KIAotTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpNdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
JiBvdGhlcikKLSAgICA6IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKG90aGVyLCB0cnVlKQorUHJpdmF0
ZUVsZW1lbnREYXRhOjpQcml2YXRlRWxlbWVudERhdGEoY29uc3QgUHJpdmF0ZUVsZW1lbnREYXRh
JiBvdGhlcikKKyAgICA6IEVsZW1lbnREYXRhKG90aGVyLCB0cnVlKQogICAgICwgbV9wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZShvdGhlci5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKQog
ICAgICwgbV9hdHRyaWJ1dGVWZWN0b3Iob3RoZXIubV9hdHRyaWJ1dGVWZWN0b3IpCiB7CiAgICAg
bV9pbmxpbmVTdHlsZSA9IG90aGVyLm1faW5saW5lU3R5bGUgPyBvdGhlci5tX2lubGluZVN0eWxl
LT5jb3B5KCkgOiAwOwogfQogCi1NdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6Ok11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYg
b3RoZXIpCi0gICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwgdHJ1ZSkKK1ByaXZhdGVF
bGVtZW50RGF0YTo6UHJpdmF0ZUVsZW1lbnREYXRhKGNvbnN0IFNoYXJhYmxlRWxlbWVudERhdGEm
IG90aGVyKQorICAgIDogRWxlbWVudERhdGEob3RoZXIsIHRydWUpCiB7Ci0gICAgLy8gQW4gSW1t
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlu
bGluZSBTdHlsZVByb3BlcnR5U2V0IGF0dGFjaGVkLgotICAgIEFTU0VSVCghb3RoZXIubV9pbmxp
bmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVTdHlsZS0+aXNNdXRhYmxlKCkpOworICAgIC8vIEFu
IFNoYXJhYmxlRWxlbWVudERhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlubGluZSBT
dHlsZVByb3BlcnR5U2V0IGF0dGFjaGVkLgorICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHls
ZSB8fCAhb3RoZXIubV9pbmxpbmVTdHlsZS0+aXNQcml2YXRlKCkpOwogICAgIG1faW5saW5lU3R5
bGUgPSBvdGhlci5tX2lubGluZVN0eWxlOwogCi0gICAgbV9hdHRyaWJ1dGVWZWN0b3IucmVzZXJ2
ZUNhcGFjaXR5KG90aGVyLmxlbmd0aCgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
b3RoZXIubGVuZ3RoKCk7ICsraSkKKyAgICBtX2F0dHJpYnV0ZVZlY3Rvci5yZXNlcnZlQ2FwYWNp
dHkob3RoZXIuYXR0cmlidXRlQ291bnQoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG90aGVyLmF0dHJpYnV0ZUNvdW50KCk7ICsraSkKICAgICAgICAgbV9hdHRyaWJ1dGVWZWN0b3Iu
dW5jaGVja2VkQXBwZW5kKG90aGVyLmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KClbaV0pOwogfQog
Ci1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6
bWFrZU11dGFibGVDb3B5KCkgY29uc3QKK1Bhc3NSZWZQdHI8RWxlbWVudERhdGE+IEVsZW1lbnRE
YXRhOjptYWtlUHJpdmF0ZUNvcHkoKSBjb25zdAogewotICAgIGlmIChpc011dGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoc3Rh
dGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJj4oKnRoaXMpKSk7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoc3RhdGlj
X2Nhc3Q8Y29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmPigqdGhpcykpKTsKKyAg
ICBpZiAoaXNQcml2YXRlKCkpCisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJpdmF0ZUVs
ZW1lbnREYXRhKHN0YXRpY19jYXN0PGNvbnN0IFByaXZhdGVFbGVtZW50RGF0YSY+KCp0aGlzKSkp
OworICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJpdmF0ZUVsZW1lbnREYXRhKHN0YXRpY19jYXN0
PGNvbnN0IFNoYXJhYmxlRWxlbWVudERhdGEmPigqdGhpcykpKTsKIH0KIAotUGFzc1JlZlB0cjxF
bGVtZW50QXR0cmlidXRlRGF0YT4gRWxlbWVudEF0dHJpYnV0ZURhdGE6Om1ha2VJbW11dGFibGVD
b3B5KCkgY29uc3QKK1Bhc3NSZWZQdHI8RWxlbWVudERhdGE+IEVsZW1lbnREYXRhOjptYWtlU2hh
cmFibGVDb3B5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOwotICAgIHZvaWQq
IHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhV2l0aEF0dHJpYnV0ZUNvdW50KG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5zaXplKCkpKTsK
LSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBJbW11dGFibGVFbGVtZW50QXR0cmlidXRl
RGF0YShzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmPigqdGhp
cykpKTsKKyAgICBBU1NFUlQoaXNQcml2YXRlKCkpOworICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZh
c3RNYWxsb2Moc2l6ZUZvclNoYXJhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlQ291bnQoYXR0
cmlidXRlVmVjdG9yKCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoc2xvdCkg
U2hhcmFibGVFbGVtZW50RGF0YShzdGF0aWNfY2FzdDxjb25zdCBQcml2YXRlRWxlbWVudERhdGEm
PigqdGhpcykpKTsKIH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6YWRkQXR0cmlidXRl
KGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQordm9pZCBFbGVtZW50RGF0YTo6YWRkQXR0cmli
dXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewotICAgIEFTU0VSVChpc011dGFibGUo
KSk7Ci0gICAgbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLmFwcGVuZChhdHRyaWJ1dGUpOworICAg
IEFTU0VSVChpc1ByaXZhdGUoKSk7CisgICAgYXR0cmlidXRlVmVjdG9yKCkuYXBwZW5kKGF0dHJp
YnV0ZSk7CiB9CiAKLXZvaWQgRWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShz
aXplX3QgaW5kZXgpCit2b2lkIEVsZW1lbnREYXRhOjpyZW1vdmVBdHRyaWJ1dGUoc2l6ZV90IGlu
ZGV4KQogewotICAgIEFTU0VSVChpc011dGFibGUoKSk7CisgICAgQVNTRVJUKGlzUHJpdmF0ZSgp
KTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCgp
KTsKLSAgICBtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkucmVtb3ZlKGluZGV4KTsKKyAgICBhdHRy
aWJ1dGVWZWN0b3IoKS5yZW1vdmUoaW5kZXgpOwogfQogCi1ib29sIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjppc0VxdWl2YWxlbnQoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIG90aGVyKSBjb25z
dAorYm9vbCBFbGVtZW50RGF0YTo6aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVu
dERhdGEqIG90aGVyKSBjb25zdAogewogICAgIGlmICghb3RoZXIpCi0gICAgICAgIHJldHVybiBp
c0VtcHR5KCk7CisgICAgICAgIHJldHVybiAhYXR0cmlidXRlQ291bnQoKTsKIAotICAgIHVuc2ln
bmVkIGxlbiA9IGxlbmd0aCgpOwotICAgIGlmIChsZW4gIT0gb3RoZXItPmxlbmd0aCgpKQorICAg
IGlmIChhdHRyaWJ1dGVDb3VudCgpICE9IG90aGVyLT5hdHRyaWJ1dGVDb3VudCgpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKysp
IHsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQoKTsgaSsrKSB7
CiAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlSXRlbShpKTsK
ICAgICAgICAgY29uc3QgQXR0cmlidXRlKiBvdGhlckF0dHIgPSBvdGhlci0+Z2V0QXR0cmlidXRl
SXRlbShhdHRyaWJ1dGUtPm5hbWUoKSk7CiAgICAgICAgIGlmICghb3RoZXJBdHRyIHx8IGF0dHJp
YnV0ZS0+dmFsdWUoKSAhPSBvdGhlckF0dHItPnZhbHVlKCkpCkBAIC0xNjEsMjUgKzE2MCwyNSBA
QCBib29sIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppc0VxdWl2YWxlbnQoY29uc3QgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIG90aGVyKSBjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBt
ZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBFbGVtZW50RGF0YTo6cmVwb3J0TWVtb3J5VXNh
Z2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKIHsKLSAgICBzaXpl
X3QgYWN0dWFsU2l6ZSA9IG1faXNNdXRhYmxlID8gc2l6ZW9mKEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KSA6IHNpemVGb3JJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YVdpdGhBdHRyaWJ1dGVDb3Vu
dChtX2FycmF5U2l6ZSk7CisgICAgc2l6ZV90IGFjdHVhbFNpemUgPSBtX2lzUHJpdmF0ZSA/IHNp
emVvZihFbGVtZW50RGF0YSkgOiBzaXplRm9yU2hhcmFibGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1
dGVDb3VudChtX2FycmF5U2l6ZSk7CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8obWVtb3J5T2Jq
ZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00sIGFjdHVhbFNpemUpOwogICAg
IGluZm8uYWRkTWVtYmVyKG1faW5saW5lU3R5bGUsICJpbmxpbmVTdHlsZSIpOwogICAgIGluZm8u
YWRkTWVtYmVyKG1fY2xhc3NOYW1lcywgImNsYXNzTmFtZXMiKTsKICAgICBpbmZvLmFkZE1lbWJl
cihtX2lkRm9yU3R5bGVSZXNvbHV0aW9uLCAiaWRGb3JTdHlsZVJlc29sdXRpb24iKTsKLSAgICBp
ZiAobV9pc011dGFibGUpIHsKKyAgICBpZiAoaXNQcml2YXRlKCkpIHsKICAgICAgICAgaW5mby5h
ZGRNZW1iZXIocHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSwgInByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKCkiKTsKLSAgICAgICAgaW5mby5hZGRNZW1iZXIobXV0YWJsZUF0dHJpYnV0ZVZl
Y3RvcigpLCAibXV0YWJsZUF0dHJpYnV0ZVZlY3RvciIpOworICAgICAgICBpbmZvLmFkZE1lbWJl
cihhdHRyaWJ1dGVWZWN0b3IoKSwgImF0dHJpYnV0ZVZlY3RvciIpOwogICAgIH0KLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwLCBsZW4gPSBsZW5ndGgoKTsgaSA8IGxlbjsgaSsrKQorICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudCgpOyArK2kpCiAgICAgICAgIGluZm8u
YWRkTWVtYmVyKCphdHRyaWJ1dGVJdGVtKGkpLCAiKmF0dHJpYnV0ZUl0ZW0iKTsKIH0KIAotc2l6
ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2FzZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkg
Y29uc3QKK3NpemVfdCBFbGVtZW50RGF0YTo6Z2V0QXR0cmlidXRlSXRlbUluZGV4U2xvd0Nhc2Uo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
IGNvbnN0CiB7CiAgICAgLy8gQ29udGludWUgdG8gY2hlY2tpbmcgY2FzZS1pbnNlbnNpdGl2ZWx5
IGFuZC9vciBmdWxsIG5hbWVzcGFjZWQgbmFtZXMgaWYgbmVjZXNzYXJ5OgotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGF0dHJpYnV0ZUNvdW50KCk7ICsraSkgewogICAgICAgICBjb25zdCBBdHRyaWJ1dGUq
IGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgICAgIGlmICghYXR0cmlidXRlLT5u
YW1lKCkuaGFzUHJlZml4KCkpIHsKICAgICAgICAgICAgIGlmIChzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlICYmIGVxdWFsSWdub3JpbmdDYXNlKG5hbWUsIGF0dHJpYnV0ZS0+bG9jYWxOYW1lKCkp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnRBdHRyaWJ1dGVEYXRhLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaAppbmRleCA2OGYwNmJh
Li5lZDlmMWNjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0
ZURhdGEuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudEF0dHJpYnV0ZURhdGEuaApA
QCAtMyw3ICszLDcgQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBv
c3QuY29tKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQotICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4LCAyMDEw
LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCwgMjAxMCwgMjAxMiwgMjAxMyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTIgTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTM0LDE0
ICszNCwxNCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBFbGVtZW50OwotY2xhc3Mg
SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci1jbGFzcyBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGE7CitjbGFzcyBTaGFyYWJsZUVsZW1lbnREYXRhOworY2xhc3MgUHJpdmF0ZUVsZW1l
bnREYXRhOwogCi1jbGFzcyBFbGVtZW50QXR0cmlidXRlRGF0YSA6IHB1YmxpYyBSZWZDb3VudGVk
PEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiB7CitjbGFzcyBFbGVtZW50RGF0YSA6IHB1YmxpYyBSZWZD
b3VudGVkPEVsZW1lbnREYXRhPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJs
aWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZSgp
OwotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGVJbW11
dGFibGUoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxF
bGVtZW50RGF0YT4gY3JlYXRlUHJpdmF0ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1l
bnREYXRhPiBjcmVhdGVTaGFyYWJsZVdpdGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1
dGU+Jik7CiAKICAgICAvLyBPdmVycmlkZSBSZWZDb3VudGVkJ3MgZGVyZWYoKSB0byBlbnN1cmUg
b3BlcmF0b3IgZGVsZXRlIGlzIGNhbGxlZCBvbgogICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBzdWJj
bGFzcyB0eXBlLgpAQCAtNTksOCArNTksNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3R5bGVQcm9w
ZXJ0eVNldCogcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBjb25zdDsKICAgICB2b2lkIHNl
dFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4p
IGNvbnN0OwogCi0gICAgc2l6ZV90IGxlbmd0aCgpIGNvbnN0OwotICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0IHsgcmV0dXJuICFsZW5ndGgoKTsgfQorICAgIHNpemVfdCBhdHRyaWJ1dGVDb3VudCgp
IGNvbnN0OwogCiAgICAgLy8gSW50ZXJuYWwgaW50ZXJmYWNlLgogICAgIGNvbnN0IEF0dHJpYnV0
ZSogYXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CkBAIC03NywxNiArNzYsMTgg
QEAgcHVibGljOgogICAgIGJvb2wgaGFzSUQoKSBjb25zdCB7IHJldHVybiAhbV9pZEZvclN0eWxl
UmVzb2x1dGlvbi5pc051bGwoKTsgfQogICAgIGJvb2wgaGFzQ2xhc3MoKSBjb25zdCB7IHJldHVy
biAhbV9jbGFzc05hbWVzLmlzTnVsbCgpOyB9CiAKLSAgICBib29sIGlzRXF1aXZhbGVudChjb25z
dCBFbGVtZW50QXR0cmlidXRlRGF0YSogb3RoZXIpIGNvbnN0OworICAgIGJvb2wgaGFzRXF1aXZh
bGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudERhdGEqIG90aGVyKSBjb25zdDsKIAogICAgIHZv
aWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCi0gICAgYm9v
bCBpc011dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzTXV0YWJsZTsgfQorICAgIGJvb2wgaXNQ
cml2YXRlKCkgY29uc3QgeyByZXR1cm4gbV9pc1ByaXZhdGU7IH0KKworICAgIC8vIEZJWE1FOiBI
aWRlIHRoaXMuCiAgICAgY29uc3QgQXR0cmlidXRlKiBpbW11dGFibGVBdHRyaWJ1dGVBcnJheSgp
IGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEoKQotICAgICAg
ICA6IG1faXNNdXRhYmxlKHRydWUpCisgICAgRWxlbWVudERhdGEoKQorICAgICAgICA6IG1faXNQ
cml2YXRlKHRydWUpCiAgICAgICAgICwgbV9hcnJheVNpemUoMCkKICAgICAgICAgLCBtX3ByZXNl
bnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eShmYWxzZSkKICAgICAgICAgLCBtX3N0eWxlQXR0
cmlidXRlSXNEaXJ0eShmYWxzZSkKQEAgLTk1LDggKzk2LDggQEAgcHJvdGVjdGVkOgogI2VuZGlm
CiAgICAgeyB9CiAKLSAgICBFbGVtZW50QXR0cmlidXRlRGF0YSh1bnNpZ25lZCBhcnJheVNpemUp
Ci0gICAgICAgIDogbV9pc011dGFibGUoZmFsc2UpCisgICAgRWxlbWVudERhdGEodW5zaWduZWQg
YXJyYXlTaXplKQorICAgICAgICA6IG1faXNQcml2YXRlKGZhbHNlKQogICAgICAgICAsIG1fYXJy
YXlTaXplKGFycmF5U2l6ZSkKICAgICAgICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
SXNEaXJ0eShmYWxzZSkKICAgICAgICAgLCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0eShmYWxzZSkK
QEAgLTEwNSw5ICsxMDYsOSBAQCBwcm90ZWN0ZWQ6CiAjZW5kaWYKICAgICB7IH0KIAotICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiwgYm9vbCBpc011
dGFibGUpOworICAgIEVsZW1lbnREYXRhKGNvbnN0IEVsZW1lbnREYXRhJiwgYm9vbCBpc1ByaXZh
dGUpOwogCi0gICAgdW5zaWduZWQgbV9pc011dGFibGUgOiAxOworICAgIHVuc2lnbmVkIG1faXNQ
cml2YXRlIDogMTsKICAgICB1bnNpZ25lZCBtX2FycmF5U2l6ZSA6IDI4OwogICAgIG11dGFibGUg
dW5zaWduZWQgbV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkgOiAxOwogICAgIG11
dGFibGUgdW5zaWduZWQgbV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgOiAxOwpAQCAtMTIyLDggKzEy
Myw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEVsZW1lbnQ7CiAg
ICAgZnJpZW5kIGNsYXNzIFN0eWxlZEVsZW1lbnQ7Ci0gICAgZnJpZW5kIGNsYXNzIEltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOwotICAgIGZyaWVuZCBjbGFzcyBNdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGE7CisgICAgZnJpZW5kIGNsYXNzIFNoYXJhYmxlRWxlbWVudERhdGE7CisgICAg
ZnJpZW5kIGNsYXNzIFByaXZhdGVFbGVtZW50RGF0YTsKICNpZiBFTkFCTEUoU1ZHKQogICAgIGZy
aWVuZCBjbGFzcyBTVkdFbGVtZW50OwogI2VuZGlmCkBAIC0xMzIsNzEgKzEzMyw3MSBAQCBwcml2
YXRlOgogICAgIGNvbnN0IEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNT
dHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3Q7CiAgICAg
c2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdDsKIAotICAgIFBhc3NS
ZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IG1ha2VNdXRhYmxlQ29weSgpIGNvbnN0OwotICAg
IFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IG1ha2VJbW11dGFibGVDb3B5KCkgY29u
c3Q7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gbWFrZVByaXZhdGVDb3B5KCkgY29uc3Q7
CisgICAgUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gbWFrZVNoYXJhYmxlQ29weSgpIGNvbnN0Owog
Ci0gICAgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKTsKLSAg
ICBjb25zdCBWZWN0b3I8QXR0cmlidXRlLCA0PiYgbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpIGNv
bnN0OworICAgIFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBhdHRyaWJ1dGVWZWN0b3IoKTsKKyAgICBj
b25zdCBWZWN0b3I8QXR0cmlidXRlLCA0PiYgYXR0cmlidXRlVmVjdG9yKCkgY29uc3Q7CiB9Owog
Ci1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSA6IHB1YmxpYyBFbGVtZW50QXR0
cmlidXRlRGF0YSB7CitjbGFzcyBTaGFyYWJsZUVsZW1lbnREYXRhIDogcHVibGljIEVsZW1lbnRE
YXRhIHsKIHB1YmxpYzoKLSAgICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBW
ZWN0b3I8QXR0cmlidXRlPiYpOwotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNv
bnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYpOwotICAgIH5JbW11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YSgpOworICAgIFNoYXJhYmxlRWxlbWVudERhdGEoY29uc3QgVmVjdG9yPEF0
dHJpYnV0ZT4mKTsKKyAgICBTaGFyYWJsZUVsZW1lbnREYXRhKGNvbnN0IFByaXZhdGVFbGVtZW50
RGF0YSYpOworICAgIH5TaGFyYWJsZUVsZW1lbnREYXRhKCk7CiAKICAgICB2b2lkKiBtX2F0dHJp
YnV0ZUFycmF5OwogfTsKIAotY2xhc3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVi
bGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsKK2NsYXNzIFByaXZhdGVFbGVtZW50RGF0YSA6IHB1
YmxpYyBFbGVtZW50RGF0YSB7CiBwdWJsaWM6Ci0gICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhKCkgeyB9Ci0gICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEltbXV0YWJs
ZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJik7Ci0gICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
KGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYpOworICAgIFByaXZhdGVFbGVtZW50
RGF0YSgpIHsgfQorICAgIFByaXZhdGVFbGVtZW50RGF0YShjb25zdCBTaGFyYWJsZUVsZW1lbnRE
YXRhJik7CisgICAgUHJpdmF0ZUVsZW1lbnREYXRhKGNvbnN0IFByaXZhdGVFbGVtZW50RGF0YSYp
OwogCiAgICAgbXV0YWJsZSBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gbV9wcmVzZW50YXRpb25B
dHRyaWJ1dGVTdHlsZTsKICAgICBWZWN0b3I8QXR0cmlidXRlLCA0PiBtX2F0dHJpYnV0ZVZlY3Rv
cjsKIH07CiAKLWlubGluZSBWZWN0b3I8QXR0cmlidXRlLCA0PiYgRWxlbWVudEF0dHJpYnV0ZURh
dGE6Om11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKQoraW5saW5lIFZlY3RvcjxBdHRyaWJ1dGUsIDQ+
JiBFbGVtZW50RGF0YTo6YXR0cmlidXRlVmVjdG9yKCkKIHsKLSAgICBBU1NFUlQobV9pc011dGFi
bGUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEq
Pih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7CisgICAgQVNTRVJUKGlzUHJpdmF0ZSgpKTsKKyAg
ICByZXR1cm4gc3RhdGljX2Nhc3Q8UHJpdmF0ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fYXR0cmli
dXRlVmVjdG9yOwogfQogCi1pbmxpbmUgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjptdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkgY29uc3QKK2lubGluZSBj
b25zdCBWZWN0b3I8QXR0cmlidXRlLCA0PiYgRWxlbWVudERhdGE6OmF0dHJpYnV0ZVZlY3Rvcigp
IGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRl
VmVjdG9yOworICAgIEFTU0VSVChpc1ByaXZhdGUoKSk7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0
PGNvbnN0IFByaXZhdGVFbGVtZW50RGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0ZVZlY3RvcjsKIH0K
IAotaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmltbXV0YWJs
ZUF0dHJpYnV0ZUFycmF5KCkgY29uc3QKK2lubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnRE
YXRhOjppbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKCFtX2lz
TXV0YWJsZSk7Ci0gICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQXR0cmlidXRlKj4o
JnN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcykt
Pm1fYXR0cmlidXRlQXJyYXkpOworICAgIEFTU0VSVCghaXNQcml2YXRlKCkpOworICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNvbnN0IEF0dHJpYnV0ZSo+KCZzdGF0aWNfY2FzdDxjb25zdCBT
aGFyYWJsZUVsZW1lbnREYXRhKj4odGhpcyktPm1fYXR0cmlidXRlQXJyYXkpOwogfQogCi1pbmxp
bmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpsZW5ndGgoKSBjb25zdAoraW5saW5lIHNp
emVfdCBFbGVtZW50RGF0YTo6YXR0cmlidXRlQ291bnQoKSBjb25zdAogewotICAgIGlmIChpc011
dGFibGUoKSkKLSAgICAgICAgcmV0dXJuIG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5zaXplKCk7
CisgICAgaWYgKGlzUHJpdmF0ZSgpKQorICAgICAgICByZXR1cm4gYXR0cmlidXRlVmVjdG9yKCku
c2l6ZSgpOwogICAgIHJldHVybiBtX2FycmF5U2l6ZTsKIH0KIAotaW5saW5lIGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpwcmVzZW50YXRpb25BdHRyaWJ1dGVT
dHlsZSgpIGNvbnN0CitpbmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogRWxlbWVudERhdGE6
OnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgY29uc3QKIHsKLSAgICBpZiAoIW1faXNNdXRh
YmxlKQorICAgIGlmICghaXNQcml2YXRlKCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVy
biBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+
bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZS5nZXQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fcHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUuZ2V0KCk7CiB9CiAKLWlubGluZSB2b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpz
ZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
IHN0eWxlKSBjb25zdAoraW5saW5lIHZvaWQgRWxlbWVudERhdGE6OnNldFByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gc3R5bGUpIGNvbnN0CiB7
Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHls
ZSA9IHN0eWxlOworICAgIEFTU0VSVChpc1ByaXZhdGUoKSk7CisgICAgc3RhdGljX2Nhc3Q8Y29u
c3QgUHJpdmF0ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUgPSBzdHlsZTsKIH0KIAotaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6
OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZEln
bm9yZUF0dHJpYnV0ZUNhc2UpCitpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50RGF0YTo6Z2V0QXR0
cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0
cmlidXRlQ2FzZSkKIHsKICAgICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgo
bmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7CiAgICAgaWYgKGluZGV4ICE9IG5vdEZv
dW5kKQpAQCAtMjA0LDcgKzIwNSw3IEBAIGlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1
dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtCiAgICAgcmV0
dXJuIDA7CiB9CiAKLWlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJ
Z25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAoraW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVu
dERhdGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNo
b3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpIGNvbnN0CiB7CiAgICAgc2l6ZV90IGluZGV4ID0gZ2V0
QXR0cmlidXRlSXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOwogICAg
IGlmIChpbmRleCAhPSBub3RGb3VuZCkKQEAgLTIxMiw5ICsyMTMsOSBAQCBpbmxpbmUgY29uc3Qg
QXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBB
dG9taWNTdHJpbgogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSkgY29uc3QKK2lubGluZSBzaXplX3QgRWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewotICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGF0dHJpYnV0ZUNvdW50KCk7ICsraSkgewogICAgICAgICBpZiAoYXR0cmlidXRlSXRlbShpKS0+
bmFtZSgpLm1hdGNoZXMobmFtZSkpCiAgICAgICAgICAgICByZXR1cm4gaTsKICAgICB9CkBAIC0y
MjMsMTMgKzIyNCwxMiBAQCBpbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRB
dHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbgogCiAvLyBXZSB1c2UgYSBi
b29sZWFuIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxkSWdub3JlQXR0cmlidXRl
Q2FzZSBzbyB0aGF0IHRoZSBjYWxsZXIKIC8vIGNhbiB0dW5lIHRoZSBiZWhhdmlvciAoaGFzQXR0
cmlidXRlIGlzIGNhc2Ugc2Vuc2l0aXZlIHdoZXJlYXMgZ2V0QXR0cmlidXRlIGlzIG5vdCkuCi1p
bmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
IGNvbnN0CitpbmxpbmUgc2l6ZV90IEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
IGNvbnN0CiB7Ci0gICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CiAgICAgYm9vbCBkb1Nsb3dD
aGVjayA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2U7CiAKICAgICAvLyBPcHRpbWl6ZSBmb3Ig
dGhlIGNhc2Ugd2hlcmUgdGhlIGF0dHJpYnV0ZSBleGlzdHMgYW5kIGl0cyBuYW1lIGV4YWN0bHkg
bWF0Y2hlcy4KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyArK2kpIHsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYXR0cmlidXRlQ291bnQoKTsgKytpKSB7CiAgICAgICAg
IGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlSXRlbShpKTsKICAgICAgICAg
aWYgKCFhdHRyaWJ1dGUtPm5hbWUoKS5oYXNQcmVmaXgoKSkgewogICAgICAgICAgICAgaWYgKG5h
bWUgPT0gYXR0cmlidXRlLT5sb2NhbE5hbWUoKSkKQEAgLTI0Myw0NyArMjQzLDQ3IEBAIGlubGlu
ZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25z
dCBBdG9taWNTdHJpbmcmIG5hCiAgICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCi1pbmxpbmUgY29u
c3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAoraW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxl
bWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29u
c3QKIHsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgeworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudCgpOyArK2kpIHsKICAgICAg
ICAgaWYgKGF0dHJpYnV0ZUl0ZW0oaSktPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQogICAgICAgICAg
ICAgcmV0dXJuIGF0dHJpYnV0ZUl0ZW0oaSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1p
bmxpbmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQoraW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudERhdGE6
OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgeworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBhdHRyaWJ1dGVDb3VudCgpOyArK2kpIHsKICAgICAgICAgaWYgKGF0dHJpYnV0
ZUl0ZW0oaSktPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGF0dHJp
YnV0ZUl0ZW0oaSk7CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgY29uc3QgQXR0
cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRl
eCkgY29uc3QKK2lubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnREYXRhOjphdHRyaWJ1dGVJ
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOwotICAgIGlmIChtX2lzTXV0YWJsZSkKLSAgICAg
ICAgcmV0dXJuICZtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuYXQoaW5kZXgpOworICAgIEFTU0VS
VF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgYXR0cmlidXRlQ291bnQoKSk7Cisg
ICAgaWYgKGlzUHJpdmF0ZSgpKQorICAgICAgICByZXR1cm4gJmF0dHJpYnV0ZVZlY3RvcigpLmF0
KGluZGV4KTsKICAgICByZXR1cm4gJmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KClbaW5kZXhdOwog
fQogCi1pbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6YXR0cmlidXRlSXRl
bSh1bnNpZ25lZCBpbmRleCkKK2lubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnREYXRhOjphdHRyaWJ1
dGVJdGVtKHVuc2lnbmVkIGluZGV4KQogewotICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJ
Q0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOwotICAgIHJldHVybiAmbXV0YWJsZUF0dHJpYnV0ZVZl
Y3RvcigpLmF0KGluZGV4KTsKKyAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihp
bmRleCA8IGF0dHJpYnV0ZUNvdW50KCkpOworICAgIHJldHVybiAmYXR0cmlidXRlVmVjdG9yKCku
YXQoaW5kZXgpOwogfQogCi1pbmxpbmUgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGVyZWYo
KQoraW5saW5lIHZvaWQgRWxlbWVudERhdGE6OmRlcmVmKCkKIHsKICAgICBpZiAoIWRlcmVmQmFz
ZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9pc011dGFibGUpCi0gICAgICAgIGRl
bGV0ZSBzdGF0aWNfY2FzdDxNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKTsKKyAg
ICBpZiAoaXNQcml2YXRlKCkpCisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxQcml2YXRlRWxl
bWVudERhdGEqPih0aGlzKTsKICAgICBlbHNlCi0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpOworICAgICAgICBkZWxldGUgc3Rh
dGljX2Nhc3Q8U2hhcmFibGVFbGVtZW50RGF0YSo+KHRoaXMpOwogfQogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5j
cHAKaW5kZXggYTYxYTA3ZC4uZTFjODMyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9t
L05vZGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcApAQCAtMTc2Nyw3ICsx
NzY3LDcgQEAgdW5zaWduZWQgc2hvcnQgTm9kZTo6Y29tcGFyZURvY3VtZW50UG9zaXRpb24oTm9k
ZSogb3RoZXJOb2RlKQogICAgIGlmIChhdHRyMSAmJiBhdHRyMiAmJiBzdGFydDEgPT0gc3RhcnQy
ICYmIHN0YXJ0MSkgewogICAgICAgICAvLyBXZSBhcmUgY29tcGFyaW5nIHR3byBhdHRyaWJ1dGVz
IG9uIHRoZSBzYW1lIG5vZGUuIENyYXdsIG91ciBhdHRyaWJ1dGUgbWFwIGFuZCBzZWUgd2hpY2gg
b25lIHdlIGhpdCBmaXJzdC4KICAgICAgICAgRWxlbWVudCogb3duZXIxID0gYXR0cjEtPm93bmVy
RWxlbWVudCgpOwotICAgICAgICBvd25lcjEtPnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7IC8vIEZv
cmNlIHVwZGF0ZSBpbnZhbGlkIGF0dHJpYnV0ZXMuCisgICAgICAgIG93bmVyMS0+dXBkYXRlZEVs
ZW1lbnREYXRhKCk7IC8vIEZvcmNlIHVwZGF0ZSBpbnZhbGlkIGF0dHJpYnV0ZXMuCiAgICAgICAg
IHVuc2lnbmVkIGxlbmd0aCA9IG93bmVyMS0+YXR0cmlidXRlQ291bnQoKTsKICAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgICAgICAvLyBJZiBu
ZWl0aGVyIG9mIHRoZSB0d28gZGV0ZXJtaW5pbmcgbm9kZXMgaXMgYSBjaGlsZCBub2RlIGFuZCBu
b2RlVHlwZSBpcyB0aGUgc2FtZSBmb3IgYm90aCBkZXRlcm1pbmluZyBub2RlcywgdGhlbiBhbiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAppbmRleCAyN2MzMTRhLi45Zjk5ZDNhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCkBAIC0xMjgsOSArMTI4LDkgQEAgc3Rh
dGljIFByZXNlbnRhdGlvbkF0dHJpYnV0ZUNhY2hlQ2xlYW5lciYgcHJlc2VudGF0aW9uQXR0cmli
dXRlQ2FjaGVDbGVhbmVyKCkKIAogdm9pZCBTdHlsZWRFbGVtZW50Ojp1cGRhdGVTdHlsZUF0dHJp
YnV0ZSgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAgQVNTRVJU
KGF0dHJpYnV0ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpOwotICAgIGF0dHJpYnV0
ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgPSBmYWxzZTsKKyAgICBBU1NFUlQoZWxl
bWVudERhdGEoKSk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJ
c0RpcnR5KTsKKyAgICBlbGVtZW50RGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA9IGZh
bHNlOwogICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IHRoaXMt
PmlubGluZVN0eWxlKCkpCiAgICAgICAgIGNvbnN0X2Nhc3Q8U3R5bGVkRWxlbWVudCo+KHRoaXMp
LT5zZXRTeW5jaHJvbml6ZWRMYXp5QXR0cmlidXRlKHN0eWxlQXR0ciwgaW5saW5lU3R5bGUtPmFz
VGV4dCgpKTsKIH0KQEAgLTE0OCw3ICsxNDgsNyBAQCBDU1NTdHlsZURlY2xhcmF0aW9uKiBTdHls
ZWRFbGVtZW50OjpzdHlsZSgpCiAKIFN0eWxlUHJvcGVydHlTZXQqIFN0eWxlZEVsZW1lbnQ6OmVu
c3VyZU11dGFibGVJbmxpbmVTdHlsZSgpCiB7Ci0gICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+
JiBpbmxpbmVTdHlsZSA9IG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5bGU7Cisg
ICAgUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+JiBpbmxpbmVTdHlsZSA9IGVuc3VyZVByaXZhdGVF
bGVtZW50RGF0YSgpLT5tX2lubGluZVN0eWxlOwogICAgIGlmICghaW5saW5lU3R5bGUpCiAgICAg
ICAgIGlubGluZVN0eWxlID0gU3R5bGVQcm9wZXJ0eVNldDo6Y3JlYXRlKHN0cmljdFRvQ1NTUGFy
c2VyTW9kZShpc0hUTUxFbGVtZW50KCkgJiYgIWRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKSk7
CiAgICAgZWxzZSBpZiAoIWlubGluZVN0eWxlLT5pc011dGFibGUoKSkKQEAgLTE2MSw3ICsxNjEs
NyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaQogICAgIGlmIChuYW1lID09IHN0eWxlQXR0cikK
ICAgICAgICAgc3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKG5ld1ZhbHVlKTsKICAgICBlbHNlIGlmIChp
c1ByZXNlbnRhdGlvbkF0dHJpYnV0ZShuYW1lKSkgewotICAgICAgICBhdHRyaWJ1dGVEYXRhKCkt
Pm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5ID0gdHJ1ZTsKKyAgICAgICAgZWxl
bWVudERhdGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkgPSB0cnVlOwog
ICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKICAgICB9CiAK
QEAgLTE3MiwxNyArMTcyLDE3IEBAIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogU3R5
bGVkRWxlbWVudDo6aW5saW5lU3R5bGVDU1NPTVdyYXBwZXIoKQogewogICAgIGlmICghaW5saW5l
U3R5bGUoKSB8fCAhaW5saW5lU3R5bGUoKS0+aGFzQ1NTT01XcmFwcGVyKCkpCiAgICAgICAgIHJl
dHVybiAwOwotICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3Nzb21XcmFwcGVy
ID0gbXV0YWJsZUF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZS0+Y3NzU3R5bGVEZWNsYXJh
dGlvbigpOworICAgIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiogY3Nzb21XcmFwcGVy
ID0gZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCktPm1faW5saW5lU3R5bGUtPmNzc1N0eWxlRGVj
bGFyYXRpb24oKTsKICAgICBBU1NFUlQoY3Nzb21XcmFwcGVyICYmIGNzc29tV3JhcHBlci0+cGFy
ZW50RWxlbWVudCgpID09IHRoaXMpOwogICAgIHJldHVybiBjc3NvbVdyYXBwZXI7CiB9CiAKIGlu
bGluZSB2b2lkIFN0eWxlZEVsZW1lbnQ6OnNldElubGluZVN0eWxlRnJvbVN0cmluZyhjb25zdCBB
dG9taWNTdHJpbmcmIG5ld1N0eWxlU3RyaW5nKQogewotICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5
U2V0PiYgaW5saW5lU3R5bGUgPSBhdHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5bGU7CisgICAg
UmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+JiBpbmxpbmVTdHlsZSA9IGVsZW1lbnREYXRhKCktPm1f
aW5saW5lU3R5bGU7CiAKICAgICAvLyBBdm9pZCByZWR1bmRhbnQgd29yayBpZiB3ZSdyZSB1c2lu
ZyBzaGFyZWQgYXR0cmlidXRlIGRhdGEgd2l0aCBhbHJlYWR5IHBhcnNlZCBpbmxpbmUgc3R5bGUu
Ci0gICAgaWYgKGlubGluZVN0eWxlICYmICFhdHRyaWJ1dGVEYXRhKCktPmlzTXV0YWJsZSgpKQor
ICAgIGlmIChpbmxpbmVTdHlsZSAmJiAhZWxlbWVudERhdGEoKS0+aXNQcml2YXRlKCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIFdlIHJlY29uc3RydWN0IHRoZSBwcm9wZXJ0eSBzZXQgaW5z
dGVhZCBvZiBtdXRhdGluZyBpZiB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyLgpAQCAtMjA1LDEx
ICsyMDUsMTEgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjpzdHlsZUF0dHJpYnV0ZUNoYW5nZWQoY29u
c3QgQXRvbWljU3RyaW5nJiBuZXdTdHlsZVN0cmluZykKICAgICBpZiAobmV3U3R5bGVTdHJpbmcu
aXNOdWxsKCkpIHsKICAgICAgICAgaWYgKFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbiog
Y3Nzb21XcmFwcGVyID0gaW5saW5lU3R5bGVDU1NPTVdyYXBwZXIoKSkKICAgICAgICAgICAgIGNz
c29tV3JhcHBlci0+Y2xlYXJQYXJlbnRFbGVtZW50KCk7Ci0gICAgICAgIG11dGFibGVBdHRyaWJ1
dGVEYXRhKCktPm1faW5saW5lU3R5bGUuY2xlYXIoKTsKKyAgICAgICAgZW5zdXJlUHJpdmF0ZUVs
ZW1lbnREYXRhKCktPm1faW5saW5lU3R5bGUuY2xlYXIoKTsKICAgICB9IGVsc2UgaWYgKGRvY3Vt
ZW50KCktPmNvbnRlbnRTZWN1cml0eVBvbGljeSgpLT5hbGxvd0lubGluZVN0eWxlKGRvY3VtZW50
KCktPnVybCgpLCBzdGFydExpbmVOdW1iZXIpKQogICAgICAgICBzZXRJbmxpbmVTdHlsZUZyb21T
dHJpbmcobmV3U3R5bGVTdHJpbmcpOwogCi0gICAgYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0
cmlidXRlSXNEaXJ0eSA9IGZhbHNlOworICAgIGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1
dGVJc0RpcnR5ID0gZmFsc2U7CiAKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxl
Q2hhbmdlKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVTdHls
ZUF0dHIoZG9jdW1lbnQoKSwgdGhpcyk7CkBAIC0yMTgsOCArMjE4LDggQEAgdm9pZCBTdHlsZWRF
bGVtZW50OjpzdHlsZUF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuZXdTdHls
ZVN0cmluZykKIHZvaWQgU3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGVDaGFuZ2VkKCkKIHsKICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hhbmdlKTsKLSAgICBBU1NFUlQoYXR0
cmlidXRlRGF0YSgpKTsKLSAgICBhdHRyaWJ1dGVEYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0Rp
cnR5ID0gdHJ1ZTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CisgICAgZWxlbWVudERhdGEo
KS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgPSB0cnVlOwogICAgIEluc3BlY3Rvckluc3RydW1l
bnRhdGlvbjo6ZGlkSW52YWxpZGF0ZVN0eWxlQXR0cihkb2N1bWVudCgpLCB0aGlzKTsKIH0KICAg
ICAKQEAgLTI2NSw3ICsyNjUsNyBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnJlbW92ZUFsbElubGlu
ZVN0eWxlUHJvcGVydGllcygpCiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6YWRkU3VicmVzb3VyY2VB
dHRyaWJ1dGVVUkxzKExpc3RIYXNoU2V0PEtVUkw+JiB1cmxzKSBjb25zdAogewotICAgIGlmIChj
b25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9IGF0dHJpYnV0ZURhdGEoKSA/IGF0
dHJpYnV0ZURhdGEoKS0+aW5saW5lU3R5bGUoKSA6IDApCisgICAgaWYgKGNvbnN0IFN0eWxlUHJv
cGVydHlTZXQqIGlubGluZVN0eWxlID0gZWxlbWVudERhdGEoKSA/IGVsZW1lbnREYXRhKCktPmlu
bGluZVN0eWxlKCkgOiAwKQogICAgICAgICBpbmxpbmVTdHlsZS0+YWRkU3VicmVzb3VyY2VTdHls
ZVVSTHModXJscywgZG9jdW1lbnQoKS0+ZWxlbWVudFNoZWV0KCktPmNvbnRlbnRzKCkpOwogfQog
CkBAIC0zNDAsMTEgKzM0MCwxMSBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnJlYnVpbGRQcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpCiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvLyBJbW11dGFi
bGVFbGVtZW50QXR0cmlidXRlRGF0YSBkb2Vzbid0IHN0b3JlIHByZXNlbnRhdGlvbiBhdHRyaWJ1
dGUgc3R5bGUsIHNvIG1ha2Ugc3VyZSB3ZSBoYXZlIGEgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVE
YXRhLgotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gbXV0YWJsZUF0
dHJpYnV0ZURhdGEoKTsKKyAgICAvLyBTaGFyYWJsZUVsZW1lbnREYXRhIGRvZXNuJ3Qgc3RvcmUg
cHJlc2VudGF0aW9uIGF0dHJpYnV0ZSBzdHlsZSwgc28gbWFrZSBzdXJlIHdlIGhhdmUgYSBQcml2
YXRlRWxlbWVudERhdGEuCisgICAgUHJpdmF0ZUVsZW1lbnREYXRhKiBwcml2YXRlRGF0YSA9IGVu
c3VyZVByaXZhdGVFbGVtZW50RGF0YSgpOwogCi0gICAgYXR0cmlidXRlRGF0YS0+bV9wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkgPSBmYWxzZTsKLSAgICBhdHRyaWJ1dGVEYXRhLT5z
ZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShzdHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxl
KTsKKyAgICBwcml2YXRlRGF0YS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkg
PSBmYWxzZTsKKyAgICBwcml2YXRlRGF0YS0+c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUo
c3R5bGUtPmlzRW1wdHkoKSA/IDAgOiBzdHlsZSk7CiAKICAgICBpZiAoIWNhY2hlSGFzaCB8fCBj
YWNoZUl0ZXJhdG9yLT52YWx1ZSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRF
bGVtZW50LmgKaW5kZXggZTQxYWFlZi4uYmYwNjIzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1N0eWxlZEVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxl
bWVudC5oCkBAIC00MCw3ICs0MCw3IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIGNvbnN0IFN0eWxl
UHJvcGVydHlTZXQqIGFkZGl0aW9uYWxQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIHsgcmV0
dXJuIDA7IH0KICAgICB2b2lkIGludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCi0gICAgY29u
c3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUoKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1
dGVEYXRhKCkgPyBhdHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5bGUuZ2V0KCkgOiAwOyB9Cisg
ICAgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUoKSBjb25zdCB7IHJldHVybiBl
bGVtZW50RGF0YSgpID8gZWxlbWVudERhdGEoKS0+bV9pbmxpbmVTdHlsZS5nZXQoKSA6IDA7IH0K
ICAgICBTdHlsZVByb3BlcnR5U2V0KiBlbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUoKTsKICAgICAK
ICAgICAvLyBVbmxpa2UgU3R5bGVQcm9wZXJ0eVNldCBzZXR0ZXJzLCB0aGVzZSBpbXBsZW1lbnQg
aW52YWxpZGF0aW9uLgpAQCAtODYsMTcgKzg2LDE3IEBAIHByaXZhdGU6CiAKIGlubGluZSB2b2lk
IFN0eWxlZEVsZW1lbnQ6OmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpCiB7Ci0gICAgQVNTRVJU
KGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAgYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRl
SXNEaXJ0eSA9IHRydWU7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOworICAgIGVsZW1lbnRE
YXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ID0gdHJ1ZTsKIH0KIAogaW5saW5lIGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIFN0eWxlZEVsZW1lbnQ6OnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0
eWxlKCkKIHsKLSAgICBpZiAoIWF0dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoIWVsZW1lbnREYXRh
KCkpCiAgICAgICAgIHJldHVybiAwOwotICAgIGlmIChhdHRyaWJ1dGVEYXRhKCktPm1fcHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KQorICAgIGlmIChlbGVtZW50RGF0YSgpLT5tX3By
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSkKICAgICAgICAgcmVidWlsZFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+cHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGUoKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+cHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGUoKTsKIH0KIAogfSAvL25hbWVzcGFjZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9DbGFzc0xpc3QuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9D
bGFzc0xpc3QuY3BwCmluZGV4IDc1YmMzNDMuLjg2YzY5NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NsYXNz
TGlzdC5jcHAKQEAgLTY4LDcgKzY4LDcgQEAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgQ2xhc3NM
aXN0OjpjbGFzc05hbWVzKCkgY29uc3QKICAgICAgICAgICAgIG1fY2xhc3NOYW1lc0ZvclF1aXJr
c01vZGUgPSBhZG9wdFB0cihuZXcgU3BhY2VTcGxpdFN0cmluZyh2YWx1ZSgpLCBmYWxzZSkpOwog
ICAgICAgICByZXR1cm4gKm1fY2xhc3NOYW1lc0ZvclF1aXJrc01vZGUuZ2V0KCk7CiAgICAgfQot
ICAgIHJldHVybiBtX2VsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKS0+Y2xhc3NOYW1lcygpOworICAg
IHJldHVybiBtX2VsZW1lbnQtPmNsYXNzTmFtZXMoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKaW5kZXggMGMyMjZh
MC4uZjIwNGFhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVt
ZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCkBA
IC01MjEsNyArNTIxLDcgQEAgdm9pZCBIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKCkKICAg
ICAgICAgcmVnaXN0ZXJGb3JTdXNwZW5zaW9uQ2FsbGJhY2tJZk5lZWRlZCgpOwogCiAgICAgaWYg
KGRpZFJlc3BlY3RIZWlnaHRBbmRXaWR0aCAhPSBtX2lucHV0VHlwZS0+c2hvdWxkUmVzcGVjdEhl
aWdodEFuZFdpZHRoQXR0cmlidXRlcygpKSB7Ci0gICAgICAgIEFTU0VSVChhdHRyaWJ1dGVEYXRh
KCkpOworICAgICAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CiAgICAgICAgIGlmIChBdHRyaWJ1
dGUqIGhlaWdodCA9IGdldEF0dHJpYnV0ZUl0ZW0oaGVpZ2h0QXR0cikpCiAgICAgICAgICAgICBh
dHRyaWJ1dGVDaGFuZ2VkKGhlaWdodEF0dHIsIGhlaWdodC0+dmFsdWUoKSk7CiAgICAgICAgIGlm
IChBdHRyaWJ1dGUqIHdpZHRoID0gZ2V0QXR0cmlidXRlSXRlbSh3aWR0aEF0dHIpKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCmlu
ZGV4IDUxZWQzMmUuLjczN2E0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKQEAgLTIxMCw3ICsyMTAsNyBAQCB2b2lkIEhU
TUxDb25zdHJ1Y3Rpb25TaXRlOjptZXJnZUF0dHJpYnV0ZXNGcm9tVG9rZW5JbnRvRWxlbWVudChB
dG9taWNIVE1MVG9rZW4qCiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdG9rZW4tPmF0
dHJpYnV0ZXMoKS5zaXplKCk7ICsraSkgewogICAgICAgICBjb25zdCBBdHRyaWJ1dGUmIHRva2Vu
QXR0cmlidXRlID0gdG9rZW4tPmF0dHJpYnV0ZXMoKS5hdChpKTsKLSAgICAgICAgaWYgKCFlbGVt
ZW50LT5hdHRyaWJ1dGVEYXRhKCkgfHwgIWVsZW1lbnQtPmdldEF0dHJpYnV0ZUl0ZW0odG9rZW5B
dHRyaWJ1dGUubmFtZSgpKSkKKyAgICAgICAgaWYgKCFlbGVtZW50LT5lbGVtZW50RGF0YSgpIHx8
ICFlbGVtZW50LT5nZXRBdHRyaWJ1dGVJdGVtKHRva2VuQXR0cmlidXRlLm5hbWUoKSkpCiAgICAg
ICAgICAgICBlbGVtZW50LT5zZXRBdHRyaWJ1dGUodG9rZW5BdHRyaWJ1dGUubmFtZSgpLCB0b2tl
bkF0dHJpYnV0ZS52YWx1ZSgpKTsKICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdmcvU1ZHRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAK
aW5kZXggYTdlM2Y4OS4uYjQ4YWRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcApAQCAt
NTQ0LDEzICs1NDQsMTMgQEAgdm9pZCBTVkdFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYKIAogdm9pZCBTVkdFbGVt
ZW50Ojp1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
KSBjb25zdAogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpIHx8ICFhdHRyaWJ1dGVEYXRhKCkt
Pm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgp
IHx8ICFlbGVtZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KQogICAg
ICAgICByZXR1cm47CiAKICAgICBTVkdFbGVtZW50KiBub25Db25zdFRoaXMgPSBjb25zdF9jYXN0
PFNWR0VsZW1lbnQqPih0aGlzKTsKICAgICBpZiAobmFtZSA9PSBhbnlRTmFtZSgpKSB7CiAgICAg
ICAgIG5vbkNvbnN0VGhpcy0+bG9jYWxBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwKCkuc3luY2hyb25p
emVQcm9wZXJ0aWVzKG5vbkNvbnN0VGhpcyk7Ci0gICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9h
bmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSA9IGZhbHNlOworICAgICAgICBlbGVtZW50RGF0
YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5ID0gZmFsc2U7CiAgICAgfSBlbHNl
CiAgICAgICAgIG5vbkNvbnN0VGhpcy0+bG9jYWxBdHRyaWJ1dGVUb1Byb3BlcnR5TWFwKCkuc3lu
Y2hyb25pemVQcm9wZXJ0eShub25Db25zdFRoaXMsIG5hbWUpOwogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVt
ZW50LmgKaW5kZXggN2Y2MzEyZi4uYmEyOTc2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0VsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCkBA
IC03OSw3ICs3OSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgQWZmaW5lVHJhbnNmb3JtKiBz
dXBwbGVtZW50YWxUcmFuc2Zvcm0oKSB7IHJldHVybiAwOyB9CiAKLSAgICB2b2lkIGludmFsaWRh
dGVTVkdBdHRyaWJ1dGVzKCkgeyBlbnN1cmVBdHRyaWJ1dGVEYXRhKCktPm1fYW5pbWF0ZWRTVkdB
dHRyaWJ1dGVzQXJlRGlydHkgPSB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU1ZHQXR0cmli
dXRlcygpIHsgZW5zdXJlRWxlbWVudERhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVE
aXJ0eSA9IHRydWU7IH0KIAogICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4m
IGluc3RhbmNlc0ZvckVsZW1lbnQoKSBjb25zdDsKIAo=
</data>
<flag name="commit-queue"
          id="207678"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188108</attachid>
            <date>2013-02-13 10:05:03 -0800</date>
            <delta_ts>2013-02-13 11:46:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109529-v3.diff</filename>
            <type>text/plain</type>
            <size>76837</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4YWZlOTVmLi4zYjY0NTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ2
IEBACisyMDEzLTAyLTEzICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAg
ICAgICBCZXR0ZXIgbmFtZXMgZm9yIEVsZW1lbnRBdHRyaWJ1dGVEYXRhICYgc3ViY2xhc3Nlcy4K
KyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA5NTI5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRWxlbWVudEF0dHJpYnV0ZURhdGEgPT4g
RWxlbWVudERhdGEKKworICAgICAgICAgICAgQmVjYXVzZSBFbGVtZW50QXR0cmlidXRlRGF0YSB3
b24ndCBiZSBhIGdvb2QgbmFtZSBvbmNlIHdlIG1vdmUgc29tZSBub24tYXR0cmlidXRlIHJlbGF0
ZWQKKyAgICAgICAgICAgIHRoaW5ncyB0byB0aGlzIHN0cnVjdHVyZS4KKworICAgICAgICAtIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhID0+IFNoYXJlYWJsZUVsZW1lbnREYXRhCisKKyAg
ICAgICAgICAgIFRoZXNlIG9iamVjdHMgY2FuIGJlIHNoYXJlZCB3aXRoIG90aGVyIEVsZW1lbnRz
IHRoYXQgaGF2ZSB0aGUgc2FtZSBhdHRyaWJ1dGUgbmFtZS92YWx1ZSBwYWlycy4KKworICAgICAg
ICAtIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSA9PiBQcml2YXRlRWxlbWVudERhdGEKKwor
ICAgICAgICAgICAgVGhlc2Ugb2JqZWN0cyBjb250YWluIGRhdGEgdGhhdCBpcyBwcml2YXRlIHRv
IGEgc3BlY2lmaWMgRWxlbWVudCwgYW5kIGNhbm5vdCBiZSBzaGFyZWQgd2l0aAorICAgICAgICAg
ICAgb3RoZXIgRWxlbWVudHMuIFRoaXMgaXMgd2hhdCdzIGltcG9ydGFudCBhYm91dCBpdCwgbm90
IHRoYXQgaXRzIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBtdXRhYmxlLgorCisgICAgICAgIC0gYXR0
cmlidXRlRGF0YSgpIC0+IGVsZW1lbnREYXRhKCkKKyAgICAgICAgLSB1cGRhdGVkQXR0cmlidXRl
RGF0YSgpIC0+IGVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKQorICAgICAg
ICAtIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgLT4gZW5zdXJlRWxlbWVudERhdGFXaXRo
U3luY2hyb25pemVkQXR0cmlidXRlcygpCisKKyAgICAgICAgICAgIFJpZGUtYWxvbmcgcmVuYW1l
cy4gTXVjaCBsZXNzIHZhZ3VlIHRoYW4gcHJldmlvdXMgbmFtZXMgSU1PLgorCisgICAgICAgICog
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMp
OgorICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OmVsZW1l
bnRBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZUtleTo6U2hhcmVh
YmxlRWxlbWVudERhdGFDYWNoZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWFibGVFbGVt
ZW50RGF0YUNhY2hlS2V5OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlYWJs
ZUVsZW1lbnREYXRhQ2FjaGVFbnRyeTo6U2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZUVudHJ5KToK
KyAgICAgICAgKFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w6OmNhY2hlZFNoYXJlYWJsZUVsZW1lbnREYXRh
V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wu
aDoKKyAgICAgICAgKERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbCk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGV0YWNoQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U3luY2hyb25pemVkTGF6eUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpzaG91bGRJbnZhbGlkYXRlRGlzdHJpYnV0aW9uV2hlbkF0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6Omhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
cmVtb3ZlQXR0cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVB
dHRyaWJ1dGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphZGRBdHRyaWJ1
dGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6aGFzQXR0cmlidXRlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y29t
cHV0ZUluaGVyaXRlZExhbmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldFVS
TEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXROb25FbXB0eVVSTEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUF0dHJpYnV0ZXNGcm9t
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVQcml2YXRlRWxlbWVu
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnREYXRhOjpFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpzaXplRm9yU2hh
cmVhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnREYXRhOjpjcmVhdGVQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlYWJsZUVsZW1lbnREYXRhOjpTaGFyZWFibGVFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWFibGVFbGVtZW50RGF0YTo6flNoYXJlYWJsZUVsZW1lbnREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlByaXZhdGVFbGVtZW50RGF0YTo6UHJpdmF0ZUVsZW1lbnREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjptYWtlTXV0YWJsZUNvcHkpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudERhdGE6Om1ha2VJbW11dGFibGVDb3B5KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnREYXRhOjpzZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50RGF0YTo6YWRkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnREYXRhOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dERhdGE6OmlzRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6cmVw
b3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmdldEF0dHJp
YnV0ZUl0ZW1JbmRleFNsb3dDYXNlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAg
ICAoRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmlzUHJpdmF0
ZSk6CisgICAgICAgIChTaGFyZWFibGVFbGVtZW50RGF0YSk6CisgICAgICAgIChQcml2YXRlRWxl
bWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlSXRlbUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVsZW1lbnREYXRhKToKKyAgICAgICAg
KEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZWxlbWVudERhdGFXaXRoU3lu
Y2hyb25pemVkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVF
bGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmZhc3RIYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
ZmFzdEdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1
dGVzV2l0aG91dFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppZEZvclN0eWxl
UmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbGFzc05hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
Z2V0QXR0cmlidXRlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVJbnZh
bGlkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNJRCk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjplbnN1cmVQcml2YXRlRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dERhdGE6Om11dGFibGVBdHRyaWJ1dGVWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dERhdGE6OmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnREYXRhOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OnByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpnZXRB
dHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1
dGVJdGVtSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0
ZW0pOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmR1
bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1bWVudFBv
c2l0aW9uKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRFbGVtZW50Ojp1cGRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRFbGVtZW50OjplbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZUZyb21TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmlubGluZVN0eWxlQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6cmVidWlsZFByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBo
dG1sL0NsYXNzTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc0xpc3Q6OmNsYXNzTmFt
ZXMpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQpOgorICAgICAg
ICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnVw
ZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6aW52YWxpZGF0ZVNWR0F0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorCiAyMDEzLTAy
LTEzICBDaGFuZ1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KIAogICAgICAgICBbR1RL
XVtBQ10gSW1wbGVtZW50IGJhc2ljIHRyYW5zZm9ybSBhbmltYXRpb25zIHdpdGggY2x1dHRlciBh
YyBiYWNrZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggYjE5YWY3Ni4u
Mjk1NWU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtODcwLDcgKzg3
MCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFv
dGhlcklucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHRoaXNJ
bnB1dEVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+YXR0cmli
dXRlRGF0YSgpKSB7CisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmVsZW1lbnREYXRhKCkgIT0g
b3RoZXJJbnB1dEVsZW1lbnQtPmVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgaWYgKHRoaXNJbnB1
dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IG90aGVySW5wdXRFbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlB
dHRyKSAhPSBvdGhlcklucHV0RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0dHIp
KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0
aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQogYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2Fu
ZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQq
IHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9z
dGF0ZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdD
YW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZWxlbWVu
dERhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5lbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1l
czo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFt
ZXM6OmxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0F0dHIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCmluZGV4
IDBjYzFiMzMuLmIxMzAxYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKQEAgLTIxMCw3ICsyMTAsNyBAQCBj
b25zdCBBdG9taWNTdHJpbmcmIEF0dHI6OnZhbHVlKCkgY29uc3QKIEF0dHJpYnV0ZSYgQXR0cjo6
ZWxlbWVudEF0dHJpYnV0ZSgpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgQVNTRVJU
KG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpKTsKKyAgICBBU1NFUlQobV9lbGVtZW50LT5lbGVt
ZW50RGF0YSgpKTsKICAgICByZXR1cm4gKm1fZWxlbWVudC0+Z2V0QXR0cmlidXRlSXRlbShxdWFs
aWZpZWROYW1lKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRTaGFyZWRPYmplY3RQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJl
ZE9iamVjdFBvb2wuY3BwCmluZGV4IGIxNjk0MTYuLjcyODMxOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCkBAIC0zMSwxNCArMzEsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YUNhY2hlS2V5IHsKK2NsYXNzIFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkgewog
cHVibGljOgotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoY29uc3Qg
QXR0cmlidXRlKiBhdHRyaWJ1dGVzLCB1bnNpZ25lZCBhdHRyaWJ1dGVDb3VudCkKKyAgICBTaGFy
ZWFibGVFbGVtZW50RGF0YUNhY2hlS2V5KGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlcywgdW5z
aWduZWQgYXR0cmlidXRlQ291bnQpCiAgICAgICAgIDogbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
CiAgICAgICAgICwgbV9hdHRyaWJ1dGVDb3VudChhdHRyaWJ1dGVDb3VudCkKICAgICB7IH0KIAot
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNh
Y2hlS2V5JiBvdGhlcikgY29uc3QKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU2hhcmVhYmxl
RWxlbWVudERhdGFDYWNoZUtleSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9h
dHRyaWJ1dGVDb3VudCAhPSBvdGhlci5tX2F0dHJpYnV0ZUNvdW50KQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC01NSw0MCArNTUsNDAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2F0
dHJpYnV0ZUNvdW50OwogfTsKIAotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFD
YWNoZUVudHJ5IHsKK2NsYXNzIFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSB7CiBwdWJs
aWM6Ci0gICAgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFDYWNoZUVudHJ5KGNvbnN0IElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkmIGssIFBhc3NSZWZQdHI8RWxlbWVu
dEF0dHJpYnV0ZURhdGE+IHYpCisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZUVudHJ5KGNv
bnN0IFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkmIGssIFBhc3NSZWZQdHI8RWxlbWVudERh
dGE+IHYpCiAgICAgICAgIDoga2V5KGspCiAgICAgICAgICwgdmFsdWUodikKICAgICB7IH0KIAot
ICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkga2V5OwotICAgIFJlZlB0
cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gdmFsdWU7CisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFD
YWNoZUtleSBrZXk7CisgICAgUmVmUHRyPEVsZW1lbnREYXRhPiB2YWx1ZTsKIH07CiAKLVBhc3NS
ZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbDo6Y2Fj
aGVkSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
IGF0dHJpYnV0ZXMpCitQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBEb2N1bWVudFNoYXJlZE9iamVj
dFBvb2w6OmNhY2hlZFNoYXJlYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJpYnV0ZXMoY29uc3QgVmVj
dG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFhdHRyaWJ1dGVzLmlz
RW1wdHkoKSk7CiAKLSAgICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5IGNh
Y2hlS2V5KGF0dHJpYnV0ZXMuZGF0YSgpLCBhdHRyaWJ1dGVzLnNpemUoKSk7CisgICAgU2hhcmVh
YmxlRWxlbWVudERhdGFDYWNoZUtleSBjYWNoZUtleShhdHRyaWJ1dGVzLmRhdGEoKSwgYXR0cmli
dXRlcy5zaXplKCkpOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IGNhY2hlS2V5Lmhhc2goKTsK
IAotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGU6Oml0ZXJhdG9yIGNhY2hl
SXRlcmF0b3IgPSBtX2ltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGUuYWRkKGNhY2hl
SGFzaCwgbnVsbHB0cikuaXRlcmF0b3I7CisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZTo6
aXRlcmF0b3IgY2FjaGVJdGVyYXRvciA9IG1faW1tdXRhYmxlRWxlbWVudERhdGFDYWNoZS5hZGQo
Y2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKICAgICBpZiAoY2FjaGVJdGVyYXRvci0+dmFs
dWUgJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUtPmtleSAhPSBjYWNoZUtleSkKICAgICAgICAgY2Fj
aGVIYXNoID0gMDsKIAotICAgIFJlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gYXR0cmlidXRl
RGF0YTsKKyAgICBSZWZQdHI8RWxlbWVudERhdGE+IGVsZW1lbnREYXRhOwogICAgIGlmIChjYWNo
ZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUpCi0gICAgICAgIGF0dHJpYnV0ZURhdGEgPSBj
YWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CisgICAgICAgIGVsZW1lbnREYXRhID0gY2FjaGVJ
dGVyYXRvci0+dmFsdWUtPnZhbHVlOwogICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlRGF0YSA9
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFibGUoYXR0cmlidXRlcyk7CisgICAg
ICAgIGVsZW1lbnREYXRhID0gRWxlbWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMpOwogCiAgICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+
dmFsdWUpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLnJlbGVhc2UoKTsKKyAgICAgICAg
cmV0dXJuIGVsZW1lbnREYXRhLnJlbGVhc2UoKTsKIAotICAgIGNhY2hlSXRlcmF0b3ItPnZhbHVl
ID0gYWRvcHRQdHIobmV3IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVFbnRyeShJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5KGF0dHJpYnV0ZURhdGEtPmltbXV0
YWJsZUF0dHJpYnV0ZUFycmF5KCksIGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpKSwgYXR0cmlidXRl
RGF0YSkpOworICAgIGNhY2hlSXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IFNoYXJlYWJs
ZUVsZW1lbnREYXRhQ2FjaGVFbnRyeShTaGFyZWFibGVFbGVtZW50RGF0YUNhY2hlS2V5KGVsZW1l
bnREYXRhLT5pbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpLCBlbGVtZW50RGF0YS0+bGVuZ3RoKCkp
LCBlbGVtZW50RGF0YSkpOwogCi0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEucmVsZWFzZSgpOwor
ICAgIHJldHVybiBlbGVtZW50RGF0YS5yZWxlYXNlKCk7CiB9CiAKIERvY3VtZW50U2hhcmVkT2Jq
ZWN0UG9vbDo6RG9jdW1lbnRTaGFyZWRPYmplY3RQb29sKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuaAppbmRleCA1NDBjOTEzLi4xNTA4NzU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oCkBAIC0zNCwy
MSArMzQsMjEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXR0cmlidXRlOwotY2xh
c3MgRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRl
RGF0YUNhY2hlRW50cnk7CitjbGFzcyBFbGVtZW50RGF0YTsKK2NsYXNzIFNoYXJlYWJsZUVsZW1l
bnREYXRhQ2FjaGVFbnRyeTsKIAogY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wpOyB9
CiAgICAgfkRvY3VtZW50U2hhcmVkT2JqZWN0UG9vbCgpOwogCi0gICAgUGFzc1JlZlB0cjxFbGVt
ZW50QXR0cmlidXRlRGF0YT4gY2FjaGVkSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29u
c3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBjYWNo
ZWRTaGFyZWFibGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1
dGU+Jik7CiAKIHByaXZhdGU6CiAgICAgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sKCk7CiAKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIE93blB0cjxJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YUNhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YUNhY2hlOwotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGUgbV9p
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlOworICAgIHR5cGVkZWYgSGFzaE1hcDx1
bnNpZ25lZCwgT3duUHRyPFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeT4sIEFscmVhZHlI
YXNoZWQ+IFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGU7CisgICAgU2hhcmVhYmxlRWxlbWVudERh
dGFDYWNoZSBtX2ltbXV0YWJsZUVsZW1lbnREYXRhQ2FjaGU7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggOTUwNTE4ZC4uMDIxYmIzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtMjc2LDkgKzI3Niw5IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y2xvbmVFbGVt
ZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpCiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxl
bWVudDo6ZGV0YWNoQXR0cmlidXRlKHNpemVfdCBpbmRleCkKIHsKLSAgICBBU1NFUlQoYXR0cmli
dXRlRGF0YSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CiAKLSAgICBjb25zdCBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCk7
CisgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVtZW50RGF0YSgpLT5hdHRyaWJ1
dGVJdGVtKGluZGV4KTsKICAgICBBU1NFUlQoYXR0cmlidXRlKTsKIAogICAgIFJlZlB0cjxBdHRy
PiBhdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhhdHRyaWJ1dGUtPm5hbWUoKSk7CkBAIC0yOTMsMTAg
KzI5MywxMCBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmRldGFjaEF0dHJpYnV0ZShzaXpl
X3QgaW5kZXgpCiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUpCiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVt
ZW50RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgaW5kZXggPSBhdHRyaWJ1
dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBzaXplX3QgaW5kZXgg
PSBlbGVtZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7CiAgICAgaWYgKGlu
ZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAKQEAgLTMxMyw3ICszMTMsNyBAQCB2
b2lkIEVsZW1lbnQ6OnNldEJvb2xlYW5BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgYm9vbCB2YWx1ZSkKIAogTmFtZWROb2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVzKCkgY29u
c3QKIHsKLSAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpOworICAgIGVuc3VyZUVsZW1l
bnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKTsKICAgICBFbGVtZW50UmFyZURhdGEq
IHJhcmVEYXRhID0gY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcyktPmVuc3VyZUVsZW1lbnRSYXJl
RGF0YSgpOwogICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IHJhcmVEYXRhLT5h
dHRyaWJ1dGVNYXAoKSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU1hcDsKQEAgLTMzNCwxNCAr
MzM0LDE0IEBAIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVE
YXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207
CiAKLSAgICBpZiAoVU5MSUtFTFkobmFtZSA9PSBzdHlsZUF0dHIgJiYgYXR0cmlidXRlRGF0YSgp
LT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSkpCisgICAgaWYgKFVOTElLRUxZKG5hbWUgPT0gc3R5
bGVBdHRyICYmIGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KSkKICAgICAg
ICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKFVO
TElLRUxZKGF0dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkp
CisgICAgaWYgKFVOTElLRUxZKGVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVz
QXJlRGlydHkpKQogICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShuYW1lKTsKICNl
bmRpZgogCkBAIC03MDYsMjMgKzcwNiwyMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkSWdu
b3JlQXR0cmlidXRlQ2FzZShjb25zdCBFbGVtZW50KiBlKQogCiBjb25zdCBBdG9taWNTdHJpbmcm
IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7
Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAg
ICAgICByZXR1cm4gbnVsbEF0b207CiAKICAgICBib29sIGlnbm9yZUNhc2UgPSBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKHRoaXMpOwogCiAgICAgLy8gVXBkYXRlIHRoZSAnc3R5bGUnIGF0dHJp
YnV0ZSBpZiBpdCdzIGludmFsaWQgYW5kIGJlaW5nIHJlcXVlc3RlZDoKLSAgICBpZiAoYXR0cmli
dXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSAmJiBlcXVhbFBvc3NpYmx5SWdub3Jp
bmdDYXNlKG5hbWUsIHN0eWxlQXR0ci5sb2NhbE5hbWUoKSwgaWdub3JlQ2FzZSkpCisgICAgaWYg
KGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ICYmIGVxdWFsUG9zc2libHlJ
Z25vcmluZ0Nhc2UobmFtZSwgc3R5bGVBdHRyLmxvY2FsTmFtZSgpLCBpZ25vcmVDYXNlKSkKICAg
ICAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYg
KGF0dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkgeworICAg
IGlmIChlbGVtZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KSB7CiAg
ICAgICAgIC8vIFdlJ3JlIG5vdCBwYXNzaW5nIGEgbmFtZXNwYWNlIGFyZ3VtZW50IG9uIHB1cnBv
c2UuIFNWR05hbWVzOjoqQXR0ciBhcmUgZGVmaW5lZCB3L28gbmFtZXNwYWNlcyBhcyB3ZWxsLgog
ICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBuYW1lLCBudWxsQXRvbSkpOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGNvbnN0IEF0dHJp
YnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUs
IGlnbm9yZUNhc2UpKQorICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1l
bnREYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgaWdub3JlQ2FzZSkpCiAgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQpAQCAtNzQx
LDE5ICs3NDEsMTkgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogCiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFt
ZS5sb3dlcigpIDogbmFtZTsKIAotICAgIHNpemVfdCBpbmRleCA9IGVuc3VyZVVwZGF0ZWRBdHRy
aWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKKyAg
ICBzaXplX3QgaW5kZXggPSBlbnN1cmVFbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1
dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBxTmFtZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlSXRl
bShpbmRleCktPm5hbWUoKSA6IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbnVs
bEF0b20pOwogICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGluZGV4LCBxTmFtZSwgdmFsdWUsIE5v
dEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKIH0KIAogdm9pZCBFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbnN1cmVVcGRhdGVkQXR0cmli
dXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBOb3RJ
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CisgICAgc2V0QXR0cmlidXRlSW50ZXJu
YWwoZW5zdXJlRWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpLT5nZXRBdHRy
aWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBOb3RJblN5bmNocm9uaXphdGlvbk9m
TGF6eUF0dHJpYnV0ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0U3luY2hyb25pemVkTGF6eUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQogewotICAgIHNldEF0dHJpYnV0ZUludGVybmFsKG11dGFibGVBdHRyaWJ1dGVEYXRhKCkt
PmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKSwgbmFtZSwgdmFsdWUsIEluU3luY2hyb25pemF0
aW9uT2ZMYXp5QXR0cmlidXRlKTsKKyAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbnN1cmVQcml2
YXRlRWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpLCBuYW1lLCB2YWx1
ZSwgSW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogfQogCiBpbmxpbmUgdm9pZCBF
bGVtZW50OjpzZXRBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUsIFN5bmNocm9uaXphdGlv
bk9mTGF6eUF0dHJpYnV0ZSBpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkKQEAgLTc3
NCwxMiArNzc0LDEyIEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZUludGVybmFs
KHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtCiAKICAgICBpZiAobmV3VmFs
dWUgIT0gYXR0cmlidXRlSXRlbShpbmRleCktPnZhbHVlKCkpIHsKICAgICAgICAgLy8gSWYgdGhl
cmUgaXMgYW4gQXR0ciBub2RlIGhvb2tlZCB0byB0aGlzIGF0dHJpYnV0ZSwgdGhlIEF0dHI6OnNl
dFZhbHVlKCkgY2FsbCBiZWxvdwotICAgICAgICAvLyB3aWxsIHdyaXRlIGludG8gdGhlIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhLgorICAgICAgICAvLyB3aWxsIHdyaXRlIGludG8gdGhlIEVsZW1lbnRE
YXRhLgogICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBzbyBpdCBtYWtlcyBzb21lIHNl
bnNlLgogICAgICAgICBpZiAoUmVmUHRyPEF0dHI+IGF0dHJOb2RlID0gaW5TeW5jaHJvbml6YXRp
b25PZkxhenlBdHRyaWJ1dGUgPyAwIDogYXR0cklmRXhpc3RzKG5hbWUpKQogICAgICAgICAgICAg
YXR0ck5vZGUtPnNldFZhbHVlKG5ld1ZhbHVlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bXV0YWJsZUF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCktPnNldFZhbHVlKG5l
d1ZhbHVlKTsKKyAgICAgICAgICAgIGVuc3VyZVByaXZhdGVFbGVtZW50RGF0YSgpLT5hdHRyaWJ1
dGVJdGVtKGluZGV4KS0+c2V0VmFsdWUobmV3VmFsdWUpOwogICAgIH0KIAogICAgIGlmICghaW5T
eW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC04MTksMTAgKzgxOSwxMCBAQCB2b2lk
IEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuZQogICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZVN0eWxlID0gZmFs
c2U7CiAKICAgICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpIHsKLSAgICAgICAgQXRvbWlj
U3RyaW5nIG9sZElkID0gYXR0cmlidXRlRGF0YSgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOwor
ICAgICAgICBBdG9taWNTdHJpbmcgb2xkSWQgPSBlbGVtZW50RGF0YSgpLT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpOwogICAgICAgICBBdG9taWNTdHJpbmcgbmV3SWQgPSBtYWtlSWRGb3JTdHlsZVJl
c29sdXRpb24obmV3VmFsdWUsIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKICAgICAgICAg
aWYgKG5ld0lkICE9IG9sZElkKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPnNldElk
Rm9yU3R5bGVSZXNvbHV0aW9uKG5ld0lkKTsKKyAgICAgICAgICAgIGVsZW1lbnREYXRhKCktPnNl
dElkRm9yU3R5bGVSZXNvbHV0aW9uKG5ld0lkKTsKICAgICAgICAgICAgIHNob3VsZEludmFsaWRh
dGVTdHlsZSA9IHRlc3RTaG91bGRJbnZhbGlkYXRlU3R5bGUgJiYgY2hlY2tOZWVkc1N0eWxlSW52
YWxpZGF0aW9uRm9ySWRDaGFuZ2Uob2xkSWQsIG5ld0lkLCBzdHlsZVJlc29sdmVyKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjbGFzc0F0dHIpCkBAIC05MjIsMTQgKzkyMiwx
NCBAQCB2b2lkIEVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJp
bmcmIG5ld0NsYXNzU3RyaW5nKQogCiAgICAgaWYgKGNsYXNzU3RyaW5nSGFzQ2xhc3NOYW1lKG5l
d0NsYXNzU3RyaW5nKSkgewogICAgICAgICBjb25zdCBib29sIHNob3VsZEZvbGRDYXNlID0gZG9j
dW1lbnQoKS0+aW5RdWlya3NNb2RlKCk7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcg
b2xkQ2xhc3NlcyA9IGF0dHJpYnV0ZURhdGEoKS0+Y2xhc3NOYW1lcygpOwotICAgICAgICBhdHRy
aWJ1dGVEYXRhKCktPnNldENsYXNzKG5ld0NsYXNzU3RyaW5nLCBzaG91bGRGb2xkQ2FzZSk7Ci0g
ICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG5ld0NsYXNzZXMgPSBhdHRyaWJ1dGVEYXRh
KCktPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyBvbGRDbGFz
c2VzID0gZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1lcygpOworICAgICAgICBlbGVtZW50RGF0YSgp
LT5zZXRDbGFzcyhuZXdDbGFzc1N0cmluZywgc2hvdWxkRm9sZENhc2UpOworICAgICAgICBjb25z
dCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzID0gZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1l
cygpOwogICAgICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUgPSB0ZXN0U2hvdWxkSW52YWxpZGF0
ZVN0eWxlICYmIGNoZWNrU2VsZWN0b3JGb3JDbGFzc0NoYW5nZShvbGRDbGFzc2VzLCBuZXdDbGFz
c2VzLCAqc3R5bGVSZXNvbHZlcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgU3BhY2VT
cGxpdFN0cmluZyYgb2xkQ2xhc3NlcyA9IGF0dHJpYnV0ZURhdGEoKS0+Y2xhc3NOYW1lcygpOwor
ICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEo
KS0+Y2xhc3NOYW1lcygpOwogICAgICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUgPSB0ZXN0U2hv
dWxkSW52YWxpZGF0ZVN0eWxlICYmIGNoZWNrU2VsZWN0b3JGb3JDbGFzc0NoYW5nZShvbGRDbGFz
c2VzLCAqc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+Y2xlYXJDbGFz
cygpOworICAgICAgICBlbGVtZW50RGF0YSgpLT5jbGVhckNsYXNzKCk7CiAgICAgfQogCiAgICAg
aWYgKGhhc1JhcmVEYXRhKCkpCkBAIC05NDUsNyArOTQ1LDcgQEAgYm9vbCBFbGVtZW50OjpzaG91
bGRJbnZhbGlkYXRlRGlzdHJpYnV0aW9uV2hlbkF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudFNoYWRv
dyogZWwKICAgICBjb25zdCBTZWxlY3RSdWxlRmVhdHVyZVNldCYgZmVhdHVyZVNldCA9IGVsZW1l
bnRTaGFkb3ctPmRpc3RyaWJ1dG9yKCkuZW5zdXJlU2VsZWN0RmVhdHVyZVNldChlbGVtZW50U2hh
ZG93KTsKIAogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkgewotICAgICAgICBBdG9t
aWNTdHJpbmcgb2xkSWQgPSBhdHRyaWJ1dGVEYXRhKCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7
CisgICAgICAgIEF0b21pY1N0cmluZyBvbGRJZCA9IGVsZW1lbnREYXRhKCktPmlkRm9yU3R5bGVS
ZXNvbHV0aW9uKCk7CiAgICAgICAgIEF0b21pY1N0cmluZyBuZXdJZCA9IG1ha2VJZEZvclN0eWxl
UmVzb2x1dGlvbihuZXdWYWx1ZSwgZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOwogICAgICAg
ICBpZiAobmV3SWQgIT0gb2xkSWQpIHsKICAgICAgICAgICAgIGlmICghb2xkSWQuaXNFbXB0eSgp
ICYmIGZlYXR1cmVTZXQuaGFzU2VsZWN0b3JGb3JJZChvbGRJZCkpCkBAIC05NTksMTIgKzk1OSwx
MiBAQCBib29sIEVsZW1lbnQ6OnNob3VsZEludmFsaWRhdGVEaXN0cmlidXRpb25XaGVuQXR0cmli
dXRlQ2hhbmdlZChFbGVtZW50U2hhZG93KiBlbAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0NsYXNzU3RyaW5nID0gbmV3VmFsdWU7CiAgICAgICAgIGlmIChjbGFzc1N0cmluZ0hhc0Ns
YXNzTmFtZShuZXdDbGFzc1N0cmluZykpIHsKICAgICAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxk
Rm9sZENhc2UgPSBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKTsKLSAgICAgICAgICAgIGNvbnN0
IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMgPSBhdHRyaWJ1dGVEYXRhKCktPmNsYXNzTmFt
ZXMoKTsKKyAgICAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMgPSBl
bGVtZW50RGF0YSgpLT5jbGFzc05hbWVzKCk7CiAgICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0
U3RyaW5nIG5ld0NsYXNzZXMobmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNlKTsKICAgICAg
ICAgICAgIGlmIChjaGVja1NlbGVjdG9yRm9yQ2xhc3NDaGFuZ2Uob2xkQ2xhc3NlcywgbmV3Q2xh
c3NlcywgZmVhdHVyZVNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2Vz
ID0gYXR0cmlidXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAgICAgICAgICBjb25zdCBTcGFj
ZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1lcygpOwog
ICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3JGb3JDbGFzc0NoYW5nZShvbGRDbGFzc2VzLCBm
ZWF0dXJlU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
OTk1LDcgKzk5NSw3IEBAIHZvaWQgRWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlcyhjb25zdCBW
ZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlVmVjdG9yLCBGcmFnCiAgICAgQVNTRVJUKCFpbkRv
Y3VtZW50KCkpOwogICAgIEFTU0VSVCghcGFyZW50Tm9kZSgpKTsKIAotICAgIEFTU0VSVCghbV9h
dHRyaWJ1dGVEYXRhKTsKKyAgICBBU1NFUlQoIW1fZWxlbWVudERhdGEpOwogCiAgICAgaWYgKGF0
dHJpYnV0ZVZlY3Rvci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMjAsMTIgKzEw
MjAsMTIgQEAgdm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxB
dHRyaWJ1dGU+JiBhdHRyaWJ1dGVWZWN0b3IsIEZyYWcKICAgICB9CiAKICAgICBpZiAoZG9jdW1l
bnQoKSAmJiBkb2N1bWVudCgpLT5zaGFyZWRPYmplY3RQb29sKCkpCi0gICAgICAgIG1fYXR0cmli
dXRlRGF0YSA9IGRvY3VtZW50KCktPnNoYXJlZE9iamVjdFBvb2woKS0+Y2FjaGVkSW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEoZmlsdGVyZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbV9lbGVt
ZW50RGF0YSA9IGRvY3VtZW50KCktPnNoYXJlZE9iamVjdFBvb2woKS0+Y2FjaGVkU2hhcmVhYmxl
RWxlbWVudERhdGFXaXRoQXR0cmlidXRlcyhmaWx0ZXJlZEF0dHJpYnV0ZXMpOwogICAgIGVsc2UK
LSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUlt
bXV0YWJsZShmaWx0ZXJlZEF0dHJpYnV0ZXMpOworICAgICAgICBtX2VsZW1lbnREYXRhID0gRWxl
bWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKGZpbHRlcmVkQXR0cmlidXRl
cyk7CiAKICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHdlIGFscmVh
ZHkgaGF2ZSBvbiB0aGUgc3RhY2sgaW4gY2FzZQotICAgIC8vIGF0dHJpYnV0ZUNoYW5nZWQgbXV0
YXRlcyBtX2F0dHJpYnV0ZURhdGEuCisgICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1f
ZWxlbWVudERhdGEuCiAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgc28gd2UgZG9uJ3QgaGF2ZSB0
byBkbyB0aGlzLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJlZEF0dHJpYnV0
ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoZmlsdGVyZWRBdHRyaWJ1
dGVzW2ldLm5hbWUoKSwgZmlsdGVyZWRBdHRyaWJ1dGVzW2ldLnZhbHVlKCkpOwpAQCAtMTAzNCwx
OSArMTAzNCwxOSBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMoY29uc3QgVmVj
dG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZVZlY3RvciwgRnJhZwogYm9vbCBFbGVtZW50OjpoYXNB
dHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAg
IHJldHVybiBhdHRyaWJ1dGVEYXRhKCkgJiYgYXR0cmlidXRlRGF0YSgpLT5sZW5ndGgoKTsKKyAg
ICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiBlbGVtZW50RGF0YSgpLT5sZW5ndGgoKTsKIH0KIAog
Ym9vbCBFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50KiBvdGhl
cikgY29uc3QKIHsKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0
YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURh
dGEqIG90aGVyQXR0cmlidXRlRGF0YSA9IG90aGVyLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOwot
ICAgIGlmIChhdHRyaWJ1dGVEYXRhID09IG90aGVyQXR0cmlidXRlRGF0YSkKKyAgICBjb25zdCBF
bGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBlbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRy
aWJ1dGVzKCk7CisgICAgY29uc3QgRWxlbWVudERhdGEqIG90aGVyRWxlbWVudERhdGEgPSBvdGhl
ci0+ZWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpOworICAgIGlmIChlbGVt
ZW50RGF0YSA9PSBvdGhlckVsZW1lbnREYXRhKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAoYXR0cmlidXRlRGF0YSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEtPmlzRXF1aXZh
bGVudChvdGhlckF0dHJpYnV0ZURhdGEpOwotICAgIGlmIChvdGhlckF0dHJpYnV0ZURhdGEpCi0g
ICAgICAgIHJldHVybiBvdGhlckF0dHJpYnV0ZURhdGEtPmlzRXF1aXZhbGVudChhdHRyaWJ1dGVE
YXRhKTsKKyAgICBpZiAoZWxlbWVudERhdGEpCisgICAgICAgIHJldHVybiBlbGVtZW50RGF0YS0+
aXNFcXVpdmFsZW50KG90aGVyRWxlbWVudERhdGEpOworICAgIGlmIChvdGhlckVsZW1lbnREYXRh
KQorICAgICAgICByZXR1cm4gb3RoZXJFbGVtZW50RGF0YS0+aXNFcXVpdmFsZW50KGVsZW1lbnRE
YXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY4NywxNCArMTY4NywxNCBAQCBQYXNz
UmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoQXR0ciogYXR0ck5vZGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KIAogICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7
Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtdXRhYmxlQXR0cmli
dXRlRGF0YSgpOworICAgIEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVuc3VyZVByaXZhdGVF
bGVtZW50RGF0YSgpOwogCi0gICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0
cmlidXRlSXRlbUluZGV4KGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCkpOworICAgIHNpemVfdCBp
bmRleCA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0ck5vZGUtPnF1YWxp
ZmllZE5hbWUoKSk7CiAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIGlmIChv
bGRBdHRyTm9kZSkKLSAgICAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFs
dWUob2xkQXR0ck5vZGUuZ2V0KCksIGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgp
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFs
dWUob2xkQXR0ck5vZGUuZ2V0KCksIGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+
dmFsdWUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9sZEF0dHJOb2RlID0gQXR0cjo6
Y3JlYXRlKGRvY3VtZW50KCksIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCksIGF0dHJpYnV0ZURh
dGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG9sZEF0dHJO
b2RlID0gQXR0cjo6Y3JlYXRlKGRvY3VtZW50KCksIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCks
IGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKSk7CiAgICAgfQogCiAg
ICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCks
IGF0dHJOb2RlLT52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7
CkBAIC0xNzIzLDEwICsxNzIzLDEwIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6cmVtb3Zl
QXR0cmlidXRlTm9kZShBdHRyKiBhdHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIEFTU0VS
VChkb2N1bWVudCgpID09IGF0dHItPmRvY3VtZW50KCkpOwogCi0gICAgY29uc3QgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwotICAg
IEFTU0VSVChhdHRyaWJ1dGVEYXRhKTsKKyAgICBjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERh
dGEgPSBlbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1dGVzKCk7CisgICAgQVNTRVJU
KGVsZW1lbnREYXRhKTsKIAotICAgIHNpemVfdCBpbmRleCA9IGF0dHJpYnV0ZURhdGEtPmdldEF0
dHJpYnV0ZUl0ZW1JbmRleChhdHRyLT5xdWFsaWZpZWROYW1lKCkpOworICAgIHNpemVfdCBpbmRl
eCA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0ci0+cXVhbGlmaWVkTmFt
ZSgpKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKICAgICAgICAgZWMgPSBOT1RfRk9V
TkRfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE3NjUsMTAgKzE3NjUsMTAgQEAgdm9pZCBF
bGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIFN5bmNocm9uaXph
dGlvbk9mTGF6eUF0dHJpYnUKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihpbmRleCA8IGF0dHJpYnV0ZUNvdW50KCkpOwogCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZURhdGEgPSBtdXRhYmxlQXR0cmlidXRlRGF0YSgpOworICAgIEVsZW1lbnREYXRh
KiBlbGVtZW50RGF0YSA9IGVuc3VyZVByaXZhdGVFbGVtZW50RGF0YSgpOwogCi0gICAgUXVhbGlm
aWVkTmFtZSBuYW1lID0gYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUo
KTsKLSAgICBBdG9taWNTdHJpbmcgdmFsdWVCZWluZ1JlbW92ZWQgPSBhdHRyaWJ1dGVEYXRhLT5h
dHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKTsKKyAgICBRdWFsaWZpZWROYW1lIG5hbWUgPSBl
bGVtZW50RGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUoKTsKKyAgICBBdG9taWNTdHJp
bmcgdmFsdWVCZWluZ1JlbW92ZWQgPSBlbGVtZW50RGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCkt
PnZhbHVlKCk7CiAKICAgICBpZiAoIWluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKSB7
CiAgICAgICAgIGlmICghdmFsdWVCZWluZ1JlbW92ZWQuaXNOdWxsKCkpCkBAIC0xNzc2LDkgKzE3
NzYsOSBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZUludGVybmFsKHNpemVfdCBpbmRl
eCwgU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidQogICAgIH0KIAogICAgIGlmIChSZWZQdHI8
QXR0cj4gYXR0ck5vZGUgPSBhdHRySWZFeGlzdHMobmFtZSkpCi0gICAgICAgIGRldGFjaEF0dHJO
b2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUoYXR0ck5vZGUuZ2V0KCksIGF0dHJpYnV0ZURhdGEtPmF0
dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpKTsKKyAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9t
RWxlbWVudFdpdGhWYWx1ZShhdHRyTm9kZS5nZXQoKSwgZWxlbWVudERhdGEtPmF0dHJpYnV0ZUl0
ZW0oaW5kZXgpLT52YWx1ZSgpKTsKIAotICAgIGF0dHJpYnV0ZURhdGEtPnJlbW92ZUF0dHJpYnV0
ZShpbmRleCk7CisgICAgZWxlbWVudERhdGEtPnJlbW92ZUF0dHJpYnV0ZShpbmRleCk7CiAKICAg
ICBpZiAoIWluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogICAgICAgICBkaWRSZW1v
dmVBdHRyaWJ1dGUobmFtZSk7CkBAIC0xNzg4LDIwICsxNzg4LDIwIEBAIHZvaWQgRWxlbWVudDo6
YWRkQXR0cmlidXRlSW50ZXJuYWwoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nCiB7CiAgICAgaWYgKCFpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkK
ICAgICAgICAgd2lsbE1vZGlmeUF0dHJpYnV0ZShuYW1lLCBudWxsQXRvbSwgdmFsdWUpOwotICAg
IG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPmFkZEF0dHJpYnV0ZShBdHRyaWJ1dGUobmFtZSwgdmFs
dWUpKTsKKyAgICBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKS0+YWRkQXR0cmlidXRlKEF0dHJp
YnV0ZShuYW1lLCB2YWx1ZSkpOwogICAgIGlmICghaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRy
aWJ1dGUpCiAgICAgICAgIGRpZEFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAg
ICBpZiAoIWF0dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoIWVsZW1lbnREYXRhKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRy
aWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFtZTsKLSAgICBzaXplX3QgaW5kZXgg
PSBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNl
KTsKKyAgICBzaXplX3QgaW5kZXggPSBlbGVtZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5k
ZXgobG9jYWxOYW1lLCBmYWxzZSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShsb2NhbE5hbWUgPT0gc3R5bGVBdHRyKSAmJiBhdHRyaWJ1dGVEYXRh
KCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ICYmIGlzU3R5bGVkRWxlbWVudCgpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkobG9jYWxOYW1lID09IHN0eWxlQXR0cikgJiYgZWxlbWVudERhdGEoKS0+
bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgJiYgaXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4odGhpcyktPnJlbW92ZUFsbElubGluZVN0eWxl
UHJvcGVydGllcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTgxNiwxMCArMTgxNiwx
MCBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdAogCiBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6
OmdldEF0dHJpYnV0ZU5vZGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIGNvbnN0
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gdXBkYXRlZEF0dHJpYnV0ZURh
dGEoKTsKLSAgICBpZiAoIWF0dHJpYnV0ZURhdGEpCisgICAgY29uc3QgRWxlbWVudERhdGEqIGVs
ZW1lbnREYXRhID0gZWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpOworICAg
IGlmICghZWxlbWVudERhdGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IEF0dHJpYnV0
ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBzaG91
bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpKTsKKyAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJp
YnV0ZSA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UodGhpcykpOwogICAgIGlmICghYXR0cmlidXRlKQogICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gZW5zdXJlQXR0cihhdHRyaWJ1dGUtPm5hbWUoKSk7CkBAIC0xODI3LDEw
ICsxODI3LDEwIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0
QXR0cmlidXRlTm9kZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKIHsKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0
YSogYXR0cmlidXRlRGF0YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgaWYgKCFhdHRy
aWJ1dGVEYXRhKQorICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVsZW1lbnRE
YXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWVsZW1lbnREYXRhKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJp
YnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxO
YW1lLCBuYW1lc3BhY2VVUkkpKTsKKyAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVs
ZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2Fs
TmFtZSwgbmFtZXNwYWNlVVJJKSk7CiAgICAgaWYgKCFhdHRyaWJ1dGUpCiAgICAgICAgIHJldHVy
biAwOwogICAgIHJldHVybiBlbnN1cmVBdHRyKGF0dHJpYnV0ZS0+bmFtZSgpKTsKQEAgLTE4Mzgs
MjEgKzE4MzgsMjEgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2Rl
TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGMKIAogYm9vbCBFbGVtZW50Ojpo
YXNBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIGlmICgh
YXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gVGhpcyBjYWxsIHRvIFN0cmluZzo6bG93ZXIoKSBzZWVtcyB0byBi
ZSByZXF1aXJlZCBidXQKICAgICAvLyB0aGVyZSBtYXkgYmUgYSB3YXkgdG8gcmVtb3ZlIGl0Lgog
ICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRo
aXMpID8gbmFtZS5sb3dlcigpIDogbmFtZTsKLSAgICByZXR1cm4gdXBkYXRlZEF0dHJpYnV0ZURh
dGEoKS0+Z2V0QXR0cmlidXRlSXRlbShsb2NhbE5hbWUsIGZhbHNlKTsKKyAgICByZXR1cm4gZWxl
bWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVtKGxv
Y2FsTmFtZSwgZmFsc2UpOwogfQogCiBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFt
ZSkgY29uc3QKIHsKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0
YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKQorICAg
IGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVsZW1lbnREYXRhV2l0aFN5bmNocm9u
aXplZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWVsZW1lbnREYXRhKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKKyAgICByZXR1cm4g
ZWxlbWVudERhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9j
YWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKIH0KIAogQ1NTU3R5bGVEZWNsYXJhdGlvbiAqRWxlbWVu
dDo6c3R5bGUoKQpAQCAtMjE1OSwxMSArMjE1OSwxMSBAQCBBdG9taWNTdHJpbmcgRWxlbWVudDo6
Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCkgY29uc3QKICAgICAvLyBUaGUgbGFuZ3VhZ2UgcHJv
cGVydHkgaXMgaW5oZXJpdGVkLCBzbyB3ZSBpdGVyYXRlIG92ZXIgdGhlIHBhcmVudHMgdG8gZmlu
ZCB0aGUgZmlyc3QgbGFuZ3VhZ2UuCiAgICAgZG8gewogICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0
dHJpYnV0ZURhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obiktPmF0dHJpYnV0ZURh
dGEoKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9
IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihuKS0+ZWxlbWVudERhdGEoKSkgewogICAgICAg
ICAgICAgICAgIC8vIFNwZWM6IHhtbDpsYW5nIHRha2VzIHByZWNlZGVuY2UgLS0gaHR0cDovL3d3
dy53My5vcmcvVFIveGh0bWwxLyNDXzcKLSAgICAgICAgICAgICAgICBpZiAoY29uc3QgQXR0cmli
dXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFhNTE5hbWVz
OjpsYW5nQXR0cikpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmli
dXRlID0gZWxlbWVudERhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oWE1MTmFtZXM6OmxhbmdBdHRyKSkK
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGUtPnZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVE
YXRhLT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZWxlbWVudERhdGEtPmdl
dEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpsYW5nQXR0cikpCiAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKG4tPmlzRG9jdW1lbnROb2RlKCkpIHsKQEAgLTIzMjcsNyArMjMyNyw3IEBAIERPTVN0
cmluZ01hcCogRWxlbWVudDo6ZGF0YXNldCgpCiBLVVJMIEVsZW1lbnQ6OmdldFVSTEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgaWYgKGVsZW1lbnREYXRhKCkpIHsK
ICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlSXRl
bShuYW1lKSkKICAgICAgICAgICAgIEFTU0VSVChpc1VSTEF0dHJpYnV0ZSgqYXR0cmlidXRlKSk7
CiAgICAgfQpAQCAtMjMzOCw3ICsyMzM4LDcgQEAgS1VSTCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIEtVUkwgRWxlbWVudDo6Z2V0Tm9u
RW1wdHlVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkgeworICAgIGlmIChl
bGVtZW50RGF0YSgpKSB7CiAgICAgICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAgICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1
dGUoKmF0dHJpYnV0ZSkpOwogICAgIH0KQEAgLTI3NDUsOCArMjc0NSw4IEBAIHZvaWQgRWxlbWVu
dDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYgb3RoZXIpCiAgICAg
ICAgIGRldGFjaEFsbEF0dHJOb2Rlc0Zyb21FbGVtZW50KCk7CiAKICAgICBvdGhlci51cGRhdGVJ
bnZhbGlkQXR0cmlidXRlcygpOwotICAgIGlmICghb3RoZXIubV9hdHRyaWJ1dGVEYXRhKSB7Ci0g
ICAgICAgIG1fYXR0cmlidXRlRGF0YS5jbGVhcigpOworICAgIGlmICghb3RoZXIubV9lbGVtZW50
RGF0YSkgeworICAgICAgICBtX2VsZW1lbnREYXRhLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTI3NjIsMjAgKzI3NjIsMjAgQEAgdm9pZCBFbGVtZW50OjpjbG9uZUF0dHJp
YnV0ZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKICAgICBpZiAoIW9sZE5hbWUu
aXNOdWxsKCkgfHwgIW5ld05hbWUuaXNOdWxsKCkpCiAgICAgICAgIHVwZGF0ZU5hbWUob2xkTmFt
ZSwgbmV3TmFtZSk7CiAKLSAgICAvLyBJZiAnb3RoZXInIGhhcyBhIG11dGFibGUgRWxlbWVudEF0
dHJpYnV0ZURhdGEsIGNvbnZlcnQgaXQgdG8gYW4gaW1tdXRhYmxlIG9uZSBzbyB3ZSBjYW4gc2hh
cmUgaXQgYmV0d2VlbiBib3RoIGVsZW1lbnRzLgorICAgIC8vIElmICdvdGhlcicgaGFzIGEgbXV0
YWJsZSBFbGVtZW50RGF0YSwgY29udmVydCBpdCB0byBhbiBpbW11dGFibGUgb25lIHNvIHdlIGNh
biBzaGFyZSBpdCBiZXR3ZWVuIGJvdGggZWxlbWVudHMuCiAgICAgLy8gV2UgY2FuIG9ubHkgZG8g
dGhpcyBpZiB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyIGZvciBvdGhlcidzIGlubGluZSBzdHls
ZSwgYW5kIHRoZXJlIGFyZSBubyBwcmVzZW50YXRpb24gYXR0cmlidXRlcy4KLSAgICBpZiAob3Ro
ZXIubV9hdHRyaWJ1dGVEYXRhLT5pc011dGFibGUoKQotICAgICAgICAmJiAhb3RoZXIubV9hdHRy
aWJ1dGVEYXRhLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpCi0gICAgICAgICYmICghb3Ro
ZXIubV9hdHRyaWJ1dGVEYXRhLT5pbmxpbmVTdHlsZSgpIHx8ICFvdGhlci5tX2F0dHJpYnV0ZURh
dGEtPmlubGluZVN0eWxlKCktPmhhc0NTU09NV3JhcHBlcigpKSkKLSAgICAgICAgY29uc3RfY2Fz
dDxFbGVtZW50Jj4ob3RoZXIpLm1fYXR0cmlidXRlRGF0YSA9IG90aGVyLm1fYXR0cmlidXRlRGF0
YS0+bWFrZUltbXV0YWJsZUNvcHkoKTsKKyAgICBpZiAob3RoZXIubV9lbGVtZW50RGF0YS0+aXNQ
cml2YXRlKCkKKyAgICAgICAgJiYgIW90aGVyLm1fZWxlbWVudERhdGEtPnByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKCkKKyAgICAgICAgJiYgKCFvdGhlci5tX2VsZW1lbnREYXRhLT5pbmxpbmVT
dHlsZSgpIHx8ICFvdGhlci5tX2VsZW1lbnREYXRhLT5pbmxpbmVTdHlsZSgpLT5oYXNDU1NPTVdy
YXBwZXIoKSkpCisgICAgICAgIGNvbnN0X2Nhc3Q8RWxlbWVudCY+KG90aGVyKS5tX2VsZW1lbnRE
YXRhID0gb3RoZXIubV9lbGVtZW50RGF0YS0+bWFrZUltbXV0YWJsZUNvcHkoKTsKIAotICAgIGlm
ICghb3RoZXIubV9hdHRyaWJ1dGVEYXRhLT5pc011dGFibGUoKSkKLSAgICAgICAgbV9hdHRyaWJ1
dGVEYXRhID0gb3RoZXIubV9hdHRyaWJ1dGVEYXRhOworICAgIGlmICghb3RoZXIubV9lbGVtZW50
RGF0YS0+aXNQcml2YXRlKCkpCisgICAgICAgIG1fZWxlbWVudERhdGEgPSBvdGhlci5tX2VsZW1l
bnREYXRhOwogICAgIGVsc2UKLSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gb3RoZXIubV9hdHRy
aWJ1dGVEYXRhLT5tYWtlTXV0YWJsZUNvcHkoKTsKKyAgICAgICAgbV9lbGVtZW50RGF0YSA9IG90
aGVyLm1fZWxlbWVudERhdGEtPm1ha2VNdXRhYmxlQ29weSgpOwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBj
b25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGNvbnN0X2Nhc3Q8Y29uc3QgRWxlbWVudEF0dHJp
YnV0ZURhdGEqPihtX2F0dHJpYnV0ZURhdGEuZ2V0KCkpLT5hdHRyaWJ1dGVJdGVtKGkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VsZW1lbnREYXRhLT5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gY29uc3RfY2FzdDxjb25zdCBF
bGVtZW50RGF0YSo+KG1fZWxlbWVudERhdGEuZ2V0KCkpLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAg
ICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVl
KCkpOwogICAgIH0KIH0KQEAgLTI3ODYsMTIgKzI3ODYsMTIgQEAgdm9pZCBFbGVtZW50OjpjbG9u
ZURhdGFGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKICAgICBjb3B5Tm9uQXR0cmli
dXRlUHJvcGVydGllc0Zyb21FbGVtZW50KG90aGVyKTsKIH0KIAotdm9pZCBFbGVtZW50OjpjcmVh
dGVNdXRhYmxlQXR0cmlidXRlRGF0YSgpCit2b2lkIEVsZW1lbnQ6OmNyZWF0ZVByaXZhdGVFbGVt
ZW50RGF0YSgpCiB7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZURhdGEpCi0gICAgICAgIG1fYXR0cmli
dXRlRGF0YSA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGUoKTsKKyAgICBpZiAoIW1fZWxl
bWVudERhdGEpCisgICAgICAgIG1fZWxlbWVudERhdGEgPSBFbGVtZW50RGF0YTo6Y3JlYXRlUHJp
dmF0ZSgpOwogICAgIGVsc2UKLSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gbV9hdHRyaWJ1dGVE
YXRhLT5tYWtlTXV0YWJsZUNvcHkoKTsKKyAgICAgICAgbV9lbGVtZW50RGF0YSA9IG1fZWxlbWVu
dERhdGEtPm1ha2VNdXRhYmxlQ29weSgpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlcG9ydE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CkBAIC0yNzk5
LDcgKzI3OTksNyBAQCB2b2lkIEVsZW1lbnQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8o
bWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOwogICAgIENv
bnRhaW5lck5vZGU6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwogICAgIGlu
Zm8uYWRkTWVtYmVyKG1fdGFnTmFtZSwgInRhZ05hbWUiKTsKLSAgICBpbmZvLmFkZE1lbWJlciht
X2F0dHJpYnV0ZURhdGEsICJhdHRyaWJ1dGVEYXRhIik7CisgICAgaW5mby5hZGRNZW1iZXIobV9l
bGVtZW50RGF0YSwgImVsZW1lbnREYXRhIik7CiB9CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMjgx
OSwxOSArMjgxOSwxOSBAQCB2b2lkIEVsZW1lbnQ6OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlcygp
CiB9CiAjZW5kaWYKIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGVyZWYoKQordm9pZCBF
bGVtZW50RGF0YTo6ZGVyZWYoKQogewogICAgIGlmICghZGVyZWZCYXNlKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2lzTXV0YWJsZSkKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0
PE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpOworICAgIGlmIChtX2lzUHJpdmF0
ZSkKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFByaXZhdGVFbGVtZW50RGF0YSo+KHRoaXMp
OwogICAgIGVsc2UKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PEltbXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKj4odGhpcyk7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTaGFyZWFi
bGVFbGVtZW50RGF0YSo+KHRoaXMpOwogfQogCi1FbGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVu
dEF0dHJpYnV0ZURhdGEoKQotICAgIDogbV9pc011dGFibGUodHJ1ZSkKK0VsZW1lbnREYXRhOjpF
bGVtZW50RGF0YSgpCisgICAgOiBtX2lzUHJpdmF0ZSh0cnVlKQogICAgICwgbV9hcnJheVNpemUo
MCkKICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KGZhbHNlKQogICAg
ICwgbV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkoZmFsc2UpCkBAIC0yODQxLDggKzI4NDEsOCBAQCBF
bGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEoKQogewogfQogCi1FbGVt
ZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEodW5zaWduZWQgYXJyYXlTaXpl
KQotICAgIDogbV9pc011dGFibGUoZmFsc2UpCitFbGVtZW50RGF0YTo6RWxlbWVudERhdGEodW5z
aWduZWQgYXJyYXlTaXplKQorICAgIDogbV9pc1ByaXZhdGUoZmFsc2UpCiAgICAgLCBtX2FycmF5
U2l6ZShhcnJheVNpemUpCiAgICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0
eShmYWxzZSkKICAgICAsIG1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKQpAQCAtMjg1Miw0
NCArMjg1Miw0NCBAQCBFbGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEo
dW5zaWduZWQgYXJyYXlTaXplKQogewogfQogCi1zdHJ1Y3QgU2FtZVNpemVBc0VsZW1lbnRBdHRy
aWJ1dGVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0VsZW1lbnRBdHRyaWJ1dGVE
YXRhPiB7CitzdHJ1Y3QgU2FtZVNpemVBc0VsZW1lbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8
U2FtZVNpemVBc0VsZW1lbnREYXRhPiB7CiAgICAgdW5zaWduZWQgYml0ZmllbGQ7CiAgICAgdm9p
ZCogcmVmUHRyc1szXTsKIH07CiAKLUNPTVBJTEVfQVNTRVJUKHNpemVvZihFbGVtZW50QXR0cmli
dXRlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YSksIGVsZW1l
bnRfYXR0cmlidXRlX2RhdGFfc2hvdWxkX3N0YXlfc21hbGwpOworQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEVsZW1lbnREYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc0VsZW1lbnREYXRhKSwgZWxlbWVu
dF9hdHRyaWJ1dGVfZGF0YV9zaG91bGRfc3RheV9zbWFsbCk7CiAKLXN0YXRpYyBzaXplX3Qgc2l6
ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KHVuc2ln
bmVkIGNvdW50KQorc3RhdGljIHNpemVfdCBzaXplRm9yU2hhcmVhYmxlRWxlbWVudERhdGFXaXRo
QXR0cmlidXRlQ291bnQodW5zaWduZWQgY291bnQpCiB7Ci0gICAgcmV0dXJuIHNpemVvZihJbW11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSkgLSBzaXplb2Yodm9pZCopICsgc2l6ZW9mKEF0dHJp
YnV0ZSkgKiBjb3VudDsKKyAgICByZXR1cm4gc2l6ZW9mKFNoYXJlYWJsZUVsZW1lbnREYXRhKSAt
IHNpemVvZih2b2lkKikgKyBzaXplb2YoQXR0cmlidXRlKSAqIGNvdW50OwogfQogCi1QYXNzUmVm
UHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlSW1t
dXRhYmxlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQorUGFzc1JlZlB0cjxF
bGVtZW50RGF0YT4gRWxlbWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKGNv
bnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQogewotICAgIHZvaWQqIHNsb3QgPSBX
VEY6OmZhc3RNYWxsb2Moc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0
dHJpYnV0ZUNvdW50KGF0dHJpYnV0ZXMuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyAoc2xvdCkgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoYXR0cmlidXRlcykpOworICAg
IHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvclNoYXJlYWJsZUVsZW1lbnREYXRh
V2l0aEF0dHJpYnV0ZUNvdW50KGF0dHJpYnV0ZXMuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyAoc2xvdCkgU2hhcmVhYmxlRWxlbWVudERhdGEoYXR0cmlidXRlcykpOwogfQogCi1Q
YXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3Jl
YXRlKCkKK1Bhc3NSZWZQdHI8RWxlbWVudERhdGE+IEVsZW1lbnREYXRhOjpjcmVhdGVQcml2YXRl
KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcml2YXRlRWxlbWVudERhdGEpOwogfQogCi1J
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCi0gICAgOiBFbGVtZW50QXR0
cmlidXRlRGF0YShhdHRyaWJ1dGVzLnNpemUoKSkKK1NoYXJlYWJsZUVsZW1lbnREYXRhOjpTaGFy
ZWFibGVFbGVtZW50RGF0YShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykKKyAg
ICA6IEVsZW1lbnREYXRhKGF0dHJpYnV0ZXMuc2l6ZSgpKQogewogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2FycmF5U2l6ZTsgKytpKQogICAgICAgICBuZXcgKCZyZWludGVycHJldF9j
YXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkgQXR0cmlidXRlKGF0dHJpYnV0
ZXNbaV0pOwogfQogCi1JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6fkltbXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKCkKK1NoYXJlYWJsZUVsZW1lbnREYXRhOjp+U2hhcmVhYmxlRWxl
bWVudERhdGEoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FycmF5U2l6ZTsg
KytpKQogICAgICAgICAocmVpbnRlcnByZXRfY2FzdDxBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVB
cnJheSlbaV0pLn5BdHRyaWJ1dGUoKTsKIH0KIAotSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGE6OkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0
cmlidXRlRGF0YSYgb3RoZXIpCi0gICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwgZmFs
c2UpCitTaGFyZWFibGVFbGVtZW50RGF0YTo6U2hhcmVhYmxlRWxlbWVudERhdGEoY29uc3QgUHJp
dmF0ZUVsZW1lbnREYXRhJiBvdGhlcikKKyAgICA6IEVsZW1lbnREYXRhKG90aGVyLCBmYWxzZSkK
IHsKICAgICBBU1NFUlQoIW90aGVyLm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOwogCkBA
IC0yOTAyLDkgKzI5MDIsOSBAQCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbgogICAgICAgICBuZXcg
KCZyZWludGVycHJldF9jYXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkgQXR0
cmlidXRlKCpvdGhlci5hdHRyaWJ1dGVJdGVtKGkpKTsKIH0KIAotRWxlbWVudEF0dHJpYnV0ZURh
dGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhl
ciwgYm9vbCBpc011dGFibGUpCi0gICAgOiBtX2lzTXV0YWJsZShpc011dGFibGUpCi0gICAgLCBt
X2FycmF5U2l6ZShpc011dGFibGUgPyAwIDogb3RoZXIubGVuZ3RoKCkpCitFbGVtZW50RGF0YTo6
RWxlbWVudERhdGEoY29uc3QgRWxlbWVudERhdGEmIG90aGVyLCBib29sIGlzUHJpdmF0ZSkKKyAg
ICA6IG1faXNQcml2YXRlKGlzUHJpdmF0ZSkKKyAgICAsIG1fYXJyYXlTaXplKGlzUHJpdmF0ZSA/
IDAgOiBvdGhlci5sZW5ndGgoKSkKICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJ
c0RpcnR5KG90aGVyLm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KQogICAgICwg
bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkob3RoZXIubV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpCiAj
aWYgRU5BQkxFKFNWRykKQEAgLTI5MTYsMjIgKzI5MTYsMjIgQEAgRWxlbWVudEF0dHJpYnV0ZURh
dGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhl
ciwgYm8KICAgICAvLyBOT1RFOiBUaGUgaW5saW5lIHN0eWxlIGlzIGNvcGllZCBieSB0aGUgc3Vi
Y2xhc3MgY29weSBjb25zdHJ1Y3RvciBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0
aCBpdCBoZXJlLgogfQogCi1NdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6Ok11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YSgpCitQcml2YXRlRWxlbWVudERhdGE6OlByaXZhdGVFbGVtZW50RGF0
YSgpCiB7CiB9CiAKLU11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6TXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXIpCi0g
ICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwgdHJ1ZSkKK1ByaXZhdGVFbGVtZW50RGF0
YTo6UHJpdmF0ZUVsZW1lbnREYXRhKGNvbnN0IFByaXZhdGVFbGVtZW50RGF0YSYgb3RoZXIpCisg
ICAgOiBFbGVtZW50RGF0YShvdGhlciwgdHJ1ZSkKICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUob3RoZXIubV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSkKICAgICAsIG1fYXR0
cmlidXRlVmVjdG9yKG90aGVyLm1fYXR0cmlidXRlVmVjdG9yKQogewogICAgIG1faW5saW5lU3R5
bGUgPSBvdGhlci5tX2lubGluZVN0eWxlID8gb3RoZXIubV9pbmxpbmVTdHlsZS0+Y29weSgpIDog
MDsKIH0KIAotTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEoY29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyKQotICAg
IDogRWxlbWVudEF0dHJpYnV0ZURhdGEob3RoZXIsIHRydWUpCitQcml2YXRlRWxlbWVudERhdGE6
OlByaXZhdGVFbGVtZW50RGF0YShjb25zdCBTaGFyZWFibGVFbGVtZW50RGF0YSYgb3RoZXIpCisg
ICAgOiBFbGVtZW50RGF0YShvdGhlciwgdHJ1ZSkKIHsKLSAgICAvLyBBbiBJbW11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YSBzaG91bGQgbmV2ZXIgaGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxl
UHJvcGVydHlTZXQgYXR0YWNoZWQuCisgICAgLy8gQW4gU2hhcmVhYmxlRWxlbWVudERhdGEgc2hv
dWxkIG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlubGluZSBTdHlsZVByb3BlcnR5U2V0IGF0dGFjaGVk
LgogICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVTdHls
ZS0+aXNNdXRhYmxlKCkpOwogICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxl
OwogCkBAIC0yOTQwLDQwICsyOTQwLDQwIEBAIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6
TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBCiAgICAg
ICAgIG1fYXR0cmlidXRlVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChvdGhlci5pbW11dGFibGVBdHRy
aWJ1dGVBcnJheSgpW2ldKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4g
RWxlbWVudEF0dHJpYnV0ZURhdGE6Om1ha2VNdXRhYmxlQ29weSgpIGNvbnN0CitQYXNzUmVmUHRy
PEVsZW1lbnREYXRhPiBFbGVtZW50RGF0YTo6bWFrZU11dGFibGVDb3B5KCkgY29uc3QKIHsKLSAg
ICBpZiAoaXNNdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSY+KCp0aGlzKSkpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhJj4oKnRoaXMpKSk7CisgICAgaWYgKGlzUHJpdmF0ZSgpKQorICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFByaXZhdGVFbGVtZW50RGF0YShzdGF0aWNfY2FzdDxjb25zdCBQcml2YXRl
RWxlbWVudERhdGEmPigqdGhpcykpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByaXZhdGVF
bGVtZW50RGF0YShzdGF0aWNfY2FzdDxjb25zdCBTaGFyZWFibGVFbGVtZW50RGF0YSY+KCp0aGlz
KSkpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmli
dXRlRGF0YTo6bWFrZUltbXV0YWJsZUNvcHkoKSBjb25zdAorUGFzc1JlZlB0cjxFbGVtZW50RGF0
YT4gRWxlbWVudERhdGE6Om1ha2VJbW11dGFibGVDb3B5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
aXNNdXRhYmxlKCkpOwotICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvcklt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KG11dGFibGVBdHRy
aWJ1dGVWZWN0b3IoKS5zaXplKCkpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGEmPigqdGhpcykpKTsKKyAgICBBU1NFUlQoaXNQcml2YXRlKCkpOwor
ICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvclNoYXJlYWJsZUVsZW1lbnRE
YXRhV2l0aEF0dHJpYnV0ZUNvdW50KG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5zaXplKCkpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBTaGFyZWFibGVFbGVtZW50RGF0YShzdGF0
aWNfY2FzdDxjb25zdCBQcml2YXRlRWxlbWVudERhdGEmPigqdGhpcykpKTsKIH0KIAotdm9pZCBF
bGVtZW50QXR0cmlidXRlRGF0YTo6c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoUGFzc1Jl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkgY29uc3QKK3ZvaWQgRWxlbWVudERhdGE6OnNl
dFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
c3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICBzdGF0aWNfY2Fz
dDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSA9IHN0eWxlOworICAgIEFTU0VSVChtX2lzUHJpdmF0ZSk7CisgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fcHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUgPSBzdHlsZTsKIH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6YWRkQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQordm9pZCBFbGVtZW50
RGF0YTo6YWRkQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewotICAgIEFT
U0VSVChpc011dGFibGUoKSk7CisgICAgQVNTRVJUKGlzUHJpdmF0ZSgpKTsKICAgICBtdXRhYmxl
QXR0cmlidXRlVmVjdG9yKCkuYXBwZW5kKGF0dHJpYnV0ZSk7CiB9CiAKLXZvaWQgRWxlbWVudEF0
dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpCit2b2lkIEVsZW1lbnRE
YXRhOjpyZW1vdmVBdHRyaWJ1dGUoc2l6ZV90IGluZGV4KQogewotICAgIEFTU0VSVChpc011dGFi
bGUoKSk7CisgICAgQVNTRVJUKGlzUHJpdmF0ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCgpKTsKICAgICBtdXRhYmxlQXR0cmlidXRlVmVj
dG9yKCkucmVtb3ZlKGluZGV4KTsKIH0KIAotYm9vbCBFbGVtZW50QXR0cmlidXRlRGF0YTo6aXNF
cXVpdmFsZW50KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlcikgY29uc3QKK2Jvb2wg
RWxlbWVudERhdGE6OmlzRXF1aXZhbGVudChjb25zdCBFbGVtZW50RGF0YSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlcikKICAgICAgICAgcmV0dXJuIGlzRW1wdHkoKTsKQEAgLTI5OTIs
MTQgKzI5OTIsMTQgQEAgYm9vbCBFbGVtZW50QXR0cmlidXRlRGF0YTo6aXNFcXVpdmFsZW50KGNv
bnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3ZvaWQgRWxlbWVudERhdGE6OnJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0
CiB7Ci0gICAgc2l6ZV90IGFjdHVhbFNpemUgPSBtX2lzTXV0YWJsZSA/IHNpemVvZihFbGVtZW50
QXR0cmlidXRlRGF0YSkgOiBzaXplRm9ySW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFXaXRo
QXR0cmlidXRlQ291bnQobV9hcnJheVNpemUpOworICAgIHNpemVfdCBhY3R1YWxTaXplID0gbV9p
c1ByaXZhdGUgPyBzaXplb2YoRWxlbWVudERhdGEpIDogc2l6ZUZvclNoYXJlYWJsZUVsZW1lbnRE
YXRhV2l0aEF0dHJpYnV0ZUNvdW50KG1fYXJyYXlTaXplKTsKICAgICBNZW1vcnlDbGFzc0luZm8g
aW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSwgYWN0
dWFsU2l6ZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9pbmxpbmVTdHlsZSwgImlubGluZVN0eWxl
Iik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9jbGFzc05hbWVzLCAiY2xhc3NOYW1lcyIpOwogICAg
IGluZm8uYWRkTWVtYmVyKG1faWRGb3JTdHlsZVJlc29sdXRpb24sICJpZEZvclN0eWxlUmVzb2x1
dGlvbiIpOwotICAgIGlmIChtX2lzTXV0YWJsZSkgeworICAgIGlmIChtX2lzUHJpdmF0ZSkgewog
ICAgICAgICBpbmZvLmFkZE1lbWJlcihwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCAicHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSIpOwogICAgICAgICBpbmZvLmFkZE1lbWJlcihtdXRh
YmxlQXR0cmlidXRlVmVjdG9yKCksICJtdXRhYmxlQXR0cmlidXRlVmVjdG9yIik7CiAgICAgfQpA
QCAtMzAwNyw3ICszMDA3LDcgQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVwb3J0TWVt
b3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykKICAgICAgICAgaW5m
by5hZGRNZW1iZXIoKmF0dHJpYnV0ZUl0ZW0oaSksICIqYXR0cmlidXRlSXRlbSIpOwogfQogCi1z
aXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNl
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
KSBjb25zdAorc2l6ZV90IEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2Fz
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2Fz
ZSkgY29uc3QKIHsKICAgICAvLyBDb250aW51ZSB0byBjaGVja2luZyBjYXNlLWluc2Vuc2l0aXZl
bHkgYW5kL29yIGZ1bGwgbmFtZXNwYWNlZCBuYW1lcyBpZiBuZWNlc3Nhcnk6CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4
IDUzZDNiZTYuLjY2ZmM1OWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtNDMsMjAgKzQzLDIwIEBA
IGNsYXNzIERPTVRva2VuTGlzdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50UmFyZURh
dGE7CiBjbGFzcyBFbGVtZW50U2hhZG93OwotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGE7CitjbGFzcyBTaGFyZWFibGVFbGVtZW50RGF0YTsKIGNsYXNzIEludFNpemU7CiBjbGFz
cyBMb2NhbGU7Ci1jbGFzcyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7CitjbGFzcyBQcml2
YXRlRWxlbWVudERhdGE7CiBjbGFzcyBQc2V1ZG9FbGVtZW50OwogY2xhc3MgUmVuZGVyUmVnaW9u
OwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiAKLWNsYXNzIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8RWxlbWVudEF0dHJpYnV0ZURh
dGE+IHsKK2NsYXNzIEVsZW1lbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8RWxlbWVudERhdGE+
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gY3JlYXRlKCk7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZUltbXV0YWJsZShjb25zdCBWZWN0b3I8
QXR0cmlidXRlPiYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBjcmVhdGVQ
cml2YXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudERhdGE+IGNyZWF0ZVNoYXJl
YWJsZVdpdGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CiAKICAgICAvLyBP
dmVycmlkZSBSZWZDb3VudGVkJ3MgZGVyZWYoKSB0byBlbnN1cmUgb3BlcmF0b3IgZGVsZXRlIGlz
IGNhbGxlZCBvbgogICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBzdWJjbGFzcyB0eXBlLgpAQCAtOTEs
MTkgKzkxLDE5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0lEKCkgY29uc3QgeyByZXR1cm4gIW1f
aWRGb3JTdHlsZVJlc29sdXRpb24uaXNOdWxsKCk7IH0KICAgICBib29sIGhhc0NsYXNzKCkgY29u
c3QgeyByZXR1cm4gIW1fY2xhc3NOYW1lcy5pc051bGwoKTsgfQogCi0gICAgYm9vbCBpc0VxdWl2
YWxlbnQoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIG90aGVyKSBjb25zdDsKKyAgICBib29s
IGlzRXF1aXZhbGVudChjb25zdCBFbGVtZW50RGF0YSogb3RoZXIpIGNvbnN0OwogCiAgICAgdm9p
ZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKLSAgICBib29s
IGlzTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdXRhYmxlOyB9CisgICAgYm9vbCBpc1By
aXZhdGUoKSBjb25zdCB7IHJldHVybiBtX2lzUHJpdmF0ZTsgfQogICAgIGNvbnN0IEF0dHJpYnV0
ZSogaW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEodW5zaWduZWQg
YXJyYXlTaXplKTsKLSAgICBFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBFbGVtZW50QXR0cmli
dXRlRGF0YSYsIGJvb2wgaXNNdXRhYmxlKTsKKyAgICBFbGVtZW50RGF0YSgpOworICAgIEVsZW1l
bnREYXRhKHVuc2lnbmVkIGFycmF5U2l6ZSk7CisgICAgRWxlbWVudERhdGEoY29uc3QgRWxlbWVu
dERhdGEmLCBib29sIGlzUHJpdmF0ZSk7CiAKLSAgICB1bnNpZ25lZCBtX2lzTXV0YWJsZSA6IDE7
CisgICAgdW5zaWduZWQgbV9pc1ByaXZhdGUgOiAxOwogICAgIHVuc2lnbmVkIG1fYXJyYXlTaXpl
IDogMjg7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
SXNEaXJ0eSA6IDE7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0
eSA6IDE7CkBAIC0xMTgsOCArMTE4LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgU3R5bGVkRWxlbWVudDsKLSAgICBm
cmllbmQgY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci0gICAgZnJpZW5kIGNs
YXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKKyAgICBmcmllbmQgY2xhc3MgU2hhcmVh
YmxlRWxlbWVudERhdGE7CisgICAgZnJpZW5kIGNsYXNzIFByaXZhdGVFbGVtZW50RGF0YTsKICNp
ZiBFTkFCTEUoU1ZHKQogICAgIGZyaWVuZCBjbGFzcyBTVkdFbGVtZW50OwogI2VuZGlmCkBAIC0x
MjgsMjcgKzEyOCwyNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEF0dHJpYnV0ZSogZ2V0QXR0cmli
dXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSkgY29uc3Q7CiAgICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNl
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
KSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IG1ha2VNdXRh
YmxlQ29weSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IG1h
a2VJbW11dGFibGVDb3B5KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gbWFr
ZU11dGFibGVDb3B5KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gbWFrZUlt
bXV0YWJsZUNvcHkoKSBjb25zdDsKIAogICAgIFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBtdXRhYmxl
QXR0cmlidXRlVmVjdG9yKCk7CiAgICAgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIG11dGFi
bGVBdHRyaWJ1dGVWZWN0b3IoKSBjb25zdDsKIH07CiAKLWNsYXNzIEltbXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsKK2NsYXNzIFNoYXJl
YWJsZUVsZW1lbnREYXRhIDogcHVibGljIEVsZW1lbnREYXRhIHsKIHB1YmxpYzoKLSAgICBJbW11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYpOwotICAg
IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSYpOwotICAgIH5JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgpOworICAgIFNo
YXJlYWJsZUVsZW1lbnREYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CisgICAgU2hhcmVh
YmxlRWxlbWVudERhdGEoY29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhJik7CisgICAgflNoYXJlYWJs
ZUVsZW1lbnREYXRhKCk7CiAKICAgICB2b2lkKiBtX2F0dHJpYnV0ZUFycmF5OwogfTsKIAotY2xh
c3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhIHsKK2NsYXNzIFByaXZhdGVFbGVtZW50RGF0YSA6IHB1YmxpYyBFbGVtZW50RGF0YSB7CiBw
dWJsaWM6Ci0gICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgTXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJik7
Ci0gICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0
cmlidXRlRGF0YSYpOworICAgIFByaXZhdGVFbGVtZW50RGF0YSgpOworICAgIFByaXZhdGVFbGVt
ZW50RGF0YShjb25zdCBTaGFyZWFibGVFbGVtZW50RGF0YSYpOworICAgIFByaXZhdGVFbGVtZW50
RGF0YShjb25zdCBQcml2YXRlRWxlbWVudERhdGEmKTsKIAogICAgIG11dGFibGUgUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGU7CiAgICAgVmVjdG9y
PEF0dHJpYnV0ZSwgND4gbV9hdHRyaWJ1dGVWZWN0b3I7CkBAIC0yODYsOCArMjg2LDggQEAgcHVi
bGljOgogICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CiAgICAgY29uc3QgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdDsKICAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5nZXRB
dHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7IH0KLSAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUlu
ZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsgfQorICAgIHNpemVfdCBnZXRBdHRy
aWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4g
ZWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOyB9CisgICAgc2l6ZV90
IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hv
dWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QgeyByZXR1cm4gZWxlbWVudERhdGEoKS0+Z2V0
QXR0cmlidXRlSXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOyB9CiAK
ICAgICB2b2lkIHNjcm9sbEludG9WaWV3KGJvb2wgYWxpZ25Ub1RvcCA9IHRydWUpOwogICAgIHZv
aWQgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChib29sIGNlbnRlcklmTmVlZGVkID0gdHJ1ZSk7CkBA
IC0zNzEsMTAgKzM3MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gT25seSBjYWxsZWQgYnkgdGhlIHBh
cnNlciBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNvbnN0cnVjdGlvbi4KICAgICB2b2lkIHBh
cnNlclNldEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mLCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOwogCi0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJp
YnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuZ2V0KCk7IH0KLSAgICBF
bGVtZW50QXR0cmlidXRlRGF0YSogbXV0YWJsZUF0dHJpYnV0ZURhdGEoKTsKLSAgICBjb25zdCBF
bGVtZW50QXR0cmlidXRlRGF0YSogdXBkYXRlZEF0dHJpYnV0ZURhdGEoKSBjb25zdDsKLSAgICBj
b25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZURhdGEoKSBj
b25zdDsKKyAgICBjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnREYXRhLmdldCgpOyB9CisgICAgRWxlbWVudERhdGEqIGVuc3VyZVByaXZhdGVF
bGVtZW50RGF0YSgpOworICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YVdpdGhTeW5j
aHJvbml6ZWRBdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgY29uc3QgRWxlbWVudERhdGEqIGVuc3Vy
ZUVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKSBjb25zdDsKIAogICAgIC8v
IENsb25lcyBhdHRyaWJ1dGVzIG9ubHkuCiAgICAgdm9pZCBjbG9uZUF0dHJpYnV0ZXNGcm9tRWxl
bWVudChjb25zdCBFbGVtZW50Jik7CkBAIC03MDUsNyArNzA1LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgdW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKCk7CiAKLSAgICB2b2lkIGNyZWF0
ZU11dGFibGVBdHRyaWJ1dGVEYXRhKCk7CisgICAgdm9pZCBjcmVhdGVQcml2YXRlRWxlbWVudERh
dGEoKTsKIAogICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZURpc3RyaWJ1dGlvbldoZW5BdHRyaWJ1
dGVDaGFuZ2VkKEVsZW1lbnRTaGFkb3cqLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJik7CiAKQEAgLTcxNyw3ICs3MTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
cmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CiAKLSAgICBSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURh
dGE+IG1fYXR0cmlidXRlRGF0YTsKKyAgICBSZWZQdHI8RWxlbWVudERhdGE+IG1fZWxlbWVudERh
dGE7CiB9OwogICAgIAogaW5saW5lIEVsZW1lbnQqIHRvRWxlbWVudChOb2RlKiBub2RlKQpAQCAt
Nzc3LDE4ICs3NzcsMTggQEAgaW5saW5lIEVsZW1lbnQqIEVsZW1lbnQ6Om5leHRFbGVtZW50U2li
bGluZygpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKIH0KIAot
aW5saW5lIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBFbGVtZW50Ojp1cGRhdGVkQXR0cmli
dXRlRGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgRWxlbWVudERhdGEqIEVsZW1lbnQ6OmVsZW1l
bnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKSBjb25zdAogewogICAgIHVwZGF0ZUlu
dmFsaWRBdHRyaWJ1dGVzKCk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKTsKKyAgICByZXR1
cm4gZWxlbWVudERhdGEoKTsKIH0KIAotaW5saW5lIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBFbGVtZW50OjplbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0CitpbmxpbmUgY29u
c3QgRWxlbWVudERhdGEqIEVsZW1lbnQ6OmVuc3VyZUVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXpl
ZEF0dHJpYnV0ZXMoKSBjb25zdAogewogICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Ci0g
ICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKTsK
LSAgICByZXR1cm4gY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcyktPm11dGFibGVBdHRyaWJ1dGVE
YXRhKCk7CisgICAgaWYgKGVsZW1lbnREYXRhKCkpCisgICAgICAgIHJldHVybiBlbGVtZW50RGF0
YSgpOworICAgIHJldHVybiBjb25zdF9jYXN0PEVsZW1lbnQqPih0aGlzKS0+ZW5zdXJlUHJpdmF0
ZUVsZW1lbnREYXRhKCk7CiB9CiAKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpCkBA
IC04MzEsMTMgKzgzMSwxMyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJZChUcmVlU2Nv
cGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdAogaW5saW5lIGJvb2wg
RWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25z
dAogewogICAgIEFTU0VSVChmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChuYW1lKSk7Ci0gICAg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOworICAgIHJl
dHVybiBlbGVtZW50RGF0YSgpICYmIGdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiB9CiAKIGlubGlu
ZSBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmZhc3RHZXRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1
cEFsbG93ZWQobmFtZSkpOwotICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICBpZiAoZWxl
bWVudERhdGEoKSkgewogICAgICAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBn
ZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+dmFs
dWUoKTsKICAgICB9CkBAIC04NDYsMTMgKzg0NiwxMyBAQCBpbmxpbmUgY29uc3QgQXRvbWljU3Ry
aW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
CiAKIGlubGluZSBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpICYmICFhdHRyaWJ1dGVEYXRhKCktPmlz
RW1wdHkoKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiAhZWxlbWVudERhdGEoKS0+aXNF
bXB0eSgpOwogfQogCiBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjppZEZvclN0
eWxlUmVzb2x1dGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0lEKCkpOwotICAgIHJldHVy
biBhdHRyaWJ1dGVEYXRhKCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7CisgICAgcmV0dXJuIGVs
ZW1lbnREYXRhKCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7CiB9CiAKIGlubGluZSBib29sIEVs
ZW1lbnQ6OmlzSWRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpIGNvbnN0CkBAIC04ODIsNjMgKzg4Miw2MyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRJ
ZEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogaW5saW5lIGNvbnN0IFNwYWNl
U3BsaXRTdHJpbmcmIEVsZW1lbnQ6OmNsYXNzTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVCho
YXNDbGFzcygpKTsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICByZXR1cm4gYXR0
cmlidXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOwor
ICAgIHJldHVybiBlbGVtZW50RGF0YSgpLT5jbGFzc05hbWVzKCk7CiB9CiAKIGlubGluZSBzaXpl
X3QgRWxlbWVudDo6YXR0cmlidXRlQ291bnQoKSBjb25zdAogewotICAgIEFTU0VSVChhdHRyaWJ1
dGVEYXRhKCkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmxlbmd0aCgpOworICAgIEFT
U0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+bGVuZ3RoKCk7
CiB9CiAKIGlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnQ6OmF0dHJpYnV0ZUl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCk7CisgICAgQVNTRVJU
KGVsZW1lbnREYXRhKCkpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgpLT5hdHRyaWJ1dGVJdGVt
KGluZGV4KTsKIH0KIAogaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudDo6Z2V0QXR0cmli
dXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewotICAgIEFTU0VSVChh
dHRyaWJ1dGVEYXRhKCkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0
ZUl0ZW0obmFtZSk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOworICAgIHJldHVybiBlbGVt
ZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogfQogCiBpbmxpbmUgQXR0cmlidXRl
KiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7
Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAgcmV0dXJuIG11dGFibGVBdHRyaWJ1
dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRh
KCkpOworICAgIHJldHVybiBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRl
SXRlbShuYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgRWxlbWVudDo6dXBkYXRlSW52YWxpZEF0dHJp
YnV0ZXMoKSBjb25zdAogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxl
bWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKS0+
bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpCisgICAgaWYgKGVsZW1lbnREYXRhKCktPm1fc3R5bGVB
dHRyaWJ1dGVJc0RpcnR5KQogICAgICAgICB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCiAjaWYg
RU5BQkxFKFNWRykKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmli
dXRlc0FyZURpcnR5KQorICAgIGlmIChlbGVtZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmli
dXRlc0FyZURpcnR5KQogICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlRTmFt
ZSgpKTsKICNlbmRpZgogfQogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNJRCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiBhdHRyaWJ1dGVEYXRhKCktPmhhc0lEKCk7
CisgICAgcmV0dXJuIGVsZW1lbnREYXRhKCkgJiYgZWxlbWVudERhdGEoKS0+aGFzSUQoKTsKIH0K
IAogaW5saW5lIGJvb2wgRWxlbWVudDo6aGFzQ2xhc3MoKSBjb25zdAogewotICAgIHJldHVybiBh
dHRyaWJ1dGVEYXRhKCkgJiYgYXR0cmlidXRlRGF0YSgpLT5oYXNDbGFzcygpOworICAgIHJldHVy
biBlbGVtZW50RGF0YSgpICYmIGVsZW1lbnREYXRhKCktPmhhc0NsYXNzKCk7CiB9CiAKLWlubGlu
ZSBFbGVtZW50QXR0cmlidXRlRGF0YSogRWxlbWVudDo6bXV0YWJsZUF0dHJpYnV0ZURhdGEoKQor
aW5saW5lIEVsZW1lbnREYXRhKiBFbGVtZW50OjplbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKQog
ewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpIHx8ICFhdHRyaWJ1dGVEYXRhKCktPmlzTXV0YWJs
ZSgpKQotICAgICAgICBjcmVhdGVNdXRhYmxlQXR0cmlidXRlRGF0YSgpOwotICAgIHJldHVybiBt
X2F0dHJpYnV0ZURhdGEuZ2V0KCk7CisgICAgaWYgKCFlbGVtZW50RGF0YSgpIHx8ICFlbGVtZW50
RGF0YSgpLT5pc1ByaXZhdGUoKSkKKyAgICAgICAgY3JlYXRlUHJpdmF0ZUVsZW1lbnREYXRhKCk7
CisgICAgcmV0dXJuIG1fZWxlbWVudERhdGEuZ2V0KCk7CiB9CiAKIC8vIFB1dCBoZXJlIHRvIG1h
a2UgdGhlbSBpbmxpbmUuCkBAIC05NzUsMzkgKzk3NSwzOSBAQCBpbmxpbmUgYm9vbCBpc1NoYWRv
d0hvc3QoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pc0Vs
ZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5zaGFkb3coKTsKIH0KLWlubGluZSBWZWN0
b3I8QXR0cmlidXRlLCA0PiYgRWxlbWVudEF0dHJpYnV0ZURhdGE6Om11dGFibGVBdHRyaWJ1dGVW
ZWN0b3IoKQoraW5saW5lIFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBFbGVtZW50RGF0YTo6bXV0YWJs
ZUF0dHJpYnV0ZVZlY3RvcigpCiB7Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0
cmlidXRlVmVjdG9yOworICAgIEFTU0VSVChtX2lzUHJpdmF0ZSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFByaXZhdGVFbGVtZW50RGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0ZVZlY3RvcjsKIH0K
IAotaW5saW5lIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBFbGVtZW50QXR0cmlidXRlRGF0
YTo6bXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpIGNvbnN0CitpbmxpbmUgY29uc3QgVmVjdG9yPEF0
dHJpYnV0ZSwgND4mIEVsZW1lbnREYXRhOjptdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkgY29uc3QK
IHsKLSAgICBBU1NFUlQobV9pc011dGFibGUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7
CisgICAgQVNTRVJUKG1faXNQcml2YXRlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
UHJpdmF0ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yOwogfQogCi1pbmxp
bmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6aW1tdXRhYmxlQXR0cmli
dXRlQXJyYXkoKSBjb25zdAoraW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudERhdGE6Omlt
bXV0YWJsZUF0dHJpYnV0ZUFycmF5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1faXNNdXRhYmxl
KTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdHRyaWJ1dGUqPigmc3RhdGlj
X2Nhc3Q8Y29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRy
aWJ1dGVBcnJheSk7CisgICAgQVNTRVJUKCFtX2lzUHJpdmF0ZSk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgQXR0cmlidXRlKj4oJnN0YXRpY19jYXN0PGNvbnN0IFNoYXJlYWJs
ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fYXR0cmlidXRlQXJyYXkpOwogfQogCi1pbmxpbmUgc2l6
ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpsZW5ndGgoKSBjb25zdAoraW5saW5lIHNpemVfdCBF
bGVtZW50RGF0YTo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoaXNNdXRhYmxlKCkpCisgICAg
aWYgKGlzUHJpdmF0ZSgpKQogICAgICAgICByZXR1cm4gbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvcigp
LnNpemUoKTsKICAgICByZXR1cm4gbV9hcnJheVNpemU7CiB9CiAKLWlubGluZSBjb25zdCBTdHls
ZVByb3BlcnR5U2V0KiBFbGVtZW50QXR0cmlidXRlRGF0YTo6cHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIEVsZW1lbnREYXRh
OjpwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzTXV0
YWJsZSkKKyAgICBpZiAoIW1faXNQcml2YXRlKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcykt
Pm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUuZ2V0KCk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFByaXZhdGVFbGVtZW50RGF0YSo+KHRoaXMpLT5tX3ByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlLmdldCgpOwogfQogCi1pbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRl
RGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hv
dWxkSWdub3JlQXR0cmlidXRlQ2FzZSkKK2lubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnREYXRhOjpn
ZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKQogewogICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1J
bmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKICAgICBpZiAoaW5kZXggIT0g
bm90Rm91bmQpCkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbQog
ICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmli
dXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wg
c2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKK2lubGluZSBjb25zdCBBdHRyaWJ1dGUq
IEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Ym9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAogewogICAgIHNpemVfdCBpbmRl
eCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
KTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCkBAIC0xMDIzLDcgKzEwMjMsNyBAQCBpbmxp
bmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRl
bShjb25zdCBBdG9taWNTdHJpbgogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgc2l6ZV90IEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSkgY29uc3QKK2lubGluZSBzaXplX3QgRWxlbWVudERhdGE6OmdldEF0dHJpYnV0
ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1
dGVJdGVtKGkpLT5uYW1lKCkubWF0Y2hlcyhuYW1lKSkKQEAgLTEwMzQsNyArMTAzNCw3IEBAIGlu
bGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChj
b25zdCBRdWFsaWZpZWROYW1lJiBuCiAKIC8vIFdlIHVzZSBhIGJvb2xlYW4gcGFyYW1ldGVyIGlu
c3RlYWQgb2YgY2FsbGluZyBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlIHNvIHRoYXQgdGhlIGNh
bGxlcgogLy8gY2FuIHR1bmUgdGhlIGJlaGF2aW9yIChoYXNBdHRyaWJ1dGUgaXMgY2FzZSBzZW5z
aXRpdmUgd2hlcmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KS4KLWlubGluZSBzaXplX3QgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKK2lubGluZSBzaXpl
X3QgRWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKIHsKICAgICB1bnNp
Z25lZCBsZW4gPSBsZW5ndGgoKTsKICAgICBib29sIGRvU2xvd0NoZWNrID0gc2hvdWxkSWdub3Jl
QXR0cmlidXRlQ2FzZTsKQEAgLTEwNTQsNyArMTA1NCw3IEBAIGlubGluZSBzaXplX3QgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcm
IG5hCiAgICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCi1pbmxpbmUgY29uc3QgQXR0cmlidXRlKiBF
bGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdAoraW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmdldEF0
dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewogICAgICAgICBpZiAoYXR0cmli
dXRlSXRlbShpKS0+bmFtZSgpLm1hdGNoZXMobmFtZSkpCkBAIC0xMDYzLDcgKzEwNjMsNyBAQCBp
bmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRl
SXRlbShjb25zdCBRdWFsaWZpZWROYQogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgQXR0cmli
dXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lKQoraW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmdldEF0dHJpYnV0
ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewogICAgICAgICBpZiAoYXR0cmlidXRlSXRlbShpKS0+
bmFtZSgpLm1hdGNoZXMobmFtZSkpCkBAIC0xMDcyLDE1ICsxMDcyLDE1IEBAIGlubGluZSBBdHRy
aWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hCiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBjb25zdCBBdHRyaWJ1dGUq
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dAoraW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCBsZW5ndGgoKSk7Ci0gICAgaWYgKG1faXNNdXRhYmxlKQorICAgIGlmIChtX2lz
UHJpdmF0ZSkKICAgICAgICAgcmV0dXJuICZtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuYXQoaW5k
ZXgpOwogICAgIHJldHVybiAmaW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKVtpbmRleF07CiB9CiAK
LWlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVu
c2lnbmVkIGluZGV4KQoraW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0
ZW0odW5zaWduZWQgaW5kZXgpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCBsZW5ndGgoKSk7CiAgICAgcmV0dXJuICZtdXRhYmxlQXR0cmlidXRlVmVjdG9y
KCkuYXQoaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDExZmQ5OGIuLjgyMDE3YTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAKQEAgLTIwNSwxMSArMjA1LDExIEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3Rp
Y3MoKQogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAotICAgICAgICAgICAgICAgIGlm
IChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0
ZURhdGEoKSkgewotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURh
dGEtPmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGlmIChFbGVtZW50RGF0YSogZWxlbWVudERh
dGEgPSBlbGVtZW50LT5lbGVtZW50RGF0YSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMgKz0gZWxlbWVudERhdGEtPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgICArK2Vs
ZW1lbnRzV2l0aEF0dHJpYnV0ZVN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1
dGVJdGVtKGkpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZWxlbWVudERhdGEtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0
dHJpYnV0ZSogYXR0ciA9IGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHItPmF0dHIoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK2F0dHJpYnV0ZXNXaXRoQXR0cjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjk2
LDcgKzI5Niw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgIHByaW50ZigiQXR0
cmlidXRlczpcbiIpOwogICAgIHByaW50ZigiICBOdW1iZXIgb2YgQXR0cmlidXRlcyAobm9uLU5v
ZGUgYW5kIE5vZGUpOiAlenUgWyV6dV1cbiIsIGF0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUp
KTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgd2l0aCBhbiBBdHRyOiAlenVc
biIsIGF0dHJpYnV0ZXNXaXRoQXR0cik7Ci0gICAgcHJpbnRmKCIgIE51bWJlciBvZiBFbGVtZW50
cyB3aXRoIGF0dHJpYnV0ZSBzdG9yYWdlOiAlenUgWyV6dV1cbiIsIGVsZW1lbnRzV2l0aEF0dHJp
YnV0ZVN0b3JhZ2UsIHNpemVvZihFbGVtZW50QXR0cmlidXRlRGF0YSkpOworICAgIHByaW50Zigi
ICBOdW1iZXIgb2YgRWxlbWVudHMgd2l0aCBhdHRyaWJ1dGUgc3RvcmFnZTogJXp1IFslenVdXG4i
LCBlbGVtZW50c1dpdGhBdHRyaWJ1dGVTdG9yYWdlLCBzaXplb2YoRWxlbWVudERhdGEpKTsKICAg
ICBwcmludGYoIiAgTnVtYmVyIG9mIEVsZW1lbnRzIHdpdGggUmFyZURhdGE6ICV6dVxuIiwgZWxl
bWVudHNXaXRoUmFyZURhdGEpOwogICAgIHByaW50ZigiICBOdW1iZXIgb2YgRWxlbWVudHMgd2l0
aCBOYW1lZE5vZGVNYXA6ICV6dSBbJXp1XVxuIiwgZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwLCBz
aXplb2YoTmFtZWROb2RlTWFwKSk7CiAjZW5kaWYKQEAgLTE3NTMsNyArMTc1Myw3IEBAIHVuc2ln
bmVkIHNob3J0IE5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKE5vZGUqIG90aGVyTm9kZSkK
ICAgICBpZiAoYXR0cjEgJiYgYXR0cjIgJiYgc3RhcnQxID09IHN0YXJ0MiAmJiBzdGFydDEpIHsK
ICAgICAgICAgLy8gV2UgYXJlIGNvbXBhcmluZyB0d28gYXR0cmlidXRlcyBvbiB0aGUgc2FtZSBu
b2RlLiBDcmF3bCBvdXIgYXR0cmlidXRlIG1hcCBhbmQgc2VlIHdoaWNoIG9uZSB3ZSBoaXQgZmly
c3QuCiAgICAgICAgIEVsZW1lbnQqIG93bmVyMSA9IGF0dHIxLT5vd25lckVsZW1lbnQoKTsKLSAg
ICAgICAgb3duZXIxLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOyAvLyBGb3JjZSB1cGRhdGUgaW52
YWxpZCBhdHRyaWJ1dGVzLgorICAgICAgICBvd25lcjEtPmVsZW1lbnREYXRhV2l0aFN5bmNocm9u
aXplZEF0dHJpYnV0ZXMoKTsgLy8gRm9yY2UgdXBkYXRlIGludmFsaWQgYXR0cmlidXRlcy4KICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3duZXIxLT5hdHRyaWJ1dGVDb3VudCgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIC8v
IElmIG5laXRoZXIgb2YgdGhlIHR3byBkZXRlcm1pbmluZyBub2RlcyBpcyBhIGNoaWxkIG5vZGUg
YW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1lIGZvciBib3RoIGRldGVybWluaW5nIG5vZGVzLCB0aGVu
IGFuIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCmluZGV4IDI3YzMxNGEuLmYwY2Fm
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTEyOCw5ICsxMjgsOSBA
QCBzdGF0aWMgUHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVDbGVhbmVyJiBwcmVzZW50YXRpb25B
dHRyaWJ1dGVDYWNoZUNsZWFuZXIoKQogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxl
QXR0cmlidXRlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICBB
U1NFUlQoYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSk7Ci0gICAgYXR0
cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA9IGZhbHNlOworICAgIEFTU0VS
VChlbGVtZW50RGF0YSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJp
YnV0ZUlzRGlydHkpOworICAgIGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5
ID0gZmFsc2U7CiAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0g
dGhpcy0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4o
dGhpcyktPnNldFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHls
ZS0+YXNUZXh0KCkpOwogfQpAQCAtMTQ4LDcgKzE0OCw3IEBAIENTU1N0eWxlRGVjbGFyYXRpb24q
IFN0eWxlZEVsZW1lbnQ6OnN0eWxlKCkKIAogU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVu
dDo6ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKCkKIHsKLSAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4mIGlubGluZVN0eWxlID0gbXV0YWJsZUF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHls
ZTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4mIGlubGluZVN0eWxlID0gZW5zdXJlUHJp
dmF0ZUVsZW1lbnREYXRhKCktPm1faW5saW5lU3R5bGU7CiAgICAgaWYgKCFpbmxpbmVTdHlsZSkK
ICAgICAgICAgaW5saW5lU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoc3RyaWN0VG9D
U1NQYXJzZXJNb2RlKGlzSFRNTEVsZW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2Rl
KCkpKTsKICAgICBlbHNlIGlmICghaW5saW5lU3R5bGUtPmlzTXV0YWJsZSgpKQpAQCAtMTYxLDcg
KzE2MSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpCiAgICAgaWYgKG5hbWUgPT0gc3R5bGVB
dHRyKQogICAgICAgICBzdHlsZUF0dHJpYnV0ZUNoYW5nZWQobmV3VmFsdWUpOwogICAgIGVsc2Ug
aWYgKGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUpKSB7Ci0gICAgICAgIGF0dHJpYnV0ZURh
dGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkgPSB0cnVlOworICAgICAg
ICBlbGVtZW50RGF0YSgpLT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9IHRy
dWU7CiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOwogICAg
IH0KIApAQCAtMTcyLDE3ICsxNzIsMTcgQEAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
KiBTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZUNTU09NV3JhcHBlcigpCiB7CiAgICAgaWYgKCFp
bmxpbmVTdHlsZSgpIHx8ICFpbmxpbmVTdHlsZSgpLT5oYXNDU1NPTVdyYXBwZXIoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdy
YXBwZXIgPSBtdXRhYmxlQXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0eWxlLT5jc3NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdy
YXBwZXIgPSBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKS0+bV9pbmxpbmVTdHlsZS0+Y3NzU3R5
bGVEZWNsYXJhdGlvbigpOwogICAgIEFTU0VSVChjc3NvbVdyYXBwZXIgJiYgY3Nzb21XcmFwcGVy
LT5wYXJlbnRFbGVtZW50KCkgPT0gdGhpcyk7CiAgICAgcmV0dXJuIGNzc29tV3JhcHBlcjsKIH0K
IAogaW5saW5lIHZvaWQgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVGcm9tU3RyaW5nKGNv
bnN0IEF0b21pY1N0cmluZyYgbmV3U3R5bGVTdHJpbmcpCiB7Ci0gICAgUmVmUHRyPFN0eWxlUHJv
cGVydHlTZXQ+JiBpbmxpbmVTdHlsZSA9IGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZTsK
KyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4mIGlubGluZVN0eWxlID0gZWxlbWVudERhdGEo
KS0+bV9pbmxpbmVTdHlsZTsKIAogICAgIC8vIEF2b2lkIHJlZHVuZGFudCB3b3JrIGlmIHdlJ3Jl
IHVzaW5nIHNoYXJlZCBhdHRyaWJ1dGUgZGF0YSB3aXRoIGFscmVhZHkgcGFyc2VkIGlubGluZSBz
dHlsZS4KLSAgICBpZiAoaW5saW5lU3R5bGUgJiYgIWF0dHJpYnV0ZURhdGEoKS0+aXNNdXRhYmxl
KCkpCisgICAgaWYgKGlubGluZVN0eWxlICYmICFlbGVtZW50RGF0YSgpLT5pc1ByaXZhdGUoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgcmVjb25zdHJ1Y3QgdGhlIHByb3BlcnR5IHNl
dCBpbnN0ZWFkIG9mIG11dGF0aW5nIGlmIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCkBAIC0y
MDUsMTEgKzIwNSwxMSBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0eWxlU3RyaW5nKQogICAgIGlmIChuZXdTdHlsZVN0
cmluZy5pc051bGwoKSkgewogICAgICAgICBpZiAoUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uKiBjc3NvbVdyYXBwZXIgPSBpbmxpbmVTdHlsZUNTU09NV3JhcHBlcigpKQogICAgICAgICAg
ICAgY3Nzb21XcmFwcGVyLT5jbGVhclBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgbXV0YWJsZUF0
dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZS5jbGVhcigpOworICAgICAgICBlbnN1cmVQcml2
YXRlRWxlbWVudERhdGEoKS0+bV9pbmxpbmVTdHlsZS5jbGVhcigpOwogICAgIH0gZWxzZSBpZiAo
ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW5saW5lU3R5bGUoZG9j
dW1lbnQoKS0+dXJsKCksIHN0YXJ0TGluZU51bWJlcikpCiAgICAgICAgIHNldElubGluZVN0eWxl
RnJvbVN0cmluZyhuZXdTdHlsZVN0cmluZyk7CiAKLSAgICBhdHRyaWJ1dGVEYXRhKCktPm1fc3R5
bGVBdHRyaWJ1dGVJc0RpcnR5ID0gZmFsc2U7CisgICAgZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0
dHJpYnV0ZUlzRGlydHkgPSBmYWxzZTsKIAogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5l
U3R5bGVDaGFuZ2UpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0
ZVN0eWxlQXR0cihkb2N1bWVudCgpLCB0aGlzKTsKQEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIFN0
eWxlZEVsZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJpbmcmIG5l
d1N0eWxlU3RyaW5nKQogdm9pZCBTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZUNoYW5nZWQoKQog
ewogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOwotICAgIEFTU0VS
VChhdHRyaWJ1dGVEYXRhKCkpOwotICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0
ZUlzRGlydHkgPSB0cnVlOworICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICBlbGVtZW50
RGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA9IHRydWU7CiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKGRvY3VtZW50KCksIHRoaXMpOwog
fQogICAgIApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6cmVtb3ZlQWxs
SW5saW5lU3R5bGVQcm9wZXJ0aWVzKCkKIAogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7Ci0gICAg
aWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gYXR0cmlidXRlRGF0YSgp
ID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZSgpIDogMCkKKyAgICBpZiAoY29uc3QgU3R5
bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBlbGVtZW50RGF0YSgpID8gZWxlbWVudERhdGEo
KS0+aW5saW5lU3R5bGUoKSA6IDApCiAgICAgICAgIGlubGluZVN0eWxlLT5hZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyh1cmxzLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+Y29udGVudHMoKSk7
CiB9CiAKQEAgLTM0MCwxMSArMzQwLDExIEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6cmVidWlsZFBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIGRvZXNuJ3Qgc3RvcmUgcHJlc2VudGF0aW9uIGF0
dHJpYnV0ZSBzdHlsZSwgc28gbWFrZSBzdXJlIHdlIGhhdmUgYSBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEuCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtdXRh
YmxlQXR0cmlidXRlRGF0YSgpOworICAgIC8vIFNoYXJlYWJsZUVsZW1lbnREYXRhIGRvZXNuJ3Qg
c3RvcmUgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZSBzdHlsZSwgc28gbWFrZSBzdXJlIHdlIGhhdmUg
YSBQcml2YXRlRWxlbWVudERhdGEuCisgICAgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZW5z
dXJlUHJpdmF0ZUVsZW1lbnREYXRhKCk7CiAKLSAgICBhdHRyaWJ1dGVEYXRhLT5tX3ByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9IGZhbHNlOwotICAgIGF0dHJpYnV0ZURhdGEtPnNl
dFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKHN0eWxlLT5pc0VtcHR5KCkgPyAwIDogc3R5bGUp
OworICAgIGVsZW1lbnREYXRhLT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9
IGZhbHNlOworICAgIGVsZW1lbnREYXRhLT5zZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShz
dHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxlKTsKIAogICAgIGlmICghY2FjaGVIYXNoIHx8IGNh
Y2hlSXRlcmF0b3ItPnZhbHVlKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuaAppbmRleCBlNDFhYWVmLi5iZjA2MjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU3R5bGVkRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgeyByZXR1
cm4gMDsgfQogICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7CiAKLSAgICBjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0
ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZS5nZXQoKSA6IDA7IH0KKyAg
ICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGVs
ZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5tX2lubGluZVN0eWxlLmdldCgpIDogMDsgfQog
ICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSgpOwogICAgIAog
ICAgIC8vIFVubGlrZSBTdHlsZVByb3BlcnR5U2V0IHNldHRlcnMsIHRoZXNlIGltcGxlbWVudCBp
bnZhbGlkYXRpb24uCkBAIC04NiwxNyArODYsMTcgQEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQg
U3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCkKIHsKLSAgICBBU1NFUlQo
YXR0cmlidXRlRGF0YSgpKTsKLSAgICBhdHRyaWJ1dGVEYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJ
c0RpcnR5ID0gdHJ1ZTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CisgICAgZWxlbWVudERh
dGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgPSB0cnVlOwogfQogCiBpbmxpbmUgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVudDo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKQogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKS0+bV9wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkpCisgICAgaWYgKGVsZW1lbnREYXRhKCktPm1fcHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KQogICAgICAgICByZWJ1aWxkUHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKTsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgpLT5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpOwogfQogCiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Ns
YXNzTGlzdC5jcHAKaW5kZXggNzViYzM0My4uM2I1NzU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DbGFzc0xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NM
aXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBDbGFzc0xp
c3Q6OmNsYXNzTmFtZXMoKSBjb25zdAogICAgICAgICAgICAgbV9jbGFzc05hbWVzRm9yUXVpcmtz
TW9kZSA9IGFkb3B0UHRyKG5ldyBTcGFjZVNwbGl0U3RyaW5nKHZhbHVlKCksIGZhbHNlKSk7CiAg
ICAgICAgIHJldHVybiAqbV9jbGFzc05hbWVzRm9yUXVpcmtzTW9kZS5nZXQoKTsKICAgICB9Ci0g
ICAgcmV0dXJuIG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAg
cmV0dXJuIG1fZWxlbWVudC0+ZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1lcygpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAppbmRleCA3MDE1NzZiLi4xYTk3YmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKQEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVw
ZGF0ZVR5cGUoKQogICAgICAgICByZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVk
KCk7CiAKICAgICBpZiAoZGlkUmVzcGVjdEhlaWdodEFuZFdpZHRoICE9IG1faW5wdXRUeXBlLT5z
aG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgQVNTRVJU
KGF0dHJpYnV0ZURhdGEoKSk7CisgICAgICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKICAgICAg
ICAgaWYgKEF0dHJpYnV0ZSogaGVpZ2h0ID0gZ2V0QXR0cmlidXRlSXRlbShoZWlnaHRBdHRyKSkK
ICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoaGVpZ2h0QXR0ciwgaGVpZ2h0LT52YWx1ZSgp
KTsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSogd2lkdGggPSBnZXRBdHRyaWJ1dGVJdGVtKHdpZHRo
QXR0cikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAKaW5kZXggYmUxYzUzNS4uOWMwNGRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMjExLDcgKzIx
MSw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tl
bkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbioKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b2tlbi0+YXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0b2tlbi0+YXR0cmlidXRlcygpLmF0KGkpOwotICAg
ICAgICBpZiAoIWVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSB8fCAhZWxlbWVudC0+Z2V0QXR0cmli
dXRlSXRlbSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCkpKQorICAgICAgICBpZiAoIWVsZW1lbnQtPmVs
ZW1lbnREYXRhKCkgfHwgIWVsZW1lbnQtPmdldEF0dHJpYnV0ZUl0ZW0odG9rZW5BdHRyaWJ1dGUu
bmFtZSgpKSkKICAgICAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0b2tlbkF0dHJpYnV0
ZS5uYW1lKCksIHRva2VuQXR0cmlidXRlLnZhbHVlKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAppbmRleCBhN2UzZjg5Li5iNDhhZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwCkBAIC01NDQsMTMgKzU0NCwxMyBAQCB2b2lkIFNWR0VsZW1lbnQ6OmF0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJgog
CiB2b2lkIFNWR0VsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkgfHwgIWF0
dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkKKyAgICBpZiAo
IWVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVz
QXJlRGlydHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFNWR0VsZW1lbnQqIG5vbkNvbnN0VGhp
cyA9IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KHRoaXMpOwogICAgIGlmIChuYW1lID09IGFueVFO
YW1lKCkpIHsKICAgICAgICAgbm9uQ29uc3RUaGlzLT5sb2NhbEF0dHJpYnV0ZVRvUHJvcGVydHlN
YXAoKS5zeW5jaHJvbml6ZVByb3BlcnRpZXMobm9uQ29uc3RUaGlzKTsKLSAgICAgICAgYXR0cmli
dXRlRGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5ID0gZmFsc2U7CisgICAg
ICAgIGVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkgPSBmYWxz
ZTsKICAgICB9IGVsc2UKICAgICAgICAgbm9uQ29uc3RUaGlzLT5sb2NhbEF0dHJpYnV0ZVRvUHJv
cGVydHlNYXAoKS5zeW5jaHJvbml6ZVByb3BlcnR5KG5vbkNvbnN0VGhpcywgbmFtZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuaAppbmRleCA4Zjg5MDBiLi45ZGFhN2EzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0qIHN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpIHsgcmV0dXJuIDA7IH0KIAotICAg
IHZvaWQgaW52YWxpZGF0ZVNWR0F0dHJpYnV0ZXMoKSB7IG11dGFibGVBdHRyaWJ1dGVEYXRhKCkt
Pm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkgPSB0cnVlOyB9CisgICAgdm9pZCBpbnZh
bGlkYXRlU1ZHQXR0cmlidXRlcygpIHsgZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCktPm1fYW5p
bWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkgPSB0cnVlOyB9CiAKICAgICBjb25zdCBIYXNoU2V0
PFNWR0VsZW1lbnRJbnN0YW5jZSo+JiBpbnN0YW5jZXNGb3JFbGVtZW50KCkgY29uc3Q7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmlu
ZGV4IGFjOTA0NGMuLjZhYzRkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIFhNTERvY3VtZW50
UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxl
bWVudCogcGFyZW50CiAKICAgICBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25zIG5hbWVz
cGFjZXM7CiAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbVN0YWNrLmxhc3QoKTsgIWVs
ZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsKLSAgICAgICAgaWYg
KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRycyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRy
aWJ1dGVEYXRhKCkpIHsKKyAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnREYXRhKiBhdHRycyA9IGVs
ZW1lbnQtPmVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKSkgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0
ZW0oaSk7CiAgICAgICAgICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09ICJ4bWxucyIp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188134</attachid>
            <date>2013-02-13 11:46:09 -0800</date>
            <delta_ts>2013-02-13 12:20:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109529-v4.diff</filename>
            <type>text/plain</type>
            <size>76837</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4YWZlOTVmLi4zYjY0NTBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ2
IEBACisyMDEzLTAyLTEzICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAg
ICAgICBCZXR0ZXIgbmFtZXMgZm9yIEVsZW1lbnRBdHRyaWJ1dGVEYXRhICYgc3ViY2xhc3Nlcy4K
KyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA5NTI5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRWxlbWVudEF0dHJpYnV0ZURhdGEgPT4g
RWxlbWVudERhdGEKKworICAgICAgICAgICAgQmVjYXVzZSBFbGVtZW50QXR0cmlidXRlRGF0YSB3
b24ndCBiZSBhIGdvb2QgbmFtZSBvbmNlIHdlIG1vdmUgc29tZSBub24tYXR0cmlidXRlIHJlbGF0
ZWQKKyAgICAgICAgICAgIHRoaW5ncyB0byB0aGlzIHN0cnVjdHVyZS4KKworICAgICAgICAtIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhID0+IFNoYXJlYWJsZUVsZW1lbnREYXRhCisKKyAg
ICAgICAgICAgIFRoZXNlIG9iamVjdHMgY2FuIGJlIHNoYXJlZCB3aXRoIG90aGVyIEVsZW1lbnRz
IHRoYXQgaGF2ZSB0aGUgc2FtZSBhdHRyaWJ1dGUgbmFtZS92YWx1ZSBwYWlycy4KKworICAgICAg
ICAtIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSA9PiBQcml2YXRlRWxlbWVudERhdGEKKwor
ICAgICAgICAgICAgVGhlc2Ugb2JqZWN0cyBjb250YWluIGRhdGEgdGhhdCBpcyBwcml2YXRlIHRv
IGEgc3BlY2lmaWMgRWxlbWVudCwgYW5kIGNhbm5vdCBiZSBzaGFyZWQgd2l0aAorICAgICAgICAg
ICAgb3RoZXIgRWxlbWVudHMuIFRoaXMgaXMgd2hhdCdzIGltcG9ydGFudCBhYm91dCBpdCwgbm90
IHRoYXQgaXRzIHVuZGVybHlpbmcgc3RvcmFnZSBpcyBtdXRhYmxlLgorCisgICAgICAgIC0gYXR0
cmlidXRlRGF0YSgpIC0+IGVsZW1lbnREYXRhKCkKKyAgICAgICAgLSB1cGRhdGVkQXR0cmlidXRl
RGF0YSgpIC0+IGVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKQorICAgICAg
ICAtIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgLT4gZW5zdXJlRWxlbWVudERhdGFXaXRo
U3luY2hyb25pemVkQXR0cmlidXRlcygpCisKKyAgICAgICAgICAgIFJpZGUtYWxvbmcgcmVuYW1l
cy4gTXVjaCBsZXNzIHZhZ3VlIHRoYW4gcHJldmlvdXMgbmFtZXMgSU1PLgorCisgICAgICAgICog
Y3NzL1N0eWxlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSZXNvbHZlcjo6
Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2
ZXI6OnNoYXJpbmdDYW5kaWRhdGVIYXNJZGVudGljYWxTdHlsZUFmZmVjdGluZ0F0dHJpYnV0ZXMp
OgorICAgICAgICAqIGRvbS9BdHRyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF0dHI6OmVsZW1l
bnRBdHRyaWJ1dGUpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZUtleTo6U2hhcmVh
YmxlRWxlbWVudERhdGFDYWNoZUtleSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWFibGVFbGVt
ZW50RGF0YUNhY2hlS2V5OjpvcGVyYXRvciE9KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlYWJs
ZUVsZW1lbnREYXRhQ2FjaGVFbnRyeTo6U2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZUVudHJ5KToK
KyAgICAgICAgKFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w6OmNhY2hlZFNoYXJlYWJsZUVsZW1lbnREYXRh
V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAqIGRvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wu
aDoKKyAgICAgICAgKERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbCk6CisgICAgICAgICogZG9tL0Vs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZGV0YWNoQXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6
OmdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0U3luY2hyb25pemVkTGF6eUF0dHJpYnV0
ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpzZXRBdHRyaWJ1dGVJbnRlcm5hbCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpzaG91bGRJbnZhbGlkYXRlRGlzdHJpYnV0aW9uV2hlbkF0dHJpYnV0ZUNoYW5n
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6Omhhc0VxdWl2YWxlbnRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
cmVtb3ZlQXR0cmlidXRlTm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVB
dHRyaWJ1dGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjphZGRBdHRyaWJ1
dGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2Rl
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVOUyk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6aGFzQXR0cmlidXRlTlMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y29t
cHV0ZUluaGVyaXRlZExhbmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldFVS
TEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXROb25FbXB0eVVSTEF0
dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbG9uZUF0dHJpYnV0ZXNGcm9t
RWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjcmVhdGVQcml2YXRlRWxlbWVu
dERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UpOgor
ICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnREYXRhOjpFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpzaXplRm9yU2hh
cmVhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnREYXRhOjpjcmVhdGVQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlYWJsZUVsZW1lbnREYXRhOjpTaGFyZWFibGVFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpTaGFyZWFibGVFbGVtZW50RGF0YTo6flNoYXJlYWJsZUVsZW1lbnREYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlByaXZhdGVFbGVtZW50RGF0YTo6UHJpdmF0ZUVsZW1lbnREYXRhKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjptYWtlTXV0YWJsZUNvcHkpOgorICAgICAgICAo
V2ViQ29yZTo6RWxlbWVudERhdGE6Om1ha2VJbW11dGFibGVDb3B5KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnREYXRhOjpzZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpFbGVtZW50RGF0YTo6YWRkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnREYXRhOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dERhdGE6OmlzRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6cmVw
b3J0TWVtb3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmdldEF0dHJp
YnV0ZUl0ZW1JbmRleFNsb3dDYXNlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAg
ICAoRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmlzUHJpdmF0
ZSk6CisgICAgICAgIChTaGFyZWFibGVFbGVtZW50RGF0YSk6CisgICAgICAgIChQcml2YXRlRWxl
bWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlSXRlbUlu
ZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVsZW1lbnREYXRhKToKKyAgICAgICAg
KEVsZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZWxlbWVudERhdGFXaXRoU3lu
Y2hyb25pemVkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbnN1cmVF
bGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6
OkVsZW1lbnQ6OmZhc3RIYXNBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
ZmFzdEdldEF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNBdHRyaWJ1
dGVzV2l0aG91dFVwZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjppZEZvclN0eWxl
UmVzb2x1dGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpjbGFzc05hbWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUNvdW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnQ6OmF0dHJpYnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6
Z2V0QXR0cmlidXRlSXRlbSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojp1cGRhdGVJbnZh
bGlkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNJRCk6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpoYXNDbGFzcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjplbnN1cmVQcml2YXRlRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dERhdGE6Om11dGFibGVBdHRyaWJ1dGVWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVu
dERhdGE6OmltbXV0YWJsZUF0dHJpYnV0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnREYXRhOjpsZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OnByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpnZXRB
dHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1
dGVJdGVtSW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0
ZW0pOgorICAgICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmR1
bXBTdGF0aXN0aWNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1bWVudFBv
c2l0aW9uKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRFbGVtZW50Ojp1cGRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRFbGVtZW50OjplbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZUZyb21TdHJpbmcpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmlubGluZVN0eWxlQ2hhbmdlZCk6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgor
ICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6cmVidWlsZFByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAoV2Vi
Q29yZTo6U3R5bGVkRWxlbWVudDo6aW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlZEVsZW1lbnQ6OnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBo
dG1sL0NsYXNzTGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc0xpc3Q6OmNsYXNzTmFt
ZXMpOgorICAgICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBodG1sL3BhcnNl
ci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3Ry
dWN0aW9uU2l0ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQpOgorICAgICAg
ICAqIHN2Zy9TVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnVw
ZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRWxlbWVudDo6aW52YWxpZGF0ZVNWR0F0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorCiAyMDEzLTAy
LTEzICBDaGFuZ1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KIAogICAgICAgICBbR1RL
XVtBQ10gSW1wbGVtZW50IGJhc2ljIHRyYW5zZm9ybSBhbmltYXRpb25zIHdpdGggY2x1dHRlciBh
YyBiYWNrZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggYjE5YWY3Ni4u
Mjk1NWU1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtODcwLDcgKzg3
MCw3IEBAIGJvb2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxl
ZEVsZW1lbnQqIGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFv
dGhlcklucHV0RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHRoaXNJ
bnB1dEVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+YXR0cmli
dXRlRGF0YSgpKSB7CisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmVsZW1lbnREYXRhKCkgIT0g
b3RoZXJJbnB1dEVsZW1lbnQtPmVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgaWYgKHRoaXNJbnB1
dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IG90aGVySW5wdXRFbGVtZW50
LT5mYXN0R2V0QXR0cmlidXRlKHR5cGVBdHRyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlB
dHRyKSAhPSBvdGhlcklucHV0RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0dHIp
KQpAQCAtOTIwLDcgKzkyMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0
aW9uQXV0byhFbGVtZW50KiBlbGVtZW50KQogYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2Fu
ZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQq
IHNoYXJpbmdDYW5kaWRhdGUpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9z
dGF0ZTsKLSAgICBpZiAoc3RhdGUuZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdD
YW5kaWRhdGUtPmF0dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZWxlbWVu
dERhdGEoKSA9PSBzaGFyaW5nQ2FuZGlkYXRlLT5lbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1l
czo6bGFuZ0F0dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFt
ZXM6OmxhbmdBdHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL0F0dHIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCmluZGV4
IDBjYzFiMzMuLmIxMzAxYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKQEAgLTIxMCw3ICsyMTAsNyBAQCBj
b25zdCBBdG9taWNTdHJpbmcmIEF0dHI6OnZhbHVlKCkgY29uc3QKIEF0dHJpYnV0ZSYgQXR0cjo6
ZWxlbWVudEF0dHJpYnV0ZSgpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgQVNTRVJU
KG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpKTsKKyAgICBBU1NFUlQobV9lbGVtZW50LT5lbGVt
ZW50RGF0YSgpKTsKICAgICByZXR1cm4gKm1fZWxlbWVudC0+Z2V0QXR0cmlidXRlSXRlbShxdWFs
aWZpZWROYW1lKCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnRTaGFyZWRPYmplY3RQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJl
ZE9iamVjdFBvb2wuY3BwCmluZGV4IGIxNjk0MTYuLjcyODMxOTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCkBAIC0zMSwxNCArMzEsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YUNhY2hlS2V5IHsKK2NsYXNzIFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkgewog
cHVibGljOgotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoY29uc3Qg
QXR0cmlidXRlKiBhdHRyaWJ1dGVzLCB1bnNpZ25lZCBhdHRyaWJ1dGVDb3VudCkKKyAgICBTaGFy
ZWFibGVFbGVtZW50RGF0YUNhY2hlS2V5KGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlcywgdW5z
aWduZWQgYXR0cmlidXRlQ291bnQpCiAgICAgICAgIDogbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMp
CiAgICAgICAgICwgbV9hdHRyaWJ1dGVDb3VudChhdHRyaWJ1dGVDb3VudCkKICAgICB7IH0KIAot
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNh
Y2hlS2V5JiBvdGhlcikgY29uc3QKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU2hhcmVhYmxl
RWxlbWVudERhdGFDYWNoZUtleSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9h
dHRyaWJ1dGVDb3VudCAhPSBvdGhlci5tX2F0dHJpYnV0ZUNvdW50KQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC01NSw0MCArNTUsNDAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2F0
dHJpYnV0ZUNvdW50OwogfTsKIAotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFD
YWNoZUVudHJ5IHsKK2NsYXNzIFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSB7CiBwdWJs
aWM6Ci0gICAgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFDYWNoZUVudHJ5KGNvbnN0IElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkmIGssIFBhc3NSZWZQdHI8RWxlbWVu
dEF0dHJpYnV0ZURhdGE+IHYpCisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZUVudHJ5KGNv
bnN0IFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkmIGssIFBhc3NSZWZQdHI8RWxlbWVudERh
dGE+IHYpCiAgICAgICAgIDoga2V5KGspCiAgICAgICAgICwgdmFsdWUodikKICAgICB7IH0KIAot
ICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkga2V5OwotICAgIFJlZlB0
cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gdmFsdWU7CisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFD
YWNoZUtleSBrZXk7CisgICAgUmVmUHRyPEVsZW1lbnREYXRhPiB2YWx1ZTsKIH07CiAKLVBhc3NS
ZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbDo6Y2Fj
aGVkSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4m
IGF0dHJpYnV0ZXMpCitQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBEb2N1bWVudFNoYXJlZE9iamVj
dFBvb2w6OmNhY2hlZFNoYXJlYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJpYnV0ZXMoY29uc3QgVmVj
dG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFhdHRyaWJ1dGVzLmlz
RW1wdHkoKSk7CiAKLSAgICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5IGNh
Y2hlS2V5KGF0dHJpYnV0ZXMuZGF0YSgpLCBhdHRyaWJ1dGVzLnNpemUoKSk7CisgICAgU2hhcmVh
YmxlRWxlbWVudERhdGFDYWNoZUtleSBjYWNoZUtleShhdHRyaWJ1dGVzLmRhdGEoKSwgYXR0cmli
dXRlcy5zaXplKCkpOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IGNhY2hlS2V5Lmhhc2goKTsK
IAotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGU6Oml0ZXJhdG9yIGNhY2hl
SXRlcmF0b3IgPSBtX2ltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGUuYWRkKGNhY2hl
SGFzaCwgbnVsbHB0cikuaXRlcmF0b3I7CisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZTo6
aXRlcmF0b3IgY2FjaGVJdGVyYXRvciA9IG1faW1tdXRhYmxlRWxlbWVudERhdGFDYWNoZS5hZGQo
Y2FjaGVIYXNoLCBudWxscHRyKS5pdGVyYXRvcjsKICAgICBpZiAoY2FjaGVJdGVyYXRvci0+dmFs
dWUgJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUtPmtleSAhPSBjYWNoZUtleSkKICAgICAgICAgY2Fj
aGVIYXNoID0gMDsKIAotICAgIFJlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gYXR0cmlidXRl
RGF0YTsKKyAgICBSZWZQdHI8RWxlbWVudERhdGE+IGVsZW1lbnREYXRhOwogICAgIGlmIChjYWNo
ZUhhc2ggJiYgY2FjaGVJdGVyYXRvci0+dmFsdWUpCi0gICAgICAgIGF0dHJpYnV0ZURhdGEgPSBj
YWNoZUl0ZXJhdG9yLT52YWx1ZS0+dmFsdWU7CisgICAgICAgIGVsZW1lbnREYXRhID0gY2FjaGVJ
dGVyYXRvci0+dmFsdWUtPnZhbHVlOwogICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlRGF0YSA9
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFibGUoYXR0cmlidXRlcyk7CisgICAg
ICAgIGVsZW1lbnREYXRhID0gRWxlbWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMpOwogCiAgICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+
dmFsdWUpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLnJlbGVhc2UoKTsKKyAgICAgICAg
cmV0dXJuIGVsZW1lbnREYXRhLnJlbGVhc2UoKTsKIAotICAgIGNhY2hlSXRlcmF0b3ItPnZhbHVl
ID0gYWRvcHRQdHIobmV3IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVFbnRyeShJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5KGF0dHJpYnV0ZURhdGEtPmltbXV0
YWJsZUF0dHJpYnV0ZUFycmF5KCksIGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpKSwgYXR0cmlidXRl
RGF0YSkpOworICAgIGNhY2hlSXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IFNoYXJlYWJs
ZUVsZW1lbnREYXRhQ2FjaGVFbnRyeShTaGFyZWFibGVFbGVtZW50RGF0YUNhY2hlS2V5KGVsZW1l
bnREYXRhLT5pbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpLCBlbGVtZW50RGF0YS0+bGVuZ3RoKCkp
LCBlbGVtZW50RGF0YSkpOwogCi0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEucmVsZWFzZSgpOwor
ICAgIHJldHVybiBlbGVtZW50RGF0YS5yZWxlYXNlKCk7CiB9CiAKIERvY3VtZW50U2hhcmVkT2Jq
ZWN0UG9vbDo6RG9jdW1lbnRTaGFyZWRPYmplY3RQb29sKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuaAppbmRleCA1NDBjOTEzLi4xNTA4NzU3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oCkBAIC0zNCwy
MSArMzQsMjEgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXR0cmlidXRlOwotY2xh
c3MgRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRl
RGF0YUNhY2hlRW50cnk7CitjbGFzcyBFbGVtZW50RGF0YTsKK2NsYXNzIFNoYXJlYWJsZUVsZW1l
bnREYXRhQ2FjaGVFbnRyeTsKIAogY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w+IGNy
ZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UHRyKG5ldyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wpOyB9
CiAgICAgfkRvY3VtZW50U2hhcmVkT2JqZWN0UG9vbCgpOwogCi0gICAgUGFzc1JlZlB0cjxFbGVt
ZW50QXR0cmlidXRlRGF0YT4gY2FjaGVkSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29u
c3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBjYWNo
ZWRTaGFyZWFibGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1
dGU+Jik7CiAKIHByaXZhdGU6CiAgICAgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sKCk7CiAKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8dW5zaWduZWQsIE93blB0cjxJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YUNhY2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YUNhY2hlOwotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGUgbV9p
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlOworICAgIHR5cGVkZWYgSGFzaE1hcDx1
bnNpZ25lZCwgT3duUHRyPFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeT4sIEFscmVhZHlI
YXNoZWQ+IFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGU7CisgICAgU2hhcmVhYmxlRWxlbWVudERh
dGFDYWNoZSBtX2ltbXV0YWJsZUVsZW1lbnREYXRhQ2FjaGU7CiB9OwogCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggOTUwNTE4ZC4uMWJmNzVhOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApA
QCAtMjc2LDkgKzI3Niw5IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y2xvbmVFbGVt
ZW50V2l0aG91dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpCiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxl
bWVudDo6ZGV0YWNoQXR0cmlidXRlKHNpemVfdCBpbmRleCkKIHsKLSAgICBBU1NFUlQoYXR0cmli
dXRlRGF0YSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CiAKLSAgICBjb25zdCBBdHRy
aWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCk7
CisgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVtZW50RGF0YSgpLT5hdHRyaWJ1
dGVJdGVtKGluZGV4KTsKICAgICBBU1NFUlQoYXR0cmlidXRlKTsKIAogICAgIFJlZlB0cjxBdHRy
PiBhdHRyTm9kZSA9IGF0dHJJZkV4aXN0cyhhdHRyaWJ1dGUtPm5hbWUoKSk7CkBAIC0yOTMsMTAg
KzI5MywxMCBAQCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmRldGFjaEF0dHJpYnV0ZShzaXpl
X3QgaW5kZXgpCiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUpCiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVt
ZW50RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgaW5kZXggPSBhdHRyaWJ1
dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBzaXplX3QgaW5kZXgg
PSBlbGVtZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7CiAgICAgaWYgKGlu
ZGV4ID09IG5vdEZvdW5kKQogICAgICAgICByZXR1cm47CiAKQEAgLTMxMyw3ICszMTMsNyBAQCB2
b2lkIEVsZW1lbnQ6OnNldEJvb2xlYW5BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgYm9vbCB2YWx1ZSkKIAogTmFtZWROb2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVzKCkgY29u
c3QKIHsKLSAgICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpOworICAgIGVuc3VyZUVsZW1l
bnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKTsKICAgICBFbGVtZW50UmFyZURhdGEq
IHJhcmVEYXRhID0gY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcyktPmVuc3VyZUVsZW1lbnRSYXJl
RGF0YSgpOwogICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IHJhcmVEYXRhLT5h
dHRyaWJ1dGVNYXAoKSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU1hcDsKQEAgLTMzNCwxNCAr
MzM0LDE0IEBAIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRl
KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVE
YXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207
CiAKLSAgICBpZiAoVU5MSUtFTFkobmFtZSA9PSBzdHlsZUF0dHIgJiYgYXR0cmlidXRlRGF0YSgp
LT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSkpCisgICAgaWYgKFVOTElLRUxZKG5hbWUgPT0gc3R5
bGVBdHRyICYmIGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KSkKICAgICAg
ICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKFVO
TElLRUxZKGF0dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkp
CisgICAgaWYgKFVOTElLRUxZKGVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVz
QXJlRGlydHkpKQogICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShuYW1lKTsKICNl
bmRpZgogCkBAIC03MDYsMjMgKzcwNiwyMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkSWdu
b3JlQXR0cmlidXRlQ2FzZShjb25zdCBFbGVtZW50KiBlKQogCiBjb25zdCBBdG9taWNTdHJpbmcm
IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7
Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAg
ICAgICByZXR1cm4gbnVsbEF0b207CiAKICAgICBib29sIGlnbm9yZUNhc2UgPSBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKHRoaXMpOwogCiAgICAgLy8gVXBkYXRlIHRoZSAnc3R5bGUnIGF0dHJp
YnV0ZSBpZiBpdCdzIGludmFsaWQgYW5kIGJlaW5nIHJlcXVlc3RlZDoKLSAgICBpZiAoYXR0cmli
dXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSAmJiBlcXVhbFBvc3NpYmx5SWdub3Jp
bmdDYXNlKG5hbWUsIHN0eWxlQXR0ci5sb2NhbE5hbWUoKSwgaWdub3JlQ2FzZSkpCisgICAgaWYg
KGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ICYmIGVxdWFsUG9zc2libHlJ
Z25vcmluZ0Nhc2UobmFtZSwgc3R5bGVBdHRyLmxvY2FsTmFtZSgpLCBpZ25vcmVDYXNlKSkKICAg
ICAgICAgdXBkYXRlU3R5bGVBdHRyaWJ1dGUoKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYg
KGF0dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkgeworICAg
IGlmIChlbGVtZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KSB7CiAg
ICAgICAgIC8vIFdlJ3JlIG5vdCBwYXNzaW5nIGEgbmFtZXNwYWNlIGFyZ3VtZW50IG9uIHB1cnBv
c2UuIFNWR05hbWVzOjoqQXR0ciBhcmUgZGVmaW5lZCB3L28gbmFtZXNwYWNlcyBhcyB3ZWxsLgog
ICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9t
LCBuYW1lLCBudWxsQXRvbSkpOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGNvbnN0IEF0dHJp
YnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUs
IGlnbm9yZUNhc2UpKQorICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1l
bnREYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgaWdub3JlQ2FzZSkpCiAgICAgICAgIHJl
dHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQpAQCAtNzQx
LDE5ICs3NDEsMTkgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogCiAgICAgY29uc3QgQXRvbWlj
U3RyaW5nJiBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFt
ZS5sb3dlcigpIDogbmFtZTsKIAotICAgIHNpemVfdCBpbmRleCA9IGVuc3VyZVVwZGF0ZWRBdHRy
aWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKKyAg
ICBzaXplX3QgaW5kZXggPSBlbnN1cmVFbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1
dGVzKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKICAgICBjb25z
dCBRdWFsaWZpZWROYW1lJiBxTmFtZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlSXRl
bShpbmRleCktPm5hbWUoKSA6IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbnVs
bEF0b20pOwogICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGluZGV4LCBxTmFtZSwgdmFsdWUsIE5v
dEluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKIH0KIAogdm9pZCBFbGVtZW50Ojpz
ZXRBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5n
JiB2YWx1ZSkKIHsKLSAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbnN1cmVVcGRhdGVkQXR0cmli
dXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBOb3RJ
blN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CisgICAgc2V0QXR0cmlidXRlSW50ZXJu
YWwoZW5zdXJlRWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpLT5nZXRBdHRy
aWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBOb3RJblN5bmNocm9uaXphdGlvbk9m
TGF6eUF0dHJpYnV0ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0U3luY2hyb25pemVkTGF6eUF0
dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZh
bHVlKQogewotICAgIHNldEF0dHJpYnV0ZUludGVybmFsKG11dGFibGVBdHRyaWJ1dGVEYXRhKCkt
PmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKSwgbmFtZSwgdmFsdWUsIEluU3luY2hyb25pemF0
aW9uT2ZMYXp5QXR0cmlidXRlKTsKKyAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbnN1cmVQcml2
YXRlRWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpLCBuYW1lLCB2YWx1
ZSwgSW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpOwogfQogCiBpbmxpbmUgdm9pZCBF
bGVtZW50OjpzZXRBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0cmluZyYgbmV3VmFsdWUsIFN5bmNocm9uaXphdGlv
bk9mTGF6eUF0dHJpYnV0ZSBpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkKQEAgLTc3
NCwxMiArNzc0LDEyIEBAIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNldEF0dHJpYnV0ZUludGVybmFs
KHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtCiAKICAgICBpZiAobmV3VmFs
dWUgIT0gYXR0cmlidXRlSXRlbShpbmRleCktPnZhbHVlKCkpIHsKICAgICAgICAgLy8gSWYgdGhl
cmUgaXMgYW4gQXR0ciBub2RlIGhvb2tlZCB0byB0aGlzIGF0dHJpYnV0ZSwgdGhlIEF0dHI6OnNl
dFZhbHVlKCkgY2FsbCBiZWxvdwotICAgICAgICAvLyB3aWxsIHdyaXRlIGludG8gdGhlIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhLgorICAgICAgICAvLyB3aWxsIHdyaXRlIGludG8gdGhlIEVsZW1lbnRE
YXRhLgogICAgICAgICAvLyBGSVhNRTogUmVmYWN0b3IgdGhpcyBzbyBpdCBtYWtlcyBzb21lIHNl
bnNlLgogICAgICAgICBpZiAoUmVmUHRyPEF0dHI+IGF0dHJOb2RlID0gaW5TeW5jaHJvbml6YXRp
b25PZkxhenlBdHRyaWJ1dGUgPyAwIDogYXR0cklmRXhpc3RzKG5hbWUpKQogICAgICAgICAgICAg
YXR0ck5vZGUtPnNldFZhbHVlKG5ld1ZhbHVlKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAg
bXV0YWJsZUF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCktPnNldFZhbHVlKG5l
d1ZhbHVlKTsKKyAgICAgICAgICAgIGVuc3VyZVByaXZhdGVFbGVtZW50RGF0YSgpLT5hdHRyaWJ1
dGVJdGVtKGluZGV4KS0+c2V0VmFsdWUobmV3VmFsdWUpOwogICAgIH0KIAogICAgIGlmICghaW5T
eW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCkBAIC04MTksMTAgKzgxOSwxMCBAQCB2b2lk
IEVsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29u
c3QgQXRvbWljU3RyaW5nJiBuZQogICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZVN0eWxlID0gZmFs
c2U7CiAKICAgICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpIHsKLSAgICAgICAgQXRvbWlj
U3RyaW5nIG9sZElkID0gYXR0cmlidXRlRGF0YSgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOwor
ICAgICAgICBBdG9taWNTdHJpbmcgb2xkSWQgPSBlbGVtZW50RGF0YSgpLT5pZEZvclN0eWxlUmVz
b2x1dGlvbigpOwogICAgICAgICBBdG9taWNTdHJpbmcgbmV3SWQgPSBtYWtlSWRGb3JTdHlsZVJl
c29sdXRpb24obmV3VmFsdWUsIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKICAgICAgICAg
aWYgKG5ld0lkICE9IG9sZElkKSB7Ci0gICAgICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPnNldElk
Rm9yU3R5bGVSZXNvbHV0aW9uKG5ld0lkKTsKKyAgICAgICAgICAgIGVsZW1lbnREYXRhKCktPnNl
dElkRm9yU3R5bGVSZXNvbHV0aW9uKG5ld0lkKTsKICAgICAgICAgICAgIHNob3VsZEludmFsaWRh
dGVTdHlsZSA9IHRlc3RTaG91bGRJbnZhbGlkYXRlU3R5bGUgJiYgY2hlY2tOZWVkc1N0eWxlSW52
YWxpZGF0aW9uRm9ySWRDaGFuZ2Uob2xkSWQsIG5ld0lkLCBzdHlsZVJlc29sdmVyKTsKICAgICAg
ICAgfQogICAgIH0gZWxzZSBpZiAobmFtZSA9PSBjbGFzc0F0dHIpCkBAIC05MjIsMTQgKzkyMiwx
NCBAQCB2b2lkIEVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJp
bmcmIG5ld0NsYXNzU3RyaW5nKQogCiAgICAgaWYgKGNsYXNzU3RyaW5nSGFzQ2xhc3NOYW1lKG5l
d0NsYXNzU3RyaW5nKSkgewogICAgICAgICBjb25zdCBib29sIHNob3VsZEZvbGRDYXNlID0gZG9j
dW1lbnQoKS0+aW5RdWlya3NNb2RlKCk7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcg
b2xkQ2xhc3NlcyA9IGF0dHJpYnV0ZURhdGEoKS0+Y2xhc3NOYW1lcygpOwotICAgICAgICBhdHRy
aWJ1dGVEYXRhKCktPnNldENsYXNzKG5ld0NsYXNzU3RyaW5nLCBzaG91bGRGb2xkQ2FzZSk7Ci0g
ICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG5ld0NsYXNzZXMgPSBhdHRyaWJ1dGVEYXRh
KCktPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyBvbGRDbGFz
c2VzID0gZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1lcygpOworICAgICAgICBlbGVtZW50RGF0YSgp
LT5zZXRDbGFzcyhuZXdDbGFzc1N0cmluZywgc2hvdWxkRm9sZENhc2UpOworICAgICAgICBjb25z
dCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzID0gZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1l
cygpOwogICAgICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUgPSB0ZXN0U2hvdWxkSW52YWxpZGF0
ZVN0eWxlICYmIGNoZWNrU2VsZWN0b3JGb3JDbGFzc0NoYW5nZShvbGRDbGFzc2VzLCBuZXdDbGFz
c2VzLCAqc3R5bGVSZXNvbHZlcik7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uc3QgU3BhY2VT
cGxpdFN0cmluZyYgb2xkQ2xhc3NlcyA9IGF0dHJpYnV0ZURhdGEoKS0+Y2xhc3NOYW1lcygpOwor
ICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEo
KS0+Y2xhc3NOYW1lcygpOwogICAgICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUgPSB0ZXN0U2hv
dWxkSW52YWxpZGF0ZVN0eWxlICYmIGNoZWNrU2VsZWN0b3JGb3JDbGFzc0NoYW5nZShvbGRDbGFz
c2VzLCAqc3R5bGVSZXNvbHZlcik7Ci0gICAgICAgIGF0dHJpYnV0ZURhdGEoKS0+Y2xlYXJDbGFz
cygpOworICAgICAgICBlbGVtZW50RGF0YSgpLT5jbGVhckNsYXNzKCk7CiAgICAgfQogCiAgICAg
aWYgKGhhc1JhcmVEYXRhKCkpCkBAIC05NDUsNyArOTQ1LDcgQEAgYm9vbCBFbGVtZW50OjpzaG91
bGRJbnZhbGlkYXRlRGlzdHJpYnV0aW9uV2hlbkF0dHJpYnV0ZUNoYW5nZWQoRWxlbWVudFNoYWRv
dyogZWwKICAgICBjb25zdCBTZWxlY3RSdWxlRmVhdHVyZVNldCYgZmVhdHVyZVNldCA9IGVsZW1l
bnRTaGFkb3ctPmRpc3RyaWJ1dG9yKCkuZW5zdXJlU2VsZWN0RmVhdHVyZVNldChlbGVtZW50U2hh
ZG93KTsKIAogICAgIGlmIChpc0lkQXR0cmlidXRlTmFtZShuYW1lKSkgewotICAgICAgICBBdG9t
aWNTdHJpbmcgb2xkSWQgPSBhdHRyaWJ1dGVEYXRhKCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7
CisgICAgICAgIEF0b21pY1N0cmluZyBvbGRJZCA9IGVsZW1lbnREYXRhKCktPmlkRm9yU3R5bGVS
ZXNvbHV0aW9uKCk7CiAgICAgICAgIEF0b21pY1N0cmluZyBuZXdJZCA9IG1ha2VJZEZvclN0eWxl
UmVzb2x1dGlvbihuZXdWYWx1ZSwgZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCkpOwogICAgICAg
ICBpZiAobmV3SWQgIT0gb2xkSWQpIHsKICAgICAgICAgICAgIGlmICghb2xkSWQuaXNFbXB0eSgp
ICYmIGZlYXR1cmVTZXQuaGFzU2VsZWN0b3JGb3JJZChvbGRJZCkpCkBAIC05NTksMTIgKzk1OSwx
MiBAQCBib29sIEVsZW1lbnQ6OnNob3VsZEludmFsaWRhdGVEaXN0cmlidXRpb25XaGVuQXR0cmli
dXRlQ2hhbmdlZChFbGVtZW50U2hhZG93KiBlbAogICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0NsYXNzU3RyaW5nID0gbmV3VmFsdWU7CiAgICAgICAgIGlmIChjbGFzc1N0cmluZ0hhc0Ns
YXNzTmFtZShuZXdDbGFzc1N0cmluZykpIHsKICAgICAgICAgICAgIGNvbnN0IGJvb2wgc2hvdWxk
Rm9sZENhc2UgPSBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKTsKLSAgICAgICAgICAgIGNvbnN0
IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMgPSBhdHRyaWJ1dGVEYXRhKCktPmNsYXNzTmFt
ZXMoKTsKKyAgICAgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcmIG9sZENsYXNzZXMgPSBl
bGVtZW50RGF0YSgpLT5jbGFzc05hbWVzKCk7CiAgICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0
U3RyaW5nIG5ld0NsYXNzZXMobmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNlKTsKICAgICAg
ICAgICAgIGlmIChjaGVja1NlbGVjdG9yRm9yQ2xhc3NDaGFuZ2Uob2xkQ2xhc3NlcywgbmV3Q2xh
c3NlcywgZmVhdHVyZVNldCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2Vz
ID0gYXR0cmlidXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAgICAgICAgICBjb25zdCBTcGFj
ZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1lcygpOwog
ICAgICAgICAgICAgaWYgKGNoZWNrU2VsZWN0b3JGb3JDbGFzc0NoYW5nZShvbGRDbGFzc2VzLCBm
ZWF0dXJlU2V0KSkKICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAt
OTk1LDcgKzk5NSw3IEBAIHZvaWQgRWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlcyhjb25zdCBW
ZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlVmVjdG9yLCBGcmFnCiAgICAgQVNTRVJUKCFpbkRv
Y3VtZW50KCkpOwogICAgIEFTU0VSVCghcGFyZW50Tm9kZSgpKTsKIAotICAgIEFTU0VSVCghbV9h
dHRyaWJ1dGVEYXRhKTsKKyAgICBBU1NFUlQoIW1fZWxlbWVudERhdGEpOwogCiAgICAgaWYgKGF0
dHJpYnV0ZVZlY3Rvci5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEwMjAsMTIgKzEw
MjAsMTIgQEAgdm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxB
dHRyaWJ1dGU+JiBhdHRyaWJ1dGVWZWN0b3IsIEZyYWcKICAgICB9CiAKICAgICBpZiAoZG9jdW1l
bnQoKSAmJiBkb2N1bWVudCgpLT5zaGFyZWRPYmplY3RQb29sKCkpCi0gICAgICAgIG1fYXR0cmli
dXRlRGF0YSA9IGRvY3VtZW50KCktPnNoYXJlZE9iamVjdFBvb2woKS0+Y2FjaGVkSW1tdXRhYmxl
RWxlbWVudEF0dHJpYnV0ZURhdGEoZmlsdGVyZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbV9lbGVt
ZW50RGF0YSA9IGRvY3VtZW50KCktPnNoYXJlZE9iamVjdFBvb2woKS0+Y2FjaGVkU2hhcmVhYmxl
RWxlbWVudERhdGFXaXRoQXR0cmlidXRlcyhmaWx0ZXJlZEF0dHJpYnV0ZXMpOwogICAgIGVsc2UK
LSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gRWxlbWVudEF0dHJpYnV0ZURhdGE6OmNyZWF0ZUlt
bXV0YWJsZShmaWx0ZXJlZEF0dHJpYnV0ZXMpOworICAgICAgICBtX2VsZW1lbnREYXRhID0gRWxl
bWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKGZpbHRlcmVkQXR0cmlidXRl
cyk7CiAKICAgICAvLyBJdGVyYXRlIG92ZXIgdGhlIHNldCBvZiBhdHRyaWJ1dGVzIHdlIGFscmVh
ZHkgaGF2ZSBvbiB0aGUgc3RhY2sgaW4gY2FzZQotICAgIC8vIGF0dHJpYnV0ZUNoYW5nZWQgbXV0
YXRlcyBtX2F0dHJpYnV0ZURhdGEuCisgICAgLy8gYXR0cmlidXRlQ2hhbmdlZCBtdXRhdGVzIG1f
ZWxlbWVudERhdGEuCiAgICAgLy8gRklYTUU6IEZpbmQgYSB3YXkgc28gd2UgZG9uJ3QgaGF2ZSB0
byBkbyB0aGlzLgogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBmaWx0ZXJlZEF0dHJpYnV0
ZXMuc2l6ZSgpOyArK2kpCiAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoZmlsdGVyZWRBdHRyaWJ1
dGVzW2ldLm5hbWUoKSwgZmlsdGVyZWRBdHRyaWJ1dGVzW2ldLnZhbHVlKCkpOwpAQCAtMTAzNCwx
OSArMTAzNCwxOSBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMoY29uc3QgVmVj
dG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZVZlY3RvciwgRnJhZwogYm9vbCBFbGVtZW50OjpoYXNB
dHRyaWJ1dGVzKCkgY29uc3QKIHsKICAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAg
IHJldHVybiBhdHRyaWJ1dGVEYXRhKCkgJiYgYXR0cmlidXRlRGF0YSgpLT5sZW5ndGgoKTsKKyAg
ICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiBlbGVtZW50RGF0YSgpLT5sZW5ndGgoKTsKIH0KIAog
Ym9vbCBFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyhjb25zdCBFbGVtZW50KiBvdGhl
cikgY29uc3QKIHsKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0
YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURh
dGEqIG90aGVyQXR0cmlidXRlRGF0YSA9IG90aGVyLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOwot
ICAgIGlmIChhdHRyaWJ1dGVEYXRhID09IG90aGVyQXR0cmlidXRlRGF0YSkKKyAgICBjb25zdCBF
bGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBlbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRy
aWJ1dGVzKCk7CisgICAgY29uc3QgRWxlbWVudERhdGEqIG90aGVyRWxlbWVudERhdGEgPSBvdGhl
ci0+ZWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpOworICAgIGlmIChlbGVt
ZW50RGF0YSA9PSBvdGhlckVsZW1lbnREYXRhKQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAoYXR0cmlidXRlRGF0YSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEtPmlzRXF1aXZh
bGVudChvdGhlckF0dHJpYnV0ZURhdGEpOwotICAgIGlmIChvdGhlckF0dHJpYnV0ZURhdGEpCi0g
ICAgICAgIHJldHVybiBvdGhlckF0dHJpYnV0ZURhdGEtPmlzRXF1aXZhbGVudChhdHRyaWJ1dGVE
YXRhKTsKKyAgICBpZiAoZWxlbWVudERhdGEpCisgICAgICAgIHJldHVybiBlbGVtZW50RGF0YS0+
aXNFcXVpdmFsZW50KG90aGVyRWxlbWVudERhdGEpOworICAgIGlmIChvdGhlckVsZW1lbnREYXRh
KQorICAgICAgICByZXR1cm4gb3RoZXJFbGVtZW50RGF0YS0+aXNFcXVpdmFsZW50KGVsZW1lbnRE
YXRhKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY4NywxNCArMTY4NywxNCBAQCBQYXNz
UmVmUHRyPEF0dHI+IEVsZW1lbnQ6OnNldEF0dHJpYnV0ZU5vZGUoQXR0ciogYXR0ck5vZGUsIEV4
Y2VwdGlvbkNvZGUmIGVjKQogICAgIH0KIAogICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7
Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtdXRhYmxlQXR0cmli
dXRlRGF0YSgpOworICAgIEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVuc3VyZVByaXZhdGVF
bGVtZW50RGF0YSgpOwogCi0gICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0
cmlidXRlSXRlbUluZGV4KGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCkpOworICAgIHNpemVfdCBp
bmRleCA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0ck5vZGUtPnF1YWxp
ZmllZE5hbWUoKSk7CiAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIGlmIChv
bGRBdHRyTm9kZSkKLSAgICAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFs
dWUob2xkQXR0ck5vZGUuZ2V0KCksIGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgp
LT52YWx1ZSgpKTsKKyAgICAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFs
dWUob2xkQXR0ck5vZGUuZ2V0KCksIGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+
dmFsdWUoKSk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9sZEF0dHJOb2RlID0gQXR0cjo6
Y3JlYXRlKGRvY3VtZW50KCksIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCksIGF0dHJpYnV0ZURh
dGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG9sZEF0dHJO
b2RlID0gQXR0cjo6Y3JlYXRlKGRvY3VtZW50KCksIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCks
IGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKSk7CiAgICAgfQogCiAg
ICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoaW5kZXgsIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCks
IGF0dHJOb2RlLT52YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7
CkBAIC0xNzIzLDEwICsxNzIzLDEwIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6cmVtb3Zl
QXR0cmlidXRlTm9kZShBdHRyKiBhdHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIEFTU0VS
VChkb2N1bWVudCgpID09IGF0dHItPmRvY3VtZW50KCkpOwogCi0gICAgY29uc3QgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwotICAg
IEFTU0VSVChhdHRyaWJ1dGVEYXRhKTsKKyAgICBjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERh
dGEgPSBlbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1dGVzKCk7CisgICAgQVNTRVJU
KGVsZW1lbnREYXRhKTsKIAotICAgIHNpemVfdCBpbmRleCA9IGF0dHJpYnV0ZURhdGEtPmdldEF0
dHJpYnV0ZUl0ZW1JbmRleChhdHRyLT5xdWFsaWZpZWROYW1lKCkpOworICAgIHNpemVfdCBpbmRl
eCA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0ci0+cXVhbGlmaWVkTmFt
ZSgpKTsKICAgICBpZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKICAgICAgICAgZWMgPSBOT1RfRk9V
TkRfRVJSOwogICAgICAgICByZXR1cm4gMDsKQEAgLTE3NjUsMTAgKzE3NjUsMTAgQEAgdm9pZCBF
bGVtZW50OjpyZW1vdmVBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIFN5bmNocm9uaXph
dGlvbk9mTGF6eUF0dHJpYnUKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElP
TihpbmRleCA8IGF0dHJpYnV0ZUNvdW50KCkpOwogCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZURhdGEgPSBtdXRhYmxlQXR0cmlidXRlRGF0YSgpOworICAgIEVsZW1lbnREYXRh
KiBlbGVtZW50RGF0YSA9IGVuc3VyZVByaXZhdGVFbGVtZW50RGF0YSgpOwogCi0gICAgUXVhbGlm
aWVkTmFtZSBuYW1lID0gYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUo
KTsKLSAgICBBdG9taWNTdHJpbmcgdmFsdWVCZWluZ1JlbW92ZWQgPSBhdHRyaWJ1dGVEYXRhLT5h
dHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKTsKKyAgICBRdWFsaWZpZWROYW1lIG5hbWUgPSBl
bGVtZW50RGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPm5hbWUoKTsKKyAgICBBdG9taWNTdHJp
bmcgdmFsdWVCZWluZ1JlbW92ZWQgPSBlbGVtZW50RGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCkt
PnZhbHVlKCk7CiAKICAgICBpZiAoIWluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKSB7
CiAgICAgICAgIGlmICghdmFsdWVCZWluZ1JlbW92ZWQuaXNOdWxsKCkpCkBAIC0xNzc2LDkgKzE3
NzYsOSBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZUludGVybmFsKHNpemVfdCBpbmRl
eCwgU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidQogICAgIH0KIAogICAgIGlmIChSZWZQdHI8
QXR0cj4gYXR0ck5vZGUgPSBhdHRySWZFeGlzdHMobmFtZSkpCi0gICAgICAgIGRldGFjaEF0dHJO
b2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUoYXR0ck5vZGUuZ2V0KCksIGF0dHJpYnV0ZURhdGEtPmF0
dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpKTsKKyAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9t
RWxlbWVudFdpdGhWYWx1ZShhdHRyTm9kZS5nZXQoKSwgZWxlbWVudERhdGEtPmF0dHJpYnV0ZUl0
ZW0oaW5kZXgpLT52YWx1ZSgpKTsKIAotICAgIGF0dHJpYnV0ZURhdGEtPnJlbW92ZUF0dHJpYnV0
ZShpbmRleCk7CisgICAgZWxlbWVudERhdGEtPnJlbW92ZUF0dHJpYnV0ZShpbmRleCk7CiAKICAg
ICBpZiAoIWluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogICAgICAgICBkaWRSZW1v
dmVBdHRyaWJ1dGUobmFtZSk7CkBAIC0xNzg4LDIwICsxNzg4LDIwIEBAIHZvaWQgRWxlbWVudDo6
YWRkQXR0cmlidXRlSW50ZXJuYWwoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRv
bWljU3RyaW5nCiB7CiAgICAgaWYgKCFpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSkK
ICAgICAgICAgd2lsbE1vZGlmeUF0dHJpYnV0ZShuYW1lLCBudWxsQXRvbSwgdmFsdWUpOwotICAg
IG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPmFkZEF0dHJpYnV0ZShBdHRyaWJ1dGUobmFtZSwgdmFs
dWUpKTsKKyAgICBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKS0+YWRkQXR0cmlidXRlKEF0dHJp
YnV0ZShuYW1lLCB2YWx1ZSkpOwogICAgIGlmICghaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRy
aWJ1dGUpCiAgICAgICAgIGRpZEFkZEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSk7CiB9CiAKIHZvaWQg
RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAg
ICBpZiAoIWF0dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoIWVsZW1lbnREYXRhKCkpCiAgICAgICAg
IHJldHVybjsKIAogICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRy
aWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigpIDogbmFtZTsKLSAgICBzaXplX3QgaW5kZXgg
PSBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNl
KTsKKyAgICBzaXplX3QgaW5kZXggPSBlbGVtZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5k
ZXgobG9jYWxOYW1lLCBmYWxzZSk7CiAgICAgaWYgKGluZGV4ID09IG5vdEZvdW5kKSB7Ci0gICAg
ICAgIGlmIChVTkxJS0VMWShsb2NhbE5hbWUgPT0gc3R5bGVBdHRyKSAmJiBhdHRyaWJ1dGVEYXRh
KCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ICYmIGlzU3R5bGVkRWxlbWVudCgpKQorICAgICAg
ICBpZiAoVU5MSUtFTFkobG9jYWxOYW1lID09IHN0eWxlQXR0cikgJiYgZWxlbWVudERhdGEoKS0+
bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgJiYgaXNTdHlsZWRFbGVtZW50KCkpCiAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxTdHlsZWRFbGVtZW50Kj4odGhpcyktPnJlbW92ZUFsbElubGluZVN0eWxl
UHJvcGVydGllcygpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTgxNiwxMCArMTgxNiwx
MCBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZUF0dHJpYnV0ZU5TKGNvbnN0IEF0b21pY1N0cmluZyYg
bmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdAogCiBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6
OmdldEF0dHJpYnV0ZU5vZGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQogewotICAgIGNvbnN0
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gdXBkYXRlZEF0dHJpYnV0ZURh
dGEoKTsKLSAgICBpZiAoIWF0dHJpYnV0ZURhdGEpCisgICAgY29uc3QgRWxlbWVudERhdGEqIGVs
ZW1lbnREYXRhID0gZWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpOworICAg
IGlmICghZWxlbWVudERhdGEpCiAgICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IEF0dHJpYnV0
ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBzaG91
bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpKTsKKyAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJp
YnV0ZSA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIHNob3VsZElnbm9yZUF0
dHJpYnV0ZUNhc2UodGhpcykpOwogICAgIGlmICghYXR0cmlidXRlKQogICAgICAgICByZXR1cm4g
MDsKICAgICByZXR1cm4gZW5zdXJlQXR0cihhdHRyaWJ1dGUtPm5hbWUoKSk7CkBAIC0xODI3LDEw
ICsxODI3LDEwIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZShj
b25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0
QXR0cmlidXRlTm9kZU5TKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBB
dG9taWNTdHJpbmcmIGxvY2FsTmFtZSkKIHsKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0
YSogYXR0cmlidXRlRGF0YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgaWYgKCFhdHRy
aWJ1dGVEYXRhKQorICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVsZW1lbnRE
YXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWVsZW1lbnREYXRhKQog
ICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGF0dHJp
YnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9jYWxO
YW1lLCBuYW1lc3BhY2VVUkkpKTsKKyAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVs
ZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2Fs
TmFtZSwgbmFtZXNwYWNlVVJJKSk7CiAgICAgaWYgKCFhdHRyaWJ1dGUpCiAgICAgICAgIHJldHVy
biAwOwogICAgIHJldHVybiBlbnN1cmVBdHRyKGF0dHJpYnV0ZS0+bmFtZSgpKTsKQEAgLTE4Mzgs
MjEgKzE4MzgsMjEgQEAgUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2Rl
TlMoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lc3BhY2VVUkksIGMKIAogYm9vbCBFbGVtZW50Ojpo
YXNBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKSBjb25zdAogewotICAgIGlmICgh
YXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCiAgICAgLy8gVGhpcyBjYWxsIHRvIFN0cmluZzo6bG93ZXIoKSBzZWVtcyB0byBi
ZSByZXF1aXJlZCBidXQKICAgICAvLyB0aGVyZSBtYXkgYmUgYSB3YXkgdG8gcmVtb3ZlIGl0Lgog
ICAgIEF0b21pY1N0cmluZyBsb2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRo
aXMpID8gbmFtZS5sb3dlcigpIDogbmFtZTsKLSAgICByZXR1cm4gdXBkYXRlZEF0dHJpYnV0ZURh
dGEoKS0+Z2V0QXR0cmlidXRlSXRlbShsb2NhbE5hbWUsIGZhbHNlKTsKKyAgICByZXR1cm4gZWxl
bWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVtKGxv
Y2FsTmFtZSwgZmFsc2UpOwogfQogCiBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKGNvbnN0
IEF0b21pY1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjb25zdCBBdG9taWNTdHJpbmcmIGxvY2FsTmFt
ZSkgY29uc3QKIHsKLSAgICBjb25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0
YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKQorICAg
IGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVsZW1lbnREYXRhV2l0aFN5bmNocm9u
aXplZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWVsZW1lbnREYXRhKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgbG9jYWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKKyAgICByZXR1cm4g
ZWxlbWVudERhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgbG9j
YWxOYW1lLCBuYW1lc3BhY2VVUkkpKTsKIH0KIAogQ1NTU3R5bGVEZWNsYXJhdGlvbiAqRWxlbWVu
dDo6c3R5bGUoKQpAQCAtMjE1OSwxMSArMjE1OSwxMSBAQCBBdG9taWNTdHJpbmcgRWxlbWVudDo6
Y29tcHV0ZUluaGVyaXRlZExhbmd1YWdlKCkgY29uc3QKICAgICAvLyBUaGUgbGFuZ3VhZ2UgcHJv
cGVydHkgaXMgaW5oZXJpdGVkLCBzbyB3ZSBpdGVyYXRlIG92ZXIgdGhlIHBhcmVudHMgdG8gZmlu
ZCB0aGUgZmlyc3QgbGFuZ3VhZ2UuCiAgICAgZG8gewogICAgICAgICBpZiAobi0+aXNFbGVtZW50
Tm9kZSgpKSB7Ci0gICAgICAgICAgICBpZiAoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0
dHJpYnV0ZURhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBFbGVtZW50Kj4obiktPmF0dHJpYnV0ZURh
dGEoKSkgeworICAgICAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9
IHN0YXRpY19jYXN0PGNvbnN0IEVsZW1lbnQqPihuKS0+ZWxlbWVudERhdGEoKSkgewogICAgICAg
ICAgICAgICAgIC8vIFNwZWM6IHhtbDpsYW5nIHRha2VzIHByZWNlZGVuY2UgLS0gaHR0cDovL3d3
dy53My5vcmcvVFIveGh0bWwxLyNDXzcKLSAgICAgICAgICAgICAgICBpZiAoY29uc3QgQXR0cmli
dXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFhNTE5hbWVz
OjpsYW5nQXR0cikpCisgICAgICAgICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmli
dXRlID0gZWxlbWVudERhdGEtPmdldEF0dHJpYnV0ZUl0ZW0oWE1MTmFtZXM6OmxhbmdBdHRyKSkK
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBhdHRyaWJ1dGUtPnZhbHVlKCk7Ci0gICAgICAg
ICAgICAgICAgZWxzZSBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVE
YXRhLT5nZXRBdHRyaWJ1dGVJdGVtKEhUTUxOYW1lczo6bGFuZ0F0dHIpKQorICAgICAgICAgICAg
ICAgIGVsc2UgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZWxlbWVudERhdGEtPmdl
dEF0dHJpYnV0ZUl0ZW0oSFRNTE5hbWVzOjpsYW5nQXR0cikpCiAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVs
c2UgaWYgKG4tPmlzRG9jdW1lbnROb2RlKCkpIHsKQEAgLTIzMjcsNyArMjMyNyw3IEBAIERPTVN0
cmluZ01hcCogRWxlbWVudDo6ZGF0YXNldCgpCiBLVVJMIEVsZW1lbnQ6OmdldFVSTEF0dHJpYnV0
ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogI2lmICFBU1NFUlRfRElTQUJM
RUQKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgaWYgKGVsZW1lbnREYXRhKCkpIHsK
ICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZ2V0QXR0cmlidXRlSXRl
bShuYW1lKSkKICAgICAgICAgICAgIEFTU0VSVChpc1VSTEF0dHJpYnV0ZSgqYXR0cmlidXRlKSk7
CiAgICAgfQpAQCAtMjMzOCw3ICsyMzM4LDcgQEAgS1VSTCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIEtVUkwgRWxlbWVudDo6Z2V0Tm9u
RW1wdHlVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICNp
ZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkgeworICAgIGlmIChl
bGVtZW50RGF0YSgpKSB7CiAgICAgICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAgICAgICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1
dGUoKmF0dHJpYnV0ZSkpOwogICAgIH0KQEAgLTI3NDUsOCArMjc0NSw4IEBAIHZvaWQgRWxlbWVu
dDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1lbnQoY29uc3QgRWxlbWVudCYgb3RoZXIpCiAgICAg
ICAgIGRldGFjaEFsbEF0dHJOb2Rlc0Zyb21FbGVtZW50KCk7CiAKICAgICBvdGhlci51cGRhdGVJ
bnZhbGlkQXR0cmlidXRlcygpOwotICAgIGlmICghb3RoZXIubV9hdHRyaWJ1dGVEYXRhKSB7Ci0g
ICAgICAgIG1fYXR0cmlidXRlRGF0YS5jbGVhcigpOworICAgIGlmICghb3RoZXIubV9lbGVtZW50
RGF0YSkgeworICAgICAgICBtX2VsZW1lbnREYXRhLmNsZWFyKCk7CiAgICAgICAgIHJldHVybjsK
ICAgICB9CiAKQEAgLTI3NjIsMjAgKzI3NjIsMjAgQEAgdm9pZCBFbGVtZW50OjpjbG9uZUF0dHJp
YnV0ZXNGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKICAgICBpZiAoIW9sZE5hbWUu
aXNOdWxsKCkgfHwgIW5ld05hbWUuaXNOdWxsKCkpCiAgICAgICAgIHVwZGF0ZU5hbWUob2xkTmFt
ZSwgbmV3TmFtZSk7CiAKLSAgICAvLyBJZiAnb3RoZXInIGhhcyBhIG11dGFibGUgRWxlbWVudEF0
dHJpYnV0ZURhdGEsIGNvbnZlcnQgaXQgdG8gYW4gaW1tdXRhYmxlIG9uZSBzbyB3ZSBjYW4gc2hh
cmUgaXQgYmV0d2VlbiBib3RoIGVsZW1lbnRzLgorICAgIC8vIElmICdvdGhlcicgaGFzIGEgbXV0
YWJsZSBFbGVtZW50RGF0YSwgY29udmVydCBpdCB0byBhbiBpbW11dGFibGUgb25lIHNvIHdlIGNh
biBzaGFyZSBpdCBiZXR3ZWVuIGJvdGggZWxlbWVudHMuCiAgICAgLy8gV2UgY2FuIG9ubHkgZG8g
dGhpcyBpZiB0aGVyZSBpcyBubyBDU1NPTSB3cmFwcGVyIGZvciBvdGhlcidzIGlubGluZSBzdHls
ZSwgYW5kIHRoZXJlIGFyZSBubyBwcmVzZW50YXRpb24gYXR0cmlidXRlcy4KLSAgICBpZiAob3Ro
ZXIubV9hdHRyaWJ1dGVEYXRhLT5pc011dGFibGUoKQotICAgICAgICAmJiAhb3RoZXIubV9hdHRy
aWJ1dGVEYXRhLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpCi0gICAgICAgICYmICghb3Ro
ZXIubV9hdHRyaWJ1dGVEYXRhLT5pbmxpbmVTdHlsZSgpIHx8ICFvdGhlci5tX2F0dHJpYnV0ZURh
dGEtPmlubGluZVN0eWxlKCktPmhhc0NTU09NV3JhcHBlcigpKSkKLSAgICAgICAgY29uc3RfY2Fz
dDxFbGVtZW50Jj4ob3RoZXIpLm1fYXR0cmlidXRlRGF0YSA9IG90aGVyLm1fYXR0cmlidXRlRGF0
YS0+bWFrZUltbXV0YWJsZUNvcHkoKTsKKyAgICBpZiAob3RoZXIubV9lbGVtZW50RGF0YS0+aXNQ
cml2YXRlKCkKKyAgICAgICAgJiYgIW90aGVyLm1fZWxlbWVudERhdGEtPnByZXNlbnRhdGlvbkF0
dHJpYnV0ZVN0eWxlKCkKKyAgICAgICAgJiYgKCFvdGhlci5tX2VsZW1lbnREYXRhLT5pbmxpbmVT
dHlsZSgpIHx8ICFvdGhlci5tX2VsZW1lbnREYXRhLT5pbmxpbmVTdHlsZSgpLT5oYXNDU1NPTVdy
YXBwZXIoKSkpCisgICAgICAgIGNvbnN0X2Nhc3Q8RWxlbWVudCY+KG90aGVyKS5tX2VsZW1lbnRE
YXRhID0gb3RoZXIubV9lbGVtZW50RGF0YS0+bWFrZVNoYXJlYWJsZUNvcHkoKTsKIAotICAgIGlm
ICghb3RoZXIubV9hdHRyaWJ1dGVEYXRhLT5pc011dGFibGUoKSkKLSAgICAgICAgbV9hdHRyaWJ1
dGVEYXRhID0gb3RoZXIubV9hdHRyaWJ1dGVEYXRhOworICAgIGlmICghb3RoZXIubV9lbGVtZW50
RGF0YS0+aXNQcml2YXRlKCkpCisgICAgICAgIG1fZWxlbWVudERhdGEgPSBvdGhlci5tX2VsZW1l
bnREYXRhOwogICAgIGVsc2UKLSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gb3RoZXIubV9hdHRy
aWJ1dGVEYXRhLT5tYWtlTXV0YWJsZUNvcHkoKTsKKyAgICAgICAgbV9lbGVtZW50RGF0YSA9IG90
aGVyLm1fZWxlbWVudERhdGEtPm1ha2VQcml2YXRlQ29weSgpOwogCi0gICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fYXR0cmlidXRlRGF0YS0+bGVuZ3RoKCk7ICsraSkgewotICAgICAgICBj
b25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGNvbnN0X2Nhc3Q8Y29uc3QgRWxlbWVudEF0dHJp
YnV0ZURhdGEqPihtX2F0dHJpYnV0ZURhdGEuZ2V0KCkpLT5hdHRyaWJ1dGVJdGVtKGkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2VsZW1lbnREYXRhLT5sZW5ndGgoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gY29uc3RfY2FzdDxjb25zdCBF
bGVtZW50RGF0YSo+KG1fZWxlbWVudERhdGEuZ2V0KCkpLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAg
ICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGF0dHJpYnV0ZS0+bmFtZSgpLCBhdHRyaWJ1dGUtPnZhbHVl
KCkpOwogICAgIH0KIH0KQEAgLTI3ODYsMTIgKzI3ODYsMTIgQEAgdm9pZCBFbGVtZW50OjpjbG9u
ZURhdGFGcm9tRWxlbWVudChjb25zdCBFbGVtZW50JiBvdGhlcikKICAgICBjb3B5Tm9uQXR0cmli
dXRlUHJvcGVydGllc0Zyb21FbGVtZW50KG90aGVyKTsKIH0KIAotdm9pZCBFbGVtZW50OjpjcmVh
dGVNdXRhYmxlQXR0cmlidXRlRGF0YSgpCit2b2lkIEVsZW1lbnQ6OmNyZWF0ZVByaXZhdGVFbGVt
ZW50RGF0YSgpCiB7Ci0gICAgaWYgKCFtX2F0dHJpYnV0ZURhdGEpCi0gICAgICAgIG1fYXR0cmli
dXRlRGF0YSA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGUoKTsKKyAgICBpZiAoIW1fZWxl
bWVudERhdGEpCisgICAgICAgIG1fZWxlbWVudERhdGEgPSBFbGVtZW50RGF0YTo6Y3JlYXRlUHJp
dmF0ZSgpOwogICAgIGVsc2UKLSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gbV9hdHRyaWJ1dGVE
YXRhLT5tYWtlTXV0YWJsZUNvcHkoKTsKKyAgICAgICAgbV9lbGVtZW50RGF0YSA9IG1fZWxlbWVu
dERhdGEtPm1ha2VQcml2YXRlQ29weSgpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlcG9ydE1lbW9y
eVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CkBAIC0yNzk5
LDcgKzI3OTksNyBAQCB2b2lkIEVsZW1lbnQ6OnJlcG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVj
dEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0CiAgICAgTWVtb3J5Q2xhc3NJbmZvIGluZm8o
bWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpET00pOwogICAgIENv
bnRhaW5lck5vZGU6OnJlcG9ydE1lbW9yeVVzYWdlKG1lbW9yeU9iamVjdEluZm8pOwogICAgIGlu
Zm8uYWRkTWVtYmVyKG1fdGFnTmFtZSwgInRhZ05hbWUiKTsKLSAgICBpbmZvLmFkZE1lbWJlciht
X2F0dHJpYnV0ZURhdGEsICJhdHRyaWJ1dGVEYXRhIik7CisgICAgaW5mby5hZGRNZW1iZXIobV9l
bGVtZW50RGF0YSwgImVsZW1lbnREYXRhIik7CiB9CiAKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMjgx
OSwxOSArMjgxOSwxOSBAQCB2b2lkIEVsZW1lbnQ6OmNsZWFySGFzUGVuZGluZ1Jlc291cmNlcygp
CiB9CiAjZW5kaWYKIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6ZGVyZWYoKQordm9pZCBF
bGVtZW50RGF0YTo6ZGVyZWYoKQogewogICAgIGlmICghZGVyZWZCYXNlKCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGlmIChtX2lzTXV0YWJsZSkKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0
PE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpOworICAgIGlmIChtX2lzUHJpdmF0
ZSkKKyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFByaXZhdGVFbGVtZW50RGF0YSo+KHRoaXMp
OwogICAgIGVsc2UKLSAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PEltbXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKj4odGhpcyk7CisgICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxTaGFyZWFi
bGVFbGVtZW50RGF0YSo+KHRoaXMpOwogfQogCi1FbGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVu
dEF0dHJpYnV0ZURhdGEoKQotICAgIDogbV9pc011dGFibGUodHJ1ZSkKK0VsZW1lbnREYXRhOjpF
bGVtZW50RGF0YSgpCisgICAgOiBtX2lzUHJpdmF0ZSh0cnVlKQogICAgICwgbV9hcnJheVNpemUo
MCkKICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KGZhbHNlKQogICAg
ICwgbV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkoZmFsc2UpCkBAIC0yODQxLDggKzI4NDEsOCBAQCBF
bGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEoKQogewogfQogCi1FbGVt
ZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEodW5zaWduZWQgYXJyYXlTaXpl
KQotICAgIDogbV9pc011dGFibGUoZmFsc2UpCitFbGVtZW50RGF0YTo6RWxlbWVudERhdGEodW5z
aWduZWQgYXJyYXlTaXplKQorICAgIDogbV9pc1ByaXZhdGUoZmFsc2UpCiAgICAgLCBtX2FycmF5
U2l6ZShhcnJheVNpemUpCiAgICAgLCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0
eShmYWxzZSkKICAgICAsIG1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KGZhbHNlKQpAQCAtMjg1Miw0
NCArMjg1Miw0NCBAQCBFbGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEo
dW5zaWduZWQgYXJyYXlTaXplKQogewogfQogCi1zdHJ1Y3QgU2FtZVNpemVBc0VsZW1lbnRBdHRy
aWJ1dGVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0VsZW1lbnRBdHRyaWJ1dGVE
YXRhPiB7CitzdHJ1Y3QgU2FtZVNpemVBc0VsZW1lbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8
U2FtZVNpemVBc0VsZW1lbnREYXRhPiB7CiAgICAgdW5zaWduZWQgYml0ZmllbGQ7CiAgICAgdm9p
ZCogcmVmUHRyc1szXTsKIH07CiAKLUNPTVBJTEVfQVNTRVJUKHNpemVvZihFbGVtZW50QXR0cmli
dXRlRGF0YSkgPT0gc2l6ZW9mKFNhbWVTaXplQXNFbGVtZW50QXR0cmlidXRlRGF0YSksIGVsZW1l
bnRfYXR0cmlidXRlX2RhdGFfc2hvdWxkX3N0YXlfc21hbGwpOworQ09NUElMRV9BU1NFUlQoc2l6
ZW9mKEVsZW1lbnREYXRhKSA9PSBzaXplb2YoU2FtZVNpemVBc0VsZW1lbnREYXRhKSwgZWxlbWVu
dF9hdHRyaWJ1dGVfZGF0YV9zaG91bGRfc3RheV9zbWFsbCk7CiAKLXN0YXRpYyBzaXplX3Qgc2l6
ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KHVuc2ln
bmVkIGNvdW50KQorc3RhdGljIHNpemVfdCBzaXplRm9yU2hhcmVhYmxlRWxlbWVudERhdGFXaXRo
QXR0cmlidXRlQ291bnQodW5zaWduZWQgY291bnQpCiB7Ci0gICAgcmV0dXJuIHNpemVvZihJbW11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSkgLSBzaXplb2Yodm9pZCopICsgc2l6ZW9mKEF0dHJp
YnV0ZSkgKiBjb3VudDsKKyAgICByZXR1cm4gc2l6ZW9mKFNoYXJlYWJsZUVsZW1lbnREYXRhKSAt
IHNpemVvZih2b2lkKikgKyBzaXplb2YoQXR0cmlidXRlKSAqIGNvdW50OwogfQogCi1QYXNzUmVm
UHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlSW1t
dXRhYmxlKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQorUGFzc1JlZlB0cjxF
bGVtZW50RGF0YT4gRWxlbWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKGNv
bnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBhdHRyaWJ1dGVzKQogewotICAgIHZvaWQqIHNsb3QgPSBX
VEY6OmZhc3RNYWxsb2Moc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0
dHJpYnV0ZUNvdW50KGF0dHJpYnV0ZXMuc2l6ZSgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5l
dyAoc2xvdCkgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoYXR0cmlidXRlcykpOworICAg
IHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvclNoYXJlYWJsZUVsZW1lbnREYXRh
V2l0aEF0dHJpYnV0ZUNvdW50KGF0dHJpYnV0ZXMuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyAoc2xvdCkgU2hhcmVhYmxlRWxlbWVudERhdGEoYXR0cmlidXRlcykpOwogfQogCi1Q
YXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3Jl
YXRlKCkKK1Bhc3NSZWZQdHI8RWxlbWVudERhdGE+IEVsZW1lbnREYXRhOjpjcmVhdGVQcml2YXRl
KCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcml2YXRlRWxlbWVudERhdGEpOwogfQogCi1J
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCi0gICAgOiBFbGVtZW50QXR0
cmlidXRlRGF0YShhdHRyaWJ1dGVzLnNpemUoKSkKK1NoYXJlYWJsZUVsZW1lbnREYXRhOjpTaGFy
ZWFibGVFbGVtZW50RGF0YShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYgYXR0cmlidXRlcykKKyAg
ICA6IEVsZW1lbnREYXRhKGF0dHJpYnV0ZXMuc2l6ZSgpKQogewogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBtX2FycmF5U2l6ZTsgKytpKQogICAgICAgICBuZXcgKCZyZWludGVycHJldF9j
YXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkgQXR0cmlidXRlKGF0dHJpYnV0
ZXNbaV0pOwogfQogCi1JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6fkltbXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKCkKK1NoYXJlYWJsZUVsZW1lbnREYXRhOjp+U2hhcmVhYmxlRWxl
bWVudERhdGEoKQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2FycmF5U2l6ZTsg
KytpKQogICAgICAgICAocmVpbnRlcnByZXRfY2FzdDxBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1dGVB
cnJheSlbaV0pLn5BdHRyaWJ1dGUoKTsKIH0KIAotSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGE6OkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0
cmlidXRlRGF0YSYgb3RoZXIpCi0gICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwgZmFs
c2UpCitTaGFyZWFibGVFbGVtZW50RGF0YTo6U2hhcmVhYmxlRWxlbWVudERhdGEoY29uc3QgUHJp
dmF0ZUVsZW1lbnREYXRhJiBvdGhlcikKKyAgICA6IEVsZW1lbnREYXRhKG90aGVyLCBmYWxzZSkK
IHsKICAgICBBU1NFUlQoIW90aGVyLm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOwogCkBA
IC0yOTAyLDkgKzI5MDIsOSBAQCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbgogICAgICAgICBuZXcg
KCZyZWludGVycHJldF9jYXN0PEF0dHJpYnV0ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkgQXR0
cmlidXRlKCpvdGhlci5hdHRyaWJ1dGVJdGVtKGkpKTsKIH0KIAotRWxlbWVudEF0dHJpYnV0ZURh
dGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhl
ciwgYm9vbCBpc011dGFibGUpCi0gICAgOiBtX2lzTXV0YWJsZShpc011dGFibGUpCi0gICAgLCBt
X2FycmF5U2l6ZShpc011dGFibGUgPyAwIDogb3RoZXIubGVuZ3RoKCkpCitFbGVtZW50RGF0YTo6
RWxlbWVudERhdGEoY29uc3QgRWxlbWVudERhdGEmIG90aGVyLCBib29sIGlzUHJpdmF0ZSkKKyAg
ICA6IG1faXNQcml2YXRlKGlzUHJpdmF0ZSkKKyAgICAsIG1fYXJyYXlTaXplKGlzUHJpdmF0ZSA/
IDAgOiBvdGhlci5sZW5ndGgoKSkKICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJ
c0RpcnR5KG90aGVyLm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KQogICAgICwg
bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkob3RoZXIubV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpCiAj
aWYgRU5BQkxFKFNWRykKQEAgLTI5MTYsMjIgKzI5MTYsMjIgQEAgRWxlbWVudEF0dHJpYnV0ZURh
dGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhl
ciwgYm8KICAgICAvLyBOT1RFOiBUaGUgaW5saW5lIHN0eWxlIGlzIGNvcGllZCBieSB0aGUgc3Vi
Y2xhc3MgY29weSBjb25zdHJ1Y3RvciBzaW5jZSB3ZSBkb24ndCBrbm93IHdoYXQgdG8gZG8gd2l0
aCBpdCBoZXJlLgogfQogCi1NdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE6Ok11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YSgpCitQcml2YXRlRWxlbWVudERhdGE6OlByaXZhdGVFbGVtZW50RGF0
YSgpCiB7CiB9CiAKLU11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6TXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSYgb3RoZXIpCi0g
ICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwgdHJ1ZSkKK1ByaXZhdGVFbGVtZW50RGF0
YTo6UHJpdmF0ZUVsZW1lbnREYXRhKGNvbnN0IFByaXZhdGVFbGVtZW50RGF0YSYgb3RoZXIpCisg
ICAgOiBFbGVtZW50RGF0YShvdGhlciwgdHJ1ZSkKICAgICAsIG1fcHJlc2VudGF0aW9uQXR0cmli
dXRlU3R5bGUob3RoZXIubV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSkKICAgICAsIG1fYXR0
cmlidXRlVmVjdG9yKG90aGVyLm1fYXR0cmlidXRlVmVjdG9yKQogewogICAgIG1faW5saW5lU3R5
bGUgPSBvdGhlci5tX2lubGluZVN0eWxlID8gb3RoZXIubV9pbmxpbmVTdHlsZS0+Y29weSgpIDog
MDsKIH0KIAotTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEoY29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyKQotICAg
IDogRWxlbWVudEF0dHJpYnV0ZURhdGEob3RoZXIsIHRydWUpCitQcml2YXRlRWxlbWVudERhdGE6
OlByaXZhdGVFbGVtZW50RGF0YShjb25zdCBTaGFyZWFibGVFbGVtZW50RGF0YSYgb3RoZXIpCisg
ICAgOiBFbGVtZW50RGF0YShvdGhlciwgdHJ1ZSkKIHsKLSAgICAvLyBBbiBJbW11dGFibGVFbGVt
ZW50QXR0cmlidXRlRGF0YSBzaG91bGQgbmV2ZXIgaGF2ZSBhIG11dGFibGUgaW5saW5lIFN0eWxl
UHJvcGVydHlTZXQgYXR0YWNoZWQuCisgICAgLy8gQW4gU2hhcmVhYmxlRWxlbWVudERhdGEgc2hv
dWxkIG5ldmVyIGhhdmUgYSBtdXRhYmxlIGlubGluZSBTdHlsZVByb3BlcnR5U2V0IGF0dGFjaGVk
LgogICAgIEFTU0VSVCghb3RoZXIubV9pbmxpbmVTdHlsZSB8fCAhb3RoZXIubV9pbmxpbmVTdHls
ZS0+aXNNdXRhYmxlKCkpOwogICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxl
OwogCkBAIC0yOTQwLDQwICsyOTQwLDQwIEBAIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTo6
TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBCiAgICAg
ICAgIG1fYXR0cmlidXRlVmVjdG9yLnVuY2hlY2tlZEFwcGVuZChvdGhlci5pbW11dGFibGVBdHRy
aWJ1dGVBcnJheSgpW2ldKTsKIH0KIAotUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4g
RWxlbWVudEF0dHJpYnV0ZURhdGE6Om1ha2VNdXRhYmxlQ29weSgpIGNvbnN0CitQYXNzUmVmUHRy
PEVsZW1lbnREYXRhPiBFbGVtZW50RGF0YTo6bWFrZVByaXZhdGVDb3B5KCkgY29uc3QKIHsKLSAg
ICBpZiAoaXNNdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSY+KCp0aGlzKSkpOwotICAgIHJldHVybiBhZG9wdFJlZihuZXcgTXV0YWJsZUVsZW1l
bnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhJj4oKnRoaXMpKSk7CisgICAgaWYgKGlzUHJpdmF0ZSgpKQorICAgICAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFByaXZhdGVFbGVtZW50RGF0YShzdGF0aWNfY2FzdDxjb25zdCBQcml2YXRl
RWxlbWVudERhdGEmPigqdGhpcykpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYobmV3IFByaXZhdGVF
bGVtZW50RGF0YShzdGF0aWNfY2FzdDxjb25zdCBTaGFyZWFibGVFbGVtZW50RGF0YSY+KCp0aGlz
KSkpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBFbGVtZW50QXR0cmli
dXRlRGF0YTo6bWFrZUltbXV0YWJsZUNvcHkoKSBjb25zdAorUGFzc1JlZlB0cjxFbGVtZW50RGF0
YT4gRWxlbWVudERhdGE6Om1ha2VTaGFyZWFibGVDb3B5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQo
aXNNdXRhYmxlKCkpOwotICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvcklt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KG11dGFibGVBdHRy
aWJ1dGVWZWN0b3IoKS5zaXplKCkpKTsKLSAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGEmPigqdGhpcykpKTsKKyAgICBBU1NFUlQoaXNQcml2YXRlKCkpOwor
ICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvclNoYXJlYWJsZUVsZW1lbnRE
YXRhV2l0aEF0dHJpYnV0ZUNvdW50KG11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKS5zaXplKCkpKTsK
KyAgICByZXR1cm4gYWRvcHRSZWYobmV3IChzbG90KSBTaGFyZWFibGVFbGVtZW50RGF0YShzdGF0
aWNfY2FzdDxjb25zdCBQcml2YXRlRWxlbWVudERhdGEmPigqdGhpcykpKTsKIH0KIAotdm9pZCBF
bGVtZW50QXR0cmlidXRlRGF0YTo6c2V0UHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoUGFzc1Jl
ZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkgY29uc3QKK3ZvaWQgRWxlbWVudERhdGE6OnNl
dFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4g
c3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICBzdGF0aWNfY2Fz
dDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRp
b25BdHRyaWJ1dGVTdHlsZSA9IHN0eWxlOworICAgIEFTU0VSVChtX2lzUHJpdmF0ZSk7CisgICAg
c3RhdGljX2Nhc3Q8Y29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fcHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUgPSBzdHlsZTsKIH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0
YTo6YWRkQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQordm9pZCBFbGVtZW50
RGF0YTo6YWRkQXR0cmlidXRlKGNvbnN0IEF0dHJpYnV0ZSYgYXR0cmlidXRlKQogewotICAgIEFT
U0VSVChpc011dGFibGUoKSk7CisgICAgQVNTRVJUKGlzUHJpdmF0ZSgpKTsKICAgICBtdXRhYmxl
QXR0cmlidXRlVmVjdG9yKCkuYXBwZW5kKGF0dHJpYnV0ZSk7CiB9CiAKLXZvaWQgRWxlbWVudEF0
dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpCit2b2lkIEVsZW1lbnRE
YXRhOjpyZW1vdmVBdHRyaWJ1dGUoc2l6ZV90IGluZGV4KQogewotICAgIEFTU0VSVChpc011dGFi
bGUoKSk7CisgICAgQVNTRVJUKGlzUHJpdmF0ZSgpKTsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklU
WV9JTVBMSUNBVElPTihpbmRleCA8IGxlbmd0aCgpKTsKICAgICBtdXRhYmxlQXR0cmlidXRlVmVj
dG9yKCkucmVtb3ZlKGluZGV4KTsKIH0KIAotYm9vbCBFbGVtZW50QXR0cmlidXRlRGF0YTo6aXNF
cXVpdmFsZW50KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlcikgY29uc3QKK2Jvb2wg
RWxlbWVudERhdGE6OmlzRXF1aXZhbGVudChjb25zdCBFbGVtZW50RGF0YSogb3RoZXIpIGNvbnN0
CiB7CiAgICAgaWYgKCFvdGhlcikKICAgICAgICAgcmV0dXJuIGlzRW1wdHkoKTsKQEAgLTI5OTIs
MTQgKzI5OTIsMTQgQEAgYm9vbCBFbGVtZW50QXR0cmlidXRlRGF0YTo6aXNFcXVpdmFsZW50KGNv
bnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlcikgY29uc3QKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5
T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykgY29uc3QKK3ZvaWQgRWxlbWVudERhdGE6OnJl
cG9ydE1lbW9yeVVzYWdlKE1lbW9yeU9iamVjdEluZm8qIG1lbW9yeU9iamVjdEluZm8pIGNvbnN0
CiB7Ci0gICAgc2l6ZV90IGFjdHVhbFNpemUgPSBtX2lzTXV0YWJsZSA/IHNpemVvZihFbGVtZW50
QXR0cmlidXRlRGF0YSkgOiBzaXplRm9ySW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFXaXRo
QXR0cmlidXRlQ291bnQobV9hcnJheVNpemUpOworICAgIHNpemVfdCBhY3R1YWxTaXplID0gbV9p
c1ByaXZhdGUgPyBzaXplb2YoRWxlbWVudERhdGEpIDogc2l6ZUZvclNoYXJlYWJsZUVsZW1lbnRE
YXRhV2l0aEF0dHJpYnV0ZUNvdW50KG1fYXJyYXlTaXplKTsKICAgICBNZW1vcnlDbGFzc0luZm8g
aW5mbyhtZW1vcnlPYmplY3RJbmZvLCB0aGlzLCBXZWJDb3JlTWVtb3J5VHlwZXM6OkRPTSwgYWN0
dWFsU2l6ZSk7CiAgICAgaW5mby5hZGRNZW1iZXIobV9pbmxpbmVTdHlsZSwgImlubGluZVN0eWxl
Iik7CiAgICAgaW5mby5hZGRNZW1iZXIobV9jbGFzc05hbWVzLCAiY2xhc3NOYW1lcyIpOwogICAg
IGluZm8uYWRkTWVtYmVyKG1faWRGb3JTdHlsZVJlc29sdXRpb24sICJpZEZvclN0eWxlUmVzb2x1
dGlvbiIpOwotICAgIGlmIChtX2lzTXV0YWJsZSkgeworICAgIGlmIChtX2lzUHJpdmF0ZSkgewog
ICAgICAgICBpbmZvLmFkZE1lbWJlcihwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpLCAicHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSIpOwogICAgICAgICBpbmZvLmFkZE1lbWJlcihtdXRh
YmxlQXR0cmlidXRlVmVjdG9yKCksICJtdXRhYmxlQXR0cmlidXRlVmVjdG9yIik7CiAgICAgfQpA
QCAtMzAwNyw3ICszMDA3LDcgQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVwb3J0TWVt
b3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykKICAgICAgICAgaW5m
by5hZGRNZW1iZXIoKmF0dHJpYnV0ZUl0ZW0oaSksICIqYXR0cmlidXRlSXRlbSIpOwogfQogCi1z
aXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNl
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
KSBjb25zdAorc2l6ZV90IEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXhTbG93Q2Fz
ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2Fz
ZSkgY29uc3QKIHsKICAgICAvLyBDb250aW51ZSB0byBjaGVja2luZyBjYXNlLWluc2Vuc2l0aXZl
bHkgYW5kL29yIGZ1bGwgbmFtZXNwYWNlZCBuYW1lcyBpZiBuZWNlc3Nhcnk6CiAgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5oCmluZGV4
IDUzZDNiZTYuLjI2YjI1ODMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtNDMsMjAgKzQzLDIwIEBA
IGNsYXNzIERPTVRva2VuTGlzdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50UmFyZURh
dGE7CiBjbGFzcyBFbGVtZW50U2hhZG93OwotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGE7CitjbGFzcyBTaGFyZWFibGVFbGVtZW50RGF0YTsKIGNsYXNzIEludFNpemU7CiBjbGFz
cyBMb2NhbGU7Ci1jbGFzcyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7CitjbGFzcyBQcml2
YXRlRWxlbWVudERhdGE7CiBjbGFzcyBQc2V1ZG9FbGVtZW50OwogY2xhc3MgUmVuZGVyUmVnaW9u
OwogY2xhc3MgU2hhZG93Um9vdDsKIGNsYXNzIFN0eWxlUHJvcGVydHlTZXQ7CiAKLWNsYXNzIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8RWxlbWVudEF0dHJpYnV0ZURh
dGE+IHsKK2NsYXNzIEVsZW1lbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8RWxlbWVudERhdGE+
IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFz
c1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gY3JlYXRlKCk7Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IGNyZWF0ZUltbXV0YWJsZShjb25zdCBWZWN0b3I8
QXR0cmlidXRlPiYpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBjcmVhdGVQ
cml2YXRlKCk7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudERhdGE+IGNyZWF0ZVNoYXJl
YWJsZVdpdGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CiAKICAgICAvLyBP
dmVycmlkZSBSZWZDb3VudGVkJ3MgZGVyZWYoKSB0byBlbnN1cmUgb3BlcmF0b3IgZGVsZXRlIGlz
IGNhbGxlZCBvbgogICAgIC8vIHRoZSBhcHByb3ByaWF0ZSBzdWJjbGFzcyB0eXBlLgpAQCAtOTEs
MTkgKzkxLDE5IEBAIHB1YmxpYzoKICAgICBib29sIGhhc0lEKCkgY29uc3QgeyByZXR1cm4gIW1f
aWRGb3JTdHlsZVJlc29sdXRpb24uaXNOdWxsKCk7IH0KICAgICBib29sIGhhc0NsYXNzKCkgY29u
c3QgeyByZXR1cm4gIW1fY2xhc3NOYW1lcy5pc051bGwoKTsgfQogCi0gICAgYm9vbCBpc0VxdWl2
YWxlbnQoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIG90aGVyKSBjb25zdDsKKyAgICBib29s
IGlzRXF1aXZhbGVudChjb25zdCBFbGVtZW50RGF0YSogb3RoZXIpIGNvbnN0OwogCiAgICAgdm9p
ZCByZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKikgY29uc3Q7CiAKLSAgICBib29s
IGlzTXV0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNNdXRhYmxlOyB9CisgICAgYm9vbCBpc1By
aXZhdGUoKSBjb25zdCB7IHJldHVybiBtX2lzUHJpdmF0ZTsgfQogICAgIGNvbnN0IEF0dHJpYnV0
ZSogaW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKSBjb25zdDsKIAogcHJvdGVjdGVkOgotICAgIEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEodW5zaWduZWQg
YXJyYXlTaXplKTsKLSAgICBFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBFbGVtZW50QXR0cmli
dXRlRGF0YSYsIGJvb2wgaXNNdXRhYmxlKTsKKyAgICBFbGVtZW50RGF0YSgpOworICAgIEVsZW1l
bnREYXRhKHVuc2lnbmVkIGFycmF5U2l6ZSk7CisgICAgRWxlbWVudERhdGEoY29uc3QgRWxlbWVu
dERhdGEmLCBib29sIGlzUHJpdmF0ZSk7CiAKLSAgICB1bnNpZ25lZCBtX2lzTXV0YWJsZSA6IDE7
CisgICAgdW5zaWduZWQgbV9pc1ByaXZhdGUgOiAxOwogICAgIHVuc2lnbmVkIG1fYXJyYXlTaXpl
IDogMjg7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
SXNEaXJ0eSA6IDE7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0
eSA6IDE7CkBAIC0xMTgsOCArMTE4LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgU3R5bGVkRWxlbWVudDsKLSAgICBm
cmllbmQgY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci0gICAgZnJpZW5kIGNs
YXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKKyAgICBmcmllbmQgY2xhc3MgU2hhcmVh
YmxlRWxlbWVudERhdGE7CisgICAgZnJpZW5kIGNsYXNzIFByaXZhdGVFbGVtZW50RGF0YTsKICNp
ZiBFTkFCTEUoU1ZHKQogICAgIGZyaWVuZCBjbGFzcyBTVkdFbGVtZW50OwogI2VuZGlmCkBAIC0x
MjgsMjcgKzEyOCwyNyBAQCBwcml2YXRlOgogICAgIGNvbnN0IEF0dHJpYnV0ZSogZ2V0QXR0cmli
dXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSkgY29uc3Q7CiAgICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleFNsb3dDYXNl
KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
KSBjb25zdDsKIAotICAgIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IG1ha2VNdXRh
YmxlQ29weSgpIGNvbnN0OwotICAgIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+IG1h
a2VJbW11dGFibGVDb3B5KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gbWFr
ZVByaXZhdGVDb3B5KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gbWFrZVNo
YXJlYWJsZUNvcHkoKSBjb25zdDsKIAogICAgIFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBtdXRhYmxl
QXR0cmlidXRlVmVjdG9yKCk7CiAgICAgY29uc3QgVmVjdG9yPEF0dHJpYnV0ZSwgND4mIG11dGFi
bGVBdHRyaWJ1dGVWZWN0b3IoKSBjb25zdDsKIH07CiAKLWNsYXNzIEltbXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRhIHsKK2NsYXNzIFNoYXJl
YWJsZUVsZW1lbnREYXRhIDogcHVibGljIEVsZW1lbnREYXRhIHsKIHB1YmxpYzoKLSAgICBJbW11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYpOwotICAg
IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YSYpOwotICAgIH5JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgpOworICAgIFNo
YXJlYWJsZUVsZW1lbnREYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CisgICAgU2hhcmVh
YmxlRWxlbWVudERhdGEoY29uc3QgUHJpdmF0ZUVsZW1lbnREYXRhJik7CisgICAgflNoYXJlYWJs
ZUVsZW1lbnREYXRhKCk7CiAKICAgICB2b2lkKiBtX2F0dHJpYnV0ZUFycmF5OwogfTsKIAotY2xh
c3MgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhIHsKK2NsYXNzIFByaXZhdGVFbGVtZW50RGF0YSA6IHB1YmxpYyBFbGVtZW50RGF0YSB7CiBw
dWJsaWM6Ci0gICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgTXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJik7
Ci0gICAgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50QXR0
cmlidXRlRGF0YSYpOworICAgIFByaXZhdGVFbGVtZW50RGF0YSgpOworICAgIFByaXZhdGVFbGVt
ZW50RGF0YShjb25zdCBTaGFyZWFibGVFbGVtZW50RGF0YSYpOworICAgIFByaXZhdGVFbGVtZW50
RGF0YShjb25zdCBQcml2YXRlRWxlbWVudERhdGEmKTsKIAogICAgIG11dGFibGUgUmVmUHRyPFN0
eWxlUHJvcGVydHlTZXQ+IG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGU7CiAgICAgVmVjdG9y
PEF0dHJpYnV0ZSwgND4gbV9hdHRyaWJ1dGVWZWN0b3I7CkBAIC0yODYsOCArMjg2LDggQEAgcHVi
bGljOgogICAgIGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkg
Y29uc3Q7CiAgICAgY29uc3QgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxp
ZmllZE5hbWUmKSBjb25zdDsKICAgICBBdHRyaWJ1dGUqIGdldEF0dHJpYnV0ZUl0ZW0oY29uc3Qg
UXVhbGlmaWVkTmFtZSYpOwotICAgIHNpemVfdCBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5nZXRB
dHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7IH0KLSAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUlu
ZGV4KGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVD
YXNlKSBjb25zdCB7IHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRl
eChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsgfQorICAgIHNpemVfdCBnZXRBdHRy
aWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QgeyByZXR1cm4g
ZWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KG5hbWUpOyB9CisgICAgc2l6ZV90
IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hv
dWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QgeyByZXR1cm4gZWxlbWVudERhdGEoKS0+Z2V0
QXR0cmlidXRlSXRlbUluZGV4KG5hbWUsIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2UpOyB9CiAK
ICAgICB2b2lkIHNjcm9sbEludG9WaWV3KGJvb2wgYWxpZ25Ub1RvcCA9IHRydWUpOwogICAgIHZv
aWQgc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChib29sIGNlbnRlcklmTmVlZGVkID0gdHJ1ZSk7CkBA
IC0zNzEsMTAgKzM3MSwxMCBAQCBwdWJsaWM6CiAgICAgLy8gT25seSBjYWxsZWQgYnkgdGhlIHBh
cnNlciBpbW1lZGlhdGVseSBhZnRlciBlbGVtZW50IGNvbnN0cnVjdGlvbi4KICAgICB2b2lkIHBh
cnNlclNldEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mLCBGcmFnbWVudFNjcmlw
dGluZ1Blcm1pc3Npb24pOwogCi0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJp
YnV0ZURhdGEoKSBjb25zdCB7IHJldHVybiBtX2F0dHJpYnV0ZURhdGEuZ2V0KCk7IH0KLSAgICBF
bGVtZW50QXR0cmlidXRlRGF0YSogbXV0YWJsZUF0dHJpYnV0ZURhdGEoKTsKLSAgICBjb25zdCBF
bGVtZW50QXR0cmlidXRlRGF0YSogdXBkYXRlZEF0dHJpYnV0ZURhdGEoKSBjb25zdDsKLSAgICBj
b25zdCBFbGVtZW50QXR0cmlidXRlRGF0YSogZW5zdXJlVXBkYXRlZEF0dHJpYnV0ZURhdGEoKSBj
b25zdDsKKyAgICBjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEoKSBjb25zdCB7IHJldHVy
biBtX2VsZW1lbnREYXRhLmdldCgpOyB9CisgICAgRWxlbWVudERhdGEqIGVuc3VyZVByaXZhdGVF
bGVtZW50RGF0YSgpOworICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YVdpdGhTeW5j
aHJvbml6ZWRBdHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgY29uc3QgRWxlbWVudERhdGEqIGVuc3Vy
ZUVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKSBjb25zdDsKIAogICAgIC8v
IENsb25lcyBhdHRyaWJ1dGVzIG9ubHkuCiAgICAgdm9pZCBjbG9uZUF0dHJpYnV0ZXNGcm9tRWxl
bWVudChjb25zdCBFbGVtZW50Jik7CkBAIC03MDUsNyArNzA1LDcgQEAgcHJpdmF0ZToKIAogICAg
IHZvaWQgdW5yZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKCk7CiAKLSAgICB2b2lkIGNyZWF0
ZU11dGFibGVBdHRyaWJ1dGVEYXRhKCk7CisgICAgdm9pZCBjcmVhdGVQcml2YXRlRWxlbWVudERh
dGEoKTsKIAogICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZURpc3RyaWJ1dGlvbldoZW5BdHRyaWJ1
dGVDaGFuZ2VkKEVsZW1lbnRTaGFkb3cqLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgQXRv
bWljU3RyaW5nJik7CiAKQEAgLTcxNyw3ICs3MTcsNyBAQCBwcml2YXRlOgogCiAgICAgdm9pZCBj
cmVhdGVSZW5kZXJlcklmTmVlZGVkKCk7CiAKLSAgICBSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURh
dGE+IG1fYXR0cmlidXRlRGF0YTsKKyAgICBSZWZQdHI8RWxlbWVudERhdGE+IG1fZWxlbWVudERh
dGE7CiB9OwogICAgIAogaW5saW5lIEVsZW1lbnQqIHRvRWxlbWVudChOb2RlKiBub2RlKQpAQCAt
Nzc3LDE4ICs3NzcsMTggQEAgaW5saW5lIEVsZW1lbnQqIEVsZW1lbnQ6Om5leHRFbGVtZW50U2li
bGluZygpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEVsZW1lbnQqPihuKTsKIH0KIAot
aW5saW5lIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBFbGVtZW50Ojp1cGRhdGVkQXR0cmli
dXRlRGF0YSgpIGNvbnN0CitpbmxpbmUgY29uc3QgRWxlbWVudERhdGEqIEVsZW1lbnQ6OmVsZW1l
bnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKSBjb25zdAogewogICAgIHVwZGF0ZUlu
dmFsaWRBdHRyaWJ1dGVzKCk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKTsKKyAgICByZXR1
cm4gZWxlbWVudERhdGEoKTsKIH0KIAotaW5saW5lIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRh
KiBFbGVtZW50OjplbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpIGNvbnN0CitpbmxpbmUgY29u
c3QgRWxlbWVudERhdGEqIEVsZW1lbnQ6OmVuc3VyZUVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXpl
ZEF0dHJpYnV0ZXMoKSBjb25zdAogewogICAgIHVwZGF0ZUludmFsaWRBdHRyaWJ1dGVzKCk7Ci0g
ICAgaWYgKGF0dHJpYnV0ZURhdGEoKSkKLSAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKTsK
LSAgICByZXR1cm4gY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcyktPm11dGFibGVBdHRyaWJ1dGVE
YXRhKCk7CisgICAgaWYgKGVsZW1lbnREYXRhKCkpCisgICAgICAgIHJldHVybiBlbGVtZW50RGF0
YSgpOworICAgIHJldHVybiBjb25zdF9jYXN0PEVsZW1lbnQqPih0aGlzKS0+ZW5zdXJlUHJpdmF0
ZUVsZW1lbnREYXRhKCk7CiB9CiAKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnVwZGF0ZU5hbWUoY29u
c3QgQXRvbWljU3RyaW5nJiBvbGROYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIG5ld05hbWUpCkBA
IC04MzEsMTMgKzgzMSwxMyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVJZChUcmVlU2Nv
cGUqIHNjb3BlLCBjb25zdCBBdG9taWNTdHJpbmcmIG9sZElkLCBjb25zdAogaW5saW5lIGJvb2wg
RWxlbWVudDo6ZmFzdEhhc0F0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25z
dAogewogICAgIEFTU0VSVChmYXN0QXR0cmlidXRlTG9va3VwQWxsb3dlZChuYW1lKSk7Ci0gICAg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOworICAgIHJl
dHVybiBlbGVtZW50RGF0YSgpICYmIGdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CiB9CiAKIGlubGlu
ZSBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6OmZhc3RHZXRBdHRyaWJ1dGUoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBBU1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1
cEFsbG93ZWQobmFtZSkpOwotICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICBpZiAoZWxl
bWVudERhdGEoKSkgewogICAgICAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBn
ZXRBdHRyaWJ1dGVJdGVtKG5hbWUpKQogICAgICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZS0+dmFs
dWUoKTsKICAgICB9CkBAIC04NDYsMTMgKzg0NiwxMyBAQCBpbmxpbmUgY29uc3QgQXRvbWljU3Ry
aW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUp
CiAKIGlubGluZSBib29sIEVsZW1lbnQ6Omhhc0F0dHJpYnV0ZXNXaXRob3V0VXBkYXRlKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpICYmICFhdHRyaWJ1dGVEYXRhKCktPmlz
RW1wdHkoKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKSAmJiAhZWxlbWVudERhdGEoKS0+aXNF
bXB0eSgpOwogfQogCiBpbmxpbmUgY29uc3QgQXRvbWljU3RyaW5nJiBFbGVtZW50OjppZEZvclN0
eWxlUmVzb2x1dGlvbigpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGhhc0lEKCkpOwotICAgIHJldHVy
biBhdHRyaWJ1dGVEYXRhKCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7CisgICAgcmV0dXJuIGVs
ZW1lbnREYXRhKCktPmlkRm9yU3R5bGVSZXNvbHV0aW9uKCk7CiB9CiAKIGlubGluZSBib29sIEVs
ZW1lbnQ6OmlzSWRBdHRyaWJ1dGVOYW1lKGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0ZU5h
bWUpIGNvbnN0CkBAIC04ODIsNjMgKzg4Miw2MyBAQCBpbmxpbmUgdm9pZCBFbGVtZW50OjpzZXRJ
ZEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogaW5saW5lIGNvbnN0IFNwYWNl
U3BsaXRTdHJpbmcmIEVsZW1lbnQ6OmNsYXNzTmFtZXMoKSBjb25zdAogewogICAgIEFTU0VSVCho
YXNDbGFzcygpKTsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICByZXR1cm4gYXR0
cmlidXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOwor
ICAgIHJldHVybiBlbGVtZW50RGF0YSgpLT5jbGFzc05hbWVzKCk7CiB9CiAKIGlubGluZSBzaXpl
X3QgRWxlbWVudDo6YXR0cmlidXRlQ291bnQoKSBjb25zdAogewotICAgIEFTU0VSVChhdHRyaWJ1
dGVEYXRhKCkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmxlbmd0aCgpOworICAgIEFT
U0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+bGVuZ3RoKCk7
CiB9CiAKIGlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnQ6OmF0dHJpYnV0ZUl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCk7CisgICAgQVNTRVJU
KGVsZW1lbnREYXRhKCkpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgpLT5hdHRyaWJ1dGVJdGVt
KGluZGV4KTsKIH0KIAogaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudDo6Z2V0QXR0cmli
dXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewotICAgIEFTU0VSVChh
dHRyaWJ1dGVEYXRhKCkpOwotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJpYnV0
ZUl0ZW0obmFtZSk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRhKCkpOworICAgIHJldHVybiBlbGVt
ZW50RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogfQogCiBpbmxpbmUgQXR0cmlidXRl
KiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpCiB7
Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAgcmV0dXJuIG11dGFibGVBdHRyaWJ1
dGVEYXRhKCktPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRh
KCkpOworICAgIHJldHVybiBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRl
SXRlbShuYW1lKTsKIH0KIAogaW5saW5lIHZvaWQgRWxlbWVudDo6dXBkYXRlSW52YWxpZEF0dHJp
YnV0ZXMoKSBjb25zdAogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxl
bWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKS0+
bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpCisgICAgaWYgKGVsZW1lbnREYXRhKCktPm1fc3R5bGVB
dHRyaWJ1dGVJc0RpcnR5KQogICAgICAgICB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCiAjaWYg
RU5BQkxFKFNWRykKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmli
dXRlc0FyZURpcnR5KQorICAgIGlmIChlbGVtZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmli
dXRlc0FyZURpcnR5KQogICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlRTmFt
ZSgpKTsKICNlbmRpZgogfQogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNJRCgpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiBhdHRyaWJ1dGVEYXRhKCktPmhhc0lEKCk7
CisgICAgcmV0dXJuIGVsZW1lbnREYXRhKCkgJiYgZWxlbWVudERhdGEoKS0+aGFzSUQoKTsKIH0K
IAogaW5saW5lIGJvb2wgRWxlbWVudDo6aGFzQ2xhc3MoKSBjb25zdAogewotICAgIHJldHVybiBh
dHRyaWJ1dGVEYXRhKCkgJiYgYXR0cmlidXRlRGF0YSgpLT5oYXNDbGFzcygpOworICAgIHJldHVy
biBlbGVtZW50RGF0YSgpICYmIGVsZW1lbnREYXRhKCktPmhhc0NsYXNzKCk7CiB9CiAKLWlubGlu
ZSBFbGVtZW50QXR0cmlidXRlRGF0YSogRWxlbWVudDo6bXV0YWJsZUF0dHJpYnV0ZURhdGEoKQor
aW5saW5lIEVsZW1lbnREYXRhKiBFbGVtZW50OjplbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKQog
ewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpIHx8ICFhdHRyaWJ1dGVEYXRhKCktPmlzTXV0YWJs
ZSgpKQotICAgICAgICBjcmVhdGVNdXRhYmxlQXR0cmlidXRlRGF0YSgpOwotICAgIHJldHVybiBt
X2F0dHJpYnV0ZURhdGEuZ2V0KCk7CisgICAgaWYgKCFlbGVtZW50RGF0YSgpIHx8ICFlbGVtZW50
RGF0YSgpLT5pc1ByaXZhdGUoKSkKKyAgICAgICAgY3JlYXRlUHJpdmF0ZUVsZW1lbnREYXRhKCk7
CisgICAgcmV0dXJuIG1fZWxlbWVudERhdGEuZ2V0KCk7CiB9CiAKIC8vIFB1dCBoZXJlIHRvIG1h
a2UgdGhlbSBpbmxpbmUuCkBAIC05NzUsMzkgKzk3NSwzOSBAQCBpbmxpbmUgYm9vbCBpc1NoYWRv
d0hvc3QoY29uc3QgTm9kZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pc0Vs
ZW1lbnROb2RlKCkgJiYgdG9FbGVtZW50KG5vZGUpLT5zaGFkb3coKTsKIH0KLWlubGluZSBWZWN0
b3I8QXR0cmlidXRlLCA0PiYgRWxlbWVudEF0dHJpYnV0ZURhdGE6Om11dGFibGVBdHRyaWJ1dGVW
ZWN0b3IoKQoraW5saW5lIFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBFbGVtZW50RGF0YTo6bXV0YWJs
ZUF0dHJpYnV0ZVZlY3RvcigpCiB7Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0
cmlidXRlVmVjdG9yOworICAgIEFTU0VSVChtX2lzUHJpdmF0ZSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PFByaXZhdGVFbGVtZW50RGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0ZVZlY3RvcjsKIH0K
IAotaW5saW5lIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBFbGVtZW50QXR0cmlidXRlRGF0
YTo6bXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpIGNvbnN0CitpbmxpbmUgY29uc3QgVmVjdG9yPEF0
dHJpYnV0ZSwgND4mIEVsZW1lbnREYXRhOjptdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkgY29uc3QK
IHsKLSAgICBBU1NFUlQobV9pc011dGFibGUpOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z
dCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7
CisgICAgQVNTRVJUKG1faXNQcml2YXRlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3Qg
UHJpdmF0ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yOwogfQogCi1pbmxp
bmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6aW1tdXRhYmxlQXR0cmli
dXRlQXJyYXkoKSBjb25zdAoraW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudERhdGE6Omlt
bXV0YWJsZUF0dHJpYnV0ZUFycmF5KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoIW1faXNNdXRhYmxl
KTsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBBdHRyaWJ1dGUqPigmc3RhdGlj
X2Nhc3Q8Y29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9hdHRy
aWJ1dGVBcnJheSk7CisgICAgQVNTRVJUKCFtX2lzUHJpdmF0ZSk7CisgICAgcmV0dXJuIHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgQXR0cmlidXRlKj4oJnN0YXRpY19jYXN0PGNvbnN0IFNoYXJlYWJs
ZUVsZW1lbnREYXRhKj4odGhpcyktPm1fYXR0cmlidXRlQXJyYXkpOwogfQogCi1pbmxpbmUgc2l6
ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpsZW5ndGgoKSBjb25zdAoraW5saW5lIHNpemVfdCBF
bGVtZW50RGF0YTo6bGVuZ3RoKCkgY29uc3QKIHsKLSAgICBpZiAoaXNNdXRhYmxlKCkpCisgICAg
aWYgKGlzUHJpdmF0ZSgpKQogICAgICAgICByZXR1cm4gbXV0YWJsZUF0dHJpYnV0ZVZlY3Rvcigp
LnNpemUoKTsKICAgICByZXR1cm4gbV9hcnJheVNpemU7CiB9CiAKLWlubGluZSBjb25zdCBTdHls
ZVByb3BlcnR5U2V0KiBFbGVtZW50QXR0cmlidXRlRGF0YTo6cHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoKSBjb25zdAoraW5saW5lIGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIEVsZW1lbnREYXRh
OjpwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzTXV0
YWJsZSkKKyAgICBpZiAoIW1faXNQcml2YXRlKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1
cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcykt
Pm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUuZ2V0KCk7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGNvbnN0IFByaXZhdGVFbGVtZW50RGF0YSo+KHRoaXMpLT5tX3ByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlLmdldCgpOwogfQogCi1pbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRl
RGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hv
dWxkSWdub3JlQXR0cmlidXRlQ2FzZSkKK2lubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnREYXRhOjpn
ZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25v
cmVBdHRyaWJ1dGVDYXNlKQogewogICAgIHNpemVfdCBpbmRleCA9IGdldEF0dHJpYnV0ZUl0ZW1J
bmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsKICAgICBpZiAoaW5kZXggIT0g
bm90Rm91bmQpCkBAIC0xMDE1LDcgKzEwMTUsNyBAQCBpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbQog
ICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmli
dXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wg
c2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKK2lubGluZSBjb25zdCBBdHRyaWJ1dGUq
IEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwg
Ym9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKSBjb25zdAogewogICAgIHNpemVfdCBpbmRl
eCA9IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNl
KTsKICAgICBpZiAoaW5kZXggIT0gbm90Rm91bmQpCkBAIC0xMDIzLDcgKzEwMjMsNyBAQCBpbmxp
bmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRl
bShjb25zdCBBdG9taWNTdHJpbgogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgc2l6ZV90IEVs
ZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSkgY29uc3QKK2lubGluZSBzaXplX3QgRWxlbWVudERhdGE6OmdldEF0dHJpYnV0
ZUl0ZW1JbmRleChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKSBjb25zdAogewogICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIGlmIChhdHRyaWJ1
dGVJdGVtKGkpLT5uYW1lKCkubWF0Y2hlcyhuYW1lKSkKQEAgLTEwMzQsNyArMTAzNCw3IEBAIGlu
bGluZSBzaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChj
b25zdCBRdWFsaWZpZWROYW1lJiBuCiAKIC8vIFdlIHVzZSBhIGJvb2xlYW4gcGFyYW1ldGVyIGlu
c3RlYWQgb2YgY2FsbGluZyBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlIHNvIHRoYXQgdGhlIGNh
bGxlcgogLy8gY2FuIHR1bmUgdGhlIGJlaGF2aW9yIChoYXNBdHRyaWJ1dGUgaXMgY2FzZSBzZW5z
aXRpdmUgd2hlcmVhcyBnZXRBdHRyaWJ1dGUgaXMgbm90KS4KLWlubGluZSBzaXplX3QgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKK2lubGluZSBzaXpl
X3QgRWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29uc3QKIHsKICAgICB1bnNp
Z25lZCBsZW4gPSBsZW5ndGgoKTsKICAgICBib29sIGRvU2xvd0NoZWNrID0gc2hvdWxkSWdub3Jl
QXR0cmlidXRlQ2FzZTsKQEAgLTEwNTQsNyArMTA1NCw3IEBAIGlubGluZSBzaXplX3QgRWxlbWVu
dEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25zdCBBdG9taWNTdHJpbmcm
IG5hCiAgICAgcmV0dXJuIG5vdEZvdW5kOwogfQogCi1pbmxpbmUgY29uc3QgQXR0cmlidXRlKiBF
bGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lKSBjb25zdAoraW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmdldEF0
dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewogICAgICAgICBpZiAoYXR0cmli
dXRlSXRlbShpKS0+bmFtZSgpLm1hdGNoZXMobmFtZSkpCkBAIC0xMDYzLDcgKzEwNjMsNyBAQCBp
bmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRl
SXRlbShjb25zdCBRdWFsaWZpZWROYQogICAgIHJldHVybiAwOwogfQogCi1pbmxpbmUgQXR0cmli
dXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZp
ZWROYW1lJiBuYW1lKQoraW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmdldEF0dHJpYnV0
ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoKCk7ICsraSkgewogICAgICAgICBpZiAoYXR0cmlidXRlSXRlbShpKS0+
bmFtZSgpLm1hdGNoZXMobmFtZSkpCkBAIC0xMDcyLDE1ICsxMDcyLDE1IEBAIGlubGluZSBBdHRy
aWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hCiAgICAgcmV0dXJuIDA7CiB9CiAKLWlubGluZSBjb25zdCBBdHRyaWJ1dGUq
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25z
dAoraW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0ZW0odW5z
aWduZWQgaW5kZXgpIGNvbnN0CiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCBsZW5ndGgoKSk7Ci0gICAgaWYgKG1faXNNdXRhYmxlKQorICAgIGlmIChtX2lz
UHJpdmF0ZSkKICAgICAgICAgcmV0dXJuICZtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuYXQoaW5k
ZXgpOwogICAgIHJldHVybiAmaW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKVtpbmRleF07CiB9CiAK
LWlubGluZSBBdHRyaWJ1dGUqIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVu
c2lnbmVkIGluZGV4KQoraW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0
ZW0odW5zaWduZWQgaW5kZXgpCiB7CiAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCBsZW5ndGgoKSk7CiAgICAgcmV0dXJuICZtdXRhYmxlQXR0cmlidXRlVmVjdG9y
KCkuYXQoaW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwCmluZGV4IDExZmQ5OGIuLjgyMDE3YTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vTm9kZS5jcHAKQEAgLTIwNSwxMSArMjA1LDExIEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3Rp
Y3MoKQogICAgICAgICAgICAgICAgIGlmICghcmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAg
ICAgICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUrKzsKIAotICAgICAgICAgICAgICAgIGlm
IChFbGVtZW50QXR0cmlidXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0
ZURhdGEoKSkgewotICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURh
dGEtPmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGlmIChFbGVtZW50RGF0YSogZWxlbWVudERh
dGEgPSBlbGVtZW50LT5lbGVtZW50RGF0YSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dHJp
YnV0ZXMgKz0gZWxlbWVudERhdGEtPmxlbmd0aCgpOwogICAgICAgICAgICAgICAgICAgICArK2Vs
ZW1lbnRzV2l0aEF0dHJpYnV0ZVN0b3JhZ2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1dGVEYXRhLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBBdHRyaWJ1dGUqIGF0dHIgPSBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1
dGVJdGVtKGkpOworICAgICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
ZWxlbWVudERhdGEtPmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0
dHJpYnV0ZSogYXR0ciA9IGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKGF0dHItPmF0dHIoKSkKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICArK2F0dHJpYnV0ZXNXaXRoQXR0cjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjk2
LDcgKzI5Niw3IEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgIHByaW50ZigiQXR0
cmlidXRlczpcbiIpOwogICAgIHByaW50ZigiICBOdW1iZXIgb2YgQXR0cmlidXRlcyAobm9uLU5v
ZGUgYW5kIE5vZGUpOiAlenUgWyV6dV1cbiIsIGF0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUp
KTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEF0dHJpYnV0ZXMgd2l0aCBhbiBBdHRyOiAlenVc
biIsIGF0dHJpYnV0ZXNXaXRoQXR0cik7Ci0gICAgcHJpbnRmKCIgIE51bWJlciBvZiBFbGVtZW50
cyB3aXRoIGF0dHJpYnV0ZSBzdG9yYWdlOiAlenUgWyV6dV1cbiIsIGVsZW1lbnRzV2l0aEF0dHJp
YnV0ZVN0b3JhZ2UsIHNpemVvZihFbGVtZW50QXR0cmlidXRlRGF0YSkpOworICAgIHByaW50Zigi
ICBOdW1iZXIgb2YgRWxlbWVudHMgd2l0aCBhdHRyaWJ1dGUgc3RvcmFnZTogJXp1IFslenVdXG4i
LCBlbGVtZW50c1dpdGhBdHRyaWJ1dGVTdG9yYWdlLCBzaXplb2YoRWxlbWVudERhdGEpKTsKICAg
ICBwcmludGYoIiAgTnVtYmVyIG9mIEVsZW1lbnRzIHdpdGggUmFyZURhdGE6ICV6dVxuIiwgZWxl
bWVudHNXaXRoUmFyZURhdGEpOwogICAgIHByaW50ZigiICBOdW1iZXIgb2YgRWxlbWVudHMgd2l0
aCBOYW1lZE5vZGVNYXA6ICV6dSBbJXp1XVxuIiwgZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwLCBz
aXplb2YoTmFtZWROb2RlTWFwKSk7CiAjZW5kaWYKQEAgLTE3NTMsNyArMTc1Myw3IEBAIHVuc2ln
bmVkIHNob3J0IE5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKE5vZGUqIG90aGVyTm9kZSkK
ICAgICBpZiAoYXR0cjEgJiYgYXR0cjIgJiYgc3RhcnQxID09IHN0YXJ0MiAmJiBzdGFydDEpIHsK
ICAgICAgICAgLy8gV2UgYXJlIGNvbXBhcmluZyB0d28gYXR0cmlidXRlcyBvbiB0aGUgc2FtZSBu
b2RlLiBDcmF3bCBvdXIgYXR0cmlidXRlIG1hcCBhbmQgc2VlIHdoaWNoIG9uZSB3ZSBoaXQgZmly
c3QuCiAgICAgICAgIEVsZW1lbnQqIG93bmVyMSA9IGF0dHIxLT5vd25lckVsZW1lbnQoKTsKLSAg
ICAgICAgb3duZXIxLT51cGRhdGVkQXR0cmlidXRlRGF0YSgpOyAvLyBGb3JjZSB1cGRhdGUgaW52
YWxpZCBhdHRyaWJ1dGVzLgorICAgICAgICBvd25lcjEtPmVsZW1lbnREYXRhV2l0aFN5bmNocm9u
aXplZEF0dHJpYnV0ZXMoKTsgLy8gRm9yY2UgdXBkYXRlIGludmFsaWQgYXR0cmlidXRlcy4KICAg
ICAgICAgdW5zaWduZWQgbGVuZ3RoID0gb3duZXIxLT5hdHRyaWJ1dGVDb3VudCgpOwogICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIC8v
IElmIG5laXRoZXIgb2YgdGhlIHR3byBkZXRlcm1pbmluZyBub2RlcyBpcyBhIGNoaWxkIG5vZGUg
YW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1lIGZvciBib3RoIGRldGVybWluaW5nIG5vZGVzLCB0aGVu
IGFuIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCmluZGV4IDI3YzMxNGEuLmYwY2Fm
MzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAKQEAgLTEyOCw5ICsxMjgsOSBA
QCBzdGF0aWMgUHJlc2VudGF0aW9uQXR0cmlidXRlQ2FjaGVDbGVhbmVyJiBwcmVzZW50YXRpb25B
dHRyaWJ1dGVDYWNoZUNsZWFuZXIoKQogCiB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxl
QXR0cmlidXRlKCkgY29uc3QKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICBB
U1NFUlQoYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSk7Ci0gICAgYXR0
cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA9IGZhbHNlOworICAgIEFTU0VS
VChlbGVtZW50RGF0YSgpKTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJp
YnV0ZUlzRGlydHkpOworICAgIGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5
ID0gZmFsc2U7CiAgICAgaWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0g
dGhpcy0+aW5saW5lU3R5bGUoKSkKICAgICAgICAgY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4o
dGhpcyktPnNldFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHls
ZS0+YXNUZXh0KCkpOwogfQpAQCAtMTQ4LDcgKzE0OCw3IEBAIENTU1N0eWxlRGVjbGFyYXRpb24q
IFN0eWxlZEVsZW1lbnQ6OnN0eWxlKCkKIAogU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVu
dDo6ZW5zdXJlTXV0YWJsZUlubGluZVN0eWxlKCkKIHsKLSAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0
eVNldD4mIGlubGluZVN0eWxlID0gbXV0YWJsZUF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHls
ZTsKKyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4mIGlubGluZVN0eWxlID0gZW5zdXJlUHJp
dmF0ZUVsZW1lbnREYXRhKCktPm1faW5saW5lU3R5bGU7CiAgICAgaWYgKCFpbmxpbmVTdHlsZSkK
ICAgICAgICAgaW5saW5lU3R5bGUgPSBTdHlsZVByb3BlcnR5U2V0OjpjcmVhdGUoc3RyaWN0VG9D
U1NQYXJzZXJNb2RlKGlzSFRNTEVsZW1lbnQoKSAmJiAhZG9jdW1lbnQoKS0+aW5RdWlya3NNb2Rl
KCkpKTsKICAgICBlbHNlIGlmICghaW5saW5lU3R5bGUtPmlzTXV0YWJsZSgpKQpAQCAtMTYxLDcg
KzE2MSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZChjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpCiAgICAgaWYgKG5hbWUgPT0gc3R5bGVB
dHRyKQogICAgICAgICBzdHlsZUF0dHJpYnV0ZUNoYW5nZWQobmV3VmFsdWUpOwogICAgIGVsc2Ug
aWYgKGlzUHJlc2VudGF0aW9uQXR0cmlidXRlKG5hbWUpKSB7Ci0gICAgICAgIGF0dHJpYnV0ZURh
dGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkgPSB0cnVlOworICAgICAg
ICBlbGVtZW50RGF0YSgpLT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9IHRy
dWU7CiAgICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOwogICAg
IH0KIApAQCAtMTcyLDE3ICsxNzIsMTcgQEAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
KiBTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZUNTU09NV3JhcHBlcigpCiB7CiAgICAgaWYgKCFp
bmxpbmVTdHlsZSgpIHx8ICFpbmxpbmVTdHlsZSgpLT5oYXNDU1NPTVdyYXBwZXIoKSkKICAgICAg
ICAgcmV0dXJuIDA7Ci0gICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdy
YXBwZXIgPSBtdXRhYmxlQXR0cmlidXRlRGF0YSgpLT5tX2lubGluZVN0eWxlLT5jc3NTdHlsZURl
Y2xhcmF0aW9uKCk7CisgICAgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdy
YXBwZXIgPSBlbnN1cmVQcml2YXRlRWxlbWVudERhdGEoKS0+bV9pbmxpbmVTdHlsZS0+Y3NzU3R5
bGVEZWNsYXJhdGlvbigpOwogICAgIEFTU0VSVChjc3NvbVdyYXBwZXIgJiYgY3Nzb21XcmFwcGVy
LT5wYXJlbnRFbGVtZW50KCkgPT0gdGhpcyk7CiAgICAgcmV0dXJuIGNzc29tV3JhcHBlcjsKIH0K
IAogaW5saW5lIHZvaWQgU3R5bGVkRWxlbWVudDo6c2V0SW5saW5lU3R5bGVGcm9tU3RyaW5nKGNv
bnN0IEF0b21pY1N0cmluZyYgbmV3U3R5bGVTdHJpbmcpCiB7Ci0gICAgUmVmUHRyPFN0eWxlUHJv
cGVydHlTZXQ+JiBpbmxpbmVTdHlsZSA9IGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZTsK
KyAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4mIGlubGluZVN0eWxlID0gZWxlbWVudERhdGEo
KS0+bV9pbmxpbmVTdHlsZTsKIAogICAgIC8vIEF2b2lkIHJlZHVuZGFudCB3b3JrIGlmIHdlJ3Jl
IHVzaW5nIHNoYXJlZCBhdHRyaWJ1dGUgZGF0YSB3aXRoIGFscmVhZHkgcGFyc2VkIGlubGluZSBz
dHlsZS4KLSAgICBpZiAoaW5saW5lU3R5bGUgJiYgIWF0dHJpYnV0ZURhdGEoKS0+aXNNdXRhYmxl
KCkpCisgICAgaWYgKGlubGluZVN0eWxlICYmICFlbGVtZW50RGF0YSgpLT5pc1ByaXZhdGUoKSkK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgcmVjb25zdHJ1Y3QgdGhlIHByb3BlcnR5IHNl
dCBpbnN0ZWFkIG9mIG11dGF0aW5nIGlmIHRoZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCkBAIC0y
MDUsMTEgKzIwNSwxMSBAQCB2b2lkIFN0eWxlZEVsZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdl
ZChjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0eWxlU3RyaW5nKQogICAgIGlmIChuZXdTdHlsZVN0
cmluZy5pc051bGwoKSkgewogICAgICAgICBpZiAoUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uKiBjc3NvbVdyYXBwZXIgPSBpbmxpbmVTdHlsZUNTU09NV3JhcHBlcigpKQogICAgICAgICAg
ICAgY3Nzb21XcmFwcGVyLT5jbGVhclBhcmVudEVsZW1lbnQoKTsKLSAgICAgICAgbXV0YWJsZUF0
dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZS5jbGVhcigpOworICAgICAgICBlbnN1cmVQcml2
YXRlRWxlbWVudERhdGEoKS0+bV9pbmxpbmVTdHlsZS5jbGVhcigpOwogICAgIH0gZWxzZSBpZiAo
ZG9jdW1lbnQoKS0+Y29udGVudFNlY3VyaXR5UG9saWN5KCktPmFsbG93SW5saW5lU3R5bGUoZG9j
dW1lbnQoKS0+dXJsKCksIHN0YXJ0TGluZU51bWJlcikpCiAgICAgICAgIHNldElubGluZVN0eWxl
RnJvbVN0cmluZyhuZXdTdHlsZVN0cmluZyk7CiAKLSAgICBhdHRyaWJ1dGVEYXRhKCktPm1fc3R5
bGVBdHRyaWJ1dGVJc0RpcnR5ID0gZmFsc2U7CisgICAgZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0
dHJpYnV0ZUlzRGlydHkgPSBmYWxzZTsKIAogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5l
U3R5bGVDaGFuZ2UpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6ZGlkSW52YWxpZGF0
ZVN0eWxlQXR0cihkb2N1bWVudCgpLCB0aGlzKTsKQEAgLTIxOCw4ICsyMTgsOCBAQCB2b2lkIFN0
eWxlZEVsZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJpbmcmIG5l
d1N0eWxlU3RyaW5nKQogdm9pZCBTdHlsZWRFbGVtZW50OjppbmxpbmVTdHlsZUNoYW5nZWQoKQog
ewogICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOwotICAgIEFTU0VS
VChhdHRyaWJ1dGVEYXRhKCkpOwotICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0
ZUlzRGlydHkgPSB0cnVlOworICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICBlbGVtZW50
RGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA9IHRydWU7CiAgICAgSW5zcGVjdG9ySW5z
dHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKGRvY3VtZW50KCksIHRoaXMpOwog
fQogICAgIApAQCAtMjY1LDcgKzI2NSw3IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6cmVtb3ZlQWxs
SW5saW5lU3R5bGVQcm9wZXJ0aWVzKCkKIAogdm9pZCBTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNv
dXJjZUF0dHJpYnV0ZVVSTHMoTGlzdEhhc2hTZXQ8S1VSTD4mIHVybHMpIGNvbnN0CiB7Ci0gICAg
aWYgKGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gYXR0cmlidXRlRGF0YSgp
ID8gYXR0cmlidXRlRGF0YSgpLT5pbmxpbmVTdHlsZSgpIDogMCkKKyAgICBpZiAoY29uc3QgU3R5
bGVQcm9wZXJ0eVNldCogaW5saW5lU3R5bGUgPSBlbGVtZW50RGF0YSgpID8gZWxlbWVudERhdGEo
KS0+aW5saW5lU3R5bGUoKSA6IDApCiAgICAgICAgIGlubGluZVN0eWxlLT5hZGRTdWJyZXNvdXJj
ZVN0eWxlVVJMcyh1cmxzLCBkb2N1bWVudCgpLT5lbGVtZW50U2hlZXQoKS0+Y29udGVudHMoKSk7
CiB9CiAKQEAgLTM0MCwxMSArMzQwLDExIEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6cmVidWlsZFBy
ZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIGRvZXNuJ3Qgc3RvcmUgcHJlc2VudGF0aW9uIGF0
dHJpYnV0ZSBzdHlsZSwgc28gbWFrZSBzdXJlIHdlIGhhdmUgYSBNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEuCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSBtdXRh
YmxlQXR0cmlidXRlRGF0YSgpOworICAgIC8vIFNoYXJlYWJsZUVsZW1lbnREYXRhIGRvZXNuJ3Qg
c3RvcmUgcHJlc2VudGF0aW9uIGF0dHJpYnV0ZSBzdHlsZSwgc28gbWFrZSBzdXJlIHdlIGhhdmUg
YSBQcml2YXRlRWxlbWVudERhdGEuCisgICAgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhID0gZW5z
dXJlUHJpdmF0ZUVsZW1lbnREYXRhKCk7CiAKLSAgICBhdHRyaWJ1dGVEYXRhLT5tX3ByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9IGZhbHNlOwotICAgIGF0dHJpYnV0ZURhdGEtPnNl
dFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKHN0eWxlLT5pc0VtcHR5KCkgPyAwIDogc3R5bGUp
OworICAgIGVsZW1lbnREYXRhLT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9
IGZhbHNlOworICAgIGVsZW1lbnREYXRhLT5zZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShz
dHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxlKTsKIAogICAgIGlmICghY2FjaGVIYXNoIHx8IGNh
Y2hlSXRlcmF0b3ItPnZhbHVlKQogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVs
ZW1lbnQuaAppbmRleCBlNDFhYWVmLi5iZjA2MjM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vU3R5bGVkRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVt
ZW50LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgY29uc3QgU3R5bGVQ
cm9wZXJ0eVNldCogYWRkaXRpb25hbFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkgeyByZXR1
cm4gMDsgfQogICAgIHZvaWQgaW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCk7CiAKLSAgICBjb25z
dCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0
ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZS5nZXQoKSA6IDA7IH0KKyAg
ICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGVs
ZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5tX2lubGluZVN0eWxlLmdldCgpIDogMDsgfQog
ICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZU11dGFibGVJbmxpbmVTdHlsZSgpOwogICAgIAog
ICAgIC8vIFVubGlrZSBTdHlsZVByb3BlcnR5U2V0IHNldHRlcnMsIHRoZXNlIGltcGxlbWVudCBp
bnZhbGlkYXRpb24uCkBAIC04NiwxNyArODYsMTcgQEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQg
U3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKCkKIHsKLSAgICBBU1NFUlQo
YXR0cmlidXRlRGF0YSgpKTsKLSAgICBhdHRyaWJ1dGVEYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJ
c0RpcnR5ID0gdHJ1ZTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CisgICAgZWxlbWVudERh
dGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgPSB0cnVlOwogfQogCiBpbmxpbmUgY29uc3Qg
U3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVudDo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5
bGUoKQogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEo
KSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKS0+bV9wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkpCisgICAgaWYgKGVsZW1lbnREYXRhKCktPm1fcHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5KQogICAgICAgICByZWJ1aWxkUHJlc2VudGF0
aW9uQXR0cmlidXRlU3R5bGUoKTsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgpLT5wcmVzZW50
YXRpb25BdHRyaWJ1dGVTdHlsZSgpOwogfQogCiB9IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlzdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0Ns
YXNzTGlzdC5jcHAKaW5kZXggNzViYzM0My4uM2I1NzU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9DbGFzc0xpc3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NM
aXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBDbGFzc0xp
c3Q6OmNsYXNzTmFtZXMoKSBjb25zdAogICAgICAgICAgICAgbV9jbGFzc05hbWVzRm9yUXVpcmtz
TW9kZSA9IGFkb3B0UHRyKG5ldyBTcGFjZVNwbGl0U3RyaW5nKHZhbHVlKCksIGZhbHNlKSk7CiAg
ICAgICAgIHJldHVybiAqbV9jbGFzc05hbWVzRm9yUXVpcmtzTW9kZS5nZXQoKTsKICAgICB9Ci0g
ICAgcmV0dXJuIG1fZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAg
cmV0dXJuIG1fZWxlbWVudC0+ZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1lcygpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJ
bnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNw
cAppbmRleCA3MDE1NzZiLi4xYTk3YmY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0
RWxlbWVudC5jcHAKQEAgLTUxNSw3ICs1MTUsNyBAQCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVw
ZGF0ZVR5cGUoKQogICAgICAgICByZWdpc3RlckZvclN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVk
KCk7CiAKICAgICBpZiAoZGlkUmVzcGVjdEhlaWdodEFuZFdpZHRoICE9IG1faW5wdXRUeXBlLT5z
aG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRyaWJ1dGVzKCkpIHsKLSAgICAgICAgQVNTRVJU
KGF0dHJpYnV0ZURhdGEoKSk7CisgICAgICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKICAgICAg
ICAgaWYgKEF0dHJpYnV0ZSogaGVpZ2h0ID0gZ2V0QXR0cmlidXRlSXRlbShoZWlnaHRBdHRyKSkK
ICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQoaGVpZ2h0QXR0ciwgaGVpZ2h0LT52YWx1ZSgp
KTsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSogd2lkdGggPSBnZXRBdHRyaWJ1dGVJdGVtKHdpZHRo
QXR0cikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3Ry
dWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0
aW9uU2l0ZS5jcHAKaW5kZXggYmUxYzUzNS4uOWMwNGRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVjdGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1Y3Rpb25TaXRlLmNwcApAQCAtMjExLDcgKzIx
MSw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNpdGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tl
bkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbioKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0b2tlbi0+YXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0
dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0b2tlbi0+YXR0cmlidXRlcygpLmF0KGkpOwotICAg
ICAgICBpZiAoIWVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSB8fCAhZWxlbWVudC0+Z2V0QXR0cmli
dXRlSXRlbSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCkpKQorICAgICAgICBpZiAoIWVsZW1lbnQtPmVs
ZW1lbnREYXRhKCkgfHwgIWVsZW1lbnQtPmdldEF0dHJpYnV0ZUl0ZW0odG9rZW5BdHRyaWJ1dGUu
bmFtZSgpKSkKICAgICAgICAgICAgIGVsZW1lbnQtPnNldEF0dHJpYnV0ZSh0b2tlbkF0dHJpYnV0
ZS5uYW1lKCksIHRva2VuQXR0cmlidXRlLnZhbHVlKCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmNwcAppbmRleCBhN2UzZjg5Li5iNDhhZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Vs
ZW1lbnQuY3BwCkBAIC01NDQsMTMgKzU0NCwxMyBAQCB2b2lkIFNWR0VsZW1lbnQ6OmF0dHJpYnV0
ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJgog
CiB2b2lkIFNWR0VsZW1lbnQ6OnVwZGF0ZUFuaW1hdGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkgfHwgIWF0
dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkKKyAgICBpZiAo
IWVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVz
QXJlRGlydHkpCiAgICAgICAgIHJldHVybjsKIAogICAgIFNWR0VsZW1lbnQqIG5vbkNvbnN0VGhp
cyA9IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KHRoaXMpOwogICAgIGlmIChuYW1lID09IGFueVFO
YW1lKCkpIHsKICAgICAgICAgbm9uQ29uc3RUaGlzLT5sb2NhbEF0dHJpYnV0ZVRvUHJvcGVydHlN
YXAoKS5zeW5jaHJvbml6ZVByb3BlcnRpZXMobm9uQ29uc3RUaGlzKTsKLSAgICAgICAgYXR0cmli
dXRlRGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5ID0gZmFsc2U7CisgICAg
ICAgIGVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkgPSBmYWxz
ZTsKICAgICB9IGVsc2UKICAgICAgICAgbm9uQ29uc3RUaGlzLT5sb2NhbEF0dHJpYnV0ZVRvUHJv
cGVydHlNYXAoKS5zeW5jaHJvbml6ZVByb3BlcnR5KG5vbkNvbnN0VGhpcywgbmFtZSk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oIGIvU291cmNlL1dlYkNv
cmUvc3ZnL1NWR0VsZW1lbnQuaAppbmRleCA4Zjg5MDBiLi45ZGFhN2EzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9T
VkdFbGVtZW50LmgKQEAgLTc5LDcgKzc5LDcgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCBBZmZp
bmVUcmFuc2Zvcm0qIHN1cHBsZW1lbnRhbFRyYW5zZm9ybSgpIHsgcmV0dXJuIDA7IH0KIAotICAg
IHZvaWQgaW52YWxpZGF0ZVNWR0F0dHJpYnV0ZXMoKSB7IG11dGFibGVBdHRyaWJ1dGVEYXRhKCkt
Pm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkgPSB0cnVlOyB9CisgICAgdm9pZCBpbnZh
bGlkYXRlU1ZHQXR0cmlidXRlcygpIHsgZW5zdXJlUHJpdmF0ZUVsZW1lbnREYXRhKCktPm1fYW5p
bWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkgPSB0cnVlOyB9CiAKICAgICBjb25zdCBIYXNoU2V0
PFNWR0VsZW1lbnRJbnN0YW5jZSo+JiBpbnN0YW5jZXNGb3JFbGVtZW50KCkgY29uc3Q7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCmlu
ZGV4IGFjOTA0NGMuLjZhYzRkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJz
ZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUveG1sL3BhcnNl
ci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcApAQCAtMTQ2LDcgKzE0Niw3IEBAIFhNTERvY3VtZW50
UGFyc2VyOjpYTUxEb2N1bWVudFBhcnNlcihEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxl
bWVudCogcGFyZW50CiAKICAgICBRWG1sU3RyZWFtTmFtZXNwYWNlRGVjbGFyYXRpb25zIG5hbWVz
cGFjZXM7CiAgICAgZm9yIChFbGVtZW50KiBlbGVtZW50ID0gZWxlbVN0YWNrLmxhc3QoKTsgIWVs
ZW1TdGFjay5pc0VtcHR5KCk7IGVsZW1TdGFjay5yZW1vdmVMYXN0KCkpIHsKLSAgICAgICAgaWYg
KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRycyA9IGVsZW1lbnQtPnVwZGF0ZWRBdHRy
aWJ1dGVEYXRhKCkpIHsKKyAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnREYXRhKiBhdHRycyA9IGVs
ZW1lbnQtPmVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKSkgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGF0dHJzLT5sZW5ndGgoKTsgaSsrKSB7CiAg
ICAgICAgICAgICAgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmF0dHJpYnV0ZUl0
ZW0oaSk7CiAgICAgICAgICAgICAgICAgaWYgKGF0dHItPmxvY2FsTmFtZSgpID09ICJ4bWxucyIp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188144</attachid>
            <date>2013-02-13 12:20:04 -0800</date>
            <delta_ts>2013-02-13 12:30:32 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109529-v5.diff</filename>
            <type>text/plain</type>
            <size>76749</size>
            <attacher name="Andreas Kling">kling</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4YWZlOTVmLi5lMGZjYTgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQ2
IEBACisyMDEzLTAyLTEzICBBbmRyZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KKworICAg
ICAgICBCZXR0ZXIgbmFtZXMgZm9yIEVsZW1lbnRBdHRyaWJ1dGVEYXRhICYgc3ViY2xhc3Nlcy4K
KyAgICAgICAgPGh0dHA6Ly93ZWJraXQub3JnL2IvMTA5NTI5PgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gRWxlbWVudEF0dHJpYnV0ZURhdGEgPT4g
RWxlbWVudERhdGEKKworICAgICAgICAgICAgQmVjYXVzZSBFbGVtZW50QXR0cmlidXRlRGF0YSB3
b24ndCBiZSBhIGdvb2QgbmFtZSBvbmNlIHdlIG1vdmUgc29tZSBub24tYXR0cmlidXRlIHJlbGF0
ZWQKKyAgICAgICAgICAgIHRoaW5ncyB0byB0aGlzIHN0cnVjdHVyZS4KKworICAgICAgICAtIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhID0+IFNoYXJlYWJsZUVsZW1lbnREYXRhCisKKyAg
ICAgICAgICAgIFRoZXNlIG9iamVjdHMgY2FuIGJlIHNoYXJlZCB3aXRoIG90aGVyIEVsZW1lbnRz
IHRoYXQgaGF2ZSB0aGUgc2FtZSBhdHRyaWJ1dGUgbmFtZS92YWx1ZSBwYWlycy4KKworICAgICAg
ICAtIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSA9PiBVbmlxdWVFbGVtZW50RGF0YQorCisg
ICAgICAgICAgICBUaGVzZSBvYmplY3RzIGNvbnRhaW4gZGF0YSB0aGF0IGlzIHVuaXF1ZSB0byBh
IHNwZWNpZmljIEVsZW1lbnQsIGFuZCBjYW5ub3QgYmUgc2hhcmVkIHdpdGgKKyAgICAgICAgICAg
IG90aGVyIEVsZW1lbnRzLiBUaGlzIGlzIHdoYXQncyBpbXBvcnRhbnQgYWJvdXQgaXQsIG5vdCB0
aGF0IGl0cyB1bmRlcmx5aW5nIHN0b3JhZ2UgaXMgbXV0YWJsZS4KKworICAgICAgICAtIGF0dHJp
YnV0ZURhdGEoKSAtPiBlbGVtZW50RGF0YSgpCisgICAgICAgIC0gdXBkYXRlZEF0dHJpYnV0ZURh
dGEoKSAtPiBlbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1dGVzKCkKKyAgICAgICAg
LSBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpIC0+IGVuc3VyZUVsZW1lbnREYXRhV2l0aFN5
bmNocm9uaXplZEF0dHJpYnV0ZXMoKQorCisgICAgICAgICAgICBSaWRlLWFsb25nIHJlbmFtZXMu
IE11Y2ggbGVzcyB2YWd1ZSB0aGFuIHByZXZpb3VzIG5hbWVzIElNTy4KKworICAgICAgICAqIGNz
cy9TdHlsZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlUmVzb2x2ZXI6OmNh
blNoYXJlU3R5bGVXaXRoQ29udHJvbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJlc29sdmVy
OjpzaGFyaW5nQ2FuZGlkYXRlSGFzSWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKToK
KyAgICAgICAgKiBkb20vQXR0ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdHRyOjplbGVtZW50
QXR0cmlidXRlKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXk6OlNoYXJlYWJs
ZUVsZW1lbnREYXRhQ2FjaGVLZXkpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVhYmxlRWxlbWVu
dERhdGFDYWNoZUtleTo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWFibGVF
bGVtZW50RGF0YUNhY2hlRW50cnk6OlNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSk6Cisg
ICAgICAgIChTaGFyZWFibGVFbGVtZW50RGF0YUNhY2hlRW50cnkpOgorICAgICAgICAoV2ViQ29y
ZTo6RG9jdW1lbnRTaGFyZWRPYmplY3RQb29sOjpjYWNoZWRTaGFyZWFibGVFbGVtZW50RGF0YVdp
dGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKiBkb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmg6
CisgICAgICAgIChEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wpOgorICAgICAgICAqIGRvbS9FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmRldGFjaEF0dHJpYnV0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6YXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50Ojpn
ZXRBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnNldFN5bmNocm9uaXplZExhenlBdHRyaWJ1dGUp
OgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6c2V0QXR0cmlidXRlSW50ZXJuYWwpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6
RWxlbWVudDo6c2hvdWxkSW52YWxpZGF0ZURpc3RyaWJ1dGlvbldoZW5BdHRyaWJ1dGVDaGFuZ2Vk
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3Jl
OjpFbGVtZW50OjpoYXNFcXVpdmFsZW50QXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpF
bGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJl
bW92ZUF0dHJpYnV0ZU5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVtb3ZlQXR0
cmlidXRlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6YWRkQXR0cmlidXRl
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZSk6
CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRBdHRyaWJ1dGVOb2RlTlMpOgorICAgICAg
ICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Omhhc0F0dHJpYnV0ZU5TKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmNvbXB1
dGVJbmhlcml0ZWRMYW5ndWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpnZXRVUkxB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Z2V0Tm9uRW1wdHlVUkxBdHRy
aWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVs
ZW1lbnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y3JlYXRlVW5pcXVlRWxlbWVudERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6cmVwb3J0TWVtb3J5VXNhZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmRlcmVmKToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnREYXRhOjpFbGVtZW50RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpzaXplRm9yU2hhcmVh
YmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlQ291bnQpOgorICAgICAgICAoV2ViQ29yZTo6RWxl
bWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OkVsZW1lbnREYXRhOjpjcmVhdGVVbmlxdWUpOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVh
YmxlRWxlbWVudERhdGE6OlNoYXJlYWJsZUVsZW1lbnREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlNoYXJlYWJsZUVsZW1lbnREYXRhOjp+U2hhcmVhYmxlRWxlbWVudERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6VW5pcXVlRWxlbWVudERhdGE6OlVuaXF1ZUVsZW1lbnREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkVsZW1lbnREYXRhOjptYWtlTXV0YWJsZUNvcHkpOgorICAgICAgICAoV2ViQ29y
ZTo6RWxlbWVudERhdGE6Om1ha2VJbW11dGFibGVDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnREYXRhOjpzZXRQcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpFbGVtZW50RGF0YTo6YWRkQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnREYXRhOjpyZW1vdmVBdHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6
OmlzRXF1aXZhbGVudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50RGF0YTo6cmVwb3J0TWVt
b3J5VXNhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmdldEF0dHJpYnV0ZUl0
ZW1JbmRleFNsb3dDYXNlKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAoRWxl
bWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmlzVW5pcXVlKToKKyAg
ICAgICAgKFNoYXJlYWJsZUVsZW1lbnREYXRhKToKKyAgICAgICAgKFVuaXF1ZUVsZW1lbnREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjplbGVtZW50RGF0YSk6CisgICAgICAgIChFbGVtZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXpl
ZEF0dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5zdXJlRWxlbWVudERh
dGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50
OjpmYXN0SGFzQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmZhc3RHZXRB
dHRyaWJ1dGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzQXR0cmlidXRlc1dpdGhv
dXRVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aWRGb3JTdHlsZVJlc29sdXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6Y2xhc3NOYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpFbGVtZW50OjphdHRyaWJ1dGVDb3VudCk6CisgICAgICAgIChXZWJDb3JlOjpFbGVt
ZW50OjphdHRyaWJ1dGVJdGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OmdldEF0dHJp
YnV0ZUl0ZW0pOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6dXBkYXRlSW52YWxpZEF0dHJp
YnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6aGFzSUQpOgorICAgICAgICAoV2Vi
Q29yZTo6RWxlbWVudDo6aGFzQ2xhc3MpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudDo6ZW5z
dXJlVW5pcXVlRWxlbWVudERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6Om11
dGFibGVBdHRyaWJ1dGVWZWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6Omlt
bXV0YWJsZUF0dHJpYnV0ZUFycmF5KToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjps
ZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OnByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJ
dGVtKToKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5k
ZXgpOgorICAgICAgICAoV2ViQ29yZTo6RWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0ZW0pOgorICAg
ICAgICAqIGRvbS9Ob2RlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmR1bXBTdGF0aXN0
aWNzKToKKyAgICAgICAgKFdlYkNvcmU6Ok5vZGU6OmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKToK
KyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRFbGVtZW50Ojp1cGRhdGVTdHlsZUF0dHJpYnV0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRFbGVtZW50OjplbnN1cmVNdXRhYmxlSW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVkRWxlbWVudDo6YXR0cmlidXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpTdHls
ZWRFbGVtZW50OjppbmxpbmVTdHlsZUNTU09NV3JhcHBlcik6CisgICAgICAgIChXZWJDb3JlOjpT
dHlsZWRFbGVtZW50OjpzZXRJbmxpbmVTdHlsZUZyb21TdHJpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlZEVsZW1lbnQ6OmlubGluZVN0eWxlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZWRFbGVtZW50OjphZGRTdWJyZXNvdXJjZUF0dHJpYnV0ZVVSTHMpOgorICAgICAgICAo
V2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6cmVidWlsZFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
KToKKyAgICAgICAgKiBkb20vU3R5bGVkRWxlbWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6U3R5
bGVkRWxlbWVudDo6aW5saW5lU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVu
dDo6aW52YWxpZGF0ZVN0eWxlQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVs
ZW1lbnQ6OnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKToKKyAgICAgICAgKiBodG1sL0NsYXNz
TGlzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGFzc0xpc3Q6OmNsYXNzTmFtZXMpOgorICAg
ICAgICAqIGh0bWwvSFRNTElucHV0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
SW5wdXRFbGVtZW50Ojp1cGRhdGVUeXBlKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MQ29u
c3RydWN0aW9uU2l0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQ29uc3RydWN0aW9uU2l0
ZTo6bWVyZ2VBdHRyaWJ1dGVzRnJvbVRva2VuSW50b0VsZW1lbnQpOgorICAgICAgICAqIHN2Zy9T
VkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0VsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkU1ZHQXR0cmlidXRlKToKKyAgICAgICAgKiBzdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHRWxlbWVudDo6aW52YWxpZGF0ZVNWR0F0dHJpYnV0ZXMpOgorICAgICAgICAq
IHhtbC9wYXJzZXIvWE1MRG9jdW1lbnRQYXJzZXJRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpY
TUxEb2N1bWVudFBhcnNlcjo6WE1MRG9jdW1lbnRQYXJzZXIpOgorCiAyMDEzLTAyLTEzICBDaGFu
Z1Nlb2sgT2ggIDxzaGl2YW1pZG93QGdtYWlsLmNvbT4KIAogICAgICAgICBbR1RLXVtBQ10gSW1w
bGVtZW50IGJhc2ljIHRyYW5zZm9ybSBhbmltYXRpb25zIHdpdGggY2x1dHRlciBhYyBiYWNrZW5k
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9jc3MvU3R5bGVSZXNvbHZlci5jcHAKaW5kZXggYjE5YWY3Ni4uMjk1NWU1ZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL1N0eWxlUmVzb2x2ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9TdHlsZVJlc29sdmVyLmNwcApAQCAtODcwLDcgKzg3MCw3IEBAIGJv
b2wgU3R5bGVSZXNvbHZlcjo6Y2FuU2hhcmVTdHlsZVdpdGhDb250cm9sKFN0eWxlZEVsZW1lbnQq
IGVsZW1lbnQpIGNvbnN0CiAgICAgaWYgKCF0aGlzSW5wdXRFbGVtZW50IHx8ICFvdGhlcklucHV0
RWxlbWVudCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKHRoaXNJbnB1dEVsZW1l
bnQtPmF0dHJpYnV0ZURhdGEoKSAhPSBvdGhlcklucHV0RWxlbWVudC0+YXR0cmlidXRlRGF0YSgp
KSB7CisgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQtPmVsZW1lbnREYXRhKCkgIT0gb3RoZXJJbnB1
dEVsZW1lbnQtPmVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgaWYgKHRoaXNJbnB1dEVsZW1lbnQt
PmZhc3RHZXRBdHRyaWJ1dGUodHlwZUF0dHIpICE9IG90aGVySW5wdXRFbGVtZW50LT5mYXN0R2V0
QXR0cmlidXRlKHR5cGVBdHRyKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
aWYgKHRoaXNJbnB1dEVsZW1lbnQtPmZhc3RHZXRBdHRyaWJ1dGUocmVhZG9ubHlBdHRyKSAhPSBv
dGhlcklucHV0RWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShyZWFkb25seUF0dHIpKQpAQCAtOTIw
LDcgKzkyMCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBlbGVtZW50SGFzRGlyZWN0aW9uQXV0byhF
bGVtZW50KiBlbGVtZW50KQogYm9vbCBTdHlsZVJlc29sdmVyOjpzaGFyaW5nQ2FuZGlkYXRlSGFz
SWRlbnRpY2FsU3R5bGVBZmZlY3RpbmdBdHRyaWJ1dGVzKFN0eWxlZEVsZW1lbnQqIHNoYXJpbmdD
YW5kaWRhdGUpIGNvbnN0CiB7CiAgICAgY29uc3QgU3RhdGUmIHN0YXRlID0gbV9zdGF0ZTsKLSAg
ICBpZiAoc3RhdGUuZWxlbWVudC0+YXR0cmlidXRlRGF0YSgpID09IHNoYXJpbmdDYW5kaWRhdGUt
PmF0dHJpYnV0ZURhdGEoKSkKKyAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZWxlbWVudERhdGEoKSA9
PSBzaGFyaW5nQ2FuZGlkYXRlLT5lbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBpZiAoc3RhdGUuZWxlbWVudC0+ZmFzdEdldEF0dHJpYnV0ZShYTUxOYW1lczo6bGFuZ0F0
dHIpICE9IHNoYXJpbmdDYW5kaWRhdGUtPmZhc3RHZXRBdHRyaWJ1dGUoWE1MTmFtZXM6OmxhbmdB
dHRyKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL0F0dHIuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0F0dHIuY3BwCmluZGV4IDBjYzFiMzMu
LmIxMzAxYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9BdHRyLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9kb20vQXR0ci5jcHAKQEAgLTIxMCw3ICsyMTAsNyBAQCBjb25zdCBBdG9t
aWNTdHJpbmcmIEF0dHI6OnZhbHVlKCkgY29uc3QKIEF0dHJpYnV0ZSYgQXR0cjo6ZWxlbWVudEF0
dHJpYnV0ZSgpCiB7CiAgICAgQVNTRVJUKG1fZWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVu
dC0+YXR0cmlidXRlRGF0YSgpKTsKKyAgICBBU1NFUlQobV9lbGVtZW50LT5lbGVtZW50RGF0YSgp
KTsKICAgICByZXR1cm4gKm1fZWxlbWVudC0+Z2V0QXR0cmlidXRlSXRlbShxdWFsaWZpZWROYW1l
KCkpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRP
YmplY3RQb29sLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBv
b2wuY3BwCmluZGV4IGIxNjk0MTYuLjcyODMxOTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuY3BwCkBAIC0zMSwxNCArMzEsMTQgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNh
Y2hlS2V5IHsKK2NsYXNzIFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkgewogcHVibGljOgot
ICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkoY29uc3QgQXR0cmlidXRl
KiBhdHRyaWJ1dGVzLCB1bnNpZ25lZCBhdHRyaWJ1dGVDb3VudCkKKyAgICBTaGFyZWFibGVFbGVt
ZW50RGF0YUNhY2hlS2V5KGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlcywgdW5zaWduZWQgYXR0
cmlidXRlQ291bnQpCiAgICAgICAgIDogbV9hdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpCiAgICAgICAg
ICwgbV9hdHRyaWJ1dGVDb3VudChhdHRyaWJ1dGVDb3VudCkKICAgICB7IH0KIAotICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5JiBv
dGhlcikgY29uc3QKKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU2hhcmVhYmxlRWxlbWVudERh
dGFDYWNoZUtleSYgb3RoZXIpIGNvbnN0CiAgICAgewogICAgICAgICBpZiAobV9hdHRyaWJ1dGVD
b3VudCAhPSBvdGhlci5tX2F0dHJpYnV0ZUNvdW50KQogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CkBAIC01NSw0MCArNTUsNDAgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2F0dHJpYnV0ZUNv
dW50OwogfTsKIAotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFDYWNoZUVudHJ5
IHsKK2NsYXNzIFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeSB7CiBwdWJsaWM6Ci0gICAg
SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFDYWNoZUVudHJ5KGNvbnN0IEltbXV0YWJsZUVs
ZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkmIGssIFBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0
ZURhdGE+IHYpCisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZUVudHJ5KGNvbnN0IFNoYXJl
YWJsZUVsZW1lbnREYXRhQ2FjaGVLZXkmIGssIFBhc3NSZWZQdHI8RWxlbWVudERhdGE+IHYpCiAg
ICAgICAgIDoga2V5KGspCiAgICAgICAgICwgdmFsdWUodikKICAgICB7IH0KIAotICAgIEltbXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVLZXkga2V5OwotICAgIFJlZlB0cjxFbGVtZW50
QXR0cmlidXRlRGF0YT4gdmFsdWU7CisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZUtleSBr
ZXk7CisgICAgUmVmUHRyPEVsZW1lbnREYXRhPiB2YWx1ZTsKIH07CiAKLVBhc3NSZWZQdHI8RWxl
bWVudEF0dHJpYnV0ZURhdGE+IERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbDo6Y2FjaGVkSW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0
ZXMpCitQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w6OmNh
Y2hlZFNoYXJlYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJp
YnV0ZT4mIGF0dHJpYnV0ZXMpCiB7CiAgICAgQVNTRVJUKCFhdHRyaWJ1dGVzLmlzRW1wdHkoKSk7
CiAKLSAgICBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5IGNhY2hlS2V5KGF0
dHJpYnV0ZXMuZGF0YSgpLCBhdHRyaWJ1dGVzLnNpemUoKSk7CisgICAgU2hhcmVhYmxlRWxlbWVu
dERhdGFDYWNoZUtleSBjYWNoZUtleShhdHRyaWJ1dGVzLmRhdGEoKSwgYXR0cmlidXRlcy5zaXpl
KCkpOwogICAgIHVuc2lnbmVkIGNhY2hlSGFzaCA9IGNhY2hlS2V5Lmhhc2goKTsKIAotICAgIElt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGU6Oml0ZXJhdG9yIGNhY2hlSXRlcmF0b3Ig
PSBtX2ltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGUuYWRkKGNhY2hlSGFzaCwgbnVs
bHB0cikuaXRlcmF0b3I7CisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZTo6aXRlcmF0b3Ig
Y2FjaGVJdGVyYXRvciA9IG1faW1tdXRhYmxlRWxlbWVudERhdGFDYWNoZS5hZGQoY2FjaGVIYXNo
LCBudWxscHRyKS5pdGVyYXRvcjsKICAgICBpZiAoY2FjaGVJdGVyYXRvci0+dmFsdWUgJiYgY2Fj
aGVJdGVyYXRvci0+dmFsdWUtPmtleSAhPSBjYWNoZUtleSkKICAgICAgICAgY2FjaGVIYXNoID0g
MDsKIAotICAgIFJlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gYXR0cmlidXRlRGF0YTsKKyAg
ICBSZWZQdHI8RWxlbWVudERhdGE+IGVsZW1lbnREYXRhOwogICAgIGlmIChjYWNoZUhhc2ggJiYg
Y2FjaGVJdGVyYXRvci0+dmFsdWUpCi0gICAgICAgIGF0dHJpYnV0ZURhdGEgPSBjYWNoZUl0ZXJh
dG9yLT52YWx1ZS0+dmFsdWU7CisgICAgICAgIGVsZW1lbnREYXRhID0gY2FjaGVJdGVyYXRvci0+
dmFsdWUtPnZhbHVlOwogICAgIGVsc2UKLSAgICAgICAgYXR0cmlidXRlRGF0YSA9IEVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFibGUoYXR0cmlidXRlcyk7CisgICAgICAgIGVsZW1l
bnREYXRhID0gRWxlbWVudERhdGE6OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpOwogCiAgICAgaWYgKCFjYWNoZUhhc2ggfHwgY2FjaGVJdGVyYXRvci0+dmFsdWUpCi0g
ICAgICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLnJlbGVhc2UoKTsKKyAgICAgICAgcmV0dXJuIGVs
ZW1lbnREYXRhLnJlbGVhc2UoKTsKIAotICAgIGNhY2hlSXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQ
dHIobmV3IEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGVFbnRyeShJbW11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YUNhY2hlS2V5KGF0dHJpYnV0ZURhdGEtPmltbXV0YWJsZUF0dHJp
YnV0ZUFycmF5KCksIGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpKSwgYXR0cmlidXRlRGF0YSkpOwor
ICAgIGNhY2hlSXRlcmF0b3ItPnZhbHVlID0gYWRvcHRQdHIobmV3IFNoYXJlYWJsZUVsZW1lbnRE
YXRhQ2FjaGVFbnRyeShTaGFyZWFibGVFbGVtZW50RGF0YUNhY2hlS2V5KGVsZW1lbnREYXRhLT5p
bW11dGFibGVBdHRyaWJ1dGVBcnJheSgpLCBlbGVtZW50RGF0YS0+bGVuZ3RoKCkpLCBlbGVtZW50
RGF0YSkpOwogCi0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEucmVsZWFzZSgpOworICAgIHJldHVy
biBlbGVtZW50RGF0YS5yZWxlYXNlKCk7CiB9CiAKIERvY3VtZW50U2hhcmVkT2JqZWN0UG9vbDo6
RG9jdW1lbnRTaGFyZWRPYmplY3RQb29sKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudFNoYXJlZE9iamVjdFBvb2wuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dFNoYXJlZE9iamVjdFBvb2wuaAppbmRleCA1NDBjOTEzLi4xNTA4NzU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50U2hhcmVkT2JqZWN0UG9vbC5oCkBAIC0zNCwyMSArMzQsMjEg
QEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQXR0cmlidXRlOwotY2xhc3MgRWxlbWVu
dEF0dHJpYnV0ZURhdGE7Ci1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNhY2hl
RW50cnk7CitjbGFzcyBFbGVtZW50RGF0YTsKK2NsYXNzIFNoYXJlYWJsZUVsZW1lbnREYXRhQ2Fj
aGVFbnRyeTsKIAogY2xhc3MgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sIHsKIHB1YmxpYzoKICAg
ICBzdGF0aWMgUGFzc093blB0cjxEb2N1bWVudFNoYXJlZE9iamVjdFBvb2w+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UHRyKG5ldyBEb2N1bWVudFNoYXJlZE9iamVjdFBvb2wpOyB9CiAgICAgfkRv
Y3VtZW50U2hhcmVkT2JqZWN0UG9vbCgpOwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmli
dXRlRGF0YT4gY2FjaGVkSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9y
PEF0dHJpYnV0ZT4mKTsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBjYWNoZWRTaGFyZWFi
bGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+Jik7CiAK
IHByaXZhdGU6CiAgICAgRG9jdW1lbnRTaGFyZWRPYmplY3RQb29sKCk7CiAKLSAgICB0eXBlZGVm
IEhhc2hNYXA8dW5zaWduZWQsIE93blB0cjxJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNh
Y2hlRW50cnk+LCBBbHJlYWR5SGFzaGVkPiBJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YUNh
Y2hlOwotICAgIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhQ2FjaGUgbV9pbW11dGFibGVF
bGVtZW50QXR0cmlidXRlRGF0YUNhY2hlOworICAgIHR5cGVkZWYgSGFzaE1hcDx1bnNpZ25lZCwg
T3duUHRyPFNoYXJlYWJsZUVsZW1lbnREYXRhQ2FjaGVFbnRyeT4sIEFscmVhZHlIYXNoZWQ+IFNo
YXJlYWJsZUVsZW1lbnREYXRhQ2FjaGU7CisgICAgU2hhcmVhYmxlRWxlbWVudERhdGFDYWNoZSBt
X2ltbXV0YWJsZUVsZW1lbnREYXRhQ2FjaGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAK
aW5kZXggOTUwNTE4ZC4uYzc1MjcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcApAQCAtMjc2LDkg
KzI3Niw5IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRWxlbWVudDo6Y2xvbmVFbGVtZW50V2l0aG91
dEF0dHJpYnV0ZXNBbmRDaGlsZHJlbigpCiAKIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6ZGV0
YWNoQXR0cmlidXRlKHNpemVfdCBpbmRleCkKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgp
KTsKKyAgICBBU1NFUlQoZWxlbWVudERhdGEoKSk7CiAKLSAgICBjb25zdCBBdHRyaWJ1dGUqIGF0
dHJpYnV0ZSA9IGF0dHJpYnV0ZURhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCk7CisgICAgY29u
c3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVtZW50RGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGlu
ZGV4KTsKICAgICBBU1NFUlQoYXR0cmlidXRlKTsKIAogICAgIFJlZlB0cjxBdHRyPiBhdHRyTm9k
ZSA9IGF0dHJJZkV4aXN0cyhhdHRyaWJ1dGUtPm5hbWUoKSk7CkBAIC0yOTMsMTAgKzI5MywxMCBA
QCBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmRldGFjaEF0dHJpYnV0ZShzaXplX3QgaW5kZXgp
CiAKIHZvaWQgRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5h
bWUpCiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgp
KQogICAgICAgICByZXR1cm47CiAKLSAgICBzaXplX3QgaW5kZXggPSBhdHRyaWJ1dGVEYXRhKCkt
PmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsKKyAgICBzaXplX3QgaW5kZXggPSBlbGVtZW50
RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSk7CiAgICAgaWYgKGluZGV4ID09IG5v
dEZvdW5kKQogICAgICAgICByZXR1cm47CiAKQEAgLTMxMyw3ICszMTMsNyBAQCB2b2lkIEVsZW1l
bnQ6OnNldEJvb2xlYW5BdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgYm9vbCB2
YWx1ZSkKIAogTmFtZWROb2RlTWFwKiBFbGVtZW50OjphdHRyaWJ1dGVzKCkgY29uc3QKIHsKLSAg
ICBlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgpOworICAgIGVuc3VyZUVsZW1lbnREYXRhV2l0
aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKTsKICAgICBFbGVtZW50UmFyZURhdGEqIHJhcmVEYXRh
ID0gY29uc3RfY2FzdDxFbGVtZW50Kj4odGhpcyktPmVuc3VyZUVsZW1lbnRSYXJlRGF0YSgpOwog
ICAgIGlmIChOYW1lZE5vZGVNYXAqIGF0dHJpYnV0ZU1hcCA9IHJhcmVEYXRhLT5hdHRyaWJ1dGVN
YXAoKSkKICAgICAgICAgcmV0dXJuIGF0dHJpYnV0ZU1hcDsKQEAgLTMzNCwxNCArMzM0LDE0IEBA
IGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNv
bnN0CiAKIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6Z2V0QXR0cmlidXRlKGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYgKCFhdHRyaWJ1dGVEYXRhKCkpCisg
ICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm4gbnVsbEF0b207CiAKLSAgICBp
ZiAoVU5MSUtFTFkobmFtZSA9PSBzdHlsZUF0dHIgJiYgYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxl
QXR0cmlidXRlSXNEaXJ0eSkpCisgICAgaWYgKFVOTElLRUxZKG5hbWUgPT0gc3R5bGVBdHRyICYm
IGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5KSkKICAgICAgICAgdXBkYXRl
U3R5bGVBdHRyaWJ1dGUoKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKFVOTElLRUxZKGF0
dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkpCisgICAgaWYg
KFVOTElLRUxZKGVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkp
KQogICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShuYW1lKTsKICNlbmRpZgogCkBA
IC03MDYsMjMgKzcwNiwyMyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZShjb25zdCBFbGVtZW50KiBlKQogCiBjb25zdCBBdG9taWNTdHJpbmcmIEVsZW1lbnQ6
OmdldEF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpIGNvbnN0CiB7Ci0gICAgaWYg
KCFhdHRyaWJ1dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1
cm4gbnVsbEF0b207CiAKICAgICBib29sIGlnbm9yZUNhc2UgPSBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKHRoaXMpOwogCiAgICAgLy8gVXBkYXRlIHRoZSAnc3R5bGUnIGF0dHJpYnV0ZSBpZiBp
dCdzIGludmFsaWQgYW5kIGJlaW5nIHJlcXVlc3RlZDoKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgp
LT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSAmJiBlcXVhbFBvc3NpYmx5SWdub3JpbmdDYXNlKG5h
bWUsIHN0eWxlQXR0ci5sb2NhbE5hbWUoKSwgaWdub3JlQ2FzZSkpCisgICAgaWYgKGVsZW1lbnRE
YXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ICYmIGVxdWFsUG9zc2libHlJZ25vcmluZ0Nh
c2UobmFtZSwgc3R5bGVBdHRyLmxvY2FsTmFtZSgpLCBpZ25vcmVDYXNlKSkKICAgICAgICAgdXBk
YXRlU3R5bGVBdHRyaWJ1dGUoKTsKIAogI2lmIEVOQUJMRShTVkcpCi0gICAgaWYgKGF0dHJpYnV0
ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSkgeworICAgIGlmIChlbGVt
ZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5KSB7CiAgICAgICAgIC8v
IFdlJ3JlIG5vdCBwYXNzaW5nIGEgbmFtZXNwYWNlIGFyZ3VtZW50IG9uIHB1cnBvc2UuIFNWR05h
bWVzOjoqQXR0ciBhcmUgZGVmaW5lZCB3L28gbmFtZXNwYWNlcyBhcyB3ZWxsLgogICAgICAgICB1
cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBuYW1lLCBu
dWxsQXRvbSkpOwogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0
cmlidXRlID0gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUsIGlnbm9yZUNh
c2UpKQorICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnREYXRhKCkt
PmdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgaWdub3JlQ2FzZSkpCiAgICAgICAgIHJldHVybiBhdHRy
aWJ1dGUtPnZhbHVlKCk7CiAgICAgcmV0dXJuIG51bGxBdG9tOwogfQpAQCAtNzQxLDE5ICs3NDEs
MTkgQEAgdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1dGUoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1l
LCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlLAogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUgPSBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRoaXMpID8gbmFtZS5sb3dlcigp
IDogbmFtZTsKIAotICAgIHNpemVfdCBpbmRleCA9IGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRh
KCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKKyAgICBzaXplX3Qg
aW5kZXggPSBlbnN1cmVFbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1dGVzKCktPmdl
dEF0dHJpYnV0ZUl0ZW1JbmRleChsb2NhbE5hbWUsIGZhbHNlKTsKICAgICBjb25zdCBRdWFsaWZp
ZWROYW1lJiBxTmFtZSA9IGluZGV4ICE9IG5vdEZvdW5kID8gYXR0cmlidXRlSXRlbShpbmRleCkt
Pm5hbWUoKSA6IFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbnVsbEF0b20pOwog
ICAgIHNldEF0dHJpYnV0ZUludGVybmFsKGluZGV4LCBxTmFtZSwgdmFsdWUsIE5vdEluU3luY2hy
b25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKTsKIH0KIAogdm9pZCBFbGVtZW50OjpzZXRBdHRyaWJ1
dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkK
IHsKLSAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbnN1cmVVcGRhdGVkQXR0cmlidXRlRGF0YSgp
LT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBOb3RJblN5bmNocm9u
aXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CisgICAgc2V0QXR0cmlidXRlSW50ZXJuYWwoZW5zdXJl
RWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpLT5nZXRBdHRyaWJ1dGVJdGVt
SW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJp
YnV0ZSk7CiB9CiAKIHZvaWQgRWxlbWVudDo6c2V0U3luY2hyb25pemVkTGF6eUF0dHJpYnV0ZShj
b25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlKQogewot
ICAgIHNldEF0dHJpYnV0ZUludGVybmFsKG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJp
YnV0ZUl0ZW1JbmRleChuYW1lKSwgbmFtZSwgdmFsdWUsIEluU3luY2hyb25pemF0aW9uT2ZMYXp5
QXR0cmlidXRlKTsKKyAgICBzZXRBdHRyaWJ1dGVJbnRlcm5hbChlbnN1cmVVbmlxdWVFbGVtZW50
RGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSksIG5hbWUsIHZhbHVlLCBJblN5bmNo
cm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CiB9CiAKIGlubGluZSB2b2lkIEVsZW1lbnQ6OnNl
dEF0dHJpYnV0ZUludGVybmFsKHNpemVfdCBpbmRleCwgY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFt
ZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdWYWx1ZSwgU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0
cmlidXRlIGluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQpAQCAtNzc0LDEyICs3NzQs
MTIgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0QXR0cmlidXRlSW50ZXJuYWwoc2l6ZV90IGlu
ZGV4LCBjb25zdCBRdWFsaWZpZWROYW1lJiBuYW0KIAogICAgIGlmIChuZXdWYWx1ZSAhPSBhdHRy
aWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKSkgewogICAgICAgICAvLyBJZiB0aGVyZSBpcyBhbiBB
dHRyIG5vZGUgaG9va2VkIHRvIHRoaXMgYXR0cmlidXRlLCB0aGUgQXR0cjo6c2V0VmFsdWUoKSBj
YWxsIGJlbG93Ci0gICAgICAgIC8vIHdpbGwgd3JpdGUgaW50byB0aGUgRWxlbWVudEF0dHJpYnV0
ZURhdGEuCisgICAgICAgIC8vIHdpbGwgd3JpdGUgaW50byB0aGUgRWxlbWVudERhdGEuCiAgICAg
ICAgIC8vIEZJWE1FOiBSZWZhY3RvciB0aGlzIHNvIGl0IG1ha2VzIHNvbWUgc2Vuc2UuCiAgICAg
ICAgIGlmIChSZWZQdHI8QXR0cj4gYXR0ck5vZGUgPSBpblN5bmNocm9uaXphdGlvbk9mTGF6eUF0
dHJpYnV0ZSA/IDAgOiBhdHRySWZFeGlzdHMobmFtZSkpCiAgICAgICAgICAgICBhdHRyTm9kZS0+
c2V0VmFsdWUobmV3VmFsdWUpOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBtdXRhYmxlQXR0
cmlidXRlRGF0YSgpLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+c2V0VmFsdWUobmV3VmFsdWUpOwor
ICAgICAgICAgICAgZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRl
eCktPnNldFZhbHVlKG5ld1ZhbHVlKTsKICAgICB9CiAKICAgICBpZiAoIWluU3luY2hyb25pemF0
aW9uT2ZMYXp5QXR0cmlidXRlKQpAQCAtODE5LDEwICs4MTksMTAgQEAgdm9pZCBFbGVtZW50Ojph
dHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0b21pY1N0
cmluZyYgbmUKICAgICBib29sIHNob3VsZEludmFsaWRhdGVTdHlsZSA9IGZhbHNlOwogCiAgICAg
aWYgKGlzSWRBdHRyaWJ1dGVOYW1lKG5hbWUpKSB7Ci0gICAgICAgIEF0b21pY1N0cmluZyBvbGRJ
ZCA9IGF0dHJpYnV0ZURhdGEoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKTsKKyAgICAgICAgQXRv
bWljU3RyaW5nIG9sZElkID0gZWxlbWVudERhdGEoKS0+aWRGb3JTdHlsZVJlc29sdXRpb24oKTsK
ICAgICAgICAgQXRvbWljU3RyaW5nIG5ld0lkID0gbWFrZUlkRm9yU3R5bGVSZXNvbHV0aW9uKG5l
d1ZhbHVlLCBkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSk7CiAgICAgICAgIGlmIChuZXdJZCAh
PSBvbGRJZCkgewotICAgICAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5zZXRJZEZvclN0eWxlUmVz
b2x1dGlvbihuZXdJZCk7CisgICAgICAgICAgICBlbGVtZW50RGF0YSgpLT5zZXRJZEZvclN0eWxl
UmVzb2x1dGlvbihuZXdJZCk7CiAgICAgICAgICAgICBzaG91bGRJbnZhbGlkYXRlU3R5bGUgPSB0
ZXN0U2hvdWxkSW52YWxpZGF0ZVN0eWxlICYmIGNoZWNrTmVlZHNTdHlsZUludmFsaWRhdGlvbkZv
cklkQ2hhbmdlKG9sZElkLCBuZXdJZCwgc3R5bGVSZXNvbHZlcik7CiAgICAgICAgIH0KICAgICB9
IGVsc2UgaWYgKG5hbWUgPT0gY2xhc3NBdHRyKQpAQCAtOTIyLDE0ICs5MjIsMTQgQEAgdm9pZCBF
bGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoY29uc3QgQXRvbWljU3RyaW5nJiBuZXdDbGFz
c1N0cmluZykKIAogICAgIGlmIChjbGFzc1N0cmluZ0hhc0NsYXNzTmFtZShuZXdDbGFzc1N0cmlu
ZykpIHsKICAgICAgICAgY29uc3QgYm9vbCBzaG91bGRGb2xkQ2FzZSA9IGRvY3VtZW50KCktPmlu
UXVpcmtzTW9kZSgpOwotICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nIG9sZENsYXNzZXMg
PSBhdHRyaWJ1dGVEYXRhKCktPmNsYXNzTmFtZXMoKTsKLSAgICAgICAgYXR0cmlidXRlRGF0YSgp
LT5zZXRDbGFzcyhuZXdDbGFzc1N0cmluZywgc2hvdWxkRm9sZENhc2UpOwotICAgICAgICBjb25z
dCBTcGFjZVNwbGl0U3RyaW5nJiBuZXdDbGFzc2VzID0gYXR0cmlidXRlRGF0YSgpLT5jbGFzc05h
bWVzKCk7CisgICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcgb2xkQ2xhc3NlcyA9IGVsZW1l
bnREYXRhKCktPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgZWxlbWVudERhdGEoKS0+c2V0Q2xhc3Mo
bmV3Q2xhc3NTdHJpbmcsIHNob3VsZEZvbGRDYXNlKTsKKyAgICAgICAgY29uc3QgU3BhY2VTcGxp
dFN0cmluZyYgbmV3Q2xhc3NlcyA9IGVsZW1lbnREYXRhKCktPmNsYXNzTmFtZXMoKTsKICAgICAg
ICAgc2hvdWxkSW52YWxpZGF0ZVN0eWxlID0gdGVzdFNob3VsZEludmFsaWRhdGVTdHlsZSAmJiBj
aGVja1NlbGVjdG9yRm9yQ2xhc3NDaGFuZ2Uob2xkQ2xhc3NlcywgbmV3Q2xhc3NlcywgKnN0eWxl
UmVzb2x2ZXIpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnN0IFNwYWNlU3BsaXRTdHJpbmcm
IG9sZENsYXNzZXMgPSBhdHRyaWJ1dGVEYXRhKCktPmNsYXNzTmFtZXMoKTsKKyAgICAgICAgY29u
c3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcyA9IGVsZW1lbnREYXRhKCktPmNsYXNzTmFt
ZXMoKTsKICAgICAgICAgc2hvdWxkSW52YWxpZGF0ZVN0eWxlID0gdGVzdFNob3VsZEludmFsaWRh
dGVTdHlsZSAmJiBjaGVja1NlbGVjdG9yRm9yQ2xhc3NDaGFuZ2Uob2xkQ2xhc3NlcywgKnN0eWxl
UmVzb2x2ZXIpOwotICAgICAgICBhdHRyaWJ1dGVEYXRhKCktPmNsZWFyQ2xhc3MoKTsKKyAgICAg
ICAgZWxlbWVudERhdGEoKS0+Y2xlYXJDbGFzcygpOwogICAgIH0KIAogICAgIGlmIChoYXNSYXJl
RGF0YSgpKQpAQCAtOTQ1LDcgKzk0NSw3IEBAIGJvb2wgRWxlbWVudDo6c2hvdWxkSW52YWxpZGF0
ZURpc3RyaWJ1dGlvbldoZW5BdHRyaWJ1dGVDaGFuZ2VkKEVsZW1lbnRTaGFkb3cqIGVsCiAgICAg
Y29uc3QgU2VsZWN0UnVsZUZlYXR1cmVTZXQmIGZlYXR1cmVTZXQgPSBlbGVtZW50U2hhZG93LT5k
aXN0cmlidXRvcigpLmVuc3VyZVNlbGVjdEZlYXR1cmVTZXQoZWxlbWVudFNoYWRvdyk7CiAKICAg
ICBpZiAoaXNJZEF0dHJpYnV0ZU5hbWUobmFtZSkpIHsKLSAgICAgICAgQXRvbWljU3RyaW5nIG9s
ZElkID0gYXR0cmlidXRlRGF0YSgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOworICAgICAgICBB
dG9taWNTdHJpbmcgb2xkSWQgPSBlbGVtZW50RGF0YSgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigp
OwogICAgICAgICBBdG9taWNTdHJpbmcgbmV3SWQgPSBtYWtlSWRGb3JTdHlsZVJlc29sdXRpb24o
bmV3VmFsdWUsIGRvY3VtZW50KCktPmluUXVpcmtzTW9kZSgpKTsKICAgICAgICAgaWYgKG5ld0lk
ICE9IG9sZElkKSB7CiAgICAgICAgICAgICBpZiAoIW9sZElkLmlzRW1wdHkoKSAmJiBmZWF0dXJl
U2V0Lmhhc1NlbGVjdG9yRm9ySWQob2xkSWQpKQpAQCAtOTU5LDEyICs5NTksMTIgQEAgYm9vbCBF
bGVtZW50OjpzaG91bGRJbnZhbGlkYXRlRGlzdHJpYnV0aW9uV2hlbkF0dHJpYnV0ZUNoYW5nZWQo
RWxlbWVudFNoYWRvdyogZWwKICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdDbGFzc1N0
cmluZyA9IG5ld1ZhbHVlOwogICAgICAgICBpZiAoY2xhc3NTdHJpbmdIYXNDbGFzc05hbWUobmV3
Q2xhc3NTdHJpbmcpKSB7CiAgICAgICAgICAgICBjb25zdCBib29sIHNob3VsZEZvbGRDYXNlID0g
ZG9jdW1lbnQoKS0+aW5RdWlya3NNb2RlKCk7Ci0gICAgICAgICAgICBjb25zdCBTcGFjZVNwbGl0
U3RyaW5nJiBvbGRDbGFzc2VzID0gYXR0cmlidXRlRGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAg
ICAgICAgICBjb25zdCBTcGFjZVNwbGl0U3RyaW5nJiBvbGRDbGFzc2VzID0gZWxlbWVudERhdGEo
KS0+Y2xhc3NOYW1lcygpOwogICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyBuZXdD
bGFzc2VzKG5ld0NsYXNzU3RyaW5nLCBzaG91bGRGb2xkQ2FzZSk7CiAgICAgICAgICAgICBpZiAo
Y2hlY2tTZWxlY3RvckZvckNsYXNzQ2hhbmdlKG9sZENsYXNzZXMsIG5ld0NsYXNzZXMsIGZlYXR1
cmVTZXQpKQogICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmluZyYgb2xkQ2xhc3NlcyA9IGF0dHJpYnV0
ZURhdGEoKS0+Y2xhc3NOYW1lcygpOworICAgICAgICAgICAgY29uc3QgU3BhY2VTcGxpdFN0cmlu
ZyYgb2xkQ2xhc3NlcyA9IGVsZW1lbnREYXRhKCktPmNsYXNzTmFtZXMoKTsKICAgICAgICAgICAg
IGlmIChjaGVja1NlbGVjdG9yRm9yQ2xhc3NDaGFuZ2Uob2xkQ2xhc3NlcywgZmVhdHVyZVNldCkp
CiAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTk5NSw3ICs5OTUs
NyBAQCB2b2lkIEVsZW1lbnQ6OnBhcnNlclNldEF0dHJpYnV0ZXMoY29uc3QgVmVjdG9yPEF0dHJp
YnV0ZT4mIGF0dHJpYnV0ZVZlY3RvciwgRnJhZwogICAgIEFTU0VSVCghaW5Eb2N1bWVudCgpKTsK
ICAgICBBU1NFUlQoIXBhcmVudE5vZGUoKSk7CiAKLSAgICBBU1NFUlQoIW1fYXR0cmlidXRlRGF0
YSk7CisgICAgQVNTRVJUKCFtX2VsZW1lbnREYXRhKTsKIAogICAgIGlmIChhdHRyaWJ1dGVWZWN0
b3IuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CkBAIC0xMDIwLDEyICsxMDIwLDEyIEBAIHZv
aWQgRWxlbWVudDo6cGFyc2VyU2V0QXR0cmlidXRlcyhjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYg
YXR0cmlidXRlVmVjdG9yLCBGcmFnCiAgICAgfQogCiAgICAgaWYgKGRvY3VtZW50KCkgJiYgZG9j
dW1lbnQoKS0+c2hhcmVkT2JqZWN0UG9vbCgpKQotICAgICAgICBtX2F0dHJpYnV0ZURhdGEgPSBk
b2N1bWVudCgpLT5zaGFyZWRPYmplY3RQb29sKCktPmNhY2hlZEltbXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhKGZpbHRlcmVkQXR0cmlidXRlcyk7CisgICAgICAgIG1fZWxlbWVudERhdGEgPSBk
b2N1bWVudCgpLT5zaGFyZWRPYmplY3RQb29sKCktPmNhY2hlZFNoYXJlYWJsZUVsZW1lbnREYXRh
V2l0aEF0dHJpYnV0ZXMoZmlsdGVyZWRBdHRyaWJ1dGVzKTsKICAgICBlbHNlCi0gICAgICAgIG1f
YXR0cmlidXRlRGF0YSA9IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpjcmVhdGVJbW11dGFibGUoZmls
dGVyZWRBdHRyaWJ1dGVzKTsKKyAgICAgICAgbV9lbGVtZW50RGF0YSA9IEVsZW1lbnREYXRhOjpj
cmVhdGVTaGFyZWFibGVXaXRoQXR0cmlidXRlcyhmaWx0ZXJlZEF0dHJpYnV0ZXMpOwogCiAgICAg
Ly8gSXRlcmF0ZSBvdmVyIHRoZSBzZXQgb2YgYXR0cmlidXRlcyB3ZSBhbHJlYWR5IGhhdmUgb24g
dGhlIHN0YWNrIGluIGNhc2UKLSAgICAvLyBhdHRyaWJ1dGVDaGFuZ2VkIG11dGF0ZXMgbV9hdHRy
aWJ1dGVEYXRhLgorICAgIC8vIGF0dHJpYnV0ZUNoYW5nZWQgbXV0YXRlcyBtX2VsZW1lbnREYXRh
LgogICAgIC8vIEZJWE1FOiBGaW5kIGEgd2F5IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gdGhpcy4K
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZmlsdGVyZWRBdHRyaWJ1dGVzLnNpemUoKTsg
KytpKQogICAgICAgICBhdHRyaWJ1dGVDaGFuZ2VkKGZpbHRlcmVkQXR0cmlidXRlc1tpXS5uYW1l
KCksIGZpbHRlcmVkQXR0cmlidXRlc1tpXS52YWx1ZSgpKTsKQEAgLTEwMzQsMTkgKzEwMzQsMTkg
QEAgdm9pZCBFbGVtZW50OjpwYXJzZXJTZXRBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1
dGU+JiBhdHRyaWJ1dGVWZWN0b3IsIEZyYWcKIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlcygp
IGNvbnN0CiB7CiAgICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsKLSAgICByZXR1cm4gYXR0
cmlidXRlRGF0YSgpICYmIGF0dHJpYnV0ZURhdGEoKS0+bGVuZ3RoKCk7CisgICAgcmV0dXJuIGVs
ZW1lbnREYXRhKCkgJiYgZWxlbWVudERhdGEoKS0+bGVuZ3RoKCk7CiB9CiAKIGJvb2wgRWxlbWVu
dDo6aGFzRXF1aXZhbGVudEF0dHJpYnV0ZXMoY29uc3QgRWxlbWVudCogb3RoZXIpIGNvbnN0CiB7
Ci0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSB1cGRhdGVk
QXR0cmlidXRlRGF0YSgpOwotICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlckF0
dHJpYnV0ZURhdGEgPSBvdGhlci0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKTsKLSAgICBpZiAoYXR0
cmlidXRlRGF0YSA9PSBvdGhlckF0dHJpYnV0ZURhdGEpCisgICAgY29uc3QgRWxlbWVudERhdGEq
IGVsZW1lbnREYXRhID0gZWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRlcygpOwor
ICAgIGNvbnN0IEVsZW1lbnREYXRhKiBvdGhlckVsZW1lbnREYXRhID0gb3RoZXItPmVsZW1lbnRE
YXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoZWxlbWVudERhdGEgPT0g
b3RoZXJFbGVtZW50RGF0YSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGF0dHJpYnV0
ZURhdGEpCi0gICAgICAgIHJldHVybiBhdHRyaWJ1dGVEYXRhLT5pc0VxdWl2YWxlbnQob3RoZXJB
dHRyaWJ1dGVEYXRhKTsKLSAgICBpZiAob3RoZXJBdHRyaWJ1dGVEYXRhKQotICAgICAgICByZXR1
cm4gb3RoZXJBdHRyaWJ1dGVEYXRhLT5pc0VxdWl2YWxlbnQoYXR0cmlidXRlRGF0YSk7CisgICAg
aWYgKGVsZW1lbnREYXRhKQorICAgICAgICByZXR1cm4gZWxlbWVudERhdGEtPmlzRXF1aXZhbGVu
dChvdGhlckVsZW1lbnREYXRhKTsKKyAgICBpZiAob3RoZXJFbGVtZW50RGF0YSkKKyAgICAgICAg
cmV0dXJuIG90aGVyRWxlbWVudERhdGEtPmlzRXF1aXZhbGVudChlbGVtZW50RGF0YSk7CiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2ODcsMTQgKzE2ODcsMTQgQEAgUGFzc1JlZlB0cjxBdHRy
PiBFbGVtZW50OjpzZXRBdHRyaWJ1dGVOb2RlKEF0dHIqIGF0dHJOb2RlLCBFeGNlcHRpb25Db2Rl
JiBlYykKICAgICB9CiAKICAgICB1cGRhdGVJbnZhbGlkQXR0cmlidXRlcygpOwotICAgIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0gbXV0YWJsZUF0dHJpYnV0ZURhdGEoKTsK
KyAgICBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBlbnN1cmVVbmlxdWVFbGVtZW50RGF0YSgp
OwogCi0gICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbUlu
ZGV4KGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCkpOworICAgIHNpemVfdCBpbmRleCA9IGVsZW1l
bnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0ck5vZGUtPnF1YWxpZmllZE5hbWUoKSk7
CiAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKSB7CiAgICAgICAgIGlmIChvbGRBdHRyTm9kZSkK
LSAgICAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUob2xkQXR0ck5v
ZGUuZ2V0KCksIGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpKTsK
KyAgICAgICAgICAgIGRldGFjaEF0dHJOb2RlRnJvbUVsZW1lbnRXaXRoVmFsdWUob2xkQXR0ck5v
ZGUuZ2V0KCksIGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKSk7CiAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIG9sZEF0dHJOb2RlID0gQXR0cjo6Y3JlYXRlKGRvY3Vt
ZW50KCksIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCksIGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0
ZUl0ZW0oaW5kZXgpLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG9sZEF0dHJOb2RlID0gQXR0cjo6
Y3JlYXRlKGRvY3VtZW50KCksIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCksIGVsZW1lbnREYXRh
LT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKSk7CiAgICAgfQogCiAgICAgc2V0QXR0cmli
dXRlSW50ZXJuYWwoaW5kZXgsIGF0dHJOb2RlLT5xdWFsaWZpZWROYW1lKCksIGF0dHJOb2RlLT52
YWx1ZSgpLCBOb3RJblN5bmNocm9uaXphdGlvbk9mTGF6eUF0dHJpYnV0ZSk7CkBAIC0xNzIzLDEw
ICsxNzIzLDEwIEBAIFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlTm9k
ZShBdHRyKiBhdHRyLCBFeGNlcHRpb25Db2RlJiBlYykKIAogICAgIEFTU0VSVChkb2N1bWVudCgp
ID09IGF0dHItPmRvY3VtZW50KCkpOwogCi0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEq
IGF0dHJpYnV0ZURhdGEgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwotICAgIEFTU0VSVChhdHRy
aWJ1dGVEYXRhKTsKKyAgICBjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBlbGVtZW50
RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1dGVzKCk7CisgICAgQVNTRVJUKGVsZW1lbnREYXRh
KTsKIAotICAgIHNpemVfdCBpbmRleCA9IGF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW1J
bmRleChhdHRyLT5xdWFsaWZpZWROYW1lKCkpOworICAgIHNpemVfdCBpbmRleCA9IGVsZW1lbnRE
YXRhLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgoYXR0ci0+cXVhbGlmaWVkTmFtZSgpKTsKICAgICBp
ZiAoaW5kZXggPT0gbm90Rm91bmQpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAg
ICAgICByZXR1cm4gMDsKQEAgLTE3NjUsMTAgKzE3NjUsMTAgQEAgdm9pZCBFbGVtZW50OjpyZW1v
dmVBdHRyaWJ1dGVJbnRlcm5hbChzaXplX3QgaW5kZXgsIFN5bmNocm9uaXphdGlvbk9mTGF6eUF0
dHJpYnUKIHsKICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IGF0
dHJpYnV0ZUNvdW50KCkpOwogCi0gICAgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURh
dGEgPSBtdXRhYmxlQXR0cmlidXRlRGF0YSgpOworICAgIEVsZW1lbnREYXRhKiBlbGVtZW50RGF0
YSA9IGVuc3VyZVVuaXF1ZUVsZW1lbnREYXRhKCk7CiAKLSAgICBRdWFsaWZpZWROYW1lIG5hbWUg
PSBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+bmFtZSgpOwotICAgIEF0b21p
Y1N0cmluZyB2YWx1ZUJlaW5nUmVtb3ZlZCA9IGF0dHJpYnV0ZURhdGEtPmF0dHJpYnV0ZUl0ZW0o
aW5kZXgpLT52YWx1ZSgpOworICAgIFF1YWxpZmllZE5hbWUgbmFtZSA9IGVsZW1lbnREYXRhLT5h
dHRyaWJ1dGVJdGVtKGluZGV4KS0+bmFtZSgpOworICAgIEF0b21pY1N0cmluZyB2YWx1ZUJlaW5n
UmVtb3ZlZCA9IGVsZW1lbnREYXRhLT5hdHRyaWJ1dGVJdGVtKGluZGV4KS0+dmFsdWUoKTsKIAog
ICAgIGlmICghaW5TeW5jaHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpIHsKICAgICAgICAgaWYg
KCF2YWx1ZUJlaW5nUmVtb3ZlZC5pc051bGwoKSkKQEAgLTE3NzYsOSArMTc3Niw5IEBAIHZvaWQg
RWxlbWVudDo6cmVtb3ZlQXR0cmlidXRlSW50ZXJuYWwoc2l6ZV90IGluZGV4LCBTeW5jaHJvbml6
YXRpb25PZkxhenlBdHRyaWJ1CiAgICAgfQogCiAgICAgaWYgKFJlZlB0cjxBdHRyPiBhdHRyTm9k
ZSA9IGF0dHJJZkV4aXN0cyhuYW1lKSkKLSAgICAgICAgZGV0YWNoQXR0ck5vZGVGcm9tRWxlbWVu
dFdpdGhWYWx1ZShhdHRyTm9kZS5nZXQoKSwgYXR0cmlidXRlRGF0YS0+YXR0cmlidXRlSXRlbShp
bmRleCktPnZhbHVlKCkpOworICAgICAgICBkZXRhY2hBdHRyTm9kZUZyb21FbGVtZW50V2l0aFZh
bHVlKGF0dHJOb2RlLmdldCgpLCBlbGVtZW50RGF0YS0+YXR0cmlidXRlSXRlbShpbmRleCktPnZh
bHVlKCkpOwogCi0gICAgYXR0cmlidXRlRGF0YS0+cmVtb3ZlQXR0cmlidXRlKGluZGV4KTsKKyAg
ICBlbGVtZW50RGF0YS0+cmVtb3ZlQXR0cmlidXRlKGluZGV4KTsKIAogICAgIGlmICghaW5TeW5j
aHJvbml6YXRpb25PZkxhenlBdHRyaWJ1dGUpCiAgICAgICAgIGRpZFJlbW92ZUF0dHJpYnV0ZShu
YW1lKTsKQEAgLTE3ODgsMjAgKzE3ODgsMjAgQEAgdm9pZCBFbGVtZW50OjphZGRBdHRyaWJ1dGVJ
bnRlcm5hbChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBjb25zdCBBdG9taWNTdHJpbmcKIHsK
ICAgICBpZiAoIWluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogICAgICAgICB3aWxs
TW9kaWZ5QXR0cmlidXRlKG5hbWUsIG51bGxBdG9tLCB2YWx1ZSk7Ci0gICAgbXV0YWJsZUF0dHJp
YnV0ZURhdGEoKS0+YWRkQXR0cmlidXRlKEF0dHJpYnV0ZShuYW1lLCB2YWx1ZSkpOworICAgIGVu
c3VyZVVuaXF1ZUVsZW1lbnREYXRhKCktPmFkZEF0dHJpYnV0ZShBdHRyaWJ1dGUobmFtZSwgdmFs
dWUpKTsKICAgICBpZiAoIWluU3luY2hyb25pemF0aW9uT2ZMYXp5QXR0cmlidXRlKQogICAgICAg
ICBkaWRBZGRBdHRyaWJ1dGUobmFtZSwgdmFsdWUpOwogfQogCiB2b2lkIEVsZW1lbnQ6OnJlbW92
ZUF0dHJpYnV0ZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUpCiB7Ci0gICAgaWYgKCFhdHRyaWJ1
dGVEYXRhKCkpCisgICAgaWYgKCFlbGVtZW50RGF0YSgpKQogICAgICAgICByZXR1cm47CiAKICAg
ICBBdG9taWNTdHJpbmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlz
KSA/IG5hbWUubG93ZXIoKSA6IG5hbWU7Ci0gICAgc2l6ZV90IGluZGV4ID0gYXR0cmlidXRlRGF0
YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobG9jYWxOYW1lLCBmYWxzZSk7CisgICAgc2l6ZV90
IGluZGV4ID0gZWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbUluZGV4KGxvY2FsTmFtZSwg
ZmFsc2UpOwogICAgIGlmIChpbmRleCA9PSBub3RGb3VuZCkgewotICAgICAgICBpZiAoVU5MSUtF
TFkobG9jYWxOYW1lID09IHN0eWxlQXR0cikgJiYgYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0
cmlidXRlSXNEaXJ0eSAmJiBpc1N0eWxlZEVsZW1lbnQoKSkKKyAgICAgICAgaWYgKFVOTElLRUxZ
KGxvY2FsTmFtZSA9PSBzdHlsZUF0dHIpICYmIGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1
dGVJc0RpcnR5ICYmIGlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
U3R5bGVkRWxlbWVudCo+KHRoaXMpLT5yZW1vdmVBbGxJbmxpbmVTdHlsZVByb3BlcnRpZXMoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE4MTYsMTAgKzE4MTYsMTAgQEAgdm9pZCBFbGVt
ZW50OjpyZW1vdmVBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwg
Y29uc3QgQXRvbWljU3QKIAogUGFzc1JlZlB0cjxBdHRyPiBFbGVtZW50OjpnZXRBdHRyaWJ1dGVO
b2RlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSkKIHsKLSAgICBjb25zdCBFbGVtZW50QXR0cmli
dXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgaWYg
KCFhdHRyaWJ1dGVEYXRhKQorICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVs
ZW1lbnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWVsZW1lbnRE
YXRhKQogICAgICAgICByZXR1cm4gMDsKLSAgICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9
IGF0dHJpYnV0ZURhdGEtPmdldEF0dHJpYnV0ZUl0ZW0obmFtZSwgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSh0aGlzKSk7CisgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVtZW50
RGF0YS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKHRo
aXMpKTsKICAgICBpZiAoIWF0dHJpYnV0ZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgcmV0dXJu
IGVuc3VyZUF0dHIoYXR0cmlidXRlLT5uYW1lKCkpOwpAQCAtMTgyNywxMCArMTgyNywxMCBAQCBQ
YXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGUoY29uc3QgQXRvbWljU3Ry
aW5nJiBuYW1lKQogCiBQYXNzUmVmUHRyPEF0dHI+IEVsZW1lbnQ6OmdldEF0dHJpYnV0ZU5vZGVO
Uyhjb25zdCBBdG9taWNTdHJpbmcmIG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBs
b2NhbE5hbWUpCiB7Ci0gICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURh
dGEgPSB1cGRhdGVkQXR0cmlidXRlRGF0YSgpOwotICAgIGlmICghYXR0cmlidXRlRGF0YSkKKyAg
ICBjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBlbGVtZW50RGF0YVdpdGhTeW5jaHJv
bml6ZWRBdHRyaWJ1dGVzKCk7CisgICAgaWYgKCFlbGVtZW50RGF0YSkKICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVEYXRhLT5nZXRB
dHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNl
VVJJKSk7CisgICAgY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBlbGVtZW50RGF0YS0+Z2V0
QXR0cmlidXRlSXRlbShRdWFsaWZpZWROYW1lKG51bGxBdG9tLCBsb2NhbE5hbWUsIG5hbWVzcGFj
ZVVSSSkpOwogICAgIGlmICghYXR0cmlidXRlKQogICAgICAgICByZXR1cm4gMDsKICAgICByZXR1
cm4gZW5zdXJlQXR0cihhdHRyaWJ1dGUtPm5hbWUoKSk7CkBAIC0xODM4LDIxICsxODM4LDIxIEBA
IFBhc3NSZWZQdHI8QXR0cj4gRWxlbWVudDo6Z2V0QXR0cmlidXRlTm9kZU5TKGNvbnN0IEF0b21p
Y1N0cmluZyYgbmFtZXNwYWNlVVJJLCBjCiAKIGJvb2wgRWxlbWVudDo6aGFzQXR0cmlidXRlKGNv
bnN0IEF0b21pY1N0cmluZyYgbmFtZSkgY29uc3QKIHsKLSAgICBpZiAoIWF0dHJpYnV0ZURhdGEo
KSkKKyAgICBpZiAoIWVsZW1lbnREYXRhKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IC8vIFRoaXMgY2FsbCB0byBTdHJpbmc6Omxvd2VyKCkgc2VlbXMgdG8gYmUgcmVxdWlyZWQgYnV0
CiAgICAgLy8gdGhlcmUgbWF5IGJlIGEgd2F5IHRvIHJlbW92ZSBpdC4KICAgICBBdG9taWNTdHJp
bmcgbG9jYWxOYW1lID0gc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSh0aGlzKSA/IG5hbWUubG93
ZXIoKSA6IG5hbWU7Ci0gICAgcmV0dXJuIHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCktPmdldEF0dHJp
YnV0ZUl0ZW0obG9jYWxOYW1lLCBmYWxzZSk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRhV2l0aFN5
bmNocm9uaXplZEF0dHJpYnV0ZXMoKS0+Z2V0QXR0cmlidXRlSXRlbShsb2NhbE5hbWUsIGZhbHNl
KTsKIH0KIAogYm9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVOUyhjb25zdCBBdG9taWNTdHJpbmcm
IG5hbWVzcGFjZVVSSSwgY29uc3QgQXRvbWljU3RyaW5nJiBsb2NhbE5hbWUpIGNvbnN0CiB7Ci0g
ICAgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0dHJpYnV0ZURhdGEgPSB1cGRhdGVkQXR0
cmlidXRlRGF0YSgpOwotICAgIGlmICghYXR0cmlidXRlRGF0YSkKKyAgICBjb25zdCBFbGVtZW50
RGF0YSogZWxlbWVudERhdGEgPSBlbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRBdHRyaWJ1dGVz
KCk7CisgICAgaWYgKCFlbGVtZW50RGF0YSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJl
dHVybiBhdHRyaWJ1dGVEYXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0
b20sIGxvY2FsTmFtZSwgbmFtZXNwYWNlVVJJKSk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRhLT5n
ZXRBdHRyaWJ1dGVJdGVtKFF1YWxpZmllZE5hbWUobnVsbEF0b20sIGxvY2FsTmFtZSwgbmFtZXNw
YWNlVVJJKSk7CiB9CiAKIENTU1N0eWxlRGVjbGFyYXRpb24gKkVsZW1lbnQ6OnN0eWxlKCkKQEAg
LTIxNTksMTEgKzIxNTksMTEgQEAgQXRvbWljU3RyaW5nIEVsZW1lbnQ6OmNvbXB1dGVJbmhlcml0
ZWRMYW5ndWFnZSgpIGNvbnN0CiAgICAgLy8gVGhlIGxhbmd1YWdlIHByb3BlcnR5IGlzIGluaGVy
aXRlZCwgc28gd2UgaXRlcmF0ZSBvdmVyIHRoZSBwYXJlbnRzIHRvIGZpbmQgdGhlIGZpcnN0IGxh
bmd1YWdlLgogICAgIGRvIHsKICAgICAgICAgaWYgKG4tPmlzRWxlbWVudE5vZGUoKSkgewotICAg
ICAgICAgICAgaWYgKGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRhID0g
c3RhdGljX2Nhc3Q8Y29uc3QgRWxlbWVudCo+KG4pLT5hdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICAg
ICAgICAgIGlmIChjb25zdCBFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBzdGF0aWNfY2FzdDxj
b25zdCBFbGVtZW50Kj4obiktPmVsZW1lbnREYXRhKCkpIHsKICAgICAgICAgICAgICAgICAvLyBT
cGVjOiB4bWw6bGFuZyB0YWtlcyBwcmVjZWRlbmNlIC0tIGh0dHA6Ly93d3cudzMub3JnL1RSL3ho
dG1sMS8jQ183Ci0gICAgICAgICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRl
ID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmlidXRlSXRlbShYTUxOYW1lczo6bGFuZ0F0dHIpKQor
ICAgICAgICAgICAgICAgIGlmIChjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnRE
YXRhLT5nZXRBdHRyaWJ1dGVJdGVtKFhNTE5hbWVzOjpsYW5nQXR0cikpCiAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlID0gYXR0cmlidXRlLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gYXR0cmlidXRlRGF0YS0+Z2V0QXR0cmli
dXRlSXRlbShIVE1MTmFtZXM6OmxhbmdBdHRyKSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChj
b25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGVsZW1lbnREYXRhLT5nZXRBdHRyaWJ1dGVJdGVt
KEhUTUxOYW1lczo6bGFuZ0F0dHIpKQogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IGF0dHJp
YnV0ZS0+dmFsdWUoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChuLT5pc0Rv
Y3VtZW50Tm9kZSgpKSB7CkBAIC0yMzI3LDcgKzIzMjcsNyBAQCBET01TdHJpbmdNYXAqIEVsZW1l
bnQ6OmRhdGFzZXQoKQogS1VSTCBFbGVtZW50OjpnZXRVUkxBdHRyaWJ1dGUoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICNpZiAhQVNTRVJUX0RJU0FCTEVECi0gICAgaWYgKGF0
dHJpYnV0ZURhdGEoKSkgeworICAgIGlmIChlbGVtZW50RGF0YSgpKSB7CiAgICAgICAgIGlmIChj
b25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGdldEF0dHJpYnV0ZUl0ZW0obmFtZSkpCiAgICAg
ICAgICAgICBBU1NFUlQoaXNVUkxBdHRyaWJ1dGUoKmF0dHJpYnV0ZSkpOwogICAgIH0KQEAgLTIz
MzgsNyArMjMzOCw3IEBAIEtVUkwgRWxlbWVudDo6Z2V0VVJMQXR0cmlidXRlKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0CiBLVVJMIEVsZW1lbnQ6OmdldE5vbkVtcHR5VVJMQXR0cmli
dXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAjaWYgIUFTU0VSVF9ESVNB
QkxFRAotICAgIGlmIChhdHRyaWJ1dGVEYXRhKCkpIHsKKyAgICBpZiAoZWxlbWVudERhdGEoKSkg
ewogICAgICAgICBpZiAoY29uc3QgQXR0cmlidXRlKiBhdHRyaWJ1dGUgPSBnZXRBdHRyaWJ1dGVJ
dGVtKG5hbWUpKQogICAgICAgICAgICAgQVNTRVJUKGlzVVJMQXR0cmlidXRlKCphdHRyaWJ1dGUp
KTsKICAgICB9CkBAIC0yNzQ1LDggKzI3NDUsOCBAQCB2b2lkIEVsZW1lbnQ6OmNsb25lQXR0cmli
dXRlc0Zyb21FbGVtZW50KGNvbnN0IEVsZW1lbnQmIG90aGVyKQogICAgICAgICBkZXRhY2hBbGxB
dHRyTm9kZXNGcm9tRWxlbWVudCgpOwogCiAgICAgb3RoZXIudXBkYXRlSW52YWxpZEF0dHJpYnV0
ZXMoKTsKLSAgICBpZiAoIW90aGVyLm1fYXR0cmlidXRlRGF0YSkgewotICAgICAgICBtX2F0dHJp
YnV0ZURhdGEuY2xlYXIoKTsKKyAgICBpZiAoIW90aGVyLm1fZWxlbWVudERhdGEpIHsKKyAgICAg
ICAgbV9lbGVtZW50RGF0YS5jbGVhcigpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0y
NzYyLDIwICsyNzYyLDIwIEBAIHZvaWQgRWxlbWVudDo6Y2xvbmVBdHRyaWJ1dGVzRnJvbUVsZW1l
bnQoY29uc3QgRWxlbWVudCYgb3RoZXIpCiAgICAgaWYgKCFvbGROYW1lLmlzTnVsbCgpIHx8ICFu
ZXdOYW1lLmlzTnVsbCgpKQogICAgICAgICB1cGRhdGVOYW1lKG9sZE5hbWUsIG5ld05hbWUpOwog
Ci0gICAgLy8gSWYgJ290aGVyJyBoYXMgYSBtdXRhYmxlIEVsZW1lbnRBdHRyaWJ1dGVEYXRhLCBj
b252ZXJ0IGl0IHRvIGFuIGltbXV0YWJsZSBvbmUgc28gd2UgY2FuIHNoYXJlIGl0IGJldHdlZW4g
Ym90aCBlbGVtZW50cy4KKyAgICAvLyBJZiAnb3RoZXInIGhhcyBhIG11dGFibGUgRWxlbWVudERh
dGEsIGNvbnZlcnQgaXQgdG8gYW4gaW1tdXRhYmxlIG9uZSBzbyB3ZSBjYW4gc2hhcmUgaXQgYmV0
d2VlbiBib3RoIGVsZW1lbnRzLgogICAgIC8vIFdlIGNhbiBvbmx5IGRvIHRoaXMgaWYgdGhlcmUg
aXMgbm8gQ1NTT00gd3JhcHBlciBmb3Igb3RoZXIncyBpbmxpbmUgc3R5bGUsIGFuZCB0aGVyZSBh
cmUgbm8gcHJlc2VudGF0aW9uIGF0dHJpYnV0ZXMuCi0gICAgaWYgKG90aGVyLm1fYXR0cmlidXRl
RGF0YS0+aXNNdXRhYmxlKCkKLSAgICAgICAgJiYgIW90aGVyLm1fYXR0cmlidXRlRGF0YS0+cHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQotICAgICAgICAmJiAoIW90aGVyLm1fYXR0cmlidXRl
RGF0YS0+aW5saW5lU3R5bGUoKSB8fCAhb3RoZXIubV9hdHRyaWJ1dGVEYXRhLT5pbmxpbmVTdHls
ZSgpLT5oYXNDU1NPTVdyYXBwZXIoKSkpCi0gICAgICAgIGNvbnN0X2Nhc3Q8RWxlbWVudCY+KG90
aGVyKS5tX2F0dHJpYnV0ZURhdGEgPSBvdGhlci5tX2F0dHJpYnV0ZURhdGEtPm1ha2VJbW11dGFi
bGVDb3B5KCk7CisgICAgaWYgKG90aGVyLm1fZWxlbWVudERhdGEtPmlzVW5pcXVlKCkKKyAgICAg
ICAgJiYgIW90aGVyLm1fZWxlbWVudERhdGEtPnByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKCkK
KyAgICAgICAgJiYgKCFvdGhlci5tX2VsZW1lbnREYXRhLT5pbmxpbmVTdHlsZSgpIHx8ICFvdGhl
ci5tX2VsZW1lbnREYXRhLT5pbmxpbmVTdHlsZSgpLT5oYXNDU1NPTVdyYXBwZXIoKSkpCisgICAg
ICAgIGNvbnN0X2Nhc3Q8RWxlbWVudCY+KG90aGVyKS5tX2VsZW1lbnREYXRhID0gb3RoZXIubV9l
bGVtZW50RGF0YS0+bWFrZVNoYXJlYWJsZUNvcHkoKTsKIAotICAgIGlmICghb3RoZXIubV9hdHRy
aWJ1dGVEYXRhLT5pc011dGFibGUoKSkKLSAgICAgICAgbV9hdHRyaWJ1dGVEYXRhID0gb3RoZXIu
bV9hdHRyaWJ1dGVEYXRhOworICAgIGlmICghb3RoZXIubV9lbGVtZW50RGF0YS0+aXNVbmlxdWUo
KSkKKyAgICAgICAgbV9lbGVtZW50RGF0YSA9IG90aGVyLm1fZWxlbWVudERhdGE7CiAgICAgZWxz
ZQotICAgICAgICBtX2F0dHJpYnV0ZURhdGEgPSBvdGhlci5tX2F0dHJpYnV0ZURhdGEtPm1ha2VN
dXRhYmxlQ29weSgpOworICAgICAgICBtX2VsZW1lbnREYXRhID0gb3RoZXIubV9lbGVtZW50RGF0
YS0+bWFrZVVuaXF1ZUNvcHkoKTsKIAotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2F0
dHJpYnV0ZURhdGEtPmxlbmd0aCgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgQXR0cmlidXRlKiBh
dHRyaWJ1dGUgPSBjb25zdF9jYXN0PGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4obV9hdHRy
aWJ1dGVEYXRhLmdldCgpKS0+YXR0cmlidXRlSXRlbShpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbV9lbGVtZW50RGF0YS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICBjb25zdCBB
dHRyaWJ1dGUqIGF0dHJpYnV0ZSA9IGNvbnN0X2Nhc3Q8Y29uc3QgRWxlbWVudERhdGEqPihtX2Vs
ZW1lbnREYXRhLmdldCgpKS0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgYXR0cmlidXRlQ2hh
bmdlZChhdHRyaWJ1dGUtPm5hbWUoKSwgYXR0cmlidXRlLT52YWx1ZSgpKTsKICAgICB9CiB9CkBA
IC0yNzg2LDEyICsyNzg2LDEyIEBAIHZvaWQgRWxlbWVudDo6Y2xvbmVEYXRhRnJvbUVsZW1lbnQo
Y29uc3QgRWxlbWVudCYgb3RoZXIpCiAgICAgY29weU5vbkF0dHJpYnV0ZVByb3BlcnRpZXNGcm9t
RWxlbWVudChvdGhlcik7CiB9CiAKLXZvaWQgRWxlbWVudDo6Y3JlYXRlTXV0YWJsZUF0dHJpYnV0
ZURhdGEoKQordm9pZCBFbGVtZW50OjpjcmVhdGVVbmlxdWVFbGVtZW50RGF0YSgpCiB7Ci0gICAg
aWYgKCFtX2F0dHJpYnV0ZURhdGEpCi0gICAgICAgIG1fYXR0cmlidXRlRGF0YSA9IEVsZW1lbnRB
dHRyaWJ1dGVEYXRhOjpjcmVhdGUoKTsKKyAgICBpZiAoIW1fZWxlbWVudERhdGEpCisgICAgICAg
IG1fZWxlbWVudERhdGEgPSBFbGVtZW50RGF0YTo6Y3JlYXRlVW5pcXVlKCk7CiAgICAgZWxzZQot
ICAgICAgICBtX2F0dHJpYnV0ZURhdGEgPSBtX2F0dHJpYnV0ZURhdGEtPm1ha2VNdXRhYmxlQ29w
eSgpOworICAgICAgICBtX2VsZW1lbnREYXRhID0gbV9lbGVtZW50RGF0YS0+bWFrZVVuaXF1ZUNv
cHkoKTsKIH0KIAogdm9pZCBFbGVtZW50OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJ
bmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdApAQCAtMjc5OSw3ICsyNzk5LDcgQEAgdm9pZCBF
bGVtZW50OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJ
bmZvKSBjb25zdAogICAgIE1lbW9yeUNsYXNzSW5mbyBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRo
aXMsIFdlYkNvcmVNZW1vcnlUeXBlczo6RE9NKTsKICAgICBDb250YWluZXJOb2RlOjpyZXBvcnRN
ZW1vcnlVc2FnZShtZW1vcnlPYmplY3RJbmZvKTsKICAgICBpbmZvLmFkZE1lbWJlcihtX3RhZ05h
bWUsICJ0YWdOYW1lIik7Ci0gICAgaW5mby5hZGRNZW1iZXIobV9hdHRyaWJ1dGVEYXRhLCAiYXR0
cmlidXRlRGF0YSIpOworICAgIGluZm8uYWRkTWVtYmVyKG1fZWxlbWVudERhdGEsICJlbGVtZW50
RGF0YSIpOwogfQogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTI4MTksMTkgKzI4MTksMTkgQEAgdm9p
ZCBFbGVtZW50OjpjbGVhckhhc1BlbmRpbmdSZXNvdXJjZXMoKQogfQogI2VuZGlmCiAKLXZvaWQg
RWxlbWVudEF0dHJpYnV0ZURhdGE6OmRlcmVmKCkKK3ZvaWQgRWxlbWVudERhdGE6OmRlcmVmKCkK
IHsKICAgICBpZiAoIWRlcmVmQmFzZSgpKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9p
c011dGFibGUpCi0gICAgICAgIGRlbGV0ZSBzdGF0aWNfY2FzdDxNdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEqPih0aGlzKTsKKyAgICBpZiAobV9pc1VuaXF1ZSkKKyAgICAgICAgZGVsZXRlIHN0
YXRpY19jYXN0PFVuaXF1ZUVsZW1lbnREYXRhKj4odGhpcyk7CiAgICAgZWxzZQotICAgICAgICBk
ZWxldGUgc3RhdGljX2Nhc3Q8SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKTsK
KyAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PFNoYXJlYWJsZUVsZW1lbnREYXRhKj4odGhpcyk7
CiB9CiAKLUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpFbGVtZW50QXR0cmlidXRlRGF0YSgpCi0gICAg
OiBtX2lzTXV0YWJsZSh0cnVlKQorRWxlbWVudERhdGE6OkVsZW1lbnREYXRhKCkKKyAgICA6IG1f
aXNVbmlxdWUodHJ1ZSkKICAgICAsIG1fYXJyYXlTaXplKDApCiAgICAgLCBtX3ByZXNlbnRhdGlv
bkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eShmYWxzZSkKICAgICAsIG1fc3R5bGVBdHRyaWJ1dGVJc0Rp
cnR5KGZhbHNlKQpAQCAtMjg0MSw4ICsyODQxLDggQEAgRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVs
ZW1lbnRBdHRyaWJ1dGVEYXRhKCkKIHsKIH0KIAotRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVsZW1l
bnRBdHRyaWJ1dGVEYXRhKHVuc2lnbmVkIGFycmF5U2l6ZSkKLSAgICA6IG1faXNNdXRhYmxlKGZh
bHNlKQorRWxlbWVudERhdGE6OkVsZW1lbnREYXRhKHVuc2lnbmVkIGFycmF5U2l6ZSkKKyAgICA6
IG1faXNVbmlxdWUoZmFsc2UpCiAgICAgLCBtX2FycmF5U2l6ZShhcnJheVNpemUpCiAgICAgLCBt
X3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eShmYWxzZSkKICAgICAsIG1fc3R5bGVB
dHRyaWJ1dGVJc0RpcnR5KGZhbHNlKQpAQCAtMjg1Miw0NCArMjg1Miw0NCBAQCBFbGVtZW50QXR0
cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEodW5zaWduZWQgYXJyYXlTaXplKQogewog
fQogCi1zdHJ1Y3QgU2FtZVNpemVBc0VsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIFJlZkNv
dW50ZWQ8U2FtZVNpemVBc0VsZW1lbnRBdHRyaWJ1dGVEYXRhPiB7CitzdHJ1Y3QgU2FtZVNpemVB
c0VsZW1lbnREYXRhIDogcHVibGljIFJlZkNvdW50ZWQ8U2FtZVNpemVBc0VsZW1lbnREYXRhPiB7
CiAgICAgdW5zaWduZWQgYml0ZmllbGQ7CiAgICAgdm9pZCogcmVmUHRyc1szXTsKIH07CiAKLUNP
TVBJTEVfQVNTRVJUKHNpemVvZihFbGVtZW50QXR0cmlidXRlRGF0YSkgPT0gc2l6ZW9mKFNhbWVT
aXplQXNFbGVtZW50QXR0cmlidXRlRGF0YSksIGVsZW1lbnRfYXR0cmlidXRlX2RhdGFfc2hvdWxk
X3N0YXlfc21hbGwpOworQ09NUElMRV9BU1NFUlQoc2l6ZW9mKEVsZW1lbnREYXRhKSA9PSBzaXpl
b2YoU2FtZVNpemVBc0VsZW1lbnREYXRhKSwgZWxlbWVudF9hdHRyaWJ1dGVfZGF0YV9zaG91bGRf
c3RheV9zbWFsbCk7CiAKLXN0YXRpYyBzaXplX3Qgc2l6ZUZvckltbXV0YWJsZUVsZW1lbnRBdHRy
aWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KHVuc2lnbmVkIGNvdW50KQorc3RhdGljIHNpemVf
dCBzaXplRm9yU2hhcmVhYmxlRWxlbWVudERhdGFXaXRoQXR0cmlidXRlQ291bnQodW5zaWduZWQg
Y291bnQpCiB7Ci0gICAgcmV0dXJuIHNpemVvZihJbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0
YSkgLSBzaXplb2Yodm9pZCopICsgc2l6ZW9mKEF0dHJpYnV0ZSkgKiBjb3VudDsKKyAgICByZXR1
cm4gc2l6ZW9mKFNoYXJlYWJsZUVsZW1lbnREYXRhKSAtIHNpemVvZih2b2lkKikgKyBzaXplb2Yo
QXR0cmlidXRlKSAqIGNvdW50OwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRh
PiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlSW1tdXRhYmxlKGNvbnN0IFZlY3RvcjxBdHRy
aWJ1dGU+JiBhdHRyaWJ1dGVzKQorUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gRWxlbWVudERhdGE6
OmNyZWF0ZVNoYXJlYWJsZVdpdGhBdHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiBh
dHRyaWJ1dGVzKQogewotICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RNYWxsb2Moc2l6ZUZvcklt
bXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhV2l0aEF0dHJpYnV0ZUNvdW50KGF0dHJpYnV0ZXMu
c2l6ZSgpKSk7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoc2xvdCkgSW1tdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEoYXR0cmlidXRlcykpOworICAgIHZvaWQqIHNsb3QgPSBXVEY6OmZhc3RN
YWxsb2Moc2l6ZUZvclNoYXJlYWJsZUVsZW1lbnREYXRhV2l0aEF0dHJpYnV0ZUNvdW50KGF0dHJp
YnV0ZXMuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoc2xvdCkgU2hhcmVhYmxl
RWxlbWVudERhdGEoYXR0cmlidXRlcykpOwogfQogCi1QYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1
dGVEYXRhPiBFbGVtZW50QXR0cmlidXRlRGF0YTo6Y3JlYXRlKCkKK1Bhc3NSZWZQdHI8RWxlbWVu
dERhdGE+IEVsZW1lbnREYXRhOjpjcmVhdGVVbmlxdWUoKQogewotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
bmV3IFVuaXF1ZUVsZW1lbnREYXRhKTsKIH0KIAotSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURh
dGE6OkltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+
JiBhdHRyaWJ1dGVzKQotICAgIDogRWxlbWVudEF0dHJpYnV0ZURhdGEoYXR0cmlidXRlcy5zaXpl
KCkpCitTaGFyZWFibGVFbGVtZW50RGF0YTo6U2hhcmVhYmxlRWxlbWVudERhdGEoY29uc3QgVmVj
dG9yPEF0dHJpYnV0ZT4mIGF0dHJpYnV0ZXMpCisgICAgOiBFbGVtZW50RGF0YShhdHRyaWJ1dGVz
LnNpemUoKSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9hcnJheVNpemU7ICsr
aSkKICAgICAgICAgbmV3ICgmcmVpbnRlcnByZXRfY2FzdDxBdHRyaWJ1dGUqPigmbV9hdHRyaWJ1
dGVBcnJheSlbaV0pIEF0dHJpYnV0ZShhdHRyaWJ1dGVzW2ldKTsKIH0KIAotSW1tdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGE6On5JbW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSgpCitTaGFy
ZWFibGVFbGVtZW50RGF0YTo6flNoYXJlYWJsZUVsZW1lbnREYXRhKCkKIHsKICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9hcnJheVNpemU7ICsraSkKICAgICAgICAgKHJlaW50ZXJwcmV0
X2Nhc3Q8QXR0cmlidXRlKj4oJm1fYXR0cmlidXRlQXJyYXkpW2ldKS5+QXR0cmlidXRlKCk7CiB9
CiAKLUltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpJbW11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YShjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyKQotICAgIDog
RWxlbWVudEF0dHJpYnV0ZURhdGEob3RoZXIsIGZhbHNlKQorU2hhcmVhYmxlRWxlbWVudERhdGE6
OlNoYXJlYWJsZUVsZW1lbnREYXRhKGNvbnN0IFVuaXF1ZUVsZW1lbnREYXRhJiBvdGhlcikKKyAg
ICA6IEVsZW1lbnREYXRhKG90aGVyLCBmYWxzZSkKIHsKICAgICBBU1NFUlQoIW90aGVyLm1fcHJl
c2VudGF0aW9uQXR0cmlidXRlU3R5bGUpOwogCkBAIC0yOTAyLDkgKzI5MDIsOSBAQCBJbW11dGFi
bGVFbGVtZW50QXR0cmlidXRlRGF0YTo6SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29u
c3QgTXV0YWJsZUVsZW1lbgogICAgICAgICBuZXcgKCZyZWludGVycHJldF9jYXN0PEF0dHJpYnV0
ZSo+KCZtX2F0dHJpYnV0ZUFycmF5KVtpXSkgQXR0cmlidXRlKCpvdGhlci5hdHRyaWJ1dGVJdGVt
KGkpKTsKIH0KIAotRWxlbWVudEF0dHJpYnV0ZURhdGE6OkVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNv
bnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhJiBvdGhlciwgYm9vbCBpc011dGFibGUpCi0gICAgOiBt
X2lzTXV0YWJsZShpc011dGFibGUpCi0gICAgLCBtX2FycmF5U2l6ZShpc011dGFibGUgPyAwIDog
b3RoZXIubGVuZ3RoKCkpCitFbGVtZW50RGF0YTo6RWxlbWVudERhdGEoY29uc3QgRWxlbWVudERh
dGEmIG90aGVyLCBib29sIGlzVW5pcXVlKQorICAgIDogbV9pc1VuaXF1ZShpc1VuaXF1ZSkKKyAg
ICAsIG1fYXJyYXlTaXplKGlzVW5pcXVlID8gMCA6IG90aGVyLmxlbmd0aCgpKQogICAgICwgbV9w
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkob3RoZXIubV9wcmVzZW50YXRpb25BdHRy
aWJ1dGVTdHlsZUlzRGlydHkpCiAgICAgLCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0eShvdGhlci5t
X3N0eWxlQXR0cmlidXRlSXNEaXJ0eSkKICNpZiBFTkFCTEUoU1ZHKQpAQCAtMjkxNiwyMiArMjkx
NiwyMiBAQCBFbGVtZW50QXR0cmlidXRlRGF0YTo6RWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3Qg
RWxlbWVudEF0dHJpYnV0ZURhdGEmIG90aGVyLCBibwogICAgIC8vIE5PVEU6IFRoZSBpbmxpbmUg
c3R5bGUgaXMgY29waWVkIGJ5IHRoZSBzdWJjbGFzcyBjb3B5IGNvbnN0cnVjdG9yIHNpbmNlIHdl
IGRvbid0IGtub3cgd2hhdCB0byBkbyB3aXRoIGl0IGhlcmUuCiB9CiAKLU11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YTo6TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKCkKK1VuaXF1ZUVsZW1l
bnREYXRhOjpVbmlxdWVFbGVtZW50RGF0YSgpCiB7CiB9CiAKLU11dGFibGVFbGVtZW50QXR0cmli
dXRlRGF0YTo6TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IE11dGFibGVFbGVtZW50
QXR0cmlidXRlRGF0YSYgb3RoZXIpCi0gICAgOiBFbGVtZW50QXR0cmlidXRlRGF0YShvdGhlciwg
dHJ1ZSkKK1VuaXF1ZUVsZW1lbnREYXRhOjpVbmlxdWVFbGVtZW50RGF0YShjb25zdCBVbmlxdWVF
bGVtZW50RGF0YSYgb3RoZXIpCisgICAgOiBFbGVtZW50RGF0YShvdGhlciwgdHJ1ZSkKICAgICAs
IG1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUob3RoZXIubV9wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSkKICAgICAsIG1fYXR0cmlidXRlVmVjdG9yKG90aGVyLm1fYXR0cmlidXRlVmVjdG9y
KQogewogICAgIG1faW5saW5lU3R5bGUgPSBvdGhlci5tX2lubGluZVN0eWxlID8gb3RoZXIubV9p
bmxpbmVTdHlsZS0+Y29weSgpIDogMDsKIH0KIAotTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRh
OjpNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJp
YnV0ZURhdGEmIG90aGVyKQotICAgIDogRWxlbWVudEF0dHJpYnV0ZURhdGEob3RoZXIsIHRydWUp
CitVbmlxdWVFbGVtZW50RGF0YTo6VW5pcXVlRWxlbWVudERhdGEoY29uc3QgU2hhcmVhYmxlRWxl
bWVudERhdGEmIG90aGVyKQorICAgIDogRWxlbWVudERhdGEob3RoZXIsIHRydWUpCiB7Ci0gICAg
Ly8gQW4gSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEgc2hvdWxkIG5ldmVyIGhhdmUgYSBt
dXRhYmxlIGlubGluZSBTdHlsZVByb3BlcnR5U2V0IGF0dGFjaGVkLgorICAgIC8vIEFuIFNoYXJl
YWJsZUVsZW1lbnREYXRhIHNob3VsZCBuZXZlciBoYXZlIGEgbXV0YWJsZSBpbmxpbmUgU3R5bGVQ
cm9wZXJ0eVNldCBhdHRhY2hlZC4KICAgICBBU1NFUlQoIW90aGVyLm1faW5saW5lU3R5bGUgfHwg
IW90aGVyLm1faW5saW5lU3R5bGUtPmlzTXV0YWJsZSgpKTsKICAgICBtX2lubGluZVN0eWxlID0g
b3RoZXIubV9pbmxpbmVTdHlsZTsKIApAQCAtMjk0MCw0MCArMjk0MCw0MCBAQCBNdXRhYmxlRWxl
bWVudEF0dHJpYnV0ZURhdGE6Ok11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBJbW11
dGFibGVFbGVtZW50QQogICAgICAgICBtX2F0dHJpYnV0ZVZlY3Rvci51bmNoZWNrZWRBcHBlbmQo
b3RoZXIuaW1tdXRhYmxlQXR0cmlidXRlQXJyYXkoKVtpXSk7CiB9CiAKLVBhc3NSZWZQdHI8RWxl
bWVudEF0dHJpYnV0ZURhdGE+IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptYWtlTXV0YWJsZUNvcHko
KSBjb25zdAorUGFzc1JlZlB0cjxFbGVtZW50RGF0YT4gRWxlbWVudERhdGE6Om1ha2VVbmlxdWVD
b3B5KCkgY29uc3QKIHsKLSAgICBpZiAoaXNNdXRhYmxlKCkpCi0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IE11
dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSY+KCp0aGlzKSkpOwotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IEltbXV0
YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhJj4oKnRoaXMpKSk7CisgICAgaWYgKGlzVW5pcXVlKCkp
CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgVW5pcXVlRWxlbWVudERhdGEoc3RhdGljX2Nh
c3Q8Y29uc3QgVW5pcXVlRWxlbWVudERhdGEmPigqdGhpcykpKTsKKyAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFVuaXF1ZUVsZW1lbnREYXRhKHN0YXRpY19jYXN0PGNvbnN0IFNoYXJlYWJsZUVsZW1l
bnREYXRhJj4oKnRoaXMpKSk7CiB9CiAKLVBhc3NSZWZQdHI8RWxlbWVudEF0dHJpYnV0ZURhdGE+
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjptYWtlSW1tdXRhYmxlQ29weSgpIGNvbnN0CitQYXNzUmVm
UHRyPEVsZW1lbnREYXRhPiBFbGVtZW50RGF0YTo6bWFrZVNoYXJlYWJsZUNvcHkoKSBjb25zdAog
ewotICAgIEFTU0VSVChpc011dGFibGUoKSk7Ci0gICAgdm9pZCogc2xvdCA9IFdURjo6ZmFzdE1h
bGxvYyhzaXplRm9ySW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGFXaXRoQXR0cmlidXRlQ291
bnQobXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLnNpemUoKSkpOwotICAgIHJldHVybiBhZG9wdFJl
ZihuZXcgKHNsb3QpIEltbXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKHN0YXRpY19jYXN0PGNv
bnN0IE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YSY+KCp0aGlzKSkpOworICAgIEFTU0VSVChp
c1VuaXF1ZSgpKTsKKyAgICB2b2lkKiBzbG90ID0gV1RGOjpmYXN0TWFsbG9jKHNpemVGb3JTaGFy
ZWFibGVFbGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVDb3VudChtdXRhYmxlQXR0cmlidXRlVmVjdG9y
KCkuc2l6ZSgpKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAoc2xvdCkgU2hhcmVhYmxlRWxl
bWVudERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgVW5pcXVlRWxlbWVudERhdGEmPigqdGhpcykpKTsK
IH0KIAotdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6c2V0UHJlc2VudGF0aW9uQXR0cmlidXRl
U3R5bGUoUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBzdHlsZSkgY29uc3QKK3ZvaWQgRWxl
bWVudERhdGE6OnNldFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKFBhc3NSZWZQdHI8U3R5bGVQ
cm9wZXJ0eVNldD4gc3R5bGUpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAg
ICBzdGF0aWNfY2FzdDxjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+
bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSA9IHN0eWxlOworICAgIEFTU0VSVChtX2lzVW5p
cXVlKTsKKyAgICBzdGF0aWNfY2FzdDxjb25zdCBVbmlxdWVFbGVtZW50RGF0YSo+KHRoaXMpLT5t
X3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlID0gc3R5bGU7CiB9CiAKLXZvaWQgRWxlbWVudEF0
dHJpYnV0ZURhdGE6OmFkZEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkKK3Zv
aWQgRWxlbWVudERhdGE6OmFkZEF0dHJpYnV0ZShjb25zdCBBdHRyaWJ1dGUmIGF0dHJpYnV0ZSkK
IHsKLSAgICBBU1NFUlQoaXNNdXRhYmxlKCkpOworICAgIEFTU0VSVChpc1VuaXF1ZSgpKTsKICAg
ICBtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuYXBwZW5kKGF0dHJpYnV0ZSk7CiB9CiAKLXZvaWQg
RWxlbWVudEF0dHJpYnV0ZURhdGE6OnJlbW92ZUF0dHJpYnV0ZShzaXplX3QgaW5kZXgpCit2b2lk
IEVsZW1lbnREYXRhOjpyZW1vdmVBdHRyaWJ1dGUoc2l6ZV90IGluZGV4KQogewotICAgIEFTU0VS
VChpc011dGFibGUoKSk7CisgICAgQVNTRVJUKGlzVW5pcXVlKCkpOwogICAgIEFTU0VSVF9XSVRI
X1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOwogICAgIG11dGFibGVBdHRy
aWJ1dGVWZWN0b3IoKS5yZW1vdmUoaW5kZXgpOwogfQogCi1ib29sIEVsZW1lbnRBdHRyaWJ1dGVE
YXRhOjppc0VxdWl2YWxlbnQoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIG90aGVyKSBjb25z
dAorYm9vbCBFbGVtZW50RGF0YTo6aXNFcXVpdmFsZW50KGNvbnN0IEVsZW1lbnREYXRhKiBvdGhl
cikgY29uc3QKIHsKICAgICBpZiAoIW90aGVyKQogICAgICAgICByZXR1cm4gaXNFbXB0eSgpOwpA
QCAtMjk5MiwxNCArMjk5MiwxNCBAQCBib29sIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppc0VxdWl2
YWxlbnQoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIG90aGVyKSBjb25zdAogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpyZXBvcnRNZW1vcnlVc2Fn
ZShNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZvKSBjb25zdAordm9pZCBFbGVtZW50
RGF0YTo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5m
bykgY29uc3QKIHsKLSAgICBzaXplX3QgYWN0dWFsU2l6ZSA9IG1faXNNdXRhYmxlID8gc2l6ZW9m
KEVsZW1lbnRBdHRyaWJ1dGVEYXRhKSA6IHNpemVGb3JJbW11dGFibGVFbGVtZW50QXR0cmlidXRl
RGF0YVdpdGhBdHRyaWJ1dGVDb3VudChtX2FycmF5U2l6ZSk7CisgICAgc2l6ZV90IGFjdHVhbFNp
emUgPSBtX2lzVW5pcXVlID8gc2l6ZW9mKEVsZW1lbnREYXRhKSA6IHNpemVGb3JTaGFyZWFibGVF
bGVtZW50RGF0YVdpdGhBdHRyaWJ1dGVDb3VudChtX2FycmF5U2l6ZSk7CiAgICAgTWVtb3J5Q2xh
c3NJbmZvIGluZm8obWVtb3J5T2JqZWN0SW5mbywgdGhpcywgV2ViQ29yZU1lbW9yeVR5cGVzOjpE
T00sIGFjdHVhbFNpemUpOwogICAgIGluZm8uYWRkTWVtYmVyKG1faW5saW5lU3R5bGUsICJpbmxp
bmVTdHlsZSIpOwogICAgIGluZm8uYWRkTWVtYmVyKG1fY2xhc3NOYW1lcywgImNsYXNzTmFtZXMi
KTsKICAgICBpbmZvLmFkZE1lbWJlcihtX2lkRm9yU3R5bGVSZXNvbHV0aW9uLCAiaWRGb3JTdHls
ZVJlc29sdXRpb24iKTsKLSAgICBpZiAobV9pc011dGFibGUpIHsKKyAgICBpZiAobV9pc1VuaXF1
ZSkgewogICAgICAgICBpbmZvLmFkZE1lbWJlcihwcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgp
LCAicHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSIpOwogICAgICAgICBpbmZvLmFkZE1lbWJl
cihtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCksICJtdXRhYmxlQXR0cmlidXRlVmVjdG9yIik7CiAg
ICAgfQpAQCAtMzAwNyw3ICszMDA3LDcgQEAgdm9pZCBFbGVtZW50QXR0cmlidXRlRGF0YTo6cmVw
b3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2JqZWN0SW5mbykKICAgICAg
ICAgaW5mby5hZGRNZW1iZXIoKmF0dHJpYnV0ZUl0ZW0oaSksICIqYXR0cmlidXRlSXRlbSIpOwog
fQogCi1zaXplX3QgRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW1JbmRleFNs
b3dDYXNlKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKSBjb25zdAorc2l6ZV90IEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXhT
bG93Q2FzZShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSkgY29uc3QKIHsKICAgICAvLyBDb250aW51ZSB0byBjaGVja2luZyBjYXNlLWluc2Vu
c2l0aXZlbHkgYW5kL29yIGZ1bGwgbmFtZXNwYWNlZCBuYW1lcyBpZiBuZWNlc3Nhcnk6CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kpIHsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
CmluZGV4IDUzZDNiZTYuLmM4MDY3YTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuaApAQCAtNDMsMjAgKzQz
LDIwIEBAIGNsYXNzIERPTVRva2VuTGlzdDsKIGNsYXNzIEVsZW1lbnQ7CiBjbGFzcyBFbGVtZW50
UmFyZURhdGE7CiBjbGFzcyBFbGVtZW50U2hhZG93OwotY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0
dHJpYnV0ZURhdGE7CitjbGFzcyBTaGFyZWFibGVFbGVtZW50RGF0YTsKIGNsYXNzIEludFNpemU7
CiBjbGFzcyBMb2NhbGU7Ci1jbGFzcyBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7CitjbGFz
cyBVbmlxdWVFbGVtZW50RGF0YTsKIGNsYXNzIFBzZXVkb0VsZW1lbnQ7CiBjbGFzcyBSZW5kZXJS
ZWdpb247CiBjbGFzcyBTaGFkb3dSb290OwogY2xhc3MgU3R5bGVQcm9wZXJ0eVNldDsKIAotY2xh
c3MgRWxlbWVudEF0dHJpYnV0ZURhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxFbGVtZW50QXR0cmli
dXRlRGF0YT4geworY2xhc3MgRWxlbWVudERhdGEgOiBwdWJsaWMgUmVmQ291bnRlZDxFbGVtZW50
RGF0YT4gewogICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPEVsZW1lbnRBdHRyaWJ1dGVEYXRhPiBjcmVhdGUoKTsKLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gY3JlYXRlSW1tdXRhYmxlKGNvbnN0IFZl
Y3RvcjxBdHRyaWJ1dGU+Jik7CisgICAgc3RhdGljIFBhc3NSZWZQdHI8RWxlbWVudERhdGE+IGNy
ZWF0ZVVuaXF1ZSgpOworICAgIHN0YXRpYyBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBjcmVhdGVT
aGFyZWFibGVXaXRoQXR0cmlidXRlcyhjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYpOwogCiAgICAg
Ly8gT3ZlcnJpZGUgUmVmQ291bnRlZCdzIGRlcmVmKCkgdG8gZW5zdXJlIG9wZXJhdG9yIGRlbGV0
ZSBpcyBjYWxsZWQgb24KICAgICAvLyB0aGUgYXBwcm9wcmlhdGUgc3ViY2xhc3MgdHlwZS4KQEAg
LTkxLDE5ICs5MSwxOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNJRCgpIGNvbnN0IHsgcmV0dXJu
ICFtX2lkRm9yU3R5bGVSZXNvbHV0aW9uLmlzTnVsbCgpOyB9CiAgICAgYm9vbCBoYXNDbGFzcygp
IGNvbnN0IHsgcmV0dXJuICFtX2NsYXNzTmFtZXMuaXNOdWxsKCk7IH0KIAotICAgIGJvb2wgaXNF
cXVpdmFsZW50KGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBvdGhlcikgY29uc3Q7CisgICAg
Ym9vbCBpc0VxdWl2YWxlbnQoY29uc3QgRWxlbWVudERhdGEqIG90aGVyKSBjb25zdDsKIAogICAg
IHZvaWQgcmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyopIGNvbnN0OwogCi0gICAg
Ym9vbCBpc011dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2lzTXV0YWJsZTsgfQorICAgIGJvb2wg
aXNVbmlxdWUoKSBjb25zdCB7IHJldHVybiBtX2lzVW5pcXVlOyB9CiAgICAgY29uc3QgQXR0cmli
dXRlKiBpbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpIGNvbnN0OwogCiBwcm90ZWN0ZWQ6Ci0gICAg
RWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKLSAgICBFbGVtZW50QXR0cmlidXRlRGF0YSh1bnNpZ25l
ZCBhcnJheVNpemUpOwotICAgIEVsZW1lbnRBdHRyaWJ1dGVEYXRhKGNvbnN0IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhJiwgYm9vbCBpc011dGFibGUpOworICAgIEVsZW1lbnREYXRhKCk7CisgICAgRWxl
bWVudERhdGEodW5zaWduZWQgYXJyYXlTaXplKTsKKyAgICBFbGVtZW50RGF0YShjb25zdCBFbGVt
ZW50RGF0YSYsIGJvb2wgaXNVbmlxdWUpOwogCi0gICAgdW5zaWduZWQgbV9pc011dGFibGUgOiAx
OworICAgIHVuc2lnbmVkIG1faXNVbmlxdWUgOiAxOwogICAgIHVuc2lnbmVkIG1fYXJyYXlTaXpl
IDogMjg7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxl
SXNEaXJ0eSA6IDE7CiAgICAgbXV0YWJsZSB1bnNpZ25lZCBtX3N0eWxlQXR0cmlidXRlSXNEaXJ0
eSA6IDE7CkBAIC0xMTgsOCArMTE4LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgRWxlbWVudDsKICAgICBmcmllbmQgY2xhc3MgU3R5bGVkRWxlbWVudDsKLSAgICBm
cmllbmQgY2xhc3MgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGE7Ci0gICAgZnJpZW5kIGNs
YXNzIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YTsKKyAgICBmcmllbmQgY2xhc3MgU2hhcmVh
YmxlRWxlbWVudERhdGE7CisgICAgZnJpZW5kIGNsYXNzIFVuaXF1ZUVsZW1lbnREYXRhOwogI2lm
IEVOQUJMRShTVkcpCiAgICAgZnJpZW5kIGNsYXNzIFNWR0VsZW1lbnQ7CiAjZW5kaWYKQEAgLTEy
OCwyNyArMTI4LDI3IEBAIHByaXZhdGU6CiAgICAgY29uc3QgQXR0cmlidXRlKiBnZXRBdHRyaWJ1
dGVJdGVtKGNvbnN0IEF0b21pY1N0cmluZyYgbmFtZSwgYm9vbCBzaG91bGRJZ25vcmVBdHRyaWJ1
dGVDYXNlKSBjb25zdDsKICAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4U2xvd0Nhc2Uo
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
IGNvbnN0OwogCi0gICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gbWFrZU11dGFi
bGVDb3B5KCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gbWFr
ZUltbXV0YWJsZUNvcHkoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEVsZW1lbnREYXRhPiBtYWtl
VW5pcXVlQ29weSgpIGNvbnN0OworICAgIFBhc3NSZWZQdHI8RWxlbWVudERhdGE+IG1ha2VTaGFy
ZWFibGVDb3B5KCkgY29uc3Q7CiAKICAgICBWZWN0b3I8QXR0cmlidXRlLCA0PiYgbXV0YWJsZUF0
dHJpYnV0ZVZlY3RvcigpOwogICAgIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBtdXRhYmxl
QXR0cmlidXRlVmVjdG9yKCkgY29uc3Q7CiB9OwogCi1jbGFzcyBJbW11dGFibGVFbGVtZW50QXR0
cmlidXRlRGF0YSA6IHB1YmxpYyBFbGVtZW50QXR0cmlidXRlRGF0YSB7CitjbGFzcyBTaGFyZWFi
bGVFbGVtZW50RGF0YSA6IHB1YmxpYyBFbGVtZW50RGF0YSB7CiBwdWJsaWM6Ci0gICAgSW1tdXRh
YmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgVmVjdG9yPEF0dHJpYnV0ZT4mKTsKLSAgICBJ
bW11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YShjb25zdCBNdXRhYmxlRWxlbWVudEF0dHJpYnV0
ZURhdGEmKTsKLSAgICB+SW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKKyAgICBTaGFy
ZWFibGVFbGVtZW50RGF0YShjb25zdCBWZWN0b3I8QXR0cmlidXRlPiYpOworICAgIFNoYXJlYWJs
ZUVsZW1lbnREYXRhKGNvbnN0IFVuaXF1ZUVsZW1lbnREYXRhJik7CisgICAgflNoYXJlYWJsZUVs
ZW1lbnREYXRhKCk7CiAKICAgICB2b2lkKiBtX2F0dHJpYnV0ZUFycmF5OwogfTsKIAotY2xhc3Mg
TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhIDogcHVibGljIEVsZW1lbnRBdHRyaWJ1dGVEYXRh
IHsKK2NsYXNzIFVuaXF1ZUVsZW1lbnREYXRhIDogcHVibGljIEVsZW1lbnREYXRhIHsKIHB1Ymxp
YzoKLSAgICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoKTsKLSAgICBNdXRhYmxlRWxlbWVu
dEF0dHJpYnV0ZURhdGEoY29uc3QgSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEmKTsKLSAg
ICBNdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEoY29uc3QgTXV0YWJsZUVsZW1lbnRBdHRyaWJ1
dGVEYXRhJik7CisgICAgVW5pcXVlRWxlbWVudERhdGEoKTsKKyAgICBVbmlxdWVFbGVtZW50RGF0
YShjb25zdCBTaGFyZWFibGVFbGVtZW50RGF0YSYpOworICAgIFVuaXF1ZUVsZW1lbnREYXRhKGNv
bnN0IFVuaXF1ZUVsZW1lbnREYXRhJik7CiAKICAgICBtdXRhYmxlIFJlZlB0cjxTdHlsZVByb3Bl
cnR5U2V0PiBtX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlOwogICAgIFZlY3RvcjxBdHRyaWJ1
dGUsIDQ+IG1fYXR0cmlidXRlVmVjdG9yOwpAQCAtMjg2LDggKzI4Niw4IEBAIHB1YmxpYzoKICAg
ICBjb25zdCBBdHRyaWJ1dGUqIGF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0Owog
ICAgIGNvbnN0IEF0dHJpYnV0ZSogZ2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1l
JikgY29uc3Q7CiAgICAgQXR0cmlidXRlKiBnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmll
ZE5hbWUmKTsKLSAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKS0+Z2V0QXR0cmlidXRl
SXRlbUluZGV4KG5hbWUpOyB9Ci0gICAgc2l6ZV90IGdldEF0dHJpYnV0ZUl0ZW1JbmRleChjb25z
dCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkgY29u
c3QgeyByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSwg
c2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7IH0KKyAgICBzaXplX3QgZ2V0QXR0cmlidXRlSXRl
bUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0IHsgcmV0dXJuIGVsZW1lbnRE
YXRhKCktPmdldEF0dHJpYnV0ZUl0ZW1JbmRleChuYW1lKTsgfQorICAgIHNpemVfdCBnZXRBdHRy
aWJ1dGVJdGVtSW5kZXgoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UpIGNvbnN0IHsgcmV0dXJuIGVsZW1lbnREYXRhKCktPmdldEF0dHJpYnV0
ZUl0ZW1JbmRleChuYW1lLCBzaG91bGRJZ25vcmVBdHRyaWJ1dGVDYXNlKTsgfQogCiAgICAgdm9p
ZCBzY3JvbGxJbnRvVmlldyhib29sIGFsaWduVG9Ub3AgPSB0cnVlKTsKICAgICB2b2lkIHNjcm9s
bEludG9WaWV3SWZOZWVkZWQoYm9vbCBjZW50ZXJJZk5lZWRlZCA9IHRydWUpOwpAQCAtMzcxLDEw
ICszNzEsMTAgQEAgcHVibGljOgogICAgIC8vIE9ubHkgY2FsbGVkIGJ5IHRoZSBwYXJzZXIgaW1t
ZWRpYXRlbHkgYWZ0ZXIgZWxlbWVudCBjb25zdHJ1Y3Rpb24uCiAgICAgdm9pZCBwYXJzZXJTZXRB
dHRyaWJ1dGVzKGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGU+JiwgRnJhZ21lbnRTY3JpcHRpbmdQZXJt
aXNzaW9uKTsKIAotICAgIGNvbnN0IEVsZW1lbnRBdHRyaWJ1dGVEYXRhKiBhdHRyaWJ1dGVEYXRh
KCkgY29uc3QgeyByZXR1cm4gbV9hdHRyaWJ1dGVEYXRhLmdldCgpOyB9Ci0gICAgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIG11dGFibGVBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgY29uc3QgRWxlbWVudEF0
dHJpYnV0ZURhdGEqIHVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3Q7Ci0gICAgY29uc3QgRWxl
bWVudEF0dHJpYnV0ZURhdGEqIGVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3Q7Cisg
ICAgY29uc3QgRWxlbWVudERhdGEqIGVsZW1lbnREYXRhKCkgY29uc3QgeyByZXR1cm4gbV9lbGVt
ZW50RGF0YS5nZXQoKTsgfQorICAgIEVsZW1lbnREYXRhKiBlbnN1cmVVbmlxdWVFbGVtZW50RGF0
YSgpOworICAgIGNvbnN0IEVsZW1lbnREYXRhKiBlbGVtZW50RGF0YVdpdGhTeW5jaHJvbml6ZWRB
dHRyaWJ1dGVzKCkgY29uc3Q7CisgICAgY29uc3QgRWxlbWVudERhdGEqIGVuc3VyZUVsZW1lbnRE
YXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKSBjb25zdDsKIAogICAgIC8vIENsb25lcyBh
dHRyaWJ1dGVzIG9ubHkuCiAgICAgdm9pZCBjbG9uZUF0dHJpYnV0ZXNGcm9tRWxlbWVudChjb25z
dCBFbGVtZW50Jik7CkBAIC03MDUsNyArNzA1LDcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgdW5y
ZWdpc3Rlck5hbWVkRmxvd0NvbnRlbnROb2RlKCk7CiAKLSAgICB2b2lkIGNyZWF0ZU11dGFibGVB
dHRyaWJ1dGVEYXRhKCk7CisgICAgdm9pZCBjcmVhdGVVbmlxdWVFbGVtZW50RGF0YSgpOwogCiAg
ICAgYm9vbCBzaG91bGRJbnZhbGlkYXRlRGlzdHJpYnV0aW9uV2hlbkF0dHJpYnV0ZUNoYW5nZWQo
RWxlbWVudFNoYWRvdyosIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBBdG9taWNTdHJpbmcm
KTsKIApAQCAtNzE3LDcgKzcxNyw3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGNyZWF0ZVJlbmRl
cmVySWZOZWVkZWQoKTsKIAotICAgIFJlZlB0cjxFbGVtZW50QXR0cmlidXRlRGF0YT4gbV9hdHRy
aWJ1dGVEYXRhOworICAgIFJlZlB0cjxFbGVtZW50RGF0YT4gbV9lbGVtZW50RGF0YTsKIH07CiAg
ICAgCiBpbmxpbmUgRWxlbWVudCogdG9FbGVtZW50KE5vZGUqIG5vZGUpCkBAIC03NzcsMTggKzc3
NywxOCBAQCBpbmxpbmUgRWxlbWVudCogRWxlbWVudDo6bmV4dEVsZW1lbnRTaWJsaW5nKCkgY29u
c3QKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8RWxlbWVudCo+KG4pOwogfQogCi1pbmxpbmUgY29u
c3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIEVsZW1lbnQ6OnVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkg
Y29uc3QKK2lubGluZSBjb25zdCBFbGVtZW50RGF0YSogRWxlbWVudDo6ZWxlbWVudERhdGFXaXRo
U3luY2hyb25pemVkQXR0cmlidXRlcygpIGNvbnN0CiB7CiAgICAgdXBkYXRlSW52YWxpZEF0dHJp
YnV0ZXMoKTsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpOworICAgIHJldHVybiBlbGVtZW50
RGF0YSgpOwogfQogCi1pbmxpbmUgY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIEVsZW1lbnQ6
OmVuc3VyZVVwZGF0ZWRBdHRyaWJ1dGVEYXRhKCkgY29uc3QKK2lubGluZSBjb25zdCBFbGVtZW50
RGF0YSogRWxlbWVudDo6ZW5zdXJlRWxlbWVudERhdGFXaXRoU3luY2hyb25pemVkQXR0cmlidXRl
cygpIGNvbnN0CiB7CiAgICAgdXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKTsKLSAgICBpZiAoYXR0
cmlidXRlRGF0YSgpKQotICAgICAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpOwotICAgIHJldHVy
biBjb25zdF9jYXN0PEVsZW1lbnQqPih0aGlzKS0+bXV0YWJsZUF0dHJpYnV0ZURhdGEoKTsKKyAg
ICBpZiAoZWxlbWVudERhdGEoKSkKKyAgICAgICAgcmV0dXJuIGVsZW1lbnREYXRhKCk7CisgICAg
cmV0dXJuIGNvbnN0X2Nhc3Q8RWxlbWVudCo+KHRoaXMpLT5lbnN1cmVVbmlxdWVFbGVtZW50RGF0
YSgpOwogfQogCiBpbmxpbmUgdm9pZCBFbGVtZW50Ojp1cGRhdGVOYW1lKGNvbnN0IEF0b21pY1N0
cmluZyYgb2xkTmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJiBuZXdOYW1lKQpAQCAtODMxLDEzICs4
MzEsMTMgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6dXBkYXRlSWQoVHJlZVNjb3BlKiBzY29wZSwg
Y29uc3QgQXRvbWljU3RyaW5nJiBvbGRJZCwgY29uc3QKIGlubGluZSBib29sIEVsZW1lbnQ6OmZh
c3RIYXNBdHRyaWJ1dGUoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBB
U1NFUlQoZmFzdEF0dHJpYnV0ZUxvb2t1cEFsbG93ZWQobmFtZSkpOwotICAgIHJldHVybiBhdHRy
aWJ1dGVEYXRhKCkgJiYgZ2V0QXR0cmlidXRlSXRlbShuYW1lKTsKKyAgICByZXR1cm4gZWxlbWVu
dERhdGEoKSAmJiBnZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOwogfQogCiBpbmxpbmUgY29uc3QgQXRv
bWljU3RyaW5nJiBFbGVtZW50OjpmYXN0R2V0QXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUm
IG5hbWUpIGNvbnN0CiB7CiAgICAgQVNTRVJUKGZhc3RBdHRyaWJ1dGVMb29rdXBBbGxvd2VkKG5h
bWUpKTsKLSAgICBpZiAoYXR0cmlidXRlRGF0YSgpKSB7CisgICAgaWYgKGVsZW1lbnREYXRhKCkp
IHsKICAgICAgICAgaWYgKGNvbnN0IEF0dHJpYnV0ZSogYXR0cmlidXRlID0gZ2V0QXR0cmlidXRl
SXRlbShuYW1lKSkKICAgICAgICAgICAgIHJldHVybiBhdHRyaWJ1dGUtPnZhbHVlKCk7CiAgICAg
fQpAQCAtODQ2LDEzICs4NDYsMTMgQEAgaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVu
dDo6ZmFzdEdldEF0dHJpYnV0ZShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogCiBpbmxpbmUg
Ym9vbCBFbGVtZW50OjpoYXNBdHRyaWJ1dGVzV2l0aG91dFVwZGF0ZSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIGF0dHJpYnV0ZURhdGEoKSAmJiAhYXR0cmlidXRlRGF0YSgpLT5pc0VtcHR5KCk7Cisg
ICAgcmV0dXJuIGVsZW1lbnREYXRhKCkgJiYgIWVsZW1lbnREYXRhKCktPmlzRW1wdHkoKTsKIH0K
IAogaW5saW5lIGNvbnN0IEF0b21pY1N0cmluZyYgRWxlbWVudDo6aWRGb3JTdHlsZVJlc29sdXRp
b24oKSBjb25zdAogewogICAgIEFTU0VSVChoYXNJRCgpKTsKLSAgICByZXR1cm4gYXR0cmlidXRl
RGF0YSgpLT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOworICAgIHJldHVybiBlbGVtZW50RGF0YSgp
LT5pZEZvclN0eWxlUmVzb2x1dGlvbigpOwogfQogCiBpbmxpbmUgYm9vbCBFbGVtZW50Ojppc0lk
QXR0cmlidXRlTmFtZShjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lKSBjb25zdApA
QCAtODgyLDYzICs4ODIsNjMgQEAgaW5saW5lIHZvaWQgRWxlbWVudDo6c2V0SWRBdHRyaWJ1dGUo
Y29uc3QgQXRvbWljU3RyaW5nJiB2YWx1ZSkKIGlubGluZSBjb25zdCBTcGFjZVNwbGl0U3RyaW5n
JiBFbGVtZW50OjpjbGFzc05hbWVzKCkgY29uc3QKIHsKICAgICBBU1NFUlQoaGFzQ2xhc3MoKSk7
Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAgcmV0dXJuIGF0dHJpYnV0ZURhdGEo
KS0+Y2xhc3NOYW1lcygpOworICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICByZXR1cm4g
ZWxlbWVudERhdGEoKS0+Y2xhc3NOYW1lcygpOwogfQogCiBpbmxpbmUgc2l6ZV90IEVsZW1lbnQ6
OmF0dHJpYnV0ZUNvdW50KCkgY29uc3QKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsK
LSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5sZW5ndGgoKTsKKyAgICBBU1NFUlQoZWxlbWVu
dERhdGEoKSk7CisgICAgcmV0dXJuIGVsZW1lbnREYXRhKCktPmxlbmd0aCgpOwogfQogCiBpbmxp
bmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50OjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4
KSBjb25zdAogewotICAgIEFTU0VSVChhdHRyaWJ1dGVEYXRhKCkpOwotICAgIHJldHVybiBhdHRy
aWJ1dGVEYXRhKCktPmF0dHJpYnV0ZUl0ZW0oaW5kZXgpOworICAgIEFTU0VSVChlbGVtZW50RGF0
YSgpKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+YXR0cmlidXRlSXRlbShpbmRleCk7CiB9
CiAKIGlubGluZSBjb25zdCBBdHRyaWJ1dGUqIEVsZW1lbnQ6OmdldEF0dHJpYnV0ZUl0ZW0oY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0
YSgpKTsKLSAgICByZXR1cm4gYXR0cmlidXRlRGF0YSgpLT5nZXRBdHRyaWJ1dGVJdGVtKG5hbWUp
OworICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICByZXR1cm4gZWxlbWVudERhdGEoKS0+
Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsKIH0KIAogaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudDo6
Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lKQogewotICAgIEFTU0VS
VChhdHRyaWJ1dGVEYXRhKCkpOwotICAgIHJldHVybiBtdXRhYmxlQXR0cmlidXRlRGF0YSgpLT5n
ZXRBdHRyaWJ1dGVJdGVtKG5hbWUpOworICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICBy
ZXR1cm4gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKS0+Z2V0QXR0cmlidXRlSXRlbShuYW1lKTsK
IH0KIAogaW5saW5lIHZvaWQgRWxlbWVudDo6dXBkYXRlSW52YWxpZEF0dHJpYnV0ZXMoKSBjb25z
dAogewotICAgIGlmICghYXR0cmlidXRlRGF0YSgpKQorICAgIGlmICghZWxlbWVudERhdGEoKSkK
ICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKGF0dHJpYnV0ZURhdGEoKS0+bV9zdHlsZUF0dHJp
YnV0ZUlzRGlydHkpCisgICAgaWYgKGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0Rp
cnR5KQogICAgICAgICB1cGRhdGVTdHlsZUF0dHJpYnV0ZSgpOwogCiAjaWYgRU5BQkxFKFNWRykK
LSAgICBpZiAoYXR0cmlidXRlRGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5
KQorICAgIGlmIChlbGVtZW50RGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmlidXRlc0FyZURpcnR5
KQogICAgICAgICB1cGRhdGVBbmltYXRlZFNWR0F0dHJpYnV0ZShhbnlRTmFtZSgpKTsKICNlbmRp
ZgogfQogCiBpbmxpbmUgYm9vbCBFbGVtZW50OjpoYXNJRCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IGF0dHJpYnV0ZURhdGEoKSAmJiBhdHRyaWJ1dGVEYXRhKCktPmhhc0lEKCk7CisgICAgcmV0dXJu
IGVsZW1lbnREYXRhKCkgJiYgZWxlbWVudERhdGEoKS0+aGFzSUQoKTsKIH0KIAogaW5saW5lIGJv
b2wgRWxlbWVudDo6aGFzQ2xhc3MoKSBjb25zdAogewotICAgIHJldHVybiBhdHRyaWJ1dGVEYXRh
KCkgJiYgYXR0cmlidXRlRGF0YSgpLT5oYXNDbGFzcygpOworICAgIHJldHVybiBlbGVtZW50RGF0
YSgpICYmIGVsZW1lbnREYXRhKCktPmhhc0NsYXNzKCk7CiB9CiAKLWlubGluZSBFbGVtZW50QXR0
cmlidXRlRGF0YSogRWxlbWVudDo6bXV0YWJsZUF0dHJpYnV0ZURhdGEoKQoraW5saW5lIEVsZW1l
bnREYXRhKiBFbGVtZW50OjplbnN1cmVVbmlxdWVFbGVtZW50RGF0YSgpCiB7Ci0gICAgaWYgKCFh
dHRyaWJ1dGVEYXRhKCkgfHwgIWF0dHJpYnV0ZURhdGEoKS0+aXNNdXRhYmxlKCkpCi0gICAgICAg
IGNyZWF0ZU11dGFibGVBdHRyaWJ1dGVEYXRhKCk7Ci0gICAgcmV0dXJuIG1fYXR0cmlidXRlRGF0
YS5nZXQoKTsKKyAgICBpZiAoIWVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnREYXRhKCktPmlzVW5p
cXVlKCkpCisgICAgICAgIGNyZWF0ZVVuaXF1ZUVsZW1lbnREYXRhKCk7CisgICAgcmV0dXJuIG1f
ZWxlbWVudERhdGEuZ2V0KCk7CiB9CiAKIC8vIFB1dCBoZXJlIHRvIG1ha2UgdGhlbSBpbmxpbmUu
CkBAIC05NzUsMzkgKzk3NSwzOSBAQCBpbmxpbmUgYm9vbCBpc1NoYWRvd0hvc3QoY29uc3QgTm9k
ZSogbm9kZSkKIHsKICAgICByZXR1cm4gbm9kZSAmJiBub2RlLT5pc0VsZW1lbnROb2RlKCkgJiYg
dG9FbGVtZW50KG5vZGUpLT5zaGFkb3coKTsKIH0KLWlubGluZSBWZWN0b3I8QXR0cmlidXRlLCA0
PiYgRWxlbWVudEF0dHJpYnV0ZURhdGE6Om11dGFibGVBdHRyaWJ1dGVWZWN0b3IoKQoraW5saW5l
IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBFbGVtZW50RGF0YTo6bXV0YWJsZUF0dHJpYnV0ZVZlY3Rv
cigpCiB7Ci0gICAgQVNTRVJUKG1faXNNdXRhYmxlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
TXV0YWJsZUVsZW1lbnRBdHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yOwor
ICAgIEFTU0VSVChtX2lzVW5pcXVlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VW5pcXVlRWxl
bWVudERhdGEqPih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7CiB9CiAKLWlubGluZSBjb25zdCBW
ZWN0b3I8QXR0cmlidXRlLCA0PiYgRWxlbWVudEF0dHJpYnV0ZURhdGE6Om11dGFibGVBdHRyaWJ1
dGVWZWN0b3IoKSBjb25zdAoraW5saW5lIGNvbnN0IFZlY3RvcjxBdHRyaWJ1dGUsIDQ+JiBFbGVt
ZW50RGF0YTo6bXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpIGNvbnN0CiB7Ci0gICAgQVNTRVJUKG1f
aXNNdXRhYmxlKTsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgTXV0YWJsZUVsZW1lbnRB
dHRyaWJ1dGVEYXRhKj4odGhpcyktPm1fYXR0cmlidXRlVmVjdG9yOworICAgIEFTU0VSVChtX2lz
VW5pcXVlKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVW5pcXVlRWxlbWVudERhdGEq
Pih0aGlzKS0+bV9hdHRyaWJ1dGVWZWN0b3I7CiB9CiAKLWlubGluZSBjb25zdCBBdHRyaWJ1dGUq
IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjppbW11dGFibGVBdHRyaWJ1dGVBcnJheSgpIGNvbnN0Citp
bmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50RGF0YTo6aW1tdXRhYmxlQXR0cmlidXRlQXJy
YXkoKSBjb25zdAogewotICAgIEFTU0VSVCghbV9pc011dGFibGUpOwotICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PGNvbnN0IEF0dHJpYnV0ZSo+KCZzdGF0aWNfY2FzdDxjb25zdCBJbW11dGFi
bGVFbGVtZW50QXR0cmlidXRlRGF0YSo+KHRoaXMpLT5tX2F0dHJpYnV0ZUFycmF5KTsKKyAgICBB
U1NFUlQoIW1faXNVbmlxdWUpOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PGNvbnN0IEF0
dHJpYnV0ZSo+KCZzdGF0aWNfY2FzdDxjb25zdCBTaGFyZWFibGVFbGVtZW50RGF0YSo+KHRoaXMp
LT5tX2F0dHJpYnV0ZUFycmF5KTsKIH0KIAotaW5saW5lIHNpemVfdCBFbGVtZW50QXR0cmlidXRl
RGF0YTo6bGVuZ3RoKCkgY29uc3QKK2lubGluZSBzaXplX3QgRWxlbWVudERhdGE6Omxlbmd0aCgp
IGNvbnN0CiB7Ci0gICAgaWYgKGlzTXV0YWJsZSgpKQorICAgIGlmIChpc1VuaXF1ZSgpKQogICAg
ICAgICByZXR1cm4gbXV0YWJsZUF0dHJpYnV0ZVZlY3RvcigpLnNpemUoKTsKICAgICByZXR1cm4g
bV9hcnJheVNpemU7CiB9CiAKLWlubGluZSBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBFbGVtZW50
QXR0cmlidXRlRGF0YTo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKSBjb25zdAoraW5saW5l
IGNvbnN0IFN0eWxlUHJvcGVydHlTZXQqIEVsZW1lbnREYXRhOjpwcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX2lzTXV0YWJsZSkKKyAgICBpZiAoIW1faXNV
bmlxdWUpCiAgICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBN
dXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1
dGVTdHlsZS5nZXQoKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgVW5pcXVlRWxlbWVu
dERhdGEqPih0aGlzKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZS5nZXQoKTsKIH0KIAot
aW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW0o
Y29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2Up
CitpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50RGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBB
dG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSkKIHsKICAg
ICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5kZXgobmFtZSwgc2hvdWxkSWdub3Jl
QXR0cmlidXRlQ2FzZSk7CiAgICAgaWYgKGluZGV4ICE9IG5vdEZvdW5kKQpAQCAtMTAxNSw3ICsx
MDE1LDcgQEAgaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJp
YnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW0KICAgICByZXR1cm4gMDsKIH0KIAotaW5s
aW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0
ZW0oY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9yZUF0dHJpYnV0ZUNh
c2UpIGNvbnN0CitpbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50RGF0YTo6Z2V0QXR0cmli
dXRlSXRlbShjb25zdCBBdG9taWNTdHJpbmcmIG5hbWUsIGJvb2wgc2hvdWxkSWdub3JlQXR0cmli
dXRlQ2FzZSkgY29uc3QKIHsKICAgICBzaXplX3QgaW5kZXggPSBnZXRBdHRyaWJ1dGVJdGVtSW5k
ZXgobmFtZSwgc2hvdWxkSWdub3JlQXR0cmlidXRlQ2FzZSk7CiAgICAgaWYgKGluZGV4ICE9IG5v
dEZvdW5kKQpAQCAtMTAyMyw3ICsxMDIzLDcgQEAgaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxl
bWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgQXRvbWljU3RyaW4KICAg
ICByZXR1cm4gMDsKIH0KIAotaW5saW5lIHNpemVfdCBFbGVtZW50QXR0cmlidXRlRGF0YTo6Z2V0
QXR0cmlidXRlSXRlbUluZGV4KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0Citpbmxp
bmUgc2l6ZV90IEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSkgY29uc3QKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
Z3RoKCk7ICsraSkgewogICAgICAgICBpZiAoYXR0cmlidXRlSXRlbShpKS0+bmFtZSgpLm1hdGNo
ZXMobmFtZSkpCkBAIC0xMDM0LDcgKzEwMzQsNyBAQCBpbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRy
aWJ1dGVEYXRhOjpnZXRBdHRyaWJ1dGVJdGVtSW5kZXgoY29uc3QgUXVhbGlmaWVkTmFtZSYgbgog
CiAvLyBXZSB1c2UgYSBib29sZWFuIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGNhbGxpbmcgc2hvdWxk
SWdub3JlQXR0cmlidXRlQ2FzZSBzbyB0aGF0IHRoZSBjYWxsZXIKIC8vIGNhbiB0dW5lIHRoZSBi
ZWhhdmlvciAoaGFzQXR0cmlidXRlIGlzIGNhc2Ugc2Vuc2l0aXZlIHdoZXJlYXMgZ2V0QXR0cmli
dXRlIGlzIG5vdCkuCi1pbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRy
aWJ1dGVJdGVtSW5kZXgoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UpIGNvbnN0CitpbmxpbmUgc2l6ZV90IEVsZW1lbnREYXRhOjpnZXRBdHRy
aWJ1dGVJdGVtSW5kZXgoY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lLCBib29sIHNob3VsZElnbm9y
ZUF0dHJpYnV0ZUNhc2UpIGNvbnN0CiB7CiAgICAgdW5zaWduZWQgbGVuID0gbGVuZ3RoKCk7CiAg
ICAgYm9vbCBkb1Nsb3dDaGVjayA9IHNob3VsZElnbm9yZUF0dHJpYnV0ZUNhc2U7CkBAIC0xMDU0
LDcgKzEwNTQsNyBAQCBpbmxpbmUgc2l6ZV90IEVsZW1lbnRBdHRyaWJ1dGVEYXRhOjpnZXRBdHRy
aWJ1dGVJdGVtSW5kZXgoY29uc3QgQXRvbWljU3RyaW5nJiBuYQogICAgIHJldHVybiBub3RGb3Vu
ZDsKIH0KIAotaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURhdGE6Omdl
dEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkgY29uc3QKK2lubGluZSBj
b25zdCBBdHRyaWJ1dGUqIEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bmd0aCgpOyArK2kpIHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZUl0ZW0oaSktPm5hbWUoKS5tYXRj
aGVzKG5hbWUpKQpAQCAtMTA2Myw3ICsxMDYzLDcgQEAgaW5saW5lIGNvbnN0IEF0dHJpYnV0ZSog
RWxlbWVudEF0dHJpYnV0ZURhdGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmEK
ICAgICByZXR1cm4gMDsKIH0KIAotaW5saW5lIEF0dHJpYnV0ZSogRWxlbWVudEF0dHJpYnV0ZURh
dGE6OmdldEF0dHJpYnV0ZUl0ZW0oY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSkKK2lubGluZSBB
dHRyaWJ1dGUqIEVsZW1lbnREYXRhOjpnZXRBdHRyaWJ1dGVJdGVtKGNvbnN0IFF1YWxpZmllZE5h
bWUmIG5hbWUpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aCgpOyArK2kp
IHsKICAgICAgICAgaWYgKGF0dHJpYnV0ZUl0ZW0oaSktPm5hbWUoKS5tYXRjaGVzKG5hbWUpKQpA
QCAtMTA3MiwxNSArMTA3MiwxNSBAQCBpbmxpbmUgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRl
RGF0YTo6Z2V0QXR0cmlidXRlSXRlbShjb25zdCBRdWFsaWZpZWROYW1lJiBuYQogICAgIHJldHVy
biAwOwogfQogCi1pbmxpbmUgY29uc3QgQXR0cmlidXRlKiBFbGVtZW50QXR0cmlidXRlRGF0YTo6
YXR0cmlidXRlSXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKK2lubGluZSBjb25zdCBBdHRyaWJ1
dGUqIEVsZW1lbnREYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdAogewog
ICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgbGVuZ3RoKCkpOwot
ICAgIGlmIChtX2lzTXV0YWJsZSkKKyAgICBpZiAobV9pc1VuaXF1ZSkKICAgICAgICAgcmV0dXJu
ICZtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuYXQoaW5kZXgpOwogICAgIHJldHVybiAmaW1tdXRh
YmxlQXR0cmlidXRlQXJyYXkoKVtpbmRleF07CiB9CiAKLWlubGluZSBBdHRyaWJ1dGUqIEVsZW1l
bnRBdHRyaWJ1dGVEYXRhOjphdHRyaWJ1dGVJdGVtKHVuc2lnbmVkIGluZGV4KQoraW5saW5lIEF0
dHJpYnV0ZSogRWxlbWVudERhdGE6OmF0dHJpYnV0ZUl0ZW0odW5zaWduZWQgaW5kZXgpCiB7CiAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBsZW5ndGgoKSk7CiAg
ICAgcmV0dXJuICZtdXRhYmxlQXR0cmlidXRlVmVjdG9yKCkuYXQoaW5kZXgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL05vZGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL05vZGUu
Y3BwCmluZGV4IDExZmQ5OGIuLjgyMDE3YTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Ob2RlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vTm9kZS5jcHAKQEAgLTIwNSwxMSAr
MjA1LDExIEBAIHZvaWQgTm9kZTo6ZHVtcFN0YXRpc3RpY3MoKQogICAgICAgICAgICAgICAgIGlm
ICghcmVzdWx0LmlzTmV3RW50cnkpCiAgICAgICAgICAgICAgICAgICAgIHJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUrKzsKIAotICAgICAgICAgICAgICAgIGlmIChFbGVtZW50QXR0cmlidXRlRGF0YSog
YXR0cmlidXRlRGF0YSA9IGVsZW1lbnQtPmF0dHJpYnV0ZURhdGEoKSkgewotICAgICAgICAgICAg
ICAgICAgICBhdHRyaWJ1dGVzICs9IGF0dHJpYnV0ZURhdGEtPmxlbmd0aCgpOworICAgICAgICAg
ICAgICAgIGlmIChFbGVtZW50RGF0YSogZWxlbWVudERhdGEgPSBlbGVtZW50LT5lbGVtZW50RGF0
YSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXMgKz0gZWxlbWVudERhdGEtPmxl
bmd0aCgpOwogICAgICAgICAgICAgICAgICAgICArK2VsZW1lbnRzV2l0aEF0dHJpYnV0ZVN0b3Jh
Z2U7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhdHRyaWJ1
dGVEYXRhLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1
dGUqIGF0dHIgPSBhdHRyaWJ1dGVEYXRhLT5hdHRyaWJ1dGVJdGVtKGkpOworICAgICAgICAgICAg
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudERhdGEtPmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0ZSogYXR0ciA9IGVsZW1lbnRE
YXRhLT5hdHRyaWJ1dGVJdGVtKGkpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGF0dHIt
PmF0dHIoKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2F0dHJpYnV0ZXNXaXRoQXR0
cjsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjk2LDcgKzI5Niw3IEBAIHZvaWQgTm9kZTo6
ZHVtcFN0YXRpc3RpY3MoKQogICAgIHByaW50ZigiQXR0cmlidXRlczpcbiIpOwogICAgIHByaW50
ZigiICBOdW1iZXIgb2YgQXR0cmlidXRlcyAobm9uLU5vZGUgYW5kIE5vZGUpOiAlenUgWyV6dV1c
biIsIGF0dHJpYnV0ZXMsIHNpemVvZihBdHRyaWJ1dGUpKTsKICAgICBwcmludGYoIiAgTnVtYmVy
IG9mIEF0dHJpYnV0ZXMgd2l0aCBhbiBBdHRyOiAlenVcbiIsIGF0dHJpYnV0ZXNXaXRoQXR0cik7
Ci0gICAgcHJpbnRmKCIgIE51bWJlciBvZiBFbGVtZW50cyB3aXRoIGF0dHJpYnV0ZSBzdG9yYWdl
OiAlenUgWyV6dV1cbiIsIGVsZW1lbnRzV2l0aEF0dHJpYnV0ZVN0b3JhZ2UsIHNpemVvZihFbGVt
ZW50QXR0cmlidXRlRGF0YSkpOworICAgIHByaW50ZigiICBOdW1iZXIgb2YgRWxlbWVudHMgd2l0
aCBhdHRyaWJ1dGUgc3RvcmFnZTogJXp1IFslenVdXG4iLCBlbGVtZW50c1dpdGhBdHRyaWJ1dGVT
dG9yYWdlLCBzaXplb2YoRWxlbWVudERhdGEpKTsKICAgICBwcmludGYoIiAgTnVtYmVyIG9mIEVs
ZW1lbnRzIHdpdGggUmFyZURhdGE6ICV6dVxuIiwgZWxlbWVudHNXaXRoUmFyZURhdGEpOwogICAg
IHByaW50ZigiICBOdW1iZXIgb2YgRWxlbWVudHMgd2l0aCBOYW1lZE5vZGVNYXA6ICV6dSBbJXp1
XVxuIiwgZWxlbWVudHNXaXRoTmFtZWROb2RlTWFwLCBzaXplb2YoTmFtZWROb2RlTWFwKSk7CiAj
ZW5kaWYKQEAgLTE3NTMsNyArMTc1Myw3IEBAIHVuc2lnbmVkIHNob3J0IE5vZGU6OmNvbXBhcmVE
b2N1bWVudFBvc2l0aW9uKE5vZGUqIG90aGVyTm9kZSkKICAgICBpZiAoYXR0cjEgJiYgYXR0cjIg
JiYgc3RhcnQxID09IHN0YXJ0MiAmJiBzdGFydDEpIHsKICAgICAgICAgLy8gV2UgYXJlIGNvbXBh
cmluZyB0d28gYXR0cmlidXRlcyBvbiB0aGUgc2FtZSBub2RlLiBDcmF3bCBvdXIgYXR0cmlidXRl
IG1hcCBhbmQgc2VlIHdoaWNoIG9uZSB3ZSBoaXQgZmlyc3QuCiAgICAgICAgIEVsZW1lbnQqIG93
bmVyMSA9IGF0dHIxLT5vd25lckVsZW1lbnQoKTsKLSAgICAgICAgb3duZXIxLT51cGRhdGVkQXR0
cmlidXRlRGF0YSgpOyAvLyBGb3JjZSB1cGRhdGUgaW52YWxpZCBhdHRyaWJ1dGVzLgorICAgICAg
ICBvd25lcjEtPmVsZW1lbnREYXRhV2l0aFN5bmNocm9uaXplZEF0dHJpYnV0ZXMoKTsgLy8gRm9y
Y2UgdXBkYXRlIGludmFsaWQgYXR0cmlidXRlcy4KICAgICAgICAgdW5zaWduZWQgbGVuZ3RoID0g
b3duZXIxLT5hdHRyaWJ1dGVDb3VudCgpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgIC8vIElmIG5laXRoZXIgb2YgdGhlIHR3byBk
ZXRlcm1pbmluZyBub2RlcyBpcyBhIGNoaWxkIG5vZGUgYW5kIG5vZGVUeXBlIGlzIHRoZSBzYW1l
IGZvciBib3RoIGRldGVybWluaW5nIG5vZGVzLCB0aGVuIGFuIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxl
ZEVsZW1lbnQuY3BwCmluZGV4IDI3YzMxNGEuLjllZGIzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5
bGVkRWxlbWVudC5jcHAKQEAgLTEyOCw5ICsxMjgsOSBAQCBzdGF0aWMgUHJlc2VudGF0aW9uQXR0
cmlidXRlQ2FjaGVDbGVhbmVyJiBwcmVzZW50YXRpb25BdHRyaWJ1dGVDYWNoZUNsZWFuZXIoKQog
CiB2b2lkIFN0eWxlZEVsZW1lbnQ6OnVwZGF0ZVN0eWxlQXR0cmlidXRlKCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpLT5t
X3N0eWxlQXR0cmlidXRlSXNEaXJ0eSk7Ci0gICAgYXR0cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0
cmlidXRlSXNEaXJ0eSA9IGZhbHNlOworICAgIEFTU0VSVChlbGVtZW50RGF0YSgpKTsKKyAgICBB
U1NFUlQoZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkpOworICAgIGVsZW1l
bnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ID0gZmFsc2U7CiAgICAgaWYgKGNvbnN0
IFN0eWxlUHJvcGVydHlTZXQqIGlubGluZVN0eWxlID0gdGhpcy0+aW5saW5lU3R5bGUoKSkKICAg
ICAgICAgY29uc3RfY2FzdDxTdHlsZWRFbGVtZW50Kj4odGhpcyktPnNldFN5bmNocm9uaXplZExh
enlBdHRyaWJ1dGUoc3R5bGVBdHRyLCBpbmxpbmVTdHlsZS0+YXNUZXh0KCkpOwogfQpAQCAtMTQ4
LDcgKzE0OCw3IEBAIENTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlZEVsZW1lbnQ6OnN0eWxlKCkK
IAogU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVudDo6ZW5zdXJlTXV0YWJsZUlubGluZVN0
eWxlKCkKIHsKLSAgICBSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4mIGlubGluZVN0eWxlID0gbXV0
YWJsZUF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHlsZTsKKyAgICBSZWZQdHI8U3R5bGVQcm9w
ZXJ0eVNldD4mIGlubGluZVN0eWxlID0gZW5zdXJlVW5pcXVlRWxlbWVudERhdGEoKS0+bV9pbmxp
bmVTdHlsZTsKICAgICBpZiAoIWlubGluZVN0eWxlKQogICAgICAgICBpbmxpbmVTdHlsZSA9IFN0
eWxlUHJvcGVydHlTZXQ6OmNyZWF0ZShzdHJpY3RUb0NTU1BhcnNlck1vZGUoaXNIVE1MRWxlbWVu
dCgpICYmICFkb2N1bWVudCgpLT5pblF1aXJrc01vZGUoKSkpOwogICAgIGVsc2UgaWYgKCFpbmxp
bmVTdHlsZS0+aXNNdXRhYmxlKCkpCkBAIC0xNjEsNyArMTYxLDcgQEAgdm9pZCBTdHlsZWRFbGVt
ZW50OjphdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIGNvbnN0IEF0
b21pY1N0cmkKICAgICBpZiAobmFtZSA9PSBzdHlsZUF0dHIpCiAgICAgICAgIHN0eWxlQXR0cmli
dXRlQ2hhbmdlZChuZXdWYWx1ZSk7CiAgICAgZWxzZSBpZiAoaXNQcmVzZW50YXRpb25BdHRyaWJ1
dGUobmFtZSkpIHsKLSAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5tX3ByZXNlbnRhdGlvbkF0dHJp
YnV0ZVN0eWxlSXNEaXJ0eSA9IHRydWU7CisgICAgICAgIGVsZW1lbnREYXRhKCktPm1fcHJlc2Vu
dGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5ID0gdHJ1ZTsKICAgICAgICAgc2V0TmVlZHNTdHls
ZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CiAgICAgfQogCkBAIC0xNzIsMTcgKzE3MiwxNyBA
QCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIFN0eWxlZEVsZW1lbnQ6OmlubGluZVN0
eWxlQ1NTT01XcmFwcGVyKCkKIHsKICAgICBpZiAoIWlubGluZVN0eWxlKCkgfHwgIWlubGluZVN0
eWxlKCktPmhhc0NTU09NV3JhcHBlcigpKQogICAgICAgICByZXR1cm4gMDsKLSAgICBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc29tV3JhcHBlciA9IG11dGFibGVBdHRyaWJ1dGVE
YXRhKCktPm1faW5saW5lU3R5bGUtPmNzc1N0eWxlRGVjbGFyYXRpb24oKTsKKyAgICBQcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24qIGNzc29tV3JhcHBlciA9IGVuc3VyZVVuaXF1ZUVsZW1l
bnREYXRhKCktPm1faW5saW5lU3R5bGUtPmNzc1N0eWxlRGVjbGFyYXRpb24oKTsKICAgICBBU1NF
UlQoY3Nzb21XcmFwcGVyICYmIGNzc29tV3JhcHBlci0+cGFyZW50RWxlbWVudCgpID09IHRoaXMp
OwogICAgIHJldHVybiBjc3NvbVdyYXBwZXI7CiB9CiAKIGlubGluZSB2b2lkIFN0eWxlZEVsZW1l
bnQ6OnNldElubGluZVN0eWxlRnJvbVN0cmluZyhjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0eWxl
U3RyaW5nKQogewotICAgIFJlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiYgaW5saW5lU3R5bGUgPSBh
dHRyaWJ1dGVEYXRhKCktPm1faW5saW5lU3R5bGU7CisgICAgUmVmUHRyPFN0eWxlUHJvcGVydHlT
ZXQ+JiBpbmxpbmVTdHlsZSA9IGVsZW1lbnREYXRhKCktPm1faW5saW5lU3R5bGU7CiAKICAgICAv
LyBBdm9pZCByZWR1bmRhbnQgd29yayBpZiB3ZSdyZSB1c2luZyBzaGFyZWQgYXR0cmlidXRlIGRh
dGEgd2l0aCBhbHJlYWR5IHBhcnNlZCBpbmxpbmUgc3R5bGUuCi0gICAgaWYgKGlubGluZVN0eWxl
ICYmICFhdHRyaWJ1dGVEYXRhKCktPmlzTXV0YWJsZSgpKQorICAgIGlmIChpbmxpbmVTdHlsZSAm
JiAhZWxlbWVudERhdGEoKS0+aXNVbmlxdWUoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8g
V2UgcmVjb25zdHJ1Y3QgdGhlIHByb3BlcnR5IHNldCBpbnN0ZWFkIG9mIG11dGF0aW5nIGlmIHRo
ZXJlIGlzIG5vIENTU09NIHdyYXBwZXIuCkBAIC0yMDUsMTEgKzIwNSwxMSBAQCB2b2lkIFN0eWxl
ZEVsZW1lbnQ6OnN0eWxlQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJpbmcmIG5ld1N0
eWxlU3RyaW5nKQogICAgIGlmIChuZXdTdHlsZVN0cmluZy5pc051bGwoKSkgewogICAgICAgICBp
ZiAoUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uKiBjc3NvbVdyYXBwZXIgPSBpbmxpbmVT
dHlsZUNTU09NV3JhcHBlcigpKQogICAgICAgICAgICAgY3Nzb21XcmFwcGVyLT5jbGVhclBhcmVu
dEVsZW1lbnQoKTsKLSAgICAgICAgbXV0YWJsZUF0dHJpYnV0ZURhdGEoKS0+bV9pbmxpbmVTdHls
ZS5jbGVhcigpOworICAgICAgICBlbnN1cmVVbmlxdWVFbGVtZW50RGF0YSgpLT5tX2lubGluZVN0
eWxlLmNsZWFyKCk7CiAgICAgfSBlbHNlIGlmIChkb2N1bWVudCgpLT5jb250ZW50U2VjdXJpdHlQ
b2xpY3koKS0+YWxsb3dJbmxpbmVTdHlsZShkb2N1bWVudCgpLT51cmwoKSwgc3RhcnRMaW5lTnVt
YmVyKSkKICAgICAgICAgc2V0SW5saW5lU3R5bGVGcm9tU3RyaW5nKG5ld1N0eWxlU3RyaW5nKTsK
IAotICAgIGF0dHJpYnV0ZURhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkgPSBmYWxzZTsK
KyAgICBlbGVtZW50RGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA9IGZhbHNlOwogCiAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJbmxpbmVTdHlsZUNoYW5nZSk7CiAgICAgSW5zcGVjdG9y
SW5zdHJ1bWVudGF0aW9uOjpkaWRJbnZhbGlkYXRlU3R5bGVBdHRyKGRvY3VtZW50KCksIHRoaXMp
OwpAQCAtMjE4LDggKzIxOCw4IEBAIHZvaWQgU3R5bGVkRWxlbWVudDo6c3R5bGVBdHRyaWJ1dGVD
aGFuZ2VkKGNvbnN0IEF0b21pY1N0cmluZyYgbmV3U3R5bGVTdHJpbmcpCiB2b2lkIFN0eWxlZEVs
ZW1lbnQ6OmlubGluZVN0eWxlQ2hhbmdlZCgpCiB7CiAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhJ
bmxpbmVTdHlsZUNoYW5nZSk7Ci0gICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7Ci0gICAgYXR0
cmlidXRlRGF0YSgpLT5tX3N0eWxlQXR0cmlidXRlSXNEaXJ0eSA9IHRydWU7CisgICAgQVNTRVJU
KGVsZW1lbnREYXRhKCkpOworICAgIGVsZW1lbnREYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0Rp
cnR5ID0gdHJ1ZTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OmRpZEludmFsaWRhdGVT
dHlsZUF0dHIoZG9jdW1lbnQoKSwgdGhpcyk7CiB9CiAgICAgCkBAIC0yNjUsNyArMjY1LDcgQEAg
dm9pZCBTdHlsZWRFbGVtZW50OjpyZW1vdmVBbGxJbmxpbmVTdHlsZVByb3BlcnRpZXMoKQogCiB2
b2lkIFN0eWxlZEVsZW1lbnQ6OmFkZFN1YnJlc291cmNlQXR0cmlidXRlVVJMcyhMaXN0SGFzaFNl
dDxLVVJMPiYgdXJscykgY29uc3QKIHsKLSAgICBpZiAoY29uc3QgU3R5bGVQcm9wZXJ0eVNldCog
aW5saW5lU3R5bGUgPSBhdHRyaWJ1dGVEYXRhKCkgPyBhdHRyaWJ1dGVEYXRhKCktPmlubGluZVN0
eWxlKCkgOiAwKQorICAgIGlmIChjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHlsZSA9
IGVsZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5pbmxpbmVTdHlsZSgpIDogMCkKICAgICAg
ICAgaW5saW5lU3R5bGUtPmFkZFN1YnJlc291cmNlU3R5bGVVUkxzKHVybHMsIGRvY3VtZW50KCkt
PmVsZW1lbnRTaGVldCgpLT5jb250ZW50cygpKTsKIH0KIApAQCAtMzQwLDExICszNDAsMTEgQEAg
dm9pZCBTdHlsZWRFbGVtZW50OjpyZWJ1aWxkUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQog
ICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gSW1tdXRhYmxlRWxlbWVudEF0dHJpYnV0ZURhdGEg
ZG9lc24ndCBzdG9yZSBwcmVzZW50YXRpb24gYXR0cmlidXRlIHN0eWxlLCBzbyBtYWtlIHN1cmUg
d2UgaGF2ZSBhIE11dGFibGVFbGVtZW50QXR0cmlidXRlRGF0YS4KLSAgICBFbGVtZW50QXR0cmli
dXRlRGF0YSogYXR0cmlidXRlRGF0YSA9IG11dGFibGVBdHRyaWJ1dGVEYXRhKCk7CisgICAgLy8g
U2hhcmVhYmxlRWxlbWVudERhdGEgZG9lc24ndCBzdG9yZSBwcmVzZW50YXRpb24gYXR0cmlidXRl
IHN0eWxlLCBzbyBtYWtlIHN1cmUgd2UgaGF2ZSBhIFVuaXF1ZUVsZW1lbnREYXRhLgorICAgIEVs
ZW1lbnREYXRhKiBlbGVtZW50RGF0YSA9IGVuc3VyZVVuaXF1ZUVsZW1lbnREYXRhKCk7CiAKLSAg
ICBhdHRyaWJ1dGVEYXRhLT5tX3ByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9IGZh
bHNlOwotICAgIGF0dHJpYnV0ZURhdGEtPnNldFByZXNlbnRhdGlvbkF0dHJpYnV0ZVN0eWxlKHN0
eWxlLT5pc0VtcHR5KCkgPyAwIDogc3R5bGUpOworICAgIGVsZW1lbnREYXRhLT5tX3ByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlSXNEaXJ0eSA9IGZhbHNlOworICAgIGVsZW1lbnREYXRhLT5zZXRQ
cmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZShzdHlsZS0+aXNFbXB0eSgpID8gMCA6IHN0eWxlKTsK
IAogICAgIGlmICghY2FjaGVIYXNoIHx8IGNhY2hlSXRlcmF0b3ItPnZhbHVlKQogICAgICAgICBy
ZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oIGIv
U291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuaAppbmRleCBlNDFhYWVmLi5iZjA2MjM5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmgKQEAgLTQwLDcgKzQwLDcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogYWRkaXRpb25hbFByZXNlbnRh
dGlvbkF0dHJpYnV0ZVN0eWxlKCkgeyByZXR1cm4gMDsgfQogICAgIHZvaWQgaW52YWxpZGF0ZVN0
eWxlQXR0cmlidXRlKCk7CiAKLSAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxpbmVTdHls
ZSgpIGNvbnN0IHsgcmV0dXJuIGF0dHJpYnV0ZURhdGEoKSA/IGF0dHJpYnV0ZURhdGEoKS0+bV9p
bmxpbmVTdHlsZS5nZXQoKSA6IDA7IH0KKyAgICBjb25zdCBTdHlsZVByb3BlcnR5U2V0KiBpbmxp
bmVTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIGVsZW1lbnREYXRhKCkgPyBlbGVtZW50RGF0YSgpLT5t
X2lubGluZVN0eWxlLmdldCgpIDogMDsgfQogICAgIFN0eWxlUHJvcGVydHlTZXQqIGVuc3VyZU11
dGFibGVJbmxpbmVTdHlsZSgpOwogICAgIAogICAgIC8vIFVubGlrZSBTdHlsZVByb3BlcnR5U2V0
IHNldHRlcnMsIHRoZXNlIGltcGxlbWVudCBpbnZhbGlkYXRpb24uCkBAIC04NiwxNyArODYsMTcg
QEAgcHJpdmF0ZToKIAogaW5saW5lIHZvaWQgU3R5bGVkRWxlbWVudDo6aW52YWxpZGF0ZVN0eWxl
QXR0cmlidXRlKCkKIHsKLSAgICBBU1NFUlQoYXR0cmlidXRlRGF0YSgpKTsKLSAgICBhdHRyaWJ1
dGVEYXRhKCktPm1fc3R5bGVBdHRyaWJ1dGVJc0RpcnR5ID0gdHJ1ZTsKKyAgICBBU1NFUlQoZWxl
bWVudERhdGEoKSk7CisgICAgZWxlbWVudERhdGEoKS0+bV9zdHlsZUF0dHJpYnV0ZUlzRGlydHkg
PSB0cnVlOwogfQogCiBpbmxpbmUgY29uc3QgU3R5bGVQcm9wZXJ0eVNldCogU3R5bGVkRWxlbWVu
dDo6cHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKQogewotICAgIGlmICghYXR0cmlidXRlRGF0
YSgpKQorICAgIGlmICghZWxlbWVudERhdGEoKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYg
KGF0dHJpYnV0ZURhdGEoKS0+bV9wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZUlzRGlydHkpCisg
ICAgaWYgKGVsZW1lbnREYXRhKCktPm1fcHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGVJc0RpcnR5
KQogICAgICAgICByZWJ1aWxkUHJlc2VudGF0aW9uQXR0cmlidXRlU3R5bGUoKTsKLSAgICByZXR1
cm4gYXR0cmlidXRlRGF0YSgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpOworICAgIHJl
dHVybiBlbGVtZW50RGF0YSgpLT5wcmVzZW50YXRpb25BdHRyaWJ1dGVTdHlsZSgpOwogfQogCiB9
IC8vbmFtZXNwYWNlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlzdC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0NsYXNzTGlzdC5jcHAKaW5kZXggNzViYzM0My4uM2I1
NzU2MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9DbGFzc0xpc3QuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvQ2xhc3NMaXN0LmNwcApAQCAtNjgsNyArNjgsNyBAQCBjb25z
dCBTcGFjZVNwbGl0U3RyaW5nJiBDbGFzc0xpc3Q6OmNsYXNzTmFtZXMoKSBjb25zdAogICAgICAg
ICAgICAgbV9jbGFzc05hbWVzRm9yUXVpcmtzTW9kZSA9IGFkb3B0UHRyKG5ldyBTcGFjZVNwbGl0
U3RyaW5nKHZhbHVlKCksIGZhbHNlKSk7CiAgICAgICAgIHJldHVybiAqbV9jbGFzc05hbWVzRm9y
UXVpcmtzTW9kZS5nZXQoKTsKICAgICB9Ci0gICAgcmV0dXJuIG1fZWxlbWVudC0+YXR0cmlidXRl
RGF0YSgpLT5jbGFzc05hbWVzKCk7CisgICAgcmV0dXJuIG1fZWxlbWVudC0+ZWxlbWVudERhdGEo
KS0+Y2xhc3NOYW1lcygpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAppbmRleCA3MDE1NzZiLi4xYTk3YmY2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAKQEAgLTUxNSw3ICs1MTUsNyBA
QCB2b2lkIEhUTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZVR5cGUoKQogICAgICAgICByZWdpc3RlckZv
clN1c3BlbnNpb25DYWxsYmFja0lmTmVlZGVkKCk7CiAKICAgICBpZiAoZGlkUmVzcGVjdEhlaWdo
dEFuZFdpZHRoICE9IG1faW5wdXRUeXBlLT5zaG91bGRSZXNwZWN0SGVpZ2h0QW5kV2lkdGhBdHRy
aWJ1dGVzKCkpIHsKLSAgICAgICAgQVNTRVJUKGF0dHJpYnV0ZURhdGEoKSk7CisgICAgICAgIEFT
U0VSVChlbGVtZW50RGF0YSgpKTsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSogaGVpZ2h0ID0gZ2V0
QXR0cmlidXRlSXRlbShoZWlnaHRBdHRyKSkKICAgICAgICAgICAgIGF0dHJpYnV0ZUNoYW5nZWQo
aGVpZ2h0QXR0ciwgaGVpZ2h0LT52YWx1ZSgpKTsKICAgICAgICAgaWYgKEF0dHJpYnV0ZSogd2lk
dGggPSBnZXRBdHRyaWJ1dGVJdGVtKHdpZHRoQXR0cikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9IVE1MQ29uc3RydWN0aW9uU2l0ZS5jcHAKaW5kZXggYmUxYzUzNS4uOWMw
NGRiZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTENvbnN0cnVj
dGlvblNpdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxDb25zdHJ1
Y3Rpb25TaXRlLmNwcApAQCAtMjExLDcgKzIxMSw3IEBAIHZvaWQgSFRNTENvbnN0cnVjdGlvblNp
dGU6Om1lcmdlQXR0cmlidXRlc0Zyb21Ub2tlbkludG9FbGVtZW50KEF0b21pY0hUTUxUb2tlbioK
IAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b2tlbi0+YXR0cmlidXRlcygpLnNpemUo
KTsgKytpKSB7CiAgICAgICAgIGNvbnN0IEF0dHJpYnV0ZSYgdG9rZW5BdHRyaWJ1dGUgPSB0b2tl
bi0+YXR0cmlidXRlcygpLmF0KGkpOwotICAgICAgICBpZiAoIWVsZW1lbnQtPmF0dHJpYnV0ZURh
dGEoKSB8fCAhZWxlbWVudC0+Z2V0QXR0cmlidXRlSXRlbSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCkp
KQorICAgICAgICBpZiAoIWVsZW1lbnQtPmVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnQtPmdldEF0
dHJpYnV0ZUl0ZW0odG9rZW5BdHRyaWJ1dGUubmFtZSgpKSkKICAgICAgICAgICAgIGVsZW1lbnQt
PnNldEF0dHJpYnV0ZSh0b2tlbkF0dHJpYnV0ZS5uYW1lKCksIHRva2VuQXR0cmlidXRlLnZhbHVl
KCkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmNwcAppbmRleCBhN2UzZjg5Li5i
NDhhZGVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuY3BwCkBAIC01NDQsMTMgKzU0NCwxMyBA
QCB2b2lkIFNWR0VsZW1lbnQ6OmF0dHJpYnV0ZUNoYW5nZWQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgY29uc3QgQXRvbWljU3RyaW5nJgogCiB2b2lkIFNWR0VsZW1lbnQ6OnVwZGF0ZUFuaW1h
dGVkU1ZHQXR0cmlidXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUpIGNvbnN0CiB7Ci0gICAg
aWYgKCFhdHRyaWJ1dGVEYXRhKCkgfHwgIWF0dHJpYnV0ZURhdGEoKS0+bV9hbmltYXRlZFNWR0F0
dHJpYnV0ZXNBcmVEaXJ0eSkKKyAgICBpZiAoIWVsZW1lbnREYXRhKCkgfHwgIWVsZW1lbnREYXRh
KCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGlydHkpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIFNWR0VsZW1lbnQqIG5vbkNvbnN0VGhpcyA9IGNvbnN0X2Nhc3Q8U1ZHRWxlbWVudCo+KHRo
aXMpOwogICAgIGlmIChuYW1lID09IGFueVFOYW1lKCkpIHsKICAgICAgICAgbm9uQ29uc3RUaGlz
LT5sb2NhbEF0dHJpYnV0ZVRvUHJvcGVydHlNYXAoKS5zeW5jaHJvbml6ZVByb3BlcnRpZXMobm9u
Q29uc3RUaGlzKTsKLSAgICAgICAgYXR0cmlidXRlRGF0YSgpLT5tX2FuaW1hdGVkU1ZHQXR0cmli
dXRlc0FyZURpcnR5ID0gZmFsc2U7CisgICAgICAgIGVsZW1lbnREYXRhKCktPm1fYW5pbWF0ZWRT
VkdBdHRyaWJ1dGVzQXJlRGlydHkgPSBmYWxzZTsKICAgICB9IGVsc2UKICAgICAgICAgbm9uQ29u
c3RUaGlzLT5sb2NhbEF0dHJpYnV0ZVRvUHJvcGVydHlNYXAoKS5zeW5jaHJvbml6ZVByb3BlcnR5
KG5vbkNvbnN0VGhpcywgbmFtZSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdmcv
U1ZHRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvc3ZnL1NWR0VsZW1lbnQuaAppbmRleCA4Zjg5
MDBiLi5hMDA5ZjQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRWxlbWVudC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3N2Zy9TVkdFbGVtZW50LmgKQEAgLTc5LDcgKzc5LDcgQEAg
cHVibGljOgogCiAgICAgdmlydHVhbCBBZmZpbmVUcmFuc2Zvcm0qIHN1cHBsZW1lbnRhbFRyYW5z
Zm9ybSgpIHsgcmV0dXJuIDA7IH0KIAotICAgIHZvaWQgaW52YWxpZGF0ZVNWR0F0dHJpYnV0ZXMo
KSB7IG11dGFibGVBdHRyaWJ1dGVEYXRhKCktPm1fYW5pbWF0ZWRTVkdBdHRyaWJ1dGVzQXJlRGly
dHkgPSB0cnVlOyB9CisgICAgdm9pZCBpbnZhbGlkYXRlU1ZHQXR0cmlidXRlcygpIHsgZW5zdXJl
VW5pcXVlRWxlbWVudERhdGEoKS0+bV9hbmltYXRlZFNWR0F0dHJpYnV0ZXNBcmVEaXJ0eSA9IHRy
dWU7IH0KIAogICAgIGNvbnN0IEhhc2hTZXQ8U1ZHRWxlbWVudEluc3RhbmNlKj4mIGluc3RhbmNl
c0ZvckVsZW1lbnQoKSBjb25zdDsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUveG1sL3Bh
cnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3htbC9wYXJzZXIv
WE1MRG9jdW1lbnRQYXJzZXJRdC5jcHAKaW5kZXggYWM5MDQ0Yy4uNmFjNGQ5MSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUveG1sL3BhcnNlci9YTUxEb2N1bWVudFBhcnNlclF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS94bWwvcGFyc2VyL1hNTERvY3VtZW50UGFyc2VyUXQuY3BwCkBAIC0x
NDYsNyArMTQ2LDcgQEAgWE1MRG9jdW1lbnRQYXJzZXI6OlhNTERvY3VtZW50UGFyc2VyKERvY3Vt
ZW50RnJhZ21lbnQqIGZyYWdtZW50LCBFbGVtZW50KiBwYXJlbnQKIAogICAgIFFYbWxTdHJlYW1O
YW1lc3BhY2VEZWNsYXJhdGlvbnMgbmFtZXNwYWNlczsKICAgICBmb3IgKEVsZW1lbnQqIGVsZW1l
bnQgPSBlbGVtU3RhY2subGFzdCgpOyAhZWxlbVN0YWNrLmlzRW1wdHkoKTsgZWxlbVN0YWNrLnJl
bW92ZUxhc3QoKSkgewotICAgICAgICBpZiAoY29uc3QgRWxlbWVudEF0dHJpYnV0ZURhdGEqIGF0
dHJzID0gZWxlbWVudC0+dXBkYXRlZEF0dHJpYnV0ZURhdGEoKSkgeworICAgICAgICBpZiAoY29u
c3QgRWxlbWVudERhdGEqIGF0dHJzID0gZWxlbWVudC0+ZWxlbWVudERhdGFXaXRoU3luY2hyb25p
emVkQXR0cmlidXRlcygpKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
YXR0cnMtPmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgICAgICAgICBjb25zdCBBdHRyaWJ1dGUq
IGF0dHIgPSBhdHRycy0+YXR0cmlidXRlSXRlbShpKTsKICAgICAgICAgICAgICAgICBpZiAoYXR0
ci0+bG9jYWxOYW1lKCkgPT0gInhtbG5zIikK
</data>
<flag name="review"
          id="208178"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>