<?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>22441</bug_id>
          
          <creation_ts>2008-11-23 16:11:53 -0800</creation_ts>
          <short_desc>Bridge the gap between the generated ElementFactory and HTMLElementFactory</short_desc>
          <delta_ts>2008-12-01 15:07:52 -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>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>koivisto</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>99850</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-23 16:11:53 -0800</bug_when>
    <thetext>There is a few differences between them that needs to be removed to autogenerate HTMLElementFactory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99851</commentid>
    <comment_count>1</comment_count>
      <attachid>25403</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-23 16:17:03 -0800</bug_when>
    <thetext>Created attachment 25403
First part: make HTMLElementFactory use QualifiedName</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99852</commentid>
    <comment_count>2</comment_count>
      <attachid>25403</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-23 16:20:02 -0800</bug_when>
    <thetext>Comment on attachment 25403
First part: make HTMLElementFactory use QualifiedName

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99853</commentid>
    <comment_count>3</comment_count>
      <attachid>25404</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-23 16:27:02 -0800</bug_when>
    <thetext>Created attachment 25404
Second part: make the ElementFactory use PassRefPtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99860</commentid>
    <comment_count>4</comment_count>
      <attachid>25404</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-23 19:12:09 -0800</bug_when>
    <thetext>Comment on attachment 25404
Second part: make the ElementFactory use PassRefPtr

&gt; +typedef PassRefPtr&lt;$parameters{&apos;namespace&apos;}Element&gt; (*ConstructorFunc)(Document* doc, bool createdByParser);

