<?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>233481</bug_id>
          
          <creation_ts>2021-11-24 14:00:08 -0800</creation_ts>
          <short_desc>SharedBufferChunkReader should be refactored</short_desc>
          <delta_ts>2021-11-25 21:04:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=170956</see_also>
          <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>
          
          <blocked>233030</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Jean-Yves Avenard [:jya]">jean-yves.avenard</reporter>
          <assigned_to name="Jean-Yves Avenard [:jya]">jean-yves.avenard</assigned_to>
          <cc>annulen</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>heycam</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1817704</commentid>
    <comment_count>0</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-11-24 14:00:08 -0800</bug_when>
    <thetext>SharedBufferChunkReader is used to read the content of a SharedBuffer into a Vector.

It flattens the SharedBuffer which is inefficient.

It was first noted in bug 170956 that it should be rewritten and use the SharedBuffer&apos;s iterator instead.

Following bug 233030 where SharedBuffer are no longer mutable ; it required the SharedBufferChunkReader to keep a strong ref to a ContiguousSharedBuffer which would increase total memory use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817705</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-11-24 14:00:54 -0800</bug_when>
    <thetext>&lt;rdar://problem/85733358&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817865</commentid>
    <comment_count>2</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-11-25 17:19:13 -0800</bug_when>
    <thetext>this task would allow for bug 233030 to be a tad smaller and is enough to do</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817870</commentid>
    <comment_count>3</comment_count>
      <attachid>445164</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-11-25 17:44:02 -0800</bug_when>
    <thetext>Created attachment 445164
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817874</commentid>
    <comment_count>4</comment_count>
      <attachid>445164</attachid>
    <who name="Cameron McCormack (:heycam)">heycam</who>
    <bug_when>2021-11-25 19:22:05 -0800</bug_when>
    <thetext>Comment on attachment 445164
Patch

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

&gt; Source/WebCore/ChangeLog:10
&gt; +        SharedBufferChunkReader required the SharedBuffer to be flatten which
&gt; +        would mutate the underlying SharedBuffer.

&quot;to be flattened&quot;

But I&apos;d rewrite this to describe the change being made, e.g.:

Avoid flattening a SharedBuffer when reading reading it through SharedBufferChunkReader.

And maybe this can be the top line of the ChangeLog in place of &quot;Rewrite SharedBufferChunkReader&quot;, which is a bit non-specific.

&gt; Source/WebCore/ChangeLog:11
&gt; +        the peek method was also incorrect if the data read overlapped multiple

Similarly change this to describe the change being made:

Fix a bug in the peek method where too many characters would be read if the requested size overlaps multiple segments.

&gt; Source/WebCore/ChangeLog:17
&gt; +        We add it to makefiles and export the header so that API tests can be written.

(Probably doesn&apos;t need to be mentioned.)

&gt; Source/WebCore/platform/SharedBuffer.cpp:307
&gt; +        size_t segmentLength = std::min(currentSegment-&gt;segment-&gt;size(), remaining);
&gt; +        data.append(currentSegment-&gt;segment-&gt;data(), segmentLength);

&quot;segmentLength&quot; sounds like the length of the segment, but I don&apos;t immediately have a better suggestion.

