<?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>87976</bug_id>
          
          <creation_ts>2012-05-31 07:46:26 -0700</creation_ts>
          <short_desc>Speech JavaScript API: mock WebSpeechRecognizer for DumpRenderTree</short_desc>
          <delta_ts>2012-06-08 04:02:57 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>80261</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Hans Wennborg">hans</reporter>
          <assigned_to name="Hans Wennborg">hans</assigned_to>
          <cc>primiano</cc>
    
    <cc>satish</cc>
    
    <cc>tkent</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>638405</commentid>
    <comment_count>0</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-05-31 07:46:26 -0700</bug_when>
    <thetext>Speech JavaScript API: mock WebSpeechRecognizer for DumpRenderTree</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638417</commentid>
    <comment_count>1</comment_count>
      <attachid>145094</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-05-31 07:53:42 -0700</bug_when>
    <thetext>Created attachment 145094
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638875</commentid>
    <comment_count>2</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-31 18:19:21 -0700</bug_when>
    <thetext>Can you implement the mock in Source/WebCore/testing/ ?
Implementing a Chromium-specific mock is not great for code sharing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639115</commentid>
    <comment_count>3</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-06-01 02:15:39 -0700</bug_when>
    <thetext>In https://bugs.webkit.org/show_bug.cgi?id=76443#c22 it was questioned why the mock for speech input was living in WebCore, and it was suggested that the mock should just be part of DumpRenderTree, which is why I moved it there. That also means we didn&apos;t have to have a bunch of wrappers around it.

This new mock is modeled on that previous MockWebSpeechInputController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>640331</commentid>
    <comment_count>4</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-03 22:47:17 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; In https://bugs.webkit.org/show_bug.cgi?id=76443#c22 it was questioned why the mock for speech input was living in WebCore, and it was suggested that the mock should just be part of DumpRenderTree, which is why I moved it there. That also means we didn&apos;t have to have a bunch of wrappers around it.
&gt; 
&gt; This new mock is modeled on that previous MockWebSpeechInputController.

