<?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>109554</bug_id>
          
          <creation_ts>2013-02-12 01:57:39 -0800</creation_ts>
          <short_desc>Web Inspector: Native Memory Instrumentation: reportLeaf method doesn&apos;t report the leaf node properly.</short_desc>
          <delta_ts>2013-03-01 02:53:26 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>109746</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ilya Tikhonovsky">loislo</reporter>
          <assigned_to name="Ilya Tikhonovsky">loislo</assigned_to>
          <cc>alecflett</cc>
    
    <cc>apavlov</cc>
    
    <cc>buildbot</cc>
    
    <cc>jberlin</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rniwa</cc>
    
    <cc>vsevik</cc>
    
    <cc>web-inspector-bugs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>830712</commentid>
    <comment_count>0</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-12 01:57:39 -0800</bug_when>
    <thetext>I found that HeapGraphSerializer doesn&apos;t report the node for the leaf if the leaf has no pointer.
It happens when addPrivateBuffer is calling.
It was hard to detect the root of problem because there were no unit tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830751</commentid>
    <comment_count>1</comment_count>
      <attachid>187821</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-12 03:17:22 -0800</bug_when>
    <thetext>Created attachment 187821
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830796</commentid>
    <comment_count>2</comment_count>
      <attachid>187821</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2013-02-12 05:10:46 -0800</bug_when>
    <thetext>Comment on attachment 187821
Patch

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

&gt; Source/WebCore/ChangeLog:6
&gt; +        In some cases leafs have no pointer so with the old schema we can&apos;t generate nodeId for them because we

leafs -&gt; leaves

&gt; Source/WebCore/inspector/HeapGraphSerializer.h:46
&gt; +class HeapGraphSerializerClient {

Turn it into inner class?

&gt; Source/WebCore/inspector/InspectorMemoryAgent.cpp:346
&gt; +    } frontendWrapper(m_frontend);