&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:78
&gt;              auto currentCharacter = m_segment[m_segmentIndex++];
&gt;              if (currentCharacter != m_separator[m_separatorIndex]) {
&gt;                  if (m_separatorIndex &gt; 0) {

The existing code to check for separators doesn&apos;t work correctly with arbitrary separator strings. Not sure if it matters. But for example if the buffer contains &quot;aaab&quot; and the separator string is &quot;aab&quot;, then it won&apos;t detect it as a separator, since at m_segmentIndex = 2, it&apos;ll detect a mismatch, and reset m_segmentIndex to 0.

Leave a FIXME in here?

&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:98
&gt; +        if (++m_iteratorCurrent == m_iteratorEnd) {
&gt;              m_reachedEndOfFile = true;

Maybe set m_segment to nullptr just to be clean in here.

&gt; Source/WebCore/platform/SharedBufferChunkReader.cpp:137
&gt;          if (segmentLength &gt; requestedSize)
&gt;              segmentLength = requestedSize;

Replace this with a std::min, since that&apos;s what we do elsewhere?

&gt; Source/WebCore/platform/SharedBufferChunkReader.h:63
&gt; +    const size_t m_bufferSize { 0 };

Can drop the initializer since both constructors initialize this. (And since it&apos;s const, the compiler will complain if a constructor stops initializing it.)

&gt; Source/WebCore/platform/SharedBufferChunkReader.h:66
&gt; +    bool m_reachedEndOfFile { false };

I think we can get rid of m_reachedEndOfFile, and check `m_iteratorCurrent != m_iteratorEnd` instead. (In a private helper function, if you like.)

&gt; Tools/TestWebKitAPI/Tests/WebCore/SharedBuffer.cpp:237
&gt; +    const char* const simpleText = &quot;This is a stupid test.&quot;;

s/stupid/simple/ if you want to be more positive. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817877</commentid>
    <comment_count>5</comment_count>
      <attachid>445166</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-11-25 20:09:20 -0800</bug_when>
    <thetext>Created attachment 445166
Patch

Apply comment</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817879</commentid>
    <comment_count>6</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-25 21:04:36 -0800</bug_when>
    <thetext>Committed r286171 (244554@main): &lt;https://commits.webkit.org/244554@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 445166.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445164</attachid>
            <date>2021-11-25 17:44:02 -0800</date>
            <delta_ts>2021-11-25 20:09:15 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233481-20211126124401.patch</filename>
            <type>text/plain</type>
            <size>31911</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y4MWQ1Mjg0MTUwMDQ5
MDVmNmQ1YWM1NTZiZTAyMDQzYjA1MjI5YS4uYzFkZDdlNmVkMDVkNWJlNGVjZmYzODJjNTQzMDM0
MzAwZjVjYmQ2MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDIxLTExLTI1ICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgUmV3cml0ZSBTaGFyZWRC
dWZmZXJDaHVua1JlYWRlcgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMzNDgxCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg1NzMzMzU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2hhcmVkQnVmZmVyQ2h1
bmtSZWFkZXIgcmVxdWlyZWQgdGhlIFNoYXJlZEJ1ZmZlciB0byBiZSBmbGF0dGVuIHdoaWNoCisg
ICAgICAgIHdvdWxkIG11dGF0ZSB0aGUgdW5kZXJseWluZyBTaGFyZWRCdWZmZXIuCisgICAgICAg
IHRoZSBwZWVrIG1ldGhvZCB3YXMgYWxzbyBpbmNvcnJlY3QgaWYgdGhlIGRhdGEgcmVhZCBvdmVy
bGFwcGVkIG11bHRpcGxlCisgICAgICAgIHNlZ21lbnRzIChpdCB3b3VsZCByZXR1cm4gdG9vIG1h
bnkgY2hhcmFjdGVycykuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhZGQgYSBzaW1pbGFyIHJl
YWQgbWV0aG9kIGluIFNoYXJlZEJ1ZmZlciB0aGF0IHdpbGwgYmUgdXNlZAorICAgICAgICBpbiBi
dWcgMjMzMDMwLgorCisgICAgICAgIFdlIGFkZCBpdCB0byBtYWtlZmlsZXMgYW5kIGV4cG9ydCB0
aGUgaGVhZGVyIHNvIHRoYXQgQVBJIHRlc3RzIGNhbiBiZSB3cml0dGVuLgorCisgICAgICAgIENv
dmVyZWQgaW4gZXhpc3RpbmcgdGVzdHMsIEFQSSB0ZXN0cyBhZGRlZC4KKworICAgICAgICAqIEhl
YWRlcnMuY21ha2U6CisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTaGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZvclBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlNoYXJlZEJ1ZmZlcjo6cmVhZCBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmg6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6OlNoYXJlZEJ1ZmZl
ckNodW5rUmVhZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlckNodW5rUmVhZGVy
OjpuZXh0Q2h1bmspOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6
OnBlZWspOgorICAgICAgICAqIHBsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmg6CisK
IDIwMjEtMTEtMjIgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAg
ICAgICAgSGF2ZSBTY3JvbGxBbmltYXRvcjo6c2Nyb2xsVG9Qb3NpdGlvbldpdGhBbmltYXRpb24o
KSB0YWtlIGEgY2xhbXBpbmcgYXJndW1lbnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hl
YWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDliNTc4Njll
NjkyY2ViZGY1NTEyZDVjOTZmOGMxN2FmNTYxZmY3NWYuLjliYTkwZGYxMTYwYTUwYzVlNjE3YjBk
MDlhZjVhMDQ2MGQ0M2I4ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21h
a2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQpAQCAtMTE3MSw2ICsxMTcxLDcg
QEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL1Nl
cmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWUuaAogICAgIHBsYXRmb3JtL1NlcmlhbGl6ZWRQbGF0Zm9y
bURhdGFDdWVWYWx1ZS5oCiAgICAgcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKKyAgICBwbGF0Zm9y
bS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oCiAgICAgcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFz
aC5oCiAgICAgcGxhdGZvcm0vU2xlZXBEaXNhYmxlci5oCiAgICAgcGxhdGZvcm0vU2xlZXBEaXNh
YmxlckNsaWVudC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oKaW5kZXggMDRlOTY5ODQ0ZGZiZjM4Zjc5NWNjY2ZlNmJiYzY1NGE3ZTA3ZWEy
Yi4uNDY4NTgwODE2OWVkNTE1MDQyN2M1Mjk1MGYwMGM2NzhkMWFhZWJmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDg4LDYg
KzQ4OCw3IEBACiAJCTFBNDk0RURGMEExMjNGNEMwMEZEQUZDMSAvKiBKU0RvY3VtZW50RnJhZ21l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNDk0
RUREMEExMjNGNEMwMEZEQUZDMSAvKiBKU0RvY3VtZW50RnJhZ21lbnQuaCAqLzsgfTsKIAkJMUE0
QTJERjAwQTFCODUyQTAwQzgwN0Y4IC8qIEpTSFRNTEFuY2hvckVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEEyREVDMEExQjg1MkEwMEM4
MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVtZW50LmggKi87IH07CiAJCTFBNEE5NTRFMEI0RURDQ0Iw
MDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBNEE5NTRDMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUZB
MkVERjI3NTA2RkRFMDAxMUMxNUQgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDUxRkEyRUQ2Mjc0Rjc4Mzcw
MDExQzE1RCAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTFBNERBNDIyMUNERDNBODMwMEY0NDczQyAv
KiBMaW5rSWNvbkNvbGxlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMUE0REE0MjAxQ0REM0E4MzAwRjQ0NzNDIC8qIExpbmtJY29uQ29sbGVjdG9y
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE1
NjlEMTIwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfY2xhc3MuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNTY5Q0UzMEQ3RTJCODIwMDdDMzk4MyAvKiBv
YmpjX2NsYXNzLmggKi87IH07CiAJCTFBNTY5RDEzMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX2Ns
YXNzLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1
NjlDRTQwRDdFMkI4MjAwN0MzOTgzIC8qIG9iamNfY2xhc3MubW0gKi87IH07CkBAIC05NjA2LDYg
Kzk2MDcsOCBAQAogCQk1MUY3OThFQzFCRTg4MEQzMDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElEQkluZGV4SW5mby5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk1MUY4ODZCRTFGMzI5MjA3MDBDMTkzRUYgLyogSlNOYXZp
Z2F0b3JTZXJ2aWNlV29ya2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTTmF2aWdhdG9yU2VydmljZVdvcmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTUxRjg4NkJGMUYzMjkyMDcwMEMxOTNFRiAvKiBKU05hdmlnYXRvclNlcnZpY2VXb3Jr
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZpZ2F0b3JTZXJ2aWNl
V29ya2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTUxRkEyRUQ2Mjc0Rjc4Mzcw
MDExQzE1RCAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk1MUZBMkVENzI3NEY3ODM3MDAxMUMxNUQgLyogU2hhcmVkQnVmZmVyQ2h1
bmtSZWFkZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVk
QnVmZmVyQ2h1bmtSZWFkZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZC
NTUwMjExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk1MUZCNTUwMzExM0UzRTkxMDA4MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ2xvc2VFdmVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRkI2N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50
RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CkBAIC0yOTEyNiw2ICsyOTEyOSw4IEBACiAJCQkJMDc2RDFDMUQyM0Y2RDlEODAwRDk1
QjA2IC8qIFNlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVWYWx1ZS5oICovLAogCQkJCTFBNEE5NTRC
MEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuY3BwICovLAogCQkJCTFBNEE5NTRDMEI0
RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCAqLywKKwkJCQk1MUZBMkVENzI3NEY3ODM3
MDAxMUMxNUQgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwICovLAorCQkJCTUxRkEyRUQ2
Mjc0Rjc4MzcwMDExQzE1RCAvKiBTaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oICovLAogCQkJCTgz
NERGQUNFMUY3REFFNTcwMEMyNzI1QiAvKiBTaGFyZWRTdHJpbmdIYXNoLmNwcCAqLywKIAkJCQk4
MzRERkFDQzFGN0RBRTU2MDBDMjcyNUIgLyogU2hhcmVkU3RyaW5nSGFzaC5oICovLAogCQkJCTkz
MzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAvKiBTaGFyZWRUaW1lci5oICovLApAQCAtMzYxMzQsNiAr
MzYxMzksNyBAQAogCQkJCUZEMUFGMTUwMTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxRDlGMEZDMTIxMjIwMjlCMDA1RDhGRDQgLyogU2hhcmVEYXRh
LmggaW4gSGVhZGVycyAqLywKIAkJCQkxQTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVk
QnVmZmVyLmggaW4gSGVhZGVycyAqLywKKwkJCQk1MUZBMkVERjI3NTA2RkRFMDAxMUMxNUQgLyog
U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEE5MURDMjRD
RjQ2RkUwMEJGRDg5QyAvKiBTaGFyZWRHYW1lcGFkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUNEMzZDMTZCMjYwQTY1Q0MwMEM4QzUyOSAvKiBTaGFyZWRSb3V0aW5nQXJiaXRyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJODM0REZBRDAxRjdEQUU1RDAwQzI3MjVCIC8qIFNoYXJlZFN0cmlu
Z0hhc2guaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZl
ci5jcHAKaW5kZXggNDc1NDJkYWNhZWI4NmE1YzNhZTg4ZmViNGRmYWY0NDlmYzNlZmMzNS4uODU1
YjZkZjlhNWFkMjRlNTgwOTEzNzVjNTcxZWJmNTI1NDNmMjVkOSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0xNTUsNiArMTU1LDEyIEBAIFZlY3Rvcjx1aW50
OF90PiBTaGFyZWRCdWZmZXI6OnRha2VEYXRhKCkKIH0KIAogU2hhcmVkQnVmZmVyRGF0YVZpZXcg
U2hhcmVkQnVmZmVyOjpnZXRTb21lRGF0YShzaXplX3QgcG9zaXRpb24pIGNvbnN0Cit7CisgICAg
Y29uc3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRyeSogZWxlbWVudCA9IGdldFNlZ21lbnRGb3JQb3Np
dGlvbihwb3NpdGlvbik7CisgICAgcmV0dXJuIHsgZWxlbWVudC0+c2VnbWVudC5jb3B5UmVmKCks
IHBvc2l0aW9uIC0gZWxlbWVudC0+YmVnaW5Qb3NpdGlvbiB9OworfQorCitjb25zdCBTaGFyZWRC
dWZmZXI6OkRhdGFTZWdtZW50VmVjdG9yRW50cnkqIFNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZv
clBvc2l0aW9uKHNpemVfdCBwb3NpdGlvbikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChw
b3NpdGlvbiA8IG1fc2l6ZSk7CiAgICAgYXV0byBjb21wYXJhdG9yID0gW10oY29uc3Qgc2l6ZV90
JiBwb3NpdGlvbiwgY29uc3QgRGF0YVNlZ21lbnRWZWN0b3JFbnRyeSYgZW50cnkpIHsKQEAgLTE2
Miw3ICsxNjgsNyBAQCBTaGFyZWRCdWZmZXJEYXRhVmlldyBTaGFyZWRCdWZmZXI6OmdldFNvbWVE
YXRhKHNpemVfdCBwb3NpdGlvbikgY29uc3QKICAgICB9OwogICAgIGNvbnN0IERhdGFTZWdtZW50
VmVjdG9yRW50cnkqIGVsZW1lbnQgPSBzdGQ6OnVwcGVyX2JvdW5kKG1fc2VnbWVudHMuYmVnaW4o
KSwgbV9zZWdtZW50cy5lbmQoKSwgcG9zaXRpb24sIGNvbXBhcmF0b3IpOwogICAgIGVsZW1lbnQt
LTsgLy8gc3RkOjp1cHBlcl9ib3VuZCBnaXZlcyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgdGhh
dCBpcyBncmVhdGVyIHRoYW4gcG9zaXRpb24uIFdlIHdhbnQgdGhlIGVsZW1lbnQganVzdCBiZWZv
cmUgdGhhdC4KLSAgICByZXR1cm4geyBlbGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwgcG9zaXRp
b24gLSBlbGVtZW50LT5iZWdpblBvc2l0aW9uIH07CisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAK
IFN0cmluZyBTaGFyZWRCdWZmZXI6OnRvSGV4U3RyaW5nKCkgY29uc3QKQEAgLTI3Nyw2ICsyODMs
MzMgQEAgYm9vbCBTaGFyZWRCdWZmZXI6OnN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50
OF90PiYgcHJlZml4KSBjb25zdAogICAgIHJldHVybiBmYWxzZTsKIH0KIAorVmVjdG9yPHVpbnQ4
X3Q+IFNoYXJlZEJ1ZmZlcjo6cmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25z
dAoreworICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhOworICAgIGlmIChvZmZzZXQgPj0gc2l6ZSgp
KQorICAgICAgICByZXR1cm4gZGF0YTsKKyAgICBhdXRvIHJlbWFpbmluZyA9IHN0ZDo6bWluKGxl
bmd0aCwgc2l6ZSgpIC0gb2Zmc2V0KTsKKyAgICBpZiAoIXJlbWFpbmluZykKKyAgICAgICAgcmV0
dXJuIGRhdGE7CisKKyAgICBkYXRhLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkocmVtYWluaW5nKTsK
KyAgICBhdXRvKiBjdXJyZW50U2VnbWVudCA9IGdldFNlZ21lbnRGb3JQb3NpdGlvbihvZmZzZXQp
OworICAgIHNpemVfdCBvZmZzZXRJblNlZ21lbnQgPSBvZmZzZXQgLSBjdXJyZW50U2VnbWVudC0+
YmVnaW5Qb3NpdGlvbjsKKyAgICBzaXplX3QgYXZhaWxhYmxlSW5TZWdtZW50ID0gc3RkOjptaW4o
Y3VycmVudFNlZ21lbnQtPnNlZ21lbnQtPnNpemUoKSAtIG9mZnNldEluU2VnbWVudCwgcmVtYWlu
aW5nKTsKKyAgICBkYXRhLmFwcGVuZChjdXJyZW50U2VnbWVudC0+c2VnbWVudC0+ZGF0YSgpICsg
b2Zmc2V0SW5TZWdtZW50LCBhdmFpbGFibGVJblNlZ21lbnQpOworCisgICAgcmVtYWluaW5nIC09
IGF2YWlsYWJsZUluU2VnbWVudDsKKworICAgIGF1dG8qIGFmdGVyTGFzdFNlZ21lbnQgPSBlbmQo
KTsKKworICAgIHdoaWxlIChyZW1haW5pbmcgJiYgKytjdXJyZW50U2VnbWVudCAhPSBhZnRlckxh
c3RTZWdtZW50KSB7CisgICAgICAgIHNpemVfdCBzZWdtZW50TGVuZ3RoID0gc3RkOjptaW4oY3Vy
cmVudFNlZ21lbnQtPnNlZ21lbnQtPnNpemUoKSwgcmVtYWluaW5nKTsKKyAgICAgICAgZGF0YS5h
cHBlbmQoY3VycmVudFNlZ21lbnQtPnNlZ21lbnQtPmRhdGEoKSwgc2VnbWVudExlbmd0aCk7Cisg
ICAgICAgIHJlbWFpbmluZyAtPSBzZWdtZW50TGVuZ3RoOworICAgIH0KKyAgICByZXR1cm4gZGF0
YTsKK30KKwogdm9pZCBTaGFyZWRCdWZmZXI6OmNvcHlUbyh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6
ZV90IGxlbmd0aCkgY29uc3QKIHsKICAgICByZXR1cm4gY29weVRvKGRlc3RpbmF0aW9uLCAwLCBs
ZW5ndGgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCAzOTUzYjEx
MmJiMTEwNzUwYTdjYjE3NDNhOGRjZDc3MjQ3YWRhMWFiLi5mMjNmNWQ2OWFkMzJlZDY0MGI5NTc3
YjJlNmM0NTQ5MTgzOTM2OGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9T
aGFyZWRCdWZmZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIu
aApAQCAtMTAyLDYgKzEwMiw3IEBAIHB1YmxpYzoKICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkg
Y29uc3Q7CiAgICAgY29uc3QgY2hhciogZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEoKSk7IH0KICAgICBWZWN0b3I8dWludDhf
dD4gY29weURhdGEoKSBjb25zdDsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVhZChzaXplX3Qgb2Zm
c2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdDsKIAogICAgIC8vIFNpbWlsYXIgdG8gY29weURhdGEo
KSBidXQgYXZvaWRzIGNvcHlpbmcgYW5kIHdpbGwgdGFrZSB0aGUgZGF0YSBpbnN0ZWFkIHdoZW4g
aXQgaXMgc2FmZSAoVGhlIFNoYXJlZEJ1ZmZlciBpcyBub3Qgc2hhcmVkKS4KICAgICBWZWN0b3I8
dWludDhfdD4gZXh0cmFjdERhdGEoKTsKQEAgLTI0NCw3ICsyNDUsOSBAQCBwcml2YXRlOgogCiAg
ICAgLy8gQ29tYmluZXMgYWxsIHRoZSBzZWdtZW50cyBpbnRvIGEgVmVjdG9yIGFuZCByZXR1cm5z
IHRoYXQgdmVjdG9yIGFmdGVyIGNsZWFyaW5nIHRoZSBTaGFyZWRCdWZmZXIuCiAgICAgVmVjdG9y
PHVpbnQ4X3Q+IHRha2VEYXRhKCk7Ci0gICAgCisKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3Rv
ckVudHJ5KiBnZXRTZWdtZW50Rm9yUG9zaXRpb24oc2l6ZV90IHBvc2l0aXRpb24pIGNvbnN0Owor
CiAgICAgc3RhdGljIFJlZlB0cjxTaGFyZWRCdWZmZXI+IGNyZWF0ZUZyb21SZWFkaW5nRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKIAogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5jcHAK
aW5kZXggNWU0NDY2Y2QzZjE3MTg4YTI3YzBjZGUxZWE4YTgwMWIwMmEyNDdkNS4uYTg4YTJmYjc4
MzA4MjMyYmMxMmI2ZTAwOTM3ZGZkNjljOGRlMTMyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmNwcApAQCAtMSw1ICsxLDYgQEAK
IC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsMjMgKzMyLDI0IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIu
aCIKIAotI2lmIEVOQUJMRShNSFRNTCkKLQotLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgb3Zlcmtp
bGwuIFJlbW92ZSB0aGlzIGNsYXNzIGFuZCBqdXN0IGl0ZXJhdGUgdGhlIHNlZ21lbnRzIG9mIGEg
U2hhcmVkQnVmZmVyCi0vLyB1c2luZyB0aGUgY29vbCBuZXcgU2hhcmVkQnVmZmVyOjpiZWdpbigp
IGFuZCBTaGFyZWRCdWZmZXI6OmVuZCgpIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjbGFzcy4KLQot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBF
TkFCTEUoTUhUTUwpCisKIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpTaGFyZWRCdWZmZXJDaHVu
a1JlYWRlcihTaGFyZWRCdWZmZXIqIGJ1ZmZlciwgY29uc3QgVmVjdG9yPGNoYXI+JiBzZXBhcmF0
b3IpCi0gICAgOiBtX2J1ZmZlcihidWZmZXIpCisgICAgOiBtX2l0ZXJhdG9yQ3VycmVudChidWZm
ZXItPmJlZ2luKCkpCisgICAgLCBtX2l0ZXJhdG9yRW5kKGJ1ZmZlci0+ZW5kKCkpCisgICAgLCBt
X2J1ZmZlclNpemUoYnVmZmVyLT5zaXplKCkpCisgICAgLCBtX3NlZ21lbnQobV9pdGVyYXRvckN1
cnJlbnQgIT0gbV9pdGVyYXRvckVuZCA/IG1faXRlcmF0b3JDdXJyZW50LT5zZWdtZW50LT5kYXRh
KCkgOiBudWxscHRyKQogICAgICwgbV9zZXBhcmF0b3Ioc2VwYXJhdG9yKQogewogfQogCiBTaGFy
ZWRCdWZmZXJDaHVua1JlYWRlcjo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIoU2hhcmVkQnVmZmVy
KiBidWZmZXIsIGNvbnN0IGNoYXIqIHNlcGFyYXRvcikKLSAgICA6IG1fYnVmZmVyKGJ1ZmZlcikK
KyAgICA6IG1faXRlcmF0b3JDdXJyZW50KGJ1ZmZlci0+YmVnaW4oKSkKKyAgICAsIG1faXRlcmF0
b3JFbmQoYnVmZmVyLT5lbmQoKSkKKyAgICAsIG1fYnVmZmVyU2l6ZShidWZmZXItPnNpemUoKSkK
KyAgICAsIG1fc2VnbWVudChtX2l0ZXJhdG9yQ3VycmVudCAhPSBtX2l0ZXJhdG9yRW5kID8gbV9p
dGVyYXRvckN1cnJlbnQtPnNlZ21lbnQtPmRhdGEoKSA6IG51bGxwdHIpCiB7CiAgICAgc2V0U2Vw
YXJhdG9yKHNlcGFyYXRvcik7CiB9CkBAIC02NSwxMiArNjcsMTIgQEAgdm9pZCBTaGFyZWRCdWZm
ZXJDaHVua1JlYWRlcjo6c2V0U2VwYXJhdG9yKGNvbnN0IGNoYXIqIHNlcGFyYXRvcikKIAogYm9v
bCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6bmV4dENodW5rKFZlY3Rvcjx1aW50OF90PiYgY2h1
bmssIGJvb2wgaW5jbHVkZVNlcGFyYXRvcikKIHsKLSAgICBpZiAobV9yZWFjaGVkRW5kT2ZGaWxl
KQorICAgIGlmIChtX3JlYWNoZWRFbmRPZkZpbGUgfHwgbV9pdGVyYXRvckN1cnJlbnQgPT0gbV9p
dGVyYXRvckVuZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgY2h1bmsuY2xlYXIoKTsK
ICAgICB3aGlsZSAodHJ1ZSkgewotICAgICAgICB3aGlsZSAobV9zZWdtZW50SW5kZXggPCBtX3Nl
Z21lbnRMZW5ndGgpIHsKKyAgICAgICAgd2hpbGUgKG1fc2VnbWVudEluZGV4IDwgbV9pdGVyYXRv
ckN1cnJlbnQtPnNlZ21lbnQtPnNpemUoKSkgewogICAgICAgICAgICAgYXV0byBjdXJyZW50Q2hh
cmFjdGVyID0gbV9zZWdtZW50W21fc2VnbWVudEluZGV4KytdOwogICAgICAgICAgICAgaWYgKGN1
cnJlbnRDaGFyYWN0ZXIgIT0gbV9zZXBhcmF0b3JbbV9zZXBhcmF0b3JJbmRleF0pIHsKICAgICAg
ICAgICAgICAgICBpZiAobV9zZXBhcmF0b3JJbmRleCA+IDApIHsKQEAgLTkyLDE4ICs5NCwxNSBA
QCBib29sIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpuZXh0Q2h1bmsoVmVjdG9yPHVpbnQ4X3Q+
JiBjaHVuaywgYm9vbCBpbmNsdWRlU2VwYQogCiAgICAgICAgIC8vIFJlYWQgdGhlIG5leHQgc2Vn
bWVudC4KICAgICAgICAgbV9zZWdtZW50SW5kZXggPSAwOwotICAgICAgICBtX2J1ZmZlclBvc2l0
aW9uICs9IG1fc2VnbWVudExlbmd0aDsKLSAgICAgICAgLy8gTGV0J3MgcHJldGVuZCBhbGwgdGhl
IGRhdGEgaXMgaW4gb25lIGJsb2NrLgotICAgICAgICAvLyBGSVhNRTogVGhpcyBjbGFzcyBzaG91
bGQgYmUgcmVtb3ZlZCBpbiBmYXZvciBvZiBqdXN0IGl0ZXJhdGluZyB0aGUgc2VnbWVudHMgb2Yg
dGhlIFNoYXJlZEJ1ZmZlci4KLSAgICAgICAgbV9zZWdtZW50ID0gbV9idWZmZXItPmRhdGEoKSAr
IG1fYnVmZmVyUG9zaXRpb247Ci0gICAgICAgIG1fc2VnbWVudExlbmd0aCA9IG1fYnVmZmVyLT5z
aXplKCkgLSBtX2J1ZmZlclBvc2l0aW9uOwotICAgICAgICBpZiAoIW1fc2VnbWVudExlbmd0aCkg
eworICAgICAgICBpZiAoKyttX2l0ZXJhdG9yQ3VycmVudCA9PSBtX2l0ZXJhdG9yRW5kKSB7CiAg
ICAgICAgICAgICBtX3JlYWNoZWRFbmRPZkZpbGUgPSB0cnVlOwogICAgICAgICAgICAgaWYgKG1f
c2VwYXJhdG9ySW5kZXggPiAwKQogICAgICAgICAgICAgICAgIGNodW5rLmFwcGVuZChyZWludGVy
cHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihtX3NlcGFyYXRvci5kYXRhKCkpLCBtX3NlcGFyYXRv
ckluZGV4KTsKICAgICAgICAgICAgIHJldHVybiAhY2h1bmsuaXNFbXB0eSgpOwogICAgICAgICB9
CisgICAgICAgIG1fc2VnbWVudCA9IG1faXRlcmF0b3JDdXJyZW50LT5zZWdtZW50LT5kYXRhKCk7
CiAgICAgfQorCiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIGZhbHNlOwog
fQpAQCAtMTIwLDMxICsxMTksMzAgQEAgU3RyaW5nIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpu
ZXh0Q2h1bmtBc1VURjhTdHJpbmdXaXRoTGF0aW4xRmFsbGJhY2soYm9vbCBpbmMKIHNpemVfdCBT
aGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6cGVlayhWZWN0b3I8dWludDhfdD4mIGRhdGEsIHNpemVf
dCByZXF1ZXN0ZWRTaXplKQogewogICAgIGRhdGEuY2xlYXIoKTsKLSAgICBpZiAocmVxdWVzdGVk
U2l6ZSA8PSBtX3NlZ21lbnRMZW5ndGggLSBtX3NlZ21lbnRJbmRleCkgewotICAgICAgICBkYXRh
LmFwcGVuZChtX3NlZ21lbnQgKyBtX3NlZ21lbnRJbmRleCwgcmVxdWVzdGVkU2l6ZSk7Ci0gICAg
ICAgIHJldHVybiByZXF1ZXN0ZWRTaXplOwotICAgIH0KKyAgICBpZiAobV9yZWFjaGVkRW5kT2ZG
aWxlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNpemVfdCBhdmFpbGFibGVJblNlZ21lbnQg
PSBzdGQ6Om1pbihtX2l0ZXJhdG9yQ3VycmVudC0+c2VnbWVudC0+c2l6ZSgpIC0gbV9zZWdtZW50
SW5kZXgsIHJlcXVlc3RlZFNpemUpOworICAgIGRhdGEuYXBwZW5kKG1fc2VnbWVudCArIG1fc2Vn
bWVudEluZGV4LCBhdmFpbGFibGVJblNlZ21lbnQpOwogCi0gICAgc2l6ZV90IHJlYWRCeXRlc0Nv
dW50ID0gbV9zZWdtZW50TGVuZ3RoIC0gbV9zZWdtZW50SW5kZXg7Ci0gICAgZGF0YS5hcHBlbmQo
bV9zZWdtZW50ICsgbV9zZWdtZW50SW5kZXgsIHJlYWRCeXRlc0NvdW50KTsKKyAgICBzaXplX3Qg
cmVhZEJ5dGVzQ291bnQgPSBhdmFpbGFibGVJblNlZ21lbnQ7CisgICAgcmVxdWVzdGVkU2l6ZSAt
PSByZWFkQnl0ZXNDb3VudDsKIAotICAgIHNpemVfdCBidWZmZXJQb3NpdGlvbiA9IG1fYnVmZmVy
UG9zaXRpb24gKyBtX3NlZ21lbnRMZW5ndGg7Ci0gICAgY29uc3QgdWludDhfdCogc2VnbWVudCA9
IG51bGxwdHI7CisgICAgYXV0byBjdXJyZW50U2VnbWVudCA9IG1faXRlcmF0b3JDdXJyZW50Owog
Ci0gICAgLy8gTGV0J3MgcHJldGVuZCBhbGwgdGhlIGRhdGEgaXMgaW4gb25lIGJsb2NrLgotICAg
IC8vIEZJWE1FOiBUaGlzIGNsYXNzIHNob3VsZCBiZSByZW1vdmVkIGluIGZhdm9yIG9mIGp1c3Qg
aXRlcmF0aW5nIHRoZSBzZWdtZW50cyBvZiB0aGUgU2hhcmVkQnVmZmVyLgotICAgIGlmIChidWZm
ZXJQb3NpdGlvbiAhPSBtX2J1ZmZlci0+c2l6ZSgpKSB7Ci0gICAgICAgIHNlZ21lbnQgPSBtX2J1
ZmZlci0+ZGF0YSgpICsgYnVmZmVyUG9zaXRpb247Ci0gICAgICAgIHNpemVfdCBzZWdtZW50TGVu
Z3RoID0gbV9idWZmZXItPnNpemUoKSAtIGJ1ZmZlclBvc2l0aW9uOworICAgIHdoaWxlIChyZXF1
ZXN0ZWRTaXplICYmICsrY3VycmVudFNlZ21lbnQgIT0gbV9pdGVyYXRvckVuZCkgeworICAgICAg
ICBjb25zdCB1aW50OF90KiBzZWdtZW50ID0gY3VycmVudFNlZ21lbnQtPnNlZ21lbnQtPmRhdGEo
KTsKKyAgICAgICAgc2l6ZV90IHNlZ21lbnRMZW5ndGggPSBjdXJyZW50U2VnbWVudC0+c2VnbWVu
dC0+c2l6ZSgpOwogICAgICAgICBpZiAoc2VnbWVudExlbmd0aCA+IHJlcXVlc3RlZFNpemUpCiAg
ICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0gcmVxdWVzdGVkU2l6ZTsKICAgICAgICAgZGF0YS5h
cHBlbmQoc2VnbWVudCwgc2VnbWVudExlbmd0aCk7CiAgICAgICAgIHJlYWRCeXRlc0NvdW50ICs9
IHNlZ21lbnRMZW5ndGg7Ci0gICAgICAgIGJ1ZmZlclBvc2l0aW9uICs9IHNlZ21lbnRMZW5ndGg7
CisgICAgICAgIHJlcXVlc3RlZFNpemUgLT0gc2VnbWVudExlbmd0aDsKICAgICB9CiAgICAgcmV0
dXJuIHJlYWRCeXRlc0NvdW50OwogfQogCisjZW5kaWYKKwogfQogCi0jZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oCmluZGV4IGM5
ZjViMDZmYjQ2NTZkYzJlYWNkNDA0NDFmZjM0MWUyNWZkNGM3ODEuLmM0MjA5MWJlYWQ0Yjk0MDQz
MzM3NGU0YmYxMzg1YWZhMzY2MzZjZDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzIsMTQgKzMzLDEzIEBACiAKICNpZiBFTkFC
TEUoTUhUTUwpCiAKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotY2xhc3MgU2hhcmVkQnVmZmVyOwotCi1jbGFzcyBTaGFyZWRCdWZmZXJDaHVua1Jl
YWRlciB7CitjbGFzcyBXRUJDT1JFX0VYUE9SVCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlciB7CiBw
dWJsaWM6CiAgICAgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIoU2hhcmVkQnVmZmVyKiwgY29uc3Qg
VmVjdG9yPGNoYXI+JiBzZXBhcmF0b3IpOwogICAgIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKFNo
YXJlZEJ1ZmZlciosIGNvbnN0IGNoYXIqIHNlcGFyYXRvcik7CkBAIC01OCwxMiArNTgsMTIgQEAg
cHVibGljOgogICAgIHNpemVfdCBwZWVrKFZlY3Rvcjx1aW50OF90PiYsIHNpemVfdCk7CiAKIHBy
aXZhdGU6Ci0gICAgU2hhcmVkQnVmZmVyKiBtX2J1ZmZlcjsKLSAgICBzaXplX3QgbV9idWZmZXJQ
b3NpdGlvbiB7IDAgfTsKKyAgICBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50VmVjdG9yOjpjb25z
dF9pdGVyYXRvciBtX2l0ZXJhdG9yQ3VycmVudDsKKyAgICBjb25zdCBTaGFyZWRCdWZmZXI6OkRh
dGFTZWdtZW50VmVjdG9yOjpjb25zdF9pdGVyYXRvciBtX2l0ZXJhdG9yRW5kOworICAgIGNvbnN0
IHNpemVfdCBtX2J1ZmZlclNpemUgeyAwIH07CiAgICAgY29uc3QgdWludDhfdCogbV9zZWdtZW50
IHsgbnVsbHB0ciB9OwotICAgIHNpemVfdCBtX3NlZ21lbnRMZW5ndGggeyAwIH07CiAgICAgc2l6
ZV90IG1fc2VnbWVudEluZGV4IHsgMCB9OwotICAgIGJvb2wgbV9yZWFjaGVkRW5kT2ZGaWxlOwor
ICAgIGJvb2wgbV9yZWFjaGVkRW5kT2ZGaWxlIHsgZmFsc2UgfTsKICAgICBWZWN0b3I8Y2hhcj4g
bV9zZXBhcmF0b3IgeyBmYWxzZSB9OwogICAgIHNpemVfdCBtX3NlcGFyYXRvckluZGV4IHsgMCB9
OwogfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRl
eCAxYmQ1ZDUzODIwNTVjOTI3MTk1Nzk2N2U1ZmJmYmUyNjJhZThmNmM0Li45ODc5NGVlMWYzYjY0
YWNlZjU5MmI2MmY2NmU0ODJhMmRmZTkxNmNiIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cK
KysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjIgQEAKKzIwMjEtMTEtMjUgIEplYW4t
WXZlcyBBdmVuYXJkICA8anlhQGFwcGxlLmNvbT4KKworICAgICAgICBSZXdyaXRlIFNoYXJlZEJ1
ZmZlckNodW5rUmVhZGVyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzM0ODEKKyAgICAgICAgcmRhcjovL3Byb2JsZW0vODU3MzMzNTgKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgQVBJIHRlc3RzLgor
ICAgICAgICBBUEkgdGVzdHMgb3JpZ2luYWwgZGF0YSBjb21lIGZyb20gdGhlIG9yaWdpbmFsIGJ1
ZyB0aGF0IGFkZGVkCisgICAgICAgIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyIChidWcgNTk5NDYp
IGFuZCB0aGVuIGV4cGFuZGVkLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJD
b3JlL1NoYXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUX0YpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6cmVhZEFsbENodW5rcyk6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpjaGVja0NodW5rcyk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpjaGVja0RhdGFJ
blJhbmdlKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVm
ZmVyVGVzdC5oOgorCiAyMDIxLTExLTIyICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBw
bGUuY29tPgogCiAgICAgICAgIFJlbW92ZSBvbGQgY29uY3VycmVudCBkaXNwbGF5IGxpc3QgbG9n
aWMgdGhhdCdzIG5vIGxvbmdlciBuZWNlc3NhcnkKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXIuY3BwIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggMzY5Mjk3MmRlYWE3Njk0YTFi
NmMxZmZmZTQxOGU1ZmE0NzE1MjY0Yy4uZTljMWYyNTlkZGNjMmRhODVhZmU5NDE0ZWExN2NjZDQ2
MjBmNzI3MSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1No
YXJlZEJ1ZmZlci5jcHAKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1No
YXJlZEJ1ZmZlci5jcHAKQEAgLTMxLDYgKzMxLDkgQEAKICNpbmNsdWRlICJUZXN0LmgiCiAjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KICNpbmNsdWRlIDxXZWJDb3JlL1No
YXJlZEJ1ZmZlci5oPgorI2lmIEVOQUJMRShNSFRNTCkKKyNpbmNsdWRlIDxXZWJDb3JlL1NoYXJl
ZEJ1ZmZlckNodW5rUmVhZGVyLmg+CisjZW5kaWYKICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIApAQCAtMjI5LDQgKzIzMiwzMDkgQEAg
VEVTVF9GKFNoYXJlZEJ1ZmZlclRlc3QsIHRvSGV4U3RyaW5nKQogICAgIEVYUEVDVF9FUShidWZm
ZXItPnRvSGV4U3RyaW5nKCksICIiKTsKIH0KIAorVEVTVF9GKFNoYXJlZEJ1ZmZlclRlc3QsIHJl
YWQpCit7CisgICAgY29uc3QgY2hhciogY29uc3Qgc2ltcGxlVGV4dCA9ICJUaGlzIGlzIGEgc3R1
cGlkIHRlc3QuIjsKKworICAgIGF1dG8gY2hlY2sgPSBbXShTaGFyZWRCdWZmZXImIHNoYXJlZEJ1
ZmZlcikgeworICAgICAgICBWZWN0b3I8dWludDhfdD4gZGF0YSA9IHNoYXJlZEJ1ZmZlci5yZWFk
KDQsIDMpOworICAgICAgICBFWFBFQ1RfRVEoZGF0YS5zaXplKCksIDN1KTsKKyAgICAgICAgRVhQ
RUNUX0VRKFN0cmluZyhkYXRhLmRhdGEoKSwgMyksICIgaXMiKTsKKworICAgICAgICBkYXRhID0g
c2hhcmVkQnVmZmVyLnJlYWQoNCwgMTAwMCk7CisgICAgICAgIEVYUEVDVF9FUShkYXRhLnNpemUo
KSwgMTh1KTsKKworICAgICAgICBFWFBFQ1RfRVEoU3RyaW5nKGRhdGEuZGF0YSgpLCAxOCksICIg
aXMgYSBzdHVwaWQgdGVzdC4iKTsKKyAgICB9OworICAgIGF1dG8gc2hhcmVkQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpKTsKKyAgICBj
aGVjayhzaGFyZWRCdWZmZXIpOworCisgICAgc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmxlbihzaW1wbGVUZXh0KTsg
aSsrKQorICAgICAgICBzaGFyZWRCdWZmZXItPmFwcGVuZCgmc2ltcGxlVGV4dFtpXSwgMSk7Cisg
ICAgY2hlY2soc2hhcmVkQnVmZmVyKTsKKworICAgIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJsZW4oc2ltcGxlVGV4
dCk7IGkgKz0gMikKKyAgICAgICAgc2hhcmVkQnVmZmVyLT5hcHBlbmQoJnNpbXBsZVRleHRbaV0s
IDIpOworICAgIEVYUEVDVF9FUShzaGFyZWRCdWZmZXItPnNpemUoKSwgc3RybGVuKHNpbXBsZVRl
eHQpKTsKKyAgICBjaGVjayhzaGFyZWRCdWZmZXIpOworfQorCisjaWYgRU5BQkxFKE1IVE1MKQor
Ly8gU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIgdW5pdC10ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCit0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc2l6ZV90IE4gPgorY29u
c3RleHByIHNpemVfdCBhcnJheXNpemUoIGNvbnN0IFQgKCYpW05dICkgeyByZXR1cm4gTjsgfQor
CitzdGF0aWMgdm9pZCByZWFkQWxsQ2h1bmtzKHN0ZDo6dmVjdG9yPFN0cmluZz4qIGNodW5rcywg
U2hhcmVkQnVmZmVyJiBidWZmZXIsIGNvbnN0IFN0cmluZyYgc2VwYXJhdG9yID0gIlxyXG4iLCBi
b29sIGluY2x1ZGVTZXBhcmF0b3IgPSBmYWxzZSkKK3sKKyAgICBTaGFyZWRCdWZmZXJDaHVua1Jl
YWRlciBjaHVua1JlYWRlcigmYnVmZmVyLCBzZXBhcmF0b3IudXRmOCgpLmRhdGEoKSk7CisgICAg
U3RyaW5nIGNodW5rID0gY2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nV2l0aExhdGlu
MUZhbGxiYWNrKGluY2x1ZGVTZXBhcmF0b3IpOworICAgIHdoaWxlICghY2h1bmsuaXNOdWxsKCkp
IHsKKyAgICAgICAgY2h1bmtzLT5wdXNoX2JhY2soY2h1bmspOworICAgICAgICBjaHVuayA9IGNo
dW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZ1dpdGhMYXRpbjFGYWxsYmFjayhpbmNsdWRl
U2VwYXJhdG9yKTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGNoZWNrQ2h1bmtzKGNvbnN0IHN0
ZDo6dmVjdG9yPFN0cmluZz4mIGNodW5rcywgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVu
a3NbXSwgc2l6ZV90IGV4cGVjdGVkU2l6ZSkKK3sKKyAgICBpZiAoY2h1bmtzLnNpemUoKSAhPSBl
eHBlY3RlZFNpemUpIHsKKyAgICAgICAgRVhQRUNUX0VRKGNodW5rcy5zaXplKCksIGV4cGVjdGVk
U2l6ZSk7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGNodW5rcy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAoY2h1bmtzW2ldICE9
IGV4cGVjdGVkQ2h1bmtzW2ldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tEYXRhSW5SYW5nZShjb25zdCBW
ZWN0b3I8dWludDhfdD4mIGRhdGEsIHNpemVfdCBzdGFydCwgc2l6ZV90IGxlbmd0aCkKK3sKKyAg
ICBBU1NFUlRfRVEoZGF0YS5zaXplKCksIGxlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBsZW5ndGg7ICsraSkKKyAgICAgICAgQVNTRVJUX0VRKGRhdGFbaV0sIHN0YXRpY19jYXN0
PHVpbnQ4X3Q+KHN0YXJ0ICsgaSkpOworfQorCitURVNUX0YoU2hhcmVkQnVmZmVyQ2h1bmtSZWFk
ZXJUZXN0LCBpbmNsdWRlU2VwYXJhdG9yKQoreworICAgIGF1dG8gY2hlY2sgPSBbXShTaGFyZWRC
dWZmZXImIHNoYXJlZEJ1ZmZlcikgeworICAgICAgICBTaGFyZWRCdWZmZXJDaHVua1JlYWRlciBj
aHVua1JlYWRlcigmc2hhcmVkQnVmZmVyLCAiXHgxMFx4MTFceDEyIik7CisgICAgICAgIFZlY3Rv
cjx1aW50OF90PiBvdXQ7CisgICAgICAgIEVYUEVDVF9UUlVFKGNodW5rUmVhZGVyLm5leHRDaHVu
ayhvdXQpKTsKKyAgICAgICAgY2hlY2tEYXRhSW5SYW5nZShvdXQsIDAsIDE2KTsKKworICAgICAg
ICBFWFBFQ1RfVFJVRShjaHVua1JlYWRlci5uZXh0Q2h1bmsob3V0KSk7CisgICAgICAgIGNoZWNr
RGF0YUluUmFuZ2Uob3V0LCAxOSwgMjM3KTsKKworICAgICAgICBFWFBFQ1RfRkFMU0UoY2h1bmtS
ZWFkZXIubmV4dENodW5rKG91dCkpOworICAgIH07CisgICAgdWludDhfdCBkYXRhWzI1Nl07Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyNTY7ICsraSkKKyAgICAgICAgZGF0YVtpXSA9IGk7
CisKKyAgICBhdXRvIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGRhdGEsIDI1
Nik7CisgICAgY2hlY2soc2hhcmVkQnVmZmVyKTsKKyAgICBzaGFyZWRCdWZmZXIgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgMjU2OyArK2kpIHsK
KyAgICAgICAgY2hhciBjID0gaTsKKyAgICAgICAgc2hhcmVkQnVmZmVyLT5hcHBlbmQoJmMsIDEp
OworICAgIH0KKyAgICBjaGVjayhzaGFyZWRCdWZmZXIpOworfQorCitURVNUX0YoU2hhcmVkQnVm
ZmVyQ2h1bmtSZWFkZXJUZXN0LCBwZWVrRGF0YSkKK3sKKyAgICBjb25zdCBjaGFyKiBjb25zdCBz
aW1wbGVUZXh0ID0gIlRoaXMgaXMgYSBzdHVwaWQgdGVzdC4iOworCisgICAgYXV0byBjaGVjayA9
IFtdKFNoYXJlZEJ1ZmZlciYgc2hhcmVkQnVmZmVyKSB7CisgICAgICAgIFNoYXJlZEJ1ZmZlckNo
dW5rUmVhZGVyIGNodW5rUmVhZGVyKCZzaGFyZWRCdWZmZXIsICJpcyIpOworCisgICAgICAgIFN0
cmluZyBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZ1dpdGhMYXRpbjFG
YWxsYmFjaygpOworICAgICAgICBFWFBFQ1RfRVEoY2h1bmssICJUaCIpOworCisgICAgICAgIFZl
Y3Rvcjx1aW50OF90PiBkYXRhOworICAgICAgICBzaXplX3QgcmVhZCA9IGNodW5rUmVhZGVyLnBl
ZWsoZGF0YSwgMyk7CisgICAgICAgIEVYUEVDVF9FUShyZWFkLCAzdSk7CisKKyAgICAgICAgRVhQ
RUNUX0VRKFN0cmluZyhkYXRhLmRhdGEoKSwgMyksICIgaXMiKTsKKworICAgICAgICByZWFkID0g
Y2h1bmtSZWFkZXIucGVlayhkYXRhLCAxMDAwKTsKKyAgICAgICAgRVhQRUNUX0VRKHJlYWQsIDE4
dSk7CisKKyAgICAgICAgRVhQRUNUX0VRKFN0cmluZyhkYXRhLmRhdGEoKSwgMTgpLCAiIGlzIGEg
c3R1cGlkIHRlc3QuIik7CisKKyAgICAgICAgLy8gRW5zdXJlIHRoZSBjdXJzb3IgaGFzIG5vdCBj
aGFuZ2VkLgorICAgICAgICBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmlu
Z1dpdGhMYXRpbjFGYWxsYmFjaygpOworICAgICAgICBFWFBFQ1RfRVEoY2h1bmssICIgIik7CisK
KyAgICAgICAgY2h1bmsgPSBjaHVua1JlYWRlci5uZXh0Q2h1bmtBc1VURjhTdHJpbmdXaXRoTGF0
aW4xRmFsbGJhY2soKTsKKyAgICAgICAgRVhQRUNUX0VRKGNodW5rLCAiIGEgc3R1cGlkIHRlc3Qu
Iik7CisKKyAgICAgICAgY2h1bmsgPSBjaHVua1JlYWRlci5uZXh0Q2h1bmtBc1VURjhTdHJpbmdX
aXRoTGF0aW4xRmFsbGJhY2soKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2h1bmsuaXNOdWxsKCkp
OworICAgIH07CisgICAgYXV0byBzaGFyZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShz
aW1wbGVUZXh0LCBzdHJsZW4oc2ltcGxlVGV4dCkpOworICAgIGNoZWNrKHNoYXJlZEJ1ZmZlcik7
CisKKyAgICBzaGFyZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3RybGVuKHNpbXBsZVRleHQpOyBpKyspCisgICAgICAgIHNoYXJl
ZEJ1ZmZlci0+YXBwZW5kKCZzaW1wbGVUZXh0W2ldLCAxKTsKKyAgICBjaGVjayhzaGFyZWRCdWZm
ZXIpOworCisgICAgc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoKTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmxlbihzaW1wbGVUZXh0KTsgaSArPSAyKQorICAgICAg
ICBzaGFyZWRCdWZmZXItPmFwcGVuZCgmc2ltcGxlVGV4dFtpXSwgMik7CisgICAgRVhQRUNUX0VR
KHNoYXJlZEJ1ZmZlci0+c2l6ZSgpLCBzdHJsZW4oc2ltcGxlVGV4dCkpOworICAgIGNoZWNrKHNo
YXJlZEJ1ZmZlcik7Cit9CisKK1RFU1RfRihTaGFyZWRCdWZmZXJDaHVua1JlYWRlclRlc3QsIHJl
YWRBbGxDaHVua3NJbk11bHRpU2VnbWVudCkKK3sKKyAgICBjb25zdCBjaGFyKiBjb25zdCBzaW1w
bGVUZXh0ID0gIlRoaXMgaXMgdGhlIG1vc3QgcmlkaWN1bG91cyBoaXN0b3J5IHRoZXJlIGlzLiI7
CisgICAgYXV0byBjaGVjayA9IFtdKFNoYXJlZEJ1ZmZlciYgc2hhcmVkQnVmZmVyKSB7CisgICAg
ICAgIHN0ZDo6dmVjdG9yPFN0cmluZz4gY2h1bmtzOworICAgICAgICBjb25zdCBjaGFyKiBjb25z
dCBleHBlY3RlZENodW5rczFXaXRob3V0U2VwYXJhdG9yW10gPSB7ICJUaCIsICJzICIsICJzIHRo
ZSBtb3N0IHIiLCAiZCIsICJjdWxvdXMgaCIsICJzdG9yeSB0aGVyZSAiLCAicy4iIH07CisgICAg
ICAgIHJlYWRBbGxDaHVua3MoJmNodW5rcywgc2hhcmVkQnVmZmVyLCAiaSIpOworICAgICAgICBF
WFBFQ1RfVFJVRShjaGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1bmtzMVdpdGhvdXRTZXBh
cmF0b3IsIGFycmF5c2l6ZShleHBlY3RlZENodW5rczFXaXRob3V0U2VwYXJhdG9yKSkpOworCisg
ICAgICAgIGNodW5rcy5jbGVhcigpOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBleHBlY3Rl
ZENodW5rczFXaXRoU2VwYXJhdG9yW10gPSB7ICJUaGkiLCAicyBpIiwgInMgdGhlIG1vc3Qgcmki
LCAiZGkiLCAiY3Vsb3VzIGhpIiwgInN0b3J5IHRoZXJlIGkiLCAicy4iIH07CisgICAgICAgIHJl
YWRBbGxDaHVua3MoJmNodW5rcywgc2hhcmVkQnVmZmVyLCAiaSIsIHRydWUpOworICAgICAgICBF
WFBFQ1RfVFJVRShjaGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1bmtzMVdpdGhTZXBhcmF0
b3IsIGFycmF5c2l6ZShleHBlY3RlZENodW5rczFXaXRoU2VwYXJhdG9yKSkpOworCisgICAgICAg
IGNodW5rcy5jbGVhcigpOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBleHBlY3RlZENodW5r
czJXaXRob3V0U2VwYXJhdG9yW10gPSB7ICJUaCIsICIgIiwgIiB0aGUgbW9zdCByaWRpY3Vsb3Vz
IGgiLCAidG9yeSB0aGVyZSAiLCAiLiIgfTsKKyAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtz
LCBzaGFyZWRCdWZmZXIsICJpcyIpOworICAgICAgICBFWFBFQ1RfVFJVRShjaGVja0NodW5rcyhj
aHVua3MsIGV4cGVjdGVkQ2h1bmtzMldpdGhvdXRTZXBhcmF0b3IsIGFycmF5c2l6ZShleHBlY3Rl
ZENodW5rczJXaXRob3V0U2VwYXJhdG9yKSkpOworCisgICAgICAgIGNodW5rcy5jbGVhcigpOwor
ICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBleHBlY3RlZENodW5rczJXaXRoU2VwYXJhdG9yW10g
PSB7ICJUaGlzIiwgIiBpcyIsICIgdGhlIG1vc3QgcmlkaWN1bG91cyBoaXMiLCAidG9yeSB0aGVy
ZSBpcyIsICIuIiB9OworICAgICAgICByZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNoYXJlZEJ1ZmZl
ciwgImlzIiwgdHJ1ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoZWNrQ2h1bmtzKGNodW5rcywg
ZXhwZWN0ZWRDaHVua3MyV2l0aFNlcGFyYXRvciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzMldp
dGhTZXBhcmF0b3IpKSk7CisKKyAgICAgICAgY2h1bmtzLmNsZWFyKCk7CisgICAgICAgIGNvbnN0
IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtzM1dpdGhvdXRTZXBhcmF0b3JbXSA9IHsgIlRoaXMg
aXMgdGhlIG1vc3QgcmlkaWN1bG91cyBoIiwgIm9yeSB0aGVyZSBpcy4iIH07CisgICAgICAgIHJl
YWRBbGxDaHVua3MoJmNodW5rcywgc2hhcmVkQnVmZmVyLCAiaXN0Iik7CisgICAgICAgIEVYUEVD
VF9UUlVFKGNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MzV2l0aG91dFNlcGFyYXRv
ciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzM1dpdGhvdXRTZXBhcmF0b3IpKSk7CisKKyAgICAg
ICAgY2h1bmtzLmNsZWFyKCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1
bmtzM1dpdGhTZXBhcmF0b3JbXSA9IHsgIlRoaXMgaXMgdGhlIG1vc3QgcmlkaWN1bG91cyBoaXN0
IiwgIm9yeSB0aGVyZSBpcy4iIH07CisgICAgICAgIHJlYWRBbGxDaHVua3MoJmNodW5rcywgc2hh
cmVkQnVmZmVyLCAiaXN0IiwgdHJ1ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoZWNrQ2h1bmtz
KGNodW5rcywgZXhwZWN0ZWRDaHVua3MzV2l0aFNlcGFyYXRvciwgYXJyYXlzaXplKGV4cGVjdGVk
Q2h1bmtzM1dpdGhTZXBhcmF0b3IpKSk7CisgICAgfTsKKyAgICBhdXRvIHNoYXJlZEJ1ZmZlciA9
IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHNpbXBsZVRleHQsIHN0cmxlbihzaW1wbGVUZXh0KSk7Cisg
ICAgY2hlY2soc2hhcmVkQnVmZmVyKTsKKyAgICBzaGFyZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RybGVuKHNpbXBsZVRleHQp
OyBpKyspCisgICAgICAgIHNoYXJlZEJ1ZmZlci0+YXBwZW5kKCZzaW1wbGVUZXh0W2ldLCAxKTsK
KyAgICBFWFBFQ1RfRVEoc2hhcmVkQnVmZmVyLT5zaXplKCksIHN0cmxlbihzaW1wbGVUZXh0KSk7
CisgICAgY2hlY2soc2hhcmVkQnVmZmVyKTsKKworICAgIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJsZW4oc2ltcGxl
VGV4dCk7IGkgKz0gNSkKKyAgICAgICAgc2hhcmVkQnVmZmVyLT5hcHBlbmQoJnNpbXBsZVRleHRb
aV0sIDUpOworICAgIEVYUEVDVF9FUShzaGFyZWRCdWZmZXItPnNpemUoKSwgc3RybGVuKHNpbXBs
ZVRleHQpKTsKKyAgICBjaGVjayhzaGFyZWRCdWZmZXIpOworfQorCitURVNUX0YoU2hhcmVkQnVm
ZmVyQ2h1bmtSZWFkZXJUZXN0LCBjaGFuZ2luZ0l0ZXJhdG9yKQoreworICAgIHsKKyAgICAgICAg
Y29uc3QgY2hhciogY29uc3Qgc2ltcGxlVGV4dCA9ICJUaGlzIGlzIHRoZSBtb3N0IHJpZGljdWxv
dXMgaGlzdG9yeSB0aGVyZSBpcy4iOworICAgICAgICBhdXRvIHNoYXJlZEJ1ZmZlciA9IFNoYXJl
ZEJ1ZmZlcjo6Y3JlYXRlKHNpbXBsZVRleHQsIHN0cmxlbihzaW1wbGVUZXh0KSk7CisgICAgICAg
IFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyIGNodW5rUmVhZGVyKHNoYXJlZEJ1ZmZlci5wdHIoKSwg
ImlzIik7CisgICAgICAgIFN0cmluZyBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRG
OFN0cmluZ1dpdGhMYXRpbjFGYWxsYmFjaygpOworICAgICAgICBFWFBFQ1RfRVEoY2h1bmssICJU
aCIpOworCisgICAgICAgIGNodW5rID0gY2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5n
V2l0aExhdGluMUZhbGxiYWNrKCk7CisgICAgICAgIEVYUEVDVF9FUShjaHVuaywgIiAiKTsKKwor
ICAgICAgICBjaHVua1JlYWRlci5zZXRTZXBhcmF0b3IoImhlIik7CisgICAgICAgIGNodW5rID0g
Y2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nV2l0aExhdGluMUZhbGxiYWNrKCk7Cisg
ICAgICAgIEVYUEVDVF9FUShjaHVuaywgIiB0Iik7CisKKyAgICAgICAgY2h1bmsgPSBjaHVua1Jl
YWRlci5uZXh0Q2h1bmtBc1VURjhTdHJpbmdXaXRoTGF0aW4xRmFsbGJhY2soKTsKKyAgICAgICAg
RVhQRUNUX0VRKGNodW5rLCAiIG1vc3QgcmlkaWN1bG91cyBoaXN0b3J5IHQiKTsKKworICAgICAg
ICAvLyBTZXQgYSBub24gZXhpc3Rpbmcgc2VwYXJhdG9yLgorICAgICAgICBjaHVua1JlYWRlci5z
ZXRTZXBhcmF0b3IoInRjaGludGEiKTsKKyAgICAgICAgY2h1bmsgPSBjaHVua1JlYWRlci5uZXh0
Q2h1bmtBc1VURjhTdHJpbmdXaXRoTGF0aW4xRmFsbGJhY2soKTsKKyAgICAgICAgRVhQRUNUX0VR
KGNodW5rLCAicmUgaXMuIik7CisKKyAgICAgICAgLy8gV2Ugc2hvdWxkIGJlIGF0IHRoZSBlbmQg
b2YgdGhlIHN0cmluZywgc28gYW55IHN1YnNlcXVlbnQgY2FsbCB0byBuZXh0Q2h1bmsgc2hvdWxk
IHJldHVybiBudWxsLgorICAgICAgICBjaHVua1JlYWRlci5zZXRTZXBhcmF0b3IoIi4iKTsKKyAg
ICAgICAgY2h1bmsgPSBjaHVua1JlYWRlci5uZXh0Q2h1bmtBc1VURjhTdHJpbmdXaXRoTGF0aW4x
RmFsbGJhY2sodHJ1ZSk7CisgICAgICAgIEVYUEVDVF9UUlVFKGNodW5rLmlzTnVsbCgpKTsKKyAg
ICB9CisKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQgPSAiZG9n
IjsKKyAgICAgICAgYXV0byBzaGFyZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzaW1w
bGVUZXh0LCBzdHJsZW4oc2ltcGxlVGV4dCkpOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBl
eHBlY3RlZENodW5rc1dpdGhvdXRTZXBhcmF0b3JbXSA9IHsgIiIgfTsKKyAgICAgICAgc3RkOjp2
ZWN0b3I8U3RyaW5nPiBjaHVua3M7CisgICAgICAgIHJlYWRBbGxDaHVua3MoJmNodW5rcywgc2hh
cmVkQnVmZmVyLCAiZG9nIik7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoZWNrQ2h1bmtzKGNodW5r
cywgZXhwZWN0ZWRDaHVua3NXaXRob3V0U2VwYXJhdG9yLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVu
a3NXaXRob3V0U2VwYXJhdG9yKSkpOworCisgICAgICAgIGNodW5rcy5jbGVhcigpOworICAgICAg
ICBjb25zdCBjaGFyKiBjb25zdCBleHBlY3RlZENodW5rc1dpdGhTZXBhcmF0b3JbXSA9IHsgImRv
ZyIgfTsKKyAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIsICJkb2ci
LCB0cnVlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hlY2tDaHVua3MoY2h1bmtzLCBleHBlY3Rl
ZENodW5rc1dpdGhTZXBhcmF0b3IsIGFycmF5c2l6ZShleHBlY3RlZENodW5rc1dpdGhTZXBhcmF0
b3IpKSk7CisgICAgfQorCisgICAgLy8gRW5kcyB3aXRoIHJlcGVhdGVkIHNlcGFyYXRvcnMuCisg
ICAgeworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzaW1wbGVUZXh0ID0gIkJlYXVjb3VwIGRl
IGNoYXRzIGNhdGNhdGNhdGNhdGNhdCI7CisgICAgICAgIGF1dG8gc2hhcmVkQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpKTsKKyAgICAg
ICAgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NXaXRob3V0U2VwYXJhdG9yW10gPSB7
ICJCZWF1Y291cCBkZSBjaGF0cyAiLCAiIiwgIiIsICIiLCAiIiB9OworICAgICAgICBzdGQ6OnZl
Y3RvcjxTdHJpbmc+IGNodW5rczsKKyAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFy
ZWRCdWZmZXIsICJjYXQiKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hlY2tDaHVua3MoY2h1bmtz
LCBleHBlY3RlZENodW5rc1dpdGhvdXRTZXBhcmF0b3IsIGFycmF5c2l6ZShleHBlY3RlZENodW5r
c1dpdGhvdXRTZXBhcmF0b3IpKSk7CisKKyAgICAgICAgY2h1bmtzLmNsZWFyKCk7CisgICAgICAg
IGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtzV2l0aFNlcGFyYXRvcltdID0geyAiQmVh
dWNvdXAgZGUgY2hhdHMgY2F0IiwgImNhdCIsICJjYXQiLCAiY2F0IiwgImNhdCIgfTsKKyAgICAg
ICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIsICJjYXQiLCB0cnVlKTsKKyAg
ICAgICAgRVhQRUNUX1RSVUUoY2hlY2tDaHVua3MoY2h1bmtzLCBleHBlY3RlZENodW5rc1dpdGhT
ZXBhcmF0b3IsIGFycmF5c2l6ZShleHBlY3RlZENodW5rc1dpdGhTZXBhcmF0b3IpKSk7CisgICAg
fQorICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc2ltcGxlVGV4dCA9ICJUaGlzIGlz
IGEgc2ltcGxlIHRlc3QuXHJcbk5vdGhpbmcgc3BlY2lhbC5cclxuIjsKKyAgICAgICAgY29uc3Qg
Y2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NbXSA9IHsgIlRoaXMgaXMgYSBzaW1wbGUgdGVzdC4i
LCAiTm90aGluZyBzcGVjaWFsLiIgfTsKKyAgICAgICAgYXV0byBzaGFyZWRCdWZmZXIgPSBTaGFy
ZWRCdWZmZXI6OmNyZWF0ZShzaW1wbGVUZXh0LCBzdHJsZW4oc2ltcGxlVGV4dCkpOworICAgICAg
ICBzdGQ6OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKKyAgICAgICAgcmVhZEFsbENodW5rcygmY2h1
bmtzLCBzaGFyZWRCdWZmZXIpOworICAgICAgICBFWFBFQ1RfVFJVRShjaGVja0NodW5rcyhjaHVu
a3MsIGV4cGVjdGVkQ2h1bmtzLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVua3MpKSk7CisgICAgfQor
CisgICAgeworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzaW1wbGVUZXh0ID0gIlRoaXMgaXMg
YSBzaW1wbGUgdGVzdC5cclxuTm90aGluZyBzcGVjaWFsLiI7CisgICAgICAgIGNvbnN0IGNoYXIq
IGNvbnN0IGV4cGVjdGVkQ2h1bmtzW10gPSB7ICJUaGlzIGlzIGEgc2ltcGxlIHRlc3QuIiwgIk5v
dGhpbmcgc3BlY2lhbC4iIH07CisgICAgICAgIGF1dG8gc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpKTsKKworICAgICAgICBz
dGQ6OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKKyAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtz
LCBzaGFyZWRCdWZmZXIpOworICAgICAgICBFWFBFQ1RfVFJVRShjaGVja0NodW5rcyhjaHVua3Ms
IGV4cGVjdGVkQ2h1bmtzLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVua3MpKSk7CisgICAgfQorCisg
ICAgeworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzaW1wbGVUZXh0ID0gIlNpbXBsZSBsaW5l
IHdpdGggbm8gRU9MLiI7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtz
W10gPSB7ICJTaW1wbGUgbGluZSB3aXRoIG5vIEVPTC4iIH07CisgICAgICAgIGF1dG8gc2hhcmVk
QnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRl
eHQpKTsKKworICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKKyAgICAgICAgcmVh
ZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIpOworICAgICAgICBFWFBFQ1RfVFJVRShj
aGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1bmtzLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVu
a3MpKSk7CisgICAgfQorCisgICAgeworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzaW1wbGVU
ZXh0ID0gIkxpbmUgdGhhdCBoYXMgYSBFT0xcclxuYW5kIHRoZW4gZW5kcyB3aXRoIGEgQ1JcciI7
CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtzW10gPSB7ICJMaW5lIHRo
YXQgaGFzIGEgRU9MIiwgImFuZCB0aGVuIGVuZHMgd2l0aCBhIENSXHIiIH07CisgICAgICAgIGF1
dG8gc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVu
KHNpbXBsZVRleHQpKTsKKworICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKKyAg
ICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIpOworICAgICAgICBFWFBF
Q1RfVFJVRShjaGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1bmtzLCBhcnJheXNpemUoZXhw
ZWN0ZWRDaHVua3MpKSk7CisgICAgfQorCisgICAgeworICAgICAgICBjb25zdCBjaGFyKiBjb25z
dCBzaW1wbGVUZXh0ID0gIlJlcGVhdGVkIENScyBzaG91bGQgbm90IGNhdXNlIHByb2JlbXNcclxy
XHJcblNob3Vsbid0IHRoZXk/IjsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRD
aHVua3NbXSA9IHsgIlJlcGVhdGVkIENScyBzaG91bGQgbm90IGNhdXNlIHByb2JlbXNcclxyIiwg
IlNob3Vsbid0IHRoZXk/IiB9OworICAgICAgICBhdXRvIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKHNpbXBsZVRleHQsIHN0cmxlbihzaW1wbGVUZXh0KSk7CisKKyAgICAgICAg
c3RkOjp2ZWN0b3I8U3RyaW5nPiBjaHVua3M7CisgICAgICAgIHJlYWRBbGxDaHVua3MoJmNodW5r
cywgc2hhcmVkQnVmZmVyKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hlY2tDaHVua3MoY2h1bmtz
LCBleHBlY3RlZENodW5rcywgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzKSkpOworICAgIH0KKyAg
ICB7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQgPSAiRU9MXHJcbiBiZXR3
ZVxyXG5lbiBzZWdtZW50cyI7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1
bmtzW10gPSB7ICJFT0wiLCAiIGJldHdlIiwgImVuIHNlZ21lbnRzIiB9OworICAgICAgICBhdXRv
IHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHNpbXBsZVRleHQsIHN0cmxlbihz
aW1wbGVUZXh0KSk7CisKKyAgICAgICAgc3RkOjp2ZWN0b3I8U3RyaW5nPiBjaHVua3M7CisgICAg
ICAgIHJlYWRBbGxDaHVua3MoJmNodW5rcywgc2hhcmVkQnVmZmVyKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoY2hlY2tDaHVua3MoY2h1bmtzLCBleHBlY3RlZENodW5rcywgYXJyYXlzaXplKGV4cGVj
dGVkQ2h1bmtzKSkpOworICAgIH0KK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyVGVzdC5oIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlclRlc3QuaAppbmRleCBlNWQ5MDkz
NWQzY2NjODZkNTZjNTUyNmJhYzI0M2UzM2Q4ZTZjNGNkLi42NDAxMTliZGU2ZmNlNDFmMDFlYWFi
NjMxNjg0N2JlNTZiOTBjZjVjIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3Rz
L1dlYkNvcmUvU2hhcmVkQnVmZmVyVGVzdC5oCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViQ29yZS9TaGFyZWRCdWZmZXJUZXN0LmgKQEAgLTQzLDQgKzQzLDkgQEAgcHJpdmF0ZToK
ICAgICBTdHJpbmcgbV90ZW1wRW1wdHlGaWxlUGF0aDsKIH07CiAKKyNpZiBFTkFCTEUoTUhUTUwp
CitjbGFzcyBTaGFyZWRCdWZmZXJDaHVua1JlYWRlclRlc3QgOiBwdWJsaWMgdGVzdGluZzo6VGVz
dCB7Cit9OworI2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFRlc3RXZWJLaXRBUEkK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>445166</attachid>
            <date>2021-11-25 20:09:20 -0800</date>
            <delta_ts>2021-11-25 21:04:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-233481-20211126150919.patch</filename>
            <type>text/plain</type>
            <size>32135</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg2MTI2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y4MWQ1Mjg0MTUwMDQ5
MDVmNmQ1YWM1NTZiZTAyMDQzYjA1MjI5YS4uZmQ4ZmFhYWZiOTAyYTIzNzg5MjYyYzcxYmM4NzUy
ZTc2N2NhMjJhNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM1IEBACisyMDIxLTExLTI1ICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgQXZvaWQgZmxhdHRlbmlu
ZyBhIFNoYXJlZEJ1ZmZlciB3aGVuIHJlYWRpbmcgcmVhZGluZyBpdCB0aHJvdWdoIFNoYXJlZEJ1
ZmZlckNodW5rUmVhZGVyLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjMzNDgxCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzg1NzMzMzU4CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgQ2FtZXJvbiBNY0Nvcm1hY2sKKworICAgICAgICBTaGFyZWRCdWZmZXJD
aHVua1JlYWRlciByZXF1aXJlZCB0aGUgU2hhcmVkQnVmZmVyIHRvIGJlIGZsYXR0ZW5lZCB3aGlj
aAorICAgICAgICB3b3VsZCBtdXRhdGUgdGhlIHVuZGVybHlpbmcgU2hhcmVkQnVmZmVyLgorICAg
ICAgICBUaGUgcGVlayBtZXRob2Qgd2FzIGFsc28gaW5jb3JyZWN0IGlmIHRoZSBkYXRhIHJlYWQg
b3ZlcmxhcHBlZCBtdWx0aXBsZQorICAgICAgICBzZWdtZW50cyAoaXQgd291bGQgcmV0dXJuIHRv
byBtYW55IGNoYXJhY3RlcnMpIGFuZCBzb21lIG1lbWJlcnMgd2VyZSB1c2VkCisgICAgICAgIHdp
dGhvdXQgYmVpbmcgaW5pdGlhbGlzZWQuCisKKyAgICAgICAgQWRkaXRpb25hbGx5LCBhZGQgYSBz
aW1pbGFyIHJlYWQgbWV0aG9kIGluIFNoYXJlZEJ1ZmZlciB0aGF0IHdpbGwgYmUgdXNlZAorICAg
ICAgICBpbiBidWcgMjMzMDMwLgorCisgICAgICAgIENvdmVyZWQgaW4gZXhpc3RpbmcgdGVzdHMs
IEFQSSB0ZXN0cyBhZGRlZC4KKworICAgICAgICAqIEhlYWRlcnMuY21ha2U6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRmb3JtL1No
YXJlZEJ1ZmZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTaGFyZWRCdWZmZXI6OmdldFNvbWVE
YXRhIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZv
clBvc2l0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlcjo6cmVhZCBj
b25zdCk6CisgICAgICAgICogcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hh
cmVkQnVmZmVyQ2h1bmtSZWFkZXI6OlNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpuZXh0Q2h1bmspOgorICAgICAgICAo
V2ViQ29yZTo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6OnBlZWspOgorICAgICAgICAqIHBsYXRm
b3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVhZGVyLmg6CisKIDIwMjEtMTEtMjIgIFNpbW9uIEZyYXNl
ciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAKICAgICAgICAgSGF2ZSBTY3JvbGxBbmltYXRv
cjo6c2Nyb2xsVG9Qb3NpdGlvbldpdGhBbmltYXRpb24oKSB0YWtlIGEgY2xhbXBpbmcgYXJndW1l
bnQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IDliNTc4NjllNjkyY2ViZGY1NTEyZDVjOTZmOGMxN2Fm
NTYxZmY3NWYuLjliYTkwZGYxMTYwYTUwYzVlNjE3YjBkMDlhZjVhMDQ2MGQ0M2I4ZmIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtMTE3MSw2ICsxMTcxLDcgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9G
UkFNRVdPUktfSEVBREVSUwogICAgIHBsYXRmb3JtL1NlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWUu
aAogICAgIHBsYXRmb3JtL1NlcmlhbGl6ZWRQbGF0Zm9ybURhdGFDdWVWYWx1ZS5oCiAgICAgcGxh
dGZvcm0vU2hhcmVkQnVmZmVyLmgKKyAgICBwbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRl
ci5oCiAgICAgcGxhdGZvcm0vU2hhcmVkU3RyaW5nSGFzaC5oCiAgICAgcGxhdGZvcm0vU2xlZXBE
aXNhYmxlci5oCiAgICAgcGxhdGZvcm0vU2xlZXBEaXNhYmxlckNsaWVudC5oCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggMDRlOTY5
ODQ0ZGZiZjM4Zjc5NWNjY2ZlNmJiYzY1NGE3ZTA3ZWEyYi4uNDY4NTgwODE2OWVkNTE1MDQyN2M1
Mjk1MGYwMGM2NzhkMWFhZWJmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDg4LDYgKzQ4OCw3IEBACiAJCTFBNDk0RURGMEEx
MjNGNEMwMEZEQUZDMSAvKiBKU0RvY3VtZW50RnJhZ21lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNDk0RUREMEExMjNGNEMwMEZEQUZDMSAvKiBK
U0RvY3VtZW50RnJhZ21lbnQuaCAqLzsgfTsKIAkJMUE0QTJERjAwQTFCODUyQTAwQzgwN0Y4IC8q
IEpTSFRNTEFuY2hvckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDFBNEEyREVDMEExQjg1MkEwMEM4MDdGOCAvKiBKU0hUTUxBbmNob3JFbGVt
ZW50LmggKi87IH07CiAJCTFBNEE5NTRFMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDFBNEE5NTRD
MEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRCdWZmZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk1MUZBMkVERjI3NTA2RkRFMDAxMUMxNUQgLyog
U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDUxRkEyRUQ2Mjc0Rjc4MzcwMDExQzE1RCAvKiBTaGFyZWRCdWZmZXJD
aHVua1JlYWRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTFBNERBNDIyMUNERDNBODMwMEY0NDczQyAvKiBMaW5rSWNvbkNvbGxlY3Rvci5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE0REE0MjAxQ0RE
M0E4MzAwRjQ0NzNDIC8qIExpbmtJY29uQ29sbGVjdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMUE1NjlEMTIwRDdFMkI4MjAwN0MzOTgzIC8q
IG9iamNfY2xhc3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDFBNTY5Q0UzMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX2NsYXNzLmggKi87IH07CiAJCTFB
NTY5RDEzMEQ3RTJCODIwMDdDMzk4MyAvKiBvYmpjX2NsYXNzLm1tIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUE1NjlDRTQwRDdFMkI4MjAwN0MzOTgzIC8q
IG9iamNfY2xhc3MubW0gKi87IH07CkBAIC05NjA2LDYgKzk2MDcsOCBAQAogCQk1MUY3OThFQzFC
RTg4MEQzMDA4QUU0OTEgLyogSURCSW5kZXhJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IElEQkluZGV4SW5mby5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1
MUY4ODZCRTFGMzI5MjA3MDBDMTkzRUYgLyogSlNOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTTmF2aWdhdG9yU2VydmljZVdv
cmtlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUxRjg4NkJGMUYzMjkyMDcw
MEMxOTNFRiAvKiBKU05hdmlnYXRvclNlcnZpY2VXb3JrZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNOYXZpZ2F0b3JTZXJ2aWNlV29ya2VyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTUxRkEyRUQ2Mjc0Rjc4MzcwMDExQzE1RCAvKiBTaGFyZWRCdWZmZXJD
aHVua1JlYWRlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTaGFyZWRCdWZm
ZXJDaHVua1JlYWRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk1MUZBMkVENzI3
NEY3ODM3MDAxMUMxNUQgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNTUwMjExM0UzRTkxMDA4MjExNzYgLyog
SlNDbG9zZUV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ2xvc2VF
dmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk1MUZCNTUwMzExM0UzRTkxMDA4
MjExNzYgLyogSlNDbG9zZUV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IEpTQ2xvc2VFdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTUx
RkI2N0Q5MUFFNkI1RTQwMEQwNkM1QSAvKiBDb250ZW50RXh0ZW5zaW9uU3R5bGVTaGVldC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb250ZW50RXh0ZW5zaW9uU3R5
bGVTaGVldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yOTEyNiw2ICsyOTEy
OSw4IEBACiAJCQkJMDc2RDFDMUQyM0Y2RDlEODAwRDk1QjA2IC8qIFNlcmlhbGl6ZWRQbGF0Zm9y
bURhdGFDdWVWYWx1ZS5oICovLAogCQkJCTFBNEE5NTRCMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFy
ZWRCdWZmZXIuY3BwICovLAogCQkJCTFBNEE5NTRDMEI0RURDQ0IwMDJEOEMzQyAvKiBTaGFyZWRC
dWZmZXIuaCAqLywKKwkJCQk1MUZBMkVENzI3NEY3ODM3MDAxMUMxNUQgLyogU2hhcmVkQnVmZmVy
Q2h1bmtSZWFkZXIuY3BwICovLAorCQkJCTUxRkEyRUQ2Mjc0Rjc4MzcwMDExQzE1RCAvKiBTaGFy
ZWRCdWZmZXJDaHVua1JlYWRlci5oICovLAogCQkJCTgzNERGQUNFMUY3REFFNTcwMEMyNzI1QiAv
KiBTaGFyZWRTdHJpbmdIYXNoLmNwcCAqLywKIAkJCQk4MzRERkFDQzFGN0RBRTU2MDBDMjcyNUIg
LyogU2hhcmVkU3RyaW5nSGFzaC5oICovLAogCQkJCTkzMzA5RUEwMDk5RUI3OEMwMDU2RTU4MSAv
KiBTaGFyZWRUaW1lci5oICovLApAQCAtMzYxMzQsNiArMzYxMzksNyBAQAogCQkJCUZEMUFGMTUw
MTY1NkYxNTEwMEM2RDRGNyAvKiBTaGFwZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkxRDlG
MEZDMTIxMjIwMjlCMDA1RDhGRDQgLyogU2hhcmVEYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkx
QTRBOTU0RTBCNEVEQ0NCMDAyRDhDM0MgLyogU2hhcmVkQnVmZmVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQk1MUZBMkVERjI3NTA2RkRFMDAxMUMxNUQgLyogU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTUxMEE5MURDMjRDRjQ2RkUwMEJGRDg5QyAvKiBTaGFyZWRH
YW1lcGFkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNEMzZDMTZCMjYwQTY1Q0MwMEM4QzUy
OSAvKiBTaGFyZWRSb3V0aW5nQXJiaXRyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODM0REZB
RDAxRjdEQUU1RDAwQzI3MjVCIC8qIFNoYXJlZFN0cmluZ0hhc2guaCBpbiBIZWFkZXJzICovLApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKaW5kZXggNDc1NDJkYWNhZWI4
NmE1YzNhZTg4ZmViNGRmYWY0NDlmYzNlZmMzNS4uZDhlNjhlMzM3NzgxZmIyOWFkMzljNTViOWFm
ZDM5MDAzNTM1Mzg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3Bw
CkBAIC0xNTUsNiArMTU1LDEyIEBAIFZlY3Rvcjx1aW50OF90PiBTaGFyZWRCdWZmZXI6OnRha2VE
YXRhKCkKIH0KIAogU2hhcmVkQnVmZmVyRGF0YVZpZXcgU2hhcmVkQnVmZmVyOjpnZXRTb21lRGF0
YShzaXplX3QgcG9zaXRpb24pIGNvbnN0Cit7CisgICAgY29uc3QgRGF0YVNlZ21lbnRWZWN0b3JF
bnRyeSogZWxlbWVudCA9IGdldFNlZ21lbnRGb3JQb3NpdGlvbihwb3NpdGlvbik7CisgICAgcmV0
dXJuIHsgZWxlbWVudC0+c2VnbWVudC5jb3B5UmVmKCksIHBvc2l0aW9uIC0gZWxlbWVudC0+YmVn
aW5Qb3NpdGlvbiB9OworfQorCitjb25zdCBTaGFyZWRCdWZmZXI6OkRhdGFTZWdtZW50VmVjdG9y
RW50cnkqIFNoYXJlZEJ1ZmZlcjo6Z2V0U2VnbWVudEZvclBvc2l0aW9uKHNpemVfdCBwb3NpdGlv
bikgY29uc3QKIHsKICAgICBSRUxFQVNFX0FTU0VSVChwb3NpdGlvbiA8IG1fc2l6ZSk7CiAgICAg
YXV0byBjb21wYXJhdG9yID0gW10oY29uc3Qgc2l6ZV90JiBwb3NpdGlvbiwgY29uc3QgRGF0YVNl
Z21lbnRWZWN0b3JFbnRyeSYgZW50cnkpIHsKQEAgLTE2Miw3ICsxNjgsNyBAQCBTaGFyZWRCdWZm
ZXJEYXRhVmlldyBTaGFyZWRCdWZmZXI6OmdldFNvbWVEYXRhKHNpemVfdCBwb3NpdGlvbikgY29u
c3QKICAgICB9OwogICAgIGNvbnN0IERhdGFTZWdtZW50VmVjdG9yRW50cnkqIGVsZW1lbnQgPSBz
dGQ6OnVwcGVyX2JvdW5kKG1fc2VnbWVudHMuYmVnaW4oKSwgbV9zZWdtZW50cy5lbmQoKSwgcG9z
aXRpb24sIGNvbXBhcmF0b3IpOwogICAgIGVsZW1lbnQtLTsgLy8gc3RkOjp1cHBlcl9ib3VuZCBn
aXZlcyBhIHBvaW50ZXIgdG8gdGhlIGVsZW1lbnQgdGhhdCBpcyBncmVhdGVyIHRoYW4gcG9zaXRp
b24uIFdlIHdhbnQgdGhlIGVsZW1lbnQganVzdCBiZWZvcmUgdGhhdC4KLSAgICByZXR1cm4geyBl
bGVtZW50LT5zZWdtZW50LmNvcHlSZWYoKSwgcG9zaXRpb24gLSBlbGVtZW50LT5iZWdpblBvc2l0
aW9uIH07CisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIFN0cmluZyBTaGFyZWRCdWZmZXI6OnRv
SGV4U3RyaW5nKCkgY29uc3QKQEAgLTI3Nyw2ICsyODMsMzMgQEAgYm9vbCBTaGFyZWRCdWZmZXI6
OnN0YXJ0c1dpdGgoY29uc3QgU3Bhbjxjb25zdCB1aW50OF90PiYgcHJlZml4KSBjb25zdAogICAg
IHJldHVybiBmYWxzZTsKIH0KIAorVmVjdG9yPHVpbnQ4X3Q+IFNoYXJlZEJ1ZmZlcjo6cmVhZChz
aXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3RoKSBjb25zdAoreworICAgIFZlY3Rvcjx1aW50OF90
PiBkYXRhOworICAgIGlmIChvZmZzZXQgPj0gc2l6ZSgpKQorICAgICAgICByZXR1cm4gZGF0YTsK
KyAgICBhdXRvIHJlbWFpbmluZyA9IHN0ZDo6bWluKGxlbmd0aCwgc2l6ZSgpIC0gb2Zmc2V0KTsK
KyAgICBpZiAoIXJlbWFpbmluZykKKyAgICAgICAgcmV0dXJuIGRhdGE7CisKKyAgICBkYXRhLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkocmVtYWluaW5nKTsKKyAgICBhdXRvKiBjdXJyZW50U2VnbWVu
dCA9IGdldFNlZ21lbnRGb3JQb3NpdGlvbihvZmZzZXQpOworICAgIHNpemVfdCBvZmZzZXRJblNl
Z21lbnQgPSBvZmZzZXQgLSBjdXJyZW50U2VnbWVudC0+YmVnaW5Qb3NpdGlvbjsKKyAgICBzaXpl
X3QgYXZhaWxhYmxlSW5TZWdtZW50ID0gc3RkOjptaW4oY3VycmVudFNlZ21lbnQtPnNlZ21lbnQt
PnNpemUoKSAtIG9mZnNldEluU2VnbWVudCwgcmVtYWluaW5nKTsKKyAgICBkYXRhLmFwcGVuZChj
dXJyZW50U2VnbWVudC0+c2VnbWVudC0+ZGF0YSgpICsgb2Zmc2V0SW5TZWdtZW50LCBhdmFpbGFi
bGVJblNlZ21lbnQpOworCisgICAgcmVtYWluaW5nIC09IGF2YWlsYWJsZUluU2VnbWVudDsKKwor
ICAgIGF1dG8qIGFmdGVyTGFzdFNlZ21lbnQgPSBlbmQoKTsKKworICAgIHdoaWxlIChyZW1haW5p
bmcgJiYgKytjdXJyZW50U2VnbWVudCAhPSBhZnRlckxhc3RTZWdtZW50KSB7CisgICAgICAgIHNp
emVfdCBsZW5ndGhJblNlZ21lbnQgPSBzdGQ6Om1pbihjdXJyZW50U2VnbWVudC0+c2VnbWVudC0+
c2l6ZSgpLCByZW1haW5pbmcpOworICAgICAgICBkYXRhLmFwcGVuZChjdXJyZW50U2VnbWVudC0+
c2VnbWVudC0+ZGF0YSgpLCBsZW5ndGhJblNlZ21lbnQpOworICAgICAgICByZW1haW5pbmcgLT0g
bGVuZ3RoSW5TZWdtZW50OworICAgIH0KKyAgICByZXR1cm4gZGF0YTsKK30KKwogdm9pZCBTaGFy
ZWRCdWZmZXI6OmNvcHlUbyh2b2lkKiBkZXN0aW5hdGlvbiwgc2l6ZV90IGxlbmd0aCkgY29uc3QK
IHsKICAgICByZXR1cm4gY29weVRvKGRlc3RpbmF0aW9uLCAwLCBsZW5ndGgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAppbmRleCAzOTUzYjExMmJiMTEwNzUwYTdjYjE3NDNh
OGRjZDc3MjQ3YWRhMWFiLi5mMjNmNWQ2OWFkMzJlZDY0MGI5NTc3YjJlNmM0NTQ5MTgzOTM2OGFk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaApAQCAtMTAyLDYgKzEwMiw3
IEBAIHB1YmxpYzoKICAgICBjb25zdCB1aW50OF90KiBkYXRhKCkgY29uc3Q7CiAgICAgY29uc3Qg
Y2hhciogZGF0YUFzQ2hhclB0cigpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgY2hhcio+KGRhdGEoKSk7IH0KICAgICBWZWN0b3I8dWludDhfdD4gY29weURhdGEoKSBjb25z
dDsKKyAgICBWZWN0b3I8dWludDhfdD4gcmVhZChzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuZ3Ro
KSBjb25zdDsKIAogICAgIC8vIFNpbWlsYXIgdG8gY29weURhdGEoKSBidXQgYXZvaWRzIGNvcHlp
bmcgYW5kIHdpbGwgdGFrZSB0aGUgZGF0YSBpbnN0ZWFkIHdoZW4gaXQgaXMgc2FmZSAoVGhlIFNo
YXJlZEJ1ZmZlciBpcyBub3Qgc2hhcmVkKS4KICAgICBWZWN0b3I8dWludDhfdD4gZXh0cmFjdERh
dGEoKTsKQEAgLTI0NCw3ICsyNDUsOSBAQCBwcml2YXRlOgogCiAgICAgLy8gQ29tYmluZXMgYWxs
IHRoZSBzZWdtZW50cyBpbnRvIGEgVmVjdG9yIGFuZCByZXR1cm5zIHRoYXQgdmVjdG9yIGFmdGVy
IGNsZWFyaW5nIHRoZSBTaGFyZWRCdWZmZXIuCiAgICAgVmVjdG9yPHVpbnQ4X3Q+IHRha2VEYXRh
KCk7Ci0gICAgCisKKyAgICBjb25zdCBEYXRhU2VnbWVudFZlY3RvckVudHJ5KiBnZXRTZWdtZW50
Rm9yUG9zaXRpb24oc2l6ZV90IHBvc2l0aXRpb24pIGNvbnN0OworCiAgICAgc3RhdGljIFJlZlB0
cjxTaGFyZWRCdWZmZXI+IGNyZWF0ZUZyb21SZWFkaW5nRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoKTsKIAogICAgIHNpemVfdCBtX3NpemUgeyAwIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5jcHAKaW5kZXggNWU0NDY2Y2QzZjE3
MTg4YTI3YzBjZGUxZWE4YTgwMWIwMmEyNDdkNS4uY2RiNmU3MDM0MDRkNDI2ZGQyMWI0NzlmYTg5
YzBkYTliOGM0OWY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyQ2h1bmtSZWFkZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJl
ZEJ1ZmZlckNodW5rUmVhZGVyLmNwcApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBDb3B5cmlnaHQg
KEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAyMSBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsMjMgKzMyLDIyIEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaCIKIAotI2lmIEVOQUJMRShN
SFRNTCkKLQotLy8gRklYTUU6IFRoaXMgY2xhc3MgaXMgb3ZlcmtpbGwuIFJlbW92ZSB0aGlzIGNs
YXNzIGFuZCBqdXN0IGl0ZXJhdGUgdGhlIHNlZ21lbnRzIG9mIGEgU2hhcmVkQnVmZmVyCi0vLyB1
c2luZyB0aGUgY29vbCBuZXcgU2hhcmVkQnVmZmVyOjpiZWdpbigpIGFuZCBTaGFyZWRCdWZmZXI6
OmVuZCgpIGluc3RlYWQgb2YgdXNpbmcgdGhpcyBjbGFzcy4KLQotI2luY2x1ZGUgIlNoYXJlZEJ1
ZmZlci5oIgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKyNpZiBFTkFCTEUoTUhUTUwpCisKIFNo
YXJlZEJ1ZmZlckNodW5rUmVhZGVyOjpTaGFyZWRCdWZmZXJDaHVua1JlYWRlcihTaGFyZWRCdWZm
ZXIqIGJ1ZmZlciwgY29uc3QgVmVjdG9yPGNoYXI+JiBzZXBhcmF0b3IpCi0gICAgOiBtX2J1ZmZl
cihidWZmZXIpCisgICAgOiBtX2l0ZXJhdG9yQ3VycmVudChidWZmZXItPmJlZ2luKCkpCisgICAg
LCBtX2l0ZXJhdG9yRW5kKGJ1ZmZlci0+ZW5kKCkpCisgICAgLCBtX3NlZ21lbnQobV9pdGVyYXRv
ckN1cnJlbnQgIT0gbV9pdGVyYXRvckVuZCA/IG1faXRlcmF0b3JDdXJyZW50LT5zZWdtZW50LT5k
YXRhKCkgOiBudWxscHRyKQogICAgICwgbV9zZXBhcmF0b3Ioc2VwYXJhdG9yKQogewogfQogCiBT
aGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6U2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIoU2hhcmVkQnVm
ZmVyKiBidWZmZXIsIGNvbnN0IGNoYXIqIHNlcGFyYXRvcikKLSAgICA6IG1fYnVmZmVyKGJ1ZmZl
cikKKyAgICA6IG1faXRlcmF0b3JDdXJyZW50KGJ1ZmZlci0+YmVnaW4oKSkKKyAgICAsIG1faXRl
cmF0b3JFbmQoYnVmZmVyLT5lbmQoKSkKKyAgICAsIG1fc2VnbWVudChtX2l0ZXJhdG9yQ3VycmVu
dCAhPSBtX2l0ZXJhdG9yRW5kID8gbV9pdGVyYXRvckN1cnJlbnQtPnNlZ21lbnQtPmRhdGEoKSA6
IG51bGxwdHIpCiB7CiAgICAgc2V0U2VwYXJhdG9yKHNlcGFyYXRvcik7CiB9CkBAIC02NSwxMiAr
NjUsMTMgQEAgdm9pZCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6c2V0U2VwYXJhdG9yKGNvbnN0
IGNoYXIqIHNlcGFyYXRvcikKIAogYm9vbCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6bmV4dENo
dW5rKFZlY3Rvcjx1aW50OF90PiYgY2h1bmssIGJvb2wgaW5jbHVkZVNlcGFyYXRvcikKIHsKLSAg
ICBpZiAobV9yZWFjaGVkRW5kT2ZGaWxlKQorICAgIGlmIChtX2l0ZXJhdG9yQ3VycmVudCA9PSBt
X2l0ZXJhdG9yRW5kKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBjaHVuay5jbGVhcigp
OwogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIHdoaWxlIChtX3NlZ21lbnRJbmRleCA8IG1f
c2VnbWVudExlbmd0aCkgeworICAgICAgICB3aGlsZSAobV9zZWdtZW50SW5kZXggPCBtX2l0ZXJh
dG9yQ3VycmVudC0+c2VnbWVudC0+c2l6ZSgpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogVGhl
IGV4aXN0aW5nIGNvZGUgdG8gY2hlY2sgZm9yIHNlcGFyYXRvcnMgZG9lc24ndCB3b3JrIGNvcnJl
Y3RseSB3aXRoIGFyYml0cmFyeSBzZXBhcmF0b3Igc3RyaW5ncy4KICAgICAgICAgICAgIGF1dG8g
Y3VycmVudENoYXJhY3RlciA9IG1fc2VnbWVudFttX3NlZ21lbnRJbmRleCsrXTsKICAgICAgICAg
ICAgIGlmIChjdXJyZW50Q2hhcmFjdGVyICE9IG1fc2VwYXJhdG9yW21fc2VwYXJhdG9ySW5kZXhd
KSB7CiAgICAgICAgICAgICAgICAgaWYgKG1fc2VwYXJhdG9ySW5kZXggPiAwKSB7CkBAIC05Miwx
OCArOTMsMTUgQEAgYm9vbCBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcjo6bmV4dENodW5rKFZlY3Rv
cjx1aW50OF90PiYgY2h1bmssIGJvb2wgaW5jbHVkZVNlcGEKIAogICAgICAgICAvLyBSZWFkIHRo
ZSBuZXh0IHNlZ21lbnQuCiAgICAgICAgIG1fc2VnbWVudEluZGV4ID0gMDsKLSAgICAgICAgbV9i
dWZmZXJQb3NpdGlvbiArPSBtX3NlZ21lbnRMZW5ndGg7Ci0gICAgICAgIC8vIExldCdzIHByZXRl
bmQgYWxsIHRoZSBkYXRhIGlzIGluIG9uZSBibG9jay4KLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
Y2xhc3Mgc2hvdWxkIGJlIHJlbW92ZWQgaW4gZmF2b3Igb2YganVzdCBpdGVyYXRpbmcgdGhlIHNl
Z21lbnRzIG9mIHRoZSBTaGFyZWRCdWZmZXIuCi0gICAgICAgIG1fc2VnbWVudCA9IG1fYnVmZmVy
LT5kYXRhKCkgKyBtX2J1ZmZlclBvc2l0aW9uOwotICAgICAgICBtX3NlZ21lbnRMZW5ndGggPSBt
X2J1ZmZlci0+c2l6ZSgpIC0gbV9idWZmZXJQb3NpdGlvbjsKLSAgICAgICAgaWYgKCFtX3NlZ21l
bnRMZW5ndGgpIHsKLSAgICAgICAgICAgIG1fcmVhY2hlZEVuZE9mRmlsZSA9IHRydWU7CisgICAg
ICAgIGlmICgrK21faXRlcmF0b3JDdXJyZW50ID09IG1faXRlcmF0b3JFbmQpIHsKKyAgICAgICAg
ICAgIG1fc2VnbWVudCA9IG51bGxwdHI7CiAgICAgICAgICAgICBpZiAobV9zZXBhcmF0b3JJbmRl
eCA+IDApCiAgICAgICAgICAgICAgICAgY2h1bmsuYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y29u
c3QgdWludDhfdCo+KG1fc2VwYXJhdG9yLmRhdGEoKSksIG1fc2VwYXJhdG9ySW5kZXgpOwogICAg
ICAgICAgICAgcmV0dXJuICFjaHVuay5pc0VtcHR5KCk7CiAgICAgICAgIH0KKyAgICAgICAgbV9z
ZWdtZW50ID0gbV9pdGVyYXRvckN1cnJlbnQtPnNlZ21lbnQtPmRhdGEoKTsKICAgICB9CisKICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkBAIC0xMjAsMzEg
KzExOCwyOCBAQCBTdHJpbmcgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXI6Om5leHRDaHVua0FzVVRG
OFN0cmluZ1dpdGhMYXRpbjFGYWxsYmFjayhib29sIGluYwogc2l6ZV90IFNoYXJlZEJ1ZmZlckNo
dW5rUmVhZGVyOjpwZWVrKFZlY3Rvcjx1aW50OF90PiYgZGF0YSwgc2l6ZV90IHJlcXVlc3RlZFNp
emUpCiB7CiAgICAgZGF0YS5jbGVhcigpOwotICAgIGlmIChyZXF1ZXN0ZWRTaXplIDw9IG1fc2Vn
bWVudExlbmd0aCAtIG1fc2VnbWVudEluZGV4KSB7Ci0gICAgICAgIGRhdGEuYXBwZW5kKG1fc2Vn
bWVudCArIG1fc2VnbWVudEluZGV4LCByZXF1ZXN0ZWRTaXplKTsKLSAgICAgICAgcmV0dXJuIHJl
cXVlc3RlZFNpemU7Ci0gICAgfQorICAgIGlmIChtX2l0ZXJhdG9yQ3VycmVudCA9PSBtX2l0ZXJh
dG9yRW5kKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNpemVfdCBhdmFpbGFibGVJblNlZ21l
bnQgPSBzdGQ6Om1pbihtX2l0ZXJhdG9yQ3VycmVudC0+c2VnbWVudC0+c2l6ZSgpIC0gbV9zZWdt
ZW50SW5kZXgsIHJlcXVlc3RlZFNpemUpOworICAgIGRhdGEuYXBwZW5kKG1fc2VnbWVudCArIG1f
c2VnbWVudEluZGV4LCBhdmFpbGFibGVJblNlZ21lbnQpOworCisgICAgc2l6ZV90IHJlYWRCeXRl
c0NvdW50ID0gYXZhaWxhYmxlSW5TZWdtZW50OworICAgIHJlcXVlc3RlZFNpemUgLT0gcmVhZEJ5
dGVzQ291bnQ7CisKKyAgICBhdXRvIGN1cnJlbnRTZWdtZW50ID0gbV9pdGVyYXRvckN1cnJlbnQ7
CiAKLSAgICBzaXplX3QgcmVhZEJ5dGVzQ291bnQgPSBtX3NlZ21lbnRMZW5ndGggLSBtX3NlZ21l
bnRJbmRleDsKLSAgICBkYXRhLmFwcGVuZChtX3NlZ21lbnQgKyBtX3NlZ21lbnRJbmRleCwgcmVh
ZEJ5dGVzQ291bnQpOwotCi0gICAgc2l6ZV90IGJ1ZmZlclBvc2l0aW9uID0gbV9idWZmZXJQb3Np
dGlvbiArIG1fc2VnbWVudExlbmd0aDsKLSAgICBjb25zdCB1aW50OF90KiBzZWdtZW50ID0gbnVs
bHB0cjsKLQotICAgIC8vIExldCdzIHByZXRlbmQgYWxsIHRoZSBkYXRhIGlzIGluIG9uZSBibG9j
ay4KLSAgICAvLyBGSVhNRTogVGhpcyBjbGFzcyBzaG91bGQgYmUgcmVtb3ZlZCBpbiBmYXZvciBv
ZiBqdXN0IGl0ZXJhdGluZyB0aGUgc2VnbWVudHMgb2YgdGhlIFNoYXJlZEJ1ZmZlci4KLSAgICBp
ZiAoYnVmZmVyUG9zaXRpb24gIT0gbV9idWZmZXItPnNpemUoKSkgewotICAgICAgICBzZWdtZW50
ID0gbV9idWZmZXItPmRhdGEoKSArIGJ1ZmZlclBvc2l0aW9uOwotICAgICAgICBzaXplX3Qgc2Vn
bWVudExlbmd0aCA9IG1fYnVmZmVyLT5zaXplKCkgLSBidWZmZXJQb3NpdGlvbjsKLSAgICAgICAg
aWYgKHNlZ21lbnRMZW5ndGggPiByZXF1ZXN0ZWRTaXplKQotICAgICAgICAgICAgc2VnbWVudExl
bmd0aCA9IHJlcXVlc3RlZFNpemU7Ci0gICAgICAgIGRhdGEuYXBwZW5kKHNlZ21lbnQsIHNlZ21l
bnRMZW5ndGgpOwotICAgICAgICByZWFkQnl0ZXNDb3VudCArPSBzZWdtZW50TGVuZ3RoOwotICAg
ICAgICBidWZmZXJQb3NpdGlvbiArPSBzZWdtZW50TGVuZ3RoOworICAgIHdoaWxlIChyZXF1ZXN0
ZWRTaXplICYmICsrY3VycmVudFNlZ21lbnQgIT0gbV9pdGVyYXRvckVuZCkgeworICAgICAgICBj
b25zdCB1aW50OF90KiBzZWdtZW50ID0gY3VycmVudFNlZ21lbnQtPnNlZ21lbnQtPmRhdGEoKTsK
KyAgICAgICAgc2l6ZV90IGxlbmd0aEluU2VnbWVudCA9IHN0ZDo6bWluKGN1cnJlbnRTZWdtZW50
LT5zZWdtZW50LT5zaXplKCksIHJlcXVlc3RlZFNpemUpOworICAgICAgICBkYXRhLmFwcGVuZChz
ZWdtZW50LCBsZW5ndGhJblNlZ21lbnQpOworICAgICAgICByZWFkQnl0ZXNDb3VudCArPSBsZW5n
dGhJblNlZ21lbnQ7CisgICAgICAgIHJlcXVlc3RlZFNpemUgLT0gbGVuZ3RoSW5TZWdtZW50Owog
ICAgIH0KICAgICByZXR1cm4gcmVhZEJ5dGVzQ291bnQ7CiB9CiAKKyNlbmRpZgorCiB9CiAKLSNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyQ2h1
bmtSZWFkZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlckNodW5rUmVh
ZGVyLmgKaW5kZXggYzlmNWIwNmZiNDY1NmRjMmVhY2Q0MDQ0MWZmMzQxZTI1ZmQ0Yzc4MS4uNWQ0
ZTZmZWU1ODJjNjYxNmZkMDdlMzk5NGZmNzVjOGYwN2EyZmNlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXJDaHVua1JlYWRlci5oCkBAIC0xLDUgKzEsNiBA
QAogLyoKICAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDIxIEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMiwxNCArMzMsMTMg
QEAKIAogI2lmIEVOQUJMRShNSFRNTCkKIAorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBTaGFyZWRCdWZmZXI7Ci0KLWNsYXNzIFNoYXJl
ZEJ1ZmZlckNodW5rUmVhZGVyIHsKK2NsYXNzIFdFQkNPUkVfRVhQT1JUIFNoYXJlZEJ1ZmZlckNo
dW5rUmVhZGVyIHsKIHB1YmxpYzoKICAgICBTaGFyZWRCdWZmZXJDaHVua1JlYWRlcihTaGFyZWRC
dWZmZXIqLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHNlcGFyYXRvcik7CiAgICAgU2hhcmVkQnVmZmVy
Q2h1bmtSZWFkZXIoU2hhcmVkQnVmZmVyKiwgY29uc3QgY2hhciogc2VwYXJhdG9yKTsKQEAgLTU4
LDEyICs1OCwxMCBAQCBwdWJsaWM6CiAgICAgc2l6ZV90IHBlZWsoVmVjdG9yPHVpbnQ4X3Q+Jiwg
c2l6ZV90KTsKIAogcHJpdmF0ZToKLSAgICBTaGFyZWRCdWZmZXIqIG1fYnVmZmVyOwotICAgIHNp
emVfdCBtX2J1ZmZlclBvc2l0aW9uIHsgMCB9OworICAgIFNoYXJlZEJ1ZmZlcjo6RGF0YVNlZ21l
bnRWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3JDdXJyZW50OworICAgIGNvbnN0IFNo
YXJlZEJ1ZmZlcjo6RGF0YVNlZ21lbnRWZWN0b3I6OmNvbnN0X2l0ZXJhdG9yIG1faXRlcmF0b3JF
bmQ7CiAgICAgY29uc3QgdWludDhfdCogbV9zZWdtZW50IHsgbnVsbHB0ciB9OwotICAgIHNpemVf
dCBtX3NlZ21lbnRMZW5ndGggeyAwIH07CiAgICAgc2l6ZV90IG1fc2VnbWVudEluZGV4IHsgMCB9
OwotICAgIGJvb2wgbV9yZWFjaGVkRW5kT2ZGaWxlOwogICAgIFZlY3RvcjxjaGFyPiBtX3NlcGFy
YXRvciB7IGZhbHNlIH07CiAgICAgc2l6ZV90IG1fc2VwYXJhdG9ySW5kZXggeyAwIH07CiB9Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDFiZDVk
NTM4MjA1NWM5MjcxOTU3OTY3ZTVmYmZiZTI2MmFlOGY2YzQuLjM1ZmY1Y2M0ZDRjNjA0NDdlZDIy
N2ExMTI0MDcwODA1MjNiNTQ2ODMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAyMS0xMS0yNSAgSmVhbi1ZdmVzIEF2
ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgorCisgICAgICAgIEF2b2lkIGZsYXR0ZW5pbmcgYSBTaGFy
ZWRCdWZmZXIgd2hlbiByZWFkaW5nIHJlYWRpbmcgaXQgdGhyb3VnaCBTaGFyZWRCdWZmZXJDaHVu
a1JlYWRlci4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzMzQ4MQorICAgICAgICByZGFyOi8vcHJvYmxlbS84NTczMzM1OAorCisgICAgICAgIFJldmll
d2VkIGJ5IENhbWVyb24gTWNDb3JtYWNrLgorCisgICAgICAgIEFkZCBBUEkgdGVzdHMuCisgICAg
ICAgIEFQSSB0ZXN0cyBvcmlnaW5hbCBkYXRhIGNvbWUgZnJvbSB0aGUgb3JpZ2luYWwgYnVnIHRo
YXQgYWRkZWQKKyAgICAgICAgU2hhcmVkQnVmZmVyQ2h1bmtSZWFkZXIgKGJ1ZyA1OTk0NikgYW5k
IHRoZW4gZXhwYW5kZWQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUv
U2hhcmVkQnVmZmVyLmNwcDoKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1RfRik6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpyZWFkQWxsQ2h1bmtzKToKKyAgICAgICAgKFRlc3RXZWJLaXRB
UEk6OmNoZWNrQ2h1bmtzKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OmNoZWNrRGF0YUluUmFu
Z2UpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXJU
ZXN0Lmg6CisKIDIwMjEtMTEtMjIgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIG9sZCBjb25jdXJyZW50IGRpc3BsYXkgbGlzdCBsb2dpYyB0
aGF0J3Mgbm8gbG9uZ2VyIG5lY2Vzc2FyeQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0cy9XZWJDb3JlL1NoYXJlZEJ1ZmZlci5jcHAgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyLmNwcAppbmRleCAzNjkyOTcyZGVhYTc2OTRhMWI2YzFm
ZmZlNDE4ZTVmYTQ3MTUyNjRjLi5kZGJmYzFmMmIxODIxY2IxZGZhYmM4ZTJmNjMyN2IyMTJjN2Nh
NDY4IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVk
QnVmZmVyLmNwcAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVk
QnVmZmVyLmNwcApAQCAtMzEsNiArMzEsOSBAQAogI2luY2x1ZGUgIlRlc3QuaCIKICNpbmNsdWRl
IDxKYXZhU2NyaXB0Q29yZS9BcnJheUJ1ZmZlci5oPgogI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVk
QnVmZmVyLmg+CisjaWYgRU5BQkxFKE1IVE1MKQorI2luY2x1ZGUgPFdlYkNvcmUvU2hhcmVkQnVm
ZmVyQ2h1bmtSZWFkZXIuaD4KKyNlbmRpZgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAj
aW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJhcy5oPgogCkBAIC0yMjksNCArMjMyLDMwOSBAQCBURVNU
X0YoU2hhcmVkQnVmZmVyVGVzdCwgdG9IZXhTdHJpbmcpCiAgICAgRVhQRUNUX0VRKGJ1ZmZlci0+
dG9IZXhTdHJpbmcoKSwgIiIpOwogfQogCitURVNUX0YoU2hhcmVkQnVmZmVyVGVzdCwgcmVhZCkK
K3sKKyAgICBjb25zdCBjaGFyKiBjb25zdCBzaW1wbGVUZXh0ID0gIlRoaXMgaXMgYSBzaW1wbGUg
dGVzdC4iOworCisgICAgYXV0byBjaGVjayA9IFtdKFNoYXJlZEJ1ZmZlciYgc2hhcmVkQnVmZmVy
KSB7CisgICAgICAgIFZlY3Rvcjx1aW50OF90PiBkYXRhID0gc2hhcmVkQnVmZmVyLnJlYWQoNCwg
Myk7CisgICAgICAgIEVYUEVDVF9FUShkYXRhLnNpemUoKSwgM3UpOworICAgICAgICBFWFBFQ1Rf
RVEoU3RyaW5nKGRhdGEuZGF0YSgpLCAzKSwgIiBpcyIpOworCisgICAgICAgIGRhdGEgPSBzaGFy
ZWRCdWZmZXIucmVhZCg0LCAxMDAwKTsKKyAgICAgICAgRVhQRUNUX0VRKGRhdGEuc2l6ZSgpLCAx
OHUpOworCisgICAgICAgIEVYUEVDVF9FUShTdHJpbmcoZGF0YS5kYXRhKCksIDE4KSwgIiBpcyBh
IHNpbXBsZSB0ZXN0LiIpOworICAgIH07CisgICAgYXV0byBzaGFyZWRCdWZmZXIgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShzaW1wbGVUZXh0LCBzdHJsZW4oc2ltcGxlVGV4dCkpOworICAgIGNoZWNr
KHNoYXJlZEJ1ZmZlcik7CisKKyAgICBzaGFyZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0
ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc3RybGVuKHNpbXBsZVRleHQpOyBpKysp
CisgICAgICAgIHNoYXJlZEJ1ZmZlci0+YXBwZW5kKCZzaW1wbGVUZXh0W2ldLCAxKTsKKyAgICBj
aGVjayhzaGFyZWRCdWZmZXIpOworCisgICAgc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpj
cmVhdGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmxlbihzaW1wbGVUZXh0KTsg
aSArPSAyKQorICAgICAgICBzaGFyZWRCdWZmZXItPmFwcGVuZCgmc2ltcGxlVGV4dFtpXSwgMik7
CisgICAgRVhQRUNUX0VRKHNoYXJlZEJ1ZmZlci0+c2l6ZSgpLCBzdHJsZW4oc2ltcGxlVGV4dCkp
OworICAgIGNoZWNrKHNoYXJlZEJ1ZmZlcik7Cit9CisKKyNpZiBFTkFCTEUoTUhUTUwpCisvLyBT
aGFyZWRCdWZmZXJDaHVua1JlYWRlciB1bml0LXRlc3RzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KK3RlbXBsYXRlPCB0eXBlbmFtZSBULCBzaXplX3QgTiA+Citjb25zdGV4
cHIgc2l6ZV90IGFycmF5c2l6ZSggY29uc3QgVCAoJilbTl0gKSB7IHJldHVybiBOOyB9CisKK3N0
YXRpYyB2b2lkIHJlYWRBbGxDaHVua3Moc3RkOjp2ZWN0b3I8U3RyaW5nPiogY2h1bmtzLCBTaGFy
ZWRCdWZmZXImIGJ1ZmZlciwgY29uc3QgU3RyaW5nJiBzZXBhcmF0b3IgPSAiXHJcbiIsIGJvb2wg
aW5jbHVkZVNlcGFyYXRvciA9IGZhbHNlKQoreworICAgIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVy
IGNodW5rUmVhZGVyKCZidWZmZXIsIHNlcGFyYXRvci51dGY4KCkuZGF0YSgpKTsKKyAgICBTdHJp
bmcgY2h1bmsgPSBjaHVua1JlYWRlci5uZXh0Q2h1bmtBc1VURjhTdHJpbmdXaXRoTGF0aW4xRmFs
bGJhY2soaW5jbHVkZVNlcGFyYXRvcik7CisgICAgd2hpbGUgKCFjaHVuay5pc051bGwoKSkgewor
ICAgICAgICBjaHVua3MtPnB1c2hfYmFjayhjaHVuayk7CisgICAgICAgIGNodW5rID0gY2h1bmtS
ZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nV2l0aExhdGluMUZhbGxiYWNrKGluY2x1ZGVTZXBh
cmF0b3IpOworICAgIH0KK30KKworc3RhdGljIGJvb2wgY2hlY2tDaHVua3MoY29uc3Qgc3RkOjp2
ZWN0b3I8U3RyaW5nPiYgY2h1bmtzLCBjb25zdCBjaGFyKiBjb25zdCBleHBlY3RlZENodW5rc1td
LCBzaXplX3QgZXhwZWN0ZWRTaXplKQoreworICAgIGlmIChjaHVua3Muc2l6ZSgpICE9IGV4cGVj
dGVkU2l6ZSkgeworICAgICAgICBFWFBFQ1RfRVEoY2h1bmtzLnNpemUoKSwgZXhwZWN0ZWRTaXpl
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY2h1bmtzLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmIChjaHVua3NbaV0gIT0gZXhw
ZWN0ZWRDaHVua3NbaV0pCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJl
dHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBjaGVja0RhdGFJblJhbmdlKGNvbnN0IFZlY3Rv
cjx1aW50OF90PiYgZGF0YSwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgbGVuZ3RoKQoreworICAgIEFT
U0VSVF9FUShkYXRhLnNpemUoKSwgbGVuZ3RoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKQorICAgICAgICBBU1NFUlRfRVEoZGF0YVtpXSwgc3RhdGljX2Nhc3Q8dWlu
dDhfdD4oc3RhcnQgKyBpKSk7Cit9CisKK1RFU1RfRihTaGFyZWRCdWZmZXJDaHVua1JlYWRlclRl
c3QsIGluY2x1ZGVTZXBhcmF0b3IpCit7CisgICAgYXV0byBjaGVjayA9IFtdKFNoYXJlZEJ1ZmZl
ciYgc2hhcmVkQnVmZmVyKSB7CisgICAgICAgIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyIGNodW5r
UmVhZGVyKCZzaGFyZWRCdWZmZXIsICJceDEwXHgxMVx4MTIiKTsKKyAgICAgICAgVmVjdG9yPHVp
bnQ4X3Q+IG91dDsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2h1bmtSZWFkZXIubmV4dENodW5rKG91
dCkpOworICAgICAgICBjaGVja0RhdGFJblJhbmdlKG91dCwgMCwgMTYpOworCisgICAgICAgIEVY
UEVDVF9UUlVFKGNodW5rUmVhZGVyLm5leHRDaHVuayhvdXQpKTsKKyAgICAgICAgY2hlY2tEYXRh
SW5SYW5nZShvdXQsIDE5LCAyMzcpOworCisgICAgICAgIEVYUEVDVF9GQUxTRShjaHVua1JlYWRl
ci5uZXh0Q2h1bmsob3V0KSk7CisgICAgfTsKKyAgICB1aW50OF90IGRhdGFbMjU2XTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IDI1NjsgKytpKQorICAgICAgICBkYXRhW2ldID0gaTsKKwor
ICAgIGF1dG8gc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoZGF0YSwgMjU2KTsK
KyAgICBjaGVjayhzaGFyZWRCdWZmZXIpOworICAgIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCAyNTY7ICsraSkgeworICAg
ICAgICBjaGFyIGMgPSBpOworICAgICAgICBzaGFyZWRCdWZmZXItPmFwcGVuZCgmYywgMSk7Cisg
ICAgfQorICAgIGNoZWNrKHNoYXJlZEJ1ZmZlcik7Cit9CisKK1RFU1RfRihTaGFyZWRCdWZmZXJD
aHVua1JlYWRlclRlc3QsIHBlZWtEYXRhKQoreworICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBs
ZVRleHQgPSAiVGhpcyBpcyBhIHNpbXBsZSB0ZXN0LiI7CisKKyAgICBhdXRvIGNoZWNrID0gW10o
U2hhcmVkQnVmZmVyJiBzaGFyZWRCdWZmZXIpIHsKKyAgICAgICAgU2hhcmVkQnVmZmVyQ2h1bmtS
ZWFkZXIgY2h1bmtSZWFkZXIoJnNoYXJlZEJ1ZmZlciwgImlzIik7CisKKyAgICAgICAgU3RyaW5n
IGNodW5rID0gY2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nV2l0aExhdGluMUZhbGxi
YWNrKCk7CisgICAgICAgIEVYUEVDVF9FUShjaHVuaywgIlRoIik7CisKKyAgICAgICAgVmVjdG9y
PHVpbnQ4X3Q+IGRhdGE7CisgICAgICAgIHNpemVfdCByZWFkID0gY2h1bmtSZWFkZXIucGVlayhk
YXRhLCAzKTsKKyAgICAgICAgRVhQRUNUX0VRKHJlYWQsIDN1KTsKKworICAgICAgICBFWFBFQ1Rf
RVEoU3RyaW5nKGRhdGEuZGF0YSgpLCAzKSwgIiBpcyIpOworCisgICAgICAgIHJlYWQgPSBjaHVu
a1JlYWRlci5wZWVrKGRhdGEsIDEwMDApOworICAgICAgICBFWFBFQ1RfRVEocmVhZCwgMTh1KTsK
KworICAgICAgICBFWFBFQ1RfRVEoU3RyaW5nKGRhdGEuZGF0YSgpLCAxOCksICIgaXMgYSBzaW1w
bGUgdGVzdC4iKTsKKworICAgICAgICAvLyBFbnN1cmUgdGhlIGN1cnNvciBoYXMgbm90IGNoYW5n
ZWQuCisgICAgICAgIGNodW5rID0gY2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3RyaW5nV2l0
aExhdGluMUZhbGxiYWNrKCk7CisgICAgICAgIEVYUEVDVF9FUShjaHVuaywgIiAiKTsKKworICAg
ICAgICBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZ1dpdGhMYXRpbjFG
YWxsYmFjaygpOworICAgICAgICBFWFBFQ1RfRVEoY2h1bmssICIgYSBzaW1wbGUgdGVzdC4iKTsK
KworICAgICAgICBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZ1dpdGhM
YXRpbjFGYWxsYmFjaygpOworICAgICAgICBFWFBFQ1RfVFJVRShjaHVuay5pc051bGwoKSk7Cisg
ICAgfTsKKyAgICBhdXRvIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHNpbXBs
ZVRleHQsIHN0cmxlbihzaW1wbGVUZXh0KSk7CisgICAgY2hlY2soc2hhcmVkQnVmZmVyKTsKKwor
ICAgIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBzdHJsZW4oc2ltcGxlVGV4dCk7IGkrKykKKyAgICAgICAgc2hhcmVkQnVm
ZmVyLT5hcHBlbmQoJnNpbXBsZVRleHRbaV0sIDEpOworICAgIGNoZWNrKHNoYXJlZEJ1ZmZlcik7
CisKKyAgICBzaGFyZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZSgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgc3RybGVuKHNpbXBsZVRleHQpOyBpICs9IDIpCisgICAgICAgIHNo
YXJlZEJ1ZmZlci0+YXBwZW5kKCZzaW1wbGVUZXh0W2ldLCAyKTsKKyAgICBFWFBFQ1RfRVEoc2hh
cmVkQnVmZmVyLT5zaXplKCksIHN0cmxlbihzaW1wbGVUZXh0KSk7CisgICAgY2hlY2soc2hhcmVk
QnVmZmVyKTsKK30KKworVEVTVF9GKFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyVGVzdCwgcmVhZEFs
bENodW5rc0luTXVsdGlTZWdtZW50KQoreworICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRl
eHQgPSAiVGhpcyBpcyB0aGUgbW9zdCByaWRpY3Vsb3VzIGhpc3RvcnkgdGhlcmUgaXMuIjsKKyAg
ICBhdXRvIGNoZWNrID0gW10oU2hhcmVkQnVmZmVyJiBzaGFyZWRCdWZmZXIpIHsKKyAgICAgICAg
c3RkOjp2ZWN0b3I8U3RyaW5nPiBjaHVua3M7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4
cGVjdGVkQ2h1bmtzMVdpdGhvdXRTZXBhcmF0b3JbXSA9IHsgIlRoIiwgInMgIiwgInMgdGhlIG1v
c3QgciIsICJkIiwgImN1bG91cyBoIiwgInN0b3J5IHRoZXJlICIsICJzLiIgfTsKKyAgICAgICAg
cmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIsICJpIik7CisgICAgICAgIEVYUEVD
VF9UUlVFKGNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MxV2l0aG91dFNlcGFyYXRv
ciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzMVdpdGhvdXRTZXBhcmF0b3IpKSk7CisKKyAgICAg
ICAgY2h1bmtzLmNsZWFyKCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1
bmtzMVdpdGhTZXBhcmF0b3JbXSA9IHsgIlRoaSIsICJzIGkiLCAicyB0aGUgbW9zdCByaSIsICJk
aSIsICJjdWxvdXMgaGkiLCAic3RvcnkgdGhlcmUgaSIsICJzLiIgfTsKKyAgICAgICAgcmVhZEFs
bENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIsICJpIiwgdHJ1ZSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKGNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MxV2l0aFNlcGFyYXRvciwg
YXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzMVdpdGhTZXBhcmF0b3IpKSk7CisKKyAgICAgICAgY2h1
bmtzLmNsZWFyKCk7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtzMldp
dGhvdXRTZXBhcmF0b3JbXSA9IHsgIlRoIiwgIiAiLCAiIHRoZSBtb3N0IHJpZGljdWxvdXMgaCIs
ICJ0b3J5IHRoZXJlICIsICIuIiB9OworICAgICAgICByZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNo
YXJlZEJ1ZmZlciwgImlzIik7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoZWNrQ2h1bmtzKGNodW5r
cywgZXhwZWN0ZWRDaHVua3MyV2l0aG91dFNlcGFyYXRvciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1
bmtzMldpdGhvdXRTZXBhcmF0b3IpKSk7CisKKyAgICAgICAgY2h1bmtzLmNsZWFyKCk7CisgICAg
ICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtzMldpdGhTZXBhcmF0b3JbXSA9IHsg
IlRoaXMiLCAiIGlzIiwgIiB0aGUgbW9zdCByaWRpY3Vsb3VzIGhpcyIsICJ0b3J5IHRoZXJlIGlz
IiwgIi4iIH07CisgICAgICAgIHJlYWRBbGxDaHVua3MoJmNodW5rcywgc2hhcmVkQnVmZmVyLCAi
aXMiLCB0cnVlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hlY2tDaHVua3MoY2h1bmtzLCBleHBl
Y3RlZENodW5rczJXaXRoU2VwYXJhdG9yLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVua3MyV2l0aFNl
cGFyYXRvcikpKTsKKworICAgICAgICBjaHVua3MuY2xlYXIoKTsKKyAgICAgICAgY29uc3QgY2hh
ciogY29uc3QgZXhwZWN0ZWRDaHVua3MzV2l0aG91dFNlcGFyYXRvcltdID0geyAiVGhpcyBpcyB0
aGUgbW9zdCByaWRpY3Vsb3VzIGgiLCAib3J5IHRoZXJlIGlzLiIgfTsKKyAgICAgICAgcmVhZEFs
bENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIsICJpc3QiKTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoY2hlY2tDaHVua3MoY2h1bmtzLCBleHBlY3RlZENodW5rczNXaXRob3V0U2VwYXJhdG9yLCBh
cnJheXNpemUoZXhwZWN0ZWRDaHVua3MzV2l0aG91dFNlcGFyYXRvcikpKTsKKworICAgICAgICBj
aHVua3MuY2xlYXIoKTsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3Mz
V2l0aFNlcGFyYXRvcltdID0geyAiVGhpcyBpcyB0aGUgbW9zdCByaWRpY3Vsb3VzIGhpc3QiLCAi
b3J5IHRoZXJlIGlzLiIgfTsKKyAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRC
dWZmZXIsICJpc3QiLCB0cnVlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hlY2tDaHVua3MoY2h1
bmtzLCBleHBlY3RlZENodW5rczNXaXRoU2VwYXJhdG9yLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVu
a3MzV2l0aFNlcGFyYXRvcikpKTsKKyAgICB9OworICAgIGF1dG8gc2hhcmVkQnVmZmVyID0gU2hh
cmVkQnVmZmVyOjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpKTsKKyAgICBj
aGVjayhzaGFyZWRCdWZmZXIpOworICAgIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3Jl
YXRlKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJsZW4oc2ltcGxlVGV4dCk7IGkr
KykKKyAgICAgICAgc2hhcmVkQnVmZmVyLT5hcHBlbmQoJnNpbXBsZVRleHRbaV0sIDEpOworICAg
IEVYUEVDVF9FUShzaGFyZWRCdWZmZXItPnNpemUoKSwgc3RybGVuKHNpbXBsZVRleHQpKTsKKyAg
ICBjaGVjayhzaGFyZWRCdWZmZXIpOworCisgICAgc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmxlbihzaW1wbGVUZXh0
KTsgaSArPSA1KQorICAgICAgICBzaGFyZWRCdWZmZXItPmFwcGVuZCgmc2ltcGxlVGV4dFtpXSwg
NSk7CisgICAgRVhQRUNUX0VRKHNoYXJlZEJ1ZmZlci0+c2l6ZSgpLCBzdHJsZW4oc2ltcGxlVGV4
dCkpOworICAgIGNoZWNrKHNoYXJlZEJ1ZmZlcik7Cit9CisKK1RFU1RfRihTaGFyZWRCdWZmZXJD
aHVua1JlYWRlclRlc3QsIGNoYW5naW5nSXRlcmF0b3IpCit7CisgICAgeworICAgICAgICBjb25z
dCBjaGFyKiBjb25zdCBzaW1wbGVUZXh0ID0gIlRoaXMgaXMgdGhlIG1vc3QgcmlkaWN1bG91cyBo
aXN0b3J5IHRoZXJlIGlzLiI7CisgICAgICAgIGF1dG8gc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVm
ZmVyOjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpKTsKKyAgICAgICAgU2hh
cmVkQnVmZmVyQ2h1bmtSZWFkZXIgY2h1bmtSZWFkZXIoc2hhcmVkQnVmZmVyLnB0cigpLCAiaXMi
KTsKKyAgICAgICAgU3RyaW5nIGNodW5rID0gY2h1bmtSZWFkZXIubmV4dENodW5rQXNVVEY4U3Ry
aW5nV2l0aExhdGluMUZhbGxiYWNrKCk7CisgICAgICAgIEVYUEVDVF9FUShjaHVuaywgIlRoIik7
CisKKyAgICAgICAgY2h1bmsgPSBjaHVua1JlYWRlci5uZXh0Q2h1bmtBc1VURjhTdHJpbmdXaXRo
TGF0aW4xRmFsbGJhY2soKTsKKyAgICAgICAgRVhQRUNUX0VRKGNodW5rLCAiICIpOworCisgICAg
ICAgIGNodW5rUmVhZGVyLnNldFNlcGFyYXRvcigiaGUiKTsKKyAgICAgICAgY2h1bmsgPSBjaHVu
a1JlYWRlci5uZXh0Q2h1bmtBc1VURjhTdHJpbmdXaXRoTGF0aW4xRmFsbGJhY2soKTsKKyAgICAg
ICAgRVhQRUNUX0VRKGNodW5rLCAiIHQiKTsKKworICAgICAgICBjaHVuayA9IGNodW5rUmVhZGVy
Lm5leHRDaHVua0FzVVRGOFN0cmluZ1dpdGhMYXRpbjFGYWxsYmFjaygpOworICAgICAgICBFWFBF
Q1RfRVEoY2h1bmssICIgbW9zdCByaWRpY3Vsb3VzIGhpc3RvcnkgdCIpOworCisgICAgICAgIC8v
IFNldCBhIG5vbiBleGlzdGluZyBzZXBhcmF0b3IuCisgICAgICAgIGNodW5rUmVhZGVyLnNldFNl
cGFyYXRvcigidGNoaW50YSIpOworICAgICAgICBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVu
a0FzVVRGOFN0cmluZ1dpdGhMYXRpbjFGYWxsYmFjaygpOworICAgICAgICBFWFBFQ1RfRVEoY2h1
bmssICJyZSBpcy4iKTsKKworICAgICAgICAvLyBXZSBzaG91bGQgYmUgYXQgdGhlIGVuZCBvZiB0
aGUgc3RyaW5nLCBzbyBhbnkgc3Vic2VxdWVudCBjYWxsIHRvIG5leHRDaHVuayBzaG91bGQgcmV0
dXJuIG51bGwuCisgICAgICAgIGNodW5rUmVhZGVyLnNldFNlcGFyYXRvcigiLiIpOworICAgICAg
ICBjaHVuayA9IGNodW5rUmVhZGVyLm5leHRDaHVua0FzVVRGOFN0cmluZ1dpdGhMYXRpbjFGYWxs
YmFjayh0cnVlKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2h1bmsuaXNOdWxsKCkpOworICAgIH0K
KworICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc2ltcGxlVGV4dCA9ICJkb2ciOwor
ICAgICAgICBhdXRvIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHNpbXBsZVRl
eHQsIHN0cmxlbihzaW1wbGVUZXh0KSk7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IGV4cGVj
dGVkQ2h1bmtzV2l0aG91dFNlcGFyYXRvcltdID0geyAiIiB9OworICAgICAgICBzdGQ6OnZlY3Rv
cjxTdHJpbmc+IGNodW5rczsKKyAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRC
dWZmZXIsICJkb2ciKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoY2hlY2tDaHVua3MoY2h1bmtzLCBl
eHBlY3RlZENodW5rc1dpdGhvdXRTZXBhcmF0b3IsIGFycmF5c2l6ZShleHBlY3RlZENodW5rc1dp
dGhvdXRTZXBhcmF0b3IpKSk7CisKKyAgICAgICAgY2h1bmtzLmNsZWFyKCk7CisgICAgICAgIGNv
bnN0IGNoYXIqIGNvbnN0IGV4cGVjdGVkQ2h1bmtzV2l0aFNlcGFyYXRvcltdID0geyAiZG9nIiB9
OworICAgICAgICByZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNoYXJlZEJ1ZmZlciwgImRvZyIsIHRy
dWUpOworICAgICAgICBFWFBFQ1RfVFJVRShjaGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1
bmtzV2l0aFNlcGFyYXRvciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzV2l0aFNlcGFyYXRvcikp
KTsKKyAgICB9CisKKyAgICAvLyBFbmRzIHdpdGggcmVwZWF0ZWQgc2VwYXJhdG9ycy4KKyAgICB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQgPSAiQmVhdWNvdXAgZGUgY2hh
dHMgY2F0Y2F0Y2F0Y2F0Y2F0IjsKKyAgICAgICAgYXV0byBzaGFyZWRCdWZmZXIgPSBTaGFyZWRC
dWZmZXI6OmNyZWF0ZShzaW1wbGVUZXh0LCBzdHJsZW4oc2ltcGxlVGV4dCkpOworICAgICAgICBj
b25zdCBjaGFyKiBjb25zdCBleHBlY3RlZENodW5rc1dpdGhvdXRTZXBhcmF0b3JbXSA9IHsgIkJl
YXVjb3VwIGRlIGNoYXRzICIsICIiLCAiIiwgIiIsICIiIH07CisgICAgICAgIHN0ZDo6dmVjdG9y
PFN0cmluZz4gY2h1bmtzOworICAgICAgICByZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNoYXJlZEJ1
ZmZlciwgImNhdCIpOworICAgICAgICBFWFBFQ1RfVFJVRShjaGVja0NodW5rcyhjaHVua3MsIGV4
cGVjdGVkQ2h1bmtzV2l0aG91dFNlcGFyYXRvciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzV2l0
aG91dFNlcGFyYXRvcikpKTsKKworICAgICAgICBjaHVua3MuY2xlYXIoKTsKKyAgICAgICAgY29u
c3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NXaXRoU2VwYXJhdG9yW10gPSB7ICJCZWF1Y291
cCBkZSBjaGF0cyBjYXQiLCAiY2F0IiwgImNhdCIsICJjYXQiLCAiY2F0IiB9OworICAgICAgICBy
ZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNoYXJlZEJ1ZmZlciwgImNhdCIsIHRydWUpOworICAgICAg
ICBFWFBFQ1RfVFJVRShjaGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1bmtzV2l0aFNlcGFy
YXRvciwgYXJyYXlzaXplKGV4cGVjdGVkQ2h1bmtzV2l0aFNlcGFyYXRvcikpKTsKKyAgICB9Cisg
ICAgeworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBzaW1wbGVUZXh0ID0gIlRoaXMgaXMgYSBz
aW1wbGUgdGVzdC5cclxuTm90aGluZyBzcGVjaWFsLlxyXG4iOworICAgICAgICBjb25zdCBjaGFy
KiBjb25zdCBleHBlY3RlZENodW5rc1tdID0geyAiVGhpcyBpcyBhIHNpbXBsZSB0ZXN0LiIsICJO
b3RoaW5nIHNwZWNpYWwuIiB9OworICAgICAgICBhdXRvIHNoYXJlZEJ1ZmZlciA9IFNoYXJlZEJ1
ZmZlcjo6Y3JlYXRlKHNpbXBsZVRleHQsIHN0cmxlbihzaW1wbGVUZXh0KSk7CisgICAgICAgIHN0
ZDo6dmVjdG9yPFN0cmluZz4gY2h1bmtzOworICAgICAgICByZWFkQWxsQ2h1bmtzKCZjaHVua3Ms
IHNoYXJlZEJ1ZmZlcik7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoZWNrQ2h1bmtzKGNodW5rcywg
ZXhwZWN0ZWRDaHVua3MsIGFycmF5c2l6ZShleHBlY3RlZENodW5rcykpKTsKKyAgICB9CisKKyAg
ICB7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQgPSAiVGhpcyBpcyBhIHNp
bXBsZSB0ZXN0LlxyXG5Ob3RoaW5nIHNwZWNpYWwuIjsKKyAgICAgICAgY29uc3QgY2hhciogY29u
c3QgZXhwZWN0ZWRDaHVua3NbXSA9IHsgIlRoaXMgaXMgYSBzaW1wbGUgdGVzdC4iLCAiTm90aGlu
ZyBzcGVjaWFsLiIgfTsKKyAgICAgICAgYXV0byBzaGFyZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6
OmNyZWF0ZShzaW1wbGVUZXh0LCBzdHJsZW4oc2ltcGxlVGV4dCkpOworCisgICAgICAgIHN0ZDo6
dmVjdG9yPFN0cmluZz4gY2h1bmtzOworICAgICAgICByZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNo
YXJlZEJ1ZmZlcik7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoZWNrQ2h1bmtzKGNodW5rcywgZXhw
ZWN0ZWRDaHVua3MsIGFycmF5c2l6ZShleHBlY3RlZENodW5rcykpKTsKKyAgICB9CisKKyAgICB7
CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQgPSAiU2ltcGxlIGxpbmUgd2l0
aCBubyBFT0wuIjsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NbXSA9
IHsgIlNpbXBsZSBsaW5lIHdpdGggbm8gRU9MLiIgfTsKKyAgICAgICAgYXV0byBzaGFyZWRCdWZm
ZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzaW1wbGVUZXh0LCBzdHJsZW4oc2ltcGxlVGV4dCkp
OworCisgICAgICAgIHN0ZDo6dmVjdG9yPFN0cmluZz4gY2h1bmtzOworICAgICAgICByZWFkQWxs
Q2h1bmtzKCZjaHVua3MsIHNoYXJlZEJ1ZmZlcik7CisgICAgICAgIEVYUEVDVF9UUlVFKGNoZWNr
Q2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MsIGFycmF5c2l6ZShleHBlY3RlZENodW5rcykp
KTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNpbXBsZVRleHQg
PSAiTGluZSB0aGF0IGhhcyBhIEVPTFxyXG5hbmQgdGhlbiBlbmRzIHdpdGggYSBDUlxyIjsKKyAg
ICAgICAgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3NbXSA9IHsgIkxpbmUgdGhhdCBo
YXMgYSBFT0wiLCAiYW5kIHRoZW4gZW5kcyB3aXRoIGEgQ1JcciIgfTsKKyAgICAgICAgYXV0byBz
aGFyZWRCdWZmZXIgPSBTaGFyZWRCdWZmZXI6OmNyZWF0ZShzaW1wbGVUZXh0LCBzdHJsZW4oc2lt
cGxlVGV4dCkpOworCisgICAgICAgIHN0ZDo6dmVjdG9yPFN0cmluZz4gY2h1bmtzOworICAgICAg
ICByZWFkQWxsQ2h1bmtzKCZjaHVua3MsIHNoYXJlZEJ1ZmZlcik7CisgICAgICAgIEVYUEVDVF9U
UlVFKGNoZWNrQ2h1bmtzKGNodW5rcywgZXhwZWN0ZWRDaHVua3MsIGFycmF5c2l6ZShleHBlY3Rl
ZENodW5rcykpKTsKKyAgICB9CisKKyAgICB7CisgICAgICAgIGNvbnN0IGNoYXIqIGNvbnN0IHNp
bXBsZVRleHQgPSAiUmVwZWF0ZWQgQ1JzIHNob3VsZCBub3QgY2F1c2UgcHJvYmVtc1xyXHJcclxu
U2hvdWxuJ3QgdGhleT8iOworICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBleHBlY3RlZENodW5r
c1tdID0geyAiUmVwZWF0ZWQgQ1JzIHNob3VsZCBub3QgY2F1c2UgcHJvYmVtc1xyXHIiLCAiU2hv
dWxuJ3QgdGhleT8iIH07CisgICAgICAgIGF1dG8gc2hhcmVkQnVmZmVyID0gU2hhcmVkQnVmZmVy
OjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBsZVRleHQpKTsKKworICAgICAgICBzdGQ6
OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKKyAgICAgICAgcmVhZEFsbENodW5rcygmY2h1bmtzLCBz
aGFyZWRCdWZmZXIpOworICAgICAgICBFWFBFQ1RfVFJVRShjaGVja0NodW5rcyhjaHVua3MsIGV4
cGVjdGVkQ2h1bmtzLCBhcnJheXNpemUoZXhwZWN0ZWRDaHVua3MpKSk7CisgICAgfQorICAgIHsK
KyAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc2ltcGxlVGV4dCA9ICJFT0xcclxuIGJldHdlXHJc
bmVuIHNlZ21lbnRzIjsKKyAgICAgICAgY29uc3QgY2hhciogY29uc3QgZXhwZWN0ZWRDaHVua3Nb
XSA9IHsgIkVPTCIsICIgYmV0d2UiLCAiZW4gc2VnbWVudHMiIH07CisgICAgICAgIGF1dG8gc2hh
cmVkQnVmZmVyID0gU2hhcmVkQnVmZmVyOjpjcmVhdGUoc2ltcGxlVGV4dCwgc3RybGVuKHNpbXBs
ZVRleHQpKTsKKworICAgICAgICBzdGQ6OnZlY3RvcjxTdHJpbmc+IGNodW5rczsKKyAgICAgICAg
cmVhZEFsbENodW5rcygmY2h1bmtzLCBzaGFyZWRCdWZmZXIpOworICAgICAgICBFWFBFQ1RfVFJV
RShjaGVja0NodW5rcyhjaHVua3MsIGV4cGVjdGVkQ2h1bmtzLCBhcnJheXNpemUoZXhwZWN0ZWRD
aHVua3MpKSk7CisgICAgfQorfQorI2VuZGlmCisKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9TaGFyZWRCdWZmZXJUZXN0LmggYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYkNvcmUvU2hhcmVkQnVmZmVyVGVzdC5oCmluZGV4IGU1ZDkwOTM1ZDNj
Y2M4NmQ1NmM1NTI2YmFjMjQzZTMzZDhlNmM0Y2QuLjY0MDExOWJkZTZmY2U0MWYwMWVhYWI2MzE2
ODQ3YmU1NmI5MGNmNWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9TaGFyZWRCdWZmZXJUZXN0LmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJDb3JlL1NoYXJlZEJ1ZmZlclRlc3QuaApAQCAtNDMsNCArNDMsOSBAQCBwcml2YXRlOgogICAg
IFN0cmluZyBtX3RlbXBFbXB0eUZpbGVQYXRoOwogfTsKIAorI2lmIEVOQUJMRShNSFRNTCkKK2Ns
YXNzIFNoYXJlZEJ1ZmZlckNodW5rUmVhZGVyVGVzdCA6IHB1YmxpYyB0ZXN0aW5nOjpUZXN0IHsK
K307CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgVGVzdFdlYktpdEFQSQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>