There should not be a space between the &quot;&gt;&quot; and the &quot;(&quot; symbols.

(These issues already existed.) The Document* argument should not have the name &quot;doc&quot; -- the name should just be omitted. And the type should be named ConstructorFunction, not ConstructorFunc. There&apos;s no value in abbreviating the type name.

&gt; +#include &quot;config.h&quot;

Headers should not include the &quot;config.h&quot; header; that&apos;s to be included by cpp files only.

&gt; +#ifndef $parameters{&apos;namespace&apos;}ElementFactory_h
&gt; +#define $parameters{&apos;namespace&apos;}ElementFactory_h

The #ifndef part should go before the includes, not after them.

&gt;      class $parameters{&apos;namespace&apos;}ElementFactory
&gt;      {

(This issue already existed.) The brace should be on the same line as the class name.

&gt;      public:
&gt; -        WebCore::Element* createElement(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc, bool createdByParser = true);
&gt; -        static $parameters{&apos;namespace&apos;}Element* create$parameters{&apos;namespace&apos;}Element(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc, bool createdByParser = true);
&gt; +        PassRefPtr&lt;Element&gt; createElement(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc, bool createdByParser = true);
&gt; +        static PassRefPtr&lt;$parameters{&apos;namespace&apos;}Element&gt; create$parameters{&apos;namespace&apos;}Element(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc, bool createdByParser = true);

(This issue already existed.) The argument names qName and doc should be omitted.

I don&apos;t see the change to the createElement definition.

review- because of the &quot;cofig.h&quot; issue</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100002</commentid>
    <comment_count>5</comment_count>
      <attachid>25403</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-24 11:30:33 -0800</bug_when>
    <thetext>Comment on attachment 25403
First part: make HTMLElementFactory use QualifiedName

First part landed in r38714.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100004</commentid>
    <comment_count>6</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-24 11:44:11 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 25404 [review])
&gt; &gt; +typedef PassRefPtr&lt;$parameters{&apos;namespace&apos;}Element&gt; (*ConstructorFunc)(Document* doc, bool createdByParser);
&gt; 
&gt; There should not be a space between the &quot;&gt;&quot; and the &quot;(&quot; symbols.

I am not sure about this one: we are putting a space between the type and the name in other typedef&apos;s like in the FrameLoader.h (http://trac.webkit.org/browser/trunk/WebCore/loader/FrameLoader.h#L96). So I would prefer being conservative and matching the existing implicit coding style.


&gt; 
&gt; Headers should not include the &quot;config.h&quot; header; that&apos;s to be included by cpp
&gt; files only.

I have to disagree here. Our coding style states that all files should include &quot;config.h&quot; first.

&gt; I don&apos;t see the change to the createElement definition.

I have removed it at the last minute as it was not really needed and forgot to update the ChangeLog.

The other issues you mentioned will be addressed in a later version and should have been part of my clean-up from the beginning. Thanks for pointing them out!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100006</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-24 11:56:12 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (In reply to comment #4)
&gt; &gt; (From update of attachment 25404 [review] [review])
&gt; &gt; &gt; +typedef PassRefPtr&lt;$parameters{&apos;namespace&apos;}Element&gt; (*ConstructorFunc)(Document* doc, bool createdByParser);
&gt; &gt; 
&gt; &gt; There should not be a space between the &quot;&gt;&quot; and the &quot;(&quot; symbols.
&gt; 
&gt; I am not sure about this one: we are putting a space between the type and the
&gt; name in other typedef&apos;s like in the FrameLoader.h
&gt; (http://trac.webkit.org/browser/trunk/WebCore/loader/FrameLoader.h#L96). So I
&gt; would prefer being conservative and matching the existing implicit coding
&gt; style.

Oops, my mistake. There *should* be a space here. Sorry, I was wrong.

&gt; &gt; Headers should not include the &quot;config.h&quot; header; that&apos;s to be included by cpp
&gt; &gt; files only.
&gt; 
&gt; I have to disagree here. Our coding style states that all files should include
&gt; &quot;config.h&quot; first.

Yes, I see that&apos;s what the coding style document says, but it&apos;s wrong.

All implementation files should include &quot;config.h&quot; first; header files should never include &quot;config.h&quot;. If you look at the actual code checked in to the tree see that despite what the coding style document says, there is no &quot;.h&quot; file that includes &quot;config.h&quot; except for these 5 files that have it wrong:

    JavaScriptCore/runtime/CollectorHeapIterator.h
    JavaScriptCore/wtf/unicode/qt4/UnicodeQt4.h
    WebCore/svg/Filter.h
    WebCore/svg/FilterBuilder.h
    WebKit/wx/WebViewPrivate.h

These are all wrong and the patch should not be landed this way. We&apos;ve discussed this many times in the past. But until now I didn&apos;t realize that &lt;http://webkit.org/coding/coding-style.html&gt; had this wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100072</commentid>
    <comment_count>8</comment_count>
      <attachid>25453</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-24 14:52:22 -0800</bug_when>
    <thetext>Created attachment 25453
Second Part - V2: Updated with Darin&apos;s comments

&gt; These are all wrong and the patch should not be landed this way. We&apos;ve
&gt; discussed this many times in the past. But until now I didn&apos;t realize that
&gt; &lt;http://webkit.org/coding/coding-style.html&gt; had this wrong.

That&apos;s quite bad as new people follow those instructions when they contribute new code and they do not know the previous discussions. I have filed bug 22468 about this flaw in the documentation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100074</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-24 14:58:49 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; That&apos;s quite bad as new people follow those instructions when they contribute
&gt; new code and they do not know the previous discussions. I have filed bug 22468
&gt; about this flaw in the documentation.

Absolutely. Lets fix it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100076</commentid>
    <comment_count>10</comment_count>
      <attachid>25453</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-24 15:00:32 -0800</bug_when>
    <thetext>Comment on attachment 25453
Second Part - V2: Updated with Darin&apos;s comments

&gt; -        WebCore::Element* createElement(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc, bool createdByParser = true);
&gt; -        static $parameters{&apos;namespace&apos;}Element* create$parameters{&apos;namespace&apos;}Element(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc, bool createdByParser = true);
&gt; +        PassRefPtr&lt;Element&gt; createElement(const WebCore::QualifiedName&amp;, WebCore::Document*, bool createdByParser = true);
&gt; +        static PassRefPtr&lt;$parameters{&apos;namespace&apos;}Element&gt; create$parameters{&apos;namespace&apos;}Element(const WebCore::QualifiedName&amp;, WebCore::Document*, bool createdByParser = true);

I don&apos;t understand how you can change the declaration of the createElement function here without also changing the return type in the definition of createElement. I guess that&apos;s just a placeholder for the future.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100090</commentid>
    <comment_count>11</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-24 15:34:02 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 25453 [review])
&gt; &gt; -        WebCore::Element* createElement(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc, bool createdByParser = true);
&gt; &gt; -        static $parameters{&apos;namespace&apos;}Element* create$parameters{&apos;namespace&apos;}Element(const WebCore::QualifiedName&amp; qName, WebCore::Document* doc, bool createdByParser = true);
&gt; &gt; +        PassRefPtr&lt;Element&gt; createElement(const WebCore::QualifiedName&amp;, WebCore::Document*, bool createdByParser = true);
&gt; &gt; +        static PassRefPtr&lt;$parameters{&apos;namespace&apos;}Element&gt; create$parameters{&apos;namespace&apos;}Element(const WebCore::QualifiedName&amp;, WebCore::Document*, bool createdByParser = true);
&gt; 
&gt; I don&apos;t understand how you can change the declaration of the createElement
&gt; function here without also changing the return type in the definition of
&gt; createElement. I guess that&apos;s just a placeholder for the future.

FYI, createElement is never implemented and is indeed a placeholder related to a comment in make_names.pl (http://trac.webkit.org/browser/trunk/WebCore/dom/make_names.pl#L633). I have weighted about removing it from both make_names.pl and HTMLElementFactory but I liked the idea of leaving this FIXME.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100243</commentid>
    <comment_count>12</comment_count>
      <attachid>25453</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-25 11:22:21 -0800</bug_when>
    <thetext>Comment on attachment 25453
Second Part - V2: Updated with Darin&apos;s comments

Landed in r38754.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100298</commentid>
    <comment_count>13</comment_count>
      <attachid>25506</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-25 14:42:25 -0800</bug_when>
    <thetext>Created attachment 25506
Third part: make some HTML elements take a QualifiedName

This patch changes only the first 5 on purpose. They will go into the next one or into this one based on reviewer&apos;s comment (I am fine with both).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100316</commentid>
    <comment_count>14</comment_count>
      <attachid>25506</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-11-25 15:53:23 -0800</bug_when>
    <thetext>Comment on attachment 25506
Third part: make some HTML elements take a QualifiedName

It&apos;s possible with this change to actually fix bugs in our XHTML handling, but you seem to have chosen not to. :)  I think it&apos;s find to land as-is, but you should plan to fix (and test) the real bug with a later change.

The bug:
&lt;foo:html xmlns:foo=&quot;http://www.w3c.org/1999/xhtml&quot;&gt;

&lt;script&gt;
alert(document.getElementsByTagName(&quot;html&quot;)[0].prefix)

you get &quot;null&quot;, when it should be &quot;foo&quot;

It&apos;s probably also possible to repro the bug with:
document.createElementNS(&quot;foo:html&quot;, &quot;http://www.w3c.org/1999/xhtml&quot;)
That would need to be done on an XHTML doc, as I expect that HTML docs ignore prefixes.

There may already even be a test case testing this.

I look forward to seeing the rest of the patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100317</commentid>
    <comment_count>15</comment_count>
      <attachid>25506</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-11-25 15:54:11 -0800</bug_when>
    <thetext>Comment on attachment 25506
Third part: make some HTML elements take a QualifiedName

To clarify, if you were to fix the bug:

static PassRefPtr&lt;HTMLElement&gt; htmlConstructor(const QualifiedName&amp;, Document* doc, HTMLFormElement*, bool)
9797 {
98      return new HTMLHtmlElement(doc);
 98     return new HTMLHtmlElement(htmlTag, doc);

you would give the qName argument a name, and pass it through, instead of using htmlTag there.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100323</commentid>
    <comment_count>16</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-25 16:07:01 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; (From update of attachment 25506 [review])
&gt; To clarify, if you were to fix the bug:
&gt; 
&gt; static PassRefPtr&lt;HTMLElement&gt; htmlConstructor(const QualifiedName&amp;, Document*
&gt; doc, HTMLFormElement*, bool)
&gt; 9797 {
&gt; 98      return new HTMLHtmlElement(doc);
&gt;  98     return new HTMLHtmlElement(htmlTag, doc);
&gt; 
&gt; you would give the qName argument a name, and pass it through, instead of using
&gt; htmlTag there.
&gt; 

Yes, there is a comment about that in Document::createElement. It would be good to solve it but it is not the purpose of this bug so I will stick to been simple in the fixes until the ElementFactory have been all been merged. As a side note, I am not sure the ElementFactory would survive this change for the moment.
Thanks for the review and the reminder.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100330</commentid>
    <comment_count>17</comment_count>
      <attachid>25506</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-25 16:34:53 -0800</bug_when>
    <thetext>Comment on attachment 25506
Third part: make some HTML elements take a QualifiedName

Committed the 3rd part in r38769.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100450</commentid>
    <comment_count>18</comment_count>
      <attachid>25539</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-26 14:40:25 -0800</bug_when>
    <thetext>Created attachment 25539
Fourth part: move more html elements&apos; constructors to use a QualifiedName</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100454</commentid>
    <comment_count>19</comment_count>
      <attachid>25539</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-11-26 14:55:37 -0800</bug_when>
    <thetext>Comment on attachment 25539
Fourth part: move more html elements&apos; constructors to use a QualifiedName

Fantastic!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100458</commentid>
    <comment_count>20</comment_count>
      <attachid>25539</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-26 15:08:27 -0800</bug_when>
    <thetext>Comment on attachment 25539
Fourth part: move more html elements&apos; constructors to use a QualifiedName

Landed forth part in r38791.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100474</commentid>
    <comment_count>21</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-26 16:06:49 -0800</bug_when>
    <thetext>I don&apos;t agree with adding qname parameter to every element. There is no reason to ever construct HTMLHtmlElement if other tag name than &lt;html&gt;. We lose self-documenting nature of code like this:

    RefPtr&lt;HTMLTableCaptionElement&gt; caption = new HTMLTableCaptionElement(document());

vs.

   RefPtr&lt;HTMLTableSectionElement&gt; newBody = new HTMLTableSectionElement(tbodyTag, document());

where we can immeditealy see that HTMLTableSectionElement can represent multiple tags while HTMLTableCaptionElement can not.

Surely you it would be better to make your autogeneration script slightly smarter rather than losing this architectural feature?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100481</commentid>
    <comment_count>22</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-11-26 16:19:18 -0800</bug_when>
    <thetext>(In reply to comment #21)
&gt; I don&apos;t agree with adding qname parameter to every element. There is no reason
&gt; to ever construct HTMLHtmlElement if other tag name than &lt;html&gt;. We lose
&gt; self-documenting nature of code like this:
&gt; 
&gt;     RefPtr&lt;HTMLTableCaptionElement&gt; caption = new
&gt; HTMLTableCaptionElement(document());
&gt; 
&gt; vs.
&gt; 
&gt;    RefPtr&lt;HTMLTableSectionElement&gt; newBody = new
&gt; HTMLTableSectionElement(tbodyTag, document());
&gt; 
&gt; where we can immeditealy see that HTMLTableSectionElement can represent
&gt; multiple tags while HTMLTableCaptionElement can not.
&gt; 
&gt; Surely you it would be better to make your autogeneration script slightly
&gt; smarter rather than losing this architectural feature?
&gt; 

Moving this discussion to bug 22518.
May this bug RIP. :)

If you feel strongly, we certainly can roll out these changes and put them back up for review.  Of coruse, just because they&apos;ve landed doesn&apos;t mean they can&apos;t be rolled out if that&apos;s necessary.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100490</commentid>
    <comment_count>23</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-26 17:05:29 -0800</bug_when>
    <thetext>Even more important self-documenting feature you lose is that currently you can look at any HTML*Element constructor and see which tag it corresponds to, or in (rare) cases where there is a qname parameter you know that it can represent multiple tags. I think this is valuable.

Yes, I would prefer to have the last two patches rolled back and the adjustments for different constructors done in the autogeneration level. That will make autogeneration code more self-documenting too. Reopening for that.

Possible need for prefix parameter (which I don&apos;t fully understand) is a separate issue from this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100563</commentid>
    <comment_count>24</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-27 16:55:16 -0800</bug_when>
    <thetext>After futher thinking and reading Eric&apos;s point about prefixes I think this approach is acceptable. 

However I don&apos;t want to lose information of make the code more bug prone so I&apos;d like to see a patch that adds ASSERT(hasTagName(fooTag)) too all constructors where the qname parameter was added.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100564</commentid>
    <comment_count>25</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2008-11-27 16:57:05 -0800</bug_when>
    <thetext>The awkward HTMLHtmlElement(htmlTag, doc) syntax is easier to clean up when DOM is switched to new style refcounting using static create() like RefCounted subclasses use.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100765</commentid>
    <comment_count>26</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-30 04:35:34 -0800</bug_when>
    <thetext>(In reply to comment #25)
&gt; The awkward HTMLHtmlElement(htmlTag, doc) syntax is easier to clean up when DOM
&gt; is switched to new style refcounting using static create() like RefCounted
&gt; subclasses use.
&gt; 

Filed bug22563 about the awkward syntax.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100766</commentid>
    <comment_count>27</comment_count>
      <attachid>25608</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-11-30 04:46:44 -0800</bug_when>
    <thetext>Created attachment 25608
Add the ASSERT to the constructors changed by this bug

Antti, the attached patch should tackle your comment.

This bug is getting pretty cluttered so it will be closed after this patch (unless other issues remains about the HTML elements&apos; changes). I have tried to file the other issues as separate bugs to keep track of them  (feel free to open others that I may have missed).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>100894</commentid>
    <comment_count>28</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-12-01 15:07:52 -0800</bug_when>
    <thetext>Landed the last patch in r38878.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25403</attachid>
            <date>2008-11-23 16:17:03 -0800</date>
            <delta_ts>2008-11-24 11:30:33 -0800</delta_ts>
            <desc>First part: make HTMLElementFactory use QualifiedName</desc>
            <filename>HTMLElementFactory-cleanup.diff</filename>
            <type>text/plain</type>
            <size>27227</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODY3NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsODcgQEAKKzIwMDgtMTEtMTkgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNDQxOiBCcmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnZW5lcmF0ZWQgRWxl
bWVudEZhY3RvcnkgYW5kIEhUTUxFbGVtZW50RmFjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDEKKworICAgICAgICAtIE1ha2UgSFRNTEVs
ZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudCB0YWtlIGEgUXVhbGlmaWVkTmFtZSBpbnN0
ZWFkIG9mCisgICAgICAgIGFuIEF0b21pY1N0cmluZy4KKworICAgICAgICAtIFVwZGF0ZWQgdGhl
IGVsZW1lbnRzJyBjb25zdHJ1Y3RvcnMgYW5kIHRoZSBjYWxsZXJzIHRvIHJlZmxlY3QgdGhlIHBy
ZXZpb3VzIGNoYW5nZS4KKworICAgICAgICAqIGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpEb2N1bWVudDo6Y3JlYXRlRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRG9j
dW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTERvY3VtZW50OjpjcmVhdGVFbGVtZW50
KToKKyAgICAgICAgKiBodG1sL0hUTUxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxFbGVtZW50OjpjbG9uZU5vZGUpOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnRGYWN0b3J5
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omh0bWxDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpoZWFkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Ym9keUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpsaW5rQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bWV0YUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OnN0eWxlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
dGl0bGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZUNvbnN0cnVjdG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OmZyYW1lc2V0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6aWZyYW1lQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Zm9ybUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKFdlYkNvcmU6OmJ1dHRvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OmlucHV0Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6aXNpbmRleENvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmZpZWxkc2V0Q29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6a2V5Z2VuQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bGFiZWxDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpsZWdlbmRDb25zdHJ1Y3Rvcik6CisgICAgICAg
IChXZWJDb3JlOjpvcHRncm91cENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Om9wdGlv
bkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnNlbGVjdENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRleHRhcmVhQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6
ZGxDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp1bENvbnN0cnVjdG9yKToKKyAgICAg
ICAgKFdlYkNvcmU6Om9sQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6ZGlyQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bWVudUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmxpQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6YmxvY2txdW90ZUNvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRpdkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmhlYWRpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpockNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcmFncmFwaENvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnByZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2Vmb250Q29u
c3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6Om1vZENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmFuY2hvckNvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmltYWdlQ29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6bWFwQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6YXJlYUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmNhbnZhc0NvbnN0cnVjdG9yKToKKyAgICAgICAgKFdl
YkNvcmU6OmFwcGxldENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmVtYmVkQ29uc3Ry
dWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6b2JqZWN0Q29uc3RydWN0b3IpOgorICAgICAgICAo
V2ViQ29yZTo6cGFyYW1Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpzY3JpcHRDb25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp0YWJsZUNvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OnRhYmxlQ2FwdGlvbkNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRh
YmxlQ29sQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dGFibGVSb3dDb25zdHJ1Y3Rv
cik6CisgICAgICAgIChXZWJDb3JlOjp0YWJsZUNlbGxDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjp0YWJsZVNlY3Rpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpickNv
bnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnF1b3RlQ29uc3RydWN0b3IpOgorICAgICAg
ICAoV2ViQ29yZTo6bWFycXVlZUNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmF1ZGlv
Q29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6dmlkZW9Db25zdHJ1Y3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpzb3VyY2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpIVE1M
RWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxF
bGVtZW50RmFjdG9yeS5oOgorICAgICAgICAqIGh0bWwvSFRNTFBhcnNlci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MUGFyc2VyOjpnZXROb2RlKToKKwogMjAwOC0xMS0yMSAgU2FtIFdlaW5p
ZyAgPHNhbUB3ZWJraXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhbiBCZXJuc3RlaW4u
CkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9k
b20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzODY3NikKKysrIFdlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIzLDcgKzUyMyw3IEBAIFBhc3NSZWZQdHI8RWxlbWVu
dD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KICAgICB9CiAKICAgICBpZiAobV9pc1hIVE1MKQotICAg
ICAgICByZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChuYW1lLCB0
aGlzLCAwLCBmYWxzZSk7CisgICAgICAgIHJldHVybiBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0
ZUhUTUxFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIG5hbWUsIHhodG1sTmFtZXNwYWNl
VVJJKSwgdGhpcywgMCwgZmFsc2UpOwogCiAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoUXVhbGlm
aWVkTmFtZShudWxsQXRvbSwgbmFtZSwgbnVsbEF0b20pLCBmYWxzZSwgZWMpOwogfQpAQCAtNzQ4
LDcgKzc0OCw3IEBAIFBhc3NSZWZQdHI8RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KIAog
ICAgIC8vIEZJWE1FOiBVc2UgcmVnaXN0ZXJlZCBuYW1lc3BhY2VzIGFuZCBsb29rIHVwIGluIGEg
aGFzaCB0byBmaW5kIHRoZSByaWdodCBmYWN0b3J5LgogICAgIGlmIChxTmFtZS5uYW1lc3BhY2VV
UkkoKSA9PSB4aHRtbE5hbWVzcGFjZVVSSSkKLSAgICAgICAgZSA9IEhUTUxFbGVtZW50RmFjdG9y
eTo6Y3JlYXRlSFRNTEVsZW1lbnQocU5hbWUubG9jYWxOYW1lKCksIHRoaXMsIDAsIGNyZWF0ZWRC
eVBhcnNlcik7CisgICAgICAgIGUgPSBIVE1MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZUhUTUxFbGVt
ZW50KHFOYW1lLCB0aGlzLCAwLCBjcmVhdGVkQnlQYXJzZXIpOwogI2lmIEVOQUJMRShTVkcpCiAg
ICAgZWxzZSBpZiAocU5hbWUubmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05hbWVzcGFj
ZVVSSSkKICAgICAgICAgZSA9IFNWR0VsZW1lbnRGYWN0b3J5OjpjcmVhdGVTVkdFbGVtZW50KHFO
YW1lLCB0aGlzLCBjcmVhdGVkQnlQYXJzZXIpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHJl
dmlzaW9uIDM4Njc2KQorKysgV2ViQ29yZS9odG1sL0hUTUxEb2N1bWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwNCw3ICszMDQsNyBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IEhUTUxEb2N1bWVu
dDo6Y3JlYXRlCiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBBdG9taWNTdHJpbmcgbG93
ZXJOYW1lID0gbmFtZS5zdHJpbmcoKS5pbXBsKCktPmlzTG93ZXIoKSA/IG5hbWUgOiBBdG9taWNT
dHJpbmcobmFtZS5zdHJpbmcoKS5sb3dlcigpKTsKLSAgICByZXR1cm4gSFRNTEVsZW1lbnRGYWN0
b3J5OjpjcmVhdGVIVE1MRWxlbWVudChsb3dlck5hbWUsIHRoaXMsIDAsIGZhbHNlKTsKKyAgICBy
ZXR1cm4gSFRNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChRdWFsaWZpZWROYW1l
KG51bGxBdG9tLCBsb3dlck5hbWUsIHhodG1sTmFtZXNwYWNlVVJJKSwgdGhpcywgMCwgZmFsc2Up
OwogfQogCiBzdGF0aWMgdm9pZCBhZGRJdGVtVG9NYXAoSFRNTERvY3VtZW50OjpOYW1lQ291bnRN
YXAmIG1hcCwgY29uc3QgQXRvbWljU3RyaW5nJiBuYW1lKQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzODY3NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTk4LDcgKzk4LDcgQEAgaW50IEhUTUxFbGVtZW50Ojp0YWdQcmlvcml0eSgp
IGNvbnN0CiAKIFBhc3NSZWZQdHI8Tm9kZT4gSFRNTEVsZW1lbnQ6OmNsb25lTm9kZShib29sIGRl
ZXApCiB7Ci0gICAgUmVmUHRyPEhUTUxFbGVtZW50PiBjbG9uZSA9IEhUTUxFbGVtZW50RmFjdG9y
eTo6Y3JlYXRlSFRNTEVsZW1lbnQodGFnUU5hbWUoKS5sb2NhbE5hbWUoKSwgZG9jdW1lbnQoKSwg
MCwgZmFsc2UpOworICAgIFJlZlB0cjxIVE1MRWxlbWVudD4gY2xvbmUgPSBIVE1MRWxlbWVudEZh
Y3Rvcnk6OmNyZWF0ZUhUTUxFbGVtZW50KHRhZ1FOYW1lKCksIGRvY3VtZW50KCksIDAsIGZhbHNl
KTsKICAgICBpZiAoIWNsb25lKQogICAgICAgICByZXR1cm4gMDsKIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxFbGVtZW50RmFjdG9yeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDM4Njc2KQorKysgV2ViQ29yZS9odG1sL0hU
TUxFbGVtZW50RmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDMyNSArODksMzI1IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotdHlw
ZWRlZiBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiAoKkNvbnN0cnVjdG9yRnVuYykoY29uc3QgQXRv
bWljU3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKTsKK3R5cGVkZWYgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gKCpDb25zdHJ1
Y3RvckZ1bmMpKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiwgSFRNTEZv
cm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwogdHlwZWRlZiBIYXNoTWFwPEF0b21p
Y1N0cmluZ0ltcGwqLCBDb25zdHJ1Y3RvckZ1bmM+IEZ1bmN0aW9uTWFwOwogc3RhdGljIEZ1bmN0
aW9uTWFwKiBnRnVuY3Rpb25NYXA7CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBo
dG1sQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZv
cm1FbGVtZW50KiwgYm9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBodG1sQ29u
c3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxl
bWVudCosIGJvb2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MSHRtbEVsZW1lbnQoZG9jKTsKIH0K
IAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGhlYWRDb25zdHJ1Y3Rvcihjb25zdCBB
dG9taWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGhlYWRDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKICAgICBy
ZXR1cm4gbmV3IEhUTUxIZWFkRWxlbWVudChkb2MpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4gYm9keUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50
KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxl
bWVudD4gYm9keUNvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9j
LCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBuZXcgSFRNTEJvZHlFbGVt
ZW50KGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBiYXNlQ29uc3Ry
dWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50
KiwgYm9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBiYXNlQ29uc3RydWN0b3Io
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJv
b2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MQmFzZUVsZW1lbnQoZG9jKTsKIH0KIAotc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGxpbmtDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJp
bmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNl
cikKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBsaW5rQ29uc3RydWN0b3IoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKQogewogICAgIFJlZlB0cjxIVE1MTGlua0VsZW1lbnQ+IGxpbmsgPSBuZXcg
SFRNTExpbmtFbGVtZW50KGRvYyk7CiAgICAgbGluay0+c2V0Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0
ZWRCeVBhcnNlcik7CiAgICAgcmV0dXJuIGxpbmsucmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gbWV0YUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYs
IERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gbWV0YUNvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBuZXcgSFRN
TE1ldGFFbGVtZW50KGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBz
dHlsZUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxG
b3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQorc3RhdGljIFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IHN0eWxlQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQogewogICAgIFJl
ZlB0cjxIVE1MU3R5bGVFbGVtZW50PiBzdHlsZSA9IG5ldyBIVE1MU3R5bGVFbGVtZW50KGRvYyk7
CiAgICAgc3R5bGUtPnNldENyZWF0ZWRCeVBhcnNlcihjcmVhdGVkQnlQYXJzZXIpOwogICAgIHJl
dHVybiBzdHlsZS5yZWxlYXNlKCk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50
PiB0aXRsZUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhU
TUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gdGl0
bGVDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZv
cm1FbGVtZW50KiwgYm9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxUaXRsZUVsZW1lbnQoZG9j
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGZyYW1lQ29uc3RydWN0b3Io
Y29uc3QgQXRvbWljU3RyaW5nJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZnJhbWVD
b25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1F
bGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7CiAgICAgUmVmUHRyPEhUTUxGcmFtZUVs
ZW1lbnQ+IGZyYW1lID0gbmV3IEhUTUxGcmFtZUVsZW1lbnQoZG9jKTsKICAgICBmcmFtZS0+c2V0
Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgcmV0dXJuIGZyYW1lLnJlbGVh
c2UoKTsgICAgCiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBmcmFtZXNldENv
bnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxl
bWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZnJhbWVzZXRDb25z
dHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVt
ZW50KiwgYm9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxGcmFtZVNldEVsZW1lbnQoZG9jKTsK
IH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGlmcmFtZUNvbnN0cnVjdG9yKGNv
bnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKQorc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGlmcmFtZUNv
bnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVs
ZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKICAgICBSZWZQdHI8SFRNTElGcmFtZUVs
ZW1lbnQ+IGlGcmFtZSA9IG5ldyBIVE1MSUZyYW1lRWxlbWVudChkb2MpOwogICAgIGlGcmFtZS0+
c2V0Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgcmV0dXJuIGlGcmFtZS5y
ZWxlYXNlKCk7ICAgIAogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZm9ybUNv
bnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxl
bWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZm9ybUNvbnN0cnVj
dG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQq
LCBib29sKQogewogICAgIHJldHVybiBuZXcgSFRNTEZvcm1FbGVtZW50KGRvYyk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBidXR0b25Db25zdHJ1Y3Rvcihjb25zdCBBdG9t
aWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wpCitz
dGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYnV0dG9uQ29uc3RydWN0b3IoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkK
IHsKICAgICByZXR1cm4gbmV3IEhUTUxCdXR0b25FbGVtZW50KGRvYywgZm9ybSk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbnB1dENvbnN0cnVjdG9yKGNvbnN0IEF0b21p
Y1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKK3N0
YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbnB1dENvbnN0cnVjdG9yKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wpCiB7
CiAgICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRFbGVtZW50KGRvYywgZm9ybSk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpc2luZGV4Q29uc3RydWN0b3IoY29uc3QgQXRvbWlj
U3RyaW5nJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQorc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGlzaW5kZXhDb25zdHJ1Y3Rvcihjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQog
ewogICAgIHJldHVybiBuZXcgSFRNTElzSW5kZXhFbGVtZW50KGRvYywgZm9ybSk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBmaWVsZHNldENvbnN0cnVjdG9yKGNvbnN0IEF0
b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkK
K3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBmaWVsZHNldENvbnN0cnVjdG9yKGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJv
b2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MRmllbGRTZXRFbGVtZW50KGRvYywgZm9ybSk7CiB9
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBrZXlnZW5Db25zdHJ1Y3Rvcihjb25z
dCBBdG9taWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJv
b2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4ga2V5Z2VuQ29uc3RydWN0b3IoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwg
Ym9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxLZXlnZW5FbGVtZW50KGRvYywgZm9ybSk7CiB9
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBsYWJlbENvbnN0cnVjdG9yKGNvbnN0
IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitz
dGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbGFiZWxDb25zdHJ1Y3Rvcihjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKICAg
ICByZXR1cm4gbmV3IEhUTUxMYWJlbEVsZW1lbnQoZG9jKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTEVsZW1lbnQ+IGxlZ2VuZENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERv
Y3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKK3N0YXRpYyBQYXNzUmVm
UHRyPEhUTUxFbGVtZW50PiBsZWdlbmRDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQogewogICAgIHJldHVy
biBuZXcgSFRNTExlZ2VuZEVsZW1lbnQoZG9jLCBmb3JtKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTEVsZW1lbnQ+IG9wdGdyb3VwQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiwg
RG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQorc3RhdGljIFBhc3NS
ZWZQdHI8SFRNTEVsZW1lbnQ+IG9wdGdyb3VwQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKIHsKICAgICBy
ZXR1cm4gbmV3IEhUTUxPcHRHcm91cEVsZW1lbnQoZG9jLCBmb3JtKTsKIH0KIAotc3RhdGljIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IG9wdGlvbkNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKK3N0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50PiBvcHRpb25Db25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQogewogICAg
IHJldHVybiBuZXcgSFRNTE9wdGlvbkVsZW1lbnQoZG9jLCBmb3JtKTsKIH0KIAotc3RhdGljIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHNlbGVjdENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKK3N0YXRpYyBQ
YXNzUmVmUHRyPEhUTUxFbGVtZW50PiBzZWxlY3RDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQogewogICAg
IHJldHVybiBuZXcgSFRNTFNlbGVjdEVsZW1lbnQoZG9jLCBmb3JtKTsKIH0KIAotc3RhdGljIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHRleHRhcmVhQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3Ry
aW5nJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQorc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHRleHRhcmVhQ29uc3RydWN0b3IoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKIHsK
ICAgICByZXR1cm4gbmV3IEhUTUxUZXh0QXJlYUVsZW1lbnQoZG9jLCBmb3JtKTsKIH0KIAotc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGRsQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3Ry
aW5nJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKK3N0YXRpYyBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBkbENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBuZXcg
SFRNTERMaXN0RWxlbWVudChkb2MpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gdWxDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1M
Rm9ybUVsZW1lbnQqLCBib29sKQorc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHVsQ29u
c3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxl
bWVudCosIGJvb2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MVUxpc3RFbGVtZW50KGRvYyk7CiB9
CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBvbENvbnN0cnVjdG9yKGNvbnN0IEF0
b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gb2xDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKICAgICByZXR1
cm4gbmV3IEhUTUxPTGlzdEVsZW1lbnQoZG9jKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IGRpckNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBk
b2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVu
dD4gZGlyQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhU
TUxGb3JtRWxlbWVudCosIGJvb2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MRGlyZWN0b3J5RWxl
bWVudChkb2MpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbWVudUNvbnN0
cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVu
dCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbWVudUNvbnN0cnVjdG9y
KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBi
b29sKQogewogICAgIHJldHVybiBuZXcgSFRNTE1lbnVFbGVtZW50KGRvYyk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBsaUNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmlu
ZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gbGlDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhU
TUxMSUVsZW1lbnQoZG9jKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGJs
b2NrcXVvdGVDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBI
VE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGJs
b2NrcXVvdGVDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywg
SFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxCbG9ja3F1b3Rl
RWxlbWVudChkb2MpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZGl2Q29u
c3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVt
ZW50KiwgYm9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBkaXZDb25zdHJ1Y3Rv
cihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50Kiwg
Ym9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxEaXZFbGVtZW50KGRvYyk7CiB9CiAKLXN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBoZWFkaW5nQ29uc3RydWN0b3IoY29uc3QgQXRvbWlj
U3RyaW5nJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQor
c3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGhlYWRpbmdDb25zdHJ1Y3Rvcihjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBi
b29sKQogewotICAgIHJldHVybiBuZXcgSFRNTEhlYWRpbmdFbGVtZW50KFF1YWxpZmllZE5hbWUo
bnVsbEF0b20sIHRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKSwgZG9jKTsKKyAgICByZXR1cm4g
bmV3IEhUTUxIZWFkaW5nRWxlbWVudCh0YWdOYW1lLCBkb2MpOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gaHJDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmLCBEb2N1
bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3RhdGljIFBhc3NSZWZQdHI8SFRN
TEVsZW1lbnQ+IGhyQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBk
b2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MSFJFbGVt
ZW50KGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBwYXJhZ3JhcGhD
b25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVs
ZW1lbnQqLCBib29sKQorc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHBhcmFncmFwaENv
bnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVs
ZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBuZXcgSFRNTFBhcmFncmFwaEVsZW1lbnQoZG9j
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHByZUNvbnN0cnVjdG9yKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50
KiwgYm9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBwcmVDb25zdHJ1Y3Rvcihj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRNTFByZUVsZW1lbnQoUXVhbGlmaWVkTmFt
ZShudWxsQXRvbSwgdGFnTmFtZSwgeGh0bWxOYW1lc3BhY2VVUkkpLCBkb2MpOworICAgIHJldHVy
biBuZXcgSFRNTFByZUVsZW1lbnQodGFnTmFtZSwgZG9jKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTEVsZW1lbnQ+IGJhc2Vmb250Q29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiwg
RG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKK3N0YXRpYyBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBiYXNlZm9udENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBuZXcg
SFRNTEJhc2VGb250RWxlbWVudChkb2MpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxl
bWVudD4gZm9udENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2Ms
IEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4g
Zm9udENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1M
Rm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBuZXcgSFRNTEZvbnRFbGVtZW50KGRv
Yyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBtb2RDb25zdHJ1Y3Rvcihj
b25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVu
dCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbW9kQ29uc3RydWN0b3Io
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVt
ZW50KiwgYm9vbCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxNb2RFbGVtZW50KFF1YWxpZmllZE5h
bWUobnVsbEF0b20sIHRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKSwgZG9jKTsKKyAgICByZXR1
cm4gbmV3IEhUTUxNb2RFbGVtZW50KHRhZ05hbWUsIGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVm
UHRyPEhUTUxFbGVtZW50PiBhbmNob3JDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmLCBE
b2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3RhdGljIFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IGFuY2hvckNvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBuZXcgSFRN
TEFuY2hvckVsZW1lbnQoZG9jKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IGltYWdlQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiwgRG9jdW1lbnQqIGRvYywgSFRN
TEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQorc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+
IGltYWdlQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhU
TUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxJbWFnZUVs
ZW1lbnQoZG9jLCBmb3JtKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IG1h
cENvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3Jt
RWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbWFwQ29uc3Ry
dWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVu
dCosIGJvb2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MTWFwRWxlbWVudChkb2MpOwogfQogCi1z
dGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYXJlYUNvbnN0cnVjdG9yKGNvbnN0IEF0b21p
Y1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYXJlYUNvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVy
biBuZXcgSFRNTEFyZWFFbGVtZW50KGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBjYW52YXNDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmLCBEb2N1bWVudCog
ZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1l
bnQ+IGNhbnZhc0NvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9j
LCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAgIHJldHVybiBuZXcgSFRNTENhbnZhc0Vs
ZW1lbnQoZG9jKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGFwcGxldENv
bnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxl
bWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYXBwbGV0Q29uc3Ry
dWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVu
dCosIGJvb2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MQXBwbGV0RWxlbWVudChkb2MpOwogfQog
Ci1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZW1iZWRDb25zdHJ1Y3Rvcihjb25zdCBB
dG9taWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGVtYmVkQ29uc3RydWN0b3IoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7CiAgICAg
cmV0dXJuIG5ldyBIVE1MRW1iZWRFbGVtZW50KGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBvYmplY3RDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmLCBEb2N1
bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3N0YXRp
YyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBvYmplY3RDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCiB7CiAgICAgUmVmUHRyPEhUTUxPYmplY3RFbGVtZW50PiBvYmplY3QgPSBuZXcgSFRN
TE9iamVjdEVsZW1lbnQoZG9jLCBjcmVhdGVkQnlQYXJzZXIpOwogICAgIHJldHVybiBvYmplY3Qu
cmVsZWFzZSgpOwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gcGFyYW1Db25z
dHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqLCBib29sKQorc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHBhcmFtQ29uc3RydWN0
b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCos
IGJvb2wpCiB7CiAgICAgcmV0dXJuIG5ldyBIVE1MUGFyYW1FbGVtZW50KGRvYyk7CiB9CiAKLXN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBzY3JpcHRDb25zdHJ1Y3Rvcihjb25zdCBBdG9t
aWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBzY3JpcHRDb25zdHJ1Y3Rv
cihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50Kiwg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7CiAgICAgUmVmUHRyPEhUTUxTY3JpcHRFbGVtZW50PiBz
Y3JpcHQgPSBuZXcgSFRNTFNjcmlwdEVsZW1lbnQoZG9jKTsKICAgICBzY3JpcHQtPnNldENyZWF0
ZWRCeVBhcnNlcihjcmVhdGVkQnlQYXJzZXIpOwogICAgIHJldHVybiBzY3JpcHQucmVsZWFzZSgp
OwogfQogCi1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gdGFibGVDb25zdHJ1Y3Rvcihj
b25zdCBBdG9taWNTdHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29s
KQorc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHRhYmxlQ29uc3RydWN0b3IoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7
CiAgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVFbGVtZW50KGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiB0YWJsZUNhcHRpb25Db25zdHJ1Y3Rvcihjb25zdCBBdG9taWNT
dHJpbmcmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3RhdGljIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHRhYmxlQ2FwdGlvbkNvbnN0cnVjdG9yKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAg
IHJldHVybiBuZXcgSFRNTFRhYmxlQ2FwdGlvbkVsZW1lbnQoZG9jKTsKIH0KIAotc3RhdGljIFBh
c3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHRhYmxlQ29sQ29uc3RydWN0b3IoY29uc3QgQXRvbWljU3Ry
aW5nJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHRhYmxlQ29sQ29uc3RydWN0b3IoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9v
bCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUNvbEVsZW1lbnQoUXVhbGlmaWVkTmFtZShu
dWxsQXRvbSwgdGFnTmFtZSwgeGh0bWxOYW1lc3BhY2VVUkkpLCBkb2MpOworICAgIHJldHVybiBu
ZXcgSFRNTFRhYmxlQ29sRWxlbWVudCh0YWdOYW1lLCBkb2MpOwogfQogCi1zdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gdGFibGVSb3dDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcm
LCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQorc3RhdGljIFBhc3NSZWZQ
dHI8SFRNTEVsZW1lbnQ+IHRhYmxlUm93Q29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7CiAgICAgcmV0dXJuIG5l
dyBIVE1MVGFibGVSb3dFbGVtZW50KGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiB0YWJsZUNlbGxDb25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05hbWUs
IERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0
cjxIVE1MRWxlbWVudD4gdGFibGVDZWxsQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAgICBy
ZXR1cm4gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHRh
Z05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKSwgZG9jKTsKKyAgICByZXR1cm4gbmV3IEhUTUxUYWJs
ZUNlbGxFbGVtZW50KHRhZ05hbWUsIGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiB0YWJsZVNlY3Rpb25Db25zdHJ1Y3Rvcihjb25zdCBBdG9taWNTdHJpbmcmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1Jl
ZlB0cjxIVE1MRWxlbWVudD4gdGFibGVTZWN0aW9uQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVk
TmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsK
LSAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KFF1YWxpZmllZE5hbWUobnVs
bEF0b20sIHRhZ05hbWUsIHhodG1sTmFtZXNwYWNlVVJJKSwgZG9jKTsKKyAgICByZXR1cm4gbmV3
IEhUTUxUYWJsZVNlY3Rpb25FbGVtZW50KHRhZ05hbWUsIGRvYyk7CiB9CiAKLXN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBickNvbnN0cnVjdG9yKGNvbnN0IEF0b21pY1N0cmluZyYsIERv
Y3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4gYnJDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
IGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKICAgICByZXR1cm4gbmV3IEhUTUxCUkVs
ZW1lbnQoZG9jKTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHF1b3RlQ29u
c3RydWN0b3IoY29uc3QgQXRvbWljU3RyaW5nJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVt
ZW50KiwgYm9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBxdW90ZUNvbnN0cnVj
dG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQq
LCBib29sKQogewogICAgIHJldHVybiBuZXcgSFRNTFF1b3RlRWxlbWVudChkb2MpOwogfQogCi1z
dGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbWFycXVlZUNvbnN0cnVjdG9yKGNvbnN0IEF0
b21pY1N0cmluZyYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCitzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbWFycXVlZUNvbnN0cnVjdG9yKGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewogICAg
IHJldHVybiBuZXcgSFRNTE1hcnF1ZWVFbGVtZW50KGRvYyk7CiB9CiAKICNpZiBFTkFCTEUoVklE
RU8pCi1zdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYXVkaW9Db25zdHJ1Y3Rvcihjb25z
dCBBdG9taWNTdHJpbmcmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCos
IGJvb2wpCitzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYXVkaW9Db25zdHJ1Y3Rvcihj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqLCBib29sKQogewogICAgIGlmICghTWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKCkpCi0gICAg
ICAgIHJldHVybiBuZXcgSFRNTEVsZW1lbnQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFnTmFt
ZSwgeGh0bWxOYW1lc3BhY2VVUkkpLCBkb2MpOworICAgICAgICByZXR1cm4gbmV3IEhUTUxFbGVt
ZW50KHRhZ05hbWUsIGRvYyk7CiAgICAgcmV0dXJuIG5ldyBIVE1MQXVkaW9FbGVtZW50KGRvYyk7
CiB9CiAKLXN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiB2aWRlb0NvbnN0cnVjdG9yKGNv
bnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50
KiwgYm9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiB2aWRlb0NvbnN0cnVjdG9y
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxl
bWVudCosIGJvb2wpCiB7CiAgICAgaWYgKCFNZWRpYVBsYXllcjo6aXNBdmFpbGFibGUoKSkKLSAg
ICAgICAgcmV0dXJuIG5ldyBIVE1MRWxlbWVudChRdWFsaWZpZWROYW1lKG51bGxBdG9tLCB0YWdO
YW1lLCB4aHRtbE5hbWVzcGFjZVVSSSksIGRvYyk7CisgICAgICAgIHJldHVybiBuZXcgSFRNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jKTsKICAgICByZXR1cm4gbmV3IEhUTUxWaWRlb0VsZW1lbnQoZG9j
KTsKIH0KIAotc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHNvdXJjZUNvbnN0cnVjdG9y
KGNvbnN0IEF0b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVt
ZW50KiwgYm9vbCkKK3N0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBzb3VyY2VDb25zdHJ1
Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9y
bUVsZW1lbnQqLCBib29sKQogewogICAgIGlmICghTWVkaWFQbGF5ZXI6OmlzQXZhaWxhYmxlKCkp
Ci0gICAgICAgIHJldHVybiBuZXcgSFRNTEVsZW1lbnQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwg
dGFnTmFtZSwgeGh0bWxOYW1lc3BhY2VVUkkpLCBkb2MpOworICAgICAgICByZXR1cm4gbmV3IEhU
TUxFbGVtZW50KHRhZ05hbWUsIGRvYyk7CiAgICAgcmV0dXJuIG5ldyBIVE1MU291cmNlRWxlbWVu
dChkb2MpOwogfQogI2VuZGlmCkBAIC01MDAsMjAgKzUwMCwyMCBAQCBzdGF0aWMgdm9pZCBjcmVh
dGVGdW5jdGlvbk1hcCgpCiAjZW5kaWYKIH0KIAotUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gSFRN
TEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudChjb25zdCBBdG9taWNTdHJpbmcmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVk
QnlQYXJzZXIpCitQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBIVE1MRWxlbWVudEZhY3Rvcnk6OmNy
ZWF0ZUhUTUxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBk
b2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCiB7CiAgICAg
aWYgKCFkb2MpCiAgICAgICAgIHJldHVybiAwOyAvLyBEb24ndCBhbGxvdyBlbGVtZW50cyB0byBl
dmVyIGJlIG1hZGUgd2l0aG91dCBoYXZpbmcgYSBkb2MuCiAKICAgICBpZiAoIWdGdW5jdGlvbk1h
cCkKICAgICAgICAgY3JlYXRlRnVuY3Rpb25NYXAoKTsKLSAgICAKLSAgICBDb25zdHJ1Y3RvckZ1
bmMgZnVuYyA9IGdGdW5jdGlvbk1hcC0+Z2V0KHRhZ05hbWUuaW1wbCgpKTsKKworICAgIENvbnN0
cnVjdG9yRnVuYyBmdW5jID0gZ0Z1bmN0aW9uTWFwLT5nZXQodGFnTmFtZS5sb2NhbE5hbWUoKS5p
bXBsKCkpOwogICAgIGlmIChmdW5jKQogICAgICAgICByZXR1cm4gZnVuYyh0YWdOYW1lLCBkb2Ms
IGZvcm0sIGNyZWF0ZWRCeVBhcnNlcik7Ci0gCisKICAgICAvLyBlbGVtZW50cyB3aXRoIG5vIHNw
ZWNpYWwgcmVwcmVzZW50YXRpb24gaW4gdGhlIERPTQotICAgIHJldHVybiBuZXcgSFRNTEVsZW1l
bnQoUXVhbGlmaWVkTmFtZShudWxsQXRvbSwgdGFnTmFtZSwgeGh0bWxOYW1lc3BhY2VVUkkpLCBk
b2MpOworICAgIHJldHVybiBuZXcgSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKTsKIH0KIAogfQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50RmFjdG9yeS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuaAkocmV2aXNpb24gMzg2NzYpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTEVsZW1lbnRGYWN0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5
LDcgQEAgY2xhc3MgUXVhbGlmaWVkTmFtZTsKIGNsYXNzIEhUTUxFbGVtZW50RmFjdG9yeSB7CiBw
dWJsaWM6CiAgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmLCBEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1ZSk7Ci0gICAg
c3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZUhUTUxFbGVtZW50KGNvbnN0IEF0
b21pY1N0cmluZyYgdGFnTmFtZSwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCwgYm9v
bCBjcmVhdGVkQnlQYXJzZXIgPSB0cnVlKTsKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxl
bWVudD4gY3JlYXRlSFRNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCwgYm9vbCBjcmVhdGVkQnlQYXJzZXIgPSB0cnVl
KTsKIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAJKHJldmlzaW9uIDM4Njc2KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OTYsNyArODk2LDcg
QEAgUGFzc1JlZlB0cjxOb2RlPiBIVE1MUGFyc2VyOjpnZXROb2RlKFRvawogICAgIGlmIChDcmVh
dGVFcnJvckNoZWNrRnVuYyBlcnJvckNoZWNrRnVuYyA9IGdGdW5jdGlvbk1hcC5nZXQodC0+dGFn
TmFtZS5pbXBsKCkpKQogICAgICAgICBwcm9jZWVkID0gKHRoaXMtPiplcnJvckNoZWNrRnVuYyko
dCwgcmVzdWx0KTsKICAgICBpZiAocHJvY2VlZCkKLSAgICAgICAgcmVzdWx0ID0gSFRNTEVsZW1l
bnRGYWN0b3J5OjpjcmVhdGVIVE1MRWxlbWVudCh0LT50YWdOYW1lLCBkb2N1bWVudCwgbV9jdXJy
ZW50Rm9ybUVsZW1lbnQuZ2V0KCkpOworICAgICAgICByZXN1bHQgPSBIVE1MRWxlbWVudEZhY3Rv
cnk6OmNyZWF0ZUhUTUxFbGVtZW50KFF1YWxpZmllZE5hbWUobnVsbEF0b20sIHQtPnRhZ05hbWUs
IHhodG1sTmFtZXNwYWNlVVJJKSwgZG9jdW1lbnQsIG1fY3VycmVudEZvcm1FbGVtZW50LmdldCgp
KTsKICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2UoKTsKIH0KIAo=
</data>
<flag name="review"
          id="11777"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25404</attachid>
            <date>2008-11-23 16:27:02 -0800</date>
            <delta_ts>2008-11-25 14:42:25 -0800</delta_ts>
            <desc>Second part: make the ElementFactory use PassRefPtr</desc>
            <filename>ElementFactoryPassRefPtr.diff</filename>
            <type>text/plain</type>
            <size>3642</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODY5NikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDgtMTEtMjMgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNDQxOiBCcmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnZW5lcmF0ZWQgRWxl
bWVudEZhY3RvcnkgYW5kIEhUTUxFbGVtZW50RmFjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDEKKworICAgICAgICAtIE1ha2UgdGhlIGdl
bmVyYXRlZCBFbGVtZW50RmFjdG9yeSBjb25zdHJ1Y3RvcnMgcmV0dXJuIFBhc3NSZWZQdHIgaW5z
dGVhZCBvZiByYXcgcG9pbnRlcnMuCisKKyAgICAgICAgLSBDaGFuZ2VkIHRoZSBoZWFkZXIgZ3Vh
cmQgdG8gbWF0Y2ggb3VyIGNvZGluZyBzdHlsZS4KKworICAgICAgICAqIGRvbS9tYWtlX25hbWVz
LnBsOgorCiAyMDA4LTExLTIyICBOaWtvbGFzIFppbW1lcm1hbm4gIDxuaWtvbGFzLnppbW1lcm1h
bm5AdG9yY2htb2JpbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEhvbGdlciBGcmV5dGhl
ci4KSW5kZXg6IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9kb20vbWFrZV9uYW1lcy5wbAkocmV2aXNpb24gMzg2OTQpCisrKyBXZWJDb3JlL2RvbS9tYWtl
X25hbWVzLnBsCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgc3ViIHByaW50Q29u
c3RydWN0b3JzCiAgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXRhZ3MpIHsKICAgICAgICAg
bXkgJHVjTmFtZSA9ICR0YWdzeyRuYW1lfXsnaW50ZXJmYWNlTmFtZSd9OwogCi0gICAgICAgIHBy
aW50IEYgInN0YXRpYyAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KiAke25hbWV9Q29u
c3RydWN0b3IoRG9jdW1lbnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpXG4iOworICAgICAg
ICBwcmludCBGICJzdGF0aWMgUGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVt
ZW50PiAke25hbWV9Q29uc3RydWN0b3IoRG9jdW1lbnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJz
ZXIpXG4iOwogICAgICAgICBwcmludCBGICJ7XG4iOwogICAgICAgICBwcmludCBGICIgICAgcmV0
dXJuIG5ldyAke3VjTmFtZX0oJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXM6OiR7bmFtZX1U
YWcsIGRvYyk7XG4iOwogICAgICAgICBwcmludCBGICJ9XG5cbiI7CkBAIC01MjYsNyArNTI2LDcg
QEAgcHJpbnQgRiA8PEVORAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdHlwZWRlZiAk
cGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KiAoKkNvbnN0cnVjdG9yRnVuYykoRG9jdW1l
bnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwordHlwZWRlZiBQYXNzUmVmUHRyPCRwYXJh
bWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQ+ICgqQ29uc3RydWN0b3JGdW5jKShEb2N1bWVudCog
ZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7CiB0eXBlZGVmIFdURjo6SGFzaE1hcDxBdG9taWNT
dHJpbmdJbXBsKiwgQ29uc3RydWN0b3JGdW5jPiBGdW5jdGlvbk1hcDsKIAogc3RhdGljIEZ1bmN0
aW9uTWFwKiBnRnVuY3Rpb25NYXAgPSAwOwpAQCAtNTU4LDcgKzU1OCw3IEBAIHByaW50IEYgIn1c
biI7CiBwcmludCBGICIjZW5kaWZcblxuIiBpZiAkcGFyYW1ldGVyc3snZ3VhcmRGYWN0b3J5V2l0
aCd9OwogCiBwcmludCBGIDw8RU5ECi0kcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KiAk
cGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50RmFjdG9yeTo6Y3JlYXRlJHBhcmFtZXRlcnN7
J25hbWVzcGFjZSd9RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSwgRG9jdW1lbnQq
IGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCitQYXNzUmVmUHRyPCRwYXJhbWV0ZXJzeyduYW1l
c3BhY2UnfUVsZW1lbnQ+ICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRGYWN0b3J5Ojpj
cmVhdGUkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUm
IHFOYW1lLCBEb2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKIEVORAogOwpA
QCAtNjE1LDEwICs2MTUsMTMgQEAgc3ViIHByaW50RmFjdG9yeUhlYWRlckZpbGUKIAogICAgIHBy
aW50TGljZW5zZUhlYWRlcigkRik7CiAKLXByaW50IEYgIiNpZm5kZWYgJHBhcmFtZXRlcnN7J25h
bWVzcGFjZSd9RUxFTUVOVEZBQ1RPUllfSFxuIjsKLXByaW50IEYgIiNkZWZpbmUgJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RUxFTUVOVEZBQ1RPUllfSFxuXG4iOworICAgIHByaW50IEY8PEVORAor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisKKyNpZm5k
ZWYgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudEZhY3RvcnlfaAorI2RlZmluZSAkcGFy
YW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50RmFjdG9yeV9oCiAKLXByaW50IEYgIgogbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CkBA
IC02MzUsMTQgKzYzOCwxNSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgJHBhcmFt
ZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudEZhY3RvcnkKICAgICB7CiAgICAgcHVibGljOgotICAg
ICAgICBXZWJDb3JlOjpFbGVtZW50KiBjcmVhdGVFbGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxp
ZmllZE5hbWUmIHFOYW1lLCBXZWJDb3JlOjpEb2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBh
cnNlciA9IHRydWUpOwotICAgICAgICBzdGF0aWMgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxl
bWVudCogY3JlYXRlJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudChjb25zdCBXZWJDb3Jl
OjpRdWFsaWZpZWROYW1lJiBxTmFtZSwgV2ViQ29yZTo6RG9jdW1lbnQqIGRvYywgYm9vbCBjcmVh
dGVkQnlQYXJzZXIgPSB0cnVlKTsKKyAgICAgICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVF
bGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIHFOYW1lLCBXZWJDb3JlOjpEb2N1
bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUpOworICAgICAgICBzdGF0aWMg
UGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiBjcmVhdGUkcGFyYW1l
dGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIHFO
YW1lLCBXZWJDb3JlOjpEb2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUp
OwogICAgIH07CiB9CiAKLSNlbmRpZgorI2VuZGlmIC8vICRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fUVsZW1lbnRGYWN0b3J5X2gKIAotIjsKK0VORAorOwogCiAgICAgY2xvc2UgRjsKIH0K
</data>
<flag name="review"
          id="11778"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25453</attachid>
            <date>2008-11-24 14:52:22 -0800</date>
            <delta_ts>2008-11-25 11:22:21 -0800</delta_ts>
            <desc>Second Part - V2: Updated with Darin&apos;s comments</desc>
            <filename>ElementFactoryPassRefPtr-updated.diff</filename>
            <type>text/plain</type>
            <size>4450</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODcxNSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTYgQEAKKzIwMDgtMTEtMjMgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNDQxOiBCcmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnZW5lcmF0ZWQgRWxl
bWVudEZhY3RvcnkgYW5kIEhUTUxFbGVtZW50RmFjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDEKKworICAgICAgICAtIE1ha2UgdGhlIGdl
bmVyYXRlZCBFbGVtZW50RmFjdG9yeSBjb25zdHJ1Y3RvcnMgcmV0dXJuIFBhc3NSZWZQdHIgaW5z
dGVhZCBvZiByYXcgcG9pbnRlcnMuCisKKyAgICAgICAgLSBUd2Vha2VkIHRoZSBnZW5lcmF0ZWQg
ZmlsZXMgdG8gYmV0dGVyIG1hdGNoIG91ciBjb2Rpbmcgc3R5bGUuCisKKyAgICAgICAgKiBkb20v
bWFrZV9uYW1lcy5wbDoKKwogMjAwOC0xMS0xOSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJh
aXhAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KSW5kZXg6
IFdlYkNvcmUvZG9tL21ha2VfbmFtZXMucGwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vbWFr
ZV9uYW1lcy5wbAkocmV2aXNpb24gMzg3MTUpCisrKyBXZWJDb3JlL2RvbS9tYWtlX25hbWVzLnBs
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAgc3ViIHByaW50Q29uc3RydWN0b3Jz
CiAgICAgZm9yIG15ICRuYW1lIChzb3J0IGtleXMgJXRhZ3MpIHsKICAgICAgICAgbXkgJHVjTmFt
ZSA9ICR0YWdzeyRuYW1lfXsnaW50ZXJmYWNlTmFtZSd9OwogCi0gICAgICAgIHByaW50IEYgInN0
YXRpYyAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KiAke25hbWV9Q29uc3RydWN0b3Io
RG9jdW1lbnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpXG4iOworICAgICAgICBwcmludCBG
ICJzdGF0aWMgUGFzc1JlZlB0cjwkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50PiAke25h
bWV9Q29uc3RydWN0b3IoRG9jdW1lbnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpXG4iOwog
ICAgICAgICBwcmludCBGICJ7XG4iOwogICAgICAgICBwcmludCBGICIgICAgcmV0dXJuIG5ldyAk
e3VjTmFtZX0oJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9TmFtZXM6OiR7bmFtZX1UYWcsIGRvYyk7
XG4iOwogICAgICAgICBwcmludCBGICJ9XG5cbiI7CkBAIC01MjYsOCArNTI2LDggQEAgcHJpbnQg
RiA8PEVORAogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAotdHlwZWRlZiAkcGFyYW1ldGVy
c3snbmFtZXNwYWNlJ31FbGVtZW50KiAoKkNvbnN0cnVjdG9yRnVuYykoRG9jdW1lbnQqIGRvYywg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIpOwotdHlwZWRlZiBXVEY6Okhhc2hNYXA8QXRvbWljU3RyaW5n
SW1wbCosIENvbnN0cnVjdG9yRnVuYz4gRnVuY3Rpb25NYXA7Cit0eXBlZGVmIFBhc3NSZWZQdHI8
JHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4gKCpDb25zdHJ1Y3RvckZ1bmN0aW9uKShE
b2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKK3R5cGVkZWYgV1RGOjpIYXNoTWFwPEF0
b21pY1N0cmluZ0ltcGwqLCBDb25zdHJ1Y3RvckZ1bmN0aW9uPiBGdW5jdGlvbk1hcDsKIAogc3Rh
dGljIEZ1bmN0aW9uTWFwKiBnRnVuY3Rpb25NYXAgPSAwOwogCkBAIC01NTgsNyArNTU4LDcgQEAg
cHJpbnQgRiAifVxuIjsKIHByaW50IEYgIiNlbmRpZlxuXG4iIGlmICRwYXJhbWV0ZXJzeydndWFy
ZEZhY3RvcnlXaXRoJ307CiAKIHByaW50IEYgPDxFTkQKLSRwYXJhbWV0ZXJzeyduYW1lc3BhY2Un
fUVsZW1lbnQqICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRGYWN0b3J5OjpjcmVhdGUk
cGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1l
LCBEb2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK1Bhc3NSZWZQdHI8JHBhcmFt
ZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudD4gJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVu
dEZhY3Rvcnk6OmNyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQog
ewogRU5ECiA7CkBAIC01NzcsNyArNTc3LDcgQEAgcHJpbnQgRiA8PEVORAogI2VuZGlmCiAKICAg
ICBjcmVhdGVGdW5jdGlvbk1hcElmTmVjZXNzYXJ5KCk7Ci0gICAgQ29uc3RydWN0b3JGdW5jIGZ1
bmMgPSBnRnVuY3Rpb25NYXAtPmdldChxTmFtZS5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgIENv
bnN0cnVjdG9yRnVuY3Rpb24gZnVuYyA9IGdGdW5jdGlvbk1hcC0+Z2V0KHFOYW1lLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CiAgICAgaWYgKGZ1bmMpCiAgICAgICAgIHJldHVybiBmdW5jKGRvYywgY3Jl
YXRlZEJ5UGFyc2VyKTsKIApAQCAtNjE1LDEwICs2MTUsMTIgQEAgc3ViIHByaW50RmFjdG9yeUhl
YWRlckZpbGUKIAogICAgIHByaW50TGljZW5zZUhlYWRlcigkRik7CiAKLXByaW50IEYgIiNpZm5k
ZWYgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RUxFTUVOVEZBQ1RPUllfSFxuIjsKLXByaW50IEYg
IiNkZWZpbmUgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RUxFTUVOVEZBQ1RPUllfSFxuXG4iOwor
ICAgIHByaW50IEY8PEVORAorI2lmbmRlZiAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVtZW50
RmFjdG9yeV9oCisjZGVmaW5lICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRGYWN0b3J5
X2gKKworI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAKLXByaW50IEYgIgogbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIGNsYXNzIEVsZW1lbnQ7CiAgICAgY2xhc3MgRG9jdW1lbnQ7CkBAIC02
MzEsMTggKzYzMywxOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgJHBhcmFtZXRl
cnN7J25hbWVzcGFjZSd9RWxlbWVudDsKIAogICAgIC8vIFRoZSBpZGVhIGJlaGluZCB0aGlzIGNs
YXNzIGlzIHRoYXQgdGhlcmUgd2lsbCBldmVudHVhbGx5IGJlIGEgbWFwcGluZyBmcm9tIG5hbWVz
cGFjZSBVUklzIHRvIEVsZW1lbnRGYWN0b3JpZXMgdGhhdCBjYW4gZGlzcGVuc2UKLSAgICAvLyBl
bGVtZW50cy4gIEluIGEgY29tcG91bmQgZG9jdW1lbnQgd29ybGQsIHRoZSBnZW5lcmljIGNyZWF0
ZUVsZW1lbnQgZnVuY3Rpb24gKHdpbGwgZW5kIHVwIGJlaW5nIHZpcnR1YWwpIHdpbGwgYmUgY2Fs
bGVkLgotICAgIGNsYXNzICRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnRGYWN0b3J5Ci0g
ICAgeworICAgIC8vIGVsZW1lbnRzLiBJbiBhIGNvbXBvdW5kIGRvY3VtZW50IHdvcmxkLCB0aGUg
Z2VuZXJpYyBjcmVhdGVFbGVtZW50IGZ1bmN0aW9uICh3aWxsIGVuZCB1cCBiZWluZyB2aXJ0dWFs
KSB3aWxsIGJlIGNhbGxlZC4KKyAgICBjbGFzcyAkcGFyYW1ldGVyc3snbmFtZXNwYWNlJ31FbGVt
ZW50RmFjdG9yeSB7CiAgICAgcHVibGljOgotICAgICAgICBXZWJDb3JlOjpFbGVtZW50KiBjcmVh
dGVFbGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIHFOYW1lLCBXZWJDb3JlOjpE
b2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUpOwotICAgICAgICBzdGF0
aWMgJHBhcmFtZXRlcnN7J25hbWVzcGFjZSd9RWxlbWVudCogY3JlYXRlJHBhcmFtZXRlcnN7J25h
bWVzcGFjZSd9RWxlbWVudChjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBxTmFtZSwgV2Vi
Q29yZTo6RG9jdW1lbnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIgPSB0cnVlKTsKKyAgICAg
ICAgUGFzc1JlZlB0cjxFbGVtZW50PiBjcmVhdGVFbGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxp
ZmllZE5hbWUmLCBXZWJDb3JlOjpEb2N1bWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1
ZSk7CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPCRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVs
ZW1lbnQ+IGNyZWF0ZSRwYXJhbWV0ZXJzeyduYW1lc3BhY2UnfUVsZW1lbnQoY29uc3QgV2ViQ29y
ZTo6UXVhbGlmaWVkTmFtZSYsIFdlYkNvcmU6OkRvY3VtZW50KiwgYm9vbCBjcmVhdGVkQnlQYXJz
ZXIgPSB0cnVlKTsKICAgICB9OwogfQogCi0jZW5kaWYKKyNlbmRpZiAvLyAkcGFyYW1ldGVyc3sn
bmFtZXNwYWNlJ31FbGVtZW50RmFjdG9yeV9oCiAKLSI7CitFTkQKKzsKIAogICAgIGNsb3NlIEY7
CiB9Cg==
</data>
<flag name="review"
          id="11812"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25506</attachid>
            <date>2008-11-25 14:42:25 -0800</date>
            <delta_ts>2008-11-25 16:34:53 -0800</delta_ts>
            <desc>Third part: make some HTML elements take a QualifiedName</desc>
            <filename>QualifiedNameElementFactory5First.diff</filename>
            <type>text/plain</type>
            <size>14725</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODc1OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTEgQEAKKzIwMDgtMTEtMjUgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNDQxOiBCcmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnZW5lcmF0ZWQgRWxl
bWVudEZhY3RvcnkgYW5kIEhUTUxFbGVtZW50RmFjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDEKKworICAgICAgICBFbGVtZW50J3Mgb3Ro
ZXIgdGhhbiBIVE1MIG9uZXMgdGFrZSBhIFF1YWxpZmllZE5hbWUgaW4gdGhlaXIgY29uc3RydWN0
b3JzLgorICAgICAgICBUbyBtYWtlIEhUTUxFbGVtZW50RmFjdG9yeSBjbG9zZXIgdG8gdGhlIG90
aGVyIEVsZW1lbnRGYWN0b3J5LCB3ZSBuZWVkCisgICAgICAgIHRvIGRvIG1ha2UgdGhlbSB0YWtl
IHRoZSBzYW1lIGFyZ3VtZW50cy4KKyAgICAgICAgVGhpcyBwYXRjaCBvbmx5IG1ha2VzIHRoZSA1
IGZpcnN0IG9uZSBpbiBIVE1MRWxlbWVudEZhY3RvcnkgYWJpZGUgYnkgdGhhdC4gVGhlIG90aGVy
cworICAgICAgICB3aWxsIGdvIGludG8gdGhlIG5leHQgcGF0Y2guCisKKyAgICAgICAgKiBkb20v
RG9jdW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2Up
OgorICAgICAgICAqIGh0bWwvSFRNTEJhc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxCYXNlRWxlbWVudDo6SFRNTEJhc2VFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxC
YXNlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEJvZHlFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxCb2R5RWxlbWVudDo6SFRNTEJvZHlFbGVtZW50KToKKyAgICAgICAg
KiBodG1sL0hUTUxCb2R5RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEVsZW1lbnRGYWN0
b3J5LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omh0bWxDb25zdHJ1Y3Rvcik6CisgICAgICAgIChX
ZWJDb3JlOjpoZWFkQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6Ym9keUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmJhc2VDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJD
b3JlOjpsaW5rQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bWV0YUNvbnN0cnVjdG9y
KToKKyAgICAgICAgKiBodG1sL0hUTUxIZWFkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpIVE1MSGVhZEVsZW1lbnQ6OkhUTUxIZWFkRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1M
SGVhZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxIdG1sRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MSHRtbEVsZW1lbnQ6OkhUTUxIdG1sRWxlbWVudCk6CisgICAgICAg
ICogaHRtbC9IVE1MSHRtbEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVu
dCk6CisgICAgICAgICogaHRtbC9IVE1MTGlua0VsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hU
TUxNZXRhRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWV0YUVsZW1lbnQ6OkhU
TUxNZXRhRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MTWV0YUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6
aGFuZGxlRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6aGVhZENyZWF0ZUVy
cm9yQ2hlY2spOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFBhcnNlcjo6Y3JlYXRlSGVhZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MUGFyc2VyOjpmaW5pc2hlZCk6CisgICAgICAgICogaHRtbC9I
VE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxWaWV3U291
cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhaW5pbmdUYWJsZSk6CisKIDIwMDgtMTEtMjUgIERhdmlk
IExldmluICA8bGV2aW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhl
eSBQcm9za3VyeWFrb3YuCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAzODc1MykKKysrIFdlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUzOCw3ICsxNTM4LDcgQEAg
dm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAgaWYgKCF0aGlzLT5ib2R5KCkgJiYg
aXNIVE1MRG9jdW1lbnQoKSkgewogICAgICAgICBpZiAoTm9kZSogZG9jdW1lbnRFbGVtZW50ID0g
dGhpcy0+ZG9jdW1lbnRFbGVtZW50KCkpIHsKICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOwotICAgICAgICAgICAgZG9jdW1lbnRFbGVtZW50LT5hcHBlbmRDaGlsZChuZXcgSFRNTEJv
ZHlFbGVtZW50KHRoaXMpLCBlYyk7CisgICAgICAgICAgICBkb2N1bWVudEVsZW1lbnQtPmFwcGVu
ZENoaWxkKG5ldyBIVE1MQm9keUVsZW1lbnQoYm9keVRhZywgdGhpcyksIGVjKTsKICAgICAgICAg
ICAgIEFTU0VSVCghZWMpOwogICAgICAgICB9CiAgICAgfQpJbmRleDogV2ViQ29yZS9odG1sL0hU
TUxCYXNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCYXNlRWxl
bWVudC5jcHAJKHJldmlzaW9uIDM4NzUzKQorKysgV2ViQ29yZS9odG1sL0hUTUxCYXNlRWxlbWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDggKzM0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MQmFzZUVsZW1lbnQ6OkhUTUxC
YXNlRWxlbWVudChEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQoYmFzZVRhZywgZG9j
KQorSFRNTEJhc2VFbGVtZW50OjpIVE1MQmFzZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
cU5hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudChxTmFtZSwgZG9jKQogewog
fQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJhc2VFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxCYXNlRWxlbWVudC5oCShyZXZpc2lvbiAzODc1MykKKysrIFdlYkNv
cmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAK
IC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBL
REUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcp
CiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4KQEAgLTMxLDcgKzI5
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEJhc2VFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZW50CiB7CiBwdWJsaWM6Ci0gICAgSFRNTEJhc2VFbGVtZW50KERvY3VtZW50Kik7
CisgICAgSFRNTEJhc2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwog
ICAgIH5IVE1MQmFzZUVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4NzUzKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxCb2R5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDggKzQwLDggQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1M
Qm9keUVsZW1lbnQ6OkhUTUxCb2R5RWxlbWVudChEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVs
ZW1lbnQoYm9keVRhZywgZG9jKQorSFRNTEJvZHlFbGVtZW50OjpIVE1MQm9keUVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVu
dChxTmFtZSwgZG9jKQogewogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEJvZHlFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxlbWVudC5oCShyZXZpc2lv
biAzODc1MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MQm9keUVsZW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MQm9keUVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MQm9keUVsZW1l
bnQoRG9jdW1lbnQqKTsKKyAgICBIVE1MQm9keUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CiAgICAgfkhUTUxCb2R5RWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBIVE1M
VGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVx
dWlyZWQ7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiAz
ODc1MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NSwzNCArOTUsMzQgQEAgc3RhdGljIEZ1bmN0aW9uTWFwKiBnRnVuY3Rpb25NYXA7
CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBodG1sQ29uc3RydWN0b3IoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7
Ci0gICAgcmV0dXJuIG5ldyBIVE1MSHRtbEVsZW1lbnQoZG9jKTsKKyAgICByZXR1cm4gbmV3IEhU
TUxIdG1sRWxlbWVudChodG1sVGFnLCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1M
RWxlbWVudD4gaGVhZENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCog
ZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRNTEhlYWRF
bGVtZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBIVE1MSGVhZEVsZW1lbnQoaGVhZFRhZywgZG9j
KTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGJvZHlDb25zdHJ1Y3Rvcihj
b25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9v
bCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxCb2R5RWxlbWVudChkb2MpOworICAgIHJldHVybiBu
ZXcgSFRNTEJvZHlFbGVtZW50KGJvZHlUYWcsIGRvYyk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBiYXNlQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1M
QmFzZUVsZW1lbnQoZG9jKTsKKyAgICByZXR1cm4gbmV3IEhUTUxCYXNlRWxlbWVudChiYXNlVGFn
LCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbGlua0NvbnN0cnVj
dG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQq
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKIHsKLSAgICBSZWZQdHI8SFRNTExpbmtFbGVtZW50PiBs
aW5rID0gbmV3IEhUTUxMaW5rRWxlbWVudChkb2MpOworICAgIFJlZlB0cjxIVE1MTGlua0VsZW1l
bnQ+IGxpbmsgPSBuZXcgSFRNTExpbmtFbGVtZW50KGxpbmtUYWcsIGRvYyk7CiAgICAgbGluay0+
c2V0Q3JlYXRlZEJ5UGFyc2VyKGNyZWF0ZWRCeVBhcnNlcik7CiAgICAgcmV0dXJuIGxpbmsucmVs
ZWFzZSgpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbWV0YUNvbnN0cnVj
dG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQq
LCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRNTE1ldGFFbGVtZW50KGRvYyk7CisgICAgcmV0
dXJuIG5ldyBIVE1MTWV0YUVsZW1lbnQobWV0YVRhZywgZG9jKTsKIH0KIAogc3RhdGljIFBhc3NS
ZWZQdHI8SFRNTEVsZW1lbnQ+IHN0eWxlQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxIZWFkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL0hUTUxIZWFkRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4NzUzKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxIZWFkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDggKzMyLDgg
QEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1I
VE1MSGVhZEVsZW1lbnQ6OkhUTUxIZWFkRWxlbWVudChEb2N1bWVudCogZG9jKQotICAgIDogSFRN
TEVsZW1lbnQoaGVhZFRhZywgZG9jKQorSFRNTEhlYWRFbGVtZW50OjpIVE1MSGVhZEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxl
bWVudChxTmFtZSwgZG9jKQogewogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhlYWRFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxIZWFkRWxlbWVudC5oCShyZXZp
c2lvbiAzODc1MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSGVhZEVsZW1lbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMzMsNyArMzMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MSGVh
ZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MSGVhZEVs
ZW1lbnQoRG9jdW1lbnQqKTsKKyAgICBIVE1MSGVhZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAgICAgfkhUTUxIZWFkRWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBI
VE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVz
T3B0aW9uYWw7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc1
MykKKysrIFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgU2ltb24gSGF1c21hbm4gKGhh
dXNtYW5uQGtkZS5vcmcpCkBAIC0zMyw4ICszMSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEh0bWxFbGVtZW50OjpIVE1MSHRtbEVs
ZW1lbnQoRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KGh0bWxUYWcsIGRvYykKK0hU
TUxIdG1sRWxlbWVudDo6SFRNTEh0bWxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1l
LCBEb2N1bWVudCogZG9jKQorICAgIDogSFRNTEVsZW1lbnQocU5hbWUsIGRvYykKIHsKIH0KIApJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxIdG1sRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MSHRtbEVsZW1lbnQuaAkocmV2aXNpb24gMzg3NTMpCisrKyBXZWJDb3JlL2h0
bWwvSFRNTEh0bWxFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTEh0bWxFbGVtZW50IDogcHVibGljIEhUTUxFbGVt
ZW50CiB7CiBwdWJsaWM6Ci0gICAgSFRNTEh0bWxFbGVtZW50KERvY3VtZW50Kik7CisgICAgSFRN
TEh0bWxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgIH5IVE1M
SHRtbEVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJl
bWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CkluZGV4OiBXZWJDb3Jl
L2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMzg3NTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExp
bmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxMaW5rRWxlbWVu
dDo6SFRNTExpbmtFbGVtZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChsaW5r
VGFnLCBkb2MpCitIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiBxTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50KHFOYW1lLCBk
b2MpCiAgICAgLCBtX2NhY2hlZFNoZWV0KDApCiAgICAgLCBtX2Rpc2FibGVkU3RhdGUoMCkKICAg
ICAsIG1fbG9hZGluZyhmYWxzZSkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGlua0VsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmgJKHJldmlzaW9u
IDM4NzUzKQorKysgV2ViQ29yZS9odG1sL0hUTUxMaW5rRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNSw3ICszNSw3IEBAIGNsYXNzIEtVUkw7CiAKIGNsYXNzIEhUTUxMaW5rRWxlbWVudCA6
IHB1YmxpYyBIVE1MRWxlbWVudCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKIHB1Ymxp
YzoKLSAgICBIVE1MTGlua0VsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICBIVE1MTGlua0VsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAgICAgfkhUTUxMaW5rRWxlbWVudCgp
OwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3Qg
eyByZXR1cm4gVGFnU3RhdHVzRm9yYmlkZGVuOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1l
dGFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50
LmNwcAkocmV2aXNpb24gMzg3NTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxNZXRhRWxlbWVudDo6SFRNTE1ldGFF
bGVtZW50KERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudChtZXRhVGFnLCBkb2MpCitI
VE1MTWV0YUVsZW1lbnQ6OkhUTUxNZXRhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFt
ZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50KHFOYW1lLCBkb2MpCiB7CiB9CiAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTE1ldGFFbGVtZW50LmgJKHJldmlzaW9uIDM4NzUzKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxNZXRhRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxNZXRhRWxlbWVudCA6IHB1YmxpYyBIVE1MRWxl
bWVudAogewogcHVibGljOgotICAgIEhUTUxNZXRhRWxlbWVudChEb2N1bWVudCopOworICAgIEhU
TUxNZXRhRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB+SFRN
TE1ldGFFbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0KSW5kZXg6IFdlYkNv
cmUvaHRtbC9IVE1MUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFBh
cnNlci5jcHAJKHJldmlzaW9uIDM4NzUzKQorKysgV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC00ODgsNyArNDg4LDcgQEAgYm9vbCBIVE1MUGFyc2VyOjpoYW5k
bGVFcnJvcihOb2RlKiBuLCBibwogICAgICAgICAgICAgICAgIGVsdC0+aGFzTG9jYWxOYW1lKHRp
dGxlVGFnKSB8fCBlbHQtPmhhc0xvY2FsTmFtZShpc2luZGV4VGFnKSB8fAogICAgICAgICAgICAg
ICAgIGVsdC0+aGFzTG9jYWxOYW1lKGJhc2VUYWcpKSkgewogICAgICAgICAgICAgICAgIGlmICgh
aGVhZCkgewotICAgICAgICAgICAgICAgICAgICBoZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVudChk
b2N1bWVudCk7CisgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50
KGhlYWRUYWcsIGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICAgICAgZSA9IGhlYWQ7CiAgICAg
ICAgICAgICAgICAgICAgIGluc2VydE5vZGUoZSk7CiAgICAgICAgICAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOwpAQCAtNTAwLDcgKzUwMCw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6aGFuZGxlRXJy
b3IoTm9kZSogbiwgYm8KICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFoYXZlRnJhbWVTZXQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgZSA9IG5ldyBIVE1MQm9keUVsZW1lbnQoZG9jdW1lbnQpOworICAg
ICAgICAgICAgICAgICAgICBlID0gbmV3IEhUTUxCb2R5RWxlbWVudChib2R5VGFnLCBkb2N1bWVu
dCk7CiAgICAgICAgICAgICAgICAgICAgIHN0YXJ0Qm9keSgpOwogICAgICAgICAgICAgICAgICAg
ICBpbnNlcnROb2RlKGUpOwogICAgICAgICAgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKQEAg
LTUxNCw3ICs1MTQsNyBAQCBib29sIEhUTUxQYXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJv
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBtZWFucyB0aGUgYm9keSBzdGFydHMgaGVyZS4uLgog
ICAgICAgICAgICAgICAgIGlmICghaGF2ZUZyYW1lU2V0KSB7CiAgICAgICAgICAgICAgICAgICAg
IHBvcEJsb2NrKGN1cnJlbnRUYWdOYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgZSA9IG5ldyBI
VE1MQm9keUVsZW1lbnQoZG9jdW1lbnQpOworICAgICAgICAgICAgICAgICAgICBlID0gbmV3IEhU
TUxCb2R5RWxlbWVudChib2R5VGFnLCBkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgIHN0
YXJ0Qm9keSgpOwogICAgICAgICAgICAgICAgICAgICBpbnNlcnROb2RlKGUpOwogICAgICAgICAg
ICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKQEAgLTYzOCw3ICs2MzgsNyBAQCBib29sIEhUTUxQ
YXJzZXI6OmhhbmRsZUVycm9yKE5vZGUqIG4sIGJvCiAgICAgICAgIH0KIAogICAgICAgICBpZiAo
IWRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKSkgewotICAgICAgICAgICAgZSA9IG5ldyBIVE1M
SHRtbEVsZW1lbnQoZG9jdW1lbnQpOworICAgICAgICAgICAgZSA9IG5ldyBIVE1MSHRtbEVsZW1l
bnQoaHRtbFRhZywgZG9jdW1lbnQpOwogICAgICAgICAgICAgaW5zZXJ0Tm9kZShlKTsKICAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOwogICAgICAgICB9CkBAIC02NzAsNyArNjcwLDcgQEAgYm9v
bCBIVE1MUGFyc2VyOjpjb21tZW50Q3JlYXRlRXJyb3JDaGVjawogYm9vbCBIVE1MUGFyc2VyOjpo
ZWFkQ3JlYXRlRXJyb3JDaGVjayhUb2tlbiogdCwgUmVmUHRyPE5vZGU+JiByZXN1bHQpCiB7CiAg
ICAgaWYgKCFoZWFkIHx8IGN1cnJlbnQtPmxvY2FsTmFtZSgpID09IGh0bWxUYWcpIHsKLSAgICAg
ICAgaGVhZCA9IG5ldyBIVE1MSGVhZEVsZW1lbnQoZG9jdW1lbnQpOworICAgICAgICBoZWFkID0g
bmV3IEhUTUxIZWFkRWxlbWVudChoZWFkVGFnLCBkb2N1bWVudCk7CiAgICAgICAgIHJlc3VsdCA9
IGhlYWQ7CiAgICAgfSBlbHNlCiAgICAgICAgIHJlcG9ydEVycm9yKE1pc3BsYWNlZEhlYWRFcnJv
cik7CkBAIC0xNDg5LDcgKzE0ODksNyBAQCB2b2lkIEhUTUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQog
ICAgIGlmIChoZWFkIHx8ICFkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCkpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGhlYWQgPSBuZXcgSFRNTEhlYWRFbGVtZW50KGRvY3VtZW50KTsKKyAgICBo
ZWFkID0gbmV3IEhUTUxIZWFkRWxlbWVudChoZWFkVGFnLCBkb2N1bWVudCk7CiAgICAgSFRNTEVs
ZW1lbnQqIGJvZHkgPSBkb2N1bWVudC0+Ym9keSgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OwogICAgIGRvY3VtZW50LT5kb2N1bWVudEVsZW1lbnQoKS0+aW5zZXJ0QmVmb3JlKGhlYWQsIGJv
ZHksIGVjKTsKQEAgLTE1NDUsNyArMTU0NSw3IEBAIHZvaWQgSFRNTFBhcnNlcjo6ZmluaXNoZWQo
KQogewogICAgIC8vIEluIHRoZSBjYXNlIG9mIGEgY29tcGxldGVseSBlbXB0eSBkb2N1bWVudCwg
aGVyZSdzIHRoZSBwbGFjZSB0byBjcmVhdGUgdGhlIEhUTUwgZWxlbWVudC4KICAgICBpZiAoY3Vy
cmVudCAmJiBjdXJyZW50LT5pc0RvY3VtZW50Tm9kZSgpICYmICFkb2N1bWVudC0+ZG9jdW1lbnRF
bGVtZW50KCkpCi0gICAgICAgIGluc2VydE5vZGUobmV3IEhUTUxIdG1sRWxlbWVudChkb2N1bWVu
dCkpOworICAgICAgICBpbnNlcnROb2RlKG5ldyBIVE1MSHRtbEVsZW1lbnQoaHRtbFRhZywgZG9j
dW1lbnQpKTsKIAogICAgIC8vIFRoaXMgZW5zdXJlcyB0aGF0ICJjdXJyZW50IiBpcyBub3QgbGVm
dCBwb2ludGluZyB0byBhIG5vZGUgd2hlbiB0aGUgZG9jdW1lbnQgaXMgZGVzdHJveWVkLgogICAg
IGZyZWVCbG9jaygpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNw
cAkocmV2aXNpb24gMzg3NTMpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDEwICs2MSwxMCBAQCBUb2tlbml6ZXIqIEhUTUxW
aWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0CiAKIHZvaWQgSFRNTFZpZXdTb3VyY2VEb2N1bWVudDo6
Y3JlYXRlQ29udGFpbmluZ1RhYmxlKCkKIHsKLSAgICBSZWZQdHI8RWxlbWVudD4gaHRtbCA9IG5l
dyBIVE1MSHRtbEVsZW1lbnQodGhpcyk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGh0bWwgPSBuZXcg
SFRNTEh0bWxFbGVtZW50KGh0bWxUYWcsIHRoaXMpOwogICAgIGFkZENoaWxkKGh0bWwpOwogICAg
IGh0bWwtPmF0dGFjaCgpOwotICAgIFJlZlB0cjxFbGVtZW50PiBib2R5ID0gbmV3IEhUTUxCb2R5
RWxlbWVudCh0aGlzKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gYm9keSA9IG5ldyBIVE1MQm9keUVs
ZW1lbnQoYm9keVRhZywgdGhpcyk7CiAgICAgaHRtbC0+YWRkQ2hpbGQoYm9keSk7CiAgICAgYm9k
eS0+YXR0YWNoKCk7CiAgICAgCg==
</data>
<flag name="review"
          id="11851"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25539</attachid>
            <date>2008-11-26 14:40:25 -0800</date>
            <delta_ts>2008-11-26 15:08:27 -0800</delta_ts>
            <desc>Fourth part: move more html elements&apos; constructors to use a QualifiedName</desc>
            <filename>QualifiedNameElementFactorySecond.diff</filename>
            <type>text/plain</type>
            <size>52668</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODc4OSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMyIEBACisyMDA4LTExLTI2ICBKdWxpZW4gQ2hhZmZyYWl4ICA8amNoYWZmcmFp
eEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEJ1ZyAyMjQ0MTogQnJpZGdlIHRoZSBnYXAgYmV0d2VlbiB0aGUgZ2VuZXJhdGVkIEVs
ZW1lbnRGYWN0b3J5IGFuZCBIVE1MRWxlbWVudEZhY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDQxCisKKyAgICAgICAgTWFrZSBtb3JlIEhU
TUwgZWxlbWVudHMnIGNvbnN0cnVjdG9yIHRha2UgYSBRdWFsaWZpZWROYW1lLgorCisgICAgICAg
ICogZWRpdGluZy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXI6OmNyZWF0ZURlbGV0aW9uVUkpOgorICAgICAgICAqIGh0
bWwvSFRNTEJsb2NrcXVvdGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxCbG9j
a3F1b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hU
TUxCbG9ja3F1b3RlRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJ1dHRvbkVsZW1lbnQ6OkhUTUxCdXR0b25FbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxCdXR0b25FbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MRExpc3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxETGlzdEVsZW1l
bnQ6OkhUTUxETGlzdEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTERMaXN0RWxlbWVudC5o
OgorICAgICAgICAqIGh0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVtZW50KToKKyAgICAg
ICAgKiBodG1sL0hUTUxEaXJlY3RvcnlFbGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MRGl2
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGl2RWxlbWVudDo6SFRNTERpdkVs
ZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTERpdkVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxFbGVtZW50RmFjdG9yeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRpdGxlQ29uc3RydWN0b3IpOgorICAgICAgICAoV2Vi
Q29yZTo6ZnJhbWVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpmcmFtZXNldENvbnN0
cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmlmcmFtZUNvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmZvcm1Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpidXR0b25Db25z
dHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjppbnB1dENvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmlzaW5kZXhDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpmaWVsZHNl
dENvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmtleWdlbkNvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmxhYmVsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6bGVn
ZW5kQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29yZTo6b3B0Z3JvdXBDb25zdHJ1Y3Rvcik6
CisgICAgICAgIChXZWJDb3JlOjpvcHRpb25Db25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3Jl
OjpzZWxlY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp0ZXh0YXJlYUNvbnN0cnVj
dG9yKToKKyAgICAgICAgKFdlYkNvcmU6OmRsQ29uc3RydWN0b3IpOgorICAgICAgICAoV2ViQ29y
ZTo6dWxDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpvbENvbnN0cnVjdG9yKToKKyAg
ICAgICAgKFdlYkNvcmU6OmRpckNvbnN0cnVjdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Om1lbnVD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpsaUNvbnN0cnVjdG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OmJsb2NrcXVvdGVDb25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpkaXZD
b25zdHJ1Y3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpoZWFkaW5nQ29uc3RydWN0b3IpOgorICAg
ICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MRmllbGRTZXRFbGVtZW50OjpIVE1MRmllbGRTZXRFbGVtZW50KToKKyAgICAgICAgKiBodG1s
L0hUTUxGaWVsZFNldEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudCk6
CisgICAgICAgICogaHRtbC9IVE1MRm9ybUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxG
cmFtZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEZyYW1lRWxlbWVudDo6SFRN
TEZyYW1lRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MRnJhbWVFbGVtZW50Lmg6CisgICAg
ICAgICogaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxGcmFtZVNldEVsZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTElGcmFtZUVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQ6OkhUTUxJRnJhbWVFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxJRnJhbWVFbGVtZW50Lmg6CisgICAgICAgICogaHRt
bC9IVE1MSW5wdXRFbGVtZW50LmNwcDoKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQu
aDoKKyAgICAgICAgKiBodG1sL0hUTUxJc0luZGV4RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MSXNJbmRleEVsZW1lbnQ6OkhUTUxJc0luZGV4RWxlbWVudCk6CisgICAgICAgICog
aHRtbC9IVE1MSXNJbmRleEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxLZXlnZW5FbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxLZXlnZW5FbGVtZW50OjpIVE1MS2V5Z2Vu
RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5oOgorICAgICAgICAq
IGh0bWwvSFRNTExJRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTElFbGVtZW50
OjpIVE1MTElFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxMSUVsZW1lbnQuaDoKKyAgICAg
ICAgKiBodG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExh
YmVsRWxlbWVudDo6SFRNTExhYmVsRWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MTGFiZWxF
bGVtZW50Lmg6CisgICAgICAgICogaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpIVE1MTGVnZW5kRWxlbWVudDo6SFRNTExlZ2VuZEVsZW1lbnQpOgorICAgICAg
ICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxNZW51RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVudUVsZW1lbnQ6OkhUTUxNZW51RWxl
bWVudCk6CisgICAgICAgICogaHRtbC9IVE1MTWVudUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1s
L0hUTUxPTGlzdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9MaXN0RWxlbWVu
dDo6SFRNTE9MaXN0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MT0xpc3RFbGVtZW50Lmg6
CisgICAgICAgICogaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQpOgorICAgICAgICAq
IGh0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRp
b25FbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxPcHRpb25FbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmZv
cm1DcmVhdGVFcnJvckNoZWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxQYXJzZXI6OmhhbmRs
ZUlzaW5kZXgpOgorICAgICAgICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwOgorICAgICAg
ICAqIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxTdHlsZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFN0eWxlRWxlbWVudDo6SFRNTFN0eWxl
RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MU3R5bGVFbGVtZW50Lmg6CisgICAgICAgICog
aHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUZXh0
QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFRl
eHRBcmVhRWxlbWVudC5oOgorICAgICAgICAqIGh0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50KToKKyAg
ICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuaDoKKyAgICAgICAgKiBodG1sL0hUTUxVTGlz
dEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTFVMaXN0RWxlbWVudDo6SFRNTFVM
aXN0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MVUxpc3RFbGVtZW50Lmg6CisgICAgICAg
ICogaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhU
TUxWaWV3U291cmNlRG9jdW1lbnQ6OmNyZWF0ZUNvbnRhaW5pbmdUYWJsZSk6CisgICAgICAgICog
cmVuZGVyaW5nL01lZGlhQ29udHJvbEVsZW1lbnRzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50OjpNZWRpYUNvbnRyb2xTaGFkb3dSb290RWxlbWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbElucHV0RWxlbWVudCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRD
b250cm9sLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGaWxlVXBsb2FkSW5uZXJCdXR0b25F
bGVtZW50OjpIVE1MRmlsZVVwbG9hZElubmVyQnV0dG9uRWxlbWVudCk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlck1lZGlhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck1lZGlhOjpj
cmVhdGVQYW5lbCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZURp
c3BsYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTFNsaWRlclRodW1iRWxlbWVudDo6SFRNTFNsaWRlclRodW1iRWxlbWVudCk6
CisgICAgICAgICogcmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0Q29udHJvbElubmVyRWxlbWVudDo6VGV4dENvbnRyb2xJbm5lckVs
ZW1lbnQpOgorCiAyMDA4LTExLTI2ICBNYXR0IFBlcnJ5ICA8bXBjb21wbGV0ZUBnbWFpbC5jb20+
CiAKICAgICAgICAgRml4IFF0IGJ1c3RhZ2UuCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRGVsZXRl
QnV0dG9uQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0RlbGV0
ZUJ1dHRvbkNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvZWRpdGlu
Zy9EZWxldGVCdXR0b25Db250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQyLDcgKzE0
Miw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6cmVzcG9uZFRvQ2gKIAogdm9pZCBE
ZWxldGVCdXR0b25Db250cm9sbGVyOjpjcmVhdGVEZWxldGlvblVJKCkKIHsKLSAgICBSZWZQdHI8
SFRNTERpdkVsZW1lbnQ+IGNvbnRhaW5lciA9IG5ldyBIVE1MRGl2RWxlbWVudChtX3RhcmdldC0+
ZG9jdW1lbnQoKSk7CisgICAgUmVmUHRyPEhUTUxEaXZFbGVtZW50PiBjb250YWluZXIgPSBuZXcg
SFRNTERpdkVsZW1lbnQoZGl2VGFnLCBtX3RhcmdldC0+ZG9jdW1lbnQoKSk7CiAgICAgY29udGFp
bmVyLT5zZXRJZChjb250YWluZXJFbGVtZW50SWRlbnRpZmllcik7CiAKICAgICBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjb250YWluZXItPmdldElubGluZVN0eWxlRGVjbCgp
OwpAQCAtMTUwLDcgKzE1MCw3IEBAIHZvaWQgRGVsZXRlQnV0dG9uQ29udHJvbGxlcjo6Y3JlYXRl
RGVsZXQKICAgICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRVc2VyU2VsZWN0
LCBDU1NWYWx1ZU5vbmUpOwogICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtp
dFVzZXJNb2RpZnksIENTU1ZhbHVlTm9uZSk7CiAKLSAgICBSZWZQdHI8SFRNTERpdkVsZW1lbnQ+
IG91dGxpbmUgPSBuZXcgSFRNTERpdkVsZW1lbnQobV90YXJnZXQtPmRvY3VtZW50KCkpOworICAg
IFJlZlB0cjxIVE1MRGl2RWxlbWVudD4gb3V0bGluZSA9IG5ldyBIVE1MRGl2RWxlbWVudChkaXZU
YWcsIG1fdGFyZ2V0LT5kb2N1bWVudCgpKTsKICAgICBvdXRsaW5lLT5zZXRJZChvdXRsaW5lRWxl
bWVudElkZW50aWZpZXIpOwogCiAgICAgY29uc3QgaW50IGJvcmRlcldpZHRoID0gNDsKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc4NikKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDMgQXBwbGUgQ29tcHV0ZXIsIElu
Yy4KQEAgLTMwLDggKzI4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1IVE1MQmxvY2txdW90ZUVsZW1lbnQ6OkhUTUxCbG9ja3F1b3RlRWxl
bWVudChEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQoYmxvY2txdW90ZVRhZywgZG9j
KQorSFRNTEJsb2NrcXVvdGVFbGVtZW50OjpIVE1MQmxvY2txdW90ZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxFbGVtZW50KHRh
Z05hbWUsIGRvYykKIHsKIH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCbG9ja3F1b3RlRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQmxvY2txdW90ZUVsZW1lbnQu
aAkocmV2aXNpb24gMzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEJsb2NrcXVvdGVFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICoKQEAgLTMwLDcgKzI4LDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MQmxvY2txdW90ZUVsZW1lbnQgOiBwdWJs
aWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudChEb2N1
bWVudCopOworICAgIEhUTUxCbG9ja3F1b3RlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKICAgICB+SFRNTEJsb2NrcXVvdGVFbGVtZW50KCk7CiAKICAgICB2aXJ0dWFs
IEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0
dXNSZXF1aXJlZDsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCShyZXZpc2lv
biAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDggKzM4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1l
c3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MQnV0dG9uRWxlbWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQo
RG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQotICAgIDogSFRNTEZvcm1Db250
cm9sRWxlbWVudChidXR0b25UYWcsIGRvYywgZm9ybSkKK0hUTUxCdXR0b25FbGVtZW50OjpIVE1M
QnV0dG9uRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRh
Z05hbWUsIGRvYywgZm9ybSkKICAgICAsIG1fdHlwZShTVUJNSVQpCiAgICAgLCBtX2FjdGl2ZVN1
Ym1pdChmYWxzZSkKIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5oCShyZXZpc2lvbiAz
ODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTEJ1dHRv
bkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAg
SFRNTEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CisgICAg
SFRNTEJ1dHRvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZv
cm1FbGVtZW50KiA9IDApOwogICAgIHZpcnR1YWwgfkhUTUxCdXR0b25FbGVtZW50KCk7CiAKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRExpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gMzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TERMaXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKioKLSAq
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAq
CiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqCkBA
IC0yOSw4ICsyNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotSFRNTERMaXN0RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudChEb2N1bWVudCog
ZG9jKQotICAgIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpkbFRhZywgZG9jKQorSFRNTERMaXN0
RWxlbWVudDo6SFRNTERMaXN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCogZG9jKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewogfQogCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERMaXN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MRExpc3RFbGVtZW50LmgJKHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxETGlzdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8q
Ci0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUu
Ci0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KgpAQCAtMzEsNyArMjksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MRExpc3RF
bGVtZW50IDogcHVibGljIEhUTUxFbGVtZW50CiB7CiBwdWJsaWM6Ci0gICAgSFRNTERMaXN0RWxl
bWVudChEb2N1bWVudCopOworICAgIEhUTUxETGlzdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWly
ZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwg
aW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxEaXJlY3RvcnlFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TERpcmVjdG9yeUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9I
VE1MRGlyZWN0b3J5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAv
KioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtE
RS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
ICAqCkBAIC0yOSw4ICsyNyw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAotSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVt
ZW50KERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6OmRpclRhZywg
ZG9jKQorSFRNTERpcmVjdG9yeUVsZW1lbnQ6OkhUTUxEaXJlY3RvcnlFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0
YWdOYW1lLCBkb2MpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRGlyZWN0b3J5RWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVudC5o
CShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVudC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqCkBAIC0zMSw3ICsyOSw3IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxEaXJlY3RvcnlFbGVtZW50IDogcHVibGljIEhU
TUxFbGVtZW50CiB7CiBwdWJsaWM6Ci0gICAgSFRNTERpcmVjdG9yeUVsZW1lbnQoRG9jdW1lbnQq
KTsKKyAgICBIVE1MRGlyZWN0b3J5RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJp
b3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERpdkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRGl2RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2Yg
dGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxl
IENvbXB1dGVyLCBJbmMuCkBAIC0zMiw4ICszMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
dXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTERpdkVsZW1lbnQ6OkhUTUxEaXZFbGVt
ZW50KERvY3VtZW50ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudChkaXZUYWcsIGRvYykKK0hUTUxE
aXZFbGVtZW50OjpIVE1MRGl2RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCAqZG9jKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogewogfQogCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvSFRNTERpdkVsZW1lbnQuaAkocmV2aXNpb24gMzg3ODYpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTERpdkVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBU
aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgog
ICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAg
ICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKgpAQCAt
MzAsNyArMjgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxEaXZFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MRGl2RWxlbWVudChEb2N1
bWVudCopOworICAgIEhUTUxEaXZFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVu
dCopOwogICAgIH5IVE1MRGl2RWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVz
IGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0K
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiAzODc4NikKKysr
IFdlYkNvcmUvaHRtbC9IVE1MRWxlbWVudEZhY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjcsMTMzICsxMjcsMTMzIEBAIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBtZXRhQ29u
c3QKIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IHN0eWxlQ29uc3RydWN0b3IoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKQogewotICAgIFJlZlB0cjxIVE1MU3R5bGVFbGVtZW50PiBzdHlsZSA9
IG5ldyBIVE1MU3R5bGVFbGVtZW50KGRvYyk7CisgICAgUmVmUHRyPEhUTUxTdHlsZUVsZW1lbnQ+
IHN0eWxlID0gbmV3IEhUTUxTdHlsZUVsZW1lbnQoc3R5bGVUYWcsIGRvYyk7CiAgICAgc3R5bGUt
PnNldENyZWF0ZWRCeVBhcnNlcihjcmVhdGVkQnlQYXJzZXIpOwogICAgIHJldHVybiBzdHlsZS5y
ZWxlYXNlKCk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiB0aXRsZUNvbnN0
cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRNTFRpdGxlRWxlbWVudChkb2MpOworICAg
IHJldHVybiBuZXcgSFRNTFRpdGxlRWxlbWVudCh0aXRsZVRhZywgZG9jKTsKIH0KIAogc3RhdGlj
IFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGZyYW1lQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVk
TmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQogewotICAgIFJlZlB0cjxIVE1MRnJhbWVFbGVtZW50PiBmcmFtZSA9IG5ldyBIVE1MRnJh
bWVFbGVtZW50KGRvYyk7CisgICAgUmVmUHRyPEhUTUxGcmFtZUVsZW1lbnQ+IGZyYW1lID0gbmV3
IEhUTUxGcmFtZUVsZW1lbnQoZnJhbWVUYWcsIGRvYyk7CiAgICAgZnJhbWUtPnNldENyZWF0ZWRC
eVBhcnNlcihjcmVhdGVkQnlQYXJzZXIpOwogICAgIHJldHVybiBmcmFtZS5yZWxlYXNlKCk7ICAg
IAogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZnJhbWVzZXRDb25zdHJ1Y3Rv
cihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50Kiwg
Ym9vbCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxGcmFtZVNldEVsZW1lbnQoZG9jKTsKKyAgICBy
ZXR1cm4gbmV3IEhUTUxGcmFtZVNldEVsZW1lbnQoZnJhbWVzZXRUYWcsIGRvYyk7CiB9CiAKIHN0
YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpZnJhbWVDb25zdHJ1Y3Rvcihjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCBjcmVhdGVk
QnlQYXJzZXIpCiB7Ci0gICAgUmVmUHRyPEhUTUxJRnJhbWVFbGVtZW50PiBpRnJhbWUgPSBuZXcg
SFRNTElGcmFtZUVsZW1lbnQoZG9jKTsKKyAgICBSZWZQdHI8SFRNTElGcmFtZUVsZW1lbnQ+IGlG
cmFtZSA9IG5ldyBIVE1MSUZyYW1lRWxlbWVudChpZnJhbWVUYWcsIGRvYyk7CiAgICAgaUZyYW1l
LT5zZXRDcmVhdGVkQnlQYXJzZXIoY3JlYXRlZEJ5UGFyc2VyKTsKICAgICByZXR1cm4gaUZyYW1l
LnJlbGVhc2UoKTsgICAgCiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBmb3Jt
Q29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3Jt
RWxlbWVudCosIGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MRm9ybUVsZW1lbnQoZG9jKTsK
KyAgICByZXR1cm4gbmV3IEhUTUxGb3JtRWxlbWVudChmb3JtVGFnLCBkb2MpOwogfQogCiBzdGF0
aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gYnV0dG9uQ29uc3RydWN0b3IoY29uc3QgUXVhbGlm
aWVkTmFtZSYsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKIHsK
LSAgICByZXR1cm4gbmV3IEhUTUxCdXR0b25FbGVtZW50KGRvYywgZm9ybSk7CisgICAgcmV0dXJu
IG5ldyBIVE1MQnV0dG9uRWxlbWVudChidXR0b25UYWcsIGRvYywgZm9ybSk7CiB9CiAKIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBpbnB1dENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wpCiB7Ci0g
ICAgcmV0dXJuIG5ldyBIVE1MSW5wdXRFbGVtZW50KGRvYywgZm9ybSk7CisgICAgcmV0dXJuIG5l
dyBIVE1MSW5wdXRFbGVtZW50KGlucHV0VGFnLCBkb2MsIGZvcm0pOwogfQogCiBzdGF0aWMgUGFz
c1JlZlB0cjxIVE1MRWxlbWVudD4gaXNpbmRleENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5h
bWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wpCiB7Ci0gICAg
cmV0dXJuIG5ldyBIVE1MSXNJbmRleEVsZW1lbnQoZG9jLCBmb3JtKTsKKyAgICByZXR1cm4gbmV3
IEhUTUxJc0luZGV4RWxlbWVudChpc2luZGV4VGFnLCBkb2MsIGZvcm0pOwogfQogCiBzdGF0aWMg
UGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gZmllbGRzZXRDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQogewot
ICAgIHJldHVybiBuZXcgSFRNTEZpZWxkU2V0RWxlbWVudChkb2MsIGZvcm0pOworICAgIHJldHVy
biBuZXcgSFRNTEZpZWxkU2V0RWxlbWVudChmaWVsZHNldFRhZywgZG9jLCBmb3JtKTsKIH0KIAog
c3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGtleWdlbkNvbnN0cnVjdG9yKGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wp
CiB7Ci0gICAgcmV0dXJuIG5ldyBIVE1MS2V5Z2VuRWxlbWVudChkb2MsIGZvcm0pOworICAgIHJl
dHVybiBuZXcgSFRNTEtleWdlbkVsZW1lbnQoa2V5Z2VuVGFnLCBkb2MsIGZvcm0pOwogfQogCiBz
dGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gbGFiZWxDb25zdHJ1Y3Rvcihjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAg
ICByZXR1cm4gbmV3IEhUTUxMYWJlbEVsZW1lbnQoZG9jKTsKKyAgICByZXR1cm4gbmV3IEhUTUxM
YWJlbEVsZW1lbnQobGFiZWxUYWcsIGRvYyk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxF
bGVtZW50PiBsZWdlbmRDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
IGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRN
TExlZ2VuZEVsZW1lbnQoZG9jLCBmb3JtKTsKKyAgICByZXR1cm4gbmV3IEhUTUxMZWdlbmRFbGVt
ZW50KGxlZ2VuZFRhZywgZG9jLCBmb3JtKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVs
ZW1lbnQ+IG9wdGdyb3VwQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSwgYm9vbCkKIHsKLSAgICByZXR1cm4gbmV3IEhU
TUxPcHRHcm91cEVsZW1lbnQoZG9jLCBmb3JtKTsKKyAgICByZXR1cm4gbmV3IEhUTUxPcHRHcm91
cEVsZW1lbnQob3B0Z3JvdXBUYWcsIGRvYywgZm9ybSk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRy
PEhUTUxFbGVtZW50PiBvcHRpb25Db25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQogewotICAgIHJldHVybiBu
ZXcgSFRNTE9wdGlvbkVsZW1lbnQoZG9jLCBmb3JtKTsKKyAgICByZXR1cm4gbmV3IEhUTUxPcHRp
b25FbGVtZW50KG9wdGlvblRhZywgZG9jLCBmb3JtKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8
SFRNTEVsZW1lbnQ+IHNlbGVjdENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0sIGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5l
dyBIVE1MU2VsZWN0RWxlbWVudChkb2MsIGZvcm0pOworICAgIHJldHVybiBuZXcgSFRNTFNlbGVj
dEVsZW1lbnQoc2VsZWN0VGFnLCBkb2MsIGZvcm0pOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxI
VE1MRWxlbWVudD4gdGV4dGFyZWFDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtLCBib29sKQogewotICAgIHJldHVybiBu
ZXcgSFRNTFRleHRBcmVhRWxlbWVudChkb2MsIGZvcm0pOworICAgIHJldHVybiBuZXcgSFRNTFRl
eHRBcmVhRWxlbWVudCh0ZXh0YXJlYVRhZywgZG9jLCBmb3JtKTsKIH0KIAogc3RhdGljIFBhc3NS
ZWZQdHI8SFRNTEVsZW1lbnQ+IGRsQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCosIGJvb2wpCiB7Ci0gICAgcmV0dXJuIG5ldyBI
VE1MRExpc3RFbGVtZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBIVE1MRExpc3RFbGVtZW50KGRs
VGFnLCBkb2MpOwogfQogCiBzdGF0aWMgUGFzc1JlZlB0cjxIVE1MRWxlbWVudD4gdWxDb25zdHJ1
Y3Rvcihjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50
KiwgYm9vbCkKIHsKLSAgICByZXR1cm4gbmV3IEhUTUxVTGlzdEVsZW1lbnQoZG9jKTsKKyAgICBy
ZXR1cm4gbmV3IEhUTUxVTGlzdEVsZW1lbnQodWxUYWcsIGRvYyk7CiB9CiAKIHN0YXRpYyBQYXNz
UmVmUHRyPEhUTUxFbGVtZW50PiBvbENvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqLCBib29sKQogewotICAgIHJldHVybiBuZXcg
SFRNTE9MaXN0RWxlbWVudChkb2MpOworICAgIHJldHVybiBuZXcgSFRNTE9MaXN0RWxlbWVudChv
bFRhZywgZG9jKTsKIH0KIAogc3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGRpckNvbnN0
cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1l
bnQqLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRNTERpcmVjdG9yeUVsZW1lbnQoZG9jKTsK
KyAgICByZXR1cm4gbmV3IEhUTUxEaXJlY3RvcnlFbGVtZW50KGRpclRhZywgZG9jKTsKIH0KIAog
c3RhdGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IG1lbnVDb25zdHJ1Y3Rvcihjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAg
ICByZXR1cm4gbmV3IEhUTUxNZW51RWxlbWVudChkb2MpOworICAgIHJldHVybiBuZXcgSFRNTE1l
bnVFbGVtZW50KG1lbnVUYWcsIGRvYyk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVt
ZW50PiBsaUNvbnN0cnVjdG9yKGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCogZG9jLCBI
VE1MRm9ybUVsZW1lbnQqLCBib29sKQogewotICAgIHJldHVybiBuZXcgSFRNTExJRWxlbWVudChk
b2MpOworICAgIHJldHVybiBuZXcgSFRNTExJRWxlbWVudChsaVRhZywgZG9jKTsKIH0KIAogc3Rh
dGljIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGJsb2NrcXVvdGVDb25zdHJ1Y3Rvcihjb25zdCBR
dWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsK
LSAgICByZXR1cm4gbmV3IEhUTUxCbG9ja3F1b3RlRWxlbWVudChkb2MpOworICAgIHJldHVybiBu
ZXcgSFRNTEJsb2NrcXVvdGVFbGVtZW50KGJsb2NrcXVvdGVUYWcsIGRvYyk7CiB9CiAKIHN0YXRp
YyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBkaXZDb25zdHJ1Y3Rvcihjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKIHsKLSAgICByZXR1
cm4gbmV3IEhUTUxEaXZFbGVtZW50KGRvYyk7CisgICAgcmV0dXJuIG5ldyBIVE1MRGl2RWxlbWVu
dChkaXZUYWcsIGRvYyk7CiB9CiAKIHN0YXRpYyBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBoZWFk
aW5nQ29uc3RydWN0b3IoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRv
YywgSFRNTEZvcm1FbGVtZW50KiwgYm9vbCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MRmllbGRT
ZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw4ICszNSw4IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEZpZWxkU2V0RWxlbWVu
dDo6SFRNTEZpZWxkU2V0RWxlbWVudChEb2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQgKmYp
Ci0gICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQoZmllbGRzZXRUYWcsIGRvYywgZikKK0hUTUxG
aWVsZFNldEVsZW1lbnQ6OkhUTUxGaWVsZFNldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQgKmRvYywgSFRNTEZvcm1FbGVtZW50ICpmKQorICAgOiBIVE1MRm9y
bUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKIHsKIH0KIApJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGaWVsZFNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TEZpZWxkU2V0RWxlbWVudC5oCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1M
RmllbGRTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
ICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQpAQCAtNDAsNyAr
MzgsNyBAQCBjbGFzcyBOb2RlOwogCiBjbGFzcyBIVE1MRmllbGRTZXRFbGVtZW50IDogcHVibGlj
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgewogcHVibGljOgotICAgIEhUTUxGaWVsZFNldEVsZW1l
bnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CisgICAgSFRNTEZpZWxkU2V0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0g
MCk7CiAgICAgdmlydHVhbCB+SFRNTEZpZWxkU2V0RWxlbWVudCgpOwogICAgIAogICAgIHZpcnR1
YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMzsgfQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDggKzY0LDggQEAgdXNpbmcgbmFtZXNw
YWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGNvbnN0IGNoYXIgaGV4RGlnaXRzWzE3XSA9ICIwMTIz
NDU2Nzg5QUJDREVGIjsKIAotSFRNTEZvcm1FbGVtZW50OjpIVE1MRm9ybUVsZW1lbnQoRG9jdW1l
bnQqIGRvYykKLSAgICA6IEhUTUxFbGVtZW50KGZvcm1UYWcsIGRvYykKK0hUTUxGb3JtRWxlbWVu
dDo6SFRNTEZvcm1FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2VsZW1lbnRB
bGlhc2VzKDApCiAgICAgLCBjb2xsZWN0aW9uSW5mbygwKQogICAgICwgbV9lbmN0eXBlKCJhcHBs
aWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxG
b3JtRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRm9ybUVsZW1lbnQu
aAkocmV2aXNpb24gMzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZvcm1FbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDcgQEAgY2xhc3MgVGV4dEVuY29kaW5nOwogCiBjbGFz
cyBIVE1MRm9ybUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQgewogcHVibGljOgotICAgIEhU
TUxGb3JtRWxlbWVudChEb2N1bWVudCopOworICAgIEhUTUxGb3JtRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICB2aXJ0dWFsIH5IVE1MRm9ybUVsZW1lbnQoKTsK
IAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsg
cmV0dXJuIFRhZ1N0YXR1c1JlcXVpcmVkOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZyYW1l
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxGcmFtZUVsZW1lbnQ6OkhUTUxGcmFt
ZUVsZW1lbnQoRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxGcmFtZUVsZW1lbnRCYXNlKGZyYW1l
VGFnLCBkb2MpCitIVE1MRnJhbWVFbGVtZW50OjpIVE1MRnJhbWVFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRnJhbWVFbGVtZW50
QmFzZSh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2ZyYW1lQm9yZGVyKHRydWUpCiAgICAgLCBtX2Zy
YW1lQm9yZGVyU2V0KGZhbHNlKQogewpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxGcmFtZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEZyYW1lRWxlbWVudC5oCShyZXZp
c2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVFbGVtZW50LmgJKHdvcmtpbmcg
Y29weSkKQEAgLTM4LDcgKzM4LDcgQEAgY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBIVE1MRnJh
bWVFbGVtZW50IDogcHVibGljIEhUTUxGcmFtZUVsZW1lbnRCYXNlCiB7CiBwdWJsaWM6Ci0gICAg
SFRNTEZyYW1lRWxlbWVudChEb2N1bWVudCopOworICAgIEhUTUxGcmFtZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CiAKICAgICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMg
ZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNGb3JiaWRkZW47IH0K
ICAgICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MRnJhbWVTZXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4Nzg2KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4
ICs0MSw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKIAotSFRNTEZyYW1lU2V0RWxlbWVudDo6SFRNTEZyYW1lU2V0RWxlbWVudChEb2N1bWVudCAq
ZG9jKQotICAgIDogSFRNTEVsZW1lbnQoZnJhbWVzZXRUYWcsIGRvYykKK0hUTUxGcmFtZVNldEVs
ZW1lbnQ6OkhUTUxGcmFtZVNldEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykKKyAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKICAgICAsIG1f
cm93cygwKQogICAgICwgbV9jb2xzKDApCiAgICAgLCBtX3RvdGFsUm93cygxKQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTEZyYW1lU2V0RWxlbWVudC5oCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRt
bC9IVE1MRnJhbWVTZXRFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MRnJhbWVTZXRFbGVtZW50IDogcHVibGlj
IEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MRnJhbWVTZXRFbGVtZW50KERvY3VtZW50
Kik7CisgICAgSFRNTEZyYW1lU2V0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1l
bnQqKTsKICAgICB+SFRNTEZyYW1lU2V0RWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBIVE1MVGFn
U3RhdHVzIGVuZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWly
ZWQ7IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAkocmV2aXNpb24gMzg3ODYp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNCw4ICszNCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotSFRNTElGcmFtZUVsZW1lbnQ6OkhUTUxJRnJhbWVFbGVtZW50KERvY3VtZW50
KiBkb2MpCi0gICAgOiBIVE1MRnJhbWVFbGVtZW50QmFzZShpZnJhbWVUYWcsIGRvYykKK0hUTUxJ
RnJhbWVFbGVtZW50OjpIVE1MSUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogSFRNTEZyYW1lRWxlbWVudEJhc2UodGFnTmFtZSwg
ZG9jKQogewogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAkocmV2aXNpb24gMzg3
ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEhUTUxJRnJhbWVF
bGVtZW50IDogcHVibGljIEhUTUxGcmFtZUVsZW1lbnRCYXNlIHsKIHB1YmxpYzoKLSAgICBIVE1M
SUZyYW1lRWxlbWVudChEb2N1bWVudCopOworICAgIEhUTUxJRnJhbWVFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogCiAgICAgdmlydHVhbCBIVE1MVGFnU3RhdHVzIGVu
ZFRhZ1JlcXVpcmVtZW50KCkgY29uc3QgeyByZXR1cm4gVGFnU3RhdHVzUmVxdWlyZWQ7IH0KICAg
ICB2aXJ0dWFsIGludCB0YWdQcmlvcml0eSgpIGNvbnN0IHsgcmV0dXJuIDE7IH0KSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAsMTIgKzEwMCw2IEBA
IHN0YXRpYyBpbnQgbnVtQ2hhcmFjdGVyc0luR3JhcGhlbWVDbHVzdGUKICAgICByZXR1cm4gdGV4
dEJyZWFrQ3VycmVudChpdCk7CiB9CiAKLUhUTUxJbnB1dEVsZW1lbnQ6OkhUTUxJbnB1dEVsZW1l
bnQoRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQotICAgIDogSFRNTEZvcm1Db250
cm9sRWxlbWVudFdpdGhTdGF0ZShpbnB1dFRhZywgZG9jLCBmKQotewotICAgIGluaXQoKTsKLX0K
LQogSFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCiAgICAgOiBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvYywgZikKIHsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1s
L0hUTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gMzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TElucHV0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgT2ZmCiAgICAgfTsKIAotICAgIEhUTUxJbnB1dEVsZW1lbnQoRG9jdW1lbnQqLCBI
VE1MRm9ybUVsZW1lbnQqID0gMCk7Ci0gICAgSFRNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKKyAgICBI
VE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3Jt
RWxlbWVudCogPSAwKTsKICAgICB2aXJ0dWFsIH5IVE1MSW5wdXRFbGVtZW50KCk7CiAKICAgICB2
aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBU
YWdTdGF0dXNGb3JiaWRkZW47IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0
IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMp
IDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBB
bnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKQEAgLTMyLDggKzMwLDggQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MSXNJbmRleEVs
ZW1lbnQ6OkhUTUxJc0luZGV4RWxlbWVudChEb2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQg
KmYpCi0gICAgOiBIVE1MSW5wdXRFbGVtZW50KGlzaW5kZXhUYWcsIGRvYywgZikKK0hUTUxJc0lu
ZGV4RWxlbWVudDo6SFRNTElzSW5kZXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50ICpkb2MsIEhUTUxGb3JtRWxlbWVudCAqZikKKyAgICA6IEhUTUxJbnB1dEVs
ZW1lbnQodGFnTmFtZSwgZG9jLCBmKQogewogICAgIG1fbmFtZSA9ICJpc2luZGV4IjsKIH0KSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTElzSW5kZXhFbGVtZW50LmgJKHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29y
ZS9odG1sL0hUTUxJc0luZGV4RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBA
QAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9y
IEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykK
QEAgLTMyLDcgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRNTElzSW5kZXhF
bGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVsZW1lbnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MSXNJ
bmRleEVsZW1lbnQoRG9jdW1lbnQgKmRvYywgSFRNTEZvcm1FbGVtZW50ICpmID0gMCk7CisgICAg
SFRNTElzSW5kZXhFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCAqZG9jLCBI
VE1MRm9ybUVsZW1lbnQgKmYgPSAwKTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRU
YWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c0ZvcmJpZGRlbjsgfQogICAg
IHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gMDsgfQpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRt
bC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAv
KgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RF
LgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQog
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQpAQCAt
NDEsMTUgKzM5LDE1IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhU
TUxOYW1lczsKIAotSFRNTEtleWdlbkVsZW1lbnQ6OkhUTUxLZXlnZW5FbGVtZW50KERvY3VtZW50
KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKLSAgICA6IEhUTUxTZWxlY3RFbGVtZW50KGtleWdl
blRhZywgZG9jLCBmKQorSFRNTEtleWdlbkVsZW1lbnQ6OkhUTUxLZXlnZW5FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCog
ZikKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKIHsKICAgICBWZWN0
b3I8U3RyaW5nPiBrZXlzOwogICAgIGdldFN1cHBvcnRlZEtleVNpemVzKGtleXMpOwogICAgICAg
ICAKICAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5kID0ga2V5cy5lbmQoKTsK
ICAgICBmb3IgKFZlY3RvcjxTdHJpbmc+Ojpjb25zdF9pdGVyYXRvciBpdCA9IGtleXMuYmVnaW4o
KTsgaXQgIT0gZW5kOyArK2l0KSB7Ci0gICAgICAgIEhUTUxPcHRpb25FbGVtZW50KiBvID0gbmV3
IEhUTUxPcHRpb25FbGVtZW50KGRvYywgZm9ybSgpKTsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1l
bnQqIG8gPSBuZXcgSFRNTE9wdGlvbkVsZW1lbnQob3B0aW9uVGFnLCBkb2MsIGZvcm0oKSk7CiAg
ICAgICAgIGFkZENoaWxkKG8pOwogICAgICAgICBvLT5hZGRDaGlsZChuZXcgVGV4dChkb2MsICpp
dCkpOwogICAgIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5oCShyZXZpc2lvbiAzODc4
NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxs
ZXJAa2RlLm9yZykKQEAgLTMyLDcgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBIVE1MS2V5Z2VuRWxlbWVudCA6IHB1YmxpYyBIVE1MU2VsZWN0RWxlbWVudCB7CiBwdWJsaWM6
Ci0gICAgSFRNTEtleWdlbkVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7
CisgICAgSFRNTEtleWdlbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kiwg
SFRNTEZvcm1FbGVtZW50KiA9IDApOwogCiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBj
b25zdCB7IHJldHVybiAwOyB9CiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJpbmcmIHR5cGUo
KSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExJRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4Nzg2KQorKysg
V2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw4ICsz
Miw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IAotSFRNTExJRWxlbWVudDo6SFRNTExJRWxlbWVudChEb2N1bWVudCogZG9jKQotICAgIDogSFRN
TEVsZW1lbnQoSFRNTE5hbWVzOjpsaVRhZywgZG9jKQorSFRNTExJRWxlbWVudDo6SFRNTExJRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDog
SFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9yZXF1ZXN0ZWRWYWx1ZSgwKQogewog
fQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxMSUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTExJRWxlbWVudC5oCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRt
bC9IVE1MTElFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICog
VGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoK
ICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAg
ICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICoKQEAg
LTMwLDcgKzI4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBIVE1MTElFbGVtZW50
IDogcHVibGljIEhUTUxFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MTElFbGVtZW50KERvY3Vt
ZW50Kik7CisgICAgSFRNTExJRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
KTsKIAogICAgIHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0
IHsgcmV0dXJuIFRhZ1N0YXR1c09wdGlvbmFsOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3Jp
dHkoKSBjb25zdCB7IHJldHVybiAzOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVz
aW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxMYWJlbEVsZW1lbnQ6OkhUTUxMYWJlbEVs
ZW1lbnQoRG9jdW1lbnQgKmRvYykKLSAgICA6IEhUTUxFbGVtZW50KGxhYmVsVGFnLCBkb2MpCitI
VE1MTGFiZWxFbGVtZW50OjpIVE1MTGFiZWxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7
CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuaAkocmV2aXNpb24gMzg3ODYpCisrKyBX
ZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICsz
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTExhYmVsRWxlbWVudCA6IHB1
YmxpYyBIVE1MRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTExhYmVsRWxlbWVudChEb2N1bWVu
dCopOworICAgIEhUTUxMYWJlbEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CiAgICAgdmlydHVhbCB+SFRNTExhYmVsRWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBpbnQg
dGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TExlZ2VuZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTGVnZW5k
RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxMZWdlbmRFbGVtZW50
OjpIVE1MTGVnZW5kRWxlbWVudChEb2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQgKmYpCi0g
ICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KGxlZ2VuZFRhZywgZG9jLCBmKQorSFRNTExlZ2Vu
ZEVsZW1lbnQ6OkhUTUxMZWdlbmRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50ICpkb2MsIEhUTUxGb3JtRWxlbWVudCAqZikKKyAgICA6IEhUTUxGb3JtQ29udHJv
bEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQogewogfQogCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRN
TExlZ2VuZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVs
ZW1lbnQuaAkocmV2aXNpb24gMzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCkBAIC0zMiw3ICszMCw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgSFRNTExlZ2VuZEVsZW1lbnQgOiBwdWJsaWMgSFRNTEZv
cm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6Ci0gICAgSFRNTExlZ2VuZEVsZW1lbnQoRG9jdW1l
bnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CisgICAgSFRNTExlZ2VuZEVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOwogICAgIHZp
cnR1YWwgfkhUTUxMZWdlbmRFbGVtZW50KCk7CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2Fi
bGUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc4
NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgRE9NIGltcGxl
bWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwg
KGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtv
aXZpc3RvQGtkZS5vcmcpCiAgKgpAQCAtMjksOCArMjcsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxNZW51RWxlbWVudDo6SFRNTE1l
bnVFbGVtZW50KERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6Om1l
bnVUYWcsIGRvYykKK0hUTUxNZW51RWxlbWVudDo6SFRNTE1lbnVFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdO
YW1lLCBkb2MpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWVudUVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lbnVFbGVtZW50LmgJKHJldmlzaW9uIDM4
Nzg2KQorKysgV2ViQ29yZS9odG1sL0hUTUxNZW51RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVt
ZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAo
a25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29p
dmlzdG9Aa2RlLm9yZykKICAqCkBAIC0zMSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IGNsYXNzIEhUTUxNZW51RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAogewogcHVibGljOgot
ICAgIEhUTUxNZW51RWxlbWVudChEb2N1bWVudCopOworICAgIEhUTUxNZW51RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKICAgICAKICAgICB2aXJ0dWFsIEhUTUxUYWdT
dGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVybiBUYWdTdGF0dXNSZXF1aXJl
ZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNTsgfQpJ
bmRleDogV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gMzg3ODYpCisrKyBXZWJD
b3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0
IEBACiAvKioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24g
Zm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2Rl
Lm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2Rl
Lm9yZykKICAqCkBAIC0zMiw4ICszMCw4IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdXNpbmcg
bmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTE9MaXN0RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVu
dChEb2N1bWVudCogZG9jKQotICAgIDogSFRNTEVsZW1lbnQoSFRNTE5hbWVzOjpvbFRhZywgZG9j
KQorSFRNTE9MaXN0RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9j
KQogICAgICwgbV9zdGFydCgxKQogewogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9MaXN0RWxlbWVudC5oCShy
ZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhl
IERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBM
YXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtv
aXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICoKQEAgLTMxLDcgKzI5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgSFRNTE9MaXN0RWxlbWVudCA6IHB1YmxpYyBIVE1MRWxlbWVudAog
ewogcHVibGljOgotICAgIEhUTUxPTGlzdEVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICBIVE1MT0xp
c3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwogICAgICAgICAKICAg
ICB2aXJ0dWFsIEhUTUxUYWdTdGF0dXMgZW5kVGFnUmVxdWlyZW1lbnQoKSBjb25zdCB7IHJldHVy
biBUYWdTdGF0dXNSZXF1aXJlZDsgfQogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29u
c3QgeyByZXR1cm4gNTsgfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAko
cmV2aXNpb24gMzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDggKzM3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1
c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MT3B0R3JvdXBFbGVtZW50OjpIVE1MT3B0
R3JvdXBFbGVtZW50KERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKLSAgICA6IEhU
TUxGb3JtQ29udHJvbEVsZW1lbnQob3B0Z3JvdXBUYWcsIGRvYywgZikKK0hUTUxPcHRHcm91cEVs
ZW1lbnQ6OkhUTUxPcHRHcm91cEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmKQorICAgIDogSFRNTEZvcm1Db250cm9s
RWxlbWVudCh0YWdOYW1lLCBkb2MsIGYpCiAgICAgLCBtX3N0eWxlKDApCiB7CiB9CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmgJKHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29yZS9o
dG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBA
QCBjbGFzcyBIVE1MU2VsZWN0RWxlbWVudDsKIAogY2xhc3MgSFRNTE9wdEdyb3VwRWxlbWVudCA6
IHB1YmxpYyBIVE1MRm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKLSAgICBIVE1MT3B0R3Jv
dXBFbGVtZW50KERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworICAgIEhUTUxPcHRH
cm91cEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVt
ZW50KiA9IDApOwogCiAgICAgdmlydHVhbCBib29sIGNoZWNrRFREKGNvbnN0IE5vZGUqKTsKICAg
ICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OwpJbmRleDogV2ViQ29y
ZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9I
VE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKgot
ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgot
ICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICog
ICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQpAQCAtNDIs
OCArNDAsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiAKLUhUTUxPcHRpb25FbGVtZW50OjpIVE1MT3B0aW9uRWxlbWVudChEb2N1bWVudCogZG9j
LCBIVE1MRm9ybUVsZW1lbnQqIGYpCi0gICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KG9wdGlv
blRhZywgZG9jLCBmKQorSFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCog
ZikKKyAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQogICAgICwg
bV9zZWxlY3RlZChmYWxzZSkKICAgICAsIG1fc3R5bGUoMCkKIHsKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MT3B0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5oCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MT3B0aW9u
RWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5
cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAo
QykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKQEAgLTM4LDcgKzM2LDcgQEAg
Y2xhc3MgSFRNTE9wdGlvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcgogICAgIGZyaWVuZCBjbGFz
cyBSZW5kZXJNZW51TGlzdDsKIAogcHVibGljOgotICAgIEhUTUxPcHRpb25FbGVtZW50KERvY3Vt
ZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworICAgIEhUTUxPcHRpb25FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKIAogICAg
IHZpcnR1YWwgSFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IFRhZ1N0YXR1c09wdGlvbmFsOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25z
dCB7IHJldHVybiAyOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFBhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxQYXJzZXIuY3BwCShyZXZpc2lvbiAzODc4NikKKysr
IFdlYkNvcmUvaHRtbC9IVE1MUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzEyLDcgKzcx
Miw3IEBAIGJvb2wgSFRNTFBhcnNlcjo6Zm9ybUNyZWF0ZUVycm9yQ2hlY2soVG8KICAgICAvLyBP
bmx5IGNyZWF0ZSBhIG5ldyBmb3JtIGlmIHdlJ3JlIG5vdCBhbHJlYWR5IGluc2lkZSBvbmUuCiAg
ICAgLy8gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGggb3RoZXIgYnJvd3NlcnMnIGJlaGF2aW9yLgog
ICAgIGlmICghbV9jdXJyZW50Rm9ybUVsZW1lbnQpIHsKLSAgICAgICAgbV9jdXJyZW50Rm9ybUVs
ZW1lbnQgPSBuZXcgSFRNTEZvcm1FbGVtZW50KGRvY3VtZW50KTsKKyAgICAgICAgbV9jdXJyZW50
Rm9ybUVsZW1lbnQgPSBuZXcgSFRNTEZvcm1FbGVtZW50KGZvcm1UYWcsIGRvY3VtZW50KTsKICAg
ICAgICAgcmVzdWx0ID0gbV9jdXJyZW50Rm9ybUVsZW1lbnQ7CiAgICAgICAgIHBDbG9zZXJDcmVh
dGVFcnJvckNoZWNrKHQsIHJlc3VsdCk7CiAgICAgfQpAQCAtMTUwNSwxMSArMTUwNSwxMSBAQCB2
b2lkIEhUTUxQYXJzZXI6OmNyZWF0ZUhlYWQoKQogCiBQYXNzUmVmUHRyPE5vZGU+IEhUTUxQYXJz
ZXI6OmhhbmRsZUlzaW5kZXgoVG9rZW4qIHQpCiB7Ci0gICAgUmVmUHRyPE5vZGU+IG4gPSBuZXcg
SFRNTERpdkVsZW1lbnQoZG9jdW1lbnQpOworICAgIFJlZlB0cjxOb2RlPiBuID0gbmV3IEhUTUxE
aXZFbGVtZW50KGRpdlRhZywgZG9jdW1lbnQpOwogCiAgICAgTmFtZWRNYXBwZWRBdHRyTWFwKiBh
dHRycyA9IHQtPmF0dHJzLmdldCgpOwogCi0gICAgUmVmUHRyPEhUTUxJc0luZGV4RWxlbWVudD4g
aXNJbmRleCA9IG5ldyBIVE1MSXNJbmRleEVsZW1lbnQoZG9jdW1lbnQsIG1fY3VycmVudEZvcm1F
bGVtZW50LmdldCgpKTsKKyAgICBSZWZQdHI8SFRNTElzSW5kZXhFbGVtZW50PiBpc0luZGV4ID0g
bmV3IEhUTUxJc0luZGV4RWxlbWVudChpc2luZGV4VGFnLCBkb2N1bWVudCwgbV9jdXJyZW50Rm9y
bUVsZW1lbnQuZ2V0KCkpOwogICAgIGlzSW5kZXgtPnNldEF0dHJpYnV0ZU1hcChhdHRycyk7CiAg
ICAgaXNJbmRleC0+c2V0QXR0cmlidXRlKHR5cGVBdHRyLCAia2h0bWxfaXNpbmRleCIpOwogCklu
ZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4Nzg2KQorKysgV2Vi
Q29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjMsMjEg
KzYzLDYgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogc3RhdGljIGNvbnN0IERPTVRp
bWVTdGFtcCB0eXBlQWhlYWRUaW1lb3V0ID0gMTAwMDsKIAotSFRNTFNlbGVjdEVsZW1lbnQ6OkhU
TUxTZWxlY3RFbGVtZW50KERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikKLSAgICA6
IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUoc2VsZWN0VGFnLCBkb2MsIGYpCi0gICAg
LCBtX21pbndpZHRoKDApCi0gICAgLCBtX3NpemUoMCkKLSAgICAsIG1fbXVsdGlwbGUoZmFsc2Up
Ci0gICAgLCBtX3JlY2FsY0xpc3RJdGVtcyhmYWxzZSkKLSAgICAsIG1fbGFzdE9uQ2hhbmdlSW5k
ZXgoLTEpCi0gICAgLCBtX2FjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KC0xKQotICAgICwgbV9h
Y3RpdmVTZWxlY3Rpb25FbmRJbmRleCgtMSkKLSAgICAsIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUo
ZmFsc2UpCi0gICAgLCBtX3JlcGVhdGluZ0NoYXIoMCkKLSAgICAsIG1fbGFzdENoYXJUaW1lKDAp
Ci17Ci19Ci0KIEhUTUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGYpCiAg
ICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvYywgZikKICAg
ICAsIG1fbWlud2lkdGgoMCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lv
biAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw4ICszNyw3IEBAIGNsYXNzIEtleWJvYXJkRXZlbnQ7CiAKIGNsYXNzIEhUTUxT
ZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUgewog
cHVibGljOgotICAgIEhUTUxTZWxlY3RFbGVtZW50KERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50
KiA9IDApOwotICAgIEhUTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworICAgIEhUTUxTZWxlY3RFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAw
KTsKIAogICAgIHZpcnR1YWwgaW50IHRhZ1ByaW9yaXR5KCkgY29uc3QgeyByZXR1cm4gNjsgfQog
ICAgIHZpcnR1YWwgYm9vbCBjaGVja0RURChjb25zdCBOb2RlKiBuZXdDaGlsZCk7CkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRt
bC9IVE1MU3R5bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIsOCBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxT
dHlsZUVsZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQoRG9jdW1lbnQqIGRvYykKLSAgICA6IEhUTUxF
bGVtZW50KHN0eWxlVGFnLCBkb2MpCitIVE1MU3R5bGVFbGVtZW50OjpIVE1MU3R5bGVFbGVtZW50
KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1M
RWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX2xvYWRpbmcoZmFsc2UpCiAgICAgLCBtX2Ny
ZWF0ZWRCeVBhcnNlcihmYWxzZSkKIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuaAkocmV2
aXNpb24gMzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw3ICszMyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxT
dHlsZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQsIHB1YmxpYyBTdHlsZUVsZW1lbnQKIHsK
IHB1YmxpYzoKLSAgICBIVE1MU3R5bGVFbGVtZW50KERvY3VtZW50Kik7CisgICAgSFRNTFN0eWxl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwg
SFRNTFRhZ1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1
c1JlcXVpcmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVy
biAxOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1lbnQuY3BwCShyZXZpc2lvbiAz
ODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDcsOCArNDcsOCBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogc3RhdGlj
IGNvbnN0IGludCBkZWZhdWx0Um93cyA9IDI7CiBzdGF0aWMgY29uc3QgaW50IGRlZmF1bHRDb2xz
ID0gMjA7CiAKLUhUTUxUZXh0QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCi0gICAgOiBIVE1MRm9ybUNvbnRy
b2xFbGVtZW50V2l0aFN0YXRlKHRleHRhcmVhVGFnLCBkb2N1bWVudCwgZm9ybSkKK0hUTUxUZXh0
QXJlYUVsZW1lbnQ6OkhUTUxUZXh0QXJlYUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvY3VtZW50LCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlKHRhZ05hbWUsIGRvY3VtZW50LCBmb3JtKQog
ICAgICwgbV9yb3dzKGRlZmF1bHRSb3dzKQogICAgICwgbV9jb2xzKGRlZmF1bHRDb2xzKQogICAg
ICwgbV93cmFwKFNvZnRXcmFwKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFRleHRBcmVhRWxlbWVudC5oCShy
ZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFFbGVtZW50LmgJKHdv
cmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAgY2xhc3MgU2VsZWN0aW9uOwogCiBjbGFzcyBI
VE1MVGV4dEFyZWFFbGVtZW50IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3Rh
dGUgewogcHVibGljOgotICAgIEhUTUxUZXh0QXJlYUVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9y
bUVsZW1lbnQqID0gMCk7CisgICAgSFRNTFRleHRBcmVhRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CiAKICAgICB2aXJ0dWFsIGJv
b2wgY2hlY2tEVEQoY29uc3QgTm9kZSogbmV3Q2hpbGQpIHsgcmV0dXJuIG5ld0NoaWxkLT5pc1Rl
eHROb2RlKCk7IH0KIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkocmV2aXNpb24g
Mzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMyLDggKzMyLDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiB1c2luZyBuYW1lc3Bh
Y2UgSFRNTE5hbWVzOwogCi1IVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50KERvY3Vt
ZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudCh0aXRsZVRhZywgZG9jKQorSFRNTFRpdGxlRWxl
bWVudDo6SFRNTFRpdGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCogZG9jKQorICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV90aXRs
ZSgiIikKIHsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuaAkocmV2aXNpb24gMzg3ODYp
CisrKyBXZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxUaXRsZUVsZW1lbnQg
OiBwdWJsaWMgSFRNTEVsZW1lbnQKIHsKIHB1YmxpYzoKLSAgICBIVE1MVGl0bGVFbGVtZW50KERv
Y3VtZW50Kik7CisgICAgSFRNTFRpdGxlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9j
dW1lbnQqKTsKICAgICB+SFRNTFRpdGxlRWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBib29sIGNo
ZWNrRFREKGNvbnN0IE5vZGUqIG5ld0NoaWxkKSB7IHJldHVybiBuZXdDaGlsZC0+aXNUZXh0Tm9k
ZSgpOyB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODc4NikK
KysrIFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw2ICsxLDQgQEAKIC8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1l
bnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2
aXN0b0BrZGUub3JnKQogICoKQEAgLTMwLDggKzI4LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogCi1IVE1MVUxpc3RFbGVtZW50OjpIVE1MVUxp
c3RFbGVtZW50KERvY3VtZW50KiBkb2MpCi0gICAgOiBIVE1MRWxlbWVudChIVE1MTmFtZXM6OnVs
VGFnLCBkb2MpCitIVE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MRWxlbWVudCh0YWdO
YW1lLCBkb2MpCiB7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuaAkocmV2aXNpb24g
Mzg3ODYpCisrKyBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1w
bGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9s
bCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAo
a29pdmlzdG9Aa2RlLm9yZykKICAqCkBAIC0zMSw3ICsyOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIEhUTUxVTGlzdEVsZW1lbnQgOiBwdWJsaWMgSFRNTEVsZW1lbnQKIHsKIHB1Ymxp
YzoKLSAgICBIVE1MVUxpc3RFbGVtZW50KERvY3VtZW50Kik7CisgICAgSFRNTFVMaXN0RWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKIAogICAgIHZpcnR1YWwgSFRNTFRh
Z1N0YXR1cyBlbmRUYWdSZXF1aXJlbWVudCgpIGNvbnN0IHsgcmV0dXJuIFRhZ1N0YXR1c1JlcXVp
cmVkOyB9CiAgICAgdmlydHVhbCBpbnQgdGFnUHJpb3JpdHkoKSBjb25zdCB7IHJldHVybiA1OyB9
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFZpZXdTb3VyY2VEb2N1bWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxWaWV3U291cmNlRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAz
ODc4NikKKysrIFdlYkNvcmUvaHRtbC9IVE1MVmlld1NvdXJjZURvY3VtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIEhUTUxWaWV3U291cmNlRG9jdW1lbnQ6OmNy
ZWF0ZUNvbnRhCiAgICAgCiAgICAgLy8gQ3JlYXRlIGEgbGluZSBndXR0ZXIgZGl2IHRoYXQgY2Fu
IGJlIHVzZWQgdG8gbWFrZSBzdXJlIHRoZSBndXR0ZXIgZXh0ZW5kcyBkb3duIHRoZSBoZWlnaHQg
b2YgdGhlIHdob2xlCiAgICAgLy8gZG9jdW1lbnQuCi0gICAgUmVmUHRyPEVsZW1lbnQ+IGRpdiA9
IG5ldyBIVE1MRGl2RWxlbWVudCh0aGlzKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gZGl2ID0gbmV3
IEhUTUxEaXZFbGVtZW50KGRpdlRhZywgdGhpcyk7CiAgICAgUmVmUHRyPE5hbWVkTWFwcGVkQXR0
ck1hcD4gYXR0cnMgPSBOYW1lZE1hcHBlZEF0dHJNYXA6OmNyZWF0ZSgpOwogICAgIGF0dHJzLT5p
bnNlcnRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlOjpjcmVhdGUoY2xhc3NBdHRyLCAid2Via2l0
LWxpbmUtZ3V0dGVyLWJhY2tkcm9wIiksIHRydWUpOwogICAgIGRpdi0+c2V0QXR0cmlidXRlTWFw
KGF0dHJzLnJlbGVhc2UoKSk7CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9NZWRpYUNvbnRyb2xF
bGVtZW50cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvTWVkaWFDb250cm9s
RWxlbWVudHMuY3BwCShyZXZpc2lvbiAzODc4NikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL01lZGlh
Q29udHJvbEVsZW1lbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBzdGF0
aWMgY29uc3QgZmxvYXQgY1N0ZXBUaW1lID0gMC4wN2Y7CiBzdGF0aWMgY29uc3QgZmxvYXQgY1Nl
ZWtUaW1lID0gMC4yZjsKIAogTWVkaWFDb250cm9sU2hhZG93Um9vdEVsZW1lbnQ6Ok1lZGlhQ29u
dHJvbFNoYWRvd1Jvb3RFbGVtZW50KERvY3VtZW50KiBkb2MsIEhUTUxNZWRpYUVsZW1lbnQqIG1l
ZGlhRWxlbWVudCkgCi0gICAgOiBIVE1MRGl2RWxlbWVudChkb2MpCisgICAgOiBIVE1MRGl2RWxl
bWVudChkaXZUYWcsIGRvYykKICAgICAsIG1fbWVkaWFFbGVtZW50KG1lZGlhRWxlbWVudCkgCiB7
CiAgICAgUmVmUHRyPFJlbmRlclN0eWxlPiByb290U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y3JlYXRl
KCk7CkBAIC02OCw3ICs2OCw3IEBAIE1lZGlhQ29udHJvbFNoYWRvd1Jvb3RFbGVtZW50OjpNZWRp
YUNvbnQKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogTWVkaWFDb250cm9sSW5w
dXRFbGVtZW50OjpNZWRpYUNvbnRyb2xJbnB1dEVsZW1lbnQoRG9jdW1lbnQqIGRvYywgUmVuZGVy
U3R5bGU6OlBzZXVkb0lkIHBzZXVkbywgY29uc3QgU3RyaW5nJiB0eXBlLCBIVE1MTWVkaWFFbGVt
ZW50KiBtZWRpYUVsZW1lbnQpIAotICAgIDogSFRNTElucHV0RWxlbWVudChkb2MpCisgICAgOiBI
VE1MSW5wdXRFbGVtZW50KGlucHV0VGFnLCBkb2MpCiAgICAgLCBtX21lZGlhRWxlbWVudChtZWRp
YUVsZW1lbnQpCiB7CiAgICAgc2V0SW5wdXRUeXBlKHR5cGUpOwpJbmRleDogV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRmlsZVVwbG9hZENvbnRyb2wuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckZpbGVVcGxvYWRDb250cm9sLmNwcAkocmV2aXNpb24gMzg3ODYpCisr
KyBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGaWxlVXBsb2FkQ29udHJvbC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI5MCw3ICsyOTAsNyBAQCBTdHJpbmcgUmVuZGVyRmlsZVVwbG9hZENvbnRyb2w6
OmZpbGVUZXh0CiB9CiAgICAgCiBIVE1MRmlsZVVwbG9hZElubmVyQnV0dG9uRWxlbWVudDo6SFRN
TEZpbGVVcGxvYWRJbm5lckJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqIGRvYywgTm9kZSogc2hhZG93
UGFyZW50KQotICAgIDogSFRNTElucHV0RWxlbWVudChkb2MpCisgICAgOiBIVE1MSW5wdXRFbGVt
ZW50KGlucHV0VGFnLCBkb2MpCiAgICAgLCBtX3NoYWRvd1BhcmVudChzaGFkb3dQYXJlbnQpCiB7
CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNZWRpYS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTWVkaWEuY3BwCShyZXZpc2lvbiAzODc4NikKKysr
IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck1lZGlhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUs
NiArMzUsNyBAQAogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29u
dGV4dC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIk1vdXNl
RXZlbnQuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgpAQCAtMTQ1LDcgKzE0Niw3IEBAIHZv
aWQgUmVuZGVyTWVkaWE6OmNyZWF0ZVBhbmVsKCkKIHsKICAgICBBU1NFUlQoIW1fcGFuZWwpOwog
ICAgIFJlbmRlclN0eWxlKiBzdHlsZSA9IGdldENhY2hlZFBzZXVkb1N0eWxlKFJlbmRlclN0eWxl
OjpNRURJQV9DT05UUk9MU19QQU5FTCk7Ci0gICAgbV9wYW5lbCA9IG5ldyBIVE1MRGl2RWxlbWVu
dChkb2N1bWVudCgpKTsKKyAgICBtX3BhbmVsID0gbmV3IEhUTUxEaXZFbGVtZW50KEhUTUxOYW1l
czo6ZGl2VGFnLCBkb2N1bWVudCgpKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV9w
YW5lbC0+Y3JlYXRlUmVuZGVyZXIocmVuZGVyQXJlbmEoKSwgc3R5bGUpOwogICAgIGlmIChyZW5k
ZXJlcikgewogICAgICAgICBtX3BhbmVsLT5zZXRSZW5kZXJlcihyZW5kZXJlcik7CkBAIC0xOTYs
NyArMTk3LDcgQEAgdm9pZCBSZW5kZXJNZWRpYTo6Y3JlYXRlVGltZURpc3BsYXkoKQogewogICAg
IEFTU0VSVCghbV90aW1lRGlzcGxheSk7CiAgICAgUmVuZGVyU3R5bGUqIHN0eWxlID0gZ2V0Q2Fj
aGVkUHNldWRvU3R5bGUoUmVuZGVyU3R5bGU6Ok1FRElBX0NPTlRST0xTX1RJTUVfRElTUExBWSk7
Ci0gICAgbV90aW1lRGlzcGxheSA9IG5ldyBIVE1MRGl2RWxlbWVudChkb2N1bWVudCgpKTsKKyAg
ICBtX3RpbWVEaXNwbGF5ID0gbmV3IEhUTUxEaXZFbGVtZW50KEhUTUxOYW1lczo6ZGl2VGFnLCBk
b2N1bWVudCgpKTsKICAgICBSZW5kZXJPYmplY3QqIHJlbmRlcmVyID0gbV90aW1lRGlzcGxheS0+
Y3JlYXRlUmVuZGVyZXIocmVuZGVyQXJlbmEoKSwgc3R5bGUpOwogICAgIGlmIChyZW5kZXJlcikg
ewogICAgICAgICBtX3RpbWVEaXNwbGF5LT5zZXRSZW5kZXJlcihyZW5kZXJlcik7CkluZGV4OiBX
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJTbGlkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclNsaWRlci5jcHAJKHJldmlzaW9uIDM4Nzg2KQorKysgV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyU2xpZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjAsNyArNjAsNyBA
QCBwcml2YXRlOgogfTsKIAogSFRNTFNsaWRlclRodW1iRWxlbWVudDo6SFRNTFNsaWRlclRodW1i
RWxlbWVudChEb2N1bWVudCogZG9jLCBOb2RlKiBzaGFkb3dQYXJlbnQpCi0gICAgOiBIVE1MRGl2
RWxlbWVudChkb2MpCisgICAgOiBIVE1MRGl2RWxlbWVudChkaXZUYWcsIGRvYykKICAgICAsIG1f
c2hhZG93UGFyZW50KHNoYWRvd1BhcmVudCkKICAgICAsIG1faW5pdGlhbENsaWNrUG9pbnQoSW50
UG9pbnQoKSkKICAgICAsIG1faW5pdGlhbFBvc2l0aW9uKDApCkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9UZXh0Q29udHJvbElubmVyRWxlbWVudHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cmVuZGVyaW5nL1RleHRDb250cm9sSW5uZXJFbGVtZW50cy5jcHAJKHJldmlzaW9uIDM4Nzg2KQor
KysgV2ViQ29yZS9yZW5kZXJpbmcvVGV4dENvbnRyb2xJbm5lckVsZW1lbnRzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNs
dWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKICNpbmNsdWRlICJIVE1MVGV4dEFyZWFFbGVtZW50LmgiCiAjaW5jbHVkZSAi
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCkBAIC01Myw3ICs1
NCw4IEBAIGJvb2wgUmVuZGVyVGV4dENvbnRyb2xJbm5lckJsb2NrOjpub2RlQXQKIH0KIAogVGV4
dENvbnRyb2xJbm5lckVsZW1lbnQ6OlRleHRDb250cm9sSW5uZXJFbGVtZW50KERvY3VtZW50KiBk
b2MsIE5vZGUqIHNoYWRvd1BhcmVudCkKLSAgICA6IEhUTUxEaXZFbGVtZW50KGRvYyksIG1fc2hh
ZG93UGFyZW50KHNoYWRvd1BhcmVudCkKKyAgICA6IEhUTUxEaXZFbGVtZW50KEhUTUxOYW1lczo6
ZGl2VGFnLCBkb2MpCisgICAgLCBtX3NoYWRvd1BhcmVudChzaGFkb3dQYXJlbnQpCiB7CiB9CiAK
</data>
<flag name="review"
          id="11876"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25608</attachid>
            <date>2008-11-30 04:46:44 -0800</date>
            <delta_ts>2008-11-30 11:38:59 -0800</delta_ts>
            <desc>Add the ASSERT to the constructors changed by this bug</desc>
            <filename>bug22441-addASSERT.diff</filename>
            <type>text/plain</type>
            <size>20210</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAzODg0MikKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzcgQEAKKzIwMDgtMTEtMjkgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgQnVnIDIyNDQxOiBCcmlkZ2UgdGhlIGdhcCBiZXR3ZWVuIHRoZSBnZW5lcmF0ZWQgRWxl
bWVudEZhY3RvcnkgYW5kIEhUTUxFbGVtZW50RmFjdG9yeQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI0NDEKKworICAgICAgICBBZGQgYW4gYXNzZXJ0
aW9uIHRvIHRoZSBtb2RpZmllZCBIVE1MIGVsZW1lbnRzJyBjb25zdHJ1Y3RvcgorICAgICAgICB0
byBjaGVjayB0aGF0IHRoZSBRdWFsaWZpZWROYW1lIHBhcmFtZXRlciBpcyB0aGUgb25lIHRoYXQK
KyAgICAgICAgbWF0Y2hlcyB0aGUgRWxlbWVudCdzLgorCisgICAgICAgICogaHRtbC9IVE1MQmFz
ZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEJhc2VFbGVtZW50OjpIVE1MQmFz
ZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEJsb2NrcXVvdGVFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkhUTUxCbG9ja3F1b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxCb2R5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpIVE1MQm9keUVsZW1lbnQ6OkhUTUxCb2R5RWxlbWVudCk6CisgICAgICAgICogaHRtbC9I
VE1MQnV0dG9uRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQnV0dG9uRWxlbWVu
dDo6SFRNTEJ1dHRvbkVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTERMaXN0RWxlbWVudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRExpc3RFbGVtZW50OjpIVE1MRExpc3RFbGVtZW50
KToKKyAgICAgICAgKiBodG1sL0hUTUxEaXJlY3RvcnlFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxEaXJlY3RvcnlFbGVtZW50OjpIVE1MRGlyZWN0b3J5RWxlbWVudCk6CisgICAg
ICAgICogaHRtbC9IVE1MRGl2RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRGl2
RWxlbWVudDo6SFRNTERpdkVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRmllbGRTZXRFbGVtZW50OjpIVE1MRmll
bGRTZXRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxGb3JtRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpIVE1MRm9ybUVsZW1lbnQ6OkhUTUxGb3JtRWxlbWVudCk6CisgICAgICAg
ICogaHRtbC9IVE1MRnJhbWVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxGcmFt
ZUVsZW1lbnQ6OkhUTUxGcmFtZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEZyYW1lU2V0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRnJhbWVTZXRFbGVtZW50OjpIVE1M
RnJhbWVTZXRFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxIZWFkRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MSGVhZEVsZW1lbnQ6OkhUTUxIZWFkRWxlbWVudCk6CisgICAg
ICAgICogaHRtbC9IVE1MSHRtbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEh0
bWxFbGVtZW50OjpIVE1MSHRtbEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTElGcmFtZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElGcmFtZUVsZW1lbnQ6OkhUTUxJRnJh
bWVFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxJbnB1dEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTElucHV0RWxlbWVudDo6SFRNTElucHV0RWxlbWVudCk6CisgICAgICAg
ICogaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTElz
SW5kZXhFbGVtZW50OjpIVE1MSXNJbmRleEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTEtl
eWdlbkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEtleWdlbkVsZW1lbnQ6OkhU
TUxLZXlnZW5FbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxMSUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTExJRWxlbWVudDo6SFRNTExJRWxlbWVudCk6CisgICAgICAgICog
aHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxMYWJlbEVs
ZW1lbnQ6OkhUTUxMYWJlbEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTExlZ2VuZEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTExlZ2VuZEVsZW1lbnQ6OkhUTUxMZWdlbmRF
bGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxMaW5rRWxlbWVudC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudCk6CisgICAgICAgICogaHRt
bC9IVE1MTWVudUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lbnVFbGVtZW50
OjpIVE1MTWVudUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE1ldGFFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZXRhRWxlbWVudDo6SFRNTE1ldGFFbGVtZW50KToKKyAg
ICAgICAgKiBodG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TE9MaXN0RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudCk6CisgICAgICAgICogaHRtbC9IVE1MT3B0
R3JvdXBFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxPcHRHcm91cEVsZW1lbnQ6
OkhUTUxPcHRHcm91cEVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVt
ZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkhUTUxTZWxlY3RFbGVtZW50OjpIVE1MU2VsZWN0RWxlbWVudCk6CisgICAgICAgICog
aHRtbC9IVE1MU3R5bGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxTdHlsZUVs
ZW1lbnQ6OkhUTUxTdHlsZUVsZW1lbnQpOgorICAgICAgICAqIGh0bWwvSFRNTFRleHRBcmVhRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEFyZWFFbGVtZW50OjpIVE1MVGV4
dEFyZWFFbGVtZW50KToKKyAgICAgICAgKiBodG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6SFRNTFRpdGxlRWxlbWVudDo6SFRNTFRpdGxlRWxlbWVudCk6CisgICAg
ICAgICogaHRtbC9IVE1MVUxpc3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxV
TGlzdEVsZW1lbnQ6OkhUTUxVTGlzdEVsZW1lbnQpOgorCiAyMDA4LTExLTI5ICBBbGV4ZXkgUHJv
c2t1cnlha292ICA8YXBAd2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBFcmljIFNl
aWRlbC4KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODg0MSkKKysr
IFdlYkNvcmUvaHRtbC9IVE1MQmFzZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBIVE1MQmFzZUVsZW1lbnQ6OkhU
TUxCYXNlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBxTmFtZSwgRG9jdW1lbnQqIGRvYykK
ICAgICA6IEhUTUxFbGVtZW50KHFOYW1lLCBkb2MpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUo
YmFzZVRhZykpOwogfQogCiBIVE1MQmFzZUVsZW1lbnQ6On5IVE1MQmFzZUVsZW1lbnQoKQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODQxKQor
KysgV2ViQ29yZS9odG1sL0hUTUxCbG9ja3F1b3RlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDYgKzMxLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIEhUTUxCbG9ja3F1
b3RlRWxlbWVudDo6SFRNTEJsb2NrcXVvdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
Z05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7
CisgICAgQVNTRVJUKGhhc1RhZ05hbWUoYmxvY2txdW90ZVRhZykpOwogfQogCiBIVE1MQmxvY2tx
dW90ZUVsZW1lbnQ6On5IVE1MQmxvY2txdW90ZUVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxCb2R5RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCb2R5
RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODQxKQorKysgV2ViQ29yZS9odG1sL0hUTUxCb2R5RWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDkgKzQwLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAotSFRNTEJvZHlFbGVtZW50OjpI
VE1MQm9keUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50KiBkb2Mp
Ci0gICAgOiBIVE1MRWxlbWVudChxTmFtZSwgZG9jKQorSFRNTEJvZHlFbGVtZW50OjpIVE1MQm9k
eUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAg
ICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShi
b2R5VGFnKSk7CiB9CiAKIEhUTUxCb2R5RWxlbWVudDo6fkhUTUxCb2R5RWxlbWVudCgpCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODQxKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMs
NyBAQCBIVE1MQnV0dG9uRWxlbWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQoY29uCiAgICAgLCBtX3R5
cGUoU1VCTUlUKQogICAgICwgbV9hY3RpdmVTdWJtaXQoZmFsc2UpCiB7CisgICAgQVNTRVJUKGhh
c1RhZ05hbWUoYnV0dG9uVGFnKSk7CiB9CiAKIEhUTUxCdXR0b25FbGVtZW50Ojp+SFRNTEJ1dHRv
bkVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxETGlzdEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MRExpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gMzg4
NDEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERMaXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDYgKzMwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIEhUTUxETGlzdEVs
ZW1lbnQ6OkhUTUxETGlzdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYykKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKIHsKKyAgICBBU1NF
UlQoaGFzVGFnTmFtZShkbFRhZykpOwogfQogCiBib29sIEhUTUxETGlzdEVsZW1lbnQ6OmNvbXBh
Y3QoKSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxEaXJlY3RvcnlFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTERpcmVjdG9yeUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAzODg0MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRGlyZWN0b3J5RWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
IEhUTUxEaXJlY3RvcnlFbGVtZW50OjpIVE1MRGlyZWN0b3J5RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFt
ZSwgZG9jKQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKGRpclRhZykpOwogfQogCiBib29sIEhU
TUxEaXJlY3RvcnlFbGVtZW50Ojpjb21wYWN0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MRGl2RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxEaXZFbGVt
ZW50LmNwcAkocmV2aXNpb24gMzg4NDEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTERpdkVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiBIVE1MRGl2RWxlbWVudDo6SFRNTERpdkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRv
YykKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShkaXZUYWcpKTsKIH0KIAogSFRNTERpdkVsZW1l
bnQ6On5IVE1MRGl2RWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEZpZWxkU2V0RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGaWVsZFNldEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzODg0MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MRmllbGRTZXRFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMg
cGFydCBvZiB0aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0
IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5
OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIw
MDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCkBAIC0zOCw2ICszNiw3IEBAIHVzaW5n
IG5hbWVzcGFjZSBIVE1MTmFtZXM7CiBIVE1MRmllbGRTZXRFbGVtZW50OjpIVE1MRmllbGRTZXRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MsIEhUTUxG
b3JtRWxlbWVudCAqZikKICAgIDogSFRNTEZvcm1Db250cm9sRWxlbWVudCh0YWdOYW1lLCBkb2Ms
IGYpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUoZmllbGRzZXRUYWcpKTsKIH0KIAogSFRNTEZp
ZWxkU2V0RWxlbWVudDo6fkhUTUxGaWVsZFNldEVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9odG1s
L0hUTUxGb3JtRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxGb3Jt
RWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODQxKQorKysgV2ViQ29yZS9odG1sL0hUTUxGb3JtRWxl
bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgSFRNTEZvcm1FbGVtZW50
OjpIVE1MRm9ybUVsZW1lbnQoY29uc3QgUQogICAgICwgbV9pbnJlc2V0KGZhbHNlKQogICAgICwg
bV9tYWxmb3JtZWQoZmFsc2UpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUoZm9ybVRhZykpOwog
fQogCiBIVE1MRm9ybUVsZW1lbnQ6On5IVE1MRm9ybUVsZW1lbnQoKQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1M
RnJhbWVFbGVtZW50LmNwcAkocmV2aXNpb24gMzg4NDEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEZy
YW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAvKioKLSAqIFRo
aXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiAoaGF1c21hbm5Aa2RlLm9yZykKQEAgLTQwLDYg
KzM4LDcgQEAgSFRNTEZyYW1lRWxlbWVudDo6SFRNTEZyYW1lRWxlbWVudChjb25zdAogICAgICwg
bV9mcmFtZUJvcmRlcih0cnVlKQogICAgICwgbV9mcmFtZUJvcmRlclNldChmYWxzZSkKIHsKKyAg
ICBBU1NFUlQoaGFzVGFnTmFtZShmcmFtZVRhZykpOwogfQogCiBib29sIEhUTUxGcmFtZUVsZW1l
bnQ6OnJlbmRlcmVySXNOZWVkZWQoUmVuZGVyU3R5bGUqIHN0eWxlKQpJbmRleDogV2ViQ29yZS9o
dG1sL0hUTUxGcmFtZVNldEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9I
VE1MRnJhbWVTZXRFbGVtZW50LmNwcAkocmV2aXNpb24gMzg4NDEpCisrKyBXZWJDb3JlL2h0bWwv
SFRNTEZyYW1lU2V0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw0IEBACiAv
KioKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00gaW1wbGVtZW50YXRpb24gZm9yIEtE
RS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykK
ICAqICAgICAgICAgICAoQykgMjAwMCBTaW1vbiBIYXVzbWFubiAoaGF1c21hbm5Aa2RlLm9yZykK
QEAgLTU0LDYgKzUyLDcgQEAgSFRNTEZyYW1lU2V0RWxlbWVudDo6SFRNTEZyYW1lU2V0RWxlbWVu
dAogICAgICwgZnJhbWVCb3JkZXJTZXQoZmFsc2UpCiAgICAgLCBub3Jlc2l6ZShmYWxzZSkKIHsK
KyAgICBBU1NFUlQoaGFzVGFnTmFtZShmcmFtZXNldFRhZykpOwogfQogCiBIVE1MRnJhbWVTZXRF
bGVtZW50Ojp+SFRNTEZyYW1lU2V0RWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTEhl
YWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEhlYWRFbGVtZW50
LmNwcAkocmV2aXNpb24gMzg4NDEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEhlYWRFbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDQgQEAKIC8qKgotICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAw
IFNpbW9uIEhhdXNtYW5uIChoYXVzbWFubkBrZGUub3JnKQpAQCAtMzUsNiArMzMsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogSFRNTEhlYWRFbGVtZW50OjpIVE1MSGVhZEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBIVE1MRWxl
bWVudChxTmFtZSwgZG9jKQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKGhlYWRUYWcpKTsKIH0K
IAogSFRNTEhlYWRFbGVtZW50Ojp+SFRNTEhlYWRFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRt
bC9IVE1MSHRtbEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSHRt
bEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODg0MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSHRtbEVs
ZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxIdG1sRWxlbWVudDo6
SFRNTEh0bWxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBEb2N1bWVudCogZG9j
KQotICAgIDogSFRNTEVsZW1lbnQocU5hbWUsIGRvYykKK0hUTUxIdG1sRWxlbWVudDo6SFRNTEh0
bWxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisg
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUo
aHRtbFRhZykpOwogfQogCiBIVE1MSHRtbEVsZW1lbnQ6On5IVE1MSHRtbEVsZW1lbnQoKQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxJRnJhbWVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTElGcmFtZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODg0MSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MSUZyYW1lRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3
LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIEhUTUxJRnJhbWVFbGVtZW50OjpIVE1M
SUZyYW1lRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQogICAgIDogSFRNTEZyYW1lRWxlbWVudEJhc2UodGFnTmFtZSwgZG9jKQogeworICAgIEFTU0VS
VChoYXNUYWdOYW1lKGlmcmFtZVRhZykpOwogfQogCiBib29sIEhUTUxJRnJhbWVFbGVtZW50Ojpt
YXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBwZWRBdHRyaWJ1dGVF
bnRyeSYgcmVzdWx0KSBjb25zdApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbnB1dEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSW5wdXRFbGVtZW50LmNwcAkocmV2
aXNpb24gMzg4NDEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTElucHV0RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwMyw2ICsxMDMsNyBAQCBzdGF0aWMgaW50IG51bUNoYXJhY3RlcnNJbkdy
YXBoZW1lQ2x1c3RlCiBIVE1MSW5wdXRFbGVtZW50OjpIVE1MSW5wdXRFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZikK
ICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGUodGFnTmFtZSwgZG9jLCBmKQog
eworICAgIEFTU0VSVChoYXNUYWdOYW1lKGlucHV0VGFnKSB8fCBoYXNUYWdOYW1lKGlzaW5kZXhU
YWcpKTsKICAgICBpbml0KCk7CiB9CiAKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAzODg0MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MSXNJbmRleEVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiBIVE1MSXNJbmRleEVsZW1lbnQ6OkhUTUxJc0luZGV4RWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQgKmYpCiAg
ICAgOiBIVE1MSW5wdXRFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKIHsKKyAgICBBU1NFUlQoaGFz
VGFnTmFtZShpc2luZGV4VGFnKSk7CiAgICAgbV9uYW1lID0gImlzaW5kZXgiOwogfQogCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEtleWdlbkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MS2V5Z2VuRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODQxKQorKysgV2ViQ29y
ZS9odG1sL0hUTUxLZXlnZW5FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIs
NyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogSFRNTEtleWdlbkVsZW1lbnQ6OkhUTUxL
ZXlnZW5FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2Ms
IEhUTUxGb3JtRWxlbWVudCogZikKICAgICA6IEhUTUxTZWxlY3RFbGVtZW50KHRhZ05hbWUsIGRv
YywgZikKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShrZXlnZW5UYWcpKTsKICAgICBWZWN0b3I8
U3RyaW5nPiBrZXlzOwogICAgIGdldFN1cHBvcnRlZEtleVNpemVzKGtleXMpOwogICAgICAgICAK
SW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTElFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTExJRWxlbWVudC5jcHAJKHJldmlzaW9uIDM4ODQxKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxMSUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBAIEhU
TUxMSUVsZW1lbnQ6OkhUTUxMSUVsZW1lbnQoY29uc3QgUXVhbGkKICAgICA6IEhUTUxFbGVtZW50
KHRhZ05hbWUsIGRvYykKICAgICAsIG1fcmVxdWVzdGVkVmFsdWUoMCkKIHsKKyAgICBBU1NFUlQo
aGFzVGFnTmFtZShsaVRhZykpOwogfQogCiBib29sIEhUTUxMSUVsZW1lbnQ6Om1hcFRvRW50cnko
Y29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJpYnV0ZUVudHJ5JiByZXN1
bHQpIGNvbnN0CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExhYmVsRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMYWJlbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODg0
MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTGFiZWxFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzgsNiArMzgsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwogSFRNTExhYmVsRWxl
bWVudDo6SFRNTExhYmVsRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQogICAgIDogSFRNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQogeworICAgIEFTU0VS
VChoYXNUYWdOYW1lKGxhYmVsVGFnKSk7CiB9CiAKIEhUTUxMYWJlbEVsZW1lbnQ6On5IVE1MTGFi
ZWxFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTGVnZW5kRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxMZWdlbmRFbGVtZW50LmNwcAkocmV2aXNpb24g
Mzg4NDEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExlZ2VuZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBET00g
aW1wbGVtZW50YXRpb24gZm9yIEtERS4KLSAqCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBL
bm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0
byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIg
KG11ZWxsZXJAa2RlLm9yZykKQEAgLTM4LDYgKzM2LDcgQEAgdXNpbmcgbmFtZXNwYWNlIEhUTUxO
YW1lczsKIEhUTUxMZWdlbmRFbGVtZW50OjpIVE1MTGVnZW5kRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jLCBIVE1MRm9ybUVsZW1lbnQgKmYpCiAgICAg
OiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZ05hbWUsIGRvYywgZikKIHsKKyAgICBBU1NFUlQo
aGFzVGFnTmFtZShsZWdlbmRUYWcpKTsKIH0KIAogSFRNTExlZ2VuZEVsZW1lbnQ6On5IVE1MTGVn
ZW5kRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkocmV2aXNpb24gMzg4
NDEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTExpbmtFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTMsNiArNTMsNyBAQCBIVE1MTGlua0VsZW1lbnQ6OkhUTUxMaW5rRWxlbWVudChjb25zdCBR
CiAgICAgLCBtX2lzRE5TUHJlZmV0Y2goZmFsc2UpCiAgICAgLCBtX2NyZWF0ZWRCeVBhcnNlcihm
YWxzZSkKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShsaW5rVGFnKSk7CiB9CiAKIEhUTUxMaW5r
RWxlbWVudDo6fkhUTUxMaW5rRWxlbWVudCgpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE1lbnVF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE1lbnVFbGVtZW50LmNw
cAkocmV2aXNpb24gMzg4NDEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTE1lbnVFbGVtZW50LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQCB1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OwogSFRNTE1lbnVFbGVtZW50OjpIVE1MTWVudUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKICAgICA6IEhUTUxFbGVtZW50KHRhZ05hbWUsIGRvYykK
IHsKKyAgICBBU1NFUlQoaGFzVGFnTmFtZShtZW51VGFnKSk7CiB9CiAKIGJvb2wgSFRNTE1lbnVF
bGVtZW50Ojpjb21wYWN0KCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAzODg0MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MTWV0YUVsZW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0
aGUgRE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5
IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkg
S29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCkBAIC0zMSw5ICsyOSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLUhUTUxNZXRhRWxlbWVudDo6
SFRNTE1ldGFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBEb2N1bWVudCogZG9j
KQotICAgIDogSFRNTEVsZW1lbnQocU5hbWUsIGRvYykKK0hUTUxNZXRhRWxlbWVudDo6SFRNTE1l
dGFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisg
ICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUo
bWV0YVRhZykpOwogfQogCiBIVE1MTWV0YUVsZW1lbnQ6On5IVE1MTWV0YUVsZW1lbnQoKQpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxPTGlzdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9IVE1MT0xpc3RFbGVtZW50LmNwcAkocmV2aXNpb24gMzg4NDEpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTE9MaXN0RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcg
QEAgSFRNTE9MaXN0RWxlbWVudDo6SFRNTE9MaXN0RWxlbWVudChjb25zdAogICAgIDogSFRNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jKQogICAgICwgbV9zdGFydCgxKQogeworICAgIEFTU0VSVChoYXNU
YWdOYW1lKG9sVGFnKSk7CiB9CiAKIGJvb2wgSFRNTE9MaXN0RWxlbWVudDo6bWFwVG9FbnRyeShj
b25zdCBRdWFsaWZpZWROYW1lJiBhdHRyTmFtZSwgTWFwcGVkQXR0cmlidXRlRW50cnkmIHJlc3Vs
dCkgY29uc3QKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MT3B0R3JvdXBFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdEdyb3VwRWxlbWVudC5jcHAJKHJldmlzaW9u
IDM4ODQxKQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRHcm91cEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00MSw2ICs0MSw3IEBAIEhUTUxPcHRHcm91cEVsZW1lbnQ6OkhUTUxPcHRHcm91
cEVsZW1lbnQKICAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnTmFtZSwgZG9jLCBmKQog
ICAgICwgbV9zdHlsZSgwKQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKG9wdGdyb3VwVGFnKSk7
CiB9CiAKIGJvb2wgSFRNTE9wdEdyb3VwRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdApJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODg0MSkKKysrIFdlYkNv
cmUvaHRtbC9IVE1MT3B0aW9uRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1
LDcgQEAgSFRNTE9wdGlvbkVsZW1lbnQ6OkhUTUxPcHRpb25FbGVtZW50KGNvbgogICAgICwgbV9z
ZWxlY3RlZChmYWxzZSkKICAgICAsIG1fc3R5bGUoMCkKIHsKKyAgICBBU1NFUlQoaGFzVGFnTmFt
ZShvcHRpb25UYWcpKTsKIH0KIAogYm9vbCBIVE1MT3B0aW9uRWxlbWVudDo6Y2hlY2tEVEQoY29u
c3QgTm9kZSogbmV3Q2hpbGQpCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDM4ODQxKQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzYsNiArNzYsNyBAQCBIVE1MU2VsZWN0RWxlbWVudDo6SFRNTFNlbGVj
dEVsZW1lbnQoY29uCiAgICAgLCBtX3JlcGVhdGluZ0NoYXIoMCkKICAgICAsIG1fbGFzdENoYXJU
aW1lKDApCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUoc2VsZWN0VGFnKSB8fCBoYXNUYWdOYW1l
KGtleWdlblRhZykpOwogfQogCiBib29sIEhUTUxTZWxlY3RFbGVtZW50OjpjaGVja0RURChjb25z
dCBOb2RlKiBuZXdDaGlsZCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU3R5bGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFN0eWxlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDM4ODQxKQorKysgV2ViQ29yZS9odG1sL0hUTUxTdHlsZUVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDYgKzEsNCBAQAogLyoqCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUg
RE9NIGltcGxlbWVudGF0aW9uIGZvciBLREUuCi0gKgogICogQ29weXJpZ2h0IChDKSAxOTk5IExh
cnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCkBAIC0zNyw2ICszNSw3IEBAIEhUTUxTdHlsZUVsZW1lbnQ6
OkhUTUxTdHlsZUVsZW1lbnQoY29uc3QKICAgICAsIG1fbG9hZGluZyhmYWxzZSkKICAgICAsIG1f
Y3JlYXRlZEJ5UGFyc2VyKGZhbHNlKQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKHN0eWxlVGFn
KSk7CiB9CiAKIC8vIG90aGVyIHN0dWZmLi4uCkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRleHRB
cmVhRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxUZXh0QXJlYUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAzODg0MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVGV4dEFyZWFF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsNyBAQCBIVE1MVGV4dEFyZWFF
bGVtZW50OjpIVE1MVGV4dEFyZWFFbGVtZW50CiAgICAgLCBtX2NhY2hlZFNlbGVjdGlvblN0YXJ0
KC0xKQogICAgICwgbV9jYWNoZWRTZWxlY3Rpb25FbmQoLTEpCiB7CisgICAgQVNTRVJUKGhhc1Rh
Z05hbWUodGV4dGFyZWFUYWcpKTsKICAgICBzZXRWYWx1ZU1hdGNoZXNSZW5kZXJlcigpOwogfQog
CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFRpdGxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9odG1sL0hUTUxUaXRsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAzODg0MSkKKysrIFdl
YkNvcmUvaHRtbC9IVE1MVGl0bGVFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsx
LDQgQEAKIC8qKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlv
biBmb3IgS0RFLgotICoKICAqIENvcHlyaWdodCAoQykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0Br
ZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUu
b3JnKQpAQCAtMzYsNiArMzQsNyBAQCBIVE1MVGl0bGVFbGVtZW50OjpIVE1MVGl0bGVFbGVtZW50
KGNvbnN0CiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBkb2MpCiAgICAgLCBtX3RpdGxlKCIi
KQogeworICAgIEFTU0VSVChoYXNUYWdOYW1lKHRpdGxlVGFnKSk7CiB9CiAKIEhUTUxUaXRsZUVs
ZW1lbnQ6On5IVE1MVGl0bGVFbGVtZW50KCkKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MVUxpc3RF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTFVMaXN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDM4ODQxKQorKysgV2ViQ29yZS9odG1sL0hUTUxVTGlzdEVsZW1lbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFt
ZXM7CiBIVE1MVUxpc3RFbGVtZW50OjpIVE1MVUxpc3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCiAgICAgOiBIVE1MRWxlbWVudCh0YWdOYW1lLCBk
b2MpCiB7CisgICAgQVNTRVJUKGhhc1RhZ05hbWUodWxUYWcpKTsKIH0KIAogYm9vbCBIVE1MVUxp
c3RFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJOYW1lLCBNYXBw
ZWRBdHRyaWJ1dGVFbnRyeSYgcmVzdWx0KSBjb25zdAo=
</data>
<flag name="review"
          id="11930"
          type_id="1"
          status="+"
          setter="koivisto"
    />
          </attachment>
      

    </bug>

</bugzilla>