This way frontendWrapper will be destroyed before graphSerializer.

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:42
&gt; +namespace {

This should be namespace TestWebKitAPI for consistency.

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:52
&gt; +        m_currentPointer = 0;

Move this into the initializers list.

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:57
&gt; +        m_heapSnapshotChunk = heapSnapshotChunk;

Do you expect more than one chunk? If not there should be an assert for this.

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:85
&gt; +    void* addNode(const char* className, const char* name, bool isRoot)

Looks like this and next method should go into a separate class, can you extract them?

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:113
&gt; +        RefPtr&lt;InspectorObject&gt; chunk = *reinterpret_cast&lt;RefPtr&lt;InspectorObject&gt;*&gt;(&amp;m_heapSnapshotChunk);

Wouldn&apos;t RefPtr&lt;InspectorObject&gt; chunk = m_heapSnapshotChunk; work? Or probably we can use m_heapSnapshotChunk directly?

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:122
&gt; +        return chunkPart(partName)-&gt;toJSONString().replace(&quot;\&quot;&quot;, &quot;&apos;&quot;);

Why do you need to change the &quot; to &apos; ?

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:141
&gt; +    String node(unsigned nodeIndex)

nodeToString?

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:154
&gt; +    String edge(unsigned edgeOrdinal)

edgeToString?

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:211
&gt; +    EXPECT_EQ(String(&quot;[&apos;&apos;,&apos;weak&apos;,&apos;ownRef&apos;,&apos;countRef&apos;,&apos;unknown&apos;,&apos;Root&apos;]&quot;), receiver.dumpLastChunkStrings());

ownRef -&gt; ownPtr, countRef -&gt; refPtr?

&gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:257
&gt; +TEST(HeapGraphSerializerTest, hashSetWithTwoItems)

hashSetWithTwoItems -&gt; hashSetWithTwoStrings</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>830904</commentid>
    <comment_count>3</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-12 06:55:20 -0800</bug_when>
    <thetext>Committed r142618: &lt;http://trac.webkit.org/changeset/142618&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831010</commentid>
    <comment_count>4</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-02-12 09:31:13 -0800</bug_when>
    <thetext>This broke the mac build in a bunch of ways, some of which are:

1. You added the wrong file to the Xcode project (HeapGraphGeneratorTest.cpp instead of HeapGraphSerializerTest.cpp)
2. You used the same unique ID for every place a UID was used.
3. You attempted to use headers from WebCore and WTF without marking them as Private headers to be copied

I am going to roll out this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831012</commentid>
    <comment_count>5</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-02-12 09:32:14 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; This broke the mac build in a bunch of ways, some of which are:
&gt; 
&gt; 1. You added the wrong file to the Xcode project (HeapGraphGeneratorTest.cpp instead of HeapGraphSerializerTest.cpp)
&gt; 2. You used the same unique ID for every place a UID was used.
&gt; 3. You attempted to use headers from WebCore and WTF without marking them as Private headers to be copied
&gt; 
&gt; I am going to roll out this patch.

Note: all of these should have been caught if you had waiting for the Mac EWS to finish. Is there a reason you didn’t?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831022</commentid>
    <comment_count>6</comment_count>
    <who name="Jessie Berlin">jberlin</who>
    <bug_when>2013-02-12 09:40:40 -0800</bug_when>
    <thetext>Rolled it out in http://trac.webkit.org/changeset/142637</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831118</commentid>
    <comment_count>7</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-12 11:35:58 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; This broke the mac build in a bunch of ways, some of which are:
&gt; &gt; 
&gt; &gt; 1. You added the wrong file to the Xcode project (HeapGraphGeneratorTest.cpp instead of HeapGraphSerializerTest.cpp)
&gt; &gt; 2. You used the same unique ID for every place a UID was used.
&gt; &gt; 3. You attempted to use headers from WebCore and WTF without marking them as Private headers to be copied
&gt; &gt; 
&gt; &gt; I am going to roll out this patch.
&gt; 
&gt; Note: all of these should have been caught if you had waiting for the Mac EWS to finish. Is there a reason you didn’t?

The compilation on Mac was broken since yesterday.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831663</commentid>
    <comment_count>8</comment_count>
      <attachid>187821</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-12 23:13:58 -0800</bug_when>
    <thetext>Comment on attachment 187821
Patch

Attachment 187821 did not pass mac-wk2-ews (mac-wk2):
Output: http://queues.webkit.org/results/16515649</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831830</commentid>
    <comment_count>9</comment_count>
      <attachid>188061</attachid>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-13 05:18:05 -0800</bug_when>
    <thetext>Created attachment 188061
for trybots</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831898</commentid>
    <comment_count>10</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-13 07:32:09 -0800</bug_when>
    <thetext>Committed r142747: &lt;http://trac.webkit.org/changeset/142747&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>831902</commentid>
    <comment_count>11</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-13 07:35:42 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 187821 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=187821&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:6
&gt; &gt; +        In some cases leafs have no pointer so with the old schema we can&apos;t generate nodeId for them because we
&gt; 
&gt; leafs -&gt; leaves

done

&gt; 
&gt; &gt; Source/WebCore/inspector/HeapGraphSerializer.h:46
&gt; &gt; +class HeapGraphSerializerClient {
&gt; 
&gt; Turn it into inner class?

done

&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorMemoryAgent.cpp:346
&gt; &gt; +    } frontendWrapper(m_frontend);
&gt; 
&gt; This way frontendWrapper will be destroyed before graphSerializer.

done

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:42
&gt; &gt; +namespace {
&gt; 
&gt; This should be namespace TestWebKitAPI for consistency.

done

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:52
&gt; &gt; +        m_currentPointer = 0;
&gt; 
&gt; Move this into the initializers list.

done 

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:57
&gt; &gt; +        m_heapSnapshotChunk = heapSnapshotChunk;
&gt; 
&gt; Do you expect more than one chunk? If not there should be an assert for this.

done 

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:85
&gt; &gt; +    void* addNode(const char* className, const char* name, bool isRoot)
&gt; 
&gt; Looks like this and next method should go into a separate class, can you extract them?

done

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:113
&gt; &gt; +        RefPtr&lt;InspectorObject&gt; chunk = *reinterpret_cast&lt;RefPtr&lt;InspectorObject&gt;*&gt;(&amp;m_heapSnapshotChunk);
&gt; 
&gt; Wouldn&apos;t RefPtr&lt;InspectorObject&gt; chunk = m_heapSnapshotChunk; work? Or probably we can use m_heapSnapshotChunk directly?

No we wouldn&apos;t. HeapSnapshotChunk inherits InspectorObjectBase so we can&apos;t simply assign it and
the methods of InspectorObjectBase are not public.


&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:122
&gt; &gt; +        return chunkPart(partName)-&gt;toJSONString().replace(&quot;\&quot;&quot;, &quot;&apos;&quot;);
&gt; 
&gt; Why do you need to change the &quot; to &apos; ?

it is a simply hack for better readability of the source code. Without it I need to escape &quot; symbol in the expectations.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:141
&gt; &gt; +    String node(unsigned nodeIndex)
&gt; 
&gt; nodeToString?

done

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:154
&gt; &gt; +    String edge(unsigned edgeOrdinal)
&gt; 
&gt; edgeToString?

done

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:211
&gt; &gt; +    EXPECT_EQ(String(&quot;[&apos;&apos;,&apos;weak&apos;,&apos;ownRef&apos;,&apos;countRef&apos;,&apos;unknown&apos;,&apos;Root&apos;]&quot;), receiver.dumpLastChunkStrings());
&gt; 
&gt; ownRef -&gt; ownPtr, countRef -&gt; refPtr?

Actually the current names and the suggested names are not good.
But in any case it should be a part of a separate patch.

&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebCore/HeapGraphSerializerTest.cpp:257
&gt; &gt; +TEST(HeapGraphSerializerTest, hashSetWithTwoItems)
&gt; 
&gt; hashSetWithTwoItems -&gt; hashSetWithTwoStrings

done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832309</commentid>
    <comment_count>12</comment_count>
    <who name="Alec Flett">alecflett</who>
    <bug_when>2013-02-13 13:52:45 -0800</bug_when>
    <thetext>Heads up: this *may* have broken the component build, at least for TestWebKitAPI and may get rolled out soonish. Hop on #webkit or #chromium.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>832318</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-13 14:01:03 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 109746</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835240</commentid>
    <comment_count>14</comment_count>
    <who name="Ilya Tikhonovsky">loislo</who>
    <bug_when>2013-02-18 01:56:22 -0800</bug_when>
    <thetext>Committed r143175: &lt;http://trac.webkit.org/changeset/143175&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>844998</commentid>
    <comment_count>15</comment_count>
      <attachid>188061</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2013-03-01 02:53:26 -0800</bug_when>
    <thetext>Comment on attachment 188061
for trybots

Cleared review? from attachment 188061 so that this bug does not appear in http://webkit.org/pending-review.  If you would like this patch reviewed, please attach it to a new bug (or re-open this bug before marking it for review again).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>187821</attachid>
            <date>2013-02-12 03:17:22 -0800</date>
            <delta_ts>2013-02-12 23:13:58 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-109554-20130212151352.patch</filename>
            <type>text/plain</type>
            <size>23798</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNDQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZTc4OTM3ZmMxMDc5YWM1
MTMyN2FiNWFmNTI1ZTAzMTM3NjVmNWYwMC4uZDExMGY5Mzk2NDYxZGFkYmFjODU4YTg3M2ViMjI1
YjVkYzVkYmEwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMxIEBACitvMjAxMy0wMi0xMiAgSWx5
YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTmF0aXZlIE1lbW9yeSBJbnN0cnVtZW50YXRpb246IHJlcG9ydExlYWYgbWV0aG9kIGRv
ZXNuJ3QgcmVwb3J0IHRoZSBsZWFmIG5vZGUgcHJvcGVybHkuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk1NTQKKworICAgICAgICBJbiBzb21lIGNh
c2VzIGxlYWZzIGhhdmUgbm8gcG9pbnRlciBzbyB3aXRoIHRoZSBvbGQgc2NoZW1hIHdlIGNhbid0
IGdlbmVyYXRlIG5vZGVJZCBmb3IgdGhlbSBiZWNhdXNlIHdlCisgICAgICAgIGNhbid0IGluc2Vy
dCAwIGludG8gaGFzaG1hcC4gSXQgaGFwcGVucyB3aGVuIHdlIGNhbGwgYWRkUHJpdmF0ZUJ1ZmZl
ciBtZXRob2QuCisKKyAgICAgICAgRHJpdmUgYnkgZml4OiBJIGludHJvZHVjZWQgYSBjbGllbnQg
aW50ZXJmYWNlIGZvciB0aGUgSGVhcEdyYXBoU2VyaWFsaXplci4KKyAgICAgICAgSXQgaGVscHMg
bWUgdG8gZG8gdGhlIHRlc3RzIGZvciB0aGUgc2VyaWFsaXplci4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJdCBpcyBjb3ZlcmVkIGJ5IG5ld2x5IGFk
ZGVkIHRlc3RzIGluIFRlc3RXZWJLaXRBUEkuCisKKyAgICAgICAgKiBpbnNwZWN0b3IvSGVhcEdy
YXBoU2VyaWFsaXplci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVy
OjpIZWFwR3JhcGhTZXJpYWxpemVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNlcmlh
bGl6ZXI6OnB1c2hVcGRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdyYXBoU2VyaWFsaXpl
cjo6cmVwb3J0Tm9kZSk6CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVyOjp0
b05vZGVJZCk6CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVyOjphZGRSb290
Tm9kZSk6CisgICAgICAgICogaW5zcGVjdG9yL0hlYXBHcmFwaFNlcmlhbGl6ZXIuaDoKKyAgICAg
ICAgKEhlYXBHcmFwaFNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdy
YXBoU2VyaWFsaXplckNsaWVudDo6fkhlYXBHcmFwaFNlcmlhbGl6ZXJDbGllbnQpOgorICAgICAg
ICAoSGVhcEdyYXBoU2VyaWFsaXplcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvck1l
bW9yeUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck1lbW9yeUFnZW50Ojpn
ZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9uSW1wbCk6CisKIDIwMTMtMDItMTEgIEpvaG4gSi4g
QmFydG9uICA8am9obmpiYXJ0b25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0
b3I6IERvbid0IHRocm93IGV4Y2VwdGlvbnMgaW4gV2ViSW5zcGVjdG9yLkNvbG9yCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5jcHAKaW5kZXggMTQ3
OTUxN2IzMzYyYjllM2ViZDhjYzZlYjYwZTYwMjExOWU3NWE0NS4uOWQ5Zjk5MTU3NjAyNmZlZmFl
Mzk4NmIwODNjYjI2MTY3OTU2NGYxMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0hlYXBHcmFwaFNlcmlhbGl6ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9IZWFwR3JhcGhTZXJpYWxpemVyLmNwcApAQCAtNDMsMTUgKzQzLDE2IEBACiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAotSGVhcEdyYXBoU2VyaWFsaXplcjo6SGVhcEdyYXBoU2VyaWFsaXplcihJ
bnNwZWN0b3JGcm9udGVuZDo6TWVtb3J5KiBmcm9udGVuZCkKLSAgICA6IG1fZnJvbnRlbmQoZnJv
bnRlbmQpCitIZWFwR3JhcGhTZXJpYWxpemVyOjpIZWFwR3JhcGhTZXJpYWxpemVyKEhlYXBHcmFw
aFNlcmlhbGl6ZXJDbGllbnQqIGNsaWVudCkKKyAgICA6IG1fY2xpZW50KGNsaWVudCkKICAgICAs
IG1fc3RyaW5ncyhTdHJpbmdzOjpjcmVhdGUoKSkKICAgICAsIG1fZWRnZXMoRWRnZXM6OmNyZWF0
ZSgpKQogICAgICwgbV9ub2RlRWRnZXNDb3VudCgwKQogICAgICwgbV9ub2RlcyhOb2Rlczo6Y3Jl
YXRlKCkpCiAgICAgLCBtX2Jhc2VUb1JlYWxOb2RlSWRNYXAoQmFzZVRvUmVhbE5vZGVJZE1hcDo6
Y3JlYXRlKCkpCisgICAgLCBtX2xlYWZDb3VudCgwKQogewotICAgIEFTU0VSVChtX2Zyb250ZW5k
KTsKKyAgICBBU1NFUlQobV9jbGllbnQpOwogICAgIG1fc3RyaW5ncy0+YWRkSXRlbShTdHJpbmco
KSk7IC8vIEFuIGVtcHR5IHN0cmluZyB3aXRoIDAgaW5kZXguCiAKICAgICBtZW1zZXQobV9lZGdl
VHlwZXMsIDAsIHNpemVvZihtX2VkZ2VUeXBlcykpOwpAQCAtOTEsNyArOTIsNyBAQCB2b2lkIEhl
YXBHcmFwaFNlcmlhbGl6ZXI6OnB1c2hVcGRhdGUoKQogICAgICAgICAuc2V0RWRnZXMobV9lZGdl
cy5yZWxlYXNlKCkpCiAgICAgICAgIC5zZXRCYXNlVG9SZWFsTm9kZUlkKG1fYmFzZVRvUmVhbE5v
ZGVJZE1hcC5yZWxlYXNlKCkpOwogCi0gICAgbV9mcm9udGVuZC0+YWRkTmF0aXZlU25hcHNob3RD
aHVuayhjaHVuayk7CisgICAgbV9jbGllbnQtPmFkZE5hdGl2ZVNuYXBzaG90Q2h1bmsoY2h1bmsu
cmVsZWFzZSgpKTsKIAogICAgIG1fc3RyaW5ncyA9IFN0cmluZ3M6OmNyZWF0ZSgpOwogICAgIG1f
ZWRnZXMgPSBFZGdlczo6Y3JlYXRlKCk7CkBAIC0xMDEsNiArMTAyLDcgQEAgdm9pZCBIZWFwR3Jh
cGhTZXJpYWxpemVyOjpwdXNoVXBkYXRlKCkKIAogdm9pZCBIZWFwR3JhcGhTZXJpYWxpemVyOjpy
ZXBvcnROb2RlKGNvbnN0IFdURjo6TWVtb3J5T2JqZWN0SW5mbyYgaW5mbykKIHsKKyAgICBBU1NF
UlQoaW5mby5yZXBvcnRlZFBvaW50ZXIoKSk7CiAgICAgcmVwb3J0Tm9kZUltcGwoaW5mbywgbV9u
b2RlRWRnZXNDb3VudCk7CiAgICAgbV9ub2RlRWRnZXNDb3VudCA9IDA7CiAgICAgaWYgKGluZm8u
aXNSb290KCkpCkBAIC0xODIsOCArMTg0LDEwIEBAIGludCBIZWFwR3JhcGhTZXJpYWxpemVyOjph
ZGRTdHJpbmcoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiAKIGludCBIZWFwR3JhcGhTZXJpYWxpemVy
Ojp0b05vZGVJZChjb25zdCB2b2lkKiB0bykKIHsKLSAgICBBU1NFUlQodG8pOwotICAgIEFkZHJl
c3MyTm9kZUlkOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9hZGRyZXNzMk5vZGVJZE1hcC5hZGQodG8s
IG1fYWRkcmVzczJOb2RlSWRNYXAuc2l6ZSgpKTsKKyAgICBpZiAoIXRvKQorICAgICAgICByZXR1
cm4gc19maXJzdE5vZGVJZCArIG1fYWRkcmVzczJOb2RlSWRNYXAuc2l6ZSgpICsgbV9sZWFmQ291
bnQrKzsKKworICAgIEFkZHJlc3MyTm9kZUlkOjpBZGRSZXN1bHQgcmVzdWx0ID0gbV9hZGRyZXNz
Mk5vZGVJZE1hcC5hZGQodG8sIHNfZmlyc3ROb2RlSWQgKyBtX2xlYWZDb3VudCArIG1fYWRkcmVz
czJOb2RlSWRNYXAuc2l6ZSgpKTsKICAgICByZXR1cm4gcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
IH0KIApAQCAtMTk0LDcgKzE5OCw3IEBAIHZvaWQgSGVhcEdyYXBoU2VyaWFsaXplcjo6YWRkUm9v
dE5vZGUoKQogCiAgICAgbV9ub2Rlcy0+YWRkSXRlbShhZGRTdHJpbmcoIlJvb3QiKSk7CiAgICAg
bV9ub2Rlcy0+YWRkSXRlbSgwKTsKLSAgICBtX25vZGVzLT5hZGRJdGVtKG1fYWRkcmVzczJOb2Rl
SWRNYXAuc2l6ZSgpKTsKKyAgICBtX25vZGVzLT5hZGRJdGVtKHNfZmlyc3ROb2RlSWQgKyBtX2Fk
ZHJlc3MyTm9kZUlkTWFwLnNpemUoKSArIG1fbGVhZkNvdW50KTsKICAgICBtX25vZGVzLT5hZGRJ
dGVtKDApOwogICAgIG1fbm9kZXMtPmFkZEl0ZW0obV9yb290cy5zaXplKCkpOwogfQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0hlYXBHcmFwaFNlcmlhbGl6ZXIuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9IZWFwR3JhcGhTZXJpYWxpemVyLmgKaW5kZXggNmQ5Yzky
NjQ0NTVmNjhmZGNhMTg5N2M1M2ZmZWIxYWQ5ODIyNDFiMS4uODQ4MzM5ZDI5N2JlZWEzY2IwNDAx
ODk3YzdhNjhiMjUxMmNjMGI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0hlYXBHcmFwaFNlcmlhbGl6ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVh
cEdyYXBoU2VyaWFsaXplci5oCkBAIC00MywxNCArNDMsMTYgQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBIZWFwR3JhcGhFZGdlOwotY2xhc3MgSGVhcEdyYXBoTm9kZTsKLWNsYXNz
IEluc3BlY3Rvck9iamVjdDsKK2NsYXNzIEhlYXBHcmFwaFNlcmlhbGl6ZXJDbGllbnQgeworcHVi
bGljOgorICAgIHZpcnR1YWwgfkhlYXBHcmFwaFNlcmlhbGl6ZXJDbGllbnQoKSB7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgYWRkTmF0aXZlU25hcHNob3RDaHVuayhQYXNzUmVmUHRyPFR5cGVCdWlsZGVy
OjpNZW1vcnk6OkhlYXBTbmFwc2hvdENodW5rPikgPSAwOworfTsKIAogY2xhc3MgSGVhcEdyYXBo
U2VyaWFsaXplciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoSGVhcEdyYXBoU2VyaWFsaXpl
cik7CiBwdWJsaWM6Ci0gICAgZXhwbGljaXQgSGVhcEdyYXBoU2VyaWFsaXplcihJbnNwZWN0b3JG
cm9udGVuZDo6TWVtb3J5Kik7CisgICAgZXhwbGljaXQgSGVhcEdyYXBoU2VyaWFsaXplcihIZWFw
R3JhcGhTZXJpYWxpemVyQ2xpZW50Kik7CiAgICAgfkhlYXBHcmFwaFNlcmlhbGl6ZXIoKTsKICAg
ICB2b2lkIHJlcG9ydE5vZGUoY29uc3QgV1RGOjpNZW1vcnlPYmplY3RJbmZvJik7CiAgICAgdm9p
ZCByZXBvcnRFZGdlKGNvbnN0IHZvaWQqLCBjb25zdCBjaGFyKiwgV1RGOjpNZW1iZXJUeXBlKTsK
QEAgLTczLDcgKzc1LDcgQEAgcHJpdmF0ZToKICAgICB2b2lkIHJlcG9ydEVkZ2VJbXBsKGNvbnN0
IGludCB0b05vZGVJZCwgY29uc3QgY2hhciogbmFtZSwgaW50IG1lbWJlclR5cGUpOwogICAgIGlu
dCByZXBvcnROb2RlSW1wbChjb25zdCBXVEY6Ok1lbW9yeU9iamVjdEluZm8mLCBpbnQgZWRnZXND
b3VudCk7CiAKLSAgICBJbnNwZWN0b3JGcm9udGVuZDo6TWVtb3J5KiBtX2Zyb250ZW5kOworICAg
IEhlYXBHcmFwaFNlcmlhbGl6ZXJDbGllbnQqIG1fY2xpZW50OwogCiAgICAgdHlwZWRlZiBIYXNo
TWFwPFN0cmluZywgaW50PiBTdHJpbmdNYXA7CiAgICAgU3RyaW5nTWFwIG1fc3RyaW5nVG9JbmRl
eDsKQEAgLTEwMCw2ICsxMDIsOSBAQCBwcml2YXRlOgogCiAgICAgc2l6ZV90IG1fZWRnZVR5cGVz
W1dURjo6TGFzdE1lbWJlclR5cGVFbnRyeV07CiAgICAgaW50IG1fdW5rbm93bkNsYXNzTmFtZUlk
OworICAgIGludCBtX2xlYWZDb3VudDsKKworICAgIHN0YXRpYyBjb25zdCBpbnQgc19maXJzdE5v
ZGVJZCA9IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAppbmRleCA1ZjZhNzNkMGQ5
YWZmM2Y1NjU2NjJlMmEyZjljMmUxZDVhNDVkMjhjLi4wYzU5OWE5OWEzNjU2MWMxMDMzN2EyZjNm
ZmI2ZTY5NWUzYTU2ZGUxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yTWVtb3J5QWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JNZW1vcnlBZ2VudC5jcHAKQEAgLTMzMyw4ICszMzMsMjEgQEAgdm9pZCBJbnNwZWN0b3JN
ZW1vcnlBZ2VudDo6cmVwb3J0TWVtb3J5VXNhZ2UoTWVtb3J5T2JqZWN0SW5mbyogbWVtb3J5T2Jq
ZWN0SW5mbykKIHZvaWQgSW5zcGVjdG9yTWVtb3J5QWdlbnQ6OmdldFByb2Nlc3NNZW1vcnlEaXN0
cmlidXRpb25JbXBsKGJvb2wgcmVwb3J0R3JhcGgsIFR5cGVOYW1lVG9TaXplTWFwKiBtZW1vcnlJ
bmZvKQogewogICAgIE93blB0cjxIZWFwR3JhcGhTZXJpYWxpemVyPiBncmFwaFNlcmlhbGl6ZXI7
CisKKyAgICBjbGFzcyBGcm9udGVuZFdyYXBwZXIgOiBwdWJsaWMgSGVhcEdyYXBoU2VyaWFsaXpl
ckNsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBGcm9udGVuZFdyYXBwZXIo
SW5zcGVjdG9yRnJvbnRlbmQ6Ok1lbW9yeSogZnJvbnRlbmQpIDogbV9mcm9udGVuZChmcm9udGVu
ZCkgeyB9CisgICAgICAgIHZpcnR1YWwgdm9pZCBhZGROYXRpdmVTbmFwc2hvdENodW5rKFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6SGVhcFNuYXBzaG90Q2h1bms+IGhlYXBTbmFwc2hv
dENodW5rKSBPVkVSUklERQorICAgICAgICB7CisgICAgICAgICAgICBtX2Zyb250ZW5kLT5hZGRO
YXRpdmVTbmFwc2hvdENodW5rKGhlYXBTbmFwc2hvdENodW5rKTsKKyAgICAgICAgfQorICAgIHBy
aXZhdGU6CisgICAgICAgIEluc3BlY3RvckZyb250ZW5kOjpNZW1vcnkqIG1fZnJvbnRlbmQ7Cisg
ICAgfSBmcm9udGVuZFdyYXBwZXIobV9mcm9udGVuZCk7CisKICAgICBpZiAocmVwb3J0R3JhcGgp
Ci0gICAgICAgIGdyYXBoU2VyaWFsaXplciA9IGFkb3B0UHRyKG5ldyBIZWFwR3JhcGhTZXJpYWxp
emVyKG1fZnJvbnRlbmQpKTsKKyAgICAgICAgZ3JhcGhTZXJpYWxpemVyID0gYWRvcHRQdHIobmV3
IEhlYXBHcmFwaFNlcmlhbGl6ZXIoJmZyb250ZW5kV3JhcHBlcikpOworCiAgICAgTWVtb3J5SW5z
dHJ1bWVudGF0aW9uQ2xpZW50SW1wbCBtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQoZ3JhcGhT
ZXJpYWxpemVyLmdldCgpKTsKICAgICBtX2luc3BlY3RvckNsaWVudC0+Z2V0QWxsb2NhdGVkT2Jq
ZWN0cyhtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQuYWxsb2NhdGVkT2JqZWN0cygpKTsKICAg
ICBNZW1vcnlJbnN0cnVtZW50YXRpb25JbXBsIG1lbW9yeUluc3RydW1lbnRhdGlvbigmbWVtb3J5
SW5zdHJ1bWVudGF0aW9uQ2xpZW50KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rv
b2xzL0NoYW5nZUxvZwppbmRleCBiZWMzOGRhYTE0YjM5ZjZhODVlYTMzZDg3NmQ3YTBlODBmN2I2
NzU2Li41ZDU0NGFmMTU2MmNjZDEwMjk3ZGM1MDcxYmE3OTdiNTA5NzAxZGU0IDEwMDY0NAotLS0g
YS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAK
KzIwMTMtMDItMTIgIElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IE5hdGl2ZSBNZW1vcnkgSW5zdHJ1bWVudGF0aW9uOiByZXBv
cnRMZWFmIG1ldGhvZCBkb2Vzbid0IHJlcG9ydCB0aGUgbGVhZiBub2RlIHByb3Blcmx5LgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NTU0CisKKyAg
ICAgICAgSW4gc29tZSBjYXNlcyBsZWFmcyBoYXZlIG5vIHBvaW50ZXIuIEFzIGV4YW1wbGUgd2hl
biB3ZSByZXBvcnQgYSBsZWFmIHZpYSBhZGRQcml2YXRlQnVmZmVyLgorICAgICAgICBUaGlzIHBh
dGNoIGhhcyBuZXcgc2V0IG9mIHRlc3RzIGZvciBIZWFwR3JhcGhTZXJpYWxpemVyLgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLmd5cGk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0
QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJDb3JlL0hlYXBHcmFwaFNlcmlhbGl6ZXJUZXN0LmNwcDogQWRkZWQuCisgICAgICAg
ICogVGVzdFdlYktpdEFQSS93aW4vVGVzdFdlYktpdEFQSS52Y3Byb2o6CisKIDIwMTMtMDItMTEg
IEpvY2hlbiBFaXNpbmdlciAgPGpvY2hlbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgW2Nocm9t
aXVtXSBjbGVhciB0aGUgd2ViY2FjaGUgZnJvbSB3aXRoaW4gdGhlIFRlc3RSdW5uZXIgbGlicmFy
eQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLmd5cGkgYi9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkuZ3lwaQppbmRleCA1ZTdmMTdlOGRhOGVh
MmIwZDM2ZjU0MjE3MzA5N2YyZjMyMmI0OTlhLi4yYmIwZmJkMjJjMjE2MTdkY2ZmNTQ4YTQ2MjA2
NjI3ZjEwYTk4MDMyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRB
UEkuZ3lwaQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkuZ3lwaQpAQCAt
MzEsNiArMzEsNyBAQAogewogICAgICd2YXJpYWJsZXMnOiB7CiAgICAgICAgICdUZXN0V2ViS2l0
QVBJX2ZpbGVzJzogWworICAgICAgICAgICAgJ1Rlc3RzL1dlYkNvcmUvSGVhcEdyYXBoU2VyaWFs
aXplclRlc3QuY3BwJywKICAgICAgICAgICAgICdUZXN0cy9XZWJDb3JlL0xheW91dFVuaXQuY3Bw
JywKICAgICAgICAgICAgICdUZXN0cy9XVEYvQXRvbWljU3RyaW5nLmNwcCcsCiAgICAgICAgICAg
ICAnVGVzdHMvV1RGL0NoZWNrZWRBcml0aG1ldGljT3BlcmF0aW9ucy5jcHAnLApkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2ogYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagppbmRleCBhMWNjMjkxZWU0MTNjNWZiNDUyZTBkMTA1YzI5ZGEzZWQ3MzNmNWU3
Li41MTAxMjVmYTUwMDVhMzRkMjBkZTRhMGU0YzdhZGQ2OGFkZGNjNGEyIDEwMDY0NAotLS0gYS9U
b29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvagpAQCAtMTQsNiArMTQsNyBAQAogCQkwRkM2QzRDQzE0MTAyN0UwMDA1QjdGMEMg
LyogUmVkQmxhY2tUcmVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGQzZDNENCMTQxMDI3RTAwMDVCN0YwQyAvKiBSZWRCbGFja1RyZWUuY3BwICov
OyB9OwogCQkwRkM2QzRDRjE0MTAzNEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM2QzRDRTE0MTAz
NEFEMDA1QjdGMEMgLyogTWV0YUFsbG9jYXRvci5jcHAgKi87IH07CiAJCTE0NDY0MDEzMTY3QTgz
MDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDE0NDY0MDEyMTY3QTgzMDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0
LmNwcCAqLzsgfTsKKwkJNzg4Q0I0QUUzNDhGNDA0MDgyN0ZDQ0QwIC8qIEhlYXBHcmFwaEdlbmVy
YXRvclRlc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNzg4Q0I0QUUzNDhGNDA0MDgyN0ZDQ0QwIC8qIEhlYXBHcmFwaEdlbmVyYXRvclRlc3QuY3Bw
ICovOyB9OwogCQkxNEYzQjExMzE1RTQ1RUFCMDAyMTAwNjkgLyogU2F0dXJhdGVkQXJpdGhtZXRp
Y09wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMTRGM0IxMTIxNUU0NUVBQjAwMjEwMDY5IC8qIFNhdHVyYXRlZEFyaXRobWV0aWNPcGVy
YXRpb25zLmNwcCAqLzsgfTsKIAkJMUEwMkM4NEYxMjVENEE4NDAwRTNGNEJEIC8qIEZpbmQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMUEwMkM4NEUx
MjVENEE4NDAwRTNGNEJEIC8qIEZpbmQuY3BwICovOyB9OwogCQkxQTAyQzg3MDEyNUQ0Q0ZEMDBF
M0Y0QkQgLyogZmluZC5odG1sIGluIENvcHkgUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDFBMDJDODRCMTI1RDRBNUUwMEUzRjRCRCAvKiBmaW5kLmh0bWwgKi87
IH07CkBAIC0yNzIsNiArMjczLDcgQEAKIAkJMEZDNkM0Q0IxNDEwMjdFMDAwNUI3RjBDIC8qIFJl
ZEJsYWNrVHJlZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBSZWRC
bGFja1RyZWUuY3BwOyBwYXRoID0gV1RGL1JlZEJsYWNrVHJlZS5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGQzZDNENFMTQxMDM0QUQwMDVCN0YwQyAvKiBNZXRhQWxsb2NhdG9y
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IE1ldGFBbGxvY2F0b3Iu
Y3BwOyBwYXRoID0gV1RGL01ldGFBbGxvY2F0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkxNDQ2NDAxMjE2N0E4MzA1MDAwQkQyMTggLyogTGF5b3V0VW5pdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXlvdXRVbml0LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzg4Q0I0QUUzNDhGNDA0MDgyN0ZDQ0QwIC8qIEhlYXBHcmFw
aEdlbmVyYXRvclRlc3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SGVhcEdyYXBoR2VuZXJhdG9yVGVzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTE0RjNCMTEyMTVFNDVFQUIwMDIxMDA2OSAvKiBTYXR1cmF0ZWRBcml0aG1ldGljT3BlcmF0aW9u
cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBTYXR1cmF0ZWRBcml0
aG1ldGljT3BlcmF0aW9ucy5jcHA7IHBhdGggPSBXVEYvU2F0dXJhdGVkQXJpdGhtZXRpY09wZXJh
dGlvbnMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTAyQzg0QjEyNUQ0QTVF
MDBFM0Y0QkQgLyogZmluZC5odG1sICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5odG1sOyBwYXRoID0gZmluZC5o
dG1sOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkxQTAyQzg0RTEyNUQ0QTg0MDBFM0Y0
QkQgLyogRmluZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBGaW5k
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTU2NCw2ICs1NjYsNyBAQAogCQkJ
Y2hpbGRyZW4gPSAoCiAJCQkJNDQwQTFEMzgxNEEwMTAzQTAwOEE2NkYyIC8qIEtVUkwuY3BwICov
LAogCQkJCTE0NDY0MDEyMTY3QTgzMDUwMDBCRDIxOCAvKiBMYXlvdXRVbml0LmNwcCAqLywKKwkJ
CQk3ODhDQjRBRTM0OEY0MDQwODI3RkNDRDAgLyogSGVhcEdyYXBoR2VuZXJhdG9yVGVzdC5jcHAg
Ki8sCiAJCQkpOwogCQkJcGF0aCA9IFdlYkNvcmU7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4i
OwpAQCAtMTAxNCw2ICsxMDE3LDcgQEAKIAkJCQk0QkI0MTYwMjE2ODE1QjI2MDA4MjQyMzggLyog
SlNXcmFwcGVyRm9yTm9kZUluV2ViRnJhbWUubW0gaW4gU291cmNlcyAqLywKIAkJCQk0NDBBMUQz
OTE0QTAxMDNBMDA4QTY2RjIgLyogS1VSTC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2NDAx
MzE2N0E4MzA1MDAwQkQyMTggLyogTGF5b3V0VW5pdC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3
ODhDQjRBRTM0OEY0MDQwODI3RkNDRDAgLyogSGVhcEdyYXBoR2VuZXJhdG9yVGVzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkyNjMwMEIxODE2NzU1Q0Q5MDA2Njg4NkQgLyogTGlzdEhhc2hTZXQu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNTJDQjQ3NDExNDQ4RkI5MzAwODczOTk1IC8qIExvYWRB
bHRlcm5hdGVIVE1MU3RyaW5nV2l0aE5vbkRpcmVjdG9yeVVSTC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkzM0RDODkxMTE0MTk1M0EzMDA3NDdFRjcgLyogTG9hZENhbmNlbGVkTm9TZXJ2ZXJSZWRp
cmVjdENhbGxiYWNrLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJDb3JlL0hlYXBHcmFwaFNlcmlhbGl6ZXJUZXN0LmNwcCBiL1Rvb2xz
L1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IZWFwR3JhcGhTZXJpYWxpemVyVGVzdC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTExNGQyNzQzYzFjYTdlMjM3NzQ2ZGZhNTgxYTY5Yzg2YTE5Yzc2OAotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViQ29yZS9IZWFwR3Jh
cGhTZXJpYWxpemVyVGVzdC5jcHAKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTMgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgor
ICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9m
IGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBB
TkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
IElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV1RGU3RyaW5nVXRpbGl0aWVzLmgiCisjaW5jbHVkZSA8Z3Rlc3QvZ3Rlc3Qu
aD4KKworI2luY2x1ZGUgIkhlYXBHcmFwaFNlcmlhbGl6ZXIuaCIKKyNpbmNsdWRlICJNZW1vcnlJ
bnN0cnVtZW50YXRpb25JbXBsLmgiCisjaW5jbHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlv
bi5oPgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25IYXNoU2V0Lmg+CisjaW5j
bHVkZSA8d3RmL01lbW9yeUluc3RydW1lbnRhdGlvblN0cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9N
ZW1vcnlPYmplY3RJbmZvLmg+CisKK25hbWVzcGFjZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJD
b3JlOworCitzdGF0aWMgV1RGOjpNZW1vcnlPYmplY3RUeXBlIGdfZGVmYXVsdE9iamVjdFR5cGUg
PSAiRGVmYXVsdE9iamVjdFR5cGUiOworCitjbGFzcyBIZWFwR3JhcGhSZWNlaXZlciA6IHB1Ymxp
YyBIZWFwR3JhcGhTZXJpYWxpemVyQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBIZWFwR3JhcGhSZWNl
aXZlcigpIDogbV9zZXJpYWxpemVyKHRoaXMpCisgICAgeworICAgICAgICBtX2N1cnJlbnRQb2lu
dGVyID0gMDsKKyAgICB9CisKKyAgICB2aXJ0dWFsIHZvaWQgYWRkTmF0aXZlU25hcHNob3RDaHVu
ayhQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpNZW1vcnk6OkhlYXBTbmFwc2hvdENodW5rPiBoZWFw
U25hcHNob3RDaHVuaykgT1ZFUlJJREUKKyAgICB7CisgICAgICAgIG1faGVhcFNuYXBzaG90Q2h1
bmsgPSBoZWFwU25hcHNob3RDaHVuazsKKyAgICAgICAgbV9zdHJpbmdzID0gY2h1bmtQYXJ0KCJz
dHJpbmdzIik7CisgICAgICAgIG1fZWRnZXMgPSBjaHVua1BhcnQoImVkZ2VzIik7CisgICAgICAg
IG1fbm9kZXMgPSBjaHVua1BhcnQoIm5vZGVzIik7CisKKyAgICAgICAgLy8gUmVzZXQgcGxhdGZv
cm0gZGVwZW5kZWQgc2l6ZSBmaWVsZCB2YWx1ZXMuCisgICAgICAgIGZvciAoSW5zcGVjdG9yQXJy
YXk6Oml0ZXJhdG9yIGkgPSBtX25vZGVzLT5iZWdpbigpOyBpICE9IG1fbm9kZXMtPmVuZCgpOyBp
ICs9IHNfbm9kZUZpZWxkQ291bnQpCisgICAgICAgICAgICAqKGkgKyBzX3NpemVPZmZzZXQpID0g
SW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKDApOworCisgICAgICAgIG1faWQyaW5kZXguY2xl
YXIoKTsKKworICAgICAgICBmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgbV9ub2Rlcy0+bGVu
Z3RoKCk7IGluZGV4ICs9IHNfbm9kZUZpZWxkQ291bnQpCisgICAgICAgICAgICBtX2lkMmluZGV4
LmFkZChpbnRWYWx1ZShtX25vZGVzLmdldCgpLCBpbmRleCArIHNfaWRPZmZzZXQpLCBpbmRleCk7
CisgICAgfQorCisgICAgdm9pZCBwcmludEdyYXBoKCkKKyAgICB7CisgICAgICAgIEVYUEVDVF9U
UlVFKG1faGVhcFNuYXBzaG90Q2h1bmspOworICAgICAgICBpbnQgcHJvY2Vzc2VkRWRnZXNDb3Vu
dCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSAwOyBpbmRleCA8IG1fbm9kZXMt
Pmxlbmd0aCgpOyBpbmRleCArPSBzX25vZGVGaWVsZENvdW50KQorICAgICAgICAgICAgcHJvY2Vz
c2VkRWRnZXNDb3VudCArPSBwcmludE5vZGUoaW5kZXgsIHByb2Nlc3NlZEVkZ2VzQ291bnQpOwor
ICAgIH0KKworICAgIFN0cmluZyBkdW1wTGFzdENodW5rTm9kZXMoKSB7IHJldHVybiBkdW1wTGFz
dENodW5rUGFydCgibm9kZXMiKTsgfQorICAgIFN0cmluZyBkdW1wTGFzdENodW5rRWRnZXMoKSB7
IHJldHVybiBkdW1wTGFzdENodW5rUGFydCgiZWRnZXMiKTsgfQorICAgIFN0cmluZyBkdW1wTGFz
dENodW5rQmFzZVRvUmVhbE5vZGVJZCgpIHsgcmV0dXJuIGR1bXBMYXN0Q2h1bmtQYXJ0KCJiYXNl
VG9SZWFsTm9kZUlkIik7IH0KKyAgICBTdHJpbmcgZHVtcExhc3RDaHVua1N0cmluZ3MoKSB7IHJl
dHVybiBkdW1wTGFzdENodW5rUGFydCgic3RyaW5ncyIpOyB9CisKKyAgICB2b2lkKiBhZGROb2Rl
KGNvbnN0IGNoYXIqIGNsYXNzTmFtZSwgY29uc3QgY2hhciogbmFtZSwgYm9vbCBpc1Jvb3QpCisg
ICAgeworICAgICAgICBXVEY6Ok1lbW9yeU9iamVjdEluZm8gaW5mbygwLCBnX2RlZmF1bHRPYmpl
Y3RUeXBlLCArK21fY3VycmVudFBvaW50ZXIpOworICAgICAgICBpbmZvLnNldENsYXNzTmFtZShj
bGFzc05hbWUpOworICAgICAgICBpbmZvLnNldE5hbWUobmFtZSk7CisgICAgICAgIGlmIChpc1Jv
b3QpCisgICAgICAgICAgICBpbmZvLm1hcmtBc1Jvb3QoKTsKKyAgICAgICAgbV9zZXJpYWxpemVy
LnJlcG9ydE5vZGUoaW5mbyk7CisgICAgICAgIHJldHVybiBtX2N1cnJlbnRQb2ludGVyOworICAg
IH0KKworICAgIHZvaWQgYWRkRWRnZSh2b2lkKiB0bywgY29uc3QgY2hhciogZWRnZU5hbWUsIFdU
Rjo6TWVtYmVyVHlwZSBtZW1iZXJUeXBlKQorICAgIHsKKyAgICAgICAgbV9zZXJpYWxpemVyLnJl
cG9ydEVkZ2UodG8sIGVkZ2VOYW1lLCBtZW1iZXJUeXBlKTsKKyAgICB9CisKKyAgICB2b2lkIGRv
bmUoKQorICAgIHsKKyAgICAgICAgbV9zZXJpYWxpemVyLmZpbmlzaCgpOworICAgICAgICBwcmlu
dEdyYXBoKCk7CisgICAgfQorCisgICAgSGVhcEdyYXBoU2VyaWFsaXplciogaGVhcEdyYXBoU2Vy
aWFsaXplcigpIHsgcmV0dXJuICZtX3NlcmlhbGl6ZXI7IH0KKworcHJpdmF0ZToKKyAgICBQYXNz
UmVmUHRyPEluc3BlY3RvckFycmF5PiBjaHVua1BhcnQoU3RyaW5nIHBhcnROYW1lKQorICAgIHsK
KyAgICAgICAgRVhQRUNUX1RSVUUobV9oZWFwU25hcHNob3RDaHVuayk7CisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGNodW5rID0gKnJlaW50ZXJwcmV0X2Nhc3Q8UmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4qPigmbV9oZWFwU25hcHNob3RDaHVuayk7CisgICAgICAgIFJlZlB0cjxJbnNw
ZWN0b3JWYWx1ZT4gcGFydFZhbHVlID0gY2h1bmstPmdldChwYXJ0TmFtZSk7CisgICAgICAgIFJl
ZlB0cjxJbnNwZWN0b3JBcnJheT4gcGFydEFycmF5OworICAgICAgICBFWFBFQ1RfVFJVRShwYXJ0
VmFsdWUtPmFzQXJyYXkoJnBhcnRBcnJheSkpOworICAgICAgICByZXR1cm4gcGFydEFycmF5LnJl
bGVhc2UoKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZHVtcExhc3RDaHVua1BhcnQoU3RyaW5nIHBh
cnROYW1lKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNodW5rUGFydChwYXJ0TmFtZSktPnRvSlNP
TlN0cmluZygpLnJlcGxhY2UoIlwiIiwgIiciKTsKKyAgICB9CisKKyAgICBTdHJpbmcgc3RyaW5n
VmFsdWUoSW5zcGVjdG9yQXJyYXkqIGFycmF5LCBpbnQgaW5kZXgpCisgICAgeworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGluc3BlY3RvclZhbHVlID0gYXJyYXktPmdldChpbmRleCk7
CisgICAgICAgIFN0cmluZyB2YWx1ZTsKKyAgICAgICAgRVhQRUNUX1RSVUUoaW5zcGVjdG9yVmFs
dWUtPmFzU3RyaW5nKCZ2YWx1ZSkpOworICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgfQorCisg
ICAgaW50IGludFZhbHVlKEluc3BlY3RvckFycmF5KiBhcnJheSwgaW50IGluZGV4KQorICAgIHsK
KyAgICAgICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBpbnNwZWN0b3JWYWx1ZSA9IGFycmF5LT5n
ZXQoaW5kZXgpOworICAgICAgICBpbnQgdmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKGluc3Bl
Y3RvclZhbHVlLT5hc051bWJlcigmdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAg
IH0KKworICAgIFN0cmluZyBub2RlKHVuc2lnbmVkIG5vZGVJbmRleCkKKyAgICB7CisgICAgICAg
IFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIm5vZGU6ICIp
OworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihpbnRWYWx1ZShtX25vZGVzLmdldCgpLCBu
b2RlSW5kZXggKyBzX2lkT2Zmc2V0KSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCIgd2l0aCBj
bGFzc05hbWU6JyIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmdWYWx1ZShtX3N0cmlu
Z3MuZ2V0KCksIGludFZhbHVlKG1fbm9kZXMuZ2V0KCksIG5vZGVJbmRleCArIHNfY2xhc3NOYW1l
T2Zmc2V0KSkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiJyBhbmQgbmFtZTogJyIpOworICAg
ICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmdWYWx1ZShtX3N0cmluZ3MuZ2V0KCksIGludFZhbHVl
KG1fbm9kZXMuZ2V0KCksIG5vZGVJbmRleCArIHNfbmFtZU9mZnNldCkpKTsKKyAgICAgICAgYnVp
bGRlci5hcHBlbmQoIiciKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9TdHJpbmcoKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgZWRnZSh1bnNpZ25lZCBlZGdlT3JkaW5hbCkKKyAgICB7CisgICAg
ICAgIHVuc2lnbmVkIGVkZ2VJbmRleCA9IGVkZ2VPcmRpbmFsICogc19lZGdlRmllbGRDb3VudDsK
KyAgICAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOworICAgICAgICBidWlsZGVyLmFwcGVuZCgi
JyIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmdWYWx1ZShtX3N0cmluZ3MuZ2V0KCks
IGludFZhbHVlKG1fZWRnZXMuZ2V0KCksIGVkZ2VJbmRleCArIHNfZWRnZVR5cGVPZmZzZXQpKSk7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKCInIGVkZ2UgJyIpOworICAgICAgICBidWlsZGVyLmFw
cGVuZChzdHJpbmdWYWx1ZShtX3N0cmluZ3MuZ2V0KCksIGludFZhbHVlKG1fZWRnZXMuZ2V0KCks
IGVkZ2VJbmRleCArIHNfZWRnZU5hbWVPZmZzZXQpKSk7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5k
KCInIHBvaW50cyB0byAiKTsKKyAgICAgICAgaW50IG5vZGVJZCA9IGludFZhbHVlKG1fZWRnZXMu
Z2V0KCksIGVkZ2VJbmRleCArIHNfdG9Ob2RlSWRPZmZzZXQpOworICAgICAgICBidWlsZGVyLmFw
cGVuZChub2RlKG1faWQyaW5kZXguZ2V0KG5vZGVJZCkpKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxk
ZXIudG9TdHJpbmcoKTsKKyAgICB9CisKKyAgICBpbnQgcHJpbnROb2RlKHVuc2lnbmVkIG5vZGVJ
bmRleCwgdW5zaWduZWQgcHJvY2Vzc2VkRWRnZXNDb3VudCkKKyAgICB7CisgICAgICAgIFN0cmlu
ZyBub2RlU3RyaW5nID0gbm9kZShub2RlSW5kZXgpOworICAgICAgICBpbnQgZWRnZUNvdW50ID0g
aW50VmFsdWUobV9ub2Rlcy5nZXQoKSwgbm9kZUluZGV4ICsgc19lZGdlQ291bnRPZmZzZXQpOwor
CisgICAgICAgIHByaW50ZigiJXNcbiIsIG5vZGVTdHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlZGdlQ291bnQ7ICsraSkgeworICAgICAgICAg
ICAgU3RyaW5nIGVkZ2VUZXh0ID0gZWRnZShpICsgcHJvY2Vzc2VkRWRnZXNDb3VudCk7CisgICAg
ICAgICAgICBwcmludGYoIlx0aGFzICVzXG4iLCBlZGdlVGV4dC51dGY4KCkuZGF0YSgpKTsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gZWRnZUNvdW50OworICAgIH0KKworICAgIEhlYXBHcmFw
aFNlcmlhbGl6ZXIgbV9zZXJpYWxpemVyOworICAgIFJlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5
OjpIZWFwU25hcHNob3RDaHVuaz4gbV9oZWFwU25hcHNob3RDaHVuazsKKworICAgIFJlZlB0cjxJ
bnNwZWN0b3JBcnJheT4gbV9zdHJpbmdzOworICAgIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4gbV9u
b2RlczsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1fZWRnZXM7CisgICAgSGFzaE1hcDxp
bnQsIGludD4gbV9pZDJpbmRleDsKKworICAgIGNsYXNzIE9iamVjdCB7CisgICAgICAgIGNoYXIg
bV9kYXRhW3NpemVvZih2b2lkKildOworICAgIH07CisgICAgT2JqZWN0KiBtX2N1cnJlbnRQb2lu
dGVyOworCisgICAgc3RhdGljIGNvbnN0IGludCBzX25vZGVGaWVsZENvdW50ID0gNTsKKyAgICBz
dGF0aWMgY29uc3QgaW50IHNfY2xhc3NOYW1lT2Zmc2V0ID0gMDsKKyAgICBzdGF0aWMgY29uc3Qg
aW50IHNfbmFtZU9mZnNldCA9IDE7CisgICAgc3RhdGljIGNvbnN0IGludCBzX2lkT2Zmc2V0ID0g
MjsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfc2l6ZU9mZnNldCA9IDM7CisgICAgc3RhdGljIGNv
bnN0IGludCBzX2VkZ2VDb3VudE9mZnNldCA9IDQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHNf
ZWRnZUZpZWxkQ291bnQgPSAzOworICAgIHN0YXRpYyBjb25zdCBpbnQgc19lZGdlVHlwZU9mZnNl
dCA9IDA7CisgICAgc3RhdGljIGNvbnN0IGludCBzX2VkZ2VOYW1lT2Zmc2V0ID0gMTsKKyAgICBz
dGF0aWMgY29uc3QgaW50IHNfdG9Ob2RlSWRPZmZzZXQgPSAyOworfTsKKworVEVTVChIZWFwR3Jh
cGhTZXJpYWxpemVyVGVzdCwgc25hcHNob3RXaXRob3V0VXNlck9iamVjdHMpCit7CisgICAgSGVh
cEdyYXBoUmVjZWl2ZXIgcmVjZWl2ZXI7CisgICAgcmVjZWl2ZXIuZG9uZSgpOworICAgIEVYUEVD
VF9FUShTdHJpbmcoIlsnJywnd2VhaycsJ293blJlZicsJ2NvdW50UmVmJywndW5rbm93bicsJ1Jv
b3QnXSIpLCByZWNlaXZlci5kdW1wTGFzdENodW5rU3RyaW5ncygpKTsKKyAgICBFWFBFQ1RfRVEo
U3RyaW5nKCJbNSwwLDEsMCwwXSIpLCByZWNlaXZlci5kdW1wTGFzdENodW5rTm9kZXMoKSk7IC8v
IE9ubHkgUm9vdCBvYmplY3QuCisgICAgRVhQRUNUX0VRKFN0cmluZygiW10iKSwgcmVjZWl2ZXIu
ZHVtcExhc3RDaHVua0VkZ2VzKCkpOyAvLyBObyBlZGdlcy4KKyAgICBFWFBFQ1RfRVEoU3RyaW5n
KCJbXSIpLCByZWNlaXZlci5kdW1wTGFzdENodW5rQmFzZVRvUmVhbE5vZGVJZCgpKTsgLy8gTm8g
aWQgbWFwcy4KK30KKworVEVTVChIZWFwR3JhcGhTZXJpYWxpemVyVGVzdCwgb25lUm9vdFVzZXJP
YmplY3QpCit7CisgICAgSGVhcEdyYXBoUmVjZWl2ZXIgcmVjZWl2ZXI7CisgICAgcmVjZWl2ZXIu
YWRkTm9kZSgiQ2xhc3NOYW1lIiwgIm9iamVjdE5hbWUiLCB0cnVlKTsKKyAgICByZWNlaXZlci5k
b25lKCk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiWycnLCd3ZWFrJywnb3duUmVmJywnY291bnRS
ZWYnLCd1bmtub3duJywnQ2xhc3NOYW1lJywnb2JqZWN0TmFtZScsJ1Jvb3QnXSIpLCByZWNlaXZl
ci5kdW1wTGFzdENodW5rU3RyaW5ncygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJbNSw2LDEs
MCwwLDcsMCwyLDAsMV0iKSwgcmVjZWl2ZXIuZHVtcExhc3RDaHVua05vZGVzKCkpOworICAgIEVY
UEVDVF9FUShTdHJpbmcoIlsxLDAsMV0iKSwgcmVjZWl2ZXIuZHVtcExhc3RDaHVua0VkZ2VzKCkp
OworICAgIEVYUEVDVF9FUShTdHJpbmcoIltdIiksIHJlY2VpdmVyLmR1bXBMYXN0Q2h1bmtCYXNl
VG9SZWFsTm9kZUlkKCkpOworfQorCitURVNUKEhlYXBHcmFwaFNlcmlhbGl6ZXJUZXN0LCB0d29V
c2VyT2JqZWN0c1dpdGhFZGdlKQoreworICAgIEhlYXBHcmFwaFJlY2VpdmVyIHJlY2VpdmVyOwor
ICAgIHZvaWQqIGNoaWxkT2JqZWN0ID0gcmVjZWl2ZXIuYWRkTm9kZSgiQ2hpbGQiLCAiY2hpbGQi
LCBmYWxzZSk7CisgICAgcmVjZWl2ZXIuYWRkRWRnZShjaGlsZE9iamVjdCwgInBvaW50ZXJUb0No
aWxkIiwgV1RGOjpPd25QdHJNZW1iZXIpOworICAgIHJlY2VpdmVyLmFkZE5vZGUoIlBhcmVudCIs
ICJwYXJlbnQiLCB0cnVlKTsKKyAgICByZWNlaXZlci5kb25lKCk7CisgICAgRVhQRUNUX0VRKFN0
cmluZygiWycnLCd3ZWFrJywnb3duUmVmJywnY291bnRSZWYnLCd1bmtub3duJywnQ2hpbGQnLCdj
aGlsZCcsJ3BvaW50ZXJUb0NoaWxkJywnUGFyZW50JywncGFyZW50JywnUm9vdCddIiksIHJlY2Vp
dmVyLmR1bXBMYXN0Q2h1bmtTdHJpbmdzKCkpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIls1LDYs
MSwwLDAsOCw5LDIsMCwxLDEwLDAsMywwLDFdIiksIHJlY2VpdmVyLmR1bXBMYXN0Q2h1bmtOb2Rl
cygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJbMiw3LDEsMSwwLDJdIiksIHJlY2VpdmVyLmR1
bXBMYXN0Q2h1bmtFZGdlcygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJbXSIpLCByZWNlaXZl
ci5kdW1wTGFzdENodW5rQmFzZVRvUmVhbE5vZGVJZCgpKTsKK30KKworY2xhc3MgT3duZXIgewor
cHVibGljOgorICAgIE93bmVyKCkKKyAgICB7CisgICAgICAgIG1fc3RyaW5ncy5hZGQoImZpcnN0
IGVsZW1lbnQiKTsKKyAgICAgICAgbV9zdHJpbmdzLmFkZCgic2Vjb25kIGVsZW1lbnQiKTsKKyAg
ICB9CisgICAgdm9pZCByZXBvcnRNZW1vcnlVc2FnZShXVEY6Ok1lbW9yeU9iamVjdEluZm8qIG1l
bW9yeU9iamVjdEluZm8pIGNvbnN0CisgICAgeworICAgICAgICBXVEY6Ok1lbW9yeUNsYXNzSW5m
byBpbmZvKG1lbW9yeU9iamVjdEluZm8sIHRoaXMsIGdfZGVmYXVsdE9iamVjdFR5cGUpOworICAg
ICAgICBpbmZvLmFkZE1lbWJlcihtX3N0cmluZ3MsICJzdHJpbmdzIik7CisgICAgfQorcHJpdmF0
ZToKKyAgICBIYXNoU2V0PFN0cmluZz4gbV9zdHJpbmdzOworfTsKKworVEVTVChIZWFwR3JhcGhT
ZXJpYWxpemVyVGVzdCwgaGFzaFNldFdpdGhUd29JdGVtcykKK3sKKyAgICBIZWFwR3JhcGhSZWNl
aXZlciByZWNlaXZlcjsKKyAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsIG1lbW9y
eUluc3RydW1lbnRhdGlvbkNsaWVudChyZWNlaXZlci5oZWFwR3JhcGhTZXJpYWxpemVyKCkpOwor
ICAgIE1lbW9yeUluc3RydW1lbnRhdGlvbkltcGwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uKCZtZW1v
cnlJbnN0cnVtZW50YXRpb25DbGllbnQpOworCisgICAgT3duZXIgb3duZXI7CisgICAgbWVtb3J5
SW5zdHJ1bWVudGF0aW9uLmFkZFJvb3RPYmplY3QoJm93bmVyKTsKKyAgICByZWNlaXZlci5kb25l
KCk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiWzUsMCwxLDAsMCw4LDAsNCwwLDMsOSwwLDMsMCww
LDksMCwyLDAsMCwxMCwwLDUsMCwxXSIpLCByZWNlaXZlci5kdW1wTGFzdENodW5rTm9kZXMoKSk7
CisgICAgRVhQRUNUX0VRKFN0cmluZygiWzIsNiwxLDEsNywyLDEsNywzLDEsMCw0XSIpLCByZWNl
aXZlci5kdW1wTGFzdENodW5rRWRnZXMoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiW10iKSwg
cmVjZWl2ZXIuZHVtcExhc3RDaHVua0Jhc2VUb1JlYWxOb2RlSWQoKSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL3dpbi9UZXN0V2ViS2l0QVBJ
LnZjcHJvaiBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvd2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qCmlu
ZGV4IDNhMmZlOTVmYzc4OGUzNjkyYWE3MTJhMmI1OGYxZTBmMjAwYTkyYTYuLmM5OGRhNzVlMGQ2
ZTQzMGQ5NjMzNWMxNjI0MjJmZmI1YzlmMzRlNTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvd2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
d2luL1Rlc3RXZWJLaXRBUEkudmNwcm9qCkBAIC00MTYsNiArNDE2LDEwIEBACiAJCQkJCTwvRmls
ZT4KIAkJCQk8L0ZpbHRlcj4KIAkJCQk8RmlsZQorCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXFRlc3Rz
XFdlYkNvcmVcSGVhcEdyYXBoR2VuZXJhdG9yVGVzdC5jcHAiCisJCQkJCT4KKwkJCQk8L0ZpbGU+
CisJCQkJPEZpbGUKIAkJCQkJUmVsYXRpdmVQYXRoPSIuLlxUZXN0c1xXZWJDb3JlXExheW91dFVu
aXQuY3BwIgogCQkJCQk+CiAJCQkJPC9GaWxlPgo=
</data>
<flag name="review"
          id="207758"
          type_id="1"
          status="+"
          setter="yurys"
    />
    <flag name="commit-queue"
          id="208012"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188061</attachid>
            <date>2013-02-13 05:18:05 -0800</date>
            <delta_ts>2013-03-01 02:53:26 -0800</delta_ts>
            <desc>for trybots</desc>
            <filename>bug-109554-20130213171434.patch</filename>
            <type>text/plain</type>
            <size>21720</size>
            <attacher name="Ilya Tikhonovsky">loislo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQyNzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2E5MTkyZjhkNzU0NmYz
N2NhMTI4Y2YzZWI2ODVkMGYwMTAxM2EwNy4uY2MzZjcyZTc5OGE1YWVmZDAwNmVlMjcxMzMyNzFk
NmYwYzRmODg5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMyIEBACitvMjAxMy0wMi0xMyAgSWx5
YSBUaWtob25vdnNreSAgPGxvaXNsb0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgV2ViIEluc3Bl
Y3RvcjogTmF0aXZlIE1lbW9yeSBJbnN0cnVtZW50YXRpb246IHJlcG9ydExlYWYgbWV0aG9kIGRv
ZXNuJ3QgcmVwb3J0IHRoZSBsZWFmIG5vZGUgcHJvcGVybHkuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDk1NTQKKworICAgICAgICBJbiBzb21lIGNh
c2VzIGxlYXZlcyBoYXZlIG5vIHBvaW50ZXIgc28gd2l0aCB0aGUgb2xkIHNjaGVtYSB3ZSBjYW4n
dCBnZW5lcmF0ZSBub2RlSWQgZm9yIHRoZW0gYmVjYXVzZSB3ZQorICAgICAgICBjYW4ndCBpbnNl
cnQgMCBpbnRvIGhhc2htYXAuIEl0IGhhcHBlbnMgd2hlbiB3ZSBjYWxsIGFkZFByaXZhdGVCdWZm
ZXIgbWV0aG9kLgorCisgICAgICAgIERyaXZlIGJ5IGZpeDogSSBpbnRyb2R1Y2VkIGEgY2xpZW50
IGludGVyZmFjZSBmb3IgdGhlIEhlYXBHcmFwaFNlcmlhbGl6ZXIuCisgICAgICAgIEl0IGhlbHBz
IG1lIHRvIGRvIHRoZSB0ZXN0cyBmb3IgdGhlIHNlcmlhbGl6ZXIuCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSXQgaXMgY292ZXJlZCBieSBuZXdseSBh
ZGRlZCB0ZXN0cyBpbiBUZXN0V2ViS2l0QVBJLgorCisgICAgICAgICogaW5zcGVjdG9yL0hlYXBH
cmFwaFNlcmlhbGl6ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdyYXBoU2VyaWFsaXpl
cjo6SGVhcEdyYXBoU2VyaWFsaXplcik6CisgICAgICAgIChXZWJDb3JlOjpIZWFwR3JhcGhTZXJp
YWxpemVyOjpwdXNoVXBkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkhlYXBHcmFwaFNlcmlhbGl6
ZXI6OnJlcG9ydE5vZGUpOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdyYXBoU2VyaWFsaXplcjo6
dG9Ob2RlSWQpOgorICAgICAgICAoV2ViQ29yZTo6SGVhcEdyYXBoU2VyaWFsaXplcjo6YWRkUm9v
dE5vZGUpOgorICAgICAgICAqIGluc3BlY3Rvci9IZWFwR3JhcGhTZXJpYWxpemVyLmg6CisgICAg
ICAgIChIZWFwR3JhcGhTZXJpYWxpemVyKToKKyAgICAgICAgKENsaWVudCk6CisgICAgICAgIChX
ZWJDb3JlOjpIZWFwR3JhcGhTZXJpYWxpemVyOjpDbGllbnQ6On5DbGllbnQpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5
RGlzdHJpYnV0aW9uSW1wbCk6CisKIDIwMTMtMDItMTMgIFRhbWFzIEN6ZW5lICA8dGN6ZW5lQGlu
Zi51LXN6ZWdlZC5odT4KIAogICAgICAgICBPcGVuQ0wgaW1wbGVtZW50YXRpb24gb2YgRmxvb2Qg
U1ZHIGZpbHRlcnMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdy
YXBoU2VyaWFsaXplci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2Vy
aWFsaXplci5jcHAKaW5kZXggMTQ3OTUxN2IzMzYyYjllM2ViZDhjYzZlYjYwZTYwMjExOWU3NWE0
NS4uZGJlMmJkYzE3MWVhNWZmN2Y3ZGFhMDIxMDBiZWE0OTA5NmIyOWNkZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0hlYXBHcmFwaFNlcmlhbGl6ZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9IZWFwR3JhcGhTZXJpYWxpemVyLmNwcApAQCAtNDMsMTUg
KzQzLDE2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSGVhcEdyYXBoU2VyaWFsaXplcjo6
SGVhcEdyYXBoU2VyaWFsaXplcihJbnNwZWN0b3JGcm9udGVuZDo6TWVtb3J5KiBmcm9udGVuZCkK
LSAgICA6IG1fZnJvbnRlbmQoZnJvbnRlbmQpCitIZWFwR3JhcGhTZXJpYWxpemVyOjpIZWFwR3Jh
cGhTZXJpYWxpemVyKENsaWVudCogY2xpZW50KQorICAgIDogbV9jbGllbnQoY2xpZW50KQogICAg
ICwgbV9zdHJpbmdzKFN0cmluZ3M6OmNyZWF0ZSgpKQogICAgICwgbV9lZGdlcyhFZGdlczo6Y3Jl
YXRlKCkpCiAgICAgLCBtX25vZGVFZGdlc0NvdW50KDApCiAgICAgLCBtX25vZGVzKE5vZGVzOjpj
cmVhdGUoKSkKICAgICAsIG1fYmFzZVRvUmVhbE5vZGVJZE1hcChCYXNlVG9SZWFsTm9kZUlkTWFw
OjpjcmVhdGUoKSkKKyAgICAsIG1fbGVhZkNvdW50KDApCiB7Ci0gICAgQVNTRVJUKG1fZnJvbnRl
bmQpOworICAgIEFTU0VSVChtX2NsaWVudCk7CiAgICAgbV9zdHJpbmdzLT5hZGRJdGVtKFN0cmlu
ZygpKTsgLy8gQW4gZW1wdHkgc3RyaW5nIHdpdGggMCBpbmRleC4KIAogICAgIG1lbXNldChtX2Vk
Z2VUeXBlcywgMCwgc2l6ZW9mKG1fZWRnZVR5cGVzKSk7CkBAIC05MSw3ICs5Miw3IEBAIHZvaWQg
SGVhcEdyYXBoU2VyaWFsaXplcjo6cHVzaFVwZGF0ZSgpCiAgICAgICAgIC5zZXRFZGdlcyhtX2Vk
Z2VzLnJlbGVhc2UoKSkKICAgICAgICAgLnNldEJhc2VUb1JlYWxOb2RlSWQobV9iYXNlVG9SZWFs
Tm9kZUlkTWFwLnJlbGVhc2UoKSk7CiAKLSAgICBtX2Zyb250ZW5kLT5hZGROYXRpdmVTbmFwc2hv
dENodW5rKGNodW5rKTsKKyAgICBtX2NsaWVudC0+YWRkTmF0aXZlU25hcHNob3RDaHVuayhjaHVu
ay5yZWxlYXNlKCkpOwogCiAgICAgbV9zdHJpbmdzID0gU3RyaW5nczo6Y3JlYXRlKCk7CiAgICAg
bV9lZGdlcyA9IEVkZ2VzOjpjcmVhdGUoKTsKQEAgLTEwMSw2ICsxMDIsNyBAQCB2b2lkIEhlYXBH
cmFwaFNlcmlhbGl6ZXI6OnB1c2hVcGRhdGUoKQogCiB2b2lkIEhlYXBHcmFwaFNlcmlhbGl6ZXI6
OnJlcG9ydE5vZGUoY29uc3QgV1RGOjpNZW1vcnlPYmplY3RJbmZvJiBpbmZvKQogeworICAgIEFT
U0VSVChpbmZvLnJlcG9ydGVkUG9pbnRlcigpKTsKICAgICByZXBvcnROb2RlSW1wbChpbmZvLCBt
X25vZGVFZGdlc0NvdW50KTsKICAgICBtX25vZGVFZGdlc0NvdW50ID0gMDsKICAgICBpZiAoaW5m
by5pc1Jvb3QoKSkKQEAgLTE4Miw4ICsxODQsMTAgQEAgaW50IEhlYXBHcmFwaFNlcmlhbGl6ZXI6
OmFkZFN0cmluZyhjb25zdCBTdHJpbmcmIHN0cmluZykKIAogaW50IEhlYXBHcmFwaFNlcmlhbGl6
ZXI6OnRvTm9kZUlkKGNvbnN0IHZvaWQqIHRvKQogewotICAgIEFTU0VSVCh0byk7Ci0gICAgQWRk
cmVzczJOb2RlSWQ6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2FkZHJlc3MyTm9kZUlkTWFwLmFkZCh0
bywgbV9hZGRyZXNzMk5vZGVJZE1hcC5zaXplKCkpOworICAgIGlmICghdG8pCisgICAgICAgIHJl
dHVybiBzX2ZpcnN0Tm9kZUlkICsgbV9hZGRyZXNzMk5vZGVJZE1hcC5zaXplKCkgKyBtX2xlYWZD
b3VudCsrOworCisgICAgQWRkcmVzczJOb2RlSWQ6OkFkZFJlc3VsdCByZXN1bHQgPSBtX2FkZHJl
c3MyTm9kZUlkTWFwLmFkZCh0bywgc19maXJzdE5vZGVJZCArIG1fbGVhZkNvdW50ICsgbV9hZGRy
ZXNzMk5vZGVJZE1hcC5zaXplKCkpOwogICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVl
OwogfQogCkBAIC0xOTQsNyArMTk4LDcgQEAgdm9pZCBIZWFwR3JhcGhTZXJpYWxpemVyOjphZGRS
b290Tm9kZSgpCiAKICAgICBtX25vZGVzLT5hZGRJdGVtKGFkZFN0cmluZygiUm9vdCIpKTsKICAg
ICBtX25vZGVzLT5hZGRJdGVtKDApOwotICAgIG1fbm9kZXMtPmFkZEl0ZW0obV9hZGRyZXNzMk5v
ZGVJZE1hcC5zaXplKCkpOworICAgIG1fbm9kZXMtPmFkZEl0ZW0oc19maXJzdE5vZGVJZCArIG1f
YWRkcmVzczJOb2RlSWRNYXAuc2l6ZSgpICsgbV9sZWFmQ291bnQpOwogICAgIG1fbm9kZXMtPmFk
ZEl0ZW0oMCk7CiAgICAgbV9ub2Rlcy0+YWRkSXRlbShtX3Jvb3RzLnNpemUoKSk7CiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSGVhcEdyYXBoU2VyaWFsaXplci5oIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0hlYXBHcmFwaFNlcmlhbGl6ZXIuaAppbmRleCA2ZDlj
OTI2NDQ1NWY2OGZkY2ExODk3YzUzZmZlYjFhZDk4MjI0MWIxLi4wZjE4YmZiMTkyNmRiMGRlMGUz
NjI1MjI4YzgwNTU3MmYyMDkxYTQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSGVhcEdyYXBoU2VyaWFsaXplci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9I
ZWFwR3JhcGhTZXJpYWxpemVyLmgKQEAgLTQzLDE0ICs0MywxNyBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLWNsYXNzIEhlYXBHcmFwaEVkZ2U7Ci1jbGFzcyBIZWFwR3JhcGhOb2RlOwotY2xh
c3MgSW5zcGVjdG9yT2JqZWN0OwotCiBjbGFzcyBIZWFwR3JhcGhTZXJpYWxpemVyIHsKICAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShIZWFwR3JhcGhTZXJpYWxpemVyKTsKIHB1YmxpYzoKLSAgICBl
eHBsaWNpdCBIZWFwR3JhcGhTZXJpYWxpemVyKEluc3BlY3RvckZyb250ZW5kOjpNZW1vcnkqKTsK
KworICAgIGNsYXNzIENsaWVudCB7CisgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5DbGll
bnQoKSB7IH0KKyAgICAgICAgdmlydHVhbCB2b2lkIGFkZE5hdGl2ZVNuYXBzaG90Q2h1bmsoUGFz
c1JlZlB0cjxUeXBlQnVpbGRlcjo6TWVtb3J5OjpIZWFwU25hcHNob3RDaHVuaz4pID0gMDsKKyAg
ICB9OworCisgICAgZXhwbGljaXQgSGVhcEdyYXBoU2VyaWFsaXplcihDbGllbnQqKTsKICAgICB+
SGVhcEdyYXBoU2VyaWFsaXplcigpOwogICAgIHZvaWQgcmVwb3J0Tm9kZShjb25zdCBXVEY6Ok1l
bW9yeU9iamVjdEluZm8mKTsKICAgICB2b2lkIHJlcG9ydEVkZ2UoY29uc3Qgdm9pZCosIGNvbnN0
IGNoYXIqLCBXVEY6Ok1lbWJlclR5cGUpOwpAQCAtNzMsNyArNzYsNyBAQCBwcml2YXRlOgogICAg
IHZvaWQgcmVwb3J0RWRnZUltcGwoY29uc3QgaW50IHRvTm9kZUlkLCBjb25zdCBjaGFyKiBuYW1l
LCBpbnQgbWVtYmVyVHlwZSk7CiAgICAgaW50IHJlcG9ydE5vZGVJbXBsKGNvbnN0IFdURjo6TWVt
b3J5T2JqZWN0SW5mbyYsIGludCBlZGdlc0NvdW50KTsKIAotICAgIEluc3BlY3RvckZyb250ZW5k
OjpNZW1vcnkqIG1fZnJvbnRlbmQ7CisgICAgQ2xpZW50KiBtX2NsaWVudDsKIAogICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIGludD4gU3RyaW5nTWFwOwogICAgIFN0cmluZ01hcCBtX3N0cmlu
Z1RvSW5kZXg7CkBAIC0xMDAsNiArMTAzLDkgQEAgcHJpdmF0ZToKIAogICAgIHNpemVfdCBtX2Vk
Z2VUeXBlc1tXVEY6Okxhc3RNZW1iZXJUeXBlRW50cnldOwogICAgIGludCBtX3Vua25vd25DbGFz
c05hbWVJZDsKKyAgICBpbnQgbV9sZWFmQ291bnQ7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHNf
Zmlyc3ROb2RlSWQgPSAxOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JNZW1vcnlBZ2VudC5jcHAKaW5kZXggNWY2
YTczZDBkOWFmZjNmNTY1NjYyZTJhMmY5YzJlMWQ1YTQ1ZDI4Yy4uYzg0MTg4YTRmZjYyY2QzZDFk
NDIzNjJiZjZiMTA3MTJhODY0NmUxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3Rvck1lbW9yeUFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yTWVtb3J5QWdlbnQuY3BwCkBAIC0zMzAsMTEgKzMzMCwzMSBAQCB2b2lkIElu
c3BlY3Rvck1lbW9yeUFnZW50OjpyZXBvcnRNZW1vcnlVc2FnZShNZW1vcnlPYmplY3RJbmZvKiBt
ZW1vcnlPYmplY3RJbmZvKQogICAgIGluZm8uYWRkTWVtYmVyKG1fcGFnZSwgInBhZ2UiKTsKIH0K
IAorbmFtZXNwYWNlIHsKKworY2xhc3MgRnJvbnRlbmRXcmFwcGVyIDogcHVibGljIEhlYXBHcmFw
aFNlcmlhbGl6ZXI6OkNsaWVudCB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgRnJvbnRlbmRXcmFw
cGVyKEluc3BlY3RvckZyb250ZW5kOjpNZW1vcnkqIGZyb250ZW5kKSA6IG1fZnJvbnRlbmQoZnJv
bnRlbmQpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBhZGROYXRpdmVTbmFwc2hvdENodW5rKFBhc3NS
ZWZQdHI8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6SGVhcFNuYXBzaG90Q2h1bms+IGhlYXBTbmFwc2hv
dENodW5rKSBPVkVSUklERQorICAgIHsKKyAgICAgICAgbV9mcm9udGVuZC0+YWRkTmF0aXZlU25h
cHNob3RDaHVuayhoZWFwU25hcHNob3RDaHVuayk7CisgICAgfQorcHJpdmF0ZToKKyAgICBJbnNw
ZWN0b3JGcm9udGVuZDo6TWVtb3J5KiBtX2Zyb250ZW5kOworfTsKKworfQorCiB2b2lkIEluc3Bl
Y3Rvck1lbW9yeUFnZW50OjpnZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9uSW1wbChib29sIHJl
cG9ydEdyYXBoLCBUeXBlTmFtZVRvU2l6ZU1hcCogbWVtb3J5SW5mbykKIHsKICAgICBPd25QdHI8
SGVhcEdyYXBoU2VyaWFsaXplcj4gZ3JhcGhTZXJpYWxpemVyOwotICAgIGlmIChyZXBvcnRHcmFw
aCkKLSAgICAgICAgZ3JhcGhTZXJpYWxpemVyID0gYWRvcHRQdHIobmV3IEhlYXBHcmFwaFNlcmlh
bGl6ZXIobV9mcm9udGVuZCkpOworICAgIE93blB0cjxGcm9udGVuZFdyYXBwZXI+IGZyb250ZW5k
V3JhcHBlcjsKKworICAgIGlmIChyZXBvcnRHcmFwaCkgeworICAgICAgICBmcm9udGVuZFdyYXBw
ZXIgPSBhZG9wdFB0cihuZXcgRnJvbnRlbmRXcmFwcGVyKG1fZnJvbnRlbmQpKTsKKyAgICAgICAg
Z3JhcGhTZXJpYWxpemVyID0gYWRvcHRQdHIobmV3IEhlYXBHcmFwaFNlcmlhbGl6ZXIoZnJvbnRl
bmRXcmFwcGVyLmdldCgpKSk7CisgICAgfQorCiAgICAgTWVtb3J5SW5zdHJ1bWVudGF0aW9uQ2xp
ZW50SW1wbCBtZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnQoZ3JhcGhTZXJpYWxpemVyLmdldCgp
KTsKICAgICBtX2luc3BlY3RvckNsaWVudC0+Z2V0QWxsb2NhdGVkT2JqZWN0cyhtZW1vcnlJbnN0
cnVtZW50YXRpb25DbGllbnQuYWxsb2NhdGVkT2JqZWN0cygpKTsKICAgICBNZW1vcnlJbnN0cnVt
ZW50YXRpb25JbXBsIG1lbW9yeUluc3RydW1lbnRhdGlvbigmbWVtb3J5SW5zdHJ1bWVudGF0aW9u
Q2xpZW50KTsKQEAgLTM1Miw2ICszNzIsOCBAQCB2b2lkIEluc3BlY3Rvck1lbW9yeUFnZW50Ojpn
ZXRQcm9jZXNzTWVtb3J5RGlzdHJpYnV0aW9uSW1wbChib29sIHJlcG9ydEdyYXBoLCBUeQogICAg
IGlmIChncmFwaFNlcmlhbGl6ZXIpIHsKICAgICAgICAgbWVtb3J5SW5zdHJ1bWVudGF0aW9uLmFk
ZFJvb3RPYmplY3QoZ3JhcGhTZXJpYWxpemVyLmdldCgpKTsKICAgICAgICAgZ3JhcGhTZXJpYWxp
emVyLT5maW5pc2goKTsKKyAgICAgICAgZ3JhcGhTZXJpYWxpemVyLnJlbGVhc2UoKTsgLy8gUmVs
ZWFzZSBpdCBlYXJsaWVyIHRoYW4gZnJvbnRlbmRXcmFwcGVyCisgICAgICAgIGZyb250ZW5kV3Jh
cHBlci5yZWxlYXNlKCk7CiAgICAgfQogCiAgICAgbV9pbnNwZWN0b3JDbGllbnQtPmR1bXBVbmNv
dW50ZWRBbGxvY2F0ZWRPYmplY3RzKG1lbW9yeUluc3RydW1lbnRhdGlvbkNsaWVudC5jb3VudGVk
T2JqZWN0cygpKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxv
ZwppbmRleCBlMjA4ZTExMTc0OTZlMTQ5M2RlMGZhOTIzMDBlYzlkYmNlYmZjMDVjLi5lNWNkYjVl
OTE5ZDE3ZDcyN2JmN2RjMzFkZGUzNmM5YWQ1ZWYxYjcyIDEwMDY0NAotLS0gYS9Ub29scy9DaGFu
Z2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDggQEAKKzIwMTMtMDItMTMg
IElseWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFdlYiBJ
bnNwZWN0b3I6IE5hdGl2ZSBNZW1vcnkgSW5zdHJ1bWVudGF0aW9uOiByZXBvcnRMZWFmIG1ldGhv
ZCBkb2Vzbid0IHJlcG9ydCB0aGUgbGVhZiBub2RlIHByb3Blcmx5LgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA5NTU0CisKKyAgICAgICAgSW4gc29t
ZSBjYXNlcyBsZWF2ZXMgaGF2ZSBubyBwb2ludGVyIHNvIHdpdGggdGhlIG9sZCBzY2hlbWEgd2Ug
Y2FuJ3QgZ2VuZXJhdGUgbm9kZUlkIGZvciB0aGVtIGJlY2F1c2Ugd2UKKyAgICAgICAgY2FuJ3Qg
aW5zZXJ0IDAgaW50byBoYXNobWFwLiBJdCBoYXBwZW5zIHdoZW4gd2UgY2FsbCBhZGRQcml2YXRl
QnVmZmVyIG1ldGhvZC4KKworICAgICAgICBEcml2ZSBieSBmaXg6IEkgaW50cm9kdWNlZCBhIGNs
aWVudCBpbnRlcmZhY2UgZm9yIHRoZSBIZWFwR3JhcGhTZXJpYWxpemVyLgorICAgICAgICBJdCBo
ZWxwcyBtZSB0byBkbyB0aGUgdGVzdHMgZm9yIHRoZSBzZXJpYWxpemVyLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEl0IGlzIGNvdmVyZWQgYnkgbmV3
bHkgYWRkZWQgdGVzdHMgaW4gVGVzdFdlYktpdEFQSS4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvVGVzdFdlYktpdEFQSS5neXBpOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2Vi
Q29yZS9IZWFwR3JhcGhTZXJpYWxpemVyVGVzdC5jcHA6IEFkZGVkLgorICAgICAgICAoVGVzdFdl
YktpdEFQSSk6CisgICAgICAgIChIZWFwR3JhcGhSZWNlaXZlcik6CisgICAgICAgIChUZXN0V2Vi
S2l0QVBJOjpIZWFwR3JhcGhSZWNlaXZlcjo6SGVhcEdyYXBoUmVjZWl2ZXIpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6SGVhcEdyYXBoUmVjZWl2ZXI6OnByaW50R3JhcGgpOgorICAgICAgICAo
VGVzdFdlYktpdEFQSTo6SGVhcEdyYXBoUmVjZWl2ZXI6OmR1bXBOb2Rlcyk6CisgICAgICAgIChU
ZXN0V2ViS2l0QVBJOjpIZWFwR3JhcGhSZWNlaXZlcjo6ZHVtcEVkZ2VzKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkhlYXBHcmFwaFJlY2VpdmVyOjpkdW1wQmFzZVRvUmVhbE5vZGVJZCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpIZWFwR3JhcGhSZWNlaXZlcjo6ZHVtcFN0cmluZ3MpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6SGVhcEdyYXBoUmVjZWl2ZXI6OnNlcmlhbGl6ZXIpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6SGVhcEdyYXBoUmVjZWl2ZXI6OmNodW5rUGFydCk6Cisg
ICAgICAgIChUZXN0V2ViS2l0QVBJOjpIZWFwR3JhcGhSZWNlaXZlcjo6ZHVtcFBhcnQpOgorICAg
ICAgICAoVGVzdFdlYktpdEFQSTo6SGVhcEdyYXBoUmVjZWl2ZXI6OnN0cmluZ1ZhbHVlKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhlYXBHcmFwaFJlY2VpdmVyOjppbnRWYWx1ZSk6CisgICAg
ICAgIChUZXN0V2ViS2l0QVBJOjpIZWFwR3JhcGhSZWNlaXZlcjo6bm9kZVRvU3RyaW5nKToKKyAg
ICAgICAgKFRlc3RXZWJLaXRBUEk6OkhlYXBHcmFwaFJlY2VpdmVyOjplZGdlVG9TdHJpbmcpOgor
ICAgICAgICAoVGVzdFdlYktpdEFQSTo6SGVhcEdyYXBoUmVjZWl2ZXI6OnByaW50Tm9kZSk6Cisg
ICAgICAgIChIZWxwZXIpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SGVscGVyOjpIZWxwZXIp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6SGVscGVyOjphZGROb2RlKToKKyAgICAgICAgKFRl
c3RXZWJLaXRBUEk6OkhlbHBlcjo6YWRkRWRnZSk6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpI
ZWxwZXI6OmRvbmUpOgorICAgICAgICAoT2JqZWN0KToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6
OkhlbHBlcjo6T2JqZWN0OjpPYmplY3QpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6
CisgICAgICAgIChPd25lcik6CisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpPd25lcjo6T3duZXIp
OgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6T3duZXI6OnJlcG9ydE1lbW9yeVVzYWdlKToKKwog
MjAxMy0wMi0xMyAgR3l1eW91bmcgS2ltICA8Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAg
ICAgICAgIFtXSzJdIFJlbW92ZSB3ZWIgaW50ZW50cyBjYWxsYmFja3MKZGlmZiAtLWdpdCBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS5neXBpIGIvVG9vbHMvVGVzdFdlYktpdEFQ
SS9UZXN0V2ViS2l0QVBJLmd5cGkKaW5kZXggNWU3ZjE3ZThkYThlYTJiMGQzNmY1NDIxNzMwOTdm
MmYzMjJiNDk5YS4uMmJiMGZiZDIyYzIxNjE3ZGNmZjU0OGE0NjIwNjYyN2YxMGE5ODAzMiAxMDA2
NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLmd5cGkKKysrIGIvVG9v
bHMvVGVzdFdlYktpdEFQSS9UZXN0V2ViS2l0QVBJLmd5cGkKQEAgLTMxLDYgKzMxLDcgQEAKIHsK
ICAgICAndmFyaWFibGVzJzogewogICAgICAgICAnVGVzdFdlYktpdEFQSV9maWxlcyc6IFsKKyAg
ICAgICAgICAgICdUZXN0cy9XZWJDb3JlL0hlYXBHcmFwaFNlcmlhbGl6ZXJUZXN0LmNwcCcsCiAg
ICAgICAgICAgICAnVGVzdHMvV2ViQ29yZS9MYXlvdXRVbml0LmNwcCcsCiAgICAgICAgICAgICAn
VGVzdHMvV1RGL0F0b21pY1N0cmluZy5jcHAnLAogICAgICAgICAgICAgJ1Rlc3RzL1dURi9DaGVj
a2VkQXJpdGhtZXRpY09wZXJhdGlvbnMuY3BwJywKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViQ29yZS9IZWFwR3JhcGhTZXJpYWxpemVyVGVzdC5jcHAgYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSGVhcEdyYXBoU2VyaWFsaXplclRlc3QuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjYyMzcxODFmYjg2YTZhNDI3ZTkxZDQyZjdkMTk0MTE2YWJkYjhlYWYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYkNvcmUvSGVhcEdyYXBo
U2VyaWFsaXplclRlc3QuY3BwCkBAIC0wLDAgKzEsMjg0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEzIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldURlN0cmluZ1V0aWxpdGllcy5oIgorI2luY2x1ZGUgPGd0ZXN0L2d0ZXN0Lmg+
CisKKyNpbmNsdWRlICJIZWFwR3JhcGhTZXJpYWxpemVyLmgiCisjaW5jbHVkZSAiTWVtb3J5SW5z
dHJ1bWVudGF0aW9uSW1wbC5oIgorI2luY2x1ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb24u
aD4KKyNpbmNsdWRlIDx3dGYvTWVtb3J5SW5zdHJ1bWVudGF0aW9uSGFzaFNldC5oPgorI2luY2x1
ZGUgPHd0Zi9NZW1vcnlJbnN0cnVtZW50YXRpb25TdHJpbmcuaD4KKyNpbmNsdWRlIDx3dGYvTWVt
b3J5T2JqZWN0SW5mby5oPgorCituYW1lc3BhY2UgVGVzdFdlYktpdEFQSSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOworCitzdGF0aWMgV1RGOjpNZW1vcnlPYmplY3RUeXBlIGdfZGVmYXVs
dE9iamVjdFR5cGUgPSAiRGVmYXVsdE9iamVjdFR5cGUiOworCitjbGFzcyBIZWFwR3JhcGhSZWNl
aXZlciA6IHB1YmxpYyBIZWFwR3JhcGhTZXJpYWxpemVyOjpDbGllbnQgeworcHVibGljOgorICAg
IEhlYXBHcmFwaFJlY2VpdmVyKCkgOiBtX3NlcmlhbGl6ZXIodGhpcykgeyB9CisKKyAgICB2aXJ0
dWFsIHZvaWQgYWRkTmF0aXZlU25hcHNob3RDaHVuayhQYXNzUmVmUHRyPFR5cGVCdWlsZGVyOjpN
ZW1vcnk6OkhlYXBTbmFwc2hvdENodW5rPiBoZWFwU25hcHNob3RDaHVuaykgT1ZFUlJJREUKKyAg
ICB7CisgICAgICAgIEFTU0VSVCghbV9oZWFwU25hcHNob3RDaHVuayk7CisgICAgICAgIG1faGVh
cFNuYXBzaG90Q2h1bmsgPSBoZWFwU25hcHNob3RDaHVuazsKKyAgICAgICAgbV9zdHJpbmdzID0g
Y2h1bmtQYXJ0KCJzdHJpbmdzIik7CisgICAgICAgIG1fZWRnZXMgPSBjaHVua1BhcnQoImVkZ2Vz
Iik7CisgICAgICAgIG1fbm9kZXMgPSBjaHVua1BhcnQoIm5vZGVzIik7CisKKyAgICAgICAgLy8g
UmVzZXQgcGxhdGZvcm0gZGVwZW5kZWQgc2l6ZSBmaWVsZCB2YWx1ZXMuCisgICAgICAgIGZvciAo
SW5zcGVjdG9yQXJyYXk6Oml0ZXJhdG9yIGkgPSBtX25vZGVzLT5iZWdpbigpOyBpICE9IG1fbm9k
ZXMtPmVuZCgpOyBpICs9IHNfbm9kZUZpZWxkQ291bnQpCisgICAgICAgICAgICAqKGkgKyBzX3Np
emVPZmZzZXQpID0gSW5zcGVjdG9yQmFzaWNWYWx1ZTo6Y3JlYXRlKDApOworCisgICAgICAgIG1f
aWQyaW5kZXguY2xlYXIoKTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGluZGV4ID0gMDsgaW5k
ZXggPCBtX25vZGVzLT5sZW5ndGgoKTsgaW5kZXggKz0gc19ub2RlRmllbGRDb3VudCkKKyAgICAg
ICAgICAgIG1faWQyaW5kZXguYWRkKGludFZhbHVlKG1fbm9kZXMuZ2V0KCksIGluZGV4ICsgc19p
ZE9mZnNldCksIGluZGV4KTsKKyAgICB9CisKKyAgICB2b2lkIHByaW50R3JhcGgoKQorICAgIHsK
KyAgICAgICAgRVhQRUNUX1RSVUUobV9oZWFwU25hcHNob3RDaHVuayk7CisgICAgICAgIGludCBw
cm9jZXNzZWRFZGdlc0NvdW50ID0gMDsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgbV9ub2Rlcy0+bGVuZ3RoKCk7IGluZGV4ICs9IHNfbm9kZUZpZWxkQ291bnQpCisg
ICAgICAgICAgICBwcm9jZXNzZWRFZGdlc0NvdW50ICs9IHByaW50Tm9kZShpbmRleCwgcHJvY2Vz
c2VkRWRnZXNDb3VudCk7CisgICAgfQorCisgICAgU3RyaW5nIGR1bXBOb2RlcygpIHsgcmV0dXJu
IGR1bXBQYXJ0KCJub2RlcyIpOyB9CisgICAgU3RyaW5nIGR1bXBFZGdlcygpIHsgcmV0dXJuIGR1
bXBQYXJ0KCJlZGdlcyIpOyB9CisgICAgU3RyaW5nIGR1bXBCYXNlVG9SZWFsTm9kZUlkKCkgeyBy
ZXR1cm4gZHVtcFBhcnQoImJhc2VUb1JlYWxOb2RlSWQiKTsgfQorICAgIFN0cmluZyBkdW1wU3Ry
aW5ncygpIHsgcmV0dXJuIGR1bXBQYXJ0KCJzdHJpbmdzIik7IH0KKworICAgIEhlYXBHcmFwaFNl
cmlhbGl6ZXIqIHNlcmlhbGl6ZXIoKSB7IHJldHVybiAmbV9zZXJpYWxpemVyOyB9CisKK3ByaXZh
dGU6CisgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4gY2h1bmtQYXJ0KFN0cmluZyBwYXJ0
TmFtZSkKKyAgICB7CisgICAgICAgIEVYUEVDVF9UUlVFKG1faGVhcFNuYXBzaG90Q2h1bmspOwor
ICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBjaHVuayA9ICpyZWludGVycHJldF9jYXN0
PFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+Kj4oJm1faGVhcFNuYXBzaG90Q2h1bmspOworICAgICAg
ICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHBhcnRWYWx1ZSA9IGNodW5rLT5nZXQocGFydE5hbWUp
OworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IHBhcnRBcnJheTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUocGFydFZhbHVlLT5hc0FycmF5KCZwYXJ0QXJyYXkpKTsKKyAgICAgICAgcmV0dXJu
IHBhcnRBcnJheS5yZWxlYXNlKCk7CisgICAgfQorCisgICAgU3RyaW5nIGR1bXBQYXJ0KFN0cmlu
ZyBwYXJ0TmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBjaHVua1BhcnQocGFydE5hbWUpLT50
b0pTT05TdHJpbmcoKS5yZXBsYWNlKCJcIiIsICInIik7CisgICAgfQorCisgICAgU3RyaW5nIHN0
cmluZ1ZhbHVlKEluc3BlY3RvckFycmF5KiBhcnJheSwgaW50IGluZGV4KQorICAgIHsKKyAgICAg
ICAgUmVmUHRyPEluc3BlY3RvclZhbHVlPiBpbnNwZWN0b3JWYWx1ZSA9IGFycmF5LT5nZXQoaW5k
ZXgpOworICAgICAgICBTdHJpbmcgdmFsdWU7CisgICAgICAgIEVYUEVDVF9UUlVFKGluc3BlY3Rv
clZhbHVlLT5hc1N0cmluZygmdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIHZhbHVlOworICAgIH0K
KworICAgIGludCBpbnRWYWx1ZShJbnNwZWN0b3JBcnJheSogYXJyYXksIGludCBpbmRleCkKKyAg
ICB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gaW5zcGVjdG9yVmFsdWUgPSBhcnJh
eS0+Z2V0KGluZGV4KTsKKyAgICAgICAgaW50IHZhbHVlOworICAgICAgICBFWFBFQ1RfVFJVRShp
bnNwZWN0b3JWYWx1ZS0+YXNOdW1iZXIoJnZhbHVlKSk7CisgICAgICAgIHJldHVybiB2YWx1ZTsK
KyAgICB9CisKKyAgICBTdHJpbmcgbm9kZVRvU3RyaW5nKHVuc2lnbmVkIG5vZGVJbmRleCkKKyAg
ICB7CisgICAgICAgIFN0cmluZ0J1aWxkZXIgYnVpbGRlcjsKKyAgICAgICAgYnVpbGRlci5hcHBl
bmQoIm5vZGU6ICIpOworICAgICAgICBidWlsZGVyLmFwcGVuZE51bWJlcihpbnRWYWx1ZShtX25v
ZGVzLmdldCgpLCBub2RlSW5kZXggKyBzX2lkT2Zmc2V0KSk7CisgICAgICAgIGJ1aWxkZXIuYXBw
ZW5kKCIgd2l0aCBjbGFzc05hbWU6JyIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmdW
YWx1ZShtX3N0cmluZ3MuZ2V0KCksIGludFZhbHVlKG1fbm9kZXMuZ2V0KCksIG5vZGVJbmRleCAr
IHNfY2xhc3NOYW1lT2Zmc2V0KSkpOworICAgICAgICBidWlsZGVyLmFwcGVuZCgiJyBhbmQgbmFt
ZTogJyIpOworICAgICAgICBidWlsZGVyLmFwcGVuZChzdHJpbmdWYWx1ZShtX3N0cmluZ3MuZ2V0
KCksIGludFZhbHVlKG1fbm9kZXMuZ2V0KCksIG5vZGVJbmRleCArIHNfbmFtZU9mZnNldCkpKTsK
KyAgICAgICAgYnVpbGRlci5hcHBlbmQoIiciKTsKKyAgICAgICAgcmV0dXJuIGJ1aWxkZXIudG9T
dHJpbmcoKTsKKyAgICB9CisKKyAgICBTdHJpbmcgZWRnZVRvU3RyaW5nKHVuc2lnbmVkIGVkZ2VP
cmRpbmFsKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgZWRnZUluZGV4ID0gZWRnZU9yZGluYWwg
KiBzX2VkZ2VGaWVsZENvdW50OworICAgICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CisgICAg
ICAgIGJ1aWxkZXIuYXBwZW5kKCInIik7CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmluZ1Zh
bHVlKG1fc3RyaW5ncy5nZXQoKSwgaW50VmFsdWUobV9lZGdlcy5nZXQoKSwgZWRnZUluZGV4ICsg
c19lZGdlVHlwZU9mZnNldCkpKTsKKyAgICAgICAgYnVpbGRlci5hcHBlbmQoIicgZWRnZSAnIik7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHN0cmluZ1ZhbHVlKG1fc3RyaW5ncy5nZXQoKSwgaW50
VmFsdWUobV9lZGdlcy5nZXQoKSwgZWRnZUluZGV4ICsgc19lZGdlTmFtZU9mZnNldCkpKTsKKyAg
ICAgICAgYnVpbGRlci5hcHBlbmQoIicgcG9pbnRzIHRvICIpOworICAgICAgICBpbnQgbm9kZUlk
ID0gaW50VmFsdWUobV9lZGdlcy5nZXQoKSwgZWRnZUluZGV4ICsgc190b05vZGVJZE9mZnNldCk7
CisgICAgICAgIGJ1aWxkZXIuYXBwZW5kKG5vZGVUb1N0cmluZyhtX2lkMmluZGV4LmdldChub2Rl
SWQpKSk7CisgICAgICAgIHJldHVybiBidWlsZGVyLnRvU3RyaW5nKCk7CisgICAgfQorCisgICAg
aW50IHByaW50Tm9kZSh1bnNpZ25lZCBub2RlSW5kZXgsIHVuc2lnbmVkIHByb2Nlc3NlZEVkZ2Vz
Q291bnQpCisgICAgeworICAgICAgICBTdHJpbmcgbm9kZVN0cmluZyA9IG5vZGVUb1N0cmluZyhu
b2RlSW5kZXgpOworICAgICAgICB1bnNpZ25lZCBlZGdlQ291bnQgPSBpbnRWYWx1ZShtX25vZGVz
LmdldCgpLCBub2RlSW5kZXggKyBzX2VkZ2VDb3VudE9mZnNldCk7CisKKyAgICAgICAgcHJpbnRm
KCIlc1xuIiwgbm9kZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGVkZ2VDb3VudDsgKytpKSB7CisgICAgICAgICAgICBTdHJpbmcgZWRnZVRl
eHQgPSBlZGdlVG9TdHJpbmcoaSArIHByb2Nlc3NlZEVkZ2VzQ291bnQpOworICAgICAgICAgICAg
cHJpbnRmKCJcdGhhcyAlc1xuIiwgZWRnZVRleHQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIH0K
KyAgICAgICAgcmV0dXJuIGVkZ2VDb3VudDsKKyAgICB9CisKKyAgICBIZWFwR3JhcGhTZXJpYWxp
emVyIG1fc2VyaWFsaXplcjsKKyAgICBSZWZQdHI8VHlwZUJ1aWxkZXI6Ok1lbW9yeTo6SGVhcFNu
YXBzaG90Q2h1bms+IG1faGVhcFNuYXBzaG90Q2h1bms7CisKKyAgICBSZWZQdHI8SW5zcGVjdG9y
QXJyYXk+IG1fc3RyaW5nczsKKyAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IG1fbm9kZXM7Cisg
ICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBtX2VkZ2VzOworICAgIEhhc2hNYXA8aW50LCBpbnQ+
IG1faWQyaW5kZXg7CisKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfbm9kZUZpZWxkQ291bnQgPSA1
OworICAgIHN0YXRpYyBjb25zdCBpbnQgc19jbGFzc05hbWVPZmZzZXQgPSAwOworICAgIHN0YXRp
YyBjb25zdCBpbnQgc19uYW1lT2Zmc2V0ID0gMTsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfaWRP
ZmZzZXQgPSAyOworICAgIHN0YXRpYyBjb25zdCBpbnQgc19zaXplT2Zmc2V0ID0gMzsKKyAgICBz
dGF0aWMgY29uc3QgaW50IHNfZWRnZUNvdW50T2Zmc2V0ID0gNDsKKworICAgIHN0YXRpYyBjb25z
dCBpbnQgc19lZGdlRmllbGRDb3VudCA9IDM7CisgICAgc3RhdGljIGNvbnN0IGludCBzX2VkZ2VU
eXBlT2Zmc2V0ID0gMDsKKyAgICBzdGF0aWMgY29uc3QgaW50IHNfZWRnZU5hbWVPZmZzZXQgPSAx
OworICAgIHN0YXRpYyBjb25zdCBpbnQgc190b05vZGVJZE9mZnNldCA9IDI7Cit9OworCitjbGFz
cyBIZWxwZXIgeworcHVibGljOgorICAgIEhlbHBlcihIZWFwR3JhcGhTZXJpYWxpemVyKiBzZXJp
YWxpemVyKSA6IG1fc2VyaWFsaXplcihzZXJpYWxpemVyKSwgbV9jdXJyZW50UG9pbnRlcigwKSB7
IH0KKyAgICB2b2lkKiBhZGROb2RlKGNvbnN0IGNoYXIqIGNsYXNzTmFtZSwgY29uc3QgY2hhciog
bmFtZSwgYm9vbCBpc1Jvb3QpCisgICAgeworICAgICAgICBXVEY6Ok1lbW9yeU9iamVjdEluZm8g
aW5mbygwLCBnX2RlZmF1bHRPYmplY3RUeXBlLCArK21fY3VycmVudFBvaW50ZXIpOworICAgICAg
ICBpbmZvLnNldENsYXNzTmFtZShjbGFzc05hbWUpOworICAgICAgICBpbmZvLnNldE5hbWUobmFt
ZSk7CisgICAgICAgIGlmIChpc1Jvb3QpCisgICAgICAgICAgICBpbmZvLm1hcmtBc1Jvb3QoKTsK
KyAgICAgICAgbV9zZXJpYWxpemVyLT5yZXBvcnROb2RlKGluZm8pOworICAgICAgICByZXR1cm4g
bV9jdXJyZW50UG9pbnRlcjsKKyAgICB9CisKKyAgICB2b2lkIGFkZEVkZ2Uodm9pZCogdG8sIGNv
bnN0IGNoYXIqIGVkZ2VOYW1lLCBXVEY6Ok1lbWJlclR5cGUgbWVtYmVyVHlwZSkKKyAgICB7Cisg
ICAgICAgIG1fc2VyaWFsaXplci0+cmVwb3J0RWRnZSh0bywgZWRnZU5hbWUsIG1lbWJlclR5cGUp
OworICAgIH0KKworICAgIHZvaWQgZG9uZSgpCisgICAgeworICAgICAgICBtX3NlcmlhbGl6ZXIt
PmZpbmlzaCgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBIZWFwR3JhcGhTZXJpYWxpemVyKiBt
X3NlcmlhbGl6ZXI7CisKKyAgICBjbGFzcyBPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAg
T2JqZWN0KCkgeyBtX2RhdGFbMF0gPSAwOyB9CisgICAgICAgIGNoYXIgbV9kYXRhW3NpemVvZih2
b2lkKildOworICAgIH07CisgICAgT2JqZWN0KiBtX2N1cnJlbnRQb2ludGVyOworfTsKKworVEVT
VChIZWFwR3JhcGhTZXJpYWxpemVyVGVzdCwgc25hcHNob3RXaXRob3V0VXNlck9iamVjdHMpCit7
CisgICAgSGVhcEdyYXBoUmVjZWl2ZXIgcmVjZWl2ZXI7CisgICAgSGVscGVyIGhlbHBlcihyZWNl
aXZlci5zZXJpYWxpemVyKCkpOworICAgIGhlbHBlci5kb25lKCk7CisgICAgcmVjZWl2ZXIucHJp
bnRHcmFwaCgpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIlsnJywnd2VhaycsJ293blJlZicsJ2Nv
dW50UmVmJywndW5rbm93bicsJ1Jvb3QnXSIpLCByZWNlaXZlci5kdW1wU3RyaW5ncygpKTsKKyAg
ICBFWFBFQ1RfRVEoU3RyaW5nKCJbNSwwLDEsMCwwXSIpLCByZWNlaXZlci5kdW1wTm9kZXMoKSk7
IC8vIE9ubHkgUm9vdCBvYmplY3QuCisgICAgRVhQRUNUX0VRKFN0cmluZygiW10iKSwgcmVjZWl2
ZXIuZHVtcEVkZ2VzKCkpOyAvLyBObyBlZGdlcy4KKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJbXSIp
LCByZWNlaXZlci5kdW1wQmFzZVRvUmVhbE5vZGVJZCgpKTsgLy8gTm8gaWQgbWFwcy4KK30KKwor
VEVTVChIZWFwR3JhcGhTZXJpYWxpemVyVGVzdCwgb25lUm9vdFVzZXJPYmplY3QpCit7CisgICAg
SGVhcEdyYXBoUmVjZWl2ZXIgcmVjZWl2ZXI7CisgICAgSGVscGVyIGhlbHBlcihyZWNlaXZlci5z
ZXJpYWxpemVyKCkpOworICAgIGhlbHBlci5hZGROb2RlKCJDbGFzc05hbWUiLCAib2JqZWN0TmFt
ZSIsIHRydWUpOworICAgIGhlbHBlci5kb25lKCk7CisgICAgcmVjZWl2ZXIucHJpbnRHcmFwaCgp
OworICAgIEVYUEVDVF9FUShTdHJpbmcoIlsnJywnd2VhaycsJ293blJlZicsJ2NvdW50UmVmJywn
dW5rbm93bicsJ0NsYXNzTmFtZScsJ29iamVjdE5hbWUnLCdSb290J10iKSwgcmVjZWl2ZXIuZHVt
cFN0cmluZ3MoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiWzUsNiwxLDAsMCw3LDAsMiwwLDFd
IiksIHJlY2VpdmVyLmR1bXBOb2RlcygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJbMSwwLDFd
IiksIHJlY2VpdmVyLmR1bXBFZGdlcygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJbXSIpLCBy
ZWNlaXZlci5kdW1wQmFzZVRvUmVhbE5vZGVJZCgpKTsKK30KKworVEVTVChIZWFwR3JhcGhTZXJp
YWxpemVyVGVzdCwgdHdvVXNlck9iamVjdHNXaXRoRWRnZSkKK3sKKyAgICBIZWFwR3JhcGhSZWNl
aXZlciByZWNlaXZlcjsKKyAgICBIZWxwZXIgaGVscGVyKHJlY2VpdmVyLnNlcmlhbGl6ZXIoKSk7
CisgICAgdm9pZCogY2hpbGRPYmplY3QgPSBoZWxwZXIuYWRkTm9kZSgiQ2hpbGQiLCAiY2hpbGQi
LCBmYWxzZSk7CisgICAgaGVscGVyLmFkZEVkZ2UoY2hpbGRPYmplY3QsICJwb2ludGVyVG9DaGls
ZCIsIFdURjo6T3duUHRyTWVtYmVyKTsKKyAgICBoZWxwZXIuYWRkTm9kZSgiUGFyZW50IiwgInBh
cmVudCIsIHRydWUpOworICAgIGhlbHBlci5kb25lKCk7CisgICAgcmVjZWl2ZXIucHJpbnRHcmFw
aCgpOworICAgIEVYUEVDVF9FUShTdHJpbmcoIlsnJywnd2VhaycsJ293blJlZicsJ2NvdW50UmVm
JywndW5rbm93bicsJ0NoaWxkJywnY2hpbGQnLCdwb2ludGVyVG9DaGlsZCcsJ1BhcmVudCcsJ3Bh
cmVudCcsJ1Jvb3QnXSIpLCByZWNlaXZlci5kdW1wU3RyaW5ncygpKTsKKyAgICBFWFBFQ1RfRVEo
U3RyaW5nKCJbNSw2LDEsMCwwLDgsOSwyLDAsMSwxMCwwLDMsMCwxXSIpLCByZWNlaXZlci5kdW1w
Tm9kZXMoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiWzIsNywxLDEsMCwyXSIpLCByZWNlaXZl
ci5kdW1wRWRnZXMoKSk7CisgICAgRVhQRUNUX0VRKFN0cmluZygiW10iKSwgcmVjZWl2ZXIuZHVt
cEJhc2VUb1JlYWxOb2RlSWQoKSk7Cit9CisKK2NsYXNzIE93bmVyIHsKK3B1YmxpYzoKKyAgICBP
d25lcigpCisgICAgeworICAgICAgICBtX3N0cmluZ3MuYWRkKCJmaXJzdCBlbGVtZW50Iik7Cisg
ICAgICAgIG1fc3RyaW5ncy5hZGQoInNlY29uZCBlbGVtZW50Iik7CisgICAgfQorICAgIHZvaWQg
cmVwb3J0TWVtb3J5VXNhZ2UoV1RGOjpNZW1vcnlPYmplY3RJbmZvKiBtZW1vcnlPYmplY3RJbmZv
KSBjb25zdAorICAgIHsKKyAgICAgICAgV1RGOjpNZW1vcnlDbGFzc0luZm8gaW5mbyhtZW1vcnlP
YmplY3RJbmZvLCB0aGlzLCBnX2RlZmF1bHRPYmplY3RUeXBlKTsKKyAgICAgICAgaW5mby5hZGRN
ZW1iZXIobV9zdHJpbmdzLCAic3RyaW5ncyIpOworICAgIH0KK3ByaXZhdGU6CisgICAgSGFzaFNl
dDxTdHJpbmc+IG1fc3RyaW5nczsKK307CisKK1RFU1QoSGVhcEdyYXBoU2VyaWFsaXplclRlc3Qs
IGhhc2hTZXRXaXRoVHdvU3RyaW5ncykKK3sKKyAgICBIZWFwR3JhcGhSZWNlaXZlciByZWNlaXZl
cjsKKyAgICBNZW1vcnlJbnN0cnVtZW50YXRpb25DbGllbnRJbXBsIG1lbW9yeUluc3RydW1lbnRh
dGlvbkNsaWVudChyZWNlaXZlci5zZXJpYWxpemVyKCkpOworICAgIE1lbW9yeUluc3RydW1lbnRh
dGlvbkltcGwgbWVtb3J5SW5zdHJ1bWVudGF0aW9uKCZtZW1vcnlJbnN0cnVtZW50YXRpb25DbGll
bnQpOworCisgICAgT3duZXIgb3duZXI7CisgICAgbWVtb3J5SW5zdHJ1bWVudGF0aW9uLmFkZFJv
b3RPYmplY3QoJm93bmVyKTsKKyAgICByZWNlaXZlci5zZXJpYWxpemVyKCktPmZpbmlzaCgpOwor
ICAgIHJlY2VpdmVyLnByaW50R3JhcGgoKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJbNSwwLDEs
MCwwLDgsMCw0LDAsMyw5LDAsMywwLDAsOSwwLDIsMCwwLDEwLDAsNSwwLDFdIiksIHJlY2VpdmVy
LmR1bXBOb2RlcygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJbMiw2LDEsMSw3LDIsMSw3LDMs
MSwwLDRdIiksIHJlY2VpdmVyLmR1bXBFZGdlcygpKTsKKyAgICBFWFBFQ1RfRVEoU3RyaW5nKCJb
XSIpLCByZWNlaXZlci5kdW1wQmFzZVRvUmVhbE5vZGVJZCgpKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UK
</data>

          </attachment>
      

    </bug>

</bugzilla>