<?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>215004</bug_id>
          
          <creation_ts>2020-07-30 20:09:57 -0700</creation_ts>
          <short_desc>Remove Range::create and many more uses of live ranges</short_desc>
          <delta_ts>2020-08-01 09:52:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          <cc>aboxhall</cc>
    
    <cc>apinheiro</cc>
    
    <cc>cdumez</cc>
    
    <cc>cfleizach</cc>
    
    <cc>dmazzoni</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jcraig</cc>
    
    <cc>jdiggs</cc>
    
    <cc>jer.noble</cc>
    
    <cc>kangil.han</cc>
    
    <cc>mifenton</cc>
    
    <cc>philipj</cc>
    
    <cc>samuel_white</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1676693</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-30 20:09:57 -0700</bug_when>
    <thetext>Remove Range::create and almost all uses of live ranges: after this just burn down about 150 uses of createLiveRange</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676694</commentid>
    <comment_count>1</comment_count>
      <attachid>405654</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-30 20:10:55 -0700</bug_when>
    <thetext>Created attachment 405654
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676695</commentid>
    <comment_count>2</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-30 20:24:47 -0700</bug_when>
    <thetext>The follow up to this is search and destroy of calls to createLiveRange. Should be done in chunks in case we break something.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676705</commentid>
    <comment_count>3</comment_count>
      <attachid>405660</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-30 21:06:52 -0700</bug_when>
    <thetext>Created attachment 405660
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676718</commentid>
    <comment_count>4</comment_count>
      <attachid>405665</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-30 21:57:51 -0700</bug_when>
    <thetext>Created attachment 405665
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676875</commentid>
    <comment_count>5</comment_count>
      <attachid>405709</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-31 11:00:29 -0700</bug_when>
    <thetext>Created attachment 405709
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1676876</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-07-31 11:02:55 -0700</bug_when>
    <thetext>Last version passed EWS all green, but didn’t have change log yet. Now up with change log and ready to review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677123</commentid>
    <comment_count>7</comment_count>
      <attachid>405709</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2020-08-01 08:38:35 -0700</bug_when>
    <thetext>Comment on attachment 405709
Patch

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

&gt; Source/WebCore/dom/DocumentMarkerController.h:118
&gt; +WEBCORE_EXPORT SimpleRange range(Node&amp;, const DocumentMarker&amp;);

I am not sure how I feel about this just being called &quot;range&quot;, though I can see the arguments against making this an overload of makeSimpleRange as well.

&gt; Source/WebKitLegacy/ios/WebCoreSupport/WebVisiblePosition.mm:479
&gt; +    auto firstVP = [first _visiblePosition];
&gt; +    auto secondVP = [second _visiblePosition];

Not new, but also don&apos;t think the abbreviations are great here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677124</commentid>
    <comment_count>8</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-08-01 08:50:42 -0700</bug_when>
    <thetext>Committed r265176: &lt;https://trac.webkit.org/changeset/265176&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 405709.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677125</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-08-01 08:51:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/66425375&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677126</commentid>
    <comment_count>10</comment_count>
      <attachid>405709</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-01 09:52:53 -0700</bug_when>
    <thetext>Comment on attachment 405709
Patch

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

&gt;&gt; Source/WebCore/dom/DocumentMarkerController.h:118
&gt;&gt; +WEBCORE_EXPORT SimpleRange range(Node&amp;, const DocumentMarker&amp;);
&gt; 
&gt; I am not sure how I feel about this just being called &quot;range&quot;, though I can see the arguments against making this an overload of makeSimpleRange as well.

I will rename to makeSimpleRange for now.

&gt;&gt; Source/WebKitLegacy/ios/WebCoreSupport/WebVisiblePosition.mm:479
&gt;&gt; +    auto secondVP = [second _visiblePosition];
&gt; 
&gt; Not new, but also don&apos;t think the abbreviations are great here.

I agree and almost changed them. Probably should have gone with firstPosition and secondPosition.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1677127</commentid>
    <comment_count>11</comment_count>
      <attachid>405709</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2020-08-01 09:52:54 -0700</bug_when>
    <thetext>Comment on attachment 405709
Patch

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

&gt;&gt; Source/WebCore/dom/DocumentMarkerController.h:118
&gt;&gt; +WEBCORE_EXPORT SimpleRange range(Node&amp;, const DocumentMarker&amp;);
&gt; 
&gt; I am not sure how I feel about this just being called &quot;range&quot;, though I can see the arguments against making this an overload of makeSimpleRange as well.

I will rename to makeSimpleRange for now.

&gt;&gt; Source/WebKitLegacy/ios/WebCoreSupport/WebVisiblePosition.mm:479
&gt;&gt; +    auto secondVP = [second _visiblePosition];
&gt; 
&gt; Not new, but also don&apos;t think the abbreviations are great here.

I agree and almost changed them. Probably should have gone with firstPosition and secondPosition.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405654</attachid>
            <date>2020-07-30 20:10:55 -0700</date>
            <delta_ts>2020-07-30 21:06:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215004-20200730201054.patch</filename>
            <type>text/plain</type>
            <size>126573</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MDk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTM2ZjQ3ZmNmNjM3ODg4
NTgzNTkwOWFmMzU2ZmRiZWMxNmQyOWZlMi4uZTc0ZjIxYjg5MjNkZTQ3OGY3NzEwNjhmODQxOWI5
YWVjYmRkYTc2NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUmFuZ2U6OmNyZWF0
ZSBhbmQgYWxtb3N0IGFsbCB1c2VzIG9mIGxpdmUgcmFuZ2VzOiBhZnRlciB0aGlzIGp1c3QgYnVy
biBkb3duIGFib3V0IDE1MCB1c2VzIG9mIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDA0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDctMzAgIEplciBOb2JsZSAgPGplci5ub2Js
ZUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBNYWtlIERlY29kZXJUZXN0IHJ1biBhZ2Fp
bnN0IC5tcDQgZmlsZXM7IGFkZCByYXRlLWxpbWl0aW5nLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKaW5k
ZXggNDQ4NjJhYjZhMmViYmYyN2E4ZWFmNWVjNDZkNzA1OGQzYTMxY2FlOS4uNjM1NDRjYjVhYWE1
ZGI2YzRjMWQzOTU4NDc5MTY0MzBkZDVmNTA1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCkBAIC0y
MTUxLDcgKzIxNTEsNyBAQCBJbnRSZWN0IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmJvdW5k
c0ZvclZpc2libGVQb3NpdGlvblJhbmdlKGNvbnN0IFZpc2libGVQbwogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIHJldHVybiBib3VuZHNGb3JSZWN0cyhyZWN0MSwgcmVjdDIsICptYWtlUmFu
Z2UocmFuZ2Uuc3RhcnQsIHJhbmdlLmVuZCkpOworICAgIHJldHVybiBib3VuZHNGb3JSZWN0cyhy
ZWN0MSwgcmVjdDIsICptYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKIH0KIAogSW50UmVjdCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYg
cmFuZ2UpIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9BWE9iamVjdENhY2hlQXRrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L0FYT2JqZWN0Q2FjaGVBdGsuY3BwCmluZGV4IGQxNTZhZWNlODY4NWVkMzQ0Yzk1NWVkMjdhZDkw
OTAzNjM2MWU4ODMuLmE3ZGE5YjJmNDFiYWY0MTE3MTlkMmQzN2UxNGZjYjEzOTRhNzZlMDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2FjaGVB
dGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL0FYT2JqZWN0Q2Fj
aGVBdGsuY3BwCkBAIC0zNTQsOCArMzU0LDcgQEAgdm9pZCBBWE9iamVjdENhY2hlOjpub2RlVGV4
dENoYW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKEFjY2Vzc2liaWxpdHlPYmplY3QqIG9iamUKICAg
ICAgICAgLy8gQ29uc2lkZXIgcHJldmlvdXMgdGV4dCBvYmplY3RzIHRoYXQgbWlnaHQgYmUgcHJl
c2VudCBmb3IKICAgICAgICAgLy8gdGhlIGN1cnJlbnQgYWNjZXNzaWJpbGl0eSBvYmplY3QgdG8g
ZW5zdXJlIHdlIGVtaXQgdGhlCiAgICAgICAgIC8vIHJpZ2h0IG9mZnNldCAoZS5nLiBtdWx0aWxp
bmUgdGV4dCBhcmVhcykuCi0gICAgICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3Vt
ZW50LCBub2RlLT5wYXJlbnROb2RlKCksIDAsIG5vZGUsIDApOwotICAgICAgICBvZmZzZXRUb0Vt
aXQgPSBvZmZzZXQgKyBjaGFyYWN0ZXJDb3VudChyYW5nZS5nZXQoKSk7CisgICAgICAgIG9mZnNl
dFRvRW1pdCA9IG9mZnNldCArIGNoYXJhY3RlckNvdW50KFNpbXBsZVJhbmdlIHsgeyAqbm9kZS0+
cGFyZW50Tm9kZSgpLCAwIH0sIHsgKm5vZGUsIDAgfSB9KTsKICAgICB9CiAKICAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUod3JhcHBlciwgZGV0YWlsLmRhdGEoKSwgb2Zmc2V0VG9FbWl0LCB0ZXh0
VG9FbWl0Lmxlbmd0aCgpLCB0ZXh0VG9FbWl0LnV0ZjgoKS5kYXRhKCkpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGlu
ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SHlwZXJsaW5rLmNwcAppbmRleCA5YWM4OTBiZjM1MWQ5ZmVjNTUwN2JjZjAyMDRmNGI2YzUzYzRl
MzUxLi4wNjgzZTBjYmE4MTRmYmVhZWZiM2QyYzk2OThjNDA1Mzg0YzMxYjM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSHlwZXJs
aW5rLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nl
c3NpYmxlSHlwZXJsaW5rLmNwcApAQCAtMTUxLDggKzE1MSwxMSBAQCBzdGF0aWMgQXRrT2JqZWN0
KiB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0T2JqZWN0KEF0a0h5cGVybGluayogbGluaywg
Z2ludCBpbgogICAgIHJldHVybiBBVEtfT0JKRUNUKGFjY2Vzc2libGVIeXBlcmxpbmstPnByaXYt
Pmh5cGVybGlua0ltcGwpOwogfQogCi1zdGF0aWMgZ2ludCByYW5nZUxlbmd0aEZvck9iamVjdChB
Y2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmosIFJhbmdlKiByYW5nZSkKK3N0YXRpYyBnaW50IHJhbmdl
TGVuZ3RoRm9yT2JqZWN0KEFjY2Vzc2liaWxpdHlPYmplY3QmIG9iaiwgY29uc3QgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+JiByYW5nZSkKIHsKKyAgICBpZiAoIXJhbmdlKQorICAgICAgICByZXR1cm4g
MDsKKwogICAgIC8vIFRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIGFjdHVhbCBsZW5ndGggaW4gbW9z
dCBvZiB0aGUgY2FzZXMKICAgICBpbnQgYmFzZUxlbmd0aCA9IGNoYXJhY3RlckNvdW50KCpyYW5n
ZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMp
OwogCkBAIC0xOTYsOCArMTk5LDcgQEAgc3RhdGljIGdpbnQgd2Via2l0QWNjZXNzaWJsZUh5cGVy
bGlua0dldFN0YXJ0SW5kZXgoQXRrSHlwZXJsaW5rKiBsaW5rKQogICAgIGlmICghcGFyZW50Tm9k
ZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShu
b2RlLT5kb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocGFyZW50Tm9kZSks
IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSk7Ci0gICAgcmV0dXJuIHJhbmdlTGVu
Z3RoRm9yT2JqZWN0KGNvcmVPYmplY3QsIHJhbmdlLnB0cigpKTsKKyAgICByZXR1cm4gcmFuZ2VM
ZW5ndGhGb3JPYmplY3QoY29yZU9iamVjdCwgbWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb25J
bk9yQmVmb3JlTm9kZShwYXJlbnROb2RlKSwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKG5v
ZGUpKSk7CiB9CiAKIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRFbmRJ
bmRleChBdGtIeXBlcmxpbmsqIGxpbmspCkBAIC0yMTgsOCArMjIwLDcgQEAgc3RhdGljIGdpbnQg
d2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0dldEVuZEluZGV4KEF0a0h5cGVybGluayogbGluaykK
ICAgICBpZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgYXV0byByYW5n
ZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluT3JCZWZv
cmVOb2RlKHBhcmVudE5vZGUpLCBsYXN0UG9zaXRpb25Jbk9yQWZ0ZXJOb2RlKG5vZGUpKTsKLSAg
ICByZXR1cm4gcmFuZ2VMZW5ndGhGb3JPYmplY3QoY29yZU9iamVjdCwgcmFuZ2UucHRyKCkpOwor
ICAgIHJldHVybiByYW5nZUxlbmd0aEZvck9iamVjdChjb3JlT2JqZWN0LCBtYWtlU2ltcGxlUmFu
Z2UoZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHBhcmVudE5vZGUpLCBsYXN0UG9zaXRpb25J
bk9yQWZ0ZXJOb2RlKG5vZGUpKSk7CiB9CiAKIHN0YXRpYyBnYm9vbGVhbiB3ZWJraXRBY2Nlc3Np
YmxlSHlwZXJsaW5rSXNWYWxpZChBdGtIeXBlcmxpbmsqIGxpbmspCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAKaW5kZXggMTE0ZmNhNzBkOTcyODJkMDNhNDUxY2QyODEyYzdiNjYx
ZmFjZDJhZC4uZDcwNmIyNzVkMWJiNmVkMzA0MTRiYThhODEwOGVmNTc2MzgzY2FjYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUlu
dGVyZmFjZVRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcApAQCAtNDA5LDEzICs0MDksMTMgQEAgc3Rh
dGljIHZvaWQgZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBjb3JlT2JqZWN0LCBWaXNpYmwKIAogICAgIC8vIENhbGN1bGF0ZSBwb3NpdGlvbiBvZiB0aGUg
c2VsZWN0ZWQgcmFuZ2UgaW5zaWRlIHRoZSBvYmplY3QuCiAgICAgUG9zaXRpb24gcGFyZW50Rmly
c3RQb3NpdGlvbiA9IGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKTsKLSAgICBhdXRv
IHJhbmdlSW5QYXJlbnQgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIHBhcmVudEZp
cnN0UG9zaXRpb24sIG5vZGVSYW5nZVN0YXJ0KTsKKyAgICBhdXRvIHJhbmdlSW5QYXJlbnQgPSAq
bWFrZVNpbXBsZVJhbmdlKHBhcmVudEZpcnN0UG9zaXRpb24sIG5vZGVSYW5nZVN0YXJ0KTsKIAog
ICAgIC8vIFNldCB2YWx1ZXMgZm9yIHN0YXJ0IG9mZnNldHMgYW5kIGNhbGN1bGF0ZSBpbml0aWFs
IHJhbmdlIGxlbmd0aC4KICAgICAvLyBUaGVzZSB2YWx1ZXMgbWlnaHQgYmUgYWRqdXN0ZWQgbGF0
ZXIgdG8gY292ZXIgc3BlY2lhbCBjYXNlcy4KLSAgICBzdGFydE9mZnNldCA9IHdlYkNvcmVPZmZz
ZXRUb0F0a09mZnNldChjb3JlT2JqZWN0LCBjaGFyYWN0ZXJDb3VudChyYW5nZUluUGFyZW50Lmdl
dCgpLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9u
cykpOwotICAgIGF1dG8gbm9kZVJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgp
LCBub2RlUmFuZ2VTdGFydCwgbm9kZVJhbmdlRW5kKTsKLSAgICBpbnQgcmFuZ2VMZW5ndGggPSBj
aGFyYWN0ZXJDb3VudChub2RlUmFuZ2UuZ2V0KCksIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICBzdGFydE9mZnNldCA9IHdlYkNvcmVP
ZmZzZXRUb0F0a09mZnNldChjb3JlT2JqZWN0LCBjaGFyYWN0ZXJDb3VudChyYW5nZUluUGFyZW50
LCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucykp
OworICAgIGF1dG8gbm9kZVJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShub2RlUmFuZ2VTdGFydCwg
bm9kZVJhbmdlRW5kKTsKKyAgICBpbnQgcmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChub2Rl
UmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKTsKIAogICAgIC8vIFNwZWNpYWwgY2FzZXMgdGhhdCBhcmUgb25seSByZWxldmFudCB3aGVu
IHdvcmtpbmcgd2l0aCAqX0VORCBib3VuZGFyaWVzLgogICAgIGlmIChzZWxlY3Rpb24uYWZmaW5p
dHkoKSA9PSBVUFNUUkVBTSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCmluZGV4IDJiZGFkYmEyNGRlMzE4
ZjdkNTkxMTI0OGQ2YTk1YTNjNWEyNjg4YzYuLjhkNjIxYmU3ODFlOTkwYzFkYzQwNjBmZWRmYjM5
MmI3MTY1NzU0YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRr
L1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKQEAgLTI0NiwxMCArMjQ2LDEwIEBAIEFY
Q29yZU9iamVjdCogb2JqZWN0Rm9jdXNlZEFuZENhcmV0T2Zmc2V0VW5pZ25vcmVkKEFYQ29yZU9i
amVjdCogcmVmZXJlbmNlT2JqZWN0CiAgICAgaWYgKHN0YXJ0UG9zaXRpb24gPT0gZW5kUG9zaXRp
b24pCiAgICAgICAgIG9mZnNldCA9IDA7CiAgICAgZWxzZSBpZiAoIWlzU3RhcnRPZkxpbmUoZW5k
UG9zaXRpb24pKSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uoc3Rh
cnRQb3NpdGlvbiwgZW5kUG9zaXRpb24ucHJldmlvdXMoKSk7CisgICAgICAgIGF1dG8gcmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24ucHJldmlvdXMoKSk7
CiAgICAgICAgIG9mZnNldCA9IChyYW5nZSA/IGNoYXJhY3RlckNvdW50KCpyYW5nZSwgVGV4dEl0
ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpIDogMCkgKyAx
OwogICAgIH0gZWxzZSB7Ci0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uo
c3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pOworICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKICAgICAgICAgb2Zmc2V0ID0g
cmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKSA6IDA7CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCmluZGV4IDlhYWVjYWE2MjkxZWUzM2FhOTliZmYzMjQy
N2IxYmE1YWFmYjZmMzUuLjBmY2UwZjIwNjRiYjRiODY5N2VhN2YyOGQ0M2IzNTg1ODlkZTAxODEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVySU9TLm1tCkBAIC0xNDgsNyArMTQ4
LDcgQEAgQGludGVyZmFjZSBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciA6IE5TT2JqZWN0CiAK
ICsgKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlcldpdGhWaXNpYmxlUG9z
aXRpb246KFZpc2libGVQb3NpdGlvbiYpdmlzaWJsZVBvcyBjYWNoZTooQVhPYmplY3RDYWNoZSop
Y2FjaGU7CiArIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJXaXRoQ2hh
cmFjdGVyT2Zmc2V0OihDaGFyYWN0ZXJPZmZzZXQmKWNoYXJhY3Rlck9mZnNldCBjYWNoZTooQVhP
YmplY3RDYWNoZSopY2FjaGU7Ci0rIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXN0YXJ0
T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6KGNvbnN0IFJlZlB0cjxSYW5nZT4pcmFuZ2UgaXNTdGFy
dDooQk9PTClpc1N0YXJ0IGNhY2hlOihBWE9iamVjdENhY2hlKiljYWNoZTsKKysgKFdlYkFjY2Vz
c2liaWxpdHlUZXh0TWFya2VyICopc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTooY29uc3Qg
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+JilyYW5nZSBpc1N0YXJ0OihCT09MKWlzU3RhcnQgY2FjaGU6
KEFYT2JqZWN0Q2FjaGUqKWNhY2hlOwogCiBAZW5kCiAKQEAgLTIwOCw3ICsyMDgsNyBAQCArIChX
ZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJXaXRoQ2hhcmFjdGVyT2Zmc2V0
OihDaGFyYWN0ZXJPZmZzZXQmKQogICAgIHJldHVybiBbW1tXZWJBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciBhbGxvY10gaW5pdFdpdGhUZXh0TWFya2VyOiZ0ZXh0TWFya2VyRGF0YSBjYWNoZTpjYWNo
ZV0gYXV0b3JlbGVhc2VdOwogfQogCi0rIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXN0
YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6KGNvbnN0IFJlZlB0cjxSYW5nZT4pcmFuZ2UgaXNT
dGFydDooQk9PTClpc1N0YXJ0IGNhY2hlOihBWE9iamVjdENhY2hlKiljYWNoZQorKyAoV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOihjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKXJhbmdlIGlzU3RhcnQ6KEJPT0wpaXNTdGFydCBjYWNo
ZTooQVhPYmplY3RDYWNoZSopY2FjaGUKIHsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1
cm4gbmlsOwpAQCAtMjI3MywxNyArMjI3Myw4IEBAIC0gKE5TQXJyYXkgKilhcnJheU9mVGV4dEZv
clRleHRNYXJrZXJzOihOU0FycmF5ICopbWFya2VycyBhdHRyaWJ1dGVkOihCT09MKWF0dHJpCiAg
ICAgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIqIGVuZE1hcmtlciA9IFttYXJrZXJzIG9iamVj
dEF0SW5kZXg6MV07CiAgICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtlciBpc0tpbmRPZkNsYXNz
OltXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIAotICAgIC8vIGV4dHJhY3QgdGhlIHN0YXJ0IGFuZCBlbmQgVmlzaWJsZVBvc2l0aW9u
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uID0gW3N0YXJ0TWFya2Vy
IHZpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFZpc2libGVQb3NpdGlvbiBlbmRWaXNp
YmxlUG9zaXRpb24gPSBbZW5kTWFya2VyIHZpc2libGVQb3NpdGlvbl07Ci0gICAgaWYgKGVuZFZp
c2libGVQb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIGF1dG8g
cmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnRWaXNpYmxlUG9zaXRpb24sIGVuZFZpc2libGVQb3NpdGlv
bik7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShbc3RhcnRNYXJrZXIgdmlzaWJs
ZVBvc2l0aW9uXSwgW2VuZE1hcmtlciB2aXNpYmxlUG9zaXRpb25dKTsKICAgICBpZiAoIXJhbmdl
KQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0yMzY2LDEwICsyMzU3LDEwIEBAIC0gKE5TUmFu
Z2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJhbmdlICopbGl2ZVJhbmdlCiAgICAgcmV0dXJuIE5TTWFr
ZVJhbmdlKGNoYXJhY3RlckNvdW50KHsgeyAqc2NvcGUsIDAgfSwgcmFuZ2Uuc3RhcnQgfSksIGNo
YXJhY3RlckNvdW50KHJhbmdlKSk7CiB9CiAKLS0gKFJlZlB0cjxSYW5nZT4pX2NvbnZlcnRUb0RP
TVJhbmdlOihOU1JhbmdlKXJhbmdlCistIChPcHRpb25hbDxTaW1wbGVSYW5nZT4pX2NvbnZlcnRU
b0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlCiB7CiAgICAgaWYgKHJhbmdlLmxvY2F0aW9uID09IE5T
Tm90Rm91bmQpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogCiAgICAgLy8gb3VyIGNyaXRpY2FsIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSBhcmUg
b25seSBjYWxsZWQgYnkgaW5wdXQgbWV0aG9kcyB0aGF0CiAgICAgLy8gY29uY2VudHJhdGUgb24g
YSBnaXZlbiBhcmVhIGNvbnRhaW5pbmcgdGhlIHNlbGVjdGlvbgpAQCAtMjM4MSw4ICsyMzcyLDkg
QEAgLSAoUmVmUHRyPFJhbmdlPilfY29udmVydFRvRE9NUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKICAg
ICBhdXRvIHNlbGVjdGlvblJvb3QgPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGF1dG8gc2NvcGUgPSBzZWxlY3Rp
b25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKTsKICAg
ICBpZiAoIXNjb3BlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICByZXR1cm4gY3JlYXRl
TGl2ZVJhbmdlKHJlc29sdmVDaGFyYWN0ZXJSYW5nZShtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoKnNjb3BlKSwgcmFuZ2UpKTsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKKwor
ICAgIHJldHVybiByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKCpzY29wZSksIHJhbmdlKTsKIH0KIAogLy8gVGhpcyBtZXRob2QgaXMgaW50ZW5kZWQg
dG8gdGFrZSBhIHRleHQgbWFya2VyIHJlcHJlc2VudGluZyBhIFZpc2libGVQb3NpdGlvbiBhbmQg
Y29udmVydCBpdApAQCAtMjQwOCw3ICsyNDAwLDcgQEAgLSAoTlNBcnJheSAqKXRleHRNYXJrZXJS
YW5nZQogewogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAg
ICAgIHJldHVybiBuaWw7Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6Y3Jl
YXRlTGl2ZVJhbmdlKHNlbGYuYXhCYWNraW5nT2JqZWN0LT5lbGVtZW50UmFuZ2UoKSkuZ2V0KCld
OworICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOnNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5lbGVtZW50UmFuZ2UoKV07CiB9CiAKIC8vIEEgbWV0aG9kIHRvIGdldCB0aGUgbm9ybWFs
aXplZCB0ZXh0IGN1cnNvciByYW5nZSBvZiBhbiBlbGVtZW50LiBVc2VkIGluIER1bXBSZW5kZXJU
cmVlLgpAQCAtMjQ3OCw3ICsyNDcwLDcgQEAgLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIg
Kil0ZXh0TWFya2VyRm9yUG9zaXRpb246KE5TSW50ZWdlcilwb3NpdGlvbgogICAgIGlmICghW3Nl
bGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAKLSAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYgX2NvbnZlcnRUb0RPTVJhbmdlOk5TTWFrZVJh
bmdlKHBvc2l0aW9uLCAwKV07CisgICAgYXV0byByYW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01S
YW5nZTpOU01ha2VSYW5nZShwb3NpdGlvbiwgMCldOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAg
IHJldHVybiBuaWw7CiAKQEAgLTI2ODcsNyArMjY3OSw3IEBAIC0gKE5TQXJyYXkgKiltaXNzcGVs
bGluZ1RleHRNYXJrZXJSYW5nZTooTlNBcnJheSAqKXN0YXJ0VGV4dE1hcmtlclJhbmdlIGZvcndh
cmQ6CiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgYXV0byBtaXNzcGVsbGluZ1JhbmdlID0gc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPm1pc3NwZWxsaW5nUmFuZ2UoKnN0YXJ0UmFuZ2UsCiAgICAgICAg
IGZvcndhcmQgPyBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uOjpOZXh0IDogQWNjZXNzaWJp
bGl0eVNlYXJjaERpcmVjdGlvbjo6UHJldmlvdXMpOwotICAgIHJldHVybiBbc2VsZiB0ZXh0TWFy
a2Vyc0ZvclJhbmdlOmNyZWF0ZUxpdmVSYW5nZShtaXNzcGVsbGluZ1JhbmdlKS5nZXQoKV07Cisg
ICAgcmV0dXJuIFtzZWxmIHRleHRNYXJrZXJzRm9yUmFuZ2U6bWlzc3BlbGxpbmdSYW5nZV07CiB9
CiAKIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbmV4dE1hcmtlckZvck1hcmtlcjoo
V2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKiltYXJrZXIKQEAgLTI3MjksMTcgKzI3MjEsMTcg
QEAgLSAoQ0dSZWN0KWZyYW1lRm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKilhcnJheQogICAgIHJl
dHVybiBbc2VsZiBjb252ZXJ0UmVjdFRvU3BhY2U6cmVjdCBzcGFjZTpBY2Nlc3NpYmlsaXR5Q29u
dmVyc2lvblNwYWNlOjpTY3JlZW5dOwogfQogCi0tIChSZWZQdHI8UmFuZ2U+KXJhbmdlRnJvbU1h
cmtlcnM6KE5TQXJyYXkgKiltYXJrZXJzIHdpdGhUZXh0OihOU1N0cmluZyAqKXRleHQKKy0gKE9w
dGlvbmFsPFNpbXBsZVJhbmdlPilyYW5nZUZyb21NYXJrZXJzOihOU0FycmF5ICopbWFya2VycyB3
aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBvcmlnaW5hbFJh
bmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyczptYXJrZXJzXTsKKyAgICBhdXRvIG9yaWdp
bmFsUmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOm1hcmtlcnNdOwogICAgIGlmICgh
b3JpZ2luYWxSYW5nZSkKLSAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgcmV0dXJuIFdURjo6
bnVsbG9wdDsKICAgICAKICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5n
T2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJu
IG5pbDsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKLSAgICByZXR1cm4gY3Jl
YXRlTGl2ZVJhbmdlKGNhY2hlLT5yYW5nZU1hdGNoZXNUZXh0TmVhclJhbmdlKCpvcmlnaW5hbFJh
bmdlLCB0ZXh0KSk7CisgICAgcmV0dXJuIGNhY2hlLT5yYW5nZU1hdGNoZXNUZXh0TmVhclJhbmdl
KCpvcmlnaW5hbFJhbmdlLCB0ZXh0KTsKIH0KIAogLy8gVGhpcyBpcyBvbmx5IHVzZWQgaW4gdGhl
IGxheW91dCB0ZXN0LgpAQCAtMjc1OCw3ICsyNzUwLDcgQEAgLSAoTlNBcnJheSAqKXRleHRSZWN0
c0Zyb21NYXJrZXJzOihOU0FycmF5ICopbWFya2VycyB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0
CiAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVj
dD4gcmVjdHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbklu
dGVyaW9yTGluZXMocmVjdHMpOworICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RT
ZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMocmVjdHMpOwogICAgIGlmIChy
ZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgcmV0dXJuIGNyZWF0ZU5T
QXJyYXkocmVjdHMsIFsmXSAoYXV0byYgcmVjdCkgewpAQCAtMjgwNCwyNCArMjc5NiwyNCBAQCAt
IChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXByZXZpb3VzTWFya2VyRm9yQ2hhcmFjdGVy
T2Zmc2V0OihDaGFyYWN0ZXJPZmZzZQogICAgIHJldHVybiBbW1tXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciBhbGxvY10gaW5pdFdpdGhUZXh0TWFya2VyOiZ0ZXh0TWFya2VyRGF0YSBjYWNoZTpj
YWNoZV0gYXV0b3JlbGVhc2VdOwogfQogCi0tIChSZWZQdHI8UmFuZ2U+KXJhbmdlRm9yVGV4dE1h
cmtlcnM6KE5TQXJyYXkgKil0ZXh0TWFya2VycworLSAoT3B0aW9uYWw8U2ltcGxlUmFuZ2U+KXJh
bmdlRm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKil0ZXh0TWFya2VycwogewogICAgIGlmIChbdGV4
dE1hcmtlcnMgY291bnRdICE9IDIpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBy
ZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
ICpzdGFydE1hcmtlciA9IFt0ZXh0TWFya2VycyBvYmplY3RBdEluZGV4OjBdOwogICAgIFdlYkFj
Y2Vzc2liaWxpdHlUZXh0TWFya2VyICplbmRNYXJrZXIgPSBbdGV4dE1hcmtlcnMgb2JqZWN0QXRJ
bmRleDoxXTsKICAgICAKICAgICBpZiAoIVtzdGFydE1hcmtlciBpc0tpbmRPZkNsYXNzOltXZWJB
Y2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dIHx8ICFbZW5kTWFya2VyIGlzS2luZE9mQ2xh
c3M6W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNzXV0pCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAgIEFYT2JqZWN0
Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKTsKICAg
ICBpZiAoIWNhY2hlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6bnVsbG9wdDsKICAgICAKICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFyYWN0ZXJPZmZz
ZXQgPSBbc3RhcnRNYXJrZXIgY2hhcmFjdGVyT2Zmc2V0XTsKICAgICBDaGFyYWN0ZXJPZmZzZXQg
ZW5kQ2hhcmFjdGVyT2Zmc2V0ID0gW2VuZE1hcmtlciBjaGFyYWN0ZXJPZmZzZXRdOwotICAgIHJl
dHVybiBjcmVhdGVMaXZlUmFuZ2UoY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zm
c2V0cyhzdGFydENoYXJhY3Rlck9mZnNldCwgZW5kQ2hhcmFjdGVyT2Zmc2V0KSk7CisgICAgcmV0
dXJuIGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFyYWN0
ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9mZnNldCk7CiB9CiAKIC0gKE5TSW50ZWdlcilsZW5ndGhG
b3JUZXh0TWFya2VyczooTlNBcnJheSAqKXRleHRNYXJrZXJzCkBAIC0yODQyLDcgKzI4MzQsNyBA
QCAtIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXN0YXJ0T3JFbmRUZXh0TWFya2VyRm9y
VGV4dE1hcmtlcnM6KE5TQXJyYXkgKil0ZQogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3Np
YmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlcnM6dGV4dE1hcmtlcnNdOworICAgIGF1
dG8gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJzXTsKICAgICBp
ZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtMjg1NCwxMSArMjg0Niwx
MCBAQCAtIChOU0FycmF5ICopdGV4dE1hcmtlclJhbmdlRm9yTWFya2VyczooTlNBcnJheSAqKXRl
eHRNYXJrZXJzCiAgICAgaWYgKCFbc2VsZiBfcHJlcGFyZUFjY2Vzc2liaWxpdHlDYWxsXSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3NlbGYg
cmFuZ2VGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc107Ci0gICAgcmV0dXJuIFtzZWxmIHRleHRN
YXJrZXJzRm9yUmFuZ2U6cmFuZ2VdOworICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJh
bmdlOltzZWxmIHJhbmdlRm9yVGV4dE1hcmtlcnM6dGV4dE1hcmtlcnNdXTsKIH0KIAotLSAoTlNB
cnJheSAqKXRleHRNYXJrZXJzRm9yUmFuZ2U6KFJlZlB0cjxSYW5nZT4pcmFuZ2UKKy0gKE5TQXJy
YXkgKil0ZXh0TWFya2Vyc0ZvclJhbmdlOihjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mKXJh
bmdlCiB7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KaW5kZXggYzM2MWM0MDExZjc0N2UwOTQ0NjQ4NjRm
M2ZjYTQxNzgyNzhmNWRiMC4uYWY4NDZjMTdmNjY2OWVhYTc5ODU3MjFhYTAyMjNkNGRkY2ZmMWM0
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9tYWMvV2ViQWNjZXNz
aWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9tYWMvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJNYWMubW0KQEAgLTY5Myw3ICs2
OTMsNyBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRl
eHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogCiAgICAgaWYgKFttYXJrZXJSYW5nZXMg
aXNLaW5kT2ZDbGFzczpbTlNBcnJheSBjbGFzc11dKSB7CiAgICAgICAgIG9wZXJhdGlvbi50ZXh0
UmFuZ2VzID0gbWFrZVZlY3RvcihtYXJrZXJSYW5nZXMsIFt3cmFwcGVyXSAoaWQgbWFya2VyUmFu
Z2UpIHsKLSAgICAgICAgICAgIHJldHVybiBtYWtlU2ltcGxlUmFuZ2UoW3dyYXBwZXIgcmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdKTsKKyAgICAgICAgICAgIHJldHVybiBbd3Jh
cHBlciByYW5nZUZvclRleHRNYXJrZXJSYW5nZTptYXJrZXJSYW5nZV07CiAgICAgICAgIH0pOwog
ICAgIH0KIApAQCAtNzE0LDkgKzcxNCw5IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5VGV4dE9wZXJh
dGlvbiBhY2Nlc3NpYmlsaXR5VGV4dE9wZXJhdGlvbkZvclBhcmFtZXRlcml6ZWRBdHRyCiAgICAg
cmV0dXJuIG9wZXJhdGlvbjsKIH0KIAotc3RhdGljIHN0ZDo6cGFpcjxSZWZQdHI8UmFuZ2U+LCBB
Y2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBhY2Nlc3NpYmlsaXR5TWlzc3BlbGxpbmdTZWFy
Y2hDcml0ZXJpYUZvclBhcmFtZXRlcml6ZWRBdHRyaWJ1dGUoV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgKm9iamVjdCwgY29uc3QgTlNEaWN0aW9uYXJ5ICpwYXJhbXMpCitzdGF0aWMgc3Rk
OjpwYWlyPE9wdGlvbmFsPFNpbXBsZVJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlv
bj4gYWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVk
QXR0cmlidXRlKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICpvYmplY3QsIGNvbnN0IE5T
RGljdGlvbmFyeSAqcGFyYW1zKQogewotICAgIHN0ZDo6cGFpcjxSZWZQdHI8UmFuZ2U+LCBBY2Nl
c3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBjcml0ZXJpYTsKKyAgICBzdGQ6OnBhaXI8T3B0aW9u
YWw8U2ltcGxlUmFuZ2U+LCBBY2Nlc3NpYmlsaXR5U2VhcmNoRGlyZWN0aW9uPiBjcml0ZXJpYTsK
IAogICAgIGNyaXRlcmlhLmZpcnN0ID0gW29iamVjdCByYW5nZUZvclRleHRNYXJrZXJSYW5nZTpb
cGFyYW1zIG9iamVjdEZvcktleTpAIkFYU3RhcnRUZXh0TWFya2VyUmFuZ2UiXV07CiAKQEAgLTc3
NywyNiArNzc3LDI2IEBAIHN0YXRpYyBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBhY2Nlc3NpYmlsaXR5
T2JqZWN0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoCiAgICAgcmV0dXJuIGNhY2hl
LT5hY2Nlc3NpYmlsaXR5T2JqZWN0Rm9yVGV4dE1hcmtlckRhdGEodGV4dE1hcmtlckRhdGEpOwog
fQogCi0tIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6KGNvbnN0IFJlZlB0cjxSYW5nZT4p
cmFuZ2UKKy0gKGlkKXRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTooY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JilyYW5nZQogewogICAgIGlmIChhdXRvKiBiYWNraW5nT2JqZWN0ID0gc2VsZi5h
eEJhY2tpbmdPYmplY3QpCiAgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2Uo
YmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCByYW5nZSk7CiAgICAgcmV0dXJuIG5pbDsK
IH0KIAotc3RhdGljIGlkIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShBWE9iamVjdENhY2hlKiBj
YWNoZSwgY29uc3QgUmVmUHRyPFJhbmdlPiByYW5nZSkKK3N0YXRpYyBpZCB0ZXh0TWFya2VyUmFu
Z2VGcm9tUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiYgcmFuZ2UpCiB7CiAgICAgaWQgc3RhcnRUZXh0TWFya2VyID0gc3RhcnRPckVuZFRleHRt
YXJrZXJGb3JSYW5nZShjYWNoZSwgcmFuZ2UsIHRydWUpOwogICAgIGlkIGVuZFRleHRNYXJrZXIg
PSBzdGFydE9yRW5kVGV4dG1hcmtlckZvclJhbmdlKGNhY2hlLCByYW5nZSwgZmFsc2UpOwogICAg
IHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tTWFya2VycyhzdGFydFRleHRNYXJrZXIsIGVuZFRl
eHRNYXJrZXIpOwogfQogCi0tIChpZClzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOihjb25z
dCBSZWZQdHI8UmFuZ2U+KXJhbmdlIGlzU3RhcnQ6KEJPT0wpaXNTdGFydAorLSAoaWQpc3RhcnRP
ckVuZFRleHRNYXJrZXJGb3JSYW5nZTooY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JilyYW5n
ZSBpc1N0YXJ0OihCT09MKWlzU3RhcnQKIHsKICAgICByZXR1cm4gc3RhcnRPckVuZFRleHRtYXJr
ZXJGb3JSYW5nZShzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpLCByYW5nZSwg
aXNTdGFydCk7CiB9CiAKLXN0YXRpYyBpZCBzdGFydE9yRW5kVGV4dG1hcmtlckZvclJhbmdlKEFY
T2JqZWN0Q2FjaGUqIGNhY2hlLCBSZWZQdHI8UmFuZ2U+IHJhbmdlLCBib29sIGlzU3RhcnQpCitz
dGF0aWMgaWQgc3RhcnRPckVuZFRleHRtYXJrZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiBjYWNo
ZSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiByYW5nZSwgYm9vbCBpc1N0YXJ0KQogewog
ICAgIGlmICghY2FjaGUpCiAgICAgICAgIHJldHVybiBuaWw7CkBAIC04NjQsMjQgKzg2NCwyNCBA
QCBzdGF0aWMgaWQgdGV4dE1hcmtlckZvckNoYXJhY3Rlck9mZnNldChBWE9iamVjdENhY2hlKiBj
YWNoZSwgY29uc3QgQ2hhcmFjdGVyT2ZmcwogICAgIHJldHVybiBDRkJyaWRnaW5nUmVsZWFzZShB
WFRleHRNYXJrZXJDcmVhdGUoa0NGQWxsb2NhdG9yRGVmYXVsdCwgKGNvbnN0IFVJbnQ4KikmdGV4
dE1hcmtlckRhdGEsIHNpemVvZih0ZXh0TWFya2VyRGF0YSkpKTsKIH0KIAotLSAoUmVmUHRyPFJh
bmdlPilyYW5nZUZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJhbmdlCistIChPcHRp
b25hbDxTaW1wbGVSYW5nZT4pcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJS
YW5nZQogewogICAgIGlmICghdGV4dE1hcmtlclJhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBpZCBzdGFydFRleHRN
YXJrZXIgPSBBWFRleHRNYXJrZXJSYW5nZVN0YXJ0KHRleHRNYXJrZXJSYW5nZSk7CiAgICAgaWQg
ZW5kVGV4dE1hcmtlciA9IEFYVGV4dE1hcmtlclJhbmdlRW5kKHRleHRNYXJrZXJSYW5nZSk7CiAg
ICAgCiAgICAgaWYgKCFzdGFydFRleHRNYXJrZXIgfHwgIWVuZFRleHRNYXJrZXIpCi0gICAgICAg
IHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OwogICAgIAogICAg
IEFYT2JqZWN0Q2FjaGUqIGNhY2hlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKTsKICAgICBpZiAoIWNhY2hlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBDaGFyYWN0ZXJPZmZzZXQgc3RhcnRDaGFy
YWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnN0YXJ0VGV4
dE1hcmtlcl07CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldCA9IFtzZWxm
IGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6ZW5kVGV4dE1hcmtlcl07Ci0gICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZShjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRz
KHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0LCBlbmRDaGFyYWN0ZXJPZmZzZXQpKTsKKyAgICByZXR1cm4g
Y2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydENoYXJhY3Rlck9m
ZnNldCwgZW5kQ2hhcmFjdGVyT2Zmc2V0KTsKIH0KIAogc3RhdGljIENoYXJhY3Rlck9mZnNldCBj
aGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBDRlR5cGVS
ZWYgdGV4dE1hcmtlcikKQEAgLTEyNDIsNyArMTI0Miw3IEBAIC0gKE5TQXR0cmlidXRlZFN0cmlu
ZyAqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2Vy
UmFuCiAgICAgICAgIGlmICghYmFja2luZ09iamVjdCkKICAgICAgICAgICAgIHJldHVybiBuaWw7
CiAKLSAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9y
VGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgICAgIGF1dG8gcmFuZ2UgPSBb
cHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwog
ICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgYXV0
byBhdHRyU3RyaW5nID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgYWxsb2Nd
IGluaXRdKTsKQEAgLTM2MTgsNyArMzYxOCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5U
QVRJT05TX0VORAogLSAoTlNBdHRyaWJ1dGVkU3RyaW5nICopZG9BWEF0dHJpYnV0ZWRTdHJpbmdG
b3JSYW5nZTooTlNSYW5nZSlyYW5nZQogewogICAgIGF1dG8gd2ViUmFuZ2UgPSBzZWxmLmF4QmFj
a2luZ09iamVjdC0+cmFuZ2VGb3JQbGFpblRleHRSYW5nZShyYW5nZSk7Ci0gICAgcmV0dXJuIFtz
ZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJhbmdlOltzZWxmIHRleHRNYXJr
ZXJSYW5nZUZyb21SYW5nZTpjcmVhdGVMaXZlUmFuZ2Uod2ViUmFuZ2UpXSBzcGVsbENoZWNrOllF
U107CisgICAgcmV0dXJuIFtzZWxmIGRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yVGV4dE1hcmtlclJh
bmdlOltzZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTp3ZWJSYW5nZV0gc3BlbGxDaGVjazpZ
RVNdOwogfQogCiAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSopcmFuZ2UKQEAg
LTM3ODcsNyArMzc4Nyw3IEBAIC0gKGlkKXRleHRNYXJrZXJSYW5nZUF0VGV4dE1hcmtlcjooaWQp
dGV4dE1hcmtlciBmb3JVbml0OihUZXh0VW5pdCl0ZXh0VW5pdAogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KIAotICAgICAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKGNh
Y2hlLCBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpKTsKKyAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJS
YW5nZUZyb21SYW5nZShjYWNoZSwgcmFuZ2UpOwogICAgIH0pOwogfQogCkBAIC0zOTU0LDcgKzM5
NTQsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKICAgICAgICAgICAg
IGlmIChyYW5nZXMuaXNFbXB0eSgpKQogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShyYW5nZXMsIFsmXSAoYXV0byYgcmFuZ2UpIHsK
LSAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJv
bVJhbmdlOmNyZWF0ZUxpdmVSYW5nZShyYW5nZSldOworICAgICAgICAgICAgICAgIHJldHVybiBb
cHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdOwogICAgICAgICAg
ICAgfSkuYXV0b3JlbGVhc2UoKTsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDAzMCw3ICs0MDMw
LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICAg
ICAgcmV0dXJuIG5pbDsKIAogICAgICAgICAgICAgaWYgKGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9
IGJhY2tpbmdPYmplY3QtPm1pc3NwZWxsaW5nUmFuZ2UoKmNyaXRlcmlhLmZpcnN0LCBjcml0ZXJp
YS5zZWNvbmQpKQotICAgICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKCptaXNzcGVsbGluZ1JhbmdlKV07Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21S
YW5nZToqbWlzc3BlbGxpbmdSYW5nZV07CiAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAg
ICB9KTsKICAgICB9CkBAIC00MDcwLDcgKzQwNzAsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExF
TUVOVEFUSU9OU19FTkQKIAogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFY
VGV4dE1hcmtlclJhbmdlRm9yVUlFbGVtZW50Il0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2li
aWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ1aUVs
ZW1lbnQsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxp
ZD4gewotICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZy
b21SYW5nZTpjcmVhdGVMaXZlUmFuZ2UodWlFbGVtZW50LmdldCgpLT5lbGVtZW50UmFuZ2UoKSld
OworICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21S
YW5nZTp1aUVsZW1lbnQuZ2V0KCktPmVsZW1lbnRSYW5nZSgpXTsKICAgICAgICAgfSk7CiAgICAg
fQogCkBAIC00MjIyLDcgKzQyMjIsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9O
U19FTkQKICAgICAgICAgICAgIENoYXJhY3Rlck9mZnNldCBjaGFyYWN0ZXJPZmZzZXQxID0gW3By
b3RlY3RlZFNlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjp0ZXh0TWFya2VyMV07CiAg
ICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0MiA9IFtwcm90ZWN0ZWRT
ZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcjJdOwogICAgICAgICAg
ICAgYXV0byByYW5nZSA9IGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMo
Y2hhcmFjdGVyT2Zmc2V0MSwgY2hhcmFjdGVyT2Zmc2V0Mik7Ci0gICAgICAgICAgICByZXR1cm4g
W3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOmNyZWF0ZUxpdmVSYW5nZShy
YW5nZSldOworICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5n
ZUZyb21SYW5nZTpyYW5nZV07CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNDMwNCw3ICs0MzA0
LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBp
ZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICAgICAg
ICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJr
ZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICAgICAgYXV0byByYW5nZSA9IFtwcm90
ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CiAgICAg
ICAgICAgICBpZiAoIXJhbmdlKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg
ICAgcmV0dXJuIEFYT2JqZWN0Q2FjaGU6Omxlbmd0aEZvclJhbmdlKFNpbXBsZVJhbmdlIHsgKnJh
bmdlIH0pOwpAQCAtNDMxNywxNCArNDMxNywxNCBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVO
VEFUSU9OU19FTkQKICAgICAvLyBVc2VkIG9ubHkgYnkgRHVtcFJlbmRlclRyZWUgKHNvIGZhciku
CiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhTdGFydFRleHRNYXJrZXJG
b3JUZXh0TWFya2VyUmFuZ2UiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0
cmlldmVBdXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXJSYW5n
ZSwgcHJvdGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7
Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAgICAgIGF1dG8gcmFu
Z2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFu
Z2VdOwogICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHN0YXJ0T3JFbmRUZXh0TWFy
a2VyRm9yUmFuZ2U6cmFuZ2UgaXNTdGFydDpZRVNdOwogICAgICAgICB9KTsKICAgICB9CiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWEVuZFRleHRNYXJrZXJGb3JUZXh0
TWFya2VyUmFuZ2UiXSkgewogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0eTo6cmV0cmlldmVB
dXRvcmVsZWFzZWRWYWx1ZUZyb21NYWluVGhyZWFkPGlkPihbJnRleHRNYXJrZXJSYW5nZSwgcHJv
dGVjdGVkU2VsZiA9IHJldGFpblB0cihzZWxmKV0gKCkgLT4gUmV0YWluUHRyPGlkPiB7Ci0gICAg
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0
TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBb
cHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwog
ICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHN0YXJ0T3JFbmRUZXh0TWFya2VyRm9y
UmFuZ2U6cmFuZ2UgaXNTdGFydDpOT107CiAgICAgICAgIH0pOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHAKaW5kZXggNjBkZTYzMGVi
MGJiNjBlN2NkY2Y4N2JmMmVjODhlZDg1ZDBiZGEzNi4uNjhjYzc2NWYwMzA2N2UyYTc4ZjZkYTUx
NGNlYzdiZmQyY2Q2MjY1YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFy
a2VyQ29udHJvbGxlci5jcHAKQEAgLTEwNSw4ICsxMDUsNyBAQCB2b2lkIERvY3VtZW50TWFya2Vy
Q29udHJvbGxlcjo6ZmlsdGVyTWFya2Vycyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIGNvbnN0
IEZ1bgogc3RhdGljIHZvaWQgdXBkYXRlUmVuZGVyZWRSZWN0c0Zvck1hcmtlcihSZW5kZXJlZERv
Y3VtZW50TWFya2VyJiBtYXJrZXIsIE5vZGUmIG5vZGUpCiB7CiAgICAgQVNTRVJUKCFub2RlLmRv
Y3VtZW50KCkudmlldygpIHx8ICFub2RlLmRvY3VtZW50KCkudmlldygpLT5uZWVkc0xheW91dCgp
KTsKLSAgICBhdXRvIHJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7IG5vZGUsIG1hcmtlci5zdGFydE9m
ZnNldCgpIH0sIHsgbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpIH0gfTsKLSAgICBtYXJrZXIuc2V0
VW5jbGlwcGVkQWJzb2x1dGVSZWN0cyhib3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1
dGVUZXh0UXVhZHMocmFuZ2UsIHRydWUpKSk7CisgICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29s
dXRlUmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJh
bmdlKG5vZGUsIG1hcmtlciksIHRydWUpKSk7CiB9CiAKIHZvaWQgRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyOjppbnZhbGlkYXRlUmVjdHNGb3JBbGxNYXJrZXJzKCkKQEAgLTY2Myw2ICs2NjIsMTMg
QEAgdm9pZCByZW1vdmVNYXJrZXJzKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSwgT3B0aW9uU2V0
PERvY3VtZW50TWFya2VyOjpNYXJrZXJUeXAKICAgICByYW5nZS5zdGFydC5jb250YWluZXItPmRv
Y3VtZW50KCkubWFya2VycygpLnJlbW92ZU1hcmtlcnMocmFuZ2UsIHR5cGVzLCBwb2xpY3kpOwog
fQogCitTaW1wbGVSYW5nZSByYW5nZShOb2RlJiBub2RlLCBjb25zdCBEb2N1bWVudE1hcmtlciYg
bWFya2VyKQoreworICAgIHVuc2lnbmVkIHN0YXJ0T2Zmc2V0ID0gbWFya2VyLnN0YXJ0T2Zmc2V0
KCk7CisgICAgdW5zaWduZWQgZW5kT2Zmc2V0ID0gbWFya2VyLmVuZE9mZnNldCgpOworICAgIHJl
dHVybiB7IHsgbm9kZSwgc3RhcnRPZmZzZXQgfSwgeyBub2RlLCBlbmRPZmZzZXQgfSB9OworfQor
CiAjaWYgRU5BQkxFKFRSRUVfREVCVUdHSU5HKQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJv
bGxlcjo6c2hvd01hcmtlcnMoKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
TWFya2VyQ29udHJvbGxlci5oCmluZGV4IGFhZWZmMDViMGQ4NGY5ZTI5N2Q4ODMwZWYwMmQxODU1
ZjE4YWE1MDMuLjBiNDRlMmMyZWQzYmVlNTM0M2ViNzY0ODdkZTJiNWY2MjA0MGNkNzIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKQEAgLTExNSw2
ICsxMTUsOCBAQCB2b2lkIGFkZE1hcmtlcihjb25zdCBTaW1wbGVSYW5nZSYsIERvY3VtZW50TWFy
a2VyOjpNYXJrZXJUeXBlLCBjb25zdCBEb2N1bWVudE1hcgogdm9pZCBhZGRNYXJrZXIoVGV4dCYs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIERvY3VtZW50TWFya2VyOjpN
YXJrZXJUeXBlLCBEb2N1bWVudE1hcmtlcjo6RGF0YSYmID0geyB9KTsKIHZvaWQgcmVtb3ZlTWFy
a2Vycyhjb25zdCBTaW1wbGVSYW5nZSYsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2Vy
VHlwZT4gPSBEb2N1bWVudE1hcmtlcjo6YWxsTWFya2VycygpLCBSZW1vdmVQYXJ0aWFsbHlPdmVy
bGFwcGluZ01hcmtlciA9IFJlbW92ZVBhcnRpYWxseU92ZXJsYXBwaW5nTWFya2VyOjpObyk7CiAK
K1dFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIHJhbmdlKE5vZGUmLCBjb25zdCBEb2N1bWVudE1h
cmtlciYpOworCiBpbmxpbmUgYm9vbCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6Omhhc01hcmtl
cnMoKSBjb25zdAogewogICAgIEFTU0VSVChtX21hcmtlcnMuaXNFbXB0eSgpID09ICFtX3Bvc3Np
Ymx5RXhpc3RpbmdNYXJrZXJUeXBlcy5jb250YWluc0FueShEb2N1bWVudE1hcmtlcjo6YWxsTWFy
a2VycygpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAppbmRleCA5ZTJlMmRlYjE4Mjg0Yzc5YzEx
YTM0NGUwNDc3YzY2NGRmMTc3ZDJkLi40YjI2NDk5MGY4YzIxY2JkOTNmZmZjMTgxNzdjZTEzYWY1
NDBhMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKQEAgLTQyLDcgKzQyLDYgQEAKICNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm9kZVRyYXZlcnNhbC5oIgogI2luY2x1ZGUgIlBv
c2l0aW9uSXRlcmF0b3IuaCIKLSNpbmNsdWRlICJSYW5nZS5oIgogI2luY2x1ZGUgIlJlbmRlckJs
b2NrLmgiCiAjaW5jbHVkZSAiUmVuZGVyRmxleGlibGVCb3guaCIKICNpbmNsdWRlICJSZW5kZXJH
cmlkLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvZG9tL1JhbmdlLmNwcAppbmRleCA5YjdhMWE2MjEyMTk1YTJlNDc0OGNiMjk3MTk0
NGMxNjYzMjgwMDk2Li4yNjYxODVlYmQ3OTUyZGMyMmE1Y2E3ZTQ0MjViZTk1NTEyZDRmMWJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9SYW5nZS5jcHAKQEAgLTg4LDQyICs4OCw2IEBAIFJlZjxSYW5nZT4gUmFuZ2U6OmNy
ZWF0ZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCkKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBS
YW5nZShvd25lckRvY3VtZW50KSk7CiB9CiAKLWlubGluZSBSYW5nZTo6UmFuZ2UoRG9jdW1lbnQm
IG93bmVyRG9jdW1lbnQsIE5vZGUqIHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIE5v
ZGUqIGVuZENvbnRhaW5lciwgaW50IGVuZE9mZnNldCkKLSAgICA6IG1fb3duZXJEb2N1bWVudChv
d25lckRvY3VtZW50KQotICAgICwgbV9zdGFydCgmb3duZXJEb2N1bWVudCkKLSAgICAsIG1fZW5k
KCZvd25lckRvY3VtZW50KQotewotI2lmbmRlZiBOREVCVUcKLSAgICByYW5nZUNvdW50ZXIuaW5j
cmVtZW50KCk7Ci0jZW5kaWYKLQotICAgIG1fb3duZXJEb2N1bWVudC0+YXR0YWNoUmFuZ2UoKnRo
aXMpOwotCi0gICAgLy8gU2ltcGx5IHNldHRpbmcgdGhlIGNvbnRhaW5lcnMgYW5kIG9mZnNldHMg
ZGlyZWN0bHkgd291bGQgbm90IGRvIGFueSBvZiB0aGUgY2hlY2tpbmcKLSAgICAvLyB0aGF0IHNl
dFN0YXJ0IGFuZCBzZXRFbmQgZG8sIHNvIHdlIGNhbGwgdGhvc2UgZnVuY3Rpb25zLgotICAgIGlm
IChzdGFydENvbnRhaW5lcikKLSAgICAgICAgc2V0U3RhcnQoKnN0YXJ0Q29udGFpbmVyLCBzdGFy
dE9mZnNldCk7Ci0gICAgaWYgKGVuZENvbnRhaW5lcikKLSAgICAgICAgc2V0RW5kKCplbmRDb250
YWluZXIsIGVuZE9mZnNldCk7Ci19Ci0KLVJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVu
dCYgb3duZXJEb2N1bWVudCwgUmVmUHRyPE5vZGU+JiYgc3RhcnRDb250YWluZXIsIGludCBzdGFy
dE9mZnNldCwgUmVmUHRyPE5vZGU+JiYgZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KQotewot
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0Q29udGFp
bmVyLmdldCgpLCBzdGFydE9mZnNldCwgZW5kQ29udGFpbmVyLmdldCgpLCBlbmRPZmZzZXQpKTsK
LX0KLQotUmVmPFJhbmdlPiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQpCi17Ci0gICAgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCwgc3RhcnQuY29udGFpbmVyTm9kZSgp
LCBzdGFydC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGVuZC5jb250YWluZXJOb2Rl
KCksIGVuZC5jb21wdXRlT2Zmc2V0SW5Db250YWluZXJOb2RlKCkpKTsKLX0KLQotUmVmPFJhbmdl
PiBSYW5nZTo6Y3JlYXRlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBjb25zdCBWaXNpYmxlUG9z
aXRpb24mIHZpc2libGVTdGFydCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlRW5kKQot
ewotICAgIFBvc2l0aW9uIHN0YXJ0ID0gdmlzaWJsZVN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgUG9zaXRpb24gZW5kID0gdmlzaWJsZUVuZC5k
ZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0LmFuY2hvck5vZGUoKSwgc3Rh
cnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSwgZW5kLmFuY2hvck5vZGUoKSwgZW5kLmRlcHJl
Y2F0ZWRFZGl0aW5nT2Zmc2V0KCkpKTsKLX0KLQogUmFuZ2U6On5SYW5nZSgpCiB7CiAgICAgbV9v
d25lckRvY3VtZW50LT5kZXRhY2hSYW5nZSgqdGhpcyk7CkBAIC0xOTUsMjIgKzE1OSw2IEBAIEV4
Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmQoUmVmPE5vZGU+JiYgcmVmTm9kZSwgdW5zaWdu
ZWQgb2Zmc2V0KQogICAgIHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdl
OjpzZXRTdGFydChjb25zdCBQb3NpdGlvbiYgc3RhcnQpCi17Ci0gICAgUG9zaXRpb24gcGFyZW50
QW5jaG9yZWQgPSBzdGFydC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpZiAoIXBh
cmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IFR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRTdGFydCgqcGFyZW50QW5jaG9yZWQuY29udGFp
bmVyTm9kZSgpLCBwYXJlbnRBbmNob3JlZC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSk7Ci19Ci0K
LUV4Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRFbmQoY29uc3QgUG9zaXRpb24mIGVuZCkKLXsK
LSAgICBQb3NpdGlvbiBwYXJlbnRBbmNob3JlZCA9IGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKTsKLSAgICBpZiAoIXBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSkKLSAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciB9OwotICAgIHJldHVybiBzZXRFbmQoKnBhcmVu
dEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zmc2V0SW5Db250YWlu
ZXJOb2RlKCkpOwotfQotCiB2b2lkIFJhbmdlOjpjb2xsYXBzZShib29sIHRvU3RhcnQpCiB7CiAg
ICAgaWYgKHRvU3RhcnQpCkBAIC05OTQsNyArOTQyLDEwIEBAIEV4Y2VwdGlvbk9yPE5vZGUqPiBS
YW5nZTo6Y2hlY2tOb2RlV09mZnNldChOb2RlJiBub2RlLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0
CiAKIFJlZjxSYW5nZT4gUmFuZ2U6OmNsb25lUmFuZ2UoKSBjb25zdAogewotICAgIHJldHVybiBS
YW5nZTo6Y3JlYXRlKG93bmVyRG9jdW1lbnQoKSwgJnN0YXJ0Q29udGFpbmVyKCksIG1fc3RhcnQu
b2Zmc2V0KCksICZlbmRDb250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpOworICAgIGF1dG8gcmVz
dWx0ID0gY3JlYXRlKG93bmVyRG9jdW1lbnQoKSk7CisgICAgcmVzdWx0LT5zZXRTdGFydChzdGFy
dENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpKTsKKyAgICByZXN1bHQtPnNldEVuZChlbmRD
b250YWluZXIoKSwgbV9lbmQub2Zmc2V0KCkpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIEV4
Y2VwdGlvbk9yPHZvaWQ+IFJhbmdlOjpzZXRTdGFydEFmdGVyKE5vZGUmIHJlZk5vZGUpCkBAIC0x
NDk3LDEwICsxNDQ4LDEwIEBAIGJvb2wgUmFuZ2U6OmNvbnRhaW5zKGNvbnN0IFJhbmdlJiBvdGhl
cikgY29uc3QKIAogYm9vbCBSYW5nZTo6Y29udGFpbnMoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiBw
b3NpdGlvbikgY29uc3QKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHBvc2l0aW9uUmFuZ2UgPSBtYWtl
UmFuZ2UocG9zaXRpb24sIHBvc2l0aW9uKTsKKyAgICBhdXRvIHBvc2l0aW9uUmFuZ2UgPSBtYWtl
U2ltcGxlUmFuZ2UocG9zaXRpb24pOwogICAgIGlmICghcG9zaXRpb25SYW5nZSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBjb250YWlucygqcG9zaXRpb25SYW5nZSk7CisgICAg
cmV0dXJuIGNvbnRhaW5zKGNyZWF0ZUxpdmVSYW5nZSgqcG9zaXRpb25SYW5nZSkpOwogfQogCiBi
b29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiBhLCBjb25zdCBSYW5nZSogYikKQEAgLTE1
NDEsMTMgKzE0OTIsNiBAQCBib29sIHJhbmdlc092ZXJsYXAoY29uc3QgUmFuZ2UqIGEsIGNvbnN0
IFJhbmdlKiBiKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotUmVmPFJhbmdlPiByYW5nZU9mQ29u
dGVudHMoTm9kZSYgbm9kZSkKLXsKLSAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShub2Rl
LmRvY3VtZW50KCkpOwotICAgIHJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMobm9kZSk7Ci0gICAg
cmV0dXJuIHJhbmdlOwotfQotCiBzdGF0aWMgaW5saW5lIHZvaWQgYm91bmRhcnlOb2RlQ2hpbGRy
ZW5DaGFuZ2VkKFJhbmdlQm91bmRhcnlQb2ludCYgYm91bmRhcnksIENvbnRhaW5lck5vZGUmIGNv
bnRhaW5lcikKIHsKICAgICBpZiAoIWJvdW5kYXJ5LmNoaWxkQmVmb3JlKCkpCkBAIC0xODU3LDcg
KzE4MDEsMTIgQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VTaW1wbGVSYW5nZShjb25zdCBS
ZWZQdHI8UmFuZ2U+JiByYW5nZSkKIAogUmVmPFJhbmdlPiBjcmVhdGVMaXZlUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKQogewotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHJhbmdlLnN0
YXJ0LmRvY3VtZW50KCksIHJhbmdlLnN0YXJ0LmNvbnRhaW5lci5wdHIoKSwgcmFuZ2Uuc3RhcnQu
b2Zmc2V0LCByYW5nZS5lbmQuY29udGFpbmVyLnB0cigpLCByYW5nZS5lbmQub2Zmc2V0KTsKKyAg
ICBhdXRvIHJlc3VsdCA9IFJhbmdlOjpjcmVhdGUocmFuZ2Uuc3RhcnQuZG9jdW1lbnQoKSk7Cisg
ICAgYXV0byBzdGFydENvbnRhaW5lciA9IHJhbmdlLnN0YXJ0LmNvbnRhaW5lcjsKKyAgICByZXN1
bHQtPnNldFN0YXJ0KFdURk1vdmUoc3RhcnRDb250YWluZXIpLCByYW5nZS5zdGFydC5vZmZzZXQp
OworICAgIGF1dG8gZW5kQ29udGFpbmVyID0gcmFuZ2UuZW5kLmNvbnRhaW5lcjsKKyAgICByZXN1
bHQtPnNldEVuZChXVEZNb3ZlKGVuZENvbnRhaW5lciksIHJhbmdlLmVuZC5vZmZzZXQpOworICAg
IHJldHVybiByZXN1bHQ7CiB9CiAKIFJlZlB0cjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCmluZGV4IGQzMTIyNTRk
Y2RiYTJmODUyNjJmZTBmMzYxNDcwZjNhMzUxYjZjYTkuLjNiZWNmZGQwZTIyNDY1ODRjMDRkNzU5
NGQ4MDM2NTIwY2UzOThjNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5oCkBAIC00Nyw5ICs0Nyw2IEBAIHN0cnVj
dCBTaW1wbGVSYW5nZTsKIGNsYXNzIFJhbmdlIDogcHVibGljIFJlZkNvdW50ZWQ8UmFuZ2U+IHsK
IHB1YmxpYzoKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFJhbmdlPiBjcmVhdGUoRG9j
dW1lbnQmKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFJhbmdlPiBjcmVhdGUoRG9j
dW1lbnQmLCBSZWZQdHI8Tm9kZT4mJiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2Zmc2V0LCBS
ZWZQdHI8Tm9kZT4mJiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpOwotICAgIFdFQkNPUkVf
RVhQT1JUIHN0YXRpYyBSZWY8UmFuZ2U+IGNyZWF0ZShEb2N1bWVudCYsIGNvbnN0IFBvc2l0aW9u
JiwgY29uc3QgUG9zaXRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFJhbmdl
PiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxl
UG9zaXRpb24mKTsKICAgICBXRUJDT1JFX0VYUE9SVCB+UmFuZ2UoKTsKIAogICAgIERvY3VtZW50
JiBvd25lckRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9vd25lckRvY3VtZW50OyB9CkBAIC05
NiwxMCArOTMsOCBAQCBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9p
ZD4gc3Vycm91bmRDb250ZW50cyhOb2RlJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9u
T3I8dm9pZD4gc2V0U3RhcnRCZWZvcmUoTm9kZSYpOwogCi0gICAgY29uc3QgUG9zaXRpb24gc3Rh
cnRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fc3RhcnQudG9Qb3NpdGlvbigpOyB9Ci0gICAg
Y29uc3QgUG9zaXRpb24gZW5kUG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX2VuZC50b1Bvc2l0
aW9uKCk7IH0KLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRTdGFydChj
b25zdCBQb3NpdGlvbiYpOwotICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNl
dEVuZChjb25zdCBQb3NpdGlvbiYpOworICAgIFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25z
dCB7IHJldHVybiBtX3N0YXJ0LnRvUG9zaXRpb24oKTsgfQorICAgIFBvc2l0aW9uIGVuZFBvc2l0
aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9CiAKICAgICBXRUJDT1JF
X0VYUE9SVCBOb2RlKiBmaXJzdE5vZGUoKSBjb25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBOb2Rl
KiBwYXN0TGFzdE5vZGUoKSBjb25zdDsKQEAgLTE1NCw3ICsxNDksNiBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgZXhwbGljaXQgUmFuZ2UoRG9jdW1lbnQmKTsKLSAgICBSYW5nZShEb2N1bWVu
dCYsIE5vZGUqIHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIE5vZGUqIGVuZENvbnRh
aW5lciwgaW50IGVuZE9mZnNldCk7CiAKICAgICB2b2lkIHNldERvY3VtZW50KERvY3VtZW50Jik7
CiAgICAgRXhjZXB0aW9uT3I8Tm9kZSo+IGNoZWNrTm9kZVdPZmZzZXQoTm9kZSYsIHVuc2lnbmVk
IG9mZnNldCkgY29uc3Q7CkBAIC0xNzEsOCArMTY1LDYgQEAgcHJpdmF0ZToKICAgICBSYW5nZUJv
dW5kYXJ5UG9pbnQgbV9lbmQ7CiB9OwogCi1XRUJDT1JFX0VYUE9SVCBSZWY8UmFuZ2U+IHJhbmdl
T2ZDb250ZW50cyhOb2RlJik7Ci0KIFdFQkNPUkVfRVhQT1JUIGJvb2wgYXJlUmFuZ2VzRXF1YWwo
Y29uc3QgUmFuZ2UqLCBjb25zdCBSYW5nZSopOwogV0VCQ09SRV9FWFBPUlQgYm9vbCByYW5nZXNP
dmVybGFwKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxlUmFu
Z2UuaAppbmRleCBiYTYxNTc1ZjA0NzgxN2UzMTE2NmIwNDAwYjcyZjdjNDY0NTk5MDVhLi42Mjgz
NzA5NmI2MTg3NDNhY2Q2NzlhNGRmNjgxN2MzZmRkZWQ1NDkxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vU2ltcGxlUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2ltcGxl
UmFuZ2UuaApAQCAtNjgsNyArNjgsNyBAQCB0ZW1wbGF0ZTx0eXBlbmFtZSAuLi5UPiBhdXRvIG1h
a2VTaW1wbGVSYW5nZShUJiYgLi4uYXJndW1lbnRzKSAtPiBkZWNsdHlwZShtYWtlUwogV0VCQ09S
RV9FWFBPUlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IG1ha2VSYW5nZVNlbGVjdGluZ05vZGUoTm9k
ZSYpOwogV0VCQ09SRV9FWFBPUlQgU2ltcGxlUmFuZ2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKE5vZGUmKTsKIAotUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNv
bnN0IFNpbXBsZVJhbmdlJik7CitXRUJDT1JFX0VYUE9SVCBSZWZQdHI8Tm9kZT4gY29tbW9uSW5j
bHVzaXZlQW5jZXN0b3IoY29uc3QgU2ltcGxlUmFuZ2UmKTsKIAogYm9vbCBvcGVyYXRvcj09KGNv
bnN0IFNpbXBsZVJhbmdlJiwgY29uc3QgU2ltcGxlUmFuZ2UmKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0
aWNSYW5nZS5jcHAKaW5kZXggN2UwOTRhOWE3OThlNmJiODE1NjY1MjQ0YzcyY2NiMDM3YzZhZGQz
OS4uNWQ3Y2E4MjEwNzMzZGMwZDU5MGI0Y2I4OGQ4OGQxYTFiYjYwYjQ0NSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vU3RhdGljUmFuZ2UuY3BwCkBAIC00MSw2ICs0MSwxMiBAQCBSZWY8U3RhdGljUmFuZ2U+IFN0
YXRpY1JhbmdlOjpjcmVhdGUoU2ltcGxlUmFuZ2UmJiByYW5nZSkKICAgICByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBTdGF0aWNSYW5nZShXVEZNb3ZlKHJhbmdlKSkpOwogfQogCitSZWY8U3RhdGljUmFu
Z2U+IFN0YXRpY1JhbmdlOjpjcmVhdGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKQoreworICAg
IGF1dG8gY29waWVkUmFuZ2UgPSByYW5nZTsKKyAgICByZXR1cm4gY3JlYXRlKFdURk1vdmUoY29w
aWVkUmFuZ2UpKTsKK30KKwogc3RhdGljIGJvb2wgaXNEb2N1bWVudFR5cGVPckF0dHIoTm9kZSYg
bm9kZSkKIHsKICAgICAvLyBCZWZvcmUgY2FsbGluZyBub2RlVHlwZSwgZG8gdHdvIGZhc3Qgbm9u
LXZpcnR1YWwgY2hlY2tzIHRoYXQgY292ZXIgYWxtb3N0IGFsbCBub3JtYWwgbm9kZXMsIGJ1dCBh
cmUgZmFsc2UgZm9yIERvY3VtZW50VHlwZSBhbmQgQXR0ci4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1Jhbmdl
LmgKaW5kZXggYTE4ZGFkYTU1ZDE1YzNjN2Y0MGQ3ZGRkNjI4MTczMjRkOTQyZDExYy4uZWNlOWI0
ZGYwMWZjZGQ4NGE1ZjAwMWE5MjE2YmUxYTk1ODY2N2Y0MiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1N0YXRpY1JhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1Jh
bmdlLmgKQEAgLTQxLDYgKzQxLDcgQEAgcHVibGljOgogICAgIH07CiAKICAgICBzdGF0aWMgRXhj
ZXB0aW9uT3I8UmVmPFN0YXRpY1JhbmdlPj4gY3JlYXRlKEluaXQmJik7CisgICAgc3RhdGljIFJl
ZjxTdGF0aWNSYW5nZT4gY3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAgICAgc3RhdGljIFJl
ZjxTdGF0aWNSYW5nZT4gY3JlYXRlKFNpbXBsZVJhbmdlJiYpOwogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAK
aW5kZXggMmIzM2ZlNWMwYWE4ZGY4NWU3ZjcyZGMzYjAwYjZkNWExYjMxMWNlNC4uMjQyMTk0MjE3
ZDllOWRkZjNjMmQ3YTg5NTA3MGM4Nzk1YTc4MTgyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCkBAIC01MjIsNyArNTIy
LDcgQEAgYm9vbCBBbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyOjpyZXNwb25kVG9NYXJrZXJBdEVu
ZE9mV29yZChjb25zdCBEb2N1bWVudE1hcmtlciYKICAgICBpZiAoIXNob3VsZFN0YXJ0VGltZXJG
b3IobWFya2VyLCBlbmRPZldvcmRQb3NpdGlvbi5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICBOb2RlKiBub2RlID0gZW5kT2ZXb3JkUG9zaXRpb24u
Y29udGFpbmVyTm9kZSgpOwotICAgIGF1dG8gd29yZFJhbmdlID0gU2ltcGxlUmFuZ2UgeyB7ICpu
b2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSB9LCB7ICpub2RlLCBtYXJrZXIuZW5kT2Zmc2V0KCkg
fSB9OworICAgIGF1dG8gd29yZFJhbmdlID0gcmFuZ2UoKm5vZGUsIG1hcmtlcik7CiAgICAgU3Ry
aW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0KHdvcmRSYW5nZSk7CiAgICAgaWYgKCFjdXJyZW50
V29yZC5sZW5ndGgoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAppbmRleCA1ZWRjMWU3MjQ3OGJjMGFkNWRmZmY5
NDUxN2EzMTA4OGNmNTc2NzkyLi42YTA2NDE5ZjNjNGE3MDI0YWE3ZWI5ZjE0ZDU3ODE0N2QzN2Y0
ODU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5k
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcApA
QCAtNzExLDcgKzcxMSw3IEBAIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6OmZpeFJhbmdlQW5kQXBw
bHlJbmxpbmVTdHlsZShFZGl0aW5nU3R5bGUmIHN0eWxlLCBjb25zdCBQCiAgICAgLy8gU3RhcnQg
ZnJvbSB0aGUgaGlnaGVzdCBmdWxseSBzZWxlY3RlZCBhbmNlc3RvciBzbyB0aGF0IHdlIGNhbiBt
b2RpZnkgdGhlIGZ1bGx5IHNlbGVjdGVkIG5vZGUuCiAgICAgLy8gZS5nLiBXaGVuIGFwcGx5aW5n
IGZvbnQtc2l6ZTogbGFyZ2Ugb24gPGZvbnQgY29sb3I9ImJsdWUiPmhlbGxvPC9mb250Piwgd2Ug
bmVlZCB0byBpbmNsdWRlIHRoZSBmb250IGVsZW1lbnQgaW4gb3VyIHJ1bgogICAgIC8vIHRvIGdl
bmVyYXRlIDxmb250IGNvbG9yPSJibHVlIiBzaXplPSI0Ij5oZWxsbzwvZm9udD4gaW5zdGVhZCBv
ZiA8Zm9udCBjb2xvcj0iYmx1ZSI+PGZvbnQgc2l6ZT0iNCI+aGVsbG88L2ZvbnQ+PC9mb250Pgot
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKHN0YXJ0Tm9kZS0+ZG9jdW1lbnQoKSwgc3Rh
cnQsIGVuZCk7CisgICAgYXV0byByYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2Uoc3RhcnQsIGVuZCk7
CiAgICAgYXV0byogZWRpdGFibGVSb290ID0gc3RhcnROb2RlLT5yb290RWRpdGFibGVFbGVtZW50
KCk7CiAgICAgaWYgKHN0YXJ0Tm9kZSAhPSBlZGl0YWJsZVJvb3QpIHsKICAgICAgICAgd2hpbGUg
KGVkaXRhYmxlUm9vdCAmJiBzdGFydE5vZGUtPnBhcmVudE5vZGUoKSAhPSBlZGl0YWJsZVJvb3Qg
JiYgaXNOb2RlVmlzaWJseUNvbnRhaW5lZFdpdGhpbigqc3RhcnROb2RlLT5wYXJlbnROb2RlKCks
IHJhbmdlKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0
aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwCmluZGV4IGY2NWRmNDQ5Njg3ZDNmNTMzMjk1N2ZmODQ4MTRmZGM3ZWY3ODZiMTQu
LjI1YmQzM2ZkZDQxNzY3NDQ2Yjc1MzNkOWE3NmZhMTM0ODJlZjFhZWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtNzQ4LDkg
Kzc0OCwxMyBAQCB2b2lkIERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om1lcmdlUGFyYWdyYXBocygp
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpj
cmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBlbmRPZlBhcmFncmFwaFRvTW92ZS5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKLSAgICBhdXRvIHJhbmdlVG9C
ZVJlcGxhY2VkID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRl
ZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCksIG1lcmdlRGVzdGluYXRp
b24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgaWYg
KCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0
ZShyYW5nZSwgcmFuZ2VUb0JlUmVwbGFjZWQpKQorICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxl
UmFuZ2Uoc3RhcnRPZlBhcmFncmFwaFRvTW92ZSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUpOworICAg
IGlmICghcmFuZ2UpCisgICAgICAgIHJldHVybjsKKyAgICBhdXRvIHJhbmdlVG9CZVJlcGxhY2Vk
ID0gbWFrZVNpbXBsZVJhbmdlKG1lcmdlRGVzdGluYXRpb24pOworICAgIGlmICghcmFuZ2VUb0Jl
UmVwbGFjZWQpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWRvY3VtZW50KCkuZWRpdG9yKCku
Y2xpZW50KCktPnNob3VsZE1vdmVSYW5nZUFmdGVyRGVsZXRlKCpyYW5nZSwgKnJhbmdlVG9CZVJl
cGxhY2VkKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gbW92ZVBhcmFncmFwaHMgd2lsbCBp
bnNlcnQgcGxhY2Vob2xkZXJzIGlmIGl0IHJlbW92ZXMgYmxvY2tzIHRoYXQgd291bGQgcmVxdWly
ZSB0aGVpciB1c2UsIGRvbid0IGxldCBibG9jawpAQCAtODUxLDEyICs4NTUsMTEgQEAgU3RyaW5n
IERlbGV0ZVNlbGVjdGlvbkNvbW1hbmQ6Om9yaWdpbmFsU3RyaW5nRm9yQXV0b2NvcnJlY3Rpb25B
dEJlZ2lubmluZ09mU2VsZWMKICAgICBpZiAoIWlzU3RhcnRPZldvcmQoc3RhcnRPZlNlbGVjdGlv
bikpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIFZpc2libGVQb3NpdGlvbiBuZXh0
UG9zaXRpb24gPSBzdGFydE9mU2VsZWN0aW9uLm5leHQoKTsKLSAgICBpZiAobmV4dFBvc2l0aW9u
LmlzTnVsbCgpKQorICAgIGF1dG8gcmFuZ2VPZkZpcnN0Q2hhcmFjdGVyID0gbWFrZVNpbXBsZVJh
bmdlKHN0YXJ0T2ZTZWxlY3Rpb24sIHN0YXJ0T2ZTZWxlY3Rpb24ubmV4dCgpKTsKKyAgICBpZiAo
IXJhbmdlT2ZGaXJzdENoYXJhY3RlcikKICAgICAgICAgcmV0dXJuIFN0cmluZygpOwogCi0gICAg
YXV0byByYW5nZU9mRmlyc3RDaGFyYWN0ZXIgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0
YXJ0T2ZTZWxlY3Rpb24uZGVlcEVxdWl2YWxlbnQoKSwgbmV4dFBvc2l0aW9uLmRlZXBFcXVpdmFs
ZW50KCkpOwotICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFy
a2Vyc0luUmFuZ2UocmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLCBEb2N1bWVudE1hcmtlcjo6QXV0b2Nv
cnJlY3RlZCkpIHsKKyAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCkubWFya2Vycygp
Lm1hcmtlcnNJblJhbmdlKCpyYW5nZU9mRmlyc3RDaGFyYWN0ZXIsIERvY3VtZW50TWFya2VyOjpB
dXRvY29ycmVjdGVkKSkgewogICAgICAgICBpbnQgc3RhcnRPZmZzZXQgPSBtYXJrZXItPnN0YXJ0
T2Zmc2V0KCk7CiAgICAgICAgIGlmIChzdGFydE9mZnNldCA9PSBzdGFydE9mU2VsZWN0aW9uLmRl
ZXBFcXVpdmFsZW50KCkub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpCiAgICAgICAgICAgICByZXR1
cm4gbWFya2VyLT5kZXNjcmlwdGlvbigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0aW5nU3R5bGUuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5
bGUuY3BwCmluZGV4IGJhNWYzYjZjMzBlYmQ4ODgzYWY2MjZlNmYzZDc2MTZkY2M4YjJjYjYuLmVm
ZmFmNDk3OWQyYzQ0ZjUyZGY1OTE2MDE5NmI3MjMxNDZiNDA1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRlICJRdWFs
aWZpZWROYW1lLmgiCiAjaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgogI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCisjaW5jbHVkZSAiU2ltcGxlUmFuZ2UuaCIKICNpbmNsdWRlICJTdHlsZUZvbnRT
aXplRnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0aWVzLmgiCiAjaW5jbHVkZSAi
U3R5bGVSZXNvbHZlci5oIgpAQCAtMTUzNywxOCArMTUzOCwxMiBAQCBXcml0aW5nRGlyZWN0aW9u
IEVkaXRpbmdTdHlsZTo6dGV4dERpcmVjdGlvbkZvclNlbGVjdGlvbihjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJgogICAgIFBvc2l0aW9uIGVuZDsKICAgICBpZiAoc2VsZWN0aW9uLmlzUmFuZ2UoKSkg
ewogICAgICAgICBlbmQgPSBzZWxlY3Rpb24uZW5kKCkudXBzdHJlYW0oKTsKLQotICAgICAgICBO
b2RlKiBwYXN0TGFzdCA9IFJhbmdlOjpjcmVhdGUoKmVuZC5kb2N1bWVudCgpLCBwb3NpdGlvbi5w
YXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgZW5kLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgp
KS0+cGFzdExhc3ROb2RlKCk7Ci0gICAgICAgIGZvciAoTm9kZSogbiA9IG5vZGU7IG4gJiYgbiAh
PSBwYXN0TGFzdDsgbiA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm4pKSB7Ci0gICAgICAgICAgICBp
ZiAoIW4tPmlzU3R5bGVkRWxlbWVudCgpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0g
ICAgICAgICAgICBSZWZQdHI8Q1NTVmFsdWU+IHVuaWNvZGVCaWRpID0gQ29tcHV0ZWRTdHlsZUV4
dHJhY3RvcihuKS5wcm9wZXJ0eVZhbHVlKENTU1Byb3BlcnR5VW5pY29kZUJpZGkpOwotICAgICAg
ICAgICAgaWYgKCFpczxDU1NQcmltaXRpdmVWYWx1ZT4odW5pY29kZUJpZGkpKQorICAgICAgICBm
b3IgKGF1dG8mIGludGVyc2VjdGluZ05vZGUgOiBpbnRlcnNlY3RpbmdOb2RlcygqbWFrZVNpbXBs
ZVJhbmdlKHBvc2l0aW9uLCBlbmQpKSkgeworICAgICAgICAgICAgaWYgKCFpbnRlcnNlY3RpbmdO
b2RlLmlzU3R5bGVkRWxlbWVudCgpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAg
ICAgICAgICBDU1NWYWx1ZUlEIHVuaWNvZGVCaWRpVmFsdWUgPSBkb3duY2FzdDxDU1NQcmltaXRp
dmVWYWx1ZT4oKnVuaWNvZGVCaWRpKS52YWx1ZUlEKCk7Ci0gICAgICAgICAgICBpZiAodW5pY29k
ZUJpZGlWYWx1ZSA9PSBDU1NWYWx1ZUVtYmVkIHx8IHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFs
dWVCaWRpT3ZlcnJpZGUpCisgICAgICAgICAgICBhdXRvIHZhbHVlT2JqZWN0ID0gQ29tcHV0ZWRT
dHlsZUV4dHJhY3RvcigmaW50ZXJzZWN0aW5nTm9kZSkucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0
eVVuaWNvZGVCaWRpKTsKKyAgICAgICAgICAgIGF1dG8gdmFsdWUgPSBpczxDU1NQcmltaXRpdmVW
YWx1ZT4odmFsdWVPYmplY3QpID8gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp2YWx1ZU9i
amVjdCkudmFsdWVJRCgpIDogQ1NTVmFsdWVJbnZhbGlkOworICAgICAgICAgICAgaWYgKHZhbHVl
ID09IENTU1ZhbHVlRW1iZWQgfHwgdmFsdWUgPT0gQ1NTVmFsdWVCaWRpT3ZlcnJpZGUpCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIFdyaXRpbmdEaXJlY3Rpb246Ok5hdHVyYWw7CiAgICAgICAgIH0K
ICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKaW5kZXggZDEyZjg0ZjE1ZmY0ZTc1Mjk1
ZWM2MzZjMzgwN2E2MTFlM2Y4YmIyNi4uYzRhN2JjOTI2NmI4MzM4ZDdkMDE3MWNiOWYyOGUzMjMw
Y2RlYmIyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNzE0LDggKzcxNCw4IEBA
IHZvaWQgRWRpdG9yOjpyZXBsYWNlU2VsZWN0aW9uV2l0aEZyYWdtZW50KERvY3VtZW50RnJhZ21l
bnQmIGZyYWdtZW50LCBTZWxlY3RSZXBsCiAgICAgaWYgKCFub2RlVG9DaGVjaykKICAgICAgICAg
cmV0dXJuOwogCi0gICAgYXV0byByYW5nZVRvQ2hlY2sgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIGZpcnN0UG9zaXRpb25Jbk5vZGUobm9kZVRvQ2hlY2spLCBsYXN0UG9zaXRpb25Jbk5vZGUo
bm9kZVRvQ2hlY2spKTsKLSAgICBpZiAoYXV0byByZXF1ZXN0ID0gU3BlbGxDaGVja1JlcXVlc3Q6
OmNyZWF0ZShyZXNvbHZlVGV4dENoZWNraW5nVHlwZU1hc2soKm5vZGVUb0NoZWNrLCB7IFRleHRD
aGVja2luZ1R5cGU6OlNwZWxsaW5nLCBUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyIH0pLCBUZXh0
Q2hlY2tpbmdQcm9jZXNzQmF0Y2gsIHJhbmdlVG9DaGVjay5jb3B5UmVmKCksIHJhbmdlVG9DaGVj
ay5jb3B5UmVmKCksIHJhbmdlVG9DaGVjay5jb3B5UmVmKCkpKQorICAgIGF1dG8gcmFuZ2VUb0No
ZWNrID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpub2RlVG9DaGVjayk7CisgICAg
aWYgKGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZVRleHRD
aGVja2luZ1R5cGVNYXNrKCpub2RlVG9DaGVjaywgeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZywgVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciB9KSwgVGV4dENoZWNraW5nUHJvY2Vzc0JhdGNo
LCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9DaGVjaywgcmFuZ2VUb0NoZWNrKSkKICAgICAgICAgbV9z
cGVsbENoZWNrZXItPnJlcXVlc3RDaGVja2luZ0ZvcihyZXF1ZXN0LnJlbGVhc2VOb25OdWxsKCkp
OwogfQogCkBAIC0zMDMwLDcgKzMwMzAsNyBAQCB2b2lkIEVkaXRvcjo6dXBkYXRlTWFya2Vyc0Zv
cldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoYm9vbCBkb05vdFJlbW92ZUlmU2VsZWN0aW9uQQogICAg
IC8vIGdhcmRlIiwgd2Ugd2lsbCBoYXZlIENvcnJlY3Rpb25JbmRpY2F0b3IgbWFya2VyIG9uIGJv
dGggd29yZHMgYW5kIG9uIHRoZSB3aGl0ZXNwYWNlIGJldHdlZW4gdGhlbS4gSWYgd2UgdGhlbiBl
ZGl0IGdhcmRlLAogICAgIC8vIHdlIHdvdWxkIGxpa2UgdG8gcmVtb3ZlIHRoZSBtYXJrZXIgZnJv
bSB3b3JkICJhdmFudCIgYW5kIHdoaXRlc3BhY2UgYXMgd2VsbC4gU28gd2UgbmVlZCB0byBnZXQg
dGhlIGNvbnRpbm91cyByYW5nZSBvZgogICAgIC8vIG9mIG1hcmtlciB0aGF0IGNvbnRhaW5zIHRo
ZSB3b3JkIGluIHF1ZXN0aW9uLCBhbmQgcmVtb3ZlIG1hcmtlciBvbiB0aGF0IHdob2xlIHJhbmdl
LgotICAgIGF1dG8gd29yZFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9m
Rmlyc3RXb3JkLmRlZXBFcXVpdmFsZW50KCksIGVuZE9mTGFzdFdvcmQuZGVlcEVxdWl2YWxlbnQo
KSk7CisgICAgYXV0byB3b3JkUmFuZ2UgPSAqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZGaXJzdFdv
cmQsIGVuZE9mTGFzdFdvcmQpOwogCiAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBkb2N1bWVudCgp
Lm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSh3b3JkUmFuZ2UsIERvY3VtZW50TWFya2VyOjpEaWN0
YXRpb25BbHRlcm5hdGl2ZXMpKQogICAgICAgICBtX2FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIt
PnJlbW92ZURpY3RhdGlvbkFsdGVybmF0aXZlc0Zvck1hcmtlcigqbWFya2VyKTsKQEAgLTMxNDMs
NyArMzE0Myw3IEBAIHZvaWQgRWRpdG9yOjp0cmFuc3Bvc2UoKQogICAgIHByZXZpb3VzID0gcHJl
dmlvdXMucHJldmlvdXMoKTsKICAgICBpZiAoIWluU2FtZVBhcmFncmFwaChuZXh0LCBwcmV2aW91
cykpCiAgICAgICAgIHJldHVybjsKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdl
KHByZXZpb3VzLCBuZXh0KTsKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHByZXZp
b3VzLCBuZXh0KTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm47CiAgICAgVmlzaWJs
ZVNlbGVjdGlvbiBuZXdTZWxlY3Rpb24oKnJhbmdlLCBET1dOU1RSRUFNKTsKQEAgLTM1MjYsNyAr
MzUyNiw3IEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBFZGl0b3I6OnJhbmdlT2ZTdHJpbmcoY29u
c3QgU3RyaW5nJiB0YXJnZXQsIGNvbnN0IE9wdGlvbmFsCiAgICAgLy8gSWYgd2UgZGlkbid0IGZp
bmQgYW55dGhpbmcgYW5kIHdlJ3JlIHdyYXBwaW5nLCBzZWFyY2ggYWdhaW4gaW4gdGhlIGVudGly
ZSBkb2N1bWVudCAodGhpcyB3aWxsCiAgICAgLy8gcmVkdW5kYW50bHkgcmUtc2VhcmNoIHRoZSBh
cmVhIGFscmVhZHkgc2VhcmNoZWQgaW4gc29tZSBjYXNlcykuCiAgICAgaWYgKHJlc3VsdFJhbmdl
LmNvbGxhcHNlZCgpICYmIG9wdGlvbnMuY29udGFpbnMoV3JhcEFyb3VuZCkpIHsKLSAgICAgICAg
cmVzdWx0UmFuZ2UgPSBjb2xsYXBzZUlmUm9vdHNEaWZmZXIoZmluZFBsYWluVGV4dChyYW5nZU9m
Q29udGVudHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOworICAgICAgICByZXN1bHRS
YW5nZSA9IGNvbGxhcHNlSWZSb290c0RpZmZlcihmaW5kUGxhaW5UZXh0KG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cyhkb2N1bWVudCgpKSwgdGFyZ2V0LCBvcHRpb25zKSk7CiAgICAgICAg
IC8vIFdlIHVzZWQgdG8gcmV0dXJuIGZhbHNlIGhlcmUgaWYgd2UgZW5kZWQgdXAgd2l0aCB0aGUg
c2FtZSByYW5nZSB0aGF0IHdlIHN0YXJ0ZWQgd2l0aAogICAgICAgICAvLyAoZS5nLiwgdGhlIHJl
ZmVyZW5jZSByYW5nZSB3YXMgYWxyZWFkeSB0aGUgb25seSBpbnN0YW5jZSBvZiB0aGlzIHRleHQp
LiBCdXQgd2UgZGVjaWRlZCB0aGF0CiAgICAgICAgIC8vIHRoaXMgc2hvdWxkIGJlIGEgc3VjY2Vz
cyBjYXNlIGluc3RlYWQsIHNvIHdlJ2xsIGp1c3QgZmFsbCB0aHJvdWdoIGluIHRoYXQgY2FzZS4K
QEAgLTQxODgsOCArNDE4OCw4IEBAIHZvaWQgRWRpdG9yOjpoYW5kbGVBY2NlcHRlZENhbmRpZGF0
ZShUZXh0Q2hlY2tpbmdSZXN1bHQgYWNjZXB0ZWRDYW5kaWRhdGUpCiAgICAgbV9pc0hhbmRsaW5n
QWNjZXB0ZWRDYW5kaWRhdGUgPSB0cnVlOwogCiAgICAgaWYgKGF1dG8gcmFuZ2UgPSByYW5nZUZv
clRleHRDaGVja2luZ1Jlc3VsdChhY2NlcHRlZENhbmRpZGF0ZSkpIHsKLSAgICAgICAgaWYgKHNo
b3VsZEluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIHJhbmdlLCBFZGl0
b3JJbnNlcnRBY3Rpb246OlR5cGVkKSkKLSAgICAgICAgICAgIFJlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZDo6Y3JlYXRlKGNyZWF0ZUxpdmVSYW5nZShyYW5nZSksIGFjY2VwdGVkQ2FuZGlkYXRl
LnJlcGxhY2VtZW50KS0+YXBwbHkoKTsKKyAgICAgICAgaWYgKHNob3VsZEluc2VydFRleHQoYWNj
ZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsICpyYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpU
eXBlZCkpCisgICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0ZSgq
cmFuZ2UsIGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50KS0+YXBwbHkoKTsKICAgICB9IGVs
c2UKICAgICAgICAgaW5zZXJ0VGV4dChhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCwgbnVs
bHB0cik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKaW5kZXgg
MWZmZGE4Y2EyNmY3NmI3YTk0OThkNTIyZTllZTRiYjg2MTg1OWNmYS4uMTU5NDA0YjRjMjQzZTg0
OTAyNjMzOTRiNmUxNmNhNzJlNjRkMDk0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9GcmFtZVNlbGVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFt
ZVNlbGVjdGlvbi5jcHAKQEAgLTI2NzMsMTAgKzI2NzMsOCBAQCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4gRnJhbWVTZWxlY3Rpb246OnJhbmdlQnlFeHRlbmRpbmdDdXJyZW50U2VsZWN0aW9uKGludCBh
bW91bgogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RSYW5nZU9uRWxlbWVudCh1bnNpZ25l
ZCBsb2NhdGlvbiwgdW5zaWduZWQgbGVuZ3RoLCBOb2RlJiBub2RlKQogewotICAgIFJlZlB0cjxS
YW5nZT4gcmVzdWx0UmFuZ2UgPSBtX2RvY3VtZW50LT5jcmVhdGVSYW5nZSgpOwotICAgIHJlc3Vs
dFJhbmdlLT5zZXRTdGFydChub2RlLCBsb2NhdGlvbik7Ci0gICAgcmVzdWx0UmFuZ2UtPnNldEVu
ZChub2RlLCBsb2NhdGlvbiArIGxlbmd0aCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rp
b24gPSBWaXNpYmxlU2VsZWN0aW9uKCpyZXN1bHRSYW5nZSwgU0VMX0RFRkFVTFRfQUZGSU5JVFkp
OworICAgIGF1dG8gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlvbiB7IFNpbXBsZVJhbmdlIHsg
eyBub2RlLCBsb2NhdGlvbiB9LCB7IG5vZGUsIGxvY2F0aW9uICsgbGVuZ3RoIH0gfSB9OworCiAg
ICAgLy8gRklYTUU6IFRoZSBzZWNvbmQgYXJndW1lbnQgd2FzICJ0cnVlIiB3aGljaCBpbXBsaWNp
dGx5IGNvbnZlcnRlZCB0byBvcHRpb24gIkZpcmVTZWxlY3RFdmVudCIuIElzIHRoaXMgY29ycmVj
dD8KICAgICBzZXRTZWxlY3Rpb24oc2VsZWN0aW9uLCB7IEZpcmVTZWxlY3RFdmVudCB9KTsKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRD
b21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRD
b21tYW5kLmNwcAppbmRleCA2OGUwODM1MmE0YzEwZDg2OGJmMWU0NjliZjc1Yzk1NmQxM2YwNTkw
Li41ZWQwZGU5YTMxMGIzMWJlNjNlMGEzZDQzMzg5OGMxOTUyNzI4NTZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3Bw
CkBAIC00MCw4ICs0MCw4IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQoUmVmUHRyPFJhbmdl
PiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQotICAgIDogQ29tcG9zaXRl
RWRpdENvbW1hbmQocmFuZ2VUb0JlUmVwbGFjZWQtPnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCitSZXBsYWNlUmFuZ2VXaXRoVGV4dENv
bW1hbmQ6OlJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZChjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKKyAgICA6IENvbXBvc2l0ZUVkaXRD
b21tYW5kKHJhbmdlVG9CZVJlcGxhY2VkLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKSwgRWRp
dEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCiAgICAgLCBtX3JhbmdlVG9CZVJlcGxhY2VkKHJh
bmdlVG9CZVJlcGxhY2VkKQogICAgICwgbV90ZXh0KHRleHQpCiB7CkBAIC00OSwyMSArNDksMTgg
QEAgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1h
bmQoUmVmUHRyPFJhbmdlPiByYW5nZVRvQmUKIAogYm9vbCBSZXBsYWNlUmFuZ2VXaXRoVGV4dENv
bW1hbmQ6OndpbGxBcHBseUNvbW1hbmQoKQogewotICAgIG1fdGV4dEZyYWdtZW50ID0gY3JlYXRl
RnJhZ21lbnRGcm9tVGV4dCgqbV9yYW5nZVRvQmVSZXBsYWNlZCwgbV90ZXh0KTsKKyAgICBtX3Rl
eHRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQobV9yYW5nZVRvQmVSZXBsYWNlZCwg
bV90ZXh0KTsKICAgICByZXR1cm4gQ29tcG9zaXRlRWRpdENvbW1hbmQ6OndpbGxBcHBseUNvbW1h
bmQoKTsKIH0KIAogdm9pZCBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmRvQXBwbHkoKQog
ewotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uIHsgKm1fcmFuZ2VUb0JlUmVwbGFjZWQg
fTsKLQotICAgIGlmICghbV9yYW5nZVRvQmVSZXBsYWNlZCkKLSAgICAgICAgcmV0dXJuOworICAg
IFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uIHsgbV9yYW5nZVRvQmVSZXBsYWNlZCB9OwogCiAg
ICAgaWYgKCFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZENoYW5nZVNlbGVjdGlvbihzZWxl
Y3Rpb24pKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAoIWNoYXJhY3RlckNvdW50KCptX3Jh
bmdlVG9CZVJlcGxhY2VkKSkKKyAgICBpZiAoIWNoYXJhY3RlckNvdW50KG1fcmFuZ2VUb0JlUmVw
bGFjZWQpKQogICAgICAgICByZXR1cm47CiAKICAgICBhcHBseUNvbW1hbmRUb0NvbXBvc2l0ZShT
ZXRTZWxlY3Rpb25Db21tYW5kOjpjcmVhdGUoc2VsZWN0aW9uLCBGcmFtZVNlbGVjdGlvbjo6ZGVm
YXVsdFNldFNlbGVjdGlvbk9wdGlvbnMoKSkpOwpAQCAtODgsNyArODUsNyBAQCBSZWZQdHI8RGF0
YVRyYW5zZmVyPiBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmlucHV0RXZlbnREYXRhVHJh
bnNmZXIoKSBjb25zdAogCiBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gUmVwbGFjZVJhbmdl
V2l0aFRleHRDb21tYW5kOjp0YXJnZXRSYW5nZXMoKSBjb25zdAogewotICAgIHJldHVybiB7IDEs
IFN0YXRpY1JhbmdlOjpjcmVhdGUoKm1fcmFuZ2VUb0JlUmVwbGFjZWQpIH07CisgICAgcmV0dXJu
IHsgMSwgU3RhdGljUmFuZ2U6OmNyZWF0ZShtX3JhbmdlVG9CZVJlcGxhY2VkKSB9OwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuaAppbmRleCAwOTgzMDdmNjUyMGRlZTZjNDQxY2Y1
ZmU4MTQ2ZTc3YWNmOWU5NmM0Li4zYmJjODk5ZDI0ZmNhZTU1NjIxMWMyZjhkZjc0NDM0NjRkNDJh
YjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhU
ZXh0Q29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kLmgKQEAgLTM0LDIwICszNCwyMCBAQCBjbGFzcyBEb2N1bWVudEZyYWdtZW50
OwogCiBjbGFzcyBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQgOiBwdWJsaWMgQ29tcG9zaXRl
RWRpdENvbW1hbmQgewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8UmVwbGFjZVJhbmdlV2l0aFRl
eHRDb21tYW5kPiBjcmVhdGUoUmVmUHRyPFJhbmdlPiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KQorICAgIHN0YXRpYyBSZWY8UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5k
PiBjcmVhdGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25zdCBTdHJp
bmcmIHRleHQpCiAgICAgewogICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZXBsYWNlUmFu
Z2VXaXRoVGV4dENvbW1hbmQocmFuZ2VUb0JlUmVwbGFjZWQsIHRleHQpKTsKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kKFJlZlB0cjxSYW5nZT4gcmFu
Z2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CisgICAgUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3Qg
U3RyaW5nJiB0ZXh0KTsKICAgICBib29sIHdpbGxBcHBseUNvbW1hbmQoKSBmaW5hbDsKICAgICB2
b2lkIGRvQXBwbHkoKSBvdmVycmlkZTsKICAgICBTdHJpbmcgaW5wdXRFdmVudERhdGEoKSBjb25z
dCBmaW5hbDsKICAgICBSZWZQdHI8RGF0YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVy
KCkgY29uc3QgZmluYWw7CiAgICAgVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IHRhcmdldFJh
bmdlcygpIGNvbnN0IGZpbmFsOwogCi0gICAgUmVmUHRyPFJhbmdlPiBtX3JhbmdlVG9CZVJlcGxh
Y2VkOworICAgIFNpbXBsZVJhbmdlIG1fcmFuZ2VUb0JlUmVwbGFjZWQ7CiAgICAgUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IG1fdGV4dEZyYWdtZW50OwogICAgIFN0cmluZyBtX3RleHQ7CiB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNw
cAppbmRleCA2OWU3ZTMwZTY1YTk2MTYwMjVlZDI0OTI1OTIxYjMwY2RmN2IxN2Q2Li45OTM0YTEz
NTRmYWU2NTk5YTQ5Nzk4MmNiYTAwZWE2NzJmMmQ2NzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcApAQCAtMTc2OSwxMiArMTc2
OSw5IEBAIGJvb2wgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OnBlcmZvcm1Ucml2aWFsUmVwbGFj
ZShjb25zdCBSZXBsYWNlbWVudEZyYWdtZW50JiBmCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVJl
ZlB0cjxSYW5nZT4gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydGVkQ29udGVudFJhbmdl
KCkgY29uc3QKK09wdGlvbmFsPFNpbXBsZVJhbmdlPiBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6
aW5zZXJ0ZWRDb250ZW50UmFuZ2UoKSBjb25zdAogewotICAgIGlmIChhdXRvIGRvY3VtZW50ID0g
bWFrZVJlZlB0cihtX3N0YXJ0T2ZJbnNlcnRlZENvbnRlbnQuZG9jdW1lbnQoKSkpCi0gICAgICAg
IHJldHVybiBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCwgbV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50
LCBtX2VuZE9mSW5zZXJ0ZWRDb250ZW50KTsKLQotICAgIHJldHVybiBudWxscHRyOworICAgIHJl
dHVybiBtYWtlU2ltcGxlUmFuZ2UobV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50LCBtX2VuZE9mSW5z
ZXJ0ZWRDb250ZW50KTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5oCmluZGV4IGQ5ZDU5ZDM1
MzM1ZGUxM2ViYTdkM2M1NTA1YzM5N2ZjODc2ZDNhZGQuLjA2MDhhMDA4OWU2YjA4YTQ4YWQyOTky
ZjE4ODlkOGMzMjU5NDFhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxh
Y2VTZWxlY3Rpb25Db21tYW5kLmgKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogICAgIFZpc2li
bGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dCgpIGNvbnN0IHsgcmV0
dXJuIG1fdmlzaWJsZVNlbGVjdGlvbkZvckluc2VydGVkVGV4dDsgfQogICAgIFN0cmluZyBkb2N1
bWVudEZyYWdtZW50UGxhaW5UZXh0KCkgY29uc3QgeyByZXR1cm4gbV9kb2N1bWVudEZyYWdtZW50
UGxhaW5UZXh0OyB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGluc2VydGVkQ29udGVudFJhbmdlKCkg
Y29uc3Q7CisgICAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IGluc2VydGVkQ29udGVudFJhbmdlKCkg
Y29uc3Q7CiAKIHByaXZhdGU6CiAgICAgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQoRG9jdW1lbnQm
LCBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4mJiwgT3B0aW9uU2V0PENvbW1hbmRPcHRpb24+LCBF
ZGl0QWN0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDU5MjA4NDUzNTFlYTQwM2I4Yzg3MzQzYWRhNzZiNzQz
NjNkZjA1ZDUuLjdjMTFmYTg4MWZmMTFlOWVkNzIzOWUzMDFlYjFkNTk0ZThlOTQ3YTAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcApAQCAtODMsMTAgKzgzLDEwIEBAIHByaXZhdGU6CiB9OwogI2VuZGlmCiAKLVNwZWxsaW5n
Q29ycmVjdGlvbkNvbW1hbmQ6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQoUmFuZ2UmIHJhbmdl
VG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotICAgIDogQ29tcG9zaXRl
RWRpdENvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLnN0YXJ0Q29udGFpbmVyKCkuZG9jdW1lbnQo
KSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCitTcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRv
QmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKKyAgICA6IENvbXBvc2l0ZUVk
aXRDb21tYW5kKHJhbmdlVG9CZUNvcnJlY3RlZC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCks
IEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQogICAgICwgbV9yYW5nZVRvQmVDb3JyZWN0
ZWQocmFuZ2VUb0JlQ29ycmVjdGVkKQotICAgICwgbV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVkKG1f
cmFuZ2VUb0JlQ29ycmVjdGVkLmdldCgpKQorICAgICwgbV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVk
KG1fcmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9jb3JyZWN0aW9uKGNvcnJlY3Rpb24pCiB7
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlv
bkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29t
bWFuZC5oCmluZGV4IDViODFlZjIzNTZjOTlhNzMzZjRhM2UxODg3OGIwMDVmM2M5MDIyZDYuLmUz
ZDdlMGYxYjIwYzc1MDA3Nzk4ZjdlNzEzNWE0OTY0NDM4NmJmZjIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5oCkBAIC0zMiwxMiAr
MzIsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShSYW5nZSYgcmFuZ2VUb0Jl
Q29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCisgICAgc3RhdGljIFJlZjxTcGVs
bGluZ0NvcnJlY3Rpb25Db21tYW5kPiBjcmVhdGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9C
ZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQogICAgIHsKICAgICAgICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZChyYW5nZVRvQmVDb3Jy
ZWN0ZWQsIGNvcnJlY3Rpb24pKTsKICAgICB9CiBwcml2YXRlOgotICAgIFNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQoUmFuZ2UmIHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3Jy
ZWN0aW9uKTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKGNvbnN0IFNpbXBsZVJhbmdl
JiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CiAgICAgYm9v
bCB3aWxsQXBwbHlDb21tYW5kKCkgZmluYWw7CiAgICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJpZGU7
CiAgICAgYm9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0IG92
ZXJyaWRlOwpAQCAtNDYsNyArNDYsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8U3Rh
dGljUmFuZ2U+PiB0YXJnZXRSYW5nZXMoKSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8RGF0YVRy
YW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmluYWw7CiAKLSAgICBSZWY8
UmFuZ2U+IG1fcmFuZ2VUb0JlQ29ycmVjdGVkOworICAgIFNpbXBsZVJhbmdlIG1fcmFuZ2VUb0Jl
Q29ycmVjdGVkOwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb25Ub0JlQ29ycmVjdGVk
OwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX2NvcnJlY3Rpb25GcmFnbWVudDsKICAg
ICBTdHJpbmcgbV9jb3JyZWN0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRDaGVj
a2luZ0hlbHBlci5jcHAKaW5kZXggOGZmZjRmNDE3MWIzNWQ5ZjQ4ZjAyNGY2MmQyNDY1NzQ5NmZl
YmZkOS4uMjU0NjAyM2Y2NDA1N2Y4M2Q5MjE2OWE1OGFlNDUxYTM2MzMwODVlZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzAyLDE0ICsz
MDIsMTMgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3Jk
T3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2sKICAgICAvLyBFeHBhbmQgdGhlIHNlYXJj
aCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hlY2tp
bmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0
ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0IG9m
IHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50IHRv
IGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBSZWY8UmFuZ2U+IHBhcmFncmFwaFJh
bmdlID0gY3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpOwotICAgIHNldFN0YXJ0KHBhcmFncmFwaFJh
bmdlLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbiht
X3JhbmdlLnN0YXJ0KSkpOworICAgIGF1dG8gcGFyYWdyYXBoUmFuZ2UgPSAqbWFrZVNpbXBsZVJh
bmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uu
c3RhcnQpKSwgbV9yYW5nZS5lbmQpOwogICAgIGF1dG8gdG90YWxSYW5nZUxlbmd0aCA9IGNoYXJh
Y3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2UucHRy
KCksIGVuZE9mUGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0
YXJ0KSkpOworICAgIHBhcmFncmFwaFJhbmdlLmVuZCA9ICptYWtlQm91bmRhcnlQb2ludChlbmRP
ZlBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsK
ICAgICAKLSAgICBhdXRvIHJhbmdlU3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICptYWtl
Qm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgbV9yYW5nZS5z
dGFydCB9KTsKKyAgICBhdXRvIHJhbmdlU3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7IHBh
cmFncmFwaFJhbmdlLnN0YXJ0LCBtX3JhbmdlLnN0YXJ0IH0pOwogICAgIHVpbnQ2NF90IHRvdGFs
TGVuZ3RoUHJvY2Vzc2VkID0gMDsKLSAgICAKKwogICAgIGJvb2wgZmlyc3RJdGVyYXRpb24gPSB0
cnVlOwogICAgIGJvb2wgbGFzdEl0ZXJhdGlvbiA9IGZhbHNlOwogICAgIHdoaWxlICh0b3RhbExl
bmd0aFByb2Nlc3NlZCA8IHRvdGFsUmFuZ2VMZW5ndGgpIHsKQEAgLTMxNywxMCArMzE2LDEwIEBA
IGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFt
bWF0aWNhbFBocmFzZShib29sIGNoZWNrCiAgICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9IGNo
YXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKICAgICAgICAgdWludDY0X3QgY3VycmVudFN0
YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyByYW5nZVN0YXJ0T2Zmc2V0IDogMDsKICAgICAg
ICAgdWludDY0X3QgY3VycmVudEVuZE9mZnNldCA9IGN1cnJlbnRMZW5ndGg7Ci0gICAgICAgIGlm
IChpblNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2UuZW5kKSkpIHsKKyAgICAgICAgaWYgKGluU2Ft
ZVBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFyYWdyYXBoUmFuZ2Uuc3Rh
cnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5lbmQpKSkgewogICAgICAg
ICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBvZiB0
aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwKICAg
ICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0aGlz
IGFyZWEuCi0gICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAq
bWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksIG1fcmFu
Z2UuZW5kIH0pOworICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50
KHsgcGFyYWdyYXBoUmFuZ2Uuc3RhcnQsIG1fcmFuZ2UuZW5kIH0pOwogICAgICAgICAgICAgbGFz
dEl0ZXJhdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRTdGFydE9m
ZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTMzNyw3ICszMzYsNyBAQCBhdXRvIFRleHRD
aGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJh
c2UoYm9vbCBjaGVjawogICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIpCiAgICAgICAg
ICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1tYXIp
OwogICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbjsKLSAg
ICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcGFyYWdyYXBoUmFuZ2UtPm93bmVyRG9j
dW1lbnQoKS5mcmFtZSgpKQorICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBwYXJh
Z3JhcGhSYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKTsKICAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9jbGllbnQudGV4
dENoZWNrZXIoKSwgcGFyYWdyYXBoU3RyaW5nLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzLCBjdXJy
ZW50U2VsZWN0aW9uKTsKIApAQCAtMzc5LDcgKzM3OCw3IEBAIGF1dG8gVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNo
ZWNrCiAgICAgICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkgJiYgKCFj
aGVja0dyYW1tYXIgfHwgYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkgfHwgc3BlbGxpbmdMb2Nh
dGlvbiA8PSBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIHVp
bnQ2NF90IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9m
ZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5n
ZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9u
KCkpIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hhcmFj
dGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCBwYXJhZ3JhcGhSYW5nZS5zdGFydCB9KTsKICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBNaXNzcGVsbGVkV29yZCB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCwKICAgICAgICAgICAgICAgICAgICAgICAg
IHNwZWxsaW5nT2Zmc2V0CkBAIC0zODksNyArMzg4LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxw
ZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hl
Y2sKICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhyYXNl
LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBncmFtbWFyUGhyYXNl
T2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0OwogICAg
ICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQotICAgICAgICAgICAgICAgICAg
ICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3Rh
cnQsICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gY2hhcmFj
dGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCBwYXJhZ3JhcGhSYW5nZS5zdGFydCB9KTsKICAgICAg
ICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBVbmdyYW1tYXRpY2FsUGhyYXNlIHsKICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UsCiAgICAgICAgICAgICAgICAg
ICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0LApAQCAtNDAyLDEyICs0MDEsMTEgQEAgYXV0byBU
ZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2Fs
UGhyYXNlKGJvb2wgY2hlY2sKICAgICAgICAgaWYgKGxhc3RJdGVyYXRpb24gfHwgdG90YWxMZW5n
dGhQcm9jZXNzZWQgKyBjdXJyZW50TGVuZ3RoID49IHRvdGFsUmFuZ2VMZW5ndGgpCiAgICAgICAg
ICAgICBicmVhazsKIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3UGFyYWdyYXBoU3RhcnQg
PSBzdGFydE9mTmV4dFBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+ZW5kUG9zaXRpb24oKSk7Ci0g
ICAgICAgIGlmICghc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UucHRyKCksIG5ld1BhcmFncmFwaFN0
YXJ0KSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICghc2V0RW5kKHBhcmFncmFw
aFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChuZXdQYXJhZ3JhcGhTdGFydCkpKQorICAgICAg
ICBhdXRvIG5leHRTdGFydCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihwYXJhZ3JhcGhSYW5nZS5lbmQpKTsKKyAgICAgICAgYXV0byBuZXh0UGFyYWdy
YXBoUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobmV4dFN0YXJ0LCBlbmRPZlBhcmFncmFwaChuZXh0
U3RhcnQpKTsKKyAgICAgICAgaWYgKCFuZXh0UGFyYWdyYXBoUmFuZ2UpCiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBXVEZNb3ZlKCpuZXh0UGFyYWdyYXBoUmFu
Z2UpOwogCiAgICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CiAgICAgICAgIHRvdGFsTGVu
Z3RoUHJvY2Vzc2VkICs9IGN1cnJlbnRMZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcAppbmRleCBkMDE1MTAyYTYwOWZmYWVkMjYxMmFmMmU3OWMzYjlmZWRkNWYx
OWFhLi5mYzk3NTc3NDgzMTFjZDEyZmJkZDcyZTFiMjRmZTRiYjBmMDcwOWFjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTQ0OSw3ICs0NDksNyBAQCB2b2lk
IFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29tbWFu
ZCBjb21tYW5kVHlwZSkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldvcmQo
cHJldmlvdXMsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9u
IHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAg
aWYgKHAxICE9IHAyKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJh
bmdlKHAxLCBwMik7CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHAx
LCBwMik7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBwZWRQcmV2aW91c1dvcmQ7CiAgICAgICAg
ICAgICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFRl
eHQgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0TGluZUJyZWFrIHx8IGNv
bW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvciB8fCBj
b21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJblF1
b3RlZENvbnRlbnQpKQogICAgICAgICAgICAgICAgIHN0cmlwcGVkUHJldmlvdXNXb3JkID0gcGxh
aW5UZXh0KCpyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCk7CkBAIC00NzUsNyArNDc1LDcgQEAgdm9p
ZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1h
bmQgY29tbWFuZFR5cGUpCiAgICAgfQogfQogCi1ib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxBZGRU
eXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPFJhbmdlPiYmIHJh
bmdlKQorYm9vbCBUeXBpbmdDb21tYW5kOjp3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChFVHlw
aW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBjb25z
dCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7CiAg
ICAgbV9jdXJyZW50VGV4dFRvSW5zZXJ0ID0gdGV4dDsKICAgICBtX2N1cnJlbnRUeXBpbmdFZGl0
QWN0aW9uID0gZWRpdEFjdGlvbkZvclR5cGluZ0NvbW1hbmQoY29tbWFuZFR5cGUsIGdyYW51bGFy
aXR5LCBtX2NvbXBvc2l0aW9uVHlwZSwgbV9pc0F1dG9jb21wbGV0aW9uKTsKQEAgLTY2MSw3ICs2
NjEsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFy
aXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogICAgICAgICBpZiAocHJldmlvdXNQb3Np
dGlvbi5pc051bGwoKSB8fCBlbmNsb3NpbmdUYWJsZUNlbGwgIT0gZW5jbG9zaW5nVGFibGVDZWxs
Rm9yUHJldmlvdXNQb3NpdGlvbikgewogICAgICAgICAgICAgLy8gV2hlbiB0aGUgY2FyZXQgaXMg
YXQgdGhlIHN0YXJ0IG9mIHRoZSBlZGl0YWJsZSBhcmVhIGluIGFuIGVtcHR5IGxpc3QgaXRlbSwg
YnJlYWsgb3V0IG9mIHRoZSBsaXN0IGl0ZW0uCiAgICAgICAgICAgICBpZiAoYXV0byBkZWxldGVM
aXN0U2VsZWN0aW9uID0gc2hvdWxkQnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0oKSkgewotICAgICAg
ICAgICAgICAgIGlmICh3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51
bGFyaXR5LCB7IH0sIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgZGVsZXRlTGlzdFNlbGVjdGlv
bi52YWx1ZSgpLnN0YXJ0KCksIGRlbGV0ZUxpc3RTZWxlY3Rpb24udmFsdWUoKS5lbmQoKSkpKSB7
CisgICAgICAgICAgICAgICAgaWYgKHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtl
eSwgZ3JhbnVsYXJpdHksIHsgfSwgKmRlbGV0ZUxpc3RTZWxlY3Rpb24udmFsdWUoKS5maXJzdFJh
bmdlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCk7
CiAgICAgICAgICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChEZWxldGVLZXkp
OwogICAgICAgICAgICAgICAgIH0KQEAgLTczMSw3ICs3MzEsNyBAQCB2b2lkIFR5cGluZ0NvbW1h
bmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNo
b3VsZEFkZAogICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50
KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkK
ICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1h
bmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlv
blRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQorICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNv
bW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJz
dFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxsUmlu
ZykKQEAgLTgzOSw3ICs4MzksNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVL
ZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIGlmIChz
ZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCkuc2hv
dWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5LCBn
cmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RS
YW5nZSgpKSkpCisgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVs
ZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdlKCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQb3N0IHRoZSBhY2Nlc3NpYmlsaXR5IG5vdGlm
aWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIGNvbnRlbnQgd2hpbGUgc2VsZWN0
aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21t
YW5kLmgKaW5kZXggZTk3NmE2YmYwYTQ4YzY1NjVjOTgwYWIyM2UwMmEwYjFmZTExMTRkYy4uNjkw
ZWUyNjI1ZTBkMTY0MmY4YTYyOTcxMGEwYjhiMDFjYjNhNzcwYiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rpb24o
VHlwaW5nQ29tbWFuZCosIERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZlc1R5
cGluZ1N0eWxlKEVUeXBpbmdDb21tYW5kKTsKLSAgICBib29sIHdpbGxBZGRUeXBpbmdUb09wZW5D
b21tYW5kKEVUeXBpbmdDb21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgPSBl
bXB0eVN0cmluZygpLCBSZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKKyAgICBib29sIHdpbGxB
ZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNv
bnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4m
ID0geyB9KTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29t
bWFuZCk7CiAgICAgdm9pZCB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQp
OwogICAgIGJvb2wgbWFrZUVkaXRhYmxlUm9vdEVtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggMDE2OGViODE4MTQyZDNmNDY5OWY1NWVhMGZm
OGIyMmFhZGI2Mzc2Zi4uZjk1OGQ4ZTMzMzI2YTYzZWE5ZWVhM2M1NmNkN2FiOGM0NDhhNmFhZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcApAQCAtNzMwLDUz
ICs3MzAsNiBAQCB2b2lkIFZpc2libGVQb3NpdGlvbjo6c2hvd1RyZWVGb3JUaGlzKCkgY29uc3QK
IAogI2VuZGlmCiAKLVJlZlB0cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kKQotewotICAgIGlmIChzdGFydC5p
c051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAgIAot
ICAgIFBvc2l0aW9uIHMgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGUgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRB
bmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpZiAocy5pc051bGwoKSB8fCBlLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMuY29u
dGFpbmVyTm9kZSgpLT5kb2N1bWVudCgpLCBzLmNvbnRhaW5lck5vZGUoKSwgcy5vZmZzZXRJbkNv
bnRhaW5lck5vZGUoKSwgZS5jb250YWluZXJOb2RlKCksIGUub2Zmc2V0SW5Db250YWluZXJOb2Rl
KCkpOwotfQotCi1WaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFu
Z2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKLXsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KHItPnN0YXJ0UG9zaXRpb24oKSwgYWZmaW5pdHkpOwotfQotCi1WaXNpYmxlUG9zaXRpb24gZW5k
VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCi17Ci0g
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihyLT5lbmRQb3NpdGlvbigpLCBhZmZpbml0eSk7Ci19
Ci0KLWJvb2wgc2V0U3RhcnQoUmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbikKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFyYW5nZS0+c2V0U3RhcnQoKnAuY29u
dGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKS5oYXNFeGNlcHRpb24oKTsK
LX0KLQotYm9vbCBzZXRFbmQoUmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mIHZp
c2libGVQb3NpdGlvbikKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCkucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFyYW5nZS0+c2V0RW5kKCpwLmNvbnRh
aW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkuaGFzRXhjZXB0aW9uKCk7Ci19
Ci0KIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBkZXByZWNhdGVkIHRvbywgbGlrZSB0
aGUgdW5kZXJseWluZyBmdW5jdGlvbj8KIEVsZW1lbnQqIGVuY2xvc2luZ0Jsb2NrRmxvd0VsZW1l
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCA5MWVkNGNjMGYzNDQ4MzQ3NTIyZDVk
MTI2YWU0OWYzZTJjMDFlMmRmLi4zZTJjZWRjYTdhODE0YjJkNDEwNzEyYjFmZDFjM2I5OGE0ZmVl
YTkyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAgLTEyNiwx
MiArMTI2LDYgQEAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0
IFZpc2libGVQb3NpdGlvbiYpOwogCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxCb3VuZGFyeVBv
aW50PiBtYWtlQm91bmRhcnlQb2ludChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAotV0VCQ09S
RV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIHNldFN0YXJ0KFJhbmdlKiwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJik7Ci1ib29sIHNldEVuZChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwotVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwg
RUFmZmluaXR5KTsKLVZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3QgUmFu
Z2UqLCBFQWZmaW5pdHkpOwotCiBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBlbmNsb3NpbmdCbG9j
a0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCiBib29sIGlzRmlyc3RWaXNp
YmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGE4MDdmNTYzZTZlZDIw
ZWRlMDdhNzBkNDRjYzFhZTVjMjcyMDQwYzEuLmEzMjliMTIxYTRjMzFkM2RlNGJjYzA1M2Y1NWE4
ZWZkY2ZkYzc0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVu
aXRzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAg
LTQ4Niw3ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRSZXBlYXRlZENoYXJhY3RlcihWZWN0
b3I8VUNoYXIsIDEwMjQ+JiBidWZmZXIsIFVDaGFyIGNoYXJhY3RlcgogICAgICAgICBidWZmZXJb
b2xkU2l6ZSArIGldID0gY2hhcmFjdGVyOwogfQogCi11bnNpZ25lZCBzdWZmaXhMZW5ndGhGb3JS
YW5nZShjb25zdCBSYW5nZSYgZm9yd2FyZHNTY2FuUmFuZ2UsIFZlY3RvcjxVQ2hhciwgMTAyND4m
IHN0cmluZykKK3Vuc2lnbmVkIHN1ZmZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdl
JiBmb3J3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFyLCAxMDI0PiYgc3RyaW5nKQogewogICAg
IHVuc2lnbmVkIHN1ZmZpeExlbmd0aCA9IDA7CiAgICAgVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRl
cmF0b3IoZm9yd2FyZHNTY2FuUmFuZ2UpOwpAQCAtNTAyLDcgKzUwMiw3IEBAIHVuc2lnbmVkIHN1
ZmZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFJhbmdlJiBmb3J3YXJkc1NjYW5SYW5nZSwgVmVjdG9y
PFVDaGFyLCAxMDI0CiAgICAgcmV0dXJuIHN1ZmZpeExlbmd0aDsKIH0KIAotdW5zaWduZWQgcHJl
Zml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgUmFuZ2UmIGJhY2t3YXJkc1NjYW5SYW5nZSwgVmVjdG9y
PFVDaGFyLCAxMDI0PiYgc3RyaW5nKQordW5zaWduZWQgcHJlZml4TGVuZ3RoRm9yUmFuZ2UoY29u
c3QgU2ltcGxlUmFuZ2UmIGJhY2t3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFyLCAxMDI0PiYg
c3RyaW5nKQogewogICAgIHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDA7CiAgICAgU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihiYWNrd2FyZHNTY2FuUmFu
Z2UpOwpAQCAtNTgwLDc0ICs1ODAsNTAgQEAgdW5zaWduZWQgZm9yd2FyZFNlYXJjaEZvckJvdW5k
YXJ5V2l0aFRleHRJdGVyYXRvcihUZXh0SXRlcmF0b3ImIGl0LCBWZWN0b3I8VUNoYXIKIH0KIAog
ZW51bSBjbGFzcyBOZWVkc0NvbnRleHRBdFBhcmFncmFwaFN0YXJ0IHsgWWVzLCBObyB9Owotc3Rh
dGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgQm91bmRhcnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlvbiwKK3N0YXRpYyBWaXNp
YmxlUG9zaXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0
aW9uLCBCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uIHNlYXJjaEZ1bmN0aW9uLAogICAgIE5lZWRzQ29u
dGV4dEF0UGFyYWdyYXBoU3RhcnQgbmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydCA9IE5lZWRz
Q29udGV4dEF0UGFyYWdyYXBoU3RhcnQ6Ok5vKQogewotICAgIFBvc2l0aW9uIHBvcyA9IGMuZGVl
cEVxdWl2YWxlbnQoKTsKLSAgICBOb2RlKiBib3VuZGFyeSA9IHBvcy5wYXJlbnRFZGl0aW5nQm91
bmRhcnkoKTsKKyAgICBhdXRvIGJvdW5kYXJ5ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5w
YXJlbnRFZGl0aW5nQm91bmRhcnkoKTsKICAgICBpZiAoIWJvdW5kYXJ5KQotICAgICAgICByZXR1
cm4gVmlzaWJsZVBvc2l0aW9uKCk7Ci0KLSAgICBEb2N1bWVudCYgYm91bmRhcnlEb2N1bWVudCA9
IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gY3JlYXRlTGVnYWN5
RWRpdGluZ1Bvc2l0aW9uKGJvdW5kYXJ5LCAwKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsK
LSAgICBQb3NpdGlvbiBlbmQgPSBwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0KLSAg
ICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWY8UmFuZ2U+IHNl
YXJjaFJhbmdlID0gUmFuZ2U6OmNyZWF0ZShib3VuZGFyeURvY3VtZW50KTsKLSAgICAKICAgICBW
ZWN0b3I8VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBzdWZmaXhMZW5ndGggPSAw
OwogCi0gICAgaWYgKG5lZWRzQ29udGV4dEF0UGFyYWdyYXBoU3RhcnQgPT0gTmVlZHNDb250ZXh0
QXRQYXJhZ3JhcGhTdGFydDo6WWVzICYmIGlzU3RhcnRPZlBhcmFncmFwaChjKSkgewotICAgICAg
ICBhdXRvIGZvcndhcmRzU2NhblJhbmdlID0gYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgp
OwotICAgICAgICBhdXRvIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGMp
OwotICAgICAgICBhdXRvIHJlc3VsdCA9IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmQoZW5kT2ZD
dXJyZW50UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBpZiAocmVzdWx0Lmhh
c0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmVzdWx0ID0g
Zm9yd2FyZHNTY2FuUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCpib3VuZGFyeSksIHBvc2l0aW9uKTsK
KyAgICBpZiAoIXNlYXJjaFJhbmdlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKG5l
ZWRzQ29udGV4dEF0UGFyYWdyYXBoU3RhcnQgPT0gTmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFy
dDo6WWVzICYmIGlzU3RhcnRPZlBhcmFncmFwaChwb3NpdGlvbikpIHsKKyAgICAgICAgYXV0byBm
b3J3YXJkc1NjYW5SYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWFyY2hSYW5nZS0+c3RhcnQsIGVu
ZE9mUGFyYWdyYXBoKHBvc2l0aW9uKSk7CisgICAgICAgIGlmICghZm9yd2FyZHNTY2FuUmFuZ2Up
CiAgICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBmb3IgKFRleHRJdGVyYXRvciBmb3J3
YXJkc0l0ZXJhdG9yKGZvcndhcmRzU2NhblJhbmdlKTsgIWZvcndhcmRzSXRlcmF0b3IuYXRFbmQo
KTsgZm9yd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCisgICAgICAgIGZvciAoVGV4dEl0ZXJhdG9y
IGZvcndhcmRzSXRlcmF0b3IoKmZvcndhcmRzU2NhblJhbmdlKTsgIWZvcndhcmRzSXRlcmF0b3Iu
YXRFbmQoKTsgZm9yd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCiAgICAgICAgICAgICBhcHBlbmQo
c3RyaW5nLCBmb3J3YXJkc0l0ZXJhdG9yLnRleHQoKSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9
IHN0cmluZy5zaXplKCk7Ci0gICAgfSBlbHNlIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91
bmRhcnkoYy5jaGFyYWN0ZXJCZWZvcmUoKSkpIHsKLSAgICAgICAgYXV0byBmb3J3YXJkc1NjYW5S
YW5nZSA9IGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgYXV0byByZXN1
bHQgPSBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5KTsKLSAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAg
ICAgIHJlc3VsdCA9IGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFydCgqZW5kLmRlcHJlY2F0ZWRO
b2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICAgICAgaWYgKHJlc3Vs
dC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgfSBlbHNlIGlm
IChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkocG9zaXRpb24uY2hhcmFjdGVyQmVmb3Jl
KCkpKSB7CisgICAgICAgIGF1dG8gZm9yd2FyZHNTY2FuUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
c2VhcmNoUmFuZ2UtPmVuZCwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqYm91
bmRhcnkpKTsKICAgICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoRm9yUmFuZ2UoZm9y
d2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CiAgICAgfQogCi0gICAgYXV0byByZXN1bHQgPSBzZWFy
Y2hSYW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0
ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiB7IH07Ci0gICAgcmVzdWx0ID0gc2VhcmNoUmFuZ2UtPnNldEVuZCgqZW5kLmRl
cHJlY2F0ZWROb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICBpZiAo
cmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgU2ltcGxp
ZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZSk7CisgICAgU2ltcGxpZmll
ZEJhY2t3YXJkc1RleHRJdGVyYXRvciBpdCgqc2VhcmNoUmFuZ2UpOwogICAgIHVuc2lnbmVkIG5l
eHQgPSBiYWNrd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVyYXRvcihpdCwgc3RyaW5n
LCBzdWZmaXhMZW5ndGgsIHNlYXJjaEZ1bmN0aW9uKTsKIAogICAgIGlmICghbmV4dCkKLSAgICAg
ICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0
UG9zaXRpb24oKSA6IHBvcywgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBpdC5hdEVuZCgp
ID8gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHNlYXJjaFJhbmdlLT5zdGFydCkgOiBwb3Np
dGlvbjsKIAotICAgIGF1dG8mIG5vZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0
Q29udGFpbmVyKCkgOiBpdC5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKKyAgICBhdXRv
JiBub2RlID0gKGl0LmF0RW5kKCkgPyAqc2VhcmNoUmFuZ2UgOiBpdC5yYW5nZSgpKS5zdGFydC5j
b250YWluZXIuZ2V0KCk7CiAgICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIGlzPFRleHQ+KG5vZGUp
ICYmIG5leHQgPD0gZG93bmNhc3Q8VGV4dD4obm9kZSkubGVuZ3RoKCkpIHx8IChub2RlLnJlbmRl
cmVyKCkgJiYgbm9kZS5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKSB7Ci0gICAgICAgIC8v
IFRoZSBuZXh0IHZhcmlhYmxlIGNvbnRhaW5zIGEgdXNhYmxlIGluZGV4IGludG8gYSB0ZXh0IG5v
ZGUKLSAgICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24oJm5vZGUsIG5leHQpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgLy8gVGhlIG5leHQgdmFy
aWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZS4KKyAgICAgICAg
cmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgbmV4dCk7CiAgICAgfQog
CiAgICAgLy8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0
IHZhbHVlIGludG8gYSBET00gcG9zaXRpb24uCi0gICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0
b3IgY2hhckl0KHNlYXJjaFJhbmdlKTsKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBj
aGFySXQoKnNlYXJjaFJhbmdlKTsKICAgICBpZiAobmV4dCA8IHN0cmluZy5zaXplKCkgLSBzdWZm
aXhMZW5ndGgpCiAgICAgICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhM
ZW5ndGggLSBuZXh0KTsKICAgICAvLyBGSVhNRTogY2hhckl0IGNhbiBnZXQgb3V0IG9mIHNoYWRv
dyBob3N0LgotICAgIHJldHVybiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjaGFySXQu
cmFuZ2UoKS5lbmQpLCBET1dOU1RSRUFNIH07CisgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihjaGFySXQucmFuZ2UoKS5lbmQpOwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0
aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNo
RnVuY3Rpb24gc2VhcmNoRnVuY3Rpb24pCkBAIC02NTgsMzAgKzYzNCwyOSBAQCBzdGF0aWMgVmlz
aWJsZVBvc2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5k
YXJ5U2VhcmNoRnVuYwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKICAgICBE
b2N1bWVudCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwotICAgIFJl
ZjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0g
ICAgUG9zaXRpb24gc3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKIAogICAg
IFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOwogICAgIHVuc2lnbmVkIHByZWZpeExlbmd0aCA9
IDA7CiAKICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVy
QWZ0ZXIoKSkpIHsKLSAgICAgICAgYXV0byBiYWNrd2FyZHNTY2FuUmFuZ2UgPSBib3VuZGFyeURv
Y3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgp
KQotICAgICAgICAgICAgYmFja3dhcmRzU2NhblJhbmdlLT5zZXRFbmQoKnN0YXJ0LmRlcHJlY2F0
ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgICAgICBwcmVm
aXhMZW5ndGggPSBwcmVmaXhMZW5ndGhGb3JSYW5nZShiYWNrd2FyZHNTY2FuUmFuZ2UsIHN0cmlu
Zyk7CisgICAgICAgIGF1dG8gYmFja3dhcmRzU2NhblJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1h
a2VCb3VuZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKGJvdW5kYXJ5RG9jdW1lbnQpLCBjKTsK
KyAgICAgICAgaWYgKCFiYWNrd2FyZHNTY2FuUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICBwcmVmaXhMZW5ndGggPSBwcmVmaXhMZW5ndGhGb3JSYW5nZSgqYmFja3dhcmRz
U2NhblJhbmdlLCBzdHJpbmcpOwogICAgIH0KIAotICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2Rl
Q29udGVudHMoKmJvdW5kYXJ5KTsKLSAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkKLSAg
ICAgICAgc2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFy
dC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICBUZXh0SXRlcmF0b3IgaXQoc2VhcmNo
UmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKTsKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGMsIG1ha2VCb3Vu
ZGFyeVBvaW50QWZ0ZXJOb2RlQ29udGVudHMoKmJvdW5kYXJ5KSk7CisgICAgaWYgKCFzZWFyY2hS
YW5nZSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFRleHRJdGVyYXRvciBpdCgqc2VhcmNo
UmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKTsKICAgICB1bnNpZ25lZCBuZXh0ID0gZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRl
eHRJdGVyYXRvcihpdCwgc3RyaW5nLCBwcmVmaXhMZW5ndGgsIHNlYXJjaEZ1bmN0aW9uKTsKICAg
ICAKICAgICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpCi0gICAgICAg
IHBvcyA9IHNlYXJjaFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBwb3MgPSBjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24oc2VhcmNoUmFuZ2UtPmVuZCk7CiAgICAgZWxzZSBpZiAobmV4
dCA+IHByZWZpeExlbmd0aCkgewogICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRv
ciB0byB0cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICAg
ICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0
c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgICAgIENoYXJhY3Rl
ckl0ZXJhdG9yIGNoYXJJdCgqc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgY2hhckl0LmFkdmFuY2UobmV4
dCAtIHByZWZpeExlbmd0aCAtIDEpOwogICAgICAgICBhdXRvIGNoYXJhY3RlclJhbmdlID0gY2hh
ckl0LnJhbmdlKCk7CiAgICAgICAgIHBvcyA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihj
aGFyYWN0ZXJSYW5nZS5lbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9W
aXNpYmxlVW5pdHMuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5k
ZXggNDJlNjM3ODk1ZWVjNzliZDhjMjJiNmRjNzg5NTQ3YTJiOGE5YWU5MC4uZjQ3NTFiN2Y1MDU5
ZDQ4ZDEyMDUyNjkzYzhmZGE5MjcxN2FmNTM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2li
bGVVbml0cy5oCkBAIC0xMTgsOCArMTE4LDggQEAgdW5zaWduZWQgc3RhcnRXb3JkQm91bmRhcnko
U3RyaW5nVmlldywgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGkKIHVu
c2lnbmVkIGVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3LCB1bnNpZ25lZCwgQm91bmRhcnlTZWFy
Y2hDb250ZXh0QXZhaWxhYmlsaXR5LCBib29sJik7CiB1bnNpZ25lZCBzdGFydFNlbnRlbmNlQm91
bmRhcnkoU3RyaW5nVmlldywgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJp
bGl0eSwgYm9vbCYpOwogdW5zaWduZWQgZW5kU2VudGVuY2VCb3VuZGFyeShTdHJpbmdWaWV3LCB1
bnNpZ25lZCwgQm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5LCBib29sJik7Ci11bnNp
Z25lZCBzdWZmaXhMZW5ndGhGb3JSYW5nZShjb25zdCBSYW5nZSYsIFZlY3RvcjxVQ2hhciwgMTAy
ND4mKTsKLXVuc2lnbmVkIHByZWZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFJhbmdlJiwgVmVjdG9y
PFVDaGFyLCAxMDI0PiYpOwordW5zaWduZWQgc3VmZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmLCBWZWN0b3I8VUNoYXIsIDEwMjQ+Jik7Cit1bnNpZ25lZCBwcmVmaXhMZW5ndGhG
b3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYsIFZlY3RvcjxVQ2hhciwgMTAyND4mKTsKIHVuc2ln
bmVkIGJhY2t3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKFNpbXBsaWZpZWRC
YWNrd2FyZHNUZXh0SXRlcmF0b3ImLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiwgdW5zaWduZWQsIEJv
dW5kYXJ5U2VhcmNoRnVuY3Rpb24pOwogdW5zaWduZWQgZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5
V2l0aFRleHRJdGVyYXRvcihUZXh0SXRlcmF0b3ImLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiwgdW5z
aWduZWQsIEJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24pOwogTm9kZSogZmluZFN0YXJ0T2ZQYXJhZ3Jh
cGgoTm9kZSosIE5vZGUqLCBOb2RlKiwgaW50JiwgUG9zaXRpb246OkFuY2hvclR5cGUmLCBFZGl0
aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9jb2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9EYXRhRGV0ZWN0aW9uLm1tCmluZGV4IDE0ZmE2ODgyYzY3MzZjNzNmZDYzNDQwOGZlY2Q3OGE0
MmRiYWE2ZDAuLjJhNWRlZTgwMWIzNWY3NWJlNWJlZWU0ZTY1MmUxMTc3NTJhZmE1MzUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTM1NSw3
ICszNTUsNiBAQCBzdGF0aWMgdm9pZCBidWlsZFF1ZXJ5KEREU2NhblF1ZXJ5UmVmIHNjYW5RdWVy
eSwgY29uc3QgU2ltcGxlUmFuZ2UmIGNvbnRleHRSYW5nZQogICAgIENGQ2hhcmFjdGVyU2V0UmVm
IHdoaXRlU3BhY2VzU2V0ID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3Rl
clNldFdoaXRlc3BhY2VBbmROZXdsaW5lKTsKICAgICBDRkNoYXJhY3RlclNldFJlZiBuZXdMaW5l
c1NldCA9IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXROZXdsaW5l
KTsKICAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlOwogICAgIENGSW5kZXggaXRlcmF0
b3JDb3VudCA9IDA7CiAgICAgQ0ZJbmRleCBmcmFnbWVudENvdW50ID0gMDsKICAgICAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCBjOTMzNzNhZDM4NjBiNzFhMjdi
ODM2MGExYjRmOTM4OWY2ZWY5M2JhLi4xNzhkMjc0ZmY1MDQwYTcxMTliMjI1MDA1MzBkZTBmZDcw
MTg1Yzk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC0yNjcs
MTQgKzI2NywxMyBAQCB2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVs
ZW1lbnQoY29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZAogICAgICAgICByZXR1cm47CiAg
ICAgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBjb250ZXh0ID0gZG9jdW1lbnQoKS5jcmVhdGVSYW5n
ZSgpOwotICAgIGNvbnRleHQtPnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTsKKyAgICBhdXRv
IGNvbnRleHQgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZWxlbWVudCk7CiAKICAg
ICBTdHJpbmdCdWlsZGVyIGRpY3RhdGlvblBocmFzZXNCdWlsZGVyOwogICAgIGZvciAoYXV0byYg
aW50ZXJwcmV0YXRpb25zIDogZGljdGF0aW9uUGhyYXNlcykKICAgICAgICAgZGljdGF0aW9uUGhy
YXNlc0J1aWxkZXIuYXBwZW5kKGludGVycHJldGF0aW9uc1swXSk7CiAKLSAgICBlbGVtZW50LmFw
cGVuZENoaWxkKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvbnRleHQsIGRpY3RhdGlvblBocmFz
ZXNCdWlsZGVyLnRvU3RyaW5nKCkpKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUZy
YWdtZW50RnJvbVRleHQoY29udGV4dCwgZGljdGF0aW9uUGhyYXNlc0J1aWxkZXIudG9TdHJpbmco
KSkpOwogCiAgICAgYXV0byB3ZWFrRWxlbWVudCA9IG1ha2VXZWFrUHRyKGVsZW1lbnQpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggNTllYTRmYmY3ZTllNTUyZDI5Nzcx
YmIyNWYwNjVkZTEwM2NkYjEzNS4uM2IxNjIzYTliMGVhMDg5NzE4ZDQ4MmVjNmY2ODE5NjEyNWI1
MWE3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzA5LDcgKzMwOSw3
IEBAIEV4Y2VwdGlvbk9yPFJlZjxSYW5nZT4+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCh1bnNp
Z25lZCBpbmRleCkKICAgICBpZiAoYXV0byogc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFk
b3dBbmNlc3RvcigqZnJhbWUpKSB7CiAgICAgICAgIGF1dG8qIGNvbnRhaW5lciA9IHNoYWRvd0Fu
Y2VzdG9yLT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7CiAgICAgICAgIHVuc2lnbmVk
IG9mZnNldCA9IHNoYWRvd0FuY2VzdG9yLT5jb21wdXRlTm9kZUluZGV4KCk7Ci0gICAgICAgIHJl
dHVybiBSYW5nZTo6Y3JlYXRlKHNoYWRvd0FuY2VzdG9yLT5kb2N1bWVudCgpLCBjb250YWluZXIs
IG9mZnNldCwgY29udGFpbmVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJh
bmdlKG1ha2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50IHsgKmNvbnRhaW5lciwgb2Zmc2V0IH0p
KTsKICAgICB9CiAKICAgICBhdXRvIGZpcnN0UmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuZmlyc3RSYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNw
cAppbmRleCA1NjZkNWQ0NjkzMDllYjhjNjMzNWUwMmEyZWMxNzBiMWM2MjExYTZmLi42NWI1Mzgw
MGNlYWEzZDg1ZTc1NmJhYmJkZTA2NDk0OTdiMDc5Yjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcApAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxl
cjo6aW5zZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50
U2l6ZT4KICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRl
KCpkb2N1bWVudCwgV1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlByZXZlbnROZXN0aW5nLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlIH0s
IEVkaXRBY3Rpb246Okluc2VydEZyb21Ecm9wKTsKICAgICBjb21tYW5kLT5hcHBseSgpOwogCi0g
ICAgYXV0byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb21tYW5kLT5p
bnNlcnRlZENvbnRlbnRSYW5nZSgpKTsKKyAgICBhdXRvIGluc2VydGVkQ29udGVudFJhbmdlID0g
Y29tbWFuZC0+aW5zZXJ0ZWRDb250ZW50UmFuZ2UoKTsKICAgICBpZiAoIWluc2VydGVkQ29udGVu
dFJhbmdlKSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDY0MTA1NDhkNDIyMjM3N2MxNDEzODYxY2I1ZDkwMjQy
NTNkZWQ3MzAuLjg5N2ZmMDQzZDNjMzc0NTZkYmI1MDQwNmNkZjBjZmM4ZDc4YzkwOTIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuY3BwCkBAIC04MTYsMjUgKzgxNiwyNSBAQCBEb2N1bWVudCogRnJhbWU6OmRv
Y3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAgICAgcmV0dXJuIHJlc3VsdC5p
bm5lck5vZGUoKSA/ICZyZXN1bHQuaW5uZXJOb2RlKCktPmRvY3VtZW50KCkgOiAwOwogfQogCi1S
ZWZQdHI8UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBv
aW50KQorT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IElu
dFBvaW50JiBmcmFtZVBvaW50KQogewogICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRp
b25Gb3JQb2ludChmcmFtZVBvaW50KTsKIAogICAgIGF1dG8gY29udGFpbmVyVGV4dCA9IHBvc2l0
aW9uLmRlZXBFcXVpdmFsZW50KCkuY29udGFpbmVyVGV4dCgpOwogICAgIGlmICghY29udGFpbmVy
VGV4dCB8fCAhY29udGFpbmVyVGV4dC0+cmVuZGVyZXIoKSB8fCBjb250YWluZXJUZXh0LT5yZW5k
ZXJlcigpLT5zdHlsZSgpLnVzZXJTZWxlY3QoKSA9PSBVc2VyU2VsZWN0OjpOb25lKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlm
IChhdXRvIHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24u
cHJldmlvdXMoKSwgcG9zaXRpb24pKSB7CiAgICAgICAgIGlmIChlZGl0b3IoKS5maXJzdFJlY3RG
b3JSYW5nZSgqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQb2ludCkpCi0g
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpwcmV2aW91c0NoYXJhY3RlclJhbmdl
KTsKKyAgICAgICAgICAgIHJldHVybiAqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZTsKICAgICB9CiAK
ICAgICBpZiAoYXV0byBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRp
b24sIHBvc2l0aW9uLm5leHQoKSkpIHsKICAgICAgICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZv
clJhbmdlKCpuZXh0Q2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqbmV4dENoYXJhY3RlclJhbmdlKTsKKyAgICAg
ICAgICAgIHJldHVybiAqbmV4dENoYXJhY3RlclJhbmdlOwogICAgIH0KIAotICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgRnJhbWU6OmNyZWF0
ZVZpZXcoY29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBPcHRpb25hbDxDb2xvcj4m
IGJhY2tncm91bmRDb2xvciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
aCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA0NTQ0MGFjMWFhZjA3MzcxYzM1
MmYxOGRiNDE2OTYxZjhmMTQxYjYyLi43OGFmNGJmNDI4YWRkM2M4MTZmMWZjNTIwZGM0MzkwNGRk
NDNjODdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC04OSw3ICs4OSw2IEBAIGNsYXNzIEludFNpemU7
CiBjbGFzcyBOYXZpZ2F0aW9uU2NoZWR1bGVyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7Ci1j
bGFzcyBSYW5nZTsKIGNsYXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyVmlldzsKIGNsYXNz
IFJlbmRlcldpZGdldDsKQEAgLTk5LDYgKzk4LDggQEAgY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBW
aXNpYmxlUG9zaXRpb247CiBjbGFzcyBXaWRnZXQ7CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwog
I2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCiBlbnVtIHsKICAgICBPdmVyZmxvd1Njcm9sbE5vbmUg
PSAwLApAQCAtMjY4LDcgKzI2OSw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFZp
c2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJh
bWVQb2ludCkgY29uc3Q7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQ
b2ludCYgd2luZG93UG9pbnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFu
Z2VGb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgV0VCQ09SRV9FWFBP
UlQgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZy
YW1lUG9pbnQpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlYXJjaEZvckxhYmVsc0Fi
b3ZlQ2VsbChjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiwgSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQqLCBzaXplX3QqIHJlc3VsdERpc3RhbmNlRnJvbVN0YXJ0T2ZDZWxsKTsKICAgICBT
dHJpbmcgc2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0b3I8U3RyaW5nPiYg
bGFiZWxzLCBFbGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZSwgYm9vbCogcmVzdWx0SXNJ
bkNlbGxBYm92ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlP
Uy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDU4OThiZTcw
YjNmYTIzNWM5MDg4YjQzYTc2ZDcyOTdiMWZkMjQ3MGYuLmY2OGNhYzQyODFlNjU3NzcwNDlmYzk4
ZGIyODJlOWI1MzI2NDE1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0Zy
YW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC03
MjMsOCArNzIzLDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRS
b290KCkgY29uc3QKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGF1dG8qIHJvb3QgPSBzZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6
Tm9TZWxlY3Rpb24gPyBkb2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgpIDogc2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIHVuc2lnbmVkIHJvb3RDaGls
ZENvdW50ID0gcm9vdC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAgYXV0byByYW5nZU9mUm9vdENv
bnRlbnRzID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKHJvb3QsIDApLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocm9vdCwgcm9vdENo
aWxkQ291bnQpKTsKKyAgICBhdXRvIHJhbmdlT2ZSb290Q29udGVudHMgPSBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlQ29udGVudHMoKnJvb3QpOwogCiAgICAgYXV0byBtYXJrZXJzSW5Sb290ID0gZG9j
dW1lbnQoKS0+bWFya2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZSb290Q29udGVudHMsIERv
Y3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzKTsKIApAQCAtNzQ1
LDI5ICs3NDQsMjMgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRS
b290KCkgY29uc3QKIAogICAgIHVuc2lnbmVkIGNvbWJpbmF0aW9uc1NvRmFyID0gMTsKIAotICAg
IE5vZGUqIHBhc3RMYXN0Tm9kZSA9IHJhbmdlT2ZSb290Q29udGVudHMtPnBhc3RMYXN0Tm9kZSgp
OwotICAgIGZvciAoTm9kZSogbm9kZSA9IHJhbmdlT2ZSb290Q29udGVudHMtPmZpcnN0Tm9kZSgp
OyBub2RlICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUp
KSB7Ci0gICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBk
b2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRp
Y3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpKSB7CisgICAgZm9yIChhdXRvJiBub2RlIDog
aW50ZXJzZWN0aW5nTm9kZXMocmFuZ2VPZlJvb3RDb250ZW50cykpIHsKKyAgICAgICAgZm9yIChh
dXRvKiBtYXJrZXIgOiBkb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBEb2N1
bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpIHsKICAgICAgICAg
ICAgIGF1dG8mIGFsdGVybmF0aXZlcyA9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXIt
PmRhdGEoKSk7CiAKLSAgICAgICAgICAgIC8vIEZpcnN0LCBhZGQgdGV4dCB0aGF0IHByZWNlZGUg
dGhlIG1hcmtlci4KLSAgICAgICAgICAgIGlmIChwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiAh
PSBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgp
KSkgewotICAgICAgICAgICAgICAgIGF1dG8gcHJlY2VkaW5nVGV4dFJhbmdlID0gUmFuZ2U6OmNy
ZWF0ZSgqZG9jdW1lbnQoKSwgcHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKTsKLSAgICAgICAg
ICAgICAgICBTdHJpbmcgcHJlY2VkaW5nVGV4dCA9IHBsYWluVGV4dChwcmVjZWRpbmdUZXh0UmFu
Z2UpOworICAgICAgICAgICAgYXV0byByYW5nZUZvck1hcmtlciA9IHJhbmdlKG5vZGUsICptYXJr
ZXIpOworCisgICAgICAgICAgICBpZiAoYXV0byBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UocHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIHJhbmdlRm9yTWFya2VyLnN0YXJ0
KSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBwcmVjZWRpbmdUZXh0ID0gcGxhaW5UZXh0KCpw
cmVjZWRpbmdUZXh0UmFuZ2UpOwogICAgICAgICAgICAgICAgIGlmICghcHJlY2VkaW5nVGV4dC5p
c0VtcHR5KCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlv
biA6IGludGVycHJldGF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRl
cnByZXRhdGlvbiwgcHJlY2VkaW5nVGV4dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgfQogCi0gICAgICAgICAgICBhdXRvIHJhbmdlRm9yTWFya2VyID0gUmFuZ2U6OmNyZWF0ZSgq
ZG9jdW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3Rh
cnRPZmZzZXQoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPmVu
ZE9mZnNldCgpKSk7CiAgICAgICAgICAgICBTdHJpbmcgdmlzaWJsZVRleHRGb3JNYXJrZXIgPSBw
bGFpblRleHQocmFuZ2VGb3JNYXJrZXIpOwogICAgICAgICAgICAgc2l6ZV90IGludGVycHJldGF0
aW9uc0NvdW50Rm9yQ3VycmVudE1hcmtlciA9IGFsdGVybmF0aXZlcy5zaXplKCkgKyAxOwogICAg
ICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnRlcnByZXRhdGlvbnNDb3VudDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRleHQgZm9yIHRoZSBpdGggaW50ZXJw
cmV0YXRpb24uIEl0IHdpbGwgZWl0aGVyIGJlIHRoZSB2aXNpYmxlIHRleHQsIG9yIG9uZSBvZiBp
dHMKLSAgICAgICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZXMgc3RvcmVkIGluIHRoZSBtYXJrZXIu
Ci0KICAgICAgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkludGVycHJldGF0aW9uRm9yQ3VycmVu
dE1hcmtlciA9IChpIC8gY29tYmluYXRpb25zU29GYXIpICUgaW50ZXJwcmV0YXRpb25zQ291bnRG
b3JDdXJyZW50TWFya2VyOwogICAgICAgICAgICAgICAgIGlmICghaW5kZXhPZkludGVycHJldGF0
aW9uRm9yQ3VycmVudE1hcmtlcikKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKGludGVycHJl
dGF0aW9uc1tpXSwgdmlzaWJsZVRleHRGb3JNYXJrZXIpOwpAQCAtNzc3LDE2ICs3NzAsMTcgQEAg
TlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKIAog
ICAgICAgICAgICAgY29tYmluYXRpb25zU29GYXIgKj0gaW50ZXJwcmV0YXRpb25zQ291bnRGb3JD
dXJyZW50TWFya2VyOwogCi0gICAgICAgICAgICBwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiA9
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKTsK
KyAgICAgICAgICAgIHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKHJhbmdlRm9yTWFya2VyLmVuZCk7CiAgICAgICAgIH0KICAgICB9CiAKICAg
ICAvLyBGaW5hbGx5LCBhZGQgYW55IHRleHQgYWZ0ZXIgdGhlIGxhc3QgbWFya2VyLgotICAgIGF1
dG8gYWZ0ZXJMYXN0TWFya2VyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBwcmVj
ZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3Qs
IHJvb3RDaGlsZENvdW50KSk7Ci0gICAgU3RyaW5nIHRleHRBZnRlckxhc3RNYXJrZXIgPSBwbGFp
blRleHQoYWZ0ZXJMYXN0TWFya2VyUmFuZ2UpOwotICAgIGlmICghdGV4dEFmdGVyTGFzdE1hcmtl
ci5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbiA6IGludGVy
cHJldGF0aW9ucykKLSAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbiwgdGV4dEFmdGVy
TGFzdE1hcmtlcik7CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2Vk
aW5nVGV4dFN0YXJ0UG9zaXRpb24sIHJhbmdlT2ZSb290Q29udGVudHMuZW5kKSkgeworICAgICAg
ICBTdHJpbmcgdGV4dEFmdGVyTGFzdE1hcmtlciA9IHBsYWluVGV4dCgqcmFuZ2UpOworICAgICAg
ICBpZiAoIXRleHRBZnRlckxhc3RNYXJrZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmb3Ig
KGF1dG8mIGludGVycHJldGF0aW9uIDogaW50ZXJwcmV0YXRpb25zKQorICAgICAgICAgICAgICAg
IGFwcGVuZChpbnRlcnByZXRhdGlvbiwgdGV4dEFmdGVyTGFzdE1hcmtlcik7CisgICAgICAgIH0K
ICAgICB9CiAKICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShpbnRlcnByZXRhdGlvbnMsIFtdIChh
dXRvJiBpbnRlcnByZXRhdGlvbikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmlu
ZGV4IDY5YTE0Y2M3Y2U1MjY0MTBkYjk5ODMzODBhYmVjNWUyMDk2NjEwMzIuLmQ0N2YyNjE3ZWJk
MGViOTdiZjMxM2VkNjZjM2Q4ZGUyNDI0ZTQwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKQEAgLTE3NzUsNyArMTc3NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxSYW5nZT4+
IEludGVybmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluCiAg
ICAgYXV0byBtYXJrZXIgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgaWYgKCFt
YXJrZXIpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBSZWZQdHI8UmFuZ2U+
IHsgUmFuZ2U6OmNyZWF0ZShub2RlLmRvY3VtZW50KCksICZub2RlLCBtYXJrZXItPnN0YXJ0T2Zm
c2V0KCksICZub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKSB9OworICAgIHJldHVybiB7IGNyZWF0
ZUxpdmVSYW5nZShyYW5nZShub2RlLCAqbWFya2VyKSkgfTsKIH0KIAogRXhjZXB0aW9uT3I8U3Ry
aW5nPiBJbnRlcm5hbHM6Om1hcmtlckRlc2NyaXB0aW9uRm9yTm9kZShOb2RlJiBub2RlLCBjb25z
dCBTdHJpbmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJs
YXkuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dL
QnVuZGxlUGFnZU92ZXJsYXkuY3BwCmluZGV4IDY5ZjdhZjIyYjU2NzUwNGQ0ZjMxZjBkN2E3MGI4
NzRlMDlmYTU1YTIuLjM1YjY2NDcyZTc3MDU3Y2NlZmU5M2RmOGZkYTk1M2QwZDQxOTZhYzQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9X
S0J1bmRsZVBhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTEyOCwxOSArMTI4
LDE3IEBAIHByaXZhdGU6CiAgICAgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIEREQWN0aW9u
Q29udGV4dCAqYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViS2l0OjpXZWJQYWdlT3Zl
cmxheSYgcGFnZU92ZXJsYXksIFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIFJlZlB0cjxX
ZWJDb3JlOjpSYW5nZT4mIHJhbmdlSGFuZGxlKSBvdmVycmlkZQorICAgIE9wdGlvbmFsPFdlYktp
dDo6V2ViUGFnZU92ZXJsYXk6OkFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHRGb3JSZXN1bHRB
dFBvaW50KFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBXZWJDb3JlOjpGbG9h
dFBvaW50IGxvY2F0aW9uKSBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKG1fY2xpZW50LmFjdGlv
bkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KSB7Ci0gICAgICAgICAgICBXS0J1bmRsZVJhbmdlSGFu
ZGxlUmVmIGFwaVJhbmdlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIEREQWN0aW9uQ29udGV4dCAq
YWN0aW9uQ29udGV4dCA9IChEREFjdGlvbkNvbnRleHQgKiltX2NsaWVudC5hY3Rpb25Db250ZXh0
Rm9yUmVzdWx0QXRQb2ludCh0b0FQSSgmcGFnZU92ZXJsYXkpLCBXS1BvaW50TWFrZShsb2NhdGlv
bi54KCksIGxvY2F0aW9uLnkoKSksICZhcGlSYW5nZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZv
KTsKKyAgICAgICAgaWYgKCFtX2NsaWVudC5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCkK
KyAgICAgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIGlmIChhcGlS
YW5nZSkKLSAgICAgICAgICAgICAgICByYW5nZUhhbmRsZSA9ICZXZWJLaXQ6OnRvSW1wbChhcGlS
YW5nZSktPmNvcmVSYW5nZSgpOworICAgICAgICBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGFwaVJh
bmdlID0gbnVsbHB0cjsKKyAgICAgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gKEREQWN0aW9uQ29u
dGV4dCAqKW1fY2xpZW50LmFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KHRvQVBJKCZwYWdl
T3ZlcmxheSksIFdLUG9pbnRNYWtlKGxvY2F0aW9uLngoKSwgbG9jYXRpb24ueSgpKSwgJmFwaVJh
bmdlLCBtX2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBpZiAoIWFjdGlvbkNvbnRl
eHQgfHwgIWFwaVJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAg
ICAgICAgICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1
cm4gbmlsOworICAgICAgICByZXR1cm4geyB7IGFjdGlvbkNvbnRleHQsIFdlYktpdDo6dG9JbXBs
KGFwaVJhbmdlKS0+Y29yZVJhbmdlKCkgfSB9OwogICAgIH0KIAogICAgIHZvaWQgZGF0YURldGVj
dG9yc0RpZFByZXNlbnRVSShXZWJLaXQ6OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSkgb3Zl
cnJpZGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IDFiNmJiNzdlY2E3ZTZlYzBmMWY2
MWU4NzIxMmM0YzQ1ZjY5NmI2NjQuLmEzOWM2NDJlZDJiZjM5MTY4OWNlMjcwMDlmNjA3NzVhMTYz
ZjM2MDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvbWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtNDksMTIgKzQ5LDcgQEAgLSAo
aWQpX2luaXRXaXRoSW1wbDooV2ViQ29yZTo6UmFuZ2UqKWltcGwKIAogLSAoaWQpaW5pdFdpdGhE
b2N1bWVudDooV0tET01Eb2N1bWVudCAqKWRvY3VtZW50CiB7Ci0gICAgYXV0byByYW5nZSA9IFdl
YkNvcmU6OlJhbmdlOjpjcmVhdGUoKldlYktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1lbnQp
KTsKLSAgICBzZWxmID0gW3NlbGYgX2luaXRXaXRoSW1wbDpyYW5nZS5wdHIoKV07Ci0gICAgaWYg
KCFzZWxmKQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7CisgICAgcmV0
dXJuIFtzZWxmIF9pbml0V2l0aEltcGw6V2ViS2l0Ojp0b1dlYkNvcmVEb2N1bWVudChkb2N1bWVu
dCktPmNyZWF0ZVJhbmdlKCkucHRyKCldOwogfQogCiAtICh2b2lkKWRlYWxsb2MKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRC
dW5kbGVOb2RlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAppbmRleCBkMzg3YWRiNjRkZDBk
YTZiMjdlNGJmMWMwNjdkNTFiZTk4NWY5YWQxLi4wMWMxNTRkNzU3YTEwMTM2M2FmZGVjOTc1NTMw
MDBjMjI0MDhkYTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0
ZWRCdW5kbGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3NpdGlvbi5oPgog
I2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlck9iamVj
dC5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3Jl
L1Zpc2libGVQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8
d3RmL05ldmVyRGVzdHJveWVkLmg+CkBAIC0yMzQsMTIgKzIzNSw5IEBAIFJlZlB0cjxJbmplY3Rl
ZEJ1bmRsZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnZpc2libGVSYW5n
ZSgpCiB7CiAgICAgaWYgKCFtX25vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAg
VmlzaWJsZVBvc2l0aW9uIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluTm9kZShtX25vZGUuZ2V0KCkp
OwogICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9ub2RlLmdl
dCgpKTsKLQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7
Ci0gICAgcmV0dXJuIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdl
LmdldCgpKTsKKyAgICByZXR1cm4gY3JlYXRlSGFuZGxlKG1ha2VTaW1wbGVSYW5nZShzdGFydCwg
ZW5kKSk7CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpzZXRIVE1MSW5wdXRF
bGVtZW50VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVy
UHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVj
a2luZ0NvbnRyb2xsZXJQcm94eS5oCmluZGV4IDRmZjRlMWE0ODU2NzlkYmJiODgxOGIyOWI1ZWFj
MTJmOGMyZWYxMmEuLmNiMjM4OWZjMGRiMGZiMTgwMGY2MWFkOWY0MGY4MWEyNDkzMWU1YjMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVj
a2luZ0NvbnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCkBAIC0zMCw2ICszMCw3IEBA
CiAjaW5jbHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdSYW5nZS5oIgogI2lu
Y2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2Uu
aD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTksNyAr
NjAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0
aW9uJiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICBzdHJ1Y3QgUmFuZ2VBbmRPZmZz
ZXQgewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlOworICAgICAgICBXZWJD
b3JlOjpTaW1wbGVSYW5nZSByYW5nZTsKICAgICAgICAgc2l6ZV90IGxvY2F0aW9uSW5Sb290OyAg
ICAKICAgICB9OwogICAgIE9wdGlvbmFsPFJhbmdlQW5kT2Zmc2V0PiByYW5nZUFuZE9mZnNldFJl
bGF0aXZlVG9TZWxlY3Rpb24oaW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tp
bmdDb250cm9sbGVyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9D
b2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KaW5kZXggNjZlM2Q5OTU3ZWRiOWFm
MzM2NDk4MzE0NGU3NGExMDNjMjhlZGUzZS4uNzhmMWRkMTA5NTcxMDVlMjE1NjZhODIzZjJhMjUw
YzU4OTYxM2IwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
Q29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQpA
QCAtOTEsNyArOTEsNyBAQCBPcHRpb25hbDxUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OlJh
bmdlQW5kT2Zmc2V0PiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveAogICAgICAgICByZXR1cm4g
V1RGOjpudWxsb3B0OwogICAgIGF1dG8gYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSA9
IENoYXJhY3RlclJhbmdlIHsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFkanVzdGVkU3RhcnRMb2Nh
dGlvbiksIGxlbmd0aCB9OwogCi0gICAgcmV0dXJuIHsgeyBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2
ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlKSks
IGFkanVzdGVkU2VsZWN0aW9uQ2hhcmFjdGVyUmFuZ2UubG9jYXRpb24gfSB9OworICAgIHJldHVy
biB7IHsgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJh
Y3RlclJhbmdlKSwgYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZS5sb2NhdGlvbiB9IH07
CiB9CiAKIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVU
b1NlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nJiBhbm5vdGF0ZWRTdHJp
bmcsIGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IHJl
bGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVudExl
bmd0aCkKQEAgLTEwNSwzMCArMTA1LDIxIEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclBy
b3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpBdHRyCiAgICAg
YXV0byByYW5nZUFuZE9mZnNldCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihz
ZWxlY3Rpb25PZmZzZXQsIGxlbmd0aCk7CiAgICAgaWYgKCFyYW5nZUFuZE9mZnNldCkKICAgICAg
ICAgcmV0dXJuOwotICAgIGF1dG8gcmFuZ2UgPSByYW5nZUFuZE9mZnNldC0+cmFuZ2U7Ci0gICAg
aWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbG9jYXRpb25JblJvb3QgPSBy
YW5nZUFuZE9mZnNldC0+bG9jYXRpb25JblJvb3Q7CiAKICAgICBhdXRvJiBtYXJrZXJzID0gZnJh
bWUuZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygqcmFu
Z2UsIHJlbGV2YW50TWFya2VyVHlwZXMoKSk7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJh
bmdlQW5kT2Zmc2V0LT5yYW5nZSwgcmVsZXZhbnRNYXJrZXJUeXBlcygpKTsKIAogICAgIGlmIChy
ZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICBhdXRv
IHJhbmdlQW5kT2Zmc2V0T2ZSZXBsYWNlbWVudCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1Nl
bGVjdGlvbihzZWxlY3Rpb25PZmZzZXQgKyByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHJl
bGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgpOwotICAgICAgICBpZiAocmFuZ2VBbmRPZmZzZXRPZlJl
cGxhY2VtZW50KSB7Ci0gICAgICAgICAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSByYW5nZUFu
ZE9mZnNldE9mUmVwbGFjZW1lbnQtPnJhbmdlOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50
UmFuZ2UpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3RvcmVTZWxlY3Rpb24gPSBmcmFtZVNl
bGVjdGlvbi5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7Ci0KLSAgICAgICAgICAgICAgICBmcmFtZS5l
ZGl0b3IoKS5yZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKCpyZXBsYWNlbWVudFJhbmdlLCBb
W2Fubm90YXRlZFN0cmluZy5zdHJpbmcgc3RyaW5nXSBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtl
UmFuZ2UocmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9uLCByZWxhdGl2ZVJlcGxhY2VtZW50TGVu
Z3RoICsgW2Fubm90YXRlZFN0cmluZy5zdHJpbmcgbGVuZ3RoXSAtIGxlbmd0aCldKTsKLQotICAg
ICAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHVpbnQ2NF90IHNlbGVjdGlvbkxvY2F0aW9uVG9SZXN0b3JlID0gbG9jYXRpb25JblJvb3QgLSBz
ZWxlY3Rpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Mb2NhdGlv
blRvUmVzdG9yZSA+IGxvY2F0aW9uSW5Sb290ICsgcmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9u
ICsgcmVsYXRpdmVSZXBsYWNlbWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAg
YXV0byBzZWxlY3Rpb25Ub1Jlc3RvcmUgPSBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3Rl
clJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIHsgc2VsZWN0aW9u
TG9jYXRpb25Ub1Jlc3RvcmUsIDAgfSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVT
ZWxlY3Rpb24ubW92ZVRvKHNlbGVjdGlvblRvUmVzdG9yZS5wdHIoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJhbmdlQW5kT2Zm
c2V0T2ZSZXBsYWNlbWVudCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihzZWxl
Y3Rpb25PZmZzZXQgKyByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHJlbGF0aXZlUmVwbGFj
ZW1lbnRMZW5ndGgpKSB7CisgICAgICAgICAgICBib29sIHJlc3RvcmVTZWxlY3Rpb24gPSBmcmFt
ZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7CisKKyAgICAgICAgICAgIGZyYW1lLmVk
aXRvcigpLnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcocmFuZ2VBbmRPZmZzZXRPZlJlcGxh
Y2VtZW50LT5yYW5nZSwgW1thbm5vdGF0ZWRTdHJpbmcuc3RyaW5nIHN0cmluZ10gc3Vic3RyaW5n
V2l0aFJhbmdlOk5TTWFrZVJhbmdlKHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgcmVsYXRp
dmVSZXBsYWNlbWVudExlbmd0aCArIFthbm5vdGF0ZWRTdHJpbmcuc3RyaW5nIGxlbmd0aF0gLSBs
ZW5ndGgpXSk7CisKKyAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7CisgICAgICAg
ICAgICAgICAgdWludDY0X3Qgc2VsZWN0aW9uTG9jYXRpb25Ub1Jlc3RvcmUgPSBsb2NhdGlvbklu
Um9vdCAtIHNlbGVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uTG9j
YXRpb25Ub1Jlc3RvcmUgPiBsb2NhdGlvbkluUm9vdCArIHJlbGF0aXZlUmVwbGFjZW1lbnRMb2Nh
dGlvbiArIHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGZy
YW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdl
U2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSwgeyBzZWxlY3Rpb25Mb2NhdGlvblRvUmVzdG9y
ZSwgMCB9KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjEsMTMgKzE1
MiwxMCBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlv
blJlbGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaQogICAgIGF1dG8gcmFuZ2VBbmRPZmZzZXQg
PSByYW5nZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oc2VsZWN0aW9uT2Zmc2V0LCBsZW5n
dGgpOwogICAgIGlmICghcmFuZ2VBbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRv
IHJhbmdlID0gcmFuZ2VBbmRPZmZzZXQtPnJhbmdlOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAg
IHJldHVybjsKIAogICAgIGF1dG8gcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IGFubm90YXRp
b24gPT0gIk5TU3BlbGxpbmdTdGF0ZSI7CiAgICAgYXV0byB0eXBlcyA9IHJlbW92ZUNvcmVTcGVs
bGluZ01hcmtlcnMgPyByZWxldmFudE1hcmtlclR5cGVzKCkgOiBXZWJDb3JlOjpEb2N1bWVudE1h
cmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmc7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmZvY3Vz
Q29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCktPm1hcmtlcnMoKS5m
aWx0ZXJNYXJrZXJzKCpyYW5nZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7
CisgICAgbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5G
cmFtZSgpLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKHJhbmdlQW5kT2Zmc2V0
LT5yYW5nZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CiAgICAgICAgIGlm
ICghV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZv
cm1UZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpQ
bGF0Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci5kYXRhKCkpLmtleSAhPSBhbm5vdGF0aW9u
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5j
cHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAy
ZGM1MDVjZmRiMTNiMDAzMmZkYTU0OWUwYzlkNWQ2NzI3MmI0MWViLi4yNzQyZjEzZWNmMzZkNjBj
Y2ZkNjdhM2ZkMjE1NDc1YjAwNjRmODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNTQ1Miw3ICs1NDUyLDcgQEAgdm9pZCBXZWJQYWdlOjpj
aGFyYWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50
LCBDYWxsYmEKICAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5k
bGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOwogICAgIGF1dG8mIGZy
YW1lID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVGcmFt
ZSgpIDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAg
ICBhdXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50SW5J
bm5lck5vZGVGcmFtZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6
ZnJvbVJhbmdlKGZyYW1lLCBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKKyAgICBhdXRvIGVkaXRp
bmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZSk7CiAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKGVkaXRpbmdSYW5nZS5s
b2NhdGlvbiwgY2FsbGJhY2tJRCkpOwogfQogCkBAIC01NTMzLDExICs1NTMzLDExIEBAIHZvaWQg
V2ViUGFnZTo6ZGVsZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJh
Y3RlckNvdW50KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0g
c2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1h
a2VSYW5nZShzdGFydE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9u
U3RhcnQpOworICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFy
dE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOwogICAg
IGlmICghc3Vycm91bmRpbmdSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcm9v
dE5vZGUgPSBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJv
b3ROb2RlKCk7CisgICAgYXV0byYgcm9vdE5vZGUgPSBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydC5j
b250YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAgICAgYXV0byBjaGFyYWN0ZXJSYW5n
ZSA9IFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlKFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KCpzdXJy
b3VuZGluZ1JhbmdlKSArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIGF1dG8gc2VsZWN0
aW9uUmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNv
bnRlbnRzKHJvb3ROb2RlKSwgY2hhcmFjdGVyUmFuZ2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKaW5kZXggZDFlMDk5YmJl
ZmVjYjFjMTI3MzYzNDY3YWQ1YjE3Zjk5N2EyOGU5Mi4uMWJiZmU1YjliODM2NjM3MWNjMDQzZWIy
NmY0NzBiYzc0NThiYzFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmNwcApAQCAtMTA5LDkgKzEwOSw5IEBAIHZvaWQgV2ViUGFn
ZU92ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5JiwgRnJhbWUmIGZyYW1lKQogfQog
CiAjaWYgUExBVEZPUk0oTUFDKQotRERBY3Rpb25Db250ZXh0ICpXZWJQYWdlT3ZlcmxheTo6YWN0
aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoRmxvYXRQb2ludCBsb2NhdGlvbiwgUmVmUHRyPFdl
YkNvcmU6OlJhbmdlPiYgcmFuZ2VIYW5kbGUpCithdXRvIFdlYlBhZ2VPdmVybGF5OjphY3Rpb25D
b250ZXh0Rm9yUmVzdWx0QXRQb2ludChGbG9hdFBvaW50IGxvY2F0aW9uKSAtPiBPcHRpb25hbDxB
Y3Rpb25Db250ZXh0PgogewotICAgIHJldHVybiBtX2NsaWVudC0+YWN0aW9uQ29udGV4dEZvclJl
c3VsdEF0UG9pbnQoKnRoaXMsIGxvY2F0aW9uLCByYW5nZUhhbmRsZSk7CisgICAgcmV0dXJuIG1f
Y2xpZW50LT5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCgqdGhpcywgbG9jYXRpb24pOwog
fQogCiB2b2lkIFdlYlBhZ2VPdmVybGF5OjpkYXRhRGV0ZWN0b3JzRGlkUHJlc2VudFVJKCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5
LmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oCmlu
ZGV4IGYwN2IwZjgxOGY5M2NhN2U0Y2Y3MTk1OGUyZjNhY2Q3Zjc0ZTdkMGYuLjcxYmM5MzdkOGRm
NjQzMjVmMjFhMDFjNmEzM2U5Njk4MjA5YjQzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaApAQCAtNDIsNiArNDIsOCBAQCBjbGFz
cyBXZWJQYWdlOwogCiBjbGFzcyBXZWJQYWdlT3ZlcmxheSA6IHB1YmxpYyBBUEk6Ok9iamVjdElt
cGw8QVBJOjpPYmplY3Q6OlR5cGU6OkJ1bmRsZVBhZ2VPdmVybGF5PiwgcHJpdmF0ZSBXZWJDb3Jl
OjpQYWdlT3ZlcmxheTo6Q2xpZW50IHsKIHB1YmxpYzoKKyAgICBzdHJ1Y3QgQWN0aW9uQ29udGV4
dDsKKwogICAgIGNsYXNzIENsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5D
bGllbnQoKSB7IH0KQEAgLTUzLDcgKzU1LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZv
aWQgZGlkU2Nyb2xsRnJhbWUoV2ViUGFnZU92ZXJsYXkmLCBXZWJGcmFtZSopIHsgfQogCiAjaWYg
UExBVEZPUk0oTUFDKQotICAgICAgICB2aXJ0dWFsIEREQWN0aW9uQ29udGV4dCAqYWN0aW9uQ29u
dGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpGbG9hdFBvaW50
IGxvY2F0aW9uLCBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+JiByYW5nZUhhbmRsZSkgeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgICAgICB2aXJ0dWFsIE9wdGlvbmFsPEFjdGlvbkNvbnRleHQ+IGFjdGlv
bkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KFdlYlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6RmxvYXRQ
b2ludCkgeyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRh
RGV0ZWN0b3JzRGlkUHJlc2VudFVJKFdlYlBhZ2VPdmVybGF5JikgeyB9CiAgICAgICAgIHZpcnR1
YWwgdm9pZCBkYXRhRGV0ZWN0b3JzRGlkQ2hhbmdlVUkoV2ViUGFnZU92ZXJsYXkmKSB7IH0KICAg
ICAgICAgdmlydHVhbCB2b2lkIGRhdGFEZXRlY3RvcnNEaWRIaWRlVUkoV2ViUGFnZU92ZXJsYXkm
KSB7IH0KQEAgLTc3LDcgKzc5LDExIEBAIHB1YmxpYzoKICAgICBDbGllbnQmIGNsaWVudCgpIGNv
bnN0IHsgcmV0dXJuICptX2NsaWVudDsgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIEREQWN0
aW9uQ29udGV4dCAqYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViQ29yZTo6RmxvYXRQ
b2ludCwgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiYpOworICAgIHN0cnVjdCBBY3Rpb25Db250ZXh0
IHsKKyAgICAgICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gY29udGV4dDsKKyAgICAgICAg
V2ViQ29yZTo6U2ltcGxlUmFuZ2UgcmFuZ2U7CisgICAgfTsKKyAgICBPcHRpb25hbDxBY3Rpb25D
b250ZXh0PiBhY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChXZWJDb3JlOjpGbG9hdFBvaW50
KTsKICAgICB2b2lkIGRhdGFEZXRlY3RvcnNEaWRQcmVzZW50VUkoKTsKICAgICB2b2lkIGRhdGFE
ZXRlY3RvcnNEaWRDaGFuZ2VVSSgpOwogICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZEhpZGVVSSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBh
Z2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlP
Uy5tbQppbmRleCBlNTNlNzdhNzBiYTUwZDJjNWNmZjJmNzAzMGVlNDVjNGUwZDkzYTUwLi5jOTA5
M2Q0MzM3NWI4ZDllMzIxMmEzZWIyZjYzNmZhNWFiMTZlZmZjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQpAQCAtMjE5LDcgKzIx
OSwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlRWRpdGFibGVSb290SGFzQ29udGVudEFuZFBsYWlu
VGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZQogCiAgICAgYXV0byBzdGFydEluRWRpdGFi
bGVSb290ID0gZmlyc3RQb3NpdGlvbkluTm9kZShyb290KTsKICAgICBkYXRhLmhhc0NvbnRlbnQg
PSByb290LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWlzRW5kT2ZFZGl0YWJsZU9yTm9uRWRpdGFibGVD
b250ZW50KHN0YXJ0SW5FZGl0YWJsZVJvb3QpOwotICAgIGRhdGEuaGFzUGxhaW5UZXh0ID0gZGF0
YS5oYXNDb250ZW50ICYmIGhhc0FueVBsYWluVGV4dChSYW5nZTo6Y3JlYXRlKHJvb3QtPmRvY3Vt
ZW50KCksIFZpc2libGVQb3NpdGlvbiB7IHN0YXJ0SW5FZGl0YWJsZVJvb3QgfSwgVmlzaWJsZVBv
c2l0aW9uIHsgbGFzdFBvc2l0aW9uSW5Ob2RlKHJvb3QpIH0pKTsKKyAgICBpZiAoZGF0YS5oYXND
b250ZW50KSB7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKFZpc2li
bGVQb3NpdGlvbiB7IHN0YXJ0SW5FZGl0YWJsZVJvb3QgfSwgVmlzaWJsZVBvc2l0aW9uIHsgbGFz
dFBvc2l0aW9uSW5Ob2RlKHJvb3QpIH0pKQorICAgICAgICAgICAgZGF0YS5oYXNQbGFpblRleHQg
PSBoYXNBbnlQbGFpblRleHQoKnJhbmdlKTsKKyAgICB9CiB9CiAKIGJvb2wgV2ViUGFnZTo6aXNU
cmFuc3BhcmVudE9yRnVsbHlDbGlwcGVkKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CkBA
IC0xOTU1LDE3ICsxOTU4LDEwIEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fi
b3ZlU2VsZWN0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjCiB2b2lkIFdlYlBh
Z2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KFdlYkNvcmU6OlRl
eHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgaW50MzJfdCBvZmZzZXQsIENhbGxiYWNrSUQgY2Fs
bGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0g
bV9zdG9yZWRTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5LmlzTm9uZSgpID8gZnJhbWUuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkgOiBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHk7Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFy
dCgpOwotCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTnVsbCgpKSB7Ci0gICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayh7IH0sIGNhbGxi
YWNrSUQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcG9zaXRpb24gPSB2
aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZzZXQoc2VsZWN0aW9uU3RhcnQsIG9mZnNl
dCk7Ci0gICAgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IG9mZnNldCA8IDAgPyBTZWxl
Y3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkIDogU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkOwog
CisgICAgYXV0byBzZWxlY3Rpb24gPSBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHku
aXNOb25lKCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSA6IG1fc3RvcmVkU2VsZWN0
aW9uRm9yQWNjZXNzaWJpbGl0eTsKKyAgICBhdXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9u
Rm9yUG9zaXRpb25XaXRoT2Zmc2V0KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgb2Zmc2V0KTsK
KyAgICBhdXRvIGRpcmVjdGlvbiA9IG9mZnNldCA8IDAgPyBTZWxlY3Rpb25EaXJlY3Rpb246OkJh
Y2t3YXJkIDogU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkOwogICAgIGF1dG8gcmFuZ2UgPSBl
bmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51bGFyaXR5LCBkaXJl
Y3Rpb24pOwogICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAg
IHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayh7IH0s
IGNhbGxiYWNrSUQpKTsKQEAgLTIwMDMsMzUgKzE5OTksMjQgQEAgc3RhdGljIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiByYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYKIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGlu
dDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
IHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRP
ck1haW5GcmFtZSgpOwotICAgIHVpbnQzMl90IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7Ci0gICAg
VmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2li
aWxpdHkuaXNOb25lKCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSA6IG1fc3RvcmVk
U2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9u
U3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNl
bGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0KLSAgICBpZiAoc2VsZWN0aW9u
U3RhcnQuaXNOdWxsKCkgfHwgc2VsZWN0aW9uRW5kLmlzTnVsbCgpKSB7Ci0gICAgICAgIHNlbmQo
TWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayh7IH0sIGNhbGxi
YWNrSUQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc3RhcnRQb3NpdGlv
biA9IHZpc2libGVQb3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNldChzZWxlY3Rpb25TdGFydCwg
b2Zmc2V0KTsKLSAgICBhdXRvIGVuZFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRp
b25XaXRoT2Zmc2V0KHN0YXJ0UG9zaXRpb24sIGxlbmd0aCk7Ci0gICAgYXV0byByYW5nZSA9IFJh
bmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
KTsKLQotICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKCkpIHsKKyAgICBhdXRvJiBzZWxlY3Rpb24g
PSBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkuaXNOb25lKCkgPyBmcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKSA6IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eTsK
KyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhP
ZmZzZXQoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBvZmZzZXQpOworICAgIGF1dG8gcmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRp
b25XaXRoT2Zmc2V0KHN0YXJ0UG9zaXRpb24sIHRleHQubGVuZ3RoKCkpKTsKKyAgICBpZiAoIXJh
bmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoKSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2FsbGJhY2soeyB9LCBjYWxsYmFja0lEKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZSkg
IT0gdGV4dCkgeworICAgIGlmIChwbGFpblRleHRGb3JEaXNwbGF5KCpyYW5nZSkgIT0gdGV4dCkg
ewogICAgICAgICAvLyBUcnkgdG8gc2VhcmNoIGZvciBhIHJhbmdlIHdoaWNoIGlzIHRoZSBjbG9z
ZXN0IHRvIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHNlbGVjdGlvbiByYW5nZSB0aGF0IG1hdGNo
ZXMgdGhlIHBhc3NlZCBpbiB0ZXh0LgogICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSByYW5n
ZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KHN0YXJ0UG9zaXRpb24sIHRleHQsIHNlbGVjdGlvbikp
IHsKICAgICAgICAgICAgIGlmICghd29yZFJhbmdlLT5jb2xsYXBzZWQoKSkKLSAgICAgICAgICAg
ICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgqd29yZFJhbmdlKTsKKyAgICAgICAgICAgICAg
ICByYW5nZSA9ICp3b3JkUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBWZWN0b3I8V2Vi
Q29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RT
ZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOwor
ICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRV
bmlvbkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOwogICAgIGNvbnZlcnRDb250ZW50VG9S
b290Vmlld1NlbGVjdGlvblJlY3RzKCpmcmFtZS52aWV3KCksIHNlbGVjdGlvblJlY3RzKTsKICAg
ICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2FsbGJhY2soc2Vs
ZWN0aW9uUmVjdHMsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTIyNDcsOCArMjIzMiw3IEBAIHZvaWQg
V2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbGFzdFBvc2l0aW9uID0gY3VycmVu
dFBvc2l0aW9uOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsYXN0UG9zaXRpb24uaXNOb3ROdWxs
KCkgJiYgbGFzdFBvc2l0aW9uICE9IHN0YXJ0UG9zaXRpb24pCi0gICAgICAgICAgICBjb250ZXh0
QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVu
dCgpLCBsYXN0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgY29udGV4dEJlZm9y
ZSA9IHBsYWluVGV4dEZvckNvbnRleHQobWFrZVNpbXBsZVJhbmdlKGxhc3RQb3NpdGlvbiwgc3Rh
cnRQb3NpdGlvbikpOwogICAgIH0KIAogICAgIFN0cmluZyBjb250ZXh0QWZ0ZXI7CkBAIC0yMjYx
LDggKzIyNDUsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxh
c3RQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgfQotICAgICAgICBpZiAobGFz
dFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIGxhc3RQb3NpdGlvbiAhPSBlbmRQb3NpdGlvbikKLSAg
ICAgICAgICAgIGNvbnRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQoUmFuZ2U6OmNyZWF0
ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZW5kUG9zaXRpb24sIGxhc3RQb3NpdGlvbikpOworICAgICAg
ICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShlbmRQ
b3NpdGlvbiwgbGFzdFBvc2l0aW9uKSk7CiAgICAgfQogCiAgICAgc2VuZChNZXNzYWdlczo6V2Vi
UGFnZVByb3h5OjpTZWxlY3Rpb25Db250ZXh0Q2FsbGJhY2soc2VsZWN0ZWRUZXh0LCBjb250ZXh0
QmVmb3JlLCBjb250ZXh0QWZ0ZXIsIGNhbGxiYWNrSUQpKTsKQEAgLTI0ODAsMTQgKzI0NjMsMTQg
QEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4
dCgpCiAgICAgICAgICAgICAgICAgcHJldmlvdXNQb3NpdGlvbiA9IHN0YXJ0T2ZXb3JkKHBvc2l0
aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGN1cnJlbnRQb3NpdGlvbiwgVGV4dEdyYW51
bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKTsK
ICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0g
cGxhaW5UZXh0Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwcmV2
aW91c1Bvc2l0aW9uLCBjdXJyZW50UG9zaXRpb24pKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcg
Y3VycmVudFdvcmQgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShwcmV2aW91
c1Bvc2l0aW9uLCBjdXJyZW50UG9zaXRpb24pKTsKICAgICAgICAgICAgICAgICB0b3RhbENvbnRl
eHRMZW5ndGggKz0gY3VycmVudFdvcmQubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRv
dGFsQ29udGV4dExlbmd0aCA+PSBtYXhDb250ZXh0TGVuZ3RoKQogICAgICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBwcmV2aW91c1Bvc2l0
aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbi5pc05v
dE51bGwoKSAmJiBjdXJyZW50UG9zaXRpb24gIT0gc3RhcnRQb3NpdGlvbikgewotICAgICAgICAg
ICAgICAgIGNvbnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KFJhbmdlOjpjcmVhdGUo
KmZyYW1lLmRvY3VtZW50KCksIGN1cnJlbnRQb3NpdGlvbiwgc3RhcnRQb3NpdGlvbikpOworICAg
ICAgICAgICAgICAgIGNvbnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1w
bGVSYW5nZShjdXJyZW50UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pKTsKICAgICAgICAgICAgICAg
ICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVs
YXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJk
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEJlZm9yZSA9IG1ha2VTdHJpbmcoIlxuICJf
cywgY29udGV4dEJlZm9yZSk7CiAgICAgICAgICAgICB9CkBAIC0yNDk3LDggKzI0ODAsNyBAQCBX
ZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkK
ICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UG9zaXRpb247CiAgICAgICAgICAgICBp
ZiAoIWF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGVuZFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6
OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSAmJiB3aXRoaW5U
ZXh0VW5pdE9mR3JhbnVsYXJpdHkoZW5kUG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdy
YW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKQogICAgICAgICAgICAgICAg
IG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGVuZFBv
c2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkKTsKLSAgICAgICAgICAgIGlmIChuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkp
Ci0gICAgICAgICAgICAgICAgY29udGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChSYW5n
ZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBlbmRQb3NpdGlvbiwgbmV4dFBvc2l0aW9uKSk7
CisgICAgICAgICAgICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1w
bGVSYW5nZShlbmRQb3NpdGlvbiwgbmV4dFBvc2l0aW9uKSk7CiAgICAgICAgIH0KICAgICB9CiAK
QEAgLTI2MDIsNyArMjU4NCw3IEBAIHN0YXRpYyB2b2lkIGxpbmtJbmRpY2F0b3JQb3NpdGlvbklu
Zm9ybWF0aW9uKFdlYlBhZ2UmIHBhZ2UsIEVsZW1lbnQmIGxpbmtFbGVtZW50CiAgICAgaWYgKCFy
ZXF1ZXN0LmluY2x1ZGVMaW5rSW5kaWNhdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IGxpbmtSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhsaW5rRWxlbWVudCk7CisgICAgYXV0byBsaW5r
UmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobGlua0VsZW1lbnQpOwogICAg
IGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZh
Y3RvcigpOwogICAgIGNvbnN0IGZsb2F0IG1hcmdpbkluUG9pbnRzID0gcmVxdWVzdC5saW5rSW5k
aWNhdG9yU2hvdWxkSGF2ZUxlZ2FjeU1hcmdpbnMgPyA0IDogMDsKIApAQCAtMjYxNCwxMyArMjU5
NiwxNCBAQCBzdGF0aWMgdm9pZCBsaW5rSW5kaWNhdG9yUG9zaXRpb25JbmZvcm1hdGlvbihXZWJQ
YWdlJiBwYWdlLCBFbGVtZW50JiBsaW5rRWxlbWVudAogICAgICAgICBUZXh0SW5kaWNhdG9yT3B0
aW9uOjpJbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24sCiAgICAgICAgIFRleHRJ
bmRpY2F0b3JPcHRpb246OkNvbXB1dGVFc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IKICAgICB9Owot
ICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShs
aW5rUmFuZ2UuZ2V0KCksIHRleHRJbmRpY2F0b3JPcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2Vu
dGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgRmxvYXRTaXplKG1hcmdpbkluUG9pbnRzICogZGV2aWNl
U2NhbGVGYWN0b3IsIG1hcmdpbkluUG9pbnRzICogZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBh
dXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UobGlua1Jh
bmdlLCB0ZXh0SW5kaWNhdG9yT3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5z
aXRpb246Ok5vbmUsIEZsb2F0U2l6ZShtYXJnaW5JblBvaW50cyAqIGRldmljZVNjYWxlRmFjdG9y
LCBtYXJnaW5JblBvaW50cyAqIGRldmljZVNjYWxlRmFjdG9yKSk7CiAKICAgICBpZiAodGV4dElu
ZGljYXRvcikKICAgICAgICAgaW5mby5saW5rSW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0
YSgpOwogfQogICAgIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKKwogc3RhdGljIHZvaWQg
ZGF0YURldGVjdG9yTGlua1Bvc2l0aW9uSW5mb3JtYXRpb24oRWxlbWVudCYgZWxlbWVudCwgSW50
ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mIGluZm8pCiB7CiAgICAgaWYgKCFEYXRhRGV0
ZWN0aW9uOjppc0RhdGFEZXRlY3RvckxpbmsoZWxlbWVudCkpCkBAIC0yNjM0LDEzICsyNjE3LDEz
IEBAIHN0YXRpYyB2b2lkIGRhdGFEZXRlY3RvckxpbmtQb3NpdGlvbkluZm9ybWF0aW9uKEVsZW1l
bnQmIGVsZW1lbnQsIEludGVyYWN0aW9uSW5mCiAgICAgaWYgKCFEYXRhRGV0ZWN0aW9uOjpyZXF1
aXJlc0V4dGVuZGVkQ29udGV4dChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAg
IGF1dG8gbGlua1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShlbGVtZW50LmRvY3VtZW50KCkpOwotICAg
IGxpbmtSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOwotICAgIGluZm8udGV4dEJl
Zm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGly
ZWN0aW9uQXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5zdGFydFBvc2l0aW9uKCksCisgICAgYXV0
byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhlbGVtZW50KTsKKyAgICBp
bmZvLnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJh
Y3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihyYW5nZS5zdGFydCksCiAgICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5n
dGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKTsKLSAgICBpbmZvLnRleHRBZnRlciA9
IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9u
QXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5lbmRQb3NpdGlvbigpLAorICAgIGluZm8udGV4dEFm
dGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJl
Y3Rpb25BdFdvcmRCb3VuZGFyeShjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5k
KSwKICAgICAgICAgZGF0YURldGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9u
RGlyZWN0aW9uOjpGb3J3YXJkKSk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBpbWFnZVBv
c2l0aW9uSW5mb3JtYXRpb24oV2ViUGFnZSYgcGFnZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
SW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QmIHJlcXVlc3QsIEludGVyYWN0aW9uSW5mb3Jt
YXRpb25BdFBvc2l0aW9uJiBpbmZvKQpAQCAtNDE3MywxMiArNDE1NiwxMiBAQCB2b2lkIFdlYlBh
Z2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRS
ZXF1ZXN0IHJlcXVlcwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlJhbmdlT2ZJbnRlcmVzdElu
U2VsZWN0aW9uOwogCiAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpOwotICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0ID0gbWFrZVJhbmdlKHJhbmdl
T2ZJbnRlcmVzdFN0YXJ0LCByYW5nZU9mSW50ZXJlc3RFbmQpOwotICAgIGlmIChzZWxlY3Rpb25S
YW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CisgICAgYXV0byByYW5nZU9mSW50ZXJlc3Qg
PSAqbWFrZVNpbXBsZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCByYW5nZU9mSW50ZXJlc3RF
bmQpOworICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVS
YW5nZShyYW5nZU9mSW50ZXJlc3QpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJh
bmdlKS5wdHIoKSkpIHsKICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9u
ID0gc3RkOjptYXgocmFuZ2VPZkludGVyZXN0U3RhcnQsIHNlbGVjdGlvblN0YXJ0KTsKICAgICAg
ICAgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6bWluKHJhbmdlT2ZJbnRl
cmVzdEVuZCwgc2VsZWN0aW9uRW5kKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIHJvb3RO
b2RlID0gbWFrZVJlZlB0cihyYW5nZU9mSW50ZXJlc3QtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVy
KCkpOworICAgICAgICBhdXRvIHJvb3ROb2RlID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFu
Z2VPZkludGVyZXN0KTsKICAgICAgICAgaWYgKCFyb290Tm9kZSkgewogICAgICAgICAgICAgY29t
cGxldGlvbkhhbmRsZXIoeyB9KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQxOTAsNyArNDE3
Myw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1l
bnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIH0KICAgICAgICAgYXV0byBz
Y29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdENvbnRhaW5lck5vZGUp
OwogCi0gICAgICAgIGF1dG8gY2hhcmFjdGVyUmFuZ2VPZkludGVyZXN0ID0gY2hhcmFjdGVyUmFu
Z2Uoc2NvcGUsICpyYW5nZU9mSW50ZXJlc3QpOworICAgICAgICBhdXRvIGNoYXJhY3RlclJhbmdl
T2ZJbnRlcmVzdCA9IGNoYXJhY3RlclJhbmdlKHNjb3BlLCByYW5nZU9mSW50ZXJlc3QpOwogICAg
ICAgICBhdXRvIG1pZHBvaW50TG9jYXRpb24gPSBjaGVja2VkU3VtPHVpbnQ2NF90PihjaGFyYWN0
ZXJSYW5nZU9mSW50ZXJlc3QubG9jYXRpb24sIGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVzdC5sZW5n
dGggLyAyKTsKICAgICAgICAgaWYgKG1pZHBvaW50TG9jYXRpb24uaGFzT3ZlcmZsb3dlZCgpKSB7
CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwpAQCAtNDIzOSw3ICs0MjIyLDcg
QEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVk
aXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICBjb250ZXh0LmNvbnRleHRCZWZvcmUgPSBt
YWtlU3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2Vs
ZWN0aW9uKTsKICAgICBjb250ZXh0LnNlbGVjdGVkVGV4dCA9IG1ha2VTdHJpbmcoc3RhcnRPZlJh
bmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9u
KTsKICAgICBjb250ZXh0LmNvbnRleHRBZnRlciA9IG1ha2VTdHJpbmcoZW5kT2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbiwgY29udGV4dEFmdGVyRW5kKTsKLSAgICBpZiAoY29tcG9zaXRpb25S
YW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2ZVJh
bmdlKCpjb21wb3NpdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICBpZiAoY29tcG9zaXRpb25SYW5n
ZSAmJiByYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZU9mSW50ZXJlc3QpLnB0cigp
LCBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLnB0cigpKSkgewogICAgICAgICBW
aXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRp
b24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNv
bXBvc2l0aW9uRW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdl
LT5lbmQpKTsKICAgICAgICAgY29udGV4dC5tYXJrZWRUZXh0ID0gbWFrZVN0cmluZyhjb21wb3Np
dGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7CkBAIC00MjY0LDcgKzQyNDcsNyBAQCB2b2lkIFdl
YlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRl
eHRSZXF1ZXN0IHJlcXVlcwogICAgIH07CiAKICAgICBpZiAod2FudHNSZWN0cykgewotICAgICAg
ICBpZiAoYXV0byBjb250ZXh0UmFuZ2UgPSBtYWtlUmFuZ2UoY29udGV4dEJlZm9yZVN0YXJ0LCBj
b250ZXh0QWZ0ZXJFbmQpKQorICAgICAgICBpZiAoYXV0byBjb250ZXh0UmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UoY29udGV4dEJlZm9yZVN0YXJ0LCBjb250ZXh0QWZ0ZXJFbmQpKQogICAgICAgICAg
ICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdlKCpjb250ZXh0UmFu
Z2UsIDApOwogICAgIH0gZWxzZSBpZiAod2FudHNNYXJrZWRUZXh0UmVjdHMgJiYgY29tcG9zaXRp
b25SYW5nZSkgewogICAgICAgICB1bnNpZ25lZCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gMDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdl
TWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0KaW5kZXggY2ExYzk1ZTQ4NDdiNzQ1ZWY0YjJjZDkyNWQzZTA4NmEyNzNmOWM5NC4uMmQ5NDMz
Mzk5NmM4MjhkMmUwMjIzNjgyYzZmMjkwNTQ5OTRjNjUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTg3NCwxOSArODc0
LDE4IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0
aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAgICAgIGlmICghd2ViT3ZlcmxheSkK
ICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gbWFpblJlc3Vs
dFJhbmdlOwotICAgICAgICBEREFjdGlvbkNvbnRleHQgKmFjdGlvbkNvbnRleHQgPSB3ZWJPdmVy
bGF5LT5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChsb2NhdGlvbkluQ29udGVudENvb3Jk
aW5hdGVzLCBtYWluUmVzdWx0UmFuZ2UpOwotICAgICAgICBpZiAoIWFjdGlvbkNvbnRleHQgfHwg
IW1haW5SZXN1bHRSYW5nZSkKKyAgICAgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gd2ViT3Zlcmxh
eS0+YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQobG9jYXRpb25JbkNvbnRlbnRDb29yZGlu
YXRlcyk7CisgICAgICAgIGlmICghYWN0aW9uQ29udGV4dCkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCi0gICAgICAgIGF1dG8gdmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgp
LnZpZXcoKTsKKyAgICAgICAgYXV0byB2aWV3ID0gYWN0aW9uQ29udGV4dC0+cmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpLnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3KQogICAgICAg
ICAgICAgY29udGludWU7CiAKICAgICAgICAgcGFnZU92ZXJsYXlEaWRPdmVycmlkZURhdGFEZXRl
Y3RvcnMgPSB0cnVlOwotICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRh
QWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHQ7Ci0gICAgICAgIGltbWVkaWF0ZUFjdGlvblJl
c3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZW5j
bG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVU
ZXh0UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSk7Ci0gICAgICAgIGltbWVkaWF0ZUFjdGlvblJl
c3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0
aFJhbmdlKCptYWluUmVzdWx0UmFuZ2UsIHsgVGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRp
bmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyB9LCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICAgICAgaW1tZWRpYXRlQWN0aW9u
UmVzdWx0LmRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0LT5jb250ZXh0
LmdldCgpOworICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhQm91bmRp
bmdCb3ggPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91
bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKGFjdGlvbkNvbnRleHQt
PnJhbmdlKSkpKTsKKyAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YVRl
eHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoYWN0aW9uQ29udGV4
dC0+cmFuZ2UsIHsgVGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRB
bGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyB9LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbjo6RmFkZUluKTsKICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVk
RGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXkgPSBvdmVybGF5LT5wYWdlT3ZlcmxheUlEKCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9z
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggZWNjZmI1MDFlNmVjMzIxODc2YTA2
YTQwNDJmZGI5M2MxODA2ZDhhMC4uNDdmMzBjYWQxNGJlZWEwZTc2MzliZjRiOTdhMWY1NjgwZjQy
ZjBkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQv
V2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBv
cnQvV2ViRnJhbWVJT1MubW0KQEAgLTIzOCwxMSArMjM4LDggQEAgLSAoTlNBcnJheSAqKXNlbGVj
dGlvblJlY3RzCiAKIC0gKERPTVJhbmdlICopd29yZEF0UG9pbnQ6KENHUG9pbnQpcG9pbnQKIHsK
LSAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6
cG9pbnRdOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZXb3JkKHBvcyk7Ci0g
ICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGVuZE9mV29yZChwb3MpOwotICAgIERPTVJhbmdlICp3
b3JkUmFuZ2UgPSBraXQobWFrZVJhbmdlKHN0YXJ0LCBlbmQpLmdldCgpKTsKLSAgICByZXR1cm4g
d29yZFJhbmdlOyAgIAorICAgIGF1dG8gcG9zaXRpb24gPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25G
b3JQb2ludDpwb2ludF07CisgICAgcmV0dXJuIGtpdChtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZldv
cmQocG9zaXRpb24pLCBlbmRPZldvcmQocG9zaXRpb24pKSk7CiB9CiAKIC0gKFdlYlZpc2libGVQ
b3NpdGlvbiAqKXdlYlZpc2libGVQb3NpdGlvbkZvclBvaW50OihDR1BvaW50KXBvaW50CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxl
UG9zaXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJW
aXNpYmxlUG9zaXRpb24ubW0KaW5kZXggM2IwZWI5NTRlMDlhZmQ4YzczMDVmZmFlZTEyNDFmMTdm
MjEyZDFmYy4uZGU1ZGE0NGFmZDkyOGEzZjA5OTUwYjUyZTY0YzY1NDA1ZTViYjkyNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBv
c2l0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YlZpc2libGVQb3NpdGlvbi5tbQpAQCAtNDE2LDcgKzQxNiw3IEBAIC0gKERPTVJhbmdlICopZW5j
bG9zaW5nUmFuZ2VXaXRoRGljdGF0aW9uUGhyYXNlQWx0ZXJuYXRpdmVzOihOU0FycmF5ICoqKWFs
dGVybmF0CiAgICAgZm9yIChhdXRvIG1hcmtlciA6IGRvY3VtZW50Lm1hcmtlcnMoKS5tYXJrZXJz
Rm9yKCpub2RlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZl
cykpIHsKICAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFy
a2VyLT5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpIHsKICAgICAgICAgICAgICphbHRlcm5hdGl2ZXMg
PSBjcmVhdGVOU0FycmF5KFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSkp
LmF1dG9yZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4ga2l0KFJhbmdlOjpjcmVhdGUoZG9j
dW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZz
ZXQoKSkucHRyKCkpOworICAgICAgICAgICAgcmV0dXJuIGtpdChyYW5nZSgqbm9kZSwgKm1hcmtl
cikpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBuaWw7CkBAIC00MzMsNyArNDMzLDcg
QEAgLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdSYW5nZVdpdGhDb3JyZWN0aW9uSW5kaWNhdG9yCiAg
ICAgYXV0byYgZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwogICAgIGZvciAoYXV0byBtYXJr
ZXIgOiBkb2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6
OlNwZWxsaW5nKSkgewogICAgICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9IG9mZnNl
dCAmJiBtYXJrZXItPmVuZE9mZnNldCgpID49IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBr
aXQoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgbm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpLCBu
b2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKS5wdHIoKSk7CisgICAgICAgICAgICByZXR1cm4ga2l0
KHJhbmdlKCpub2RlLCAqbWFya2VyKSk7CiAgICAgfQogICAgIHJldHVybiBuaWw7CiB9CkBAIC00
NzUsMjMgKzQ3NSwxMSBAQCAtIChET01SYW5nZSAqKWVuY2xvc2luZ1dvcmRSYW5nZQogCiArIChE
T01SYW5nZSAqKXJhbmdlRm9yRmlyc3RQb3NpdGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICopZmly
c3Qgc2Vjb25kOihXZWJWaXNpYmxlUG9zaXRpb24gKilzZWNvbmQKIHsKLSAgICBWaXNpYmxlUG9z
aXRpb24gZmlyc3RWUCA9IFtmaXJzdCBfdmlzaWJsZVBvc2l0aW9uXTsKLSAgICBWaXNpYmxlUG9z
aXRpb24gc2Vjb25kVlAgPSBbc2Vjb25kIF92aXNpYmxlUG9zaXRpb25dOwotICAgIAotICAgIGlm
IChmaXJzdFZQLmlzTnVsbCgpIHx8IHNlY29uZFZQLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgaWYgKGZpcnN0VlAgPCBz
ZWNvbmRWUCkgewotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZmlyc3RWUC5kZWVwRXF1
aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZmlyc3RWUCwgc2Vjb25kVlApOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShmaXJzdFZQLmRlZXBFcXVpdmFsZW50KCkuZGVw
cmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2Vjb25kVlAsIGZpcnN0VlApOwotICAgIH0KLSAgICAKLSAgICAKLSAg
ICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICBhdXRvIGZpcnN0VlAgPSBbZmlyc3QgX3Zp
c2libGVQb3NpdGlvbl07CisgICAgYXV0byBzZWNvbmRWUCA9IFtzZWNvbmQgX3Zpc2libGVQb3Np
dGlvbl07CisgICAgaWYgKGZpcnN0VlAgPCBzZWNvbmRWUCkKKyAgICAgICAgc3RkOjpzd2FwKGZp
cnN0VlAsIHNlY29uZFZQKTsKKyAgICByZXR1cm4ga2l0KG1ha2VTaW1wbGVSYW5nZShmaXJzdFZQ
LCBzZWNvbmRWUCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
RE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCA0ZjA2ODM0NjIyYjczMmZlNmE2Y2M2NGM3
Yzk1NWRhMjE0ZjJmNjg3Li4yOWZjMmM3NzA5YWI0ZGE5ODQxNzlmM2NiYzhmNzRlMGI4MjkxYTc3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNp
b25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lv
bnMubW0KQEAgLTIxMCwyMiArMjEwLDggQEAgLSAoQk9PTClpc1NlbGVjdGFibGVCbG9jawogCiAt
IChET01SYW5nZSAqKXJhbmdlT2ZDb250YWluaW5nUGFyYWdyYXBoCiB7Ci0gICAgRE9NUmFuZ2Ug
KnJlc3VsdCA9IG5pbDsKLSAgICAKLSAgICBOb2RlICpub2RlID0gY29yZShzZWxmKTsgICAgCi0g
ICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24obm9kZSwgMCksIFdlYkNvcmU6OkRPV05TVFJFQU0pOwotICAgIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3NpdGlv
bik7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFn
cmFwaCh2aXNpYmxlUG9zaXRpb24pOwotICAgIAotICAgIFBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0
ID0gdmlzaWJsZVBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCk7Ci0gICAgUG9zaXRpb24gcGFyYWdyYXBoRW5kID0gdmlzaWJsZVBhcmFncmFw
aEVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOyAgICAKLSAg
ICAKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQuaXNOb3ROdWxsKCkgJiYgcGFyYWdyYXBoRW5kLmlz
Tm90TnVsbCgpKSB7Ci0gICAgICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpu
b2RlLT5vd25lckRvY3VtZW50KCksIHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAg
ICAgICByZXN1bHQgPSBraXQocmFuZ2UucHRyKCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oY29yZShzZWxmKSwgMCksIFdlYkNvcmU6OkRPV05TVFJFQU0pOworICAgIHJldHVy
biBraXQobWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgocG9zaXRpb24pLCBlbmRPZlBh
cmFncmFwaChwb3NpdGlvbikpKTsKIH0KIAogLSAoQ0dGbG9hdCl0ZXh0SGVpZ2h0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAzM2EyNjA5MjY2YTll
OTU0N2VhY2QxMWI0MTdkNGYyY2IxMWJhMDIyLi5mNzk0MTk4MGY2NGEwYTQwYTUwNjU2Njc4NzFm
NWIyODY2NzZmY2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KQEAgLTkyMiw3ICs5MjIsNyBAQCAtIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24pX3Zp
c2libGVQb3NpdGlvbkZvclBvaW50OihOU1BvaW50KXBvaW50CiAKIC0gKERPTVJhbmdlICopX2No
YXJhY3RlclJhbmdlQXRQb2ludDooTlNQb2ludClwb2ludAogewotICAgIHJldHVybiBraXQoX3By
aXZhdGUtPmNvcmVGcmFtZS0+cmFuZ2VGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludChwb2ludCkp
LmdldCgpKTsKKyAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPnJhbmdlRm9yUG9p
bnQoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpKSk7CiB9CiAKIC0gKERPTUNTU1N0eWxlRGVjbGFy
YXRpb24gKilfdHlwaW5nU3R5bGUKQEAgLTE3NDEsOSArMTc0MSw4IEBAIC0gKHZvaWQpZ2V0RGlj
dGF0aW9uUmVzdWx0UmFuZ2VzOihOU0FycmF5ICoqKW91dFJhbmdlcyBhbmRNZXRhZGF0YXM6KE5T
QXJyYXkgKiopCiAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhKQogICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIHJhbmdlID0gV2ViQ29yZTo6
UmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9k
ZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgICAgICBET01SYW5nZSAqZG9tUmFuZ2Ug
PSBraXQocmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgCisgICAgICAgICAgICBET01SYW5nZSAq
ZG9tUmFuZ2UgPSBraXQocmFuZ2UoKm5vZGUsICptYXJrZXIpKTsKKwogICAgICAgICAgICAgaWYg
KG1ldGFkYXRhICE9IHByZXZpb3VzTWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICBbbWV0YWRh
dGFzIGFkZE9iamVjdDptZXRhZGF0YV07CiAgICAgICAgICAgICAgICAgW3JhbmdlcyBhZGRPYmpl
Y3Q6ZG9tUmFuZ2VdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCmluZGV4IDJkZjgxNjE5
ZTU5NWZhZjZhOWVkMmVmZTIwMTZkYmZhMTBiNWE3OWMuLjllNzZkMmI0NzVkZTEwNTA4ZWFhMzhm
MmZiZWIzZTk1NTNhNzg4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KQEAgLTI3
MCw4ICsyNzAsOCBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVy
PilfZGVmYXVsdEFuaW1hdGlvbkNvbnRyb2xsZXIKICAgICAgICAgaWYgKFdURjo6cHJvdG9jb2xJ
c0luSFRUUEZhbWlseShhYnNvbHV0ZVVSTFN0cmluZykpIHsKICAgICAgICAgICAgIF90eXBlID0g
V2ViSW1tZWRpYXRlQWN0aW9uTGlua1ByZXZpZXc7CiAKLSAgICAgICAgICAgIFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4gbGlua1JhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKCpfaGl0VGVzdFJlc3VsdC5V
UkxFbGVtZW50KCkpOwotICAgICAgICAgICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0
SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmxpbmtSYW5nZSwgeyBXZWJDb3JlOjpUZXh0SW5k
aWNhdG9yT3B0aW9uOjpVc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4
UmFuZ2VzIH0sIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpG
YWRlSW4pOworICAgICAgICAgICAgYXV0byBsaW5rUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoKl9oaXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKSk7CisgICAgICAgICAgICBh
dXRvIGluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShs
aW5rUmFuZ2UsIHsgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0
QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyB9LCBXZWJDb3JlOjpUZXh0SW5kaWNh
dG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKICAgICAgICAgICAgIGlmIChpbmRp
Y2F0b3IpCiAgICAgICAgICAgICAgICAgW193ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yOippbmRp
Y2F0b3Igd2l0aExpZmV0aW1lOldlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6
UGVybWFuZW50XTsKIApAQCAtNDcxLDEwICs0NzEsOCBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rp
b25BbmltYXRpb25Db250cm9sbGVyPilfYW5pbWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3Rl
ZAogICAgIFthY3Rpb25Db250ZXh0IHNldEFsdE1vZGU6WUVTXTsKICAgICBbYWN0aW9uQ29udGV4
dCBzZXRJbW1lZGlhdGU6WUVTXTsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbGlua1Jh
bmdlID0gcmFuZ2VPZkNvbnRlbnRzKCpfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpOwotICAg
IGlmICghbGlua1JhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIGluZGlj
YXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqbGlua1Jhbmdl
LCB7IH0sIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRl
SW4pOworICAgIGF1dG8gbGlua1JhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KCpfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpOworICAgIGF1dG8gaW5kaWNhdG9yID0gV2Vi
Q29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGxpbmtSYW5nZSwgeyB9LCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKIAogICAg
IF9jdXJyZW50QWN0aW9uQ29udGV4dCA9IFthY3Rpb25Db250ZXh0IGNvbnRleHRGb3JWaWV3Ol93
ZWJWaWV3IGFsdE1vZGU6WUVTIGludGVyYWN0aW9uU3RhcnRlZEhhbmRsZXI6XigpIHsKICAgICB9
IGludGVyYWN0aW9uQ2hhbmdlZEhhbmRsZXI6XigpIHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405660</attachid>
            <date>2020-07-30 21:06:52 -0700</date>
            <delta_ts>2020-07-30 21:57:45 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215004-20200730210651.patch</filename>
            <type>text/plain</type>
            <size>129370</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZmQ2ZDdkYTFjYjU4N2Nh
MjEwMzZkODViZDY3YjM1OTliNWQ3NjQ0ZC4uMTMyNDM3OWRkMWVkOTNmYWU2MzdiYmMwYzhlMTQx
NTg4MDMyOTdkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUmFuZ2U6OmNyZWF0
ZSBhbmQgYWxtb3N0IGFsbCB1c2VzIG9mIGxpdmUgcmFuZ2VzOiBhZnRlciB0aGlzIGp1c3QgYnVy
biBkb3duIGFib3V0IDE1MCB1c2VzIG9mIGNyZWF0ZUxpdmVSYW5nZQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1MDA0CisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKIDIwMjAtMDctMzAgIFNhbSBXZWluaWcgIDx3ZWluaWdA
YXBwbGUuY29tPgogCiAgICAgICAgIENvbnZlcnQgRGF0ZUNvbXBvbmVudHMgdG8gdXNlIFN0cmlu
Z1BhcnNpbmdCdWZmZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDQ0ODYyYWI2YTJlYmJmMjdh
OGVhZjVlYzQ2ZDcwNThkM2EzMWNhZTkuLjYzNTQ0Y2I1YWFhNWRiNmM0YzFkMzk1ODQ3OTE2NDMw
ZGQ1ZjUwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMjE1MSw3ICsyMTUxLDcgQEAgSW50
UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25S
YW5nZShjb25zdCBWaXNpYmxlUG8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICByZXR1cm4g
Ym91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAqbWFrZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5n
ZS5lbmQpKTsKKyAgICByZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAqbWFrZVNp
bXBsZVJhbmdlKHJhbmdlKSk7CiB9CiAKIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNw
cAppbmRleCBkMTU2YWVjZTg2ODVlZDM0NGM5NTVlZDI3YWQ5MDkwMzYzNjFlODgzLi5hN2RhOWIy
ZjQxYmFmNDExNzE5ZDJkMzdlMTRmY2IxMzk0YTc2ZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtMzU0LDgg
KzM1NCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlm
aWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplCiAgICAgICAgIC8vIENvbnNpZGVyIHBy
ZXZpb3VzIHRleHQgb2JqZWN0cyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQgZm9yCiAgICAgICAgIC8v
IHRoZSBjdXJyZW50IGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIGVuc3VyZSB3ZSBlbWl0IHRoZQog
ICAgICAgICAvLyByaWdodCBvZmZzZXQgKGUuZy4gbXVsdGlsaW5lIHRleHQgYXJlYXMpLgotICAg
ICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgbm9kZS0+cGFyZW50Tm9k
ZSgpLCAwLCBub2RlLCAwKTsKLSAgICAgICAgb2Zmc2V0VG9FbWl0ID0gb2Zmc2V0ICsgY2hhcmFj
dGVyQ291bnQocmFuZ2UuZ2V0KCkpOworICAgICAgICBvZmZzZXRUb0VtaXQgPSBvZmZzZXQgKyBj
aGFyYWN0ZXJDb3VudChTaW1wbGVSYW5nZSB7IHsgKm5vZGUtPnBhcmVudE5vZGUoKSwgMCB9LCB7
ICpub2RlLCAwIH0gfSk7CiAgICAgfQogCiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdyYXBw
ZXIsIGRldGFpbC5kYXRhKCksIG9mZnNldFRvRW1pdCwgdGV4dFRvRW1pdC5sZW5ndGgoKSwgdGV4
dFRvRW1pdC51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAKaW5kZXgg
OWFjODkwYmYzNTFkOWZlYzU1MDdiY2YwMjA0ZjRiNmM1M2M0ZTM1MS4uMDY4M2UwY2JhODE0ZmJl
YWVmYjNkMmM5Njk4YzQwNTM4NGMzMWIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAK
QEAgLTE1MSw4ICsxNTEsMTEgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZUh5
cGVybGlua0dldE9iamVjdChBdGtIeXBlcmxpbmsqIGxpbmssIGdpbnQgaW4KICAgICByZXR1cm4g
QVRLX09CSkVDVChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsKTsKIH0K
IAotc3RhdGljIGdpbnQgcmFuZ2VMZW5ndGhGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCYg
b2JqLCBSYW5nZSogcmFuZ2UpCitzdGF0aWMgZ2ludCByYW5nZUxlbmd0aEZvck9iamVjdChBY2Nl
c3NpYmlsaXR5T2JqZWN0JiBvYmosIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2Up
CiB7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBUaGlzIGlz
IGdvaW5nIHRvIGJlIHRoZSBhY3R1YWwgbGVuZ3RoIGluIG1vc3Qgb2YgdGhlIGNhc2VzCiAgICAg
aW50IGJhc2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRz
Q2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIApAQCAtMTk2LDggKzE5OSw3
IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRTdGFydEluZGV4KEF0
a0h5cGVybGluayogbGluaykKICAgICBpZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJldHVybiAw
OwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgZmly
c3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHBhcmVudE5vZGUpLCBmaXJzdFBvc2l0aW9uSW5PckJl
Zm9yZU5vZGUobm9kZSkpOwotICAgIHJldHVybiByYW5nZUxlbmd0aEZvck9iamVjdChjb3JlT2Jq
ZWN0LCByYW5nZS5wdHIoKSk7CisgICAgcmV0dXJuIHJhbmdlTGVuZ3RoRm9yT2JqZWN0KGNvcmVP
YmplY3QsIG1ha2VTaW1wbGVSYW5nZShmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocGFyZW50
Tm9kZSksIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSkpOwogfQogCiBzdGF0aWMg
Z2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0RW5kSW5kZXgoQXRrSHlwZXJsaW5rKiBs
aW5rKQpAQCAtMjE4LDggKzIyMCw3IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBl
cmxpbmtHZXRFbmRJbmRleChBdGtIeXBlcmxpbmsqIGxpbmspCiAgICAgaWYgKCFwYXJlbnROb2Rl
KQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5v
ZGUtPmRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShwYXJlbnROb2RlKSwg
bGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlKSk7Ci0gICAgcmV0dXJuIHJhbmdlTGVuZ3Ro
Rm9yT2JqZWN0KGNvcmVPYmplY3QsIHJhbmdlLnB0cigpKTsKKyAgICByZXR1cm4gcmFuZ2VMZW5n
dGhGb3JPYmplY3QoY29yZU9iamVjdCwgbWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShwYXJlbnROb2RlKSwgbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlKSkp
OwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0lzVmFsaWQo
QXRrSHlwZXJsaW5rKiBsaW5rKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCmlu
ZGV4IDExNGZjYTcwZDk3MjgyZDAzYTQ1MWNkMjgxMmM3YjY2MWZhY2QyYWQuLmQ3MDZiMjc1ZDFi
YjZlZDMwNDE0YmE4YTgxMDhlZjU3NjM4M2NhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJm
YWNlVGV4dC5jcHAKQEAgLTQwOSwxMyArNDA5LDEzIEBAIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlv
bk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJs
CiAKICAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGVkIHJhbmdlIGluc2lk
ZSB0aGUgb2JqZWN0LgogICAgIFBvc2l0aW9uIHBhcmVudEZpcnN0UG9zaXRpb24gPSBmaXJzdFBv
c2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7Ci0gICAgYXV0byByYW5nZUluUGFyZW50ID0gUmFu
Z2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBwYXJlbnRGaXJzdFBvc2l0aW9uLCBub2RlUmFu
Z2VTdGFydCk7CisgICAgYXV0byByYW5nZUluUGFyZW50ID0gKm1ha2VTaW1wbGVSYW5nZShwYXJl
bnRGaXJzdFBvc2l0aW9uLCBub2RlUmFuZ2VTdGFydCk7CiAKICAgICAvLyBTZXQgdmFsdWVzIGZv
ciBzdGFydCBvZmZzZXRzIGFuZCBjYWxjdWxhdGUgaW5pdGlhbCByYW5nZSBsZW5ndGguCiAgICAg
Ly8gVGhlc2UgdmFsdWVzIG1pZ2h0IGJlIGFkanVzdGVkIGxhdGVyIHRvIGNvdmVyIHNwZWNpYWwg
Y2FzZXMuCi0gICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQoY29yZU9i
amVjdCwgY2hhcmFjdGVyQ291bnQocmFuZ2VJblBhcmVudC5nZXQoKSwgVGV4dEl0ZXJhdG9yRW1p
dHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpKTsKLSAgICBhdXRvIG5vZGVS
YW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQsIG5v
ZGVSYW5nZUVuZCk7Ci0gICAgaW50IHJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobm9kZVJh
bmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBv
c2l0aW9ucyk7CisgICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQoY29y
ZU9iamVjdCwgY2hhcmFjdGVyQ291bnQocmFuZ2VJblBhcmVudCwgVGV4dEl0ZXJhdG9yRW1pdHND
aGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpKTsKKyAgICBhdXRvIG5vZGVSYW5n
ZSA9ICptYWtlU2ltcGxlUmFuZ2Uobm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7CisgICAg
aW50IHJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobm9kZVJhbmdlLCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAKICAgICAvLyBTcGVj
aWFsIGNhc2VzIHRoYXQgYXJlIG9ubHkgcmVsZXZhbnQgd2hlbiB3b3JraW5nIHdpdGggKl9FTkQg
Ym91bmRhcmllcy4KICAgICBpZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBTVFJFQU0pIHsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFj
Y2Vzc2libGVVdGlsLmNwcAppbmRleCAyYmRhZGJhMjRkZTMxOGY3ZDU5MTEyNDhkNmE5NWEzYzVh
MjY4OGM2Li44ZDYyMWJlNzgxZTk5MGMxZGM0MDYwZmVkZmIzOTJiNzE2NTc1NGE5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRp
bC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNz
aWJsZVV0aWwuY3BwCkBAIC0yNDYsMTAgKzI0NiwxMCBAQCBBWENvcmVPYmplY3QqIG9iamVjdEZv
Y3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9iamVj
dAogICAgIGlmIChzdGFydFBvc2l0aW9uID09IGVuZFBvc2l0aW9uKQogICAgICAgICBvZmZzZXQg
PSAwOwogICAgIGVsc2UgaWYgKCFpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0aW9uKSkgewotICAgICAg
ICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0
aW9uLnByZXZpb3VzKCkpOworICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0
YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLnByZXZpb3VzKCkpOwogICAgICAgICBvZmZzZXQgPSAo
cmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVy
c0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKSA6IDApICsgMTsKICAgICB9IGVsc2UgewotICAg
ICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBv
c2l0aW9uKTsKKyAgICAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHJhbmdlID8gY2hhcmFjdGVyQ291
bnQoKnJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBv
c2l0aW9ucykgOiAwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5tbQppbmRleCA5YWFlY2FhNjI5MWVlMzNhYTk5YmZmMzI0MjdiMWJhNWFhZmI2ZjM1Li4wZmNl
MGYyMDY0YmI0Yjg2OTdlYTdmMjhkNDNiMzU4NTg5ZGUwMTgxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklP
Uy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMTQ4LDcgKzE0OCw3IEBAIEBpbnRlcmZhY2UgV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgOiBOU09iamVjdAogCiArIChXZWJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciAqKXRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOihWaXNpYmxlUG9zaXRp
b24mKXZpc2libGVQb3MgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlOwogKyAoV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDooQ2hhcmFj
dGVyT2Zmc2V0JiljaGFyYWN0ZXJPZmZzZXQgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlOwot
KyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtlckZvclJh
bmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+KXJhbmdlIGlzU3RhcnQ6KEJPT0wpaXNTdGFydCBjYWNo
ZTooQVhPYmplY3RDYWNoZSopY2FjaGU7CisrIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAq
KXN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiYpcmFuZ2UgaXNTdGFydDooQk9PTClpc1N0YXJ0IGNhY2hlOihBWE9iamVjdENhY2hlKiljYWNo
ZTsKIAogQGVuZAogCkBAIC0yMDgsNyArMjA4LDcgQEAgKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgKil0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0JikK
ICAgICByZXR1cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRXaXRo
VGV4dE1hcmtlcjomdGV4dE1hcmtlckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKIH0K
IAotKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtlckZv
clJhbmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+KXJhbmdlIGlzU3RhcnQ6KEJPT0wpaXNTdGFydCBj
YWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKKysgKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
ICopc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTooY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+JilyYW5nZSBpc1N0YXJ0OihCT09MKWlzU3RhcnQgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNh
Y2hlCiB7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTIyNzMsMTcg
KzIyNzMsOCBAQCAtIChOU0FycmF5ICopYXJyYXlPZlRleHRGb3JUZXh0TWFya2VyczooTlNBcnJh
eSAqKW1hcmtlcnMgYXR0cmlidXRlZDooQk9PTClhdHRyaQogICAgIFdlYkFjY2Vzc2liaWxpdHlU
ZXh0TWFya2VyKiBlbmRNYXJrZXIgPSBbbWFya2VycyBvYmplY3RBdEluZGV4OjFdOwogICAgIGlm
ICghW3N0YXJ0TWFya2VyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2Vy
IGNsYXNzXV0gfHwgIVtlbmRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICAvLyBleHRy
YWN0IHRoZSBzdGFydCBhbmQgZW5kIFZpc2libGVQb3NpdGlvbgotICAgIFZpc2libGVQb3NpdGlv
biBzdGFydFZpc2libGVQb3NpdGlvbiA9IFtzdGFydE1hcmtlciB2aXNpYmxlUG9zaXRpb25dOwot
ICAgIGlmIChzdGFydFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5p
bDsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uID0gW2VuZE1h
cmtlciB2aXNpYmxlUG9zaXRpb25dOwotICAgIGlmIChlbmRWaXNpYmxlUG9zaXRpb24uaXNOdWxs
KCkpCi0gICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBhdXRvIHJhbmdlID0gbWFrZVJhbmdlKHN0
YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pOworICAgIGF1dG8gcmFuZ2Ug
PSBtYWtlU2ltcGxlUmFuZ2UoW3N0YXJ0TWFya2VyIHZpc2libGVQb3NpdGlvbl0sIFtlbmRNYXJr
ZXIgdmlzaWJsZVBvc2l0aW9uXSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5p
bDsKIApAQCAtMjM2NiwxMCArMjM1NywxMCBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1Jhbmdl
OihSYW5nZSAqKWxpdmVSYW5nZQogICAgIHJldHVybiBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3Vu
dCh7IHsgKnNjb3BlLCAwIH0sIHJhbmdlLnN0YXJ0IH0pLCBjaGFyYWN0ZXJDb3VudChyYW5nZSkp
OwogfQogCi0tIChSZWZQdHI8UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5n
ZQorLSAoT3B0aW9uYWw8U2ltcGxlUmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSly
YW5nZQogewogICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIG91
ciBjcml0aWNhbCBhc3N1bXB0aW9uIGlzIHRoYXQgd2UgYXJlIG9ubHkgY2FsbGVkIGJ5IGlucHV0
IG1ldGhvZHMgdGhhdAogICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2ZW4gYXJlYSBjb250YWlu
aW5nIHRoZSBzZWxlY3Rpb24KQEAgLTIzODEsOCArMjM3Miw5IEBAIC0gKFJlZlB0cjxSYW5nZT4p
X2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlCiAgICAgYXV0byBzZWxlY3Rpb25Sb290
ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKICAgICBhdXRvIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJv
b3QgOiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFzY29wZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hh
cmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpzY29wZSksIHJhbmdl
KSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzb2x2ZUNo
YXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqc2NvcGUpLCByYW5n
ZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHRha2UgYSB0ZXh0IG1hcmtl
ciByZXByZXNlbnRpbmcgYSBWaXNpYmxlUG9zaXRpb24gYW5kIGNvbnZlcnQgaXQKQEAgLTI0MDgs
NyArMjQwMCw3IEBAIC0gKE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2UKIHsKICAgICBpZiAoIVtz
ZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwotICAg
IHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOmNyZWF0ZUxpdmVSYW5nZShzZWxmLmF4
QmFja2luZ09iamVjdC0+ZWxlbWVudFJhbmdlKCkpLmdldCgpXTsKKyAgICByZXR1cm4gW3NlbGYg
dGV4dE1hcmtlcnNGb3JSYW5nZTpzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJhbmdlKCld
OwogfQogCiAvLyBBIG1ldGhvZCB0byBnZXQgdGhlIG5vcm1hbGl6ZWQgdGV4dCBjdXJzb3IgcmFu
Z2Ugb2YgYW4gZWxlbWVudC4gVXNlZCBpbiBEdW1wUmVuZGVyVHJlZS4KQEAgLTI0NzgsNyArMjQ3
MCw3IEBAIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlckZvclBvc2l0
aW9uOihOU0ludGVnZXIpcG9zaXRpb24KICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJp
bGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpOU01ha2VSYW5nZShwb3NpdGlvbiwgMCldOwor
ICAgIGF1dG8gcmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6TlNNYWtlUmFuZ2UocG9z
aXRpb24sIDApXTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0y
Njg3LDcgKzI2NzksNyBAQCAtIChOU0FycmF5ICopbWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2U6
KE5TQXJyYXkgKilzdGFydFRleHRNYXJrZXJSYW5nZSBmb3J3YXJkOgogICAgICAgICByZXR1cm4g
bmlsOwogICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5t
aXNzcGVsbGluZ1JhbmdlKCpzdGFydFJhbmdlLAogICAgICAgICBmb3J3YXJkID8gQWNjZXNzaWJp
bGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCA6IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246
OlByZXZpb3VzKTsKLSAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlcnNGb3JSYW5nZTpjcmVhdGVM
aXZlUmFuZ2UobWlzc3BlbGxpbmdSYW5nZSkuZ2V0KCldOworICAgIHJldHVybiBbc2VsZiB0ZXh0
TWFya2Vyc0ZvclJhbmdlOm1pc3NwZWxsaW5nUmFuZ2VdOwogfQogCiAtIChXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciAqKW5leHRNYXJrZXJGb3JNYXJrZXI6KFdlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyICopbWFya2VyCkBAIC0yNzI5LDE3ICsyNzIxLDE3IEBAIC0gKENHUmVjdClmcmFtZUZv
clRleHRNYXJrZXJzOihOU0FycmF5ICopYXJyYXkKICAgICByZXR1cm4gW3NlbGYgY29udmVydFJl
Y3RUb1NwYWNlOnJlY3Qgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVu
XTsKIH0KIAotLSAoUmVmUHRyPFJhbmdlPilyYW5nZUZyb21NYXJrZXJzOihOU0FycmF5ICopbWFy
a2VycyB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CistIChPcHRpb25hbDxTaW1wbGVSYW5nZT4p
cmFuZ2VGcm9tTWFya2VyczooTlNBcnJheSAqKW1hcmtlcnMgd2l0aFRleHQ6KE5TU3RyaW5nICop
dGV4dAogewotICAgIFJlZlB0cjxSYW5nZT4gb3JpZ2luYWxSYW5nZSA9IFtzZWxmIHJhbmdlRm9y
VGV4dE1hcmtlcnM6bWFya2Vyc107CisgICAgYXV0byBvcmlnaW5hbFJhbmdlID0gW3NlbGYgcmFu
Z2VGb3JUZXh0TWFya2VyczptYXJrZXJzXTsKICAgICBpZiAoIW9yaWdpbmFsUmFuZ2UpCi0gICAg
ICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAg
QVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNo
ZSgpOwogICAgIGlmICghY2FjaGUpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVy
biBXVEY6Om51bGxvcHQ7CiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShjYWNoZS0+
cmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5nZSgqb3JpZ2luYWxSYW5nZSwgdGV4dCkpOworICAgIHJl
dHVybiBjYWNoZS0+cmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5nZSgqb3JpZ2luYWxSYW5nZSwgdGV4
dCk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIGluIHRoZSBsYXlvdXQgdGVzdC4KQEAgLTI3
NTgsNyArMjc1MCw3IEBAIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHNGcm9tTWFya2VyczooTlNBcnJh
eSAqKW1hcmtlcnMgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogICAgICAgICByZXR1cm4gbmls
OwogCiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHJlY3RzOwotICAgIHJhbmdl
LT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHJlY3RzKTsK
KyAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0
VW5pb25JbnRlcmlvckxpbmVzKHJlY3RzKTsKICAgICBpZiAocmVjdHMuaXNFbXB0eSgpKQogICAg
ICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBbJl0gKGF1
dG8mIHJlY3QpIHsKQEAgLTI4MDQsMjQgKzI3OTYsMjQgQEAgLSAoV2ViQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgKilwcmV2aW91c01hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zm
c2UKICAgICByZXR1cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRX
aXRoVGV4dE1hcmtlcjomdGV4dE1hcmtlckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsK
IH0KIAotLSAoUmVmUHRyPFJhbmdlPilyYW5nZUZvclRleHRNYXJrZXJzOihOU0FycmF5ICopdGV4
dE1hcmtlcnMKKy0gKE9wdGlvbmFsPFNpbXBsZVJhbmdlPilyYW5nZUZvclRleHRNYXJrZXJzOihO
U0FycmF5ICopdGV4dE1hcmtlcnMKIHsKICAgICBpZiAoW3RleHRNYXJrZXJzIGNvdW50XSAhPSAy
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
ICAgICAKICAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqc3RhcnRNYXJrZXIgPSBbdGV4
dE1hcmtlcnMgb2JqZWN0QXRJbmRleDowXTsKICAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtl
ciAqZW5kTWFya2VyID0gW3RleHRNYXJrZXJzIG9iamVjdEF0SW5kZXg6MV07CiAgICAgCiAgICAg
aWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJr
ZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5
VGV4dE1hcmtlciBjbGFzc11dKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0
dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYu
YXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAg
ICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0ID0gW3N0YXJ0TWFya2VyIGNo
YXJhY3Rlck9mZnNldF07CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldCA9
IFtlbmRNYXJrZXIgY2hhcmFjdGVyT2Zmc2V0XTsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdl
KGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFyYWN0ZXJP
ZmZzZXQsIGVuZENoYXJhY3Rlck9mZnNldCkpOworICAgIHJldHVybiBjYWNoZS0+cmFuZ2VGb3JV
bm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0LCBlbmRDaGFyYWN0
ZXJPZmZzZXQpOwogfQogCiAtIChOU0ludGVnZXIpbGVuZ3RoRm9yVGV4dE1hcmtlcnM6KE5TQXJy
YXkgKil0ZXh0TWFya2VycwpAQCAtMjg0Miw3ICsyODM0LDcgQEAgLSAoV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJzOihOU0FycmF5
ICopdGUKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5n
ZUZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJzXTsKKyAgICBhdXRvIHJhbmdlID0gW3NlbGYgcmFu
Z2VGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc107CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAg
cmV0dXJuIG5pbDsKICAgICAKQEAgLTI4NTQsMTEgKzI4NDYsMTAgQEAgLSAoTlNBcnJheSAqKXRl
eHRNYXJrZXJSYW5nZUZvck1hcmtlcnM6KE5TQXJyYXkgKil0ZXh0TWFya2VycwogICAgIGlmICgh
W3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAg
ICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlcnM6
dGV4dE1hcmtlcnNdOwotICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOnJhbmdl
XTsKKyAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlcnNGb3JSYW5nZTpbc2VsZiByYW5nZUZvclRl
eHRNYXJrZXJzOnRleHRNYXJrZXJzXV07CiB9CiAKLS0gKE5TQXJyYXkgKil0ZXh0TWFya2Vyc0Zv
clJhbmdlOihSZWZQdHI8UmFuZ2U+KXJhbmdlCistIChOU0FycmF5ICopdGV4dE1hcmtlcnNGb3JS
YW5nZTooY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JilyYW5nZQogewogICAgIGlmICghcmFu
Z2UpCiAgICAgICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tCmluZGV4IGMzNjFjNDAxMWY3NDdlMDk0NDY0ODY0ZjNmY2E0MTc4Mjc4ZjVkYjAuLmFm
ODQ2YzE3ZjY2NjllYWE3OTg1NzIxYWEwMjIzZDRkZGNmZjFjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVy
TWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2li
aWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC02OTMsNyArNjkzLDcgQEAgc3RhdGljIEFjY2Vz
c2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1l
dGVyaXplZEF0dHIKIAogICAgIGlmIChbbWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xhc3M6W05TQXJy
YXkgY2xhc3NdXSkgewogICAgICAgICBvcGVyYXRpb24udGV4dFJhbmdlcyA9IG1ha2VWZWN0b3Io
bWFya2VyUmFuZ2VzLCBbd3JhcHBlcl0gKGlkIG1hcmtlclJhbmdlKSB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbWFrZVNpbXBsZVJhbmdlKFt3cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOm1h
cmtlclJhbmdlXSk7CisgICAgICAgICAgICByZXR1cm4gW3dyYXBwZXIgcmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2U6bWFya2VyUmFuZ2VdOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTcxNCw5ICs3
MTQsOSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRl
eHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogICAgIHJldHVybiBvcGVyYXRpb247CiB9
CiAKLXN0YXRpYyBzdGQ6OnBhaXI8UmVmUHRyPFJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERp
cmVjdGlvbj4gYWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0
ZXJpemVkQXR0cmlidXRlKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICpvYmplY3QsIGNv
bnN0IE5TRGljdGlvbmFyeSAqcGFyYW1zKQorc3RhdGljIHN0ZDo6cGFpcjxPcHRpb25hbDxTaW1w
bGVSYW5nZT4sIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24+IGFjY2Vzc2liaWxpdHlNaXNz
cGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShXZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlciAqb2JqZWN0LCBjb25zdCBOU0RpY3Rpb25hcnkgKnBhcmFtcykK
IHsKLSAgICBzdGQ6OnBhaXI8UmVmUHRyPFJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVj
dGlvbj4gY3JpdGVyaWE7CisgICAgc3RkOjpwYWlyPE9wdGlvbmFsPFNpbXBsZVJhbmdlPiwgQWNj
ZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gY3JpdGVyaWE7CiAKICAgICBjcml0ZXJpYS5maXJz
dCA9IFtvYmplY3QgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6W3BhcmFtcyBvYmplY3RGb3JLZXk6
QCJBWFN0YXJ0VGV4dE1hcmtlclJhbmdlIl1dOwogCkBAIC03NzcsMjYgKzc3NywyNiBAQCBzdGF0
aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIo
QVhPYmplY3RDYWNoZSogY2FjaAogICAgIHJldHVybiBjYWNoZS0+YWNjZXNzaWJpbGl0eU9iamVj
dEZvclRleHRNYXJrZXJEYXRhKHRleHRNYXJrZXJEYXRhKTsKIH0KIAotLSAoaWQpdGV4dE1hcmtl
clJhbmdlRnJvbVJhbmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+KXJhbmdlCistIChpZCl0ZXh0TWFy
a2VyUmFuZ2VGcm9tUmFuZ2U6KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpcmFuZ2UKIHsK
ICAgICBpZiAoYXV0byogYmFja2luZ09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAg
ICAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2Jq
ZWN0Q2FjaGUoKSwgcmFuZ2UpOwogICAgIHJldHVybiBuaWw7CiB9CiAKLXN0YXRpYyBpZCB0ZXh0
TWFya2VyUmFuZ2VGcm9tUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFJlZlB0cjxS
YW5nZT4gcmFuZ2UpCitzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKEFYT2JqZWN0
Q2FjaGUqIGNhY2hlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAg
IGlkIHN0YXJ0VGV4dE1hcmtlciA9IHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoY2FjaGUs
IHJhbmdlLCB0cnVlKTsKICAgICBpZCBlbmRUZXh0TWFya2VyID0gc3RhcnRPckVuZFRleHRtYXJr
ZXJGb3JSYW5nZShjYWNoZSwgcmFuZ2UsIGZhbHNlKTsKICAgICByZXR1cm4gdGV4dE1hcmtlclJh
bmdlRnJvbU1hcmtlcnMoc3RhcnRUZXh0TWFya2VyLCBlbmRUZXh0TWFya2VyKTsKIH0KIAotLSAo
aWQpc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTooY29uc3QgUmVmUHRyPFJhbmdlPilyYW5n
ZSBpc1N0YXJ0OihCT09MKWlzU3RhcnQKKy0gKGlkKXN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFu
Z2U6KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpcmFuZ2UgaXNTdGFydDooQk9PTClpc1N0
YXJ0CiB7CiAgICAgcmV0dXJuIHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2Uoc2VsZi5heEJh
Y2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UsIGlzU3RhcnQpOwogfQogCi1zdGF0
aWMgaWQgc3RhcnRPckVuZFRleHRtYXJrZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwg
UmVmUHRyPFJhbmdlPiByYW5nZSwgYm9vbCBpc1N0YXJ0KQorc3RhdGljIGlkIHN0YXJ0T3JFbmRU
ZXh0bWFya2VyRm9yUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiYgcmFuZ2UsIGJvb2wgaXNTdGFydCkKIHsKICAgICBpZiAoIWNhY2hlKQogICAg
ICAgICByZXR1cm4gbmlsOwpAQCAtODY0LDI0ICs4NjQsMjQgQEAgc3RhdGljIGlkIHRleHRNYXJr
ZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IENoYXJhY3Rl
ck9mZnMKICAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtD
RkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCopJnRleHRNYXJrZXJEYXRhLCBzaXplb2Yo
dGV4dE1hcmtlckRhdGEpKSk7CiB9CiAKLS0gKFJlZlB0cjxSYW5nZT4pcmFuZ2VGb3JUZXh0TWFy
a2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQorLSAoT3B0aW9uYWw8U2ltcGxlUmFuZ2U+KXJh
bmdlRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZ2UKIHsKICAgICBpZiAoIXRl
eHRNYXJrZXJSYW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBX
VEY6Om51bGxvcHQ7CiAgICAgCiAgICAgaWQgc3RhcnRUZXh0TWFya2VyID0gQVhUZXh0TWFya2Vy
UmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFuZ2UpOwogICAgIGlkIGVuZFRleHRNYXJrZXIgPSBBWFRl
eHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFuZ2UpOwogICAgIAogICAgIGlmICghc3RhcnRU
ZXh0TWFya2VyIHx8ICFlbmRUZXh0TWFya2VyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAg
ICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBBWE9iamVjdENhY2hlKiBjYWNo
ZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNo
ZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CiAgICAgCiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYg
Y2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjpzdGFydFRleHRNYXJrZXJdOwogICAgIENoYXJh
Y3Rlck9mZnNldCBlbmRDaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JU
ZXh0TWFya2VyOmVuZFRleHRNYXJrZXJdOwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoY2Fj
aGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydENoYXJhY3Rlck9mZnNl
dCwgZW5kQ2hhcmFjdGVyT2Zmc2V0KSk7CisgICAgcmV0dXJuIGNhY2hlLT5yYW5nZUZvclVub3Jk
ZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFyYWN0ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9m
ZnNldCk7CiB9CiAKIHN0YXRpYyBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4
dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgQ0ZUeXBlUmVmIHRleHRNYXJrZXIpCkBAIC0x
MjQyLDcgKzEyNDIsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilkb0FYQXR0cmlidXRlZFN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJhbgogICAgICAgICBpZiAoIWJh
Y2tpbmdPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIFJlZlB0cjxS
YW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0
TWFya2VyUmFuZ2VdOworICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIGF1dG8gYXR0clN0cmluZyA9IGFkb3B0
TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7CkBAIC0zNjE4LDcg
KzM2MTgsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIC0gKE5TQXR0
cmlidXRlZFN0cmluZyAqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFu
Z2UKIHsKICAgICBhdXRvIHdlYlJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJhbmdlRm9y
UGxhaW5UZXh0UmFuZ2UocmFuZ2UpOwotICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0
cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3Jl
YXRlTGl2ZVJhbmdlKHdlYlJhbmdlKV0gc3BlbGxDaGVjazpZRVNdOworICAgIHJldHVybiBbc2Vs
ZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2Vy
UmFuZ2VGcm9tUmFuZ2U6d2ViUmFuZ2VdIHNwZWxsQ2hlY2s6WUVTXTsKIH0KIAogLSAoTlNSYW5n
ZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCkBAIC0zNzg3LDcgKzM3ODcsNyBAQCAt
IChpZCl0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIgZm9yVW5pdDoo
VGV4dFVuaXQpdGV4dFVuaXQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAg
ICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShjYWNoZSwgY3JlYXRlTGl2ZVJhbmdl
KHJhbmdlKSk7CisgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoY2FjaGUs
IHJhbmdlKTsKICAgICB9KTsKIH0KIApAQCAtMzk1NCw3ICszOTU0LDcgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBpZiAocmFuZ2VzLmlzRW1wdHko
KSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIGNyZWF0
ZU5TQXJyYXkocmFuZ2VzLCBbJl0gKGF1dG8mIHJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpjcmVhdGVMaXZlUmFu
Z2UocmFuZ2UpXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1h
cmtlclJhbmdlRnJvbVJhbmdlOnJhbmdlXTsKICAgICAgICAgICAgIH0pLmF1dG9yZWxlYXNlKCk7
CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQwMzAsNyArNDAzMCw3IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKICAg
ICAgICAgICAgIGlmIChhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5taXNz
cGVsbGluZ1JhbmdlKCpjcml0ZXJpYS5maXJzdCwgY3JpdGVyaWEuc2Vjb25kKSkKLSAgICAgICAg
ICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOmNy
ZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSldOworICAgICAgICAgICAgICAgIHJldHVy
biBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Km1pc3NwZWxsaW5nUmFu
Z2VdOwogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDA3
MCw3ICs0MDcwLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAg
ICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJ
RWxlbWVudCJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9y
ZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdWlFbGVtZW50LCBwcm90ZWN0ZWRTZWxm
ID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAgICAgIHJl
dHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJh
bmdlKHVpRWxlbWVudC5nZXQoKS0+ZWxlbWVudFJhbmdlKCkpXTsKKyAgICAgICAgICAgIHJldHVy
biBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6dWlFbGVtZW50LmdldCgp
LT5lbGVtZW50UmFuZ2UoKV07CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNDIyMiw3ICs0MjIy
LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBD
aGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0MSA9IFtwcm90ZWN0ZWRTZWxmIGNoYXJhY3Rl
ck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcjFdOwogICAgICAgICAgICAgQ2hhcmFjdGVy
T2Zmc2V0IGNoYXJhY3Rlck9mZnNldDIgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRG
b3JUZXh0TWFya2VyOnRleHRNYXJrZXIyXTsKICAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNo
ZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldDEsIGNo
YXJhY3Rlck9mZnNldDIpOwotICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZTpjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpXTsKKyAgICAgICAgICAg
IHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdOwog
ICAgICAgICB9KTsKICAgICB9CiAKQEAgLTQzMDQsNyArNDMwNCw3IEBAIEFMTE9XX0RFUFJFQ0FU
RURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQog
ICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJh
bmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJh
bmdlXTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRl
eHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwogICAgICAgICAgICAgaWYgKCFyYW5nZSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHJldHVybiBBWE9iamVjdENh
Y2hlOjpsZW5ndGhGb3JSYW5nZShTaW1wbGVSYW5nZSB7ICpyYW5nZSB9KTsKQEAgLTQzMTcsMTQg
KzQzMTcsMTQgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgLy8g
VXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIChzbyBmYXIpLgogICAgIGlmIChbYXR0cmlidXRl
IGlzRXF1YWxUb1N0cmluZzpAIkFYU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIl0p
IHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFs
dWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyUmFuZ2UsIHByb3RlY3RlZFNlbGYgPSBy
ZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV07CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYg
cmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgICAgIHJl
dHVybiBbcHJvdGVjdGVkU2VsZiBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlz
U3RhcnQ6WUVTXTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNF
cXVhbFRvU3RyaW5nOkAiQVhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKICAg
ICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9t
TWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyUmFuZ2UsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5Q
dHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJr
ZXJSYW5nZV07CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VG
b3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgICAgIHJldHVybiBb
cHJvdGVjdGVkU2VsZiBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6
Tk9dOwogICAgICAgICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDYwZGU2MzBlYjBiYjYwZTdjZGNmODdiZjJlYzg4
ZWQ4NWQwYmRhMzYuLjY4Y2M3NjVmMDMwNjdlMmE3OGY2ZGE1MTRjZWM3YmZkMmNkNjI2NWIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBA
IC0xMDUsOCArMTA1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZpbHRlck1h
cmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBGdW4KIHN0YXRpYyB2b2lkIHVw
ZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2Vy
LCBOb2RlJiBub2RlKQogewogICAgIEFTU0VSVCghbm9kZS5kb2N1bWVudCgpLnZpZXcoKSB8fCAh
bm9kZS5kb2N1bWVudCgpLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgYXV0byByYW5nZSA9
IFNpbXBsZVJhbmdlIHsgeyBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSB9LCB7IG5vZGUsIG1h
cmtlci5lbmRPZmZzZXQoKSB9IH07Ci0gICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29sdXRlUmVj
dHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlLCB0
cnVlKSkpOworICAgIG1hcmtlci5zZXRVbmNsaXBwZWRBYnNvbHV0ZVJlY3RzKGJvdW5kaW5nQm94
ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZShub2RlLCBtYXJrZXIpLCB0
cnVlKSkpOwogfQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJl
Y3RzRm9yQWxsTWFya2VycygpCkBAIC02NjMsNiArNjYyLDEzIEBAIHZvaWQgcmVtb3ZlTWFya2Vy
cyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFy
a2VyVHlwCiAgICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5y
ZW1vdmVNYXJrZXJzKHJhbmdlLCB0eXBlcywgcG9saWN5KTsKIH0KIAorU2ltcGxlUmFuZ2UgcmFu
Z2UoTm9kZSYgbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKK3sKKyAgICB1bnNp
Z25lZCBzdGFydE9mZnNldCA9IG1hcmtlci5zdGFydE9mZnNldCgpOworICAgIHVuc2lnbmVkIGVu
ZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQoKTsKKyAgICByZXR1cm4geyB7IG5vZGUsIHN0YXJ0
T2Zmc2V0IH0sIHsgbm9kZSwgZW5kT2Zmc2V0IH0gfTsKK30KKwogI2lmIEVOQUJMRShUUkVFX0RF
QlVHR0lORykKIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkg
Y29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRy
b2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaApp
bmRleCBhYWVmZjA1YjBkODRmOWUyOTdkODgzMGVmMDJkMTg1NWYxOGFhNTAzLi4wYjQ0ZTJjMmVk
M2JlZTUzNDNlYjc2NDg3ZGUyYjVmNjIwNDBjZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC0xMTUsNiArMTE1LDggQEAgdm9pZCBhZGRN
YXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29u
c3QgRG9jdW1lbnRNYXIKIHZvaWQgYWRkTWFya2VyKFRleHQmLCB1bnNpZ25lZCBzdGFydE9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRN
YXJrZXI6OkRhdGEmJiA9IHsgfSk7CiB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFu
Z2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJr
ZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgPSBSZW1v
dmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcjo6Tm8pOwogCitXRUJDT1JFX0VYUE9SVCBTaW1w
bGVSYW5nZSByYW5nZShOb2RlJiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKKwogaW5saW5lIGJv
b2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKCkgY29uc3QKIHsKICAgICBB
U1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlw
ZXMuY29udGFpbnNBbnkoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Q
b3NpdGlvbi5jcHAKaW5kZXggOWUyZTJkZWIxODI4NGM3OWMxMWEzNDRlMDQ3N2M2NjRkZjE3N2Qy
ZC4uNGIyNjQ5OTBmOGMyMWNiZDkzZmZmYzE4MTc3Y2UxM2FmNTQwYTI2MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UG9zaXRpb24uY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQb3NpdGlvbkl0ZXJhdG9yLmgiCi0j
aW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJl
bmRlckZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5j
cHAKaW5kZXggOWI3YTFhNjIxMjE5NWEyZTQ3NDhjYjI5NzE5NDRjMTY2MzI4MDA5Ni4uMjY2MTg1
ZWJkNzk1MmRjMjJhNWNhN2U0NDI1YmU5NTUxMmQ0ZjFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBA
IC04OCw0MiArODgsNiBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVy
RG9jdW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkp
OwogfQogCi1pbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBOb2Rl
KiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2Zmc2V0LCBOb2RlKiBlbmRDb250YWluZXIsIGlu
dCBlbmRPZmZzZXQpCi0gICAgOiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKLSAgICAs
IG1fc3RhcnQoJm93bmVyRG9jdW1lbnQpCi0gICAgLCBtX2VuZCgmb3duZXJEb2N1bWVudCkKLXsK
LSNpZm5kZWYgTkRFQlVHCi0gICAgcmFuZ2VDb3VudGVyLmluY3JlbWVudCgpOwotI2VuZGlmCi0K
LSAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKLQotICAgIC8vIFNpbXBs
eSBzZXR0aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBk
byBhbnkgb2YgdGhlIGNoZWNraW5nCi0gICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRv
LCBzbyB3ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KLSAgICBpZiAoc3RhcnRDb250YWluZXIpCi0g
ICAgICAgIHNldFN0YXJ0KCpzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpOwotICAgIGlmIChl
bmRDb250YWluZXIpCi0gICAgICAgIHNldEVuZCgqZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpOwot
fQotCi1SZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQsIFJl
ZlB0cjxOb2RlPiYmIHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFJlZlB0cjxOb2Rl
PiYmIGVuZENvbnRhaW5lciwgaW50IGVuZE9mZnNldCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSYW5nZShvd25lckRvY3VtZW50LCBzdGFydENvbnRhaW5lci5nZXQoKSwgc3RhcnRPZmZz
ZXQsIGVuZENvbnRhaW5lci5nZXQoKSwgZW5kT2Zmc2V0KSk7Ci19Ci0KLVJlZjxSYW5nZT4gUmFu
Z2U6OmNyZWF0ZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwgY29uc3QgUG9zaXRpb24mIHN0YXJ0
LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJhbmdl
KG93bmVyRG9jdW1lbnQsIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQuY29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpLCBlbmQuY29udGFpbmVyTm9kZSgpLCBlbmQuY29tcHV0ZU9mZnNl
dEluQ29udGFpbmVyTm9kZSgpKSk7Ci19Ci0KLVJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1
bWVudCYgb3duZXJEb2N1bWVudCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlU3RhcnQs
IGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZUVuZCkKLXsKLSAgICBQb3NpdGlvbiBzdGFy
dCA9IHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpOwotICAgIFBvc2l0aW9uIGVuZCA9IHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSYW5nZShv
d25lckRvY3VtZW50LCBzdGFydC5hbmNob3JOb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5n
T2Zmc2V0KCksIGVuZC5hbmNob3JOb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgp
KSk7Ci19Ci0KIFJhbmdlOjp+UmFuZ2UoKQogewogICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNo
UmFuZ2UoKnRoaXMpOwpAQCAtMTk1LDIyICsxNTksNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5n
ZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICByZXR1
cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnQoY29uc3QgUG9z
aXRpb24mIHN0YXJ0KQotewotICAgIFBvc2l0aW9uIHBhcmVudEFuY2hvcmVkID0gc3RhcnQucGFy
ZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWlu
ZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKLSAgICBy
ZXR1cm4gc2V0U3RhcnQoKnBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5j
aG9yZWQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotfQotCi1FeGNlcHRpb25Pcjx2b2lkPiBS
YW5nZTo6c2V0RW5kKGNvbnN0IFBvc2l0aW9uJiBlbmQpCi17Ci0gICAgUG9zaXRpb24gcGFyZW50
QW5jaG9yZWQgPSBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFwYXJl
bnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBU
eXBlRXJyb3IgfTsKLSAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnRBbmNob3JlZC5jb250YWluZXJO
b2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLX0KLQogdm9p
ZCBSYW5nZTo6Y29sbGFwc2UoYm9vbCB0b1N0YXJ0KQogewogICAgIGlmICh0b1N0YXJ0KQpAQCAt
OTk0LDcgKzk0MiwxMCBAQCBFeGNlcHRpb25PcjxOb2RlKj4gUmFuZ2U6OmNoZWNrTm9kZVdPZmZz
ZXQoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAogCiBSZWY8UmFuZ2U+IFJhbmdl
OjpjbG9uZVJhbmdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShvd25lckRv
Y3VtZW50KCksICZzdGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCAmZW5kQ29udGFp
bmVyKCksIG1fZW5kLm9mZnNldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZShvd25lckRv
Y3VtZW50KCkpOworICAgIHJlc3VsdC0+c2V0U3RhcnQoc3RhcnRDb250YWluZXIoKSwgbV9zdGFy
dC5vZmZzZXQoKSk7CisgICAgcmVzdWx0LT5zZXRFbmQoZW5kQ29udGFpbmVyKCksIG1fZW5kLm9m
ZnNldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBSYW5n
ZTo6c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2RlKQpAQCAtMTQ5NywxMCArMTQ0OCwxMCBAQCBi
b29sIFJhbmdlOjpjb250YWlucyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CiAKIGJvb2wgUmFu
Z2U6OmNvbnRhaW5zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7Ci0g
ICAgUmVmUHRyPFJhbmdlPiBwb3NpdGlvblJhbmdlID0gbWFrZVJhbmdlKHBvc2l0aW9uLCBwb3Np
dGlvbik7CisgICAgYXV0byBwb3NpdGlvblJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9u
KTsKICAgICBpZiAoIXBvc2l0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gY29udGFpbnMoKnBvc2l0aW9uUmFuZ2UpOworICAgIHJldHVybiBjb250YWlucyhjcmVh
dGVMaXZlUmFuZ2UoKnBvc2l0aW9uUmFuZ2UpKTsKIH0KIAogYm9vbCBhcmVSYW5nZXNFcXVhbChj
b25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCkBAIC0xNTQxLDEzICsxNDkyLDYgQEAgYm9v
bCByYW5nZXNPdmVybGFwKGNvbnN0IFJhbmdlKiBhLCBjb25zdCBSYW5nZSogYikKICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLVJlZjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5vZGUpCi17
Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKLSAgICBy
YW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpOwotICAgIHJldHVybiByYW5nZTsKLX0KLQog
c3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdlZChSYW5nZUJvdW5k
YXJ5UG9pbnQmIGJvdW5kYXJ5LCBDb250YWluZXJOb2RlJiBjb250YWluZXIpCiB7CiAgICAgaWYg
KCFib3VuZGFyeS5jaGlsZEJlZm9yZSgpKQpAQCAtMTg1Nyw3ICsxODAxLDEyIEBAIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYgcmFuZ2Up
CiAKIFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkK
IHsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShyYW5nZS5zdGFydC5kb2N1bWVudCgpLCByYW5n
ZS5zdGFydC5jb250YWluZXIucHRyKCksIHJhbmdlLnN0YXJ0Lm9mZnNldCwgcmFuZ2UuZW5kLmNv
bnRhaW5lci5wdHIoKSwgcmFuZ2UuZW5kLm9mZnNldCk7CisgICAgYXV0byByZXN1bHQgPSBSYW5n
ZTo6Y3JlYXRlKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpOworICAgIGF1dG8gc3RhcnRDb250YWlu
ZXIgPSByYW5nZS5zdGFydC5jb250YWluZXI7CisgICAgcmVzdWx0LT5zZXRTdGFydChXVEZNb3Zl
KHN0YXJ0Q29udGFpbmVyKSwgcmFuZ2Uuc3RhcnQub2Zmc2V0KTsKKyAgICBhdXRvIGVuZENvbnRh
aW5lciA9IHJhbmdlLmVuZC5jb250YWluZXI7CisgICAgcmVzdWx0LT5zZXRFbmQoV1RGTW92ZShl
bmRDb250YWluZXIpLCByYW5nZS5lbmQub2Zmc2V0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQog
CiBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mIHJhbmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBkMzEyMjU0ZGNkYmEyZjg1MjYyZmUwZjM2MTQ3
MGYzYTM1MWI2Y2E5Li4zYmVjZmRkMGUyMjQ2NTg0YzA0ZDc1OTRkODAzNjUyMGNlMzk4YzQ2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaApAQCAtNDcsOSArNDcsNiBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiBjbGFz
cyBSYW5nZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJhbmdlPiB7CiBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50Jik7Ci0gICAgV0VCQ09S
RV9FWFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50JiwgUmVmUHRyPE5vZGU+
JiYgc3RhcnRDb250YWluZXIsIGludCBzdGFydE9mZnNldCwgUmVmUHRyPE5vZGU+JiYgZW5kQ29u
dGFpbmVyLCBpbnQgZW5kT2Zmc2V0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFJh
bmdlPiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7
Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50Jiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgV0VC
Q09SRV9FWFBPUlQgflJhbmdlKCk7CiAKICAgICBEb2N1bWVudCYgb3duZXJEb2N1bWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fb3duZXJEb2N1bWVudDsgfQpAQCAtOTYsMTAgKzkzLDggQEAgcHVibGlj
OgogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVudHMo
Tm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QmVm
b3JlKE5vZGUmKTsKIAotICAgIGNvbnN0IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7
IHJldHVybiBtX3N0YXJ0LnRvUG9zaXRpb24oKTsgfQotICAgIGNvbnN0IFBvc2l0aW9uIGVuZFBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9Ci0gICAgV0VCQ09S
RV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnQoY29uc3QgUG9zaXRpb24mKTsKLSAg
ICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmQoY29uc3QgUG9zaXRpb24m
KTsKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC50
b1Bvc2l0aW9uKCk7IH0KKyAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZW5kLnRvUG9zaXRpb24oKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogZmlyc3RO
b2RlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogcGFzdExhc3ROb2RlKCkgY29u
c3Q7CkBAIC0xNTQsNyArMTQ5LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0
IFJhbmdlKERvY3VtZW50Jik7Ci0gICAgUmFuZ2UoRG9jdW1lbnQmLCBOb2RlKiBzdGFydENvbnRh
aW5lciwgaW50IHN0YXJ0T2Zmc2V0LCBOb2RlKiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQp
OwogCiAgICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCYpOwogICAgIEV4Y2VwdGlvbk9yPE5v
ZGUqPiBjaGVja05vZGVXT2Zmc2V0KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwpAQCAt
MTcxLDggKzE2NSw2IEBAIHByaXZhdGU6CiAgICAgUmFuZ2VCb3VuZGFyeVBvaW50IG1fZW5kOwog
fTsKIAotV0VCQ09SRV9FWFBPUlQgUmVmPFJhbmdlPiByYW5nZU9mQ29udGVudHMoTm9kZSYpOwot
CiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3Qg
UmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSos
IGNvbnN0IFJhbmdlKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVS
YW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggYmE2MTU3NWYw
NDc4MTdlMzExNjZiMDQwMGI3MmY3YzQ2NDU5OTA1YS4uNjI4MzcwOTZiNjE4NzQzYWNkNjc5YTRk
ZjY4MTdjM2ZkZGVkNTQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJh
bmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTY4LDcgKzY4
LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uVD4gYXV0byBtYWtlU2ltcGxlUmFuZ2UoVCYmIC4u
LmFyZ3VtZW50cykgLT4gZGVjbHR5cGUobWFrZVMKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNp
bXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JU
IFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKLVJl
ZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYpOwor
V0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0
IFNpbXBsZVJhbmdlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYsIGNv
bnN0IFNpbXBsZVJhbmdlJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0
aWNSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCmluZGV4IDdl
MDk0YTlhNzk4ZTZiYjgxNTY2NTI0NGM3MmNjYjAzN2M2YWRkMzkuLjVkN2NhODIxMDczM2RjMGQ1
OTBiNGNiODhkODhkMWExYmI2MGI0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
dGF0aWNSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcApA
QCAtNDEsNiArNDEsMTIgQEAgUmVmPFN0YXRpY1JhbmdlPiBTdGF0aWNSYW5nZTo6Y3JlYXRlKFNp
bXBsZVJhbmdlJiYgcmFuZ2UpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RhdGljUmFuZ2Uo
V1RGTW92ZShyYW5nZSkpKTsKIH0KIAorUmVmPFN0YXRpY1JhbmdlPiBTdGF0aWNSYW5nZTo6Y3Jl
YXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICBhdXRvIGNvcGllZFJhbmdlID0g
cmFuZ2U7CisgICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGNvcGllZFJhbmdlKSk7Cit9CisKIHN0
YXRpYyBib29sIGlzRG9jdW1lbnRUeXBlT3JBdHRyKE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gQmVm
b3JlIGNhbGxpbmcgbm9kZVR5cGUsIGRvIHR3byBmYXN0IG5vbi12aXJ0dWFsIGNoZWNrcyB0aGF0
IGNvdmVyIGFsbW9zdCBhbGwgbm9ybWFsIG5vZGVzLCBidXQgYXJlIGZhbHNlIGZvciBEb2N1bWVu
dFR5cGUgYW5kIEF0dHIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFu
Z2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCmluZGV4IGExOGRhZGE1NWQx
NWMzYzdmNDBkN2RkZDYyODE3MzI0ZDk0MmQxMWMuLmVjZTliNGRmMDFmY2RkODRhNWYwMDFhOTIx
NmJlMWE5NTg2NjdmNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5n
ZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCkBAIC00MSw2ICs0MSw3
IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxTdGF0aWNS
YW5nZT4+IGNyZWF0ZShJbml0JiYpOworICAgIHN0YXRpYyBSZWY8U3RhdGljUmFuZ2U+IGNyZWF0
ZShjb25zdCBTaW1wbGVSYW5nZSYpOwogICAgIHN0YXRpYyBSZWY8U3RhdGljUmFuZ2U+IGNyZWF0
ZShTaW1wbGVSYW5nZSYmKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDJiMzNmZTVjMGFhOGRm
ODVlN2Y3MmRjM2IwMGI2ZDVhMWIzMTFjZTQuLjI0MjE5NDIxN2Q5ZTlkZGYzYzJkN2E4OTUwNzBj
ODc5NWE3ODE4MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5h
dGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtNTIyLDcgKzUyMiw3IEBAIGJvb2wgQWx0ZXJuYXRp
dmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3QgRG9jdW1l
bnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRTdGFydFRpbWVyRm9yKG1hcmtlciwgZW5kT2ZXb3Jk
UG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBvc2l0aW9uLmNvbnRhaW5lck5vZGUoKTsKLSAg
ICBhdXRvIHdvcmRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyAqbm9kZSwgbWFya2VyLnN0YXJ0T2Zm
c2V0KCkgfSwgeyAqbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpIH0gfTsKKyAgICBhdXRvIHdvcmRS
YW5nZSA9IHJhbmdlKCpub2RlLCBtYXJrZXIpOwogICAgIFN0cmluZyBjdXJyZW50V29yZCA9IHBs
YWluVGV4dCh3b3JkUmFuZ2UpOwogICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29t
bWFuZC5jcHAKaW5kZXggNWVkYzFlNzI0NzhiYzBhZDVkZmZmOTQ1MTdhMzEwODhjZjU3Njc5Mi4u
NmEwNjQxOWYzYzRhNzAyNGFhN2ViOWYxNGQ1NzgxNDdkMzdmNDg1OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTcxMSw3ICs3MTEsNyBAQCB2
b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUoRWRpdGlu
Z1N0eWxlJiBzdHlsZSwgY29uc3QgUAogICAgIC8vIFN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgZnVs
bHkgc2VsZWN0ZWQgYW5jZXN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBmdWxseSBzZWxl
Y3RlZCBub2RlLgogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250LXNpemU6IGxhcmdlIG9u
IDxmb250IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQgdG8gaW5jbHVkZSB0aGUg
Zm9udCBlbGVtZW50IGluIG91ciBydW4KICAgICAvLyB0byBnZW5lcmF0ZSA8Zm9udCBjb2xvcj0i
Ymx1ZSIgc2l6ZT0iNCI+aGVsbG88L2ZvbnQ+IGluc3RlYWQgb2YgPGZvbnQgY29sb3I9ImJsdWUi
Pjxmb250IHNpemU9IjQiPmhlbGxvPC9mb250PjwvZm9udD4KLSAgICBhdXRvIHJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShzdGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAgIGF1dG8g
cmFuZ2UgPSAqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogICAgIGF1dG8qIGVkaXRhYmxl
Um9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChzdGFydE5v
ZGUgIT0gZWRpdGFibGVSb290KSB7CiAgICAgICAgIHdoaWxlIChlZGl0YWJsZVJvb3QgJiYgc3Rh
cnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYmIGlzTm9kZVZpc2libHlDb250
YWluZWRXaXRoaW4oKnN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpLCByYW5nZSkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRleCBmNjVk
ZjQ0OTY4N2QzZjUzMzI5NTdmZjg0ODE0ZmRjN2VmNzg2YjE0Li4yNWJkMzNmZGQ0MTc2NzQ0NmI3
NTMzZDlhNzZmYTEzNDgyZWYxYWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTc0OCw5ICs3NDgsMTMgQEAgdm9pZCBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAgICAgICByZXR1cm47CiAg
ICAgfQogICAgIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIHN0
YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNo
b3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byByYW5nZVRvQmVSZXBsYWNlZCA9IFJhbmdlOjpj
cmVhdGUoZG9jdW1lbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVu
dEFuY2hvcmVkRXF1aXZhbGVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFsZW50KCku
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghZG9jdW1lbnQoKS5lZGl0b3Io
KS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UsIHJhbmdlVG9CZVJl
cGxhY2VkKSkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3Jh
cGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlKTsKKyAgICBpZiAoIXJhbmdlKQorICAgICAg
ICByZXR1cm47CisgICAgYXV0byByYW5nZVRvQmVSZXBsYWNlZCA9IG1ha2VTaW1wbGVSYW5nZSht
ZXJnZURlc3RpbmF0aW9uKTsKKyAgICBpZiAoIXJhbmdlVG9CZVJlcGxhY2VkKQorICAgICAgICBy
ZXR1cm47CisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91bGRNb3Zl
UmFuZ2VBZnRlckRlbGV0ZSgqcmFuZ2UsICpyYW5nZVRvQmVSZXBsYWNlZCkpCiAgICAgICAgIHJl
dHVybjsKIAogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9sZGVycyBp
ZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBkb24ndCBs
ZXQgYmxvY2sKQEAgLTg1MSwxMiArODU1LDExIEBAIFN0cmluZyBEZWxldGVTZWxlY3Rpb25Db21t
YW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNlbGVjCiAg
ICAgaWYgKCFpc1N0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24pKQogICAgICAgICByZXR1cm4g
U3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBvc2l0aW9uID0gc3RhcnRPZlNl
bGVjdGlvbi5uZXh0KCk7Ci0gICAgaWYgKG5leHRQb3NpdGlvbi5pc051bGwoKSkKKyAgICBhdXRv
IHJhbmdlT2ZGaXJzdENoYXJhY3RlciA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mU2VsZWN0aW9u
LCBzdGFydE9mU2VsZWN0aW9uLm5leHQoKSk7CisgICAgaWYgKCFyYW5nZU9mRmlyc3RDaGFyYWN0
ZXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIGF1dG8gcmFuZ2VPZkZpcnN0Q2hh
cmFjdGVyID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mU2VsZWN0aW9uLmRlZXBF
cXVpdmFsZW50KCksIG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBmb3IgKGF1
dG8qIG1hcmtlciA6IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZG
aXJzdENoYXJhY3RlciwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKSB7CisgICAgZm9y
IChhdXRvKiBtYXJrZXIgOiBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5nZSgqcmFu
Z2VPZkZpcnN0Q2hhcmFjdGVyLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCkpIHsKICAg
ICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWFya2VyLT5zdGFydE9mZnNldCgpOwogICAgICAgICBp
ZiAoc3RhcnRPZmZzZXQgPT0gc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgpLm9mZnNl
dEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1hcmtlci0+ZGVzY3JpcHRp
b24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBiYTVmM2I2
YzMwZWJkODg4M2FmNjI2ZTZmM2Q3NjE2ZGNjOGIyY2I2Li5lZmZhZjQ5NzlkMmM0NGY1MmRmNTkx
NjAxOTZiNzIzMTQ2YjQwNWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgogI2luY2x1
ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUg
IlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5oIgogI2lu
Y2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKQEAg
LTE1MzcsMTggKzE1MzgsMTIgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0aW5nU3R5bGU6OnRleHRE
aXJlY3Rpb25Gb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICBQb3NpdGlv
biBlbmQ7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAgZW5kID0gc2Vs
ZWN0aW9uLmVuZCgpLnVwc3RyZWFtKCk7Ci0KLSAgICAgICAgTm9kZSogcGFzdExhc3QgPSBSYW5n
ZTo6Y3JlYXRlKCplbmQuZG9jdW1lbnQoKSwgcG9zaXRpb24ucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCksIGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSktPnBhc3RMYXN0Tm9kZSgpOwot
ICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4gIT0gcGFzdExhc3Q7IG4gPSBOb2Rl
VHJhdmVyc2FsOjpuZXh0KCpuKSkgewotICAgICAgICAgICAgaWYgKCFuLT5pc1N0eWxlZEVsZW1l
bnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgUmVmUHRyPENT
U1ZhbHVlPiB1bmljb2RlQmlkaSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IobikucHJvcGVydHlW
YWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAgICAgICAgIGlmICghaXM8Q1NTUHJp
bWl0aXZlVmFsdWU+KHVuaWNvZGVCaWRpKSkKKyAgICAgICAgZm9yIChhdXRvJiBpbnRlcnNlY3Rp
bmdOb2RlIDogaW50ZXJzZWN0aW5nTm9kZXMoKm1ha2VTaW1wbGVSYW5nZShwb3NpdGlvbiwgZW5k
KSkpIHsKKyAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW5nTm9kZS5pc1N0eWxlZEVsZW1lbnQo
KSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NTVmFsdWVJRCB1
bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmljb2RlQmlk
aSkudmFsdWVJRCgpOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0gQ1NTVmFs
dWVFbWJlZCB8fCB1bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRlKQorICAg
ICAgICAgICAgYXV0byB2YWx1ZU9iamVjdCA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IoJmludGVy
c2VjdGluZ05vZGUpLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7CisgICAg
ICAgICAgICBhdXRvIHZhbHVlID0gaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlT2JqZWN0KSA/
IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWVPYmplY3QpLnZhbHVlSUQoKSA6IENT
U1ZhbHVlSW52YWxpZDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBDU1NWYWx1ZUVtYmVkIHx8
IHZhbHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRlKQogICAgICAgICAgICAgICAgIHJldHVybiBX
cml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuY3BwCmluZGV4IGQxMmY4NGYxNWZmNGU3NTI5NWVjNjM2YzM4MDdhNjExZTNmOGJi
MjYuLmM0YTdiYzkyNjZiODMzOGQ3ZDAxNzFjYjlmMjhlMzIzMGNkZWJiMjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcxNCw4ICs3MTQsOCBAQCB2b2lkIEVkaXRvcjo6cmVwbGFj
ZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwgU2VsZWN0
UmVwbAogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8g
cmFuZ2VUb0NoZWNrID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBvc2l0aW9uSW5O
b2RlKG5vZGVUb0NoZWNrKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKG5vZGVUb0NoZWNrKSk7Ci0gICAg
aWYgKGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2ZVRleHRD
aGVja2luZ1R5cGVNYXNrKCpub2RlVG9DaGVjaywgeyBUZXh0Q2hlY2tpbmdUeXBlOjpTcGVsbGlu
ZywgVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciB9KSwgVGV4dENoZWNraW5nUHJvY2Vzc0JhdGNo
LCByYW5nZVRvQ2hlY2suY29weVJlZigpLCByYW5nZVRvQ2hlY2suY29weVJlZigpLCByYW5nZVRv
Q2hlY2suY29weVJlZigpKSkKKyAgICBhdXRvIHJhbmdlVG9DaGVjayA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqbm9kZVRvQ2hlY2spOworICAgIGlmIChhdXRvIHJlcXVlc3QgPSBT
cGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFzaygqbm9k
ZVRvQ2hlY2ssIHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2luZ1R5cGU6
OkdyYW1tYXIgfSksIFRleHRDaGVja2luZ1Byb2Nlc3NCYXRjaCwgcmFuZ2VUb0NoZWNrLCByYW5n
ZVRvQ2hlY2ssIHJhbmdlVG9DaGVjaykpCiAgICAgICAgIG1fc3BlbGxDaGVja2VyLT5yZXF1ZXN0
Q2hlY2tpbmdGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIApAQCAtMzAzMCw3ICsz
MDMwLDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0
aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAvLyBnYXJkZSIsIHdlIHdpbGwg
aGF2ZSBDb3JyZWN0aW9uSW5kaWNhdG9yIG1hcmtlciBvbiBib3RoIHdvcmRzIGFuZCBvbiB0aGUg
d2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uIElmIHdlIHRoZW4gZWRpdCBnYXJkZSwKICAgICAvLyB3
ZSB3b3VsZCBsaWtlIHRvIHJlbW92ZSB0aGUgbWFya2VyIGZyb20gd29yZCAiYXZhbnQiIGFuZCB3
aGl0ZXNwYWNlIGFzIHdlbGwuIFNvIHdlIG5lZWQgdG8gZ2V0IHRoZSBjb250aW5vdXMgcmFuZ2Ug
b2YKICAgICAvLyBvZiBtYXJrZXIgdGhhdCBjb250YWlucyB0aGUgd29yZCBpbiBxdWVzdGlvbiwg
YW5kIHJlbW92ZSBtYXJrZXIgb24gdGhhdCB3aG9sZSByYW5nZS4KLSAgICBhdXRvIHdvcmRSYW5n
ZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZkZpcnN0V29yZC5kZWVwRXF1aXZh
bGVudCgpLCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOworICAgIGF1dG8gd29yZFJh
bmdlID0gKm1ha2VTaW1wbGVSYW5nZShzdGFydE9mRmlyc3RXb3JkLCBlbmRPZkxhc3RXb3JkKTsK
IAogICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFya2Vyc0lu
UmFuZ2Uod29yZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRpdmVzKSkK
ICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZW1vdmVEaWN0YXRpb25BbHRl
cm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CkBAIC0zMTQzLDcgKzMxNDMsNyBAQCB2b2lkIEVk
aXRvcjo6dHJhbnNwb3NlKCkKICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3VzKCk7CiAg
ICAgaWYgKCFpblNhbWVQYXJhZ3JhcGgobmV4dCwgcHJldmlvdXMpKQogICAgICAgICByZXR1cm47
Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShwcmV2aW91cywgbmV4dCk7Cisg
ICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwcmV2aW91cywgbmV4dCk7CiAgICAgaWYg
KCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3U2VsZWN0
aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSk7CkBAIC0zNTI2LDcgKzM1MjYsNyBAQCBPcHRpb25hbDxT
aW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFyZ2V0LCBj
b25zdCBPcHRpb25hbAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIGFuZCB3ZSdy
ZSB3cmFwcGluZywgc2VhcmNoIGFnYWluIGluIHRoZSBlbnRpcmUgZG9jdW1lbnQgKHRoaXMgd2ls
bAogICAgIC8vIHJlZHVuZGFudGx5IHJlLXNlYXJjaCB0aGUgYXJlYSBhbHJlYWR5IHNlYXJjaGVk
IGluIHNvbWUgY2FzZXMpLgogICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAmJiBvcHRp
b25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7Ci0gICAgICAgIHJlc3VsdFJhbmdlID0gY29sbGFw
c2VJZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKGRvY3VtZW50KCkp
LCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBjb2xsYXBzZUlmUm9v
dHNEaWZmZXIoZmluZFBsYWluVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZG9j
dW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOwogICAgICAgICAvLyBXZSB1c2VkIHRvIHJldHVy
biBmYWxzZSBoZXJlIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHNhbWUgcmFuZ2UgdGhhdCB3ZSBz
dGFydGVkIHdpdGgKICAgICAgICAgLy8gKGUuZy4sIHRoZSByZWZlcmVuY2UgcmFuZ2Ugd2FzIGFs
cmVhZHkgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyB0ZXh0KS4gQnV0IHdlIGRlY2lkZWQgdGhh
dAogICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSBhIHN1Y2Nlc3MgY2FzZSBpbnN0ZWFkLCBzbyB3
ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCBpbiB0aGF0IGNhc2UuCkBAIC00MTg4LDggKzQxODgsOCBA
QCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5nUmVzdWx0
IGFjY2VwdGVkQ2FuZGlkYXRlKQogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlkYXRlID0g
dHJ1ZTsKIAogICAgIGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQo
YWNjZXB0ZWRDYW5kaWRhdGUpKSB7Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFjY2Vw
dGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9uOjpUeXBl
ZCkpCi0gICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0ZShjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCktPmFwcGx5
KCk7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxh
Y2VtZW50LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAgICAgICAg
UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUoKnJhbmdlLCBhY2NlcHRlZENhbmRp
ZGF0ZS5yZXBsYWNlbWVudCktPmFwcGx5KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGluc2VydFRl
eHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIG51bGxwdHIpOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDFmZmRhOGNhMjZmNzZiN2E5NDk4
ZDUyMmU5ZWU0YmI4NjE4NTljZmEuLjE1OTQwNGI0YzI0M2U4NDkwMjYzMzk0YjZlMTZjYTcyZTY0
ZDA5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCkBAIC0y
NjczLDEwICsyNjczLDggQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0aW9uOjpy
YW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW4KIAogdm9pZCBGcmFtZVNl
bGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVuc2lnbmVk
IGxlbmd0aCwgTm9kZSYgbm9kZSkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJhbmdlID0g
bV9kb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKLSAgICByZXN1bHRSYW5nZS0+c2V0U3RhcnQobm9k
ZSwgbG9jYXRpb24pOwotICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQobm9kZSwgbG9jYXRpb24gKyBs
ZW5ndGgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gVmlzaWJsZVNlbGVjdGlv
bigqcmVzdWx0UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBhdXRvIHNlbGVjdGlv
biA9IFZpc2libGVTZWxlY3Rpb24geyBTaW1wbGVSYW5nZSB7IHsgbm9kZSwgbG9jYXRpb24gfSwg
eyBub2RlLCBsb2NhdGlvbiArIGxlbmd0aCB9IH0gfTsKKwogICAgIC8vIEZJWE1FOiBUaGUgc2Vj
b25kIGFyZ3VtZW50IHdhcyAidHJ1ZSIgd2hpY2ggaW1wbGljaXRseSBjb252ZXJ0ZWQgdG8gb3B0
aW9uICJGaXJlU2VsZWN0RXZlbnQiLiBJcyB0aGlzIGNvcnJlY3Q/CiAgICAgc2V0U2VsZWN0aW9u
KHNlbGVjdGlvbiwgeyBGaXJlU2VsZWN0RXZlbnQgfSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKaW5kZXggNjhl
MDgzNTJhNGMxMGQ4NjhiZjFlNDY5YmY3NWM5NTZkMTNmMDU5MC4uNWVkMGRlOWEzMTBiMzFiZTYz
ZTBhM2Q0MzM4OThjMTk1MjcyODU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAtNDAsOCArNDAsOCBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6UmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kKFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQs
IGNvbnN0IFN0cmluZyYgdGV4dCkKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9C
ZVJlcGxhY2VkLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2Vy
dFJlcGxhY2VtZW50KQorUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpSZXBsYWNlUmFuZ2VX
aXRoVGV4dENvbW1hbmQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2VkLCBjb25z
dCBTdHJpbmcmIHRleHQpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVSZXBs
YWNlZC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxh
Y2VtZW50KQogICAgICwgbV9yYW5nZVRvQmVSZXBsYWNlZChyYW5nZVRvQmVSZXBsYWNlZCkKICAg
ICAsIG1fdGV4dCh0ZXh0KQogewpAQCAtNDksMjEgKzQ5LDE4IEBAIFJlcGxhY2VSYW5nZVdpdGhU
ZXh0Q29tbWFuZDo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kKFJlZlB0cjxSYW5nZT4gcmFu
Z2VUb0JlCiAKIGJvb2wgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjp3aWxsQXBwbHlDb21t
YW5kKCkKIHsKLSAgICBtX3RleHRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKm1f
cmFuZ2VUb0JlUmVwbGFjZWQsIG1fdGV4dCk7CisgICAgbV90ZXh0RnJhZ21lbnQgPSBjcmVhdGVG
cmFnbWVudEZyb21UZXh0KG1fcmFuZ2VUb0JlUmVwbGFjZWQsIG1fdGV4dCk7CiAgICAgcmV0dXJu
IENvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCk7CiB9CiAKIHZvaWQgUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiB7ICptX3JhbmdlVG9CZVJlcGxhY2VkIH07Ci0KLSAgICBpZiAoIW1fcmFu
Z2VUb0JlUmVwbGFjZWQpCi0gICAgICAgIHJldHVybjsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbiB7IG1fcmFuZ2VUb0JlUmVwbGFjZWQgfTsKIAogICAgIGlmICghZG9jdW1lbnQoKS5z
ZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKCFjaGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNlZCkpCisg
ICAgaWYgKCFjaGFyYWN0ZXJDb3VudChtX3JhbmdlVG9CZVJlcGxhY2VkKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU2V0U2VsZWN0aW9uQ29tbWFuZDo6
Y3JlYXRlKHNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rpb25PcHRp
b25zKCkpKTsKQEAgLTg4LDcgKzg1LDcgQEAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gUmVwbGFjZVJh
bmdlV2l0aFRleHRDb21tYW5kOjppbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QKIAogVmVj
dG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6dGFy
Z2V0UmFuZ2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyAxLCBTdGF0aWNSYW5nZTo6Y3JlYXRl
KCptX3JhbmdlVG9CZVJlcGxhY2VkKSB9OworICAgIHJldHVybiB7IDEsIFN0YXRpY1JhbmdlOjpj
cmVhdGUobV9yYW5nZVRvQmVSZXBsYWNlZCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4
dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRD
b21tYW5kLmgKaW5kZXggMDk4MzA3ZjY1MjBkZWU2YzQ0MWNmNWZlODE0NmU3N2FjZjllOTZjNC4u
M2JiYzg5OWQyNGZjYWU1NTYyMTFjMmY4ZGY3NDQzNDY0ZDQyYWI1NCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5oCkBAIC0z
NCwyMCArMzQsMjAgQEAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIAogY2xhc3MgUmVwbGFjZVJh
bmdlV2l0aFRleHRDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZD4gY3JlYXRlKFJl
ZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKKyAgICBz
dGF0aWMgUmVmPFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZD4gY3JlYXRlKGNvbnN0IFNpbXBs
ZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogICAgIHsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kKHJh
bmdlVG9CZVJlcGxhY2VkLCB0ZXh0KSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFJlcGxhY2VS
YW5nZVdpdGhUZXh0Q29tbWFuZChSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2VkLCBjb25z
dCBTdHJpbmcmIHRleHQpOworICAgIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZChjb25zdCBT
aW1wbGVSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7CiAgICAg
Ym9vbCB3aWxsQXBwbHlDb21tYW5kKCkgZmluYWw7CiAgICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJp
ZGU7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRy
PERhdGFUcmFuc2Zlcj4gaW5wdXRFdmVudERhdGFUcmFuc2ZlcigpIGNvbnN0IGZpbmFsOwogICAg
IFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiB0YXJnZXRSYW5nZXMoKSBjb25zdCBmaW5hbDsK
IAotICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZVRvQmVSZXBsYWNlZDsKKyAgICBTaW1wbGVSYW5n
ZSBtX3JhbmdlVG9CZVJlcGxhY2VkOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX3Rl
eHRGcmFnbWVudDsKICAgICBTdHJpbmcgbV90ZXh0OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjllN2UzMGU2NWE5
NjE2MDI1ZWQyNDkyNTkyMWIzMGNkZjdiMTdkNi4uOTkzNGExMzU0ZmFlNjU5OWE0OTc5ODJjYmEw
MGVhNjcyZjJkNjc4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNl
U2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTE3NjksMTIgKzE3NjksOSBAQCBib29sIFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UoY29uc3QgUmVwbGFjZW1lbnRG
cmFnbWVudCYgZgogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8UmFuZ2U+IFJlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kOjppbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNvbnN0CitPcHRpb25hbDxT
aW1wbGVSYW5nZT4gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydGVkQ29udGVudFJhbmdl
KCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9zdGFydE9m
SW5zZXJ0ZWRDb250ZW50LmRvY3VtZW50KCkpKQotICAgICAgICByZXR1cm4gUmFuZ2U6OmNyZWF0
ZSgqZG9jdW1lbnQsIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCwgbV9lbmRPZkluc2VydGVkQ29u
dGVudCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdl
KG1fc3RhcnRPZkluc2VydGVkQ29udGVudCwgbV9lbmRPZkluc2VydGVkQ29udGVudCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuaAppbmRleCBkOWQ1OWQzNTMzNWRlMTNlYmE3ZDNjNTUwNWMz
OTdmYzg3NmQzYWRkLi4wNjA4YTAwODllNmIwOGE0OGFkMjk5MmYxODg5ZDhjMzI1OTQxYWEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5k
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5o
CkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlU2VsZWN0aW9uIHZpc2libGVT
ZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVTZWxlY3Rp
b25Gb3JJbnNlcnRlZFRleHQ7IH0KICAgICBTdHJpbmcgZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4
dCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dDsgfQogCi0gICAg
UmVmUHRyPFJhbmdlPiBpbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNvbnN0OworICAgIE9wdGlvbmFs
PFNpbXBsZVJhbmdlPiBpbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNvbnN0OwogCiBwcml2YXRlOgog
ICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50JiwgUmVmUHRyPERvY3VtZW50RnJh
Z21lbnQ+JiYsIE9wdGlvblNldDxDb21tYW5kT3B0aW9uPiwgRWRpdEFjdGlvbik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmNwcApp
bmRleCA1OTIwODQ1MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1Li43YzExZmE4ODFm
ZjExZTllZDcyMzllMzAxZWIxZDU5NGU4ZTk0N2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTgzLDEwICs4Mywx
MCBAQCBwcml2YXRlOgogfTsKICNlbmRpZgogCi1TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kOjpT
cGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKFJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0
IFN0cmluZyYgY29ycmVjdGlvbikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9C
ZUNvcnJlY3RlZC5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2Vy
dFJlcGxhY2VtZW50KQorU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6U3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlQ29ycmVjdGVkLCBjb25zdCBT
dHJpbmcmIGNvcnJlY3Rpb24pCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRvQmVD
b3JyZWN0ZWQuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLCBFZGl0QWN0aW9uOjpJbnNlcnRS
ZXBsYWNlbWVudCkKICAgICAsIG1fcmFuZ2VUb0JlQ29ycmVjdGVkKHJhbmdlVG9CZUNvcnJlY3Rl
ZCkKLSAgICAsIG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZChtX3JhbmdlVG9CZUNvcnJlY3RlZC5n
ZXQoKSkKKyAgICAsIG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZChtX3JhbmdlVG9CZUNvcnJlY3Rl
ZCkKICAgICAsIG1fY29ycmVjdGlvbihjb3JyZWN0aW9uKQogewogfQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaAppbmRleCA1YjgxZWYy
MzU2Yzk5YTczM2Y0YTNlMTg4NzhiMDA1ZjNjOTAyMmQ2Li5lM2Q3ZTBmMWIyMGM3NTAwNzc5OGY3
ZTcxMzVhNDk2NDQzODZiZmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaApAQCAtMzIsMTIgKzMyLDEyIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCA6IHB1YmxpYyBDb21w
b3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kPiBjcmVhdGUoUmFuZ2UmIHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3QgU3Ry
aW5nJiBjb3JyZWN0aW9uKQorICAgIHN0YXRpYyBSZWY8U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFu
ZD4gY3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0
cmluZyYgY29ycmVjdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNw
ZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLCBjb3JyZWN0aW9uKSk7
CiAgICAgfQogcHJpdmF0ZToKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKFJhbmdlJiBy
YW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CisgICAgU3BlbGxp
bmdDb3JyZWN0aW9uQ29tbWFuZChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlQ29ycmVjdGVk
LCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAgIGJvb2wgd2lsbEFwcGx5Q29tbWFuZCgp
IGZpbmFsOwogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAgIGJvb2wgc2hvdWxkUmV0
YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdCBvdmVycmlkZTsKQEAgLTQ2LDcgKzQ2
LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gdGFyZ2V0UmFu
Z2VzKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gaW5wdXRFdmVudERh
dGFUcmFuc2ZlcigpIGNvbnN0IGZpbmFsOwogCi0gICAgUmVmPFJhbmdlPiBtX3JhbmdlVG9CZUNv
cnJlY3RlZDsKKyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlVG9CZUNvcnJlY3RlZDsKICAgICBWaXNp
YmxlU2VsZWN0aW9uIG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZDsKICAgICBSZWZQdHI8RG9jdW1l
bnRGcmFnbWVudD4gbV9jb3JyZWN0aW9uRnJhZ21lbnQ7CiAgICAgU3RyaW5nIG1fY29ycmVjdGVk
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCmluZGV4
IDhmZmY0ZjQxNzFiMzVkOWY0OGYwMjRmNjJkMjQ2NTc0OTZmZWJmZDkuLjI1NDYwMjNmNjQwNTdm
ODNkOTIxNjlhNThhZTQ1MWEzNjMzMDg1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTMwMiwxNCArMzAyLDEzIEBAIGF1dG8gVGV4dENo
ZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFz
ZShib29sIGNoZWNrCiAgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5jb21wYXNz
IGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQgbXVjaCBj
b250ZXh0LgogICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBz
dGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwgc2VhcmNo
IHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0
aGlzIGFyZWEuCi0gICAgUmVmPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IGNyZWF0ZUxpdmVSYW5n
ZShtX3JhbmdlKTsKLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3RhcnRPZlBh
cmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsKKyAg
ICBhdXRvIHBhcmFncmFwaFJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBo
KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0YXJ0KSksIG1fcmFuZ2UuZW5k
KTsKICAgICBhdXRvIHRvdGFsUmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3JhcGhS
YW5nZSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsKKyAgICBwYXJhZ3Jh
cGhSYW5nZS5lbmQgPSAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7CiAgICAgCi0gICAgYXV0byByYW5n
ZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdy
YXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksIG1fcmFuZ2Uuc3RhcnQgfSk7CisgICAgYXV0byBy
YW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBwYXJhZ3JhcGhSYW5nZS5zdGFydCwg
bV9yYW5nZS5zdGFydCB9KTsKICAgICB1aW50NjRfdCB0b3RhbExlbmd0aFByb2Nlc3NlZCA9IDA7
Ci0gICAgCisKICAgICBib29sIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsKICAgICBib29sIGxhc3RJ
dGVyYXRpb24gPSBmYWxzZTsKICAgICB3aGlsZSAodG90YWxMZW5ndGhQcm9jZXNzZWQgPCB0b3Rh
bFJhbmdlTGVuZ3RoKSB7CkBAIC0zMTcsMTAgKzMxNiwxMCBAQCBhdXRvIFRleHRDaGVja2luZ0hl
bHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UoYm9vbCBj
aGVjawogICAgICAgICBhdXRvIGN1cnJlbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJhZ3Jh
cGhSYW5nZSk7CiAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRTdGFydE9mZnNldCA9IGZpcnN0SXRl
cmF0aW9uID8gcmFuZ2VTdGFydE9mZnNldCA6IDA7CiAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRF
bmRPZmZzZXQgPSBjdXJyZW50TGVuZ3RoOwotICAgICAgICBpZiAoaW5TYW1lUGFyYWdyYXBoKHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihtX3JhbmdlLmVuZCkpKSB7CisgICAgICAgIGlmIChpblNhbWVQYXJhZ3JhcGgoY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHBhcmFncmFwaFJhbmdlLnN0YXJ0KSwgY3JlYXRlTGVnYWN5RWRp
dGluZ1Bvc2l0aW9uKG1fcmFuZ2UuZW5kKSkpIHsKICAgICAgICAgICAgIC8vIERldGVybWluZSB0
aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNlYXJjaCBy
YW5nZSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCiAgICAgICAgICAgICAvLyBzaW5jZSB3
ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgICAgICAgICAg
Y3VycmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBvaW50KHBh
cmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX3JhbmdlLmVuZCB9KTsKKyAgICAgICAg
ICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7IHBhcmFncmFwaFJhbmdlLnN0
YXJ0LCBtX3JhbmdlLmVuZCB9KTsKICAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0cnVlOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50RW5kT2Zm
c2V0KSB7CkBAIC0zMzcsNyArMzM2LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRG
aXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2sKICAgICAg
ICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyKQogICAgICAgICAgICAgICAgICAgICBjaGVja2lu
Z1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgICAgICAgICBW
aXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgICAgICAgICAgICAgaWYgKEZy
YW1lKiBmcmFtZSA9IHBhcmFncmFwaFJhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUoKSkKKyAg
ICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcGFyYWdyYXBoUmFuZ2Uuc3RhcnQuY29u
dGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRT
ZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAgICAgICAg
ICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2VyKCksIHBhcmFncmFw
aFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7CiAKQEAg
LTM3OSw3ICszNzgsNyBAQCBhdXRvIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3Bl
bGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UoYm9vbCBjaGVjawogICAgICAgICAgICAgICAg
IGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpICYmICghY2hlY2tHcmFtbWFyIHx8IGJhZEdy
YW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxsaW5nTG9jYXRpb24gPD0gZ3JhbW1hckRldGFp
bExvY2F0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBzcGVsbGluZ09mZnNl
dCA9IHNwZWxsaW5nTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBzcGVs
bGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3RhcnQsICptYWtlQm91bmRh
cnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5z
dGFydCwgcGFyYWdyYXBoUmFuZ2Uuc3RhcnQgfSk7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0
Rm91bmRJdGVtID0gTWlzc3BlbGxlZFdvcmQgewogICAgICAgICAgICAgICAgICAgICAgICAgbWlz
c3BlbGxlZFdvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ09mZnNldApAQCAt
Mzg5LDcgKzM4OCw3IEBAIGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVs
bGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrCiAgICAgICAgICAgICAgICAg
aWYgKGNoZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgdWludDY0X3QgZ3JhbW1hclBocmFzZU9mZnNldCA9IGdyYW1tYXJQaHJh
c2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYg
KCFmaXJzdEl0ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VP
ZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJvdW5kYXJ5UG9p
bnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgICAgICAgICAgICAg
ICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9yYW5nZS5z
dGFydCwgcGFyYWdyYXBoUmFuZ2Uuc3RhcnQgfSk7CiAgICAgICAgICAgICAgICAgICAgIGZpcnN0
Rm91bmRJdGVtID0gVW5ncmFtbWF0aWNhbFBocmFzZSB7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBiYWRHcmFtbWFyUGhyYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1hclBocmFz
ZU9mZnNldCwKQEAgLTQwMiwxMiArNDAxLDExIEBAIGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpm
aW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrCiAg
ICAgICAgIGlmIChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICsgY3VycmVu
dExlbmd0aCA+PSB0b3RhbFJhbmdlTGVuZ3RoKQogICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAg
ICAgVmlzaWJsZVBvc2l0aW9uIG5ld1BhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZk5leHRQYXJhZ3Jh
cGgocGFyYWdyYXBoUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICBpZiAoIXNldFN0YXJ0
KHBhcmFncmFwaFJhbmdlLnB0cigpLCBuZXdQYXJhZ3JhcGhTdGFydCkpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBpZiAoIXNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgZW5kT2ZQ
YXJhZ3JhcGgobmV3UGFyYWdyYXBoU3RhcnQpKSkKKyAgICAgICAgYXV0byBuZXh0U3RhcnQgPSBz
dGFydE9mTmV4dFBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFyYWdyYXBo
UmFuZ2UuZW5kKSk7CisgICAgICAgIGF1dG8gbmV4dFBhcmFncmFwaFJhbmdlID0gbWFrZVNpbXBs
ZVJhbmdlKG5leHRTdGFydCwgZW5kT2ZQYXJhZ3JhcGgobmV4dFN0YXJ0KSk7CisgICAgICAgIGlm
ICghbmV4dFBhcmFncmFwaFJhbmdlKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHBhcmFn
cmFwaFJhbmdlID0gV1RGTW92ZSgqbmV4dFBhcmFncmFwaFJhbmdlKTsKIAogICAgICAgICBmaXJz
dEl0ZXJhdGlvbiA9IGZhbHNlOwogICAgICAgICB0b3RhbExlbmd0aFByb2Nlc3NlZCArPSBjdXJy
ZW50TGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21t
YW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKaW5kZXgg
ZDAxNTEwMmE2MDlmZmFlZDI2MTJhZjJlNzljM2I5ZmVkZDVmMTlhYS4uZmM5NzU3NzQ4MzExY2Qx
MmZiZGQ3MmUxYjI0ZmU0YmIwZjA3MDlhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGlu
Z0NvbW1hbmQuY3BwCkBAIC00NDksNyArNDQ5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjptYXJr
TWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUpCiAgICAg
ICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBMZWZ0V29yZElm
T25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMiA9IHN0YXJ0T2ZXb3JkKHN0
YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIGlmIChwMSAhPSBwMikgewotICAg
ICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShwMSwgcDIpOworICAgICAg
ICAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwMSwgcDIpOwogICAgICAgICAgICAg
U3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwogICAgICAgICAgICAgaWYgKHJhbmdlICYmIChj
b21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0IHx8IGNvbW1hbmRUeXBlID09
IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVhayB8fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdD
b21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5n
Q29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KSkKICAgICAg
ICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4dCgqcmFuZ2UpLnN0cmlw
V2hpdGVTcGFjZSgpOwpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6bWFy
a01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlKQogICAg
IH0KIH0KIAotYm9vbCBUeXBpbmdDb21tYW5kOjp3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChF
VHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBj
b25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxSYW5nZT4mJiByYW5nZSkKK2Jvb2wgVHlwaW5nQ29t
bWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5
cGUsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgY29uc3QgU3RyaW5nJiB0ZXh0LCBjb25z
dCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIG1fY3VycmVudFRleHRUb0lu
c2VydCA9IHRleHQ7CiAgICAgbV9jdXJyZW50VHlwaW5nRWRpdEFjdGlvbiA9IGVkaXRBY3Rpb25G
b3JUeXBpbmdDb21tYW5kKGNvbW1hbmRUeXBlLCBncmFudWxhcml0eSwgbV9jb21wb3NpdGlvblR5
cGUsIG1faXNBdXRvY29tcGxldGlvbik7CkBAIC02NjEsNyArNjYxLDcgQEAgdm9pZCBUeXBpbmdD
b21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9v
bCBzaG91bGRBZGQKICAgICAgICAgaWYgKHByZXZpb3VzUG9zaXRpb24uaXNOdWxsKCkgfHwgZW5j
bG9zaW5nVGFibGVDZWxsICE9IGVuY2xvc2luZ1RhYmxlQ2VsbEZvclByZXZpb3VzUG9zaXRpb24p
IHsKICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBvZiB0aGUg
ZWRpdGFibGUgYXJlYSBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0sIGJyZWFrIG91dCBvZiB0aGUgbGlz
dCBpdGVtLgogICAgICAgICAgICAgaWYgKGF1dG8gZGVsZXRlTGlzdFNlbGVjdGlvbiA9IHNob3Vs
ZEJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAod2lsbEFk
ZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBSYW5nZTo6
Y3JlYXRlKGRvY3VtZW50KCksIGRlbGV0ZUxpc3RTZWxlY3Rpb24udmFsdWUoKS5zdGFydCgpLCBk
ZWxldGVMaXN0U2VsZWN0aW9uLnZhbHVlKCkuZW5kKCkpKSkgeworICAgICAgICAgICAgICAgIGlm
ICh3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5LCB7IH0s
ICpkZWxldGVMaXN0U2VsZWN0aW9uLnZhbHVlKCkuZmlyc3RSYW5nZSgpKSkgewogICAgICAgICAg
ICAgICAgICAgICBicmVha091dE9mRW1wdHlMaXN0SXRlbSgpOwogICAgICAgICAgICAgICAgICAg
ICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRGVsZXRlS2V5KTsKICAgICAgICAgICAgICAgICB9
CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICAgICBpZiAoc2Vs
ZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3Vs
ZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKICAg
ICAKLSAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3JhbnVs
YXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdl
KCkpKSkKKyAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwgZ3Jh
bnVsYXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKICAgICAgICAg
cmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCkBAIC04MzksNyArODM5LDcg
QEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVs
YXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBpZiAoc2VsZWN0aW9uVG9EZWxldGUuaXND
YXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVjdGlvbihz
ZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghd2lsbEFkZFR5
cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgY3Jl
YXRlTGl2ZVJhbmdlKHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQorICAgIGlmICgh
d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHks
IHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKICAgICAgICAgcmV0dXJuOwog
CiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3JlIGFjdHVh
bGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlzIHN0aWxs
IHZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCmluZGV4IGU5NzZhNmJm
MGE0OGM2NTY1Yzk4MGFiMjNlMDJhMGIxZmUxMTE0ZGMuLjY5MGVlMjYyNWUwZDE2NDJmOGE2Mjk3
MTBhMGI4YjAxY2IzYTc3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5o
CkBAIC0xMjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB1cGRhdGVTZWxl
Y3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQqLCBEb2N1
bWVudCYpOwogCiAgICAgdm9pZCB1cGRhdGVQcmVzZXJ2ZXNUeXBpbmdTdHlsZShFVHlwaW5nQ29t
bWFuZCk7Ci0gICAgYm9vbCB3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChFVHlwaW5nQ29tbWFu
ZCwgVGV4dEdyYW51bGFyaXR5LCBjb25zdCBTdHJpbmcmID0gZW1wdHlTdHJpbmcoKSwgUmVmUHRy
PFJhbmdlPiYmID0gbnVsbHB0cik7CisgICAgYm9vbCB3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFu
ZChFVHlwaW5nQ29tbWFuZCwgVGV4dEdyYW51bGFyaXR5LCBjb25zdCBTdHJpbmcmID0gZW1wdHlT
dHJpbmcoKSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiA9IHsgfSk7CiAgICAgdm9pZCBt
YXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQpOwogICAgIHZvaWQgdHlw
aW5nQWRkZWRUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kKTsKICAgICBib29sIG1ha2VFZGl0
YWJsZVJvb3RFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24u
Y3BwCmluZGV4IDAxNjhlYjgxODE0MmQzZjQ2OTlmNTVlYTBmZjhiMjJhYWRiNjM3NmYuLmY5NThk
OGUzMzMyNmE2M2VhOWVlYTNjNTZjZDdhYjhjNDQ4YTZhYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTczMCw1MyArNzMwLDYgQEAgdm9pZCBWaXNp
YmxlUG9zaXRpb246OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0CiAKICNlbmRpZgogCi1SZWZQdHI8
UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGVuZCkKLXsKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVs
bCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBQb3NpdGlvbiBzID0gc3Rh
cnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBQb3Np
dGlvbiBlID0gZW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7
Ci0gICAgaWYgKHMuaXNOdWxsKCkgfHwgZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7Ci0KLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLmNvbnRhaW5lck5vZGUoKS0+ZG9jdW1l
bnQoKSwgcy5jb250YWluZXJOb2RlKCksIHMub2Zmc2V0SW5Db250YWluZXJOb2RlKCksIGUuY29u
dGFpbmVyTm9kZSgpLCBlLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLX0KLQotVmlzaWJsZVBv
c2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZm
aW5pdHkpCi17Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihyLT5zdGFydFBvc2l0aW9uKCks
IGFmZmluaXR5KTsKLX0KLQotVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlvbihjb25z
dCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQotewotICAgIHJldHVybiBWaXNpYmxlUG9z
aXRpb24oci0+ZW5kUG9zaXRpb24oKSwgYWZmaW5pdHkpOwotfQotCi1ib29sIHNldFN0YXJ0KFJh
bmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCi17Ci0g
ICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRpb24gcCA9
IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpOwotICAgIGlmICghcC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiAhcmFuZ2UtPnNldFN0YXJ0KCpwLmNvbnRhaW5lck5vZGUoKSwgcC5vZmZz
ZXRJbkNvbnRhaW5lck5vZGUoKSkuaGFzRXhjZXB0aW9uKCk7Ci19Ci0KLWJvb2wgc2V0RW5kKFJh
bmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCi17Ci0g
ICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRpb24gcCA9
IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVu
dCgpOwotICAgIGlmICghcC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgIHJldHVybiAhcmFuZ2UtPnNldEVuZCgqcC5jb250YWluZXJOb2RlKCksIHAub2Zmc2V0
SW5Db250YWluZXJOb2RlKCkpLmhhc0V4Y2VwdGlvbigpOwotfQotCiAvLyBGSVhNRTogTWF5YmUg
dGhpcyBzaG91bGQgYmUgZGVwcmVjYXRlZCB0b28sIGxpa2UgdGhlIHVuZGVybHlpbmcgZnVuY3Rp
b24/CiBFbGVtZW50KiBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9WaXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBv
c2l0aW9uLmgKaW5kZXggOTFlZDRjYzBmMzQ0ODM0NzUyMmQ1ZDEyNmFlNDlmM2UyYzAxZTJkZi4u
MGI5ODNiMTkzYzlhMGI0Zjg1MjBhNGRmMjAyYTViMDYxNThhYzY1OSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC0xMjYsMTIgKzEyNiw2IEBAIGJvb2wgb3Bl
cmF0b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsK
IAogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5kYXJ5UG9p
bnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKLVdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5n
ZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQb3NpdGlv
biYpOwotYm9vbCBzZXRTdGFydChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwotYm9v
bCBzZXRFbmQoUmFuZ2UqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLVZpc2libGVQb3NpdGlv
biBzdGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVBZmZpbml0eSk7Ci1WaXNpYmxl
UG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5KTsKLQog
V0VCQ09SRV9FWFBPUlQgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChjb25zdCBW
aXNpYmxlUG9zaXRpb24mKTsKIAogYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5Ob2RlKGNv
bnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKQEAgLTE0OSw3ICsxNDMsNyBAQCBz
dHJ1Y3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgewogICAgIGJvb2wgaXNOdWxsKCkgY29uc3QgeyBy
ZXR1cm4gc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpOyB9CiB9OwogCi1PcHRpb25hbDxT
aW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJik7
CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNv
bnN0IFZpc2libGVQb3NpdGlvblJhbmdlJik7CiAKIC8vIGlubGluZXMKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGE4MDdmNTYzZTZlZDIwZWRlMDdhNzBkNDRj
YzFhZTVjMjcyMDQwYzEuLmEzMjliMTIxYTRjMzFkM2RlNGJjYzA1M2Y1NWE4ZWZkY2ZkYzc0ZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTQ4Niw3ICs0ODYs
NyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRSZXBlYXRlZENoYXJhY3RlcihWZWN0b3I8VUNoYXIsIDEw
MjQ+JiBidWZmZXIsIFVDaGFyIGNoYXJhY3RlcgogICAgICAgICBidWZmZXJbb2xkU2l6ZSArIGld
ID0gY2hhcmFjdGVyOwogfQogCi11bnNpZ25lZCBzdWZmaXhMZW5ndGhGb3JSYW5nZShjb25zdCBS
YW5nZSYgZm9yd2FyZHNTY2FuUmFuZ2UsIFZlY3RvcjxVQ2hhciwgMTAyND4mIHN0cmluZykKK3Vu
c2lnbmVkIHN1ZmZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBmb3J3YXJkc1Nj
YW5SYW5nZSwgVmVjdG9yPFVDaGFyLCAxMDI0PiYgc3RyaW5nKQogewogICAgIHVuc2lnbmVkIHN1
ZmZpeExlbmd0aCA9IDA7CiAgICAgVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3IoZm9yd2Fy
ZHNTY2FuUmFuZ2UpOwpAQCAtNTAyLDcgKzUwMiw3IEBAIHVuc2lnbmVkIHN1ZmZpeExlbmd0aEZv
clJhbmdlKGNvbnN0IFJhbmdlJiBmb3J3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFyLCAxMDI0
CiAgICAgcmV0dXJuIHN1ZmZpeExlbmd0aDsKIH0KIAotdW5zaWduZWQgcHJlZml4TGVuZ3RoRm9y
UmFuZ2UoY29uc3QgUmFuZ2UmIGJhY2t3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFyLCAxMDI0
PiYgc3RyaW5nKQordW5zaWduZWQgcHJlZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmIGJhY2t3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFyLCAxMDI0PiYgc3RyaW5nKQogewog
ICAgIHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDA7CiAgICAgU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihiYWNrd2FyZHNTY2FuUmFuZ2UpOwpAQCAtNTgw
LDc0ICs1ODAsNTAgQEAgdW5zaWduZWQgZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJ
dGVyYXRvcihUZXh0SXRlcmF0b3ImIGl0LCBWZWN0b3I8VUNoYXIKIH0KIAogZW51bSBjbGFzcyBO
ZWVkc0NvbnRleHRBdFBhcmFncmFwaFN0YXJ0IHsgWWVzLCBObyB9Owotc3RhdGljIFZpc2libGVQ
b3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91bmRh
cnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlvbiwKK3N0YXRpYyBWaXNpYmxlUG9zaXRpb24g
cHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBCb3VuZGFy
eVNlYXJjaEZ1bmN0aW9uIHNlYXJjaEZ1bmN0aW9uLAogICAgIE5lZWRzQ29udGV4dEF0UGFyYWdy
YXBoU3RhcnQgbmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydCA9IE5lZWRzQ29udGV4dEF0UGFy
YWdyYXBoU3RhcnQ6Ok5vKQogewotICAgIFBvc2l0aW9uIHBvcyA9IGMuZGVlcEVxdWl2YWxlbnQo
KTsKLSAgICBOb2RlKiBib3VuZGFyeSA9IHBvcy5wYXJlbnRFZGl0aW5nQm91bmRhcnkoKTsKKyAg
ICBhdXRvIGJvdW5kYXJ5ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRFZGl0aW5n
Qm91bmRhcnkoKTsKICAgICBpZiAoIWJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKCk7Ci0KLSAgICBEb2N1bWVudCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5k
b2N1bWVudCgpOwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKGJvdW5kYXJ5LCAwKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBQb3NpdGlv
biBlbmQgPSBwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0KLSAgICBpZiAoc3RhcnQu
aXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9u
KCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWY8UmFuZ2U+IHNlYXJjaFJhbmdlID0g
UmFuZ2U6OmNyZWF0ZShib3VuZGFyeURvY3VtZW50KTsKLSAgICAKICAgICBWZWN0b3I8VUNoYXIs
IDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBzdWZmaXhMZW5ndGggPSAwOwogCi0gICAgaWYg
KG5lZWRzQ29udGV4dEF0UGFyYWdyYXBoU3RhcnQgPT0gTmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhT
dGFydDo6WWVzICYmIGlzU3RhcnRPZlBhcmFncmFwaChjKSkgewotICAgICAgICBhdXRvIGZvcndh
cmRzU2NhblJhbmdlID0gYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAgICBh
dXRvIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGMpOwotICAgICAgICBh
dXRvIHJlc3VsdCA9IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmQoZW5kT2ZDdXJyZW50UGFyYWdy
YXBoLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigp
KQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmVzdWx0ID0gZm9yd2FyZHNTY2Fu
UmFuZ2UtPnNldFN0YXJ0KHN0YXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24o
KSkKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKCpib3VuZGFyeSksIHBvc2l0aW9uKTsKKyAgICBpZiAoIXNl
YXJjaFJhbmdlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKG5lZWRzQ29udGV4dEF0
UGFyYWdyYXBoU3RhcnQgPT0gTmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydDo6WWVzICYmIGlz
U3RhcnRPZlBhcmFncmFwaChwb3NpdGlvbikpIHsKKyAgICAgICAgYXV0byBmb3J3YXJkc1NjYW5S
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWFyY2hSYW5nZS0+c3RhcnQsIGVuZE9mUGFyYWdyYXBo
KHBvc2l0aW9uKSk7CisgICAgICAgIGlmICghZm9yd2FyZHNTY2FuUmFuZ2UpCiAgICAgICAgICAg
ICByZXR1cm4geyB9OwotICAgICAgICBmb3IgKFRleHRJdGVyYXRvciBmb3J3YXJkc0l0ZXJhdG9y
KGZvcndhcmRzU2NhblJhbmdlKTsgIWZvcndhcmRzSXRlcmF0b3IuYXRFbmQoKTsgZm9yd2FyZHNJ
dGVyYXRvci5hZHZhbmNlKCkpCisgICAgICAgIGZvciAoVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRl
cmF0b3IoKmZvcndhcmRzU2NhblJhbmdlKTsgIWZvcndhcmRzSXRlcmF0b3IuYXRFbmQoKTsgZm9y
d2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCiAgICAgICAgICAgICBhcHBlbmQoc3RyaW5nLCBmb3J3
YXJkc0l0ZXJhdG9yLnRleHQoKSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9IHN0cmluZy5zaXpl
KCk7Ci0gICAgfSBlbHNlIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkoYy5jaGFy
YWN0ZXJCZWZvcmUoKSkpIHsKLSAgICAgICAgYXV0byBmb3J3YXJkc1NjYW5SYW5nZSA9IGJvdW5k
YXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBmb3J3YXJk
c1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5KTsKLSAgICAgICAgaWYgKHJlc3VsdC5o
YXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJlc3VsdCA9
IGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFydCgqZW5kLmRlcHJlY2F0ZWROb2RlKCksIGVuZC5k
ZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgfSBlbHNlIGlmIChyZXF1aXJlc0Nv
bnRleHRGb3JXb3JkQm91bmRhcnkocG9zaXRpb24uY2hhcmFjdGVyQmVmb3JlKCkpKSB7CisgICAg
ICAgIGF1dG8gZm9yd2FyZHNTY2FuUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc2VhcmNoUmFuZ2Ut
PmVuZCwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqYm91bmRhcnkpKTsKICAg
ICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoRm9yUmFuZ2UoZm9yd2FyZHNTY2FuUmFu
Z2UsIHN0cmluZyk7CiAgICAgfQogCi0gICAgYXV0byByZXN1bHQgPSBzZWFyY2hSYW5nZS0+c2V0
U3RhcnQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zm
c2V0KCkpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgcmVzdWx0ID0gc2VhcmNoUmFuZ2UtPnNldEVuZCgqZW5kLmRlcHJlY2F0ZWROb2Rl
KCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICBpZiAocmVzdWx0Lmhhc0V4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgU2ltcGxpZmllZEJhY2t3YXJk
c1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZSk7CisgICAgU2ltcGxpZmllZEJhY2t3YXJkc1Rl
eHRJdGVyYXRvciBpdCgqc2VhcmNoUmFuZ2UpOwogICAgIHVuc2lnbmVkIG5leHQgPSBiYWNrd2Fy
ZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVyYXRvcihpdCwgc3RyaW5nLCBzdWZmaXhMZW5n
dGgsIHNlYXJjaEZ1bmN0aW9uKTsKIAogICAgIGlmICghbmV4dCkKLSAgICAgICAgcmV0dXJuIFZp
c2libGVQb3NpdGlvbihpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSA6
IHBvcywgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBpdC5hdEVuZCgpID8gY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKHNlYXJjaFJhbmdlLT5zdGFydCkgOiBwb3NpdGlvbjsKIAotICAg
IGF1dG8mIG5vZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCkg
OiBpdC5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKKyAgICBhdXRvJiBub2RlID0gKGl0
LmF0RW5kKCkgPyAqc2VhcmNoUmFuZ2UgOiBpdC5yYW5nZSgpKS5zdGFydC5jb250YWluZXIuZ2V0
KCk7CiAgICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIGlzPFRleHQ+KG5vZGUpICYmIG5leHQgPD0g
ZG93bmNhc3Q8VGV4dD4obm9kZSkubGVuZ3RoKCkpIHx8IChub2RlLnJlbmRlcmVyKCkgJiYgbm9k
ZS5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKSB7Ci0gICAgICAgIC8vIFRoZSBuZXh0IHZh
cmlhYmxlIGNvbnRhaW5zIGEgdXNhYmxlIGluZGV4IGludG8gYSB0ZXh0IG5vZGUKLSAgICAgICAg
cmV0dXJuIFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oJm5vZGUs
IG5leHQpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgLy8gVGhlIG5leHQgdmFyaWFibGUgY29udGFp
bnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZS4KKyAgICAgICAgcmV0dXJuIGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgbmV4dCk7CiAgICAgfQogCiAgICAgLy8gVXNl
IHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVlIGludG8g
YSBET00gcG9zaXRpb24uCi0gICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KHNl
YXJjaFJhbmdlKTsKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoKnNlYXJj
aFJhbmdlKTsKICAgICBpZiAobmV4dCA8IHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGgpCiAg
ICAgICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGggLSBuZXh0
KTsKICAgICAvLyBGSVhNRTogY2hhckl0IGNhbiBnZXQgb3V0IG9mIHNoYWRvdyBob3N0LgotICAg
IHJldHVybiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjaGFySXQucmFuZ2UoKS5lbmQp
LCBET1dOU1RSRUFNIH07CisgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihj
aGFySXQucmFuZ2UoKS5lbmQpOwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5leHRCb3Vu
ZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24gc2Vh
cmNoRnVuY3Rpb24pCkBAIC02NTgsMzAgKzYzNCwyOSBAQCBzdGF0aWMgVmlzaWJsZVBvc2l0aW9u
IG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoRnVu
YwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKICAgICBEb2N1bWVudCYgYm91
bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwotICAgIFJlZjxSYW5nZT4gc2Vh
cmNoUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgUG9zaXRpb24g
c3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKIAogICAgIFZlY3RvcjxVQ2hh
ciwgMTAyND4gc3RyaW5nOwogICAgIHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDA7CiAKICAgICBp
ZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQWZ0ZXIoKSkpIHsK
LSAgICAgICAgYXV0byBiYWNrd2FyZHNTY2FuUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50LmNyZWF0
ZVJhbmdlKCk7Ci0gICAgICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpKQotICAgICAgICAg
ICAgYmFja3dhcmRzU2NhblJhbmdlLT5zZXRFbmQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0
YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgICAgICBwcmVmaXhMZW5ndGggPSBw
cmVmaXhMZW5ndGhGb3JSYW5nZShiYWNrd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CisgICAgICAg
IGF1dG8gYmFja3dhcmRzU2NhblJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3VuZGFyeVBv
aW50QmVmb3JlTm9kZUNvbnRlbnRzKGJvdW5kYXJ5RG9jdW1lbnQpLCBjKTsKKyAgICAgICAgaWYg
KCFiYWNrd2FyZHNTY2FuUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICBw
cmVmaXhMZW5ndGggPSBwcmVmaXhMZW5ndGhGb3JSYW5nZSgqYmFja3dhcmRzU2NhblJhbmdlLCBz
dHJpbmcpOwogICAgIH0KIAotICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2RlQ29udGVudHMoKmJv
dW5kYXJ5KTsKLSAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkKLSAgICAgICAgc2VhcmNo
UmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXByZWNhdGVk
RWRpdGluZ09mZnNldCgpKTsKLSAgICBUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2UsIFRleHRJ
dGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICBh
dXRvIHNlYXJjaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGMsIG1ha2VCb3VuZGFyeVBvaW50QWZ0
ZXJOb2RlQ29udGVudHMoKmJvdW5kYXJ5KSk7CisgICAgaWYgKCFzZWFyY2hSYW5nZSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIFRleHRJdGVyYXRvciBpdCgqc2VhcmNoUmFuZ2UsIFRleHRJ
dGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICB1
bnNpZ25lZCBuZXh0ID0gZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVyYXRvcihp
dCwgc3RyaW5nLCBwcmVmaXhMZW5ndGgsIHNlYXJjaEZ1bmN0aW9uKTsKICAgICAKICAgICBpZiAo
aXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpCi0gICAgICAgIHBvcyA9IHNlYXJj
aFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBwb3MgPSBjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oc2VhcmNoUmFuZ2UtPmVuZCk7CiAgICAgZWxzZSBpZiAobmV4dCA+IHByZWZpeExl
bmd0aCkgewogICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xh
dGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICAgICAgQ2hhcmFjdGVy
SXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNC
ZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgICAgIENoYXJhY3Rlckl0ZXJhdG9yIGNo
YXJJdCgqc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxW
aXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgY2hhckl0LmFkdmFuY2UobmV4dCAtIHByZWZpeExl
bmd0aCAtIDEpOwogICAgICAgICBhdXRvIGNoYXJhY3RlclJhbmdlID0gY2hhckl0LnJhbmdlKCk7
CiAgICAgICAgIHBvcyA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjaGFyYWN0ZXJSYW5n
ZS5lbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMu
aCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggNDJlNjM3ODk1
ZWVjNzliZDhjMjJiNmRjNzg5NTQ3YTJiOGE5YWU5MC4uZjQ3NTFiN2Y1MDU5ZDQ4ZDEyMDUyNjkz
YzhmZGE5MjcxN2FmNTM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNp
YmxlVW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCkBA
IC0xMTgsOCArMTE4LDggQEAgdW5zaWduZWQgc3RhcnRXb3JkQm91bmRhcnkoU3RyaW5nVmlldywg
dW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGkKIHVuc2lnbmVkIGVuZFdv
cmRCb3VuZGFyeShTdHJpbmdWaWV3LCB1bnNpZ25lZCwgQm91bmRhcnlTZWFyY2hDb250ZXh0QXZh
aWxhYmlsaXR5LCBib29sJik7CiB1bnNpZ25lZCBzdGFydFNlbnRlbmNlQm91bmRhcnkoU3RyaW5n
VmlldywgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwgYm9vbCYp
OwogdW5zaWduZWQgZW5kU2VudGVuY2VCb3VuZGFyeShTdHJpbmdWaWV3LCB1bnNpZ25lZCwgQm91
bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5LCBib29sJik7Ci11bnNpZ25lZCBzdWZmaXhM
ZW5ndGhGb3JSYW5nZShjb25zdCBSYW5nZSYsIFZlY3RvcjxVQ2hhciwgMTAyND4mKTsKLXVuc2ln
bmVkIHByZWZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFJhbmdlJiwgVmVjdG9yPFVDaGFyLCAxMDI0
PiYpOwordW5zaWduZWQgc3VmZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmLCBW
ZWN0b3I8VUNoYXIsIDEwMjQ+Jik7Cit1bnNpZ25lZCBwcmVmaXhMZW5ndGhGb3JSYW5nZShjb25z
dCBTaW1wbGVSYW5nZSYsIFZlY3RvcjxVQ2hhciwgMTAyND4mKTsKIHVuc2lnbmVkIGJhY2t3YXJk
U2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKFNpbXBsaWZpZWRCYWNrd2FyZHNUZXh0
SXRlcmF0b3ImLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiwgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNo
RnVuY3Rpb24pOwogdW5zaWduZWQgZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVy
YXRvcihUZXh0SXRlcmF0b3ImLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiwgdW5zaWduZWQsIEJvdW5k
YXJ5U2VhcmNoRnVuY3Rpb24pOwogTm9kZSogZmluZFN0YXJ0T2ZQYXJhZ3JhcGgoTm9kZSosIE5v
ZGUqLCBOb2RlKiwgaW50JiwgUG9zaXRpb246OkFuY2hvclR5cGUmLCBFZGl0aW5nQm91bmRhcnlD
cm9zc2luZ1J1bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9E
YXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCmluZGV4IDE0ZmE2ODgyYzY3MzZjNzNmZDYzNDQwOGZlY2Q3OGE0MmRiYWE2ZDAuLjJh
NWRlZTgwMWIzNWY3NWJlNWJlZWU0ZTY1MmUxMTc3NTJhZmE1MzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTM1NSw3ICszNTUsNiBAQCBz
dGF0aWMgdm9pZCBidWlsZFF1ZXJ5KEREU2NhblF1ZXJ5UmVmIHNjYW5RdWVyeSwgY29uc3QgU2lt
cGxlUmFuZ2UmIGNvbnRleHRSYW5nZQogICAgIENGQ2hhcmFjdGVyU2V0UmVmIHdoaXRlU3BhY2Vz
U2V0ID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3RlclNldFdoaXRlc3Bh
Y2VBbmROZXdsaW5lKTsKICAgICBDRkNoYXJhY3RlclNldFJlZiBuZXdMaW5lc1NldCA9IENGQ2hh
cmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXROZXdsaW5lKTsKICAgICAKLSAg
ICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlOwogICAgIENGSW5kZXggaXRlcmF0b3JDb3VudCA9IDA7
CiAgICAgQ0ZJbmRleCBmcmFnbWVudENvdW50ID0gMDsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCBjOTMzNzNhZDM4NjBiNzFhMjdiODM2MGExYjRmOTM4
OWY2ZWY5M2JhLi4xNzhkMjc0ZmY1MDQwYTcxMTliMjI1MDA1MzBkZTBmZDcwMTg1Yzk5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC0yNjcsMTQgKzI2NywxMyBA
QCB2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQoY29uc3Qg
VmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZAogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
UmVmUHRyPFJhbmdlPiBjb250ZXh0ID0gZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwotICAgIGNv
bnRleHQtPnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTsKKyAgICBhdXRvIGNvbnRleHQgPSBt
YWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZWxlbWVudCk7CiAKICAgICBTdHJpbmdCdWls
ZGVyIGRpY3RhdGlvblBocmFzZXNCdWlsZGVyOwogICAgIGZvciAoYXV0byYgaW50ZXJwcmV0YXRp
b25zIDogZGljdGF0aW9uUGhyYXNlcykKICAgICAgICAgZGljdGF0aW9uUGhyYXNlc0J1aWxkZXIu
YXBwZW5kKGludGVycHJldGF0aW9uc1swXSk7CiAKLSAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNy
ZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvbnRleHQsIGRpY3RhdGlvblBocmFzZXNCdWlsZGVyLnRv
U3RyaW5nKCkpKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoY29udGV4dCwgZGljdGF0aW9uUGhyYXNlc0J1aWxkZXIudG9TdHJpbmcoKSkpOwogCiAgICAg
YXV0byB3ZWFrRWxlbWVudCA9IG1ha2VXZWFrUHRyKGVsZW1lbnQpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggNTllYTRmYmY3ZTllNTUyZDI5NzcxYmIyNWYwNjVkZTEw
M2NkYjEzNS4uM2IxNjIzYTliMGVhMDg5NzE4ZDQ4MmVjNmY2ODE5NjEyNWI1MWE3OCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzA5LDcgKzMwOSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxSYW5nZT4+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCh1bnNpZ25lZCBpbmRleCkK
ICAgICBpZiAoYXV0byogc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNlc3Rvcigq
ZnJhbWUpKSB7CiAgICAgICAgIGF1dG8qIGNvbnRhaW5lciA9IHNoYWRvd0FuY2VzdG9yLT5wYXJl
bnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNldCA9IHNo
YWRvd0FuY2VzdG9yLT5jb21wdXRlTm9kZUluZGV4KCk7Ci0gICAgICAgIHJldHVybiBSYW5nZTo6
Y3JlYXRlKHNoYWRvd0FuY2VzdG9yLT5kb2N1bWVudCgpLCBjb250YWluZXIsIG9mZnNldCwgY29u
dGFpbmVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1ha2VTaW1w
bGVSYW5nZShCb3VuZGFyeVBvaW50IHsgKmNvbnRhaW5lciwgb2Zmc2V0IH0pKTsKICAgICB9CiAK
ICAgICBhdXRvIGZpcnN0UmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZmly
c3RSYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29udHJvbGxl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRleCA1NjZk
NWQ0NjkzMDllYjhjNjMzNWUwMmEyZWMxNzBiMWM2MjExYTZmLi42NWI1MzgwMGNlYWEzZDg1ZTc1
NmJhYmJkZTA2NDk0OTdiMDc5Yjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVy
LmNwcApAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5zZXJ0RHJv
cHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4KICAgICBh
dXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1bWVudCwg
V1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0
aW5nLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlIH0sIEVkaXRBY3Rpb246
Okluc2VydEZyb21Ecm9wKTsKICAgICBjb21tYW5kLT5hcHBseSgpOwogCi0gICAgYXV0byBpbnNl
cnRlZENvbnRlbnRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb21tYW5kLT5pbnNlcnRlZENvbnRl
bnRSYW5nZSgpKTsKKyAgICBhdXRvIGluc2VydGVkQ29udGVudFJhbmdlID0gY29tbWFuZC0+aW5z
ZXJ0ZWRDb250ZW50UmFuZ2UoKTsKICAgICBpZiAoIWluc2VydGVkQ29udGVudFJhbmdlKSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCmluZGV4IDY0MTA1NDhkNDIyMjM3N2MxNDEzODYxY2I1ZDkwMjQyNTNkZWQ3MzAuLjg5
N2ZmMDQzZDNjMzc0NTZkYmI1MDQwNmNkZjBjZmM4ZDc4YzkwOTIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwCkBAIC04MTYsMjUgKzgxNiwyNSBAQCBEb2N1bWVudCogRnJhbWU6OmRvY3VtZW50QXRQb2lu
dChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAgICAgcmV0dXJuIHJlc3VsdC5pbm5lck5vZGUoKSA/
ICZyZXN1bHQuaW5uZXJOb2RlKCktPmRvY3VtZW50KCkgOiAwOwogfQogCi1SZWZQdHI8UmFuZ2U+
IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KQorT3B0aW9u
YWw8U2ltcGxlUmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFt
ZVBvaW50KQogewogICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChm
cmFtZVBvaW50KTsKIAogICAgIGF1dG8gY29udGFpbmVyVGV4dCA9IHBvc2l0aW9uLmRlZXBFcXVp
dmFsZW50KCkuY29udGFpbmVyVGV4dCgpOwogICAgIGlmICghY29udGFpbmVyVGV4dCB8fCAhY29u
dGFpbmVyVGV4dC0+cmVuZGVyZXIoKSB8fCBjb250YWluZXJUZXh0LT5yZW5kZXJlcigpLT5zdHls
ZSgpLnVzZXJTZWxlY3QoKSA9PSBVc2VyU2VsZWN0OjpOb25lKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChhdXRvIHByZXZp
b3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24ucHJldmlvdXMoKSwg
cG9zaXRpb24pKSB7CiAgICAgICAgIGlmIChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5nZSgqcHJl
dmlvdXNDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQb2ludCkpCi0gICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpwcmV2aW91c0NoYXJhY3RlclJhbmdlKTsKKyAgICAgICAg
ICAgIHJldHVybiAqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZTsKICAgICB9CiAKICAgICBpZiAoYXV0
byBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIHBvc2l0aW9u
Lm5leHQoKSkpIHsKICAgICAgICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdlKCpuZXh0
Q2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxpdmVSYW5nZSgqbmV4dENoYXJhY3RlclJhbmdlKTsKKyAgICAgICAgICAgIHJldHVy
biAqbmV4dENoYXJhY3RlclJhbmdlOwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRyOworICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgRnJhbWU6OmNyZWF0ZVZpZXcoY29uc3Qg
SW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBPcHRpb25hbDxDb2xvcj4mIGJhY2tncm91bmRD
b2xvciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA0NTQ0MGFjMWFhZjA3MzcxYzM1MmYxOGRiNDE2OTYx
ZjhmMTQxYjYyLi43OGFmNGJmNDI4YWRkM2M4MTZmMWZjNTIwZGM0MzkwNGRkNDNjODdlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oCkBAIC04OSw3ICs4OSw2IEBAIGNsYXNzIEludFNpemU7CiBjbGFzcyBOYXZp
Z2F0aW9uU2NoZWR1bGVyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7Ci1jbGFzcyBSYW5nZTsK
IGNsYXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyVmlldzsKIGNsYXNzIFJlbmRlcldpZGdl
dDsKQEAgLTk5LDYgKzk4LDggQEAgY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBWaXNpYmxlUG9zaXRp
b247CiBjbGFzcyBXaWRnZXQ7CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogI2lmIFBMQVRGT1JN
KElPU19GQU1JTFkpCiBlbnVtIHsKICAgICBPdmVyZmxvd1Njcm9sbE5vbmUgPSAwLApAQCAtMjY4
LDcgKzI2OSw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQb3NpdGlv
biB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCkgY29u
c3Q7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYgd2luZG93
UG9pbnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQb2ludChj
b25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8
U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpOwog
CiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2VsbChjb25z
dCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiwgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqLCBz
aXplX3QqIHJlc3VsdERpc3RhbmNlRnJvbVN0YXJ0T2ZDZWxsKTsKICAgICBTdHJpbmcgc2VhcmNo
Rm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxzLCBFbGVt
ZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZSwgYm9vbCogcmVzdWx0SXNJbkNlbGxBYm92ZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDU4OThiZTcwYjNmYTIzNWM5MDg4
YjQzYTc2ZDcyOTdiMWZkMjQ3MGYuLmY2OGNhYzQyODFlNjU3NzcwNDlmYzk4ZGIyODJlOWI1MzI2
NDE1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC03MjMsOCArNzIzLDcg
QEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QK
ICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGF1dG8qIHJvb3QgPSBzZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24g
PyBkb2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgpIDogc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIHVuc2lnbmVkIHJvb3RDaGlsZENvdW50ID0gcm9v
dC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAgYXV0byByYW5nZU9mUm9vdENvbnRlbnRzID0gUmFu
Z2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3Qs
IDApLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocm9vdCwgcm9vdENoaWxkQ291bnQpKTsK
KyAgICBhdXRvIHJhbmdlT2ZSb290Q29udGVudHMgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29u
dGVudHMoKnJvb3QpOwogCiAgICAgYXV0byBtYXJrZXJzSW5Sb290ID0gZG9jdW1lbnQoKS0+bWFy
a2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZSb290Q29udGVudHMsIERvY3VtZW50TWFya2Vy
OjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzKTsKIApAQCAtNzQ1LDI5ICs3NDQsMjMg
QEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QK
IAogICAgIHVuc2lnbmVkIGNvbWJpbmF0aW9uc1NvRmFyID0gMTsKIAotICAgIE5vZGUqIHBhc3RM
YXN0Tm9kZSA9IHJhbmdlT2ZSb290Q29udGVudHMtPnBhc3RMYXN0Tm9kZSgpOwotICAgIGZvciAo
Tm9kZSogbm9kZSA9IHJhbmdlT2ZSb290Q29udGVudHMtPmZpcnN0Tm9kZSgpOyBub2RlICE9IHBh
c3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0gICAgICAg
IEFTU0VSVChub2RlKTsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBkb2N1bWVudCgpLT5t
YXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMpKSB7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJzZWN0aW5n
Tm9kZXMocmFuZ2VPZlJvb3RDb250ZW50cykpIHsKKyAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIg
OiBkb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBEb2N1bWVudE1hcmtlcjo6
RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpIHsKICAgICAgICAgICAgIGF1dG8mIGFs
dGVybmF0aXZlcyA9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSk7CiAK
LSAgICAgICAgICAgIC8vIEZpcnN0LCBhZGQgdGV4dCB0aGF0IHByZWNlZGUgdGhlIG1hcmtlci4K
LSAgICAgICAgICAgIGlmIChwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiAhPSBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpKSkgewotICAgICAg
ICAgICAgICAgIGF1dG8gcHJlY2VkaW5nVGV4dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1l
bnQoKSwgcHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAgICBTdHJp
bmcgcHJlY2VkaW5nVGV4dCA9IHBsYWluVGV4dChwcmVjZWRpbmdUZXh0UmFuZ2UpOworICAgICAg
ICAgICAgYXV0byByYW5nZUZvck1hcmtlciA9IHJhbmdlKG5vZGUsICptYXJrZXIpOworCisgICAg
ICAgICAgICBpZiAoYXV0byBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJl
Y2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIHJhbmdlRm9yTWFya2VyLnN0YXJ0KSkgeworICAgICAg
ICAgICAgICAgIFN0cmluZyBwcmVjZWRpbmdUZXh0ID0gcGxhaW5UZXh0KCpwcmVjZWRpbmdUZXh0
UmFuZ2UpOwogICAgICAgICAgICAgICAgIGlmICghcHJlY2VkaW5nVGV4dC5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbiA6IGludGVycHJl
dGF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbiwg
cHJlY2VkaW5nVGV4dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAg
ICAgICAgICBhdXRvIHJhbmdlRm9yTWFya2VyID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwg
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSks
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKSk7
CiAgICAgICAgICAgICBTdHJpbmcgdmlzaWJsZVRleHRGb3JNYXJrZXIgPSBwbGFpblRleHQocmFu
Z2VGb3JNYXJrZXIpOwogICAgICAgICAgICAgc2l6ZV90IGludGVycHJldGF0aW9uc0NvdW50Rm9y
Q3VycmVudE1hcmtlciA9IGFsdGVybmF0aXZlcy5zaXplKCkgKyAxOwogICAgICAgICAgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBpbnRlcnByZXRhdGlvbnNDb3VudDsgKytpKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gRGV0ZXJtaW5lIHRleHQgZm9yIHRoZSBpdGggaW50ZXJwcmV0YXRpb24uIEl0
IHdpbGwgZWl0aGVyIGJlIHRoZSB2aXNpYmxlIHRleHQsIG9yIG9uZSBvZiBpdHMKLSAgICAgICAg
ICAgICAgICAvLyBhbHRlcm5hdGl2ZXMgc3RvcmVkIGluIHRoZSBtYXJrZXIuCi0KICAgICAgICAg
ICAgICAgICBzaXplX3QgaW5kZXhPZkludGVycHJldGF0aW9uRm9yQ3VycmVudE1hcmtlciA9IChp
IC8gY29tYmluYXRpb25zU29GYXIpICUgaW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50TWFy
a2VyOwogICAgICAgICAgICAgICAgIGlmICghaW5kZXhPZkludGVycHJldGF0aW9uRm9yQ3VycmVu
dE1hcmtlcikKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKGludGVycHJldGF0aW9uc1tpXSwg
dmlzaWJsZVRleHRGb3JNYXJrZXIpOwpAQCAtNzc3LDE2ICs3NzAsMTcgQEAgTlNBcnJheSAqRnJh
bWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKIAogICAgICAgICAgICAg
Y29tYmluYXRpb25zU29GYXIgKj0gaW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50TWFya2Vy
OwogCi0gICAgICAgICAgICBwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiA9IGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKTsKKyAgICAgICAgICAg
IHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJhbmdlRm9yTWFya2VyLmVuZCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBGaW5hbGx5
LCBhZGQgYW55IHRleHQgYWZ0ZXIgdGhlIGxhc3QgbWFya2VyLgotICAgIGF1dG8gYWZ0ZXJMYXN0
TWFya2VyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBwcmVjZWRpbmdUZXh0U3Rh
cnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIHJvb3RDaGlsZENv
dW50KSk7Ci0gICAgU3RyaW5nIHRleHRBZnRlckxhc3RNYXJrZXIgPSBwbGFpblRleHQoYWZ0ZXJM
YXN0TWFya2VyUmFuZ2UpOwotICAgIGlmICghdGV4dEFmdGVyTGFzdE1hcmtlci5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbiA6IGludGVycHJldGF0aW9ucykK
LSAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbiwgdGV4dEFmdGVyTGFzdE1hcmtlcik7
CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2VkaW5nVGV4dFN0YXJ0
UG9zaXRpb24sIHJhbmdlT2ZSb290Q29udGVudHMuZW5kKSkgeworICAgICAgICBTdHJpbmcgdGV4
dEFmdGVyTGFzdE1hcmtlciA9IHBsYWluVGV4dCgqcmFuZ2UpOworICAgICAgICBpZiAoIXRleHRB
ZnRlckxhc3RNYXJrZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8mIGludGVy
cHJldGF0aW9uIDogaW50ZXJwcmV0YXRpb25zKQorICAgICAgICAgICAgICAgIGFwcGVuZChpbnRl
cnByZXRhdGlvbiwgdGV4dEFmdGVyTGFzdE1hcmtlcik7CisgICAgICAgIH0KICAgICB9CiAKICAg
ICByZXR1cm4gY3JlYXRlTlNBcnJheShpbnRlcnByZXRhdGlvbnMsIFtdIChhdXRvJiBpbnRlcnBy
ZXRhdGlvbikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMu
Y3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDY5YTE0Y2M3
Y2U1MjY0MTBkYjk5ODMzODBhYmVjNWUyMDk2NjEwMzIuLmQ0N2YyNjE3ZWJkMGViOTdiZjMxM2Vk
NjZjM2Q4ZGUyNDI0ZTQwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAg
LTE3NzUsNyArMTc3NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxSYW5nZT4+IEludGVybmFsczo6
bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluCiAgICAgYXV0byBtYXJr
ZXIgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgaWYgKCFtYXJrZXIpCiAgICAg
ICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBSZWZQdHI8UmFuZ2U+IHsgUmFuZ2U6OmNy
ZWF0ZShub2RlLmRvY3VtZW50KCksICZub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksICZub2Rl
LCBtYXJrZXItPmVuZE9mZnNldCgpKSB9OworICAgIHJldHVybiB7IGNyZWF0ZUxpdmVSYW5nZShy
YW5nZShub2RlLCAqbWFya2VyKSkgfTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBJbnRlcm5h
bHM6Om1hcmtlckRlc2NyaXB0aW9uRm9yTm9kZShOb2RlJiBub2RlLCBjb25zdCBTdHJpbmcmIG1h
cmtlclR5cGUsIHVuc2lnbmVkIGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92
ZXJsYXkuY3BwCmluZGV4IDY5ZjdhZjIyYjU2NzUwNGQ0ZjMxZjBkN2E3MGI4NzRlMDlmYTU1YTIu
LjM1YjY2NDcyZTc3MDU3Y2NlZmU5M2RmOGZkYTk1M2QwZDQxOTZhYzQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VP
dmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
QVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTEyOCwxOSArMTI4LDE3IEBAIHByaXZh
dGU6CiAgICAgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIEREQWN0aW9uQ29udGV4dCAqYWN0
aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFnZU92
ZXJsYXksIFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIFJlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4mIHJhbmdlSGFuZGxlKSBvdmVycmlkZQorICAgIE9wdGlvbmFsPFdlYktpdDo6V2ViUGFnZU92
ZXJsYXk6OkFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KFdlYktp
dDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0
aW9uKSBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKG1fY2xpZW50LmFjdGlvbkNvbnRleHRGb3JS
ZXN1bHRBdFBvaW50KSB7Ci0gICAgICAgICAgICBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGFwaVJh
bmdlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIEREQWN0aW9uQ29udGV4dCAqYWN0aW9uQ29udGV4
dCA9IChEREFjdGlvbkNvbnRleHQgKiltX2NsaWVudC5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQ
b2ludCh0b0FQSSgmcGFnZU92ZXJsYXkpLCBXS1BvaW50TWFrZShsb2NhdGlvbi54KCksIGxvY2F0
aW9uLnkoKSksICZhcGlSYW5nZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAgICAgICAg
aWYgKCFtX2NsaWVudC5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCkKKyAgICAgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIGlmIChhcGlSYW5nZSkKLSAgICAg
ICAgICAgICAgICByYW5nZUhhbmRsZSA9ICZXZWJLaXQ6OnRvSW1wbChhcGlSYW5nZSktPmNvcmVS
YW5nZSgpOworICAgICAgICBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGFwaVJhbmdlID0gbnVsbHB0
cjsKKyAgICAgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gKEREQWN0aW9uQ29udGV4dCAqKW1fY2xp
ZW50LmFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KHRvQVBJKCZwYWdlT3ZlcmxheSksIFdL
UG9pbnRNYWtlKGxvY2F0aW9uLngoKSwgbG9jYXRpb24ueSgpKSwgJmFwaVJhbmdlLCBtX2NsaWVu
dC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBpZiAoIWFjdGlvbkNvbnRleHQgfHwgIWFwaVJh
bmdlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICAgICAgcmV0
dXJuIGFjdGlvbkNvbnRleHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmlsOworICAg
ICAgICByZXR1cm4geyB7IGFjdGlvbkNvbnRleHQsIFdlYktpdDo6dG9JbXBsKGFwaVJhbmdlKS0+
Y29yZVJhbmdlKCkgfSB9OwogICAgIH0KIAogICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZFByZXNl
bnRVSShXZWJLaXQ6OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSkgb3ZlcnJpZGUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJ
L21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IDFiNmJiNzdlY2E3ZTZlYzBmMWY2MWU4NzIxMmM0YzQ1
ZjY5NmI2NjQuLmEzOWM2NDJlZDJiZjM5MTY4OWNlMjcwMDlmNjA3NzVhMTYzZjM2MDQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvbWFjL1dL
RE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxl
L0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtNDksMTIgKzQ5LDcgQEAgLSAoaWQpX2luaXRXaXRo
SW1wbDooV2ViQ29yZTo6UmFuZ2UqKWltcGwKIAogLSAoaWQpaW5pdFdpdGhEb2N1bWVudDooV0tE
T01Eb2N1bWVudCAqKWRvY3VtZW50CiB7Ci0gICAgYXV0byByYW5nZSA9IFdlYkNvcmU6OlJhbmdl
OjpjcmVhdGUoKldlYktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1lbnQpKTsKLSAgICBzZWxm
ID0gW3NlbGYgX2luaXRXaXRoSW1wbDpyYW5nZS5wdHIoKV07Ci0gICAgaWYgKCFzZWxmKQotICAg
ICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7CisgICAgcmV0dXJuIFtzZWxmIF9p
bml0V2l0aEltcGw6V2ViS2l0Ojp0b1dlYkNvcmVEb2N1bWVudChkb2N1bWVudCktPmNyZWF0ZVJh
bmdlKCkucHRyKCldOwogfQogCiAtICh2b2lkKWRlYWxsb2MKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFu
ZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5q
ZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAppbmRleCBkMzg3YWRiNjRkZDBkYTZiMjdlNGJmMWMw
NjdkNTFiZTk4NWY5YWQxLi4wMWMxNTRkNzU3YTEwMTM2M2FmZGVjOTc1NTMwMDBjMjI0MDhkYTgy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvRE9N
L0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwCkBAIC01
MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3NpdGlvbi5oPgogI2luY2x1ZGUgPFdl
YkNvcmUvUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlck9iamVjdC5oPgorI2luY2x1
ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2libGVQb3Np
dGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CkBAIC0yMzQsMTIgKzIzNSw5IEBAIFJlZlB0cjxJbmplY3RlZEJ1bmRsZVJhbmdl
SGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnZpc2libGVSYW5nZSgpCiB7CiAgICAg
aWYgKCFtX25vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgVmlzaWJsZVBvc2l0
aW9uIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluTm9kZShtX25vZGUuZ2V0KCkpOwogICAgIFZpc2li
bGVQb3NpdGlvbiBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9ub2RlLmdldCgpKTsKLQotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7Ci0gICAgcmV0dXJu
IEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlLmdldCgpKTsKKyAg
ICByZXR1cm4gY3JlYXRlSGFuZGxlKG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSk7CiB9CiAK
IHZvaWQgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpzZXRIVE1MSW5wdXRFbGVtZW50VmFsdWVG
b3JVc2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eS5oCmluZGV4IDRmZjRlMWE0ODU2NzlkYmJiODgxOGIyOWI1ZWFjMTJmOGMyZWYxMmEu
LmNiMjM4OWZjMGRiMGZiMTgwMGY2MWFkOWY0MGY4MWEyNDkzMWU1YjMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xs
ZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1Rl
eHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAi
Q29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdSYW5nZS5oIgogI2luY2x1ZGUgIk1lc3Nh
Z2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbmNsdWRl
IDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTksNyArNjAsNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpE
ZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICBzdHJ1Y3QgUmFuZ2VBbmRPZmZzZXQgewotICAgICAg
ICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlOworICAgICAgICBXZWJDb3JlOjpTaW1wbGVS
YW5nZSByYW5nZTsKICAgICAgICAgc2l6ZV90IGxvY2F0aW9uSW5Sb290OyAgICAKICAgICB9Owog
ICAgIE9wdGlvbmFsPFJhbmdlQW5kT2Zmc2V0PiByYW5nZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxl
Y3Rpb24oaW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVy
UHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hl
Y2tpbmdDb250cm9sbGVyUHJveHkubW0KaW5kZXggNjZlM2Q5OTU3ZWRiOWFmMzM2NDk4MzE0NGU3
NGExMDNjMjhlZGUzZS4uNzhmMWRkMTA5NTcxMDVlMjE1NjZhODIzZjJhMjUwYzU4OTYxM2IwNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENo
ZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQpAQCAtOTEsNyArOTEs
NyBAQCBPcHRpb25hbDxUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OlJhbmdlQW5kT2Zmc2V0
PiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveAogICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogICAgIGF1dG8gYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSA9IENoYXJhY3RlclJh
bmdlIHsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFkanVzdGVkU3RhcnRMb2NhdGlvbiksIGxlbmd0
aCB9OwogCi0gICAgcmV0dXJuIHsgeyBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJh
bmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlKSksIGFkanVzdGVkU2Vs
ZWN0aW9uQ2hhcmFjdGVyUmFuZ2UubG9jYXRpb24gfSB9OworICAgIHJldHVybiB7IHsgcmVzb2x2
ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlKSwg
YWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZS5sb2NhdGlvbiB9IH07CiB9CiAKIHZvaWQg
VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihj
b25zdCBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nJiBhbm5vdGF0ZWRTdHJpbmcsIGludDY0X3Qg
c2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IHJlbGF0aXZlUmVwbGFj
ZW1lbnRMb2NhdGlvbiwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVudExlbmd0aCkKQEAgLTEw
NSwzMCArMTA1LDIxIEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNl
UmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpBdHRyCiAgICAgYXV0byByYW5nZUFu
ZE9mZnNldCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihzZWxlY3Rpb25PZmZz
ZXQsIGxlbmd0aCk7CiAgICAgaWYgKCFyYW5nZUFuZE9mZnNldCkKICAgICAgICAgcmV0dXJuOwot
ICAgIGF1dG8gcmFuZ2UgPSByYW5nZUFuZE9mZnNldC0+cmFuZ2U7Ci0gICAgaWYgKCFyYW5nZSkK
LSAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbG9jYXRpb25JblJvb3QgPSByYW5nZUFuZE9mZnNl
dC0+bG9jYXRpb25JblJvb3Q7CiAKICAgICBhdXRvJiBtYXJrZXJzID0gZnJhbWUuZG9jdW1lbnQo
KS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygqcmFuZ2UsIHJlbGV2YW50
TWFya2VyVHlwZXMoKSk7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlQW5kT2Zmc2V0
LT5yYW5nZSwgcmVsZXZhbnRNYXJrZXJUeXBlcygpKTsKIAogICAgIGlmIChyZWxhdGl2ZVJlcGxh
Y2VtZW50TG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICBhdXRvIHJhbmdlQW5kT2Zm
c2V0T2ZSZXBsYWNlbWVudCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihzZWxl
Y3Rpb25PZmZzZXQgKyByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHJlbGF0aXZlUmVwbGFj
ZW1lbnRMZW5ndGgpOwotICAgICAgICBpZiAocmFuZ2VBbmRPZmZzZXRPZlJlcGxhY2VtZW50KSB7
Ci0gICAgICAgICAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSByYW5nZUFuZE9mZnNldE9mUmVw
bGFjZW1lbnQtPnJhbmdlOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2UpIHsKLSAg
ICAgICAgICAgICAgICBib29sIHJlc3RvcmVTZWxlY3Rpb24gPSBmcmFtZVNlbGVjdGlvbi5zZWxl
Y3Rpb24oKS5pc1JhbmdlKCk7Ci0KLSAgICAgICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5yZXBs
YWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKCpyZXBsYWNlbWVudFJhbmdlLCBbW2Fubm90YXRlZFN0
cmluZy5zdHJpbmcgc3RyaW5nXSBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2UocmVsYXRp
dmVSZXBsYWNlbWVudExvY2F0aW9uLCByZWxhdGl2ZVJlcGxhY2VtZW50TGVuZ3RoICsgW2Fubm90
YXRlZFN0cmluZy5zdHJpbmcgbGVuZ3RoXSAtIGxlbmd0aCldKTsKLQotICAgICAgICAgICAgICAg
IGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IHNl
bGVjdGlvbkxvY2F0aW9uVG9SZXN0b3JlID0gbG9jYXRpb25JblJvb3QgLSBzZWxlY3Rpb25PZmZz
ZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Mb2NhdGlvblRvUmVzdG9yZSA+
IGxvY2F0aW9uSW5Sb290ICsgcmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9uICsgcmVsYXRpdmVS
ZXBsYWNlbWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBzZWxlY3Rp
b25Ub1Jlc3RvcmUgPSBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VS
YW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIHsgc2VsZWN0aW9uTG9jYXRpb25Ub1Jl
c3RvcmUsIDAgfSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW92
ZVRvKHNlbGVjdGlvblRvUmVzdG9yZS5wdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJhbmdlQW5kT2Zmc2V0T2ZSZXBsYWNl
bWVudCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihzZWxlY3Rpb25PZmZzZXQg
KyByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgp
KSB7CisgICAgICAgICAgICBib29sIHJlc3RvcmVTZWxlY3Rpb24gPSBmcmFtZVNlbGVjdGlvbi5z
ZWxlY3Rpb24oKS5pc1JhbmdlKCk7CisKKyAgICAgICAgICAgIGZyYW1lLmVkaXRvcigpLnJlcGxh
Y2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcocmFuZ2VBbmRPZmZzZXRPZlJlcGxhY2VtZW50LT5yYW5n
ZSwgW1thbm5vdGF0ZWRTdHJpbmcuc3RyaW5nIHN0cmluZ10gc3Vic3RyaW5nV2l0aFJhbmdlOk5T
TWFrZVJhbmdlKHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgcmVsYXRpdmVSZXBsYWNlbWVu
dExlbmd0aCArIFthbm5vdGF0ZWRTdHJpbmcuc3RyaW5nIGxlbmd0aF0gLSBsZW5ndGgpXSk7CisK
KyAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7CisgICAgICAgICAgICAgICAgdWlu
dDY0X3Qgc2VsZWN0aW9uTG9jYXRpb25Ub1Jlc3RvcmUgPSBsb2NhdGlvbkluUm9vdCAtIHNlbGVj
dGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uTG9jYXRpb25Ub1Jlc3Rv
cmUgPiBsb2NhdGlvbkluUm9vdCArIHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiArIHJlbGF0
aXZlUmVwbGFjZW1lbnRMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9u
LnNldFNlbGVjdGlvbihyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9k
ZUNvbnRlbnRzKCpyb290KSwgeyBzZWxlY3Rpb25Mb2NhdGlvblRvUmVzdG9yZSwgMCB9KSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjEsMTMgKzE1MiwxMCBAQCB2b2lk
IFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0aXZlVG9T
ZWxlY3Rpb24oY29uc3QgU3RyaQogICAgIGF1dG8gcmFuZ2VBbmRPZmZzZXQgPSByYW5nZUFuZE9m
ZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oc2VsZWN0aW9uT2Zmc2V0LCBsZW5ndGgpOwogICAgIGlm
ICghcmFuZ2VBbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIHJhbmdlID0gcmFu
Z2VBbmRPZmZzZXQtPnJhbmdlOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVybjsKIAog
ICAgIGF1dG8gcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IGFubm90YXRpb24gPT0gIk5TU3Bl
bGxpbmdTdGF0ZSI7CiAgICAgYXV0byB0eXBlcyA9IHJlbW92ZUNvcmVTcGVsbGluZ01hcmtlcnMg
PyByZWxldmFudE1hcmtlclR5cGVzKCkgOiBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZv
cm1UZXh0Q2hlY2tpbmc7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJz
KCpyYW5nZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CisgICAgbV9wYWdl
LmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3Vt
ZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKHJhbmdlQW5kT2Zmc2V0LT5yYW5nZSwgWyZd
IChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CiAgICAgICAgIGlmICghV1RGOjpob2xk
c19hbHRlcm5hdGl2ZTxXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0Q2hlY2tp
bmdEYXRhPihtYXJrZXIuZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgcmV0dXJuIFdURjo6Z2V0PFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpQbGF0Zm9ybVRleHRD
aGVja2luZ0RhdGE+KG1hcmtlci5kYXRhKCkpLmtleSAhPSBhbm5vdGF0aW9uOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAyZGM1MDVjZmRiMTNi
MDAzMmZkYTU0OWUwYzlkNWQ2NzI3MmI0MWViLi4yNzQyZjEzZWNmMzZkNjBjY2ZkNjdhM2ZkMjE1
NDc1YjAwNjRmODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmNwcApAQCAtNTQ1Miw3ICs1NDUyLDcgQEAgdm9pZCBXZWJQYWdlOjpjaGFyYWN0ZXJJbmRl
eEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBDYWxsYmEKICAg
ICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuaGl0VGVz
dFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOwogICAgIGF1dG8mIGZyYW1lID0gcmVzdWx0
LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVGcmFtZSgpIDogbV9wYWdl
LT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRvIHJhbmdl
ID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5vZGVGcmFt
ZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZy
YW1lLCBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKKyAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVk
aXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZSk7CiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKGVkaXRpbmdSYW5nZS5sb2NhdGlvbiwgY2Fs
bGJhY2tJRCkpOwogfQogCkBAIC01NTMzLDExICs1NTMzLDExIEBAIHZvaWQgV2ViUGFnZTo6ZGVs
ZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlckNvdW50KQog
ICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpOwotICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VSYW5nZShzdGFy
dE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOworICAg
IGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mRWRpdGFibGVD
b250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOwogICAgIGlmICghc3Vycm91
bmRpbmdSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcm9vdE5vZGUgPSBzdXJy
b3VuZGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7Cisg
ICAgYXV0byYgcm9vdE5vZGUgPSBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydC5jb250YWluZXItPnRy
ZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAgICAgYXV0byBjaGFyYWN0ZXJSYW5nZSA9IFdlYkNvcmU6
OkNoYXJhY3RlclJhbmdlKFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KCpzdXJyb3VuZGluZ1Jhbmdl
KSArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBy
ZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKHJvb3RO
b2RlKSwgY2hhcmFjdGVyUmFuZ2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKaW5kZXggZDFlMDk5YmJlZmVjYjFjMTI3MzYz
NDY3YWQ1YjE3Zjk5N2EyOGU5Mi4uMWJiZmU1YjliODM2NjM3MWNjMDQzZWIyNmY0NzBiYzc0NThi
YzFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2VPdmVybGF5LmNwcApAQCAtMTA5LDkgKzEwOSw5IEBAIHZvaWQgV2ViUGFnZU92ZXJsYXk6OmRp
ZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5JiwgRnJhbWUmIGZyYW1lKQogfQogCiAjaWYgUExBVEZP
Uk0oTUFDKQotRERBY3Rpb25Db250ZXh0ICpXZWJQYWdlT3ZlcmxheTo6YWN0aW9uQ29udGV4dEZv
clJlc3VsdEF0UG9pbnQoRmxvYXRQb2ludCBsb2NhdGlvbiwgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiYgcmFuZ2VIYW5kbGUpCithdXRvIFdlYlBhZ2VPdmVybGF5OjphY3Rpb25Db250ZXh0Rm9yUmVz
dWx0QXRQb2ludChGbG9hdFBvaW50IGxvY2F0aW9uKSAtPiBPcHRpb25hbDxBY3Rpb25Db250ZXh0
PgogewotICAgIHJldHVybiBtX2NsaWVudC0+YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQo
KnRoaXMsIGxvY2F0aW9uLCByYW5nZUhhbmRsZSk7CisgICAgcmV0dXJuIG1fY2xpZW50LT5hY3Rp
b25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCgqdGhpcywgbG9jYXRpb24pOwogfQogCiB2b2lkIFdl
YlBhZ2VPdmVybGF5OjpkYXRhRGV0ZWN0b3JzRGlkUHJlc2VudFVJKCkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmggYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oCmluZGV4IGYwN2IwZjgx
OGY5M2NhN2U0Y2Y3MTk1OGUyZjNhY2Q3Zjc0ZTdkMGYuLjcxYmM5MzdkOGRmNjQzMjVmMjFhMDFj
NmEzM2U5Njk4MjA5YjQzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViUGFnZU92ZXJsYXkuaApAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBXZWJQYWdlOwog
CiBjbGFzcyBXZWJQYWdlT3ZlcmxheSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJOjpPYmpl
Y3Q6OlR5cGU6OkJ1bmRsZVBhZ2VPdmVybGF5PiwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdlT3Zlcmxh
eTo6Q2xpZW50IHsKIHB1YmxpYzoKKyAgICBzdHJ1Y3QgQWN0aW9uQ29udGV4dDsKKwogICAgIGNs
YXNzIENsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5DbGllbnQoKSB7IH0K
QEAgLTUzLDcgKzU1LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlkU2Nyb2xs
RnJhbWUoV2ViUGFnZU92ZXJsYXkmLCBXZWJGcmFtZSopIHsgfQogCiAjaWYgUExBVEZPUk0oTUFD
KQotICAgICAgICB2aXJ0dWFsIEREQWN0aW9uQ29udGV4dCAqYWN0aW9uQ29udGV4dEZvclJlc3Vs
dEF0UG9pbnQoV2ViUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aW9uLCBS
ZWZQdHI8V2ViQ29yZTo6UmFuZ2U+JiByYW5nZUhhbmRsZSkgeyByZXR1cm4gbnVsbHB0cjsgfQor
ICAgICAgICB2aXJ0dWFsIE9wdGlvbmFsPEFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHRGb3JS
ZXN1bHRBdFBvaW50KFdlYlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6RmxvYXRQb2ludCkgeyByZXR1
cm4gV1RGOjpudWxsb3B0OyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhRGV0ZWN0b3JzRGlk
UHJlc2VudFVJKFdlYlBhZ2VPdmVybGF5JikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRh
RGV0ZWN0b3JzRGlkQ2hhbmdlVUkoV2ViUGFnZU92ZXJsYXkmKSB7IH0KICAgICAgICAgdmlydHVh
bCB2b2lkIGRhdGFEZXRlY3RvcnNEaWRIaWRlVUkoV2ViUGFnZU92ZXJsYXkmKSB7IH0KQEAgLTc3
LDcgKzc5LDExIEBAIHB1YmxpYzoKICAgICBDbGllbnQmIGNsaWVudCgpIGNvbnN0IHsgcmV0dXJu
ICptX2NsaWVudDsgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIEREQWN0aW9uQ29udGV4dCAq
YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViQ29yZTo6RmxvYXRQb2ludCwgUmVmUHRy
PFdlYkNvcmU6OlJhbmdlPiYpOworICAgIHN0cnVjdCBBY3Rpb25Db250ZXh0IHsKKyAgICAgICAg
UmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gY29udGV4dDsKKyAgICAgICAgV2ViQ29yZTo6U2lt
cGxlUmFuZ2UgcmFuZ2U7CisgICAgfTsKKyAgICBPcHRpb25hbDxBY3Rpb25Db250ZXh0PiBhY3Rp
b25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChXZWJDb3JlOjpGbG9hdFBvaW50KTsKICAgICB2b2lk
IGRhdGFEZXRlY3RvcnNEaWRQcmVzZW50VUkoKTsKICAgICB2b2lkIGRhdGFEZXRlY3RvcnNEaWRD
aGFuZ2VVSSgpOwogICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZEhpZGVVSSgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xpYi5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApp
bmRleCA4MTk4MjM1MGVlOTkzMDhjODFiNTUyYWI1NTg4YTRkOGM4Zjc5Y2MwLi5lNTI2NGU0ZDJl
YmQwMDczOWM0NmJkYWYzMDgwNTJlMmZiMTZmODRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTIyLDExICsx
MjIsMTEgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1lJiBmcmFt
ZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICAgICAgICAgIGlmIChzdXJyb3VuZGlu
Z1N0YXJ0LmlzTnVsbCgpIHx8IHNlbGVjdGlvblN0YXJ0LmlzTnVsbCgpKQogICAgICAgICAgICAg
ICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uID0gMDsK
ICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3Vu
ZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50KCptYWtlUmFuZ2Uoc3Vy
cm91bmRpbmdTdGFydCwgc2VsZWN0aW9uU3RhcnQpKTsKKyAgICAgICAgICAgICAgICBwb3N0TGF5
b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50
KCptYWtlU2ltcGxlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgc2VsZWN0aW9uU3RhcnQpKTsKICAg
ICAgICAgICAgIGlmIChzdXJyb3VuZGluZ1N0YXJ0LmlzTnVsbCgpIHx8IHNlbGVjdGlvbi52aXNp
YmxlRW5kKCkuaXNOdWxsKCkpCiAgICAgICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91
bmRpbmdDb250ZXh0U2VsZWN0aW9uUG9zaXRpb24gPSAwOwogICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBv
c2l0aW9uID0gY2hhcmFjdGVyQ291bnQoKm1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzZWxl
Y3Rpb24udmlzaWJsZUVuZCgpKSk7CisgICAgICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vy
cm91bmRpbmdDb250ZXh0U2VsZWN0aW9uUG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVNp
bXBsZVJhbmdlKHN1cnJvdW5kaW5nU3RhcnQsIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKICAg
ICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvaW9zL1dlYlBhZ2VJT1MubW0KaW5kZXggZTUzZTc3YTcwYmE1MGQyYzVjZmYyZjcwMzBlZTQ1
YzRlMGQ5M2E1MC4uYzkwOTNkNDMzNzViOGQ5ZTMyMTJhM2ViMmY2MzZmYTVhYjE2ZWZmYyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1Mu
bW0KQEAgLTIxOSw3ICsyMTksMTAgQEAgc3RhdGljIHZvaWQgY29tcHV0ZUVkaXRhYmxlUm9vdEhh
c0NvbnRlbnRBbmRQbGFpblRleHQoY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2UKIAogICAgIGF1
dG8gc3RhcnRJbkVkaXRhYmxlUm9vdCA9IGZpcnN0UG9zaXRpb25Jbk5vZGUocm9vdCk7CiAgICAg
ZGF0YS5oYXNDb250ZW50ID0gcm9vdC0+aGFzQ2hpbGROb2RlcygpICYmICFpc0VuZE9mRWRpdGFi
bGVPck5vbkVkaXRhYmxlQ29udGVudChzdGFydEluRWRpdGFibGVSb290KTsKLSAgICBkYXRhLmhh
c1BsYWluVGV4dCA9IGRhdGEuaGFzQ29udGVudCAmJiBoYXNBbnlQbGFpblRleHQoUmFuZ2U6OmNy
ZWF0ZShyb290LT5kb2N1bWVudCgpLCBWaXNpYmxlUG9zaXRpb24geyBzdGFydEluRWRpdGFibGVS
b290IH0sIFZpc2libGVQb3NpdGlvbiB7IGxhc3RQb3NpdGlvbkluTm9kZShyb290KSB9KSk7Cisg
ICAgaWYgKGRhdGEuaGFzQ29udGVudCkgeworICAgICAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZShWaXNpYmxlUG9zaXRpb24geyBzdGFydEluRWRpdGFibGVSb290IH0sIFZpc2li
bGVQb3NpdGlvbiB7IGxhc3RQb3NpdGlvbkluTm9kZShyb290KSB9KSkKKyAgICAgICAgICAgIGRh
dGEuaGFzUGxhaW5UZXh0ID0gaGFzQW55UGxhaW5UZXh0KCpyYW5nZSk7CisgICAgfQogfQogCiBi
b29sIFdlYlBhZ2U6OmlzVHJhbnNwYXJlbnRPckZ1bGx5Q2xpcHBlZChjb25zdCBFbGVtZW50JiBl
bGVtZW50KSBjb25zdApAQCAtMTk1NSwxNyArMTk1OCwxMCBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVl
c3RFdmFzaW9uUmVjdHNBYm92ZVNlbGVjdGlvbihDb21wbGV0aW9uSGFuZGxlcjx2b2lkKGNvbnN0
IFZlYwogdm9pZCBXZWJQYWdlOjpnZXRSZWN0c0ZvckdyYW51bGFyaXR5V2l0aFNlbGVjdGlvbk9m
ZnNldChXZWJDb3JlOjpUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGludDMyX3Qgb2Zmc2V0
LCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5m
b2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiA9IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eS5pc05vbmUo
KSA/IGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpIDogbV9zdG9yZWRTZWxlY3Rpb25Gb3JB
Y2Nlc3NpYmlsaXR5OwotICAgIFZpc2libGVQb3NpdGlvbiBzZWxlY3Rpb25TdGFydCA9IHNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKTsKLQotICAgIGlmIChzZWxlY3Rpb25TdGFydC5pc051bGwoKSkg
ewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2Fs
bGJhY2soeyB9LCBjYWxsYmFja0lEKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KHNlbGVj
dGlvblN0YXJ0LCBvZmZzZXQpOwotICAgIFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBv
ZmZzZXQgPCAwID8gU2VsZWN0aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCA6IFNlbGVjdGlvbkRpcmVj
dGlvbjo6Rm9yd2FyZDsKIAorICAgIGF1dG8gc2VsZWN0aW9uID0gbV9zdG9yZWRTZWxlY3Rpb25G
b3JBY2Nlc3NpYmlsaXR5LmlzTm9uZSgpID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkg
OiBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHk7CisgICAgYXV0byBwb3NpdGlvbiA9
IHZpc2libGVQb3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNldChzZWxlY3Rpb24udmlzaWJsZVN0
YXJ0KCksIG9mZnNldCk7CisgICAgYXV0byBkaXJlY3Rpb24gPSBvZmZzZXQgPCAwID8gU2VsZWN0
aW9uRGlyZWN0aW9uOjpCYWNrd2FyZCA6IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZDsKICAg
ICBhdXRvIHJhbmdlID0gZW5jbG9zaW5nVGV4dFVuaXRPZkdyYW51bGFyaXR5KHBvc2l0aW9uLCBn
cmFudWxhcml0eSwgZGlyZWN0aW9uKTsKICAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBz
ZWQoKSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJl
Y3RzQ2FsbGJhY2soeyB9LCBjYWxsYmFja0lEKSk7CkBAIC0yMDAzLDM1ICsxOTk5LDI0IEBAIHN0
YXRpYyBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChj
b25zdCBWaXNpYmxlUG9zaXRpb24mCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzQXRTZWxlY3Rpb25P
ZmZzZXRXaXRoVGV4dChpbnQzMl90IG9mZnNldCwgY29uc3QgU3RyaW5nJiB0ZXh0LCBDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRy
b2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKLSAgICB1aW50MzJfdCBsZW5ndGggPSB0ZXh0
Lmxlbmd0aCgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zdG9yZWRTZWxl
Y3Rpb25Gb3JBY2Nlc3NpYmlsaXR5LmlzTm9uZSgpID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkgOiBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHk7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIFZp
c2libGVQb3NpdGlvbiBzZWxlY3Rpb25FbmQgPSBzZWxlY3Rpb24udmlzaWJsZUVuZCgpOwotCi0g
ICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTnVsbCgpIHx8IHNlbGVjdGlvbkVuZC5pc051bGwoKSkg
ewotICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2Fs
bGJhY2soeyB9LCBjYWxsYmFja0lEKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBh
dXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZzZXQo
c2VsZWN0aW9uU3RhcnQsIG9mZnNldCk7Ci0gICAgYXV0byBlbmRQb3NpdGlvbiA9IHZpc2libGVQ
b3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNldChzdGFydFBvc2l0aW9uLCBsZW5ndGgpOwotICAg
IGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBzdGFydFBvc2l0
aW9uLCBlbmRQb3NpdGlvbik7Ci0KLSAgICBpZiAocmFuZ2UtPmNvbGxhcHNlZCgpKSB7CisgICAg
YXV0byYgc2VsZWN0aW9uID0gbV9zdG9yZWRTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5LmlzTm9u
ZSgpID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkgOiBtX3N0b3JlZFNlbGVjdGlvbkZv
ckFjY2Vzc2liaWxpdHk7CisgICAgYXV0byBzdGFydFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9u
Rm9yUG9zaXRpb25XaXRoT2Zmc2V0KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgb2Zmc2V0KTsK
KyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0UG9zaXRpb24sIHZpc2libGVQ
b3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNldChzdGFydFBvc2l0aW9uLCB0ZXh0Lmxlbmd0aCgp
KSk7CisgICAgaWYgKCFyYW5nZSB8fCByYW5nZS0+Y29sbGFwc2VkKCkpIHsKICAgICAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25SZWN0c0NhbGxiYWNrKHsgfSwgY2Fs
bGJhY2tJRCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgaWYgKHBsYWluVGV4dEZv
ckRpc3BsYXkocmFuZ2UpICE9IHRleHQpIHsKKyAgICBpZiAocGxhaW5UZXh0Rm9yRGlzcGxheSgq
cmFuZ2UpICE9IHRleHQpIHsKICAgICAgICAgLy8gVHJ5IHRvIHNlYXJjaCBmb3IgYSByYW5nZSB3
aGljaCBpcyB0aGUgY2xvc2VzdCB0byB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBzZWxlY3Rpb24g
cmFuZ2UgdGhhdCBtYXRjaGVzIHRoZSBwYXNzZWQgaW4gdGV4dC4KICAgICAgICAgaWYgKGF1dG8g
d29yZFJhbmdlID0gcmFuZ2VOZWFyUG9zaXRpb25NYXRjaGVzVGV4dChzdGFydFBvc2l0aW9uLCB0
ZXh0LCBzZWxlY3Rpb24pKSB7CiAgICAgICAgICAgICBpZiAoIXdvcmRSYW5nZS0+Y29sbGFwc2Vk
KCkpCi0gICAgICAgICAgICAgICAgcmFuZ2UgPSBjcmVhdGVMaXZlUmFuZ2UoKndvcmRSYW5nZSk7
CisgICAgICAgICAgICAgICAgcmFuZ2UgPSAqd29yZFJhbmdlOwogICAgICAgICB9CiAgICAgfQog
CiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHNlbGVjdGlvblJlY3RzOwotICAg
IHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHNl
bGVjdGlvblJlY3RzKTsKKyAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0
aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHNlbGVjdGlvblJlY3RzKTsKICAgICBj
b252ZXJ0Q29udGVudFRvUm9vdFZpZXdTZWxlY3Rpb25SZWN0cygqZnJhbWUudmlldygpLCBzZWxl
Y3Rpb25SZWN0cyk7CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25S
ZWN0c0NhbGxiYWNrKHNlbGVjdGlvblJlY3RzLCBjYWxsYmFja0lEKSk7CiB9CkBAIC0yMjQ3LDgg
KzIyMzIsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxhc3RQ
b3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgfQotICAgICAgICBpZiAobGFzdFBv
c2l0aW9uLmlzTm90TnVsbCgpICYmIGxhc3RQb3NpdGlvbiAhPSBzdGFydFBvc2l0aW9uKQotICAg
ICAgICAgICAgY29udGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQoUmFuZ2U6OmNyZWF0
ZSgqZnJhbWUuZG9jdW1lbnQoKSwgbGFzdFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uKSk7CisgICAg
ICAgIGNvbnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShs
YXN0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pKTsKICAgICB9CiAKICAgICBTdHJpbmcgY29udGV4
dEFmdGVyOwpAQCAtMjI2MSw4ICsyMjQ1LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RGljdGF0
aW9uQ29udGV4dChDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBsYXN0UG9zaXRpb24gPSBjdXJyZW50UG9zaXRpb247CiAgICAgICAgIH0K
LSAgICAgICAgaWYgKGxhc3RQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBsYXN0UG9zaXRpb24gIT0g
ZW5kUG9zaXRpb24pCi0gICAgICAgICAgICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250
ZXh0KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGVuZFBvc2l0aW9uLCBsYXN0UG9z
aXRpb24pKTsKKyAgICAgICAgY29udGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChtYWtl
U2ltcGxlUmFuZ2UoZW5kUG9zaXRpb24sIGxhc3RQb3NpdGlvbikpOwogICAgIH0KIAogICAgIHNl
bmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uQ29udGV4dENhbGxiYWNrKHNlbGVj
dGVkVGV4dCwgY29udGV4dEJlZm9yZSwgY29udGV4dEFmdGVyLCBjYWxsYmFja0lEKSk7CkBAIC0y
NDgwLDE0ICsyNDYzLDE0IEBAIFdlYkF1dG9jb3JyZWN0aW9uQ29udGV4dCBXZWJQYWdlOjphdXRv
Y29ycmVjdGlvbkNvbnRleHQoKQogICAgICAgICAgICAgICAgIHByZXZpb3VzUG9zaXRpb24gPSBz
dGFydE9mV29yZChwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZHcmFudWxhcml0eShjdXJyZW50UG9z
aXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rp
b246OkJhY2t3YXJkKSk7CiAgICAgICAgICAgICAgICAgaWYgKHByZXZpb3VzUG9zaXRpb24uaXNO
dWxsKCkpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIFN0cmlu
ZyBjdXJyZW50V29yZCA9IHBsYWluVGV4dEZvckNvbnRleHQoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUu
ZG9jdW1lbnQoKSwgcHJldmlvdXNQb3NpdGlvbiwgY3VycmVudFBvc2l0aW9uKSk7CisgICAgICAg
ICAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0Rm9yQ29udGV4dChtYWtlU2lt
cGxlUmFuZ2UocHJldmlvdXNQb3NpdGlvbiwgY3VycmVudFBvc2l0aW9uKSk7CiAgICAgICAgICAg
ICAgICAgdG90YWxDb250ZXh0TGVuZ3RoICs9IGN1cnJlbnRXb3JkLmxlbmd0aCgpOwogICAgICAg
ICAgICAgICAgIGlmICh0b3RhbENvbnRleHRMZW5ndGggPj0gbWF4Q29udGV4dExlbmd0aCkKICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY3VycmVudFBvc2l0aW9u
ID0gcHJldmlvdXNQb3NpdGlvbjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChjdXJy
ZW50UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgY3VycmVudFBvc2l0aW9uICE9IHN0YXJ0UG9zaXRp
b24pIHsKLSAgICAgICAgICAgICAgICBjb250ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4
dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBjdXJyZW50UG9zaXRpb24sIHN0YXJ0
UG9zaXRpb24pKTsKKyAgICAgICAgICAgICAgICBjb250ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9y
Q29udGV4dChtYWtlU2ltcGxlUmFuZ2UoY3VycmVudFBvc2l0aW9uLCBzdGFydFBvc2l0aW9uKSk7
CiAgICAgICAgICAgICAgICAgaWYgKGF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGN1cnJlbnRQb3Np
dGlvbiwgVGV4dEdyYW51bGFyaXR5OjpQYXJhZ3JhcGhHcmFudWxhcml0eSwgU2VsZWN0aW9uRGly
ZWN0aW9uOjpCYWNrd2FyZCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRleHRCZWZvcmUgPSBt
YWtlU3RyaW5nKCJcbiAiX3MsIGNvbnRleHRCZWZvcmUpOwogICAgICAgICAgICAgfQpAQCAtMjQ5
Nyw4ICsyNDgwLDcgQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3Jy
ZWN0aW9uQ29udGV4dCgpCiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBvc2l0aW9u
OwogICAgICAgICAgICAgaWYgKCFhdEJvdW5kYXJ5T2ZHcmFudWxhcml0eShlbmRQb3NpdGlvbiwg
VGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9y
d2FyZCkgJiYgd2l0aGluVGV4dFVuaXRPZkdyYW51bGFyaXR5KGVuZFBvc2l0aW9uLCBUZXh0R3Jh
bnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSkK
ICAgICAgICAgICAgICAgICBuZXh0UG9zaXRpb24gPSBwb3NpdGlvbk9mTmV4dEJvdW5kYXJ5T2ZH
cmFudWxhcml0eShlbmRQb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHks
IFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCk7Ci0gICAgICAgICAgICBpZiAobmV4dFBvc2l0
aW9uLmlzTm90TnVsbCgpKQotICAgICAgICAgICAgICAgIGNvbnRleHRBZnRlciA9IHBsYWluVGV4
dEZvckNvbnRleHQoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZW5kUG9zaXRpb24s
IG5leHRQb3NpdGlvbikpOworICAgICAgICAgICAgY29udGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9y
Q29udGV4dChtYWtlU2ltcGxlUmFuZ2UoZW5kUG9zaXRpb24sIG5leHRQb3NpdGlvbikpOwogICAg
ICAgICB9CiAgICAgfQogCkBAIC0yNjAyLDcgKzI1ODQsNyBAQCBzdGF0aWMgdm9pZCBsaW5rSW5k
aWNhdG9yUG9zaXRpb25JbmZvcm1hdGlvbihXZWJQYWdlJiBwYWdlLCBFbGVtZW50JiBsaW5rRWxl
bWVudAogICAgIGlmICghcmVxdWVzdC5pbmNsdWRlTGlua0luZGljYXRvcikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgYXV0byBsaW5rUmFuZ2UgPSByYW5nZU9mQ29udGVudHMobGlua0VsZW1lbnQp
OworICAgIGF1dG8gbGlua1JhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKGxp
bmtFbGVtZW50KTsKICAgICBmbG9hdCBkZXZpY2VTY2FsZUZhY3RvciA9IHBhZ2UuY29yZVBhZ2Uo
KS0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKICAgICBjb25zdCBmbG9hdCBtYXJnaW5JblBvaW50cyA9
IHJlcXVlc3QubGlua0luZGljYXRvclNob3VsZEhhdmVMZWdhY3lNYXJnaW5zID8gNCA6IDA7CiAK
QEAgLTI2MTQsMTMgKzI1OTYsMTQgQEAgc3RhdGljIHZvaWQgbGlua0luZGljYXRvclBvc2l0aW9u
SW5mb3JtYXRpb24oV2ViUGFnZSYgcGFnZSwgRWxlbWVudCYgbGlua0VsZW1lbnQKICAgICAgICAg
VGV4dEluZGljYXRvck9wdGlvbjo6SW5jbHVkZU1hcmdpbklmUmFuZ2VNYXRjaGVzU2VsZWN0aW9u
LAogICAgICAgICBUZXh0SW5kaWNhdG9yT3B0aW9uOjpDb21wdXRlRXN0aW1hdGVkQmFja2dyb3Vu
ZENvbG9yCiAgICAgfTsKLSAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UobGlua1JhbmdlLmdldCgpLCB0ZXh0SW5kaWNhdG9yT3B0aW9ucywgVGV4
dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIEZsb2F0U2l6ZShtYXJnaW5J
blBvaW50cyAqIGRldmljZVNjYWxlRmFjdG9yLCBtYXJnaW5JblBvaW50cyAqIGRldmljZVNjYWxl
RmFjdG9yKSk7CisgICAgYXV0byB0ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRl
V2l0aFJhbmdlKGxpbmtSYW5nZSwgdGV4dEluZGljYXRvck9wdGlvbnMsIFRleHRJbmRpY2F0b3JQ
cmVzZW50YXRpb25UcmFuc2l0aW9uOjpOb25lLCBGbG9hdFNpemUobWFyZ2luSW5Qb2ludHMgKiBk
ZXZpY2VTY2FsZUZhY3RvciwgbWFyZ2luSW5Qb2ludHMgKiBkZXZpY2VTY2FsZUZhY3RvcikpOwog
CiAgICAgaWYgKHRleHRJbmRpY2F0b3IpCiAgICAgICAgIGluZm8ubGlua0luZGljYXRvciA9IHRl
eHRJbmRpY2F0b3ItPmRhdGEoKTsKIH0KICAgICAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04p
CisKIHN0YXRpYyB2b2lkIGRhdGFEZXRlY3RvckxpbmtQb3NpdGlvbkluZm9ybWF0aW9uKEVsZW1l
bnQmIGVsZW1lbnQsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiBpbmZvKQogewog
ICAgIGlmICghRGF0YURldGVjdGlvbjo6aXNEYXRhRGV0ZWN0b3JMaW5rKGVsZW1lbnQpKQpAQCAt
MjYzNCwxMyArMjYxNywxMyBAQCBzdGF0aWMgdm9pZCBkYXRhRGV0ZWN0b3JMaW5rUG9zaXRpb25J
bmZvcm1hdGlvbihFbGVtZW50JiBlbGVtZW50LCBJbnRlcmFjdGlvbkluZgogICAgIGlmICghRGF0
YURldGVjdGlvbjo6cmVxdWlyZXNFeHRlbmRlZENvbnRleHQoZWxlbWVudCkpCiAgICAgICAgIHJl
dHVybjsKICAgICAKLSAgICBhdXRvIGxpbmtSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZWxlbWVudC5k
b2N1bWVudCgpKTsKLSAgICBsaW5rUmFuZ2UtPnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTsK
LSAgICBpbmZvLnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRC
eUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGxpbmtSYW5nZS0+c3RhcnRQb3Np
dGlvbigpLAorICAgIGF1dG8gcmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMo
ZWxlbWVudCk7CisgICAgaW5mby50ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5n
ZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocmFuZ2Uuc3RhcnQpLAogICAgICAgICBkYXRhRGV0ZWN0aW9uRXh0
ZW5kZWRDb250ZXh0TGVuZ3RoLCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSk7Ci0gICAg
aW5mby50ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJh
Y3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGxpbmtSYW5nZS0+ZW5kUG9zaXRpb24oKSwK
KyAgICBpbmZvLnRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5
Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkoY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKHJhbmdlLmVuZCksCiAgICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRM
ZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6Rm9yd2FyZCkpOwogfQorCiAjZW5kaWYKIAogc3Rh
dGljIHZvaWQgaW1hZ2VQb3NpdGlvbkluZm9ybWF0aW9uKFdlYlBhZ2UmIHBhZ2UsIEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IEludGVyYWN0aW9uSW5mb3JtYXRpb25SZXF1ZXN0JiByZXF1ZXN0LCBJ
bnRlcmFjdGlvbkluZm9ybWF0aW9uQXRQb3NpdGlvbiYgaW5mbykKQEAgLTQxNzMsMTIgKzQxNTYs
MTIgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVu
dEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICBWaXNpYmxlUG9zaXRpb24gZW5kT2ZS
YW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbjsKIAogICAgIGF1dG8gc2VsZWN0aW9uUmFuZ2UgPSBz
ZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKLSAgICBhdXRvIHJhbmdlT2ZJbnRlcmVzdCA9
IG1ha2VSYW5nZShyYW5nZU9mSW50ZXJlc3RTdGFydCwgcmFuZ2VPZkludGVyZXN0RW5kKTsKLSAg
ICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3QuZ2V0
KCksIGNyZWF0ZUxpdmVSYW5nZSgqc2VsZWN0aW9uUmFuZ2UpLnB0cigpKSkgeworICAgIGF1dG8g
cmFuZ2VPZkludGVyZXN0ID0gKm1ha2VTaW1wbGVSYW5nZShyYW5nZU9mSW50ZXJlc3RTdGFydCwg
cmFuZ2VPZkludGVyZXN0RW5kKTsKKyAgICBpZiAoc2VsZWN0aW9uUmFuZ2UgJiYgcmFuZ2VzT3Zl
cmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VPZkludGVyZXN0KS5wdHIoKSwgY3JlYXRlTGl2ZVJh
bmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CiAgICAgICAgIHN0YXJ0T2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6bWF4KHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCBzZWxlY3Rp
b25TdGFydCk7CiAgICAgICAgIGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24gPSBzdGQ6
Om1pbihyYW5nZU9mSW50ZXJlc3RFbmQsIHNlbGVjdGlvbkVuZCk7CiAgICAgfSBlbHNlIHsKLSAg
ICAgICAgYXV0byByb290Tm9kZSA9IG1ha2VSZWZQdHIocmFuZ2VPZkludGVyZXN0LT5jb21tb25B
bmNlc3RvckNvbnRhaW5lcigpKTsKKyAgICAgICAgYXV0byByb290Tm9kZSA9IGNvbW1vbkluY2x1
c2l2ZUFuY2VzdG9yKHJhbmdlT2ZJbnRlcmVzdCk7CiAgICAgICAgIGlmICghcm9vdE5vZGUpIHsK
ICAgICAgICAgICAgIGNvbXBsZXRpb25IYW5kbGVyKHsgfSk7CiAgICAgICAgICAgICByZXR1cm47
CkBAIC00MTkwLDcgKzQxNzMsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRp
bmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgICAgICB9
CiAgICAgICAgIGF1dG8gc2NvcGUgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKnJv
b3RDb250YWluZXJOb2RlKTsKIAotICAgICAgICBhdXRvIGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVz
dCA9IGNoYXJhY3RlclJhbmdlKHNjb3BlLCAqcmFuZ2VPZkludGVyZXN0KTsKKyAgICAgICAgYXV0
byBjaGFyYWN0ZXJSYW5nZU9mSW50ZXJlc3QgPSBjaGFyYWN0ZXJSYW5nZShzY29wZSwgcmFuZ2VP
ZkludGVyZXN0KTsKICAgICAgICAgYXV0byBtaWRwb2ludExvY2F0aW9uID0gY2hlY2tlZFN1bTx1
aW50NjRfdD4oY2hhcmFjdGVyUmFuZ2VPZkludGVyZXN0LmxvY2F0aW9uLCBjaGFyYWN0ZXJSYW5n
ZU9mSW50ZXJlc3QubGVuZ3RoIC8gMik7CiAgICAgICAgIGlmIChtaWRwb2ludExvY2F0aW9uLmhh
c092ZXJmbG93ZWQoKSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKQEAg
LTQyMzksNyArNDIyMiw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0Nv
bnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgY29udGV4dC5j
b250ZXh0QmVmb3JlID0gbWFrZVN0cmluZyhjb250ZXh0QmVmb3JlU3RhcnQsIHN0YXJ0T2ZSYW5n
ZU9mSW50ZXJlc3RJblNlbGVjdGlvbik7CiAgICAgY29udGV4dC5zZWxlY3RlZFRleHQgPSBtYWtl
U3RyaW5nKHN0YXJ0T2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgZW5kT2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbik7CiAgICAgY29udGV4dC5jb250ZXh0QWZ0ZXIgPSBtYWtlU3RyaW5n
KGVuZE9mUmFuZ2VPZkludGVyZXN0SW5TZWxlY3Rpb24sIGNvbnRleHRBZnRlckVuZCk7Ci0gICAg
aWYgKGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChyYW5nZU9mSW50ZXJlc3QuZ2V0
KCksIGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSkucHRyKCkpKSB7CisgICAgaWYg
KGNvbXBvc2l0aW9uUmFuZ2UgJiYgcmFuZ2VzT3ZlcmxhcChjcmVhdGVMaXZlUmFuZ2UocmFuZ2VP
ZkludGVyZXN0KS5wdHIoKSwgY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS5wdHIo
KSkpIHsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uU3RhcnQoY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPnN0YXJ0KSk7CiAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBjb21wb3NpdGlvbkVuZChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
Y29tcG9zaXRpb25SYW5nZS0+ZW5kKSk7CiAgICAgICAgIGNvbnRleHQubWFya2VkVGV4dCA9IG1h
a2VTdHJpbmcoY29tcG9zaXRpb25TdGFydCwgY29tcG9zaXRpb25FbmQpOwpAQCAtNDI2NCw3ICs0
MjQ3LDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1
bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICB9OwogCiAgICAgaWYgKHdhbnRz
UmVjdHMpIHsKLSAgICAgICAgaWYgKGF1dG8gY29udGV4dFJhbmdlID0gbWFrZVJhbmdlKGNvbnRl
eHRCZWZvcmVTdGFydCwgY29udGV4dEFmdGVyRW5kKSkKKyAgICAgICAgaWYgKGF1dG8gY29udGV4
dFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGNvbnRleHRCZWZvcmVTdGFydCwgY29udGV4dEFmdGVy
RW5kKSkKICAgICAgICAgICAgIGNvbnRleHQudGV4dFJlY3RzID0gY2hhcmFjdGVyUmVjdHNGb3JS
YW5nZSgqY29udGV4dFJhbmdlLCAwKTsKICAgICB9IGVsc2UgaWYgKHdhbnRzTWFya2VkVGV4dFJl
Y3RzICYmIGNvbXBvc2l0aW9uUmFuZ2UpIHsKICAgICAgICAgdW5zaWduZWQgY29tcG9zaXRpb25T
dGFydE9mZnNldCA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9tYWMvV2ViUGFnZU1hYy5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L21hYy9XZWJQYWdlTWFjLm1tCmluZGV4IGNhMWM5NWU0ODQ3Yjc0NWVmNGIyY2Q5MjVkM2UwODZh
MjczZjljOTQuLjJkOTQzMzM5OTZjODI4ZDJlMDIyMzY4MmM2ZjI5MDU0OTk0YzY1MmYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1t
CkBAIC04NzQsMTkgKzg3NCwxOCBAQCB2b2lkIFdlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVBY3Rp
b25IaXRUZXN0QXRMb2NhdGlvbihXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0aQogICAgICAgICBp
ZiAoIXdlYk92ZXJsYXkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBSZWZQdHI8
UmFuZ2U+IG1haW5SZXN1bHRSYW5nZTsKLSAgICAgICAgRERBY3Rpb25Db250ZXh0ICphY3Rpb25D
b250ZXh0ID0gd2ViT3ZlcmxheS0+YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQobG9jYXRp
b25JbkNvbnRlbnRDb29yZGluYXRlcywgbWFpblJlc3VsdFJhbmdlKTsKLSAgICAgICAgaWYgKCFh
Y3Rpb25Db250ZXh0IHx8ICFtYWluUmVzdWx0UmFuZ2UpCisgICAgICAgIGF1dG8gYWN0aW9uQ29u
dGV4dCA9IHdlYk92ZXJsYXktPmFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KGxvY2F0aW9u
SW5Db250ZW50Q29vcmRpbmF0ZXMpOworICAgICAgICBpZiAoIWFjdGlvbkNvbnRleHQpCiAgICAg
ICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBhdXRvIHZpZXcgPSBtYWluUmVzdWx0UmFuZ2Ut
Pm93bmVyRG9jdW1lbnQoKS52aWV3KCk7CisgICAgICAgIGF1dG8gdmlldyA9IGFjdGlvbkNvbnRl
eHQtPnJhbmdlLnN0YXJ0LmNvbnRhaW5lci0+ZG9jdW1lbnQoKS52aWV3KCk7CiAgICAgICAgIGlm
ICghdmlldykKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHBhZ2VPdmVybGF5RGlk
T3ZlcnJpZGVEYXRhRGV0ZWN0b3JzID0gdHJ1ZTsKLSAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVz
dWx0LmRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0OwotICAgICAgICBp
bW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSB2aWV3LT5jb250
ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJP
YmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKCptYWluUmVzdWx0UmFuZ2UpKSkpOwotICAgICAgICBp
bW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhVGV4dEluZGljYXRvciA9IFRleHRJbmRp
Y2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqbWFpblJlc3VsdFJhbmdlLCB7IFRleHRJbmRpY2F0b3JP
cHRpb246OlVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMg
fSwgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CisgICAgICAg
IGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFBY3Rpb25Db250ZXh0ID0gYWN0aW9u
Q29udGV4dC0+Y29udGV4dC5nZXQoKTsKKyAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRl
dGVjdGVkRGF0YUJvdW5kaW5nQm94ID0gdmlldy0+Y29udGVudHNUb1dpbmRvdyhlbmNsb3NpbmdJ
bnRSZWN0KHVuaXRlZEJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFk
cyhhY3Rpb25Db250ZXh0LT5yYW5nZSkpKSk7CisgICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3Vs
dC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJh
bmdlKGFjdGlvbkNvbnRleHQtPnJhbmdlLCB7IFRleHRJbmRpY2F0b3JPcHRpb246OlVzZUJvdW5k
aW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgfSwgVGV4dEluZGljYXRv
clByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAgICAgICAgIGltbWVkaWF0ZUFjdGlv
blJlc3VsdC5kZXRlY3RlZERhdGFPcmlnaW5hdGluZ1BhZ2VPdmVybGF5ID0gb3ZlcmxheS0+cGFn
ZU92ZXJsYXlJRCgpOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCmluZGV4IGVjY2Zi
NTAxZTZlYzMyMTg3NmEwNmE0MDQyZmRiOTNjMTgwNmQ4YTAuLjQ3ZjMwY2FkMTRiZWVhMGU3NjM5
YmY0Yjk3YTFmNTY4MGY0MmYwZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9z
L1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
aW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCkBAIC0yMzgsMTEgKzIzOCw4IEBAIC0g
KE5TQXJyYXkgKilzZWxlY3Rpb25SZWN0cwogCiAtIChET01SYW5nZSAqKXdvcmRBdFBvaW50OihD
R1BvaW50KXBvaW50CiB7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHBvcyA9IFtzZWxmIHZpc2libGVQ
b3NpdGlvbkZvclBvaW50OnBvaW50XTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBzdGFy
dE9mV29yZChwb3MpOwotICAgIFZpc2libGVQb3NpdGlvbiBlbmQgPSBlbmRPZldvcmQocG9zKTsK
LSAgICBET01SYW5nZSAqd29yZFJhbmdlID0ga2l0KG1ha2VSYW5nZShzdGFydCwgZW5kKS5nZXQo
KSk7Ci0gICAgcmV0dXJuIHdvcmRSYW5nZTsgICAKKyAgICBhdXRvIHBvc2l0aW9uID0gW3NlbGYg
dmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOworICAgIHJldHVybiBraXQobWFrZVNpbXBs
ZVJhbmdlKHN0YXJ0T2ZXb3JkKHBvc2l0aW9uKSwgZW5kT2ZXb3JkKHBvc2l0aW9uKSkpOwogfQog
CiAtIChXZWJWaXNpYmxlUG9zaXRpb24gKil3ZWJWaXNpYmxlUG9zaXRpb25Gb3JQb2ludDooQ0dQ
b2ludClwb2ludApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1
cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2Vi
Q29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCmluZGV4IDNiMGViOTU0ZTA5YWZkOGM3
MzA1ZmZhZWUxMjQxZjE3ZjIxMmQxZmMuLmRlNWRhNDRhZmQ5MjhhM2YwOTk1MGI1MmU2NGM2NTQw
NWU1YmI5MjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBw
b3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9X
ZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KQEAgLTQxNiw3ICs0MTYsNyBAQCAt
IChET01SYW5nZSAqKWVuY2xvc2luZ1JhbmdlV2l0aERpY3RhdGlvblBocmFzZUFsdGVybmF0aXZl
czooTlNBcnJheSAqKilhbHRlcm5hdAogICAgIGZvciAoYXV0byBtYXJrZXIgOiBkb2N1bWVudC5t
YXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFz
ZVdpdGhBbHRlcm5hdGl2ZXMpKSB7CiAgICAgICAgIGlmIChtYXJrZXItPnN0YXJ0T2Zmc2V0KCkg
PD0gb2Zmc2V0ICYmIG1hcmtlci0+ZW5kT2Zmc2V0KCkgPj0gb2Zmc2V0KSB7CiAgICAgICAgICAg
ICAqYWx0ZXJuYXRpdmVzID0gY3JlYXRlTlNBcnJheShXVEY6OmdldDxWZWN0b3I8U3RyaW5nPj4o
bWFya2VyLT5kYXRhKCkpKS5hdXRvcmVsZWFzZSgpOwotICAgICAgICAgICAgcmV0dXJuIGtpdChS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50LCBub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCksIG5vZGUs
IG1hcmtlci0+ZW5kT2Zmc2V0KCkpLnB0cigpKTsKKyAgICAgICAgICAgIHJldHVybiBraXQocmFu
Z2UoKm5vZGUsICptYXJrZXIpKTsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gbmlsOwpA
QCAtNDMzLDcgKzQzMyw3IEBAIC0gKERPTVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoQ29ycmVj
dGlvbkluZGljYXRvcgogICAgIGF1dG8mIGRvY3VtZW50ID0gbm9kZS0+ZG9jdW1lbnQoKTsKICAg
ICBmb3IgKGF1dG8gbWFya2VyIDogZG9jdW1lbnQubWFya2VycygpLm1hcmtlcnNGb3IoKm5vZGUs
IERvY3VtZW50TWFya2VyOjpTcGVsbGluZykpIHsKICAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRP
ZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpCi0gICAg
ICAgICAgICByZXR1cm4ga2l0KFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+
c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSkucHRyKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGtpdChyYW5nZSgqbm9kZSwgKm1hcmtlcikpOwogICAgIH0KICAgICByZXR1
cm4gbmlsOwogfQpAQCAtNDc1LDIzICs0NzUsMTEgQEAgLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdX
b3JkUmFuZ2UKIAogKyAoRE9NUmFuZ2UgKilyYW5nZUZvckZpcnN0UG9zaXRpb246KFdlYlZpc2li
bGVQb3NpdGlvbiAqKWZpcnN0IHNlY29uZDooV2ViVmlzaWJsZVBvc2l0aW9uICopc2Vjb25kCiB7
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGZpcnN0VlAgPSBbZmlyc3QgX3Zpc2libGVQb3NpdGlvbl07
Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlY29uZFZQID0gW3NlY29uZCBfdmlzaWJsZVBvc2l0aW9u
XTsKLSAgICAKLSAgICBpZiAoZmlyc3RWUC5pc051bGwoKSB8fCBzZWNvbmRWUC5pc051bGwoKSkK
LSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlOwotICAg
IGlmIChmaXJzdFZQIDwgc2Vjb25kVlApIHsKLSAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KGZpcnN0VlAuZGVlcEVxdWl2YWxlbnQoKS5kZXByZWNhdGVkTm9kZSgpLT5kb2N1bWVudCgpLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0VlAsIHNlY29uZFZQKTsK
LSAgICB9IGVsc2UgewotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZmlyc3RWUC5kZWVw
RXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY29uZFZQLCBmaXJzdFZQKTsKLSAgICB9
Ci0gICAgCi0gICAgCi0gICAgcmV0dXJuIGtpdChyYW5nZS5nZXQoKSk7CisgICAgYXV0byBmaXJz
dFZQID0gW2ZpcnN0IF92aXNpYmxlUG9zaXRpb25dOworICAgIGF1dG8gc2Vjb25kVlAgPSBbc2Vj
b25kIF92aXNpYmxlUG9zaXRpb25dOworICAgIGlmIChmaXJzdFZQIDwgc2Vjb25kVlApCisgICAg
ICAgIHN0ZDo6c3dhcChmaXJzdFZQLCBzZWNvbmRWUCk7CisgICAgcmV0dXJuIGtpdChtYWtlU2lt
cGxlUmFuZ2UoZmlyc3RWUCwgc2Vjb25kVlApKTsKIH0KIAogQGVuZApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbSBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KaW5kZXggNGYwNjgzNDYy
MmI3MzJmZTZhNmNjNjRjN2M5NTVkYTIxNGYyZjY4Ny4uMjlmYzJjNzcwOWFiNGRhOTg0MTc5ZjNj
YmM4Zjc0ZTBiODI5MWE3NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9N
L0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NVUlLaXRFeHRlbnNpb25zLm1tCkBAIC0yMTAsMjIgKzIxMCw4IEBAIC0gKEJPT0wpaXNTZWxl
Y3RhYmxlQmxvY2sKIAogLSAoRE9NUmFuZ2UgKilyYW5nZU9mQ29udGFpbmluZ1BhcmFncmFwaAog
ewotICAgIERPTVJhbmdlICpyZXN1bHQgPSBuaWw7Ci0gICAgCi0gICAgTm9kZSAqbm9kZSA9IGNv
cmUoc2VsZik7ICAgIAotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUG9zaXRpb24oY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIDApLCBXZWJDb3JlOjpET1dOU1RSRUFNKTsKLSAg
ICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVBhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZlBhcmFncmFw
aCh2aXNpYmxlUG9zaXRpb24pOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUGFyYWdyYXBo
RW5kID0gZW5kT2ZQYXJhZ3JhcGgodmlzaWJsZVBvc2l0aW9uKTsKLSAgICAKLSAgICBQb3NpdGlv
biBwYXJhZ3JhcGhTdGFydCA9IHZpc2libGVQYXJhZ3JhcGhTdGFydC5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIHBhcmFncmFwaEVuZCA9
IHZpc2libGVQYXJhZ3JhcGhFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2
YWxlbnQoKTsgICAgCi0gICAgCi0gICAgaWYgKHBhcmFncmFwaFN0YXJ0LmlzTm90TnVsbCgpICYm
IHBhcmFncmFwaEVuZC5pc05vdE51bGwoKSkgewotICAgICAgICBSZWY8UmFuZ2U+IHJhbmdlID0g
UmFuZ2U6OmNyZWF0ZSgqbm9kZS0+b3duZXJEb2N1bWVudCgpLCBwYXJhZ3JhcGhTdGFydCwgcGFy
YWdyYXBoRW5kKTsKLSAgICAgICAgcmVzdWx0ID0ga2l0KHJhbmdlLnB0cigpKTsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBWaXNpYmxlUG9zaXRpb24gcG9zaXRpb24oY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvcmUoc2VsZiksIDApLCBXZWJDb3JlOjpET1dOU1RS
RUFNKTsKKyAgICByZXR1cm4ga2l0KG1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFyYWdyYXBoKHBv
c2l0aW9uKSwgZW5kT2ZQYXJhZ3JhcGgocG9zaXRpb24pKSk7CiB9CiAKIC0gKENHRmxvYXQpdGV4
dEhlaWdodApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJG
cmFtZS5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KaW5k
ZXggMzNhMjYwOTI2NmE5ZTk1NDdlYWNkMTFiNDE3ZDRmMmNiMTFiYTAyMi4uZjc5NDE5ODBmNjRh
MGE0MGE1MDY1NjY3ODcxZjViMjg2Njc2ZmNkOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCkBAIC05MjIsNyArOTIyLDcgQEAgLSAoV2ViQ29yZTo6Vmlz
aWJsZVBvc2l0aW9uKV92aXNpYmxlUG9zaXRpb25Gb3JQb2ludDooTlNQb2ludClwb2ludAogCiAt
IChET01SYW5nZSAqKV9jaGFyYWN0ZXJSYW5nZUF0UG9pbnQ6KE5TUG9pbnQpcG9pbnQKIHsKLSAg
ICByZXR1cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6
SW50UG9pbnQocG9pbnQpKS5nZXQoKSk7CisgICAgcmV0dXJuIGtpdChfcHJpdmF0ZS0+Y29yZUZy
YW1lLT5yYW5nZUZvclBvaW50KFdlYkNvcmU6OkludFBvaW50KHBvaW50KSkpOwogfQogCiAtIChE
T01DU1NTdHlsZURlY2xhcmF0aW9uICopX3R5cGluZ1N0eWxlCkBAIC0xNzQxLDkgKzE3NDEsOCBA
QCAtICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJhbmdlczooTlNBcnJheSAqKilvdXRSYW5nZXMg
YW5kTWV0YWRhdGFzOihOU0FycmF5ICoqKQogICAgICAgICAgICAgaWYgKCFtZXRhZGF0YSkKICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYXV0byBy
YW5nZSA9IFdlYkNvcmU6OlJhbmdlOjpjcmVhdGUoKmRvY3VtZW50LCBub2RlLCBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCksIG5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpOwotICAgICAgICAgICAgRE9N
UmFuZ2UgKmRvbVJhbmdlID0ga2l0KHJhbmdlLnB0cigpKTsKLSAgICAgICAgICAgIAorICAgICAg
ICAgICAgRE9NUmFuZ2UgKmRvbVJhbmdlID0ga2l0KHJhbmdlKCpub2RlLCAqbWFya2VyKSk7CisK
ICAgICAgICAgICAgIGlmIChtZXRhZGF0YSAhPSBwcmV2aW91c01ldGFkYXRhKSB7CiAgICAgICAg
ICAgICAgICAgW21ldGFkYXRhcyBhZGRPYmplY3Q6bWV0YWRhdGFdOwogICAgICAgICAgICAgICAg
IFtyYW5nZXMgYWRkT2JqZWN0OmRvbVJhbmdlXTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbSBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5t
bQppbmRleCAyZGY4MTYxOWU1OTVmYWY2YTllZDJlZmUyMDE2ZGJmYTEwYjVhNzljLi45ZTc2ZDJi
NDc1ZGUxMDUwOGVhYTM4ZjJmYmViM2U5NTUzYTc4ODUyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250
cm9sbGVyLm1tCkBAIC0yNzAsOCArMjcwLDggQEAgLSAoaWQgPE5TSW1tZWRpYXRlQWN0aW9uQW5p
bWF0aW9uQ29udHJvbGxlcj4pX2RlZmF1bHRBbmltYXRpb25Db250cm9sbGVyCiAgICAgICAgIGlm
IChXVEY6OnByb3RvY29sSXNJbkhUVFBGYW1pbHkoYWJzb2x1dGVVUkxTdHJpbmcpKSB7CiAgICAg
ICAgICAgICBfdHlwZSA9IFdlYkltbWVkaWF0ZUFjdGlvbkxpbmtQcmV2aWV3OwogCi0gICAgICAg
ICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IGxpbmtSYW5nZSA9IHJhbmdlT2ZDb250ZW50cygq
X2hpdFRlc3RSZXN1bHQuVVJMRWxlbWVudCgpKTsKLSAgICAgICAgICAgIGF1dG8gaW5kaWNhdG9y
ID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCpsaW5rUmFuZ2UsIHsg
V2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxD
b250ZW50Rm9yQ29tcGxleFJhbmdlcyB9LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0
aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICAgICAgICAgIGF1dG8gbGlua1JhbmdlID0gbWFr
ZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkp
OworICAgICAgICAgICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpj
cmVhdGVXaXRoUmFuZ2UobGlua1JhbmdlLCB7IFdlYkNvcmU6OlRleHRJbmRpY2F0b3JPcHRpb246
OlVzZUJvdW5kaW5nUmVjdEFuZFBhaW50QWxsQ29udGVudEZvckNvbXBsZXhSYW5nZXMgfSwgV2Vi
Q29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246OkZhZGVJbik7CiAgICAg
ICAgICAgICBpZiAoaW5kaWNhdG9yKQogICAgICAgICAgICAgICAgIFtfd2ViVmlldyBfc2V0VGV4
dEluZGljYXRvcjoqaW5kaWNhdG9yIHdpdGhMaWZldGltZTpXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
V2luZG93TGlmZXRpbWU6OlBlcm1hbmVudF07CiAKQEAgLTQ3MSwxMCArNDcxLDggQEAgLSAoaWQg
PE5TSW1tZWRpYXRlQWN0aW9uQW5pbWF0aW9uQ29udHJvbGxlcj4pX2FuaW1hdGlvbkNvbnRyb2xs
ZXJGb3JEYXRhRGV0ZWN0ZWQKICAgICBbYWN0aW9uQ29udGV4dCBzZXRBbHRNb2RlOllFU107CiAg
ICAgW2FjdGlvbkNvbnRleHQgc2V0SW1tZWRpYXRlOllFU107CiAKLSAgICBSZWZQdHI8V2ViQ29y
ZTo6UmFuZ2U+IGxpbmtSYW5nZSA9IHJhbmdlT2ZDb250ZW50cygqX2hpdFRlc3RSZXN1bHQuVVJM
RWxlbWVudCgpKTsKLSAgICBpZiAoIWxpbmtSYW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7
Ci0gICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRo
UmFuZ2UoKmxpbmtSYW5nZSwgeyB9LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9u
VHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICBhdXRvIGxpbmtSYW5nZSA9IG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cygqX2hpdFRlc3RSZXN1bHQuVVJMRWxlbWVudCgpKTsKKyAgICBhdXRv
IGluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShsaW5r
UmFuZ2UsIHsgfSwgV2ViQ29yZTo6VGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246
OkZhZGVJbik7CiAKICAgICBfY3VycmVudEFjdGlvbkNvbnRleHQgPSBbYWN0aW9uQ29udGV4dCBj
b250ZXh0Rm9yVmlldzpfd2ViVmlldyBhbHRNb2RlOllFUyBpbnRlcmFjdGlvblN0YXJ0ZWRIYW5k
bGVyOl4oKSB7CiAgICAgfSBpbnRlcmFjdGlvbkNoYW5nZWRIYW5kbGVyOl4oKSB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcAppbmRleCA2MWMwMjI3
ZTI4ZDIzYTk3NjZkZGNmMjA4ODQ4ZDk2YTIyNDdlODI5Li4zZGE4OWM0Y2NkNjFjMWU2YWZiY2Mw
MWIyMGE4OTkyMDA5ZTllNDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9B
Y2Nlc3NpYmxlVGV4dEltcGwuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vz
c2libGVUZXh0SW1wbC5jcHAKQEAgLTQ2MSwxMSArNDYxLDExIEBAIEhSRVNVTFQgQWNjZXNzaWJs
ZVRleHQ6OnNjcm9sbFN1YnN0cmluZ1RvKGxvbmcgc3RhcnRJbmRleCwgbG9uZyBlbmRJbmRleCwg
ZW51bSBJCiAgICAgc3RhcnRJbmRleCA9IGNvbnZlcnRTcGVjaWFsT2Zmc2V0KHN0YXJ0SW5kZXgp
OwogICAgIGVuZEluZGV4ID0gY29udmVydFNwZWNpYWxPZmZzZXQoZW5kSW5kZXgpOwogCi0gICAg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UgdGV4dFJhbmdlID0gbV9vYmplY3QtPnZpc2libGVQb3NpdGlv
blJhbmdlRm9yUmFuZ2UoUGxhaW5UZXh0UmFuZ2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgtc3RhcnRJ
bmRleCkpOwotICAgIGlmICh0ZXh0UmFuZ2Uuc3RhcnQuaXNOdWxsKCkgfHwgdGV4dFJhbmdlLmVu
ZC5pc051bGwoKSkKKyAgICBhdXRvIHRleHRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShtX29iamVj
dC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5nZShzdGFydEluZGV4
LCBlbmRJbmRleC1zdGFydEluZGV4KSkpOworICAgIGlmICghdGV4dFJhbmdlKQogICAgICAgICBy
ZXR1cm4gU19GQUxTRTsKIAotICAgIEludFJlY3QgYm91bmRpbmdCb3ggPSBtYWtlUmFuZ2UodGV4
dFJhbmdlLnN0YXJ0LCB0ZXh0UmFuZ2UuZW5kKS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOworICAg
IEludFJlY3QgYm91bmRpbmdCb3ggPSBjcmVhdGVMaXZlUmFuZ2UoKnRleHRSYW5nZSktPmFic29s
dXRlQm91bmRpbmdCb3goKTsKICAgICBzd2l0Y2ggKHNjcm9sbFR5cGUpIHsKICAgICBjYXNlIElB
Ml9TQ1JPTExfVFlQRV9UT1BfTEVGVDoKICAgICAgICAgbV9vYmplY3QtPnNjcm9sbFRvR2xvYmFs
UG9pbnQoYm91bmRpbmdCb3gubWluWE1pbllDb3JuZXIoKSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405665</attachid>
            <date>2020-07-30 21:57:51 -0700</date>
            <delta_ts>2020-07-31 11:00:26 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215004-20200730215749.patch</filename>
            <type>text/plain</type>
            <size>131307</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGMwM2ExZGYyNzcxYWZj
NGZmYTJlYTFmZTIyNTU3YmY0OGE0NDE2Ni4uMDVjMjFiNDEyODI0NTQwMmM5ZTVhMjE5ZmUwYTQ5
MjdlOGEwOGI4YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIwLTA3LTMwICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUmFuZ2U6OmNyZWF0
ZSBhbmQgbWFueSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTAwNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCiAyMDIwLTA3LTMwICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxl
LmNvbT4KIAogICAgICAgICBJdCB3b3VsZCBiZSBuaWNlIGlmIHRoZSBwcmVkaWNhdGUgdGFraW5n
IGZ1bmN0aW9ucyBpbiBQYXJzaW5nVXRpbGl0aWVzLmggZGlkbid0IHJlcXVpcmUgc3BlY2lmeWlu
ZyB0aGUgY2hhcmFjdGVyIHR5cGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2li
aWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDQ0ODYyYWI2YTJl
YmJmMjdhOGVhZjVlYzQ2ZDcwNThkM2EzMWNhZTkuLjYzNTQ0Y2I1YWFhNWRiNmM0YzFkMzk1ODQ3
OTE2NDMwZGQ1ZjUwNWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNz
aWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtMjE1MSw3ICsyMTUxLDcg
QEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9z
aXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG8KICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBy
ZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAqbWFrZVJhbmdlKHJhbmdlLnN0YXJ0
LCByYW5nZS5lbmQpKTsKKyAgICByZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAq
bWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CiB9CiAKIEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNo
ZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hl
QXRrLmNwcAppbmRleCBkMTU2YWVjZTg2ODVlZDM0NGM5NTVlZDI3YWQ5MDkwMzYzNjFlODgzLi5h
N2RhOWIyZjQxYmFmNDExNzE5ZDJkMzdlMTRmY2IxMzk0YTc2ZTA2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAt
MzU0LDggKzM1NCw3IEBAIHZvaWQgQVhPYmplY3RDYWNoZTo6bm9kZVRleHRDaGFuZ2VQbGF0Zm9y
bU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2JqZWN0KiBvYmplCiAgICAgICAgIC8vIENvbnNp
ZGVyIHByZXZpb3VzIHRleHQgb2JqZWN0cyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQgZm9yCiAgICAg
ICAgIC8vIHRoZSBjdXJyZW50IGFjY2Vzc2liaWxpdHkgb2JqZWN0IHRvIGVuc3VyZSB3ZSBlbWl0
IHRoZQogICAgICAgICAvLyByaWdodCBvZmZzZXQgKGUuZy4gbXVsdGlsaW5lIHRleHQgYXJlYXMp
LgotICAgICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgbm9kZS0+cGFy
ZW50Tm9kZSgpLCAwLCBub2RlLCAwKTsKLSAgICAgICAgb2Zmc2V0VG9FbWl0ID0gb2Zmc2V0ICsg
Y2hhcmFjdGVyQ291bnQocmFuZ2UuZ2V0KCkpOworICAgICAgICBvZmZzZXRUb0VtaXQgPSBvZmZz
ZXQgKyBjaGFyYWN0ZXJDb3VudChTaW1wbGVSYW5nZSB7IHsgKm5vZGUtPnBhcmVudE5vZGUoKSwg
MCB9LCB7ICpub2RlLCAwIH0gfSk7CiAgICAgfQogCiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KHdyYXBwZXIsIGRldGFpbC5kYXRhKCksIG9mZnNldFRvRW1pdCwgdGV4dFRvRW1pdC5sZW5ndGgo
KSwgdGV4dFRvRW1pdC51dGY4KCkuZGF0YSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAK
aW5kZXggOWFjODkwYmYzNTFkOWZlYzU1MDdiY2YwMjA0ZjRiNmM1M2M0ZTM1MS4uMDY4M2UwY2Jh
ODE0ZmJlYWVmYjNkMmM5Njk4YzQwNTM4NGMzMWIzOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGlu
ay5jcHAKQEAgLTE1MSw4ICsxNTEsMTEgQEAgc3RhdGljIEF0a09iamVjdCogd2Via2l0QWNjZXNz
aWJsZUh5cGVybGlua0dldE9iamVjdChBdGtIeXBlcmxpbmsqIGxpbmssIGdpbnQgaW4KICAgICBy
ZXR1cm4gQVRLX09CSkVDVChhY2Nlc3NpYmxlSHlwZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBs
KTsKIH0KIAotc3RhdGljIGdpbnQgcmFuZ2VMZW5ndGhGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9i
amVjdCYgb2JqLCBSYW5nZSogcmFuZ2UpCitzdGF0aWMgZ2ludCByYW5nZUxlbmd0aEZvck9iamVj
dChBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmosIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYg
cmFuZ2UpCiB7CisgICAgaWYgKCFyYW5nZSkKKyAgICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBU
aGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBhY3R1YWwgbGVuZ3RoIGluIG1vc3Qgb2YgdGhlIGNhc2Vz
CiAgICAgaW50IGJhc2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRv
ckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKIApAQCAtMTk2LDgg
KzE5OSw3IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRTdGFydElu
ZGV4KEF0a0h5cGVybGluayogbGluaykKICAgICBpZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJl
dHVybiAwOwogCi0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQo
KSwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2RlKHBhcmVudE5vZGUpLCBmaXJzdFBvc2l0aW9u
SW5PckJlZm9yZU5vZGUobm9kZSkpOwotICAgIHJldHVybiByYW5nZUxlbmd0aEZvck9iamVjdChj
b3JlT2JqZWN0LCByYW5nZS5wdHIoKSk7CisgICAgcmV0dXJuIHJhbmdlTGVuZ3RoRm9yT2JqZWN0
KGNvcmVPYmplY3QsIG1ha2VTaW1wbGVSYW5nZShmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUo
cGFyZW50Tm9kZSksIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShub2RlKSkpOwogfQogCiBz
dGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlwZXJsaW5rR2V0RW5kSW5kZXgoQXRrSHlwZXJs
aW5rKiBsaW5rKQpAQCAtMjE4LDggKzIyMCw3IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2li
bGVIeXBlcmxpbmtHZXRFbmRJbmRleChBdGtIeXBlcmxpbmsqIGxpbmspCiAgICAgaWYgKCFwYXJl
bnROb2RlKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKG5vZGUtPmRvY3VtZW50KCksIGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShwYXJlbnRO
b2RlKSwgbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlKSk7Ci0gICAgcmV0dXJuIHJhbmdl
TGVuZ3RoRm9yT2JqZWN0KGNvcmVPYmplY3QsIHJhbmdlLnB0cigpKTsKKyAgICByZXR1cm4gcmFu
Z2VMZW5ndGhGb3JPYmplY3QoY29yZU9iamVjdCwgbWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRp
b25Jbk9yQmVmb3JlTm9kZShwYXJlbnROb2RlKSwgbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShu
b2RlKSkpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4gd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0lz
VmFsaWQoQXRrSHlwZXJsaW5rKiBsaW5rKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNl
L1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQu
Y3BwCmluZGV4IDExNGZjYTcwZDk3MjgyZDAzYTQ1MWNkMjgxMmM3YjY2MWZhY2QyYWQuLmQ3MDZi
Mjc1ZDFiYjZlZDMwNDE0YmE4YTgxMDhlZjU3NjM4M2NhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxl
SW50ZXJmYWNlVGV4dC5jcHAKQEAgLTQwOSwxMyArNDA5LDEzIEBAIHN0YXRpYyB2b2lkIGdldFNl
bGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwg
VmlzaWJsCiAKICAgICAvLyBDYWxjdWxhdGUgcG9zaXRpb24gb2YgdGhlIHNlbGVjdGVkIHJhbmdl
IGluc2lkZSB0aGUgb2JqZWN0LgogICAgIFBvc2l0aW9uIHBhcmVudEZpcnN0UG9zaXRpb24gPSBm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSk7Ci0gICAgYXV0byByYW5nZUluUGFyZW50
ID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVudCgpLCBwYXJlbnRGaXJzdFBvc2l0aW9uLCBu
b2RlUmFuZ2VTdGFydCk7CisgICAgYXV0byByYW5nZUluUGFyZW50ID0gKm1ha2VTaW1wbGVSYW5n
ZShwYXJlbnRGaXJzdFBvc2l0aW9uLCBub2RlUmFuZ2VTdGFydCk7CiAKICAgICAvLyBTZXQgdmFs
dWVzIGZvciBzdGFydCBvZmZzZXRzIGFuZCBjYWxjdWxhdGUgaW5pdGlhbCByYW5nZSBsZW5ndGgu
CiAgICAgLy8gVGhlc2UgdmFsdWVzIG1pZ2h0IGJlIGFkanVzdGVkIGxhdGVyIHRvIGNvdmVyIHNw
ZWNpYWwgY2FzZXMuCi0gICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQo
Y29yZU9iamVjdCwgY2hhcmFjdGVyQ291bnQocmFuZ2VJblBhcmVudC5nZXQoKSwgVGV4dEl0ZXJh
dG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpKTsKLSAgICBhdXRv
IG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3Rh
cnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgaW50IHJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQo
bm9kZVJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlz
aWJsZVBvc2l0aW9ucyk7CisgICAgc3RhcnRPZmZzZXQgPSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZz
ZXQoY29yZU9iamVjdCwgY2hhcmFjdGVyQ291bnQocmFuZ2VJblBhcmVudCwgVGV4dEl0ZXJhdG9y
RW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpKTsKKyAgICBhdXRvIG5v
ZGVSYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2Uobm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7
CisgICAgaW50IHJhbmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobm9kZVJhbmdlLCBUZXh0SXRl
cmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CiAKICAgICAv
LyBTcGVjaWFsIGNhc2VzIHRoYXQgYXJlIG9ubHkgcmVsZXZhbnQgd2hlbiB3b3JraW5nIHdpdGgg
Kl9FTkQgYm91bmRhcmllcy4KICAgICBpZiAoc2VsZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBTVFJF
QU0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dl
YktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCAyYmRhZGJhMjRkZTMxOGY3ZDU5MTEyNDhkNmE5
NWEzYzVhMjY4OGM2Li44ZDYyMWJlNzgxZTk5MGMxZGM0MDYwZmVkZmIzOTJiNzE2NTc1NGE5IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3Np
YmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0
QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0yNDYsMTAgKzI0NiwxMCBAQCBBWENvcmVPYmplY3QqIG9i
amVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5j
ZU9iamVjdAogICAgIGlmIChzdGFydFBvc2l0aW9uID09IGVuZFBvc2l0aW9uKQogICAgICAgICBv
ZmZzZXQgPSAwOwogICAgIGVsc2UgaWYgKCFpc1N0YXJ0T2ZMaW5lKGVuZFBvc2l0aW9uKSkgewot
ICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVu
ZFBvc2l0aW9uLnByZXZpb3VzKCkpOworICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJh
bmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLnByZXZpb3VzKCkpOwogICAgICAgICBvZmZz
ZXQgPSAocmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hh
cmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKSA6IDApICsgMTsKICAgICB9IGVsc2Ug
ewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24s
IGVuZFBvc2l0aW9uKTsKKyAgICAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFy
dFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAgICAgICAgIG9mZnNldCA9IHJhbmdlID8gY2hhcmFj
dGVyQ291bnQoKnJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlz
aWJsZVBvc2l0aW9ucykgOiAwOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQppbmRleCA5YWFlY2FhNjI5MWVlMzNhYTk5YmZmMzI0MjdiMWJhNWFhZmI2ZjM1
Li4wZmNlMGYyMDY0YmI0Yjg2OTdlYTdmMjhkNDNiMzU4NTg5ZGUwMTgxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpAQCAtMTQ4LDcgKzE0OCw3IEBAIEBpbnRlcmZh
Y2UgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgOiBOU09iamVjdAogCiArIChXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJXaXRoVmlzaWJsZVBvc2l0aW9uOihWaXNpYmxl
UG9zaXRpb24mKXZpc2libGVQb3MgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlOwogKyAoV2Vi
QWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDoo
Q2hhcmFjdGVyT2Zmc2V0JiljaGFyYWN0ZXJPZmZzZXQgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNh
Y2hlOwotKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtl
ckZvclJhbmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+KXJhbmdlIGlzU3RhcnQ6KEJPT0wpaXNTdGFy
dCBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGU7CisrIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1h
cmtlciAqKXN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6KGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYpcmFuZ2UgaXNTdGFydDooQk9PTClpc1N0YXJ0IGNhY2hlOihBWE9iamVjdENhY2hl
KiljYWNoZTsKIAogQGVuZAogCkBAIC0yMDgsNyArMjA4LDcgQEAgKyAoV2ViQWNjZXNzaWJpbGl0
eVRleHRNYXJrZXIgKil0ZXh0TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zm
c2V0JikKICAgICByZXR1cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGlu
aXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtlckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNl
XTsKIH0KIAotKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1h
cmtlckZvclJhbmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+KXJhbmdlIGlzU3RhcnQ6KEJPT0wpaXNT
dGFydCBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGUKKysgKFdlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyICopc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTooY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JilyYW5nZSBpc1N0YXJ0OihCT09MKWlzU3RhcnQgY2FjaGU6KEFYT2JqZWN0Q2Fj
aGUqKWNhY2hlCiB7CiAgICAgaWYgKCFjYWNoZSkKICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTIy
NzMsMTcgKzIyNzMsOCBAQCAtIChOU0FycmF5ICopYXJyYXlPZlRleHRGb3JUZXh0TWFya2Vyczoo
TlNBcnJheSAqKW1hcmtlcnMgYXR0cmlidXRlZDooQk9PTClhdHRyaQogICAgIFdlYkFjY2Vzc2li
aWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIgPSBbbWFya2VycyBvYmplY3RBdEluZGV4OjFdOwog
ICAgIGlmICghW3N0YXJ0TWFya2VyIGlzS2luZE9mQ2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlUZXh0
TWFya2VyIGNsYXNzXV0gfHwgIVtlbmRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIgY2xhc3NdXSkKICAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICAv
LyBleHRyYWN0IHRoZSBzdGFydCBhbmQgZW5kIFZpc2libGVQb3NpdGlvbgotICAgIFZpc2libGVQ
b3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbiA9IFtzdGFydE1hcmtlciB2aXNpYmxlUG9zaXRp
b25dOwotICAgIGlmIChzdGFydFZpc2libGVQb3NpdGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0
dXJuIG5pbDsKLSAgICAKLSAgICBWaXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uID0g
W2VuZE1hcmtlciB2aXNpYmxlUG9zaXRpb25dOwotICAgIGlmIChlbmRWaXNpYmxlUG9zaXRpb24u
aXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBhdXRvIHJhbmdlID0gbWFrZVJh
bmdlKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRWaXNpYmxlUG9zaXRpb24pOworICAgIGF1dG8g
cmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoW3N0YXJ0TWFya2VyIHZpc2libGVQb3NpdGlvbl0sIFtl
bmRNYXJrZXIgdmlzaWJsZVBvc2l0aW9uXSk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0
dXJuIG5pbDsKIApAQCAtMjM2NiwxMCArMjM1NywxMCBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9O
U1JhbmdlOihSYW5nZSAqKWxpdmVSYW5nZQogICAgIHJldHVybiBOU01ha2VSYW5nZShjaGFyYWN0
ZXJDb3VudCh7IHsgKnNjb3BlLCAwIH0sIHJhbmdlLnN0YXJ0IH0pLCBjaGFyYWN0ZXJDb3VudChy
YW5nZSkpOwogfQogCi0tIChSZWZQdHI8UmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5n
ZSlyYW5nZQorLSAoT3B0aW9uYWw8U2ltcGxlUmFuZ2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNS
YW5nZSlyYW5nZQogewogICAgIGlmIChyYW5nZS5sb2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAg
IC8vIG91ciBjcml0aWNhbCBhc3N1bXB0aW9uIGlzIHRoYXQgd2UgYXJlIG9ubHkgY2FsbGVkIGJ5
IGlucHV0IG1ldGhvZHMgdGhhdAogICAgIC8vIGNvbmNlbnRyYXRlIG9uIGEgZ2l2ZW4gYXJlYSBj
b250YWluaW5nIHRoZSBzZWxlY3Rpb24KQEAgLTIzODEsOCArMjM3Miw5IEBAIC0gKFJlZlB0cjxS
YW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1JhbmdlKXJhbmdlCiAgICAgYXV0byBzZWxlY3Rp
b25Sb290ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RF
ZGl0YWJsZUVsZW1lbnQoKTsKICAgICBhdXRvIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVj
dGlvblJvb3QgOiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgaWYgKCFzY29wZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXNv
bHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpzY29wZSks
IHJhbmdlKSk7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVz
b2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqc2NvcGUp
LCByYW5nZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9kIGlzIGludGVuZGVkIHRvIHRha2UgYSB0ZXh0
IG1hcmtlciByZXByZXNlbnRpbmcgYSBWaXNpYmxlUG9zaXRpb24gYW5kIGNvbnZlcnQgaXQKQEAg
LTI0MDgsNyArMjQwMCw3IEBAIC0gKE5TQXJyYXkgKil0ZXh0TWFya2VyUmFuZ2UKIHsKICAgICBp
ZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmls
OwotICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOmNyZWF0ZUxpdmVSYW5nZShz
ZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJhbmdlKCkpLmdldCgpXTsKKyAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlcnNGb3JSYW5nZTpzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJh
bmdlKCldOwogfQogCiAvLyBBIG1ldGhvZCB0byBnZXQgdGhlIG5vcm1hbGl6ZWQgdGV4dCBjdXJz
b3IgcmFuZ2Ugb2YgYW4gZWxlbWVudC4gVXNlZCBpbiBEdW1wUmVuZGVyVHJlZS4KQEAgLTI0Nzgs
NyArMjQ3MCw3IEBAIC0gKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopdGV4dE1hcmtlckZv
clBvc2l0aW9uOihOU0ludGVnZXIpcG9zaXRpb24KICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNj
ZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgUmVmUHRyPFJhbmdl
PiByYW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01SYW5nZTpOU01ha2VSYW5nZShwb3NpdGlvbiwg
MCldOworICAgIGF1dG8gcmFuZ2UgPSBbc2VsZiBfY29udmVydFRvRE9NUmFuZ2U6TlNNYWtlUmFu
Z2UocG9zaXRpb24sIDApXTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICByZXR1cm4gbmlsOwog
CkBAIC0yNjg3LDcgKzI2NzksNyBAQCAtIChOU0FycmF5ICopbWlzc3BlbGxpbmdUZXh0TWFya2Vy
UmFuZ2U6KE5TQXJyYXkgKilzdGFydFRleHRNYXJrZXJSYW5nZSBmb3J3YXJkOgogICAgICAgICBy
ZXR1cm4gbmlsOwogICAgIGF1dG8gbWlzc3BlbGxpbmdSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2Jq
ZWN0LT5taXNzcGVsbGluZ1JhbmdlKCpzdGFydFJhbmdlLAogICAgICAgICBmb3J3YXJkID8gQWNj
ZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4dCA6IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJl
Y3Rpb246OlByZXZpb3VzKTsKLSAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlcnNGb3JSYW5nZTpj
cmVhdGVMaXZlUmFuZ2UobWlzc3BlbGxpbmdSYW5nZSkuZ2V0KCldOworICAgIHJldHVybiBbc2Vs
ZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOm1pc3NwZWxsaW5nUmFuZ2VdOwogfQogCiAtIChXZWJBY2Nl
c3NpYmlsaXR5VGV4dE1hcmtlciAqKW5leHRNYXJrZXJGb3JNYXJrZXI6KFdlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyICopbWFya2VyCkBAIC0yNzI5LDE3ICsyNzIxLDE3IEBAIC0gKENHUmVjdClm
cmFtZUZvclRleHRNYXJrZXJzOihOU0FycmF5ICopYXJyYXkKICAgICByZXR1cm4gW3NlbGYgY29u
dmVydFJlY3RUb1NwYWNlOnJlY3Qgc3BhY2U6QWNjZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6
U2NyZWVuXTsKIH0KIAotLSAoUmVmUHRyPFJhbmdlPilyYW5nZUZyb21NYXJrZXJzOihOU0FycmF5
ICopbWFya2VycyB3aXRoVGV4dDooTlNTdHJpbmcgKil0ZXh0CistIChPcHRpb25hbDxTaW1wbGVS
YW5nZT4pcmFuZ2VGcm9tTWFya2VyczooTlNBcnJheSAqKW1hcmtlcnMgd2l0aFRleHQ6KE5TU3Ry
aW5nICopdGV4dAogewotICAgIFJlZlB0cjxSYW5nZT4gb3JpZ2luYWxSYW5nZSA9IFtzZWxmIHJh
bmdlRm9yVGV4dE1hcmtlcnM6bWFya2Vyc107CisgICAgYXV0byBvcmlnaW5hbFJhbmdlID0gW3Nl
bGYgcmFuZ2VGb3JUZXh0TWFya2VyczptYXJrZXJzXTsKICAgICBpZiAoIW9yaWdpbmFsUmFuZ2Up
Ci0gICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAg
CiAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBzZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmpl
Y3RDYWNoZSgpOwogICAgIGlmICghY2FjaGUpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCi0gICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShj
YWNoZS0+cmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5nZSgqb3JpZ2luYWxSYW5nZSwgdGV4dCkpOwor
ICAgIHJldHVybiBjYWNoZS0+cmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5nZSgqb3JpZ2luYWxSYW5n
ZSwgdGV4dCk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIGluIHRoZSBsYXlvdXQgdGVzdC4K
QEAgLTI3NTgsNyArMjc1MCw3IEBAIC0gKE5TQXJyYXkgKil0ZXh0UmVjdHNGcm9tTWFya2Vyczoo
TlNBcnJheSAqKW1hcmtlcnMgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogICAgICAgICByZXR1
cm4gbmlsOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IHJlY3RzOwotICAg
IHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHJl
Y3RzKTsKKyAgICBjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNX
aXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHJlY3RzKTsKICAgICBpZiAocmVjdHMuaXNFbXB0eSgp
KQogICAgICAgICByZXR1cm4gbmlsOwogICAgIHJldHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBb
Jl0gKGF1dG8mIHJlY3QpIHsKQEAgLTI4MDQsMjQgKzI3OTYsMjQgQEAgLSAoV2ViQWNjZXNzaWJp
bGl0eVRleHRNYXJrZXIgKilwcmV2aW91c01hcmtlckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFj
dGVyT2Zmc2UKICAgICByZXR1cm4gW1tbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2Nd
IGluaXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtlckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9yZWxl
YXNlXTsKIH0KIAotLSAoUmVmUHRyPFJhbmdlPilyYW5nZUZvclRleHRNYXJrZXJzOihOU0FycmF5
ICopdGV4dE1hcmtlcnMKKy0gKE9wdGlvbmFsPFNpbXBsZVJhbmdlPilyYW5nZUZvclRleHRNYXJr
ZXJzOihOU0FycmF5ICopdGV4dE1hcmtlcnMKIHsKICAgICBpZiAoW3RleHRNYXJrZXJzIGNvdW50
XSAhPSAyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVs
bG9wdDsKICAgICAKICAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqc3RhcnRNYXJrZXIg
PSBbdGV4dE1hcmtlcnMgb2JqZWN0QXRJbmRleDowXTsKICAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4
dE1hcmtlciAqZW5kTWFya2VyID0gW3RleHRNYXJrZXJzIG9iamVjdEF0SW5kZXg6MV07CiAgICAg
CiAgICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtlciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3Np
YmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAg
ICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9
IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkK
LSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAg
ICAgCiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0ID0gW3N0YXJ0TWFy
a2VyIGNoYXJhY3Rlck9mZnNldF07CiAgICAgQ2hhcmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9m
ZnNldCA9IFtlbmRNYXJrZXIgY2hhcmFjdGVyT2Zmc2V0XTsKLSAgICByZXR1cm4gY3JlYXRlTGl2
ZVJhbmdlKGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFy
YWN0ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9mZnNldCkpOworICAgIHJldHVybiBjYWNoZS0+cmFu
Z2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0LCBlbmRD
aGFyYWN0ZXJPZmZzZXQpOwogfQogCiAtIChOU0ludGVnZXIpbGVuZ3RoRm9yVGV4dE1hcmtlcnM6
KE5TQXJyYXkgKil0ZXh0TWFya2VycwpAQCAtMjg0Miw3ICsyODM0LDcgQEAgLSAoV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtlckZvclRleHRNYXJrZXJzOihO
U0FycmF5ICopdGUKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2Vs
ZiByYW5nZUZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJzXTsKKyAgICBhdXRvIHJhbmdlID0gW3Nl
bGYgcmFuZ2VGb3JUZXh0TWFya2Vyczp0ZXh0TWFya2Vyc107CiAgICAgaWYgKCFyYW5nZSkKICAg
ICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI4NTQsMTEgKzI4NDYsMTAgQEAgLSAoTlNBcnJh
eSAqKXRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnM6KE5TQXJyYXkgKil0ZXh0TWFya2VycwogICAg
IGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmlsaXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBu
aWw7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1h
cmtlcnM6dGV4dE1hcmtlcnNdOwotICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdl
OnJhbmdlXTsKKyAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlcnNGb3JSYW5nZTpbc2VsZiByYW5n
ZUZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJzXV07CiB9CiAKLS0gKE5TQXJyYXkgKil0ZXh0TWFy
a2Vyc0ZvclJhbmdlOihSZWZQdHI8UmFuZ2U+KXJhbmdlCistIChOU0FycmF5ICopdGV4dE1hcmtl
cnNGb3JSYW5nZTooY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JilyYW5nZQogewogICAgIGlm
ICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBi
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCmluZGV4IGMzNjFjNDAxMWY3NDdlMDk0NDY0ODY0ZjNmY2E0MTc4Mjc4ZjVk
YjAuLmFmODQ2YzE3ZjY2NjllYWE3OTg1NzIxYWEwMjIzZDRkZGNmZjFjNGUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCkBAIC02OTMsNyArNjkzLDcgQEAgc3RhdGlj
IEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9y
UGFyYW1ldGVyaXplZEF0dHIKIAogICAgIGlmIChbbWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xhc3M6
W05TQXJyYXkgY2xhc3NdXSkgewogICAgICAgICBvcGVyYXRpb24udGV4dFJhbmdlcyA9IG1ha2VW
ZWN0b3IobWFya2VyUmFuZ2VzLCBbd3JhcHBlcl0gKGlkIG1hcmtlclJhbmdlKSB7Ci0gICAgICAg
ICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKFt3cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlclJh
bmdlOm1hcmtlclJhbmdlXSk7CisgICAgICAgICAgICByZXR1cm4gW3dyYXBwZXIgcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTcx
NCw5ICs3MTQsOSBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJp
bGl0eVRleHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJpemVkQXR0cgogICAgIHJldHVybiBvcGVyYXRp
b247CiB9CiAKLXN0YXRpYyBzdGQ6OnBhaXI8UmVmUHRyPFJhbmdlPiwgQWNjZXNzaWJpbGl0eVNl
YXJjaERpcmVjdGlvbj4gYWNjZXNzaWJpbGl0eU1pc3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQ
YXJhbWV0ZXJpemVkQXR0cmlidXRlKFdlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyICpvYmpl
Y3QsIGNvbnN0IE5TRGljdGlvbmFyeSAqcGFyYW1zKQorc3RhdGljIHN0ZDo6cGFpcjxPcHRpb25h
bDxTaW1wbGVSYW5nZT4sIEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb24+IGFjY2Vzc2liaWxp
dHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFyYW1ldGVyaXplZEF0dHJpYnV0ZShXZWJB
Y2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqb2JqZWN0LCBjb25zdCBOU0RpY3Rpb25hcnkgKnBh
cmFtcykKIHsKLSAgICBzdGQ6OnBhaXI8UmVmUHRyPFJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJj
aERpcmVjdGlvbj4gY3JpdGVyaWE7CisgICAgc3RkOjpwYWlyPE9wdGlvbmFsPFNpbXBsZVJhbmdl
PiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gY3JpdGVyaWE7CiAKICAgICBjcml0ZXJp
YS5maXJzdCA9IFtvYmplY3QgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6W3BhcmFtcyBvYmplY3RG
b3JLZXk6QCJBWFN0YXJ0VGV4dE1hcmtlclJhbmdlIl1dOwogCkBAIC03NzcsMjYgKzc3NywyNiBA
QCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCogYWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRN
YXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaAogICAgIHJldHVybiBjYWNoZS0+YWNjZXNzaWJpbGl0
eU9iamVjdEZvclRleHRNYXJrZXJEYXRhKHRleHRNYXJrZXJEYXRhKTsKIH0KIAotLSAoaWQpdGV4
dE1hcmtlclJhbmdlRnJvbVJhbmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+KXJhbmdlCistIChpZCl0
ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpcmFu
Z2UKIHsKICAgICBpZiAoYXV0byogYmFja2luZ09iamVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
KQogICAgICAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKGJhY2tpbmdPYmplY3Qt
PmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UpOwogICAgIHJldHVybiBuaWw7CiB9CiAKLXN0YXRpYyBp
ZCB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFJl
ZlB0cjxSYW5nZT4gcmFuZ2UpCitzdGF0aWMgaWQgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKEFY
T2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQog
ewogICAgIGlkIHN0YXJ0VGV4dE1hcmtlciA9IHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2Uo
Y2FjaGUsIHJhbmdlLCB0cnVlKTsKICAgICBpZCBlbmRUZXh0TWFya2VyID0gc3RhcnRPckVuZFRl
eHRtYXJrZXJGb3JSYW5nZShjYWNoZSwgcmFuZ2UsIGZhbHNlKTsKICAgICByZXR1cm4gdGV4dE1h
cmtlclJhbmdlRnJvbU1hcmtlcnMoc3RhcnRUZXh0TWFya2VyLCBlbmRUZXh0TWFya2VyKTsKIH0K
IAotLSAoaWQpc3RhcnRPckVuZFRleHRNYXJrZXJGb3JSYW5nZTooY29uc3QgUmVmUHRyPFJhbmdl
PilyYW5nZSBpc1N0YXJ0OihCT09MKWlzU3RhcnQKKy0gKGlkKXN0YXJ0T3JFbmRUZXh0TWFya2Vy
Rm9yUmFuZ2U6KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpcmFuZ2UgaXNTdGFydDooQk9P
TClpc1N0YXJ0CiB7CiAgICAgcmV0dXJuIHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2Uoc2Vs
Zi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UsIGlzU3RhcnQpOwogfQog
Ci1zdGF0aWMgaWQgc3RhcnRPckVuZFRleHRtYXJrZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiBj
YWNoZSwgUmVmUHRyPFJhbmdlPiByYW5nZSwgYm9vbCBpc1N0YXJ0KQorc3RhdGljIGlkIHN0YXJ0
T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIGJvb2wgaXNTdGFydCkKIHsKICAgICBpZiAoIWNhY2hl
KQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtODY0LDI0ICs4NjQsMjQgQEAgc3RhdGljIGlkIHRl
eHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhPYmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IENo
YXJhY3Rlck9mZnMKICAgICByZXR1cm4gQ0ZCcmlkZ2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyQ3Jl
YXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25zdCBVSW50OCopJnRleHRNYXJrZXJEYXRhLCBz
aXplb2YodGV4dE1hcmtlckRhdGEpKSk7CiB9CiAKLS0gKFJlZlB0cjxSYW5nZT4pcmFuZ2VGb3JU
ZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJSYW5nZQorLSAoT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+KXJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOihpZCl0ZXh0TWFya2VyUmFuZ2UKIHsKICAgICBp
ZiAoIXRleHRNYXJrZXJSYW5nZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgaWQgc3RhcnRUZXh0TWFya2VyID0gQVhUZXh0
TWFya2VyUmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFuZ2UpOwogICAgIGlkIGVuZFRleHRNYXJrZXIg
PSBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFya2VyUmFuZ2UpOwogICAgIAogICAgIGlmICgh
c3RhcnRUZXh0TWFya2VyIHx8ICFlbmRUZXh0TWFya2VyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBBWE9iamVjdENhY2hl
KiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYg
KCFjYWNoZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51
bGxvcHQ7CiAgICAgCiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0ID0g
W3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcjpzdGFydFRleHRNYXJrZXJdOwogICAg
IENoYXJhY3Rlck9mZnNldCBlbmRDaGFyYWN0ZXJPZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZz
ZXRGb3JUZXh0TWFya2VyOmVuZFRleHRNYXJrZXJdOwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFu
Z2UoY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hhcmFjdGVyT2Zmc2V0cyhzdGFydENoYXJhY3Rl
ck9mZnNldCwgZW5kQ2hhcmFjdGVyT2Zmc2V0KSk7CisgICAgcmV0dXJuIGNhY2hlLT5yYW5nZUZv
clVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFyYWN0ZXJPZmZzZXQsIGVuZENoYXJh
Y3Rlck9mZnNldCk7CiB9CiAKIHN0YXRpYyBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0
Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBjYWNoZSwgQ0ZUeXBlUmVmIHRleHRNYXJrZXIp
CkBAIC0xMjQyLDcgKzEyNDIsNyBAQCAtIChOU0F0dHJpYnV0ZWRTdHJpbmcgKilkb0FYQXR0cmli
dXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTooaWQpdGV4dE1hcmtlclJhbgogICAgICAgICBp
ZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAgICByZXR1cm4gbmlsOwogCi0gICAgICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5n
ZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYg
cmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgICAgIHJldHVybiBuaWw7CiAgICAgICAgIGF1dG8gYXR0clN0cmluZyA9
IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0XSk7CkBAIC0z
NjE4LDcgKzM2MTgsNyBAQCBBTExPV19ERVBSRUNBVEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIC0g
KE5TQXR0cmlidXRlZFN0cmluZyAqKWRvQVhBdHRyaWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFu
Z2UpcmFuZ2UKIHsKICAgICBhdXRvIHdlYlJhbmdlID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJh
bmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2UpOwotICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmli
dXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFu
Z2U6Y3JlYXRlTGl2ZVJhbmdlKHdlYlJhbmdlKV0gc3BlbGxDaGVjazpZRVNdOworICAgIHJldHVy
biBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0
TWFya2VyUmFuZ2VGcm9tUmFuZ2U6d2ViUmFuZ2VdIHNwZWxsQ2hlY2s6WUVTXTsKIH0KIAogLSAo
TlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFuZ2UqKXJhbmdlCkBAIC0zNzg3LDcgKzM3ODcs
NyBAQCAtIChpZCl0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6KGlkKXRleHRNYXJrZXIgZm9y
VW5pdDooVGV4dFVuaXQpdGV4dFVuaXQKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAK
LSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZShjYWNoZSwgY3JlYXRlTGl2
ZVJhbmdlKHJhbmdlKSk7CisgICAgICAgIHJldHVybiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2Uo
Y2FjaGUsIHJhbmdlKTsKICAgICB9KTsKIH0KIApAQCAtMzk1NCw3ICszOTU0LDcgQEAgQUxMT1df
REVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBpZiAocmFuZ2VzLmlz
RW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZU5TQXJyYXkocmFuZ2VzLCBbJl0gKGF1dG8mIHJhbmdlKSB7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpjcmVhdGVM
aXZlUmFuZ2UocmFuZ2UpXTsKKyAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYg
dGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOnJhbmdlXTsKICAgICAgICAgICAgIH0pLmF1dG9yZWxl
YXNlKCk7CiAgICAgICAgIH0pOwogICAgIH0KQEAgLTQwMzAsNyArNDAzMCw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgICAgIHJldHVybiBuaWw7
CiAKICAgICAgICAgICAgIGlmIChhdXRvIG1pc3NwZWxsaW5nUmFuZ2UgPSBiYWNraW5nT2JqZWN0
LT5taXNzcGVsbGluZ1JhbmdlKCpjcml0ZXJpYS5maXJzdCwgY3JpdGVyaWEuc2Vjb25kKSkKLSAg
ICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJh
bmdlOmNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxpbmdSYW5nZSldOworICAgICAgICAgICAgICAg
IHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Km1pc3NwZWxs
aW5nUmFuZ2VdOwogICAgICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAgICAgfSk7CiAgICAgfQpA
QCAtNDA3MCw3ICs0MDcwLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFsVG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5n
ZUZvclVJRWxlbWVudCJdKSB7CiAgICAgICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2
ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJlYWQ8aWQ+KFsmdWlFbGVtZW50LCBwcm90ZWN0
ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAtPiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAg
ICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRl
TGl2ZVJhbmdlKHVpRWxlbWVudC5nZXQoKS0+ZWxlbWVudFJhbmdlKCkpXTsKKyAgICAgICAgICAg
IHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6dWlFbGVtZW50
LmdldCgpLT5lbGVtZW50UmFuZ2UoKV07CiAgICAgICAgIH0pOwogICAgIH0KIApAQCAtNDIyMiw3
ICs0MjIyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAg
ICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0MSA9IFtwcm90ZWN0ZWRTZWxmIGNo
YXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4dE1hcmtlcjFdOwogICAgICAgICAgICAgQ2hh
cmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldDIgPSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJP
ZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIyXTsKICAgICAgICAgICAgIGF1dG8gcmFuZ2Ug
PSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNl
dDEsIGNoYXJhY3Rlck9mZnNldDIpOwotICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxm
IHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpXTsKKyAgICAg
ICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFu
Z2VdOwogICAgICAgICB9KTsKICAgICB9CiAKQEAgLTQzMDQsNyArNDMwNCw3IEBAIEFMTE9XX0RF
UFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAogICAgICAgICAgICAgaWYgKCFiYWNraW5nT2Jq
ZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogCi0gICAgICAgICAgICBSZWZQdHI8UmFu
Z2U+IHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1h
cmtlclJhbmdlXTsKKyAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5n
ZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOwogICAgICAgICAgICAgaWYgKCFy
YW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIHJldHVybiBBWE9i
amVjdENhY2hlOjpsZW5ndGhGb3JSYW5nZShTaW1wbGVSYW5nZSB7ICpyYW5nZSB9KTsKQEAgLTQz
MTcsMTQgKzQzMTcsMTQgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAg
ICAgLy8gVXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJUcmVlIChzbyBmYXIpLgogICAgIGlmIChbYXR0
cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3RhcnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJh
bmdlIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVh
c2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyUmFuZ2UsIHByb3RlY3RlZFNl
bGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJh
bmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3Rl
ZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAg
ICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJh
bmdlIGlzU3RhcnQ6WUVTXTsKICAgICAgICAgfSk7CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1
dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhFbmRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIl0p
IHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFs
dWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFya2VyUmFuZ2UsIHByb3RlY3RlZFNlbGYgPSBy
ZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0cjxpZD4gewotICAgICAgICAgICAgUmVmUHRy
PFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRl
eHRNYXJrZXJSYW5nZV07CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYg
cmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgICAgIHJl
dHVybiBbcHJvdGVjdGVkU2VsZiBzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlz
U3RhcnQ6Tk9dOwogICAgICAgICB9KTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmluZGV4IDYwZGU2MzBlYjBiYjYwZTdjZGNmODdi
ZjJlYzg4ZWQ4NWQwYmRhMzYuLjY4Y2M3NjVmMDMwNjdlMmE3OGY2ZGE1MTRjZWM3YmZkMmNkNjI2
NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIu
Y3BwCkBAIC0xMDUsOCArMTA1LDcgQEAgdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZp
bHRlck1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlLCBjb25zdCBGdW4KIHN0YXRpYyB2
b2lkIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJrZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYg
bWFya2VyLCBOb2RlJiBub2RlKQogewogICAgIEFTU0VSVCghbm9kZS5kb2N1bWVudCgpLnZpZXco
KSB8fCAhbm9kZS5kb2N1bWVudCgpLnZpZXcoKS0+bmVlZHNMYXlvdXQoKSk7Ci0gICAgYXV0byBy
YW5nZSA9IFNpbXBsZVJhbmdlIHsgeyBub2RlLCBtYXJrZXIuc3RhcnRPZmZzZXQoKSB9LCB7IG5v
ZGUsIG1hcmtlci5lbmRPZmZzZXQoKSB9IH07Ci0gICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29s
dXRlUmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJh
bmdlLCB0cnVlKSkpOworICAgIG1hcmtlci5zZXRVbmNsaXBwZWRBYnNvbHV0ZVJlY3RzKGJvdW5k
aW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0ZVRleHRRdWFkcyhyYW5nZShub2RlLCBtYXJr
ZXIpLCB0cnVlKSkpOwogfQogCiB2b2lkIERvY3VtZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxp
ZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCkBAIC02NjMsNiArNjYyLDEzIEBAIHZvaWQgcmVtb3Zl
TWFya2Vycyhjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtl
cjo6TWFya2VyVHlwCiAgICAgcmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLm1hcmtl
cnMoKS5yZW1vdmVNYXJrZXJzKHJhbmdlLCB0eXBlcywgcG9saWN5KTsKIH0KIAorU2ltcGxlUmFu
Z2UgcmFuZ2UoTm9kZSYgbm9kZSwgY29uc3QgRG9jdW1lbnRNYXJrZXImIG1hcmtlcikKK3sKKyAg
ICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1hcmtlci5zdGFydE9mZnNldCgpOworICAgIHVuc2ln
bmVkIGVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZzZXQoKTsKKyAgICByZXR1cm4geyB7IG5vZGUs
IHN0YXJ0T2Zmc2V0IH0sIHsgbm9kZSwgZW5kT2Zmc2V0IH0gfTsKK30KKwogI2lmIEVOQUJMRShU
UkVFX0RFQlVHR0lORykKIAogdm9pZCBEb2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJr
ZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtl
ckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xs
ZXIuaAppbmRleCBhYWVmZjA1YjBkODRmOWUyOTdkODgzMGVmMDJkMTg1NWYxOGFhNTAzLi4wYjQ0
ZTJjMmVkM2JlZTUzNDNlYjc2NDg3ZGUyYjVmNjIwNDBjZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oCkBAIC0xMTUsNiArMTE1LDggQEAgdm9p
ZCBhZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2UmLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlw
ZSwgY29uc3QgRG9jdW1lbnRNYXIKIHZvaWQgYWRkTWFya2VyKFRleHQmLCB1bnNpZ25lZCBzdGFy
dE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgRG9j
dW1lbnRNYXJrZXI6OkRhdGEmJiA9IHsgfSk7CiB2b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2lt
cGxlUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRNYXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1l
bnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3ZlUGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIg
PSBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01hcmtlcjo6Tm8pOwogCitXRUJDT1JFX0VYUE9S
VCBTaW1wbGVSYW5nZSByYW5nZShOb2RlJiwgY29uc3QgRG9jdW1lbnRNYXJrZXImKTsKKwogaW5s
aW5lIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9sbGVyOjpoYXNNYXJrZXJzKCkgY29uc3QKIHsK
ICAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHkoKSA9PSAhbV9wb3NzaWJseUV4aXN0aW5nTWFy
a2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSkpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggOWUyZTJkZWIxODI4NGM3OWMxMWEzNDRlMDQ3N2M2NjRk
ZjE3N2QyZC4uNGIyNjQ5OTBmOGMyMWNiZDkzZmZmYzE4MTc3Y2UxM2FmNTQwYTI2MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCkBAIC00Miw3ICs0Miw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5o
IgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIKICNpbmNsdWRlICJQb3NpdGlvbkl0ZXJhdG9y
LmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1
ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyR3JpZC5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9S
YW5nZS5jcHAKaW5kZXggOWI3YTFhNjIxMjE5NWEyZTQ3NDhjYjI5NzE5NDRjMTY2MzI4MDA5Ni4u
MjY2MTg1ZWJkNzk1MmRjMjJhNWNhN2U0NDI1YmU5NTUxMmQ0ZjFiYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2Uu
Y3BwCkBAIC04OCw0MiArODgsNiBAQCBSZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQm
IG93bmVyRG9jdW1lbnQpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1
bWVudCkpOwogfQogCi1pbmxpbmUgUmFuZ2U6OlJhbmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50
LCBOb2RlKiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2Zmc2V0LCBOb2RlKiBlbmRDb250YWlu
ZXIsIGludCBlbmRPZmZzZXQpCi0gICAgOiBtX293bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkK
LSAgICAsIG1fc3RhcnQoJm93bmVyRG9jdW1lbnQpCi0gICAgLCBtX2VuZCgmb3duZXJEb2N1bWVu
dCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgcmFuZ2VDb3VudGVyLmluY3JlbWVudCgpOwotI2Vu
ZGlmCi0KLSAgICBtX293bmVyRG9jdW1lbnQtPmF0dGFjaFJhbmdlKCp0aGlzKTsKLQotICAgIC8v
IFNpbXBseSBzZXR0aW5nIHRoZSBjb250YWluZXJzIGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxk
IG5vdCBkbyBhbnkgb2YgdGhlIGNoZWNraW5nCi0gICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0
RW5kIGRvLCBzbyB3ZSBjYWxsIHRob3NlIGZ1bmN0aW9ucy4KLSAgICBpZiAoc3RhcnRDb250YWlu
ZXIpCi0gICAgICAgIHNldFN0YXJ0KCpzdGFydENvbnRhaW5lciwgc3RhcnRPZmZzZXQpOwotICAg
IGlmIChlbmRDb250YWluZXIpCi0gICAgICAgIHNldEVuZCgqZW5kQ29udGFpbmVyLCBlbmRPZmZz
ZXQpOwotfQotCi1SZWY8UmFuZ2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1l
bnQsIFJlZlB0cjxOb2RlPiYmIHN0YXJ0Q29udGFpbmVyLCBpbnQgc3RhcnRPZmZzZXQsIFJlZlB0
cjxOb2RlPiYmIGVuZENvbnRhaW5lciwgaW50IGVuZE9mZnNldCkKLXsKLSAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSYW5nZShvd25lckRvY3VtZW50LCBzdGFydENvbnRhaW5lci5nZXQoKSwgc3Rh
cnRPZmZzZXQsIGVuZENvbnRhaW5lci5nZXQoKSwgZW5kT2Zmc2V0KSk7Ci19Ci0KLVJlZjxSYW5n
ZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwgY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQotewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3
IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0LmNvbnRhaW5lck5vZGUoKSwgc3RhcnQuY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlbmQuY29udGFpbmVyTm9kZSgpLCBlbmQuY29tcHV0
ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKSk7Ci19Ci0KLVJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0
ZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxl
U3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgdmlzaWJsZUVuZCkKLXsKLSAgICBQb3NpdGlv
biBzdGFydCA9IHZpc2libGVTdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZCA9IHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQo
KS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBS
YW5nZShvd25lckRvY3VtZW50LCBzdGFydC5hbmNob3JOb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRF
ZGl0aW5nT2Zmc2V0KCksIGVuZC5hbmNob3JOb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09m
ZnNldCgpKSk7Ci19Ci0KIFJhbmdlOjp+UmFuZ2UoKQogewogICAgIG1fb3duZXJEb2N1bWVudC0+
ZGV0YWNoUmFuZ2UoKnRoaXMpOwpAQCAtMTk1LDIyICsxNTksNiBAQCBFeGNlcHRpb25Pcjx2b2lk
PiBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJlZk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAg
ICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnQoY29u
c3QgUG9zaXRpb24mIHN0YXJ0KQotewotICAgIFBvc2l0aW9uIHBhcmVudEFuY2hvcmVkID0gc3Rh
cnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFwYXJlbnRBbmNob3JlZC5j
b250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsK
LSAgICByZXR1cm4gc2V0U3RhcnQoKnBhcmVudEFuY2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFy
ZW50QW5jaG9yZWQub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpOwotfQotCi1FeGNlcHRpb25Pcjx2
b2lkPiBSYW5nZTo6c2V0RW5kKGNvbnN0IFBvc2l0aW9uJiBlbmQpCi17Ci0gICAgUG9zaXRpb24g
cGFyZW50QW5jaG9yZWQgPSBlbmQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYg
KCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBUeXBlRXJyb3IgfTsKLSAgICByZXR1cm4gc2V0RW5kKCpwYXJlbnRBbmNob3JlZC5jb250
YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLX0K
LQogdm9pZCBSYW5nZTo6Y29sbGFwc2UoYm9vbCB0b1N0YXJ0KQogewogICAgIGlmICh0b1N0YXJ0
KQpAQCAtOTk0LDcgKzk0MiwxMCBAQCBFeGNlcHRpb25PcjxOb2RlKj4gUmFuZ2U6OmNoZWNrTm9k
ZVdPZmZzZXQoTm9kZSYgbm9kZSwgdW5zaWduZWQgb2Zmc2V0KSBjb25zdAogCiBSZWY8UmFuZ2U+
IFJhbmdlOjpjbG9uZVJhbmdlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShv
d25lckRvY3VtZW50KCksICZzdGFydENvbnRhaW5lcigpLCBtX3N0YXJ0Lm9mZnNldCgpLCAmZW5k
Q29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKKyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZShv
d25lckRvY3VtZW50KCkpOworICAgIHJlc3VsdC0+c2V0U3RhcnQoc3RhcnRDb250YWluZXIoKSwg
bV9zdGFydC5vZmZzZXQoKSk7CisgICAgcmVzdWx0LT5zZXRFbmQoZW5kQ29udGFpbmVyKCksIG1f
ZW5kLm9mZnNldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBFeGNlcHRpb25Pcjx2b2lk
PiBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiByZWZOb2RlKQpAQCAtMTQ5NywxMCArMTQ0OCwx
MCBAQCBib29sIFJhbmdlOjpjb250YWlucyhjb25zdCBSYW5nZSYgb3RoZXIpIGNvbnN0CiAKIGJv
b2wgUmFuZ2U6OmNvbnRhaW5zKGNvbnN0IFZpc2libGVQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0
CiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBwb3NpdGlvblJhbmdlID0gbWFrZVJhbmdlKHBvc2l0aW9u
LCBwb3NpdGlvbik7CisgICAgYXV0byBwb3NpdGlvblJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBv
c2l0aW9uKTsKICAgICBpZiAoIXBvc2l0aW9uUmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gY29udGFpbnMoKnBvc2l0aW9uUmFuZ2UpOworICAgIHJldHVybiBjb250YWlu
cyhjcmVhdGVMaXZlUmFuZ2UoKnBvc2l0aW9uUmFuZ2UpKTsKIH0KIAogYm9vbCBhcmVSYW5nZXNF
cXVhbChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFuZ2UqIGIpCkBAIC0xNTQxLDEzICsxNDkyLDYg
QEAgYm9vbCByYW5nZXNPdmVybGFwKGNvbnN0IFJhbmdlKiBhLCBjb25zdCBSYW5nZSogYikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZjxSYW5nZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5v
ZGUpCi17Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsK
LSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKG5vZGUpOwotICAgIHJldHVybiByYW5nZTsK
LX0KLQogc3RhdGljIGlubGluZSB2b2lkIGJvdW5kYXJ5Tm9kZUNoaWxkcmVuQ2hhbmdlZChSYW5n
ZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBDb250YWluZXJOb2RlJiBjb250YWluZXIpCiB7CiAg
ICAgaWYgKCFib3VuZGFyeS5jaGlsZEJlZm9yZSgpKQpAQCAtMTg1Nyw3ICsxODAxLDEyIEBAIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYg
cmFuZ2UpCiAKIFJlZjxSYW5nZT4gY3JlYXRlTGl2ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKIHsKLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShyYW5nZS5zdGFydC5kb2N1bWVudCgp
LCByYW5nZS5zdGFydC5jb250YWluZXIucHRyKCksIHJhbmdlLnN0YXJ0Lm9mZnNldCwgcmFuZ2Uu
ZW5kLmNvbnRhaW5lci5wdHIoKSwgcmFuZ2UuZW5kLm9mZnNldCk7CisgICAgYXV0byByZXN1bHQg
PSBSYW5nZTo6Y3JlYXRlKHJhbmdlLnN0YXJ0LmRvY3VtZW50KCkpOworICAgIGF1dG8gc3RhcnRD
b250YWluZXIgPSByYW5nZS5zdGFydC5jb250YWluZXI7CisgICAgcmVzdWx0LT5zZXRTdGFydChX
VEZNb3ZlKHN0YXJ0Q29udGFpbmVyKSwgcmFuZ2Uuc3RhcnQub2Zmc2V0KTsKKyAgICBhdXRvIGVu
ZENvbnRhaW5lciA9IHJhbmdlLmVuZC5jb250YWluZXI7CisgICAgcmVzdWx0LT5zZXRFbmQoV1RG
TW92ZShlbmRDb250YWluZXIpLCByYW5nZS5lbmQub2Zmc2V0KTsKKyAgICByZXR1cm4gcmVzdWx0
OwogfQogCiBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxpdmVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1w
bGVSYW5nZT4mIHJhbmdlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAppbmRleCBkMzEyMjU0ZGNkYmEyZjg1MjYyZmUw
ZjM2MTQ3MGYzYTM1MWI2Y2E5Li4zYmVjZmRkMGUyMjQ2NTg0YzA0ZDc1OTRkODAzNjUyMGNlMzk4
YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtNDcsOSArNDcsNiBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2U7
CiBjbGFzcyBSYW5nZSA6IHB1YmxpYyBSZWZDb3VudGVkPFJhbmdlPiB7CiBwdWJsaWM6CiAgICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50Jik7Ci0gICAg
V0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50JiwgUmVmUHRy
PE5vZGU+JiYgc3RhcnRDb250YWluZXIsIGludCBzdGFydE9mZnNldCwgUmVmUHRyPE5vZGU+JiYg
ZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
UmVmPFJhbmdlPiBjcmVhdGUoRG9jdW1lbnQmLCBjb25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0
aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSYW5nZT4gY3JlYXRlKERvY3Vt
ZW50JiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAg
ICAgV0VCQ09SRV9FWFBPUlQgflJhbmdlKCk7CiAKICAgICBEb2N1bWVudCYgb3duZXJEb2N1bWVu
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJEb2N1bWVudDsgfQpAQCAtOTYsMTAgKzkzLDggQEAg
cHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29u
dGVudHMoTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQT1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0
YXJ0QmVmb3JlKE5vZGUmKTsKIAotICAgIGNvbnN0IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBj
b25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9zaXRpb24oKTsgfQotICAgIGNvbnN0IFBvc2l0aW9u
IGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9lbmQudG9Qb3NpdGlvbigpOyB9Ci0gICAg
V0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9pZD4gc2V0U3RhcnQoY29uc3QgUG9zaXRpb24m
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRpb25Pcjx2b2lkPiBzZXRFbmQoY29uc3QgUG9z
aXRpb24mKTsKKyAgICBQb3NpdGlvbiBzdGFydFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFydC50b1Bvc2l0aW9uKCk7IH0KKyAgICBQb3NpdGlvbiBlbmRQb3NpdGlvbigpIGNvbnN0IHsg
cmV0dXJuIG1fZW5kLnRvUG9zaXRpb24oKTsgfQogCiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSog
Zmlyc3ROb2RlKCkgY29uc3Q7CiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogcGFzdExhc3ROb2Rl
KCkgY29uc3Q7CkBAIC0xNTQsNyArMTQ5LDYgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGV4
cGxpY2l0IFJhbmdlKERvY3VtZW50Jik7Ci0gICAgUmFuZ2UoRG9jdW1lbnQmLCBOb2RlKiBzdGFy
dENvbnRhaW5lciwgaW50IHN0YXJ0T2Zmc2V0LCBOb2RlKiBlbmRDb250YWluZXIsIGludCBlbmRP
ZmZzZXQpOwogCiAgICAgdm9pZCBzZXREb2N1bWVudChEb2N1bWVudCYpOwogICAgIEV4Y2VwdGlv
bk9yPE5vZGUqPiBjaGVja05vZGVXT2Zmc2V0KE5vZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0
OwpAQCAtMTcxLDggKzE2NSw2IEBAIHByaXZhdGU6CiAgICAgUmFuZ2VCb3VuZGFyeVBvaW50IG1f
ZW5kOwogfTsKIAotV0VCQ09SRV9FWFBPUlQgUmVmPFJhbmdlPiByYW5nZU9mQ29udGVudHMoTm9k
ZSYpOwotCiBXRUJDT1JFX0VYUE9SVCBib29sIGFyZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwg
Y29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JUIGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBS
YW5nZSosIGNvbnN0IFJhbmdlKik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9T
aW1wbGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggYmE2
MTU3NWYwNDc4MTdlMzExNjZiMDQwMGI3MmY3YzQ2NDU5OTA1YS4uNjI4MzcwOTZiNjE4NzQzYWNk
Njc5YTRkZjY4MTdjM2ZkZGVkNTQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Np
bXBsZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTY4
LDcgKzY4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUgLi4uVD4gYXV0byBtYWtlU2ltcGxlUmFuZ2Uo
VCYmIC4uLmFyZ3VtZW50cykgLT4gZGVjbHR5cGUobWFrZVMKIFdFQkNPUkVfRVhQT1JUIE9wdGlv
bmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVf
RVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7
CiAKLVJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNpdmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5n
ZSYpOworV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5vZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9y
KGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5n
ZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TdGF0aWNSYW5nZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCmlu
ZGV4IDdlMDk0YTlhNzk4ZTZiYjgxNTY2NTI0NGM3MmNjYjAzN2M2YWRkMzkuLjVkN2NhODIxMDcz
M2RjMGQ1OTBiNGNiODhkODhkMWExYmI2MGI0NDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TdGF0aWNSYW5nZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1Jhbmdl
LmNwcApAQCAtNDEsNiArNDEsMTIgQEAgUmVmPFN0YXRpY1JhbmdlPiBTdGF0aWNSYW5nZTo6Y3Jl
YXRlKFNpbXBsZVJhbmdlJiYgcmFuZ2UpCiAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RhdGlj
UmFuZ2UoV1RGTW92ZShyYW5nZSkpKTsKIH0KIAorUmVmPFN0YXRpY1JhbmdlPiBTdGF0aWNSYW5n
ZTo6Y3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKK3sKKyAgICBhdXRvIGNvcGllZFJh
bmdlID0gcmFuZ2U7CisgICAgcmV0dXJuIGNyZWF0ZShXVEZNb3ZlKGNvcGllZFJhbmdlKSk7Cit9
CisKIHN0YXRpYyBib29sIGlzRG9jdW1lbnRUeXBlT3JBdHRyKE5vZGUmIG5vZGUpCiB7CiAgICAg
Ly8gQmVmb3JlIGNhbGxpbmcgbm9kZVR5cGUsIGRvIHR3byBmYXN0IG5vbi12aXJ0dWFsIGNoZWNr
cyB0aGF0IGNvdmVyIGFsbW9zdCBhbGwgbm9ybWFsIG5vZGVzLCBidXQgYXJlIGZhbHNlIGZvciBE
b2N1bWVudFR5cGUgYW5kIEF0dHIuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3Rh
dGljUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCmluZGV4IGExOGRh
ZGE1NWQxNWMzYzdmNDBkN2RkZDYyODE3MzI0ZDk0MmQxMWMuLmVjZTliNGRmMDFmY2RkODRhNWYw
MDFhOTIxNmJlMWE5NTg2NjdmNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0
aWNSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCkBAIC00MSw2
ICs0MSw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxT
dGF0aWNSYW5nZT4+IGNyZWF0ZShJbml0JiYpOworICAgIHN0YXRpYyBSZWY8U3RhdGljUmFuZ2U+
IGNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYpOwogICAgIHN0YXRpYyBSZWY8U3RhdGljUmFuZ2U+
IGNyZWF0ZShTaW1wbGVSYW5nZSYmKTsKIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRyb2xsZXIuY3BwCmluZGV4IDJiMzNmZTVj
MGFhOGRmODVlN2Y3MmRjM2IwMGI2ZDVhMWIzMTFjZTQuLjI0MjE5NDIxN2Q5ZTlkZGYzYzJkN2E4
OTUwNzBjODc5NWE3ODE4MmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9B
bHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApAQCAtNTIyLDcgKzUyMiw3IEBAIGJvb2wgQWx0
ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQoY29uc3Qg
RG9jdW1lbnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRTdGFydFRpbWVyRm9yKG1hcmtlciwgZW5k
T2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBvc2l0aW9uLmNvbnRhaW5lck5vZGUo
KTsKLSAgICBhdXRvIHdvcmRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyAqbm9kZSwgbWFya2VyLnN0
YXJ0T2Zmc2V0KCkgfSwgeyAqbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpIH0gfTsKKyAgICBhdXRv
IHdvcmRSYW5nZSA9IHJhbmdlKCpub2RlLCBtYXJrZXIpOwogICAgIFN0cmluZyBjdXJyZW50V29y
ZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UpOwogICAgIGlmICghY3VycmVudFdvcmQubGVuZ3RoKCkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0
eWxlQ29tbWFuZC5jcHAKaW5kZXggNWVkYzFlNzI0NzhiYzBhZDVkZmZmOTQ1MTdhMzEwODhjZjU3
Njc5Mi4uNmEwNjQxOWYzYzRhNzAyNGFhN2ViOWYxNGQ1NzgxNDdkMzdmNDg1OCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTcxMSw3ICs3MTEs
NyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5saW5lU3R5bGUo
RWRpdGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUAogICAgIC8vIFN0YXJ0IGZyb20gdGhlIGhpZ2hl
c3QgZnVsbHkgc2VsZWN0ZWQgYW5jZXN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5IHRoZSBmdWxs
eSBzZWxlY3RlZCBub2RlLgogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250LXNpemU6IGxh
cmdlIG9uIDxmb250IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQgdG8gaW5jbHVk
ZSB0aGUgZm9udCBlbGVtZW50IGluIG91ciBydW4KICAgICAvLyB0byBnZW5lcmF0ZSA8Zm9udCBj
b2xvcj0iYmx1ZSIgc2l6ZT0iNCI+aGVsbG88L2ZvbnQ+IGluc3RlYWQgb2YgPGZvbnQgY29sb3I9
ImJsdWUiPjxmb250IHNpemU9IjQiPmhlbGxvPC9mb250PjwvZm9udD4KLSAgICBhdXRvIHJhbmdl
ID0gUmFuZ2U6OmNyZWF0ZShzdGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBlbmQpOworICAg
IGF1dG8gcmFuZ2UgPSAqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogICAgIGF1dG8qIGVk
aXRhYmxlUm9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIGlmIChz
dGFydE5vZGUgIT0gZWRpdGFibGVSb290KSB7CiAgICAgICAgIHdoaWxlIChlZGl0YWJsZVJvb3Qg
JiYgc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYmIGlzTm9kZVZpc2li
bHlDb250YWluZWRXaXRoaW4oKnN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpLCByYW5nZSkpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAppbmRl
eCBmNjVkZjQ0OTY4N2QzZjUzMzI5NTdmZjg0ODE0ZmRjN2VmNzg2YjE0Li4yNWJkMzNmZGQ0MTc2
NzQ0NmI3NTMzZDlhNzZmYTEzNDgyZWYxYWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTc0OCw5ICs3NDgsMTMgQEAgdm9p
ZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGRvY3VtZW50
KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3Jl
ZEVxdWl2YWxlbnQoKSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byByYW5nZVRvQmVSZXBsYWNlZCA9IFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1aXZhbGVudCgp
LnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRlZXBFcXVpdmFs
ZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghZG9jdW1lbnQoKS5l
ZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFuZ2UsIHJhbmdl
VG9CZVJlcGxhY2VkKSkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQ
YXJhZ3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlKTsKKyAgICBpZiAoIXJhbmdlKQor
ICAgICAgICByZXR1cm47CisgICAgYXV0byByYW5nZVRvQmVSZXBsYWNlZCA9IG1ha2VTaW1wbGVS
YW5nZShtZXJnZURlc3RpbmF0aW9uKTsKKyAgICBpZiAoIXJhbmdlVG9CZVJlcGxhY2VkKQorICAg
ICAgICByZXR1cm47CisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVudCgpLT5zaG91
bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZSgqcmFuZ2UsICpyYW5nZVRvQmVSZXBsYWNlZCkpCiAgICAg
ICAgIHJldHVybjsKIAogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdpbGwgaW5zZXJ0IHBsYWNlaG9s
ZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhlaXIgdXNlLCBk
b24ndCBsZXQgYmxvY2sKQEAgLTg1MSwxMiArODU1LDExIEBAIFN0cmluZyBEZWxldGVTZWxlY3Rp
b25Db21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdpbm5pbmdPZlNl
bGVjCiAgICAgaWYgKCFpc1N0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24pKQogICAgICAgICBy
ZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBvc2l0aW9uID0gc3Rh
cnRPZlNlbGVjdGlvbi5uZXh0KCk7Ci0gICAgaWYgKG5leHRQb3NpdGlvbi5pc051bGwoKSkKKyAg
ICBhdXRvIHJhbmdlT2ZGaXJzdENoYXJhY3RlciA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mU2Vs
ZWN0aW9uLCBzdGFydE9mU2VsZWN0aW9uLm5leHQoKSk7CisgICAgaWYgKCFyYW5nZU9mRmlyc3RD
aGFyYWN0ZXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIGF1dG8gcmFuZ2VPZkZp
cnN0Q2hhcmFjdGVyID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9mU2VsZWN0aW9u
LmRlZXBFcXVpdmFsZW50KCksIG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpKTsKLSAgICBm
b3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJblJhbmdlKHJh
bmdlT2ZGaXJzdENoYXJhY3RlciwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0ZWQpKSB7Cisg
ICAgZm9yIChhdXRvKiBtYXJrZXIgOiBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJrZXJzSW5SYW5n
ZSgqcmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLCBEb2N1bWVudE1hcmtlcjo6QXV0b2NvcnJlY3RlZCkp
IHsKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWFya2VyLT5zdGFydE9mZnNldCgpOwogICAg
ICAgICBpZiAoc3RhcnRPZmZzZXQgPT0gc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1aXZhbGVudCgp
Lm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1hcmtlci0+ZGVz
Y3JpcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0
eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcAppbmRleCBi
YTVmM2I2YzMwZWJkODg4M2FmNjI2ZTZmM2Q3NjE2ZGNjOGIyY2I2Li5lZmZhZjQ5NzlkMmM0NGY1
MmRmNTkxNjAxOTZiNzIzMTQ2YjQwNWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5n
U3R5bGUuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUXVhbGlmaWVkTmFtZS5oIgog
I2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2lu
Y2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1bmN0aW9ucy5o
IgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKQEAgLTE1MzcsMTggKzE1MzgsMTIgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0aW5nU3R5bGU6
OnRleHREaXJlY3Rpb25Gb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYKICAgICBQ
b3NpdGlvbiBlbmQ7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAgICAgICAgZW5k
ID0gc2VsZWN0aW9uLmVuZCgpLnVwc3RyZWFtKCk7Ci0KLSAgICAgICAgTm9kZSogcGFzdExhc3Qg
PSBSYW5nZTo6Y3JlYXRlKCplbmQuZG9jdW1lbnQoKSwgcG9zaXRpb24ucGFyZW50QW5jaG9yZWRF
cXVpdmFsZW50KCksIGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSktPnBhc3RMYXN0Tm9k
ZSgpOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4gIT0gcGFzdExhc3Q7IG4g
PSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpuKSkgewotICAgICAgICAgICAgaWYgKCFuLT5pc1N0eWxl
ZEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgUmVm
UHRyPENTU1ZhbHVlPiB1bmljb2RlQmlkaSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3IobikucHJv
cGVydHlWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAgICAgICAgIGlmICghaXM8
Q1NTUHJpbWl0aXZlVmFsdWU+KHVuaWNvZGVCaWRpKSkKKyAgICAgICAgZm9yIChhdXRvJiBpbnRl
cnNlY3RpbmdOb2RlIDogaW50ZXJzZWN0aW5nTm9kZXMoKm1ha2VTaW1wbGVSYW5nZShwb3NpdGlv
biwgZW5kKSkpIHsKKyAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW5nTm9kZS5pc1N0eWxlZEVs
ZW1lbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NTVmFs
dWVJRCB1bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFsdWU+KCp1bmlj
b2RlQmlkaSkudmFsdWVJRCgpOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVCaWRpVmFsdWUgPT0g
Q1NTVmFsdWVFbWJlZCB8fCB1bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRl
KQorICAgICAgICAgICAgYXV0byB2YWx1ZU9iamVjdCA9IENvbXB1dGVkU3R5bGVFeHRyYWN0b3Io
JmludGVyc2VjdGluZ05vZGUpLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7
CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHZhbHVlT2Jq
ZWN0KSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWVPYmplY3QpLnZhbHVlSUQo
KSA6IENTU1ZhbHVlSW52YWxpZDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBDU1NWYWx1ZUVt
YmVkIHx8IHZhbHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRlKQogICAgICAgICAgICAgICAgIHJl
dHVybiBXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsOwogICAgICAgICB9CiAgICAgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGQxMmY4NGYxNWZmNGU3NTI5NWVjNjM2YzM4MDdhNjEx
ZTNmOGJiMjYuLmM0YTdiYzkyNjZiODMzOGQ3ZDAxNzFjYjlmMjhlMzIzMGNkZWJiMjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcxNCw4ICs3MTQsOCBAQCB2b2lkIEVkaXRvcjo6
cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBmcmFnbWVudCwg
U2VsZWN0UmVwbAogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVybjsKIAotICAg
IGF1dG8gcmFuZ2VUb0NoZWNrID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBmaXJzdFBvc2l0
aW9uSW5Ob2RlKG5vZGVUb0NoZWNrKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKG5vZGVUb0NoZWNrKSk7
Ci0gICAgaWYgKGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVhdGUocmVzb2x2
ZVRleHRDaGVja2luZ1R5cGVNYXNrKCpub2RlVG9DaGVjaywgeyBUZXh0Q2hlY2tpbmdUeXBlOjpT
cGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciB9KSwgVGV4dENoZWNraW5nUHJvY2Vz
c0JhdGNoLCByYW5nZVRvQ2hlY2suY29weVJlZigpLCByYW5nZVRvQ2hlY2suY29weVJlZigpLCBy
YW5nZVRvQ2hlY2suY29weVJlZigpKSkKKyAgICBhdXRvIHJhbmdlVG9DaGVjayA9IG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9kZVRvQ2hlY2spOworICAgIGlmIChhdXRvIHJlcXVl
c3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVUZXh0Q2hlY2tpbmdUeXBlTWFz
aygqbm9kZVRvQ2hlY2ssIHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRleHRDaGVja2lu
Z1R5cGU6OkdyYW1tYXIgfSksIFRleHRDaGVja2luZ1Byb2Nlc3NCYXRjaCwgcmFuZ2VUb0NoZWNr
LCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9DaGVjaykpCiAgICAgICAgIG1fc3BlbGxDaGVja2VyLT5y
ZXF1ZXN0Q2hlY2tpbmdGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIApAQCAtMzAz
MCw3ICszMDMwLDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVk
QnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAvLyBnYXJkZSIsIHdl
IHdpbGwgaGF2ZSBDb3JyZWN0aW9uSW5kaWNhdG9yIG1hcmtlciBvbiBib3RoIHdvcmRzIGFuZCBv
biB0aGUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uIElmIHdlIHRoZW4gZWRpdCBnYXJkZSwKICAg
ICAvLyB3ZSB3b3VsZCBsaWtlIHRvIHJlbW92ZSB0aGUgbWFya2VyIGZyb20gd29yZCAiYXZhbnQi
IGFuZCB3aGl0ZXNwYWNlIGFzIHdlbGwuIFNvIHdlIG5lZWQgdG8gZ2V0IHRoZSBjb250aW5vdXMg
cmFuZ2Ugb2YKICAgICAvLyBvZiBtYXJrZXIgdGhhdCBjb250YWlucyB0aGUgd29yZCBpbiBxdWVz
dGlvbiwgYW5kIHJlbW92ZSBtYXJrZXIgb24gdGhhdCB3aG9sZSByYW5nZS4KLSAgICBhdXRvIHdv
cmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZkZpcnN0V29yZC5kZWVw
RXF1aXZhbGVudCgpLCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOworICAgIGF1dG8g
d29yZFJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzdGFydE9mRmlyc3RXb3JkLCBlbmRPZkxhc3RX
b3JkKTsKIAogICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS5tYXJrZXJzKCkubWFy
a2Vyc0luUmFuZ2Uod29yZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uQWx0ZXJuYXRp
dmVzKSkKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZW1vdmVEaWN0YXRp
b25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CkBAIC0zMTQzLDcgKzMxNDMsNyBAQCB2
b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKICAgICBwcmV2aW91cyA9IHByZXZpb3VzLnByZXZpb3Vz
KCk7CiAgICAgaWYgKCFpblNhbWVQYXJhZ3JhcGgobmV4dCwgcHJldmlvdXMpKQogICAgICAgICBy
ZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShwcmV2aW91cywgbmV4
dCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwcmV2aW91cywgbmV4dCk7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAgIFZpc2libGVTZWxlY3Rpb24gbmV3
U2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSk7CkBAIC0zNTI2LDcgKzM1MjYsNyBAQCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0cmluZyYgdGFy
Z2V0LCBjb25zdCBPcHRpb25hbAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nIGFu
ZCB3ZSdyZSB3cmFwcGluZywgc2VhcmNoIGFnYWluIGluIHRoZSBlbnRpcmUgZG9jdW1lbnQgKHRo
aXMgd2lsbAogICAgIC8vIHJlZHVuZGFudGx5IHJlLXNlYXJjaCB0aGUgYXJlYSBhbHJlYWR5IHNl
YXJjaGVkIGluIHNvbWUgY2FzZXMpLgogICAgIGlmIChyZXN1bHRSYW5nZS5jb2xsYXBzZWQoKSAm
JiBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7Ci0gICAgICAgIHJlc3VsdFJhbmdlID0g
Y29sbGFwc2VJZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQocmFuZ2VPZkNvbnRlbnRzKGRvY3Vt
ZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICAgICAgcmVzdWx0UmFuZ2UgPSBjb2xsYXBz
ZUlmUm9vdHNEaWZmZXIoZmluZFBsYWluVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVu
dHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOwogICAgICAgICAvLyBXZSB1c2VkIHRv
IHJldHVybiBmYWxzZSBoZXJlIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHNhbWUgcmFuZ2UgdGhh
dCB3ZSBzdGFydGVkIHdpdGgKICAgICAgICAgLy8gKGUuZy4sIHRoZSByZWZlcmVuY2UgcmFuZ2Ug
d2FzIGFscmVhZHkgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyB0ZXh0KS4gQnV0IHdlIGRlY2lk
ZWQgdGhhdAogICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSBhIHN1Y2Nlc3MgY2FzZSBpbnN0ZWFk
LCBzbyB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCBpbiB0aGF0IGNhc2UuCkBAIC00MTg4LDggKzQx
ODgsOCBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4dENoZWNraW5n
UmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogICAgIG1faXNIYW5kbGluZ0FjY2VwdGVkQ2FuZGlk
YXRlID0gdHJ1ZTsKIAogICAgIGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0Q2hlY2tpbmdS
ZXN1bHQoYWNjZXB0ZWRDYW5kaWRhdGUpKSB7Ci0gICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0
KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCByYW5nZSwgRWRpdG9ySW5zZXJ0QWN0aW9u
OjpUeXBlZCkpCi0gICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OmNyZWF0
ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCkt
PmFwcGx5KCk7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRl
LnJlcGxhY2VtZW50LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQpKQorICAgICAg
ICAgICAgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUoKnJhbmdlLCBhY2NlcHRl
ZENhbmRpZGF0ZS5yZXBsYWNlbWVudCktPmFwcGx5KCk7CiAgICAgfSBlbHNlCiAgICAgICAgIGlu
c2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIG51bGxwdHIpOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDFmZmRhOGNhMjZmNzZi
N2E5NDk4ZDUyMmU5ZWU0YmI4NjE4NTljZmEuLjE1OTQwNGI0YzI0M2U4NDkwMjYzMzk0YjZlMTZj
YTcyZTY0ZDA5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3Bw
CkBAIC0yNjczLDEwICsyNjczLDggQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lU2VsZWN0
aW9uOjpyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW4KIAogdm9pZCBG
cmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9jYXRpb24sIHVu
c2lnbmVkIGxlbmd0aCwgTm9kZSYgbm9kZSkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+IHJlc3VsdFJh
bmdlID0gbV9kb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKLSAgICByZXN1bHRSYW5nZS0+c2V0U3Rh
cnQobm9kZSwgbG9jYXRpb24pOwotICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQobm9kZSwgbG9jYXRp
b24gKyBsZW5ndGgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gVmlzaWJsZVNl
bGVjdGlvbigqcmVzdWx0UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAgICBhdXRvIHNl
bGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24geyBTaW1wbGVSYW5nZSB7IHsgbm9kZSwgbG9jYXRp
b24gfSwgeyBub2RlLCBsb2NhdGlvbiArIGxlbmd0aCB9IH0gfTsKKwogICAgIC8vIEZJWE1FOiBU
aGUgc2Vjb25kIGFyZ3VtZW50IHdhcyAidHJ1ZSIgd2hpY2ggaW1wbGljaXRseSBjb252ZXJ0ZWQg
dG8gb3B0aW9uICJGaXJlU2VsZWN0RXZlbnQiLiBJcyB0aGlzIGNvcnJlY3Q/CiAgICAgc2V0U2Vs
ZWN0aW9uKHNlbGVjdGlvbiwgeyBGaXJlU2VsZWN0RXZlbnQgfSk7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHAKaW5k
ZXggNjhlMDgzNTJhNGMxMGQ4NjhiZjFlNDY5YmY3NWM5NTZkMTNmMDU5MC4uNWVkMGRlOWEzMTBi
MzFiZTYzZTBhM2Q0MzM4OThjMTk1MjcyODU2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAtNDAsOCArNDAs
OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFu
ZDo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kKFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVw
bGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJh
bmdlVG9CZVJlcGxhY2VkLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIEVkaXRBY3Rpb246
Okluc2VydFJlcGxhY2VtZW50KQorUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpSZXBsYWNl
UmFuZ2VXaXRoVGV4dENvbW1hbmQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZVJlcGxhY2Vk
LCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5nZVRv
QmVSZXBsYWNlZC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2Vy
dFJlcGxhY2VtZW50KQogICAgICwgbV9yYW5nZVRvQmVSZXBsYWNlZChyYW5nZVRvQmVSZXBsYWNl
ZCkKICAgICAsIG1fdGV4dCh0ZXh0KQogewpAQCAtNDksMjEgKzQ5LDE4IEBAIFJlcGxhY2VSYW5n
ZVdpdGhUZXh0Q29tbWFuZDo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kKFJlZlB0cjxSYW5n
ZT4gcmFuZ2VUb0JlCiAKIGJvb2wgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjp3aWxsQXBw
bHlDb21tYW5kKCkKIHsKLSAgICBtX3RleHRGcmFnbWVudCA9IGNyZWF0ZUZyYWdtZW50RnJvbVRl
eHQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQsIG1fdGV4dCk7CisgICAgbV90ZXh0RnJhZ21lbnQgPSBj
cmVhdGVGcmFnbWVudEZyb21UZXh0KG1fcmFuZ2VUb0JlUmVwbGFjZWQsIG1fdGV4dCk7CiAgICAg
cmV0dXJuIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCk7CiB9CiAKIHZv
aWQgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbiB7ICptX3JhbmdlVG9CZVJlcGxhY2VkIH07Ci0KLSAgICBpZiAo
IW1fcmFuZ2VUb0JlUmVwbGFjZWQpCi0gICAgICAgIHJldHVybjsKKyAgICBWaXNpYmxlU2VsZWN0
aW9uIHNlbGVjdGlvbiB7IG1fcmFuZ2VUb0JlUmVwbGFjZWQgfTsKIAogICAgIGlmICghZG9jdW1l
bnQoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9uKSkKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgaWYgKCFjaGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRvQmVSZXBsYWNl
ZCkpCisgICAgaWYgKCFjaGFyYWN0ZXJDb3VudChtX3JhbmdlVG9CZVJlcGxhY2VkKSkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU2V0U2VsZWN0aW9uQ29t
bWFuZDo6Y3JlYXRlKHNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRTZXRTZWxlY3Rp
b25PcHRpb25zKCkpKTsKQEAgLTg4LDcgKzg1LDcgQEAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjppbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QK
IAogVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFu
ZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyAxLCBTdGF0aWNSYW5nZTo6
Y3JlYXRlKCptX3JhbmdlVG9CZVJlcGxhY2VkKSB9OworICAgIHJldHVybiB7IDEsIFN0YXRpY1Jh
bmdlOjpjcmVhdGUobV9yYW5nZVRvQmVSZXBsYWNlZCkgfTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VX
aXRoVGV4dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kLmgKaW5kZXggMDk4MzA3ZjY1MjBkZWU2YzQ0MWNmNWZlODE0NmU3N2FjZjll
OTZjNC4uM2JiYzg5OWQyNGZjYWU1NTYyMTFjMmY4ZGY3NDQzNDY0ZDQyYWI1NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5o
CkBAIC0zNCwyMCArMzQsMjAgQEAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIAogY2xhc3MgUmVw
bGFjZVJhbmdlV2l0aFRleHRDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZD4gY3Jl
YXRlKFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCkK
KyAgICBzdGF0aWMgUmVmPFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZD4gY3JlYXRlKGNvbnN0
IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiB0ZXh0KQogICAg
IHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21t
YW5kKHJhbmdlVG9CZVJlcGxhY2VkLCB0ZXh0KSk7CiAgICAgfQogCiBwcml2YXRlOgotICAgIFJl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZChSZWZQdHI8UmFuZ2U+IHJhbmdlVG9CZVJlcGxhY2Vk
LCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZChj
b25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCk7
CiAgICAgYm9vbCB3aWxsQXBwbHlDb21tYW5kKCkgZmluYWw7CiAgICAgdm9pZCBkb0FwcGx5KCkg
b3ZlcnJpZGU7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhKCkgY29uc3QgZmluYWw7CiAgICAg
UmVmUHRyPERhdGFUcmFuc2Zlcj4gaW5wdXRFdmVudERhdGFUcmFuc2ZlcigpIGNvbnN0IGZpbmFs
OwogICAgIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiB0YXJnZXRSYW5nZXMoKSBjb25zdCBm
aW5hbDsKIAotICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZVRvQmVSZXBsYWNlZDsKKyAgICBTaW1w
bGVSYW5nZSBtX3JhbmdlVG9CZVJlcGxhY2VkOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50
PiBtX3RleHRGcmFnbWVudDsKICAgICBTdHJpbmcgbV90ZXh0OwogfTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5kZXggNjllN2Uz
MGU2NWE5NjE2MDI1ZWQyNDkyNTkyMWIzMGNkZjdiMTdkNi4uOTkzNGExMzU0ZmFlNjU5OWE0OTc5
ODJjYmEwMGVhNjcyZjJkNjc4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9S
ZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTE3NjksMTIgKzE3NjksOSBAQCBib29sIFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UoY29uc3QgUmVwbGFj
ZW1lbnRGcmFnbWVudCYgZgogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8UmFuZ2U+IFJl
cGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNvbnN0CitPcHRp
b25hbDxTaW1wbGVSYW5nZT4gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2VydGVkQ29udGVu
dFJhbmdlKCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBkb2N1bWVudCA9IG1ha2VSZWZQdHIobV9z
dGFydE9mSW5zZXJ0ZWRDb250ZW50LmRvY3VtZW50KCkpKQotICAgICAgICByZXR1cm4gUmFuZ2U6
OmNyZWF0ZSgqZG9jdW1lbnQsIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCwgbV9lbmRPZkluc2Vy
dGVkQ29udGVudCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gbWFrZVNpbXBs
ZVJhbmdlKG1fc3RhcnRPZkluc2VydGVkQ29udGVudCwgbV9lbmRPZkluc2VydGVkQ29udGVudCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAppbmRleCBkOWQ1OWQzNTMzNWRlMTNlYmE3ZDNj
NTUwNWMzOTdmYzg3NmQzYWRkLi4wNjA4YTAwODllNmIwOGE0OGFkMjk5MmYxODg5ZDhjMzI1OTQx
YWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25D
b21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29t
bWFuZC5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlU2VsZWN0aW9uIHZp
c2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2libGVT
ZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQ7IH0KICAgICBTdHJpbmcgZG9jdW1lbnRGcmFnbWVudFBs
YWluVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRGcmFnbWVudFBsYWluVGV4dDsgfQog
Ci0gICAgUmVmUHRyPFJhbmdlPiBpbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNvbnN0OworICAgIE9w
dGlvbmFsPFNpbXBsZVJhbmdlPiBpbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNvbnN0OwogCiBwcml2
YXRlOgogICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50JiwgUmVmUHRyPERvY3Vt
ZW50RnJhZ21lbnQ+JiYsIE9wdGlvblNldDxDb21tYW5kT3B0aW9uPiwgRWRpdEFjdGlvbik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
LmNwcAppbmRleCA1OTIwODQ1MzUxZWE0MDNiOGM4NzM0M2FkYTc2Yjc0MzYzZGYwNWQ1Li43YzEx
ZmE4ODFmZjExZTllZDcyMzllMzAxZWIxZDU5NGU4ZTk0N2EwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTgzLDEw
ICs4MywxMCBAQCBwcml2YXRlOgogfTsKICNlbmRpZgogCi1TcGVsbGluZ0NvcnJlY3Rpb25Db21t
YW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKFJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQs
IGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKLSAgICA6IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJh
bmdlVG9CZUNvcnJlY3RlZC5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIEVkaXRBY3Rpb246
Okluc2VydFJlcGxhY2VtZW50KQorU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6U3BlbGxpbmdD
b3JyZWN0aW9uQ29tbWFuZChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlQ29ycmVjdGVkLCBj
b25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChyYW5n
ZVRvQmVDb3JyZWN0ZWQuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLCBFZGl0QWN0aW9uOjpJ
bnNlcnRSZXBsYWNlbWVudCkKICAgICAsIG1fcmFuZ2VUb0JlQ29ycmVjdGVkKHJhbmdlVG9CZUNv
cnJlY3RlZCkKLSAgICAsIG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZChtX3JhbmdlVG9CZUNvcnJl
Y3RlZC5nZXQoKSkKKyAgICAsIG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZChtX3JhbmdlVG9CZUNv
cnJlY3RlZCkKICAgICAsIG1fY29ycmVjdGlvbihjb3JyZWN0aW9uKQogewogfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaAppbmRleCA1
YjgxZWYyMzU2Yzk5YTczM2Y0YTNlMTg4NzhiMDA1ZjNjOTAyMmQ2Li5lM2Q3ZTBmMWIyMGM3NTAw
Nzc5OGY3ZTcxMzVhNDk2NDQzODZiZmYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaApAQCAtMzIsMTIgKzMyLDEyIEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZCA6IHB1Ymxp
YyBDb21wb3NpdGVFZGl0Q29tbWFuZCB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kPiBjcmVhdGUoUmFuZ2UmIHJhbmdlVG9CZUNvcnJlY3RlZCwgY29u
c3QgU3RyaW5nJiBjb3JyZWN0aW9uKQorICAgIHN0YXRpYyBSZWY8U3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZD4gY3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNv
bnN0IFN0cmluZyYgY29ycmVjdGlvbikKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLCBjb3JyZWN0
aW9uKSk7CiAgICAgfQogcHJpdmF0ZToKLSAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKFJh
bmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CisgICAg
U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlQ29y
cmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOwogICAgIGJvb2wgd2lsbEFwcGx5Q29t
bWFuZCgpIGZpbmFsOwogICAgIHZvaWQgZG9BcHBseSgpIG92ZXJyaWRlOwogICAgIGJvb2wgc2hv
dWxkUmV0YWluQXV0b2NvcnJlY3Rpb25JbmRpY2F0b3IoKSBjb25zdCBvdmVycmlkZTsKQEAgLTQ2
LDcgKzQ2LDcgQEAgcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPFN0YXRpY1JhbmdlPj4gdGFy
Z2V0UmFuZ2VzKCkgY29uc3QgZmluYWw7CiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gaW5wdXRF
dmVudERhdGFUcmFuc2ZlcigpIGNvbnN0IGZpbmFsOwogCi0gICAgUmVmPFJhbmdlPiBtX3Jhbmdl
VG9CZUNvcnJlY3RlZDsKKyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlVG9CZUNvcnJlY3RlZDsKICAg
ICBWaXNpYmxlU2VsZWN0aW9uIG1fc2VsZWN0aW9uVG9CZUNvcnJlY3RlZDsKICAgICBSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gbV9jb3JyZWN0aW9uRnJhZ21lbnQ7CiAgICAgU3RyaW5nIG1fY29y
cmVjdGVkOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdI
ZWxwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3Bw
CmluZGV4IDhmZmY0ZjQxNzFiMzVkOWY0OGYwMjRmNjJkMjQ2NTc0OTZmZWJmZDkuLjI1NDYwMjNm
NjQwNTdmODNkOTIxNjlhNThhZTQ1MWEzNjMzMDg1ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAKQEAgLTMwMiwxNCArMzAyLDEzIEBAIGF1dG8g
VGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNh
bFBocmFzZShib29sIGNoZWNrCiAgICAgLy8gRXhwYW5kIHRoZSBzZWFyY2ggcmFuZ2UgdG8gZW5j
b21wYXNzIGVudGlyZSBwYXJhZ3JhcGhzLCBzaW5jZSB0ZXh0IGNoZWNraW5nIG5lZWRzIHRoYXQg
bXVjaCBjb250ZXh0LgogICAgIC8vIERldGVybWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9t
IHRoZSBzdGFydCBvZiB0aGUgcGFyYWdyYXBoIHRvIHRoZSBzdGFydCBvZiB0aGUgb3JpZ2luYWwg
c2VhcmNoIHJhbmdlLAogICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0
cyBpbiB0aGlzIGFyZWEuCi0gICAgUmVmPFJhbmdlPiBwYXJhZ3JhcGhSYW5nZSA9IGNyZWF0ZUxp
dmVSYW5nZShtX3JhbmdlKTsKLSAgICBzZXRTdGFydChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwgc3Rh
cnRPZlBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkp
KTsKKyAgICBhdXRvIHBhcmFncmFwaFJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzdGFydE9mUGFy
YWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3JhbmdlLnN0YXJ0KSksIG1fcmFu
Z2UuZW5kKTsKICAgICBhdXRvIHRvdGFsUmFuZ2VMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChwYXJh
Z3JhcGhSYW5nZSk7Ci0gICAgc2V0RW5kKHBhcmFncmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFn
cmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkpKTsKKyAgICBw
YXJhZ3JhcGhSYW5nZS5lbmQgPSAqbWFrZUJvdW5kYXJ5UG9pbnQoZW5kT2ZQYXJhZ3JhcGgoY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2Uuc3RhcnQpKSk7CiAgICAgCi0gICAgYXV0
byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyAqbWFrZUJvdW5kYXJ5UG9pbnQo
cGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksIG1fcmFuZ2Uuc3RhcnQgfSk7CisgICAg
YXV0byByYW5nZVN0YXJ0T2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQoeyBwYXJhZ3JhcGhSYW5nZS5z
dGFydCwgbV9yYW5nZS5zdGFydCB9KTsKICAgICB1aW50NjRfdCB0b3RhbExlbmd0aFByb2Nlc3Nl
ZCA9IDA7Ci0gICAgCisKICAgICBib29sIGZpcnN0SXRlcmF0aW9uID0gdHJ1ZTsKICAgICBib29s
IGxhc3RJdGVyYXRpb24gPSBmYWxzZTsKICAgICB3aGlsZSAodG90YWxMZW5ndGhQcm9jZXNzZWQg
PCB0b3RhbFJhbmdlTGVuZ3RoKSB7CkBAIC0zMTcsMTAgKzMxNiwxMCBAQCBhdXRvIFRleHRDaGVj
a2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2Uo
Ym9vbCBjaGVjawogICAgICAgICBhdXRvIGN1cnJlbnRMZW5ndGggPSBjaGFyYWN0ZXJDb3VudChw
YXJhZ3JhcGhSYW5nZSk7CiAgICAgICAgIHVpbnQ2NF90IGN1cnJlbnRTdGFydE9mZnNldCA9IGZp
cnN0SXRlcmF0aW9uID8gcmFuZ2VTdGFydE9mZnNldCA6IDA7CiAgICAgICAgIHVpbnQ2NF90IGN1
cnJlbnRFbmRPZmZzZXQgPSBjdXJyZW50TGVuZ3RoOwotICAgICAgICBpZiAoaW5TYW1lUGFyYWdy
YXBoKHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQ
b3NpdGlvbihtX3JhbmdlLmVuZCkpKSB7CisgICAgICAgIGlmIChpblNhbWVQYXJhZ3JhcGgoY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHBhcmFncmFwaFJhbmdlLnN0YXJ0KSwgY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2UuZW5kKSkpIHsKICAgICAgICAgICAgIC8vIERldGVy
bWluZSB0aGUgY2hhcmFjdGVyIG9mZnNldCBmcm9tIHRoZSBlbmQgb2YgdGhlIG9yaWdpbmFsIHNl
YXJjaCByYW5nZSB0byB0aGUgZW5kIG9mIHRoZSBwYXJhZ3JhcGgsCiAgICAgICAgICAgICAvLyBz
aW5jZSB3ZSB3aWxsIHdhbnQgdG8gaWdub3JlIHJlc3VsdHMgaW4gdGhpcyBhcmVhLgotICAgICAg
ICAgICAgY3VycmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNvdW50KHsgKm1ha2VCb3VuZGFyeVBv
aW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0aW9uKCkpLCBtX3JhbmdlLmVuZCB9KTsKKyAg
ICAgICAgICAgIGN1cnJlbnRFbmRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7IHBhcmFncmFwaFJh
bmdlLnN0YXJ0LCBtX3JhbmdlLmVuZCB9KTsKICAgICAgICAgICAgIGxhc3RJdGVyYXRpb24gPSB0
cnVlOwogICAgICAgICB9CiAgICAgICAgIGlmIChjdXJyZW50U3RhcnRPZmZzZXQgPCBjdXJyZW50
RW5kT2Zmc2V0KSB7CkBAIC0zMzcsNyArMzM2LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6
OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2sK
ICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyKQogICAgICAgICAgICAgICAgICAgICBj
aGVja2luZ1R5cGVzLmFkZChUZXh0Q2hlY2tpbmdUeXBlOjpHcmFtbWFyKTsKICAgICAgICAgICAg
ICAgICBWaXNpYmxlU2VsZWN0aW9uIGN1cnJlbnRTZWxlY3Rpb247Ci0gICAgICAgICAgICAgICAg
aWYgKEZyYW1lKiBmcmFtZSA9IHBhcmFncmFwaFJhbmdlLT5vd25lckRvY3VtZW50KCkuZnJhbWUo
KSkKKyAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcGFyYWdyYXBoUmFuZ2Uuc3Rh
cnQuY29udGFpbmVyLT5kb2N1bWVudCgpLmZyYW1lKCkpCiAgICAgICAgICAgICAgICAgICAgIGN1
cnJlbnRTZWxlY3Rpb24gPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAgICAgICAg
ICAgICAgICAgY2hlY2tUZXh0T2ZQYXJhZ3JhcGgoKm1fY2xpZW50LnRleHRDaGVja2VyKCksIHBh
cmFncmFwaFN0cmluZywgY2hlY2tpbmdUeXBlcywgcmVzdWx0cywgY3VycmVudFNlbGVjdGlvbik7
CiAKQEAgLTM3OSw3ICszNzgsNyBAQCBhdXRvIFRleHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0
TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UoYm9vbCBjaGVjawogICAgICAgICAg
ICAgICAgIGlmICghbWlzc3BlbGxlZFdvcmQuaXNFbXB0eSgpICYmICghY2hlY2tHcmFtbWFyIHx8
IGJhZEdyYW1tYXJQaHJhc2UuaXNFbXB0eSgpIHx8IHNwZWxsaW5nTG9jYXRpb24gPD0gZ3JhbW1h
ckRldGFpbExvY2F0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBzcGVsbGlu
Z09mZnNldCA9IHNwZWxsaW5nTG9jYXRpb24gLSBjdXJyZW50U3RhcnRPZmZzZXQ7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICghZmlyc3RJdGVyYXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAg
ICBzcGVsbGluZ09mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uuc3RhcnQsICptYWtl
Qm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSB9KTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9y
YW5nZS5zdGFydCwgcGFyYWdyYXBoUmFuZ2Uuc3RhcnQgfSk7CiAgICAgICAgICAgICAgICAgICAg
IGZpcnN0Rm91bmRJdGVtID0gTWlzc3BlbGxlZFdvcmQgewogICAgICAgICAgICAgICAgICAgICAg
ICAgbWlzc3BlbGxlZFdvcmQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzcGVsbGluZ09mZnNl
dApAQCAtMzg5LDcgKzM4OCw3IEBAIGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RN
aXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrCiAgICAgICAgICAg
ICAgICAgaWYgKGNoZWNrR3JhbW1hciAmJiAhYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkpIHsK
ICAgICAgICAgICAgICAgICAgICAgdWludDY0X3QgZ3JhbW1hclBocmFzZU9mZnNldCA9IGdyYW1t
YXJQaHJhc2VMb2NhdGlvbiAtIGN1cnJlbnRTdGFydE9mZnNldDsKICAgICAgICAgICAgICAgICAg
ICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKLSAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQ
aHJhc2VPZmZzZXQgKz0gY2hhcmFjdGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCAqbWFrZUJvdW5k
YXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSkgfSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9y
YW5nZS5zdGFydCwgcGFyYWdyYXBoUmFuZ2Uuc3RhcnQgfSk7CiAgICAgICAgICAgICAgICAgICAg
IGZpcnN0Rm91bmRJdGVtID0gVW5ncmFtbWF0aWNhbFBocmFzZSB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICBiYWRHcmFtbWFyUGhyYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3JhbW1h
clBocmFzZU9mZnNldCwKQEAgLTQwMiwxMiArNDAxLDExIEBAIGF1dG8gVGV4dENoZWNraW5nSGVs
cGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29sIGNo
ZWNrCiAgICAgICAgIGlmIChsYXN0SXRlcmF0aW9uIHx8IHRvdGFsTGVuZ3RoUHJvY2Vzc2VkICsg
Y3VycmVudExlbmd0aCA+PSB0b3RhbFJhbmdlTGVuZ3RoKQogICAgICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgVmlzaWJsZVBvc2l0aW9uIG5ld1BhcmFncmFwaFN0YXJ0ID0gc3RhcnRPZk5leHRQ
YXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPmVuZFBvc2l0aW9uKCkpOwotICAgICAgICBpZiAoIXNl
dFN0YXJ0KHBhcmFncmFwaFJhbmdlLnB0cigpLCBuZXdQYXJhZ3JhcGhTdGFydCkpCi0gICAgICAg
ICAgICBicmVhazsKLQotICAgICAgICBpZiAoIXNldEVuZChwYXJhZ3JhcGhSYW5nZS5wdHIoKSwg
ZW5kT2ZQYXJhZ3JhcGgobmV3UGFyYWdyYXBoU3RhcnQpKSkKKyAgICAgICAgYXV0byBuZXh0U3Rh
cnQgPSBzdGFydE9mTmV4dFBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFy
YWdyYXBoUmFuZ2UuZW5kKSk7CisgICAgICAgIGF1dG8gbmV4dFBhcmFncmFwaFJhbmdlID0gbWFr
ZVNpbXBsZVJhbmdlKG5leHRTdGFydCwgZW5kT2ZQYXJhZ3JhcGgobmV4dFN0YXJ0KSk7CisgICAg
ICAgIGlmICghbmV4dFBhcmFncmFwaFJhbmdlKQogICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IHBhcmFncmFwaFJhbmdlID0gV1RGTW92ZSgqbmV4dFBhcmFncmFwaFJhbmdlKTsKIAogICAgICAg
ICBmaXJzdEl0ZXJhdGlvbiA9IGZhbHNlOwogICAgICAgICB0b3RhbExlbmd0aFByb2Nlc3NlZCAr
PSBjdXJyZW50TGVuZ3RoOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBp
bmdDb21tYW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAK
aW5kZXggZDAxNTEwMmE2MDlmZmFlZDI2MTJhZjJlNzljM2I5ZmVkZDVmMTlhYS4uZmM5NzU3NzQ4
MzExY2QxMmZiZGQ3MmUxYjI0ZmU0YmIwZjA3MDlhYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1R5cGluZ0NvbW1hbmQuY3BwCkBAIC00NDksNyArNDQ5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5k
OjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQgY29tbWFuZFR5cGUp
CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMSA9IHN0YXJ0T2ZXb3JkKHByZXZpb3VzLCBMZWZ0
V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwMiA9IHN0YXJ0T2ZX
b3JkKHN0YXJ0LCBMZWZ0V29yZElmT25Cb3VuZGFyeSk7CiAgICAgICAgIGlmIChwMSAhPSBwMikg
ewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShwMSwgcDIpOwor
ICAgICAgICAgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwMSwgcDIpOwogICAgICAg
ICAgICAgU3RyaW5nIHN0cmlwcGVkUHJldmlvdXNXb3JkOwogICAgICAgICAgICAgaWYgKHJhbmdl
ICYmIChjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRUZXh0IHx8IGNvbW1hbmRU
eXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydExpbmVCcmVhayB8fCBjb21tYW5kVHlwZSA9PSBU
eXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3IgfHwgY29tbWFuZFR5cGUgPT0g
VHlwaW5nQ29tbWFuZDo6SW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9ySW5RdW90ZWRDb250ZW50KSkK
ICAgICAgICAgICAgICAgICBzdHJpcHBlZFByZXZpb3VzV29yZCA9IHBsYWluVGV4dCgqcmFuZ2Up
LnN0cmlwV2hpdGVTcGFjZSgpOwpAQCAtNDc1LDcgKzQ3NSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFu
ZDo6bWFya01pc3NwZWxsaW5nc0FmdGVyVHlwaW5nKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBl
KQogICAgIH0KIH0KIAotYm9vbCBUeXBpbmdDb21tYW5kOjp3aWxsQWRkVHlwaW5nVG9PcGVuQ29t
bWFuZChFVHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFy
aXR5LCBjb25zdCBTdHJpbmcmIHRleHQsIFJlZlB0cjxSYW5nZT4mJiByYW5nZSkKK2Jvb2wgVHlw
aW5nQ29tbWFuZDo6d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1hbmQgY29t
bWFuZFR5cGUsIFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgY29uc3QgU3RyaW5nJiB0ZXh0
LCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIG1fY3VycmVudFRl
eHRUb0luc2VydCA9IHRleHQ7CiAgICAgbV9jdXJyZW50VHlwaW5nRWRpdEFjdGlvbiA9IGVkaXRB
Y3Rpb25Gb3JUeXBpbmdDb21tYW5kKGNvbW1hbmRUeXBlLCBncmFudWxhcml0eSwgbV9jb21wb3Np
dGlvblR5cGUsIG1faXNBdXRvY29tcGxldGlvbik7CkBAIC02NjEsNyArNjYxLDcgQEAgdm9pZCBU
eXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0
eSwgYm9vbCBzaG91bGRBZGQKICAgICAgICAgaWYgKHByZXZpb3VzUG9zaXRpb24uaXNOdWxsKCkg
fHwgZW5jbG9zaW5nVGFibGVDZWxsICE9IGVuY2xvc2luZ1RhYmxlQ2VsbEZvclByZXZpb3VzUG9z
aXRpb24pIHsKICAgICAgICAgICAgIC8vIFdoZW4gdGhlIGNhcmV0IGlzIGF0IHRoZSBzdGFydCBv
ZiB0aGUgZWRpdGFibGUgYXJlYSBpbiBhbiBlbXB0eSBsaXN0IGl0ZW0sIGJyZWFrIG91dCBvZiB0
aGUgbGlzdCBpdGVtLgogICAgICAgICAgICAgaWYgKGF1dG8gZGVsZXRlTGlzdFNlbGVjdGlvbiA9
IHNob3VsZEJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAo
d2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBS
YW5nZTo6Y3JlYXRlKGRvY3VtZW50KCksIGRlbGV0ZUxpc3RTZWxlY3Rpb24udmFsdWUoKS5zdGFy
dCgpLCBkZWxldGVMaXN0U2VsZWN0aW9uLnZhbHVlKCkuZW5kKCkpKSkgeworICAgICAgICAgICAg
ICAgIGlmICh3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdyYW51bGFyaXR5
LCB7IH0sICpkZWxldGVMaXN0U2VsZWN0aW9uLnZhbHVlKCkuZmlyc3RSYW5nZSgpKSkgewogICAg
ICAgICAgICAgICAgICAgICBicmVha091dE9mRW1wdHlMaXN0SXRlbSgpOwogICAgICAgICAgICAg
ICAgICAgICB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRGVsZXRlS2V5KTsKICAgICAgICAgICAg
ICAgICB9CkBAIC03MzEsNyArNzMxLDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQ
cmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaG91bGRBZGQKICAgICBp
ZiAoc2VsZWN0aW9uVG9EZWxldGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigp
LnNob3VsZERlbGV0ZVNlbGVjdGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVy
bjsKICAgICAKLSAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtleSwg
Z3JhbnVsYXJpdHksIHsgfSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25Ub0RlbGV0ZS5maXJz
dFJhbmdlKCkpKSkKKyAgICBpZiAoIXdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0ZUtl
eSwgZ3JhbnVsYXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKICAg
ICAgICAgcmV0dXJuOwogCiAgICAgaWYgKHNob3VsZEFkZFRvS2lsbFJpbmcpCkBAIC04MzksNyAr
ODM5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0
R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wgc2gKICAgICBpZiAoc2VsZWN0aW9uVG9EZWxl
dGUuaXNDYXJldCgpIHx8ICFkb2N1bWVudCgpLnNlbGVjdGlvbigpLnNob3VsZERlbGV0ZVNlbGVj
dGlvbihzZWxlY3Rpb25Ub0RlbGV0ZSkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGlmICghd2ls
bEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVsYXJpdHksIHsg
fSwgY3JlYXRlTGl2ZVJhbmdlKHNlbGVjdGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQorICAg
IGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNvbW1hbmQoRm9yd2FyZERlbGV0ZUtleSwgZ3JhbnVs
YXJpdHksIHsgfSwgc2VsZWN0aW9uVG9EZWxldGUuZmlyc3RSYW5nZSgpKSkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgLy8gUG9zdCB0aGUgYWNjZXNzaWJpbGl0eSBub3RpZmljYXRpb24gYmVmb3Jl
IGFjdHVhbGx5IGRlbGV0aW5nIHRoZSBjb250ZW50IHdoaWxlIHNlbGVjdGlvblRvRGVsZXRlIGlz
IHN0aWxsIHZhbGlkCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oCmluZGV4IGU5
NzZhNmJmMGE0OGM2NTY1Yzk4MGFiMjNlMDJhMGIxZmUxMTE0ZGMuLjY5MGVlMjYyNWUwZDE2NDJm
OGE2Mjk3MTBhMGI4YjAxY2IzYTc3MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29t
bWFuZC5oCkBAIC0xMjUsNyArMTI1LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgdm9pZCB1cGRh
dGVTZWxlY3Rpb25JZkRpZmZlcmVudEZyb21DdXJyZW50U2VsZWN0aW9uKFR5cGluZ0NvbW1hbmQq
LCBEb2N1bWVudCYpOwogCiAgICAgdm9pZCB1cGRhdGVQcmVzZXJ2ZXNUeXBpbmdTdHlsZShFVHlw
aW5nQ29tbWFuZCk7Ci0gICAgYm9vbCB3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChFVHlwaW5n
Q29tbWFuZCwgVGV4dEdyYW51bGFyaXR5LCBjb25zdCBTdHJpbmcmID0gZW1wdHlTdHJpbmcoKSwg
UmVmUHRyPFJhbmdlPiYmID0gbnVsbHB0cik7CisgICAgYm9vbCB3aWxsQWRkVHlwaW5nVG9PcGVu
Q29tbWFuZChFVHlwaW5nQ29tbWFuZCwgVGV4dEdyYW51bGFyaXR5LCBjb25zdCBTdHJpbmcmID0g
ZW1wdHlTdHJpbmcoKSwgY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JiA9IHsgfSk7CiAgICAg
dm9pZCBtYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0NvbW1hbmQpOwogICAgIHZv
aWQgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kKTsKICAgICBib29sIG1h
a2VFZGl0YWJsZVJvb3RFbXB0eSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9z
aXRpb24uY3BwCmluZGV4IDAxNjhlYjgxODE0MmQzZjQ2OTlmNTVlYTBmZjhiMjJhYWRiNjM3NmYu
LmY5NThkOGUzMzMyNmE2M2VhOWVlYTNjNTZjZDdhYjhjNDQ4YTZhYWUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKQEAgLTczMCw1MyArNzMwLDYgQEAgdm9p
ZCBWaXNpYmxlUG9zaXRpb246OnNob3dUcmVlRm9yVGhpcygpIGNvbnN0CiAKICNlbmRpZgogCi1S
ZWZQdHI8UmFuZ2U+IG1ha2VSYW5nZShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHN0YXJ0LCBjb25z
dCBWaXNpYmxlUG9zaXRpb24mIGVuZCkKLXsKLSAgICBpZiAoc3RhcnQuaXNOdWxsKCkgfHwgZW5k
LmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBQb3NpdGlvbiBz
ID0gc3RhcnQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAg
ICBQb3NpdGlvbiBlID0gZW5kLmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFs
ZW50KCk7Ci0gICAgaWYgKHMuaXNOdWxsKCkgfHwgZS5pc051bGwoKSkKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShzLmNvbnRhaW5lck5vZGUoKS0+
ZG9jdW1lbnQoKSwgcy5jb250YWluZXJOb2RlKCksIHMub2Zmc2V0SW5Db250YWluZXJOb2RlKCks
IGUuY29udGFpbmVyTm9kZSgpLCBlLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLX0KLQotVmlz
aWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5p
dHkgYWZmaW5pdHkpCi17Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihyLT5zdGFydFBvc2l0
aW9uKCksIGFmZmluaXR5KTsKLX0KLQotVmlzaWJsZVBvc2l0aW9uIGVuZFZpc2libGVQb3NpdGlv
bihjb25zdCBSYW5nZSAqciwgRUFmZmluaXR5IGFmZmluaXR5KQotewotICAgIHJldHVybiBWaXNp
YmxlUG9zaXRpb24oci0+ZW5kUG9zaXRpb24oKSwgYWZmaW5pdHkpOwotfQotCi1ib29sIHNldFN0
YXJ0KFJhbmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24p
Ci17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRp
b24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwotICAgIGlmICghcC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiAhcmFuZ2UtPnNldFN0YXJ0KCpwLmNvbnRhaW5lck5vZGUoKSwg
cC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkuaGFzRXhjZXB0aW9uKCk7Ci19Ci0KLWJvb2wgc2V0
RW5kKFJhbmdlKiByYW5nZSwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24p
Ci17Ci0gICAgaWYgKCFyYW5nZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgUG9zaXRp
b24gcCA9IHZpc2libGVQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwotICAgIGlmICghcC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIHJldHVybiAhcmFuZ2UtPnNldEVuZCgqcC5jb250YWluZXJOb2RlKCksIHAu
b2Zmc2V0SW5Db250YWluZXJOb2RlKCkpLmhhc0V4Y2VwdGlvbigpOwotfQotCiAvLyBGSVhNRTog
TWF5YmUgdGhpcyBzaG91bGQgYmUgZGVwcmVjYXRlZCB0b28sIGxpa2UgdGhlIHVuZGVybHlpbmcg
ZnVuY3Rpb24/CiBFbGVtZW50KiBlbmNsb3NpbmdCbG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgdmlzaWJsZVBvc2l0aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlz
aWJsZVBvc2l0aW9uLmgKaW5kZXggOTFlZDRjYzBmMzQ0ODM0NzUyMmQ1ZDEyNmFlNDlmM2UyYzAx
ZTJkZi4uMGI5ODNiMTkzYzlhMGI0Zjg1MjBhNGRmMjAyYTViMDYxNThhYzY1OSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oCkBAIC0xMjYsMTIgKzEyNiw2IEBAIGJv
b2wgb3BlcmF0b3I+PShjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBjb25zdCBWaXNpYmxlUG9zaXRp
b24mKTsKIAogV0VCQ09SRV9FWFBPUlQgT3B0aW9uYWw8Qm91bmRhcnlQb2ludD4gbWFrZUJvdW5k
YXJ5UG9pbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAKLVdFQkNPUkVfRVhQT1JUIFJlZlB0
cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IFZpc2libGVQ
b3NpdGlvbiYpOwotYm9vbCBzZXRTdGFydChSYW5nZSosIGNvbnN0IFZpc2libGVQb3NpdGlvbiYp
OwotYm9vbCBzZXRFbmQoUmFuZ2UqLCBjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKLVZpc2libGVQ
b3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbihjb25zdCBSYW5nZSosIEVBZmZpbml0eSk7Ci1W
aXNpYmxlUG9zaXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlKiwgRUFmZmluaXR5
KTsKLQogV0VCQ09SRV9FWFBPUlQgRWxlbWVudCogZW5jbG9zaW5nQmxvY2tGbG93RWxlbWVudChj
b25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAogYm9vbCBpc0ZpcnN0VmlzaWJsZVBvc2l0aW9uSW5O
b2RlKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNvbnN0IE5vZGUqKTsKQEAgLTE0OSw3ICsxNDMs
NyBAQCBzdHJ1Y3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UgewogICAgIGJvb2wgaXNOdWxsKCkgY29u
c3QgeyByZXR1cm4gc3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpOyB9CiB9OwogCi1PcHRp
b25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJhbmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJh
bmdlJik7CitXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gbWFrZVNpbXBsZVJh
bmdlKGNvbnN0IFZpc2libGVQb3NpdGlvblJhbmdlJik7CiAKIC8vIGlubGluZXMKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwCmluZGV4IGE4MDdmNTYzZTZlZDIwZWRlMDdh
NzBkNDRjYzFhZTVjMjcyMDQwYzEuLmEzMjliMTIxYTRjMzFkM2RlNGJjYzA1M2Y1NWE4ZWZkY2Zk
Yzc0ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKQEAgLTQ4Niw3
ICs0ODYsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRSZXBlYXRlZENoYXJhY3RlcihWZWN0b3I8VUNo
YXIsIDEwMjQ+JiBidWZmZXIsIFVDaGFyIGNoYXJhY3RlcgogICAgICAgICBidWZmZXJbb2xkU2l6
ZSArIGldID0gY2hhcmFjdGVyOwogfQogCi11bnNpZ25lZCBzdWZmaXhMZW5ndGhGb3JSYW5nZShj
b25zdCBSYW5nZSYgZm9yd2FyZHNTY2FuUmFuZ2UsIFZlY3RvcjxVQ2hhciwgMTAyND4mIHN0cmlu
ZykKK3Vuc2lnbmVkIHN1ZmZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiBmb3J3
YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFyLCAxMDI0PiYgc3RyaW5nKQogewogICAgIHVuc2ln
bmVkIHN1ZmZpeExlbmd0aCA9IDA7CiAgICAgVGV4dEl0ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3Io
Zm9yd2FyZHNTY2FuUmFuZ2UpOwpAQCAtNTAyLDcgKzUwMiw3IEBAIHVuc2lnbmVkIHN1ZmZpeExl
bmd0aEZvclJhbmdlKGNvbnN0IFJhbmdlJiBmb3J3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFy
LCAxMDI0CiAgICAgcmV0dXJuIHN1ZmZpeExlbmd0aDsKIH0KIAotdW5zaWduZWQgcHJlZml4TGVu
Z3RoRm9yUmFuZ2UoY29uc3QgUmFuZ2UmIGJhY2t3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFy
LCAxMDI0PiYgc3RyaW5nKQordW5zaWduZWQgcHJlZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgU2lt
cGxlUmFuZ2UmIGJhY2t3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVDaGFyLCAxMDI0PiYgc3RyaW5n
KQogewogICAgIHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDA7CiAgICAgU2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvciBiYWNrd2FyZHNJdGVyYXRvcihiYWNrd2FyZHNTY2FuUmFuZ2UpOwpA
QCAtNTgwLDc0ICs1ODAsNTAgQEAgdW5zaWduZWQgZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0
aFRleHRJdGVyYXRvcihUZXh0SXRlcmF0b3ImIGl0LCBWZWN0b3I8VUNoYXIKIH0KIAogZW51bSBj
bGFzcyBOZWVkc0NvbnRleHRBdFBhcmFncmFwaFN0YXJ0IHsgWWVzLCBObyB9Owotc3RhdGljIFZp
c2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywg
Qm91bmRhcnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlvbiwKK3N0YXRpYyBWaXNpYmxlUG9z
aXRpb24gcHJldmlvdXNCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIHBvc2l0aW9uLCBC
b3VuZGFyeVNlYXJjaEZ1bmN0aW9uIHNlYXJjaEZ1bmN0aW9uLAogICAgIE5lZWRzQ29udGV4dEF0
UGFyYWdyYXBoU3RhcnQgbmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydCA9IE5lZWRzQ29udGV4
dEF0UGFyYWdyYXBoU3RhcnQ6Ok5vKQogewotICAgIFBvc2l0aW9uIHBvcyA9IGMuZGVlcEVxdWl2
YWxlbnQoKTsKLSAgICBOb2RlKiBib3VuZGFyeSA9IHBvcy5wYXJlbnRFZGl0aW5nQm91bmRhcnko
KTsKKyAgICBhdXRvIGJvdW5kYXJ5ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRF
ZGl0aW5nQm91bmRhcnkoKTsKICAgICBpZiAoIWJvdW5kYXJ5KQotICAgICAgICByZXR1cm4gVmlz
aWJsZVBvc2l0aW9uKCk7Ci0KLSAgICBEb2N1bWVudCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5k
YXJ5LT5kb2N1bWVudCgpOwotICAgIFBvc2l0aW9uIHN0YXJ0ID0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGJvdW5kYXJ5LCAwKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBQ
b3NpdGlvbiBlbmQgPSBwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0KLSAgICBpZiAo
c3RhcnQuaXNOdWxsKCkgfHwgZW5kLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gVmlzaWJsZVBv
c2l0aW9uKCk7CisgICAgICAgIHJldHVybiB7IH07CiAKLSAgICBSZWY8UmFuZ2U+IHNlYXJjaFJh
bmdlID0gUmFuZ2U6OmNyZWF0ZShib3VuZGFyeURvY3VtZW50KTsKLSAgICAKICAgICBWZWN0b3I8
VUNoYXIsIDEwMjQ+IHN0cmluZzsKICAgICB1bnNpZ25lZCBzdWZmaXhMZW5ndGggPSAwOwogCi0g
ICAgaWYgKG5lZWRzQ29udGV4dEF0UGFyYWdyYXBoU3RhcnQgPT0gTmVlZHNDb250ZXh0QXRQYXJh
Z3JhcGhTdGFydDo6WWVzICYmIGlzU3RhcnRPZlBhcmFncmFwaChjKSkgewotICAgICAgICBhdXRv
IGZvcndhcmRzU2NhblJhbmdlID0gYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAg
ICAgICBhdXRvIGVuZE9mQ3VycmVudFBhcmFncmFwaCA9IGVuZE9mUGFyYWdyYXBoKGMpOwotICAg
ICAgICBhdXRvIHJlc3VsdCA9IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmQoZW5kT2ZDdXJyZW50
UGFyYWdyYXBoLmRlZXBFcXVpdmFsZW50KCkpOwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2Vw
dGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAgICAgcmVzdWx0ID0gZm9yd2Fy
ZHNTY2FuUmFuZ2UtPnNldFN0YXJ0KHN0YXJ0KTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNl
cHRpb24oKSkKKyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3Vu
ZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKCpib3VuZGFyeSksIHBvc2l0aW9uKTsKKyAgICBp
ZiAoIXNlYXJjaFJhbmdlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgaWYgKG5lZWRzQ29u
dGV4dEF0UGFyYWdyYXBoU3RhcnQgPT0gTmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydDo6WWVz
ICYmIGlzU3RhcnRPZlBhcmFncmFwaChwb3NpdGlvbikpIHsKKyAgICAgICAgYXV0byBmb3J3YXJk
c1NjYW5SYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzZWFyY2hSYW5nZS0+c3RhcnQsIGVuZE9mUGFy
YWdyYXBoKHBvc2l0aW9uKSk7CisgICAgICAgIGlmICghZm9yd2FyZHNTY2FuUmFuZ2UpCiAgICAg
ICAgICAgICByZXR1cm4geyB9OwotICAgICAgICBmb3IgKFRleHRJdGVyYXRvciBmb3J3YXJkc0l0
ZXJhdG9yKGZvcndhcmRzU2NhblJhbmdlKTsgIWZvcndhcmRzSXRlcmF0b3IuYXRFbmQoKTsgZm9y
d2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCisgICAgICAgIGZvciAoVGV4dEl0ZXJhdG9yIGZvcndh
cmRzSXRlcmF0b3IoKmZvcndhcmRzU2NhblJhbmdlKTsgIWZvcndhcmRzSXRlcmF0b3IuYXRFbmQo
KTsgZm9yd2FyZHNJdGVyYXRvci5hZHZhbmNlKCkpCiAgICAgICAgICAgICBhcHBlbmQoc3RyaW5n
LCBmb3J3YXJkc0l0ZXJhdG9yLnRleHQoKSk7CiAgICAgICAgIHN1ZmZpeExlbmd0aCA9IHN0cmlu
Zy5zaXplKCk7Ci0gICAgfSBlbHNlIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnko
Yy5jaGFyYWN0ZXJCZWZvcmUoKSkpIHsKLSAgICAgICAgYXV0byBmb3J3YXJkc1NjYW5SYW5nZSA9
IGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgYXV0byByZXN1bHQgPSBm
b3J3YXJkc1NjYW5SYW5nZS0+c2V0RW5kQWZ0ZXIoKmJvdW5kYXJ5KTsKLSAgICAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIHJl
c3VsdCA9IGZvcndhcmRzU2NhblJhbmdlLT5zZXRTdGFydCgqZW5kLmRlcHJlY2F0ZWROb2RlKCks
IGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICAgICAgaWYgKHJlc3VsdC5oYXNF
eGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgfSBlbHNlIGlmIChyZXF1
aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnkocG9zaXRpb24uY2hhcmFjdGVyQmVmb3JlKCkpKSB7
CisgICAgICAgIGF1dG8gZm9yd2FyZHNTY2FuUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc2VhcmNo
UmFuZ2UtPmVuZCwgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqYm91bmRhcnkp
KTsKICAgICAgICAgc3VmZml4TGVuZ3RoID0gc3VmZml4TGVuZ3RoRm9yUmFuZ2UoZm9yd2FyZHNT
Y2FuUmFuZ2UsIHN0cmluZyk7CiAgICAgfQogCi0gICAgYXV0byByZXN1bHQgPSBzZWFyY2hSYW5n
ZS0+c2V0U3RhcnQoKnN0YXJ0LmRlcHJlY2F0ZWROb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0
aW5nT2Zmc2V0KCkpOwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0gICAgcmVzdWx0ID0gc2VhcmNoUmFuZ2UtPnNldEVuZCgqZW5kLmRlcHJlY2F0
ZWROb2RlKCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICBpZiAocmVzdWx0
Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgU2ltcGxpZmllZEJh
Y2t3YXJkc1RleHRJdGVyYXRvciBpdChzZWFyY2hSYW5nZSk7CisgICAgU2ltcGxpZmllZEJhY2t3
YXJkc1RleHRJdGVyYXRvciBpdCgqc2VhcmNoUmFuZ2UpOwogICAgIHVuc2lnbmVkIG5leHQgPSBi
YWNrd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVyYXRvcihpdCwgc3RyaW5nLCBzdWZm
aXhMZW5ndGgsIHNlYXJjaEZ1bmN0aW9uKTsKIAogICAgIGlmICghbmV4dCkKLSAgICAgICAgcmV0
dXJuIFZpc2libGVQb3NpdGlvbihpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0UG9zaXRp
b24oKSA6IHBvcywgRE9XTlNUUkVBTSk7CisgICAgICAgIHJldHVybiBpdC5hdEVuZCgpID8gY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHNlYXJjaFJhbmdlLT5zdGFydCkgOiBwb3NpdGlvbjsK
IAotICAgIGF1dG8mIG5vZGUgPSBpdC5hdEVuZCgpID8gc2VhcmNoUmFuZ2UtPnN0YXJ0Q29udGFp
bmVyKCkgOiBpdC5yYW5nZSgpLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKKyAgICBhdXRvJiBub2Rl
ID0gKGl0LmF0RW5kKCkgPyAqc2VhcmNoUmFuZ2UgOiBpdC5yYW5nZSgpKS5zdGFydC5jb250YWlu
ZXIuZ2V0KCk7CiAgICAgaWYgKCghc3VmZml4TGVuZ3RoICYmIGlzPFRleHQ+KG5vZGUpICYmIG5l
eHQgPD0gZG93bmNhc3Q8VGV4dD4obm9kZSkubGVuZ3RoKCkpIHx8IChub2RlLnJlbmRlcmVyKCkg
JiYgbm9kZS5yZW5kZXJlcigpLT5pc0JSKCkgJiYgIW5leHQpKSB7Ci0gICAgICAgIC8vIFRoZSBu
ZXh0IHZhcmlhYmxlIGNvbnRhaW5zIGEgdXNhYmxlIGluZGV4IGludG8gYSB0ZXh0IG5vZGUKLSAg
ICAgICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24o
Jm5vZGUsIG5leHQpLCBET1dOU1RSRUFNKTsKKyAgICAgICAgLy8gVGhlIG5leHQgdmFyaWFibGUg
Y29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50byBhIHRleHQgbm9kZS4KKyAgICAgICAgcmV0dXJu
IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgbmV4dCk7CiAgICAgfQogCiAgICAg
Ly8gVXNlIHRoZSBjaGFyYWN0ZXIgaXRlcmF0b3IgdG8gdHJhbnNsYXRlIHRoZSBuZXh0IHZhbHVl
IGludG8gYSBET00gcG9zaXRpb24uCi0gICAgQmFja3dhcmRzQ2hhcmFjdGVySXRlcmF0b3IgY2hh
ckl0KHNlYXJjaFJhbmdlKTsKKyAgICBCYWNrd2FyZHNDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQo
KnNlYXJjaFJhbmdlKTsKICAgICBpZiAobmV4dCA8IHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5n
dGgpCiAgICAgICAgIGNoYXJJdC5hZHZhbmNlKHN0cmluZy5zaXplKCkgLSBzdWZmaXhMZW5ndGgg
LSBuZXh0KTsKICAgICAvLyBGSVhNRTogY2hhckl0IGNhbiBnZXQgb3V0IG9mIHNoYWRvdyBob3N0
LgotICAgIHJldHVybiB7IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjaGFySXQucmFuZ2Uo
KS5lbmQpLCBET1dOU1RSRUFNIH07CisgICAgcmV0dXJuIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3Np
dGlvbihjaGFySXQucmFuZ2UoKS5lbmQpOwogfQogCiBzdGF0aWMgVmlzaWJsZVBvc2l0aW9uIG5l
eHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2VhcmNoRnVuY3Rp
b24gc2VhcmNoRnVuY3Rpb24pCkBAIC02NTgsMzAgKzYzNCwyOSBAQCBzdGF0aWMgVmlzaWJsZVBv
c2l0aW9uIG5leHRCb3VuZGFyeShjb25zdCBWaXNpYmxlUG9zaXRpb24mIGMsIEJvdW5kYXJ5U2Vh
cmNoRnVuYwogICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKCk7CiAKICAgICBEb2N1bWVu
dCYgYm91bmRhcnlEb2N1bWVudCA9IGJvdW5kYXJ5LT5kb2N1bWVudCgpOwotICAgIFJlZjxSYW5n
ZT4gc2VhcmNoUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50LmNyZWF0ZVJhbmdlKCk7Ci0gICAgUG9z
aXRpb24gc3RhcnQocG9zLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpKTsKIAogICAgIFZlY3Rv
cjxVQ2hhciwgMTAyND4gc3RyaW5nOwogICAgIHVuc2lnbmVkIHByZWZpeExlbmd0aCA9IDA7CiAK
ICAgICBpZiAocmVxdWlyZXNDb250ZXh0Rm9yV29yZEJvdW5kYXJ5KGMuY2hhcmFjdGVyQWZ0ZXIo
KSkpIHsKLSAgICAgICAgYXV0byBiYWNrd2FyZHNTY2FuUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50
LmNyZWF0ZVJhbmdlKCk7Ci0gICAgICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpKQotICAg
ICAgICAgICAgYmFja3dhcmRzU2NhblJhbmdlLT5zZXRFbmQoKnN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgICAgICBwcmVmaXhMZW5n
dGggPSBwcmVmaXhMZW5ndGhGb3JSYW5nZShiYWNrd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7Cisg
ICAgICAgIGF1dG8gYmFja3dhcmRzU2NhblJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1ha2VCb3Vu
ZGFyeVBvaW50QmVmb3JlTm9kZUNvbnRlbnRzKGJvdW5kYXJ5RG9jdW1lbnQpLCBjKTsKKyAgICAg
ICAgaWYgKCFiYWNrd2FyZHNTY2FuUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4geyB9OworICAg
ICAgICBwcmVmaXhMZW5ndGggPSBwcmVmaXhMZW5ndGhGb3JSYW5nZSgqYmFja3dhcmRzU2NhblJh
bmdlLCBzdHJpbmcpOwogICAgIH0KIAotICAgIHNlYXJjaFJhbmdlLT5zZWxlY3ROb2RlQ29udGVu
dHMoKmJvdW5kYXJ5KTsKLSAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSkKLSAgICAgICAg
c2VhcmNoUmFuZ2UtPnNldFN0YXJ0KCpzdGFydC5kZXByZWNhdGVkTm9kZSgpLCBzdGFydC5kZXBy
ZWNhdGVkRWRpdGluZ09mZnNldCgpKTsKLSAgICBUZXh0SXRlcmF0b3IgaXQoc2VhcmNoUmFuZ2Us
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsK
KyAgICBhdXRvIHNlYXJjaFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKGMsIG1ha2VCb3VuZGFyeVBv
aW50QWZ0ZXJOb2RlQ29udGVudHMoKmJvdW5kYXJ5KSk7CisgICAgaWYgKCFzZWFyY2hSYW5nZSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFRleHRJdGVyYXRvciBpdCgqc2VhcmNoUmFuZ2Us
IFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsK
ICAgICB1bnNpZ25lZCBuZXh0ID0gZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRleHRJdGVy
YXRvcihpdCwgc3RyaW5nLCBwcmVmaXhMZW5ndGgsIHNlYXJjaEZ1bmN0aW9uKTsKICAgICAKICAg
ICBpZiAoaXQuYXRFbmQoKSAmJiBuZXh0ID09IHN0cmluZy5zaXplKCkpCi0gICAgICAgIHBvcyA9
IHNlYXJjaFJhbmdlLT5lbmRQb3NpdGlvbigpOworICAgICAgICBwb3MgPSBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24oc2VhcmNoUmFuZ2UtPmVuZCk7CiAgICAgZWxzZSBpZiAobmV4dCA+IHBy
ZWZpeExlbmd0aCkgewogICAgICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0
cmFuc2xhdGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICAgICAgQ2hh
cmFjdGVySXRlcmF0b3IgY2hhckl0KHNlYXJjaFJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJh
Y3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgICAgIENoYXJhY3Rlckl0ZXJh
dG9yIGNoYXJJdCgqc2VhcmNoUmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdl
ZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKICAgICAgICAgY2hhckl0LmFkdmFuY2UobmV4dCAtIHBy
ZWZpeExlbmd0aCAtIDEpOwogICAgICAgICBhdXRvIGNoYXJhY3RlclJhbmdlID0gY2hhckl0LnJh
bmdlKCk7CiAgICAgICAgIHBvcyA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjaGFyYWN0
ZXJSYW5nZS5lbmQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVuaXRzLmgKaW5kZXggNDJl
NjM3ODk1ZWVjNzliZDhjMjJiNmRjNzg5NTQ3YTJiOGE5YWU5MC4uZjQ3NTFiN2Y1MDU5ZDQ4ZDEy
MDUyNjkzYzhmZGE5MjcxN2FmNTM5NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5oCkBAIC0xMTgsOCArMTE4LDggQEAgdW5zaWduZWQgc3RhcnRXb3JkQm91bmRhcnkoU3RyaW5n
VmlldywgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGkKIHVuc2lnbmVk
IGVuZFdvcmRCb3VuZGFyeShTdHJpbmdWaWV3LCB1bnNpZ25lZCwgQm91bmRhcnlTZWFyY2hDb250
ZXh0QXZhaWxhYmlsaXR5LCBib29sJik7CiB1bnNpZ25lZCBzdGFydFNlbnRlbmNlQm91bmRhcnko
U3RyaW5nVmlldywgdW5zaWduZWQsIEJvdW5kYXJ5U2VhcmNoQ29udGV4dEF2YWlsYWJpbGl0eSwg
Ym9vbCYpOwogdW5zaWduZWQgZW5kU2VudGVuY2VCb3VuZGFyeShTdHJpbmdWaWV3LCB1bnNpZ25l
ZCwgQm91bmRhcnlTZWFyY2hDb250ZXh0QXZhaWxhYmlsaXR5LCBib29sJik7Ci11bnNpZ25lZCBz
dWZmaXhMZW5ndGhGb3JSYW5nZShjb25zdCBSYW5nZSYsIFZlY3RvcjxVQ2hhciwgMTAyND4mKTsK
LXVuc2lnbmVkIHByZWZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFJhbmdlJiwgVmVjdG9yPFVDaGFy
LCAxMDI0PiYpOwordW5zaWduZWQgc3VmZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgU2ltcGxlUmFu
Z2UmLCBWZWN0b3I8VUNoYXIsIDEwMjQ+Jik7Cit1bnNpZ25lZCBwcmVmaXhMZW5ndGhGb3JSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYsIFZlY3RvcjxVQ2hhciwgMTAyND4mKTsKIHVuc2lnbmVkIGJh
Y2t3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKFNpbXBsaWZpZWRCYWNrd2Fy
ZHNUZXh0SXRlcmF0b3ImLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiwgdW5zaWduZWQsIEJvdW5kYXJ5
U2VhcmNoRnVuY3Rpb24pOwogdW5zaWduZWQgZm9yd2FyZFNlYXJjaEZvckJvdW5kYXJ5V2l0aFRl
eHRJdGVyYXRvcihUZXh0SXRlcmF0b3ImLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiwgdW5zaWduZWQs
IEJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24pOwogTm9kZSogZmluZFN0YXJ0T2ZQYXJhZ3JhcGgoTm9k
ZSosIE5vZGUqLCBOb2RlKiwgaW50JiwgUG9zaXRpb246OkFuY2hvclR5cGUmLCBFZGl0aW5nQm91
bmRhcnlDcm9zc2luZ1J1bGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9EYXRhRGV0ZWN0aW9uLm1tIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRh
RGV0ZWN0aW9uLm1tCmluZGV4IDE0ZmE2ODgyYzY3MzZjNzNmZDYzNDQwOGZlY2Q3OGE0MmRiYWE2
ZDAuLjJhNWRlZTgwMWIzNWY3NWJlNWJlZWU0ZTY1MmUxMTc3NTJhZmE1MzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5tbQorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KQEAgLTM1NSw3ICszNTUs
NiBAQCBzdGF0aWMgdm9pZCBidWlsZFF1ZXJ5KEREU2NhblF1ZXJ5UmVmIHNjYW5RdWVyeSwgY29u
c3QgU2ltcGxlUmFuZ2UmIGNvbnRleHRSYW5nZQogICAgIENGQ2hhcmFjdGVyU2V0UmVmIHdoaXRl
U3BhY2VzU2V0ID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3RlclNldFdo
aXRlc3BhY2VBbmROZXdsaW5lKTsKICAgICBDRkNoYXJhY3RlclNldFJlZiBuZXdMaW5lc1NldCA9
IENGQ2hhcmFjdGVyU2V0R2V0UHJlZGVmaW5lZChrQ0ZDaGFyYWN0ZXJTZXROZXdsaW5lKTsKICAg
ICAKLSAgICBSZWZQdHI8UmFuZ2U+IGVuZFJhbmdlOwogICAgIENGSW5kZXggaXRlcmF0b3JDb3Vu
dCA9IDA7CiAgICAgQ0ZJbmRleCBmcmFnbWVudENvdW50ID0gMDsKICAgICAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvaW9zL0VkaXRvcklPUy5tbQppbmRleCBjOTMzNzNhZDM4NjBiNzFhMjdiODM2MGEx
YjRmOTM4OWY2ZWY5M2JhLi4xNzhkMjc0ZmY1MDQwYTcxMTliMjI1MDA1MzBkZTBmZDcwMTg1Yzk5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCkBAIC0yNjcsMTQgKzI2
NywxMyBAQCB2b2lkIEVkaXRvcjo6c2V0RGljdGF0aW9uUGhyYXNlc0FzQ2hpbGRPZkVsZW1lbnQo
Y29uc3QgVmVjdG9yPFZlY3RvcjxTdHJpbmc+PiYgZAogICAgICAgICByZXR1cm47CiAgICAgfQog
Ci0gICAgUmVmUHRyPFJhbmdlPiBjb250ZXh0ID0gZG9jdW1lbnQoKS5jcmVhdGVSYW5nZSgpOwot
ICAgIGNvbnRleHQtPnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50KTsKKyAgICBhdXRvIGNvbnRl
eHQgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoZWxlbWVudCk7CiAKICAgICBTdHJp
bmdCdWlsZGVyIGRpY3RhdGlvblBocmFzZXNCdWlsZGVyOwogICAgIGZvciAoYXV0byYgaW50ZXJw
cmV0YXRpb25zIDogZGljdGF0aW9uUGhyYXNlcykKICAgICAgICAgZGljdGF0aW9uUGhyYXNlc0J1
aWxkZXIuYXBwZW5kKGludGVycHJldGF0aW9uc1swXSk7CiAKLSAgICBlbGVtZW50LmFwcGVuZENo
aWxkKGNyZWF0ZUZyYWdtZW50RnJvbVRleHQoKmNvbnRleHQsIGRpY3RhdGlvblBocmFzZXNCdWls
ZGVyLnRvU3RyaW5nKCkpKTsKKyAgICBlbGVtZW50LmFwcGVuZENoaWxkKGNyZWF0ZUZyYWdtZW50
RnJvbVRleHQoY29udGV4dCwgZGljdGF0aW9uUGhyYXNlc0J1aWxkZXIudG9TdHJpbmcoKSkpOwog
CiAgICAgYXV0byB3ZWFrRWxlbWVudCA9IG1ha2VXZWFrUHRyKGVsZW1lbnQpOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0RPTVNlbGVjdGlvbi5jcHAKaW5kZXggNTllYTRmYmY3ZTllNTUyZDI5NzcxYmIyNWYw
NjVkZTEwM2NkYjEzNS4uM2IxNjIzYTliMGVhMDg5NzE4ZDQ4MmVjNmY2ODE5NjEyNWI1MWE3OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcApAQCAtMzA5LDcgKzMwOSw3IEBAIEV4
Y2VwdGlvbk9yPFJlZjxSYW5nZT4+IERPTVNlbGVjdGlvbjo6Z2V0UmFuZ2VBdCh1bnNpZ25lZCBp
bmRleCkKICAgICBpZiAoYXV0byogc2hhZG93QW5jZXN0b3IgPSBzZWxlY3Rpb25TaGFkb3dBbmNl
c3RvcigqZnJhbWUpKSB7CiAgICAgICAgIGF1dG8qIGNvbnRhaW5lciA9IHNoYWRvd0FuY2VzdG9y
LT5wYXJlbnROb2RlR3VhcmFudGVlZEhvc3RGcmVlKCk7CiAgICAgICAgIHVuc2lnbmVkIG9mZnNl
dCA9IHNoYWRvd0FuY2VzdG9yLT5jb21wdXRlTm9kZUluZGV4KCk7Ci0gICAgICAgIHJldHVybiBS
YW5nZTo6Y3JlYXRlKHNoYWRvd0FuY2VzdG9yLT5kb2N1bWVudCgpLCBjb250YWluZXIsIG9mZnNl
dCwgY29udGFpbmVyLCBvZmZzZXQpOworICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKG1h
a2VTaW1wbGVSYW5nZShCb3VuZGFyeVBvaW50IHsgKmNvbnRhaW5lciwgb2Zmc2V0IH0pKTsKICAg
ICB9CiAKICAgICBhdXRvIGZpcnN0UmFuZ2UgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuZmlyc3RSYW5nZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9EcmFnQ29u
dHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcAppbmRl
eCA1NjZkNWQ0NjkzMDllYjhjNjMzNWUwMmEyZWMxNzBiMWM2MjExYTZmLi42NWI1MzgwMGNlYWEz
ZDg1ZTc1NmJhYmJkZTA2NDk0OTdiMDc5Yjg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0RyYWdDb250cm9sbGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdDb250
cm9sbGVyLmNwcApAQCAtMTQ1Nyw3ICsxNDU3LDcgQEAgdm9pZCBEcmFnQ29udHJvbGxlcjo6aW5z
ZXJ0RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldChjb25zdCBWZWN0b3I8SW50U2l6ZT4K
ICAgICBhdXRvIGNvbW1hbmQgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1
bWVudCwgV1RGTW92ZShmcmFnbWVudCksIHsgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZl
bnROZXN0aW5nLCBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U21hcnRSZXBsYWNlIH0sIEVkaXRB
Y3Rpb246Okluc2VydEZyb21Ecm9wKTsKICAgICBjb21tYW5kLT5hcHBseSgpOwogCi0gICAgYXV0
byBpbnNlcnRlZENvbnRlbnRSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShjb21tYW5kLT5pbnNlcnRl
ZENvbnRlbnRSYW5nZSgpKTsKKyAgICBhdXRvIGluc2VydGVkQ29udGVudFJhbmdlID0gY29tbWFu
ZC0+aW5zZXJ0ZWRDb250ZW50UmFuZ2UoKTsKICAgICBpZiAoIWluc2VydGVkQ29udGVudFJhbmdl
KSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvRnJhbWUuY3BwCmluZGV4IDY0MTA1NDhkNDIyMjM3N2MxNDEzODYxY2I1ZDkwMjQyNTNkZWQ3
MzAuLjg5N2ZmMDQzZDNjMzc0NTZkYmI1MDQwNmNkZjBjZmM4ZDc4YzkwOTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCkBAIC04MTYsMjUgKzgxNiwyNSBAQCBEb2N1bWVudCogRnJhbWU6OmRvY3VtZW50
QXRQb2ludChjb25zdCBJbnRQb2ludCYgcG9pbnQpCiAgICAgcmV0dXJuIHJlc3VsdC5pbm5lck5v
ZGUoKSA/ICZyZXN1bHQuaW5uZXJOb2RlKCktPmRvY3VtZW50KCkgOiAwOwogfQogCi1SZWZQdHI8
UmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KQor
T3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZyYW1lOjpyYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50
JiBmcmFtZVBvaW50KQogewogICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQ
b2ludChmcmFtZVBvaW50KTsKIAogICAgIGF1dG8gY29udGFpbmVyVGV4dCA9IHBvc2l0aW9uLmRl
ZXBFcXVpdmFsZW50KCkuY29udGFpbmVyVGV4dCgpOwogICAgIGlmICghY29udGFpbmVyVGV4dCB8
fCAhY29udGFpbmVyVGV4dC0+cmVuZGVyZXIoKSB8fCBjb250YWluZXJUZXh0LT5yZW5kZXJlcigp
LT5zdHlsZSgpLnVzZXJTZWxlY3QoKSA9PSBVc2VyU2VsZWN0OjpOb25lKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIGlmIChhdXRv
IHByZXZpb3VzQ2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24ucHJldmlv
dXMoKSwgcG9zaXRpb24pKSB7CiAgICAgICAgIGlmIChlZGl0b3IoKS5maXJzdFJlY3RGb3JSYW5n
ZSgqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQb2ludCkpCi0gICAgICAg
ICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpwcmV2aW91c0NoYXJhY3RlclJhbmdlKTsKKyAg
ICAgICAgICAgIHJldHVybiAqcHJldmlvdXNDaGFyYWN0ZXJSYW5nZTsKICAgICB9CiAKICAgICBp
ZiAoYXV0byBuZXh0Q2hhcmFjdGVyUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocG9zaXRpb24sIHBv
c2l0aW9uLm5leHQoKSkpIHsKICAgICAgICAgaWYgKGVkaXRvcigpLmZpcnN0UmVjdEZvclJhbmdl
KCpuZXh0Q2hhcmFjdGVyUmFuZ2UpLmNvbnRhaW5zKGZyYW1lUG9pbnQpKQotICAgICAgICAgICAg
cmV0dXJuIGNyZWF0ZUxpdmVSYW5nZSgqbmV4dENoYXJhY3RlclJhbmdlKTsKKyAgICAgICAgICAg
IHJldHVybiAqbmV4dENoYXJhY3RlclJhbmdlOwogICAgIH0KIAotICAgIHJldHVybiBudWxscHRy
OworICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAKIHZvaWQgRnJhbWU6OmNyZWF0ZVZpZXco
Y29uc3QgSW50U2l6ZSYgdmlld3BvcnRTaXplLCBjb25zdCBPcHRpb25hbDxDb2xvcj4mIGJhY2tn
cm91bmRDb2xvciwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA0NTQ0MGFjMWFhZjA3MzcxYzM1MmYxOGRi
NDE2OTYxZjhmMTQxYjYyLi43OGFmNGJmNDI4YWRkM2M4MTZmMWZjNTIwZGM0MzkwNGRkNDNjODdl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZS5oCkBAIC04OSw3ICs4OSw2IEBAIGNsYXNzIEludFNpemU7CiBjbGFz
cyBOYXZpZ2F0aW9uU2NoZWR1bGVyOwogY2xhc3MgTm9kZTsKIGNsYXNzIFBhZ2U7Ci1jbGFzcyBS
YW5nZTsKIGNsYXNzIFJlbmRlckxheWVyOwogY2xhc3MgUmVuZGVyVmlldzsKIGNsYXNzIFJlbmRl
cldpZGdldDsKQEAgLTk5LDYgKzk4LDggQEAgY2xhc3MgU2V0dGluZ3M7CiBjbGFzcyBWaXNpYmxl
UG9zaXRpb247CiBjbGFzcyBXaWRnZXQ7CiAKK3N0cnVjdCBTaW1wbGVSYW5nZTsKKwogI2lmIFBM
QVRGT1JNKElPU19GQU1JTFkpCiBlbnVtIHsKICAgICBPdmVyZmxvd1Njcm9sbE5vbmUgPSAwLApA
QCAtMjY4LDcgKzI2OSw3IEBAIHB1YmxpYzoKIAogICAgIFdFQkNPUkVfRVhQT1JUIFZpc2libGVQ
b3NpdGlvbiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2lu
dCkgY29uc3Q7CiAgICAgRG9jdW1lbnQqIGRvY3VtZW50QXRQb2ludChjb25zdCBJbnRQb2ludCYg
d2luZG93UG9pbnQpOwotICAgIFdFQkNPUkVfRVhQT1JUIFJlZlB0cjxSYW5nZT4gcmFuZ2VGb3JQ
b2ludChjb25zdCBJbnRQb2ludCYgZnJhbWVQb2ludCk7CisgICAgV0VCQ09SRV9FWFBPUlQgT3B0
aW9uYWw8U2ltcGxlUmFuZ2U+IHJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9p
bnQpOwogCiAgICAgV0VCQ09SRV9FWFBPUlQgU3RyaW5nIHNlYXJjaEZvckxhYmVsc0Fib3ZlQ2Vs
bChjb25zdCBKU0M6OllhcnI6OlJlZ3VsYXJFeHByZXNzaW9uJiwgSFRNTFRhYmxlQ2VsbEVsZW1l
bnQqLCBzaXplX3QqIHJlc3VsdERpc3RhbmNlRnJvbVN0YXJ0T2ZDZWxsKTsKICAgICBTdHJpbmcg
c2VhcmNoRm9yTGFiZWxzQmVmb3JlRWxlbWVudChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFiZWxz
LCBFbGVtZW50Kiwgc2l6ZV90KiByZXN1bHREaXN0YW5jZSwgYm9vbCogcmVzdWx0SXNJbkNlbGxB
Ym92ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFtZUlPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCmluZGV4IDU4OThiZTcwYjNmYTIz
NWM5MDg4YjQzYTc2ZDcyOTdiMWZkMjQ3MGYuLmY2OGNhYzQyODFlNjU3NzcwNDlmYzk4ZGIyODJl
OWI1MzI2NDE1MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9T
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCkBAIC03MjMsOCAr
NzIzLDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkg
Y29uc3QKICAgICAgICAgcmV0dXJuIG5pbDsKIAogICAgIGF1dG8qIHJvb3QgPSBzZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxl
Y3Rpb24gPyBkb2N1bWVudCgpLT5ib2R5T3JGcmFtZXNldCgpIDogc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwotICAgIHVuc2lnbmVkIHJvb3RDaGlsZENvdW50
ID0gcm9vdC0+Y291bnRDaGlsZE5vZGVzKCk7Ci0gICAgYXV0byByYW5nZU9mUm9vdENvbnRlbnRz
ID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJvb3QsIDApLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocm9vdCwgcm9vdENoaWxkQ291
bnQpKTsKKyAgICBhdXRvIHJhbmdlT2ZSb290Q29udGVudHMgPSBtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoKnJvb3QpOwogCiAgICAgYXV0byBtYXJrZXJzSW5Sb290ID0gZG9jdW1lbnQo
KS0+bWFya2VycygpLm1hcmtlcnNJblJhbmdlKHJhbmdlT2ZSb290Q29udGVudHMsIERvY3VtZW50
TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzKTsKIApAQCAtNzQ1LDI5ICs3
NDQsMjMgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkg
Y29uc3QKIAogICAgIHVuc2lnbmVkIGNvbWJpbmF0aW9uc1NvRmFyID0gMTsKIAotICAgIE5vZGUq
IHBhc3RMYXN0Tm9kZSA9IHJhbmdlT2ZSb290Q29udGVudHMtPnBhc3RMYXN0Tm9kZSgpOwotICAg
IGZvciAoTm9kZSogbm9kZSA9IHJhbmdlT2ZSb290Q29udGVudHMtPmZpcnN0Tm9kZSgpOyBub2Rl
ICE9IHBhc3RMYXN0Tm9kZTsgbm9kZSA9IE5vZGVUcmF2ZXJzYWw6Om5leHQoKm5vZGUpKSB7Ci0g
ICAgICAgIEFTU0VSVChub2RlKTsKLSAgICAgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBkb2N1bWVu
dCgpLT5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlv
blBocmFzZVdpdGhBbHRlcm5hdGl2ZXMpKSB7CisgICAgZm9yIChhdXRvJiBub2RlIDogaW50ZXJz
ZWN0aW5nTm9kZXMocmFuZ2VPZlJvb3RDb250ZW50cykpIHsKKyAgICAgICAgZm9yIChhdXRvKiBt
YXJrZXIgOiBkb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0Zvcihub2RlLCBEb2N1bWVudE1h
cmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpIHsKICAgICAgICAgICAgIGF1
dG8mIGFsdGVybmF0aXZlcyA9IFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEo
KSk7CiAKLSAgICAgICAgICAgIC8vIEZpcnN0LCBhZGQgdGV4dCB0aGF0IHByZWNlZGUgdGhlIG1h
cmtlci4KLSAgICAgICAgICAgIGlmIChwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiAhPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpKSkgewot
ICAgICAgICAgICAgICAgIGF1dG8gcHJlY2VkaW5nVGV4dFJhbmdlID0gUmFuZ2U6OmNyZWF0ZSgq
ZG9jdW1lbnQoKSwgcHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIGNyZWF0ZUxlZ2FjeUVkaXRp
bmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCkpKTsKLSAgICAgICAgICAgICAg
ICBTdHJpbmcgcHJlY2VkaW5nVGV4dCA9IHBsYWluVGV4dChwcmVjZWRpbmdUZXh0UmFuZ2UpOwor
ICAgICAgICAgICAgYXV0byByYW5nZUZvck1hcmtlciA9IHJhbmdlKG5vZGUsICptYXJrZXIpOwor
CisgICAgICAgICAgICBpZiAoYXV0byBwcmVjZWRpbmdUZXh0UmFuZ2UgPSBtYWtlU2ltcGxlUmFu
Z2UocHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24sIHJhbmdlRm9yTWFya2VyLnN0YXJ0KSkgewor
ICAgICAgICAgICAgICAgIFN0cmluZyBwcmVjZWRpbmdUZXh0ID0gcGxhaW5UZXh0KCpwcmVjZWRp
bmdUZXh0UmFuZ2UpOwogICAgICAgICAgICAgICAgIGlmICghcHJlY2VkaW5nVGV4dC5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgICAgICAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbiA6IGlu
dGVycHJldGF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRh
dGlvbiwgcHJlY2VkaW5nVGV4dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBhdXRvIHJhbmdlRm9yTWFya2VyID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1l
bnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3RhcnRPZmZz
ZXQoKSksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPmVuZE9mZnNl
dCgpKSk7CiAgICAgICAgICAgICBTdHJpbmcgdmlzaWJsZVRleHRGb3JNYXJrZXIgPSBwbGFpblRl
eHQocmFuZ2VGb3JNYXJrZXIpOwogICAgICAgICAgICAgc2l6ZV90IGludGVycHJldGF0aW9uc0Nv
dW50Rm9yQ3VycmVudE1hcmtlciA9IGFsdGVybmF0aXZlcy5zaXplKCkgKyAxOwogICAgICAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBpbnRlcnByZXRhdGlvbnNDb3VudDsgKytpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gRGV0ZXJtaW5lIHRleHQgZm9yIHRoZSBpdGggaW50ZXJwcmV0YXRp
b24uIEl0IHdpbGwgZWl0aGVyIGJlIHRoZSB2aXNpYmxlIHRleHQsIG9yIG9uZSBvZiBpdHMKLSAg
ICAgICAgICAgICAgICAvLyBhbHRlcm5hdGl2ZXMgc3RvcmVkIGluIHRoZSBtYXJrZXIuCi0KICAg
ICAgICAgICAgICAgICBzaXplX3QgaW5kZXhPZkludGVycHJldGF0aW9uRm9yQ3VycmVudE1hcmtl
ciA9IChpIC8gY29tYmluYXRpb25zU29GYXIpICUgaW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJy
ZW50TWFya2VyOwogICAgICAgICAgICAgICAgIGlmICghaW5kZXhPZkludGVycHJldGF0aW9uRm9y
Q3VycmVudE1hcmtlcikKICAgICAgICAgICAgICAgICAgICAgYXBwZW5kKGludGVycHJldGF0aW9u
c1tpXSwgdmlzaWJsZVRleHRGb3JNYXJrZXIpOwpAQCAtNzc3LDE2ICs3NzAsMTcgQEAgTlNBcnJh
eSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290KCkgY29uc3QKIAogICAgICAg
ICAgICAgY29tYmluYXRpb25zU29GYXIgKj0gaW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50
TWFya2VyOwogCi0gICAgICAgICAgICBwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiA9IGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKTsKKyAgICAg
ICAgICAgIHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bv
c2l0aW9uKHJhbmdlRm9yTWFya2VyLmVuZCk7CiAgICAgICAgIH0KICAgICB9CiAKICAgICAvLyBG
aW5hbGx5LCBhZGQgYW55IHRleHQgYWZ0ZXIgdGhlIGxhc3QgbWFya2VyLgotICAgIGF1dG8gYWZ0
ZXJMYXN0TWFya2VyUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBwcmVjZWRpbmdU
ZXh0U3RhcnRQb3NpdGlvbiwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIHJvb3RD
aGlsZENvdW50KSk7Ci0gICAgU3RyaW5nIHRleHRBZnRlckxhc3RNYXJrZXIgPSBwbGFpblRleHQo
YWZ0ZXJMYXN0TWFya2VyUmFuZ2UpOwotICAgIGlmICghdGV4dEFmdGVyTGFzdE1hcmtlci5pc0Vt
cHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbiA6IGludGVycHJldGF0
aW9ucykKLSAgICAgICAgICAgIGFwcGVuZChpbnRlcnByZXRhdGlvbiwgdGV4dEFmdGVyTGFzdE1h
cmtlcik7CisgICAgaWYgKGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UocHJlY2VkaW5nVGV4
dFN0YXJ0UG9zaXRpb24sIHJhbmdlT2ZSb290Q29udGVudHMuZW5kKSkgeworICAgICAgICBTdHJp
bmcgdGV4dEFmdGVyTGFzdE1hcmtlciA9IHBsYWluVGV4dCgqcmFuZ2UpOworICAgICAgICBpZiAo
IXRleHRBZnRlckxhc3RNYXJrZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8m
IGludGVycHJldGF0aW9uIDogaW50ZXJwcmV0YXRpb25zKQorICAgICAgICAgICAgICAgIGFwcGVu
ZChpbnRlcnByZXRhdGlvbiwgdGV4dEFmdGVyTGFzdE1hcmtlcik7CisgICAgICAgIH0KICAgICB9
CiAKICAgICByZXR1cm4gY3JlYXRlTlNBcnJheShpbnRlcnByZXRhdGlvbnMsIFtdIChhdXRvJiBp
bnRlcnByZXRhdGlvbikgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDY5
YTE0Y2M3Y2U1MjY0MTBkYjk5ODMzODBhYmVjNWUyMDk2NjEwMzIuLmQ0N2YyNjE3ZWJkMGViOTdi
ZjMxM2VkNjZjM2Q4ZGUyNDI0ZTQwMDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTE3NzUsNyArMTc3NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZlB0cjxSYW5nZT4+IEludGVy
bmFsczo6bWFya2VyUmFuZ2VGb3JOb2RlKE5vZGUmIG5vZGUsIGNvbnN0IFN0cmluCiAgICAgYXV0
byBtYXJrZXIgPSByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCk7CiAgICAgaWYgKCFtYXJrZXIp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgIHJldHVybiBSZWZQdHI8UmFuZ2U+IHsgUmFu
Z2U6OmNyZWF0ZShub2RlLmRvY3VtZW50KCksICZub2RlLCBtYXJrZXItPnN0YXJ0T2Zmc2V0KCks
ICZub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKSB9OworICAgIHJldHVybiB7IGNyZWF0ZUxpdmVS
YW5nZShyYW5nZShub2RlLCAqbWFya2VyKSkgfTsKIH0KIAogRXhjZXB0aW9uT3I8U3RyaW5nPiBJ
bnRlcm5hbHM6Om1hcmtlckRlc2NyaXB0aW9uRm9yTm9kZShOb2RlJiBub2RlLCBjb25zdCBTdHJp
bmcmIG1hcmtlclR5cGUsIHVuc2lnbmVkIGluZGV4KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3Bw
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0FQSS9jL1dLQnVuZGxl
UGFnZU92ZXJsYXkuY3BwCmluZGV4IDY5ZjdhZjIyYjU2NzUwNGQ0ZjMxZjBkN2E3MGI4NzRlMDlm
YTU1YTIuLjM1YjY2NDcyZTc3MDU3Y2NlZmU5M2RmOGZkYTk1M2QwZDQxOTZhYzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRs
ZVBhZ2VPdmVybGF5LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKQEAgLTEyOCwxOSArMTI4LDE3IEBA
IHByaXZhdGU6CiAgICAgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIEREQWN0aW9uQ29udGV4
dCAqYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYg
cGFnZU92ZXJsYXksIFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIFJlZlB0cjxXZWJDb3Jl
OjpSYW5nZT4mIHJhbmdlSGFuZGxlKSBvdmVycmlkZQorICAgIE9wdGlvbmFsPFdlYktpdDo6V2Vi
UGFnZU92ZXJsYXk6OkFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50
KFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VPdmVybGF5LCBXZWJDb3JlOjpGbG9hdFBvaW50
IGxvY2F0aW9uKSBmaW5hbAogICAgIHsKLSAgICAgICAgaWYgKG1fY2xpZW50LmFjdGlvbkNvbnRl
eHRGb3JSZXN1bHRBdFBvaW50KSB7Ci0gICAgICAgICAgICBXS0J1bmRsZVJhbmdlSGFuZGxlUmVm
IGFwaVJhbmdlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIEREQWN0aW9uQ29udGV4dCAqYWN0aW9u
Q29udGV4dCA9IChEREFjdGlvbkNvbnRleHQgKiltX2NsaWVudC5hY3Rpb25Db250ZXh0Rm9yUmVz
dWx0QXRQb2ludCh0b0FQSSgmcGFnZU92ZXJsYXkpLCBXS1BvaW50TWFrZShsb2NhdGlvbi54KCks
IGxvY2F0aW9uLnkoKSksICZhcGlSYW5nZSwgbV9jbGllbnQuYmFzZS5jbGllbnRJbmZvKTsKKyAg
ICAgICAgaWYgKCFtX2NsaWVudC5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCkKKyAgICAg
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAKLSAgICAgICAgICAgIGlmIChhcGlSYW5nZSkK
LSAgICAgICAgICAgICAgICByYW5nZUhhbmRsZSA9ICZXZWJLaXQ6OnRvSW1wbChhcGlSYW5nZSkt
PmNvcmVSYW5nZSgpOworICAgICAgICBXS0J1bmRsZVJhbmdlSGFuZGxlUmVmIGFwaVJhbmdlID0g
bnVsbHB0cjsKKyAgICAgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gKEREQWN0aW9uQ29udGV4dCAq
KW1fY2xpZW50LmFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KHRvQVBJKCZwYWdlT3Zlcmxh
eSksIFdLUG9pbnRNYWtlKGxvY2F0aW9uLngoKSwgbG9jYXRpb24ueSgpKSwgJmFwaVJhbmdlLCBt
X2NsaWVudC5iYXNlLmNsaWVudEluZm8pOworICAgICAgICBpZiAoIWFjdGlvbkNvbnRleHQgfHwg
IWFwaVJhbmdlKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICAg
ICAgcmV0dXJuIGFjdGlvbkNvbnRleHQ7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmls
OworICAgICAgICByZXR1cm4geyB7IGFjdGlvbkNvbnRleHQsIFdlYktpdDo6dG9JbXBsKGFwaVJh
bmdlKS0+Y29yZVJhbmdlKCkgfSB9OwogICAgIH0KIAogICAgIHZvaWQgZGF0YURldGVjdG9yc0Rp
ZFByZXNlbnRVSShXZWJLaXQ6OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSkgb3ZlcnJpZGUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NUmFuZ2UubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL21hYy9XS0RPTVJhbmdlLm1tCmluZGV4IDFiNmJiNzdlY2E3ZTZlYzBmMWY2MWU4NzIx
MmM0YzQ1ZjY5NmI2NjQuLmEzOWM2NDJlZDJiZjM5MTY4OWNlMjcwMDlmNjA3NzVhMTYzZjM2MDQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkv
bWFjL1dLRE9NUmFuZ2UubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0FQSS9tYWMvV0tET01SYW5nZS5tbQpAQCAtNDksMTIgKzQ5LDcgQEAgLSAoaWQpX2lu
aXRXaXRoSW1wbDooV2ViQ29yZTo6UmFuZ2UqKWltcGwKIAogLSAoaWQpaW5pdFdpdGhEb2N1bWVu
dDooV0tET01Eb2N1bWVudCAqKWRvY3VtZW50CiB7Ci0gICAgYXV0byByYW5nZSA9IFdlYkNvcmU6
OlJhbmdlOjpjcmVhdGUoKldlYktpdDo6dG9XZWJDb3JlRG9jdW1lbnQoZG9jdW1lbnQpKTsKLSAg
ICBzZWxmID0gW3NlbGYgX2luaXRXaXRoSW1wbDpyYW5nZS5wdHIoKV07Ci0gICAgaWYgKCFzZWxm
KQotICAgICAgICByZXR1cm4gbmlsOwotCi0gICAgcmV0dXJuIHNlbGY7CisgICAgcmV0dXJuIFtz
ZWxmIF9pbml0V2l0aEltcGw6V2ViS2l0Ojp0b1dlYkNvcmVEb2N1bWVudChkb2N1bWVudCktPmNy
ZWF0ZVJhbmdlKCkucHRyKCldOwogfQogCiAtICh2b2lkKWRlYWxsb2MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVO
b2RlSGFuZGxlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9E
T00vSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlLmNwcAppbmRleCBkMzg3YWRiNjRkZDBkYTZiMjdl
NGJmMWMwNjdkNTFiZTk4NWY5YWQxLi4wMWMxNTRkNzU3YTEwMTM2M2FmZGVjOTc1NTMwMDBjMjI0
MDhkYTgyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvRE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3Bw
CkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9Qb3NpdGlvbi5oPgogI2luY2x1
ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1JlbmRlck9iamVjdC5oPgor
I2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1Zpc2li
bGVQb3NpdGlvbi5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL05l
dmVyRGVzdHJveWVkLmg+CkBAIC0yMzQsMTIgKzIzNSw5IEBAIFJlZlB0cjxJbmplY3RlZEJ1bmRs
ZVJhbmdlSGFuZGxlPiBJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnZpc2libGVSYW5nZSgpCiB7
CiAgICAgaWYgKCFtX25vZGUpCiAgICAgICAgIHJldHVybiBudWxscHRyOwotCiAgICAgVmlzaWJs
ZVBvc2l0aW9uIHN0YXJ0ID0gZmlyc3RQb3NpdGlvbkluTm9kZShtX25vZGUuZ2V0KCkpOwogICAg
IFZpc2libGVQb3NpdGlvbiBlbmQgPSBsYXN0UG9zaXRpb25Jbk5vZGUobV9ub2RlLmdldCgpKTsK
LQotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBtYWtlUmFuZ2Uoc3RhcnQsIGVuZCk7Ci0gICAg
cmV0dXJuIEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU6OmdldE9yQ3JlYXRlKHJhbmdlLmdldCgp
KTsKKyAgICByZXR1cm4gY3JlYXRlSGFuZGxlKG1ha2VTaW1wbGVSYW5nZShzdGFydCwgZW5kKSk7
CiB9CiAKIHZvaWQgSW5qZWN0ZWRCdW5kbGVOb2RlSGFuZGxlOjpzZXRIVE1MSW5wdXRFbGVtZW50
VmFsdWVGb3JVc2VyKGNvbnN0IFN0cmluZyYgdmFsdWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHku
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0Nv
bnRyb2xsZXJQcm94eS5oCmluZGV4IDRmZjRlMWE0ODU2NzlkYmJiODgxOGIyOWI1ZWFjMTJmOGMy
ZWYxMmEuLmNiMjM4OWZjMGRiMGZiMTgwMGY2MWFkOWY0MGY4MWEyNDkzMWU1YjMgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0Nv
bnRyb2xsZXJQcm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
Y29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oCkBAIC0zMCw2ICszMCw3IEBACiAjaW5j
bHVkZSAiQ29ubmVjdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdSYW5nZS5oIgogI2luY2x1ZGUg
Ik1lc3NhZ2VSZWNlaXZlci5oIgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4KICNp
bmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNTksNyArNjAsNyBA
QCBwcml2YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwg
SVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICBzdHJ1Y3QgUmFuZ2VBbmRPZmZzZXQgewot
ICAgICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlOworICAgICAgICBXZWJDb3JlOjpT
aW1wbGVSYW5nZSByYW5nZTsKICAgICAgICAgc2l6ZV90IGxvY2F0aW9uSW5Sb290OyAgICAKICAg
ICB9OwogICAgIE9wdGlvbmFsPFJhbmdlQW5kT2Zmc2V0PiByYW5nZUFuZE9mZnNldFJlbGF0aXZl
VG9TZWxlY3Rpb24oaW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdDb250
cm9sbGVyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9U
ZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KaW5kZXggM2QyOWIwN2E1NGY1NWI0ZTk2ZGJm
NjA0N2M3MWVmNmYzYjkzZTk4NS4uMDNiMjRjN2Q1ODI4MzcyMmI0Y2E1OTJmOWY5ODE3NzllZTdi
Zjg3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2Ev
VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQpAQCAtOTIs
NyArOTIsNyBAQCBPcHRpb25hbDxUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OlJhbmdlQW5k
T2Zmc2V0PiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveAogICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwogICAgIGF1dG8gYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSA9IENoYXJh
Y3RlclJhbmdlIHsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFkanVzdGVkU3RhcnRMb2NhdGlvbiks
IGxlbmd0aCB9OwogCi0gICAgcmV0dXJuIHsgeyBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJh
Y3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlKSksIGFkanVz
dGVkU2VsZWN0aW9uQ2hhcmFjdGVyUmFuZ2UubG9jYXRpb24gfSB9OworICAgIHJldHVybiB7IHsg
cmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJh
bmdlKSwgYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZS5sb2NhdGlvbiB9IH07CiB9CiAK
IHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVj
dGlvbihjb25zdCBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nJiBhbm5vdGF0ZWRTdHJpbmcsIGlu
dDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IHJlbGF0aXZl
UmVwbGFjZW1lbnRMb2NhdGlvbiwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVudExlbmd0aCkK
QEAgLTEwNiwzMCArMTA2LDIxIEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Ojpy
ZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpBdHRyCiAgICAgYXV0byBy
YW5nZUFuZE9mZnNldCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihzZWxlY3Rp
b25PZmZzZXQsIGxlbmd0aCk7CiAgICAgaWYgKCFyYW5nZUFuZE9mZnNldCkKICAgICAgICAgcmV0
dXJuOwotICAgIGF1dG8gcmFuZ2UgPSByYW5nZUFuZE9mZnNldC0+cmFuZ2U7Ci0gICAgaWYgKCFy
YW5nZSkKLSAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbG9jYXRpb25JblJvb3QgPSByYW5nZUFu
ZE9mZnNldC0+bG9jYXRpb25JblJvb3Q7CiAKICAgICBhdXRvJiBtYXJrZXJzID0gZnJhbWUuZG9j
dW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygqcmFuZ2UsIHJl
bGV2YW50TWFya2VyVHlwZXMoKSk7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdlQW5k
T2Zmc2V0LT5yYW5nZSwgcmVsZXZhbnRNYXJrZXJUeXBlcygpKTsKIAogICAgIGlmIChyZWxhdGl2
ZVJlcGxhY2VtZW50TG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICBhdXRvIHJhbmdl
QW5kT2Zmc2V0T2ZSZXBsYWNlbWVudCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlv
bihzZWxlY3Rpb25PZmZzZXQgKyByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHJlbGF0aXZl
UmVwbGFjZW1lbnRMZW5ndGgpOwotICAgICAgICBpZiAocmFuZ2VBbmRPZmZzZXRPZlJlcGxhY2Vt
ZW50KSB7Ci0gICAgICAgICAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSByYW5nZUFuZE9mZnNl
dE9mUmVwbGFjZW1lbnQtPnJhbmdlOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFuZ2Up
IHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3RvcmVTZWxlY3Rpb24gPSBmcmFtZVNlbGVjdGlv
bi5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7Ci0KLSAgICAgICAgICAgICAgICBmcmFtZS5lZGl0b3Io
KS5yZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKCpyZXBsYWNlbWVudFJhbmdlLCBbW2Fubm90
YXRlZFN0cmluZy5zdHJpbmcgc3RyaW5nXSBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFuZ2Uo
cmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9uLCByZWxhdGl2ZVJlcGxhY2VtZW50TGVuZ3RoICsg
W2Fubm90YXRlZFN0cmluZy5zdHJpbmcgbGVuZ3RoXSAtIGxlbmd0aCldKTsKLQotICAgICAgICAg
ICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVpbnQ2
NF90IHNlbGVjdGlvbkxvY2F0aW9uVG9SZXN0b3JlID0gbG9jYXRpb25JblJvb3QgLSBzZWxlY3Rp
b25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Mb2NhdGlvblRvUmVz
dG9yZSA+IGxvY2F0aW9uSW5Sb290ICsgcmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9uICsgcmVs
YXRpdmVSZXBsYWNlbWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0byBz
ZWxlY3Rpb25Ub1Jlc3RvcmUgPSBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJhbmdl
KG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIHsgc2VsZWN0aW9uTG9jYXRp
b25Ub1Jlc3RvcmUsIDAgfSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVTZWxlY3Rp
b24ubW92ZVRvKHNlbGVjdGlvblRvUmVzdG9yZS5wdHIoKSk7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJhbmdlQW5kT2Zmc2V0T2ZS
ZXBsYWNlbWVudCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihzZWxlY3Rpb25P
ZmZzZXQgKyByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHJlbGF0aXZlUmVwbGFjZW1lbnRM
ZW5ndGgpKSB7CisgICAgICAgICAgICBib29sIHJlc3RvcmVTZWxlY3Rpb24gPSBmcmFtZVNlbGVj
dGlvbi5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7CisKKyAgICAgICAgICAgIGZyYW1lLmVkaXRvcigp
LnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcocmFuZ2VBbmRPZmZzZXRPZlJlcGxhY2VtZW50
LT5yYW5nZSwgW1thbm5vdGF0ZWRTdHJpbmcuc3RyaW5nIHN0cmluZ10gc3Vic3RyaW5nV2l0aFJh
bmdlOk5TTWFrZVJhbmdlKHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgcmVsYXRpdmVSZXBs
YWNlbWVudExlbmd0aCArIFthbm5vdGF0ZWRTdHJpbmcuc3RyaW5nIGxlbmd0aF0gLSBsZW5ndGgp
XSk7CisKKyAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7CisgICAgICAgICAgICAg
ICAgdWludDY0X3Qgc2VsZWN0aW9uTG9jYXRpb25Ub1Jlc3RvcmUgPSBsb2NhdGlvbkluUm9vdCAt
IHNlbGVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uTG9jYXRpb25U
b1Jlc3RvcmUgPiBsb2NhdGlvbkluUm9vdCArIHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiAr
IHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGZyYW1lU2Vs
ZWN0aW9uLnNldFNlbGVjdGlvbihyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKCpyb290KSwgeyBzZWxlY3Rpb25Mb2NhdGlvblRvUmVzdG9yZSwgMCB9
KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjIsMTMgKzE1MywxMCBA
QCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJlbGF0
aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaQogICAgIGF1dG8gcmFuZ2VBbmRPZmZzZXQgPSByYW5n
ZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oc2VsZWN0aW9uT2Zmc2V0LCBsZW5ndGgpOwog
ICAgIGlmICghcmFuZ2VBbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIHJhbmdl
ID0gcmFuZ2VBbmRPZmZzZXQtPnJhbmdlOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJldHVy
bjsKIAogICAgIGF1dG8gcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IGFubm90YXRpb24gPT0g
Ik5TU3BlbGxpbmdTdGF0ZSI7CiAgICAgYXV0byB0eXBlcyA9IHJlbW92ZUNvcmVTcGVsbGluZ01h
cmtlcnMgPyByZWxldmFudE1hcmtlclR5cGVzKCkgOiBXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6
UGxhdGZvcm1UZXh0Q2hlY2tpbmc7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJN
YXJrZXJzKCpyYW5nZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CisgICAg
bV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
LmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKHJhbmdlQW5kT2Zmc2V0LT5yYW5n
ZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CiAgICAgICAgIGlmICghV1RG
Ojpob2xkc19hbHRlcm5hdGl2ZTxXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1UZXh0
Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpQbGF0Zm9y
bVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci5kYXRhKCkpLmtleSAhPSBhbm5vdGF0aW9uOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAyZGM1MDVj
ZmRiMTNiMDAzMmZkYTU0OWUwYzlkNWQ2NzI3MmI0MWViLi4yNzQyZjEzZWNmMzZkNjBjY2ZkNjdh
M2ZkMjE1NDc1YjAwNjRmODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcApAQCAtNTQ1Miw3ICs1NDUyLDcgQEAgdm9pZCBXZWJQYWdlOjpjaGFyYWN0
ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBDYWxs
YmEKICAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVyKCku
aGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOwogICAgIGF1dG8mIGZyYW1lID0g
cmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVGcmFtZSgpIDog
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBhdXRv
IHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5lck5v
ZGVGcmFtZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJh
bmdlKGZyYW1lLCBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKKyAgICBhdXRvIGVkaXRpbmdSYW5n
ZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZSk7CiAgICAgc2VuZChNZXNz
YWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKGVkaXRpbmdSYW5nZS5sb2NhdGlv
biwgY2FsbGJhY2tJRCkpOwogfQogCkBAIC01NTMzLDExICs1NTMzLDExIEBAIHZvaWQgV2ViUGFn
ZTo6ZGVsZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3RlckNv
dW50KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VSYW5n
ZShzdGFydE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQp
OworICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9mRWRp
dGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOwogICAgIGlmICgh
c3Vycm91bmRpbmdSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcm9vdE5vZGUg
PSBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3ROb2Rl
KCk7CisgICAgYXV0byYgcm9vdE5vZGUgPSBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydC5jb250YWlu
ZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAgICAgYXV0byBjaGFyYWN0ZXJSYW5nZSA9IFdl
YkNvcmU6OkNoYXJhY3RlclJhbmdlKFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KCpzdXJyb3VuZGlu
Z1JhbmdlKSArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIGF1dG8gc2VsZWN0aW9uUmFu
Z2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRz
KHJvb3ROb2RlKSwgY2hhcmFjdGVyUmFuZ2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKaW5kZXggZDFlMDk5YmJlZmVjYjFj
MTI3MzYzNDY3YWQ1YjE3Zjk5N2EyOGU5Mi4uMWJiZmU1YjliODM2NjM3MWNjMDQzZWIyNmY0NzBi
Yzc0NThiYzFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VPdmVybGF5LmNwcApAQCAtMTA5LDkgKzEwOSw5IEBAIHZvaWQgV2ViUGFnZU92ZXJs
YXk6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5JiwgRnJhbWUmIGZyYW1lKQogfQogCiAjaWYg
UExBVEZPUk0oTUFDKQotRERBY3Rpb25Db250ZXh0ICpXZWJQYWdlT3ZlcmxheTo6YWN0aW9uQ29u
dGV4dEZvclJlc3VsdEF0UG9pbnQoRmxvYXRQb2ludCBsb2NhdGlvbiwgUmVmUHRyPFdlYkNvcmU6
OlJhbmdlPiYgcmFuZ2VIYW5kbGUpCithdXRvIFdlYlBhZ2VPdmVybGF5OjphY3Rpb25Db250ZXh0
Rm9yUmVzdWx0QXRQb2ludChGbG9hdFBvaW50IGxvY2F0aW9uKSAtPiBPcHRpb25hbDxBY3Rpb25D
b250ZXh0PgogewotICAgIHJldHVybiBtX2NsaWVudC0+YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0
UG9pbnQoKnRoaXMsIGxvY2F0aW9uLCByYW5nZUhhbmRsZSk7CisgICAgcmV0dXJuIG1fY2xpZW50
LT5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCgqdGhpcywgbG9jYXRpb24pOwogfQogCiB2
b2lkIFdlYlBhZ2VPdmVybGF5OjpkYXRhRGV0ZWN0b3JzRGlkUHJlc2VudFVJKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmggYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oCmluZGV4IGYw
N2IwZjgxOGY5M2NhN2U0Y2Y3MTk1OGUyZjNhY2Q3Zjc0ZTdkMGYuLjcxYmM5MzdkOGRmNjQzMjVm
MjFhMDFjNmEzM2U5Njk4MjA5YjQzOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaApAQCAtNDIsNiArNDIsOCBAQCBjbGFzcyBXZWJQ
YWdlOwogCiBjbGFzcyBXZWJQYWdlT3ZlcmxheSA6IHB1YmxpYyBBUEk6Ok9iamVjdEltcGw8QVBJ
OjpPYmplY3Q6OlR5cGU6OkJ1bmRsZVBhZ2VPdmVybGF5PiwgcHJpdmF0ZSBXZWJDb3JlOjpQYWdl
T3ZlcmxheTo6Q2xpZW50IHsKIHB1YmxpYzoKKyAgICBzdHJ1Y3QgQWN0aW9uQ29udGV4dDsKKwog
ICAgIGNsYXNzIENsaWVudCB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5DbGllbnQo
KSB7IH0KQEAgLTUzLDcgKzU1LDcgQEAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIHZvaWQgZGlk
U2Nyb2xsRnJhbWUoV2ViUGFnZU92ZXJsYXkmLCBXZWJGcmFtZSopIHsgfQogCiAjaWYgUExBVEZP
Uk0oTUFDKQotICAgICAgICB2aXJ0dWFsIEREQWN0aW9uQ29udGV4dCAqYWN0aW9uQ29udGV4dEZv
clJlc3VsdEF0UG9pbnQoV2ViUGFnZU92ZXJsYXkmLCBXZWJDb3JlOjpGbG9hdFBvaW50IGxvY2F0
aW9uLCBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+JiByYW5nZUhhbmRsZSkgeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgICAgICB2aXJ0dWFsIE9wdGlvbmFsPEFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRl
eHRGb3JSZXN1bHRBdFBvaW50KFdlYlBhZ2VPdmVybGF5JiwgV2ViQ29yZTo6RmxvYXRQb2ludCkg
eyByZXR1cm4gV1RGOjpudWxsb3B0OyB9CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkYXRhRGV0ZWN0
b3JzRGlkUHJlc2VudFVJKFdlYlBhZ2VPdmVybGF5JikgeyB9CiAgICAgICAgIHZpcnR1YWwgdm9p
ZCBkYXRhRGV0ZWN0b3JzRGlkQ2hhbmdlVUkoV2ViUGFnZU92ZXJsYXkmKSB7IH0KICAgICAgICAg
dmlydHVhbCB2b2lkIGRhdGFEZXRlY3RvcnNEaWRIaWRlVUkoV2ViUGFnZU92ZXJsYXkmKSB7IH0K
QEAgLTc3LDcgKzc5LDExIEBAIHB1YmxpYzoKICAgICBDbGllbnQmIGNsaWVudCgpIGNvbnN0IHsg
cmV0dXJuICptX2NsaWVudDsgfQogCiAjaWYgUExBVEZPUk0oTUFDKQotICAgIEREQWN0aW9uQ29u
dGV4dCAqYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViQ29yZTo6RmxvYXRQb2ludCwg
UmVmUHRyPFdlYkNvcmU6OlJhbmdlPiYpOworICAgIHN0cnVjdCBBY3Rpb25Db250ZXh0IHsKKyAg
ICAgICAgUmV0YWluUHRyPEREQWN0aW9uQ29udGV4dD4gY29udGV4dDsKKyAgICAgICAgV2ViQ29y
ZTo6U2ltcGxlUmFuZ2UgcmFuZ2U7CisgICAgfTsKKyAgICBPcHRpb25hbDxBY3Rpb25Db250ZXh0
PiBhY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChXZWJDb3JlOjpGbG9hdFBvaW50KTsKICAg
ICB2b2lkIGRhdGFEZXRlY3RvcnNEaWRQcmVzZW50VUkoKTsKICAgICB2b2lkIGRhdGFEZXRlY3Rv
cnNEaWRDaGFuZ2VVSSgpOwogICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZEhpZGVVSSgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvZ2xpYi9XZWJQYWdlR0xp
Yi5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGli
LmNwcAppbmRleCA4MTk4MjM1MGVlOTkzMDhjODFiNTUyYWI1NTg4YTRkOGM4Zjc5Y2MwLi5mOTY0
MTFhMTE2MDc2ODViMGZiZjQ5ZjEwOWRkYzU4MThjMTUyYjI3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcApAQCAtMTA3
LDI2ICsxMDcsMTkgQEAgdm9pZCBXZWJQYWdlOjpnZXRQbGF0Zm9ybUVkaXRvclN0YXRlKEZyYW1l
JiBmcmFtZSwgRWRpdG9yU3RhdGUmIHJlc3VsdCkgY29uc3QKICAgICBpZiAoc2VsZWN0aW9uLmlz
Q29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAgYXV0byBzZWxlY3Rpb25TdGFydCA9IHNlbGVj
dGlvbi52aXNpYmxlU3RhcnQoKTsKICAgICAgICAgYXV0byBzdXJyb3VuZGluZ1N0YXJ0ID0gc3Rh
cnRPZkVkaXRhYmxlQ29udGVudChzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAgIGF1dG8gc3Vycm91
bmRpbmdFbmQgPSBlbmRPZkVkaXRhYmxlQ29udGVudChzZWxlY3Rpb25TdGFydCk7Ci0gICAgICAg
IGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzdXJy
b3VuZGluZ0VuZCk7CisgICAgICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBlbmRPZkVkaXRhYmxlQ29udGVudChzZWxlY3Rpb25TdGFy
dCkpOwogICAgICAgICBhdXRvIGNvbXBvc2l0aW9uUmFuZ2UgPSBmcmFtZS5lZGl0b3IoKS5jb21w
b3NpdGlvblJhbmdlKCk7Ci0gICAgICAgIGlmIChjb21wb3NpdGlvblJhbmdlICYmIHN1cnJvdW5k
aW5nUmFuZ2UgJiYgc3Vycm91bmRpbmdSYW5nZS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpj
b21wb3NpdGlvblJhbmdlKS5nZXQoKSkpIHsKLSAgICAgICAgICAgIGF1dG8gY2xvbmVkUmFuZ2Ug
PSBzdXJyb3VuZGluZ1JhbmdlLT5jbG9uZVJhbmdlKCk7Ci0gICAgICAgICAgICBzdXJyb3VuZGlu
Z1JhbmdlLT5zZXRFbmQoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFu
Z2UtPnN0YXJ0KSk7Ci0gICAgICAgICAgICBjbG9uZWRSYW5nZS0+c2V0U3RhcnQoY3JlYXRlTGVn
YWN5RWRpdGluZ1Bvc2l0aW9uKGNvbXBvc2l0aW9uUmFuZ2UtPmVuZCkpOwotICAgICAgICAgICAg
cG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250ZXh0ID0gcGxhaW5UZXh0KCpzdXJyb3VuZGlu
Z1JhbmdlKSArIHBsYWluVGV4dChjbG9uZWRSYW5nZSk7Ci0gICAgICAgICAgICBwb3N0TGF5b3V0
RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9IGNoYXJhY3RlckNvdW50KCpz
dXJyb3VuZGluZ1JhbmdlKTsKKyAgICAgICAgaWYgKHN1cnJvdW5kaW5nUmFuZ2UgJiYgY29tcG9z
aXRpb25SYW5nZSAmJiBjcmVhdGVMaXZlUmFuZ2Uoc3Vycm91bmRpbmdSYW5nZSktPmNvbnRhaW5z
KGNyZWF0ZUxpdmVSYW5nZSgqY29tcG9zaXRpb25SYW5nZSkuZ2V0KCkpKSB7CisgICAgICAgICAg
ICBhdXRvIGJlZm9yZVRleHQgPSBwbGFpblRleHQoeyBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydCwg
Y29tcG9zaXRpb25SYW5nZS0+c3RhcnQgfSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5z
dXJyb3VuZGluZ0NvbnRleHQgPSBiZWZvcmVUZXh0ICsgcGxhaW5UZXh0KHsgY29tcG9zaXRpb25S
YW5nZS0+ZW5kLCBzdXJyb3VuZGluZ1JhbmdlLT5lbmQgfSk7CisgICAgICAgICAgICBwb3N0TGF5
b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9IGJlZm9yZVRleHQubGVu
Z3RoKCk7CiAgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxl
Y3Rpb25Qb3NpdGlvbiA9IHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBv
c2l0aW9uOwogICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXV0byBjdXJzb3JQb3NpdGlv
blJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN1cnJvdW5kaW5nU3RhcnQsIHNlbGVjdGlvblN0YXJ0
KTsKKyAgICAgICAgICAgIGF1dG8gc2VsZWN0aW9uUG9zaXRpb25SYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKICAgICAgICAg
ICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dCA9IHN1cnJvdW5kaW5nUmFuZ2Ug
PyBwbGFpblRleHQoKnN1cnJvdW5kaW5nUmFuZ2UpIDogZW1wdHlTdHJpbmcoKTsKLSAgICAgICAg
ICAgIGlmIChzdXJyb3VuZGluZ1N0YXJ0LmlzTnVsbCgpIHx8IHNlbGVjdGlvblN0YXJ0LmlzTnVs
bCgpKQotICAgICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1
cnNvclBvc2l0aW9uID0gMDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwb3N0
TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9IGNoYXJhY3RlckNv
dW50KCptYWtlUmFuZ2Uoc3Vycm91bmRpbmdTdGFydCwgc2VsZWN0aW9uU3RhcnQpKTsKLSAgICAg
ICAgICAgIGlmIChzdXJyb3VuZGluZ1N0YXJ0LmlzTnVsbCgpIHx8IHNlbGVjdGlvbi52aXNpYmxl
RW5kKCkuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRp
bmdDb250ZXh0U2VsZWN0aW9uUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBvc2l0
aW9uID0gY2hhcmFjdGVyQ291bnQoKm1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBzZWxlY3Rp
b24udmlzaWJsZUVuZCgpKSk7CisgICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGlu
Z0NvbnRleHRDdXJzb3JQb3NpdGlvbiA9IGN1cnNvclBvc2l0aW9uUmFuZ2UgPyBjaGFyYWN0ZXJD
b3VudCgqY3Vyc29yUG9zaXRpb25SYW5nZSkgOiAwOworICAgICAgICAgICAgcG9zdExheW91dERh
dGEuc3Vycm91bmRpbmdDb250ZXh0U2VsZWN0aW9uUG9zaXRpb24gPSBzZWxlY3Rpb25Qb3NpdGlv
blJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnNlbGVjdGlvblBvc2l0aW9uUmFuZ2UpOiAwOwogICAg
ICAgICB9CiAgICAgfQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQppbmRleCBlNTNlNzdhNzBiYTUwZDJjNWNmZjJmNzAzMGVlNDVj
NGUwZDkzYTUwLi5jOTA5M2Q0MzM3NWI4ZDllMzIxMmEzZWIyZjYzNmZhNWFiMTZlZmZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5t
bQpAQCAtMjE5LDcgKzIxOSwxMCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlRWRpdGFibGVSb290SGFz
Q29udGVudEFuZFBsYWluVGV4dChjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZQogCiAgICAgYXV0
byBzdGFydEluRWRpdGFibGVSb290ID0gZmlyc3RQb3NpdGlvbkluTm9kZShyb290KTsKICAgICBk
YXRhLmhhc0NvbnRlbnQgPSByb290LT5oYXNDaGlsZE5vZGVzKCkgJiYgIWlzRW5kT2ZFZGl0YWJs
ZU9yTm9uRWRpdGFibGVDb250ZW50KHN0YXJ0SW5FZGl0YWJsZVJvb3QpOwotICAgIGRhdGEuaGFz
UGxhaW5UZXh0ID0gZGF0YS5oYXNDb250ZW50ICYmIGhhc0FueVBsYWluVGV4dChSYW5nZTo6Y3Jl
YXRlKHJvb3QtPmRvY3VtZW50KCksIFZpc2libGVQb3NpdGlvbiB7IHN0YXJ0SW5FZGl0YWJsZVJv
b3QgfSwgVmlzaWJsZVBvc2l0aW9uIHsgbGFzdFBvc2l0aW9uSW5Ob2RlKHJvb3QpIH0pKTsKKyAg
ICBpZiAoZGF0YS5oYXNDb250ZW50KSB7CisgICAgICAgIGlmIChhdXRvIHJhbmdlID0gbWFrZVNp
bXBsZVJhbmdlKFZpc2libGVQb3NpdGlvbiB7IHN0YXJ0SW5FZGl0YWJsZVJvb3QgfSwgVmlzaWJs
ZVBvc2l0aW9uIHsgbGFzdFBvc2l0aW9uSW5Ob2RlKHJvb3QpIH0pKQorICAgICAgICAgICAgZGF0
YS5oYXNQbGFpblRleHQgPSBoYXNBbnlQbGFpblRleHQoKnJhbmdlKTsKKyAgICB9CiB9CiAKIGJv
b2wgV2ViUGFnZTo6aXNUcmFuc3BhcmVudE9yRnVsbHlDbGlwcGVkKGNvbnN0IEVsZW1lbnQmIGVs
ZW1lbnQpIGNvbnN0CkBAIC0xOTU1LDE3ICsxOTU4LDEwIEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVz
dEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBsZXRpb25IYW5kbGVyPHZvaWQoY29uc3Qg
VmVjCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zm
c2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgaW50MzJfdCBvZmZzZXQs
IENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZv
Y3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFZpc2libGVTZWxlY3Rp
b24gc2VsZWN0aW9uID0gbV9zdG9yZWRTZWxlY3Rpb25Gb3JBY2Nlc3NpYmlsaXR5LmlzTm9uZSgp
ID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkgOiBtX3N0b3JlZFNlbGVjdGlvbkZvckFj
Y2Vzc2liaWxpdHk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0
aW9uLnZpc2libGVTdGFydCgpOwotCi0gICAgaWYgKHNlbGVjdGlvblN0YXJ0LmlzTnVsbCgpKSB7
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxs
YmFjayh7IH0sIGNhbGxiYWNrSUQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1
dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZzZXQoc2VsZWN0
aW9uU3RhcnQsIG9mZnNldCk7Ci0gICAgU2VsZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbiA9IG9m
ZnNldCA8IDAgPyBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkIDogU2VsZWN0aW9uRGlyZWN0
aW9uOjpGb3J3YXJkOwogCisgICAgYXV0byBzZWxlY3Rpb24gPSBtX3N0b3JlZFNlbGVjdGlvbkZv
ckFjY2Vzc2liaWxpdHkuaXNOb25lKCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSA6
IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eTsKKyAgICBhdXRvIHBvc2l0aW9uID0g
dmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KHNlbGVjdGlvbi52aXNpYmxlU3Rh
cnQoKSwgb2Zmc2V0KTsKKyAgICBhdXRvIGRpcmVjdGlvbiA9IG9mZnNldCA8IDAgPyBTZWxlY3Rp
b25EaXJlY3Rpb246OkJhY2t3YXJkIDogU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkOwogICAg
IGF1dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9mR3JhbnVsYXJpdHkocG9zaXRpb24sIGdy
YW51bGFyaXR5LCBkaXJlY3Rpb24pOwogICAgIGlmICghcmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNl
ZCgpKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVj
dHNDYWxsYmFjayh7IH0sIGNhbGxiYWNrSUQpKTsKQEAgLTIwMDMsMzUgKzE5OTksMjQgQEAgc3Rh
dGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KGNv
bnN0IFZpc2libGVQb3NpdGlvbiYKIHZvaWQgV2ViUGFnZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9m
ZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25zdCBTdHJpbmcmIHRleHQsIENhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIHVpbnQzMl90IGxlbmd0aCA9IHRleHQu
bGVuZ3RoKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24gPSBtX3N0b3JlZFNlbGVj
dGlvbkZvckFjY2Vzc2liaWxpdHkuaXNOb25lKCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKSA6IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eTsKLSAgICBWaXNpYmxlUG9z
aXRpb24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlz
aWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVjdGlvbi52aXNpYmxlRW5kKCk7Ci0KLSAg
ICBpZiAoc2VsZWN0aW9uU3RhcnQuaXNOdWxsKCkgfHwgc2VsZWN0aW9uRW5kLmlzTnVsbCgpKSB7
Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxs
YmFjayh7IH0sIGNhbGxiYWNrSUQpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGF1
dG8gc3RhcnRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlvbkZvclBvc2l0aW9uV2l0aE9mZnNldChz
ZWxlY3Rpb25TdGFydCwgb2Zmc2V0KTsKLSAgICBhdXRvIGVuZFBvc2l0aW9uID0gdmlzaWJsZVBv
c2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KHN0YXJ0UG9zaXRpb24sIGxlbmd0aCk7Ci0gICAg
YXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIHN0YXJ0UG9zaXRp
b24sIGVuZFBvc2l0aW9uKTsKLQotICAgIGlmIChyYW5nZS0+Y29sbGFwc2VkKCkpIHsKKyAgICBh
dXRvJiBzZWxlY3Rpb24gPSBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkuaXNOb25l
KCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSA6IG1fc3RvcmVkU2VsZWN0aW9uRm9y
QWNjZXNzaWJpbGl0eTsKKyAgICBhdXRvIHN0YXJ0UG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25G
b3JQb3NpdGlvbldpdGhPZmZzZXQoc2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBvZmZzZXQpOwor
ICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRQb3NpdGlvbiwgdmlzaWJsZVBv
c2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KHN0YXJ0UG9zaXRpb24sIHRleHQubGVuZ3RoKCkp
KTsKKyAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xsYXBzZWQoKSkgewogICAgICAgICBzZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2FsbGJhY2soeyB9LCBjYWxs
YmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAocGxhaW5UZXh0Rm9y
RGlzcGxheShyYW5nZSkgIT0gdGV4dCkgeworICAgIGlmIChwbGFpblRleHRGb3JEaXNwbGF5KCpy
YW5nZSkgIT0gdGV4dCkgewogICAgICAgICAvLyBUcnkgdG8gc2VhcmNoIGZvciBhIHJhbmdlIHdo
aWNoIGlzIHRoZSBjbG9zZXN0IHRvIHRoZSBwb3NpdGlvbiB3aXRoaW4gdGhlIHNlbGVjdGlvbiBy
YW5nZSB0aGF0IG1hdGNoZXMgdGhlIHBhc3NlZCBpbiB0ZXh0LgogICAgICAgICBpZiAoYXV0byB3
b3JkUmFuZ2UgPSByYW5nZU5lYXJQb3NpdGlvbk1hdGNoZXNUZXh0KHN0YXJ0UG9zaXRpb24sIHRl
eHQsIHNlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGlmICghd29yZFJhbmdlLT5jb2xsYXBzZWQo
KSkKLSAgICAgICAgICAgICAgICByYW5nZSA9IGNyZWF0ZUxpdmVSYW5nZSgqd29yZFJhbmdlKTsK
KyAgICAgICAgICAgICAgICByYW5nZSA9ICp3b3JkUmFuZ2U7CiAgICAgICAgIH0KICAgICB9CiAK
ICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVjdD4gc2VsZWN0aW9uUmVjdHM7Ci0gICAg
cmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2Vs
ZWN0aW9uUmVjdHMpOworICAgIGNyZWF0ZUxpdmVSYW5nZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rp
b25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOwogICAgIGNv
bnZlcnRDb250ZW50VG9Sb290Vmlld1NlbGVjdGlvblJlY3RzKCpmcmFtZS52aWV3KCksIHNlbGVj
dGlvblJlY3RzKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlvblJl
Y3RzQ2FsbGJhY2soc2VsZWN0aW9uUmVjdHMsIGNhbGxiYWNrSUQpKTsKIH0KQEAgLTIyNDcsOCAr
MjIzMiw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERpY3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgbGFzdFBv
c2l0aW9uID0gY3VycmVudFBvc2l0aW9uOwogICAgICAgICB9Ci0gICAgICAgIGlmIChsYXN0UG9z
aXRpb24uaXNOb3ROdWxsKCkgJiYgbGFzdFBvc2l0aW9uICE9IHN0YXJ0UG9zaXRpb24pCi0gICAg
ICAgICAgICBjb250ZXh0QmVmb3JlID0gcGxhaW5UZXh0Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRl
KCpmcmFtZS5kb2N1bWVudCgpLCBsYXN0UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pKTsKKyAgICAg
ICAgY29udGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNvbnRleHQobWFrZVNpbXBsZVJhbmdlKGxh
c3RQb3NpdGlvbiwgc3RhcnRQb3NpdGlvbikpOwogICAgIH0KIAogICAgIFN0cmluZyBjb250ZXh0
QWZ0ZXI7CkBAIC0yMjYxLDggKzIyNDUsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REaWN0YXRp
b25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgIGxhc3RQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICAgfQot
ICAgICAgICBpZiAobGFzdFBvc2l0aW9uLmlzTm90TnVsbCgpICYmIGxhc3RQb3NpdGlvbiAhPSBl
bmRQb3NpdGlvbikKLSAgICAgICAgICAgIGNvbnRleHRBZnRlciA9IHBsYWluVGV4dEZvckNvbnRl
eHQoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQoKSwgZW5kUG9zaXRpb24sIGxhc3RQb3Np
dGlvbikpOworICAgICAgICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VT
aW1wbGVSYW5nZShlbmRQb3NpdGlvbiwgbGFzdFBvc2l0aW9uKSk7CiAgICAgfQogCiAgICAgc2Vu
ZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rpb25Db250ZXh0Q2FsbGJhY2soc2VsZWN0
ZWRUZXh0LCBjb250ZXh0QmVmb3JlLCBjb250ZXh0QWZ0ZXIsIGNhbGxiYWNrSUQpKTsKQEAgLTI0
ODAsMTQgKzI0NjMsMTQgQEAgV2ViQXV0b2NvcnJlY3Rpb25Db250ZXh0IFdlYlBhZ2U6OmF1dG9j
b3JyZWN0aW9uQ29udGV4dCgpCiAgICAgICAgICAgICAgICAgcHJldmlvdXNQb3NpdGlvbiA9IHN0
YXJ0T2ZXb3JkKHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGN1cnJlbnRQb3Np
dGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVsYXJpdHksIFNlbGVjdGlvbkRpcmVjdGlv
bjo6QmFja3dhcmQpKTsKICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNQb3NpdGlvbi5pc051
bGwoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgU3RyaW5n
IGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5k
b2N1bWVudCgpLCBwcmV2aW91c1Bvc2l0aW9uLCBjdXJyZW50UG9zaXRpb24pKTsKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1w
bGVSYW5nZShwcmV2aW91c1Bvc2l0aW9uLCBjdXJyZW50UG9zaXRpb24pKTsKICAgICAgICAgICAg
ICAgICB0b3RhbENvbnRleHRMZW5ndGggKz0gY3VycmVudFdvcmQubGVuZ3RoKCk7CiAgICAgICAg
ICAgICAgICAgaWYgKHRvdGFsQ29udGV4dExlbmd0aCA+PSBtYXhDb250ZXh0TGVuZ3RoKQogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjdXJyZW50UG9zaXRpb24g
PSBwcmV2aW91c1Bvc2l0aW9uOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKGN1cnJl
bnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBjdXJyZW50UG9zaXRpb24gIT0gc3RhcnRQb3NpdGlv
bikgewotICAgICAgICAgICAgICAgIGNvbnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0
KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCksIGN1cnJlbnRQb3NpdGlvbiwgc3RhcnRQ
b3NpdGlvbikpOworICAgICAgICAgICAgICAgIGNvbnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JD
b250ZXh0KG1ha2VTaW1wbGVSYW5nZShjdXJyZW50UG9zaXRpb24sIHN0YXJ0UG9zaXRpb24pKTsK
ICAgICAgICAgICAgICAgICBpZiAoYXRCb3VuZGFyeU9mR3JhbnVsYXJpdHkoY3VycmVudFBvc2l0
aW9uLCBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJl
Y3Rpb246OkJhY2t3YXJkKSkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dEJlZm9yZSA9IG1h
a2VTdHJpbmcoIlxuICJfcywgY29udGV4dEJlZm9yZSk7CiAgICAgICAgICAgICB9CkBAIC0yNDk3
LDggKzI0ODAsNyBAQCBXZWJBdXRvY29ycmVjdGlvbkNvbnRleHQgV2ViUGFnZTo6YXV0b2NvcnJl
Y3Rpb25Db250ZXh0KCkKICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBuZXh0UG9zaXRpb247
CiAgICAgICAgICAgICBpZiAoIWF0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGVuZFBvc2l0aW9uLCBU
ZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3
YXJkKSAmJiB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJpdHkoZW5kUG9zaXRpb24sIFRleHRHcmFu
dWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkZvcndhcmQpKQog
ICAgICAgICAgICAgICAgIG5leHRQb3NpdGlvbiA9IHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KGVuZFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAgICAgICAgICAgIGlmIChuZXh0UG9zaXRp
b24uaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICAgICAgY29udGV4dEFmdGVyID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBlbmRQb3NpdGlvbiwg
bmV4dFBvc2l0aW9uKSk7CisgICAgICAgICAgICBjb250ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JD
b250ZXh0KG1ha2VTaW1wbGVSYW5nZShlbmRQb3NpdGlvbiwgbmV4dFBvc2l0aW9uKSk7CiAgICAg
ICAgIH0KICAgICB9CiAKQEAgLTI2MDIsNyArMjU4NCw3IEBAIHN0YXRpYyB2b2lkIGxpbmtJbmRp
Y2F0b3JQb3NpdGlvbkluZm9ybWF0aW9uKFdlYlBhZ2UmIHBhZ2UsIEVsZW1lbnQmIGxpbmtFbGVt
ZW50CiAgICAgaWYgKCFyZXF1ZXN0LmluY2x1ZGVMaW5rSW5kaWNhdG9yKQogICAgICAgICByZXR1
cm47CiAKLSAgICBhdXRvIGxpbmtSYW5nZSA9IHJhbmdlT2ZDb250ZW50cyhsaW5rRWxlbWVudCk7
CisgICAgYXV0byBsaW5rUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMobGlu
a0VsZW1lbnQpOwogICAgIGZsb2F0IGRldmljZVNjYWxlRmFjdG9yID0gcGFnZS5jb3JlUGFnZSgp
LT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIGNvbnN0IGZsb2F0IG1hcmdpbkluUG9pbnRzID0g
cmVxdWVzdC5saW5rSW5kaWNhdG9yU2hvdWxkSGF2ZUxlZ2FjeU1hcmdpbnMgPyA0IDogMDsKIApA
QCAtMjYxNCwxMyArMjU5NiwxNCBAQCBzdGF0aWMgdm9pZCBsaW5rSW5kaWNhdG9yUG9zaXRpb25J
bmZvcm1hdGlvbihXZWJQYWdlJiBwYWdlLCBFbGVtZW50JiBsaW5rRWxlbWVudAogICAgICAgICBU
ZXh0SW5kaWNhdG9yT3B0aW9uOjpJbmNsdWRlTWFyZ2luSWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24s
CiAgICAgICAgIFRleHRJbmRpY2F0b3JPcHRpb246OkNvbXB1dGVFc3RpbWF0ZWRCYWNrZ3JvdW5k
Q29sb3IKICAgICB9OwotICAgIGF1dG8gdGV4dEluZGljYXRvciA9IFRleHRJbmRpY2F0b3I6OmNy
ZWF0ZVdpdGhSYW5nZShsaW5rUmFuZ2UuZ2V0KCksIHRleHRJbmRpY2F0b3JPcHRpb25zLCBUZXh0
SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6Tm9uZSwgRmxvYXRTaXplKG1hcmdpbklu
UG9pbnRzICogZGV2aWNlU2NhbGVGYWN0b3IsIG1hcmdpbkluUG9pbnRzICogZGV2aWNlU2NhbGVG
YWN0b3IpKTsKKyAgICBhdXRvIHRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVX
aXRoUmFuZ2UobGlua1JhbmdlLCB0ZXh0SW5kaWNhdG9yT3B0aW9ucywgVGV4dEluZGljYXRvclBy
ZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIEZsb2F0U2l6ZShtYXJnaW5JblBvaW50cyAqIGRl
dmljZVNjYWxlRmFjdG9yLCBtYXJnaW5JblBvaW50cyAqIGRldmljZVNjYWxlRmFjdG9yKSk7CiAK
ICAgICBpZiAodGV4dEluZGljYXRvcikKICAgICAgICAgaW5mby5saW5rSW5kaWNhdG9yID0gdGV4
dEluZGljYXRvci0+ZGF0YSgpOwogfQogICAgIAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikK
Kwogc3RhdGljIHZvaWQgZGF0YURldGVjdG9yTGlua1Bvc2l0aW9uSW5mb3JtYXRpb24oRWxlbWVu
dCYgZWxlbWVudCwgSW50ZXJhY3Rpb25JbmZvcm1hdGlvbkF0UG9zaXRpb24mIGluZm8pCiB7CiAg
ICAgaWYgKCFEYXRhRGV0ZWN0aW9uOjppc0RhdGFEZXRlY3RvckxpbmsoZWxlbWVudCkpCkBAIC0y
NjM0LDEzICsyNjE3LDEzIEBAIHN0YXRpYyB2b2lkIGRhdGFEZXRlY3RvckxpbmtQb3NpdGlvbklu
Zm9ybWF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIEludGVyYWN0aW9uSW5mCiAgICAgaWYgKCFEYXRh
RGV0ZWN0aW9uOjpyZXF1aXJlc0V4dGVuZGVkQ29udGV4dChlbGVtZW50KSkKICAgICAgICAgcmV0
dXJuOwogICAgIAotICAgIGF1dG8gbGlua1JhbmdlID0gUmFuZ2U6OmNyZWF0ZShlbGVtZW50LmRv
Y3VtZW50KCkpOwotICAgIGxpbmtSYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOwot
ICAgIGluZm8udGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5
Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5zdGFydFBvc2l0
aW9uKCksCisgICAgYXV0byByYW5nZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhl
bGVtZW50KTsKKyAgICBpbmZvLnRleHRCZWZvcmUgPSBwbGFpblRleHRGb3JEaXNwbGF5KHJhbmdl
RXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0V29yZEJvdW5kYXJ5KGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCksCiAgICAgICAgIGRhdGFEZXRlY3Rpb25FeHRl
bmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKTsKLSAgICBp
bmZvLnRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFj
dGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkobGlua1JhbmdlLT5lbmRQb3NpdGlvbigpLAor
ICAgIGluZm8udGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZUV4cGFuZGVkQnlD
aGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFyeShjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocmFuZ2UuZW5kKSwKICAgICAgICAgZGF0YURldGVjdGlvbkV4dGVuZGVkQ29udGV4dExl
bmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSk7CiB9CisKICNlbmRpZgogCiBzdGF0
aWMgdm9pZCBpbWFnZVBvc2l0aW9uSW5mb3JtYXRpb24oV2ViUGFnZSYgcGFnZSwgRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1hdGlvblJlcXVlc3QmIHJlcXVlc3QsIElu
dGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiBpbmZvKQpAQCAtNDE3MywxMiArNDE1Niwx
MiBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50
RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgIFZpc2libGVQb3NpdGlvbiBlbmRPZlJh
bmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uOwogCiAgICAgYXV0byBzZWxlY3Rpb25SYW5nZSA9IHNl
bGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIGF1dG8gcmFuZ2VPZkludGVyZXN0ID0g
bWFrZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCByYW5nZU9mSW50ZXJlc3RFbmQpOwotICAg
IGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQo
KSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5nZSkucHRyKCkpKSB7CisgICAgYXV0byBy
YW5nZU9mSW50ZXJlc3QgPSAqbWFrZVNpbXBsZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCBy
YW5nZU9mSW50ZXJlc3RFbmQpOworICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVy
bGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZU9mSW50ZXJlc3QpLnB0cigpLCBjcmVhdGVMaXZlUmFu
Z2UoKnNlbGVjdGlvblJhbmdlKS5wdHIoKSkpIHsKICAgICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRl
cmVzdEluU2VsZWN0aW9uID0gc3RkOjptYXgocmFuZ2VPZkludGVyZXN0U3RhcnQsIHNlbGVjdGlv
blN0YXJ0KTsKICAgICAgICAgZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6
bWluKHJhbmdlT2ZJbnRlcmVzdEVuZCwgc2VsZWN0aW9uRW5kKTsKICAgICB9IGVsc2UgewotICAg
ICAgICBhdXRvIHJvb3ROb2RlID0gbWFrZVJlZlB0cihyYW5nZU9mSW50ZXJlc3QtPmNvbW1vbkFu
Y2VzdG9yQ29udGFpbmVyKCkpOworICAgICAgICBhdXRvIHJvb3ROb2RlID0gY29tbW9uSW5jbHVz
aXZlQW5jZXN0b3IocmFuZ2VPZkludGVyZXN0KTsKICAgICAgICAgaWYgKCFyb290Tm9kZSkgewog
ICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9KTsKICAgICAgICAgICAgIHJldHVybjsK
QEAgLTQxOTAsNyArNDE3Myw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERvY3VtZW50RWRpdGlu
Z0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJlcXVlc3QgcmVxdWVzCiAgICAgICAgIH0K
ICAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9v
dENvbnRhaW5lck5vZGUpOwogCi0gICAgICAgIGF1dG8gY2hhcmFjdGVyUmFuZ2VPZkludGVyZXN0
ID0gY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsICpyYW5nZU9mSW50ZXJlc3QpOworICAgICAgICBhdXRv
IGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVzdCA9IGNoYXJhY3RlclJhbmdlKHNjb3BlLCByYW5nZU9m
SW50ZXJlc3QpOwogICAgICAgICBhdXRvIG1pZHBvaW50TG9jYXRpb24gPSBjaGVja2VkU3VtPHVp
bnQ2NF90PihjaGFyYWN0ZXJSYW5nZU9mSW50ZXJlc3QubG9jYXRpb24sIGNoYXJhY3RlclJhbmdl
T2ZJbnRlcmVzdC5sZW5ndGggLyAyKTsKICAgICAgICAgaWYgKG1pZHBvaW50TG9jYXRpb24uaGFz
T3ZlcmZsb3dlZCgpKSB7CiAgICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcih7IH0pOwpAQCAt
NDIzOSw3ICs0MjIyLDcgQEAgdm9pZCBXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29u
dGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVzdCByZXF1ZXMKICAgICBjb250ZXh0LmNv
bnRleHRCZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRCZWZvcmVTdGFydCwgc3RhcnRPZlJhbmdl
T2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LnNlbGVjdGVkVGV4dCA9IG1ha2VT
dHJpbmcoc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uLCBlbmRPZlJhbmdlT2ZJbnRl
cmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LmNvbnRleHRBZnRlciA9IG1ha2VTdHJpbmco
ZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwgY29udGV4dEFmdGVyRW5kKTsKLSAgICBp
ZiAoY29tcG9zaXRpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQo
KSwgY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdlKS5wdHIoKSkpIHsKKyAgICBpZiAo
Y29tcG9zaXRpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZU9m
SW50ZXJlc3QpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLnB0cigp
KSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29tcG9zaXRpb25TdGFydChjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKICAgICAgICAgVmlz
aWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uRW5kKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihj
b21wb3NpdGlvblJhbmdlLT5lbmQpKTsKICAgICAgICAgY29udGV4dC5tYXJrZWRUZXh0ID0gbWFr
ZVN0cmluZyhjb21wb3NpdGlvblN0YXJ0LCBjb21wb3NpdGlvbkVuZCk7CkBAIC00MjY0LDcgKzQy
NDcsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVudEVkaXRpbmdDb250ZXh0KERvY3Vt
ZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAgIH07CiAKICAgICBpZiAod2FudHNS
ZWN0cykgewotICAgICAgICBpZiAoYXV0byBjb250ZXh0UmFuZ2UgPSBtYWtlUmFuZ2UoY29udGV4
dEJlZm9yZVN0YXJ0LCBjb250ZXh0QWZ0ZXJFbmQpKQorICAgICAgICBpZiAoYXV0byBjb250ZXh0
UmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY29udGV4dEJlZm9yZVN0YXJ0LCBjb250ZXh0QWZ0ZXJF
bmQpKQogICAgICAgICAgICAgY29udGV4dC50ZXh0UmVjdHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJh
bmdlKCpjb250ZXh0UmFuZ2UsIDApOwogICAgIH0gZWxzZSBpZiAod2FudHNNYXJrZWRUZXh0UmVj
dHMgJiYgY29tcG9zaXRpb25SYW5nZSkgewogICAgICAgICB1bnNpZ25lZCBjb21wb3NpdGlvblN0
YXJ0T2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggY2ExYzk1ZTQ4NDdiNzQ1ZWY0YjJjZDkyNWQzZTA4NmEy
NzNmOWM5NC4uMmQ5NDMzMzk5NmM4MjhkMmUwMjIzNjgyYzZmMjkwNTQ5OTRjNjUyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0K
QEAgLTg3NCwxOSArODc0LDE4IEBAIHZvaWQgV2ViUGFnZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlv
bkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpCiAgICAgICAgIGlm
ICghd2ViT3ZlcmxheSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIFJlZlB0cjxS
YW5nZT4gbWFpblJlc3VsdFJhbmdlOwotICAgICAgICBEREFjdGlvbkNvbnRleHQgKmFjdGlvbkNv
bnRleHQgPSB3ZWJPdmVybGF5LT5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChsb2NhdGlv
bkluQ29udGVudENvb3JkaW5hdGVzLCBtYWluUmVzdWx0UmFuZ2UpOwotICAgICAgICBpZiAoIWFj
dGlvbkNvbnRleHQgfHwgIW1haW5SZXN1bHRSYW5nZSkKKyAgICAgICAgYXV0byBhY3Rpb25Db250
ZXh0ID0gd2ViT3ZlcmxheS0+YWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQobG9jYXRpb25J
bkNvbnRlbnRDb29yZGluYXRlcyk7CisgICAgICAgIGlmICghYWN0aW9uQ29udGV4dCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8gdmlldyA9IG1haW5SZXN1bHRSYW5nZS0+
b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAgICAgICAgYXV0byB2aWV3ID0gYWN0aW9uQ29udGV4
dC0+cmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVudCgpLnZpZXcoKTsKICAgICAgICAgaWYg
KCF2aWV3KQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgcGFnZU92ZXJsYXlEaWRP
dmVycmlkZURhdGFEZXRlY3RvcnMgPSB0cnVlOwotICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1
bHQuZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dCA9IGFjdGlvbkNvbnRleHQ7Ci0gICAgICAgIGlt
bWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFCb3VuZGluZ0JveCA9IHZpZXctPmNvbnRl
bnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bml0ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9i
amVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5SZXN1bHRSYW5nZSkpKSk7Ci0gICAgICAgIGlt
bWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFUZXh0SW5kaWNhdG9yID0gVGV4dEluZGlj
YXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWluUmVzdWx0UmFuZ2UsIHsgVGV4dEluZGljYXRvck9w
dGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyB9
LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKKyAgICAgICAg
aW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YUFjdGlvbkNvbnRleHQgPSBhY3Rpb25D
b250ZXh0LT5jb250ZXh0LmdldCgpOworICAgICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0
ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSB2aWV3LT5jb250ZW50c1RvV2luZG93KGVuY2xvc2luZ0lu
dFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJPYmplY3Q6OmFic29sdXRlVGV4dFF1YWRz
KGFjdGlvbkNvbnRleHQtPnJhbmdlKSkpKTsKKyAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0
LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFu
Z2UoYWN0aW9uQ29udGV4dC0+cmFuZ2UsIHsgVGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRp
bmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyB9LCBUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKICAgICAgICAgaW1tZWRpYXRlQWN0aW9u
UmVzdWx0LmRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFnZU92ZXJsYXkgPSBvdmVybGF5LT5wYWdl
T3ZlcmxheUlEKCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KaW5kZXggZWNjZmI1
MDFlNmVjMzIxODc2YTA2YTQwNDJmZGI5M2MxODA2ZDhhMC4uNDdmMzBjYWQxNGJlZWEwZTc2Mzli
ZjRiOTdhMWY1NjgwZjQyZjBkYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3Mv
V2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9p
b3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KQEAgLTIzOCwxMSArMjM4LDggQEAgLSAo
TlNBcnJheSAqKXNlbGVjdGlvblJlY3RzCiAKIC0gKERPTVJhbmdlICopd29yZEF0UG9pbnQ6KENH
UG9pbnQpcG9pbnQKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gcG9zID0gW3NlbGYgdmlzaWJsZVBv
c2l0aW9uRm9yUG9pbnQ6cG9pbnRdOwotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydCA9IHN0YXJ0
T2ZXb3JkKHBvcyk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGVuZE9mV29yZChwb3MpOwot
ICAgIERPTVJhbmdlICp3b3JkUmFuZ2UgPSBraXQobWFrZVJhbmdlKHN0YXJ0LCBlbmQpLmdldCgp
KTsKLSAgICByZXR1cm4gd29yZFJhbmdlOyAgIAorICAgIGF1dG8gcG9zaXRpb24gPSBbc2VsZiB2
aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF07CisgICAgcmV0dXJuIGtpdChtYWtlU2ltcGxl
UmFuZ2Uoc3RhcnRPZldvcmQocG9zaXRpb24pLCBlbmRPZldvcmQocG9zaXRpb24pKSk7CiB9CiAK
IC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXdlYlZpc2libGVQb3NpdGlvbkZvclBvaW50OihDR1Bv
aW50KXBvaW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJD
b3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0KaW5kZXggM2IwZWI5NTRlMDlhZmQ4Yzcz
MDVmZmFlZTEyNDFmMTdmMjEyZDFmYy4uZGU1ZGE0NGFmZDkyOGEzZjA5OTUwYjUyZTY0YzY1NDA1
ZTViYjkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBv
cnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dl
YkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5tbQpAQCAtNDE2LDcgKzQxNiw3IEBAIC0g
KERPTVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoRGljdGF0aW9uUGhyYXNlQWx0ZXJuYXRpdmVz
OihOU0FycmF5ICoqKWFsdGVybmF0CiAgICAgZm9yIChhdXRvIG1hcmtlciA6IGRvY3VtZW50Lm1h
cmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9uUGhyYXNl
V2l0aEFsdGVybmF0aXZlcykpIHsKICAgICAgICAgaWYgKG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8
PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA+PSBvZmZzZXQpIHsKICAgICAgICAgICAg
ICphbHRlcm5hdGl2ZXMgPSBjcmVhdGVOU0FycmF5KFdURjo6Z2V0PFZlY3RvcjxTdHJpbmc+Piht
YXJrZXItPmRhdGEoKSkpLmF1dG9yZWxlYXNlKCk7Ci0gICAgICAgICAgICByZXR1cm4ga2l0KFJh
bmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwg
bWFya2VyLT5lbmRPZmZzZXQoKSkucHRyKCkpOworICAgICAgICAgICAgcmV0dXJuIGtpdChyYW5n
ZSgqbm9kZSwgKm1hcmtlcikpOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBuaWw7CkBA
IC00MzMsNyArNDMzLDcgQEAgLSAoRE9NUmFuZ2UgKillbmNsb3NpbmdSYW5nZVdpdGhDb3JyZWN0
aW9uSW5kaWNhdG9yCiAgICAgYXV0byYgZG9jdW1lbnQgPSBub2RlLT5kb2N1bWVudCgpOwogICAg
IGZvciAoYXV0byBtYXJrZXIgOiBkb2N1bWVudC5tYXJrZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwg
RG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSkgewogICAgICAgICBpZiAobWFya2VyLT5zdGFydE9m
ZnNldCgpIDw9IG9mZnNldCAmJiBtYXJrZXItPmVuZE9mZnNldCgpID49IG9mZnNldCkKLSAgICAg
ICAgICAgIHJldHVybiBraXQoUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCwgbm9kZSwgbWFya2VyLT5z
dGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXItPmVuZE9mZnNldCgpKS5wdHIoKSk7CisgICAgICAg
ICAgICByZXR1cm4ga2l0KHJhbmdlKCpub2RlLCAqbWFya2VyKSk7CiAgICAgfQogICAgIHJldHVy
biBuaWw7CiB9CkBAIC00NzUsMjMgKzQ3NSwxMSBAQCAtIChET01SYW5nZSAqKWVuY2xvc2luZ1dv
cmRSYW5nZQogCiArIChET01SYW5nZSAqKXJhbmdlRm9yRmlyc3RQb3NpdGlvbjooV2ViVmlzaWJs
ZVBvc2l0aW9uICopZmlyc3Qgc2Vjb25kOihXZWJWaXNpYmxlUG9zaXRpb24gKilzZWNvbmQKIHsK
LSAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RWUCA9IFtmaXJzdCBfdmlzaWJsZVBvc2l0aW9uXTsK
LSAgICBWaXNpYmxlUG9zaXRpb24gc2Vjb25kVlAgPSBbc2Vjb25kIF92aXNpYmxlUG9zaXRpb25d
OwotICAgIAotICAgIGlmIChmaXJzdFZQLmlzTnVsbCgpIHx8IHNlY29uZFZQLmlzTnVsbCgpKQot
ICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAg
aWYgKGZpcnN0VlAgPCBzZWNvbmRWUCkgewotICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUo
Zmlyc3RWUC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0ZWROb2RlKCktPmRvY3VtZW50KCksCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RWUCwgc2Vjb25kVlApOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShmaXJzdFZQLmRlZXBF
cXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9jdW1lbnQoKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vjb25kVlAsIGZpcnN0VlApOwotICAgIH0K
LSAgICAKLSAgICAKLSAgICByZXR1cm4ga2l0KHJhbmdlLmdldCgpKTsKKyAgICBhdXRvIGZpcnN0
VlAgPSBbZmlyc3QgX3Zpc2libGVQb3NpdGlvbl07CisgICAgYXV0byBzZWNvbmRWUCA9IFtzZWNv
bmQgX3Zpc2libGVQb3NpdGlvbl07CisgICAgaWYgKGZpcnN0VlAgPCBzZWNvbmRWUCkKKyAgICAg
ICAgc3RkOjpzd2FwKGZpcnN0VlAsIHNlY29uZFZQKTsKKyAgICByZXR1cm4ga2l0KG1ha2VTaW1w
bGVSYW5nZShmaXJzdFZQLCBzZWNvbmRWUCkpOwogfQogCiBAZW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbQppbmRleCA0ZjA2ODM0NjIy
YjczMmZlNmE2Y2M2NGM3Yzk1NWRhMjE0ZjJmNjg3Li4yOWZjMmM3NzA5YWI0ZGE5ODQxNzlmM2Ni
YzhmNzRlMGI4MjkxYTc3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00v
RE9NVUlLaXRFeHRlbnNpb25zLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9E
T01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTIxMCwyMiArMjEwLDggQEAgLSAoQk9PTClpc1NlbGVj
dGFibGVCbG9jawogCiAtIChET01SYW5nZSAqKXJhbmdlT2ZDb250YWluaW5nUGFyYWdyYXBoCiB7
Ci0gICAgRE9NUmFuZ2UgKnJlc3VsdCA9IG5pbDsKLSAgICAKLSAgICBOb2RlICpub2RlID0gY29y
ZShzZWxmKTsgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbihjcmVhdGVM
ZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgMCksIFdlYkNvcmU6OkRPV05TVFJFQU0pOwotICAg
IFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUGFyYWdyYXBoU3RhcnQgPSBzdGFydE9mUGFyYWdyYXBo
KHZpc2libGVQb3NpdGlvbik7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQYXJhZ3JhcGhF
bmQgPSBlbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zaXRpb24pOwotICAgIAotICAgIFBvc2l0aW9u
IHBhcmFncmFwaFN0YXJ0ID0gdmlzaWJsZVBhcmFncmFwaFN0YXJ0LmRlZXBFcXVpdmFsZW50KCku
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgUG9zaXRpb24gcGFyYWdyYXBoRW5kID0g
dmlzaWJsZVBhcmFncmFwaEVuZC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZh
bGVudCgpOyAgICAKLSAgICAKLSAgICBpZiAocGFyYWdyYXBoU3RhcnQuaXNOb3ROdWxsKCkgJiYg
cGFyYWdyYXBoRW5kLmlzTm90TnVsbCgpKSB7Ci0gICAgICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKCpub2RlLT5vd25lckRvY3VtZW50KCksIHBhcmFncmFwaFN0YXJ0LCBwYXJh
Z3JhcGhFbmQpOwotICAgICAgICByZXN1bHQgPSBraXQocmFuZ2UucHRyKCkpOwotICAgIH0KLSAg
ICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbihjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29yZShzZWxmKSwgMCksIFdlYkNvcmU6OkRPV05TVFJF
QU0pOworICAgIHJldHVybiBraXQobWFrZVNpbXBsZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgocG9z
aXRpb24pLCBlbmRPZlBhcmFncmFwaChwb3NpdGlvbikpKTsKIH0KIAogLSAoQ0dGbG9hdCl0ZXh0
SGVpZ2h0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZy
YW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQppbmRl
eCAzM2EyNjA5MjY2YTllOTU0N2VhY2QxMWI0MTdkNGYyY2IxMWJhMDIyLi5mNzk0MTk4MGY2NGEw
YTQwYTUwNjU2Njc4NzFmNWIyODY2NzZmY2Q5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTkyMiw3ICs5MjIsNyBAQCAtIChXZWJDb3JlOjpWaXNp
YmxlUG9zaXRpb24pX3Zpc2libGVQb3NpdGlvbkZvclBvaW50OihOU1BvaW50KXBvaW50CiAKIC0g
KERPTVJhbmdlICopX2NoYXJhY3RlclJhbmdlQXRQb2ludDooTlNQb2ludClwb2ludAogewotICAg
IHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+cmFuZ2VGb3JQb2ludChXZWJDb3JlOjpJ
bnRQb2ludChwb2ludCkpLmdldCgpKTsKKyAgICByZXR1cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJh
bWUtPnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9pbnQocG9pbnQpKSk7CiB9CiAKIC0gKERP
TUNTU1N0eWxlRGVjbGFyYXRpb24gKilfdHlwaW5nU3R5bGUKQEAgLTE3NDEsOSArMTc0MSw4IEBA
IC0gKHZvaWQpZ2V0RGljdGF0aW9uUmVzdWx0UmFuZ2VzOihOU0FycmF5ICoqKW91dFJhbmdlcyBh
bmRNZXRhZGF0YXM6KE5TQXJyYXkgKiopCiAgICAgICAgICAgICBpZiAoIW1ldGFkYXRhKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBhdXRvIHJh
bmdlID0gV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQsIG5vZGUsIG1hcmtlci0+c3Rh
cnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSk7Ci0gICAgICAgICAgICBET01S
YW5nZSAqZG9tUmFuZ2UgPSBraXQocmFuZ2UucHRyKCkpOwotICAgICAgICAgICAgCisgICAgICAg
ICAgICBET01SYW5nZSAqZG9tUmFuZ2UgPSBraXQocmFuZ2UoKm5vZGUsICptYXJrZXIpKTsKKwog
ICAgICAgICAgICAgaWYgKG1ldGFkYXRhICE9IHByZXZpb3VzTWV0YWRhdGEpIHsKICAgICAgICAg
ICAgICAgICBbbWV0YWRhdGFzIGFkZE9iamVjdDptZXRhZGF0YV07CiAgICAgICAgICAgICAgICAg
W3JhbmdlcyBhZGRPYmplY3Q6ZG9tUmFuZ2VdOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tIGIvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1t
CmluZGV4IDJkZjgxNjE5ZTU5NWZhZjZhOWVkMmVmZTIwMTZkYmZhMTBiNWE3OWMuLjllNzZkMmI0
NzVkZTEwNTA4ZWFhMzhmMmZiZWIzZTk1NTNhNzg4NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRlQWN0aW9uQ29udHJvbGxlci5tbQorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRy
b2xsZXIubW0KQEAgLTI3MCw4ICsyNzAsOCBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25Bbmlt
YXRpb25Db250cm9sbGVyPilfZGVmYXVsdEFuaW1hdGlvbkNvbnRyb2xsZXIKICAgICAgICAgaWYg
KFdURjo6cHJvdG9jb2xJc0luSFRUUEZhbWlseShhYnNvbHV0ZVVSTFN0cmluZykpIHsKICAgICAg
ICAgICAgIF90eXBlID0gV2ViSW1tZWRpYXRlQWN0aW9uTGlua1ByZXZpZXc7CiAKLSAgICAgICAg
ICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbGlua1JhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKCpf
aGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpOwotICAgICAgICAgICAgYXV0byBpbmRpY2F0b3Ig
PSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoKmxpbmtSYW5nZSwgeyBX
ZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uOjpVc2VCb3VuZGluZ1JlY3RBbmRQYWludEFsbENv
bnRlbnRGb3JDb21wbGV4UmFuZ2VzIH0sIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRp
b25UcmFuc2l0aW9uOjpGYWRlSW4pOworICAgICAgICAgICAgYXV0byBsaW5rUmFuZ2UgPSBtYWtl
UmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKl9oaXRUZXN0UmVzdWx0LlVSTEVsZW1lbnQoKSk7
CisgICAgICAgICAgICBhdXRvIGluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNy
ZWF0ZVdpdGhSYW5nZShsaW5rUmFuZ2UsIHsgV2ViQ29yZTo6VGV4dEluZGljYXRvck9wdGlvbjo6
VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxleFJhbmdlcyB9LCBXZWJD
b3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKICAgICAg
ICAgICAgIGlmIChpbmRpY2F0b3IpCiAgICAgICAgICAgICAgICAgW193ZWJWaWV3IF9zZXRUZXh0
SW5kaWNhdG9yOippbmRpY2F0b3Igd2l0aExpZmV0aW1lOldlYkNvcmU6OlRleHRJbmRpY2F0b3JX
aW5kb3dMaWZldGltZTo6UGVybWFuZW50XTsKIApAQCAtNDcxLDEwICs0NzEsOCBAQCAtIChpZCA8
TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilfYW5pbWF0aW9uQ29udHJvbGxl
ckZvckRhdGFEZXRlY3RlZAogICAgIFthY3Rpb25Db250ZXh0IHNldEFsdE1vZGU6WUVTXTsKICAg
ICBbYWN0aW9uQ29udGV4dCBzZXRJbW1lZGlhdGU6WUVTXTsKIAotICAgIFJlZlB0cjxXZWJDb3Jl
OjpSYW5nZT4gbGlua1JhbmdlID0gcmFuZ2VPZkNvbnRlbnRzKCpfaGl0VGVzdFJlc3VsdC5VUkxF
bGVtZW50KCkpOwotICAgIGlmICghbGlua1JhbmdlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICBhdXRvIGluZGljYXRvciA9IFdlYkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhS
YW5nZSgqbGlua1JhbmdlLCB7IH0sIFdlYkNvcmU6OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25U
cmFuc2l0aW9uOjpGYWRlSW4pOworICAgIGF1dG8gbGlua1JhbmdlID0gbWFrZVJhbmdlU2VsZWN0
aW5nTm9kZUNvbnRlbnRzKCpfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpOworICAgIGF1dG8g
aW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKGxpbmtS
YW5nZSwgeyB9LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6
RmFkZUluKTsKIAogICAgIF9jdXJyZW50QWN0aW9uQ29udGV4dCA9IFthY3Rpb25Db250ZXh0IGNv
bnRleHRGb3JWaWV3Ol93ZWJWaWV3IGFsdE1vZGU6WUVTIGludGVyYWN0aW9uU3RhcnRlZEhhbmRs
ZXI6XigpIHsKICAgICB9IGludGVyYWN0aW9uQ2hhbmdlZEhhbmRsZXI6XigpIHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4dEltcGwuY3BwCmluZGV4IDYxYzAyMjdl
MjhkMjNhOTc2NmRkY2YyMDg4NDhkOTZhMjI0N2U4MjkuLjNkYTg5YzRjY2Q2MWMxZTZhZmJjYzAx
YjIwYTg5OTIwMDllOWU0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0Fj
Y2Vzc2libGVUZXh0SW1wbC5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQWNjZXNz
aWJsZVRleHRJbXBsLmNwcApAQCAtNDYxLDExICs0NjEsMTEgQEAgSFJFU1VMVCBBY2Nlc3NpYmxl
VGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG8obG9uZyBzdGFydEluZGV4LCBsb25nIGVuZEluZGV4LCBl
bnVtIEkKICAgICBzdGFydEluZGV4ID0gY29udmVydFNwZWNpYWxPZmZzZXQoc3RhcnRJbmRleCk7
CiAgICAgZW5kSW5kZXggPSBjb252ZXJ0U3BlY2lhbE9mZnNldChlbmRJbmRleCk7CiAKLSAgICBW
aXNpYmxlUG9zaXRpb25SYW5nZSB0ZXh0UmFuZ2UgPSBtX29iamVjdC0+dmlzaWJsZVBvc2l0aW9u
UmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5nZShzdGFydEluZGV4LCBlbmRJbmRleC1zdGFydElu
ZGV4KSk7Ci0gICAgaWYgKHRleHRSYW5nZS5zdGFydC5pc051bGwoKSB8fCB0ZXh0UmFuZ2UuZW5k
LmlzTnVsbCgpKQorICAgIGF1dG8gdGV4dFJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKG1fb2JqZWN0
LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBsYWluVGV4dFJhbmdlKHN0YXJ0SW5kZXgs
IGVuZEluZGV4LXN0YXJ0SW5kZXgpKSk7CisgICAgaWYgKCF0ZXh0UmFuZ2UpCiAgICAgICAgIHJl
dHVybiBTX0ZBTFNFOwogCi0gICAgSW50UmVjdCBib3VuZGluZ0JveCA9IG1ha2VSYW5nZSh0ZXh0
UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5lbmQpLT5hYnNvbHV0ZUJvdW5kaW5nQm94KCk7CisgICAg
SW50UmVjdCBib3VuZGluZ0JveCA9IGNyZWF0ZUxpdmVSYW5nZSgqdGV4dFJhbmdlKS0+YWJzb2x1
dGVCb3VuZGluZ0JveCgpOwogICAgIHN3aXRjaCAoc2Nyb2xsVHlwZSkgewogICAgIGNhc2UgSUEy
X1NDUk9MTF9UWVBFX1RPUF9MRUZUOgogICAgICAgICBtX29iamVjdC0+c2Nyb2xsVG9HbG9iYWxQ
b2ludChib3VuZGluZ0JveC5taW5YTWluWUNvcm5lcigpKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>405709</attachid>
            <date>2020-07-31 11:00:29 -0700</date>
            <delta_ts>2020-08-01 08:50:42 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-215004-20200731110028.patch</filename>
            <type>text/plain</type>
            <size>147234</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY1MTQ5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGMxMDcyYzlkN2NiNTdm
Y2IyNDIzMGY0ZGU0ZjFjNzRlMzQ1ZDJkMC4uYTRkNzhhMzc3ZmYwNjVjNzE3YTAwZmNjM2YzN2Y4
ZjdhZjZiNjQ3YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4MCBAQAorMjAyMC0wNy0zMCAgRGFy
aW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3ZlIFJhbmdlOjpjcmVh
dGUgYW5kIG1hbnkgbW9yZSB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwMDQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZSBjb25zdCk6CisgICAgICAgIFVz
ZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RD
YWNoZUF0ay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBWE9iamVjdENhY2hlOjpub2RlVGV4dENo
YW5nZVBsYXRmb3JtTm90aWZpY2F0aW9uKTogVXNlIFNpbXBsZVJhbmdlLgorICAgICAgICAqIGFj
Y2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVIeXBlcmxpbmsuY3BwOgorICAgICAgICAo
cmFuZ2VMZW5ndGhGb3JPYmplY3QpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAgICAgICAod2Via2l0
QWNjZXNzaWJsZUh5cGVybGlua0dldFN0YXJ0SW5kZXgpOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgor
ICAgICAgICAod2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0dldEVuZEluZGV4KTogRGl0dG8uCisg
ICAgICAgICogYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQu
Y3BwOgorICAgICAgICAoZ2V0U2VsZWN0aW9uT2Zmc2V0c0Zvck9iamVjdCk6IERpdHRvLgorICAg
ICAgICAqIGFjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcDoKKyAgICAg
ICAgKG9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdub3JlZCk6IERpdHRvLgorCisgICAg
ICAgICogYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1Mu
bW06CisgICAgICAgICgrW1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIHN0YXJ0T3JFbmRUZXh0
TWFya2VyRm9yUmFuZ2U6aXNTdGFydDpjYWNoZTpdKToKKyAgICAgICAgVGFrZSBTaW1wbGVSYW5n
ZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgYXJyYXlPZlRleHRG
b3JUZXh0TWFya2VyczphdHRyaWJ1dGVkOl0pOgorICAgICAgICBVc2UgbWFrZVNpbXBsZVJhbmdl
LgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBfY29udmVydFRvRE9N
UmFuZ2U6XSk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0
eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlXSk6IFJlbW92ZSBjcmVhdGVMaXZlUmFuZ2Uu
CisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHRleHRNYXJrZXJGb3JQ
b3NpdGlvbjpdKTogVXNlIGF1dG8uCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIG1pc3NwZWxsaW5nVGV4dE1hcmtlclJhbmdlOmZvcndhcmQ6XSk6CisgICAgICAgIFJl
bW92ZSBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RX
cmFwcGVyIHJhbmdlRnJvbU1hcmtlcnM6d2l0aFRleHQ6XSk6IFJldHVybiBTaW1wbGVSYW5nZS4K
KyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dFJlY3RzRnJvbU1h
cmtlcnM6d2l0aFRleHQ6XSk6IEFkZCBjcmVhdGVMaXZlUmFuZ2UuCisgICAgICAgICgtW1dlYkFj
Y2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlcnM6XSk6IFJldHVybiBT
aW1wbGVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgc3Rh
cnRPckVuZFRleHRNYXJrZXJGb3JUZXh0TWFya2Vyczppc1N0YXJ0Ol0pOgorICAgICAgICBVc2Ug
YXV0by4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtl
clJhbmdlRm9yTWFya2VyczpdKTogR2V0IHJpZCBvZiBsb2NhbC4KKyAgICAgICAgKC1bV2ViQWNj
ZXNzaWJpbGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlcnNGb3JSYW5nZTpdKTogVGFrZSBTaW1w
bGVSYW5nZS4KKworICAgICAgICAqIGFjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlP
YmplY3RXcmFwcGVyTWFjLm1tOgorICAgICAgICAoYWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25G
b3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKTogUmVtb3ZlIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAg
ICAgKGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlhRm9yUGFyYW1ldGVyaXpl
ZEF0dHJpYnV0ZSk6IFJldHVybiBTaW1wbGVSYW5nZS4KKyAgICAgICAgKC1bV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXIgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOl0pOiBUYWtlIFNpbXBs
ZVJhbmdlLgorICAgICAgICAodGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIHN0YXJ0T3JFbmRUZXh0TWFya2Vy
Rm9yUmFuZ2U6aXNTdGFydDpdKTogRGl0dG8uCisgICAgICAgIChzdGFydE9yRW5kVGV4dG1hcmtl
ckZvclJhbmdlKTogUmV0dXJuIFNpbXBsZVJhbmdlLgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmls
aXR5T2JqZWN0V3JhcHBlciByYW5nZUZvclRleHRNYXJrZXJSYW5nZTpdKTogRGl0dG8uCisgICAg
ICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGRvQVhBdHRyaWJ1dGVkU3RyaW5n
Rm9yVGV4dE1hcmtlclJhbmdlOnNwZWxsQ2hlY2s6XSk6CisgICAgICAgIFVzZSBhdXRvLgorICAg
ICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciBkb0FYQXR0cmlidXRlZFN0cmlu
Z0ZvclJhbmdlOl0pOiBSZW1vdmUgY3JlYXRlTGl2ZVJhbmdlLgorICAgICAgICAoLVtXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0V3JhcHBlciB0ZXh0TWFya2VyUmFuZ2VBdFRleHRNYXJrZXI6Zm9yVW5p
dDpdKTogRGl0dG8uCisgICAgICAgICgtW1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyIGFj
Y2Vzc2liaWxpdHlBdHRyaWJ1dGVWYWx1ZTpmb3JQYXJhbWV0ZXI6XSk6IERpdHRvLgorCisgICAg
ICAgICogZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojp1cGRhdGVSZW5kZXJlZFJlY3RzRm9yTWFya2VyKTogVXNlIGRvY3VtZW50IG1hcmtlciByYW5n
ZSBmdW5jdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OnJhbmdlKTogQWRkZWQuCisgICAgICAgICog
ZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxlci5oOiBVcGRhdGUgZm9yIGFib3ZlLgorCisgICAg
ICAgICogZG9tL1Bvc2l0aW9uLmNwcDogUmVtb3ZlZCB1bm5lZWRlZCBSYW5nZS5oIGluY2x1ZGUu
CisKKyAgICAgICAgKiBkb20vUmFuZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OlJh
bmdlKTogUmVtb3ZlZCB1bnVzZWQgb3ZlcmxvYWQgdGhhdCB0YWtlcyBzdGFydC9lbmQuCisgICAg
ICAgIChXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKTogUmVtb3ZlZCBvdmVybG9hZHMgdGhhdCB0YWtl
IHN0YXJ0L2VuZC4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpzZXRTdGFydCk6IFJlbW92ZWQg
b3ZlcmxvYWQgdGhhdCB0YWtlcyBQb3NpdGlvbi4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpz
ZXRFbmQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlJhbmdlOjpjbG9uZVJhbmdlIGNvbnN0
KTogUmV3cm90ZSB0byB1c2Ugc2V0U3RhcnQvRW5kIHNpbmNlCisgICAgICAgIHRoYXQncyB3aGF0
IHRoZSBjb25zdHJ1Y3RvciB1c2VkIHRvIGRvLgorICAgICAgICAoV2ViQ29yZTo6UmFuZ2U6OmNv
bnRhaW5zIGNvbnN0KTogVXNlIFNpbXBsZVJhbmdlL2NyZWF0ZUxpdmVSYW5nZQorICAgICAgICBp
bnN0ZWFkIG9mIG1ha2VSYW5nZS4gU29vbiB0aGlzIGZ1bmN0aW9uIHdpbGwgYmUgZGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnJhbmdlT2ZDb250ZW50cyk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpjcmVhdGVMaXZlUmFuZ2UpOiBSZXdyb3RlIHRvIHVzZSBzZXRTdGFydC9FbmQgc2lu
Y2UgdGhhdCdzCisgICAgICAgIHdoYXQgdGhlIGNvbnN0cnVjdG9yIHVzZWQgdG8gZG8uCisgICAg
ICAgICogZG9tL1JhbmdlLmg6IFVwZGF0ZSBmb3IgYWJvdmUgcmVtb3ZhbHMuCisKKyAgICAgICAg
KiBkb20vU2ltcGxlUmFuZ2UuaDogRXhwb3J0IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yIGZvciB1
c2Ugb3V0c2lkZSBXZWJDb3JlLgorCisgICAgICAgICogZG9tL1N0YXRpY1JhbmdlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlN0YXRpY1JhbmdlOjpjcmVhdGUpOiBBZGRlZCBvdmVybG9hZCB0aGF0
IGNvcGllcyB0aGUgU2ltcGxlUmFuZ2UuCisgICAgICAgICogZG9tL1N0YXRpY1JhbmdlLmg6IFVw
ZGF0ZSBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL0FsdGVybmF0aXZlVGV4dENvbnRy
b2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6
cmVzcG9uZFRvTWFya2VyQXRFbmRPZldvcmQpOiBVc2UgZG9jdW1lbnQKKyAgICAgICAgbWFya2Vy
IHJhbmdlIGZ1bmN0aW9uLgorCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxlQ29tbWFuZDo6Zml4UmFuZ2VBbmRBcHBs
eUlubGluZVN0eWxlKTogVXNlIG1ha2VTaW1wbGVSYW5nZS4KKyAgICAgICAgKiBlZGl0aW5nL0Rl
bGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RGVsZXRlU2VsZWN0
aW9uQ29tbWFuZDo6bWVyZ2VQYXJhZ3JhcGhzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpE
ZWxldGVTZWxlY3Rpb25Db21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRC
ZWdpbm5pbmdPZlNlbGVjdGlvbik6CisgICAgICAgIERpdHRvLgorCisgICAgICAgICogZWRpdGlu
Zy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjp0ZXh0
RGlyZWN0aW9uRm9yU2VsZWN0aW9uKTogVXNlIG1ha2VTaW1wbGVSYW5nZSBhbmQKKyAgICAgICAg
aW50ZXJzZWN0aW5nTm9kZXMuCisKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQpOiBVc2Ug
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzLgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9y
Ojp1cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyk6IFVzZSBtYWtlU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnRyYW5zcG9zZSk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyYW5nZU9mU3RyaW5nKTogVXNlIG1ha2VSYW5nZVNlbGVj
dGluZ05vZGVDb250ZW50cy4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6aGFuZGxlQWNjZXB0
ZWRDYW5kaWRhdGUpOiBVcGRhdGUgc2luY2UgcmFuZ2VGb3JUZXh0Q2hlY2tpbmdSZXN1bHQKKyAg
ICAgICAgbm93IHJldHVybnMgYW4gT3B0aW9uYWw8U2ltcGxlUmFuZ2U+LgorCisgICAgICAgICog
ZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQpOiBVc2UgU2ltcGxlUmFuZ2UuCisKKyAgICAgICAg
KiBlZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OlJlcGxhY2VSYW5nZVdpdGhUZXh0Q29t
bWFuZCk6IFRha2UKKyAgICAgICAgU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpSZXBs
YWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OndpbGxBcHBseUNvbW1hbmQpOiBVcGRhdGUgc2luY2UK
KyAgICAgICAgbV9yYW5nZVRvQmVSZXBsYWNlZCBpcyBhIFNpbXBsZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQ6OnRhcmdldFJhbmdl
cyBjb25zdCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRD
b21tYW5kLmg6IFVwZGF0ZSBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjppbnNlcnRlZENvbnRlbnRSYW5nZSBjb25zdCk6CisgICAgICAgIFJldHVybiBhIFNp
bXBsZVJhbmdlLgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaDog
VXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvU3BlbGxpbmdDb3JyZWN0aW9u
Q29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5k
OjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKToKKyAgICAgICAgVGFrZSBhIFNpbXBsZVJhbmdl
LgorICAgICAgICAoV2ViQ29yZTo6U3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKTog
TW92ZWQgaGVyZSBmcm9tIGhlYWRlci4KKyAgICAgICAgKiBlZGl0aW5nL1NwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQuaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvVGV4
dENoZWNraW5nSGVscGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRleHRDaGVja2luZ0hlbHBl
cjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQaHJhc2UgY29uc3QpOgor
ICAgICAgICBVc2UgbWFrZVNpbXBsZVJhbmdlLgorCisgICAgICAgICogZWRpdGluZy9UeXBpbmdD
b21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVs
bGluZ3NBZnRlclR5cGluZyk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJDb3Jl
OjpUeXBpbmdDb21tYW5kOjp3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZCk6IFRha2UgU2ltcGxl
UmFuZ2UuCisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KTogUmVtb3ZlIGNyZWF0ZUxpdmVSYW5nZS4KKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1h
bmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9U
eXBpbmdDb21tYW5kLmg6IFVwZGF0ZSBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBlZGl0aW5nL1Zp
c2libGVQb3NpdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjptYWtlUmFuZ2UpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6c3RhcnRWaXNpYmxlUG9zaXRpb24pOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6ZW5kVmlzaWJsZVBvc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OnNldFN0YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnNldEVuZCk6IERl
bGV0ZWQuCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaDogVXBkYXRlIGZvciBh
Ym92ZS4gQWxzbyBleHBvcnQgbWFrZVNpbXBsZVJhbmdlCisgICAgICAgIGZvciB1c2Ugb3V0c2lk
ZSBXZWJDb3JlLgorCisgICAgICAgICogZWRpdGluZy9WaXNpYmxlVW5pdHMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6c3VmZml4TGVuZ3RoRm9yUmFuZ2UpOiBUYWtlIFNpbXBsZVJhbmdlLgorICAg
ICAgICAoV2ViQ29yZTo6cHJlZml4TGVuZ3RoRm9yUmFuZ2UpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OnByZXZpb3VzQm91bmRhcnkpOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAo
V2ViQ29yZTo6bmV4dEJvdW5kYXJ5KTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9WaXNpYmxl
VW5pdHMuaDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAqIGVkaXRpbmcvY29jb2EvRGF0
YURldGVjdGlvbi5tbToKKyAgICAgICAgKFdlYkNvcmU6OmJ1aWxkUXVlcnkpOiBSZW1vdmUgdW51
c2VkIGxvY2FsIHZhcmlhYmxlLgorCisgICAgICAgICogZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
OgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2VzQXNDaGlsZE9m
RWxlbWVudCk6IFVzZSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMuCisKKyAgICAgICAg
KiBwYWdlL0RPTVNlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpET01TZWxlY3Rpb246
OmdldFJhbmdlQXQpOiBVc2UgY3JlYXRlTGl2ZVJhbmdlLgorCisgICAgICAgICogcGFnZS9EcmFn
Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ29udHJvbGxlcjo6aW5zZXJ0
RHJvcHBlZEltYWdlUGxhY2Vob2xkZXJzQXRDYXJldCk6IFJlbW92ZSBtYWtlU2ltcGxlUmFuZ2Uu
CisKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpy
YW5nZUZvclBvaW50KTogUmV0dXJuIFNpbXBsZVJhbmdlLgorICAgICAgICAqIHBhZ2UvRnJhbWUu
aDogVXBkYXRlIGZvciBhYm92ZS4KKworICAgICAgICAqIHBhZ2UvaW9zL0ZyYW1lSU9TLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbnRSb290IGNv
bnN0KTogVXNlIG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cywKKyAgICAgICAgaW50ZXJz
ZWN0aW5nTm9kZXMsIGFuZCBtYWtlU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiB0ZXN0aW5nL0lu
dGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om1hcmtlclJhbmdlRm9y
Tm9kZSk6IFVzZSBjcmVhdGVMaXZlUmFuZ2UgYW5kIHRoZSBkb2N1bWVudAorICAgICAgICBtYXJr
ZXIgcmFuZ2UgZnVuY3Rpb24uCisKIDIwMjAtMDctMzEgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBh
cHBlLmNvbT4KIAogICAgICAgICAtW1dLV2Vic2l0ZURhdGFTdG9yZSBfcmVuYW1lT3JpZ2luOl0g
bmVlZHMgdG8gc3VwcG9ydCBJbmRleGVkREIgcmVuYW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA0ZmVkNjE2NmZi
ZDJkYzA0NGI1MTliZWJmMDNjYTBjZmYwZjlhMWM1Li4wNGJjMGY5N2YwOTViOGYxMmY0YmNkMDA5
NjNiMTNkZDc0MGJmYjhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDIwLTA3LTMwICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKworICAgICAgICBSZW1vdmUgUmFuZ2U6OmNy
ZWF0ZSBhbmQgbWFueSBtb3JlIHVzZXMgb2YgbGl2ZSByYW5nZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTAwNAorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcDoKKyAgICAgICAgKEFQSTo6UGFnZU92ZXJs
YXlDbGllbnRJbXBsOjphY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCk6IFJldHVybiBhCisg
ICAgICAgIHN0cnVjdHVyZSB0aGF0IGluY2x1ZGVzIGEgU2ltcGxlUmFuZ2UuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpJbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGU6OnZpc2libGVS
YW5nZSk6IFVzZSBtYWtlU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lmg6IFVzZSBTaW1wbGVSYW5nZS4K
KyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxl
clByb3h5Lm1tOgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6
OnJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbik6IFVzZSBTaW1wbGVSYW5nZS4KKyAg
ICAgICAgKFdlYktpdDo6VGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRp
dmVUb1NlbGVjdGlvbik6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpUZXh0Q2hlY2tpbmdDb250
cm9sbGVyUHJveHk6OnJlbW92ZUFubm90YXRpb25SZWxhdGl2ZVRvU2VsZWN0aW9uKTogRGl0dG8u
CisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6CisgICAgICAgIChX
ZWJLaXQ6OldlYlBhZ2U6OmNoYXJhY3RlckluZGV4Rm9yUG9pbnRBc3luYyk6IFJlbW92ZSBtYWtl
U2ltcGxlUmFuZ2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmRlbGV0ZVN1cnJvdW5kaW5n
KTogVXNlIG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlT3ZlcmxheS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VPdmVybGF5OjphY3Rp
b25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCk6IFVzZSByZXR1cm4gdmFsdWUgaW5zdGVhZCBvZiBv
dXQgYXJndW1lbnQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5
Lmg6IFVwZGF0ZSBmb3IgYWJvdmUuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvZ2xp
Yi9XZWJQYWdlR0xpYi5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFBsYXRmb3Jt
RWRpdG9yU3RhdGUgY29uc3QpOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorCisgICAgICAgICogV2Vi
UHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tOgorICAgICAgICAoV2ViS2l0Ojpjb21w
dXRlRWRpdGFibGVSb290SGFzQ29udGVudEFuZFBsYWluVGV4dCk6IFVzZSBtYWtlU2ltcGxlUmFu
Z2UuCisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmdldFJlY3RzRm9yR3JhbnVsYXJpdHlXaXRo
U2VsZWN0aW9uT2Zmc2V0KTogUmVtb3ZlZCB1bm5lZWRlZCBudWxsIGNoZWNrcyB0aGF0CisgICAg
ICAgIGFyZSBhbHJlYWR5IGRvbmUgYnkgbWFrZVNpbXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0
OjpXZWJQYWdlOjpnZXRSZWN0c0F0U2VsZWN0aW9uT2Zmc2V0V2l0aFRleHQpOiBVc2UgbWFrZVNp
bXBsZVJhbmdlLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RGljdGF0aW9uQ29u
dGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjphdXRvY29ycmVjdGlvbkNv
bnRleHQpOiBEaXR0by4KKyAgICAgICAgKFdlYktpdDo6bGlua0luZGljYXRvclBvc2l0aW9uSW5m
b3JtYXRpb24pOiBVc2UgbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzLgorICAgICAgICAo
V2ViS2l0OjpkYXRhRGV0ZWN0b3JMaW5rUG9zaXRpb25JbmZvcm1hdGlvbik6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjpyZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dCk6IFVz
ZSBtYWtlU2ltcGxlUmFuZ2UuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dl
YlBhZ2VNYWMubW06CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnBlcmZvcm1JbW1lZGlhdGVB
Y3Rpb25IaXRUZXN0QXRMb2NhdGlvbik6IFVwZGF0ZSBmb3IgY2hhbmdlIHRvIHRoZQorICAgICAg
ICBhY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCByZXR1cm4gdmFsdWUuCisKIDIwMjAtMDct
MzEgIFNpaHVpIExpdSAgPHNpaHVpX2xpdUBhcHBlLmNvbT4KIAogICAgICAgICAtW1dLV2Vic2l0
ZURhdGFTdG9yZSBfcmVuYW1lT3JpZ2luOl0gbmVlZHMgdG8gc3VwcG9ydCBJbmRleGVkREIgcmVu
YW1lcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYktpdExlZ2FjeS9pb3MvQ2hhbmdlTG9nCmluZGV4IGFiZTYxMTdiY2Y0MmYwYmI0MTU2
ZDk0MWZmZTk4ZWRmYzA3YzJjMzkuLmQ0YmFjYzlmOWVlYWMwOTQ1ODI4M2E3NzZlZTBkNzM1YTJi
MGFkMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L2lvcy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOSBAQAorMjAy
MC0wNy0zMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CisKKyAgICAgICAgUmVtb3Zl
IFJhbmdlOjpjcmVhdGUgYW5kIG1hbnkgbW9yZSB1c2VzIG9mIGxpdmUgcmFuZ2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTUwMDQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L1dlYkZyYW1lSU9TLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSB3b3JkQXRQb2ludDpdKTogVXNl
IG1ha2VTaW1wbGVSYW5nZS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQ
b3NpdGlvbi5tbToKKyAgICAgICAgKC1bV2ViVmlzaWJsZVBvc2l0aW9uIGVuY2xvc2luZ1Jhbmdl
V2l0aERpY3RhdGlvblBocmFzZUFsdGVybmF0aXZlczpdKTogVXNlIGRvY3VtZW50CisgICAgICAg
IG1hcmtlciByYW5nZSBmdW5jdGlvbi4KKyAgICAgICAgKC1bV2ViVmlzaWJsZVBvc2l0aW9uIGVu
Y2xvc2luZ1JhbmdlV2l0aENvcnJlY3Rpb25JbmRpY2F0b3JdKTogRGl0dG8uCisgICAgICAgICgr
W0RPTVJhbmdlIHJhbmdlRm9yRmlyc3RQb3NpdGlvbjpzZWNvbmQ6XSk6IFVzZSBtYWtlU2ltcGxl
UmFuZ2UuCisKIDIwMjAtMDctMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAg
ICAgICAgIEZ1cnRoZXIgcmVkdWN0aW9uIGluIHRoZSB1c2Ugb2YgbGl2ZSByYW5nZXMsIHBhcnRp
Y3VsYXJseSBpbiBoZWFkZXJzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cKaW5kZXggZDk5YTQy
ZWNjZjNmMTMzODllMmJkNWM1MzY3MDVhODhhNGFiODU0Yy4uMjQ4ODJlNjc5NTg5YTA0MmVlYjA2
YjgyYTQyODVmNDQ3ZTM2NTNlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDIxIEBACisyMDIwLTA3LTMwICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KKwor
ICAgICAgICBSZW1vdmUgUmFuZ2U6OmNyZWF0ZSBhbmQgbWFueSBtb3JlIHVzZXMgb2YgbGl2ZSBy
YW5nZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIx
NTAwNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
RE9NL0RPTVVJS2l0RXh0ZW5zaW9ucy5tbToKKyAgICAgICAgKC1bRE9NTm9kZSByYW5nZU9mQ29u
dGFpbmluZ1BhcmFncmFwaF0pOiBVc2UgbWFrZVNpbXBsZVJhbmdlLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgX2NoYXJhY3RlclJhbmdlQXRQ
b2ludDpdKTogVXBkYXRlIHNpbmNlIHJhbmdlQXRQb2ludCB0YWtlcyBhIFNpbXBsZVJhbmdlLgor
ICAgICAgICAoLVtXZWJGcmFtZSBnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6YW5kTWV0YWRhdGFz
Ol0pOiBVc2UgZG9jdW1lbnQgbWFya2VyIHJhbmdlIGZ1bmN0aW9uLgorCisgICAgICAgICogV2Vi
Vmlldy9XZWJJbW1lZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tOgorICAgICAgICAoLVtXZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyIF9kZWZhdWx0QW5pbWF0aW9uQ29udHJvbGxlcl0pOiBVc2Ug
bWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzLgorICAgICAgICAoLVtXZWJJbW1lZGlhdGVB
Y3Rpb25Db250cm9sbGVyIF9hbmltYXRpb25Db250cm9sbGVyRm9yRGF0YURldGVjdGVkTGlua10p
OiBEaXR0by4KKwogMjAyMC0wNy0zMCAgRGFyaW4gQWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAK
ICAgICAgICAgRnVydGhlciByZWR1Y3Rpb24gaW4gdGhlIHVzZSBvZiBsaXZlIHJhbmdlcywgcGFy
dGljdWxhcmx5IGluIGhlYWRlcnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwppbmRleCAzMzdk
M2Q0NDM0MDM0ODk3NjA2ZjQ1NmU3ZGE2YWUwN2U3NmRiOTFhLi4wMDU4MGYxMmQ5YmI2ODY5OTg2
NTBmYzAyNDhiN2JkOWY0NTZkODBlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMjAtMDctMzAgIERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFJlbW92ZSBSYW5nZTo6Y3JlYXRlIGFuZCBtYW55IG1vcmUgdXNlcyBvZiBsaXZl
IHJhbmdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE1MDA0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBBY2Nlc3NpYmxlVGV4dEltcGwuY3BwOgorICAgICAgICAoQWNjZXNzaWJsZVRleHQ6OnNjcm9s
bFN1YnN0cmluZ1RvKTogVXNlIG1ha2VTaW1wbGVSYW5nZS4KKwogMjAyMC0wNy0zMCAgRGFyaW4g
QWRsZXIgIDxkYXJpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRnVydGhlciByZWR1Y3Rpb24gaW4g
dGhlIHVzZSBvZiBsaXZlIHJhbmdlcywgcGFydGljdWxhcmx5IGluIGhlYWRlcnMKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3QuY3BwCmluZGV4IDQ0ODYyYWI2YTJlYmJmMjdhOGVhZjVlYzQ2ZDcwNThkM2EzMWNhZTku
LjYzNTQ0Y2I1YWFhNWRiNmM0YzFkMzk1ODQ3OTE2NDMwZGQ1ZjUwNWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0LmNwcApAQCAtMjE1MSw3ICsyMTUxLDcgQEAgSW50UmVjdCBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojpib3VuZHNGb3JWaXNpYmxlUG9zaXRpb25SYW5nZShjb25zdCBWaXNpYmxlUG8KICAg
ICAgICAgfQogICAgIH0KICAgICAKLSAgICByZXR1cm4gYm91bmRzRm9yUmVjdHMocmVjdDEsIHJl
Y3QyLCAqbWFrZVJhbmdlKHJhbmdlLnN0YXJ0LCByYW5nZS5lbmQpKTsKKyAgICByZXR1cm4gYm91
bmRzRm9yUmVjdHMocmVjdDEsIHJlY3QyLCAqbWFrZVNpbXBsZVJhbmdlKHJhbmdlKSk7CiB9CiAK
IEludFJlY3QgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6Ym91bmRzRm9yUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIHJhbmdlKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNj
ZXNzaWJpbGl0eS9hdGsvQVhPYmplY3RDYWNoZUF0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0ay9BWE9iamVjdENhY2hlQXRrLmNwcAppbmRleCBkMTU2YWVjZTg2ODVlZDM0
NGM5NTVlZDI3YWQ5MDkwMzYzNjFlODgzLi5hN2RhOWIyZjQxYmFmNDExNzE5ZDJkMzdlMTRmY2Ix
Mzk0YTc2ZTA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0ay9B
WE9iamVjdENhY2hlQXRrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2F0
ay9BWE9iamVjdENhY2hlQXRrLmNwcApAQCAtMzU0LDggKzM1NCw3IEBAIHZvaWQgQVhPYmplY3RD
YWNoZTo6bm9kZVRleHRDaGFuZ2VQbGF0Zm9ybU5vdGlmaWNhdGlvbihBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBvYmplCiAgICAgICAgIC8vIENvbnNpZGVyIHByZXZpb3VzIHRleHQgb2JqZWN0cyB0aGF0
IG1pZ2h0IGJlIHByZXNlbnQgZm9yCiAgICAgICAgIC8vIHRoZSBjdXJyZW50IGFjY2Vzc2liaWxp
dHkgb2JqZWN0IHRvIGVuc3VyZSB3ZSBlbWl0IHRoZQogICAgICAgICAvLyByaWdodCBvZmZzZXQg
KGUuZy4gbXVsdGlsaW5lIHRleHQgYXJlYXMpLgotICAgICAgICBhdXRvIHJhbmdlID0gUmFuZ2U6
OmNyZWF0ZShkb2N1bWVudCwgbm9kZS0+cGFyZW50Tm9kZSgpLCAwLCBub2RlLCAwKTsKLSAgICAg
ICAgb2Zmc2V0VG9FbWl0ID0gb2Zmc2V0ICsgY2hhcmFjdGVyQ291bnQocmFuZ2UuZ2V0KCkpOwor
ICAgICAgICBvZmZzZXRUb0VtaXQgPSBvZmZzZXQgKyBjaGFyYWN0ZXJDb3VudChTaW1wbGVSYW5n
ZSB7IHsgKm5vZGUtPnBhcmVudE5vZGUoKSwgMCB9LCB7ICpub2RlLCAwIH0gfSk7CiAgICAgfQog
CiAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKHdyYXBwZXIsIGRldGFpbC5kYXRhKCksIG9mZnNl
dFRvRW1pdCwgdGV4dFRvRW1pdC5sZW5ndGgoKSwgdGV4dFRvRW1pdC51dGY4KCkuZGF0YSgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vz
c2libGVIeXBlcmxpbmsuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAKaW5kZXggOWFjODkwYmYzNTFkOWZlYzU1MDdiY2Yw
MjA0ZjRiNmM1M2M0ZTM1MS4uMDY4M2UwY2JhODE0ZmJlYWVmYjNkMmM5Njk4YzQwNTM4NGMzMWIz
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNj
ZXNzaWJsZUh5cGVybGluay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9h
dGsvV2ViS2l0QWNjZXNzaWJsZUh5cGVybGluay5jcHAKQEAgLTE1MSw4ICsxNTEsMTEgQEAgc3Rh
dGljIEF0a09iamVjdCogd2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0dldE9iamVjdChBdGtIeXBl
cmxpbmsqIGxpbmssIGdpbnQgaW4KICAgICByZXR1cm4gQVRLX09CSkVDVChhY2Nlc3NpYmxlSHlw
ZXJsaW5rLT5wcml2LT5oeXBlcmxpbmtJbXBsKTsKIH0KIAotc3RhdGljIGdpbnQgcmFuZ2VMZW5n
dGhGb3JPYmplY3QoQWNjZXNzaWJpbGl0eU9iamVjdCYgb2JqLCBSYW5nZSogcmFuZ2UpCitzdGF0
aWMgZ2ludCByYW5nZUxlbmd0aEZvck9iamVjdChBY2Nlc3NpYmlsaXR5T2JqZWN0JiBvYmosIGNv
bnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7CisgICAgaWYgKCFyYW5nZSkKKyAg
ICAgICAgcmV0dXJuIDA7CisKICAgICAvLyBUaGlzIGlzIGdvaW5nIHRvIGJlIHRoZSBhY3R1YWwg
bGVuZ3RoIGluIG1vc3Qgb2YgdGhlIGNhc2VzCiAgICAgaW50IGJhc2VMZW5ndGggPSBjaGFyYWN0
ZXJDb3VudCgqcmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNp
YmxlUG9zaXRpb25zKTsKIApAQCAtMTk2LDggKzE5OSw3IEBAIHN0YXRpYyBnaW50IHdlYmtpdEFj
Y2Vzc2libGVIeXBlcmxpbmtHZXRTdGFydEluZGV4KEF0a0h5cGVybGluayogbGluaykKICAgICBp
ZiAoIXBhcmVudE5vZGUpCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgYXV0byByYW5nZSA9IFJh
bmdlOjpjcmVhdGUobm9kZS0+ZG9jdW1lbnQoKSwgZmlyc3RQb3NpdGlvbkluT3JCZWZvcmVOb2Rl
KHBhcmVudE5vZGUpLCBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9kZSkpOwotICAgIHJl
dHVybiByYW5nZUxlbmd0aEZvck9iamVjdChjb3JlT2JqZWN0LCByYW5nZS5wdHIoKSk7CisgICAg
cmV0dXJuIHJhbmdlTGVuZ3RoRm9yT2JqZWN0KGNvcmVPYmplY3QsIG1ha2VTaW1wbGVSYW5nZShm
aXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUocGFyZW50Tm9kZSksIGZpcnN0UG9zaXRpb25Jbk9y
QmVmb3JlTm9kZShub2RlKSkpOwogfQogCiBzdGF0aWMgZ2ludCB3ZWJraXRBY2Nlc3NpYmxlSHlw
ZXJsaW5rR2V0RW5kSW5kZXgoQXRrSHlwZXJsaW5rKiBsaW5rKQpAQCAtMjE4LDggKzIyMCw3IEBA
IHN0YXRpYyBnaW50IHdlYmtpdEFjY2Vzc2libGVIeXBlcmxpbmtHZXRFbmRJbmRleChBdGtIeXBl
cmxpbmsqIGxpbmspCiAgICAgaWYgKCFwYXJlbnROb2RlKQogICAgICAgICByZXR1cm4gMDsKIAot
ICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKG5vZGUtPmRvY3VtZW50KCksIGZpcnN0UG9z
aXRpb25Jbk9yQmVmb3JlTm9kZShwYXJlbnROb2RlKSwgbGFzdFBvc2l0aW9uSW5PckFmdGVyTm9k
ZShub2RlKSk7Ci0gICAgcmV0dXJuIHJhbmdlTGVuZ3RoRm9yT2JqZWN0KGNvcmVPYmplY3QsIHJh
bmdlLnB0cigpKTsKKyAgICByZXR1cm4gcmFuZ2VMZW5ndGhGb3JPYmplY3QoY29yZU9iamVjdCwg
bWFrZVNpbXBsZVJhbmdlKGZpcnN0UG9zaXRpb25Jbk9yQmVmb3JlTm9kZShwYXJlbnROb2RlKSwg
bGFzdFBvc2l0aW9uSW5PckFmdGVyTm9kZShub2RlKSkpOwogfQogCiBzdGF0aWMgZ2Jvb2xlYW4g
d2Via2l0QWNjZXNzaWJsZUh5cGVybGlua0lzVmFsaWQoQXRrSHlwZXJsaW5rKiBsaW5rKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJs
ZUludGVyZmFjZVRleHQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9hdGsvV2Vi
S2l0QWNjZXNzaWJsZUludGVyZmFjZVRleHQuY3BwCmluZGV4IDExNGZjYTcwZDk3MjgyZDAzYTQ1
MWNkMjgxMmM3YjY2MWZhY2QyYWQuLmQ3MDZiMjc1ZDFiYjZlZDMwNDE0YmE4YTgxMDhlZjU3NjM4
M2NhY2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktp
dEFjY2Vzc2libGVJbnRlcmZhY2VUZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3Np
YmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlSW50ZXJmYWNlVGV4dC5jcHAKQEAgLTQwOSwxMyAr
NDA5LDEzIEBAIHN0YXRpYyB2b2lkIGdldFNlbGVjdGlvbk9mZnNldHNGb3JPYmplY3QoQWNjZXNz
aWJpbGl0eU9iamVjdCogY29yZU9iamVjdCwgVmlzaWJsCiAKICAgICAvLyBDYWxjdWxhdGUgcG9z
aXRpb24gb2YgdGhlIHNlbGVjdGVkIHJhbmdlIGluc2lkZSB0aGUgb2JqZWN0LgogICAgIFBvc2l0
aW9uIHBhcmVudEZpcnN0UG9zaXRpb24gPSBmaXJzdFBvc2l0aW9uSW5PckJlZm9yZU5vZGUobm9k
ZSk7Ci0gICAgYXV0byByYW5nZUluUGFyZW50ID0gUmFuZ2U6OmNyZWF0ZShub2RlLT5kb2N1bWVu
dCgpLCBwYXJlbnRGaXJzdFBvc2l0aW9uLCBub2RlUmFuZ2VTdGFydCk7CisgICAgYXV0byByYW5n
ZUluUGFyZW50ID0gKm1ha2VTaW1wbGVSYW5nZShwYXJlbnRGaXJzdFBvc2l0aW9uLCBub2RlUmFu
Z2VTdGFydCk7CiAKICAgICAvLyBTZXQgdmFsdWVzIGZvciBzdGFydCBvZmZzZXRzIGFuZCBjYWxj
dWxhdGUgaW5pdGlhbCByYW5nZSBsZW5ndGguCiAgICAgLy8gVGhlc2UgdmFsdWVzIG1pZ2h0IGJl
IGFkanVzdGVkIGxhdGVyIHRvIGNvdmVyIHNwZWNpYWwgY2FzZXMuCi0gICAgc3RhcnRPZmZzZXQg
PSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQoY29yZU9iamVjdCwgY2hhcmFjdGVyQ291bnQocmFu
Z2VJblBhcmVudC5nZXQoKSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZp
c2libGVQb3NpdGlvbnMpKTsKLSAgICBhdXRvIG5vZGVSYW5nZSA9IFJhbmdlOjpjcmVhdGUobm9k
ZS0+ZG9jdW1lbnQoKSwgbm9kZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7Ci0gICAgaW50IHJh
bmdlTGVuZ3RoID0gY2hhcmFjdGVyQ291bnQobm9kZVJhbmdlLmdldCgpLCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucyk7CisgICAgc3RhcnRPZmZz
ZXQgPSB3ZWJDb3JlT2Zmc2V0VG9BdGtPZmZzZXQoY29yZU9iamVjdCwgY2hhcmFjdGVyQ291bnQo
cmFuZ2VJblBhcmVudCwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2li
bGVQb3NpdGlvbnMpKTsKKyAgICBhdXRvIG5vZGVSYW5nZSA9ICptYWtlU2ltcGxlUmFuZ2Uobm9k
ZVJhbmdlU3RhcnQsIG5vZGVSYW5nZUVuZCk7CisgICAgaW50IHJhbmdlTGVuZ3RoID0gY2hhcmFj
dGVyQ291bnQobm9kZVJhbmdlLCBUZXh0SXRlcmF0b3JFbWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxs
VmlzaWJsZVBvc2l0aW9ucyk7CiAKICAgICAvLyBTcGVjaWFsIGNhc2VzIHRoYXQgYXJlIG9ubHkg
cmVsZXZhbnQgd2hlbiB3b3JraW5nIHdpdGggKl9FTkQgYm91bmRhcmllcy4KICAgICBpZiAoc2Vs
ZWN0aW9uLmFmZmluaXR5KCkgPT0gVVBTVFJFQU0pIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvYXRrL1dlYktpdEFjY2Vzc2libGVVdGlsLmNwcAppbmRleCAy
YmRhZGJhMjRkZTMxOGY3ZDU5MTEyNDhkNmE5NWEzYzVhMjY4OGM2Li44ZDYyMWJlNzgxZTk5MGMx
ZGM0MDYwZmVkZmIzOTJiNzE2NTc1NGE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L2F0ay9XZWJLaXRBY2Nlc3NpYmxlVXRpbC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9hdGsvV2ViS2l0QWNjZXNzaWJsZVV0aWwuY3BwCkBAIC0yNDYsMTAg
KzI0NiwxMCBAQCBBWENvcmVPYmplY3QqIG9iamVjdEZvY3VzZWRBbmRDYXJldE9mZnNldFVuaWdu
b3JlZChBWENvcmVPYmplY3QqIHJlZmVyZW5jZU9iamVjdAogICAgIGlmIChzdGFydFBvc2l0aW9u
ID09IGVuZFBvc2l0aW9uKQogICAgICAgICBvZmZzZXQgPSAwOwogICAgIGVsc2UgaWYgKCFpc1N0
YXJ0T2ZMaW5lKGVuZFBvc2l0aW9uKSkgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0g
bWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uLnByZXZpb3VzKCkpOworICAgICAg
ICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9u
LnByZXZpb3VzKCkpOwogICAgICAgICBvZmZzZXQgPSAocmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgq
cmFuZ2UsIFRleHRJdGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRp
b25zKSA6IDApICsgMTsKICAgICB9IGVsc2UgewotICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdl
ID0gbWFrZVJhbmdlKHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKKyAgICAgICAgYXV0byBy
YW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydFBvc2l0aW9uLCBlbmRQb3NpdGlvbik7CiAgICAg
ICAgIG9mZnNldCA9IHJhbmdlID8gY2hhcmFjdGVyQ291bnQoKnJhbmdlLCBUZXh0SXRlcmF0b3JF
bWl0c0NoYXJhY3RlcnNCZXR3ZWVuQWxsVmlzaWJsZVBvc2l0aW9ucykgOiAwOwogICAgIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9pb3MvV2ViQWNjZXNzaWJp
bGl0eU9iamVjdFdyYXBwZXJJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQppbmRleCAwNWNhOTIyNjhhYWM1
N2QxZWFiODQxZGFhNWRlNzg0NGM0ODcwNDBkLi5lOGIzNzc0ZTcxODViNjE1YmEzZGRhM2FkMmQw
NDk1MzllOTFhZDAzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lv
cy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQpA
QCAtMTQ4LDcgKzE0OCw3IEBAIEBpbnRlcmZhY2UgV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIg
OiBOU09iamVjdAogCiArIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXRleHRNYXJrZXJX
aXRoVmlzaWJsZVBvc2l0aW9uOihWaXNpYmxlUG9zaXRpb24mKXZpc2libGVQb3MgY2FjaGU6KEFY
T2JqZWN0Q2FjaGUqKWNhY2hlOwogKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0
TWFya2VyV2l0aENoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0JiljaGFyYWN0ZXJPZmZz
ZXQgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlOwotKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRN
YXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOihjb25zdCBSZWZQdHI8UmFuZ2U+
KXJhbmdlIGlzU3RhcnQ6KEJPT0wpaXNTdGFydCBjYWNoZTooQVhPYmplY3RDYWNoZSopY2FjaGU7
CisrIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKXN0YXJ0T3JFbmRUZXh0TWFya2VyRm9y
UmFuZ2U6KGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpcmFuZ2UgaXNTdGFydDooQk9PTClp
c1N0YXJ0IGNhY2hlOihBWE9iamVjdENhY2hlKiljYWNoZTsKIAogQGVuZAogCkBAIC0yMDgsNyAr
MjA4LDcgQEAgKyAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKil0ZXh0TWFya2VyV2l0aENo
YXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2V0JikKICAgICByZXR1cm4gW1tbV2ViQWNjZXNz
aWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtlckRh
dGEgY2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKIH0KIAotKyAoV2ViQWNjZXNzaWJpbGl0eVRl
eHRNYXJrZXIgKilzdGFydE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOihjb25zdCBSZWZQdHI8UmFu
Z2U+KXJhbmdlIGlzU3RhcnQ6KEJPT0wpaXNTdGFydCBjYWNoZTooQVhPYmplY3RDYWNoZSopY2Fj
aGUKKysgKFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopc3RhcnRPckVuZFRleHRNYXJrZXJG
b3JSYW5nZTooY29uc3QgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+JilyYW5nZSBpc1N0YXJ0OihCT09M
KWlzU3RhcnQgY2FjaGU6KEFYT2JqZWN0Q2FjaGUqKWNhY2hlCiB7CiAgICAgaWYgKCFjYWNoZSkK
ICAgICAgICAgcmV0dXJuIG5pbDsKQEAgLTIyODAsMTcgKzIyODAsOCBAQCAtIChOU0FycmF5ICop
YXJyYXlPZlRleHRGb3JUZXh0TWFya2VyczooTlNBcnJheSAqKW1hcmtlcnMgYXR0cmlidXRlZDoo
Qk9PTClhdHRyaQogICAgIFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyKiBlbmRNYXJrZXIgPSBb
bWFya2VycyBvYmplY3RBdEluZGV4OjFdOwogICAgIGlmICghW3N0YXJ0TWFya2VyIGlzS2luZE9m
Q2xhc3M6W1dlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyIGNsYXNzXV0gfHwgIVtlbmRNYXJrZXIg
aXNLaW5kT2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSkKICAgICAg
ICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICAvLyBleHRyYWN0IHRoZSBzdGFydCBhbmQgZW5kIFZp
c2libGVQb3NpdGlvbgotICAgIFZpc2libGVQb3NpdGlvbiBzdGFydFZpc2libGVQb3NpdGlvbiA9
IFtzdGFydE1hcmtlciB2aXNpYmxlUG9zaXRpb25dOwotICAgIGlmIChzdGFydFZpc2libGVQb3Np
dGlvbi5pc051bGwoKSkKLSAgICAgICAgcmV0dXJuIG5pbDsKLSAgICAKLSAgICBWaXNpYmxlUG9z
aXRpb24gZW5kVmlzaWJsZVBvc2l0aW9uID0gW2VuZE1hcmtlciB2aXNpYmxlUG9zaXRpb25dOwot
ICAgIGlmIChlbmRWaXNpYmxlUG9zaXRpb24uaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBuaWw7
CiAKLSAgICBhdXRvIHJhbmdlID0gbWFrZVJhbmdlKHN0YXJ0VmlzaWJsZVBvc2l0aW9uLCBlbmRW
aXNpYmxlUG9zaXRpb24pOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoW3N0YXJ0
TWFya2VyIHZpc2libGVQb3NpdGlvbl0sIFtlbmRNYXJrZXIgdmlzaWJsZVBvc2l0aW9uXSk7CiAg
ICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKIApAQCAtMjM3MywxMCArMjM2NCwx
MCBAQCAtIChOU1JhbmdlKV9jb252ZXJ0VG9OU1JhbmdlOihSYW5nZSAqKWxpdmVSYW5nZQogICAg
IHJldHVybiBOU01ha2VSYW5nZShjaGFyYWN0ZXJDb3VudCh7IHsgKnNjb3BlLCAwIH0sIHJhbmdl
LnN0YXJ0IH0pLCBjaGFyYWN0ZXJDb3VudChyYW5nZSkpOwogfQogCi0tIChSZWZQdHI8UmFuZ2U+
KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZQorLSAoT3B0aW9uYWw8U2ltcGxlUmFu
Z2U+KV9jb252ZXJ0VG9ET01SYW5nZTooTlNSYW5nZSlyYW5nZQogewogICAgIGlmIChyYW5nZS5s
b2NhdGlvbiA9PSBOU05vdEZvdW5kKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIFdURjo6bnVsbG9wdDsKIAogICAgIC8vIG91ciBjcml0aWNhbCBhc3N1bXB0aW9uIGlz
IHRoYXQgd2UgYXJlIG9ubHkgY2FsbGVkIGJ5IGlucHV0IG1ldGhvZHMgdGhhdAogICAgIC8vIGNv
bmNlbnRyYXRlIG9uIGEgZ2l2ZW4gYXJlYSBjb250YWluaW5nIHRoZSBzZWxlY3Rpb24KQEAgLTIz
ODgsOCArMjM3OSw5IEBAIC0gKFJlZlB0cjxSYW5nZT4pX2NvbnZlcnRUb0RPTVJhbmdlOihOU1Jh
bmdlKXJhbmdlCiAgICAgYXV0byBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1lKCktPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBhdXRvIHNj
b3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3QgOiBkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCk7CiAgICAgaWYgKCFzY29wZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
cmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKCpzY29wZSksIHJhbmdlKSk7CisgICAgICAgIHJldHVybiBXVEY6
Om51bGxvcHQ7CisKKyAgICByZXR1cm4gcmVzb2x2ZUNoYXJhY3RlclJhbmdlKG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cygqc2NvcGUpLCByYW5nZSk7CiB9CiAKIC8vIFRoaXMgbWV0aG9k
IGlzIGludGVuZGVkIHRvIHRha2UgYSB0ZXh0IG1hcmtlciByZXByZXNlbnRpbmcgYSBWaXNpYmxl
UG9zaXRpb24gYW5kIGNvbnZlcnQgaXQKQEAgLTI0MTUsNyArMjQwNyw3IEBAIC0gKE5TQXJyYXkg
Kil0ZXh0TWFya2VyUmFuZ2UKIHsKICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0
eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwotICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vy
c0ZvclJhbmdlOmNyZWF0ZUxpdmVSYW5nZShzZWxmLmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJh
bmdlKCkpLmdldCgpXTsKKyAgICByZXR1cm4gW3NlbGYgdGV4dE1hcmtlcnNGb3JSYW5nZTpzZWxm
LmF4QmFja2luZ09iamVjdC0+ZWxlbWVudFJhbmdlKCldOwogfQogCiAvLyBBIG1ldGhvZCB0byBn
ZXQgdGhlIG5vcm1hbGl6ZWQgdGV4dCBjdXJzb3IgcmFuZ2Ugb2YgYW4gZWxlbWVudC4gVXNlZCBp
biBEdW1wUmVuZGVyVHJlZS4KQEAgLTI0ODUsNyArMjQ3Nyw3IEBAIC0gKFdlYkFjY2Vzc2liaWxp
dHlUZXh0TWFya2VyICopdGV4dE1hcmtlckZvclBvc2l0aW9uOihOU0ludGVnZXIpcG9zaXRpb24K
ICAgICBpZiAoIVtzZWxmIF9wcmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1
cm4gbmlsOwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtzZWxmIF9jb252ZXJ0VG9ET01S
YW5nZTpOU01ha2VSYW5nZShwb3NpdGlvbiwgMCldOworICAgIGF1dG8gcmFuZ2UgPSBbc2VsZiBf
Y29udmVydFRvRE9NUmFuZ2U6TlNNYWtlUmFuZ2UocG9zaXRpb24sIDApXTsKICAgICBpZiAoIXJh
bmdlKQogICAgICAgICByZXR1cm4gbmlsOwogCkBAIC0yNjk0LDcgKzI2ODYsNyBAQCAtIChOU0Fy
cmF5ICopbWlzc3BlbGxpbmdUZXh0TWFya2VyUmFuZ2U6KE5TQXJyYXkgKilzdGFydFRleHRNYXJr
ZXJSYW5nZSBmb3J3YXJkOgogICAgICAgICByZXR1cm4gbmlsOwogICAgIGF1dG8gbWlzc3BlbGxp
bmdSYW5nZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5taXNzcGVsbGluZ1JhbmdlKCpzdGFydFJh
bmdlLAogICAgICAgICBmb3J3YXJkID8gQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbjo6TmV4
dCA6IEFjY2Vzc2liaWxpdHlTZWFyY2hEaXJlY3Rpb246OlByZXZpb3VzKTsKLSAgICByZXR1cm4g
W3NlbGYgdGV4dE1hcmtlcnNGb3JSYW5nZTpjcmVhdGVMaXZlUmFuZ2UobWlzc3BlbGxpbmdSYW5n
ZSkuZ2V0KCldOworICAgIHJldHVybiBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOm1pc3NwZWxs
aW5nUmFuZ2VdOwogfQogCiAtIChXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqKW5leHRNYXJr
ZXJGb3JNYXJrZXI6KFdlYkFjY2Vzc2liaWxpdHlUZXh0TWFya2VyICopbWFya2VyCkBAIC0yNzM2
LDE3ICsyNzI4LDE3IEBAIC0gKENHUmVjdClmcmFtZUZvclRleHRNYXJrZXJzOihOU0FycmF5ICop
YXJyYXkKICAgICByZXR1cm4gW3NlbGYgY29udmVydFJlY3RUb1NwYWNlOnJlY3Qgc3BhY2U6QWNj
ZXNzaWJpbGl0eUNvbnZlcnNpb25TcGFjZTo6U2NyZWVuXTsKIH0KIAotLSAoUmVmUHRyPFJhbmdl
PilyYW5nZUZyb21NYXJrZXJzOihOU0FycmF5ICopbWFya2VycyB3aXRoVGV4dDooTlNTdHJpbmcg
Kil0ZXh0CistIChPcHRpb25hbDxTaW1wbGVSYW5nZT4pcmFuZ2VGcm9tTWFya2VyczooTlNBcnJh
eSAqKW1hcmtlcnMgd2l0aFRleHQ6KE5TU3RyaW5nICopdGV4dAogewotICAgIFJlZlB0cjxSYW5n
ZT4gb3JpZ2luYWxSYW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlcnM6bWFya2Vyc107Cisg
ICAgYXV0byBvcmlnaW5hbFJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2VyczptYXJrZXJz
XTsKICAgICBpZiAoIW9yaWdpbmFsUmFuZ2UpCi0gICAgICAgIHJldHVybiBuaWw7CisgICAgICAg
IHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgQVhPYmplY3RDYWNoZSogY2FjaGUgPSBz
ZWxmLmF4QmFja2luZ09iamVjdC0+YXhPYmplY3RDYWNoZSgpOwogICAgIGlmICghY2FjaGUpCi0g
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCi0g
ICAgcmV0dXJuIGNyZWF0ZUxpdmVSYW5nZShjYWNoZS0+cmFuZ2VNYXRjaGVzVGV4dE5lYXJSYW5n
ZSgqb3JpZ2luYWxSYW5nZSwgdGV4dCkpOworICAgIHJldHVybiBjYWNoZS0+cmFuZ2VNYXRjaGVz
VGV4dE5lYXJSYW5nZSgqb3JpZ2luYWxSYW5nZSwgdGV4dCk7CiB9CiAKIC8vIFRoaXMgaXMgb25s
eSB1c2VkIGluIHRoZSBsYXlvdXQgdGVzdC4KQEAgLTI3NjUsNyArMjc1Nyw3IEBAIC0gKE5TQXJy
YXkgKil0ZXh0UmVjdHNGcm9tTWFya2VyczooTlNBcnJheSAqKW1hcmtlcnMgd2l0aFRleHQ6KE5T
U3RyaW5nICopdGV4dAogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgVmVjdG9yPFdlYkNvcmU6
OlNlbGVjdGlvblJlY3Q+IHJlY3RzOwotICAgIHJhbmdlLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNX
aXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHJlY3RzKTsKKyAgICBjcmVhdGVMaXZlUmFuZ2UocmFu
Z2UpLT5jb2xsZWN0U2VsZWN0aW9uUmVjdHNXaXRob3V0VW5pb25JbnRlcmlvckxpbmVzKHJlY3Rz
KTsKICAgICBpZiAocmVjdHMuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIHJl
dHVybiBjcmVhdGVOU0FycmF5KHJlY3RzLCBbJl0gKGF1dG8mIHJlY3QpIHsKQEAgLTI4MTEsMjQg
KzI4MDMsMjQgQEAgLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilwcmV2aW91c01hcmtl
ckZvckNoYXJhY3Rlck9mZnNldDooQ2hhcmFjdGVyT2Zmc2UKICAgICByZXR1cm4gW1tbV2ViQWNj
ZXNzaWJpbGl0eVRleHRNYXJrZXIgYWxsb2NdIGluaXRXaXRoVGV4dE1hcmtlcjomdGV4dE1hcmtl
ckRhdGEgY2FjaGU6Y2FjaGVdIGF1dG9yZWxlYXNlXTsKIH0KIAotLSAoUmVmUHRyPFJhbmdlPily
YW5nZUZvclRleHRNYXJrZXJzOihOU0FycmF5ICopdGV4dE1hcmtlcnMKKy0gKE9wdGlvbmFsPFNp
bXBsZVJhbmdlPilyYW5nZUZvclRleHRNYXJrZXJzOihOU0FycmF5ICopdGV4dE1hcmtlcnMKIHsK
ICAgICBpZiAoW3RleHRNYXJrZXJzIGNvdW50XSAhPSAyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAKICAgICBXZWJBY2Nlc3NpYmls
aXR5VGV4dE1hcmtlciAqc3RhcnRNYXJrZXIgPSBbdGV4dE1hcmtlcnMgb2JqZWN0QXRJbmRleDow
XTsKICAgICBXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciAqZW5kTWFya2VyID0gW3RleHRNYXJr
ZXJzIG9iamVjdEF0SW5kZXg6MV07CiAgICAgCiAgICAgaWYgKCFbc3RhcnRNYXJrZXIgaXNLaW5k
T2ZDbGFzczpbV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgY2xhc3NdXSB8fCAhW2VuZE1hcmtl
ciBpc0tpbmRPZkNsYXNzOltXZWJBY2Nlc3NpYmlsaXR5VGV4dE1hcmtlciBjbGFzc11dKQotICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAgICAK
ICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0LT5heE9iamVj
dENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgQ2hhcmFjdGVyT2Zmc2V0IHN0YXJ0
Q2hhcmFjdGVyT2Zmc2V0ID0gW3N0YXJ0TWFya2VyIGNoYXJhY3Rlck9mZnNldF07CiAgICAgQ2hh
cmFjdGVyT2Zmc2V0IGVuZENoYXJhY3Rlck9mZnNldCA9IFtlbmRNYXJrZXIgY2hhcmFjdGVyT2Zm
c2V0XTsKLSAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKGNhY2hlLT5yYW5nZUZvclVub3JkZXJl
ZENoYXJhY3Rlck9mZnNldHMoc3RhcnRDaGFyYWN0ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9mZnNl
dCkpOworICAgIHJldHVybiBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFyYWN0ZXJPZmZzZXRz
KHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0LCBlbmRDaGFyYWN0ZXJPZmZzZXQpOwogfQogCiAtIChOU0lu
dGVnZXIpbGVuZ3RoRm9yVGV4dE1hcmtlcnM6KE5TQXJyYXkgKil0ZXh0TWFya2VycwpAQCAtMjg0
OSw3ICsyODQxLDcgQEAgLSAoV2ViQWNjZXNzaWJpbGl0eVRleHRNYXJrZXIgKilzdGFydE9yRW5k
VGV4dE1hcmtlckZvclRleHRNYXJrZXJzOihOU0FycmF5ICopdGUKICAgICBpZiAoIVtzZWxmIF9w
cmVwYXJlQWNjZXNzaWJpbGl0eUNhbGxdKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIAotICAg
IFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOnRleHRNYXJr
ZXJzXTsKKyAgICBhdXRvIHJhbmdlID0gW3NlbGYgcmFuZ2VGb3JUZXh0TWFya2Vyczp0ZXh0TWFy
a2Vyc107CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKQEAgLTI4
NjEsMTEgKzI4NTMsMTAgQEAgLSAoTlNBcnJheSAqKXRleHRNYXJrZXJSYW5nZUZvck1hcmtlcnM6
KE5TQXJyYXkgKil0ZXh0TWFya2VycwogICAgIGlmICghW3NlbGYgX3ByZXBhcmVBY2Nlc3NpYmls
aXR5Q2FsbF0pCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAgCi0gICAgUmVmUHRyPFJhbmdlPiBy
YW5nZSA9IFtzZWxmIHJhbmdlRm9yVGV4dE1hcmtlcnM6dGV4dE1hcmtlcnNdOwotICAgIHJldHVy
biBbc2VsZiB0ZXh0TWFya2Vyc0ZvclJhbmdlOnJhbmdlXTsKKyAgICByZXR1cm4gW3NlbGYgdGV4
dE1hcmtlcnNGb3JSYW5nZTpbc2VsZiByYW5nZUZvclRleHRNYXJrZXJzOnRleHRNYXJrZXJzXV07
CiB9CiAKLS0gKE5TQXJyYXkgKil0ZXh0TWFya2Vyc0ZvclJhbmdlOihSZWZQdHI8UmFuZ2U+KXJh
bmdlCistIChOU0FycmF5ICopdGV4dE1hcmtlcnNGb3JSYW5nZTooY29uc3QgT3B0aW9uYWw8U2lt
cGxlUmFuZ2U+JilyYW5nZQogewogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBuaWw7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L21hYy9XZWJBY2Nlc3Np
YmlsaXR5T2JqZWN0V3JhcHBlck1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCmluZGV4IGMzNjFjNDAxMWY3
NDdlMDk0NDY0ODY0ZjNmY2E0MTc4Mjc4ZjVkYjAuLmFmODQ2YzE3ZjY2NjllYWE3OTg1NzIxYWEw
MjIzZDRkZGNmZjFjNGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
bWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2FjY2Vzc2liaWxpdHkvbWFjL1dlYkFjY2Vzc2liaWxpdHlPYmplY3RXcmFwcGVyTWFjLm1t
CkBAIC02OTMsNyArNjkzLDcgQEAgc3RhdGljIEFjY2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uIGFj
Y2Vzc2liaWxpdHlUZXh0T3BlcmF0aW9uRm9yUGFyYW1ldGVyaXplZEF0dHIKIAogICAgIGlmIChb
bWFya2VyUmFuZ2VzIGlzS2luZE9mQ2xhc3M6W05TQXJyYXkgY2xhc3NdXSkgewogICAgICAgICBv
cGVyYXRpb24udGV4dFJhbmdlcyA9IG1ha2VWZWN0b3IobWFya2VyUmFuZ2VzLCBbd3JhcHBlcl0g
KGlkIG1hcmtlclJhbmdlKSB7Ci0gICAgICAgICAgICByZXR1cm4gbWFrZVNpbXBsZVJhbmdlKFt3
cmFwcGVyIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOm1hcmtlclJhbmdlXSk7CisgICAgICAgICAg
ICByZXR1cm4gW3dyYXBwZXIgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6bWFya2VyUmFuZ2VdOwog
ICAgICAgICB9KTsKICAgICB9CiAKQEAgLTcxNCw5ICs3MTQsOSBAQCBzdGF0aWMgQWNjZXNzaWJp
bGl0eVRleHRPcGVyYXRpb24gYWNjZXNzaWJpbGl0eVRleHRPcGVyYXRpb25Gb3JQYXJhbWV0ZXJp
emVkQXR0cgogICAgIHJldHVybiBvcGVyYXRpb247CiB9CiAKLXN0YXRpYyBzdGQ6OnBhaXI8UmVm
UHRyPFJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gYWNjZXNzaWJpbGl0eU1p
c3NwZWxsaW5nU2VhcmNoQ3JpdGVyaWFGb3JQYXJhbWV0ZXJpemVkQXR0cmlidXRlKFdlYkFjY2Vz
c2liaWxpdHlPYmplY3RXcmFwcGVyICpvYmplY3QsIGNvbnN0IE5TRGljdGlvbmFyeSAqcGFyYW1z
KQorc3RhdGljIHN0ZDo6cGFpcjxPcHRpb25hbDxTaW1wbGVSYW5nZT4sIEFjY2Vzc2liaWxpdHlT
ZWFyY2hEaXJlY3Rpb24+IGFjY2Vzc2liaWxpdHlNaXNzcGVsbGluZ1NlYXJjaENyaXRlcmlhRm9y
UGFyYW1ldGVyaXplZEF0dHJpYnV0ZShXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlciAqb2Jq
ZWN0LCBjb25zdCBOU0RpY3Rpb25hcnkgKnBhcmFtcykKIHsKLSAgICBzdGQ6OnBhaXI8UmVmUHRy
PFJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlvbj4gY3JpdGVyaWE7CisgICAgc3Rk
OjpwYWlyPE9wdGlvbmFsPFNpbXBsZVJhbmdlPiwgQWNjZXNzaWJpbGl0eVNlYXJjaERpcmVjdGlv
bj4gY3JpdGVyaWE7CiAKICAgICBjcml0ZXJpYS5maXJzdCA9IFtvYmplY3QgcmFuZ2VGb3JUZXh0
TWFya2VyUmFuZ2U6W3BhcmFtcyBvYmplY3RGb3JLZXk6QCJBWFN0YXJ0VGV4dE1hcmtlclJhbmdl
Il1dOwogCkBAIC03NzcsMjYgKzc3NywyNiBAQCBzdGF0aWMgQWNjZXNzaWJpbGl0eU9iamVjdCog
YWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXIoQVhPYmplY3RDYWNoZSogY2FjaAogICAg
IHJldHVybiBjYWNoZS0+YWNjZXNzaWJpbGl0eU9iamVjdEZvclRleHRNYXJrZXJEYXRhKHRleHRN
YXJrZXJEYXRhKTsKIH0KIAotLSAoaWQpdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOihjb25zdCBS
ZWZQdHI8UmFuZ2U+KXJhbmdlCistIChpZCl0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6KGNvbnN0
IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYpcmFuZ2UKIHsKICAgICBpZiAoYXV0byogYmFja2luZ09i
amVjdCA9IHNlbGYuYXhCYWNraW5nT2JqZWN0KQogICAgICAgICByZXR1cm4gdGV4dE1hcmtlclJh
bmdlRnJvbVJhbmdlKGJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2FjaGUoKSwgcmFuZ2UpOwogICAg
IHJldHVybiBuaWw7CiB9CiAKLXN0YXRpYyBpZCB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoQVhP
YmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IFJlZlB0cjxSYW5nZT4gcmFuZ2UpCitzdGF0aWMgaWQg
dGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlKEFYT2JqZWN0Q2FjaGUqIGNhY2hlLCBjb25zdCBPcHRp
b25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQogewogICAgIGlkIHN0YXJ0VGV4dE1hcmtlciA9IHN0
YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoY2FjaGUsIHJhbmdlLCB0cnVlKTsKICAgICBpZCBl
bmRUZXh0TWFya2VyID0gc3RhcnRPckVuZFRleHRtYXJrZXJGb3JSYW5nZShjYWNoZSwgcmFuZ2Us
IGZhbHNlKTsKICAgICByZXR1cm4gdGV4dE1hcmtlclJhbmdlRnJvbU1hcmtlcnMoc3RhcnRUZXh0
TWFya2VyLCBlbmRUZXh0TWFya2VyKTsKIH0KIAotLSAoaWQpc3RhcnRPckVuZFRleHRNYXJrZXJG
b3JSYW5nZTooY29uc3QgUmVmUHRyPFJhbmdlPilyYW5nZSBpc1N0YXJ0OihCT09MKWlzU3RhcnQK
Ky0gKGlkKXN0YXJ0T3JFbmRUZXh0TWFya2VyRm9yUmFuZ2U6KGNvbnN0IE9wdGlvbmFsPFNpbXBs
ZVJhbmdlPiYpcmFuZ2UgaXNTdGFydDooQk9PTClpc1N0YXJ0CiB7CiAgICAgcmV0dXJuIHN0YXJ0
T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2Uoc2VsZi5heEJhY2tpbmdPYmplY3QtPmF4T2JqZWN0Q2Fj
aGUoKSwgcmFuZ2UsIGlzU3RhcnQpOwogfQogCi1zdGF0aWMgaWQgc3RhcnRPckVuZFRleHRtYXJr
ZXJGb3JSYW5nZShBWE9iamVjdENhY2hlKiBjYWNoZSwgUmVmUHRyPFJhbmdlPiByYW5nZSwgYm9v
bCBpc1N0YXJ0KQorc3RhdGljIGlkIHN0YXJ0T3JFbmRUZXh0bWFya2VyRm9yUmFuZ2UoQVhPYmpl
Y3RDYWNoZSogY2FjaGUsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UsIGJvb2wg
aXNTdGFydCkKIHsKICAgICBpZiAoIWNhY2hlKQogICAgICAgICByZXR1cm4gbmlsOwpAQCAtODY0
LDI0ICs4NjQsMjQgQEAgc3RhdGljIGlkIHRleHRNYXJrZXJGb3JDaGFyYWN0ZXJPZmZzZXQoQVhP
YmplY3RDYWNoZSogY2FjaGUsIGNvbnN0IENoYXJhY3Rlck9mZnMKICAgICByZXR1cm4gQ0ZCcmlk
Z2luZ1JlbGVhc2UoQVhUZXh0TWFya2VyQ3JlYXRlKGtDRkFsbG9jYXRvckRlZmF1bHQsIChjb25z
dCBVSW50OCopJnRleHRNYXJrZXJEYXRhLCBzaXplb2YodGV4dE1hcmtlckRhdGEpKSk7CiB9CiAK
LS0gKFJlZlB0cjxSYW5nZT4pcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6KGlkKXRleHRNYXJrZXJS
YW5nZQorLSAoT3B0aW9uYWw8U2ltcGxlUmFuZ2U+KXJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOihp
ZCl0ZXh0TWFya2VyUmFuZ2UKIHsKICAgICBpZiAoIXRleHRNYXJrZXJSYW5nZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAg
aWQgc3RhcnRUZXh0TWFya2VyID0gQVhUZXh0TWFya2VyUmFuZ2VTdGFydCh0ZXh0TWFya2VyUmFu
Z2UpOwogICAgIGlkIGVuZFRleHRNYXJrZXIgPSBBWFRleHRNYXJrZXJSYW5nZUVuZCh0ZXh0TWFy
a2VyUmFuZ2UpOwogICAgIAogICAgIGlmICghc3RhcnRUZXh0TWFya2VyIHx8ICFlbmRUZXh0TWFy
a2VyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9w
dDsKICAgICAKICAgICBBWE9iamVjdENhY2hlKiBjYWNoZSA9IHNlbGYuYXhCYWNraW5nT2JqZWN0
LT5heE9iamVjdENhY2hlKCk7CiAgICAgaWYgKCFjYWNoZSkKLSAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiAgICAgCiAgICAgQ2hhcmFjdGVyT2Zm
c2V0IHN0YXJ0Q2hhcmFjdGVyT2Zmc2V0ID0gW3NlbGYgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1h
cmtlcjpzdGFydFRleHRNYXJrZXJdOwogICAgIENoYXJhY3Rlck9mZnNldCBlbmRDaGFyYWN0ZXJP
ZmZzZXQgPSBbc2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOmVuZFRleHRNYXJrZXJd
OwotICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoY2FjaGUtPnJhbmdlRm9yVW5vcmRlcmVkQ2hh
cmFjdGVyT2Zmc2V0cyhzdGFydENoYXJhY3Rlck9mZnNldCwgZW5kQ2hhcmFjdGVyT2Zmc2V0KSk7
CisgICAgcmV0dXJuIGNhY2hlLT5yYW5nZUZvclVub3JkZXJlZENoYXJhY3Rlck9mZnNldHMoc3Rh
cnRDaGFyYWN0ZXJPZmZzZXQsIGVuZENoYXJhY3Rlck9mZnNldCk7CiB9CiAKIHN0YXRpYyBDaGFy
YWN0ZXJPZmZzZXQgY2hhcmFjdGVyT2Zmc2V0Rm9yVGV4dE1hcmtlcihBWE9iamVjdENhY2hlKiBj
YWNoZSwgQ0ZUeXBlUmVmIHRleHRNYXJrZXIpCkBAIC0xMjQyLDcgKzEyNDIsNyBAQCAtIChOU0F0
dHJpYnV0ZWRTdHJpbmcgKilkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZToo
aWQpdGV4dE1hcmtlclJhbgogICAgICAgICBpZiAoIWJhY2tpbmdPYmplY3QpCiAgICAgICAgICAg
ICByZXR1cm4gbmlsOwogCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gcmFuZ2UgPSBbcHJvdGVjdGVk
U2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2VyUmFuZ2VdOworICAgICAgICBh
dXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1h
cmtlclJhbmdlXTsKICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgIHJldHVybiBuaWw7
CiAgICAgICAgIGF1dG8gYXR0clN0cmluZyA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0XSk7CkBAIC0zNjE4LDcgKzM2MTgsNyBAQCBBTExPV19ERVBSRUNB
VEVEX0lNUExFTUVOVEFUSU9OU19FTkQKIC0gKE5TQXR0cmlidXRlZFN0cmluZyAqKWRvQVhBdHRy
aWJ1dGVkU3RyaW5nRm9yUmFuZ2U6KE5TUmFuZ2UpcmFuZ2UKIHsKICAgICBhdXRvIHdlYlJhbmdl
ID0gc2VsZi5heEJhY2tpbmdPYmplY3QtPnJhbmdlRm9yUGxhaW5UZXh0UmFuZ2UocmFuZ2UpOwot
ICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0ZvclRleHRNYXJrZXJSYW5nZTpb
c2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHdlYlJhbmdlKV0g
c3BlbGxDaGVjazpZRVNdOworICAgIHJldHVybiBbc2VsZiBkb0FYQXR0cmlidXRlZFN0cmluZ0Zv
clRleHRNYXJrZXJSYW5nZTpbc2VsZiB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6d2ViUmFuZ2Vd
IHNwZWxsQ2hlY2s6WUVTXTsKIH0KIAogLSAoTlNSYW5nZSlfY29udmVydFRvTlNSYW5nZTooUmFu
Z2UqKXJhbmdlCkBAIC0zNzg3LDcgKzM3ODcsNyBAQCAtIChpZCl0ZXh0TWFya2VyUmFuZ2VBdFRl
eHRNYXJrZXI6KGlkKXRleHRNYXJrZXIgZm9yVW5pdDooVGV4dFVuaXQpdGV4dFVuaXQKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgcmV0dXJuIHRleHRNYXJrZXJSYW5n
ZUZyb21SYW5nZShjYWNoZSwgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKSk7CisgICAgICAgIHJldHVy
biB0ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2UoY2FjaGUsIHJhbmdlKTsKICAgICB9KTsKIH0KIApA
QCAtMzk1NCw3ICszOTU0LDcgQEAgQUxMT1dfREVQUkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5E
CiAgICAgICAgICAgICBpZiAocmFuZ2VzLmlzRW1wdHkoKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gbmlsOwogICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZU5TQXJyYXkocmFuZ2VzLCBbJl0gKGF1
dG8mIHJhbmdlKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRN
YXJrZXJSYW5nZUZyb21SYW5nZTpjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpXTsKKyAgICAgICAgICAg
ICAgICByZXR1cm4gW3Byb3RlY3RlZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOnJhbmdl
XTsKICAgICAgICAgICAgIH0pLmF1dG9yZWxlYXNlKCk7CiAgICAgICAgIH0pOwogICAgIH0KQEAg
LTQwMzAsNyArNDAzMCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICAgICAgICAgIHJldHVybiBuaWw7CiAKICAgICAgICAgICAgIGlmIChhdXRvIG1pc3Nw
ZWxsaW5nUmFuZ2UgPSBiYWNraW5nT2JqZWN0LT5taXNzcGVsbGluZ1JhbmdlKCpjcml0ZXJpYS5m
aXJzdCwgY3JpdGVyaWEuc2Vjb25kKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gW3Byb3RlY3Rl
ZFNlbGYgdGV4dE1hcmtlclJhbmdlRnJvbVJhbmdlOmNyZWF0ZUxpdmVSYW5nZSgqbWlzc3BlbGxp
bmdSYW5nZSldOworICAgICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tUmFuZ2U6Km1pc3NwZWxsaW5nUmFuZ2VdOwogICAgICAgICAgICAgcmV0dXJu
IG5pbDsKICAgICAgICAgfSk7CiAgICAgfQpAQCAtNDA3MCw3ICs0MDcwLDcgQEAgQUxMT1dfREVQ
UkVDQVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAKICAgICBpZiAoW2F0dHJpYnV0ZSBpc0VxdWFs
VG9TdHJpbmc6QCJBWFRleHRNYXJrZXJSYW5nZUZvclVJRWxlbWVudCJdKSB7CiAgICAgICAgIHJl
dHVybiBBY2Nlc3NpYmlsaXR5OjpyZXRyaWV2ZUF1dG9yZWxlYXNlZFZhbHVlRnJvbU1haW5UaHJl
YWQ8aWQ+KFsmdWlFbGVtZW50LCBwcm90ZWN0ZWRTZWxmID0gcmV0YWluUHRyKHNlbGYpXSAoKSAt
PiBSZXRhaW5QdHI8aWQ+IHsKLSAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0
TWFya2VyUmFuZ2VGcm9tUmFuZ2U6Y3JlYXRlTGl2ZVJhbmdlKHVpRWxlbWVudC5nZXQoKS0+ZWxl
bWVudFJhbmdlKCkpXTsKKyAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0ZXh0TWFy
a2VyUmFuZ2VGcm9tUmFuZ2U6dWlFbGVtZW50LmdldCgpLT5lbGVtZW50UmFuZ2UoKV07CiAgICAg
ICAgIH0pOwogICAgIH0KIApAQCAtNDIyMiw3ICs0MjIyLDcgQEAgQUxMT1dfREVQUkVDQVRFRF9J
TVBMRU1FTlRBVElPTlNfRU5ECiAgICAgICAgICAgICBDaGFyYWN0ZXJPZmZzZXQgY2hhcmFjdGVy
T2Zmc2V0MSA9IFtwcm90ZWN0ZWRTZWxmIGNoYXJhY3Rlck9mZnNldEZvclRleHRNYXJrZXI6dGV4
dE1hcmtlcjFdOwogICAgICAgICAgICAgQ2hhcmFjdGVyT2Zmc2V0IGNoYXJhY3Rlck9mZnNldDIg
PSBbcHJvdGVjdGVkU2VsZiBjaGFyYWN0ZXJPZmZzZXRGb3JUZXh0TWFya2VyOnRleHRNYXJrZXIy
XTsKICAgICAgICAgICAgIGF1dG8gcmFuZ2UgPSBjYWNoZS0+cmFuZ2VGb3JVbm9yZGVyZWRDaGFy
YWN0ZXJPZmZzZXRzKGNoYXJhY3Rlck9mZnNldDEsIGNoYXJhY3Rlck9mZnNldDIpOwotICAgICAg
ICAgICAgcmV0dXJuIFtwcm90ZWN0ZWRTZWxmIHRleHRNYXJrZXJSYW5nZUZyb21SYW5nZTpjcmVh
dGVMaXZlUmFuZ2UocmFuZ2UpXTsKKyAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiB0
ZXh0TWFya2VyUmFuZ2VGcm9tUmFuZ2U6cmFuZ2VdOwogICAgICAgICB9KTsKICAgICB9CiAKQEAg
LTQzMDQsNyArNDMwNCw3IEBAIEFMTE9XX0RFUFJFQ0FURURfSU1QTEVNRU5UQVRJT05TX0VORAog
ICAgICAgICAgICAgaWYgKCFiYWNraW5nT2JqZWN0KQogICAgICAgICAgICAgICAgIHJldHVybiAw
OwogCi0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFu
Z2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1hcmtlclJhbmdlXTsKKyAgICAgICAgICAgIGF1dG8g
cmFuZ2UgPSBbcHJvdGVjdGVkU2VsZiByYW5nZUZvclRleHRNYXJrZXJSYW5nZTp0ZXh0TWFya2Vy
UmFuZ2VdOwogICAgICAgICAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgICAgICAgICByZXR1cm4g
MDsKICAgICAgICAgICAgIHJldHVybiBBWE9iamVjdENhY2hlOjpsZW5ndGhGb3JSYW5nZShTaW1w
bGVSYW5nZSB7ICpyYW5nZSB9KTsKQEAgLTQzMTcsMTQgKzQzMTcsMTQgQEAgQUxMT1dfREVQUkVD
QVRFRF9JTVBMRU1FTlRBVElPTlNfRU5ECiAgICAgLy8gVXNlZCBvbmx5IGJ5IER1bXBSZW5kZXJU
cmVlIChzbyBmYXIpLgogICAgIGlmIChbYXR0cmlidXRlIGlzRXF1YWxUb1N0cmluZzpAIkFYU3Rh
cnRUZXh0TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vz
c2liaWxpdHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0
ZXh0TWFya2VyUmFuZ2UsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJl
dGFpblB0cjxpZD4gewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0
ZWRTZWxmIHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgICAg
ICAgICBhdXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6
dGV4dE1hcmtlclJhbmdlXTsKICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBzdGFy
dE9yRW5kVGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6WUVTXTsKICAgICAgICAgfSk7
CiAgICAgfQogCiAgICAgaWYgKFthdHRyaWJ1dGUgaXNFcXVhbFRvU3RyaW5nOkAiQVhFbmRUZXh0
TWFya2VyRm9yVGV4dE1hcmtlclJhbmdlIl0pIHsKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHk6OnJldHJpZXZlQXV0b3JlbGVhc2VkVmFsdWVGcm9tTWFpblRocmVhZDxpZD4oWyZ0ZXh0TWFy
a2VyUmFuZ2UsIHByb3RlY3RlZFNlbGYgPSByZXRhaW5QdHIoc2VsZildICgpIC0+IFJldGFpblB0
cjxpZD4gewotICAgICAgICAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IFtwcm90ZWN0ZWRTZWxm
IHJhbmdlRm9yVGV4dE1hcmtlclJhbmdlOnRleHRNYXJrZXJSYW5nZV07CisgICAgICAgICAgICBh
dXRvIHJhbmdlID0gW3Byb3RlY3RlZFNlbGYgcmFuZ2VGb3JUZXh0TWFya2VyUmFuZ2U6dGV4dE1h
cmtlclJhbmdlXTsKICAgICAgICAgICAgIHJldHVybiBbcHJvdGVjdGVkU2VsZiBzdGFydE9yRW5k
VGV4dE1hcmtlckZvclJhbmdlOnJhbmdlIGlzU3RhcnQ6Tk9dOwogICAgICAgICB9KTsKICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250cm9sbGVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCmlu
ZGV4IDYwZGU2MzBlYjBiYjYwZTdjZGNmODdiZjJlYzg4ZWQ4NWQwYmRhMzYuLjY4Y2M3NjVmMDMw
NjdlMmE3OGY2ZGE1MTRjZWM3YmZkMmNkNjI2NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuY3BwCkBAIC0xMDUsOCArMTA1LDcgQEAgdm9pZCBE
b2N1bWVudE1hcmtlckNvbnRyb2xsZXI6OmZpbHRlck1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2Um
IHJhbmdlLCBjb25zdCBGdW4KIHN0YXRpYyB2b2lkIHVwZGF0ZVJlbmRlcmVkUmVjdHNGb3JNYXJr
ZXIoUmVuZGVyZWREb2N1bWVudE1hcmtlciYgbWFya2VyLCBOb2RlJiBub2RlKQogewogICAgIEFT
U0VSVCghbm9kZS5kb2N1bWVudCgpLnZpZXcoKSB8fCAhbm9kZS5kb2N1bWVudCgpLnZpZXcoKS0+
bmVlZHNMYXlvdXQoKSk7Ci0gICAgYXV0byByYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyBub2RlLCBt
YXJrZXIuc3RhcnRPZmZzZXQoKSB9LCB7IG5vZGUsIG1hcmtlci5lbmRPZmZzZXQoKSB9IH07Ci0g
ICAgbWFya2VyLnNldFVuY2xpcHBlZEFic29sdXRlUmVjdHMoYm91bmRpbmdCb3hlcyhSZW5kZXJP
YmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKHJhbmdlLCB0cnVlKSkpOworICAgIG1hcmtlci5zZXRV
bmNsaXBwZWRBYnNvbHV0ZVJlY3RzKGJvdW5kaW5nQm94ZXMoUmVuZGVyT2JqZWN0OjphYnNvbHV0
ZVRleHRRdWFkcyhyYW5nZShub2RlLCBtYXJrZXIpLCB0cnVlKSkpOwogfQogCiB2b2lkIERvY3Vt
ZW50TWFya2VyQ29udHJvbGxlcjo6aW52YWxpZGF0ZVJlY3RzRm9yQWxsTWFya2VycygpCkBAIC02
NjMsNiArNjYyLDEzIEBAIHZvaWQgcmVtb3ZlTWFya2Vycyhjb25zdCBTaW1wbGVSYW5nZSYgcmFu
Z2UsIE9wdGlvblNldDxEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwCiAgICAgcmFuZ2Uuc3RhcnQu
Y29udGFpbmVyLT5kb2N1bWVudCgpLm1hcmtlcnMoKS5yZW1vdmVNYXJrZXJzKHJhbmdlLCB0eXBl
cywgcG9saWN5KTsKIH0KIAorU2ltcGxlUmFuZ2UgcmFuZ2UoTm9kZSYgbm9kZSwgY29uc3QgRG9j
dW1lbnRNYXJrZXImIG1hcmtlcikKK3sKKyAgICB1bnNpZ25lZCBzdGFydE9mZnNldCA9IG1hcmtl
ci5zdGFydE9mZnNldCgpOworICAgIHVuc2lnbmVkIGVuZE9mZnNldCA9IG1hcmtlci5lbmRPZmZz
ZXQoKTsKKyAgICByZXR1cm4geyB7IG5vZGUsIHN0YXJ0T2Zmc2V0IH0sIHsgbm9kZSwgZW5kT2Zm
c2V0IH0gfTsKK30KKwogI2lmIEVOQUJMRShUUkVFX0RFQlVHR0lORykKIAogdm9pZCBEb2N1bWVu
dE1hcmtlckNvbnRyb2xsZXI6OnNob3dNYXJrZXJzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudE1hcmtlckNvbnRyb2xsZXIuaAppbmRleCBhYWVmZjA1YjBkODRmOWUyOTdk
ODgzMGVmMDJkMTg1NWYxOGFhNTAzLi4wYjQ0ZTJjMmVkM2JlZTUzNDNlYjc2NDg3ZGUyYjVmNjIw
NDBjZDcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnRNYXJrZXJDb250
cm9sbGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50TWFya2VyQ29udHJvbGxl
ci5oCkBAIC0xMTUsNiArMTE1LDggQEAgdm9pZCBhZGRNYXJrZXIoY29uc3QgU2ltcGxlUmFuZ2Um
LCBEb2N1bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgY29uc3QgRG9jdW1lbnRNYXIKIHZvaWQgYWRk
TWFya2VyKFRleHQmLCB1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoLCBEb2N1
bWVudE1hcmtlcjo6TWFya2VyVHlwZSwgRG9jdW1lbnRNYXJrZXI6OkRhdGEmJiA9IHsgfSk7CiB2
b2lkIHJlbW92ZU1hcmtlcnMoY29uc3QgU2ltcGxlUmFuZ2UmLCBPcHRpb25TZXQ8RG9jdW1lbnRN
YXJrZXI6Ok1hcmtlclR5cGU+ID0gRG9jdW1lbnRNYXJrZXI6OmFsbE1hcmtlcnMoKSwgUmVtb3Zl
UGFydGlhbGx5T3ZlcmxhcHBpbmdNYXJrZXIgPSBSZW1vdmVQYXJ0aWFsbHlPdmVybGFwcGluZ01h
cmtlcjo6Tm8pOwogCitXRUJDT1JFX0VYUE9SVCBTaW1wbGVSYW5nZSByYW5nZShOb2RlJiwgY29u
c3QgRG9jdW1lbnRNYXJrZXImKTsKKwogaW5saW5lIGJvb2wgRG9jdW1lbnRNYXJrZXJDb250cm9s
bGVyOjpoYXNNYXJrZXJzKCkgY29uc3QKIHsKICAgICBBU1NFUlQobV9tYXJrZXJzLmlzRW1wdHko
KSA9PSAhbV9wb3NzaWJseUV4aXN0aW5nTWFya2VyVHlwZXMuY29udGFpbnNBbnkoRG9jdW1lbnRN
YXJrZXI6OmFsbE1hcmtlcnMoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Bv
c2l0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAKaW5kZXggOWUyZTJk
ZWIxODI4NGM3OWMxMWEzNDRlMDQ3N2M2NjRkZjE3N2QyZC4uNGIyNjQ5OTBmOGMyMWNiZDkzZmZm
YzE4MTc3Y2UxM2FmNTQwYTI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0
aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUG9zaXRpb24uY3BwCkBAIC00Miw3ICs0
Miw2IEBACiAjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk5vZGVUcmF2ZXJzYWwuaCIK
ICNpbmNsdWRlICJQb3NpdGlvbkl0ZXJhdG9yLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKICNpbmNs
dWRlICJSZW5kZXJCbG9jay5oIgogI2luY2x1ZGUgIlJlbmRlckZsZXhpYmxlQm94LmgiCiAjaW5j
bHVkZSAiUmVuZGVyR3JpZC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1Jhbmdl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9SYW5nZS5jcHAKaW5kZXggOWI3YTFhNjIxMjE5NWEy
ZTQ3NDhjYjI5NzE5NDRjMTY2MzI4MDA5Ni4uMjY2MTg1ZWJkNzk1MmRjMjJhNWNhN2U0NDI1YmU5
NTUxMmQ0ZjFiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuY3BwCkBAIC04OCw0MiArODgsNiBAQCBSZWY8UmFu
Z2U+IFJhbmdlOjpjcmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQpCiAgICAgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgUmFuZ2Uob3duZXJEb2N1bWVudCkpOwogfQogCi1pbmxpbmUgUmFuZ2U6OlJh
bmdlKERvY3VtZW50JiBvd25lckRvY3VtZW50LCBOb2RlKiBzdGFydENvbnRhaW5lciwgaW50IHN0
YXJ0T2Zmc2V0LCBOb2RlKiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpCi0gICAgOiBtX293
bmVyRG9jdW1lbnQob3duZXJEb2N1bWVudCkKLSAgICAsIG1fc3RhcnQoJm93bmVyRG9jdW1lbnQp
Ci0gICAgLCBtX2VuZCgmb3duZXJEb2N1bWVudCkKLXsKLSNpZm5kZWYgTkRFQlVHCi0gICAgcmFu
Z2VDb3VudGVyLmluY3JlbWVudCgpOwotI2VuZGlmCi0KLSAgICBtX293bmVyRG9jdW1lbnQtPmF0
dGFjaFJhbmdlKCp0aGlzKTsKLQotICAgIC8vIFNpbXBseSBzZXR0aW5nIHRoZSBjb250YWluZXJz
IGFuZCBvZmZzZXRzIGRpcmVjdGx5IHdvdWxkIG5vdCBkbyBhbnkgb2YgdGhlIGNoZWNraW5nCi0g
ICAgLy8gdGhhdCBzZXRTdGFydCBhbmQgc2V0RW5kIGRvLCBzbyB3ZSBjYWxsIHRob3NlIGZ1bmN0
aW9ucy4KLSAgICBpZiAoc3RhcnRDb250YWluZXIpCi0gICAgICAgIHNldFN0YXJ0KCpzdGFydENv
bnRhaW5lciwgc3RhcnRPZmZzZXQpOwotICAgIGlmIChlbmRDb250YWluZXIpCi0gICAgICAgIHNl
dEVuZCgqZW5kQ29udGFpbmVyLCBlbmRPZmZzZXQpOwotfQotCi1SZWY8UmFuZ2U+IFJhbmdlOjpj
cmVhdGUoRG9jdW1lbnQmIG93bmVyRG9jdW1lbnQsIFJlZlB0cjxOb2RlPiYmIHN0YXJ0Q29udGFp
bmVyLCBpbnQgc3RhcnRPZmZzZXQsIFJlZlB0cjxOb2RlPiYmIGVuZENvbnRhaW5lciwgaW50IGVu
ZE9mZnNldCkKLXsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSYW5nZShvd25lckRvY3VtZW50
LCBzdGFydENvbnRhaW5lci5nZXQoKSwgc3RhcnRPZmZzZXQsIGVuZENvbnRhaW5lci5nZXQoKSwg
ZW5kT2Zmc2V0KSk7Ci19Ci0KLVJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCYgb3du
ZXJEb2N1bWVudCwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kKQot
ewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFJhbmdlKG93bmVyRG9jdW1lbnQsIHN0YXJ0LmNv
bnRhaW5lck5vZGUoKSwgc3RhcnQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpLCBlbmQu
Y29udGFpbmVyTm9kZSgpLCBlbmQuY29tcHV0ZU9mZnNldEluQ29udGFpbmVyTm9kZSgpKSk7Ci19
Ci0KLVJlZjxSYW5nZT4gUmFuZ2U6OmNyZWF0ZShEb2N1bWVudCYgb3duZXJEb2N1bWVudCwgY29u
c3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlU3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYg
dmlzaWJsZUVuZCkKLXsKLSAgICBQb3NpdGlvbiBzdGFydCA9IHZpc2libGVTdGFydC5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZCA9
IHZpc2libGVFbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKTsK
LSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBSYW5nZShvd25lckRvY3VtZW50LCBzdGFydC5hbmNo
b3JOb2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCksIGVuZC5hbmNob3JOb2Rl
KCksIGVuZC5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSk7Ci19Ci0KIFJhbmdlOjp+UmFuZ2Uo
KQogewogICAgIG1fb3duZXJEb2N1bWVudC0+ZGV0YWNoUmFuZ2UoKnRoaXMpOwpAQCAtMTk1LDIy
ICsxNTksNiBAQCBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kKFJlZjxOb2RlPiYmIHJl
Zk5vZGUsIHVuc2lnbmVkIG9mZnNldCkKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25P
cjx2b2lkPiBSYW5nZTo6c2V0U3RhcnQoY29uc3QgUG9zaXRpb24mIHN0YXJ0KQotewotICAgIFBv
c2l0aW9uIHBhcmVudEFuY2hvcmVkID0gc3RhcnQucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7
Ci0gICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCkpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKLSAgICByZXR1cm4gc2V0U3RhcnQoKnBhcmVudEFu
Y2hvcmVkLmNvbnRhaW5lck5vZGUoKSwgcGFyZW50QW5jaG9yZWQub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpOwotfQotCi1FeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0RW5kKGNvbnN0IFBvc2l0
aW9uJiBlbmQpCi17Ci0gICAgUG9zaXRpb24gcGFyZW50QW5jaG9yZWQgPSBlbmQucGFyZW50QW5j
aG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2Rl
KCkpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBUeXBlRXJyb3IgfTsKLSAgICByZXR1cm4g
c2V0RW5kKCpwYXJlbnRBbmNob3JlZC5jb250YWluZXJOb2RlKCksIHBhcmVudEFuY2hvcmVkLm9m
ZnNldEluQ29udGFpbmVyTm9kZSgpKTsKLX0KLQogdm9pZCBSYW5nZTo6Y29sbGFwc2UoYm9vbCB0
b1N0YXJ0KQogewogICAgIGlmICh0b1N0YXJ0KQpAQCAtOTk0LDcgKzk0MiwxMCBAQCBFeGNlcHRp
b25PcjxOb2RlKj4gUmFuZ2U6OmNoZWNrTm9kZVdPZmZzZXQoTm9kZSYgbm9kZSwgdW5zaWduZWQg
b2Zmc2V0KSBjb25zdAogCiBSZWY8UmFuZ2U+IFJhbmdlOjpjbG9uZVJhbmdlKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gUmFuZ2U6OmNyZWF0ZShvd25lckRvY3VtZW50KCksICZzdGFydENvbnRhaW5l
cigpLCBtX3N0YXJ0Lm9mZnNldCgpLCAmZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsK
KyAgICBhdXRvIHJlc3VsdCA9IGNyZWF0ZShvd25lckRvY3VtZW50KCkpOworICAgIHJlc3VsdC0+
c2V0U3RhcnQoc3RhcnRDb250YWluZXIoKSwgbV9zdGFydC5vZmZzZXQoKSk7CisgICAgcmVzdWx0
LT5zZXRFbmQoZW5kQ29udGFpbmVyKCksIG1fZW5kLm9mZnNldCgpKTsKKyAgICByZXR1cm4gcmVz
dWx0OwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBSYW5nZTo6c2V0U3RhcnRBZnRlcihOb2RlJiBy
ZWZOb2RlKQpAQCAtMTQ5NywxMCArMTQ0OCwxMCBAQCBib29sIFJhbmdlOjpjb250YWlucyhjb25z
dCBSYW5nZSYgb3RoZXIpIGNvbnN0CiAKIGJvb2wgUmFuZ2U6OmNvbnRhaW5zKGNvbnN0IFZpc2li
bGVQb3NpdGlvbiYgcG9zaXRpb24pIGNvbnN0CiB7Ci0gICAgUmVmUHRyPFJhbmdlPiBwb3NpdGlv
blJhbmdlID0gbWFrZVJhbmdlKHBvc2l0aW9uLCBwb3NpdGlvbik7CisgICAgYXV0byBwb3NpdGlv
blJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHBvc2l0aW9uKTsKICAgICBpZiAoIXBvc2l0aW9uUmFu
Z2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gY29udGFpbnMoKnBvc2l0aW9u
UmFuZ2UpOworICAgIHJldHVybiBjb250YWlucyhjcmVhdGVMaXZlUmFuZ2UoKnBvc2l0aW9uUmFu
Z2UpKTsKIH0KIAogYm9vbCBhcmVSYW5nZXNFcXVhbChjb25zdCBSYW5nZSogYSwgY29uc3QgUmFu
Z2UqIGIpCkBAIC0xNTQxLDEzICsxNDkyLDYgQEAgYm9vbCByYW5nZXNPdmVybGFwKGNvbnN0IFJh
bmdlKiBhLCBjb25zdCBSYW5nZSogYikKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLVJlZjxSYW5n
ZT4gcmFuZ2VPZkNvbnRlbnRzKE5vZGUmIG5vZGUpCi17Ci0gICAgYXV0byByYW5nZSA9IFJhbmdl
OjpjcmVhdGUobm9kZS5kb2N1bWVudCgpKTsKLSAgICByYW5nZS0+c2VsZWN0Tm9kZUNvbnRlbnRz
KG5vZGUpOwotICAgIHJldHVybiByYW5nZTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIGJvdW5k
YXJ5Tm9kZUNoaWxkcmVuQ2hhbmdlZChSYW5nZUJvdW5kYXJ5UG9pbnQmIGJvdW5kYXJ5LCBDb250
YWluZXJOb2RlJiBjb250YWluZXIpCiB7CiAgICAgaWYgKCFib3VuZGFyeS5jaGlsZEJlZm9yZSgp
KQpAQCAtMTg1Nyw3ICsxODAxLDEyIEBAIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxl
UmFuZ2UoY29uc3QgUmVmUHRyPFJhbmdlPiYgcmFuZ2UpCiAKIFJlZjxSYW5nZT4gY3JlYXRlTGl2
ZVJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZSkKIHsKLSAgICByZXR1cm4gUmFuZ2U6OmNy
ZWF0ZShyYW5nZS5zdGFydC5kb2N1bWVudCgpLCByYW5nZS5zdGFydC5jb250YWluZXIucHRyKCks
IHJhbmdlLnN0YXJ0Lm9mZnNldCwgcmFuZ2UuZW5kLmNvbnRhaW5lci5wdHIoKSwgcmFuZ2UuZW5k
Lm9mZnNldCk7CisgICAgYXV0byByZXN1bHQgPSBSYW5nZTo6Y3JlYXRlKHJhbmdlLnN0YXJ0LmRv
Y3VtZW50KCkpOworICAgIGF1dG8gc3RhcnRDb250YWluZXIgPSByYW5nZS5zdGFydC5jb250YWlu
ZXI7CisgICAgcmVzdWx0LT5zZXRTdGFydChXVEZNb3ZlKHN0YXJ0Q29udGFpbmVyKSwgcmFuZ2Uu
c3RhcnQub2Zmc2V0KTsKKyAgICBhdXRvIGVuZENvbnRhaW5lciA9IHJhbmdlLmVuZC5jb250YWlu
ZXI7CisgICAgcmVzdWx0LT5zZXRFbmQoV1RGTW92ZShlbmRDb250YWluZXIpLCByYW5nZS5lbmQu
b2Zmc2V0KTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiBSZWZQdHI8UmFuZ2U+IGNyZWF0ZUxp
dmVSYW5nZShjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5nZT4mIHJhbmdlKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZG9tL1JhbmdlLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApp
bmRleCBkMzEyMjU0ZGNkYmEyZjg1MjYyZmUwZjM2MTQ3MGYzYTM1MWI2Y2E5Li4zYmVjZmRkMGUy
MjQ2NTg0YzA0ZDc1OTRkODAzNjUyMGNlMzk4YzQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUmFuZ2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUmFuZ2UuaApAQCAtNDcsOSAr
NDcsNiBAQCBzdHJ1Y3QgU2ltcGxlUmFuZ2U7CiBjbGFzcyBSYW5nZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkPFJhbmdlPiB7CiBwdWJsaWM6CiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSYW5n
ZT4gY3JlYXRlKERvY3VtZW50Jik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIFJlZjxSYW5n
ZT4gY3JlYXRlKERvY3VtZW50JiwgUmVmUHRyPE5vZGU+JiYgc3RhcnRDb250YWluZXIsIGludCBz
dGFydE9mZnNldCwgUmVmUHRyPE5vZGU+JiYgZW5kQ29udGFpbmVyLCBpbnQgZW5kT2Zmc2V0KTsK
LSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgUmVmPFJhbmdlPiBjcmVhdGUoRG9jdW1lbnQmLCBj
b25zdCBQb3NpdGlvbiYsIGNvbnN0IFBvc2l0aW9uJik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgc3Rh
dGljIFJlZjxSYW5nZT4gY3JlYXRlKERvY3VtZW50JiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwg
Y29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgflJhbmdlKCk7CiAK
ICAgICBEb2N1bWVudCYgb3duZXJEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXJEb2N1
bWVudDsgfQpAQCAtOTYsMTAgKzkzLDggQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIEV4
Y2VwdGlvbk9yPHZvaWQ+IHN1cnJvdW5kQ29udGVudHMoTm9kZSYpOwogICAgIFdFQkNPUkVfRVhQ
T1JUIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldFN0YXJ0QmVmb3JlKE5vZGUmKTsKIAotICAgIGNvbnN0
IFBvc2l0aW9uIHN0YXJ0UG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0LnRvUG9zaXRp
b24oKTsgfQotICAgIGNvbnN0IFBvc2l0aW9uIGVuZFBvc2l0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9lbmQudG9Qb3NpdGlvbigpOyB9Ci0gICAgV0VCQ09SRV9FWFBPUlQgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0U3RhcnQoY29uc3QgUG9zaXRpb24mKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBFeGNlcHRp
b25Pcjx2b2lkPiBzZXRFbmQoY29uc3QgUG9zaXRpb24mKTsKKyAgICBQb3NpdGlvbiBzdGFydFBv
c2l0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9zdGFydC50b1Bvc2l0aW9uKCk7IH0KKyAgICBQb3Np
dGlvbiBlbmRQb3NpdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZW5kLnRvUG9zaXRpb24oKTsgfQog
CiAgICAgV0VCQ09SRV9FWFBPUlQgTm9kZSogZmlyc3ROb2RlKCkgY29uc3Q7CiAgICAgV0VCQ09S
RV9FWFBPUlQgTm9kZSogcGFzdExhc3ROb2RlKCkgY29uc3Q7CkBAIC0xNTQsNyArMTQ5LDYgQEAg
cHVibGljOgogCiBwcml2YXRlOgogICAgIGV4cGxpY2l0IFJhbmdlKERvY3VtZW50Jik7Ci0gICAg
UmFuZ2UoRG9jdW1lbnQmLCBOb2RlKiBzdGFydENvbnRhaW5lciwgaW50IHN0YXJ0T2Zmc2V0LCBO
b2RlKiBlbmRDb250YWluZXIsIGludCBlbmRPZmZzZXQpOwogCiAgICAgdm9pZCBzZXREb2N1bWVu
dChEb2N1bWVudCYpOwogICAgIEV4Y2VwdGlvbk9yPE5vZGUqPiBjaGVja05vZGVXT2Zmc2V0KE5v
ZGUmLCB1bnNpZ25lZCBvZmZzZXQpIGNvbnN0OwpAQCAtMTcxLDggKzE2NSw2IEBAIHByaXZhdGU6
CiAgICAgUmFuZ2VCb3VuZGFyeVBvaW50IG1fZW5kOwogfTsKIAotV0VCQ09SRV9FWFBPUlQgUmVm
PFJhbmdlPiByYW5nZU9mQ29udGVudHMoTm9kZSYpOwotCiBXRUJDT1JFX0VYUE9SVCBib29sIGFy
ZVJhbmdlc0VxdWFsKGNvbnN0IFJhbmdlKiwgY29uc3QgUmFuZ2UqKTsKIFdFQkNPUkVfRVhQT1JU
IGJvb2wgcmFuZ2VzT3ZlcmxhcChjb25zdCBSYW5nZSosIGNvbnN0IFJhbmdlKik7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaW1wbGVSYW5nZS5oIGIvU291cmNlL1dlYkNvcmUv
ZG9tL1NpbXBsZVJhbmdlLmgKaW5kZXggYmE2MTU3NWYwNDc4MTdlMzExNjZiMDQwMGI3MmY3YzQ2
NDU5OTA1YS4uNjI4MzcwOTZiNjE4NzQzYWNkNjc5YTRkZjY4MTdjM2ZkZGVkNTQ5MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NpbXBsZVJhbmdlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL1NpbXBsZVJhbmdlLmgKQEAgLTY4LDcgKzY4LDcgQEAgdGVtcGxhdGU8dHlwZW5hbWUg
Li4uVD4gYXV0byBtYWtlU2ltcGxlUmFuZ2UoVCYmIC4uLmFyZ3VtZW50cykgLT4gZGVjbHR5cGUo
bWFrZVMKIFdFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlUmFuZ2VTZWxl
Y3RpbmdOb2RlKE5vZGUmKTsKIFdFQkNPUkVfRVhQT1JUIFNpbXBsZVJhbmdlIG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cyhOb2RlJik7CiAKLVJlZlB0cjxOb2RlPiBjb21tb25JbmNsdXNp
dmVBbmNlc3Rvcihjb25zdCBTaW1wbGVSYW5nZSYpOworV0VCQ09SRV9FWFBPUlQgUmVmUHRyPE5v
ZGU+IGNvbW1vbkluY2x1c2l2ZUFuY2VzdG9yKGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKIGJvb2wg
b3BlcmF0b3I9PShjb25zdCBTaW1wbGVSYW5nZSYsIGNvbnN0IFNpbXBsZVJhbmdlJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9kb20vU3RhdGljUmFuZ2UuY3BwCmluZGV4IDdlMDk0YTlhNzk4ZTZiYjgxNTY2NTI0NGM3
MmNjYjAzN2M2YWRkMzkuLjVkN2NhODIxMDczM2RjMGQ1OTBiNGNiODhkODhkMWExYmI2MGI0NDUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvZG9tL1N0YXRpY1JhbmdlLmNwcApAQCAtNDEsNiArNDEsMTIgQEAgUmVmPFN0
YXRpY1JhbmdlPiBTdGF0aWNSYW5nZTo6Y3JlYXRlKFNpbXBsZVJhbmdlJiYgcmFuZ2UpCiAgICAg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgU3RhdGljUmFuZ2UoV1RGTW92ZShyYW5nZSkpKTsKIH0KIAor
UmVmPFN0YXRpY1JhbmdlPiBTdGF0aWNSYW5nZTo6Y3JlYXRlKGNvbnN0IFNpbXBsZVJhbmdlJiBy
YW5nZSkKK3sKKyAgICBhdXRvIGNvcGllZFJhbmdlID0gcmFuZ2U7CisgICAgcmV0dXJuIGNyZWF0
ZShXVEZNb3ZlKGNvcGllZFJhbmdlKSk7Cit9CisKIHN0YXRpYyBib29sIGlzRG9jdW1lbnRUeXBl
T3JBdHRyKE5vZGUmIG5vZGUpCiB7CiAgICAgLy8gQmVmb3JlIGNhbGxpbmcgbm9kZVR5cGUsIGRv
IHR3byBmYXN0IG5vbi12aXJ0dWFsIGNoZWNrcyB0aGF0IGNvdmVyIGFsbW9zdCBhbGwgbm9ybWFs
IG5vZGVzLCBidXQgYXJlIGZhbHNlIGZvciBEb2N1bWVudFR5cGUgYW5kIEF0dHIuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU3RhdGljUmFuZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9TdGF0aWNSYW5nZS5oCmluZGV4IGExOGRhZGE1NWQxNWMzYzdmNDBkN2RkZDYyODE3MzI0ZDk0
MmQxMWMuLmVjZTliNGRmMDFmY2RkODRhNWYwMDFhOTIxNmJlMWE5NTg2NjdmNDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TdGF0aWNSYW5nZS5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9TdGF0aWNSYW5nZS5oCkBAIC00MSw2ICs0MSw3IEBAIHB1YmxpYzoKICAgICB9OwogCiAg
ICAgc3RhdGljIEV4Y2VwdGlvbk9yPFJlZjxTdGF0aWNSYW5nZT4+IGNyZWF0ZShJbml0JiYpOwor
ICAgIHN0YXRpYyBSZWY8U3RhdGljUmFuZ2U+IGNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYpOwog
ICAgIHN0YXRpYyBSZWY8U3RhdGljUmFuZ2U+IGNyZWF0ZShTaW1wbGVSYW5nZSYmKTsKIAogcHJp
dmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0
Q29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FsdGVybmF0aXZlVGV4dENv
bnRyb2xsZXIuY3BwCmluZGV4IDJiMzNmZTVjMGFhOGRmODVlN2Y3MmRjM2IwMGI2ZDVhMWIzMTFj
ZTQuLjkzM2IwOTUzZWU3YmI1Y2UyZThmNDc4NTNlMzI1ZmVhNmYzZTdkMGQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLmNwcApA
QCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVu
ZGVyZWREb2N1bWVudE1hcmtlci5oIgogI2luY2x1ZGUgIlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1h
bmQuaCIKICNpbmNsdWRlICJUZXh0Q2hlY2tlckNsaWVudC5oIgpAQCAtNTIyLDcgKzUyMyw3IEBA
IGJvb2wgQWx0ZXJuYXRpdmVUZXh0Q29udHJvbGxlcjo6cmVzcG9uZFRvTWFya2VyQXRFbmRPZldv
cmQoY29uc3QgRG9jdW1lbnRNYXJrZXImCiAgICAgaWYgKCFzaG91bGRTdGFydFRpbWVyRm9yKG1h
cmtlciwgZW5kT2ZXb3JkUG9zaXRpb24ub2Zmc2V0SW5Db250YWluZXJOb2RlKCkpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgTm9kZSogbm9kZSA9IGVuZE9mV29yZFBvc2l0aW9uLmNvbnRh
aW5lck5vZGUoKTsKLSAgICBhdXRvIHdvcmRSYW5nZSA9IFNpbXBsZVJhbmdlIHsgeyAqbm9kZSwg
bWFya2VyLnN0YXJ0T2Zmc2V0KCkgfSwgeyAqbm9kZSwgbWFya2VyLmVuZE9mZnNldCgpIH0gfTsK
KyAgICBhdXRvIHdvcmRSYW5nZSA9IHJhbmdlKCpub2RlLCBtYXJrZXIpOwogICAgIFN0cmluZyBj
dXJyZW50V29yZCA9IHBsYWluVGV4dCh3b3JkUmFuZ2UpOwogICAgIGlmICghY3VycmVudFdvcmQu
bGVuZ3RoKCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKaW5kZXggNWVkYzFlNzI0NzhiYzBhZDVkZmZmOTQ1MTdh
MzEwODhjZjU3Njc5Mi4uNmEwNjQxOWYzYzRhNzAyNGFhN2ViOWYxNGQ1NzgxNDdkMzdmNDg1OCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5jcHAKQEAgLTcx
MSw3ICs3MTEsNyBAQCB2b2lkIEFwcGx5U3R5bGVDb21tYW5kOjpmaXhSYW5nZUFuZEFwcGx5SW5s
aW5lU3R5bGUoRWRpdGluZ1N0eWxlJiBzdHlsZSwgY29uc3QgUAogICAgIC8vIFN0YXJ0IGZyb20g
dGhlIGhpZ2hlc3QgZnVsbHkgc2VsZWN0ZWQgYW5jZXN0b3Igc28gdGhhdCB3ZSBjYW4gbW9kaWZ5
IHRoZSBmdWxseSBzZWxlY3RlZCBub2RlLgogICAgIC8vIGUuZy4gV2hlbiBhcHBseWluZyBmb250
LXNpemU6IGxhcmdlIG9uIDxmb250IGNvbG9yPSJibHVlIj5oZWxsbzwvZm9udD4sIHdlIG5lZWQg
dG8gaW5jbHVkZSB0aGUgZm9udCBlbGVtZW50IGluIG91ciBydW4KICAgICAvLyB0byBnZW5lcmF0
ZSA8Zm9udCBjb2xvcj0iYmx1ZSIgc2l6ZT0iNCI+aGVsbG88L2ZvbnQ+IGluc3RlYWQgb2YgPGZv
bnQgY29sb3I9ImJsdWUiPjxmb250IHNpemU9IjQiPmhlbGxvPC9mb250PjwvZm9udD4KLSAgICBh
dXRvIHJhbmdlID0gUmFuZ2U6OmNyZWF0ZShzdGFydE5vZGUtPmRvY3VtZW50KCksIHN0YXJ0LCBl
bmQpOworICAgIGF1dG8gcmFuZ2UgPSAqbWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpOwogICAg
IGF1dG8qIGVkaXRhYmxlUm9vdCA9IHN0YXJ0Tm9kZS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwog
ICAgIGlmIChzdGFydE5vZGUgIT0gZWRpdGFibGVSb290KSB7CiAgICAgICAgIHdoaWxlIChlZGl0
YWJsZVJvb3QgJiYgc3RhcnROb2RlLT5wYXJlbnROb2RlKCkgIT0gZWRpdGFibGVSb290ICYmIGlz
Tm9kZVZpc2libHlDb250YWluZWRXaXRoaW4oKnN0YXJ0Tm9kZS0+cGFyZW50Tm9kZSgpLCByYW5n
ZSkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNv
bW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5k
LmNwcAppbmRleCBmNjVkZjQ0OTY4N2QzZjUzMzI5NTdmZjg0ODE0ZmRjN2VmNzg2YjE0Li4yNWJk
MzNmZGQ0MTc2NzQ0NmI3NTMzZDlhNzZmYTEzNDgyZWYxYWViIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTc0OCw5ICs3NDgs
MTMgQEAgdm9pZCBEZWxldGVTZWxlY3Rpb25Db21tYW5kOjptZXJnZVBhcmFncmFwaHMoKQogICAg
ICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGF1dG8gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRl
KGRvY3VtZW50KCksIHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKSwgZW5kT2ZQYXJhZ3JhcGhUb01vdmUuZGVlcEVxdWl2YWxl
bnQoKS5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSk7Ci0gICAgYXV0byByYW5nZVRvQmVSZXBs
YWNlZCA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgbWVyZ2VEZXN0aW5hdGlvbi5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpLCBtZXJnZURlc3RpbmF0aW9uLmRl
ZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCkpOwotICAgIGlmICghZG9j
dW1lbnQoKS5lZGl0b3IoKS5jbGllbnQoKS0+c2hvdWxkTW92ZVJhbmdlQWZ0ZXJEZWxldGUocmFu
Z2UsIHJhbmdlVG9CZVJlcGxhY2VkKSkKKyAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KHN0YXJ0T2ZQYXJhZ3JhcGhUb01vdmUsIGVuZE9mUGFyYWdyYXBoVG9Nb3ZlKTsKKyAgICBpZiAo
IXJhbmdlKQorICAgICAgICByZXR1cm47CisgICAgYXV0byByYW5nZVRvQmVSZXBsYWNlZCA9IG1h
a2VTaW1wbGVSYW5nZShtZXJnZURlc3RpbmF0aW9uKTsKKyAgICBpZiAoIXJhbmdlVG9CZVJlcGxh
Y2VkKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFkb2N1bWVudCgpLmVkaXRvcigpLmNsaWVu
dCgpLT5zaG91bGRNb3ZlUmFuZ2VBZnRlckRlbGV0ZSgqcmFuZ2UsICpyYW5nZVRvQmVSZXBsYWNl
ZCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIG1vdmVQYXJhZ3JhcGhzIHdpbGwgaW5zZXJ0
IHBsYWNlaG9sZGVycyBpZiBpdCByZW1vdmVzIGJsb2NrcyB0aGF0IHdvdWxkIHJlcXVpcmUgdGhl
aXIgdXNlLCBkb24ndCBsZXQgYmxvY2sKQEAgLTg1MSwxMiArODU1LDExIEBAIFN0cmluZyBEZWxl
dGVTZWxlY3Rpb25Db21tYW5kOjpvcmlnaW5hbFN0cmluZ0ZvckF1dG9jb3JyZWN0aW9uQXRCZWdp
bm5pbmdPZlNlbGVjCiAgICAgaWYgKCFpc1N0YXJ0T2ZXb3JkKHN0YXJ0T2ZTZWxlY3Rpb24pKQog
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7CiAKLSAgICBWaXNpYmxlUG9zaXRpb24gbmV4dFBvc2l0
aW9uID0gc3RhcnRPZlNlbGVjdGlvbi5uZXh0KCk7Ci0gICAgaWYgKG5leHRQb3NpdGlvbi5pc051
bGwoKSkKKyAgICBhdXRvIHJhbmdlT2ZGaXJzdENoYXJhY3RlciA9IG1ha2VTaW1wbGVSYW5nZShz
dGFydE9mU2VsZWN0aW9uLCBzdGFydE9mU2VsZWN0aW9uLm5leHQoKSk7CisgICAgaWYgKCFyYW5n
ZU9mRmlyc3RDaGFyYWN0ZXIpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKIAotICAgIGF1dG8g
cmFuZ2VPZkZpcnN0Q2hhcmFjdGVyID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBzdGFydE9m
U2VsZWN0aW9uLmRlZXBFcXVpdmFsZW50KCksIG5leHRQb3NpdGlvbi5kZWVwRXF1aXZhbGVudCgp
KTsKLSAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCkubWFya2VycygpLm1hcmtlcnNJ
blJhbmdlKHJhbmdlT2ZGaXJzdENoYXJhY3RlciwgRG9jdW1lbnRNYXJrZXI6OkF1dG9jb3JyZWN0
ZWQpKSB7CisgICAgZm9yIChhdXRvKiBtYXJrZXIgOiBkb2N1bWVudCgpLm1hcmtlcnMoKS5tYXJr
ZXJzSW5SYW5nZSgqcmFuZ2VPZkZpcnN0Q2hhcmFjdGVyLCBEb2N1bWVudE1hcmtlcjo6QXV0b2Nv
cnJlY3RlZCkpIHsKICAgICAgICAgaW50IHN0YXJ0T2Zmc2V0ID0gbWFya2VyLT5zdGFydE9mZnNl
dCgpOwogICAgICAgICBpZiAoc3RhcnRPZmZzZXQgPT0gc3RhcnRPZlNlbGVjdGlvbi5kZWVwRXF1
aXZhbGVudCgpLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKQogICAgICAgICAgICAgcmV0dXJuIG1h
cmtlci0+ZGVzY3JpcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdGluZ1N0eWxlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAppbmRleCBiYTVmM2I2YzMwZWJkODg4M2FmNjI2ZTZmM2Q3NjE2ZGNjOGIyY2I2Li5lZmZhZjQ5
NzlkMmM0NGY1MmRmNTkxNjAxOTZiNzIzMTQ2YjQwNWViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0aW5nU3R5bGUuY3BwCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiUXVhbGlmaWVk
TmFtZS5oIgogI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKICNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgorI2luY2x1ZGUgIlNpbXBsZVJhbmdlLmgiCiAjaW5jbHVkZSAiU3R5bGVGb250U2l6ZUZ1
bmN0aW9ucy5oIgogI2luY2x1ZGUgIlN0eWxlUHJvcGVydGllcy5oIgogI2luY2x1ZGUgIlN0eWxl
UmVzb2x2ZXIuaCIKQEAgLTE1MzcsMTggKzE1MzgsMTIgQEAgV3JpdGluZ0RpcmVjdGlvbiBFZGl0
aW5nU3R5bGU6OnRleHREaXJlY3Rpb25Gb3JTZWxlY3Rpb24oY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYKICAgICBQb3NpdGlvbiBlbmQ7CiAgICAgaWYgKHNlbGVjdGlvbi5pc1JhbmdlKCkpIHsKICAg
ICAgICAgZW5kID0gc2VsZWN0aW9uLmVuZCgpLnVwc3RyZWFtKCk7Ci0KLSAgICAgICAgTm9kZSog
cGFzdExhc3QgPSBSYW5nZTo6Y3JlYXRlKCplbmQuZG9jdW1lbnQoKSwgcG9zaXRpb24ucGFyZW50
QW5jaG9yZWRFcXVpdmFsZW50KCksIGVuZC5wYXJlbnRBbmNob3JlZEVxdWl2YWxlbnQoKSktPnBh
c3RMYXN0Tm9kZSgpOwotICAgICAgICBmb3IgKE5vZGUqIG4gPSBub2RlOyBuICYmIG4gIT0gcGFz
dExhc3Q7IG4gPSBOb2RlVHJhdmVyc2FsOjpuZXh0KCpuKSkgewotICAgICAgICAgICAgaWYgKCFu
LT5pc1N0eWxlZEVsZW1lbnQoKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgUmVmUHRyPENTU1ZhbHVlPiB1bmljb2RlQmlkaSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3IobikucHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKTsKLSAgICAgICAgICAg
IGlmICghaXM8Q1NTUHJpbWl0aXZlVmFsdWU+KHVuaWNvZGVCaWRpKSkKKyAgICAgICAgZm9yIChh
dXRvJiBpbnRlcnNlY3RpbmdOb2RlIDogaW50ZXJzZWN0aW5nTm9kZXMoKm1ha2VTaW1wbGVSYW5n
ZShwb3NpdGlvbiwgZW5kKSkpIHsKKyAgICAgICAgICAgIGlmICghaW50ZXJzZWN0aW5nTm9kZS5p
c1N0eWxlZEVsZW1lbnQoKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAg
ICAgQ1NTVmFsdWVJRCB1bmljb2RlQmlkaVZhbHVlID0gZG93bmNhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWU+KCp1bmljb2RlQmlkaSkudmFsdWVJRCgpOwotICAgICAgICAgICAgaWYgKHVuaWNvZGVCaWRp
VmFsdWUgPT0gQ1NTVmFsdWVFbWJlZCB8fCB1bmljb2RlQmlkaVZhbHVlID09IENTU1ZhbHVlQmlk
aU92ZXJyaWRlKQorICAgICAgICAgICAgYXV0byB2YWx1ZU9iamVjdCA9IENvbXB1dGVkU3R5bGVF
eHRyYWN0b3IoJmludGVyc2VjdGluZ05vZGUpLnByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlVbmlj
b2RlQmlkaSk7CisgICAgICAgICAgICBhdXRvIHZhbHVlID0gaXM8Q1NTUHJpbWl0aXZlVmFsdWU+
KHZhbHVlT2JqZWN0KSA/IGRvd25jYXN0PENTU1ByaW1pdGl2ZVZhbHVlPigqdmFsdWVPYmplY3Qp
LnZhbHVlSUQoKSA6IENTU1ZhbHVlSW52YWxpZDsKKyAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBD
U1NWYWx1ZUVtYmVkIHx8IHZhbHVlID09IENTU1ZhbHVlQmlkaU92ZXJyaWRlKQogICAgICAgICAg
ICAgICAgIHJldHVybiBXcml0aW5nRGlyZWN0aW9uOjpOYXR1cmFsOwogICAgICAgICB9CiAgICAg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCmluZGV4IGQxMmY4NGYxNWZmNGU3NTI5NWVjNjM2
YzM4MDdhNjExZTNmOGJiMjYuLmM0YTdiYzkyNjZiODMzOGQ3ZDAxNzFjYjlmMjhlMzIzMGNkZWJi
MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAKQEAgLTcxNCw4ICs3MTQsOCBAQCB2b2lk
IEVkaXRvcjo6cmVwbGFjZVNlbGVjdGlvbldpdGhGcmFnbWVudChEb2N1bWVudEZyYWdtZW50JiBm
cmFnbWVudCwgU2VsZWN0UmVwbAogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVy
bjsKIAotICAgIGF1dG8gcmFuZ2VUb0NoZWNrID0gUmFuZ2U6OmNyZWF0ZShkb2N1bWVudCgpLCBm
aXJzdFBvc2l0aW9uSW5Ob2RlKG5vZGVUb0NoZWNrKSwgbGFzdFBvc2l0aW9uSW5Ob2RlKG5vZGVU
b0NoZWNrKSk7Ci0gICAgaWYgKGF1dG8gcmVxdWVzdCA9IFNwZWxsQ2hlY2tSZXF1ZXN0OjpjcmVh
dGUocmVzb2x2ZVRleHRDaGVja2luZ1R5cGVNYXNrKCpub2RlVG9DaGVjaywgeyBUZXh0Q2hlY2tp
bmdUeXBlOjpTcGVsbGluZywgVGV4dENoZWNraW5nVHlwZTo6R3JhbW1hciB9KSwgVGV4dENoZWNr
aW5nUHJvY2Vzc0JhdGNoLCByYW5nZVRvQ2hlY2suY29weVJlZigpLCByYW5nZVRvQ2hlY2suY29w
eVJlZigpLCByYW5nZVRvQ2hlY2suY29weVJlZigpKSkKKyAgICBhdXRvIHJhbmdlVG9DaGVjayA9
IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqbm9kZVRvQ2hlY2spOworICAgIGlmIChh
dXRvIHJlcXVlc3QgPSBTcGVsbENoZWNrUmVxdWVzdDo6Y3JlYXRlKHJlc29sdmVUZXh0Q2hlY2tp
bmdUeXBlTWFzaygqbm9kZVRvQ2hlY2ssIHsgVGV4dENoZWNraW5nVHlwZTo6U3BlbGxpbmcsIFRl
eHRDaGVja2luZ1R5cGU6OkdyYW1tYXIgfSksIFRleHRDaGVja2luZ1Byb2Nlc3NCYXRjaCwgcmFu
Z2VUb0NoZWNrLCByYW5nZVRvQ2hlY2ssIHJhbmdlVG9DaGVjaykpCiAgICAgICAgIG1fc3BlbGxD
aGVja2VyLT5yZXF1ZXN0Q2hlY2tpbmdGb3IocmVxdWVzdC5yZWxlYXNlTm9uTnVsbCgpKTsKIH0K
IApAQCAtMzAzMCw3ICszMDMwLDcgQEAgdm9pZCBFZGl0b3I6OnVwZGF0ZU1hcmtlcnNGb3JXb3Jk
c0FmZmVjdGVkQnlFZGl0aW5nKGJvb2wgZG9Ob3RSZW1vdmVJZlNlbGVjdGlvbkEKICAgICAvLyBn
YXJkZSIsIHdlIHdpbGwgaGF2ZSBDb3JyZWN0aW9uSW5kaWNhdG9yIG1hcmtlciBvbiBib3RoIHdv
cmRzIGFuZCBvbiB0aGUgd2hpdGVzcGFjZSBiZXR3ZWVuIHRoZW0uIElmIHdlIHRoZW4gZWRpdCBn
YXJkZSwKICAgICAvLyB3ZSB3b3VsZCBsaWtlIHRvIHJlbW92ZSB0aGUgbWFya2VyIGZyb20gd29y
ZCAiYXZhbnQiIGFuZCB3aGl0ZXNwYWNlIGFzIHdlbGwuIFNvIHdlIG5lZWQgdG8gZ2V0IHRoZSBj
b250aW5vdXMgcmFuZ2Ugb2YKICAgICAvLyBvZiBtYXJrZXIgdGhhdCBjb250YWlucyB0aGUgd29y
ZCBpbiBxdWVzdGlvbiwgYW5kIHJlbW92ZSBtYXJrZXIgb24gdGhhdCB3aG9sZSByYW5nZS4KLSAg
ICBhdXRvIHdvcmRSYW5nZSA9IFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgc3RhcnRPZkZpcnN0
V29yZC5kZWVwRXF1aXZhbGVudCgpLCBlbmRPZkxhc3RXb3JkLmRlZXBFcXVpdmFsZW50KCkpOwor
ICAgIGF1dG8gd29yZFJhbmdlID0gKm1ha2VTaW1wbGVSYW5nZShzdGFydE9mRmlyc3RXb3JkLCBl
bmRPZkxhc3RXb3JkKTsKIAogICAgIGZvciAoYXV0byogbWFya2VyIDogZG9jdW1lbnQoKS5tYXJr
ZXJzKCkubWFya2Vyc0luUmFuZ2Uod29yZFJhbmdlLCBEb2N1bWVudE1hcmtlcjo6RGljdGF0aW9u
QWx0ZXJuYXRpdmVzKSkKICAgICAgICAgbV9hbHRlcm5hdGl2ZVRleHRDb250cm9sbGVyLT5yZW1v
dmVEaWN0YXRpb25BbHRlcm5hdGl2ZXNGb3JNYXJrZXIoKm1hcmtlcik7CkBAIC0zMTQzLDcgKzMx
NDMsNyBAQCB2b2lkIEVkaXRvcjo6dHJhbnNwb3NlKCkKICAgICBwcmV2aW91cyA9IHByZXZpb3Vz
LnByZXZpb3VzKCk7CiAgICAgaWYgKCFpblNhbWVQYXJhZ3JhcGgobmV4dCwgcHJldmlvdXMpKQog
ICAgICAgICByZXR1cm47Ci0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IG1ha2VSYW5nZShwcmV2
aW91cywgbmV4dCk7CisgICAgYXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShwcmV2aW91cywg
bmV4dCk7CiAgICAgaWYgKCFyYW5nZSkKICAgICAgICAgcmV0dXJuOwogICAgIFZpc2libGVTZWxl
Y3Rpb24gbmV3U2VsZWN0aW9uKCpyYW5nZSwgRE9XTlNUUkVBTSk7CkBAIC0zNTI2LDcgKzM1MjYs
NyBAQCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gRWRpdG9yOjpyYW5nZU9mU3RyaW5nKGNvbnN0IFN0
cmluZyYgdGFyZ2V0LCBjb25zdCBPcHRpb25hbAogICAgIC8vIElmIHdlIGRpZG4ndCBmaW5kIGFu
eXRoaW5nIGFuZCB3ZSdyZSB3cmFwcGluZywgc2VhcmNoIGFnYWluIGluIHRoZSBlbnRpcmUgZG9j
dW1lbnQgKHRoaXMgd2lsbAogICAgIC8vIHJlZHVuZGFudGx5IHJlLXNlYXJjaCB0aGUgYXJlYSBh
bHJlYWR5IHNlYXJjaGVkIGluIHNvbWUgY2FzZXMpLgogICAgIGlmIChyZXN1bHRSYW5nZS5jb2xs
YXBzZWQoKSAmJiBvcHRpb25zLmNvbnRhaW5zKFdyYXBBcm91bmQpKSB7Ci0gICAgICAgIHJlc3Vs
dFJhbmdlID0gY29sbGFwc2VJZlJvb3RzRGlmZmVyKGZpbmRQbGFpblRleHQocmFuZ2VPZkNvbnRl
bnRzKGRvY3VtZW50KCkpLCB0YXJnZXQsIG9wdGlvbnMpKTsKKyAgICAgICAgcmVzdWx0UmFuZ2Ug
PSBjb2xsYXBzZUlmUm9vdHNEaWZmZXIoZmluZFBsYWluVGV4dChtYWtlUmFuZ2VTZWxlY3RpbmdO
b2RlQ29udGVudHMoZG9jdW1lbnQoKSksIHRhcmdldCwgb3B0aW9ucykpOwogICAgICAgICAvLyBX
ZSB1c2VkIHRvIHJldHVybiBmYWxzZSBoZXJlIGlmIHdlIGVuZGVkIHVwIHdpdGggdGhlIHNhbWUg
cmFuZ2UgdGhhdCB3ZSBzdGFydGVkIHdpdGgKICAgICAgICAgLy8gKGUuZy4sIHRoZSByZWZlcmVu
Y2UgcmFuZ2Ugd2FzIGFscmVhZHkgdGhlIG9ubHkgaW5zdGFuY2Ugb2YgdGhpcyB0ZXh0KS4gQnV0
IHdlIGRlY2lkZWQgdGhhdAogICAgICAgICAvLyB0aGlzIHNob3VsZCBiZSBhIHN1Y2Nlc3MgY2Fz
ZSBpbnN0ZWFkLCBzbyB3ZSdsbCBqdXN0IGZhbGwgdGhyb3VnaCBpbiB0aGF0IGNhc2UuCkBAIC00
MTg4LDggKzQxODgsOCBAQCB2b2lkIEVkaXRvcjo6aGFuZGxlQWNjZXB0ZWRDYW5kaWRhdGUoVGV4
dENoZWNraW5nUmVzdWx0IGFjY2VwdGVkQ2FuZGlkYXRlKQogICAgIG1faXNIYW5kbGluZ0FjY2Vw
dGVkQ2FuZGlkYXRlID0gdHJ1ZTsKIAogICAgIGlmIChhdXRvIHJhbmdlID0gcmFuZ2VGb3JUZXh0
Q2hlY2tpbmdSZXN1bHQoYWNjZXB0ZWRDYW5kaWRhdGUpKSB7Ci0gICAgICAgIGlmIChzaG91bGRJ
bnNlcnRUZXh0KGFjY2VwdGVkQ2FuZGlkYXRlLnJlcGxhY2VtZW50LCByYW5nZSwgRWRpdG9ySW5z
ZXJ0QWN0aW9uOjpUeXBlZCkpCi0gICAgICAgICAgICBSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1h
bmQ6OmNyZWF0ZShjcmVhdGVMaXZlUmFuZ2UocmFuZ2UpLCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBs
YWNlbWVudCktPmFwcGx5KCk7CisgICAgICAgIGlmIChzaG91bGRJbnNlcnRUZXh0KGFjY2VwdGVk
Q2FuZGlkYXRlLnJlcGxhY2VtZW50LCAqcmFuZ2UsIEVkaXRvckluc2VydEFjdGlvbjo6VHlwZWQp
KQorICAgICAgICAgICAgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpjcmVhdGUoKnJhbmdl
LCBhY2NlcHRlZENhbmRpZGF0ZS5yZXBsYWNlbWVudCktPmFwcGx5KCk7CiAgICAgfSBlbHNlCiAg
ICAgICAgIGluc2VydFRleHQoYWNjZXB0ZWRDYW5kaWRhdGUucmVwbGFjZW1lbnQsIG51bGxwdHIp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uY3BwCmluZGV4IDFmZmRh
OGNhMjZmNzZiN2E5NDk4ZDUyMmU5ZWU0YmI4NjE4NTljZmEuLjE1OTQwNGI0YzI0M2U4NDkwMjYz
Mzk0YjZlMTZjYTcyZTY0ZDA5NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RnJhbWVTZWxlY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxl
Y3Rpb24uY3BwCkBAIC0yNjczLDEwICsyNjczLDggQEAgT3B0aW9uYWw8U2ltcGxlUmFuZ2U+IEZy
YW1lU2VsZWN0aW9uOjpyYW5nZUJ5RXh0ZW5kaW5nQ3VycmVudFNlbGVjdGlvbihpbnQgYW1vdW4K
IAogdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2VsZWN0UmFuZ2VPbkVsZW1lbnQodW5zaWduZWQgbG9j
YXRpb24sIHVuc2lnbmVkIGxlbmd0aCwgTm9kZSYgbm9kZSkKIHsKLSAgICBSZWZQdHI8UmFuZ2U+
IHJlc3VsdFJhbmdlID0gbV9kb2N1bWVudC0+Y3JlYXRlUmFuZ2UoKTsKLSAgICByZXN1bHRSYW5n
ZS0+c2V0U3RhcnQobm9kZSwgbG9jYXRpb24pOwotICAgIHJlc3VsdFJhbmdlLT5zZXRFbmQobm9k
ZSwgbG9jYXRpb24gKyBsZW5ndGgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0g
VmlzaWJsZVNlbGVjdGlvbigqcmVzdWx0UmFuZ2UsIFNFTF9ERUZBVUxUX0FGRklOSVRZKTsKKyAg
ICBhdXRvIHNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24geyBTaW1wbGVSYW5nZSB7IHsgbm9k
ZSwgbG9jYXRpb24gfSwgeyBub2RlLCBsb2NhdGlvbiArIGxlbmd0aCB9IH0gfTsKKwogICAgIC8v
IEZJWE1FOiBUaGUgc2Vjb25kIGFyZ3VtZW50IHdhcyAidHJ1ZSIgd2hpY2ggaW1wbGljaXRseSBj
b252ZXJ0ZWQgdG8gb3B0aW9uICJGaXJlU2VsZWN0RXZlbnQiLiBJcyB0aGlzIGNvcnJlY3Q/CiAg
ICAgc2V0U2VsZWN0aW9uKHNlbGVjdGlvbiwgeyBGaXJlU2VsZWN0RXZlbnQgfSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFu
ZC5jcHAKaW5kZXggNjhlMDgzNTJhNGMxMGQ4NjhiZjFlNDY5YmY3NWM5NTZkMTNmMDU5MC4uNWVk
MGRlOWEzMTBiMzFiZTYzZTBhM2Q0MzM4OThjMTk1MjcyODU2ZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kLmNwcApAQCAt
NDAsOCArNDAsOCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLVJlcGxhY2VSYW5nZVdpdGhU
ZXh0Q29tbWFuZDo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kKFJlZlB0cjxSYW5nZT4gcmFu
Z2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmluZyYgdGV4dCkKLSAgICA6IENvbXBvc2l0ZUVkaXRD
b21tYW5kKHJhbmdlVG9CZVJlcGxhY2VkLT5zdGFydENvbnRhaW5lcigpLmRvY3VtZW50KCksIEVk
aXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQorUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5k
OjpSZXBsYWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9C
ZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFu
ZChyYW5nZVRvQmVSZXBsYWNlZC5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCksIEVkaXRBY3Rp
b246Okluc2VydFJlcGxhY2VtZW50KQogICAgICwgbV9yYW5nZVRvQmVSZXBsYWNlZChyYW5nZVRv
QmVSZXBsYWNlZCkKICAgICAsIG1fdGV4dCh0ZXh0KQogewpAQCAtNDksMjEgKzQ5LDE4IEBAIFJl
cGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZDo6UmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kKFJl
ZlB0cjxSYW5nZT4gcmFuZ2VUb0JlCiAKIGJvb2wgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5k
Ojp3aWxsQXBwbHlDb21tYW5kKCkKIHsKLSAgICBtX3RleHRGcmFnbWVudCA9IGNyZWF0ZUZyYWdt
ZW50RnJvbVRleHQoKm1fcmFuZ2VUb0JlUmVwbGFjZWQsIG1fdGV4dCk7CisgICAgbV90ZXh0RnJh
Z21lbnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KG1fcmFuZ2VUb0JlUmVwbGFjZWQsIG1fdGV4
dCk7CiAgICAgcmV0dXJuIENvbXBvc2l0ZUVkaXRDb21tYW5kOjp3aWxsQXBwbHlDb21tYW5kKCk7
CiB9CiAKIHZvaWQgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAg
ICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiB7ICptX3JhbmdlVG9CZVJlcGxhY2VkIH07Ci0K
LSAgICBpZiAoIW1fcmFuZ2VUb0JlUmVwbGFjZWQpCi0gICAgICAgIHJldHVybjsKKyAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiB7IG1fcmFuZ2VUb0JlUmVwbGFjZWQgfTsKIAogICAgIGlm
ICghZG9jdW1lbnQoKS5zZWxlY3Rpb24oKS5zaG91bGRDaGFuZ2VTZWxlY3Rpb24oc2VsZWN0aW9u
KSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKCFjaGFyYWN0ZXJDb3VudCgqbV9yYW5nZVRv
QmVSZXBsYWNlZCkpCisgICAgaWYgKCFjaGFyYWN0ZXJDb3VudChtX3JhbmdlVG9CZVJlcGxhY2Vk
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoU2V0U2Vs
ZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKHNlbGVjdGlvbiwgRnJhbWVTZWxlY3Rpb246OmRlZmF1bHRT
ZXRTZWxlY3Rpb25PcHRpb25zKCkpKTsKQEAgLTg4LDcgKzg1LDcgQEAgUmVmUHRyPERhdGFUcmFu
c2Zlcj4gUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kOjppbnB1dEV2ZW50RGF0YVRyYW5zZmVy
KCkgY29uc3QKIAogVmVjdG9yPFJlZlB0cjxTdGF0aWNSYW5nZT4+IFJlcGxhY2VSYW5nZVdpdGhU
ZXh0Q29tbWFuZDo6dGFyZ2V0UmFuZ2VzKCkgY29uc3QKIHsKLSAgICByZXR1cm4geyAxLCBTdGF0
aWNSYW5nZTo6Y3JlYXRlKCptX3JhbmdlVG9CZVJlcGxhY2VkKSB9OworICAgIHJldHVybiB7IDEs
IFN0YXRpY1JhbmdlOjpjcmVhdGUobV9yYW5nZVRvQmVSZXBsYWNlZCkgfTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBs
YWNlUmFuZ2VXaXRoVGV4dENvbW1hbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFj
ZVJhbmdlV2l0aFRleHRDb21tYW5kLmgKaW5kZXggMDk4MzA3ZjY1MjBkZWU2YzQ0MWNmNWZlODE0
NmU3N2FjZjllOTZjNC4uZmRjODJkOTFmMWU4NmMxZTBlYTljMDcxNzViZmQ2ZTU2OTk3MjRkMiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlUmFuZ2VXaXRoVGV4dENv
bW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZC5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkNv
bXBvc2l0ZUVkaXRDb21tYW5kLmgiCi0jaW5jbHVkZSAiUmFuZ2UuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCkBAIC0zNCwyMCArMzMsMjAgQEAgY2xhc3MgRG9jdW1lbnRGcmFnbWVudDsKIAog
Y2xhc3MgUmVwbGFjZVJhbmdlV2l0aFRleHRDb21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRD
b21tYW5kIHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29t
bWFuZD4gY3JlYXRlKFJlZlB0cjxSYW5nZT4gcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCkKKyAgICBzdGF0aWMgUmVmPFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZD4gY3Jl
YXRlKGNvbnN0IFNpbXBsZVJhbmdlJiByYW5nZVRvQmVSZXBsYWNlZCwgY29uc3QgU3RyaW5nJiB0
ZXh0KQogICAgIHsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVwbGFjZVJhbmdlV2l0
aFRleHRDb21tYW5kKHJhbmdlVG9CZVJlcGxhY2VkLCB0ZXh0KSk7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIFJlcGxhY2VSYW5nZVdpdGhUZXh0Q29tbWFuZChSZWZQdHI8UmFuZ2U+IHJhbmdlVG9C
ZVJlcGxhY2VkLCBjb25zdCBTdHJpbmcmIHRleHQpOworICAgIFJlcGxhY2VSYW5nZVdpdGhUZXh0
Q29tbWFuZChjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlUmVwbGFjZWQsIGNvbnN0IFN0cmlu
ZyYgdGV4dCk7CiAgICAgYm9vbCB3aWxsQXBwbHlDb21tYW5kKCkgZmluYWw7CiAgICAgdm9pZCBk
b0FwcGx5KCkgb3ZlcnJpZGU7CiAgICAgU3RyaW5nIGlucHV0RXZlbnREYXRhKCkgY29uc3QgZmlu
YWw7CiAgICAgUmVmUHRyPERhdGFUcmFuc2Zlcj4gaW5wdXRFdmVudERhdGFUcmFuc2ZlcigpIGNv
bnN0IGZpbmFsOwogICAgIFZlY3RvcjxSZWZQdHI8U3RhdGljUmFuZ2U+PiB0YXJnZXRSYW5nZXMo
KSBjb25zdCBmaW5hbDsKIAotICAgIFJlZlB0cjxSYW5nZT4gbV9yYW5nZVRvQmVSZXBsYWNlZDsK
KyAgICBTaW1wbGVSYW5nZSBtX3JhbmdlVG9CZVJlcGxhY2VkOwogICAgIFJlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBtX3RleHRGcmFnbWVudDsKICAgICBTdHJpbmcgbV90ZXh0OwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKaW5k
ZXggNjllN2UzMGU2NWE5NjE2MDI1ZWQyNDkyNTkyMWIzMGNkZjdiMTdkNi4uOTkzNGExMzU0ZmFl
NjU5OWE0OTc5ODJjYmEwMGVhNjcyZjJkNjc4ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAKQEAgLTE3NjksMTIgKzE3NjksOSBA
QCBib29sIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpwZXJmb3JtVHJpdmlhbFJlcGxhY2UoY29u
c3QgUmVwbGFjZW1lbnRGcmFnbWVudCYgZgogICAgIHJldHVybiB0cnVlOwogfQogCi1SZWZQdHI8
UmFuZ2U+IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjppbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNv
bnN0CitPcHRpb25hbDxTaW1wbGVSYW5nZT4gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6Omluc2Vy
dGVkQ29udGVudFJhbmdlKCkgY29uc3QKIHsKLSAgICBpZiAoYXV0byBkb2N1bWVudCA9IG1ha2VS
ZWZQdHIobV9zdGFydE9mSW5zZXJ0ZWRDb250ZW50LmRvY3VtZW50KCkpKQotICAgICAgICByZXR1
cm4gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1lbnQsIG1fc3RhcnRPZkluc2VydGVkQ29udGVudCwgbV9l
bmRPZkluc2VydGVkQ29udGVudCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4g
bWFrZVNpbXBsZVJhbmdlKG1fc3RhcnRPZkluc2VydGVkQ29udGVudCwgbV9lbmRPZkluc2VydGVk
Q29udGVudCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaCBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuaAppbmRleCBkOWQ1OWQzNTMzNWRl
MTNlYmE3ZDNjNTUwNWMzOTdmYzg3NmQzYWRkLi4wNjA4YTAwODllNmIwOGE0OGFkMjk5MmYxODg5
ZDhjMzI1OTQxYWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VT
ZWxlY3Rpb25Db21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZC5oCkBAIC01NCw3ICs1NCw3IEBAIHB1YmxpYzoKICAgICBWaXNpYmxlU2Vs
ZWN0aW9uIHZpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQoKSBjb25zdCB7IHJldHVybiBt
X3Zpc2libGVTZWxlY3Rpb25Gb3JJbnNlcnRlZFRleHQ7IH0KICAgICBTdHJpbmcgZG9jdW1lbnRG
cmFnbWVudFBsYWluVGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jdW1lbnRGcmFnbWVudFBsYWlu
VGV4dDsgfQogCi0gICAgUmVmUHRyPFJhbmdlPiBpbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNvbnN0
OworICAgIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiBpbnNlcnRlZENvbnRlbnRSYW5nZSgpIGNvbnN0
OwogCiBwcml2YXRlOgogICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kKERvY3VtZW50JiwgUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+JiYsIE9wdGlvblNldDxDb21tYW5kT3B0aW9uPiwgRWRpdEFj
dGlvbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsQ2hlY2tlci5jcHAKaW5kZXggNjE5NGYx
YWE0N2NkNGVhYWM1MTI0ODU0MjQwMGM0NTM5NmYxN2FhMS4uNTA2MDhhYjk2MTEyY2M4MGI0YWQ4
YzcxOTk4NjJlYzUyYjAxZDhkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9T
cGVsbENoZWNrZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxDaGVja2Vy
LmNwcApAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiUGFn
ZS5oIgogI2luY2x1ZGUgIlBvc2l0aW9uSXRlcmF0b3IuaCIKKyNpbmNsdWRlICJSYW5nZS5oIgog
I2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVk
ZSAiVGV4dENoZWNrZXJDbGllbnQuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuY3BwCmluZGV4IDU5MjA4NDUzNTFlYTQwM2I4Yzg3
MzQzYWRhNzZiNzQzNjNkZjA1ZDUuLjg2NzEzMjBkYzQzYzY1YWUzZjAwNTA0MzdmNDM5MWYxNmY4
OWNmNTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU3BlbGxpbmdDb3JyZWN0
aW9uQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJl
Y3Rpb25Db21tYW5kLmNwcApAQCAtODMsMTQgKzgzLDE5IEBAIHByaXZhdGU6CiB9OwogI2VuZGlm
CiAKLVNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ6OlNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQo
UmFuZ2UmIHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQotICAg
IDogQ29tcG9zaXRlRWRpdENvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLnN0YXJ0Q29udGFpbmVy
KCkuZG9jdW1lbnQoKSwgRWRpdEFjdGlvbjo6SW5zZXJ0UmVwbGFjZW1lbnQpCitTcGVsbGluZ0Nv
cnJlY3Rpb25Db21tYW5kOjpTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbikKKyAgICA6
IENvbXBvc2l0ZUVkaXRDb21tYW5kKHJhbmdlVG9CZUNvcnJlY3RlZC5zdGFydC5jb250YWluZXIt
PmRvY3VtZW50KCksIEVkaXRBY3Rpb246Okluc2VydFJlcGxhY2VtZW50KQogICAgICwgbV9yYW5n
ZVRvQmVDb3JyZWN0ZWQocmFuZ2VUb0JlQ29ycmVjdGVkKQotICAgICwgbV9zZWxlY3Rpb25Ub0Jl
Q29ycmVjdGVkKG1fcmFuZ2VUb0JlQ29ycmVjdGVkLmdldCgpKQorICAgICwgbV9zZWxlY3Rpb25U
b0JlQ29ycmVjdGVkKG1fcmFuZ2VUb0JlQ29ycmVjdGVkKQogICAgICwgbV9jb3JyZWN0aW9uKGNv
cnJlY3Rpb24pCiB7CiB9CiAKK1JlZjxTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kPiBTcGVsbGlu
Z0NvcnJlY3Rpb25Db21tYW5kOjpjcmVhdGUoY29uc3QgU2ltcGxlUmFuZ2UmIHJhbmdlVG9CZUNv
cnJlY3RlZCwgY29uc3QgU3RyaW5nJiBjb3JyZWN0aW9uKQoreworICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQocmFuZ2VUb0JlQ29ycmVjdGVkLCBjb3Jy
ZWN0aW9uKSk7Cit9CisKIGJvb2wgU3BlbGxpbmdDb3JyZWN0aW9uQ29tbWFuZDo6d2lsbEFwcGx5
Q29tbWFuZCgpCiB7CiAgICAgbV9jb3JyZWN0aW9uRnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZy
b21UZXh0KG1fcmFuZ2VUb0JlQ29ycmVjdGVkLCBtX2NvcnJlY3Rpb24pOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvZWRpdGluZy9TcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaAppbmRleCA1Yjgx
ZWYyMzU2Yzk5YTczM2Y0YTNlMTg4NzhiMDA1ZjNjOTAyMmQ2Li5kZjg1ZGE2YjdkYTNjN2ZmNDhm
MWRhYWQ2NzQyN2E0Y2E5MTBjYzMxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L1NwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQuaApAQCAtMjYsMTggKzI2LDE1IEBACiAjcHJhZ21h
IG9uY2UKIAogI2luY2x1ZGUgIkNvbXBvc2l0ZUVkaXRDb21tYW5kLmgiCi0jaW5jbHVkZSAiUmFu
Z2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBTcGVsbGluZ0NvcnJlY3Rpb25D
b21tYW5kIDogcHVibGljIENvbXBvc2l0ZUVkaXRDb21tYW5kIHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUmVmPFNwZWxsaW5nQ29ycmVjdGlvbkNvbW1hbmQ+IGNyZWF0ZShSYW5nZSYgcmFuZ2VUb0Jl
Q29ycmVjdGVkLCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pCi0gICAgewotICAgICAgICByZXR1
cm4gYWRvcHRSZWYoKm5ldyBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKHJhbmdlVG9CZUNvcnJl
Y3RlZCwgY29ycmVjdGlvbikpOwotICAgIH0KKyAgICBzdGF0aWMgUmVmPFNwZWxsaW5nQ29ycmVj
dGlvbkNvbW1hbmQ+IGNyZWF0ZShjb25zdCBTaW1wbGVSYW5nZSYgcmFuZ2VUb0JlQ29ycmVjdGVk
LCBjb25zdCBTdHJpbmcmIGNvcnJlY3Rpb24pOworCiBwcml2YXRlOgotICAgIFNwZWxsaW5nQ29y
cmVjdGlvbkNvbW1hbmQoUmFuZ2UmIHJhbmdlVG9CZUNvcnJlY3RlZCwgY29uc3QgU3RyaW5nJiBj
b3JyZWN0aW9uKTsKKyAgICBTcGVsbGluZ0NvcnJlY3Rpb25Db21tYW5kKGNvbnN0IFNpbXBsZVJh
bmdlJiByYW5nZVRvQmVDb3JyZWN0ZWQsIGNvbnN0IFN0cmluZyYgY29ycmVjdGlvbik7CiAgICAg
Ym9vbCB3aWxsQXBwbHlDb21tYW5kKCkgZmluYWw7CiAgICAgdm9pZCBkb0FwcGx5KCkgb3ZlcnJp
ZGU7CiAgICAgYm9vbCBzaG91bGRSZXRhaW5BdXRvY29ycmVjdGlvbkluZGljYXRvcigpIGNvbnN0
IG92ZXJyaWRlOwpAQCAtNDYsNyArNDMsNyBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8
U3RhdGljUmFuZ2U+PiB0YXJnZXRSYW5nZXMoKSBjb25zdCBmaW5hbDsKICAgICBSZWZQdHI8RGF0
YVRyYW5zZmVyPiBpbnB1dEV2ZW50RGF0YVRyYW5zZmVyKCkgY29uc3QgZmluYWw7CiAKLSAgICBS
ZWY8UmFuZ2U+IG1fcmFuZ2VUb0JlQ29ycmVjdGVkOworICAgIFNpbXBsZVJhbmdlIG1fcmFuZ2VU
b0JlQ29ycmVjdGVkOwogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb25Ub0JlQ29ycmVj
dGVkOwogICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBtX2NvcnJlY3Rpb25GcmFnbWVudDsK
ICAgICBTdHJpbmcgbV9jb3JyZWN0ZWQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL1RleHRDaGVja2luZ0hlbHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRD
aGVja2luZ0hlbHBlci5jcHAKaW5kZXggOGZmZjRmNDE3MWIzNWQ5ZjQ4ZjAyNGY2MmQyNDY1NzQ5
NmZlYmZkOS4uMjU0NjAyM2Y2NDA1N2Y4M2Q5MjE2OWE1OGFlNDUxYTM2MzMwODVlZCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0Q2hlY2tpbmdIZWxwZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dENoZWNraW5nSGVscGVyLmNwcApAQCAtMzAyLDE0
ICszMDIsMTMgQEAgYXV0byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRX
b3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wgY2hlY2sKICAgICAvLyBFeHBhbmQgdGhlIHNl
YXJjaCByYW5nZSB0byBlbmNvbXBhc3MgZW50aXJlIHBhcmFncmFwaHMsIHNpbmNlIHRleHQgY2hl
Y2tpbmcgbmVlZHMgdGhhdCBtdWNoIGNvbnRleHQuCiAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFy
YWN0ZXIgb2Zmc2V0IGZyb20gdGhlIHN0YXJ0IG9mIHRoZSBwYXJhZ3JhcGggdG8gdGhlIHN0YXJ0
IG9mIHRoZSBvcmlnaW5hbCBzZWFyY2ggcmFuZ2UsCiAgICAgLy8gc2luY2Ugd2Ugd2lsbCB3YW50
IHRvIGlnbm9yZSByZXN1bHRzIGluIHRoaXMgYXJlYS4KLSAgICBSZWY8UmFuZ2U+IHBhcmFncmFw
aFJhbmdlID0gY3JlYXRlTGl2ZVJhbmdlKG1fcmFuZ2UpOwotICAgIHNldFN0YXJ0KHBhcmFncmFw
aFJhbmdlLnB0cigpLCBzdGFydE9mUGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlv
bihtX3JhbmdlLnN0YXJ0KSkpOworICAgIGF1dG8gcGFyYWdyYXBoUmFuZ2UgPSAqbWFrZVNpbXBs
ZVJhbmdlKHN0YXJ0T2ZQYXJhZ3JhcGgoY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFu
Z2Uuc3RhcnQpKSwgbV9yYW5nZS5lbmQpOwogICAgIGF1dG8gdG90YWxSYW5nZUxlbmd0aCA9IGNo
YXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKLSAgICBzZXRFbmQocGFyYWdyYXBoUmFuZ2Uu
cHRyKCksIGVuZE9mUGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihtX3Jhbmdl
LnN0YXJ0KSkpOworICAgIHBhcmFncmFwaFJhbmdlLmVuZCA9ICptYWtlQm91bmRhcnlQb2ludChl
bmRPZlBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5zdGFydCkp
KTsKICAgICAKLSAgICBhdXRvIHJhbmdlU3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7ICpt
YWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigpKSwgbV9yYW5n
ZS5zdGFydCB9KTsKKyAgICBhdXRvIHJhbmdlU3RhcnRPZmZzZXQgPSBjaGFyYWN0ZXJDb3VudCh7
IHBhcmFncmFwaFJhbmdlLnN0YXJ0LCBtX3JhbmdlLnN0YXJ0IH0pOwogICAgIHVpbnQ2NF90IHRv
dGFsTGVuZ3RoUHJvY2Vzc2VkID0gMDsKLSAgICAKKwogICAgIGJvb2wgZmlyc3RJdGVyYXRpb24g
PSB0cnVlOwogICAgIGJvb2wgbGFzdEl0ZXJhdGlvbiA9IGZhbHNlOwogICAgIHdoaWxlICh0b3Rh
bExlbmd0aFByb2Nlc3NlZCA8IHRvdGFsUmFuZ2VMZW5ndGgpIHsKQEAgLTMxNywxMCArMzE2LDEw
IEBAIGF1dG8gVGV4dENoZWNraW5nSGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5n
cmFtbWF0aWNhbFBocmFzZShib29sIGNoZWNrCiAgICAgICAgIGF1dG8gY3VycmVudExlbmd0aCA9
IGNoYXJhY3RlckNvdW50KHBhcmFncmFwaFJhbmdlKTsKICAgICAgICAgdWludDY0X3QgY3VycmVu
dFN0YXJ0T2Zmc2V0ID0gZmlyc3RJdGVyYXRpb24gPyByYW5nZVN0YXJ0T2Zmc2V0IDogMDsKICAg
ICAgICAgdWludDY0X3QgY3VycmVudEVuZE9mZnNldCA9IGN1cnJlbnRMZW5ndGg7Ci0gICAgICAg
IGlmIChpblNhbWVQYXJhZ3JhcGgocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSwgY3Jl
YXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG1fcmFuZ2UuZW5kKSkpIHsKKyAgICAgICAgaWYgKGlu
U2FtZVBhcmFncmFwaChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocGFyYWdyYXBoUmFuZ2Uu
c3RhcnQpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obV9yYW5nZS5lbmQpKSkgewogICAg
ICAgICAgICAgLy8gRGV0ZXJtaW5lIHRoZSBjaGFyYWN0ZXIgb2Zmc2V0IGZyb20gdGhlIGVuZCBv
ZiB0aGUgb3JpZ2luYWwgc2VhcmNoIHJhbmdlIHRvIHRoZSBlbmQgb2YgdGhlIHBhcmFncmFwaCwK
ICAgICAgICAgICAgIC8vIHNpbmNlIHdlIHdpbGwgd2FudCB0byBpZ25vcmUgcmVzdWx0cyBpbiB0
aGlzIGFyZWEuCi0gICAgICAgICAgICBjdXJyZW50RW5kT2Zmc2V0ID0gY2hhcmFjdGVyQ291bnQo
eyAqbWFrZUJvdW5kYXJ5UG9pbnQocGFyYWdyYXBoUmFuZ2UtPnN0YXJ0UG9zaXRpb24oKSksIG1f
cmFuZ2UuZW5kIH0pOworICAgICAgICAgICAgY3VycmVudEVuZE9mZnNldCA9IGNoYXJhY3RlckNv
dW50KHsgcGFyYWdyYXBoUmFuZ2Uuc3RhcnQsIG1fcmFuZ2UuZW5kIH0pOwogICAgICAgICAgICAg
bGFzdEl0ZXJhdGlvbiA9IHRydWU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGN1cnJlbnRTdGFy
dE9mZnNldCA8IGN1cnJlbnRFbmRPZmZzZXQpIHsKQEAgLTMzNyw3ICszMzYsNyBAQCBhdXRvIFRl
eHRDaGVja2luZ0hlbHBlcjo6ZmluZEZpcnN0TWlzc3BlbGxlZFdvcmRPclVuZ3JhbW1hdGljYWxQ
aHJhc2UoYm9vbCBjaGVjawogICAgICAgICAgICAgICAgIGlmIChjaGVja0dyYW1tYXIpCiAgICAg
ICAgICAgICAgICAgICAgIGNoZWNraW5nVHlwZXMuYWRkKFRleHRDaGVja2luZ1R5cGU6OkdyYW1t
YXIpOwogICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rpb24gY3VycmVudFNlbGVjdGlvbjsK
LSAgICAgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gcGFyYWdyYXBoUmFuZ2UtPm93bmVy
RG9jdW1lbnQoKS5mcmFtZSgpKQorICAgICAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBw
YXJhZ3JhcGhSYW5nZS5zdGFydC5jb250YWluZXItPmRvY3VtZW50KCkuZnJhbWUoKSkKICAgICAg
ICAgICAgICAgICAgICAgY3VycmVudFNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKICAgICAgICAgICAgICAgICBjaGVja1RleHRPZlBhcmFncmFwaCgqbV9jbGllbnQu
dGV4dENoZWNrZXIoKSwgcGFyYWdyYXBoU3RyaW5nLCBjaGVja2luZ1R5cGVzLCByZXN1bHRzLCBj
dXJyZW50U2VsZWN0aW9uKTsKIApAQCAtMzc5LDcgKzM3OCw3IEBAIGF1dG8gVGV4dENoZWNraW5n
SGVscGVyOjpmaW5kRmlyc3RNaXNzcGVsbGVkV29yZE9yVW5ncmFtbWF0aWNhbFBocmFzZShib29s
IGNoZWNrCiAgICAgICAgICAgICAgICAgaWYgKCFtaXNzcGVsbGVkV29yZC5pc0VtcHR5KCkgJiYg
KCFjaGVja0dyYW1tYXIgfHwgYmFkR3JhbW1hclBocmFzZS5pc0VtcHR5KCkgfHwgc3BlbGxpbmdM
b2NhdGlvbiA8PSBncmFtbWFyRGV0YWlsTG9jYXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAg
IHVpbnQ2NF90IHNwZWxsaW5nT2Zmc2V0ID0gc3BlbGxpbmdMb2NhdGlvbiAtIGN1cnJlbnRTdGFy
dE9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdEl0ZXJhdGlvbikKLSAgICAg
ICAgICAgICAgICAgICAgICAgIHNwZWxsaW5nT2Zmc2V0ICs9IGNoYXJhY3RlckNvdW50KHsgbV9y
YW5nZS5zdGFydCwgKm1ha2VCb3VuZGFyeVBvaW50KHBhcmFncmFwaFJhbmdlLT5zdGFydFBvc2l0
aW9uKCkpIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgc3BlbGxpbmdPZmZzZXQgKz0gY2hh
cmFjdGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCBwYXJhZ3JhcGhSYW5nZS5zdGFydCB9KTsKICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBNaXNzcGVsbGVkV29yZCB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBtaXNzcGVsbGVkV29yZCwKICAgICAgICAgICAgICAgICAgICAg
ICAgIHNwZWxsaW5nT2Zmc2V0CkBAIC0zODksNyArMzg4LDcgQEAgYXV0byBUZXh0Q2hlY2tpbmdI
ZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRpY2FsUGhyYXNlKGJvb2wg
Y2hlY2sKICAgICAgICAgICAgICAgICBpZiAoY2hlY2tHcmFtbWFyICYmICFiYWRHcmFtbWFyUGhy
YXNlLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBncmFtbWFyUGhy
YXNlT2Zmc2V0ID0gZ3JhbW1hclBocmFzZUxvY2F0aW9uIC0gY3VycmVudFN0YXJ0T2Zmc2V0Owog
ICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0SXRlcmF0aW9uKQotICAgICAgICAgICAgICAg
ICAgICAgICAgZ3JhbW1hclBocmFzZU9mZnNldCArPSBjaGFyYWN0ZXJDb3VudCh7IG1fcmFuZ2Uu
c3RhcnQsICptYWtlQm91bmRhcnlQb2ludChwYXJhZ3JhcGhSYW5nZS0+c3RhcnRQb3NpdGlvbigp
KSB9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdyYW1tYXJQaHJhc2VPZmZzZXQgKz0gY2hh
cmFjdGVyQ291bnQoeyBtX3JhbmdlLnN0YXJ0LCBwYXJhZ3JhcGhSYW5nZS5zdGFydCB9KTsKICAg
ICAgICAgICAgICAgICAgICAgZmlyc3RGb3VuZEl0ZW0gPSBVbmdyYW1tYXRpY2FsUGhyYXNlIHsK
ICAgICAgICAgICAgICAgICAgICAgICAgIGJhZEdyYW1tYXJQaHJhc2UsCiAgICAgICAgICAgICAg
ICAgICAgICAgICBncmFtbWFyUGhyYXNlT2Zmc2V0LApAQCAtNDAyLDEyICs0MDEsMTEgQEAgYXV0
byBUZXh0Q2hlY2tpbmdIZWxwZXI6OmZpbmRGaXJzdE1pc3NwZWxsZWRXb3JkT3JVbmdyYW1tYXRp
Y2FsUGhyYXNlKGJvb2wgY2hlY2sKICAgICAgICAgaWYgKGxhc3RJdGVyYXRpb24gfHwgdG90YWxM
ZW5ndGhQcm9jZXNzZWQgKyBjdXJyZW50TGVuZ3RoID49IHRvdGFsUmFuZ2VMZW5ndGgpCiAgICAg
ICAgICAgICBicmVhazsKIAotICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV3UGFyYWdyYXBoU3Rh
cnQgPSBzdGFydE9mTmV4dFBhcmFncmFwaChwYXJhZ3JhcGhSYW5nZS0+ZW5kUG9zaXRpb24oKSk7
Ci0gICAgICAgIGlmICghc2V0U3RhcnQocGFyYWdyYXBoUmFuZ2UucHRyKCksIG5ld1BhcmFncmFw
aFN0YXJ0KSkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlmICghc2V0RW5kKHBhcmFn
cmFwaFJhbmdlLnB0cigpLCBlbmRPZlBhcmFncmFwaChuZXdQYXJhZ3JhcGhTdGFydCkpKQorICAg
ICAgICBhdXRvIG5leHRTdGFydCA9IHN0YXJ0T2ZOZXh0UGFyYWdyYXBoKGNyZWF0ZUxlZ2FjeUVk
aXRpbmdQb3NpdGlvbihwYXJhZ3JhcGhSYW5nZS5lbmQpKTsKKyAgICAgICAgYXV0byBuZXh0UGFy
YWdyYXBoUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UobmV4dFN0YXJ0LCBlbmRPZlBhcmFncmFwaChu
ZXh0U3RhcnQpKTsKKyAgICAgICAgaWYgKCFuZXh0UGFyYWdyYXBoUmFuZ2UpCiAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgcGFyYWdyYXBoUmFuZ2UgPSBXVEZNb3ZlKCpuZXh0UGFyYWdyYXBo
UmFuZ2UpOwogCiAgICAgICAgIGZpcnN0SXRlcmF0aW9uID0gZmFsc2U7CiAgICAgICAgIHRvdGFs
TGVuZ3RoUHJvY2Vzc2VkICs9IGN1cnJlbnRMZW5ndGg7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9U
eXBpbmdDb21tYW5kLmNwcAppbmRleCBkMDE1MTAyYTYwOWZmYWVkMjYxMmFmMmU3OWMzYjlmZWRk
NWYxOWFhLi5mYzk3NTc3NDgzMTFjZDEyZmJkZDcyZTFiMjRmZTRiYjBmMDcwOWFjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTQ0OSw3ICs0NDksNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6Om1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5nQ29t
bWFuZCBjb21tYW5kVHlwZSkKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIHAxID0gc3RhcnRPZldv
cmQocHJldmlvdXMsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAgICAgVmlzaWJsZVBvc2l0
aW9uIHAyID0gc3RhcnRPZldvcmQoc3RhcnQsIExlZnRXb3JkSWZPbkJvdW5kYXJ5KTsKICAgICAg
ICAgaWYgKHAxICE9IHAyKSB7Ci0gICAgICAgICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gbWFr
ZVJhbmdlKHAxLCBwMik7CisgICAgICAgICAgICBhdXRvIHJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KHAxLCBwMik7CiAgICAgICAgICAgICBTdHJpbmcgc3RyaXBwZWRQcmV2aW91c1dvcmQ7CiAgICAg
ICAgICAgICBpZiAocmFuZ2UgJiYgKGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2Vy
dFRleHQgfHwgY29tbWFuZFR5cGUgPT0gVHlwaW5nQ29tbWFuZDo6SW5zZXJ0TGluZUJyZWFrIHx8
IGNvbW1hbmRUeXBlID09IFR5cGluZ0NvbW1hbmQ6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvciB8
fCBjb21tYW5kVHlwZSA9PSBUeXBpbmdDb21tYW5kOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JJ
blF1b3RlZENvbnRlbnQpKQogICAgICAgICAgICAgICAgIHN0cmlwcGVkUHJldmlvdXNXb3JkID0g
cGxhaW5UZXh0KCpyYW5nZSkuc3RyaXBXaGl0ZVNwYWNlKCk7CkBAIC00NzUsNyArNDc1LDcgQEAg
dm9pZCBUeXBpbmdDb21tYW5kOjptYXJrTWlzc3BlbGxpbmdzQWZ0ZXJUeXBpbmcoRVR5cGluZ0Nv
bW1hbmQgY29tbWFuZFR5cGUpCiAgICAgfQogfQogCi1ib29sIFR5cGluZ0NvbW1hbmQ6OndpbGxB
ZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kIGNvbW1hbmRUeXBlLCBUZXh0R3Jh
bnVsYXJpdHkgZ3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYgdGV4dCwgUmVmUHRyPFJhbmdlPiYm
IHJhbmdlKQorYm9vbCBUeXBpbmdDb21tYW5kOjp3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChF
VHlwaW5nQ29tbWFuZCBjb21tYW5kVHlwZSwgVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBj
b25zdCBTdHJpbmcmIHRleHQsIGNvbnN0IE9wdGlvbmFsPFNpbXBsZVJhbmdlPiYgcmFuZ2UpCiB7
CiAgICAgbV9jdXJyZW50VGV4dFRvSW5zZXJ0ID0gdGV4dDsKICAgICBtX2N1cnJlbnRUeXBpbmdF
ZGl0QWN0aW9uID0gZWRpdEFjdGlvbkZvclR5cGluZ0NvbW1hbmQoY29tbWFuZFR5cGUsIGdyYW51
bGFyaXR5LCBtX2NvbXBvc2l0aW9uVHlwZSwgbV9pc0F1dG9jb21wbGV0aW9uKTsKQEAgLTY2MSw3
ICs2NjEsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIHNob3VsZEFkZAogICAgICAgICBpZiAocHJldmlvdXNQ
b3NpdGlvbi5pc051bGwoKSB8fCBlbmNsb3NpbmdUYWJsZUNlbGwgIT0gZW5jbG9zaW5nVGFibGVD
ZWxsRm9yUHJldmlvdXNQb3NpdGlvbikgewogICAgICAgICAgICAgLy8gV2hlbiB0aGUgY2FyZXQg
aXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBlZGl0YWJsZSBhcmVhIGluIGFuIGVtcHR5IGxpc3QgaXRl
bSwgYnJlYWsgb3V0IG9mIHRoZSBsaXN0IGl0ZW0uCiAgICAgICAgICAgICBpZiAoYXV0byBkZWxl
dGVMaXN0U2VsZWN0aW9uID0gc2hvdWxkQnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0oKSkgewotICAg
ICAgICAgICAgICAgIGlmICh3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChEZWxldGVLZXksIGdy
YW51bGFyaXR5LCB7IH0sIFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQoKSwgZGVsZXRlTGlzdFNlbGVj
dGlvbi52YWx1ZSgpLnN0YXJ0KCksIGRlbGV0ZUxpc3RTZWxlY3Rpb24udmFsdWUoKS5lbmQoKSkp
KSB7CisgICAgICAgICAgICAgICAgaWYgKHdpbGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKERlbGV0
ZUtleSwgZ3JhbnVsYXJpdHksIHsgfSwgKmRlbGV0ZUxpc3RTZWxlY3Rpb24udmFsdWUoKS5maXJz
dFJhbmdlKCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrT3V0T2ZFbXB0eUxpc3RJdGVt
KCk7CiAgICAgICAgICAgICAgICAgICAgIHR5cGluZ0FkZGVkVG9PcGVuQ29tbWFuZChEZWxldGVL
ZXkpOwogICAgICAgICAgICAgICAgIH0KQEAgLTczMSw3ICs3MzEsNyBAQCB2b2lkIFR5cGluZ0Nv
bW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29s
IHNob3VsZEFkZAogICAgIGlmIChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3Vt
ZW50KCkuc2VsZWN0aW9uKCkuc2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRl
KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3BlbkNv
bW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVj
dGlvblRvRGVsZXRlLmZpcnN0UmFuZ2UoKSkpKQorICAgIGlmICghd2lsbEFkZFR5cGluZ1RvT3Bl
bkNvbW1hbmQoRGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5m
aXJzdFJhbmdlKCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoc2hvdWxkQWRkVG9LaWxs
UmluZykKQEAgLTgzOSw3ICs4MzksNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxl
dGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBzaAogICAgIGlm
IChzZWxlY3Rpb25Ub0RlbGV0ZS5pc0NhcmV0KCkgfHwgIWRvY3VtZW50KCkuc2VsZWN0aW9uKCku
c2hvdWxkRGVsZXRlU2VsZWN0aW9uKHNlbGVjdGlvblRvRGVsZXRlKSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJkRGVsZXRlS2V5
LCBncmFudWxhcml0eSwgeyB9LCBjcmVhdGVMaXZlUmFuZ2Uoc2VsZWN0aW9uVG9EZWxldGUuZmly
c3RSYW5nZSgpKSkpCisgICAgaWYgKCF3aWxsQWRkVHlwaW5nVG9PcGVuQ29tbWFuZChGb3J3YXJk
RGVsZXRlS2V5LCBncmFudWxhcml0eSwgeyB9LCBzZWxlY3Rpb25Ub0RlbGV0ZS5maXJzdFJhbmdl
KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICAvLyBQb3N0IHRoZSBhY2Nlc3NpYmlsaXR5IG5v
dGlmaWNhdGlvbiBiZWZvcmUgYWN0dWFsbHkgZGVsZXRpbmcgdGhlIGNvbnRlbnQgd2hpbGUgc2Vs
ZWN0aW9uVG9EZWxldGUgaXMgc3RpbGwgdmFsaWQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdD
b21tYW5kLmgKaW5kZXggZTk3NmE2YmYwYTQ4YzY1NjVjOTgwYWIyM2UwMmEwYjFmZTExMTRkYy4u
NjkwZWUyNjI1ZTBkMTY0MmY4YTYyOTcxMGEwYjhiMDFjYjNhNzcwYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9UeXBpbmdDb21tYW5kLmgKQEAgLTEyNSw3ICsxMjUsNyBAQCBwcml2YXRlOgogICAg
IHN0YXRpYyB2b2lkIHVwZGF0ZVNlbGVjdGlvbklmRGlmZmVyZW50RnJvbUN1cnJlbnRTZWxlY3Rp
b24oVHlwaW5nQ29tbWFuZCosIERvY3VtZW50Jik7CiAKICAgICB2b2lkIHVwZGF0ZVByZXNlcnZl
c1R5cGluZ1N0eWxlKEVUeXBpbmdDb21tYW5kKTsKLSAgICBib29sIHdpbGxBZGRUeXBpbmdUb09w
ZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kLCBUZXh0R3JhbnVsYXJpdHksIGNvbnN0IFN0cmluZyYg
PSBlbXB0eVN0cmluZygpLCBSZWZQdHI8UmFuZ2U+JiYgPSBudWxscHRyKTsKKyAgICBib29sIHdp
bGxBZGRUeXBpbmdUb09wZW5Db21tYW5kKEVUeXBpbmdDb21tYW5kLCBUZXh0R3JhbnVsYXJpdHks
IGNvbnN0IFN0cmluZyYgPSBlbXB0eVN0cmluZygpLCBjb25zdCBPcHRpb25hbDxTaW1wbGVSYW5n
ZT4mID0geyB9KTsKICAgICB2b2lkIG1hcmtNaXNzcGVsbGluZ3NBZnRlclR5cGluZyhFVHlwaW5n
Q29tbWFuZCk7CiAgICAgdm9pZCB0eXBpbmdBZGRlZFRvT3BlbkNvbW1hbmQoRVR5cGluZ0NvbW1h
bmQpOwogICAgIGJvb2wgbWFrZUVkaXRhYmxlUm9vdEVtcHR5KCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5jcHAKaW5kZXggMDE2OGViODE4MTQyZDNmNDY5OWY1NWVh
MGZmOGIyMmFhZGI2Mzc2Zi4uZjk1OGQ4ZTMzMzI2YTYzZWE5ZWVhM2M1NmNkN2FiOGM0NDhhNmFh
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmNwcApAQCAtNzMw
LDUzICs3MzAsNiBAQCB2b2lkIFZpc2libGVQb3NpdGlvbjo6c2hvd1RyZWVGb3JUaGlzKCkgY29u
c3QKIAogI2VuZGlmCiAKLVJlZlB0cjxSYW5nZT4gbWFrZVJhbmdlKGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IFZpc2libGVQb3NpdGlvbiYgZW5kKQotewotICAgIGlmIChzdGFy
dC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IAotICAgIFBvc2l0aW9uIHMgPSBzdGFydC5kZWVwRXF1aXZhbGVudCgpLnBhcmVudEFuY2hvcmVk
RXF1aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGUgPSBlbmQuZGVlcEVxdWl2YWxlbnQoKS5wYXJl
bnRBbmNob3JlZEVxdWl2YWxlbnQoKTsKLSAgICBpZiAocy5pc051bGwoKSB8fCBlLmlzTnVsbCgp
KQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgIHJldHVybiBSYW5nZTo6Y3JlYXRlKHMu
Y29udGFpbmVyTm9kZSgpLT5kb2N1bWVudCgpLCBzLmNvbnRhaW5lck5vZGUoKSwgcy5vZmZzZXRJ
bkNvbnRhaW5lck5vZGUoKSwgZS5jb250YWluZXJOb2RlKCksIGUub2Zmc2V0SW5Db250YWluZXJO
b2RlKCkpOwotfQotCi1WaXNpYmxlUG9zaXRpb24gc3RhcnRWaXNpYmxlUG9zaXRpb24oY29uc3Qg
UmFuZ2UgKnIsIEVBZmZpbml0eSBhZmZpbml0eSkKLXsKLSAgICByZXR1cm4gVmlzaWJsZVBvc2l0
aW9uKHItPnN0YXJ0UG9zaXRpb24oKSwgYWZmaW5pdHkpOwotfQotCi1WaXNpYmxlUG9zaXRpb24g
ZW5kVmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdlICpyLCBFQWZmaW5pdHkgYWZmaW5pdHkpCi17
Ci0gICAgcmV0dXJuIFZpc2libGVQb3NpdGlvbihyLT5lbmRQb3NpdGlvbigpLCBhZmZpbml0eSk7
Ci19Ci0KLWJvb2wgc2V0U3RhcnQoUmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCku
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFyYW5nZS0+c2V0U3RhcnQoKnAu
Y29udGFpbmVyTm9kZSgpLCBwLm9mZnNldEluQ29udGFpbmVyTm9kZSgpKS5oYXNFeGNlcHRpb24o
KTsKLX0KLQotYm9vbCBzZXRFbmQoUmFuZ2UqIHJhbmdlLCBjb25zdCBWaXNpYmxlUG9zaXRpb24m
IHZpc2libGVQb3NpdGlvbikKLXsKLSAgICBpZiAoIXJhbmdlKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICBQb3NpdGlvbiBwID0gdmlzaWJsZVBvc2l0aW9uLmRlZXBFcXVpdmFsZW50KCku
cGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAgaWYgKCFwLmNvbnRhaW5lck5vZGUoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuICFyYW5nZS0+c2V0RW5kKCpwLmNv
bnRhaW5lck5vZGUoKSwgcC5vZmZzZXRJbkNvbnRhaW5lck5vZGUoKSkuaGFzRXhjZXB0aW9uKCk7
Ci19Ci0KIC8vIEZJWE1FOiBNYXliZSB0aGlzIHNob3VsZCBiZSBkZXByZWNhdGVkIHRvbywgbGlr
ZSB0aGUgdW5kZXJseWluZyBmdW5jdGlvbj8KIEVsZW1lbnQqIGVuY2xvc2luZ0Jsb2NrRmxvd0Vs
ZW1lbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiB2aXNpYmxlUG9zaXRpb24pCiB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlvbi5oIGIvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9WaXNpYmxlUG9zaXRpb24uaAppbmRleCA5MWVkNGNjMGYzNDQ4MzQ3NTIy
ZDVkMTI2YWU0OWYzZTJjMDFlMmRmLi4wYjk4M2IxOTNjOWEwYjRmODUyMGE0ZGYyMDJhNWIwNjE1
OGFjNjU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVQb3NpdGlv
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVBvc2l0aW9uLmgKQEAgLTEy
NiwxMiArMTI2LDYgQEAgYm9vbCBvcGVyYXRvcj49KGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIGNv
bnN0IFZpc2libGVQb3NpdGlvbiYpOwogCiBXRUJDT1JFX0VYUE9SVCBPcHRpb25hbDxCb3VuZGFy
eVBvaW50PiBtYWtlQm91bmRhcnlQb2ludChjb25zdCBWaXNpYmxlUG9zaXRpb24mKTsKIAotV0VC
Q09SRV9FWFBPUlQgUmVmUHRyPFJhbmdlPiBtYWtlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9u
JiwgY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIHNldFN0YXJ0KFJhbmdlKiwgY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJik7Ci1ib29sIHNldEVuZChSYW5nZSosIGNvbnN0IFZpc2libGVQb3Np
dGlvbiYpOwotVmlzaWJsZVBvc2l0aW9uIHN0YXJ0VmlzaWJsZVBvc2l0aW9uKGNvbnN0IFJhbmdl
KiwgRUFmZmluaXR5KTsKLVZpc2libGVQb3NpdGlvbiBlbmRWaXNpYmxlUG9zaXRpb24oY29uc3Qg
UmFuZ2UqLCBFQWZmaW5pdHkpOwotCiBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBlbmNsb3NpbmdC
bG9ja0Zsb3dFbGVtZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogCiBib29sIGlzRmlyc3RW
aXNpYmxlUG9zaXRpb25Jbk5vZGUoY29uc3QgVmlzaWJsZVBvc2l0aW9uJiwgY29uc3QgTm9kZSop
OwpAQCAtMTQ5LDcgKzE0Myw3IEBAIHN0cnVjdCBWaXNpYmxlUG9zaXRpb25SYW5nZSB7CiAgICAg
Ym9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiBzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxs
KCk7IH0KIH07CiAKLU9wdGlvbmFsPFNpbXBsZVJhbmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uUmFuZ2UmKTsKK1dFQkNPUkVfRVhQT1JUIE9wdGlvbmFsPFNpbXBsZVJh
bmdlPiBtYWtlU2ltcGxlUmFuZ2UoY29uc3QgVmlzaWJsZVBvc2l0aW9uUmFuZ2UmKTsKIAogLy8g
aW5saW5lcwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5jcHAKaW5kZXggYTgw
N2Y1NjNlNmVkMjBlZGUwN2E3MGQ0NGNjMWFlNWMyNzIwNDBjMS4uYTMyOWIxMjFhNGMzMWQzZGU0
YmNjMDUzZjU1YThlZmRjZmRjNzRmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9WaXNpYmxlVW5pdHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVVu
aXRzLmNwcApAQCAtNDg2LDcgKzQ4Niw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZFJlcGVhdGVkQ2hh
cmFjdGVyKFZlY3RvcjxVQ2hhciwgMTAyND4mIGJ1ZmZlciwgVUNoYXIgY2hhcmFjdGVyCiAgICAg
ICAgIGJ1ZmZlcltvbGRTaXplICsgaV0gPSBjaGFyYWN0ZXI7CiB9CiAKLXVuc2lnbmVkIHN1ZmZp
eExlbmd0aEZvclJhbmdlKGNvbnN0IFJhbmdlJiBmb3J3YXJkc1NjYW5SYW5nZSwgVmVjdG9yPFVD
aGFyLCAxMDI0PiYgc3RyaW5nKQordW5zaWduZWQgc3VmZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3Qg
U2ltcGxlUmFuZ2UmIGZvcndhcmRzU2NhblJhbmdlLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiBzdHJp
bmcpCiB7CiAgICAgdW5zaWduZWQgc3VmZml4TGVuZ3RoID0gMDsKICAgICBUZXh0SXRlcmF0b3Ig
Zm9yd2FyZHNJdGVyYXRvcihmb3J3YXJkc1NjYW5SYW5nZSk7CkBAIC01MDIsNyArNTAyLDcgQEAg
dW5zaWduZWQgc3VmZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgUmFuZ2UmIGZvcndhcmRzU2NhblJh
bmdlLCBWZWN0b3I8VUNoYXIsIDEwMjQKICAgICByZXR1cm4gc3VmZml4TGVuZ3RoOwogfQogCi11
bnNpZ25lZCBwcmVmaXhMZW5ndGhGb3JSYW5nZShjb25zdCBSYW5nZSYgYmFja3dhcmRzU2NhblJh
bmdlLCBWZWN0b3I8VUNoYXIsIDEwMjQ+JiBzdHJpbmcpCit1bnNpZ25lZCBwcmVmaXhMZW5ndGhG
b3JSYW5nZShjb25zdCBTaW1wbGVSYW5nZSYgYmFja3dhcmRzU2NhblJhbmdlLCBWZWN0b3I8VUNo
YXIsIDEwMjQ+JiBzdHJpbmcpCiB7CiAgICAgdW5zaWduZWQgcHJlZml4TGVuZ3RoID0gMDsKICAg
ICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGJhY2t3YXJkc0l0ZXJhdG9yKGJhY2t3
YXJkc1NjYW5SYW5nZSk7CkBAIC01ODAsNzQgKzU4MCw1MCBAQCB1bnNpZ25lZCBmb3J3YXJkU2Vh
cmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKFRleHRJdGVyYXRvciYgaXQsIFZlY3RvcjxV
Q2hhcgogfQogCiBlbnVtIGNsYXNzIE5lZWRzQ29udGV4dEF0UGFyYWdyYXBoU3RhcnQgeyBZZXMs
IE5vIH07Ci1zdGF0aWMgVmlzaWJsZVBvc2l0aW9uIHByZXZpb3VzQm91bmRhcnkoY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBjLCBCb3VuZGFyeVNlYXJjaEZ1bmN0aW9uIHNlYXJjaEZ1bmN0aW9uLAor
c3RhdGljIFZpc2libGVQb3NpdGlvbiBwcmV2aW91c0JvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3Np
dGlvbiYgcG9zaXRpb24sIEJvdW5kYXJ5U2VhcmNoRnVuY3Rpb24gc2VhcmNoRnVuY3Rpb24sCiAg
ICAgTmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydCBuZWVkc0NvbnRleHRBdFBhcmFncmFwaFN0
YXJ0ID0gTmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydDo6Tm8pCiB7Ci0gICAgUG9zaXRpb24g
cG9zID0gYy5kZWVwRXF1aXZhbGVudCgpOwotICAgIE5vZGUqIGJvdW5kYXJ5ID0gcG9zLnBhcmVu
dEVkaXRpbmdCb3VuZGFyeSgpOworICAgIGF1dG8gYm91bmRhcnkgPSBwb3NpdGlvbi5kZWVwRXF1
aXZhbGVudCgpLnBhcmVudEVkaXRpbmdCb3VuZGFyeSgpOwogICAgIGlmICghYm91bmRhcnkpCi0g
ICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKLQotICAgIERvY3VtZW50JiBib3VuZGFy
eURvY3VtZW50ID0gYm91bmRhcnktPmRvY3VtZW50KCk7Ci0gICAgUG9zaXRpb24gc3RhcnQgPSBj
cmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oYm91bmRhcnksIDApLnBhcmVudEFuY2hvcmVkRXF1
aXZhbGVudCgpOwotICAgIFBvc2l0aW9uIGVuZCA9IHBvcy5wYXJlbnRBbmNob3JlZEVxdWl2YWxl
bnQoKTsKLQotICAgIGlmIChzdGFydC5pc051bGwoKSB8fCBlbmQuaXNOdWxsKCkpCi0gICAgICAg
IHJldHVybiBWaXNpYmxlUG9zaXRpb24oKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIFJl
ZjxSYW5nZT4gc2VhcmNoUmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKGJvdW5kYXJ5RG9jdW1lbnQpOwot
ICAgIAogICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gc3RyaW5nOwogICAgIHVuc2lnbmVkIHN1ZmZp
eExlbmd0aCA9IDA7CiAKLSAgICBpZiAobmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydCA9PSBO
ZWVkc0NvbnRleHRBdFBhcmFncmFwaFN0YXJ0OjpZZXMgJiYgaXNTdGFydE9mUGFyYWdyYXBoKGMp
KSB7Ci0gICAgICAgIGF1dG8gZm9yd2FyZHNTY2FuUmFuZ2UgPSBib3VuZGFyeURvY3VtZW50LmNy
ZWF0ZVJhbmdlKCk7Ci0gICAgICAgIGF1dG8gZW5kT2ZDdXJyZW50UGFyYWdyYXBoID0gZW5kT2ZQ
YXJhZ3JhcGgoYyk7Ci0gICAgICAgIGF1dG8gcmVzdWx0ID0gZm9yd2FyZHNTY2FuUmFuZ2UtPnNl
dEVuZChlbmRPZkN1cnJlbnRQYXJhZ3JhcGguZGVlcEVxdWl2YWxlbnQoKSk7Ci0gICAgICAgIGlm
IChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4geyB9OwotICAgICAg
ICByZXN1bHQgPSBmb3J3YXJkc1NjYW5SYW5nZS0+c2V0U3RhcnQoc3RhcnQpOwotICAgICAgICBp
ZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoKmJvdW5kYXJ5KSwg
cG9zaXRpb24pOworICAgIGlmICghc2VhcmNoUmFuZ2UpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBpZiAobmVlZHNDb250ZXh0QXRQYXJhZ3JhcGhTdGFydCA9PSBOZWVkc0NvbnRleHRBdFBh
cmFncmFwaFN0YXJ0OjpZZXMgJiYgaXNTdGFydE9mUGFyYWdyYXBoKHBvc2l0aW9uKSkgeworICAg
ICAgICBhdXRvIGZvcndhcmRzU2NhblJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHNlYXJjaFJhbmdl
LT5zdGFydCwgZW5kT2ZQYXJhZ3JhcGgocG9zaXRpb24pKTsKKyAgICAgICAgaWYgKCFmb3J3YXJk
c1NjYW5SYW5nZSkKICAgICAgICAgICAgIHJldHVybiB7IH07Ci0gICAgICAgIGZvciAoVGV4dEl0
ZXJhdG9yIGZvcndhcmRzSXRlcmF0b3IoZm9yd2FyZHNTY2FuUmFuZ2UpOyAhZm9yd2FyZHNJdGVy
YXRvci5hdEVuZCgpOyBmb3J3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKKyAgICAgICAgZm9yIChU
ZXh0SXRlcmF0b3IgZm9yd2FyZHNJdGVyYXRvcigqZm9yd2FyZHNTY2FuUmFuZ2UpOyAhZm9yd2Fy
ZHNJdGVyYXRvci5hdEVuZCgpOyBmb3J3YXJkc0l0ZXJhdG9yLmFkdmFuY2UoKSkKICAgICAgICAg
ICAgIGFwcGVuZChzdHJpbmcsIGZvcndhcmRzSXRlcmF0b3IudGV4dCgpKTsKICAgICAgICAgc3Vm
Zml4TGVuZ3RoID0gc3RyaW5nLnNpemUoKTsKLSAgICB9IGVsc2UgaWYgKHJlcXVpcmVzQ29udGV4
dEZvcldvcmRCb3VuZGFyeShjLmNoYXJhY3RlckJlZm9yZSgpKSkgewotICAgICAgICBhdXRvIGZv
cndhcmRzU2NhblJhbmdlID0gYm91bmRhcnlEb2N1bWVudC5jcmVhdGVSYW5nZSgpOwotICAgICAg
ICBhdXRvIHJlc3VsdCA9IGZvcndhcmRzU2NhblJhbmdlLT5zZXRFbmRBZnRlcigqYm91bmRhcnkp
OwotICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
IHsgfTsKLSAgICAgICAgcmVzdWx0ID0gZm9yd2FyZHNTY2FuUmFuZ2UtPnNldFN0YXJ0KCplbmQu
ZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgICAg
ICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICB9IGVsc2UgaWYgKHJlcXVpcmVzQ29udGV4dEZvcldvcmRCb3VuZGFyeShwb3NpdGlvbi5jaGFy
YWN0ZXJCZWZvcmUoKSkpIHsKKyAgICAgICAgYXV0byBmb3J3YXJkc1NjYW5SYW5nZSA9IG1ha2VT
aW1wbGVSYW5nZShzZWFyY2hSYW5nZS0+ZW5kLCBtYWtlQm91bmRhcnlQb2ludEFmdGVyTm9kZUNv
bnRlbnRzKCpib3VuZGFyeSkpOwogICAgICAgICBzdWZmaXhMZW5ndGggPSBzdWZmaXhMZW5ndGhG
b3JSYW5nZShmb3J3YXJkc1NjYW5SYW5nZSwgc3RyaW5nKTsKICAgICB9CiAKLSAgICBhdXRvIHJl
c3VsdCA9IHNlYXJjaFJhbmdlLT5zZXRTdGFydCgqc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSwgc3Rh
cnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Ci0gICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRp
b24oKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICByZXN1bHQgPSBzZWFyY2hSYW5nZS0+c2V0
RW5kKCplbmQuZGVwcmVjYXRlZE5vZGUoKSwgZW5kLmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkp
OwotICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KHNlYXJjaFJhbmdlKTsKKyAg
ICBTaW1wbGlmaWVkQmFja3dhcmRzVGV4dEl0ZXJhdG9yIGl0KCpzZWFyY2hSYW5nZSk7CiAgICAg
dW5zaWduZWQgbmV4dCA9IGJhY2t3YXJkU2VhcmNoRm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9y
KGl0LCBzdHJpbmcsIHN1ZmZpeExlbmd0aCwgc2VhcmNoRnVuY3Rpb24pOwogCiAgICAgaWYgKCFu
ZXh0KQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGl0LmF0RW5kKCkgPyBzZWFyY2hS
YW5nZS0+c3RhcnRQb3NpdGlvbigpIDogcG9zLCBET1dOU1RSRUFNKTsKKyAgICAgICAgcmV0dXJu
IGl0LmF0RW5kKCkgPyBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oc2VhcmNoUmFuZ2UtPnN0
YXJ0KSA6IHBvc2l0aW9uOwogCi0gICAgYXV0byYgbm9kZSA9IGl0LmF0RW5kKCkgPyBzZWFyY2hS
YW5nZS0+c3RhcnRDb250YWluZXIoKSA6IGl0LnJhbmdlKCkuc3RhcnQuY29udGFpbmVyLmdldCgp
OworICAgIGF1dG8mIG5vZGUgPSAoaXQuYXRFbmQoKSA/ICpzZWFyY2hSYW5nZSA6IGl0LnJhbmdl
KCkpLnN0YXJ0LmNvbnRhaW5lci5nZXQoKTsKICAgICBpZiAoKCFzdWZmaXhMZW5ndGggJiYgaXM8
VGV4dD4obm9kZSkgJiYgbmV4dCA8PSBkb3duY2FzdDxUZXh0Pihub2RlKS5sZW5ndGgoKSkgfHwg
KG5vZGUucmVuZGVyZXIoKSAmJiBub2RlLnJlbmRlcmVyKCktPmlzQlIoKSAmJiAhbmV4dCkpIHsK
LSAgICAgICAgLy8gVGhlIG5leHQgdmFyaWFibGUgY29udGFpbnMgYSB1c2FibGUgaW5kZXggaW50
byBhIHRleHQgbm9kZQotICAgICAgICByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKGNyZWF0ZUxlZ2Fj
eUVkaXRpbmdQb3NpdGlvbigmbm9kZSwgbmV4dCksIERPV05TVFJFQU0pOworICAgICAgICAvLyBU
aGUgbmV4dCB2YXJpYWJsZSBjb250YWlucyBhIHVzYWJsZSBpbmRleCBpbnRvIGEgdGV4dCBub2Rl
LgorICAgICAgICByZXR1cm4gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKCZub2RlLCBuZXh0
KTsKICAgICB9CiAKICAgICAvLyBVc2UgdGhlIGNoYXJhY3RlciBpdGVyYXRvciB0byB0cmFuc2xh
dGUgdGhlIG5leHQgdmFsdWUgaW50byBhIERPTSBwb3NpdGlvbi4KLSAgICBCYWNrd2FyZHNDaGFy
YWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UpOworICAgIEJhY2t3YXJkc0NoYXJhY3Rl
ckl0ZXJhdG9yIGNoYXJJdCgqc2VhcmNoUmFuZ2UpOwogICAgIGlmIChuZXh0IDwgc3RyaW5nLnNp
emUoKSAtIHN1ZmZpeExlbmd0aCkKICAgICAgICAgY2hhckl0LmFkdmFuY2Uoc3RyaW5nLnNpemUo
KSAtIHN1ZmZpeExlbmd0aCAtIG5leHQpOwogICAgIC8vIEZJWE1FOiBjaGFySXQgY2FuIGdldCBv
dXQgb2Ygc2hhZG93IGhvc3QuCi0gICAgcmV0dXJuIHsgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0
aW9uKGNoYXJJdC5yYW5nZSgpLmVuZCksIERPV05TVFJFQU0gfTsKKyAgICByZXR1cm4gY3JlYXRl
TGVnYWN5RWRpdGluZ1Bvc2l0aW9uKGNoYXJJdC5yYW5nZSgpLmVuZCk7CiB9CiAKIHN0YXRpYyBW
aXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlvbiYgYywgQm91
bmRhcnlTZWFyY2hGdW5jdGlvbiBzZWFyY2hGdW5jdGlvbikKQEAgLTY1OCwzMCArNjM0LDI5IEBA
IHN0YXRpYyBWaXNpYmxlUG9zaXRpb24gbmV4dEJvdW5kYXJ5KGNvbnN0IFZpc2libGVQb3NpdGlv
biYgYywgQm91bmRhcnlTZWFyY2hGdW5jCiAgICAgICAgIHJldHVybiBWaXNpYmxlUG9zaXRpb24o
KTsKIAogICAgIERvY3VtZW50JiBib3VuZGFyeURvY3VtZW50ID0gYm91bmRhcnktPmRvY3VtZW50
KCk7Ci0gICAgUmVmPFJhbmdlPiBzZWFyY2hSYW5nZSA9IGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRl
UmFuZ2UoKTsKLSAgICBQb3NpdGlvbiBzdGFydChwb3MucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50
KCkpOwogCiAgICAgVmVjdG9yPFVDaGFyLCAxMDI0PiBzdHJpbmc7CiAgICAgdW5zaWduZWQgcHJl
Zml4TGVuZ3RoID0gMDsKIAogICAgIGlmIChyZXF1aXJlc0NvbnRleHRGb3JXb3JkQm91bmRhcnko
Yy5jaGFyYWN0ZXJBZnRlcigpKSkgewotICAgICAgICBhdXRvIGJhY2t3YXJkc1NjYW5SYW5nZSA9
IGJvdW5kYXJ5RG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKLSAgICAgICAgaWYgKHN0YXJ0LmRlcHJl
Y2F0ZWROb2RlKCkpCi0gICAgICAgICAgICBiYWNrd2FyZHNTY2FuUmFuZ2UtPnNldEVuZCgqc3Rh
cnQuZGVwcmVjYXRlZE5vZGUoKSwgc3RhcnQuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKSk7Ci0g
ICAgICAgIHByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aEZvclJhbmdlKGJhY2t3YXJkc1NjYW5S
YW5nZSwgc3RyaW5nKTsKKyAgICAgICAgYXV0byBiYWNrd2FyZHNTY2FuUmFuZ2UgPSBtYWtlU2lt
cGxlUmFuZ2UobWFrZUJvdW5kYXJ5UG9pbnRCZWZvcmVOb2RlQ29udGVudHMoYm91bmRhcnlEb2N1
bWVudCksIGMpOworICAgICAgICBpZiAoIWJhY2t3YXJkc1NjYW5SYW5nZSkKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIHByZWZpeExlbmd0aCA9IHByZWZpeExlbmd0aEZvclJhbmdl
KCpiYWNrd2FyZHNTY2FuUmFuZ2UsIHN0cmluZyk7CiAgICAgfQogCi0gICAgc2VhcmNoUmFuZ2Ut
PnNlbGVjdE5vZGVDb250ZW50cygqYm91bmRhcnkpOwotICAgIGlmIChzdGFydC5kZXByZWNhdGVk
Tm9kZSgpKQotICAgICAgICBzZWFyY2hSYW5nZS0+c2V0U3RhcnQoKnN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCksIHN0YXJ0LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCkpOwotICAgIFRleHRJdGVyYXRv
ciBpdChzZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZp
c2libGVQb3NpdGlvbnMpOworICAgIGF1dG8gc2VhcmNoUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
YywgbWFrZUJvdW5kYXJ5UG9pbnRBZnRlck5vZGVDb250ZW50cygqYm91bmRhcnkpKTsKKyAgICBp
ZiAoIXNlYXJjaFJhbmdlKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVGV4dEl0ZXJhdG9y
IGl0KCpzZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1pdHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZp
c2libGVQb3NpdGlvbnMpOwogICAgIHVuc2lnbmVkIG5leHQgPSBmb3J3YXJkU2VhcmNoRm9yQm91
bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKGl0LCBzdHJpbmcsIHByZWZpeExlbmd0aCwgc2VhcmNoRnVu
Y3Rpb24pOwogICAgIAogICAgIGlmIChpdC5hdEVuZCgpICYmIG5leHQgPT0gc3RyaW5nLnNpemUo
KSkKLSAgICAgICAgcG9zID0gc2VhcmNoUmFuZ2UtPmVuZFBvc2l0aW9uKCk7CisgICAgICAgIHBv
cyA9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihzZWFyY2hSYW5nZS0+ZW5kKTsKICAgICBl
bHNlIGlmIChuZXh0ID4gcHJlZml4TGVuZ3RoKSB7CiAgICAgICAgIC8vIFVzZSB0aGUgY2hhcmFj
dGVyIGl0ZXJhdG9yIHRvIHRyYW5zbGF0ZSB0aGUgbmV4dCB2YWx1ZSBpbnRvIGEgRE9NIHBvc2l0
aW9uLgotICAgICAgICBDaGFyYWN0ZXJJdGVyYXRvciBjaGFySXQoc2VhcmNoUmFuZ2UsIFRleHRJ
dGVyYXRvckVtaXRzQ2hhcmFjdGVyc0JldHdlZW5BbGxWaXNpYmxlUG9zaXRpb25zKTsKKyAgICAg
ICAgQ2hhcmFjdGVySXRlcmF0b3IgY2hhckl0KCpzZWFyY2hSYW5nZSwgVGV4dEl0ZXJhdG9yRW1p
dHNDaGFyYWN0ZXJzQmV0d2VlbkFsbFZpc2libGVQb3NpdGlvbnMpOwogICAgICAgICBjaGFySXQu
YWR2YW5jZShuZXh0IC0gcHJlZml4TGVuZ3RoIC0gMSk7CiAgICAgICAgIGF1dG8gY2hhcmFjdGVy
UmFuZ2UgPSBjaGFySXQucmFuZ2UoKTsKICAgICAgICAgcG9zID0gY3JlYXRlTGVnYWN5RWRpdGlu
Z1Bvc2l0aW9uKGNoYXJhY3RlclJhbmdlLmVuZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxl
VW5pdHMuaAppbmRleCA0MmU2Mzc4OTVlZWM3OWJkOGMyMmI2ZGM3ODk1NDdhMmI4YTlhZTkwLi5m
NDc1MWI3ZjUwNTlkNDhkMTIwNTI2OTNjOGZkYTkyNzE3YWY1Mzk3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVVbml0cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvVmlzaWJsZVVuaXRzLmgKQEAgLTExOCw4ICsxMTgsOCBAQCB1bnNpZ25lZCBzdGFydFdv
cmRCb3VuZGFyeShTdHJpbmdWaWV3LCB1bnNpZ25lZCwgQm91bmRhcnlTZWFyY2hDb250ZXh0QXZh
aWxhYmlsaQogdW5zaWduZWQgZW5kV29yZEJvdW5kYXJ5KFN0cmluZ1ZpZXcsIHVuc2lnbmVkLCBC
b3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJvb2wmKTsKIHVuc2lnbmVkIHN0YXJ0
U2VudGVuY2VCb3VuZGFyeShTdHJpbmdWaWV3LCB1bnNpZ25lZCwgQm91bmRhcnlTZWFyY2hDb250
ZXh0QXZhaWxhYmlsaXR5LCBib29sJik7CiB1bnNpZ25lZCBlbmRTZW50ZW5jZUJvdW5kYXJ5KFN0
cmluZ1ZpZXcsIHVuc2lnbmVkLCBCb3VuZGFyeVNlYXJjaENvbnRleHRBdmFpbGFiaWxpdHksIGJv
b2wmKTsKLXVuc2lnbmVkIHN1ZmZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFJhbmdlJiwgVmVjdG9y
PFVDaGFyLCAxMDI0PiYpOwotdW5zaWduZWQgcHJlZml4TGVuZ3RoRm9yUmFuZ2UoY29uc3QgUmFu
Z2UmLCBWZWN0b3I8VUNoYXIsIDEwMjQ+Jik7Cit1bnNpZ25lZCBzdWZmaXhMZW5ndGhGb3JSYW5n
ZShjb25zdCBTaW1wbGVSYW5nZSYsIFZlY3RvcjxVQ2hhciwgMTAyND4mKTsKK3Vuc2lnbmVkIHBy
ZWZpeExlbmd0aEZvclJhbmdlKGNvbnN0IFNpbXBsZVJhbmdlJiwgVmVjdG9yPFVDaGFyLCAxMDI0
PiYpOwogdW5zaWduZWQgYmFja3dhcmRTZWFyY2hGb3JCb3VuZGFyeVdpdGhUZXh0SXRlcmF0b3Io
U2ltcGxpZmllZEJhY2t3YXJkc1RleHRJdGVyYXRvciYsIFZlY3RvcjxVQ2hhciwgMTAyND4mLCB1
bnNpZ25lZCwgQm91bmRhcnlTZWFyY2hGdW5jdGlvbik7CiB1bnNpZ25lZCBmb3J3YXJkU2VhcmNo
Rm9yQm91bmRhcnlXaXRoVGV4dEl0ZXJhdG9yKFRleHRJdGVyYXRvciYsIFZlY3RvcjxVQ2hhciwg
MTAyND4mLCB1bnNpZ25lZCwgQm91bmRhcnlTZWFyY2hGdW5jdGlvbik7CiBOb2RlKiBmaW5kU3Rh
cnRPZlBhcmFncmFwaChOb2RlKiwgTm9kZSosIE5vZGUqLCBpbnQmLCBQb3NpdGlvbjo6QW5jaG9y
VHlwZSYsIEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0gYi9Tb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL2NvY29hL0RhdGFEZXRlY3Rpb24ubW0KaW5kZXggMTRmYTY4ODJjNjczNmM3M2ZkNjM0
NDA4ZmVjZDc4YTQyZGJhYTZkMC4uMmE1ZGVlODAxYjM1Zjc1YmU1YmVlZTRlNjUyZTExNzc1MmFm
YTUzNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9EYXRhRGV0ZWN0
aW9uLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvRGF0YURldGVjdGlvbi5t
bQpAQCAtMzU1LDcgKzM1NSw2IEBAIHN0YXRpYyB2b2lkIGJ1aWxkUXVlcnkoRERTY2FuUXVlcnlS
ZWYgc2NhblF1ZXJ5LCBjb25zdCBTaW1wbGVSYW5nZSYgY29udGV4dFJhbmdlCiAgICAgQ0ZDaGFy
YWN0ZXJTZXRSZWYgd2hpdGVTcGFjZXNTZXQgPSBDRkNoYXJhY3RlclNldEdldFByZWRlZmluZWQo
a0NGQ2hhcmFjdGVyU2V0V2hpdGVzcGFjZUFuZE5ld2xpbmUpOwogICAgIENGQ2hhcmFjdGVyU2V0
UmVmIG5ld0xpbmVzU2V0ID0gQ0ZDaGFyYWN0ZXJTZXRHZXRQcmVkZWZpbmVkKGtDRkNoYXJhY3Rl
clNldE5ld2xpbmUpOwogICAgIAotICAgIFJlZlB0cjxSYW5nZT4gZW5kUmFuZ2U7CiAgICAgQ0ZJ
bmRleCBpdGVyYXRvckNvdW50ID0gMDsKICAgICBDRkluZGV4IGZyYWdtZW50Q291bnQgPSAwOwog
ICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9pb3MvRWRpdG9ySU9TLm1tCmluZGV4IGM5MzM3M2Fk
Mzg2MGI3MWEyN2I4MzYwYTFiNGY5Mzg5ZjZlZjkzYmEuLjE3OGQyNzRmZjUwNDBhNzExOWIyMjUw
MDUzMGRlMGZkNzAxODVjOTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvaW9z
L0VkaXRvcklPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2lvcy9FZGl0b3JJT1Mu
bW0KQEAgLTI2NywxNCArMjY3LDEzIEBAIHZvaWQgRWRpdG9yOjpzZXREaWN0YXRpb25QaHJhc2Vz
QXNDaGlsZE9mRWxlbWVudChjb25zdCBWZWN0b3I8VmVjdG9yPFN0cmluZz4+JiBkCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBSZWZQdHI8UmFuZ2U+IGNvbnRleHQgPSBkb2N1bWVudCgp
LmNyZWF0ZVJhbmdlKCk7Ci0gICAgY29udGV4dC0+c2VsZWN0Tm9kZUNvbnRlbnRzKGVsZW1lbnQp
OworICAgIGF1dG8gY29udGV4dCA9IG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cyhlbGVt
ZW50KTsKIAogICAgIFN0cmluZ0J1aWxkZXIgZGljdGF0aW9uUGhyYXNlc0J1aWxkZXI7CiAgICAg
Zm9yIChhdXRvJiBpbnRlcnByZXRhdGlvbnMgOiBkaWN0YXRpb25QaHJhc2VzKQogICAgICAgICBk
aWN0YXRpb25QaHJhc2VzQnVpbGRlci5hcHBlbmQoaW50ZXJwcmV0YXRpb25zWzBdKTsKIAotICAg
IGVsZW1lbnQuYXBwZW5kQ2hpbGQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dCgqY29udGV4dCwgZGlj
dGF0aW9uUGhyYXNlc0J1aWxkZXIudG9TdHJpbmcoKSkpOworICAgIGVsZW1lbnQuYXBwZW5kQ2hp
bGQoY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChjb250ZXh0LCBkaWN0YXRpb25QaHJhc2VzQnVpbGRl
ci50b1N0cmluZygpKSk7CiAKICAgICBhdXRvIHdlYWtFbGVtZW50ID0gbWFrZVdlYWtQdHIoZWxl
bWVudCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRE9NU2VsZWN0aW9uLmNwcAppbmRleCA1OWVhNGZiZjdl
OWU1NTJkMjk3NzFiYjI1ZjA2NWRlMTAzY2RiMTM1Li4zYjE2MjNhOWIwZWEwODk3MThkNDgyZWM2
ZjY4MTk2MTI1YjUxYTc4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0RPTVNlbGVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9ET01TZWxlY3Rpb24uY3BwCkBAIC0z
MDksNyArMzA5LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJhbmdlPj4gRE9NU2VsZWN0aW9uOjpnZXRS
YW5nZUF0KHVuc2lnbmVkIGluZGV4KQogICAgIGlmIChhdXRvKiBzaGFkb3dBbmNlc3RvciA9IHNl
bGVjdGlvblNoYWRvd0FuY2VzdG9yKCpmcmFtZSkpIHsKICAgICAgICAgYXV0byogY29udGFpbmVy
ID0gc2hhZG93QW5jZXN0b3ItPnBhcmVudE5vZGVHdWFyYW50ZWVkSG9zdEZyZWUoKTsKICAgICAg
ICAgdW5zaWduZWQgb2Zmc2V0ID0gc2hhZG93QW5jZXN0b3ItPmNvbXB1dGVOb2RlSW5kZXgoKTsK
LSAgICAgICAgcmV0dXJuIFJhbmdlOjpjcmVhdGUoc2hhZG93QW5jZXN0b3ItPmRvY3VtZW50KCks
IGNvbnRhaW5lciwgb2Zmc2V0LCBjb250YWluZXIsIG9mZnNldCk7CisgICAgICAgIHJldHVybiBj
cmVhdGVMaXZlUmFuZ2UobWFrZVNpbXBsZVJhbmdlKEJvdW5kYXJ5UG9pbnQgeyAqY29udGFpbmVy
LCBvZmZzZXQgfSkpOwogICAgIH0KIAogICAgIGF1dG8gZmlyc3RSYW5nZSA9IGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5maXJzdFJhbmdlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0RyYWdDb250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0Nv
bnRyb2xsZXIuY3BwCmluZGV4IDU2NmQ1ZDQ2OTMwOWViOGM2MzM1ZTAyYTJlYzE3MGIxYzYyMTFh
NmYuLjY1YjUzODAwY2VhYTNkODVlNzU2YmFiYmRlMDY0OTQ5N2IwNzliODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCkBAIC0xNDU3LDcgKzE0NTcsNyBAQCB2b2lkIERy
YWdDb250cm9sbGVyOjppbnNlcnREcm9wcGVkSW1hZ2VQbGFjZWhvbGRlcnNBdENhcmV0KGNvbnN0
IFZlY3RvcjxJbnRTaXplPgogICAgIGF1dG8gY29tbWFuZCA9IFJlcGxhY2VTZWxlY3Rpb25Db21t
YW5kOjpjcmVhdGUoKmRvY3VtZW50LCBXVEZNb3ZlKGZyYWdtZW50KSwgeyBSZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZDo6UHJldmVudE5lc3RpbmcsIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTbWFy
dFJlcGxhY2UgfSwgRWRpdEFjdGlvbjo6SW5zZXJ0RnJvbURyb3ApOwogICAgIGNvbW1hbmQtPmFw
cGx5KCk7CiAKLSAgICBhdXRvIGluc2VydGVkQ29udGVudFJhbmdlID0gbWFrZVNpbXBsZVJhbmdl
KGNvbW1hbmQtPmluc2VydGVkQ29udGVudFJhbmdlKCkpOworICAgIGF1dG8gaW5zZXJ0ZWRDb250
ZW50UmFuZ2UgPSBjb21tYW5kLT5pbnNlcnRlZENvbnRlbnRSYW5nZSgpOwogICAgIGlmICghaW5z
ZXJ0ZWRDb250ZW50UmFuZ2UpIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAg
ICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggNjQxMDU0OGQ0MjIyMzc3YzE0MTM4
NjFjYjVkOTAyNDI1M2RlZDczMC4uODk3ZmYwNDNkM2MzNzQ1NmRiYjUwNDA2Y2RmMGNmYzhkNzhj
OTA5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTgxNiwyNSArODE2LDI1IEBAIERvY3VtZW50
KiBGcmFtZTo6ZG9jdW1lbnRBdFBvaW50KGNvbnN0IEludFBvaW50JiBwb2ludCkKICAgICByZXR1
cm4gcmVzdWx0LmlubmVyTm9kZSgpID8gJnJlc3VsdC5pbm5lck5vZGUoKS0+ZG9jdW1lbnQoKSA6
IDA7CiB9CiAKLVJlZlB0cjxSYW5nZT4gRnJhbWU6OnJhbmdlRm9yUG9pbnQoY29uc3QgSW50UG9p
bnQmIGZyYW1lUG9pbnQpCitPcHRpb25hbDxTaW1wbGVSYW5nZT4gRnJhbWU6OnJhbmdlRm9yUG9p
bnQoY29uc3QgSW50UG9pbnQmIGZyYW1lUG9pbnQpCiB7CiAgICAgYXV0byBwb3NpdGlvbiA9IHZp
c2libGVQb3NpdGlvbkZvclBvaW50KGZyYW1lUG9pbnQpOwogCiAgICAgYXV0byBjb250YWluZXJU
ZXh0ID0gcG9zaXRpb24uZGVlcEVxdWl2YWxlbnQoKS5jb250YWluZXJUZXh0KCk7CiAgICAgaWYg
KCFjb250YWluZXJUZXh0IHx8ICFjb250YWluZXJUZXh0LT5yZW5kZXJlcigpIHx8IGNvbnRhaW5l
clRleHQtPnJlbmRlcmVyKCktPnN0eWxlKCkudXNlclNlbGVjdCgpID09IFVzZXJTZWxlY3Q6Ok5v
bmUpCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwogCiAgICAgaWYgKGF1dG8gcHJldmlvdXNDaGFyYWN0ZXJSYW5nZSA9IG1ha2VTaW1wbGVSYW5n
ZShwb3NpdGlvbi5wcmV2aW91cygpLCBwb3NpdGlvbikpIHsKICAgICAgICAgaWYgKGVkaXRvcigp
LmZpcnN0UmVjdEZvclJhbmdlKCpwcmV2aW91c0NoYXJhY3RlclJhbmdlKS5jb250YWlucyhmcmFt
ZVBvaW50KSkKLSAgICAgICAgICAgIHJldHVybiBjcmVhdGVMaXZlUmFuZ2UoKnByZXZpb3VzQ2hh
cmFjdGVyUmFuZ2UpOworICAgICAgICAgICAgcmV0dXJuICpwcmV2aW91c0NoYXJhY3RlclJhbmdl
OwogICAgIH0KIAogICAgIGlmIChhdXRvIG5leHRDaGFyYWN0ZXJSYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShwb3NpdGlvbiwgcG9zaXRpb24ubmV4dCgpKSkgewogICAgICAgICBpZiAoZWRpdG9yKCku
Zmlyc3RSZWN0Rm9yUmFuZ2UoKm5leHRDaGFyYWN0ZXJSYW5nZSkuY29udGFpbnMoZnJhbWVQb2lu
dCkpCi0gICAgICAgICAgICByZXR1cm4gY3JlYXRlTGl2ZVJhbmdlKCpuZXh0Q2hhcmFjdGVyUmFu
Z2UpOworICAgICAgICAgICAgcmV0dXJuICpuZXh0Q2hhcmFjdGVyUmFuZ2U7CiAgICAgfQogCi0g
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIH0KIAogdm9pZCBG
cmFtZTo6Y3JlYXRlVmlldyhjb25zdCBJbnRTaXplJiB2aWV3cG9ydFNpemUsIGNvbnN0IE9wdGlv
bmFsPENvbG9yPiYgYmFja2dyb3VuZENvbG9yLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDQ1NDQwYWMx
YWFmMDczNzFjMzUyZjE4ZGI0MTY5NjFmOGYxNDFiNjIuLjc4YWY0YmY0MjhhZGQzYzgxNmYxZmM1
MjBkYzQzOTA0ZGQ0M2M4N2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTg5LDcgKzg5LDYgQEAgY2xh
c3MgSW50U2l6ZTsKIGNsYXNzIE5hdmlnYXRpb25TY2hlZHVsZXI7CiBjbGFzcyBOb2RlOwogY2xh
c3MgUGFnZTsKLWNsYXNzIFJhbmdlOwogY2xhc3MgUmVuZGVyTGF5ZXI7CiBjbGFzcyBSZW5kZXJW
aWV3OwogY2xhc3MgUmVuZGVyV2lkZ2V0OwpAQCAtOTksNiArOTgsOCBAQCBjbGFzcyBTZXR0aW5n
czsKIGNsYXNzIFZpc2libGVQb3NpdGlvbjsKIGNsYXNzIFdpZGdldDsKIAorc3RydWN0IFNpbXBs
ZVJhbmdlOworCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKIGVudW0gewogICAgIE92ZXJmbG93
U2Nyb2xsTm9uZSA9IDAsCkBAIC0yNjgsNyArMjY5LDcgQEAgcHVibGljOgogCiAgICAgV0VCQ09S
RV9FWFBPUlQgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVQb3NpdGlvbkZvclBvaW50KGNvbnN0IElu
dFBvaW50JiBmcmFtZVBvaW50KSBjb25zdDsKICAgICBEb2N1bWVudCogZG9jdW1lbnRBdFBvaW50
KGNvbnN0IEludFBvaW50JiB3aW5kb3dQb2ludCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgUmVmUHRy
PFJhbmdlPiByYW5nZUZvclBvaW50KGNvbnN0IEludFBvaW50JiBmcmFtZVBvaW50KTsKKyAgICBX
RUJDT1JFX0VYUE9SVCBPcHRpb25hbDxTaW1wbGVSYW5nZT4gcmFuZ2VGb3JQb2ludChjb25zdCBJ
bnRQb2ludCYgZnJhbWVQb2ludCk7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBTdHJpbmcgc2VhcmNo
Rm9yTGFiZWxzQWJvdmVDZWxsKGNvbnN0IEpTQzo6WWFycjo6UmVndWxhckV4cHJlc3Npb24mLCBI
VE1MVGFibGVDZWxsRWxlbWVudCosIHNpemVfdCogcmVzdWx0RGlzdGFuY2VGcm9tU3RhcnRPZkNl
bGwpOwogICAgIFN0cmluZyBzZWFyY2hGb3JMYWJlbHNCZWZvcmVFbGVtZW50KGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBsYWJlbHMsIEVsZW1lbnQqLCBzaXplX3QqIHJlc3VsdERpc3RhbmNlLCBib29s
KiByZXN1bHRJc0luQ2VsbEFib3ZlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
aW9zL0ZyYW1lSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KaW5k
ZXggNTg5OGJlNzBiM2ZhMjM1YzkwODhiNDNhNzZkNzI5N2IxZmQyNDcwZi4uZjY4Y2FjNDI4MWU2
NTc3NzA0OWZjOThkYjI4MmU5YjUzMjY0MTUxNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJhbWVJ
T1MubW0KQEAgLTcyMyw4ICs3MjMsNyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25z
Rm9yQ3VycmVudFJvb3QoKSBjb25zdAogICAgICAgICByZXR1cm4gbmlsOwogCiAgICAgYXV0byog
cm9vdCA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxl
U2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGRvY3VtZW50KCktPmJvZHlPckZyYW1lc2V0KCkgOiBz
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7Ci0gICAgdW5zaWdu
ZWQgcm9vdENoaWxkQ291bnQgPSByb290LT5jb3VudENoaWxkTm9kZXMoKTsKLSAgICBhdXRvIHJh
bmdlT2ZSb290Q29udGVudHMgPSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBjcmVhdGVMZWdh
Y3lFZGl0aW5nUG9zaXRpb24ocm9vdCwgMCksIGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihy
b290LCByb290Q2hpbGRDb3VudCkpOworICAgIGF1dG8gcmFuZ2VPZlJvb3RDb250ZW50cyA9IG1h
a2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCk7CiAKICAgICBhdXRvIG1hcmtlcnNJ
blJvb3QgPSBkb2N1bWVudCgpLT5tYXJrZXJzKCkubWFya2Vyc0luUmFuZ2UocmFuZ2VPZlJvb3RD
b250ZW50cywgRG9jdW1lbnRNYXJrZXI6OkRpY3RhdGlvblBocmFzZVdpdGhBbHRlcm5hdGl2ZXMp
OwogCkBAIC03NDUsMjkgKzc0NCwyMyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25z
Rm9yQ3VycmVudFJvb3QoKSBjb25zdAogCiAgICAgdW5zaWduZWQgY29tYmluYXRpb25zU29GYXIg
PSAxOwogCi0gICAgTm9kZSogcGFzdExhc3ROb2RlID0gcmFuZ2VPZlJvb3RDb250ZW50cy0+cGFz
dExhc3ROb2RlKCk7Ci0gICAgZm9yIChOb2RlKiBub2RlID0gcmFuZ2VPZlJvb3RDb250ZW50cy0+
Zmlyc3ROb2RlKCk7IG5vZGUgIT0gcGFzdExhc3ROb2RlOyBub2RlID0gTm9kZVRyYXZlcnNhbDo6
bmV4dCgqbm9kZSkpIHsKLSAgICAgICAgQVNTRVJUKG5vZGUpOwotICAgICAgICBmb3IgKGF1dG8q
IG1hcmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlLCBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpIHsKKyAgICBmb3IgKGF1
dG8mIG5vZGUgOiBpbnRlcnNlY3RpbmdOb2RlcyhyYW5nZU9mUm9vdENvbnRlbnRzKSkgeworICAg
ICAgICBmb3IgKGF1dG8qIG1hcmtlciA6IGRvY3VtZW50KCktPm1hcmtlcnMoKS5tYXJrZXJzRm9y
KG5vZGUsIERvY3VtZW50TWFya2VyOjpEaWN0YXRpb25QaHJhc2VXaXRoQWx0ZXJuYXRpdmVzKSkg
ewogICAgICAgICAgICAgYXV0byYgYWx0ZXJuYXRpdmVzID0gV1RGOjpnZXQ8VmVjdG9yPFN0cmlu
Zz4+KG1hcmtlci0+ZGF0YSgpKTsKIAotICAgICAgICAgICAgLy8gRmlyc3QsIGFkZCB0ZXh0IHRo
YXQgcHJlY2VkZSB0aGUgbWFya2VyLgotICAgICAgICAgICAgaWYgKHByZWNlZGluZ1RleHRTdGFy
dFBvc2l0aW9uICE9IGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihub2RlLCBtYXJrZXItPnN0
YXJ0T2Zmc2V0KCkpKSB7Ci0gICAgICAgICAgICAgICAgYXV0byBwcmVjZWRpbmdUZXh0UmFuZ2Ug
PSBSYW5nZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiwg
Y3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSkp
OwotICAgICAgICAgICAgICAgIFN0cmluZyBwcmVjZWRpbmdUZXh0ID0gcGxhaW5UZXh0KHByZWNl
ZGluZ1RleHRSYW5nZSk7CisgICAgICAgICAgICBhdXRvIHJhbmdlRm9yTWFya2VyID0gcmFuZ2Uo
bm9kZSwgKm1hcmtlcik7CisKKyAgICAgICAgICAgIGlmIChhdXRvIHByZWNlZGluZ1RleHRSYW5n
ZSA9IG1ha2VTaW1wbGVSYW5nZShwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiwgcmFuZ2VGb3JN
YXJrZXIuc3RhcnQpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHByZWNlZGluZ1RleHQgPSBw
bGFpblRleHQoKnByZWNlZGluZ1RleHRSYW5nZSk7CiAgICAgICAgICAgICAgICAgaWYgKCFwcmVj
ZWRpbmdUZXh0LmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICBmb3IgKGF1dG8mIGlu
dGVycHJldGF0aW9uIDogaW50ZXJwcmV0YXRpb25zKQogICAgICAgICAgICAgICAgICAgICAgICAg
YXBwZW5kKGludGVycHJldGF0aW9uLCBwcmVjZWRpbmdUZXh0KTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGF1dG8gcmFuZ2VGb3JNYXJrZXIgPSBSYW5n
ZTo6Y3JlYXRlKCpkb2N1bWVudCgpLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwg
bWFya2VyLT5zdGFydE9mZnNldCgpKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUs
IG1hcmtlci0+ZW5kT2Zmc2V0KCkpKTsKICAgICAgICAgICAgIFN0cmluZyB2aXNpYmxlVGV4dEZv
ck1hcmtlciA9IHBsYWluVGV4dChyYW5nZUZvck1hcmtlcik7CiAgICAgICAgICAgICBzaXplX3Qg
aW50ZXJwcmV0YXRpb25zQ291bnRGb3JDdXJyZW50TWFya2VyID0gYWx0ZXJuYXRpdmVzLnNpemUo
KSArIDE7CiAgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGludGVycHJldGF0aW9u
c0NvdW50OyArK2kpIHsKLSAgICAgICAgICAgICAgICAvLyBEZXRlcm1pbmUgdGV4dCBmb3IgdGhl
IGl0aCBpbnRlcnByZXRhdGlvbi4gSXQgd2lsbCBlaXRoZXIgYmUgdGhlIHZpc2libGUgdGV4dCwg
b3Igb25lIG9mIGl0cwotICAgICAgICAgICAgICAgIC8vIGFsdGVybmF0aXZlcyBzdG9yZWQgaW4g
dGhlIG1hcmtlci4KLQogICAgICAgICAgICAgICAgIHNpemVfdCBpbmRleE9mSW50ZXJwcmV0YXRp
b25Gb3JDdXJyZW50TWFya2VyID0gKGkgLyBjb21iaW5hdGlvbnNTb0ZhcikgJSBpbnRlcnByZXRh
dGlvbnNDb3VudEZvckN1cnJlbnRNYXJrZXI7CiAgICAgICAgICAgICAgICAgaWYgKCFpbmRleE9m
SW50ZXJwcmV0YXRpb25Gb3JDdXJyZW50TWFya2VyKQogICAgICAgICAgICAgICAgICAgICBhcHBl
bmQoaW50ZXJwcmV0YXRpb25zW2ldLCB2aXNpYmxlVGV4dEZvck1hcmtlcik7CkBAIC03NzcsMTYg
Kzc3MCwxNyBAQCBOU0FycmF5ICpGcmFtZTo6aW50ZXJwcmV0YXRpb25zRm9yQ3VycmVudFJvb3Qo
KSBjb25zdAogCiAgICAgICAgICAgICBjb21iaW5hdGlvbnNTb0ZhciAqPSBpbnRlcnByZXRhdGlv
bnNDb3VudEZvckN1cnJlbnRNYXJrZXI7CiAKLSAgICAgICAgICAgIHByZWNlZGluZ1RleHRTdGFy
dFBvc2l0aW9uID0gY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKG5vZGUsIG1hcmtlci0+ZW5k
T2Zmc2V0KCkpOworICAgICAgICAgICAgcHJlY2VkaW5nVGV4dFN0YXJ0UG9zaXRpb24gPSBjcmVh
dGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2VGb3JNYXJrZXIuZW5kKTsKICAgICAgICAgfQog
ICAgIH0KIAogICAgIC8vIEZpbmFsbHksIGFkZCBhbnkgdGV4dCBhZnRlciB0aGUgbGFzdCBtYXJr
ZXIuCi0gICAgYXV0byBhZnRlckxhc3RNYXJrZXJSYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmRvY3Vt
ZW50KCksIHByZWNlZGluZ1RleHRTdGFydFBvc2l0aW9uLCBjcmVhdGVMZWdhY3lFZGl0aW5nUG9z
aXRpb24ocm9vdCwgcm9vdENoaWxkQ291bnQpKTsKLSAgICBTdHJpbmcgdGV4dEFmdGVyTGFzdE1h
cmtlciA9IHBsYWluVGV4dChhZnRlckxhc3RNYXJrZXJSYW5nZSk7Ci0gICAgaWYgKCF0ZXh0QWZ0
ZXJMYXN0TWFya2VyLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIGludGVycHJldGF0
aW9uIDogaW50ZXJwcmV0YXRpb25zKQotICAgICAgICAgICAgYXBwZW5kKGludGVycHJldGF0aW9u
LCB0ZXh0QWZ0ZXJMYXN0TWFya2VyKTsKKyAgICBpZiAoYXV0byByYW5nZSA9IG1ha2VTaW1wbGVS
YW5nZShwcmVjZWRpbmdUZXh0U3RhcnRQb3NpdGlvbiwgcmFuZ2VPZlJvb3RDb250ZW50cy5lbmQp
KSB7CisgICAgICAgIFN0cmluZyB0ZXh0QWZ0ZXJMYXN0TWFya2VyID0gcGxhaW5UZXh0KCpyYW5n
ZSk7CisgICAgICAgIGlmICghdGV4dEFmdGVyTGFzdE1hcmtlci5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgaW50ZXJwcmV0YXRpb24gOiBpbnRlcnByZXRhdGlvbnMpCisgICAg
ICAgICAgICAgICAgYXBwZW5kKGludGVycHJldGF0aW9uLCB0ZXh0QWZ0ZXJMYXN0TWFya2VyKTsK
KyAgICAgICAgfQogICAgIH0KIAogICAgIHJldHVybiBjcmVhdGVOU0FycmF5KGludGVycHJldGF0
aW9ucywgW10gKGF1dG8mIGludGVycHJldGF0aW9uKSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKaW5kZXggNjlhMTRjYzdjZTUyNjQxMGRiOTk4MzM4MGFiZWM1ZTIwOTY2MTAzMi4u
ZDQ3ZjI2MTdlYmQwZWI5N2JmMzEzZWQ2NmMzZDhkZTI0MjRlNDAwMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtMTc3NSw3ICsxNzc1LDcgQEAgRXhjZXB0aW9uT3I8UmVm
UHRyPFJhbmdlPj4gSW50ZXJuYWxzOjptYXJrZXJSYW5nZUZvck5vZGUoTm9kZSYgbm9kZSwgY29u
c3QgU3RyaW4KICAgICBhdXRvIG1hcmtlciA9IHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKTsK
ICAgICBpZiAoIW1hcmtlcikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgcmV0dXJuIFJl
ZlB0cjxSYW5nZT4geyBSYW5nZTo6Y3JlYXRlKG5vZGUuZG9jdW1lbnQoKSwgJm5vZGUsIG1hcmtl
ci0+c3RhcnRPZmZzZXQoKSwgJm5vZGUsIG1hcmtlci0+ZW5kT2Zmc2V0KCkpIH07CisgICAgcmV0
dXJuIHsgY3JlYXRlTGl2ZVJhbmdlKHJhbmdlKG5vZGUsICptYXJrZXIpKSB9OwogfQogCiBFeGNl
cHRpb25PcjxTdHJpbmc+IEludGVybmFsczo6bWFya2VyRGVzY3JpcHRpb25Gb3JOb2RlKE5vZGUm
IG5vZGUsIGNvbnN0IFN0cmluZyYgbWFya2VyVHlwZSwgdW5zaWduZWQgaW5kZXgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2MvV0tCdW5k
bGVQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvQVBJL2MvV0tCdW5kbGVQYWdlT3ZlcmxheS5jcHAKaW5kZXggNjlmN2FmMjJiNTY3NTA0ZDRm
MzFmMGQ3YTcwYjg3NGUwOWZhNTVhMi4uMzViNjY0NzJlNzcwNTdjY2VmZTkzZGY4ZmRhOTUzZDBk
NDE5NmFjNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0FQSS9jL1dLQnVuZGxlUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvYy9XS0J1bmRsZVBhZ2VPdmVybGF5LmNwcApAQCAt
MTI4LDE5ICsxMjgsMTcgQEAgcHJpdmF0ZToKICAgICB9CiAKICNpZiBQTEFURk9STShNQUMpCi0g
ICAgRERBY3Rpb25Db250ZXh0ICphY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChXZWJLaXQ6
OldlYlBhZ2VPdmVybGF5JiBwYWdlT3ZlcmxheSwgV2ViQ29yZTo6RmxvYXRQb2ludCBsb2NhdGlv
biwgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiYgcmFuZ2VIYW5kbGUpIG92ZXJyaWRlCisgICAgT3B0
aW9uYWw8V2ViS2l0OjpXZWJQYWdlT3ZlcmxheTo6QWN0aW9uQ29udGV4dD4gYWN0aW9uQ29udGV4
dEZvclJlc3VsdEF0UG9pbnQoV2ViS2l0OjpXZWJQYWdlT3ZlcmxheSYgcGFnZU92ZXJsYXksIFdl
YkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24pIGZpbmFsCiAgICAgewotICAgICAgICBpZiAobV9j
bGllbnQuYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQpIHsKLSAgICAgICAgICAgIFdLQnVu
ZGxlUmFuZ2VIYW5kbGVSZWYgYXBpUmFuZ2UgPSBudWxscHRyOwotICAgICAgICAgICAgRERBY3Rp
b25Db250ZXh0ICphY3Rpb25Db250ZXh0ID0gKEREQWN0aW9uQ29udGV4dCAqKW1fY2xpZW50LmFj
dGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50KHRvQVBJKCZwYWdlT3ZlcmxheSksIFdLUG9pbnRN
YWtlKGxvY2F0aW9uLngoKSwgbG9jYXRpb24ueSgpKSwgJmFwaVJhbmdlLCBtX2NsaWVudC5iYXNl
LmNsaWVudEluZm8pOworICAgICAgICBpZiAoIW1fY2xpZW50LmFjdGlvbkNvbnRleHRGb3JSZXN1
bHRBdFBvaW50KQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKIAotICAgICAgICAg
ICAgaWYgKGFwaVJhbmdlKQotICAgICAgICAgICAgICAgIHJhbmdlSGFuZGxlID0gJldlYktpdDo6
dG9JbXBsKGFwaVJhbmdlKS0+Y29yZVJhbmdlKCk7CisgICAgICAgIFdLQnVuZGxlUmFuZ2VIYW5k
bGVSZWYgYXBpUmFuZ2UgPSBudWxscHRyOworICAgICAgICBhdXRvIGFjdGlvbkNvbnRleHQgPSAo
RERBY3Rpb25Db250ZXh0ICopbV9jbGllbnQuYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQo
dG9BUEkoJnBhZ2VPdmVybGF5KSwgV0tQb2ludE1ha2UobG9jYXRpb24ueCgpLCBsb2NhdGlvbi55
KCkpLCAmYXBpUmFuZ2UsIG1fY2xpZW50LmJhc2UuY2xpZW50SW5mbyk7CisgICAgICAgIGlmICgh
YWN0aW9uQ29udGV4dCB8fCAhYXBpUmFuZ2UpCisgICAgICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwogCi0gICAgICAgICAgICByZXR1cm4gYWN0aW9uQ29udGV4dDsKLSAgICAgICAgfQotCi0g
ICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIHJldHVybiB7IHsgYWN0aW9uQ29udGV4dCwgV2Vi
S2l0Ojp0b0ltcGwoYXBpUmFuZ2UpLT5jb3JlUmFuZ2UoKSB9IH07CiAgICAgfQogCiAgICAgdm9p
ZCBkYXRhRGV0ZWN0b3JzRGlkUHJlc2VudFVJKFdlYktpdDo6V2ViUGFnZU92ZXJsYXkmIHBhZ2VP
dmVybGF5KSBvdmVycmlkZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0lu
amVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5kbGUuY3BwIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0RPTS9JbmplY3RlZEJ1bmRsZU5vZGVIYW5k
bGUuY3BwCmluZGV4IGQzODdhZGI2NGRkMGRhNmIyN2U0YmYxYzA2N2Q1MWJlOTg1ZjlhZDEuLjAx
YzE1NGQ3NTdhMTAxMzYzYWZkZWM5NzU1MzAwMGMyMjQwOGRhODIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9ET00vSW5qZWN0ZWRCdW5kbGVOb2Rl
SGFuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
RE9NL0luamVjdGVkQnVuZGxlTm9kZUhhbmRsZS5jcHAKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNs
dWRlIDxXZWJDb3JlL1Bvc2l0aW9uLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9SYW5nZS5oPgogI2lu
Y2x1ZGUgPFdlYkNvcmUvUmVuZGVyT2JqZWN0Lmg+CisjaW5jbHVkZSA8V2ViQ29yZS9TaW1wbGVS
YW5nZS5oPgogI2luY2x1ZGUgPFdlYkNvcmUvVmlzaWJsZVBvc2l0aW9uLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KQEAgLTIzNCwx
MiArMjM1LDkgQEAgUmVmUHRyPEluamVjdGVkQnVuZGxlUmFuZ2VIYW5kbGU+IEluamVjdGVkQnVu
ZGxlTm9kZUhhbmRsZTo6dmlzaWJsZVJhbmdlKCkKIHsKICAgICBpZiAoIW1fbm9kZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KICAgICBWaXNpYmxlUG9zaXRpb24gc3RhcnQgPSBmaXJzdFBv
c2l0aW9uSW5Ob2RlKG1fbm9kZS5nZXQoKSk7CiAgICAgVmlzaWJsZVBvc2l0aW9uIGVuZCA9IGxh
c3RQb3NpdGlvbkluTm9kZShtX25vZGUuZ2V0KCkpOwotCi0gICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IG1ha2VSYW5nZShzdGFydCwgZW5kKTsKLSAgICByZXR1cm4gSW5qZWN0ZWRCdW5kbGVSYW5n
ZUhhbmRsZTo6Z2V0T3JDcmVhdGUocmFuZ2UuZ2V0KCkpOworICAgIHJldHVybiBjcmVhdGVIYW5k
bGUobWFrZVNpbXBsZVJhbmdlKHN0YXJ0LCBlbmQpKTsKIH0KIAogdm9pZCBJbmplY3RlZEJ1bmRs
ZU5vZGVIYW5kbGU6OnNldEhUTUxJbnB1dEVsZW1lbnRWYWx1ZUZvclVzZXIoY29uc3QgU3RyaW5n
JiB2YWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0Nv
Y29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5LmgKaW5kZXggYWI5
MTI5NmIzYTZiYTAwYTQ4OTNmOTFjZjBkMzhiNzllMDM1MTVmNy4uY2IyMzg5ZmMwZGIwZmIxODAw
ZjYxYWQ5ZjQwZjgxYTI0OTMxZTViMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5LmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29jb2EvVGV4dENoZWNraW5nQ29udHJvbGxl
clByb3h5LmgKQEAgLTMwLDcgKzMwLDcgQEAKICNpbmNsdWRlICJDb25uZWN0aW9uLmgiCiAjaW5j
bHVkZSAiRWRpdGluZ1JhbmdlLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCi0jaW5j
bHVkZSA8V2ViQ29yZS9SYW5nZS5oPgorI2luY2x1ZGUgPFdlYkNvcmUvU2ltcGxlUmFuZ2UuaD4K
ICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAKIG5hbWVzcGFjZSBJUEMgewpAQCAtNjAsNyArNjAs
NyBAQCBwcml2YXRlOgogICAgIHZvaWQgZGlkUmVjZWl2ZU1lc3NhZ2UoSVBDOjpDb25uZWN0aW9u
JiwgSVBDOjpEZWNvZGVyJikgb3ZlcnJpZGU7CiAKICAgICBzdHJ1Y3QgUmFuZ2VBbmRPZmZzZXQg
ewotICAgICAgICBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+IHJhbmdlOworICAgICAgICBXZWJDb3Jl
OjpTaW1wbGVSYW5nZSByYW5nZTsKICAgICAgICAgc2l6ZV90IGxvY2F0aW9uSW5Sb290OyAgICAK
ICAgICB9OwogICAgIE9wdGlvbmFsPFJhbmdlQW5kT2Zmc2V0PiByYW5nZUFuZE9mZnNldFJlbGF0
aXZlVG9TZWxlY3Rpb24oaW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IGxlbmd0aCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2NvYS9UZXh0Q2hlY2tpbmdD
b250cm9sbGVyUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9Db2Nv
YS9UZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHkubW0KaW5kZXggNjZlM2Q5OTU3ZWRiOWFmMzM2
NDk4MzE0NGU3NGExMDNjMjhlZGUzZS4uNzhmMWRkMTA5NTcxMDVlMjE1NjZhODIzZjJhMjUwYzU4
OTYxM2IwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvQ29j
b2EvVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL0NvY29hL1RleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eS5tbQpAQCAt
OTEsNyArOTEsNyBAQCBPcHRpb25hbDxUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveHk6OlJhbmdl
QW5kT2Zmc2V0PiBUZXh0Q2hlY2tpbmdDb250cm9sbGVyUHJveAogICAgICAgICByZXR1cm4gV1RG
OjpudWxsb3B0OwogICAgIGF1dG8gYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZSA9IENo
YXJhY3RlclJhbmdlIHsgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KGFkanVzdGVkU3RhcnRMb2NhdGlv
biksIGxlbmd0aCB9OwogCi0gICAgcmV0dXJuIHsgeyBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNo
YXJhY3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3RlclJhbmdlKSksIGFk
anVzdGVkU2VsZWN0aW9uQ2hhcmFjdGVyUmFuZ2UubG9jYXRpb24gfSB9OworICAgIHJldHVybiB7
IHsgcmVzb2x2ZUNoYXJhY3RlclJhbmdlKHNjb3BlLCBhZGp1c3RlZFNlbGVjdGlvbkNoYXJhY3Rl
clJhbmdlKSwgYWRqdXN0ZWRTZWxlY3Rpb25DaGFyYWN0ZXJSYW5nZS5sb2NhdGlvbiB9IH07CiB9
CiAKIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5OjpyZXBsYWNlUmVsYXRpdmVUb1Nl
bGVjdGlvbihjb25zdCBXZWJDb3JlOjpBdHRyaWJ1dGVkU3RyaW5nJiBhbm5vdGF0ZWRTdHJpbmcs
IGludDY0X3Qgc2VsZWN0aW9uT2Zmc2V0LCB1aW50NjRfdCBsZW5ndGgsIHVpbnQ2NF90IHJlbGF0
aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgdWludDY0X3QgcmVsYXRpdmVSZXBsYWNlbWVudExlbmd0
aCkKQEAgLTEwNSwzMCArMTA1LDIxIEBAIHZvaWQgVGV4dENoZWNraW5nQ29udHJvbGxlclByb3h5
OjpyZXBsYWNlUmVsYXRpdmVUb1NlbGVjdGlvbihjb25zdCBXZWJDb3JlOjpBdHRyCiAgICAgYXV0
byByYW5nZUFuZE9mZnNldCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihzZWxl
Y3Rpb25PZmZzZXQsIGxlbmd0aCk7CiAgICAgaWYgKCFyYW5nZUFuZE9mZnNldCkKICAgICAgICAg
cmV0dXJuOwotICAgIGF1dG8gcmFuZ2UgPSByYW5nZUFuZE9mZnNldC0+cmFuZ2U7Ci0gICAgaWYg
KCFyYW5nZSkKLSAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gbG9jYXRpb25JblJvb3QgPSByYW5n
ZUFuZE9mZnNldC0+bG9jYXRpb25JblJvb3Q7CiAKICAgICBhdXRvJiBtYXJrZXJzID0gZnJhbWUu
ZG9jdW1lbnQoKS0+bWFya2VycygpOwotICAgIG1hcmtlcnMucmVtb3ZlTWFya2VycygqcmFuZ2Us
IHJlbGV2YW50TWFya2VyVHlwZXMoKSk7CisgICAgbWFya2Vycy5yZW1vdmVNYXJrZXJzKHJhbmdl
QW5kT2Zmc2V0LT5yYW5nZSwgcmVsZXZhbnRNYXJrZXJUeXBlcygpKTsKIAogICAgIGlmIChyZWxh
dGl2ZVJlcGxhY2VtZW50TG9jYXRpb24gIT0gTlNOb3RGb3VuZCkgewotICAgICAgICBhdXRvIHJh
bmdlQW5kT2Zmc2V0T2ZSZXBsYWNlbWVudCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVj
dGlvbihzZWxlY3Rpb25PZmZzZXQgKyByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHJlbGF0
aXZlUmVwbGFjZW1lbnRMZW5ndGgpOwotICAgICAgICBpZiAocmFuZ2VBbmRPZmZzZXRPZlJlcGxh
Y2VtZW50KSB7Ci0gICAgICAgICAgICBhdXRvIHJlcGxhY2VtZW50UmFuZ2UgPSByYW5nZUFuZE9m
ZnNldE9mUmVwbGFjZW1lbnQtPnJhbmdlOwotICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50UmFu
Z2UpIHsKLSAgICAgICAgICAgICAgICBib29sIHJlc3RvcmVTZWxlY3Rpb24gPSBmcmFtZVNlbGVj
dGlvbi5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7Ci0KLSAgICAgICAgICAgICAgICBmcmFtZS5lZGl0
b3IoKS5yZXBsYWNlUmFuZ2VGb3JTcGVsbENoZWNraW5nKCpyZXBsYWNlbWVudFJhbmdlLCBbW2Fu
bm90YXRlZFN0cmluZy5zdHJpbmcgc3RyaW5nXSBzdWJzdHJpbmdXaXRoUmFuZ2U6TlNNYWtlUmFu
Z2UocmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9uLCByZWxhdGl2ZVJlcGxhY2VtZW50TGVuZ3Ro
ICsgW2Fubm90YXRlZFN0cmluZy5zdHJpbmcgbGVuZ3RoXSAtIGxlbmd0aCldKTsKLQotICAgICAg
ICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVp
bnQ2NF90IHNlbGVjdGlvbkxvY2F0aW9uVG9SZXN0b3JlID0gbG9jYXRpb25JblJvb3QgLSBzZWxl
Y3Rpb25PZmZzZXQ7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzZWxlY3Rpb25Mb2NhdGlvblRv
UmVzdG9yZSA+IGxvY2F0aW9uSW5Sb290ICsgcmVsYXRpdmVSZXBsYWNlbWVudExvY2F0aW9uICsg
cmVsYXRpdmVSZXBsYWNlbWVudExlbmd0aCkgewotICAgICAgICAgICAgICAgICAgICAgICAgYXV0
byBzZWxlY3Rpb25Ub1Jlc3RvcmUgPSBjcmVhdGVMaXZlUmFuZ2UocmVzb2x2ZUNoYXJhY3RlclJh
bmdlKG1ha2VSYW5nZVNlbGVjdGluZ05vZGVDb250ZW50cygqcm9vdCksIHsgc2VsZWN0aW9uTG9j
YXRpb25Ub1Jlc3RvcmUsIDAgfSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgZnJhbWVTZWxl
Y3Rpb24ubW92ZVRvKHNlbGVjdGlvblRvUmVzdG9yZS5wdHIoKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgIGlmIChhdXRvIHJhbmdlQW5kT2Zmc2V0
T2ZSZXBsYWNlbWVudCA9IHJhbmdlQW5kT2Zmc2V0UmVsYXRpdmVUb1NlbGVjdGlvbihzZWxlY3Rp
b25PZmZzZXQgKyByZWxhdGl2ZVJlcGxhY2VtZW50TG9jYXRpb24sIHJlbGF0aXZlUmVwbGFjZW1l
bnRMZW5ndGgpKSB7CisgICAgICAgICAgICBib29sIHJlc3RvcmVTZWxlY3Rpb24gPSBmcmFtZVNl
bGVjdGlvbi5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7CisKKyAgICAgICAgICAgIGZyYW1lLmVkaXRv
cigpLnJlcGxhY2VSYW5nZUZvclNwZWxsQ2hlY2tpbmcocmFuZ2VBbmRPZmZzZXRPZlJlcGxhY2Vt
ZW50LT5yYW5nZSwgW1thbm5vdGF0ZWRTdHJpbmcuc3RyaW5nIHN0cmluZ10gc3Vic3RyaW5nV2l0
aFJhbmdlOk5TTWFrZVJhbmdlKHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlvbiwgcmVsYXRpdmVS
ZXBsYWNlbWVudExlbmd0aCArIFthbm5vdGF0ZWRTdHJpbmcuc3RyaW5nIGxlbmd0aF0gLSBsZW5n
dGgpXSk7CisKKyAgICAgICAgICAgIGlmIChyZXN0b3JlU2VsZWN0aW9uKSB7CisgICAgICAgICAg
ICAgICAgdWludDY0X3Qgc2VsZWN0aW9uTG9jYXRpb25Ub1Jlc3RvcmUgPSBsb2NhdGlvbkluUm9v
dCAtIHNlbGVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uTG9jYXRp
b25Ub1Jlc3RvcmUgPiBsb2NhdGlvbkluUm9vdCArIHJlbGF0aXZlUmVwbGFjZW1lbnRMb2NhdGlv
biArIHJlbGF0aXZlUmVwbGFjZW1lbnRMZW5ndGgpCisgICAgICAgICAgICAgICAgICAgIGZyYW1l
U2VsZWN0aW9uLnNldFNlbGVjdGlvbihyZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2Vs
ZWN0aW5nTm9kZUNvbnRlbnRzKCpyb290KSwgeyBzZWxlY3Rpb25Mb2NhdGlvblRvUmVzdG9yZSwg
MCB9KSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CkBAIC0xNjEsMTMgKzE1Miwx
MCBAQCB2b2lkIFRleHRDaGVja2luZ0NvbnRyb2xsZXJQcm94eTo6cmVtb3ZlQW5ub3RhdGlvblJl
bGF0aXZlVG9TZWxlY3Rpb24oY29uc3QgU3RyaQogICAgIGF1dG8gcmFuZ2VBbmRPZmZzZXQgPSBy
YW5nZUFuZE9mZnNldFJlbGF0aXZlVG9TZWxlY3Rpb24oc2VsZWN0aW9uT2Zmc2V0LCBsZW5ndGgp
OwogICAgIGlmICghcmFuZ2VBbmRPZmZzZXQpCiAgICAgICAgIHJldHVybjsKLSAgICBhdXRvIHJh
bmdlID0gcmFuZ2VBbmRPZmZzZXQtPnJhbmdlOwotICAgIGlmICghcmFuZ2UpCi0gICAgICAgIHJl
dHVybjsKIAogICAgIGF1dG8gcmVtb3ZlQ29yZVNwZWxsaW5nTWFya2VycyA9IGFubm90YXRpb24g
PT0gIk5TU3BlbGxpbmdTdGF0ZSI7CiAgICAgYXV0byB0eXBlcyA9IHJlbW92ZUNvcmVTcGVsbGlu
Z01hcmtlcnMgPyByZWxldmFudE1hcmtlclR5cGVzKCkgOiBXZWJDb3JlOjpEb2N1bWVudE1hcmtl
cjo6UGxhdGZvcm1UZXh0Q2hlY2tpbmc7Ci0gICAgbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0
ZXJNYXJrZXJzKCpyYW5nZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7Cisg
ICAgbV9wYWdlLmNvcmVQYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpLmRvY3VtZW50KCktPm1hcmtlcnMoKS5maWx0ZXJNYXJrZXJzKHJhbmdlQW5kT2Zmc2V0LT5y
YW5nZSwgWyZdIChjb25zdCBEb2N1bWVudE1hcmtlciYgbWFya2VyKSB7CiAgICAgICAgIGlmICgh
V1RGOjpob2xkc19hbHRlcm5hdGl2ZTxXZWJDb3JlOjpEb2N1bWVudE1hcmtlcjo6UGxhdGZvcm1U
ZXh0Q2hlY2tpbmdEYXRhPihtYXJrZXIuZGF0YSgpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgcmV0dXJuIFdURjo6Z2V0PFdlYkNvcmU6OkRvY3VtZW50TWFya2VyOjpQbGF0
Zm9ybVRleHRDaGVja2luZ0RhdGE+KG1hcmtlci5kYXRhKCkpLmtleSAhPSBhbm5vdGF0aW9uOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAppbmRleCAyZGM1
MDVjZmRiMTNiMDAzMmZkYTU0OWUwYzlkNWQ2NzI3MmI0MWViLi4yNzQyZjEzZWNmMzZkNjBjY2Zk
NjdhM2ZkMjE1NDc1YjAwNjRmODMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcApAQCAtNTQ1Miw3ICs1NDUyLDcgQEAgdm9pZCBXZWJQYWdlOjpjaGFy
YWN0ZXJJbmRleEZvclBvaW50QXN5bmMoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQmIHBvaW50LCBD
YWxsYmEKICAgICBhdXRvIHJlc3VsdCA9IG1fcGFnZS0+bWFpbkZyYW1lKCkuZXZlbnRIYW5kbGVy
KCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9pbnQsIGhpdFR5cGUpOwogICAgIGF1dG8mIGZyYW1l
ID0gcmVzdWx0LmlubmVyTm9uU2hhcmVkTm9kZSgpID8gKnJlc3VsdC5pbm5lck5vZGVGcmFtZSgp
IDogbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKICAgICBh
dXRvIHJhbmdlID0gZnJhbWUucmFuZ2VGb3JQb2ludChyZXN1bHQucm91bmRlZFBvaW50SW5Jbm5l
ck5vZGVGcmFtZSgpKTsKLSAgICBhdXRvIGVkaXRpbmdSYW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJv
bVJhbmdlKGZyYW1lLCBtYWtlU2ltcGxlUmFuZ2UocmFuZ2UpKTsKKyAgICBhdXRvIGVkaXRpbmdS
YW5nZSA9IEVkaXRpbmdSYW5nZTo6ZnJvbVJhbmdlKGZyYW1lLCByYW5nZSk7CiAgICAgc2VuZChN
ZXNzYWdlczo6V2ViUGFnZVByb3h5OjpVbnNpZ25lZENhbGxiYWNrKGVkaXRpbmdSYW5nZS5sb2Nh
dGlvbiwgY2FsbGJhY2tJRCkpOwogfQogCkBAIC01NTMzLDExICs1NTMzLDExIEBAIHZvaWQgV2Vi
UGFnZTo6ZGVsZXRlU3Vycm91bmRpbmcoaW50NjRfdCBvZmZzZXQsIHVuc2lnbmVkIGNoYXJhY3Rl
ckNvdW50KQogICAgICAgICByZXR1cm47CiAKICAgICBhdXRvIHNlbGVjdGlvblN0YXJ0ID0gc2Vs
ZWN0aW9uLnZpc2libGVTdGFydCgpOwotICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VS
YW5nZShzdGFydE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3Rh
cnQpOworICAgIGF1dG8gc3Vycm91bmRpbmdSYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShzdGFydE9m
RWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KSwgc2VsZWN0aW9uU3RhcnQpOwogICAgIGlm
ICghc3Vycm91bmRpbmdSYW5nZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byYgcm9vdE5v
ZGUgPSBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydENvbnRhaW5lcigpLnRyZWVTY29wZSgpLnJvb3RO
b2RlKCk7CisgICAgYXV0byYgcm9vdE5vZGUgPSBzdXJyb3VuZGluZ1JhbmdlLT5zdGFydC5jb250
YWluZXItPnRyZWVTY29wZSgpLnJvb3ROb2RlKCk7CiAgICAgYXV0byBjaGFyYWN0ZXJSYW5nZSA9
IFdlYkNvcmU6OkNoYXJhY3RlclJhbmdlKFdlYkNvcmU6OmNoYXJhY3RlckNvdW50KCpzdXJyb3Vu
ZGluZ1JhbmdlKSArIG9mZnNldCwgY2hhcmFjdGVyQ291bnQpOwogICAgIGF1dG8gc2VsZWN0aW9u
UmFuZ2UgPSByZXNvbHZlQ2hhcmFjdGVyUmFuZ2UobWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRl
bnRzKHJvb3ROb2RlKSwgY2hhcmFjdGVyUmFuZ2UpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5jcHAKaW5kZXggZDFlMDk5YmJlZmVj
YjFjMTI3MzYzNDY3YWQ1YjE3Zjk5N2EyOGU5Mi4uMWJiZmU1YjliODM2NjM3MWNjMDQzZWIyNmY0
NzBiYzc0NThiYzFlYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZU92ZXJsYXkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2VPdmVybGF5LmNwcApAQCAtMTA5LDkgKzEwOSw5IEBAIHZvaWQgV2ViUGFnZU92
ZXJsYXk6OmRpZFNjcm9sbEZyYW1lKFBhZ2VPdmVybGF5JiwgRnJhbWUmIGZyYW1lKQogfQogCiAj
aWYgUExBVEZPUk0oTUFDKQotRERBY3Rpb25Db250ZXh0ICpXZWJQYWdlT3ZlcmxheTo6YWN0aW9u
Q29udGV4dEZvclJlc3VsdEF0UG9pbnQoRmxvYXRQb2ludCBsb2NhdGlvbiwgUmVmUHRyPFdlYkNv
cmU6OlJhbmdlPiYgcmFuZ2VIYW5kbGUpCithdXRvIFdlYlBhZ2VPdmVybGF5OjphY3Rpb25Db250
ZXh0Rm9yUmVzdWx0QXRQb2ludChGbG9hdFBvaW50IGxvY2F0aW9uKSAtPiBPcHRpb25hbDxBY3Rp
b25Db250ZXh0PgogewotICAgIHJldHVybiBtX2NsaWVudC0+YWN0aW9uQ29udGV4dEZvclJlc3Vs
dEF0UG9pbnQoKnRoaXMsIGxvY2F0aW9uLCByYW5nZUhhbmRsZSk7CisgICAgcmV0dXJuIG1fY2xp
ZW50LT5hY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludCgqdGhpcywgbG9jYXRpb24pOwogfQog
CiB2b2lkIFdlYlBhZ2VPdmVybGF5OjpkYXRhRGV0ZWN0b3JzRGlkUHJlc2VudFVJKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5Lmgg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlT3ZlcmxheS5oCmluZGV4
IGYwN2IwZjgxOGY5M2NhN2U0Y2Y3MTk1OGUyZjNhY2Q3Zjc0ZTdkMGYuLjFlOTkzNzE0OWFmZjJi
MWIwNGQ3YzVlY2NiMmM2ZDk4YmQ3M2NkYjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VPdmVybGF5LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZU92ZXJsYXkuaApAQCAtMjMsMTggKzIzLDE5IEBACiAgKiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJQYWdlT3Zl
cmxheV9oCi0jZGVmaW5lIFdlYlBhZ2VPdmVybGF5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVk
ZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSA8V2ViQ29yZS9GbG9hdFBvaW50Lmg+Ci0jaW5jbHVk
ZSA8V2ViQ29yZS9JbnRSZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9QYWdlT3ZlcmxheS5oPgot
I2luY2x1ZGUgPFdlYkNvcmUvUmFuZ2UuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAK
IE9CSkNfQ0xBU1MgRERBY3Rpb25Db250ZXh0OwogCituYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFz
cyBJbnRSZWN0OworfQorCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViRnJhbWU7CkBA
IC00Miw2ICs0Myw4IEBAIGNsYXNzIFdlYlBhZ2U7CiAKIGNsYXNzIFdlYlBhZ2VPdmVybGF5IDog
cHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlwZTo6QnVuZGxlUGFnZU92ZXJs
YXk+LCBwcml2YXRlIFdlYkNvcmU6OlBhZ2VPdmVybGF5OjpDbGllbnQgewogcHVibGljOgorICAg
IHN0cnVjdCBBY3Rpb25Db250ZXh0OworCiAgICAgY2xhc3MgQ2xpZW50IHsKICAgICBwdWJsaWM6
CiAgICAgICAgIHZpcnR1YWwgfkNsaWVudCgpIHsgfQpAQCAtNTMsNyArNTYsNyBAQCBwdWJsaWM6
CiAgICAgICAgIHZpcnR1YWwgdm9pZCBkaWRTY3JvbGxGcmFtZShXZWJQYWdlT3ZlcmxheSYsIFdl
YkZyYW1lKikgeyB9CiAKICNpZiBQTEFURk9STShNQUMpCi0gICAgICAgIHZpcnR1YWwgRERBY3Rp
b25Db250ZXh0ICphY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQb2ludChXZWJQYWdlT3ZlcmxheSYs
IFdlYkNvcmU6OkZsb2F0UG9pbnQgbG9jYXRpb24sIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4mIHJh
bmdlSGFuZGxlKSB7IHJldHVybiBudWxscHRyOyB9CisgICAgICAgIHZpcnR1YWwgT3B0aW9uYWw8
QWN0aW9uQ29udGV4dD4gYWN0aW9uQ29udGV4dEZvclJlc3VsdEF0UG9pbnQoV2ViUGFnZU92ZXJs
YXkmLCBXZWJDb3JlOjpGbG9hdFBvaW50KSB7IHJldHVybiBXVEY6Om51bGxvcHQ7IH0KICAgICAg
ICAgdmlydHVhbCB2b2lkIGRhdGFEZXRlY3RvcnNEaWRQcmVzZW50VUkoV2ViUGFnZU92ZXJsYXkm
KSB7IH0KICAgICAgICAgdmlydHVhbCB2b2lkIGRhdGFEZXRlY3RvcnNEaWRDaGFuZ2VVSShXZWJQ
YWdlT3ZlcmxheSYpIHsgfQogICAgICAgICB2aXJ0dWFsIHZvaWQgZGF0YURldGVjdG9yc0RpZEhp
ZGVVSShXZWJQYWdlT3ZlcmxheSYpIHsgfQpAQCAtNzcsNyArODAsMTEgQEAgcHVibGljOgogICAg
IENsaWVudCYgY2xpZW50KCkgY29uc3QgeyByZXR1cm4gKm1fY2xpZW50OyB9CiAKICNpZiBQTEFU
Rk9STShNQUMpCi0gICAgRERBY3Rpb25Db250ZXh0ICphY3Rpb25Db250ZXh0Rm9yUmVzdWx0QXRQ
b2ludChXZWJDb3JlOjpGbG9hdFBvaW50LCBSZWZQdHI8V2ViQ29yZTo6UmFuZ2U+Jik7CisgICAg
c3RydWN0IEFjdGlvbkNvbnRleHQgeworICAgICAgICBSZXRhaW5QdHI8RERBY3Rpb25Db250ZXh0
PiBjb250ZXh0OworICAgICAgICBXZWJDb3JlOjpTaW1wbGVSYW5nZSByYW5nZTsKKyAgICB9Owor
ICAgIE9wdGlvbmFsPEFjdGlvbkNvbnRleHQ+IGFjdGlvbkNvbnRleHRGb3JSZXN1bHRBdFBvaW50
KFdlYkNvcmU6OkZsb2F0UG9pbnQpOwogICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZFByZXNlbnRV
SSgpOwogICAgIHZvaWQgZGF0YURldGVjdG9yc0RpZENoYW5nZVVJKCk7CiAgICAgdm9pZCBkYXRh
RGV0ZWN0b3JzRGlkSGlkZVVJKCk7CkBAIC05NywxMSArMTA0LDggQEAgcHJpdmF0ZToKICAgICBi
b29sIGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlQm9vbFZhbHVlRm9yUG9pbnQoV2ViQ29yZTo6
UGFnZU92ZXJsYXkmLCBTdHJpbmcgLyogYXR0cmlidXRlICovLCBXZWJDb3JlOjpGbG9hdFBvaW50
IC8qIHBhcmFtZXRlciAqLywgYm9vbCYgdmFsdWUpIG92ZXJyaWRlOwogICAgIFZlY3RvcjxTdHJp
bmc+IGNvcHlBY2Nlc3NpYmlsaXR5QXR0cmlidXRlTmFtZXMoV2ViQ29yZTo6UGFnZU92ZXJsYXkm
LCBib29sIC8qIHBhcmFtZXRlcml6ZWROYW1lcyAqLykgb3ZlcnJpZGU7CiAKLQogICAgIFJlZlB0
cjxXZWJDb3JlOjpQYWdlT3ZlcmxheT4gbV9vdmVybGF5OwogICAgIHN0ZDo6dW5pcXVlX3B0cjxD
bGllbnQ+IG1fY2xpZW50OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAv
LyBXZWJQYWdlT3ZlcmxheV9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9nbGliL1dlYlBhZ2VHTGliLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2dsaWIvV2ViUGFnZUdMaWIuY3BwCmluZGV4IDgxOTgyMzUwZWU5OTMwOGM4MWI1NTJh
YjU1ODhhNGQ4YzhmNzljYzAuLmY5NjQxMWExMTYwNzY4NWIwZmJmNDlmMTA5ZGRjNTgxOGMxNTJi
MjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIvV2Vi
UGFnZUdMaWIuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2dsaWIv
V2ViUGFnZUdMaWIuY3BwCkBAIC0xMDcsMjYgKzEwNywxOSBAQCB2b2lkIFdlYlBhZ2U6OmdldFBs
YXRmb3JtRWRpdG9yU3RhdGUoRnJhbWUmIGZyYW1lLCBFZGl0b3JTdGF0ZSYgcmVzdWx0KSBjb25z
dAogICAgIGlmIChzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICBhdXRv
IHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwogICAgICAgICBhdXRv
IHN1cnJvdW5kaW5nU3RhcnQgPSBzdGFydE9mRWRpdGFibGVDb250ZW50KHNlbGVjdGlvblN0YXJ0
KTsKLSAgICAgICAgYXV0byBzdXJyb3VuZGluZ0VuZCA9IGVuZE9mRWRpdGFibGVDb250ZW50KHNl
bGVjdGlvblN0YXJ0KTsKLSAgICAgICAgYXV0byBzdXJyb3VuZGluZ1JhbmdlID0gbWFrZVJhbmdl
KHN1cnJvdW5kaW5nU3RhcnQsIHN1cnJvdW5kaW5nRW5kKTsKKyAgICAgICAgYXV0byBzdXJyb3Vu
ZGluZ1JhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN1cnJvdW5kaW5nU3RhcnQsIGVuZE9mRWRpdGFi
bGVDb250ZW50KHNlbGVjdGlvblN0YXJ0KSk7CiAgICAgICAgIGF1dG8gY29tcG9zaXRpb25SYW5n
ZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKLSAgICAgICAgaWYgKGNvbXBv
c2l0aW9uUmFuZ2UgJiYgc3Vycm91bmRpbmdSYW5nZSAmJiBzdXJyb3VuZGluZ1JhbmdlLT5jb250
YWlucyhjcmVhdGVMaXZlUmFuZ2UoKmNvbXBvc2l0aW9uUmFuZ2UpLmdldCgpKSkgewotICAgICAg
ICAgICAgYXV0byBjbG9uZWRSYW5nZSA9IHN1cnJvdW5kaW5nUmFuZ2UtPmNsb25lUmFuZ2UoKTsK
LSAgICAgICAgICAgIHN1cnJvdW5kaW5nUmFuZ2UtPnNldEVuZChjcmVhdGVMZWdhY3lFZGl0aW5n
UG9zaXRpb24oY29tcG9zaXRpb25SYW5nZS0+c3RhcnQpKTsKLSAgICAgICAgICAgIGNsb25lZFJh
bmdlLT5zZXRTdGFydChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5n
ZS0+ZW5kKSk7Ci0gICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHQg
PSBwbGFpblRleHQoKnN1cnJvdW5kaW5nUmFuZ2UpICsgcGxhaW5UZXh0KGNsb25lZFJhbmdlKTsK
LSAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0
aW9uID0gY2hhcmFjdGVyQ291bnQoKnN1cnJvdW5kaW5nUmFuZ2UpOworICAgICAgICBpZiAoc3Vy
cm91bmRpbmdSYW5nZSAmJiBjb21wb3NpdGlvblJhbmdlICYmIGNyZWF0ZUxpdmVSYW5nZShzdXJy
b3VuZGluZ1JhbmdlKS0+Y29udGFpbnMoY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJhbmdl
KS5nZXQoKSkpIHsKKyAgICAgICAgICAgIGF1dG8gYmVmb3JlVGV4dCA9IHBsYWluVGV4dCh7IHN1
cnJvdW5kaW5nUmFuZ2UtPnN0YXJ0LCBjb21wb3NpdGlvblJhbmdlLT5zdGFydCB9KTsKKyAgICAg
ICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dCA9IGJlZm9yZVRleHQgKyBw
bGFpblRleHQoeyBjb21wb3NpdGlvblJhbmdlLT5lbmQsIHN1cnJvdW5kaW5nUmFuZ2UtPmVuZCB9
KTsKKyAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBv
c2l0aW9uID0gYmVmb3JlVGV4dC5sZW5ndGgoKTsKICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRh
LnN1cnJvdW5kaW5nQ29udGV4dFNlbGVjdGlvblBvc2l0aW9uID0gcG9zdExheW91dERhdGEuc3Vy
cm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb247CiAgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBhdXRvIGN1cnNvclBvc2l0aW9uUmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uoc3Vycm91bmRp
bmdTdGFydCwgc2VsZWN0aW9uU3RhcnQpOworICAgICAgICAgICAgYXV0byBzZWxlY3Rpb25Qb3Np
dGlvblJhbmdlID0gbWFrZVNpbXBsZVJhbmdlKHN1cnJvdW5kaW5nU3RhcnQsIHNlbGVjdGlvbi52
aXNpYmxlRW5kKCkpOwogICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRpbmdDb250
ZXh0ID0gc3Vycm91bmRpbmdSYW5nZSA/IHBsYWluVGV4dCgqc3Vycm91bmRpbmdSYW5nZSkgOiBl
bXB0eVN0cmluZygpOwotICAgICAgICAgICAgaWYgKHN1cnJvdW5kaW5nU3RhcnQuaXNOdWxsKCkg
fHwgc2VsZWN0aW9uU3RhcnQuaXNOdWxsKCkpCi0gICAgICAgICAgICAgICAgcG9zdExheW91dERh
dGEuc3Vycm91bmRpbmdDb250ZXh0Q3Vyc29yUG9zaXRpb24gPSAwOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIHBvc3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNv
clBvc2l0aW9uID0gY2hhcmFjdGVyQ291bnQoKm1ha2VSYW5nZShzdXJyb3VuZGluZ1N0YXJ0LCBz
ZWxlY3Rpb25TdGFydCkpOwotICAgICAgICAgICAgaWYgKHN1cnJvdW5kaW5nU3RhcnQuaXNOdWxs
KCkgfHwgc2VsZWN0aW9uLnZpc2libGVFbmQoKS5pc051bGwoKSkKLSAgICAgICAgICAgICAgICBw
b3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxlY3Rpb25Qb3NpdGlvbiA9IDA7Ci0g
ICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcG9zdExheW91dERhdGEuc3Vycm91bmRp
bmdDb250ZXh0U2VsZWN0aW9uUG9zaXRpb24gPSBjaGFyYWN0ZXJDb3VudCgqbWFrZVJhbmdlKHN1
cnJvdW5kaW5nU3RhcnQsIHNlbGVjdGlvbi52aXNpYmxlRW5kKCkpKTsKKyAgICAgICAgICAgIHBv
c3RMYXlvdXREYXRhLnN1cnJvdW5kaW5nQ29udGV4dEN1cnNvclBvc2l0aW9uID0gY3Vyc29yUG9z
aXRpb25SYW5nZSA/IGNoYXJhY3RlckNvdW50KCpjdXJzb3JQb3NpdGlvblJhbmdlKSA6IDA7Cisg
ICAgICAgICAgICBwb3N0TGF5b3V0RGF0YS5zdXJyb3VuZGluZ0NvbnRleHRTZWxlY3Rpb25Qb3Np
dGlvbiA9IHNlbGVjdGlvblBvc2l0aW9uUmFuZ2UgPyBjaGFyYWN0ZXJDb3VudCgqc2VsZWN0aW9u
UG9zaXRpb25SYW5nZSk6IDA7CiAgICAgICAgIH0KICAgICB9CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCmluZGV4IGU1M2U3N2E3
MGJhNTBkMmM1Y2ZmMmY3MDMwZWU0NWM0ZTBkOTNhNTAuLjE3NTVlYzFmNjU2MzhhODg0ODQ2OGMx
ZWJiODdmNDk5ZjQ1NDJlMjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCkBAIC0yMTksNyArMjE5LDEwIEBAIHN0YXRpYyB2b2lk
IGNvbXB1dGVFZGl0YWJsZVJvb3RIYXNDb250ZW50QW5kUGxhaW5UZXh0KGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHNlCiAKICAgICBhdXRvIHN0YXJ0SW5FZGl0YWJsZVJvb3QgPSBmaXJzdFBvc2l0
aW9uSW5Ob2RlKHJvb3QpOwogICAgIGRhdGEuaGFzQ29udGVudCA9IHJvb3QtPmhhc0NoaWxkTm9k
ZXMoKSAmJiAhaXNFbmRPZkVkaXRhYmxlT3JOb25FZGl0YWJsZUNvbnRlbnQoc3RhcnRJbkVkaXRh
YmxlUm9vdCk7Ci0gICAgZGF0YS5oYXNQbGFpblRleHQgPSBkYXRhLmhhc0NvbnRlbnQgJiYgaGFz
QW55UGxhaW5UZXh0KFJhbmdlOjpjcmVhdGUocm9vdC0+ZG9jdW1lbnQoKSwgVmlzaWJsZVBvc2l0
aW9uIHsgc3RhcnRJbkVkaXRhYmxlUm9vdCB9LCBWaXNpYmxlUG9zaXRpb24geyBsYXN0UG9zaXRp
b25Jbk5vZGUocm9vdCkgfSkpOworICAgIGlmIChkYXRhLmhhc0NvbnRlbnQpIHsKKyAgICAgICAg
YXV0byByYW5nZSA9IG1ha2VTaW1wbGVSYW5nZShWaXNpYmxlUG9zaXRpb24geyBzdGFydEluRWRp
dGFibGVSb290IH0sIFZpc2libGVQb3NpdGlvbiB7IGxhc3RQb3NpdGlvbkluTm9kZShyb290KSB9
KTsKKyAgICAgICAgZGF0YS5oYXNQbGFpblRleHQgPSByYW5nZSAmJiBoYXNBbnlQbGFpblRleHQo
KnJhbmdlKTsKKyAgICB9CiB9CiAKIGJvb2wgV2ViUGFnZTo6aXNUcmFuc3BhcmVudE9yRnVsbHlD
bGlwcGVkKGNvbnN0IEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CkBAIC0xOTU1LDE3ICsxOTU4LDEw
IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdEV2YXNpb25SZWN0c0Fib3ZlU2VsZWN0aW9uKENvbXBs
ZXRpb25IYW5kbGVyPHZvaWQoY29uc3QgVmVjCiB2b2lkIFdlYlBhZ2U6OmdldFJlY3RzRm9yR3Jh
bnVsYXJpdHlXaXRoU2VsZWN0aW9uT2Zmc2V0KFdlYkNvcmU6OlRleHRHcmFudWxhcml0eSBncmFu
dWxhcml0eSwgaW50MzJfdCBvZmZzZXQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBG
cmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFt
ZSgpOwotICAgIFZpc2libGVTZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9zdG9yZWRTZWxlY3Rpb25G
b3JBY2Nlc3NpYmlsaXR5LmlzTm9uZSgpID8gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkg
OiBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHk7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IHNlbGVjdGlvblN0YXJ0ID0gc2VsZWN0aW9uLnZpc2libGVTdGFydCgpOwotCi0gICAgaWYgKHNl
bGVjdGlvblN0YXJ0LmlzTnVsbCgpKSB7Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayh7IH0sIGNhbGxiYWNrSUQpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gcG9zaXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQ
b3NpdGlvbldpdGhPZmZzZXQoc2VsZWN0aW9uU3RhcnQsIG9mZnNldCk7Ci0gICAgU2VsZWN0aW9u
RGlyZWN0aW9uIGRpcmVjdGlvbiA9IG9mZnNldCA8IDAgPyBTZWxlY3Rpb25EaXJlY3Rpb246OkJh
Y2t3YXJkIDogU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkOwogCisgICAgYXV0byBzZWxlY3Rp
b24gPSBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkuaXNOb25lKCkgPyBmcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSA6IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0
eTsKKyAgICBhdXRvIHBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zm
c2V0KHNlbGVjdGlvbi52aXNpYmxlU3RhcnQoKSwgb2Zmc2V0KTsKKyAgICBhdXRvIGRpcmVjdGlv
biA9IG9mZnNldCA8IDAgPyBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkIDogU2VsZWN0aW9u
RGlyZWN0aW9uOjpGb3J3YXJkOwogICAgIGF1dG8gcmFuZ2UgPSBlbmNsb3NpbmdUZXh0VW5pdE9m
R3JhbnVsYXJpdHkocG9zaXRpb24sIGdyYW51bGFyaXR5LCBkaXJlY3Rpb24pOwogICAgIGlmICgh
cmFuZ2UgfHwgcmFuZ2UtPmNvbGxhcHNlZCgpKSB7CiAgICAgICAgIHNlbmQoTWVzc2FnZXM6Oldl
YlBhZ2VQcm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayh7IH0sIGNhbGxiYWNrSUQpKTsKQEAg
LTIwMDMsMzUgKzE5OTksMjQgQEAgc3RhdGljIE9wdGlvbmFsPFNpbXBsZVJhbmdlPiByYW5nZU5l
YXJQb3NpdGlvbk1hdGNoZXNUZXh0KGNvbnN0IFZpc2libGVQb3NpdGlvbiYKIHZvaWQgV2ViUGFn
ZTo6Z2V0UmVjdHNBdFNlbGVjdGlvbk9mZnNldFdpdGhUZXh0KGludDMyX3Qgb2Zmc2V0LCBjb25z
dCBTdHJpbmcmIHRleHQsIENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBGcmFtZSYgZnJh
bWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAg
IHVpbnQzMl90IGxlbmd0aCA9IHRleHQubGVuZ3RoKCk7Ci0gICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24gPSBtX3N0b3JlZFNlbGVjdGlvbkZvckFjY2Vzc2liaWxpdHkuaXNOb25lKCkgPyBm
cmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSA6IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNz
aWJpbGl0eTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2VsZWN0aW9uU3RhcnQgPSBzZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCk7Ci0gICAgVmlzaWJsZVBvc2l0aW9uIHNlbGVjdGlvbkVuZCA9IHNlbGVj
dGlvbi52aXNpYmxlRW5kKCk7Ci0KLSAgICBpZiAoc2VsZWN0aW9uU3RhcnQuaXNOdWxsKCkgfHwg
c2VsZWN0aW9uRW5kLmlzTnVsbCgpKSB7Ci0gICAgICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQ
cm94eTo6U2VsZWN0aW9uUmVjdHNDYWxsYmFjayh7IH0sIGNhbGxiYWNrSUQpKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIGF1dG8gc3RhcnRQb3NpdGlvbiA9IHZpc2libGVQb3NpdGlv
bkZvclBvc2l0aW9uV2l0aE9mZnNldChzZWxlY3Rpb25TdGFydCwgb2Zmc2V0KTsKLSAgICBhdXRv
IGVuZFBvc2l0aW9uID0gdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KHN0YXJ0
UG9zaXRpb24sIGxlbmd0aCk7Ci0gICAgYXV0byByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1l
LmRvY3VtZW50KCksIHN0YXJ0UG9zaXRpb24sIGVuZFBvc2l0aW9uKTsKLQotICAgIGlmIChyYW5n
ZS0+Y29sbGFwc2VkKCkpIHsKKyAgICBhdXRvJiBzZWxlY3Rpb24gPSBtX3N0b3JlZFNlbGVjdGlv
bkZvckFjY2Vzc2liaWxpdHkuaXNOb25lKCkgPyBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KSA6IG1fc3RvcmVkU2VsZWN0aW9uRm9yQWNjZXNzaWJpbGl0eTsKKyAgICBhdXRvIHN0YXJ0UG9z
aXRpb24gPSB2aXNpYmxlUG9zaXRpb25Gb3JQb3NpdGlvbldpdGhPZmZzZXQoc2VsZWN0aW9uLnZp
c2libGVTdGFydCgpLCBvZmZzZXQpOworICAgIGF1dG8gcmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2Uo
c3RhcnRQb3NpdGlvbiwgdmlzaWJsZVBvc2l0aW9uRm9yUG9zaXRpb25XaXRoT2Zmc2V0KHN0YXJ0
UG9zaXRpb24sIHRleHQubGVuZ3RoKCkpKTsKKyAgICBpZiAoIXJhbmdlIHx8IHJhbmdlLT5jb2xs
YXBzZWQoKSkgewogICAgICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlNlbGVjdGlv
blJlY3RzQ2FsbGJhY2soeyB9LCBjYWxsYmFja0lEKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAocGxhaW5UZXh0Rm9yRGlzcGxheShyYW5nZSkgIT0gdGV4dCkgeworICAgIGlm
IChwbGFpblRleHRGb3JEaXNwbGF5KCpyYW5nZSkgIT0gdGV4dCkgewogICAgICAgICAvLyBUcnkg
dG8gc2VhcmNoIGZvciBhIHJhbmdlIHdoaWNoIGlzIHRoZSBjbG9zZXN0IHRvIHRoZSBwb3NpdGlv
biB3aXRoaW4gdGhlIHNlbGVjdGlvbiByYW5nZSB0aGF0IG1hdGNoZXMgdGhlIHBhc3NlZCBpbiB0
ZXh0LgogICAgICAgICBpZiAoYXV0byB3b3JkUmFuZ2UgPSByYW5nZU5lYXJQb3NpdGlvbk1hdGNo
ZXNUZXh0KHN0YXJ0UG9zaXRpb24sIHRleHQsIHNlbGVjdGlvbikpIHsKICAgICAgICAgICAgIGlm
ICghd29yZFJhbmdlLT5jb2xsYXBzZWQoKSkKLSAgICAgICAgICAgICAgICByYW5nZSA9IGNyZWF0
ZUxpdmVSYW5nZSgqd29yZFJhbmdlKTsKKyAgICAgICAgICAgICAgICByYW5nZSA9ICp3b3JkUmFu
Z2U7CiAgICAgICAgIH0KICAgICB9CiAKICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9uUmVj
dD4gc2VsZWN0aW9uUmVjdHM7Ci0gICAgcmFuZ2UtPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhv
dXRVbmlvbkludGVyaW9yTGluZXMoc2VsZWN0aW9uUmVjdHMpOworICAgIGNyZWF0ZUxpdmVSYW5n
ZShyYW5nZSktPmNvbGxlY3RTZWxlY3Rpb25SZWN0c1dpdGhvdXRVbmlvbkludGVyaW9yTGluZXMo
c2VsZWN0aW9uUmVjdHMpOwogICAgIGNvbnZlcnRDb250ZW50VG9Sb290Vmlld1NlbGVjdGlvblJl
Y3RzKCpmcmFtZS52aWV3KCksIHNlbGVjdGlvblJlY3RzKTsKICAgICBzZW5kKE1lc3NhZ2VzOjpX
ZWJQYWdlUHJveHk6OlNlbGVjdGlvblJlY3RzQ2FsbGJhY2soc2VsZWN0aW9uUmVjdHMsIGNhbGxi
YWNrSUQpKTsKIH0KQEAgLTIyNDcsOCArMjIzMiw3IEBAIHZvaWQgV2ViUGFnZTo6cmVxdWVzdERp
Y3RhdGlvbkNvbnRleHQoQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgbGFzdFBvc2l0aW9uID0gY3VycmVudFBvc2l0aW9uOwogICAgICAg
ICB9Ci0gICAgICAgIGlmIChsYXN0UG9zaXRpb24uaXNOb3ROdWxsKCkgJiYgbGFzdFBvc2l0aW9u
ICE9IHN0YXJ0UG9zaXRpb24pCi0gICAgICAgICAgICBjb250ZXh0QmVmb3JlID0gcGxhaW5UZXh0
Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBsYXN0UG9zaXRpb24s
IHN0YXJ0UG9zaXRpb24pKTsKKyAgICAgICAgY29udGV4dEJlZm9yZSA9IHBsYWluVGV4dEZvckNv
bnRleHQobWFrZVNpbXBsZVJhbmdlKGxhc3RQb3NpdGlvbiwgc3RhcnRQb3NpdGlvbikpOwogICAg
IH0KIAogICAgIFN0cmluZyBjb250ZXh0QWZ0ZXI7CkBAIC0yMjYxLDggKzIyNDUsNyBAQCB2b2lk
IFdlYlBhZ2U6OnJlcXVlc3REaWN0YXRpb25Db250ZXh0KENhbGxiYWNrSUQgY2FsbGJhY2tJRCkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGxhc3RQb3NpdGlvbiA9IGN1cnJl
bnRQb3NpdGlvbjsKICAgICAgICAgfQotICAgICAgICBpZiAobGFzdFBvc2l0aW9uLmlzTm90TnVs
bCgpICYmIGxhc3RQb3NpdGlvbiAhPSBlbmRQb3NpdGlvbikKLSAgICAgICAgICAgIGNvbnRleHRB
ZnRlciA9IHBsYWluVGV4dEZvckNvbnRleHQoUmFuZ2U6OmNyZWF0ZSgqZnJhbWUuZG9jdW1lbnQo
KSwgZW5kUG9zaXRpb24sIGxhc3RQb3NpdGlvbikpOworICAgICAgICBjb250ZXh0QWZ0ZXIgPSBw
bGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShlbmRQb3NpdGlvbiwgbGFzdFBvc2l0
aW9uKSk7CiAgICAgfQogCiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpTZWxlY3Rp
b25Db250ZXh0Q2FsbGJhY2soc2VsZWN0ZWRUZXh0LCBjb250ZXh0QmVmb3JlLCBjb250ZXh0QWZ0
ZXIsIGNhbGxiYWNrSUQpKTsKQEAgLTI0ODAsMTQgKzI0NjMsMTQgQEAgV2ViQXV0b2NvcnJlY3Rp
b25Db250ZXh0IFdlYlBhZ2U6OmF1dG9jb3JyZWN0aW9uQ29udGV4dCgpCiAgICAgICAgICAgICAg
ICAgcHJldmlvdXNQb3NpdGlvbiA9IHN0YXJ0T2ZXb3JkKHBvc2l0aW9uT2ZOZXh0Qm91bmRhcnlP
ZkdyYW51bGFyaXR5KGN1cnJlbnRQb3NpdGlvbiwgVGV4dEdyYW51bGFyaXR5OjpXb3JkR3JhbnVs
YXJpdHksIFNlbGVjdGlvbkRpcmVjdGlvbjo6QmFja3dhcmQpKTsKICAgICAgICAgICAgICAgICBp
ZiAocHJldmlvdXNQb3NpdGlvbi5pc051bGwoKSkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgU3RyaW5nIGN1cnJlbnRXb3JkID0gcGxhaW5UZXh0Rm9yQ29udGV4
dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCBwcmV2aW91c1Bvc2l0aW9uLCBjdXJy
ZW50UG9zaXRpb24pKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3VycmVudFdvcmQgPSBwbGFp
blRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShwcmV2aW91c1Bvc2l0aW9uLCBjdXJyZW50
UG9zaXRpb24pKTsKICAgICAgICAgICAgICAgICB0b3RhbENvbnRleHRMZW5ndGggKz0gY3VycmVu
dFdvcmQubGVuZ3RoKCk7CiAgICAgICAgICAgICAgICAgaWYgKHRvdGFsQ29udGV4dExlbmd0aCA+
PSBtYXhDb250ZXh0TGVuZ3RoKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBjdXJyZW50UG9zaXRpb24gPSBwcmV2aW91c1Bvc2l0aW9uOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaWYgKGN1cnJlbnRQb3NpdGlvbi5pc05vdE51bGwoKSAmJiBjdXJyZW50
UG9zaXRpb24gIT0gc3RhcnRQb3NpdGlvbikgewotICAgICAgICAgICAgICAgIGNvbnRleHRCZWZv
cmUgPSBwbGFpblRleHRGb3JDb250ZXh0KFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IGN1cnJlbnRQb3NpdGlvbiwgc3RhcnRQb3NpdGlvbikpOworICAgICAgICAgICAgICAgIGNvbnRl
eHRCZWZvcmUgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShjdXJyZW50UG9z
aXRpb24sIHN0YXJ0UG9zaXRpb24pKTsKICAgICAgICAgICAgICAgICBpZiAoYXRCb3VuZGFyeU9m
R3JhbnVsYXJpdHkoY3VycmVudFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OlBhcmFncmFwaEdy
YW51bGFyaXR5LCBTZWxlY3Rpb25EaXJlY3Rpb246OkJhY2t3YXJkKSkKICAgICAgICAgICAgICAg
ICAgICAgY29udGV4dEJlZm9yZSA9IG1ha2VTdHJpbmcoIlxuICJfcywgY29udGV4dEJlZm9yZSk7
CiAgICAgICAgICAgICB9CkBAIC0yNDk3LDggKzI0ODAsNyBAQCBXZWJBdXRvY29ycmVjdGlvbkNv
bnRleHQgV2ViUGFnZTo6YXV0b2NvcnJlY3Rpb25Db250ZXh0KCkKICAgICAgICAgICAgIFZpc2li
bGVQb3NpdGlvbiBuZXh0UG9zaXRpb247CiAgICAgICAgICAgICBpZiAoIWF0Qm91bmRhcnlPZkdy
YW51bGFyaXR5KGVuZFBvc2l0aW9uLCBUZXh0R3JhbnVsYXJpdHk6OldvcmRHcmFudWxhcml0eSwg
U2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKSAmJiB3aXRoaW5UZXh0VW5pdE9mR3JhbnVsYXJp
dHkoZW5kUG9zaXRpb24sIFRleHRHcmFudWxhcml0eTo6V29yZEdyYW51bGFyaXR5LCBTZWxlY3Rp
b25EaXJlY3Rpb246OkZvcndhcmQpKQogICAgICAgICAgICAgICAgIG5leHRQb3NpdGlvbiA9IHBv
c2l0aW9uT2ZOZXh0Qm91bmRhcnlPZkdyYW51bGFyaXR5KGVuZFBvc2l0aW9uLCBUZXh0R3JhbnVs
YXJpdHk6OldvcmRHcmFudWxhcml0eSwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJkKTsKLSAg
ICAgICAgICAgIGlmIChuZXh0UG9zaXRpb24uaXNOb3ROdWxsKCkpCi0gICAgICAgICAgICAgICAg
Y29udGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9yQ29udGV4dChSYW5nZTo6Y3JlYXRlKCpmcmFtZS5k
b2N1bWVudCgpLCBlbmRQb3NpdGlvbiwgbmV4dFBvc2l0aW9uKSk7CisgICAgICAgICAgICBjb250
ZXh0QWZ0ZXIgPSBwbGFpblRleHRGb3JDb250ZXh0KG1ha2VTaW1wbGVSYW5nZShlbmRQb3NpdGlv
biwgbmV4dFBvc2l0aW9uKSk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTI2MDIsNyArMjU4NCw3
IEBAIHN0YXRpYyB2b2lkIGxpbmtJbmRpY2F0b3JQb3NpdGlvbkluZm9ybWF0aW9uKFdlYlBhZ2Um
IHBhZ2UsIEVsZW1lbnQmIGxpbmtFbGVtZW50CiAgICAgaWYgKCFyZXF1ZXN0LmluY2x1ZGVMaW5r
SW5kaWNhdG9yKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIGxpbmtSYW5nZSA9IHJhbmdl
T2ZDb250ZW50cyhsaW5rRWxlbWVudCk7CisgICAgYXV0byBsaW5rUmFuZ2UgPSBtYWtlUmFuZ2VT
ZWxlY3RpbmdOb2RlQ29udGVudHMobGlua0VsZW1lbnQpOwogICAgIGZsb2F0IGRldmljZVNjYWxl
RmFjdG9yID0gcGFnZS5jb3JlUGFnZSgpLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogICAgIGNvbnN0
IGZsb2F0IG1hcmdpbkluUG9pbnRzID0gcmVxdWVzdC5saW5rSW5kaWNhdG9yU2hvdWxkSGF2ZUxl
Z2FjeU1hcmdpbnMgPyA0IDogMDsKIApAQCAtMjYxNCwxMyArMjU5NiwxNCBAQCBzdGF0aWMgdm9p
ZCBsaW5rSW5kaWNhdG9yUG9zaXRpb25JbmZvcm1hdGlvbihXZWJQYWdlJiBwYWdlLCBFbGVtZW50
JiBsaW5rRWxlbWVudAogICAgICAgICBUZXh0SW5kaWNhdG9yT3B0aW9uOjpJbmNsdWRlTWFyZ2lu
SWZSYW5nZU1hdGNoZXNTZWxlY3Rpb24sCiAgICAgICAgIFRleHRJbmRpY2F0b3JPcHRpb246OkNv
bXB1dGVFc3RpbWF0ZWRCYWNrZ3JvdW5kQ29sb3IKICAgICB9OwotICAgIGF1dG8gdGV4dEluZGlj
YXRvciA9IFRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShsaW5rUmFuZ2UuZ2V0KCksIHRl
eHRJbmRpY2F0b3JPcHRpb25zLCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6
Tm9uZSwgRmxvYXRTaXplKG1hcmdpbkluUG9pbnRzICogZGV2aWNlU2NhbGVGYWN0b3IsIG1hcmdp
bkluUG9pbnRzICogZGV2aWNlU2NhbGVGYWN0b3IpKTsKKyAgICBhdXRvIHRleHRJbmRpY2F0b3Ig
PSBUZXh0SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UobGlua1JhbmdlLCB0ZXh0SW5kaWNhdG9y
T3B0aW9ucywgVGV4dEluZGljYXRvclByZXNlbnRhdGlvblRyYW5zaXRpb246Ok5vbmUsIEZsb2F0
U2l6ZShtYXJnaW5JblBvaW50cyAqIGRldmljZVNjYWxlRmFjdG9yLCBtYXJnaW5JblBvaW50cyAq
IGRldmljZVNjYWxlRmFjdG9yKSk7CiAKICAgICBpZiAodGV4dEluZGljYXRvcikKICAgICAgICAg
aW5mby5saW5rSW5kaWNhdG9yID0gdGV4dEluZGljYXRvci0+ZGF0YSgpOwogfQogICAgIAogI2lm
IEVOQUJMRShEQVRBX0RFVEVDVElPTikKKwogc3RhdGljIHZvaWQgZGF0YURldGVjdG9yTGlua1Bv
c2l0aW9uSW5mb3JtYXRpb24oRWxlbWVudCYgZWxlbWVudCwgSW50ZXJhY3Rpb25JbmZvcm1hdGlv
bkF0UG9zaXRpb24mIGluZm8pCiB7CiAgICAgaWYgKCFEYXRhRGV0ZWN0aW9uOjppc0RhdGFEZXRl
Y3RvckxpbmsoZWxlbWVudCkpCkBAIC0yNjM0LDEzICsyNjE3LDEzIEBAIHN0YXRpYyB2b2lkIGRh
dGFEZXRlY3RvckxpbmtQb3NpdGlvbkluZm9ybWF0aW9uKEVsZW1lbnQmIGVsZW1lbnQsIEludGVy
YWN0aW9uSW5mCiAgICAgaWYgKCFEYXRhRGV0ZWN0aW9uOjpyZXF1aXJlc0V4dGVuZGVkQ29udGV4
dChlbGVtZW50KSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGF1dG8gbGlua1JhbmdlID0g
UmFuZ2U6OmNyZWF0ZShlbGVtZW50LmRvY3VtZW50KCkpOwotICAgIGxpbmtSYW5nZS0+c2VsZWN0
Tm9kZUNvbnRlbnRzKGVsZW1lbnQpOwotICAgIGluZm8udGV4dEJlZm9yZSA9IHBsYWluVGV4dEZv
ckRpc3BsYXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRh
cnkobGlua1JhbmdlLT5zdGFydFBvc2l0aW9uKCksCisgICAgYXV0byByYW5nZSA9IG1ha2VSYW5n
ZVNlbGVjdGluZ05vZGVDb250ZW50cyhlbGVtZW50KTsKKyAgICBpbmZvLnRleHRCZWZvcmUgPSBw
bGFpblRleHRGb3JEaXNwbGF5KHJhbmdlRXhwYW5kZWRCeUNoYXJhY3RlcnNJbkRpcmVjdGlvbkF0
V29yZEJvdW5kYXJ5KGNyZWF0ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihyYW5nZS5zdGFydCksCiAg
ICAgICAgIGRhdGFEZXRlY3Rpb25FeHRlbmRlZENvbnRleHRMZW5ndGgsIFNlbGVjdGlvbkRpcmVj
dGlvbjo6QmFja3dhcmQpKTsKLSAgICBpbmZvLnRleHRBZnRlciA9IHBsYWluVGV4dEZvckRpc3Bs
YXkocmFuZ2VFeHBhbmRlZEJ5Q2hhcmFjdGVyc0luRGlyZWN0aW9uQXRXb3JkQm91bmRhcnkobGlu
a1JhbmdlLT5lbmRQb3NpdGlvbigpLAorICAgIGluZm8udGV4dEFmdGVyID0gcGxhaW5UZXh0Rm9y
RGlzcGxheShyYW5nZUV4cGFuZGVkQnlDaGFyYWN0ZXJzSW5EaXJlY3Rpb25BdFdvcmRCb3VuZGFy
eShjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24ocmFuZ2UuZW5kKSwKICAgICAgICAgZGF0YURl
dGVjdGlvbkV4dGVuZGVkQ29udGV4dExlbmd0aCwgU2VsZWN0aW9uRGlyZWN0aW9uOjpGb3J3YXJk
KSk7CiB9CisKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBpbWFnZVBvc2l0aW9uSW5mb3JtYXRpb24o
V2ViUGFnZSYgcGFnZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgSW50ZXJhY3Rpb25JbmZvcm1h
dGlvblJlcXVlc3QmIHJlcXVlc3QsIEludGVyYWN0aW9uSW5mb3JtYXRpb25BdFBvc2l0aW9uJiBp
bmZvKQpAQCAtNDE3MywxMiArNDE1NiwxMiBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1bWVu
dEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwogICAg
IFZpc2libGVQb3NpdGlvbiBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uOwogCiAgICAg
YXV0byBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAg
IGF1dG8gcmFuZ2VPZkludGVyZXN0ID0gbWFrZVJhbmdlKHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCBy
YW5nZU9mSW50ZXJlc3RFbmQpOwotICAgIGlmIChzZWxlY3Rpb25SYW5nZSAmJiByYW5nZXNPdmVy
bGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpzZWxlY3Rpb25SYW5n
ZSkucHRyKCkpKSB7CisgICAgYXV0byByYW5nZU9mSW50ZXJlc3QgPSAqbWFrZVNpbXBsZVJhbmdl
KHJhbmdlT2ZJbnRlcmVzdFN0YXJ0LCByYW5nZU9mSW50ZXJlc3RFbmQpOworICAgIGlmIChzZWxl
Y3Rpb25SYW5nZSAmJiByYW5nZXNPdmVybGFwKGNyZWF0ZUxpdmVSYW5nZShyYW5nZU9mSW50ZXJl
c3QpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2UoKnNlbGVjdGlvblJhbmdlKS5wdHIoKSkpIHsKICAg
ICAgICAgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uID0gc3RkOjptYXgocmFuZ2VP
ZkludGVyZXN0U3RhcnQsIHNlbGVjdGlvblN0YXJ0KTsKICAgICAgICAgZW5kT2ZSYW5nZU9mSW50
ZXJlc3RJblNlbGVjdGlvbiA9IHN0ZDo6bWluKHJhbmdlT2ZJbnRlcmVzdEVuZCwgc2VsZWN0aW9u
RW5kKTsKICAgICB9IGVsc2UgewotICAgICAgICBhdXRvIHJvb3ROb2RlID0gbWFrZVJlZlB0cihy
YW5nZU9mSW50ZXJlc3QtPmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyKCkpOworICAgICAgICBhdXRv
IHJvb3ROb2RlID0gY29tbW9uSW5jbHVzaXZlQW5jZXN0b3IocmFuZ2VPZkludGVyZXN0KTsKICAg
ICAgICAgaWYgKCFyb290Tm9kZSkgewogICAgICAgICAgICAgY29tcGxldGlvbkhhbmRsZXIoeyB9
KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTQxOTAsNyArNDE3Myw3IEBAIHZvaWQgV2ViUGFn
ZTo6cmVxdWVzdERvY3VtZW50RWRpdGluZ0NvbnRleHQoRG9jdW1lbnRFZGl0aW5nQ29udGV4dFJl
cXVlc3QgcmVxdWVzCiAgICAgICAgIH0KICAgICAgICAgYXV0byBzY29wZSA9IG1ha2VSYW5nZVNl
bGVjdGluZ05vZGVDb250ZW50cygqcm9vdENvbnRhaW5lck5vZGUpOwogCi0gICAgICAgIGF1dG8g
Y2hhcmFjdGVyUmFuZ2VPZkludGVyZXN0ID0gY2hhcmFjdGVyUmFuZ2Uoc2NvcGUsICpyYW5nZU9m
SW50ZXJlc3QpOworICAgICAgICBhdXRvIGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVzdCA9IGNoYXJh
Y3RlclJhbmdlKHNjb3BlLCByYW5nZU9mSW50ZXJlc3QpOwogICAgICAgICBhdXRvIG1pZHBvaW50
TG9jYXRpb24gPSBjaGVja2VkU3VtPHVpbnQ2NF90PihjaGFyYWN0ZXJSYW5nZU9mSW50ZXJlc3Qu
bG9jYXRpb24sIGNoYXJhY3RlclJhbmdlT2ZJbnRlcmVzdC5sZW5ndGggLyAyKTsKICAgICAgICAg
aWYgKG1pZHBvaW50TG9jYXRpb24uaGFzT3ZlcmZsb3dlZCgpKSB7CiAgICAgICAgICAgICBjb21w
bGV0aW9uSGFuZGxlcih7IH0pOwpAQCAtNDIzOSw3ICs0MjIyLDcgQEAgdm9pZCBXZWJQYWdlOjpy
ZXF1ZXN0RG9jdW1lbnRFZGl0aW5nQ29udGV4dChEb2N1bWVudEVkaXRpbmdDb250ZXh0UmVxdWVz
dCByZXF1ZXMKICAgICBjb250ZXh0LmNvbnRleHRCZWZvcmUgPSBtYWtlU3RyaW5nKGNvbnRleHRC
ZWZvcmVTdGFydCwgc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250
ZXh0LnNlbGVjdGVkVGV4dCA9IG1ha2VTdHJpbmcoc3RhcnRPZlJhbmdlT2ZJbnRlcmVzdEluU2Vs
ZWN0aW9uLCBlbmRPZlJhbmdlT2ZJbnRlcmVzdEluU2VsZWN0aW9uKTsKICAgICBjb250ZXh0LmNv
bnRleHRBZnRlciA9IG1ha2VTdHJpbmcoZW5kT2ZSYW5nZU9mSW50ZXJlc3RJblNlbGVjdGlvbiwg
Y29udGV4dEFmdGVyRW5kKTsKLSAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiByYW5nZXNPdmVy
bGFwKHJhbmdlT2ZJbnRlcmVzdC5nZXQoKSwgY3JlYXRlTGl2ZVJhbmdlKCpjb21wb3NpdGlvblJh
bmdlKS5wdHIoKSkpIHsKKyAgICBpZiAoY29tcG9zaXRpb25SYW5nZSAmJiByYW5nZXNPdmVybGFw
KGNyZWF0ZUxpdmVSYW5nZShyYW5nZU9mSW50ZXJlc3QpLnB0cigpLCBjcmVhdGVMaXZlUmFuZ2Uo
KmNvbXBvc2l0aW9uUmFuZ2UpLnB0cigpKSkgewogICAgICAgICBWaXNpYmxlUG9zaXRpb24gY29t
cG9zaXRpb25TdGFydChjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29tcG9zaXRpb25SYW5n
ZS0+c3RhcnQpKTsKICAgICAgICAgVmlzaWJsZVBvc2l0aW9uIGNvbXBvc2l0aW9uRW5kKGNyZWF0
ZUxlZ2FjeUVkaXRpbmdQb3NpdGlvbihjb21wb3NpdGlvblJhbmdlLT5lbmQpKTsKICAgICAgICAg
Y29udGV4dC5tYXJrZWRUZXh0ID0gbWFrZVN0cmluZyhjb21wb3NpdGlvblN0YXJ0LCBjb21wb3Np
dGlvbkVuZCk7CkBAIC00MjY0LDcgKzQyNDcsNyBAQCB2b2lkIFdlYlBhZ2U6OnJlcXVlc3REb2N1
bWVudEVkaXRpbmdDb250ZXh0KERvY3VtZW50RWRpdGluZ0NvbnRleHRSZXF1ZXN0IHJlcXVlcwog
ICAgIH07CiAKICAgICBpZiAod2FudHNSZWN0cykgewotICAgICAgICBpZiAoYXV0byBjb250ZXh0
UmFuZ2UgPSBtYWtlUmFuZ2UoY29udGV4dEJlZm9yZVN0YXJ0LCBjb250ZXh0QWZ0ZXJFbmQpKQor
ICAgICAgICBpZiAoYXV0byBjb250ZXh0UmFuZ2UgPSBtYWtlU2ltcGxlUmFuZ2UoY29udGV4dEJl
Zm9yZVN0YXJ0LCBjb250ZXh0QWZ0ZXJFbmQpKQogICAgICAgICAgICAgY29udGV4dC50ZXh0UmVj
dHMgPSBjaGFyYWN0ZXJSZWN0c0ZvclJhbmdlKCpjb250ZXh0UmFuZ2UsIDApOwogICAgIH0gZWxz
ZSBpZiAod2FudHNNYXJrZWRUZXh0UmVjdHMgJiYgY29tcG9zaXRpb25SYW5nZSkgewogICAgICAg
ICB1bnNpZ25lZCBjb21wb3NpdGlvblN0YXJ0T2Zmc2V0ID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KaW5kZXggY2ExYzk1ZTQ4
NDdiNzQ1ZWY0YjJjZDkyNWQzZTA4NmEyNzNmOWM5NC4uMmQ5NDMzMzk5NmM4MjhkMmUwMjIzNjgy
YzZmMjkwNTQ5OTRjNjUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KQEAgLTg3NCwxOSArODc0LDE4IEBAIHZvaWQgV2ViUGFn
ZTo6cGVyZm9ybUltbWVkaWF0ZUFjdGlvbkhpdFRlc3RBdExvY2F0aW9uKFdlYkNvcmU6OkZsb2F0
UG9pbnQgbG9jYXRpCiAgICAgICAgIGlmICghd2ViT3ZlcmxheSkKICAgICAgICAgICAgIGNvbnRp
bnVlOwogCi0gICAgICAgIFJlZlB0cjxSYW5nZT4gbWFpblJlc3VsdFJhbmdlOwotICAgICAgICBE
REFjdGlvbkNvbnRleHQgKmFjdGlvbkNvbnRleHQgPSB3ZWJPdmVybGF5LT5hY3Rpb25Db250ZXh0
Rm9yUmVzdWx0QXRQb2ludChsb2NhdGlvbkluQ29udGVudENvb3JkaW5hdGVzLCBtYWluUmVzdWx0
UmFuZ2UpOwotICAgICAgICBpZiAoIWFjdGlvbkNvbnRleHQgfHwgIW1haW5SZXN1bHRSYW5nZSkK
KyAgICAgICAgYXV0byBhY3Rpb25Db250ZXh0ID0gd2ViT3ZlcmxheS0+YWN0aW9uQ29udGV4dEZv
clJlc3VsdEF0UG9pbnQobG9jYXRpb25JbkNvbnRlbnRDb29yZGluYXRlcyk7CisgICAgICAgIGlm
ICghYWN0aW9uQ29udGV4dCkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGF1dG8g
dmlldyA9IG1haW5SZXN1bHRSYW5nZS0+b3duZXJEb2N1bWVudCgpLnZpZXcoKTsKKyAgICAgICAg
YXV0byB2aWV3ID0gYWN0aW9uQ29udGV4dC0+cmFuZ2Uuc3RhcnQuY29udGFpbmVyLT5kb2N1bWVu
dCgpLnZpZXcoKTsKICAgICAgICAgaWYgKCF2aWV3KQogICAgICAgICAgICAgY29udGludWU7CiAK
ICAgICAgICAgcGFnZU92ZXJsYXlEaWRPdmVycmlkZURhdGFEZXRlY3RvcnMgPSB0cnVlOwotICAg
ICAgICBpbW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhQWN0aW9uQ29udGV4dCA9IGFj
dGlvbkNvbnRleHQ7Ci0gICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFC
b3VuZGluZ0JveCA9IHZpZXctPmNvbnRlbnRzVG9XaW5kb3coZW5jbG9zaW5nSW50UmVjdCh1bml0
ZWRCb3VuZGluZ0JveGVzKFJlbmRlck9iamVjdDo6YWJzb2x1dGVUZXh0UXVhZHMoKm1haW5SZXN1
bHRSYW5nZSkpKSk7Ci0gICAgICAgIGltbWVkaWF0ZUFjdGlvblJlc3VsdC5kZXRlY3RlZERhdGFU
ZXh0SW5kaWNhdG9yID0gVGV4dEluZGljYXRvcjo6Y3JlYXRlV2l0aFJhbmdlKCptYWluUmVzdWx0
UmFuZ2UsIHsgVGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxD
b250ZW50Rm9yQ29tcGxleFJhbmdlcyB9LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNp
dGlvbjo6RmFkZUluKTsKKyAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0
YUFjdGlvbkNvbnRleHQgPSBhY3Rpb25Db250ZXh0LT5jb250ZXh0LmdldCgpOworICAgICAgICBp
bW1lZGlhdGVBY3Rpb25SZXN1bHQuZGV0ZWN0ZWREYXRhQm91bmRpbmdCb3ggPSB2aWV3LT5jb250
ZW50c1RvV2luZG93KGVuY2xvc2luZ0ludFJlY3QodW5pdGVkQm91bmRpbmdCb3hlcyhSZW5kZXJP
YmplY3Q6OmFic29sdXRlVGV4dFF1YWRzKGFjdGlvbkNvbnRleHQtPnJhbmdlKSkpKTsKKyAgICAg
ICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YVRleHRJbmRpY2F0b3IgPSBUZXh0
SW5kaWNhdG9yOjpjcmVhdGVXaXRoUmFuZ2UoYWN0aW9uQ29udGV4dC0+cmFuZ2UsIHsgVGV4dElu
ZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50Rm9yQ29tcGxl
eFJhbmdlcyB9LCBUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsK
ICAgICAgICAgaW1tZWRpYXRlQWN0aW9uUmVzdWx0LmRldGVjdGVkRGF0YU9yaWdpbmF0aW5nUGFn
ZU92ZXJsYXkgPSBvdmVybGF5LT5wYWdlT3ZlcmxheUlEKCk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dl
YkZyYW1lSU9TLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2Vi
RnJhbWVJT1MubW0KaW5kZXggZWNjZmI1MDFlNmVjMzIxODc2YTA2YTQwNDJmZGI5M2MxODA2ZDhh
MC4uNDdmMzBjYWQxNGJlZWEwZTc2MzliZjRiOTdhMWY1NjgwZjQyZjBkYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0KKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0K
QEAgLTIzOCwxMSArMjM4LDggQEAgLSAoTlNBcnJheSAqKXNlbGVjdGlvblJlY3RzCiAKIC0gKERP
TVJhbmdlICopd29yZEF0UG9pbnQ6KENHUG9pbnQpcG9pbnQKIHsKLSAgICBWaXNpYmxlUG9zaXRp
b24gcG9zID0gW3NlbGYgdmlzaWJsZVBvc2l0aW9uRm9yUG9pbnQ6cG9pbnRdOwotICAgIFZpc2li
bGVQb3NpdGlvbiBzdGFydCA9IHN0YXJ0T2ZXb3JkKHBvcyk7Ci0gICAgVmlzaWJsZVBvc2l0aW9u
IGVuZCA9IGVuZE9mV29yZChwb3MpOwotICAgIERPTVJhbmdlICp3b3JkUmFuZ2UgPSBraXQobWFr
ZVJhbmdlKHN0YXJ0LCBlbmQpLmdldCgpKTsKLSAgICByZXR1cm4gd29yZFJhbmdlOyAgIAorICAg
IGF1dG8gcG9zaXRpb24gPSBbc2VsZiB2aXNpYmxlUG9zaXRpb25Gb3JQb2ludDpwb2ludF07Cisg
ICAgcmV0dXJuIGtpdChtYWtlU2ltcGxlUmFuZ2Uoc3RhcnRPZldvcmQocG9zaXRpb24pLCBlbmRP
ZldvcmQocG9zaXRpb24pKSk7CiB9CiAKIC0gKFdlYlZpc2libGVQb3NpdGlvbiAqKXdlYlZpc2li
bGVQb3NpdGlvbkZvclBvaW50OihDR1BvaW50KXBvaW50CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0gYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJWaXNpYmxlUG9zaXRpb24ubW0K
aW5kZXggM2IwZWI5NTRlMDlhZmQ4YzczMDVmZmFlZTEyNDFmMTdmMjEyZDFmYy4uZGU1ZGE0NGFm
ZDkyOGEzZjA5OTUwYjUyZTY0YzY1NDA1ZTViYjkyNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViVmlzaWJsZVBvc2l0aW9uLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYlZpc2libGVQb3NpdGlvbi5t
bQpAQCAtNDE2LDcgKzQxNiw3IEBAIC0gKERPTVJhbmdlICopZW5jbG9zaW5nUmFuZ2VXaXRoRGlj
dGF0aW9uUGhyYXNlQWx0ZXJuYXRpdmVzOihOU0FycmF5ICoqKWFsdGVybmF0CiAgICAgZm9yIChh
dXRvIG1hcmtlciA6IGRvY3VtZW50Lm1hcmtlcnMoKS5tYXJrZXJzRm9yKCpub2RlLCBEb2N1bWVu
dE1hcmtlcjo6RGljdGF0aW9uUGhyYXNlV2l0aEFsdGVybmF0aXZlcykpIHsKICAgICAgICAgaWYg
KG1hcmtlci0+c3RhcnRPZmZzZXQoKSA8PSBvZmZzZXQgJiYgbWFya2VyLT5lbmRPZmZzZXQoKSA+
PSBvZmZzZXQpIHsKICAgICAgICAgICAgICphbHRlcm5hdGl2ZXMgPSBjcmVhdGVOU0FycmF5KFdU
Rjo6Z2V0PFZlY3RvcjxTdHJpbmc+PihtYXJrZXItPmRhdGEoKSkpLmF1dG9yZWxlYXNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4ga2l0KFJhbmdlOjpjcmVhdGUoZG9jdW1lbnQsIG5vZGUsIG1hcmtl
ci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZzZXQoKSkucHRyKCkpOworICAg
ICAgICAgICAgcmV0dXJuIGtpdChyYW5nZSgqbm9kZSwgKm1hcmtlcikpOwogICAgICAgICB9CiAg
ICAgfQogICAgIHJldHVybiBuaWw7CkBAIC00MzMsNyArNDMzLDcgQEAgLSAoRE9NUmFuZ2UgKill
bmNsb3NpbmdSYW5nZVdpdGhDb3JyZWN0aW9uSW5kaWNhdG9yCiAgICAgYXV0byYgZG9jdW1lbnQg
PSBub2RlLT5kb2N1bWVudCgpOwogICAgIGZvciAoYXV0byBtYXJrZXIgOiBkb2N1bWVudC5tYXJr
ZXJzKCkubWFya2Vyc0Zvcigqbm9kZSwgRG9jdW1lbnRNYXJrZXI6OlNwZWxsaW5nKSkgewogICAg
ICAgICBpZiAobWFya2VyLT5zdGFydE9mZnNldCgpIDw9IG9mZnNldCAmJiBtYXJrZXItPmVuZE9m
ZnNldCgpID49IG9mZnNldCkKLSAgICAgICAgICAgIHJldHVybiBraXQoUmFuZ2U6OmNyZWF0ZShk
b2N1bWVudCwgbm9kZSwgbWFya2VyLT5zdGFydE9mZnNldCgpLCBub2RlLCBtYXJrZXItPmVuZE9m
ZnNldCgpKS5wdHIoKSk7CisgICAgICAgICAgICByZXR1cm4ga2l0KHJhbmdlKCpub2RlLCAqbWFy
a2VyKSk7CiAgICAgfQogICAgIHJldHVybiBuaWw7CiB9CkBAIC00NzUsMjMgKzQ3NSwxMSBAQCAt
IChET01SYW5nZSAqKWVuY2xvc2luZ1dvcmRSYW5nZQogCiArIChET01SYW5nZSAqKXJhbmdlRm9y
Rmlyc3RQb3NpdGlvbjooV2ViVmlzaWJsZVBvc2l0aW9uICopZmlyc3Qgc2Vjb25kOihXZWJWaXNp
YmxlUG9zaXRpb24gKilzZWNvbmQKIHsKLSAgICBWaXNpYmxlUG9zaXRpb24gZmlyc3RWUCA9IFtm
aXJzdCBfdmlzaWJsZVBvc2l0aW9uXTsKLSAgICBWaXNpYmxlUG9zaXRpb24gc2Vjb25kVlAgPSBb
c2Vjb25kIF92aXNpYmxlUG9zaXRpb25dOwotICAgIAotICAgIGlmIChmaXJzdFZQLmlzTnVsbCgp
IHx8IHNlY29uZFZQLmlzTnVsbCgpKQotICAgICAgICByZXR1cm4gbmlsOwotICAgIAotICAgIFJl
ZlB0cjxSYW5nZT4gcmFuZ2U7Ci0gICAgaWYgKGZpcnN0VlAgPCBzZWNvbmRWUCkgewotICAgICAg
ICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoZmlyc3RWUC5kZWVwRXF1aXZhbGVudCgpLmRlcHJlY2F0
ZWROb2RlKCktPmRvY3VtZW50KCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmlyc3RWUCwgc2Vjb25kVlApOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJhbmdlID0gUmFu
Z2U6OmNyZWF0ZShmaXJzdFZQLmRlZXBFcXVpdmFsZW50KCkuZGVwcmVjYXRlZE5vZGUoKS0+ZG9j
dW1lbnQoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vj
b25kVlAsIGZpcnN0VlApOwotICAgIH0KLSAgICAKLSAgICAKLSAgICByZXR1cm4ga2l0KHJhbmdl
LmdldCgpKTsKKyAgICBhdXRvIGZpcnN0VlAgPSBbZmlyc3QgX3Zpc2libGVQb3NpdGlvbl07Cisg
ICAgYXV0byBzZWNvbmRWUCA9IFtzZWNvbmQgX3Zpc2libGVQb3NpdGlvbl07CisgICAgaWYgKGZp
cnN0VlAgPCBzZWNvbmRWUCkKKyAgICAgICAgc3RkOjpzd2FwKGZpcnN0VlAsIHNlY29uZFZQKTsK
KyAgICByZXR1cm4ga2l0KG1ha2VTaW1wbGVSYW5nZShmaXJzdFZQLCBzZWNvbmRWUCkpOwogfQog
CiBAZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRF
eHRlbnNpb25zLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTVVJS2l0RXh0ZW5z
aW9ucy5tbQppbmRleCA0ZjA2ODM0NjIyYjczMmZlNmE2Y2M2NGM3Yzk1NWRhMjE0ZjJmNjg3Li4y
OWZjMmM3NzA5YWI0ZGE5ODQxNzlmM2NiYzhmNzRlMGI4MjkxYTc3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NVUlLaXRFeHRlbnNpb25zLm1tCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL0RPTS9ET01VSUtpdEV4dGVuc2lvbnMubW0KQEAgLTIxMCwyMiAr
MjEwLDggQEAgLSAoQk9PTClpc1NlbGVjdGFibGVCbG9jawogCiAtIChET01SYW5nZSAqKXJhbmdl
T2ZDb250YWluaW5nUGFyYWdyYXBoCiB7Ci0gICAgRE9NUmFuZ2UgKnJlc3VsdCA9IG5pbDsKLSAg
ICAKLSAgICBOb2RlICpub2RlID0gY29yZShzZWxmKTsgICAgCi0gICAgVmlzaWJsZVBvc2l0aW9u
IHZpc2libGVQb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24obm9kZSwgMCksIFdl
YkNvcmU6OkRPV05TVFJFQU0pOwotICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlUGFyYWdyYXBo
U3RhcnQgPSBzdGFydE9mUGFyYWdyYXBoKHZpc2libGVQb3NpdGlvbik7Ci0gICAgVmlzaWJsZVBv
c2l0aW9uIHZpc2libGVQYXJhZ3JhcGhFbmQgPSBlbmRPZlBhcmFncmFwaCh2aXNpYmxlUG9zaXRp
b24pOwotICAgIAotICAgIFBvc2l0aW9uIHBhcmFncmFwaFN0YXJ0ID0gdmlzaWJsZVBhcmFncmFw
aFN0YXJ0LmRlZXBFcXVpdmFsZW50KCkucGFyZW50QW5jaG9yZWRFcXVpdmFsZW50KCk7Ci0gICAg
UG9zaXRpb24gcGFyYWdyYXBoRW5kID0gdmlzaWJsZVBhcmFncmFwaEVuZC5kZWVwRXF1aXZhbGVu
dCgpLnBhcmVudEFuY2hvcmVkRXF1aXZhbGVudCgpOyAgICAKLSAgICAKLSAgICBpZiAocGFyYWdy
YXBoU3RhcnQuaXNOb3ROdWxsKCkgJiYgcGFyYWdyYXBoRW5kLmlzTm90TnVsbCgpKSB7Ci0gICAg
ICAgIFJlZjxSYW5nZT4gcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpub2RlLT5vd25lckRvY3VtZW50
KCksIHBhcmFncmFwaFN0YXJ0LCBwYXJhZ3JhcGhFbmQpOwotICAgICAgICByZXN1bHQgPSBraXQo
cmFuZ2UucHRyKCkpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0OworICAgIFZpc2li
bGVQb3NpdGlvbiBwb3NpdGlvbihjcmVhdGVMZWdhY3lFZGl0aW5nUG9zaXRpb24oY29yZShzZWxm
KSwgMCksIFdlYkNvcmU6OkRPV05TVFJFQU0pOworICAgIHJldHVybiBraXQobWFrZVNpbXBsZVJh
bmdlKHN0YXJ0T2ZQYXJhZ3JhcGgocG9zaXRpb24pLCBlbmRPZlBhcmFncmFwaChwb3NpdGlvbikp
KTsKIH0KIAogLSAoQ0dGbG9hdCl0ZXh0SGVpZ2h0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJGcmFtZS5tbQppbmRleCAzM2EyNjA5MjY2YTllOTU0N2VhY2QxMWI0MTdkNGYy
Y2IxMWJhMDIyLi5mNzk0MTk4MGY2NGEwYTQwYTUwNjU2Njc4NzFmNWIyODY2NzZmY2Q5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYkZyYW1lLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KQEAgLTkyMiw3ICs5
MjIsNyBAQCAtIChXZWJDb3JlOjpWaXNpYmxlUG9zaXRpb24pX3Zpc2libGVQb3NpdGlvbkZvclBv
aW50OihOU1BvaW50KXBvaW50CiAKIC0gKERPTVJhbmdlICopX2NoYXJhY3RlclJhbmdlQXRQb2lu
dDooTlNQb2ludClwb2ludAogewotICAgIHJldHVybiBraXQoX3ByaXZhdGUtPmNvcmVGcmFtZS0+
cmFuZ2VGb3JQb2ludChXZWJDb3JlOjpJbnRQb2ludChwb2ludCkpLmdldCgpKTsKKyAgICByZXR1
cm4ga2l0KF9wcml2YXRlLT5jb3JlRnJhbWUtPnJhbmdlRm9yUG9pbnQoV2ViQ29yZTo6SW50UG9p
bnQocG9pbnQpKSk7CiB9CiAKIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilfdHlwaW5nU3R5
bGUKQEAgLTE3NDEsOSArMTc0MSw4IEBAIC0gKHZvaWQpZ2V0RGljdGF0aW9uUmVzdWx0UmFuZ2Vz
OihOU0FycmF5ICoqKW91dFJhbmdlcyBhbmRNZXRhZGF0YXM6KE5TQXJyYXkgKiopCiAgICAgICAg
ICAgICBpZiAoIW1ldGFkYXRhKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBhdXRvIHJhbmdlID0gV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZSgqZG9j
dW1lbnQsIG5vZGUsIG1hcmtlci0+c3RhcnRPZmZzZXQoKSwgbm9kZSwgbWFya2VyLT5lbmRPZmZz
ZXQoKSk7Ci0gICAgICAgICAgICBET01SYW5nZSAqZG9tUmFuZ2UgPSBraXQocmFuZ2UucHRyKCkp
OwotICAgICAgICAgICAgCisgICAgICAgICAgICBET01SYW5nZSAqZG9tUmFuZ2UgPSBraXQocmFu
Z2UoKm5vZGUsICptYXJrZXIpKTsKKwogICAgICAgICAgICAgaWYgKG1ldGFkYXRhICE9IHByZXZp
b3VzTWV0YWRhdGEpIHsKICAgICAgICAgICAgICAgICBbbWV0YWRhdGFzIGFkZE9iamVjdDptZXRh
ZGF0YV07CiAgICAgICAgICAgICAgICAgW3JhbmdlcyBhZGRPYmplY3Q6ZG9tUmFuZ2VdOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1lZGlhdGVBY3Rp
b25Db250cm9sbGVyLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJJbW1l
ZGlhdGVBY3Rpb25Db250cm9sbGVyLm1tCmluZGV4IDJkZjgxNjE5ZTU5NWZhZjZhOWVkMmVmZTIw
MTZkYmZhMTBiNWE3OWMuLjllNzZkMmI0NzVkZTEwNTA4ZWFhMzhmMmZiZWIzZTk1NTNhNzg4NTIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViSW1tZWRpYXRl
QWN0aW9uQ29udHJvbGxlci5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYkltbWVkaWF0ZUFjdGlvbkNvbnRyb2xsZXIubW0KQEAgLTI3MCw4ICsyNzAsOCBAQCAtIChp
ZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9sbGVyPilfZGVmYXVsdEFuaW1hdGlv
bkNvbnRyb2xsZXIKICAgICAgICAgaWYgKFdURjo6cHJvdG9jb2xJc0luSFRUUEZhbWlseShhYnNv
bHV0ZVVSTFN0cmluZykpIHsKICAgICAgICAgICAgIF90eXBlID0gV2ViSW1tZWRpYXRlQWN0aW9u
TGlua1ByZXZpZXc7CiAKLSAgICAgICAgICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbGlua1Jh
bmdlID0gcmFuZ2VPZkNvbnRlbnRzKCpfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpOwotICAg
ICAgICAgICAgYXV0byBpbmRpY2F0b3IgPSBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yOjpjcmVhdGVX
aXRoUmFuZ2UoKmxpbmtSYW5nZSwgeyBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yT3B0aW9uOjpVc2VC
b3VuZGluZ1JlY3RBbmRQYWludEFsbENvbnRlbnRGb3JDb21wbGV4UmFuZ2VzIH0sIFdlYkNvcmU6
OlRleHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW4pOworICAgICAgICAg
ICAgYXV0byBsaW5rUmFuZ2UgPSBtYWtlUmFuZ2VTZWxlY3RpbmdOb2RlQ29udGVudHMoKl9oaXRU
ZXN0UmVzdWx0LlVSTEVsZW1lbnQoKSk7CisgICAgICAgICAgICBhdXRvIGluZGljYXRvciA9IFdl
YkNvcmU6OlRleHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZShsaW5rUmFuZ2UsIHsgV2ViQ29y
ZTo6VGV4dEluZGljYXRvck9wdGlvbjo6VXNlQm91bmRpbmdSZWN0QW5kUGFpbnRBbGxDb250ZW50
Rm9yQ29tcGxleFJhbmdlcyB9LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9yUHJlc2VudGF0aW9uVHJh
bnNpdGlvbjo6RmFkZUluKTsKICAgICAgICAgICAgIGlmIChpbmRpY2F0b3IpCiAgICAgICAgICAg
ICAgICAgW193ZWJWaWV3IF9zZXRUZXh0SW5kaWNhdG9yOippbmRpY2F0b3Igd2l0aExpZmV0aW1l
OldlYkNvcmU6OlRleHRJbmRpY2F0b3JXaW5kb3dMaWZldGltZTo6UGVybWFuZW50XTsKIApAQCAt
NDcxLDEwICs0NzEsOCBAQCAtIChpZCA8TlNJbW1lZGlhdGVBY3Rpb25BbmltYXRpb25Db250cm9s
bGVyPilfYW5pbWF0aW9uQ29udHJvbGxlckZvckRhdGFEZXRlY3RlZAogICAgIFthY3Rpb25Db250
ZXh0IHNldEFsdE1vZGU6WUVTXTsKICAgICBbYWN0aW9uQ29udGV4dCBzZXRJbW1lZGlhdGU6WUVT
XTsKIAotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gbGlua1JhbmdlID0gcmFuZ2VPZkNvbnRl
bnRzKCpfaGl0VGVzdFJlc3VsdC5VUkxFbGVtZW50KCkpOwotICAgIGlmICghbGlua1JhbmdlKQot
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICBhdXRvIGluZGljYXRvciA9IFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3I6OmNyZWF0ZVdpdGhSYW5nZSgqbGlua1JhbmdlLCB7IH0sIFdlYkNvcmU6OlRl
eHRJbmRpY2F0b3JQcmVzZW50YXRpb25UcmFuc2l0aW9uOjpGYWRlSW4pOworICAgIGF1dG8gbGlu
a1JhbmdlID0gbWFrZVJhbmdlU2VsZWN0aW5nTm9kZUNvbnRlbnRzKCpfaGl0VGVzdFJlc3VsdC5V
UkxFbGVtZW50KCkpOworICAgIGF1dG8gaW5kaWNhdG9yID0gV2ViQ29yZTo6VGV4dEluZGljYXRv
cjo6Y3JlYXRlV2l0aFJhbmdlKGxpbmtSYW5nZSwgeyB9LCBXZWJDb3JlOjpUZXh0SW5kaWNhdG9y
UHJlc2VudGF0aW9uVHJhbnNpdGlvbjo6RmFkZUluKTsKIAogICAgIF9jdXJyZW50QWN0aW9uQ29u
dGV4dCA9IFthY3Rpb25Db250ZXh0IGNvbnRleHRGb3JWaWV3Ol93ZWJWaWV3IGFsdE1vZGU6WUVT
IGludGVyYWN0aW9uU3RhcnRlZEhhbmRsZXI6XigpIHsKICAgICB9IGludGVyYWN0aW9uQ2hhbmdl
ZEhhbmRsZXI6XigpIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vz
c2libGVUZXh0SW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9BY2Nlc3NpYmxlVGV4
dEltcGwuY3BwCmluZGV4IDYxYzAyMjdlMjhkMjNhOTc2NmRkY2YyMDg4NDhkOTZhMjI0N2U4Mjku
LjNkYTg5YzRjY2Q2MWMxZTZhZmJjYzAxYjIwYTg5OTIwMDllOWU0MjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0FjY2Vzc2libGVUZXh0SW1wbC5jcHAKKysrIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQWNjZXNzaWJsZVRleHRJbXBsLmNwcApAQCAtNDYxLDExICs0NjEs
MTEgQEAgSFJFU1VMVCBBY2Nlc3NpYmxlVGV4dDo6c2Nyb2xsU3Vic3RyaW5nVG8obG9uZyBzdGFy
dEluZGV4LCBsb25nIGVuZEluZGV4LCBlbnVtIEkKICAgICBzdGFydEluZGV4ID0gY29udmVydFNw
ZWNpYWxPZmZzZXQoc3RhcnRJbmRleCk7CiAgICAgZW5kSW5kZXggPSBjb252ZXJ0U3BlY2lhbE9m
ZnNldChlbmRJbmRleCk7CiAKLSAgICBWaXNpYmxlUG9zaXRpb25SYW5nZSB0ZXh0UmFuZ2UgPSBt
X29iamVjdC0+dmlzaWJsZVBvc2l0aW9uUmFuZ2VGb3JSYW5nZShQbGFpblRleHRSYW5nZShzdGFy
dEluZGV4LCBlbmRJbmRleC1zdGFydEluZGV4KSk7Ci0gICAgaWYgKHRleHRSYW5nZS5zdGFydC5p
c051bGwoKSB8fCB0ZXh0UmFuZ2UuZW5kLmlzTnVsbCgpKQorICAgIGF1dG8gdGV4dFJhbmdlID0g
bWFrZVNpbXBsZVJhbmdlKG1fb2JqZWN0LT52aXNpYmxlUG9zaXRpb25SYW5nZUZvclJhbmdlKFBs
YWluVGV4dFJhbmdlKHN0YXJ0SW5kZXgsIGVuZEluZGV4LXN0YXJ0SW5kZXgpKSk7CisgICAgaWYg
KCF0ZXh0UmFuZ2UpCiAgICAgICAgIHJldHVybiBTX0ZBTFNFOwogCi0gICAgSW50UmVjdCBib3Vu
ZGluZ0JveCA9IG1ha2VSYW5nZSh0ZXh0UmFuZ2Uuc3RhcnQsIHRleHRSYW5nZS5lbmQpLT5hYnNv
bHV0ZUJvdW5kaW5nQm94KCk7CisgICAgSW50UmVjdCBib3VuZGluZ0JveCA9IGNyZWF0ZUxpdmVS
YW5nZSgqdGV4dFJhbmdlKS0+YWJzb2x1dGVCb3VuZGluZ0JveCgpOwogICAgIHN3aXRjaCAoc2Ny
b2xsVHlwZSkgewogICAgIGNhc2UgSUEyX1NDUk9MTF9UWVBFX1RPUF9MRUZUOgogICAgICAgICBt
X29iamVjdC0+c2Nyb2xsVG9HbG9iYWxQb2ludChib3VuZGluZ0JveC5taW5YTWluWUNvcm5lcigp
KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>