It seems fishd wasn&apos;t negative about putting a mock to WebCore/testing/. 
It&apos;s ok to have mocks in DRT/chromium/, but I think putting mocks to WebCore/testing/ is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>642360</commentid>
    <comment_count>5</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-06-06 04:15:44 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; (In reply to comment #3)
&gt; &gt; In https://bugs.webkit.org/show_bug.cgi?id=76443#c22 it was questioned why the mock for speech input was living in WebCore, and it was suggested that the mock should just be part of DumpRenderTree, which is why I moved it there. That also means we didn&apos;t have to have a bunch of wrappers around it.
&gt; &gt; 
&gt; &gt; This new mock is modeled on that previous MockWebSpeechInputController.
&gt; 
&gt; It seems fishd wasn&apos;t negative about putting a mock to WebCore/testing/. 
&gt; It&apos;s ok to have mocks in DRT/chromium/, but I think putting mocks to WebCore/testing/ is better.

I don&apos;t see any full-blown mocks in WebCore/testing/, it looks more like hooks into different WebCore objects.

There are some client mocks in WebCore/platform/mock/. For example, that&apos;s where the SpeechInputController mock lived before it was moved into DRT. The problem with these mocks is that the embedder is supposed to pass them in when creating the Page object. In Chromium&apos;s case, this means we have to wrap it. In this case, I think the overhead of the wrapping stuff would become more code than the mock itself.

If it&apos;s OK to have the mock in DRT/chromium, I would prefer that. It&apos;s much simpler, and it matches what we do for MockWebSpeechInputController.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>643573</commentid>
    <comment_count>6</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-06-07 08:32:37 -0700</bug_when>
    <thetext>About the offline request to use the copyright header from Tools/DumpRenderTree/chromium/DumpRenderTree.cpp instead: I believe that&apos;s actually the old copyright header, that we&apos;re not using for new code anymore. I believe the one I used in my patch is the correct one. (See e.g. jamesr&apos;s comment in 
https://bugs.webkit.org/show_bug.cgi?id=66008#c12)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644439</commentid>
    <comment_count>7</comment_count>
      <attachid>145094</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-08 00:53:04 -0700</bug_when>
    <thetext>Comment on attachment 145094
Patch

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

&gt; Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:94
&gt; +    WebVector&lt;WebString&gt; transcripts(static_cast&lt;size_t&gt;(1));
&gt; +    WebVector&lt;float&gt; confidences(static_cast&lt;size_t&gt;(1));

Do we need static_cast&lt;&gt;? Doesn&apos;t 1 or 1u work?

&gt; Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.h:94
&gt; +    // Task class for calling a client function that does not take any parameters.
&gt; +    typedef void (WebKit::WebSpeechRecognizerClient::*ClientFunctionPointer)(const WebKit::WebSpeechRecognitionHandle&amp;);
&gt; +    class ClientCallTask : public MethodTask&lt;MockWebSpeechRecognizer&gt; {
&gt; +    public:
&gt; +        ClientCallTask(MockWebSpeechRecognizer* mock, ClientFunctionPointer function) : MethodTask&lt;MockWebSpeechRecognizer&gt;(mock), m_function(function) { }
&gt; +        virtual void runIfValid() OVERRIDE { (m_object-&gt;m_client-&gt;*m_function)(m_object-&gt;m_handle); }
&gt; +
&gt; +    private:
&gt; +        ClientFunctionPointer m_function;
&gt; +    };
&gt; +
&gt; +    // Task for delivering a result event.
&gt; +    class ResultTask : public MethodTask&lt;MockWebSpeechRecognizer&gt; {
&gt; +    public:
&gt; +        ResultTask(MockWebSpeechRecognizer* mock, const WebKit::WebString transcript, float confidence) : MethodTask&lt;MockWebSpeechRecognizer&gt;(mock), m_transcript(transcript), m_confidence(confidence) { }
&gt; +        virtual void runIfValid() OVERRIDE;
&gt; +
&gt; +    private:
&gt; +        WebKit::WebString m_transcript;
&gt; +        float m_confidence;
&gt; +    };
&gt; +
&gt; +    // Task for delivering a nomatch event.
&gt; +    class NoMatchTask : public MethodTask&lt;MockWebSpeechRecognizer&gt; {
&gt; +    public:
&gt; +        NoMatchTask(MockWebSpeechRecognizer* mock) : MethodTask&lt;MockWebSpeechRecognizer&gt;(mock) { }
&gt; +        virtual void runIfValid() OVERRIDE { m_object-&gt;m_client-&gt;didReceiveNoMatch(m_object-&gt;m_handle, WebKit::WebSpeechRecognitionResult()); }
&gt; +    };

Can you move them to MockWebSpeechRecognizer.cpp?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644521</commentid>
    <comment_count>8</comment_count>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-06-08 02:43:28 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 145094 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=145094&amp;action=review
&gt; 
&gt; &gt; Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:94
&gt; &gt; +    WebVector&lt;WebString&gt; transcripts(static_cast&lt;size_t&gt;(1));
&gt; &gt; +    WebVector&lt;float&gt; confidences(static_cast&lt;size_t&gt;(1));
&gt; 
&gt; Do we need static_cast&lt;&gt;? Doesn&apos;t 1 or 1u work?
Yes, they&apos;re needed. If I try 1U or 1, the compiler will try to use the &quot;template &lt;typename C&gt; WebVector(const C&amp; other)&quot; constructor:

WebVector.h:84:29: error: member reference base type &apos;const unsigned int&apos; is not a structure or union
        initializeFrom(other.size() ? &amp;other[0] : 0, other.size());
                       ~~~~~^~~~~
Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.cpp:93:26: note: in instantiation of function template specialization &apos;WebKit::WebVector&lt;WebKit::WebString&gt;::WebVector&lt;unsigned int&gt;&apos; requested here
    WebVector&lt;WebString&gt; transcripts(1U);
                         ^

&gt; &gt; Tools/DumpRenderTree/chromium/MockWebSpeechRecognizer.h:94
&gt; &gt; +    // Task class for calling a client function that does not take any parameters.
&gt; &gt; +    typedef void (WebKit::WebSpeechRecognizerClient::*ClientFunctionPointer)(const WebKit::WebSpeechRecognitionHandle&amp;);
&gt; &gt; +    class ClientCallTask : public MethodTask&lt;MockWebSpeechRecognizer&gt; {
&gt; &gt; +    public:
&gt; &gt; +        ClientCallTask(MockWebSpeechRecognizer* mock, ClientFunctionPointer function) : MethodTask&lt;MockWebSpeechRecognizer&gt;(mock), m_function(function) { }
&gt; &gt; +        virtual void runIfValid() OVERRIDE { (m_object-&gt;m_client-&gt;*m_function)(m_object-&gt;m_handle); }
&gt; &gt; +
&gt; &gt; +    private:
&gt; &gt; +        ClientFunctionPointer m_function;
&gt; &gt; +    };
&gt; &gt; +
&gt; &gt; +    // Task for delivering a result event.
&gt; &gt; +    class ResultTask : public MethodTask&lt;MockWebSpeechRecognizer&gt; {
&gt; &gt; +    public:
&gt; &gt; +        ResultTask(MockWebSpeechRecognizer* mock, const WebKit::WebString transcript, float confidence) : MethodTask&lt;MockWebSpeechRecognizer&gt;(mock), m_transcript(transcript), m_confidence(confidence) { }
&gt; &gt; +        virtual void runIfValid() OVERRIDE;
&gt; &gt; +
&gt; &gt; +    private:
&gt; &gt; +        WebKit::WebString m_transcript;
&gt; &gt; +        float m_confidence;
&gt; &gt; +    };
&gt; &gt; +
&gt; &gt; +    // Task for delivering a nomatch event.
&gt; &gt; +    class NoMatchTask : public MethodTask&lt;MockWebSpeechRecognizer&gt; {
&gt; &gt; +    public:
&gt; &gt; +        NoMatchTask(MockWebSpeechRecognizer* mock) : MethodTask&lt;MockWebSpeechRecognizer&gt;(mock) { }
&gt; &gt; +        virtual void runIfValid() OVERRIDE { m_object-&gt;m_client-&gt;didReceiveNoMatch(m_object-&gt;m_handle, WebKit::WebSpeechRecognitionResult()); }
&gt; &gt; +    };
&gt; 
&gt; Can you move them to MockWebSpeechRecognizer.cpp?

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644522</commentid>
    <comment_count>9</comment_count>
      <attachid>146523</attachid>
    <who name="Hans Wennborg">hans</who>
    <bug_when>2012-06-08 02:44:04 -0700</bug_when>
    <thetext>Created attachment 146523
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644541</commentid>
    <comment_count>10</comment_count>
      <attachid>146523</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-06-08 03:09:08 -0700</bug_when>
    <thetext>Comment on attachment 146523
Patch

ok</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644555</commentid>
    <comment_count>11</comment_count>
      <attachid>146523</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 04:02:43 -0700</bug_when>
    <thetext>Comment on attachment 146523
Patch

Clearing flags on attachment: 146523

Committed r119818: &lt;http://trac.webkit.org/changeset/119818&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>644556</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-06-08 04:02:57 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145094</attachid>
            <date>2012-05-31 07:53:42 -0700</date>
            <delta_ts>2012-06-08 02:43:50 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87976-20120531155341.patch</filename>
            <type>text/plain</type>
            <size>23405</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5MDc2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMDE0MWY2YzU2YTg2MWE4YWNmNjQ1NjRiMDcwMjA3Zjgy
MDQ4ZWE1Yi4uZGVkYWYzM2FhYTI4YzI1Nzk5OWJhZmExNGU1MDU0ZTgzZmJkMTJkMyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDEyLTA1LTMxICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBtb2NrIFdlYlNwZWVjaFJlY29nbml6ZXIgZm9y
IER1bXBSZW5kZXJUcmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04Nzk3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByb3ZpZGUgYSBtb2NrIGltcGxlbWVudGF0aW9uIG9mIFdlYlNwZWVjaFJlY29nbml6
ZXIgZm9yCisgICAgICAgIER1bXBSZW5kZXJUcmVlLiBUaGlzIHdpbGwgYWxsb3cgYmV0dGVyIHRl
c3Rpbmcgb2YgdGhlIEFQSSB2aWEgbGF5b3V0CisgICAgICAgIHRlc3RzLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoTW9ja1dlYlNw
ZWVjaFJlY29nbml6ZXI6OmNyZWF0ZSk6CisgICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cjo6c3RhcnQpOgorICAgICAgICAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3ApOgorICAg
ICAgICAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KToKKyAgICAgICAgKE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcik6CisgICAgICAgIChNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6fk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAg
KE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpSZXN1bHRUYXNrOjpydW5JZlZhbGlkKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cik6CisgICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6YWRkTW9ja1Jlc3VsdCk6Cisg
ICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6dGFza0xpc3QpOgorICAgICAgICAoQ2xp
ZW50Q2FsbFRhc2spOgorICAgICAgICAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OkNsaWVudENh
bGxUYXNrOjpDbGllbnRDYWxsVGFzayk6CisgICAgICAgIChSZXN1bHRUYXNrKToKKyAgICAgICAg
KE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpSZXN1bHRUYXNrOjpSZXN1bHRUYXNrKToKKyAgICAg
ICAgKE5vTWF0Y2hUYXNrKToKKyAgICAgICAgKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpOb01h
dGNoVGFzazo6Tm9NYXRjaFRhc2spOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpzcGVlY2hSZWNvZ25pemVy
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oOgorICAg
ICAgICAoV2ViVmlld0hvc3QpOgorICAgICAgICAoV2ViVmlld0hvc3Q6Om1vY2tTcGVlY2hSZWNv
Z25pemVyKToKKwogMjAxMi0wNS0zMCAgU3RlcGhhbmllIExld2lzICA8c2xld2lzQGFwcGxlLmNv
bT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc4
MDMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCmluZGV4IGU4ZDg4YmU3
NDFiMDk3ODBjMzU2MzE5YmNmYzUyMzhlZTdhZDM4YzcuLjU0MTJhMTk5ZTkwZWIzNTNiMTIxMzJl
YWQ1YmU3YTdlNjU1YjUzOTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBS
ZW5kZXJUcmVlLmd5cGkKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
Z3lwaQpAQCAtMjgsNiArMjgsOCBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL01vY2tXZWJQcmVy
ZW5kZXJpbmdTdXBwb3J0LmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL01vY2tXZWJTcGVlY2hJ
bnB1dENvbnRyb2xsZXIuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9Nb2NrV2ViU3BlZWNo
SW5wdXRDb250cm9sbGVyLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL01vY2tXZWJTcGVlY2hS
ZWNvZ25pemVyLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2VudGVyLmgn
LAogICAgICAgICAgICAgJ2Nocm9taXVtL05vdGlmaWNhdGlvblByZXNlbnRlci5jcHAnLAogICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rhc2suaCcsCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKaW5kZXggYzczOTE0M2UwNjA1
MTFmZTEzN2E4YWE5NGY2Y2JlMmYzZTNlN2IyNS4uOWM0MjZmZTc0YTdlZGNiOThmMTY0NmNmYTM1
MDQwOTc2ZDlmYmMwMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcApAQCAtMzQsNiArMzQsNyBAQAogCiAjaW5jbHVk
ZSAiRFJURGV2VG9vbHNBZ2VudC5oIgogI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRy
b2xsZXIuaCIKKyNpbmNsdWRlICJNb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIgogI2luY2x1ZGUg
IlRlc3RTaGVsbC5oIgogI2luY2x1ZGUgIldlYkFuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJXZWJCaW5kaW5ncy5oIgpAQCAtMTEwLDYgKzExMSw5IEBAIExheW91dFRlc3RDb250cm9s
bGVyOjpMYXlvdXRUZXN0Q29udHJvbGxlcihUZXN0U2hlbGwqIHNoZWxsKQogICAgIGJpbmRNZXRo
b2QoImFkZE1vY2tTcGVlY2hJbnB1dFJlc3VsdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRk
TW9ja1NwZWVjaElucHV0UmVzdWx0KTsKICAgICBiaW5kTWV0aG9kKCJzZXRNb2NrU3BlZWNoSW5w
dXREdW1wUmVjdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVt
cFJlY3QpOwogI2VuZGlmCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKyAgICBiaW5kTWV0
aG9kKCJhZGRNb2NrU3BlZWNoUmVjb2duaXRpb25SZXN1bHQiLCAmTGF5b3V0VGVzdENvbnRyb2xs
ZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk7CisjZW5kaWYKICAgICBiaW5kTWV0
aG9kKCJhZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSIsICZMYXlvdXRUZXN0Q29udHJvbGxl
cjo6YWRkT3JpZ2luQWNjZXNzV2hpdGVsaXN0RW50cnkpOwogICAgIGJpbmRNZXRob2QoImFkZFVz
ZXJTY3JpcHQiLCAmTGF5b3V0VGVzdENvbnRyb2xsZXI6OmFkZFVzZXJTY3JpcHQpOwogICAgIGJp
bmRNZXRob2QoImFkZFVzZXJTdHlsZVNoZWV0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjphZGRV
c2VyU3R5bGVTaGVldCk7CkBAIC0xOTQwLDYgKzE5NDQsMTggQEAgdm9pZCBMYXlvdXRUZXN0Q29u
dHJvbGxlcjo6c2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0
JiBhcmcKIH0KICNlbmRpZgogCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKK3ZvaWQgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQoreworICAgIHJl
c3VsdC0+c2V0TnVsbCgpOworICAgIGlmIChhcmd1bWVudHMuc2l6ZSgpIDwgMiB8fCAhYXJndW1l
bnRzWzBdLmlzU3RyaW5nKCkgfHwgIWFyZ3VtZW50c1sxXS5pc051bWJlcigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIHJlY29nbml6ZXIgPSBt
X3NoZWxsLT53ZWJWaWV3SG9zdCgpLT5tb2NrU3BlZWNoUmVjb2duaXplcigpKQorICAgICAgICBy
ZWNvZ25pemVyLT5hZGRNb2NrUmVzdWx0KGNwcFZhcmlhbnRUb1dlYlN0cmluZyhhcmd1bWVudHNb
MF0pLCBhcmd1bWVudHNbMV0udG9Eb3VibGUoKSk7Cit9CisjZW5kaWYKKwogdm9pZCBMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6c3RhcnRTcGVlY2hJbnB1dChjb25zdCBDcHBBcmd1bWVudExpc3QmIGFy
Z3VtZW50cywgQ3BwVmFyaWFudCogcmVzdWx0KQogewogICAgIHJlc3VsdC0+c2V0TnVsbCgpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRy
b2xsZXIuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmgKaW5kZXggMzc5Nzg2NTdlM2IxZmYzN2I5ZDQzOGE1NDU2OGI0MmNjODQ0ZWRhMi4uOWJh
MmJkMGU2OTgyNmYzNDEyMWVmODg4MGExNzczZGM0ZWQ1ZDFkYSAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5oCkBAIC0zNzUs
NiArMzc1LDkgQEAgcHVibGljOgogICAgIHZvaWQgYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0KGNv
bnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICAgICB2b2lkIHNldE1vY2tTcGVl
Y2hJbnB1dER1bXBSZWN0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYsIENwcFZhcmlhbnQqKTsKICNl
bmRpZgorI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisgICAgdm9pZCBhZGRNb2NrU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwor
I2VuZGlmCiAgICAgdm9pZCBzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYs
IENwcFZhcmlhbnQqKTsKIAogICAgIHZvaWQgbGF5ZXJUcmVlQXNUZXh0KGNvbnN0IENwcEFyZ3Vt
ZW50TGlzdCYgYXJncywgQ3BwVmFyaWFudCogcmVzdWx0KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL01vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4zYzRmZGU4NGQzNGVlZGQ1M2FiMWM4NTYyOGUxYzE4ZTYxMjdkZDI1Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIuY3BwCkBAIC0wLDAgKzEsMTAzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEy
IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyLmgiCisKKyNpZiBFTkFCTEUoU0NS
SVBURURfU1BFRUNIKQorCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitQYXNzT3duUHRyPE1v
Y2tXZWJTcGVlY2hSZWNvZ25pemVyPiBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6Y3JlYXRlKCkK
K3sKKyAgICByZXR1cm4gYWRvcHRQdHIobmV3IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCkpOwor
fQorCit2b2lkIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpzdGFydChjb25zdCBXZWJTcGVlY2hS
ZWNvZ25pdGlvbkhhbmRsZSYgaGFuZGxlLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFt
cyYgcGFyYW1zLCBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9o
YW5kbGUgPSBoYW5kbGU7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBwb3N0VGFzayhu
ZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZFN0
YXJ0KSk7CisgICAgcG9zdFRhc2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydEF1ZGlvKSk7CisgICAgcG9zdFRhc2sobmV3IENsaWVu
dENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydFNvdW5k
KSk7CisgICAgcG9zdFRhc2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNv
Z25pemVyQ2xpZW50OjpkaWRTdGFydFNwZWVjaCkpOworCisgICAgaWYgKCFtX21vY2tUcmFuc2Ny
aXB0cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgQVNTRVJUKG1fbW9ja1RyYW5zY3JpcHRzLnNpemUo
KSA9PSBtX21vY2tDb25maWRlbmNlcy5zaXplKCkpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbV9tb2NrVHJhbnNjcmlwdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBwb3N0
VGFzayhuZXcgUmVzdWx0VGFzayh0aGlzLCBtX21vY2tUcmFuc2NyaXB0c1tpXSwgbV9tb2NrQ29u
ZmlkZW5jZXNbaV0pKTsKKworICAgICAgICBtX21vY2tUcmFuc2NyaXB0cy5jbGVhcigpOworICAg
ICAgICBtX21vY2tDb25maWRlbmNlcy5jbGVhcigpOworICAgIH0gZWxzZQorICAgICAgICBwb3N0
VGFzayhuZXcgTm9NYXRjaFRhc2sodGhpcykpOworCisgICAgcG9zdFRhc2sobmV3IENsaWVudENh
bGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRTcGVlY2gpKTsK
KyAgICBwb3N0VGFzayhuZXcgQ2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6
ZXJDbGllbnQ6OmRpZEVuZFNvdW5kKSk7CisgICAgcG9zdFRhc2sobmV3IENsaWVudENhbGxUYXNr
KHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRBdWRpbykpOworICAgIHBv
c3RUYXNrKG5ldyBDbGllbnRDYWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVu
dDo6ZGlkRW5kKSk7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3AoY29u
c3QgV2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXpl
ckNsaWVudCogY2xpZW50KQoreworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50
ID0gY2xpZW50OworCisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKK30KKwordm9pZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6YWJvcnQoY29uc3Qg
V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNs
aWVudCogY2xpZW50KQoreworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50ID0g
Y2xpZW50OworCisgICAgLy8gRklYTUU6IEltcGxlbWVudC4KKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyKCkKK3sKK30KKworTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6On5Nb2NrV2ViU3BlZWNoUmVj
b2duaXplcigpCit7Cit9CisKK3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OlJlc3VsdFRh
c2s6OnJ1bklmVmFsaWQoKQoreworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHRyYW5zY3JpcHRz
KHN0YXRpY19jYXN0PHNpemVfdD4oMSkpOworICAgIFdlYlZlY3RvcjxmbG9hdD4gY29uZmlkZW5j
ZXMoc3RhdGljX2Nhc3Q8c2l6ZV90PigxKSk7CisgICAgdHJhbnNjcmlwdHNbMF0gPSBtX3RyYW5z
Y3JpcHQ7CisgICAgY29uZmlkZW5jZXNbMF0gPSBtX2NvbmZpZGVuY2U7CisgICAgV2ViU3BlZWNo
UmVjb2duaXRpb25SZXN1bHQgcmVzOworICAgIHJlcy5hc3NpZ24odHJhbnNjcmlwdHMsIGNvbmZp
ZGVuY2VzLCB0cnVlKTsKKworICAgIG1fb2JqZWN0LT5tX2NsaWVudC0+ZGlkUmVjZWl2ZVJlc3Vs
dChtX29iamVjdC0+bV9oYW5kbGUsIHJlcywgMCwgV2ViVmVjdG9yPFdlYlNwZWVjaFJlY29nbml0
aW9uUmVzdWx0PigpKTsKK30KKworI2VuZGlmIC8vIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCmRp
ZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoUmVj
b2duaXplci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zNTVmMDgwYzNiZDc0MTQ5ZDQ0NGQ0NzAxYzBlOGVjNTE3
M2Y4YTc1Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaApAQCAtMCwwICsxLDEwNSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwor
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXJfaAorI2RlZmluZSBNb2NrV2ViU3BlZWNoUmVjb2du
aXplcl9oCisKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNIKQorCisjaW5jbHVkZSAiVGFzay5o
IgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0LmgiCisjaW5jbHVkZSAiV2Vi
U3BlZWNoUmVjb2duaXplci5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQu
aCIKKyNpbmNsdWRlIDx3dGYvQ29tcGlsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFdlYktpdCB7CitjbGFzcyBX
ZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZTsKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uUGFy
YW1zOworY2xhc3MgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDsKK30KKworY2xhc3MgTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIgOiBwdWJsaWMgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc093blB0cjxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4g
Y3JlYXRlKCk7CisgICAgfk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCk7CisKKyAgICAvLyBXZWJT
cGVlY2hSZWNvZ25pemVyIGltcGxlbWVudGF0aW9uOgorICAgIHZpcnR1YWwgdm9pZCBzdGFydChj
b25zdCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgY29uc3QgV2ViS2l0OjpX
ZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyYsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNs
aWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBzdG9wKGNvbnN0IFdlYktpdDo6V2Vi
U3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXJDbGll
bnQqKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgYWJvcnQoY29uc3QgV2ViS2l0OjpXZWJT
cGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVu
dCopIE9WRVJSSURFOworCisgICAgLy8gTWV0aG9kcyBhY2Nlc3NlZCBieSBsYXlvdXQgdGVzdHM6
CisgICAgdm9pZCBhZGRNb2NrUmVzdWx0KGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nJiB0cmFuc2Ny
aXB0LCBmbG9hdCBjb25maWRlbmNlKQorICAgIHsKKyAgICAgICAgbV9tb2NrVHJhbnNjcmlwdHMu
YXBwZW5kKHRyYW5zY3JpcHQpOworICAgICAgICBtX21vY2tDb25maWRlbmNlcy5hcHBlbmQoY29u
ZmlkZW5jZSk7CisgICAgfQorCisgICAgVGFza0xpc3QqIHRhc2tMaXN0KCkgeyByZXR1cm4gJm1f
dGFza0xpc3Q7IH0KKworcHJpdmF0ZToKKyAgICBNb2NrV2ViU3BlZWNoUmVjb2duaXplcigpOwor
CisgICAgLy8gVGFzayBjbGFzcyBmb3IgY2FsbGluZyBhIGNsaWVudCBmdW5jdGlvbiB0aGF0IGRv
ZXMgbm90IHRha2UgYW55IHBhcmFtZXRlcnMuCisgICAgdHlwZWRlZiB2b2lkIChXZWJLaXQ6Oldl
YlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OipDbGllbnRGdW5jdGlvblBvaW50ZXIpKGNvbnN0IFdl
YktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmKTsKKyAgICBjbGFzcyBDbGllbnRDYWxs
VGFzayA6IHB1YmxpYyBNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPiB7CisgICAg
cHVibGljOgorICAgICAgICBDbGllbnRDYWxsVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciog
bW9jaywgQ2xpZW50RnVuY3Rpb25Qb2ludGVyIGZ1bmN0aW9uKSA6IE1ldGhvZFRhc2s8TW9ja1dl
YlNwZWVjaFJlY29nbml6ZXI+KG1vY2spLCBtX2Z1bmN0aW9uKGZ1bmN0aW9uKSB7IH0KKyAgICAg
ICAgdmlydHVhbCB2b2lkIHJ1bklmVmFsaWQoKSBPVkVSUklERSB7IChtX29iamVjdC0+bV9jbGll
bnQtPiptX2Z1bmN0aW9uKShtX29iamVjdC0+bV9oYW5kbGUpOyB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBDbGllbnRGdW5jdGlvblBvaW50ZXIgbV9mdW5jdGlvbjsKKyAgICB9OworCisgICAg
Ly8gVGFzayBmb3IgZGVsaXZlcmluZyBhIHJlc3VsdCBldmVudC4KKyAgICBjbGFzcyBSZXN1bHRU
YXNrIDogcHVibGljIE1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+IHsKKyAgICBw
dWJsaWM6CisgICAgICAgIFJlc3VsdFRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1vY2ss
IGNvbnN0IFdlYktpdDo6V2ViU3RyaW5nIHRyYW5zY3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpIDog
TWV0aG9kVGFzazxNb2NrV2ViU3BlZWNoUmVjb2duaXplcj4obW9jayksIG1fdHJhbnNjcmlwdCh0
cmFuc2NyaXB0KSwgbV9jb25maWRlbmNlKGNvbmZpZGVuY2UpIHsgfQorICAgICAgICB2aXJ0dWFs
IHZvaWQgcnVuSWZWYWxpZCgpIE9WRVJSSURFOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgV2Vi
S2l0OjpXZWJTdHJpbmcgbV90cmFuc2NyaXB0OworICAgICAgICBmbG9hdCBtX2NvbmZpZGVuY2U7
CisgICAgfTsKKworICAgIC8vIFRhc2sgZm9yIGRlbGl2ZXJpbmcgYSBub21hdGNoIGV2ZW50Lgor
ICAgIGNsYXNzIE5vTWF0Y2hUYXNrIDogcHVibGljIE1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJl
Y29nbml6ZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAgIE5vTWF0Y2hUYXNrKE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyKiBtb2NrKSA6IE1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+
KG1vY2spIHsgfQorICAgICAgICB2aXJ0dWFsIHZvaWQgcnVuSWZWYWxpZCgpIE9WRVJSSURFIHsg
bV9vYmplY3QtPm1fY2xpZW50LT5kaWRSZWNlaXZlTm9NYXRjaChtX29iamVjdC0+bV9oYW5kbGUs
IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25SZXN1bHQoKSk7IH0KKyAgICB9OworCisgICAg
VGFza0xpc3QgbV90YXNrTGlzdDsKKyAgICBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFu
ZGxlIG1faGFuZGxlOworICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogbV9j
bGllbnQ7CisgICAgVmVjdG9yPFdlYktpdDo6V2ViU3RyaW5nPiBtX21vY2tUcmFuc2NyaXB0czsK
KyAgICBWZWN0b3I8ZmxvYXQ+IG1fbW9ja0NvbmZpZGVuY2VzOworfTsKKworI2VuZGlmIC8vIEVO
QUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisKKyNlbmRpZiAvLyBNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cl9oCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9z
dC5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAKaW5k
ZXggZmNjOGQyYjdiNWM5MmJiZjFhN2ZlZDVhMTUzMTMwY2ExMzY0ZDg3OS4uZmUyMDMwMDNkMmZk
Njc1NTBkNDBkMGI0MGRhZjkyYTYxNmE5OWIwNiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkxh
eW91dFRlc3RDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTW9ja0dyYW1tYXJDaGVjay5oIgogI2lu
Y2x1ZGUgIk1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJNb2NrV2Vi
U3BlZWNoUmVjb2duaXplci5oIgogI2luY2x1ZGUgIlRlc3ROYXZpZ2F0aW9uQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgogI2luY2x1ZGUgIlRlc3RXZWJQbHVnaW4uaCIKQEAg
LTcxNCw2ICs3MTUsMTUgQEAgV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBXZWJWaWV3SG9zdDo6
c3BlZWNoSW5wdXRDb250cm9sbGVyKFdlYktpdDo6V2ViU3BlZWNoSW4KIH0KICNlbmRpZgogCisj
aWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKK1dlYlNwZWVjaFJlY29nbml6ZXIqIFdlYlZpZXdI
b3N0OjpzcGVlY2hSZWNvZ25pemVyKCkKK3sKKyAgICBpZiAoIW1fbW9ja1NwZWVjaFJlY29nbml6
ZXIpCisgICAgICAgIG1fbW9ja1NwZWVjaFJlY29nbml6ZXIgPSBNb2NrV2ViU3BlZWNoUmVjb2du
aXplcjo6Y3JlYXRlKCk7CisgICAgcmV0dXJuIG1fbW9ja1NwZWVjaFJlY29nbml6ZXIuZ2V0KCk7
Cit9CisjZW5kaWYKKwogV2ViRGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKiBXZWJWaWV3SG9z
dDo6ZGV2aWNlT3JpZW50YXRpb25DbGllbnRNb2NrKCkKIHsKICAgICBpZiAoIW1fZGV2aWNlT3Jp
ZW50YXRpb25DbGllbnRNb2NrLmdldCgpKQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmgKaW5kZXggMjFkYmI0YzhkMmE5YjdkMmIxNjI5NjAzMjJjMTg5YjAzNzgy
ZjliYS4uOTJjYmMxNDUwYWIwOTdkNzFlYjc3MzVmNWZjNmUxNTc2NWMyMzQ1ZCAxMDA2NDQKLS0t
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hvc3QuaAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCkBAIC00OCw2ICs0OCw3IEBA
CiAKIGNsYXNzIExheW91dFRlc3RDb250cm9sbGVyOwogY2xhc3MgTW9ja1dlYlNwZWVjaElucHV0
Q29udHJvbGxlcjsKK2NsYXNzIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOwogY2xhc3MgU2tDYW52
YXM7CiBjbGFzcyBUZXN0U2hlbGw7CiAKQEAgLTExNyw2ICsxMTgsMTAgQEAgY2xhc3MgV2ViVmll
d0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0OjpXZWJG
cmFtZUNsaWVudCwKICAgICBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyKiBzcGVlY2hJbnB1
dENvbnRyb2xsZXJNb2NrKCkgeyByZXR1cm4gbV9zcGVlY2hJbnB1dENvbnRyb2xsZXJNb2NrLmdl
dCgpOyB9CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisgICAgTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXIqIG1vY2tTcGVlY2hSZWNvZ25pemVyKCkgeyByZXR1cm4gbV9tb2Nr
U3BlZWNoUmVjb2duaXplci5nZXQoKTsgfQorI2VuZGlmCisKICNpZiBFTkFCTEUoUE9JTlRFUl9M
T0NLKQogICAgIHZvaWQgZGlkTG9zZVBvaW50ZXJMb2NrKCk7CiAgICAgdm9pZCBzZXRQb2ludGVy
TG9ja1dpbGxGYWlsQXN5bmNocm9ub3VzbHkoKSB7IG1fcG9pbnRlckxvY2tQbGFubmVkUmVzdWx0
ID0gUG9pbnRlckxvY2tXaWxsRmFpbEFzeW5jOyB9CkBAIC0xNzYsNiArMTgxLDkgQEAgY2xhc3Mg
V2ViVmlld0hvc3QgOiBwdWJsaWMgV2ViS2l0OjpXZWJWaWV3Q2xpZW50LCBwdWJsaWMgV2ViS2l0
OjpXZWJGcmFtZUNsaWVudCwKICNpZiBFTkFCTEUoSU5QVVRfU1BFRUNIKQogICAgIHZpcnR1YWwg
V2ViS2l0OjpXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxlcihX
ZWJLaXQ6OldlYlNwZWVjaElucHV0TGlzdGVuZXIqKTsKICNlbmRpZgorI2lmIEVOQUJMRShTQ1JJ
UFRFRF9TUEVFQ0gpCisgICAgdmlydHVhbCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml6ZXIqIHNw
ZWVjaFJlY29nbml6ZXIoKSBPVkVSUklERTsKKyNlbmRpZgogICAgIHZpcnR1YWwgV2ViS2l0OjpX
ZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudCogZGV2aWNlT3JpZW50YXRpb25DbGllbnQoKTsKICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIHZpcnR1YWwgV2ViS2l0OjpXZWJVc2VyTWVkaWFD
bGllbnQqIHVzZXJNZWRpYUNsaWVudCgpOwpAQCAtNDEyLDYgKzQyMCwxMCBAQCBwcml2YXRlOgog
ICAgIE93blB0cjxNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVyPiBtX3NwZWVjaElucHV0Q29u
dHJvbGxlck1vY2s7CiAjZW5kaWYKIAorI2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisgICAg
T3duUHRyPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPiBtX21vY2tTcGVlY2hSZWNvZ25pemVyOwor
I2VuZGlmCisKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQogICAgIE93blB0cjxXZWJLaXQ6Oldl
YlVzZXJNZWRpYUNsaWVudE1vY2s+IG1fdXNlck1lZGlhQ2xpZW50TW9jazsKICAgICBPd25QdHI8
d2Via2l0X3N1cHBvcnQ6OlRlc3RNZWRpYVN0cmVhbUNsaWVudD4gbV90ZXN0TWVkaWFTdHJlYW1D
bGllbnQ7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZWU1M2FiZjc0MTcwYzBhYTc4NDY1MTE4MzFjODU3ZjI2ZmU4ZDdmZS4u
YjljNDkzNDAyYjE1Y2M3YWE4MTY1MGNiZTFiZDc5OWY5NDk3ZTBkOSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDE2IEBACisyMDEyLTA1LTMxICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBtb2NrIFdlYlNwZWVjaFJlY29nbml6ZXIg
Zm9yIER1bXBSZW5kZXJUcmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD04Nzk3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEFkZCBhIGxheW91dCB0ZXN0IHVzaW5nIHRoZSBuZXcgbW9jaywgcHVzaGluZyBh
IG1vY2sgcmVzdWx0IHRocm91Z2gKKyAgICAgICAgYW5kIGNoZWNraW5nIHRoYXQgZXZlbnRzIGZp
cmUgY29ycmVjdGx5LgorCisgICAgICAgICogZmFzdC9zcGVlY2gvc2NyaXB0ZWQvc3BlZWNocmVj
b2duaXRpb24tYmFzaWNzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9zcGVl
Y2gvc2NyaXB0ZWQvc3BlZWNocmVjb2duaXRpb24tYmFzaWNzLmh0bWw6IEFkZGVkLgorCiAyMDEy
LTA1LTMxICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWtoYWlsLnBvemRueWFrb3ZAaW50ZWwuY29t
PgogCiAgICAgICAgIFtFRkxdIEdhcmRlbmluZyBhZnRlciByMTE4OTU3CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRlZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3Mt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvc2NyaXB0ZWQvc3BlZWNocmVj
b2duaXRpb24tYmFzaWNzLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MTJlZDJiNGQ5ZjMzMDkw
ODQ2YjA2Zjg0YzEyMjYxNzEzYmNmYjJhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9zcGVlY2gvc2NyaXB0ZWQvc3BlZWNocmVjb2duaXRpb24tYmFzaWNzLWV4cGVjdGVkLnR4
dApAQCAtMCwwICsxLDU1IEBACitUZXN0IGJhc2ljIGludGVyYWN0aW9uIHdpdGggdGhlIFNwZWVj
aCBKYXZhU2NyaXB0IEFQSQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyAn
d2Via2l0U3BlZWNoUmVjb2duaXRpb24nIGluIHNlbGYgaXMgdHJ1ZQorUEFTUyB3ZWJraXRTcGVl
Y2hSZWNvZ25pdGlvbiA9PSBudWxsIGlzIGZhbHNlCisKK29uZU1hdGNoVGVzdCgpOgorb25zdGFy
dAorUEFTUyBjb3VudCBpcyAwCitvbmF1ZGlvc3RhcnQKK1BBU1MgY291bnQgaXMgMQorb25zb3Vu
ZHN0YXJ0CitQQVNTIGNvdW50IGlzIDIKK29uc3BlZWNoc3RhcnQKK1BBU1MgY291bnQgaXMgMwor
b25yZXN1bHQKK1BBU1MgY291bnQgaXMgNAorUEFTUyBldmVudC5yZXN1bHQubGVuZ3RoIGlzIDEK
K1BBU1MgZXZlbnQucmVzdWx0Lml0ZW0oMCkudHJhbnNjcmlwdCBpcyAiaGVsbG8sIHdvcmxkIgor
UEFTUyBldmVudC5yZXN1bHQuaXRlbSgwKS5jb25maWRlbmNlIGlzIHdpdGhpbiAwLjAwMSBvZiAw
LjQyCitvbnNwZWVjaGVuZAorUEFTUyBjb3VudCBpcyA1CitvbnNvdW5kZW5kCitQQVNTIGNvdW50
IGlzIDYKK29uYXVkaW9lbmQKK1BBU1MgY291bnQgaXMgNworb25lbmQKK1BBU1MgY291bnQgaXMg
OAorCitub01hdGNoVGVzdCgpOgorb25zdGFydAorUEFTUyBjb3VudCBpcyAwCitvbmF1ZGlvc3Rh
cnQKK1BBU1MgY291bnQgaXMgMQorb25zb3VuZHN0YXJ0CitQQVNTIGNvdW50IGlzIDIKK29uc3Bl
ZWNoc3RhcnQKK1BBU1MgY291bnQgaXMgMworb25ub21hdGNoCitQQVNTIGNvdW50IGlzIDQKK1BB
U1MgZXZlbnQucmVzdWx0IGlzIG51bGwKK29uc3BlZWNoZW5kCitQQVNTIGNvdW50IGlzIDUKK29u
c291bmRlbmQKK1BBU1MgY291bnQgaXMgNgorb25hdWRpb2VuZAorUEFTUyBjb3VudCBpcyA3Citv
bmVuZAorUEFTUyBjb3VudCBpcyA4CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvc2Ny
aXB0ZWQvc3BlZWNocmVjb2duaXRpb24tYmFzaWNzLmh0bWwgYi9MYXlvdXRUZXN0cy9mYXN0L3Nw
ZWVjaC9zY3JpcHRlZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4x
M2JjMTQ1ZTA4OGRlMTZiMmMyNzNjMjAyYjI4OTIwZDk5OWQ4NWY0Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9zcGVlY2gvc2NyaXB0ZWQvc3BlZWNocmVjb2duaXRpb24tYmFz
aWNzLmh0bWwKQEAgLTAsMCArMSw5MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9y
ZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CitkZXNjcmlwdGlvbignVGVzdCBiYXNpYyBpbnRl
cmFjdGlvbiB3aXRoIHRoZSBTcGVlY2ggSmF2YVNjcmlwdCBBUEknKTsKKworZnVuY3Rpb24gcnVu
KCkgeworICAgIC8vIENoZWNrIGF2YWlsYWJpbGl0eSBvZiBjb25zdHJ1Y3RvcnMuCisgICAgc2hv
dWxkQmVUcnVlKCInd2Via2l0U3BlZWNoUmVjb2duaXRpb24nIGluIHNlbGYiKTsKKyAgICBzaG91
bGRCZUZhbHNlKCJ3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbiA9PSBudWxsIik7CisKKyAgICBvbmVN
YXRjaFRlc3QoKTsKK30KKworZnVuY3Rpb24gb25lTWF0Y2hUZXN0KCkgeworICAgIGRlYnVnKCdc
bm9uZU1hdGNoVGVzdCgpOicpOworICAgIHZhciByID0gbmV3IHdlYmtpdFNwZWVjaFJlY29nbml0
aW9uKCk7CisgICAgd2luZG93LmNvdW50ID0gMDsKKworICAgIHIub25zdGFydCA9ICAgICAgICAg
ZnVuY3Rpb24oKSB7IGRlYnVnKCdvbnN0YXJ0Jyk7ICAgICAgIHNob3VsZEJlKCdjb3VudCcsICcw
Jyk7ICsrY291bnQ7IH0KKyAgICByLm9uYXVkaW9zdGFydCA9ICAgIGZ1bmN0aW9uKCkgeyBkZWJ1
Zygnb25hdWRpb3N0YXJ0Jyk7ICBzaG91bGRCZSgnY291bnQnLCAnMScpOyArK2NvdW50OyB9Cisg
ICAgci5vbnNvdW5kc3RhcnQgPSAgICBmdW5jdGlvbigpIHsgZGVidWcoJ29uc291bmRzdGFydCcp
OyAgc2hvdWxkQmUoJ2NvdW50JywgJzInKTsgKytjb3VudDsgfQorICAgIHIub25zcGVlY2hzdGFy
dCA9ICAgZnVuY3Rpb24oKSB7IGRlYnVnKCdvbnNwZWVjaHN0YXJ0Jyk7IHNob3VsZEJlKCdjb3Vu
dCcsICczJyk7ICsrY291bnQ7IH0KKworICAgIHIub25yZXN1bHQgPSBmdW5jdGlvbigpIHsKKyAg
ICAgICAgZGVidWcoJ29ucmVzdWx0Jyk7CisgICAgICAgIHNob3VsZEJlKCdjb3VudCcsICc0Jyk7
CisgICAgICAgICsrY291bnQ7CisgICAgICAgIHNob3VsZEJlKCdldmVudC5yZXN1bHQubGVuZ3Ro
JywgJzEnKTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCdldmVudC5yZXN1bHQuaXRl
bSgwKS50cmFuc2NyaXB0JywgJ2hlbGxvLCB3b3JsZCcpOworICAgICAgICBzaG91bGRCZUNsb3Nl
VG8oJ2V2ZW50LnJlc3VsdC5pdGVtKDApLmNvbmZpZGVuY2UnLCAwLjQyLCAxZS0zKTsKKyAgICB9
CisKKyAgICByLm9uc3BlZWNoZW5kID0gICAgIGZ1bmN0aW9uKCkgeyBkZWJ1Zygnb25zcGVlY2hl
bmQnKTsgICBzaG91bGRCZSgnY291bnQnLCAnNScpOyArK2NvdW50OyB9CisgICAgci5vbnNvdW5k
ZW5kID0gICAgICBmdW5jdGlvbigpIHsgZGVidWcoJ29uc291bmRlbmQnKTsgICAgc2hvdWxkQmUo
J2NvdW50JywgJzYnKTsgKytjb3VudDsgfQorICAgIHIub25hdWRpb2VuZCA9ICAgICAgZnVuY3Rp
b24oKSB7IGRlYnVnKCdvbmF1ZGlvZW5kJyk7ICAgIHNob3VsZEJlKCdjb3VudCcsICc3Jyk7ICsr
Y291bnQ7IH0KKworICAgIHIub25lbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAgZGVidWcoJ29u
ZW5kJyk7CisgICAgICAgIHNob3VsZEJlKCdjb3VudCcsICc4Jyk7CisgICAgICAgICsrY291bnQ7
CisgICAgICAgIG5vTWF0Y2hUZXN0KCk7CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgeworICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5hZGRNb2NrU3Bl
ZWNoUmVjb2duaXRpb25SZXN1bHQoJ2hlbGxvLCB3b3JsZCcsIDAuNDIpOworICAgIH0KKyAgICBy
LnN0YXJ0KCk7Cit9CisKK2Z1bmN0aW9uIG5vTWF0Y2hUZXN0KCkgeworICAgIGRlYnVnKCdcbm5v
TWF0Y2hUZXN0KCk6Jyk7CisgICAgdmFyIHIgPSBuZXcgd2Via2l0U3BlZWNoUmVjb2duaXRpb24o
KTsKKyAgICB3aW5kb3cuY291bnQgPSAwOworCisgICAgci5vbnN0YXJ0ID0gICAgICAgICBmdW5j
dGlvbigpIHsgZGVidWcoJ29uc3RhcnQnKTsgICAgICAgc2hvdWxkQmUoJ2NvdW50JywgJzAnKTsg
Kytjb3VudDsgfQorICAgIHIub25hdWRpb3N0YXJ0ID0gICAgZnVuY3Rpb24oKSB7IGRlYnVnKCdv
bmF1ZGlvc3RhcnQnKTsgIHNob3VsZEJlKCdjb3VudCcsICcxJyk7ICsrY291bnQ7IH0KKyAgICBy
Lm9uc291bmRzdGFydCA9ICAgIGZ1bmN0aW9uKCkgeyBkZWJ1Zygnb25zb3VuZHN0YXJ0Jyk7ICBz
aG91bGRCZSgnY291bnQnLCAnMicpOyArK2NvdW50OyB9CisgICAgci5vbnNwZWVjaHN0YXJ0ID0g
ICBmdW5jdGlvbigpIHsgZGVidWcoJ29uc3BlZWNoc3RhcnQnKTsgc2hvdWxkQmUoJ2NvdW50Jywg
JzMnKTsgKytjb3VudDsgfQorCisgICAgci5vbm5vbWF0Y2ggPSBmdW5jdGlvbigpIHsKKyAgICAg
ICAgZGVidWcoJ29ubm9tYXRjaCcpOworICAgICAgICBzaG91bGRCZSgnY291bnQnLCAnNCcpOwor
ICAgICAgICArK2NvdW50OworICAgICAgICBzaG91bGRCZSgnZXZlbnQucmVzdWx0JywgJ251bGwn
KTsKKyAgICB9CisKKyAgICByLm9uc3BlZWNoZW5kID0gICAgIGZ1bmN0aW9uKCkgeyBkZWJ1Zygn
b25zcGVlY2hlbmQnKTsgICBzaG91bGRCZSgnY291bnQnLCAnNScpOyArK2NvdW50OyB9CisgICAg
ci5vbnNvdW5kZW5kID0gICAgICBmdW5jdGlvbigpIHsgZGVidWcoJ29uc291bmRlbmQnKTsgICAg
c2hvdWxkQmUoJ2NvdW50JywgJzYnKTsgKytjb3VudDsgfQorICAgIHIub25hdWRpb2VuZCA9ICAg
ICAgZnVuY3Rpb24oKSB7IGRlYnVnKCdvbmF1ZGlvZW5kJyk7ICAgIHNob3VsZEJlKCdjb3VudCcs
ICc3Jyk7ICsrY291bnQ7IH0KKworICAgIHIub25lbmQgPSBmdW5jdGlvbigpIHsKKyAgICAgICAg
ZGVidWcoJ29uZW5kJyk7CisgICAgICAgIHNob3VsZEJlKCdjb3VudCcsICc4Jyk7CisgICAgICAg
ICsrY291bnQ7CisgICAgICAgIGZpbmlzaEpTVGVzdCgpOworICAgIH0KKworICAgIHIuc3RhcnQo
KTsKK30KKword2luZG93Lm9ubG9hZCA9IHJ1bjsKK3dpbmRvdy5qc1Rlc3RJc0FzeW5jID0gdHJ1
ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>146523</attachid>
            <date>2012-06-08 02:44:04 -0700</date>
            <delta_ts>2012-06-08 04:02:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87976-20120608104403.patch</filename>
            <type>text/plain</type>
            <size>23539</size>
            <attacher name="Hans Wennborg">hans</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE5ODEzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZDhhYTlkM2RmZTE2NTI2ZGJjNTU2YTM4Y2U1NjJmNGVm
ZWVkMWY5ZS4uYjU1NjdkMTM1MWExY2ExZjdlN2FkMTI2ZTZmYzg1MzJhNWQ4YWZlYyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1
IEBACisyMDEyLTA2LTA4ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgU3BlZWNoIEphdmFTY3JpcHQgQVBJOiBtb2NrIFdlYlNwZWVjaFJlY29nbml6ZXIgZm9y
IER1bXBSZW5kZXJUcmVlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD04Nzk3NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFByb3ZpZGUgYSBtb2NrIGltcGxlbWVudGF0aW9uIG9mIFdlYlNwZWVjaFJlY29nbml6
ZXIgZm9yCisgICAgICAgIER1bXBSZW5kZXJUcmVlLiBUaGlzIHdpbGwgYWxsb3cgYmV0dGVyIHRl
c3Rpbmcgb2YgdGhlIEFQSSB2aWEgbGF5b3V0CisgICAgICAgIHRlc3RzLgorCisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChMYXlvdXRU
ZXN0Q29udHJvbGxlcjo6TGF5b3V0VGVzdENvbnRyb2xsZXIpOgorICAgICAgICAoTGF5b3V0VGVz
dENvbnRyb2xsZXI6OmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuaDoKKyAgICAgICAg
KExheW91dFRlc3RDb250cm9sbGVyKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5jcHA6IEFkZGVkLgorICAgICAgICAoTW9ja1dlYlNw
ZWVjaFJlY29nbml6ZXI6OmNyZWF0ZSk6CisgICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cjo6c3RhcnQpOgorICAgICAgICAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3ApOgorICAg
ICAgICAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OmFib3J0KToKKyAgICAgICAgKE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyOjpNb2NrV2ViU3BlZWNoUmVjb2duaXplcik6CisgICAgICAgIChNb2Nr
V2ViU3BlZWNoUmVjb2duaXplcjo6fk1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKToKKyAgICAgICAg
KE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpSZXN1bHRUYXNrOjpydW5JZlZhbGlkKToKKyAgICAg
ICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYktpdCk6CisgICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cik6CisgICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6YWRkTW9ja1Jlc3VsdCk6Cisg
ICAgICAgIChNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6dGFza0xpc3QpOgorICAgICAgICAoQ2xp
ZW50Q2FsbFRhc2spOgorICAgICAgICAoTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OkNsaWVudENh
bGxUYXNrOjpDbGllbnRDYWxsVGFzayk6CisgICAgICAgIChSZXN1bHRUYXNrKToKKyAgICAgICAg
KE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpSZXN1bHRUYXNrOjpSZXN1bHRUYXNrKToKKyAgICAg
ICAgKE5vTWF0Y2hUYXNrKToKKyAgICAgICAgKE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpOb01h
dGNoVGFzazo6Tm9NYXRjaFRhc2spOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1dlYlZpZXdIb3N0LmNwcDoKKyAgICAgICAgKFdlYlZpZXdIb3N0OjpzcGVlY2hSZWNvZ25pemVy
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oOgorICAg
ICAgICAoV2ViVmlld0hvc3QpOgorICAgICAgICAoV2ViVmlld0hvc3Q6Om1vY2tTcGVlY2hSZWNv
Z25pemVyKToKKwogMjAxMi0wNi0wNyAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJvbWl1bS5v
cmc+CiAKICAgICAgICAgY2hlY2std2Via2l0LXN0eWxlIG5lZWRzIHRvIGJlIHRhdWdodCBhYm91
dCA8cHVibGljL0Zvby5oPgpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwaSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkK
aW5kZXggZThkODhiZTc0MWIwOTc4MGMzNTYzMTliY2ZjNTIzOGVlN2FkMzhjNy4uNTQxMmExOTll
OTBlYjM1M2IxMjEzMmVhZDViZTdhN2U2NTViNTM5MSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5neXBpCkBAIC0yOCw2ICsyOCw4IEBACiAgICAgICAgICAgICAnY2hyb21p
dW0vTW9ja1dlYlByZXJlbmRlcmluZ1N1cHBvcnQuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0v
TW9ja1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVt
L01vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9Nb2Nr
V2ViU3BlZWNoUmVjb2duaXplci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9Ob3RpZmljYXRp
b25QcmVzZW50ZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vTm90aWZpY2F0aW9uUHJlc2Vu
dGVyLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGFzay5oJywKZGlmZiAtLWdpdCBhL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9sbGVyLmNwcAppbmRl
eCBiMWJmMzBkOWI4MzEzMjBiZWI4ZWIyMWIwMjA2ZGFkODE4NzgyYTdiLi5mMjJiM2RhOTIyNGUx
MjhhODlmOTFkNjgxZWRjYWIxOTk2OTRhYmQ3IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxlci5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vTGF5b3V0VGVzdENvbnRyb2xsZXIuY3BwCkBAIC0zNCw2ICszNCw3
IEBACiAKICNpbmNsdWRlICJEUlREZXZUb29sc0FnZW50LmgiCiAjaW5jbHVkZSAiTW9ja1dlYlNw
ZWVjaElucHV0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNvZ25pemVy
LmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAjaW5jbHVkZSAiV2ViQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIldlYkJpbmRpbmdzLmgiCkBAIC0xMTUsNiArMTE2LDkgQEAgTGF5
b3V0VGVzdENvbnRyb2xsZXI6OkxheW91dFRlc3RDb250cm9sbGVyKFRlc3RTaGVsbCogc2hlbGwp
CiAgICAgYmluZE1ldGhvZCgiYWRkTW9ja1NwZWVjaElucHV0UmVzdWx0IiwgJkxheW91dFRlc3RD
b250cm9sbGVyOjphZGRNb2NrU3BlZWNoSW5wdXRSZXN1bHQpOwogICAgIGJpbmRNZXRob2QoInNl
dE1vY2tTcGVlY2hJbnB1dER1bXBSZWN0IiwgJkxheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2Nr
U3BlZWNoSW5wdXREdW1wUmVjdCk7CiAjZW5kaWYKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BFRUNI
KQorICAgIGJpbmRNZXRob2QoImFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCIsICZMYXlv
dXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9uUmVzdWx0KTsKKyNlbmRp
ZgogICAgIGJpbmRNZXRob2QoImFkZE9yaWdpbkFjY2Vzc1doaXRlbGlzdEVudHJ5IiwgJkxheW91
dFRlc3RDb250cm9sbGVyOjphZGRPcmlnaW5BY2Nlc3NXaGl0ZWxpc3RFbnRyeSk7CiAgICAgYmlu
ZE1ldGhvZCgiYWRkVXNlclNjcmlwdCIsICZMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkVXNlclNj
cmlwdCk7CiAgICAgYmluZE1ldGhvZCgiYWRkVXNlclN0eWxlU2hlZXQiLCAmTGF5b3V0VGVzdENv
bnRyb2xsZXI6OmFkZFVzZXJTdHlsZVNoZWV0KTsKQEAgLTE5NTgsNiArMTk2MiwxOCBAQCB2b2lk
IExheW91dFRlc3RDb250cm9sbGVyOjpzZXRNb2NrU3BlZWNoSW5wdXREdW1wUmVjdChjb25zdCBD
cHBBcmd1bWVudExpc3QmIGFyZwogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoU0NSSVBURURfU1BF
RUNIKQordm9pZCBMYXlvdXRUZXN0Q29udHJvbGxlcjo6YWRkTW9ja1NwZWVjaFJlY29nbml0aW9u
UmVzdWx0KGNvbnN0IENwcEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1
bHQpCit7CisgICAgcmVzdWx0LT5zZXROdWxsKCk7CisgICAgaWYgKGFyZ3VtZW50cy5zaXplKCkg
PCAyIHx8ICFhcmd1bWVudHNbMF0uaXNTdHJpbmcoKSB8fCAhYXJndW1lbnRzWzFdLmlzTnVtYmVy
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChNb2NrV2ViU3BlZWNoUmVjb2duaXplciog
cmVjb2duaXplciA9IG1fc2hlbGwtPndlYlZpZXdIb3N0KCktPm1vY2tTcGVlY2hSZWNvZ25pemVy
KCkpCisgICAgICAgIHJlY29nbml6ZXItPmFkZE1vY2tSZXN1bHQoY3BwVmFyaWFudFRvV2ViU3Ry
aW5nKGFyZ3VtZW50c1swXSksIGFyZ3VtZW50c1sxXS50b0RvdWJsZSgpKTsKK30KKyNlbmRpZgor
CiB2b2lkIExheW91dFRlc3RDb250cm9sbGVyOjpzdGFydFNwZWVjaElucHV0KGNvbnN0IENwcEFy
Z3VtZW50TGlzdCYgYXJndW1lbnRzLCBDcHBWYXJpYW50KiByZXN1bHQpCiB7CiAgICAgcmVzdWx0
LT5zZXROdWxsKCk7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9M
YXlvdXRUZXN0Q29udHJvbGxlci5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTGF5
b3V0VGVzdENvbnRyb2xsZXIuaAppbmRleCA4MWNjMThmNDhhZjljYWIzNDlhZWYwNzE3OWExOWVl
MTNjMzFhMjNjLi5jOTc4MDU3Y2I5OWExZDBjNDQzMWFiZWQwZTcxODEzY2ExYjZkODU4IDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9MYXlvdXRUZXN0Q29udHJvbGxl
ci5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL0xheW91dFRlc3RDb250cm9s
bGVyLmgKQEAgLTM3NSw2ICszNzUsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRNb2NrU3BlZWNo
SW5wdXRSZXN1bHQoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogICAgIHZv
aWQgc2V0TW9ja1NwZWVjaElucHV0RHVtcFJlY3QoY29uc3QgQ3BwQXJndW1lbnRMaXN0JiwgQ3Bw
VmFyaWFudCopOwogI2VuZGlmCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKyAgICB2b2lk
IGFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdChjb25zdCBDcHBBcmd1bWVudExpc3QmLCBD
cHBWYXJpYW50Kik7CisjZW5kaWYKICAgICB2b2lkIHN0YXJ0U3BlZWNoSW5wdXQoY29uc3QgQ3Bw
QXJndW1lbnRMaXN0JiwgQ3BwVmFyaWFudCopOwogCiAgICAgdm9pZCBsYXllclRyZWVBc1RleHQo
Y29uc3QgQ3BwQXJndW1lbnRMaXN0JiBhcmdzLCBDcHBWYXJpYW50KiByZXN1bHQpOwpkaWZmIC0t
Z2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXIuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjM2MmQwNmQ4YzgxNWEyMDcxOThmMjE5YTg5NmEyODIzYmRi
MmM5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9N
b2NrV2ViU3BlZWNoUmVjb2duaXplci5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJ
VFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICog
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1Ig
SVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMK
KyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5Z
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaCIKKwor
I2lmIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCisKKyNpbmNsdWRlICJXZWJTcGVlY2hSZWNvZ25p
dGlvblJlc3VsdC5oIgorI2luY2x1ZGUgIldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIHsKKworLy8gVGFzayBjbGFzcyBm
b3IgY2FsbGluZyBhIGNsaWVudCBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IHRha2UgYW55IHBhcmFt
ZXRlcnMuCit0eXBlZGVmIHZvaWQgKFdlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OipDbGllbnRG
dW5jdGlvblBvaW50ZXIpKGNvbnN0IFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJik7CitjbGFz
cyBDbGllbnRDYWxsVGFzayA6IHB1YmxpYyBNZXRob2RUYXNrPE1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyPiB7CitwdWJsaWM6CisgICAgQ2xpZW50Q2FsbFRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6
ZXIqIG1vY2ssIENsaWVudEZ1bmN0aW9uUG9pbnRlciBmdW5jdGlvbikKKyAgICAgICAgOiBNZXRo
b2RUYXNrPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPihtb2NrKQorICAgICAgICAsIG1fZnVuY3Rp
b24oZnVuY3Rpb24pCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlk
KCkgT1ZFUlJJREUgeyAobV9vYmplY3QtPmNsaWVudCgpLT4qbV9mdW5jdGlvbikobV9vYmplY3Qt
PmhhbmRsZSgpKTsgfQorCitwcml2YXRlOgorICAgIENsaWVudEZ1bmN0aW9uUG9pbnRlciBtX2Z1
bmN0aW9uOworfTsKKworLy8gVGFzayBmb3IgZGVsaXZlcmluZyBhIHJlc3VsdCBldmVudC4KK2Ns
YXNzIFJlc3VsdFRhc2sgOiBwdWJsaWMgTWV0aG9kVGFzazxNb2NrV2ViU3BlZWNoUmVjb2duaXpl
cj4geworcHVibGljOgorICAgIFJlc3VsdFRhc2soTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIqIG1v
Y2ssIGNvbnN0IFdlYlN0cmluZyB0cmFuc2NyaXB0LCBmbG9hdCBjb25maWRlbmNlKQorICAgICAg
ICA6IE1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+KG1vY2spCisgICAgICAgICwg
bV90cmFuc2NyaXB0KHRyYW5zY3JpcHQpCisgICAgICAgICwgbV9jb25maWRlbmNlKGNvbmZpZGVu
Y2UpCisgICAgeworICAgIH0KKworICAgIHZpcnR1YWwgdm9pZCBydW5JZlZhbGlkKCkgT1ZFUlJJ
REUKKyAgICB7CisgICAgICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHRyYW5zY3JpcHRzKHN0YXRp
Y19jYXN0PHNpemVfdD4oMSkpOworICAgICAgICBXZWJWZWN0b3I8ZmxvYXQ+IGNvbmZpZGVuY2Vz
KHN0YXRpY19jYXN0PHNpemVfdD4oMSkpOworICAgICAgICB0cmFuc2NyaXB0c1swXSA9IG1fdHJh
bnNjcmlwdDsKKyAgICAgICAgY29uZmlkZW5jZXNbMF0gPSBtX2NvbmZpZGVuY2U7CisgICAgICAg
IFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0IHJlczsKKyAgICAgICAgcmVzLmFzc2lnbih0cmFu
c2NyaXB0cywgY29uZmlkZW5jZXMsIHRydWUpOworCisgICAgICAgIG1fb2JqZWN0LT5jbGllbnQo
KS0+ZGlkUmVjZWl2ZVJlc3VsdChtX29iamVjdC0+aGFuZGxlKCksIHJlcywgMCwgV2ViVmVjdG9y
PFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0PigpKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
V2ViU3RyaW5nIG1fdHJhbnNjcmlwdDsKKyAgICBmbG9hdCBtX2NvbmZpZGVuY2U7Cit9OworCisv
LyBUYXNrIGZvciBkZWxpdmVyaW5nIGEgbm9tYXRjaCBldmVudC4KK2NsYXNzIE5vTWF0Y2hUYXNr
IDogcHVibGljIE1ldGhvZFRhc2s8TW9ja1dlYlNwZWVjaFJlY29nbml6ZXI+IHsKK3B1YmxpYzoK
KyAgICBOb01hdGNoVGFzayhNb2NrV2ViU3BlZWNoUmVjb2duaXplciogbW9jaykgOiBNZXRob2RU
YXNrPE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyPihtb2NrKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQg
cnVuSWZWYWxpZCgpIE9WRVJSSURFIHsgbV9vYmplY3QtPmNsaWVudCgpLT5kaWRSZWNlaXZlTm9N
YXRjaChtX29iamVjdC0+aGFuZGxlKCksIFdlYlNwZWVjaFJlY29nbml0aW9uUmVzdWx0KCkpOyB9
Cit9OworCit9IC8vIG5hbWVzcGFjZQorCitQYXNzT3duUHRyPE1vY2tXZWJTcGVlY2hSZWNvZ25p
emVyPiBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6Y3JlYXRlKCkKK3sKKyAgICByZXR1cm4gYWRv
cHRQdHIobmV3IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCkpOworfQorCit2b2lkIE1vY2tXZWJT
cGVlY2hSZWNvZ25pemVyOjpzdGFydChjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYg
aGFuZGxlLCBjb25zdCBXZWJTcGVlY2hSZWNvZ25pdGlvblBhcmFtcyYgcGFyYW1zLCBXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50KiBjbGllbnQpCit7CisgICAgbV9oYW5kbGUgPSBoYW5kbGU7Cisg
ICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBwb3N0VGFzayhuZXcgQ2xpZW50Q2FsbFRhc2so
dGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZFN0YXJ0KSk7CisgICAgcG9zdFRh
c2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50Ojpk
aWRTdGFydEF1ZGlvKSk7CisgICAgcG9zdFRhc2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZX
ZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRTdGFydFNvdW5kKSk7CisgICAgcG9zdFRhc2so
bmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRT
dGFydFNwZWVjaCkpOworCisgICAgaWYgKCFtX21vY2tUcmFuc2NyaXB0cy5pc0VtcHR5KCkpIHsK
KyAgICAgICAgQVNTRVJUKG1fbW9ja1RyYW5zY3JpcHRzLnNpemUoKSA9PSBtX21vY2tDb25maWRl
bmNlcy5zaXplKCkpOworCisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9tb2NrVHJh
bnNjcmlwdHMuc2l6ZSgpOyArK2kpCisgICAgICAgICAgICBwb3N0VGFzayhuZXcgUmVzdWx0VGFz
ayh0aGlzLCBtX21vY2tUcmFuc2NyaXB0c1tpXSwgbV9tb2NrQ29uZmlkZW5jZXNbaV0pKTsKKwor
ICAgICAgICBtX21vY2tUcmFuc2NyaXB0cy5jbGVhcigpOworICAgICAgICBtX21vY2tDb25maWRl
bmNlcy5jbGVhcigpOworICAgIH0gZWxzZQorICAgICAgICBwb3N0VGFzayhuZXcgTm9NYXRjaFRh
c2sodGhpcykpOworCisgICAgcG9zdFRhc2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJT
cGVlY2hSZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRTcGVlY2gpKTsKKyAgICBwb3N0VGFzayhuZXcg
Q2xpZW50Q2FsbFRhc2sodGhpcywgJldlYlNwZWVjaFJlY29nbml6ZXJDbGllbnQ6OmRpZEVuZFNv
dW5kKSk7CisgICAgcG9zdFRhc2sobmV3IENsaWVudENhbGxUYXNrKHRoaXMsICZXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50OjpkaWRFbmRBdWRpbykpOworICAgIHBvc3RUYXNrKG5ldyBDbGllbnRD
YWxsVGFzayh0aGlzLCAmV2ViU3BlZWNoUmVjb2duaXplckNsaWVudDo6ZGlkRW5kKSk7Cit9CisK
K3ZvaWQgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI6OnN0b3AoY29uc3QgV2ViU3BlZWNoUmVjb2du
aXRpb25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQor
eworICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisgICAg
Ly8gRklYTUU6IEltcGxlbWVudC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9p
ZCBNb2NrV2ViU3BlZWNoUmVjb2duaXplcjo6YWJvcnQoY29uc3QgV2ViU3BlZWNoUmVjb2duaXRp
b25IYW5kbGUmIGhhbmRsZSwgV2ViU3BlZWNoUmVjb2duaXplckNsaWVudCogY2xpZW50KQorewor
ICAgIG1faGFuZGxlID0gaGFuZGxlOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisgICAgLy8g
RklYTUU6IEltcGxlbWVudC4KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworTW9ja1dl
YlNwZWVjaFJlY29nbml6ZXI6Ok1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCkKK3sKK30KKworTW9j
a1dlYlNwZWVjaFJlY29nbml6ZXI6On5Nb2NrV2ViU3BlZWNoUmVjb2duaXplcigpCit7Cit9CisK
KworI2VuZGlmIC8vIEVOQUJMRShTQ1JJUFRFRF9TUEVFQ0gpCmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9Nb2NrV2ViU3BlZWNoUmVjb2duaXplci5oIGIvVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29nbml6ZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zOTgzMTEzMjlkZmRiZTY3YTEwNWQ3YzVjZjExYzQ2ZWJmY2U5NmExCi0tLSAvZGV2L251
bGwKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vTW9ja1dlYlNwZWVjaFJlY29n
bml6ZXIuaApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNb2NrV2ViU3BlZWNoUmVj
b2duaXplcl9oCisjZGVmaW5lIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gKKworI2lmIEVOQUJM
RShTQ1JJUFRFRF9TUEVFQ0gpCisKKyNpbmNsdWRlICJUYXNrLmgiCisjaW5jbHVkZSAiV2ViU3Bl
ZWNoUmVjb2duaXplci5oIgorI2luY2x1ZGUgPHd0Zi9Db21waWxlci5oPgorI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV2Vi
S2l0IHsKK2NsYXNzIFdlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlOworY2xhc3MgV2ViU3BlZWNo
UmVjb2duaXRpb25QYXJhbXM7CitjbGFzcyBXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50OworfQor
CitjbGFzcyBNb2NrV2ViU3BlZWNoUmVjb2duaXplciA6IHB1YmxpYyBXZWJLaXQ6OldlYlNwZWVj
aFJlY29nbml6ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBQYXNzT3duUHRyPE1vY2tXZWJTcGVl
Y2hSZWNvZ25pemVyPiBjcmVhdGUoKTsKKyAgICB+TW9ja1dlYlNwZWVjaFJlY29nbml6ZXIoKTsK
KworICAgIC8vIFdlYlNwZWVjaFJlY29nbml6ZXIgaW1wbGVtZW50YXRpb246CisgICAgdmlydHVh
bCB2b2lkIHN0YXJ0KGNvbnN0IFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUmLCBj
b25zdCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uUGFyYW1zJiwgV2ViS2l0OjpXZWJTcGVl
Y2hSZWNvZ25pemVyQ2xpZW50KikgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIHN0b3AoY29u
c3QgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pdGlvbkhhbmRsZSYsIFdlYktpdDo6V2ViU3BlZWNo
UmVjb2duaXplckNsaWVudCopIE9WRVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBhYm9ydChjb25z
dCBXZWJLaXQ6OldlYlNwZWVjaFJlY29nbml0aW9uSGFuZGxlJiwgV2ViS2l0OjpXZWJTcGVlY2hS
ZWNvZ25pemVyQ2xpZW50KikgT1ZFUlJJREU7CisKKyAgICAvLyBNZXRob2RzIGFjY2Vzc2VkIGJ5
IGxheW91dCB0ZXN0czoKKyAgICB2b2lkIGFkZE1vY2tSZXN1bHQoY29uc3QgV2ViS2l0OjpXZWJT
dHJpbmcmIHRyYW5zY3JpcHQsIGZsb2F0IGNvbmZpZGVuY2UpCisgICAgeworICAgICAgICBtX21v
Y2tUcmFuc2NyaXB0cy5hcHBlbmQodHJhbnNjcmlwdCk7CisgICAgICAgIG1fbW9ja0NvbmZpZGVu
Y2VzLmFwcGVuZChjb25maWRlbmNlKTsKKyAgICB9CisKKyAgICBUYXNrTGlzdCogdGFza0xpc3Qo
KSB7IHJldHVybiAmbV90YXNrTGlzdDsgfQorICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXpl
ckNsaWVudCogY2xpZW50KCkgeyByZXR1cm4gbV9jbGllbnQ7IH0KKyAgICBXZWJLaXQ6OldlYlNw
ZWVjaFJlY29nbml0aW9uSGFuZGxlJiBoYW5kbGUoKSB7IHJldHVybiBtX2hhbmRsZTsgfQorCitw
cml2YXRlOgorICAgIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyKCk7CisKKyAgICBUYXNrTGlzdCBt
X3Rhc2tMaXN0OworICAgIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXRpb25IYW5kbGUgbV9oYW5k
bGU7CisgICAgV2ViS2l0OjpXZWJTcGVlY2hSZWNvZ25pemVyQ2xpZW50KiBtX2NsaWVudDsKKyAg
ICBWZWN0b3I8V2ViS2l0OjpXZWJTdHJpbmc+IG1fbW9ja1RyYW5zY3JpcHRzOworICAgIFZlY3Rv
cjxmbG9hdD4gbV9tb2NrQ29uZmlkZW5jZXM7Cit9OworCisjZW5kaWYgLy8gRU5BQkxFKFNDUklQ
VEVEX1NQRUVDSCkKKworI2VuZGlmIC8vIE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyX2gKZGlmZiAt
LWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcCBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmNwcAppbmRleCA1ZjBkYjdi
MzMyZTYwNTg0ZjEzZjQ3ZmVhOWMzZWZmZGYyMTFiYzQ2Li43ZjY5ZTIwZWI2YTUzNmQ2NzkyNDcx
NzFlYTdhMjk5OGM4ZDZlYThlIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9XZWJWaWV3SG9zdC5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
V2ViVmlld0hvc3QuY3BwCkBAIC0zNCw2ICszNCw3IEBACiAjaW5jbHVkZSAiTGF5b3V0VGVzdENv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJNb2NrR3JhbW1hckNoZWNrLmgiCiAjaW5jbHVkZSAiTW9j
a1dlYlNwZWVjaElucHV0Q29udHJvbGxlci5oIgorI2luY2x1ZGUgIk1vY2tXZWJTcGVlY2hSZWNv
Z25pemVyLmgiCiAjaW5jbHVkZSAiVGVzdE5hdmlnYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiVGVzdFNoZWxsLmgiCiAjaW5jbHVkZSAiVGVzdFdlYlBsdWdpbi5oIgpAQCAtNzE1LDYgKzcx
NiwxNSBAQCBXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIFdlYlZpZXdIb3N0OjpzcGVlY2hJbnB1
dENvbnRyb2xsZXIoV2ViS2l0OjpXZWJTcGVlY2hJbgogfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUo
U0NSSVBURURfU1BFRUNIKQorV2ViU3BlZWNoUmVjb2duaXplciogV2ViVmlld0hvc3Q6OnNwZWVj
aFJlY29nbml6ZXIoKQoreworICAgIGlmICghbV9tb2NrU3BlZWNoUmVjb2duaXplcikKKyAgICAg
ICAgbV9tb2NrU3BlZWNoUmVjb2duaXplciA9IE1vY2tXZWJTcGVlY2hSZWNvZ25pemVyOjpjcmVh
dGUoKTsKKyAgICByZXR1cm4gbV9tb2NrU3BlZWNoUmVjb2duaXplci5nZXQoKTsKK30KKyNlbmRp
ZgorCiBXZWJEZXZpY2VPcmllbnRhdGlvbkNsaWVudE1vY2sqIFdlYlZpZXdIb3N0OjpkZXZpY2VP
cmllbnRhdGlvbkNsaWVudE1vY2soKQogewogICAgIGlmICghbV9kZXZpY2VPcmllbnRhdGlvbkNs
aWVudE1vY2suZ2V0KCkpCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9XZWJWaWV3SG9zdC5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vV2ViVmlld0hv
c3QuaAppbmRleCAyMWRiYjRjOGQyYTliN2QyYjE2Mjk2MDMyMmMxODliMDM3ODJmOWJhLi45MmNi
YzE0NTBhYjA5N2Q3MWViNzczNWY1ZmM2ZTE1NzY1YzIzNDVkIDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9XZWJWaWV3SG9zdC5oCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1dlYlZpZXdIb3N0LmgKQEAgLTQ4LDYgKzQ4LDcgQEAKIAogY2xhc3Mg
TGF5b3V0VGVzdENvbnRyb2xsZXI7CiBjbGFzcyBNb2NrV2ViU3BlZWNoSW5wdXRDb250cm9sbGVy
OworY2xhc3MgTW9ja1dlYlNwZWVjaFJlY29nbml6ZXI7CiBjbGFzcyBTa0NhbnZhczsKIGNsYXNz
IFRlc3RTaGVsbDsKIApAQCAtMTE3LDYgKzExOCwxMCBAQCBjbGFzcyBXZWJWaWV3SG9zdCA6IHB1
YmxpYyBXZWJLaXQ6OldlYlZpZXdDbGllbnQsIHB1YmxpYyBXZWJLaXQ6OldlYkZyYW1lQ2xpZW50
LAogICAgIE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXIqIHNwZWVjaElucHV0Q29udHJvbGxl
ck1vY2soKSB7IHJldHVybiBtX3NwZWVjaElucHV0Q29udHJvbGxlck1vY2suZ2V0KCk7IH0KICNl
bmRpZgogCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKyAgICBNb2NrV2ViU3BlZWNoUmVj
b2duaXplciogbW9ja1NwZWVjaFJlY29nbml6ZXIoKSB7IHJldHVybiBtX21vY2tTcGVlY2hSZWNv
Z25pemVyLmdldCgpOyB9CisjZW5kaWYKKwogI2lmIEVOQUJMRShQT0lOVEVSX0xPQ0spCiAgICAg
dm9pZCBkaWRMb3NlUG9pbnRlckxvY2soKTsKICAgICB2b2lkIHNldFBvaW50ZXJMb2NrV2lsbEZh
aWxBc3luY2hyb25vdXNseSgpIHsgbV9wb2ludGVyTG9ja1BsYW5uZWRSZXN1bHQgPSBQb2ludGVy
TG9ja1dpbGxGYWlsQXN5bmM7IH0KQEAgLTE3Niw2ICsxODEsOSBAQCBjbGFzcyBXZWJWaWV3SG9z
dCA6IHB1YmxpYyBXZWJLaXQ6OldlYlZpZXdDbGllbnQsIHB1YmxpYyBXZWJLaXQ6OldlYkZyYW1l
Q2xpZW50LAogI2lmIEVOQUJMRShJTlBVVF9TUEVFQ0gpCiAgICAgdmlydHVhbCBXZWJLaXQ6Oldl
YlNwZWVjaElucHV0Q29udHJvbGxlciogc3BlZWNoSW5wdXRDb250cm9sbGVyKFdlYktpdDo6V2Vi
U3BlZWNoSW5wdXRMaXN0ZW5lciopOwogI2VuZGlmCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVD
SCkKKyAgICB2aXJ0dWFsIFdlYktpdDo6V2ViU3BlZWNoUmVjb2duaXplciogc3BlZWNoUmVjb2du
aXplcigpIE9WRVJSSURFOworI2VuZGlmCiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYkRldmljZU9y
aWVudGF0aW9uQ2xpZW50KiBkZXZpY2VPcmllbnRhdGlvbkNsaWVudCgpOwogI2lmIEVOQUJMRShN
RURJQV9TVFJFQU0pCiAgICAgdmlydHVhbCBXZWJLaXQ6OldlYlVzZXJNZWRpYUNsaWVudCogdXNl
ck1lZGlhQ2xpZW50KCk7CkBAIC00MTIsNiArNDIwLDEwIEBAIHByaXZhdGU6CiAgICAgT3duUHRy
PE1vY2tXZWJTcGVlY2hJbnB1dENvbnRyb2xsZXI+IG1fc3BlZWNoSW5wdXRDb250cm9sbGVyTW9j
azsKICNlbmRpZgogCisjaWYgRU5BQkxFKFNDUklQVEVEX1NQRUVDSCkKKyAgICBPd25QdHI8TW9j
a1dlYlNwZWVjaFJlY29nbml6ZXI+IG1fbW9ja1NwZWVjaFJlY29nbml6ZXI7CisjZW5kaWYKKwog
I2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCiAgICAgT3duUHRyPFdlYktpdDo6V2ViVXNlck1lZGlh
Q2xpZW50TW9jaz4gbV91c2VyTWVkaWFDbGllbnRNb2NrOwogICAgIE93blB0cjx3ZWJraXRfc3Vw
cG9ydDo6VGVzdE1lZGlhU3RyZWFtQ2xpZW50PiBtX3Rlc3RNZWRpYVN0cmVhbUNsaWVudDsKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA5OWZkZjI2MTEwN2ZjZmVhZTJhNDhhZmM5NWJmZWQ1YmQ0ZmUyMDgyLi40ZDNmNWI2MWE2
NzBjZDJkMGNmYTU2MTA0NDBlNjBhZmYxYTMzYjQ0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIw
MTItMDYtMDggIEhhbnMgV2VubmJvcmcgIDxoYW5zQGNocm9taXVtLm9yZz4KKworICAgICAgICBT
cGVlY2ggSmF2YVNjcmlwdCBBUEk6IG1vY2sgV2ViU3BlZWNoUmVjb2duaXplciBmb3IgRHVtcFJl
bmRlclRyZWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTg3OTc2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
QWRkIGEgbGF5b3V0IHRlc3QgdXNpbmcgdGhlIG5ldyBtb2NrLCBwdXNoaW5nIGEgbW9jayByZXN1
bHQgdGhyb3VnaAorICAgICAgICBhbmQgY2hlY2tpbmcgdGhhdCBldmVudHMgZmlyZSBjb3JyZWN0
bHkuCisKKyAgICAgICAgKiBmYXN0L3NwZWVjaC9zY3JpcHRlZC9zcGVlY2hyZWNvZ25pdGlvbi1i
YXNpY3MtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3NwZWVjaC9zY3JpcHRl
ZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MuaHRtbDogQWRkZWQuCisKIDIwMTItMDYtMDggIE5v
ZWwgR29yZG9uICA8bm9lbC5nb3Jkb25AZ21haWwuY29tPgogCiAgICAgICAgIFtjaHJvbWl1bV0g
UnVuIG9wdGltaXplLWJhc2VsaW5lcyBvdmVyIGNhbnZhcy10b0RhdGFVUkwtd2VicC5odG1sIHJl
c3VsdHMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL3NjcmlwdGVkL3NwZWVj
aHJlY29nbml0aW9uLWJhc2ljcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVj
aC9zY3JpcHRlZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQxMmVkMmI0ZDlmMzMwOTA4NDZiMDZmODRjMTIyNjE3MTNiY2ZiMmEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRlZC9zcGVlY2hyZWNvZ25pdGlv
bi1iYXNpY3MtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTUgQEAKK1Rlc3QgYmFzaWMgaW50ZXJh
Y3Rpb24gd2l0aCB0aGUgU3BlZWNoIEphdmFTY3JpcHQgQVBJCisKK09uIHN1Y2Nlc3MsIHlvdSB3
aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENP
TVBMRVRFIi4KKworCitQQVNTICd3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbicgaW4gc2VsZiBpcyB0
cnVlCitQQVNTIHdlYmtpdFNwZWVjaFJlY29nbml0aW9uID09IG51bGwgaXMgZmFsc2UKKworb25l
TWF0Y2hUZXN0KCk6CitvbnN0YXJ0CitQQVNTIGNvdW50IGlzIDAKK29uYXVkaW9zdGFydAorUEFT
UyBjb3VudCBpcyAxCitvbnNvdW5kc3RhcnQKK1BBU1MgY291bnQgaXMgMgorb25zcGVlY2hzdGFy
dAorUEFTUyBjb3VudCBpcyAzCitvbnJlc3VsdAorUEFTUyBjb3VudCBpcyA0CitQQVNTIGV2ZW50
LnJlc3VsdC5sZW5ndGggaXMgMQorUEFTUyBldmVudC5yZXN1bHQuaXRlbSgwKS50cmFuc2NyaXB0
IGlzICJoZWxsbywgd29ybGQiCitQQVNTIGV2ZW50LnJlc3VsdC5pdGVtKDApLmNvbmZpZGVuY2Ug
aXMgd2l0aGluIDAuMDAxIG9mIDAuNDIKK29uc3BlZWNoZW5kCitQQVNTIGNvdW50IGlzIDUKK29u
c291bmRlbmQKK1BBU1MgY291bnQgaXMgNgorb25hdWRpb2VuZAorUEFTUyBjb3VudCBpcyA3Citv
bmVuZAorUEFTUyBjb3VudCBpcyA4CisKK25vTWF0Y2hUZXN0KCk6CitvbnN0YXJ0CitQQVNTIGNv
dW50IGlzIDAKK29uYXVkaW9zdGFydAorUEFTUyBjb3VudCBpcyAxCitvbnNvdW5kc3RhcnQKK1BB
U1MgY291bnQgaXMgMgorb25zcGVlY2hzdGFydAorUEFTUyBjb3VudCBpcyAzCitvbm5vbWF0Y2gK
K1BBU1MgY291bnQgaXMgNAorUEFTUyBldmVudC5yZXN1bHQgaXMgbnVsbAorb25zcGVlY2hlbmQK
K1BBU1MgY291bnQgaXMgNQorb25zb3VuZGVuZAorUEFTUyBjb3VudCBpcyA2CitvbmF1ZGlvZW5k
CitQQVNTIGNvdW50IGlzIDcKK29uZW5kCitQQVNTIGNvdW50IGlzIDgKK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRlZC9zcGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MuaHRtbCBi
L0xheW91dFRlc3RzL2Zhc3Qvc3BlZWNoL3NjcmlwdGVkL3NwZWVjaHJlY29nbml0aW9uLWJhc2lj
cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjEzYmMxNDVlMDg4ZGUxNmIyYzI3M2MyMDJiMjg5MjBkOTk5ZDg1
ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L3NwZWVjaC9zY3JpcHRlZC9z
cGVlY2hyZWNvZ25pdGlvbi1iYXNpY3MuaHRtbApAQCAtMCwwICsxLDkwIEBACis8IURPQ1RZUEUg
SFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KK2Rlc2NyaXB0
aW9uKCdUZXN0IGJhc2ljIGludGVyYWN0aW9uIHdpdGggdGhlIFNwZWVjaCBKYXZhU2NyaXB0IEFQ
SScpOworCitmdW5jdGlvbiBydW4oKSB7CisgICAgLy8gQ2hlY2sgYXZhaWxhYmlsaXR5IG9mIGNv
bnN0cnVjdG9ycy4KKyAgICBzaG91bGRCZVRydWUoIid3ZWJraXRTcGVlY2hSZWNvZ25pdGlvbicg
aW4gc2VsZiIpOworICAgIHNob3VsZEJlRmFsc2UoIndlYmtpdFNwZWVjaFJlY29nbml0aW9uID09
IG51bGwiKTsKKworICAgIG9uZU1hdGNoVGVzdCgpOworfQorCitmdW5jdGlvbiBvbmVNYXRjaFRl
c3QoKSB7CisgICAgZGVidWcoJ1xub25lTWF0Y2hUZXN0KCk6Jyk7CisgICAgdmFyIHIgPSBuZXcg
d2Via2l0U3BlZWNoUmVjb2duaXRpb24oKTsKKyAgICB3aW5kb3cuY291bnQgPSAwOworCisgICAg
ci5vbnN0YXJ0ID0gICAgICAgICBmdW5jdGlvbigpIHsgZGVidWcoJ29uc3RhcnQnKTsgICAgICAg
c2hvdWxkQmUoJ2NvdW50JywgJzAnKTsgKytjb3VudDsgfQorICAgIHIub25hdWRpb3N0YXJ0ID0g
ICAgZnVuY3Rpb24oKSB7IGRlYnVnKCdvbmF1ZGlvc3RhcnQnKTsgIHNob3VsZEJlKCdjb3VudCcs
ICcxJyk7ICsrY291bnQ7IH0KKyAgICByLm9uc291bmRzdGFydCA9ICAgIGZ1bmN0aW9uKCkgeyBk
ZWJ1Zygnb25zb3VuZHN0YXJ0Jyk7ICBzaG91bGRCZSgnY291bnQnLCAnMicpOyArK2NvdW50OyB9
CisgICAgci5vbnNwZWVjaHN0YXJ0ID0gICBmdW5jdGlvbigpIHsgZGVidWcoJ29uc3BlZWNoc3Rh
cnQnKTsgc2hvdWxkQmUoJ2NvdW50JywgJzMnKTsgKytjb3VudDsgfQorCisgICAgci5vbnJlc3Vs
dCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1Zygnb25yZXN1bHQnKTsKKyAgICAgICAgc2hv
dWxkQmUoJ2NvdW50JywgJzQnKTsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgc2hvdWxkQmUo
J2V2ZW50LnJlc3VsdC5sZW5ndGgnLCAnMScpOworICAgICAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoJ2V2ZW50LnJlc3VsdC5pdGVtKDApLnRyYW5zY3JpcHQnLCAnaGVsbG8sIHdvcmxkJyk7Cisg
ICAgICAgIHNob3VsZEJlQ2xvc2VUbygnZXZlbnQucmVzdWx0Lml0ZW0oMCkuY29uZmlkZW5jZScs
IDAuNDIsIDFlLTMpOworICAgIH0KKworICAgIHIub25zcGVlY2hlbmQgPSAgICAgZnVuY3Rpb24o
KSB7IGRlYnVnKCdvbnNwZWVjaGVuZCcpOyAgIHNob3VsZEJlKCdjb3VudCcsICc1Jyk7ICsrY291
bnQ7IH0KKyAgICByLm9uc291bmRlbmQgPSAgICAgIGZ1bmN0aW9uKCkgeyBkZWJ1Zygnb25zb3Vu
ZGVuZCcpOyAgICBzaG91bGRCZSgnY291bnQnLCAnNicpOyArK2NvdW50OyB9CisgICAgci5vbmF1
ZGlvZW5kID0gICAgICBmdW5jdGlvbigpIHsgZGVidWcoJ29uYXVkaW9lbmQnKTsgICAgc2hvdWxk
QmUoJ2NvdW50JywgJzcnKTsgKytjb3VudDsgfQorCisgICAgci5vbmVuZCA9IGZ1bmN0aW9uKCkg
eworICAgICAgICBkZWJ1Zygnb25lbmQnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2NvdW50JywgJzgn
KTsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgbm9NYXRjaFRlc3QoKTsKKyAgICB9CisKKyAg
ICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmFkZE1vY2tTcGVlY2hSZWNvZ25pdGlvblJlc3VsdCgnaGVsbG8sIHdvcmxkJywg
MC40Mik7CisgICAgfQorICAgIHIuc3RhcnQoKTsKK30KKworZnVuY3Rpb24gbm9NYXRjaFRlc3Qo
KSB7CisgICAgZGVidWcoJ1xubm9NYXRjaFRlc3QoKTonKTsKKyAgICB2YXIgciA9IG5ldyB3ZWJr
aXRTcGVlY2hSZWNvZ25pdGlvbigpOworICAgIHdpbmRvdy5jb3VudCA9IDA7CisKKyAgICByLm9u
c3RhcnQgPSAgICAgICAgIGZ1bmN0aW9uKCkgeyBkZWJ1Zygnb25zdGFydCcpOyAgICAgICBzaG91
bGRCZSgnY291bnQnLCAnMCcpOyArK2NvdW50OyB9CisgICAgci5vbmF1ZGlvc3RhcnQgPSAgICBm
dW5jdGlvbigpIHsgZGVidWcoJ29uYXVkaW9zdGFydCcpOyAgc2hvdWxkQmUoJ2NvdW50JywgJzEn
KTsgKytjb3VudDsgfQorICAgIHIub25zb3VuZHN0YXJ0ID0gICAgZnVuY3Rpb24oKSB7IGRlYnVn
KCdvbnNvdW5kc3RhcnQnKTsgIHNob3VsZEJlKCdjb3VudCcsICcyJyk7ICsrY291bnQ7IH0KKyAg
ICByLm9uc3BlZWNoc3RhcnQgPSAgIGZ1bmN0aW9uKCkgeyBkZWJ1Zygnb25zcGVlY2hzdGFydCcp
OyBzaG91bGRCZSgnY291bnQnLCAnMycpOyArK2NvdW50OyB9CisKKyAgICByLm9ubm9tYXRjaCA9
IGZ1bmN0aW9uKCkgeworICAgICAgICBkZWJ1Zygnb25ub21hdGNoJyk7CisgICAgICAgIHNob3Vs
ZEJlKCdjb3VudCcsICc0Jyk7CisgICAgICAgICsrY291bnQ7CisgICAgICAgIHNob3VsZEJlKCdl
dmVudC5yZXN1bHQnLCAnbnVsbCcpOworICAgIH0KKworICAgIHIub25zcGVlY2hlbmQgPSAgICAg
ZnVuY3Rpb24oKSB7IGRlYnVnKCdvbnNwZWVjaGVuZCcpOyAgIHNob3VsZEJlKCdjb3VudCcsICc1
Jyk7ICsrY291bnQ7IH0KKyAgICByLm9uc291bmRlbmQgPSAgICAgIGZ1bmN0aW9uKCkgeyBkZWJ1
Zygnb25zb3VuZGVuZCcpOyAgICBzaG91bGRCZSgnY291bnQnLCAnNicpOyArK2NvdW50OyB9Cisg
ICAgci5vbmF1ZGlvZW5kID0gICAgICBmdW5jdGlvbigpIHsgZGVidWcoJ29uYXVkaW9lbmQnKTsg
ICAgc2hvdWxkQmUoJ2NvdW50JywgJzcnKTsgKytjb3VudDsgfQorCisgICAgci5vbmVuZCA9IGZ1
bmN0aW9uKCkgeworICAgICAgICBkZWJ1Zygnb25lbmQnKTsKKyAgICAgICAgc2hvdWxkQmUoJ2Nv
dW50JywgJzgnKTsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgZmluaXNoSlNUZXN0KCk7Cisg
ICAgfQorCisgICAgci5zdGFydCgpOworfQorCit3aW5kb3cub25sb2FkID0gcnVuOword2luZG93
LmpzVGVzdElzQXN5bmMgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>