<?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>20393</bug_id>
          
          <creation_ts>2008-08-15 05:53:29 -0700</creation_ts>
          <short_desc>Add WML support to WebKit</short_desc>
          <delta_ts>2011-04-29 15:38:50 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKit Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>22324</dependson>
    
    <dependson>22334</dependson>
    
    <dependson>22399</dependson>
    
    <dependson>22423</dependson>
    
    <dependson>22426</dependson>
    
    <dependson>22430</dependson>
    
    <dependson>22431</dependson>
    
    <dependson>22477</dependson>
    
    <dependson>22522</dependson>
    
    <dependson>22545</dependson>
    
    <dependson>22550</dependson>
    
    <dependson>22584</dependson>
    
    <dependson>22636</dependson>
    
    <dependson>22637</dependson>
    
    <dependson>22638</dependson>
    
    <dependson>22799</dependson>
    
    <dependson>22802</dependson>
    
    <dependson>22814</dependson>
    
    <dependson>22857</dependson>
    
    <dependson>22865</dependson>
    
    <dependson>22866</dependson>
    
    <dependson>22876</dependson>
    
    <dependson>22949</dependson>
    
    <dependson>22961</dependson>
    
    <dependson>22965</dependson>
    
    <dependson>22972</dependson>
    
    <dependson>22973</dependson>
    
    <dependson>22996</dependson>
    
    <dependson>23015</dependson>
    
    <dependson>23433</dependson>
    
    <dependson>23434</dependson>
    
    <dependson>23444</dependson>
    
    <dependson>23454</dependson>
    
    <dependson>23465</dependson>
    
    <dependson>23493</dependson>
    
    <dependson>23499</dependson>
    
    <dependson>23808</dependson>
    
    <dependson>25617</dependson>
    
    <dependson>25979</dependson>
    
    <dependson>26062</dependson>
    
    <dependson>26072</dependson>
    
    <dependson>26246</dependson>
    
    <dependson>26884</dependson>
    
    <dependson>26885</dependson>
    
    <dependson>27675</dependson>
    
    <dependson>27676</dependson>
    
    <dependson>27677</dependson>
    
    <dependson>27707</dependson>
    
    <dependson>27718</dependson>
    
    <dependson>27720</dependson>
    
    <dependson>27721</dependson>
    
    <dependson>27722</dependson>
    
    <dependson>27723</dependson>
    
    <dependson>27724</dependson>
    
    <dependson>27725</dependson>
    
    <dependson>27726</dependson>
    
    <dependson>27786</dependson>
    
    <dependson>27801</dependson>
    
    <dependson>28135</dependson>
    
    <dependson>28180</dependson>
    
    <dependson>28358</dependson>
    
    <dependson>28371</dependson>
    
    <dependson>28373</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="George Staikos">staikos</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>alp</cc>
    
    <cc>charles.wei</cc>
    
    <cc>dawagner</cc>
    
    <cc>gyuyoung</cc>
    
    <cc>krit</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mjs</cc>
    
    <cc>red47514f7</cc>
    
    <cc>sam</cc>
    
    <cc>webkit.arunp</cc>
    
    <cc>webkit</cc>
    
    <cc>yichao.yin</cc>
    
    <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>88547</commentid>
    <comment_count>0</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-08-15 05:53:29 -0700</bug_when>
    <thetext>Upcoming patch adds WML document type and nodes to WebKit.  It is disabled by default, but can be enabled with ENABLE(WML).  Should work for Safari (Mac/Win) and Qt ports at least.  The patch probably has quite some formatting violations but given the independence of the patch I think that as long as they don&apos;t affect core code, it should go in and then be fixed in SVN.  The patch is large and impact from changes in SVN is non-trivial.  Work was done by Charles Wei, Yichao Yin of Torch Mobile, and me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88548</commentid>
    <comment_count>1</comment_count>
      <attachid>22813</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-08-15 06:06:36 -0700</bug_when>
    <thetext>Created attachment 22813
Patch to implement WML

Implements WML.  Changelog will be included when patch is checked in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88560</commentid>
    <comment_count>2</comment_count>
      <attachid>22813</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-08-15 06:42:41 -0700</bug_when>
    <thetext>Comment on attachment 22813
Patch to implement WML

I&apos;ve just skimmed over the patch briefly, but have a few comments.

ASCIICType.h currently uses character literals for character codes of printable characters, and hex literals for non-printable characters.  New code should follow this style.

The naming on some new functions and variables uses inconsistent case.  For example, defaultWmlStyle vs isWMLDocument.  The latter style is preferred.

It seems bad that knowledge of WML is sprinkled throughout XMLTokenizer.  There also appears to be code (lines 2134 through 2143) outside of any functions, which would not compile.

Including code that requires a third-party library (WBXML) directly in ResourceLoader doesn&apos;t seem like a great idea either.

Destructors in new classes appear to be inconsistently declared as virtual, and many are declared and then left empty.  Empty destructors should be omitted.

There are numerous coding style issues with the patch as well.  I would prefer to see them addressed before the code is landed, primarily because I do not foresee this code getting as much love and maintenance as the rest of the code base going forward.

The primary issues that I see are:

1) Missing space between &quot;if&quot; and the opening parenthesis.
2) Unnecessary parentheses around some expressions in the conditions of &quot;if&quot; statements.
3) Many new .cpp files have incorrect ordering of include files.  The order should be config.h, the associated header file, a blank line, and then the rest of the includes in sorted order.  See existing .cpp files for an example.
4) One-line &quot;if&quot; statements should not have braces.
5) The placement of braces in function declarations is inconsistent.  Braces should be placed on their own line in function declarations.
6) The constant 0 should be used rather than NULL.
7) Enum members should user InterCaps with an initial capital letter, rather than ALLCAPS.

All that said, I love the pile of layout tests!  Are expected results also going to be included?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88561</commentid>
    <comment_count>3</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2008-08-15 06:45:44 -0700</bug_when>
    <thetext>I should mention that the coding style guidelines are available at &lt;http://webkit.org/coding/coding-style.html&gt;.  They cover most of the points I raised, plus some others that I may have missed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88594</commentid>
    <comment_count>4</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-08-15 11:15:00 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Implements WML.  Changelog will be included when patch is checked in.

ChangeLogs usually help the review process, especially for huge code dumps like this! So I encourage you to write the ChangeLog now to help the review along.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88630</commentid>
    <comment_count>5</comment_count>
      <attachid>22813</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2008-08-16 09:03:18 -0700</bug_when>
    <thetext>Comment on attachment 22813
Patch to implement WML

I think in general this patch is too large as-is to review. Therefore I only looked at coding style issues and not at what it exactly does. Maybe the patch can be split up in wml specific, changes to the non-wml code and tests?

The coding style does not seem consistent, which is wrong per definition. I assume the webkit style must be followed, which means all if(, for( and while( uses should be if (, for ( and while (,
Here are some coding style issues:

Example of if( use where if ( should be used:

&gt;+
&gt;+void WMLAElement::defaultEventHandler(Event* evt) 
&gt;+{
&gt;+    bool shouldHandle = false;
&gt;+    if(evt-&gt;type() == clickEvent) {
&gt;+        shouldHandle = true;

Example of while( use where while ( should be used:

&gt;+void WMLCardElement::registerDoElement(WMLDoElement* e)
&gt;+{
&gt;+    if(e) {
&gt;+        Vector&lt;WMLDoElement*&gt;::iterator it = m_doVecs.begin();
&gt;+        WMLDoElement* doe = NULL;
&gt;+        while(it != m_doVecs.end()) {

Example of for( use where for ( should be used:

&gt;+
&gt;+    String templDoName;
&gt;+    String cardDoName;
&gt;+    WMLDoElement* templDo = 0;
&gt;+    for(; templIt != templDoNameVecs.end(); ++templIt){
&gt;+        templDo = *templIt;

Put { on a new line after functions:

&gt;+void WMLTemplateElement::setHasIntrEvent(bool has) {
&gt;+    m_hasIntrEvent = has;
&gt;+}
&gt;+
&gt;+bool WMLTemplateElement::hasIntrEvent() {
&gt;+    return m_hasIntrEvent;
&gt;+}

In general my advise is to code all sources to match webkit coding style. Until then I think it makes sense to r- this, so that is what I do now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88631</commentid>
    <comment_count>6</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-08-16 10:42:14 -0700</bug_when>
    <thetext>I agree, but I think the concern is the parts that touch existing code.  The new files should also be fixed, but I believe the patch can go in and they can be fixed after.  It&apos;s quite a pain to work on this outside of svn.  It took days to merge to a point where it made sense to post the patch, and apparently there were even some monumental merge errors as mentioned by Mark.

If the size of the patch is a concern, how about we check in the tests, then check in the wml/ directory, then post the rest for review?  It&apos;s totally harmless like that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88822</commentid>
    <comment_count>7</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-08-19 10:27:15 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; I agree, but I think the concern is the parts that touch existing code.  The
&gt; new files should also be fixed, but I believe the patch can go in and they can
&gt; be fixed after.  It&apos;s quite a pain to work on this outside of svn.  It took
&gt; days to merge to a point where it made sense to post the patch, and apparently
&gt; there were even some monumental merge errors as mentioned by Mark.

While I understand the pain of working outside Trunk, I don&apos;t think it is a good idea to commit even the new files without fixing obvious style issues and other errors.  Since we don&apos;t expect this to be turned on in the mainline WebKit (or at least I see no reason to), the code is more prone to bit rot due to a lack of attention.

&gt; 
&gt; If the size of the patch is a concern, how about we check in the tests, then
&gt; check in the wml/ directory, then post the rest for review?  It&apos;s totally
&gt; harmless like that.
&gt; 

This doesn&apos;t seem like the most ideal way to add it to the codebase, though perhaps the easiest.  We certainly need to review the new files in the wml/ directory as well, and that will be easier if it is in chunks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>88874</commentid>
    <comment_count>8</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-08-19 16:53:44 -0700</bug_when>
    <thetext>To all who reviewed, instead of just saying what you don&apos;t like, can you suggest a way for us to review this and break it into pieces then?  I am the only one of the three of us with a Mac or Windows and have basically no time to spend reworking code formatting.  I spent 3 full days reworking the patch to make it work in trunk already and that&apos;s about it for me.  Our Qt environment is also very different from trunk.  The longer we play this debate game here the bigger chance you will just kill this patch though.  If it just can&apos;t go in because there are spaces missing in front of if() statements in the wml/ directory then I guess we&apos;ll have to live with that until someone writes a script to reformat the code or does it manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89182</commentid>
    <comment_count>9</comment_count>
      <attachid>22955</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-08-23 20:03:34 -0700</bug_when>
    <thetext>Created attachment 22955
Patch to implement WML

Updated to fix lots of if( and NULL vs 0 and other such things.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89187</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-24 00:58:26 -0700</bug_when>
    <thetext>Well, certainly the layout tests could be split out into another patch.  As could the new files, as could the changes to core, as can the build files.

m_evntHandler should be m_eventHandler and should be an OwnPtr. :)

It should be possible to write a regexp to fix the { style violations:

bool WMLTemplateElement::hasIntrEvent() {

I sense that whoever wrote the patch hates vowels. :)

Obviously you all would prefer not to fork.  We&apos;d prefer you not fork.  I&apos;d certainly be happy to help review any patches under 50k... 20k would be of course preferred. :)  I&apos;m also happy to chat about any of this over IRC.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>89335</commentid>
    <comment_count>11</comment_count>
      <attachid>22955</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-08-25 20:48:08 -0700</bug_when>
    <thetext>Comment on attachment 22955
Patch to implement WML

Thank you very much for the patch George!  Unfortunately it&apos;s really unreviewable as-is.  We can&apos;t by-pass the normal review mechanisms even for a change off-by default.  However, we can certainly land this in pieces.  Even landing the individual new files w/o them being compiled in or being able to run.

There are really two questions here:
1.  Does WebKit.org want WML support?  I haven&apos;t heard any complaints against such (and I&apos;m myself not against adding WML support.).

2.  Is this patch OK?

The answer to the second is &quot;it might be&quot;, but we&apos;ll be able to tell better when split into smaller pieces which can be individually reviewed and landed (even if not built or tested initially).

Thanks again for the patch, but I&apos;m going to mark this large one as r-.  I look forward to reviewing this in pieces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92923</commentid>
    <comment_count>12</comment_count>
      <attachid>23849</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-09-26 07:17:20 -0700</bug_when>
    <thetext>Created attachment 23849
Layout tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92924</commentid>
    <comment_count>13</comment_count>
      <attachid>23849</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-26 07:21:11 -0700</bug_when>
    <thetext>Comment on attachment 23849
Layout tests

The layout tests look fine.  Assuming they are available under the standard webkit licenses.  This will need a ChangeLog, and some edits to the Skipped files on the various platforms which do not yet have wml support.  I&apos;m gonna clear the flag, and we can land this once the other pieces are reviewed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92926</commentid>
    <comment_count>14</comment_count>
      <attachid>23850</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-09-26 07:25:25 -0700</bug_when>
    <thetext>Created attachment 23850
WML directory patch

These are the WML nodes.  There might be some style issues but I would really rather fix these once in trunk so we can avoid the constant merge errors that pop up on us.  We can do those style fixes immediately right in svn once the code is in, but delaying it further because of style will really delay it a long long time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92931</commentid>
    <comment_count>15</comment_count>
      <attachid>23850</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-26 08:13:21 -0700</bug_when>
    <thetext>Comment on attachment 23850
WML directory patch

Ok, here are a few thoughts.

I&apos;m not really sure how we go about landing such a large hunk of code.  Obviously the parts that touch the core code will need to be wrapped in ENABLE(WML).

I&apos;m not &quot;sure&quot; that WebKit wants WML support, but I also don&apos;t see reasons to suggest that it does not.  I sorta thought WML was dead.

200k is too large of a patch for me to really review fully, but I&apos;ll at least provide some thoughts on the code.

Minor style violations:
69     }
 70     else
(I hate that we even have to care about these!  Tools should take care of this for us!)

I&apos;m not really a fan of the &quot;Helper&quot; paradigm.  Helpers tend to be misc-buckets.  It seems this one is too.

WMLHelper::tokenizer()-&gt;
So I guess this is basically just a global shared tokenizer?  We haven&apos;t handled error reporting for SVG either, but I think normally the way you access the tokenizer is through your document object.  Which would mean we don&apos;t need this global here.

WMLHelper::currentBrwContext()-&gt;
What&apos;s a BrwContext?  It&apos;s not clear from the code.  I&apos;m not sure I found the right WML spec, but I searched for Brw and didn&apos;t find it mentioned anywhere.

I&apos;m not sure this belongs on &quot;WMLHelper&quot; either:
WMLHelper::hasVariableRef(
Why not WMLElement?

Minor style:
 43     : HTMLAnchorElement(name, doc), m_task(0)
Those are generally 1-per-line.  Again, its *stupid* that you, the programmer, should have to care about this... a script should handle this...

Whoever wrote this seems to like to add extra lines at the end of classes too:
 private:
 42 
 43     WMLTaskElement* m_task;
 44 
 45 };

FYI, there is a patch posted to change this syntax:
4 generateFactory=&quot;1&quot;
 5 generateWrapperFactory=&quot;1&quot;

I would think normal assignment should be sufficient here?
    for (VariableMap::iterator it = vars.begin(); it != vars.end(); ++it) { 
 77         m_variables.set(it-&gt;first, it-&gt;second); 
 78

So does WMLBrwContext have the same lifetime as the page?  aka, the WebView?
 41 WMLBrwContext::WMLBrwContext(Page* page)

Why is this safe?
void WMLBrwContext::setNeedCheckDeckAccess(bool need)
 124 {
 125     if (m_hasDeckAccess &amp;&amp; need) {
 126         WMLHelper::tokenizer()-&gt;reportError(MultiAccessElementsError);
 127
Are we guarenteed to still be parsing at that time?  In the HTML/XML world, your tokenizer might not still be alive once you&apos;re done parsing.

So it seems Brw is actually an abbreviation for &quot;Browser&quot; and Brw is actually just an extension of Page, to handle a few WML-specific attributes.  Seems this all should go on Page as part of some WMLController sorta thing.

 57     , m_hasIntrEvent(false)
no need to abbreviate here.

Seems this should be an OwnPtr:
 73     WMLIntrinsicEventHandler* m_evntHandler;

Generally we encourage longer/more-descriptive naming:
 75     WMLIntrEventType etype = Unknown;

eventType in this case.

WebKit, for better or worse, is against { } on single line ifs:
    if (attr-&gt;name() == titleAttr) {
 78         m_title = WMLHelper::substituteVarRef(attr-&gt;value(), document());
 79     } else if (attr-&gt;name() == onenterforwardAttr) {
 80
again, it&apos;s stupid that you should even have to think about that... since a script shoudl do that for you.

Instead of using an enum and then an if:
 73 void WMLCardElement::parseMappedAttribute(MappedAttribute* attr)

should be changed to have 
 92     if (etype != Unknown) {

be a function which is called. 

 95         Element* go = WMLElementFactory::createWMLElement(qName, document(), false); 
Should use a RefPtr, no?  createWMLElement shoudl return a PassRefPtr

 94         QualifiedName qName(&quot;go&quot;, &quot;go&quot;, &quot;&quot;);
I don&apos;t think you meant for that to be &quot;go:go&quot;, also why not use:
WMLNames::goTag?

 97         go-&gt;setAttributeNS(&quot;&quot;, &quot;href&quot;, href, ec);
setAttribute?

 100         ev.task = static_cast&lt;WMLGoElement*&gt;(go);
One could have called WMLElementFactory::createGoElement() directly, or?

Why is visability tracked by hand?
 120 void WMLCardElement::setVisibility(bool isVisible) 
instead of using css styling?

Seems odd to clear the old timer on error:
75     // only one timer is allowed in a card 
 176     if (!m_evtTimer) {
 177         m_evtTimer = timer;
 178     } else {
 179         m_evtTimer = 0;
 180         WMLHelper::tokenizer()-&gt;reportError(MultiTimerElementsError);
 181     }

Please use early-return instead of a long if:
void WMLCardElement::registerDoElement(WMLDoElement* e)
 190 {
 191     if (e) {
 192         Vector&lt;WMLDoElement*&gt;::iterator it = m_doVecs.begin();
 193

Please use more descriptive variable names:
 193         WMLDoElement* doe = 0;

Same issue as before about safely of accessing tokenizer, and that it probably should be accessed through the document() instead of via this global:
            if (doe-&gt;doName() == e-&gt;doName()) {
 198                 WMLHelper::tokenizer()-&gt;reportError(SameNameDoElementsError);
 199


We use full english sentence names instead of abbreviations when possible:
 235 void WMLCardElement::handleIntrEventIfNeeded()

eventType:
 242     WMLIntrEventType etype;

Same as before:
 235 void WMLCardElement::handleIntrEventIfNeeded()

instead of using an enum, and then if&apos;s this should have used function calls.  Seems like a strange paradigm to me.

I got about 1/5th of the way through teh patch,but already there are plenty of comments to act on.

Thanks for the patch, but I think we should digest it in smaller chunks.  Landing large sections of code which were developed outside of the main tree is *hard*  (I know, believe me... I&apos;m doing ti righ tnow for Chrome), but I do think there is value in the review process.

If you wanted to land this all on a branch and then work to update the branch over a set of reviews, that would be fine with me too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>92933</commentid>
    <comment_count>16</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-26 08:23:32 -0700</bug_when>
    <thetext>I talked about this with mjs.  He and I are OK with corner-cutting to get WML landed.  Obviously it will have some issues, but as long as the parts which touch core-code are sane, and well locked off in ENABLE(WML) I think it&apos;s OK to land a not-quite-perfect &quot;wml&quot; directory.

How about you post the patches necessary to all of the WebKit core code and we get that reviewed and landed?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93044</commentid>
    <comment_count>17</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-09-27 08:29:57 -0700</bug_when>
    <thetext>What is more desired for the rest of the patches?  One bit at a time checked in, or all of it in one shot?  None of it is really useful on its own but it shouldn&apos;t break the build or interfere with anything if it&apos;s checked in piecewise.  I could break it down per-directory, per-file, or perhaps some other way?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93427</commentid>
    <comment_count>18</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-09-30 14:00:19 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; What is more desired for the rest of the patches?  One bit at a time checked
&gt; in, or all of it in one shot?  None of it is really useful on its own but it
&gt; shouldn&apos;t break the build or interfere with anything if it&apos;s checked in
&gt; piecewise.  I could break it down per-directory, per-file, or perhaps some
&gt; other way?
&gt; 

Most interesting to me is to see the core-changes first.  We could check in the wml directory alone... but that seems a little silly since it&apos;s easy for you all to add those locally (check out another svn repo inside an svn checkout), but the core changes are what you&apos;ll actually need in over time, and the core changes are most of what we care about.  Maybe we can talk this out on IRC today, and get the core stuff reviewed today?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>93431</commentid>
    <comment_count>19</comment_count>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-09-30 14:19:07 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Most interesting to me is to see the core-changes first.  We could check in the
&gt; wml directory alone... but that seems a little silly since it&apos;s easy for you
&gt; all to add those locally (check out another svn repo inside an svn checkout),
&gt; but the core changes are what you&apos;ll actually need in over time, and the core
&gt; changes are most of what we care about.  Maybe we can talk this out on IRC
&gt; today, and get the core stuff reviewed today?

Okay, I will generate the diff in the next day or two.  Question is, in one piece, broken down by directory, or some attempt to do it by sub-feature?  It&apos;s kind of hard to do the last one though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94335</commentid>
    <comment_count>20</comment_count>
      <attachid>24139</attachid>
    <who name="George Staikos">staikos</who>
    <bug_when>2008-10-06 23:05:45 -0700</bug_when>
    <thetext>Created attachment 24139
All the bits that integrate with existing code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>94337</commentid>
    <comment_count>21</comment_count>
      <attachid>24139</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2008-10-06 23:42:13 -0700</bug_when>
    <thetext>Comment on attachment 24139
All the bits that integrate with existing code

Changes to DerivedSources.make need to be conditional based on ENABLE_WML.

Seems like you&apos;re using an old version of Xcode.  Which is OK, but causes 2 needless changes to the project file.

The big if in CSSStyleSelector::matchUARules(int&amp; firstUARule, int&amp; lastUARule) is kinda nasty.

* The default style sheet used to render HTML.
should be WML
Are you sure you want all those styles?  If you want to be so close to HTML, why not just override HTML styles instead of being totally separate?

I&apos;m surprised the WML stuff needs its own error message insertion.  Wouldn&apos;t the XML case work?

Why is this needed in XMLTokenizer?
Document *document() const { return m_doc; }

And what private methods does friend class WMLTokenizer; need?  We&apos;ve certainly found friend classes to cause crashes by calling private methods which weren&apos;t expected to be called...  If WMLTokenizer is a subclass of XMLTokenizer (as later code would suggest) then methods should be protected instead of using a friend class.

Globals are a bad idea here:
WMLHelper::currentBrwContext()-&gt;setNeedCheckDeckAccess(true);
as I mentioned in my review of the wml/ directory.

this is the wrong place to make this change:
#if ENABLE(WML)
 750     if (m_doc-&gt;isWMLDocument())
 751         newElement = WMLElementFactory::createWMLElement(qName, m_doc, true);
 752     else
 753 #endif
 754         newElement = m_doc-&gt;createElement(qName, true, ec);

There is a unified createElementNS which handles farming out element creation to different factories.  I take it that having a WML element inside an XML document would be bad news?  And vice-versa?

void BackForwardList::clearState()
is a bad method name.  What is &quot;state&quot; in this context?


Why?
#if ENABLE(WML)
 123     friend class WMLImageElement;
 124 #endif

There is already an abstraction for SVGImageLoader and HTMLImageLoader (at least I think there is), maybe you need WML image loader instead of hackign into HTMLImageLoader?

So it seems like you&apos;re subclassing HTML elements in order to add WML-specific behavior?  Could CSS be used for any of this?  Subclasses don&apos;t need friend declarations.  Instead things should be moved to &quot;protected&quot; to allow subclasses to access them.

TorchMobile is the only copyright I see adding a URL. :)

Why does WML need &quot;Force reload&quot;?

ResourceLoader didRecieveData is the wrong place to hack in WBXML decoding, IMO.  I&apos;m not sure what the right place is thought, but probably in whatever handles decoding of the main resource.  For example in sub-resources, the CachedResource subclasses all handle their own decoding in their add data methods.

Why does &quot;up&quot; and &quot;down&quot; mean something on a WML page that&apos;s different from on any other page?  It seems that you&apos;re using ENABLE(WML) To mean PLATFORM(TORCH_MOBILE) in this case.

WMLBrwContext really needs a better name.  It&apos;s WMLPageData or something like that.  It&apos;s data you want to hang off of the page object which is WML specific.  It probably shouldn&apos;t be ref-counted, but should instead be OwnPtr on the Page, but I&apos;m not sure about it&apos;s lifetime.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96847</commentid>
    <comment_count>22</comment_count>
      <attachid>24708</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-10-28 03:58:07 -0700</bug_when>
    <thetext>Created attachment 24708
WML module

update patch for the WML implementaion. including
1) fix some code styles incompliant, such as braces,names, #include statements sorted order.
2) According to Eric&apos;s good advices, rededsign the implemention in part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96848</commentid>
    <comment_count>23</comment_count>
      <attachid>24709</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-10-28 04:03:45 -0700</bug_when>
    <thetext>Created attachment 24709
WebCore touched by WML

As per Eric&apos;s good suggestion, updated the WebCore-changes related to WML implementaion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96849</commentid>
    <comment_count>24</comment_count>
      <attachid>24710</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-10-28 04:06:29 -0700</bug_when>
    <thetext>Created attachment 24710
The whole submit for Adding WML

It is generated based on the latest version of Webkit: 37922. and has been verified.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96851</commentid>
    <comment_count>25</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-10-28 04:26:29 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; (From update of attachment 24139 [edit])
&gt; Changes to DerivedSources.make need to be conditional based on ENABLE_WML.
&gt; Seems like you&apos;re using an old version of Xcode.  Which is OK, but causes 2
&gt; needless changes to the project file.
&gt; The big if in CSSStyleSelector::matchUARules(int&amp; firstUARule, int&amp; lastUARule)
&gt; is kinda nasty.

You&apos;re right, it should not affect the old code. Has fixed.

&gt; * The default style sheet used to render HTML.
&gt; should be WML
&gt; Are you sure you want all those styles?  If you want to be so close to HTML,
&gt; why not just override HTML styles instead of being totally separate?

Actually, some style is WML specific, I think we&apos;d better use WML own css file.

&gt; I&apos;m surprised the WML stuff needs its own error message insertion.  Wouldn&apos;t
&gt; the XML case work?

Yes, It doesn&apos;t work.

&gt; Why is this needed in XMLTokenizer?
&gt; Document *document() const { return m_doc; }
&gt; And what private methods does friend class WMLTokenizer; need?  We&apos;ve certainly
&gt; found friend classes to cause crashes by calling private methods which weren&apos;t
&gt; expected to be called...  If WMLTokenizer is a subclass of XMLTokenizer (as
&gt; later code would suggest) then methods should be protected instead of using a
&gt; friend class.

All the friend class related to WML has been removed.

&gt; Globals are a bad idea here:
&gt; WMLHelper::currentBrwContext()-&gt;setNeedCheckDeckAccess(true);
&gt; as I mentioned in my review of the wml/ directory.

It has been fixed.

&gt; this is the wrong place to make this change:
&gt; #if ENABLE(WML)
&gt;  750     if (m_doc-&gt;isWMLDocument())
&gt;  751         newElement = WMLElementFactory::createWMLElement(qName, m_doc,
&gt; true);
&gt;  752     else
&gt;  753 #endif
&gt;  754         newElement = m_doc-&gt;createElement(qName, true, ec);
&gt; There is a unified createElementNS which handles farming out element creation
&gt; to different factories.  I take it that having a WML element inside an XML
&gt; document would be bad news?  And vice-versa?

It has been fixed.

&gt; void BackForwardList::clearState()
&gt; is a bad method name.  What is &quot;state&quot; in this context?

has updated the name.

&gt; Why?
&gt; #if ENABLE(WML)
&gt;  123     friend class WMLImageElement;
&gt;  124 #endif
&gt; There is already an abstraction for SVGImageLoader and HTMLImageLoader (at
&gt; least I think there is), maybe you need WML image loader instead of hackign
&gt; into HTMLImageLoader?

Using new image loader for WML is big cost since its primary work is the same with HTMLImageloader. After all, WML Image is a HTML image. 


&gt; So it seems like you&apos;re subclassing HTML elements in order to add WML-specific
&gt; behavior?  Could CSS be used for any of this?  Subclasses don&apos;t need friend
&gt; declarations.  Instead things should be moved to &quot;protected&quot; to allow
&gt; subclasses to access them.

According to my original design principle, I don&apos;t want to touch WebCore&apos;s code too much, and try to reuse the HTML code. But what you said is right, I have modified them. 

&gt; TorchMobile is the only copyright I see adding a URL. :)
&gt; Why does WML need &quot;Force reload&quot;?
&gt; ResourceLoader didRecieveData is the wrong place to hack in WBXML decoding,
&gt; IMO.  I&apos;m not sure what the right place is thought, but probably in whatever
&gt; handles decoding of the main resource.  For example in sub-resources, the
&gt; CachedResource subclasses all handle their own decoding in their add data
&gt; methods.
I have move the WBXML decoding to MainResoureLoader. Maybe it&apos;s better.

&gt; Why does &quot;up&quot; and &quot;down&quot; mean something on a WML page that&apos;s different from on
&gt; any other page?  It seems that you&apos;re using ENABLE(WML) To mean
&gt; PLATFORM(TORCH_MOBILE) in this case.
Since it&apos;s Platform specific, I have removed it.

&gt; WMLBrwContext really needs a better name.  It&apos;s WMLPageData or something like
&gt; that.  It&apos;s data you want to hang off of the page object which is WML specific.
&gt;  It probably shouldn&apos;t be ref-counted, but should instead be OwnPtr on the
&gt; Page, but I&apos;m not sure about it&apos;s lifetime.
Has renamed it.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98491</commentid>
    <comment_count>26</comment_count>
      <attachid>24709</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-12 10:51:20 -0800</bug_when>
    <thetext>Comment on attachment 24709
WebCore touched by WML

Patch looks great, almost r+. Some minors issues:

DOMImplementation.cpp
&gt; +
&gt; +#if ENABLE(WML)
&gt; +    if ((type == &quot;text/vnd.wap.wml&quot;)
&gt; +#if ENABLE(WBXML)
&gt; +        || (type == &quot;application/vnd.wap.wmlc&quot;)
&gt; +#endif
&gt; +        )

Extra parenthesis around (type == ..) are superflous. Please remove.

XMLTokenizer.h:
&gt; +        Document *document() const { return m_doc; }
&gt; +

Should read &quot;Document* document()...&quot;

HTMLSelectElement:
&gt;  void HTMLSelectElement::setMultiple(bool multiple)
&gt;  {
&gt; +#if ENABLE(WML)
&gt; +    m_multiple = multiple;
&gt; +#else
&gt;      setAttribute(multipleAttr, multiple ? &quot;&quot; : 0);
&gt; +#endif
&gt;  }

When enabling WML, this would affect HTML as well, is altering m_multiple really desired? When looking through the code, m_multiple is set through parseMappedAttribute, and in general most HTMLElement derived classes exposing setXXXValue / xxxValue functions are supposed to modify the corresponding attribute values through setAttribute. Alterin m_multiple violates this pattern. What&apos;s the reason?

MainResourceLoader.cpp:
&gt; +#if ENABLE(WBXML)
&gt; +    if (length &amp;&amp; m_response.mimeType() == &quot;application/vnd.wap.wmlc&quot;) {
&gt; +        printf(&quot;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  decode wbxml document\n&quot;);
&gt; +        printf(&quot;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  decode wbxml document\n&quot;);
&gt; +        printf(&quot;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;&gt;  decode wbxml document\n&quot;);
&gt; +        WB_UTINY *wbxml = (WB_UTINY*)data;
&gt; +        WB_ULONG wbxml_len = length;
&gt; +        WB_ULONG xml_len = 0;
&gt; +        WB_UTINY *xml = 0;
&gt; +        WBXMLError ret = WBXML_OK; 
&gt; +        WBXMLGenXMLParams params;
&gt; + 
&gt; +        // Init Default Parameters
&gt; +        params.lang = WBXML_LANG_UNKNOWN;
&gt; +        params.gen_type = WBXML_GEN_XML_INDENT;
&gt; +        params.indent = 1;
&gt; +        params.keep_ignorable_ws = FALSE;
&gt; + 
&gt; +        ret = wbxml_conv_wbxml2xml_withlen(wbxml, wbxml_len, &amp;xml, &amp;xml_len, &amp;params);
&gt; +        if (ret != WBXML_OK)
&gt; +            return;
&gt; +        data = (char*)xml;
&gt; +        length = xml_len;
&gt; +    }
&gt; +#endif
That looks hackish overall. Please move stars -&gt; &quot;WB_UTINY *wbxml&quot; -&gt; &quot;WB_UTINY* wbxml&quot;.
C style casts should be changed to static/reinterpret cast.

Anything else looks sane!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98493</commentid>
    <comment_count>27</comment_count>
      <attachid>25098</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-12 11:17:27 -0800</bug_when>
    <thetext>Created attachment 25098
WebCore touched by WML (v2)

Fixed all issues I outlined in the previous comment. r?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98757</commentid>
    <comment_count>28</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-14 01:56:12 -0800</bug_when>
    <thetext>
Thank zimmermann for your comments.


(In reply to comment #26)
&gt; HTMLSelectElement:
&gt; &gt;  void HTMLSelectElement::setMultiple(bool multiple)
&gt; &gt;  {
&gt; &gt; +#if ENABLE(WML)
&gt; &gt; +    m_multiple = multiple;
&gt; &gt; +#else
&gt; &gt;      setAttribute(multipleAttr, multiple ? &quot;&quot; : 0);
&gt; &gt; +#endif
&gt; &gt;  }
&gt; When enabling WML, this would affect HTML as well, is altering m_multiple
&gt; really desired? When looking through the code, m_multiple is set through
&gt; parseMappedAttribute, and in general most HTMLElement derived classes exposing
&gt; setXXXValue / xxxValue functions are supposed to modify the corresponding
&gt; attribute values through setAttribute. Alterin m_multiple violates this
&gt; pattern. What&apos;s the reason?

* Yes, we&apos;d better set value of class member with setXXXX() method by convetion.
In some cases WMLSelectElement needs to update the HTMLSelectElement::m_multiple but HTMLSelectElement::setMultiple() doesn&apos;t support it. I think we needn&apos;t to add new method for HTMLSelectElement and WMLSelectElement to implement that. 
Of cource, you are right. we should  not affect HTML while WML is enabled. I have fixed it in my new patch.


&gt; MainResourceLoader.cpp:
&gt; &gt; +#if ENABLE(WBXML)
&gt; &gt; +    if (length &amp;&amp; m_response.mimeType() == &quot;application/vnd.wap.wmlc&quot;) {
&gt; &gt; +        WB_UTINY *wbxml = (WB_UTINY*)data;
&gt; &gt; +        WB_ULONG wbxml_len = length;
&gt; &gt; +        WB_ULONG xml_len = 0;
&gt; &gt; +        WB_UTINY *xml = 0;
&gt; &gt; +        WBXMLError ret = WBXML_OK; 
&gt; &gt; +        WBXMLGenXMLParams params;
&gt; &gt; + 
&gt; &gt; +        // Init Default Parameters
&gt; &gt; +        params.lang = WBXML_LANG_UNKNOWN;
&gt; &gt; +        params.gen_type = WBXML_GEN_XML_INDENT;
&gt; &gt; +        params.indent = 1;
&gt; &gt; +        params.keep_ignorable_ws = FALSE;
&gt; &gt; + 
&gt; &gt; +        ret = wbxml_conv_wbxml2xml_withlen(wbxml, wbxml_len, &amp;xml, &amp;xml_len, &amp;params);
&gt; &gt; +        if (ret != WBXML_OK)
&gt; &gt; +            return;
&gt; &gt; +        data = (char*)xml;
&gt; &gt; +        length = xml_len;
&gt; &gt; +    }
&gt; &gt; +#endif
&gt; That looks hackish overall. Please move stars -&gt; &quot;WB_UTINY *wbxml&quot; -&gt;
&gt; &quot;WB_UTINY* wbxml&quot;.
&gt; C style casts should be changed to static/reinterpret cast.

* Thanks for your advice and new patch. I did slight change for your update
about this issue because (const char*)data can&apos;t be casted to WB_UTINY* directly.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98761</commentid>
    <comment_count>29</comment_count>
      <attachid>25165</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-14 02:21:59 -0800</bug_when>
    <thetext>Created attachment 25165
WebCore touched by WML(v3)

This mew patch includes Zimmermann&apos;s update and the fixes for all the issues the comments #26 mentioned.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98763</commentid>
    <comment_count>30</comment_count>
      <attachid>25166</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-14 02:30:17 -0800</bug_when>
    <thetext>Created attachment 25166
WML module (v2)

Because EventNames namespace has been discarded in the version 38361 of Webkit, WML module needs updating.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98764</commentid>
    <comment_count>31</comment_count>
      <attachid>25167</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-14 02:37:48 -0800</bug_when>
    <thetext>Created attachment 25167
The whole submit for Adding WML (v2)

this patch includes all the changes for adding WML to webkit(25165, 25166 and layouttests), which is generated based on the revision: 38361</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98765</commentid>
    <comment_count>32</comment_count>
      <attachid>25168</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-14 02:49:57 -0800</bug_when>
    <thetext>Created attachment 25168
Layout test cases for wml

layout test cases for WML. it adds some new test cases and resoure files comparing with the last version</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98766</commentid>
    <comment_count>33</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-14 02:52:36 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; Created an attachment (id=25167) [review]
&gt; The whole submit for Adding WML (v2)
&gt; this patch includes all the changes for adding WML to webkit(25165, 25166 and
&gt; layouttests), which is generated based on the revision: 38361

correction: patch &quot;The whole submit for Adding WML (v2)&quot; doesn&apos;t contain the layout test cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98821</commentid>
    <comment_count>34</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-14 14:05:26 -0800</bug_when>
    <thetext>Hi Yichao,

I&apos;m working on a whole new revision of this patch, actually working in non-Qt environments, most noticeable: Mac/Cocoa. WMLTokenizer is tied to Qt at the moment, I&apos;ll fix that.
 
&gt; * Yes, we&apos;d better set value of class member with setXXXX() method by
&gt; convetion.
&gt; In some cases WMLSelectElement needs to update the
&gt; HTMLSelectElement::m_multiple but HTMLSelectElement::setMultiple() doesn&apos;t
&gt; support it. I think we needn&apos;t to add new method for HTMLSelectElement and
&gt; WMLSelectElement to implement that. 
&gt; Of cource, you are right. we should  not affect HTML while WML is enabled. I
&gt; have fixed it in my new patch.

I think you don&apos;t need to change setMultiple in any way, because the setAttribute() call will immediately call parseMappedAttribute, which takes care of setting m_multiple to the correct value.
 
&gt; * Thanks for your advice and new patch. I did slight change for your update
&gt; about this issue because (const char*)data can&apos;t be casted to WB_UTINY*
&gt; directly.

Great, I&apos;ll take that into account.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98983</commentid>
    <comment_count>35</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-16 18:23:14 -0800</bug_when>
    <thetext>(In reply to comment #34)
&gt; Hi Yichao,
&gt; I&apos;m working on a whole new revision of this patch, actually working in non-Qt
&gt; environments, most noticeable: Mac/Cocoa. WMLTokenizer is tied to Qt at the
&gt; moment, I&apos;ll fix that.

* Thanks zimmermann! Yes, what I submitted this time is just for Qt. Actually, For Mac, we are using libxml2 to parse the WML document. The related code is in XMLTokenizerLibxml2.cpp. Because I have no the Mac envrionment, George has ever planned to verify the code. But I guess he is too busy to do that. Anyway, I will upload the patch to bugzilla for your reivew later.

&gt; &gt; * Yes, we&apos;d better set value of class member with setXXXX() method by
&gt; &gt; convetion.
&gt; &gt; In some cases WMLSelectElement needs to update the
&gt; &gt; HTMLSelectElement::m_multiple but HTMLSelectElement::setMultiple() doesn&apos;t
&gt; &gt; support it. I think we needn&apos;t to add new method for HTMLSelectElement and
&gt; &gt; WMLSelectElement to implement that. 
&gt; &gt; Of cource, you are right. we should  not affect HTML while WML is enabled. I
&gt; &gt; have fixed it in my new patch.
&gt; I think you don&apos;t need to change setMultiple in any way, because the
&gt; setAttribute() call will immediately call parseMappedAttribute, which takes
&gt; care of setting m_multiple to the correct value.

* You are right. But WMLSelectElement::parseMappedAttribute can&apos;t update the m_multiple directly because it is private. thus we have to make m_multiple protected or let HTMLSelectElement class to offer new method setXXXX to let its subclass to set m_multiple. Obviously, the latter is better. but it&apos;t not easy to name the new method properly, you know, setMultiple() exists and it&apos;s supposed to be used to update the m_multiple member of HTMLSelectElement class in general. That&apos;s why I decide to hack it in HTMLSelectElement::setMultple() for WMLSelectElement. How do you think about it?

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98984</commentid>
    <comment_count>36</comment_count>
      <attachid>25205</attachid>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-16 18:51:40 -0800</bug_when>
    <thetext>Created attachment 25205
XMLTokenizerLibxml2.patch

this xml tokenizer is used to parse WML document with libxml2 for non-Qt platform</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99018</commentid>
    <comment_count>37</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-17 05:42:36 -0800</bug_when>
    <thetext>(In reply to comment #35)
&gt; (In reply to comment #34)
&gt; &gt; Hi Yichao,
&gt; &gt; I&apos;m working on a whole new revision of this patch, actually working in non-Qt
&gt; &gt; environments, most noticeable: Mac/Cocoa. WMLTokenizer is tied to Qt at the
&gt; &gt; moment, I&apos;ll fix that.
&gt; 
&gt; * Thanks zimmermann! Yes, what I submitted this time is just for Qt. Actually,
&gt; For Mac, we are using libxml2 to parse the WML document. The related code is in
&gt; XMLTokenizerLibxml2.cpp. Because I have no the Mac envrionment, George has ever
&gt; planned to verify the code. But I guess he is too busy to do that. Anyway, I
&gt; will upload the patch to bugzilla for your reivew later.
&gt; 
&gt; &gt; &gt; * Yes, we&apos;d better set value of class member with setXXXX() method by
&gt; &gt; &gt; convetion.
&gt; &gt; &gt; In some cases WMLSelectElement needs to update the
&gt; &gt; &gt; HTMLSelectElement::m_multiple but HTMLSelectElement::setMultiple() doesn&apos;t
&gt; &gt; &gt; support it. I think we needn&apos;t to add new method for HTMLSelectElement and
&gt; &gt; &gt; WMLSelectElement to implement that. 
&gt; &gt; &gt; Of cource, you are right. we should  not affect HTML while WML is enabled. I
&gt; &gt; &gt; have fixed it in my new patch.
&gt; &gt; I think you don&apos;t need to change setMultiple in any way, because the
&gt; &gt; setAttribute() call will immediately call parseMappedAttribute, which takes
&gt; &gt; care of setting m_multiple to the correct value.
&gt; 
&gt; * You are right. But WMLSelectElement::parseMappedAttribute can&apos;t update the
&gt; m_multiple directly because it is private. thus we have to make m_multiple
&gt; protected or let HTMLSelectElement class to offer new method setXXXX to let its
&gt; subclass to set m_multiple. Obviously, the latter is better. but it&apos;t not easy
&gt; to name the new method properly, you know, setMultiple() exists and it&apos;s
&gt; supposed to be used to update the m_multiple member of HTMLSelectElement class
&gt; in general. That&apos;s why I decide to hack it in HTMLSelectElement::setMultple()
&gt; for WMLSelectElement. How do you think about it?

Hi Yichao,

as we discussed in private mails, the idea is that WMLSelectElement doesn&apos;t inherit from HTMLSelectElement at all, but instead we should have a common SelectElement base-class for both of them. That&apos;ll resolve all these problems, patch upcoming soon.

Greetings,
Niko</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99114</commentid>
    <comment_count>38</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-11-17 14:22:37 -0800</bug_when>
    <thetext>Cleared all review flaqgs. The WML support will be added in chunks, to ease reviewing.
WMLTokenizer shouldn&apos;t be needed and the integration within WebCore can be done much better - as has been discussed in private mails with Yichao &amp; George.

The patch &quot;The whole submit for Adding WML (v2)&quot; will be converted to the new design, step-by-step. The first bug covering this work is 22324. It adds the new design (not relying on a special WMLTokenizer) and some WML elements (card/p/a). More patches following after 22324 landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>99129</commentid>
    <comment_count>39</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2008-11-17 19:33:05 -0800</bug_when>
    <thetext>(In reply to comment #37)
&gt; (In reply to comment #35)
&gt; &gt; (In reply to comment #34)
&gt; &gt; &gt; Hi Yichao,
&gt; &gt; &gt; I&apos;m working on a whole new revision of this patch, actually working in non-Qt
&gt; &gt; &gt; environments, most noticeable: Mac/Cocoa. WMLTokenizer is tied to Qt at the
&gt; &gt; &gt; moment, I&apos;ll fix that.
&gt; &gt; 
&gt; &gt; * Thanks zimmermann! Yes, what I submitted this time is just for Qt. Actually,
&gt; &gt; For Mac, we are using libxml2 to parse the WML document. The related code is in
&gt; &gt; XMLTokenizerLibxml2.cpp. Because I have no the Mac envrionment, George has ever
&gt; &gt; planned to verify the code. But I guess he is too busy to do that. Anyway, I
&gt; &gt; will upload the patch to bugzilla for your reivew later.
&gt; &gt; 
&gt; &gt; &gt; &gt; * Yes, we&apos;d better set value of class member with setXXXX() method by
&gt; &gt; &gt; &gt; convetion.
&gt; &gt; &gt; &gt; In some cases WMLSelectElement needs to update the
&gt; &gt; &gt; &gt; HTMLSelectElement::m_multiple but HTMLSelectElement::setMultiple() doesn&apos;t
&gt; &gt; &gt; &gt; support it. I think we needn&apos;t to add new method for HTMLSelectElement and
&gt; &gt; &gt; &gt; WMLSelectElement to implement that. 
&gt; &gt; &gt; &gt; Of cource, you are right. we should  not affect HTML while WML is enabled. I
&gt; &gt; &gt; &gt; have fixed it in my new patch.
&gt; &gt; &gt; I think you don&apos;t need to change setMultiple in any way, because the
&gt; &gt; &gt; setAttribute() call will immediately call parseMappedAttribute, which takes
&gt; &gt; &gt; care of setting m_multiple to the correct value.
&gt; &gt; 
&gt; &gt; * You are right. But WMLSelectElement::parseMappedAttribute can&apos;t update the
&gt; &gt; m_multiple directly because it is private. thus we have to make m_multiple
&gt; &gt; protected or let HTMLSelectElement class to offer new method setXXXX to let its
&gt; &gt; subclass to set m_multiple. Obviously, the latter is better. but it&apos;t not easy
&gt; &gt; to name the new method properly, you know, setMultiple() exists and it&apos;s
&gt; &gt; supposed to be used to update the m_multiple member of HTMLSelectElement class
&gt; &gt; in general. That&apos;s why I decide to hack it in HTMLSelectElement::setMultple()
&gt; &gt; for WMLSelectElement. How do you think about it?
&gt; Hi Yichao,
&gt; as we discussed in private mails, the idea is that WMLSelectElement doesn&apos;t
&gt; inherit from HTMLSelectElement at all, but instead we should have a common
&gt; SelectElement base-class for both of them. That&apos;ll resolve all these problems,
&gt; patch upcoming soon.
&gt; Greetings,
&gt; Niko

Hi Niko,
Yes, this problem won&apos;t appear for the new design any more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102170</commentid>
    <comment_count>40</comment_count>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2008-12-10 16:04:33 -0800</bug_when>
    <thetext>Marked all but two patches as obsolete.
&apos;The whole submit for Adding WML (v2)&apos; should be left as is, until I&apos;ve completed the merge/rewrite.
&apos;XMLTokenizerLibxml2.patch&apos; is a reminder, that we don&apos;t bail on a missing doctype at the moment, not yet sure if we really want that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>117873</commentid>
    <comment_count>41</comment_count>
    <who name="zaheer">zaheer.mot</who>
    <bug_when>2009-04-16 21:03:07 -0700</bug_when>
    <thetext>wbxml_conv_wbxml2xml_withlen does not support chunked incremetal decoding (pls correct me). If this is true, invoking this from addData where the data is received incrementally may be incorrect. </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118225</commentid>
    <comment_count>42</comment_count>
    <who name="Arun Patole">webkit.arunp</who>
    <bug_when>2009-04-20 22:00:31 -0700</bug_when>
    <thetext>Guys, I would like to know if the stable basic wml support is now available with the latest webkit revision as I still see the status of this issue as &quot;NEW&quot;.

Thanks in advance,
Arun
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119273</commentid>
    <comment_count>43</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-04-29 00:25:25 -0700</bug_when>
    <thetext>(In reply to comment #41)
&gt; wbxml_conv_wbxml2xml_withlen does not support chunked incremetal decoding (pls
&gt; correct me). If this is true, invoking this from addData where the data is
&gt; received incrementally may be incorrect. 

Yeah, actually, this issue has already been fixed in my private branch. But it&apos;s in discussion whether to integrate wbxml2 into WebKit. The support for wbxml is not included in the latest implementation of WML.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119275</commentid>
    <comment_count>44</comment_count>
    <who name="yichao.yin">yichao.yin</who>
    <bug_when>2009-04-29 00:30:03 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Guys, I would like to know if the stable basic wml support is now available
&gt; with the latest webkit revision as I still see the status of this issue as
&gt; &quot;NEW&quot;.
&gt; Thanks in advance,
&gt; Arun

Yes, the basic wml implementation, reimplemented by Niko, has already entered Webkit repository.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135225</commentid>
    <comment_count>45</comment_count>
      <attachid>25205</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2009-07-28 08:36:32 -0700</bug_when>
    <thetext>Comment on attachment 25205
XMLTokenizerLibxml2.patch

Cleared all patches on this bug. Most of the original code has been rewritten and landed over the past months. The remaining work happens in the child-bugs of this master WML bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>303326</commentid>
    <comment_count>46</comment_count>
    <who name="">red47514f7</who>
    <bug_when>2010-11-02 05:54:04 -0700</bug_when>
    <thetext>Maybe add dependency on the following build failures?

https://bugs.webkit.org/show_bug.cgi?id=45956
https://bugs.webkit.org/show_bug.cgi?id=42943</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>394303</commentid>
    <comment_count>47</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-04-28 01:20:56 -0700</bug_when>
    <thetext>WebKit has WML support.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>395572</commentid>
    <comment_count>48</comment_count>
    <who name="Laszlo Gombos">laszlo.gombos</who>
    <bug_when>2011-04-29 15:38:50 -0700</bug_when>
    <thetext>WML support is removed - http://trac.webkit.org/changeset/85256.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22813</attachid>
            <date>2008-08-15 06:06:36 -0700</date>
            <delta_ts>2008-08-23 20:03:34 -0700</delta_ts>
            <desc>Patch to implement WML</desc>
            <filename>webkit-wml.patch</filename>
            <type>text/plain</type>
            <size>335615</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9BU0NJSUNUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAkocmV2aXNpb24gMzU3ODApCisrKyBKYXZhU2Ny
aXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDEy
IEBAIG5hbWVzcGFjZSBXVEYgewogI2VuZGlmCiAgICAgaW5saW5lIGludCB0b0FTQ0lJSGV4VmFs
dWUoaW50IGMpIHsgQVNTRVJUKGlzQVNDSUlIZXhEaWdpdChjKSk7IHJldHVybiBjIDwgJ0EnID8g
YyAtICcwJyA6IChjIC0gJ0EnICsgMTApICYgMHhGOyB9CiAKKyAgICBpbmxpbmUgYm9vbCBpc0FT
Q0lJUHJpbnRhYmxlKGNoYXIgYykgeyByZXR1cm4gYyA+PSAwNDAgJiYgYyA8PSAwMTc2OyB9Cisg
ICAgaW5saW5lIGJvb2wgaXNBU0NJSVByaW50YWJsZSh1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVy
biBjID49IDA0MCAmJiBjIDw9IDAxNzY7IH0KKyNpZiAhQ09NUElMRVIoTVNWQykgfHwgZGVmaW5l
ZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKKyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJUHJpbnRh
YmxlKHdjaGFyX3QgYykgeyByZXR1cm4gYyA+PSAwNDAgJiYgYyA8PSAwMTc2OyB9CisjZW5kaWYK
KyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJUHJpbnRhYmxlKGludCBjKSB7IHJldHVybiBjID49IDA0
MCAmJiBjIDw9IDAxNzY7IH0KIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZp
c2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL3BsdWdpbnMgXAog
ICAgICQoV2ViQ29yZSkvc3RvcmFnZSBcCiAgICAgJChXZWJDb3JlKS94bWwgXAorICAgICQoV2Vi
Q29yZSkvd21sIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCiAjCiAKQEAgLTM3OCw2ICszNzksNyBA
QCBhbGwgOiBcCiAgICAgRG9jVHlwZVN0cmluZ3MuY3BwIFwKICAgICBIVE1MRW50aXR5TmFtZXMu
YyBcCiAgICAgSFRNTE5hbWVzLmNwcCBcCisgICAgV01MTmFtZXMuY3BwIFwKICAgICBKU1NWR0Vs
ZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgXAogICAgIFNWR0VsZW1lbnRGYWN0b3J5LmNwcCBcCiAg
ICAgU1ZHTmFtZXMuY3BwIFwKQEAgLTQ5Myw3ICs0OTUsNyBAQCBYUGF0aEdyYW1tYXIuY3BwIDog
eG1sL1hQYXRoR3JhbW1hci55ICQoCiAKICMgdXNlciBhZ2VudCBzdHlsZSBzaGVldHMKIAotVVNF
Ul9BR0VOVF9TVFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3Jl
KS9jc3MvcXVpcmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3MgJChXZWJDb3Jl
KS9jc3Mvc3ZnLmNzcyAKK1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRTID0gJChXZWJDb3JlKS9jc3Mv
aHRtbDQuY3NzICQoV2ViQ29yZSkvY3NzL3F1aXJrcy5jc3MgJChXZWJDb3JlKS9jc3Mvdmlldy1z
b3VyY2UuY3NzICQoV2ViQ29yZSkvY3NzL3N2Zy5jc3MgJChXZWJDb3JlKS9jc3Mvd21sLmNzcwog
VXNlckFnZW50U3R5bGVTaGVldHMuaCA6IGNzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5wbCAkKFVT
RVJfQUdFTlRfU1RZTEVfU0hFRVRTKQogCXBlcmwgJDwgJEAgVXNlckFnZW50U3R5bGVTaGVldHNE
YXRhLmNwcCAkKFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTKQogCkBAIC01MjksNiArNTMxLDkgQEAg
ZW5kaWYKIFhNTE5hbWVzLmNwcCA6IGRvbS9tYWtlX25hbWVzLnBsIHhtbC94bWxhdHRycy5pbgog
CXBlcmwgLUkgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tYXR0cnMgJChXZWJDb3Jl
KS94bWwveG1sYXR0cnMuaW4KIAorV01MTmFtZXMuY3BwIDogZG9tL21ha2VfbmFtZXMucGwgd21s
L1dNTFRhZ05hbWVzLmluIHdtbC9XTUxBdHRyaWJ1dGVOYW1lcy5pbgorCXBlcmwgLUkgJChXZWJD
b3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tdGFncyAkKFdlYkNvcmUpL3dtbC9XTUxUYWdOYW1l
cy5pbiAtLWF0dHJzICQoV2ViQ29yZSkvd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluIC0tb3V0cHV0
IC4KKwogIyAtLS0tLS0tLQogCiBpZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1NWRywkKEZFQVRV
UkVfREVGSU5FUykpLCBFTkFCTEVfU1ZHKQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgd2luMzItZysr
IHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSUNPTkRBVEFCQVNFPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9JQ09OREFUQUJBU0U9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFUSD0u
KTogREVGSU5FUyArPSBFTkFCTEVfWFBBVEg9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
WEJMPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YQkw9MQorIyFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfV01MPS4pOiBERUZJTkVTICs9IEVOQUJMRV9XTUw9MQogIWNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9TVkc9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWRz0xCiAjIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9TVkdfRk9OVFM9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19GT05UUz0xCiAhY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19GSUxURVJTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9T
VkdfRklMVEVSUz0xCkBAIC0xNTIsNiArMTUzLDcgQEAgSU5DTFVERVBBVEggKz0gICQkUFdEIFwK
ICAgICAgICAgICAgICAgICAkJFBXRC9oaXN0b3J5IFwKICAgICAgICAgICAgICAgICAkJFBXRC94
bWwgXAogICAgICAgICAgICAgICAgICQkUFdEL2h0bWwgXAorICAgICAgICAgICAgICAgICQkUFdE
L3dtbCBcCiAgICAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3MvanMgXAogICAgICAgICAgICAg
ICAgICQkUFdEL3N2ZyBcCiAgICAgICAgICAgICAgICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMgXApAQCAtMTI1MCw2ICsxMjUyLDUwIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9Y
Qkw9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9YQkw9MQog
fQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPTEpIHsKKyAgICBTT1VSQ0VTICs9IFwK
KyAgICAgICAgd21sL1dNTERvY3VtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxUb2tlbml6ZXIu
Y3BwIFwKKyAgICAgICAgd21sL1dNTEVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTENhcmRF
bGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxBRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwv
V01MQW5jaG9yRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MVGFza0VsZW1lbnQuY3BwIFwK
KyAgICAgICAgd21sL1dNTFByZXZFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxHb0VsZW1l
bnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFJlZnJlc2hFbGVtZW50LmNwcCBcCisgICAgICAgIHdt
bC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxTZXR2YXJFbGVtZW50
LmNwcCBcCisgICAgICAgIHdtbC9XTUxFbGVtZW50RmFjdG9yeS5jcHAgXAorICAgICAgICB3bWwv
V01MQnJ3Q29udGV4dC5jcHAgXAorICAgICAgICB3bWwvV01MRG9FbGVtZW50LmNwcCBcCisgICAg
ICAgIHdtbC9XTUxUZXh0LmNwcCBcCisgICAgICAgIHdtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3Bw
IFwKKyAgICAgICAgd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgXAorICAgICAgICB3
bWwvV01MVGltZXJFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxIZWxwZXIuY3BwIFwKKyAg
ICAgICAgd21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFNlbGVjdEVs
ZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwIFwKKyAgICAgICAg
d21sL1dNTElucHV0RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MVGFibGVFbGVtZW50LmNw
cCBcCisgICAgICAgIHdtbC9XTUxJbWFnZUVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFBF
bGVtZW50LmNwcAorCisgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1dN
TD0xCisKKyAgICBXTUxfTkFNRVMgPSAkJFBXRC93bWwvV01MVGFnTmFtZXMuaW4KKworICAgIHdt
bG5hbWVzX2Eub3V0cHV0ID0gJCRHRU5FUkFURURfU09VUkNFU19ESVIvV01MTmFtZXMuY3BwCisg
ICAgd21sbmFtZXNfYS5jb21tYW5kcyA9IHBlcmwgJCRQV0Qva3N2ZzIvc2NyaXB0cy9tYWtlX25h
bWVzLnBsIC0tdGFncyAkJFBXRC93bWwvV01MVGFnTmFtZXMuaW4gLS1hdHRycyAkJFBXRC93bWwv
V01MQXR0cmlidXRlTmFtZXMuaW4gLS1uYW1lc3BhY2UgV01MIC0tY3BwTmFtZXNwYWNlIFdlYkNv
cmUgLS1uYW1lc3BhY2VVUkkgJ2h0dHA6Ly93d3cud2FwZm9ydW0ub3JnLycgIC0tYXR0cnNOdWxs
TmFtZXNwYWNlIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiIC0tb3V0cHV0ICQk
R0VORVJBVEVEX1NPVVJDRVNfRElSCisgICAgd21sbmFtZXNfYS5pbnB1dCA9IFdNTF9OQU1FUwor
ICAgIHdtbG5hbWVzX2EuZGVwZW5kZW5jeV90eXBlID0gVFlQRV9DCisgICAgd21sbmFtZXNfYS5D
T05GSUcgPSB0YXJnZXRfcHJlZGVwcworICAgIHdtbG5hbWVzX2EudmFyaWFibGVfb3V0ID0gR0VO
RVJBVEVEX1NPVVJDRVMKKyAgICB3bWxuYW1lc19hLmNsZWFuID0gJHtRTUFLRV9GSUxFX09VVH0g
JHtRTUFLRV9WQVJfR0VORVJBVEVEX1NPVVJDRVNfRElSX1NMQVNIfVdNTE5hbWVzLmgKKyAgICBh
ZGRFeHRyYUNvbXBpbGVyKHdtbG5hbWVzX2EpCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9TVkc9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9TVkc9
MQogCkBAIC0xNjM0LDYgKzE2ODAsOCBAQCBTT1VSQ0VTICs9IFwKICAgICAgICAgc3ZnZWxlbWVu
dHdyYXBwZXJfaGVhZGVyLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9GSUxFUwogICAgICAgICBh
ZGRFeHRyYUNvbXBpbGVyKHN2Z2VsZW1lbnR3cmFwcGVyX2hlYWRlcikKIAorCisKICAgICAgICAg
IyBHRU5FUkFUT1IgNS1EOgogICAgICAgICB4bGlua25hbWVzLm91dHB1dCA9ICQkR0VORVJBVEVE
X1NPVVJDRVNfRElSL1hMaW5rTmFtZXMuY3BwCiAgICAgICAgIHhsaW5rbmFtZXMuY29tbWFuZHMg
PSBwZXJsIC1JJCRQV0QvYmluZGluZ3Mvc2NyaXB0cyAkJFBXRC9kb20vbWFrZV9uYW1lcy5wbCAt
LWF0dHJzICQkUFdEL3N2Zy94bGlua2F0dHJzLmluIC0tbmFtZXNwYWNlIFhMaW5rIC0tY3BwTmFt
ZXNwYWNlIFdlYkNvcmUgLS1uYW1lc3BhY2VVUkkgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp
bmsnIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiIC0tb3V0cHV0RGlyICQkR0VO
RVJBVEVEX1NPVVJDRVNfRElSCkBAIC0xNzc0LDcgKzE4MjIsNyBAQCBhZGRFeHRyYUNvbXBpbGVy
KGNvbG9yZGF0YSkKIAogIyBHRU5FUkFUT1IgOToKIHN0eWxlc2hlZXRzLm91dHB1dCA9ICQkR0VO
RVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAKLXN0eWxlc2hl
ZXRzLmNvbW1hbmRzID0gcGVybCAkJFBXRC9jc3MvbWFrZS1jc3MtZmlsZS1hcnJheXMucGwgLS1w
cmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJCRHRU5FUkFURURfU09VUkNFU19ESVIv
VXNlckFnZW50U3R5bGVTaGVldHMuaCAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRT
dHlsZVNoZWV0c0RhdGEuY3BwICQkUFdEL2Nzcy9odG1sNC5jc3MgJCRQV0QvY3NzL3F1aXJrcy5j
c3MgJCRQV0QvY3NzL3N2Zy5jc3MgJCRQV0QvY3NzL3ZpZXctc291cmNlLmNzcworc3R5bGVzaGVl
dHMuY29tbWFuZHMgPSBwZXJsICQkUFdEL2Nzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5wbCAtLXBy
ZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9V
c2VyQWdlbnRTdHlsZVNoZWV0cy5oICQkR0VORVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0
eWxlU2hlZXRzRGF0YS5jcHAgJCRQV0QvY3NzL2h0bWw0LmNzcyAkJFBXRC9jc3MvcXVpcmtzLmNz
cyAkJFBXRC9jc3Mvc3ZnLmNzcyAkJFBXRC9jc3Mvdmlldy1zb3VyY2UuY3NzICQkUFdEL2Nzcy93
bWwuY3NzCiBzdHlsZXNoZWV0cy5pbnB1dCA9IFNUWUxFU0hFRVRTX0VNQkVECiBzdHlsZXNoZWV0
cy5DT05GSUcgPSB0YXJnZXRfcHJlZGVwcwogc3R5bGVzaGVldHMudmFyaWFibGVfb3V0ID0gR0VO
RVJBVEVEX1NPVVJDRVMKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NzgsNiArNDc4LDY0IEBACiAJCTRCNkZB
NkY3MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjZGQTZGNjBDMzlFNEExMDAwODcwMTEg
LyogU21hcnRSZXBsYWNlQ0YuY3BwICovOyB9OwogCQk0QjhBRjRBQTBCMUNFMDJCMDA2ODc2OTAg
LyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QjhBRjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNEJBRTk1QjEwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJBRTk1QjAwQjJG
QTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTRDNkI5OTRFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxBY2Nlc3NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTE2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50
LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NEYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTE3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggKi87IH07CisJCTRDNkI5
OTUwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxODBFNTJFMzczMDA0ODdCQjcgLyog
V01MQUVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk1MTBFNTJFMzczMDA0ODdCQjcgLyogV01M
QUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTE5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5oICovOyB9OworCQk0QzZC
OTk1MjBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQTBFNTJFMzczMDA0ODdC
QjcgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTUzMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQjBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxl
bWVudC5oICovOyB9OworCQk0QzZCOTk1NDBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmlidXRl
TmFtZXMuaW4gaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTFDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBdHRyaWJ1dGVOYW1lcy5pbiAqLzsgfTsK
KwkJNEM2Qjk5NTUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUQwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuY3BwICovOyB9OworCQk0QzZCOTk1NjBFNTJFMzczMDA0
ODdCQjcgLyogV01MQnJ3Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEM2Qjk5MUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQu
aCAqLzsgfTsKKwkJNEM2Qjk5NTcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFG
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTU4
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjAwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TENhcmRFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTU5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxE
b2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTkyMTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk1QTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTIyMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxEb2N1bWVudC5oICovOyB9OworCQk0QzZCOTk1QjBFNTJFMzczMDA0ODdCQjcgLyogV01M
RG9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRDNkI5OTIzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuY3BwICovOyB9Owor
CQk0QzZCOTk1QzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyNDBFNTJFMzczMDA0ODdC
QjcgLyogV01MRG9FbGVtZW50LmggKi87IH07CisJCTRDNkI5OTVEMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTI1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmNwcCAqLzsgfTsK
KwkJNEM2Qjk5NUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTI2MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTVGMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkyNzBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rvcnku
Y3BwICovOyB9OworCQk0QzZCOTk2MDBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovOyB9OworCQk0QzZC
OTk2MTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTI5MEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxHb0VsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2MjBFNTJFMzczMDA0ODdCQjcgLyog
V01MR29FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QzZCOTkyQTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmggKi87IH07CisJ
CTRDNkI5OTYzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MkIwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEhlbHBlci5jcHAgKi87IH07CisJCTRDNkI5OTY0MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTJDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuaCAqLzsgfTsKKwkJNEM2Qjk5
NjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyRDBFNTJFMzczMDA0ODdCQjcg
LyogV01MSW1hZ2VFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjYwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEM2Qjk5MkUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5o
ICovOyB9OworCQk0QzZCOTk2NzBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJG
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnB1dEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2
ODBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzMDBFNTJFMzczMDA0ODdCQjcgLyog
V01MSW5wdXRFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTY5MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNp
Y0V2ZW50SGFuZGxlci5jcHAgKi87IH07CisJCTRDNkI5OTZBMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXIuaCAqLzsgfTsKKwkJNEM2Qjk5NkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9w
dGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5MzMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwICov
OyB9OworCQk0QzZCOTk2QzBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NkQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxl
bWVudC5jcHAgKi87IH07CisJCTRDNkI5OTZFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
MzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTZGMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTM3MEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxQb3N0ZmllbGRFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzAwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTM4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0Zmll
bGRFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTcxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQcmV2
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTkzOTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwICovOyB9Owor
CQk0QzZCOTk3MjBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNBMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk3MzBFNTJFMzczMDA0ODdC
QjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hF
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJl
c2hFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTkzQzBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuaCAqLzsgfTsK
KwkJNEM2Qjk5NzUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0QwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3NjBFNTJF
MzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0UwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNl
bGVjdEVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNl
dHZhckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5M0YwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwICov
OyB9OworCQk0QzZCOTk3ODBFNTJFMzczMDA0ODdCQjcgLyogV01MU2V0dmFyRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDAwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NzkwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0MTBFNTJFMzczMDA0ODdCQjcgLyogV01M
VGFibGVFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5N0EwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5NDIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5oICovOyB9
OworCQk0QzZCOTk3QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQzMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUYWdOYW1lcy5pbiAqLzsgfTsKKwkJNEM2Qjk5N0MwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRhc2tFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVu
dC5jcHAgKi87IH07CisJCTRDNkI5OTdEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
NDUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhc2tFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTdF
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDYwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFRlbXBsYXRlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTdGMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0
ZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5ODAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
NDgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwICovOyB9OworCQk0QzZCOTk4MTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEM2Qjk5NDkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCAqLzsg
fTsKKwkJNEM2Qjk5ODIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0QTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5ODMwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NEIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRp
bWVyRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk4NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9r
ZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTRDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuY3BwICovOyB9OworCQk0
QzZCOTk4NTBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0RDBFNTJFMzczMDA0ODdCQjcg
LyogV01MVG9rZW5pemVyLmggKi87IH07CisJCTRDRjZEMzAxMEU1NTZGNEMwMEVEM0Y3NCAvKiBX
TUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICovOyB9OworCQk0Q0Y2
RDMwMjBFNTU2RjREMDBFRDNGNzQgLyogV01MTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDQTNBQjQ4MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxO
YW1lcy5oICovOyB9OwogCQk0RTE5NTkyMTBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEUxOTU5MUYwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCAqLzsgfTsK
IAkJNEUxOTU5MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyMDBBMzlEQUJB
MDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuaCAqLzsgfTsKIAkJNEUxOTU5MjkwQTM5REFD
QzAwMjIwRkU1IC8qIE1lZGlhUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5MjMwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnku
Y3BwICovOyB9OwpAQCAtNTAyOSw2ICs1MDg3LDY1IEBACiAJCTRCNkZBNkY2MEMzOUU0QTEwMDA4
NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTbWFydFJlcGxhY2VDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTRCOEFGNEE5MEIxQ0UwMkIwMDY4NzY5MCAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZEFjY2Vzc1BvbGljeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkFFOTVCMDBCMkZBOUNFMDBBRUQ4QTAgLyog
RWRpdG9yRGVsZXRlQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVk
aXRvckRlbGV0ZUFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkx
NjBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MQWNjZXNzRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTE3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxBY2Nlc3NFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTE4MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV01MQUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZC
OTkxOTBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdNTEFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRDNkI5OTFBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEFuY2hvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdN
TEFuY2hvckVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUMw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXTUxBdHRyaWJ1dGVOYW1lcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5MUQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEJyd0NvbnRleHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxRTBFNTJFMzczMDA0ODdCQjcgLyogV01MQnJ3
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQnJ3Q29udGV4
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxRjBFNTJFMzczMDA0ODdC
QjcgLyogV01MQ2FyZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdNTENhcmRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxDYXJkRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkyMTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTERvY3VtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTERvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxEb2N1
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyMzBFNTJFMzczMDA0
ODdCQjcgLyogV01MRG9FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXTUxEb0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTkyNDBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXTUxEb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5MjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyNjBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyNzBFNTJFMzczMDA0ODdCQjcgLyog
V01MRWxlbWVudEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdNTEVsZW1lbnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyOTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxHb0VsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyQTBFNTJFMzczMDA0
ODdCQjcgLyogV01MR29FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXTUxHb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MkIw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV01MSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5MkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV01MSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTRDNkI5OTJEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEltYWdlRWxlbWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxJbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdN
TEltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyRjBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbnB1dEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkzMDBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxJbnB1dEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2
ZW50SGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MSW50cmlu
c2ljRXZlbnRIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMz
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxPcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE9wdGlvbkVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzUwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXTUxQRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5
OTM2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MUEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5MzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFBvc3RmaWVsZEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzODBFNTJFMzczMDA0ODdC
QjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV01MUG9zdGZpZWxkRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0QzZCOTkzOTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFByZXZFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0EwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBy
ZXZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxQcmV2RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzQjBFNTJFMzczMDA0
ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdNTFJlZnJlc2hFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxSZWZyZXNoRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzRDBFNTJFMzczMDA0ODdCQjcgLyog
V01MU2VsZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV01MU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
NkI5OTNFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxTZWxlY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTRDNkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxTZXR2YXJF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDAwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdNTFNldHZhckVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5NDEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVGFibGVFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDIwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhYmxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVGFi
bGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQzMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUYWdOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV01M
VGFnTmFtZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQ0MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV01MVGFza0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0QzZCOTk0NTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1w
bGF0ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdN
TFRlbXBsYXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5
OTQ3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFRlbXBsYXRlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0QzZCOTk0ODBFNTJFMzczMDA0ODdCQjcgLyogV01MVGV4dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVGV4dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUZXh0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTRBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
aW1lckVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdN
TFRpbWVyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTRC
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdNTFRpbWVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0QzZCOTk0QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxUb2tlbml6ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0RDBFNTJFMzczMDA0ODdCQjcgLyogV01M
VG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUb2tlbml6
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNENBM0FCNDgwRTU1NkYyNDAwRTlD
MEMwIC8qIFdNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXTUxO
YW1lcy5oOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9XTUxOYW1lcy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTRDQTNBQjQ5MEU1
NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV01MTmFtZXMuY3BwOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9XTUxOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKKwkJNENERTU0RUMwRTU1Nzk3ODAwODlFMjZDIC8qIHdtbC5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IHdtbC5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1
OTFGMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFGZWF0dXJlTmFtZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0RTE5NTkyMDBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFG
ZWF0dXJlTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRmVh
dHVyZU5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1OTIzMEEzOURB
Q0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYVF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTYzMzcsNyArNjQ1NCw3IEBACiAJCTkzRUVDMUY3MDlDMjg3NzcwMEM1MTVEMSAvKiBXaGVlbEV2
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXaGVlbEV2ZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZhc1Bh
dHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzUGF0
dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjcwMDlDMzIxODgw
MEM1MTVEMSAvKiBDYW52YXNTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYW52YXNTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkz
RjE5QjE5MDgyNDVFNTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0
LnhtbDsgcGF0aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5m
by5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOTNGMTlCMUEw
ODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3Jl
LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
ImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsK
IAkJOTNGOEIzMDUwQTMwMEZFMTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3IucG0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvci5wbTsgcGF0aCA9IHNjcmlw
dHMvQ29kZUdlbmVyYXRvci5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg1NjEs
NiArODY3OCw3IEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTRDNkI5OTE1MEU1MkUz
NzMwMDQ4N0JCNyAvKiB3bWwgKi8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNv
bmZpZy5oICovLAogCQkJCUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4
LmggKi8sCiAJCQkJOTMwNzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERlcml2ZWRTb3VyY2VzLm1h
a2UgKi8sCkBAIC04OTA1LDYgKzkwMjMsNjkgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNU
YWJzID0gMDsKIAkJfTsKKwkJNEM2Qjk5MTUwRTUyRTM3MzAwNDg3QkI3IC8qIHdtbCAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNEM2Qjk5MTYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTE3MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MTgwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkxOTBFNTJFMzczMDA0
ODdCQjcgLyogV01MQUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcg
LyogV01MQW5jaG9yRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MUIwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkxQzBFNTJFMzczMDA0ODdCQjcg
LyogV01MQXR0cmlidXRlTmFtZXMuaW4gKi8sCisJCQkJNEM2Qjk5MUQwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEJyd0NvbnRleHQuY3BwICovLAorCQkJCTRDNkI5OTFFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxCcndDb250ZXh0LmggKi8sCisJCQkJNEM2Qjk5MUYwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TENhcmRFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyMDBFNTJFMzczMDA0ODdCQjcgLyogV01M
Q2FyZEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyMTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9j
dW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTIyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVu
dC5oICovLAorCQkJCTRDNkI5OTIzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuY3Bw
ICovLAorCQkJCTRDNkI5OTI0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuaCAqLywK
KwkJCQk0QzZCOTkyNTBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MjYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTky
NzBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwICovLAorCQkJCTRDNkI5
OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovLAorCQkJCTRDNkI5
OTI5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxHb0VsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTJB
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxHb0VsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyQjBFNTJF
MzczMDA0ODdCQjcgLyogV01MSGVscGVyLmNwcCAqLywKKwkJCQk0QzZCOTkyQzBFNTJFMzczMDA0
ODdCQjcgLyogV01MSGVscGVyLmggKi8sCisJCQkJNEM2Qjk5MkQwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEltYWdlRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MkUwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEltYWdlRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTJGMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxJbnB1dEVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTMwMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxJbnB1dEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzMTBFNTJFMzczMDA0ODdCQjcgLyogV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCAqLywKKwkJCQk0QzZCOTkzMjBFNTJFMzczMDA0ODdC
QjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi8sCisJCQkJNEM2Qjk5MzMwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTM0MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzUwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzNjBFNTJFMzczMDA0
ODdCQjcgLyogV01MUEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzNzBFNTJFMzczMDA0ODdCQjcg
LyogV01MUG9zdGZpZWxkRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MzgwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzOTBFNTJFMzczMDA0
ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTNBMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oICovLAorCQkJCTRDNkI5OTNCMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxSZWZyZXNoRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5M0MwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5M0QwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTNFMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5M0YwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQwMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5NDEwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5NDIwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTQzMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxUYWdOYW1lcy5pbiAqLywKKwkJCQk0QzZCOTk0NDBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGFza0VsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQ1MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUYXNrRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
ZW1wbGF0ZUVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQ3MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUZW1wbGF0ZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0ODBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGV4dC5jcHAgKi8sCisJCQkJNEM2Qjk5NDkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQu
aCAqLywKKwkJCQk0QzZCOTk0QTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNw
cCAqLywKKwkJCQk0QzZCOTk0QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50Lmgg
Ki8sCisJCQkJNEM2Qjk5NEMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5jcHAgKi8s
CisJCQkJNEM2Qjk5NEQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovLAorCQkJ
KTsKKwkJCXBhdGggPSB3bWw7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1
MTI2RTZCNjBBMkUzQUVGMDA1QzI5RkEgLyogaWNvbiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCkBAIC05MDEyLDYgKzkxOTMsOCBAQAogCQk2NTY1ODBFQzA5RDEy
QjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0Q0EzQUI0ODBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFt
ZXMuaCAqLywKKwkJCQk0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICov
LAogCQkJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAvKiBDaGFyc2V0RGF0YS5jcHAgKi8sCiAJ
CQkJNjU2NTgxQUQwOUQxNEVFNjAwMEU2MUQ3IC8qIENvbG9yRGF0YS5jICovLAogCQkJCTY1NjU4
MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFyLmNwcCAqLywKQEAgLTEyODMzLDYgKzEz
MDE2LDggQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNENERTU0RUMwRTU1Nzk3ODAwODlF
MjZDIC8qIHdtbC5jc3MgKi8sCisJCQkJMzE2MTFFNTQwRTFDNEQ0QTAwRjZBNTc5IC8qIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmlkbCAqLywKIAkJCQlBODBFNkNEQTBBMTk4OUNBMDA3RkI4QzUg
LyogQ291bnRlci5oICovLAogCQkJCTkzMDcwNUM3MDlFMEM5NUYwMEIxN0ZFNCAvKiBDb3VudGVy
LmlkbCAqLywKIAkJCQlBODBFNkNCQjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VW
YWx1ZS5jcHAgKi8sCkBAIC0xNTM4NCw2ICsxNTU2OSwzNCBAQAogCQkJCTMxNjExRTYzMEUxQzRF
MTQwMEY2QTU3OSAvKiBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzNBNDRERTBFMjZEMjAyMDBDMTRERkEgLyogTlNSZXNvbHZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMzQTQ0RTMwRTI2RDIxQjAwQzE0REZBIC8qIEpTTlNSZXNvbHZl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NEYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFj
Y2Vzc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTUxMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NTMwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTU2
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0
QzZCOTk1ODBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTRDNkI5OTVBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNEM2Qjk5NUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTYwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVt
ZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjIwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEdvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjQwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEhlbHBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5
NjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNEM2Qjk5NkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlv
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTZFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxQRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NzAwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTcy
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NEM2Qjk5NzQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0QzZCOTk3NjBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNldHZh
ckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTdBMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTdEMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5N0Yw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRlbXBsYXRlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNEM2Qjk5ODEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTRDNkI5OTgzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTRDNkI5OTg1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTRDRjZEMzAyMEU1NTZGNEQwMEVEM0Y3NCAvKiBXTUxOYW1lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyNEI0NjUwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDREZENDhFMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRw
UmVxdWVzdFVwbG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERkQ0OTYwRTMwNTkyRjAwOUQx
MEFEIC8qIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCBpbiBIZWFkZXJzICovLApAQCAtMTU0NDEs
NyArMTU2NTQsNiBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmpl
Y3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAi
WGNvZGUgMi40IjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdp
b25zID0gKAogCQkJCUVuZ2xpc2gsCkBAIC0xNTUxOSw2ICsxNTczMSw4IEBACiAJCQkJQkMxODgx
REQwRTA4QzU0MzAwMDQ4QzEzIC8qIEZpbGVMaXN0LmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJ
MzE2MTFFNTUwRTFDNEQ0QTAwRjZBNTc5IC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbCBp
biBSZXNvdXJjZXMgKi8sCiAJCQkJQkMzQTQ0REYwRTI2RDIwMjAwQzE0REZBIC8qIE5TUmVzb2x2
ZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0QzZCOTk1NDBFNTJFMzczMDA0ODdCQjcgLyog
V01MQXR0cmlidXRlTmFtZXMuaW4gaW4gUmVzb3VyY2VzICovLAorCQkJCTRDNkI5OTdCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUYWdOYW1lcy5pbiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMzFDMEZG
MjMwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmlkbCBpbiBSZXNvdXJj
ZXMgKi8sCiAJCQkJMzFDMEZGMjYwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5zaXRpb25F
dmVudC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJKTsKQEAgLTE3MTcxLDYgKzE3Mzg1LDM0IEBA
CiAJCQkJMzE2MTFFNUEwRTFDNERFMDAwRjZBNTc5IC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2MTFFNjIwRTFDNEUxNDAwRjZBNTc5IC8qIERP
TVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQTQ0RTIw
RTI2RDIxQjAwQzE0REZBIC8qIEpTTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
QzZCOTk0RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0QzZCOTk1MDBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NTIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NTUwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEJyd0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NTcwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTU5
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
QzZCOTk1QjBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTRDNkI5OTVEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTRDNkI5OTVGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9y
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk2MTBFNTJFMzczMDA0ODdCQjcgLyogV01M
R29FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTYzMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NjUwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk2
NzBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTRDNkI5OTY5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9w
dGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NkQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTZGMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTRDNkI5OTcxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0QzZCOTk3MzBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NzUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNl
bGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NzcwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5Nzkw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0QzZCOTk3QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNEM2Qjk5N0UwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRlbXBsYXRlRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk4MDBFNTJFMzczMDA0ODdCQjcgLyogV01M
VGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk4MjBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGltZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTg0MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNENGNkQzMDEw
RTU1NkY0QzAwRUQzRjc0IC8qIFdNTE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREZE
NDhGMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0RGRDQ5MjBFMzA1NkJEMDA5RDEwQUQgLyogSlNYTUxIdHRwUmVxdWVzdFVw
bG9hZEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RGRDQ5NTBFMzA1OTJGMDA5RDEw
QUQgLyogSlNYTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksNiArMzM5LDkgQEAgc3Rh
dGljIENTU1J1bGVTZXQqIGRlZmF1bHRTdHlsZTsKIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0
UXVpcmtzU3R5bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVsdFByaW50U3R5bGU7CiBzdGF0
aWMgQ1NTUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKKyNpZiBFTkFCTEUoV01MKQor
c3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRXbWxTdHlsZSA9IDA7CisjZW5kaWYKIAogUmVuZGVy
U3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKQEAgLTQ5
NSw2ICs0OTgsMTEgQEAgc3RhdGljIHZvaWQgbG9hZERlZmF1bHRTdHlsZSgpCiAgICAgCiAgICAg
Ly8gVmlldyBzb3VyY2UgcnVsZXMuCiAgICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVv
Zihzb3VyY2VVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7CisKKyNpZiBFTkFC
TEUoV01MKQorICAgIGRlZmF1bHRXbWxTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OworICAgIGRlZmF1
bHRXbWxTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHdtbFVzZXJBZ2VudFN0
eWxlU2hlZXQsIHNpemVvZih3bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7
CisjZW5kaWYKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRp
b24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCkBAIC0xMDExLDEwICsxMDE5LDE4
IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGEKIAogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMoaW50JiBmaXJzdFVBUnVsZSwgaW50JiBsYXN0VUFS
dWxlKQogeworI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fY2hlY2tlci5tX2RvY3VtZW50LT5p
c1dNTERvY3VtZW50KCkpIHsKKyAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0V21sU3R5bGUsIGZp
cnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKKyAgICB9IGVsc2UgeworI2VuZGlmCiAgICAgLy8gRmly
c3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KICAgICBDU1NSdWxl
U2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lm
aWMoInByaW50IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRTdHlsZTsK
ICAgICBtYXRjaFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxlLCBsYXN0VUFS
dWxlKTsKKyNpZiBFTkFCTEUoV01MKQorICAgIH0KKyNlbmRpZgogCiAgICAgLy8gSW4gcXVpcmtz
IG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0Lgog
ICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZykKSW5kZXg6IFdlYkNvcmUvY3NzL3dt
bC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mvd21sLmNzcwkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvY3NzL3dtbC5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAxIEBACisvKgor
ICogVGhlIGRlZmF1bHQgc3R5bGUgc2hlZXQgdXNlZCB0byByZW5kZXIgSFRNTC4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKK0BuYW1lc3BhY2UgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLyI7
CisKK2h0bWwgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKKy8qIGNoaWxkcmVuIG9mIHRoZSA8
aGVhZD4gZWxlbWVudCBhbGwgaGF2ZSBkaXNwbGF5Om5vbmUgKi8KK2hlYWQgeworICAgIGRpc3Bs
YXk6IG5vbmUKK30KKworbWV0YSB7CisgICAgZGlzcGxheTogbm9uZQorfQorCit0aXRsZSB7Cisg
ICAgZGlzcGxheTogbm9uZQorfQorCitsaW5rIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK3N0
eWxlIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK3NjcmlwdCB7CisgICAgZGlzcGxheTogbm9u
ZQorfQorCisvKiBnZW5lcmljIGJsb2NrLWxldmVsIGVsZW1lbnRzICovCisKK2JvZHkgeworICAg
IGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogOHB4Cit9CisKK3AgeworICAgIGRpc3BsYXk6
IGJsb2NrOworICAgIG1hcmdpbjogMS4wX19xZW0gMHB4Cit9CisKK2RpdiB7CisgICAgZGlzcGxh
eTogYmxvY2sKK30KKworbGF5ZXIgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKK21hcnF1ZWUg
eworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBvdmVyZmxvdzogLXdlYmtpdC1tYXJx
dWVlCit9CisKK2FkZHJlc3MgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKK2Jsb2NrcXVvdGUg
eworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogMV9fcWVtIDQwcHggMWVtIDQwcHgK
K30KKworcSB7CisgICAgZGlzcGxheTogaW5saW5lCit9CisKK3E6YmVmb3JlIHsKKyAgICBjb250
ZW50OiAnIicKKyAgICAvKiBGSVhNRTogY29udGVudDogb3Blbi1xdW90ZTsgKi8KK30KKworcTph
ZnRlciB7CisgICAgY29udGVudDogJyInCisgICAgLyogRklYTUU6IGNvbnRlbnQ6IGNsb3NlLXF1
b3RlOyAqLworfQorCitjZW50ZXIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIC8qIHNwZWNp
YWwgY2VudGVyaW5nIHRvIGJlIGFibGUgdG8gZW11bGF0ZSB0aGUgaHRtbDQvbmV0c2NhcGUgYmVo
YXZpb3VyICovCisgICAgdGV4dC1hbGlnbjogLXdlYmtpdC1jZW50ZXIKK30KKworaHIgeworICAg
IGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogMC41ZW0gYXV0bzsKKyAgICBib3JkZXItc3R5
bGU6IGluc2V0OworICAgIGJvcmRlci13aWR0aDogMXB4Cit9CisKK21hcCB7CisgICAgZGlzcGxh
eTogaW5saW5lCit9CisKKy8qIGhlYWRpbmcgZWxlbWVudHMgKi8KKworaDEgeworICAgIGRpc3Bs
YXk6IGJsb2NrOworICAgIGZvbnQtc2l6ZTogMmVtOworICAgIG1hcmdpbjogLjY3X19xZW0gMCAu
NjdlbSAwOworICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9CisKK2gyIHsKKyAgICBkaXNwbGF5OiBi
bG9jazsKKyAgICBmb250LXNpemU6IDEuNWVtOworICAgIG1hcmdpbjogLjgzX19xZW0gMCAuODNl
bSAwOworICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9CisKK2gzIHsKKyAgICBkaXNwbGF5OiBibG9j
azsKKyAgICBmb250LXNpemU6IDEuMTdlbTsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFlbSAwOwor
ICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9CisKK2g0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAg
ICBtYXJnaW46IDEuMzNfX3FlbSAwIDEuMzNlbSAwOworICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9
CisKK2g1IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBmb250LXNpemU6IC44M2VtOworICAg
IG1hcmdpbjogMS42N19fcWVtIDAgMS42N2VtIDA7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQKK30K
KworaDYgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGZvbnQtc2l6ZTogLjY3ZW07CisgICAg
bWFyZ2luOiAyLjMzX19xZW0gMCAyLjMzZW0gMDsKKyAgICBmb250LXdlaWdodDogYm9sZAorfQor
CisvKiB0YWJsZXMgKi8KKwordGFibGUgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGJvcmRl
ci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgYm9yZGVyLXNwYWNpbmc6IDJweDsKKyAgICBib3Jk
ZXItY29sb3I6IGdyYXkKK30KKwordGFibGVbYWxpZ249ImNlbnRlciJdIHsKKyAgICBtYXJnaW4t
bGVmdDogYXV0bzsKKyAgICBtYXJnaW4tcmlnaHQ6IGF1dG8KK30KKwordGhlYWQgeworICAgIGRp
c3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwor
ICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCit0Ym9keSB7CisgICAgZGlzcGxheTogdGFi
bGUtcm93LWdyb3VwOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgYm9yZGVyLWNv
bG9yOiBpbmhlcml0Cit9CisKK3Rmb290IHsKKyAgICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3Jv
dXA7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgICBib3JkZXItY29sb3I6IGluaGVy
aXQKK30KKworLyogZm9yIHRhYmxlcyB3aXRob3V0IHRhYmxlIHNlY3Rpb24gZWxlbWVudHMgKGNh
biBoYXBwZW4gd2l0aCBYSFRNTCBvciBkeW5hbWljYWxseSBjcmVhdGVkIHRhYmxlcykgKi8KK3Rh
YmxlID4gdHIgeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKK2NvbCB7CisgICAg
ZGlzcGxheTogdGFibGUtY29sdW1uCit9CisKK2NvbGdyb3VwIHsKKyAgICBkaXNwbGF5OiB0YWJs
ZS1jb2x1bW4tZ3JvdXAKK30KKwordHIgeworICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKKyAgICB2
ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQKK30KKwor
dGQsIHRoIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAgIHZlcnRpY2FsLWFsaWduOiBp
bmhlcml0Cit9CisKK3RoIHsKKyAgICBmb250LXdlaWdodDogYm9sZAorfQorCitjYXB0aW9uIHsK
KyAgICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uOworICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2Vu
dGVyCit9CisKKy8qIGxpc3RzICovCisKK3VsLCBtZW51LCBkaXIgeworICAgIGRpc3BsYXk6IGJs
b2NrOworICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFl
bSAwOworICAgIC13ZWJraXQtcGFkZGluZy1zdGFydDogNDBweAorfQorCitvbCB7CisgICAgZGlz
cGxheTogYmxvY2s7CisgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOworICAgIG1hcmdpbjog
MV9fcWVtIDAgMWVtIDA7CisgICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiA0MHB4Cit9CisKK2xp
IHsKKyAgICBkaXNwbGF5OiBsaXN0LWl0ZW0KK30KKwordWwgdWwsIG9sIHVsIHsKKyAgICBsaXN0
LXN0eWxlLXR5cGU6IGNpcmNsZQorfQorCitvbCBvbCB1bCwgb2wgdWwgdWwsIHVsIG9sIHVsLCB1
bCB1bCB1bCB7CisgICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmUKK30KKworZGQgeworICAgIGRp
c3BsYXk6IGJsb2NrOworICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiA0MHB4Cit9CisKK2RsIHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFlbSAwCit9CisKK2R0
IHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCitvbCB1bCwgdWwgb2wsIHVsIHVsLCBvbCBvbCB7
CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwCit9CisKKy8qIGZvcm0g
ZWxlbWVudHMgKi8KKworZm9ybSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luOiAw
X19xZW0gMCAxZW0gMAorfQorCitsYWJlbCB7CisgICAgY3Vyc29yOiBkZWZhdWx0OworfQorCits
ZWdlbmQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBhZGRpbmctbGVmdDogMnB4OworICAg
IHBhZGRpbmctcmlnaHQ6IDJweDsKKyAgICBib3JkZXI6IG5vbmUKK30KKworZmllbGRzZXQgewor
ICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbi1sZWZ0OiAycHg7CisgICAgbWFyZ2luLXJp
Z2h0OiAycHg7CisgICAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtOworICAgIGJvcmRl
cjogMnB4IGdyb292ZSBUaHJlZURGYWNlCit9CisKK2J1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBidXR0b247Cit9CisKK2lucHV0LCB0ZXh0YXJlYSwga2V5Z2VuLCBzZWxlY3QsIGJ1
dHRvbiwgaXNpbmRleCB7CisgICAgbWFyZ2luOiAwX19xZW07CisgICAgZm9udDogLXdlYmtpdC1z
bWFsbC1jb250cm9sOworICAgIGNvbG9yOiBpbml0aWFsOworICAgIGxldHRlci1zcGFjaW5nOiBu
b3JtYWw7CisgICAgd29yZC1zcGFjaW5nOiBub3JtYWw7CisgICAgbGluZS1oZWlnaHQ6IG5vcm1h
bDsKKyAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKKyAgICB0ZXh0LWluZGVudDogMDsKKyAgICB0
ZXh0LXNoYWRvdzogbm9uZTsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgdGV4dC1h
bGlnbjogLXdlYmtpdC1hdXRvOworfQorCitpbnB1dFt0eXBlPSJoaWRkZW4iXSB7CisgICAgZGlz
cGxheTogbm9uZQorfQorCitpbnB1dCwgaW5wdXRbdHlwZT0icGFzc3dvcmQiXSwgaW5wdXRbdHlw
ZT0ic2VhcmNoIl0sIGlzaW5kZXggeworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxk
OworICAgIHBhZGRpbmc6IDFweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBi
b3JkZXI6IDJweCBpbnNldDsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAg
ICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIGN1cnNvcjogYXV0bzsKK30KKworaW5w
dXRbdHlwZT0ic2VhcmNoIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQ7
CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitpbnB1dFt0eXBlPSJz
ZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uOworfQorCitpbnB1dFt0eXBlPSJzZWFy
Y2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNl
OiBzZWFyY2hmaWVsZC1kZWNvcmF0aW9uOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdl
YmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6
IHNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbjsKK30KKworaW5wdXRbdHlwZT0ic2VhcmNo
Il06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9uOworfQorCit0ZXh0YXJlYSB7CisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK
KyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNh
bDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIC13ZWJraXQtYm94LW9yaWVu
dDogdmVydGljYWw7CisgICAgcmVzaXplOiBhdXRvOworICAgIGN1cnNvcjogYXV0bzsKK30KKwor
aW5wdXRbdHlwZT0icGFzc3dvcmQiXSB7CisgICAgLXdlYmtpdC10ZXh0LXNlY3VyaXR5OiBkaXNj
ICFpbXBvcnRhbnQ7Cit9CisKK2lucHV0W3R5cGU9ImhpZGRlbiJdLCBpbnB1dFt0eXBlPSJpbWFn
ZSJdLCBpbnB1dFt0eXBlPSJmaWxlIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogaW5pdGlh
bDsKKyAgICBwYWRkaW5nOiBpbml0aWFsOworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7
CisgICAgYm9yZGVyOiBpbml0aWFsOworfQorCitpbnB1dFt0eXBlPSJmaWxlIl0geworICAgIC13
ZWJraXQtYm94LWFsaWduOiBiYXNlbGluZTsKK30KKworaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZBRkZCRCAhaW1wb3J0YW50OworICAgIGJhY2tncm91
bmQtaW1hZ2U6bm9uZSAhaW1wb3J0YW50OworfQorCitpbnB1dFt0eXBlPSJyYWRpbyJdLCBpbnB1
dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBtYXJnaW46IDNweCAwLjVleDsKKyAgICBwYWRkaW5n
OiBpbml0aWFsOworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBp
bml0aWFsOworfQorCitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0s
IGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1maWxlLXVw
bG9hZC1idXR0b24geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcHVzaC1idXR0b247CisgICAg
d2hpdGUtc3BhY2U6IHByZQorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0i
c3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtp
dC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbiB7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNl
bnRlcjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY3Vyc29yOiBkZWZhdWx0OworICAg
IGNvbG9yOiBCdXR0b25UZXh0OworICAgIHBhZGRpbmc6IDJweCA2cHggM3B4IDZweDsKKyAgICBi
b3JkZXI6IDJweCBvdXRzZXQgQnV0dG9uRmFjZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0
b25GYWNlOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveAorfQorCitpbnB1dFt0
eXBlPSJyYW5nZSJdIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlci1ob3Jpem9udGFs
OworICAgIHBhZGRpbmc6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworICAgIG1hcmdp
bjogMnB4OworfQorCitpbnB1dFt0eXBlPSJyYW5nZSJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7
CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzbGlkZXJ0aHVtYi1ob3Jpem9udGFsOworfQorCitp
bnB1dFt0eXBlPSJidXR0b24iXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06ZGlzYWJs
ZWQsIGlucHV0W3R5cGU9InJlc2V0Il06ZGlzYWJsZWQsIGlucHV0W3R5cGU9ImZpbGUiXTpkaXNh
YmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjpkaXNhYmxlZCwgc2VsZWN0
OmRpc2FibGVkLCBrZXlnZW46ZGlzYWJsZWQsIG9wdGdyb3VwOmRpc2FibGVkLCBvcHRpb246ZGlz
YWJsZWQgeworICAgIGNvbG9yOiBHcmF5VGV4dAorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXTph
Y3RpdmUsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0icmVzZXQiXTph
Y3RpdmUsIGlucHV0W3R5cGU9ImZpbGUiXTphY3RpdmU6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0
dG9uLCBidXR0b246YWN0aXZlIHsKKyAgICBib3JkZXItc3R5bGU6IGluc2V0Cit9CisKK2lucHV0
W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06YWN0
aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJyZXNldCJdOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRb
dHlwZT0iZmlsZSJdOmFjdGl2ZTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24s
IGJ1dHRvbjphY3RpdmU6ZGlzYWJsZWQgeworICAgIGJvcmRlci1zdHlsZTogb3V0c2V0Cit9CisK
K2FyZWEsIHBhcmFtIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2lucHV0W3R5cGU9ImNoZWNr
Ym94Il0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7CisgICAgLXdlYmtpdC1i
b3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitpbnB1dFt0eXBlPSJyYWRpbyJdIHsKKyAgICAt
d2Via2l0LWFwcGVhcmFuY2U6IHJhZGlvOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVy
LWJveDsKK30KKwora2V5Z2VuLCBzZWxlY3QgeworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVu
dWxpc3Q7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13ZWJraXQt
Ym94LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiAxcHggc29saWQ7CisgICAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiA1cHg7CisgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAtd2Via2l0LXJ0
bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICBjb2xvcjogYmxhY2s7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogd2hpdGU7CisgICAgY3Vyc29yOiBkZWZhdWx0OworfQorCitzZWxlY3Rbc2l6ZV0sCitz
ZWxlY3RbbXVsdGlwbGVdLAorc2VsZWN0W3NpemVdW211bHRpcGxlXSB7CisgICAgLXdlYmtpdC1h
cHBlYXJhbmNlOiBsaXN0Ym94OworICAgIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDsKKyAgICBi
b3JkZXI6IDFweCBpbnNldCBncmF5OworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogaW5pdGlh
bDsKKyAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDsKK30KKworc2VsZWN0W3NpemU9IjAiXSwKK3Nl
bGVjdFtzaXplPSIxIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7CisgICAg
LXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAt
d2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworfQorCitv
cHRncm91cCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKK30KKworb3B0aW9uIHsKKyAgICBm
b250LXdlaWdodDogbm9ybWFsOworfQorCisvKiBpbmxpbmUgZWxlbWVudHMgKi8KKwordSwgaW5z
IHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZQorfQorCitzdHJvbmcsIGIgeworICAg
IGZvbnQtd2VpZ2h0OiBib2xkZXIKK30KKworaSwgY2l0ZSwgZW0sIHZhciwgYWRkcmVzcyB7Cisg
ICAgZm9udC1zdHlsZTogaXRhbGljCit9CisKK3R0LCBjb2RlLCBrYmQsIHNhbXAgeworICAgIGZv
bnQtZmFtaWx5OiBtb25vc3BhY2UKK30KKworcHJlLCB4bXAsIHBsYWludGV4dCwgbGlzdGluZyB7
CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICB3
aGl0ZS1zcGFjZTogcHJlOworICAgIG1hcmdpbjogMV9fcWVtIDAKK30KKworYmlnIHsKKyAgICBm
b250LXNpemU6IGxhcmdlcgorfQorCitzbWFsbCB7CisgICAgZm9udC1zaXplOiBzbWFsbGVyCit9
CisKK3MsIHN0cmlrZSwgZGVsIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaAor
fQorCitzdWIgeworICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7CisgICAgZm9udC1zaXplOiBzbWFs
bGVyCit9CisKK3N1cCB7CisgICAgdmVydGljYWwtYWxpZ246IHN1cGVyOworICAgIGZvbnQtc2l6
ZTogc21hbGxlcgorfQorCitub2JyIHsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwCit9CisKKy8q
IHN0YXRlcyAqLworCis6Zm9jdXMgeyAKKyAgICBvdXRsaW5lOiBhdXRvIDVweCAtd2Via2l0LWZv
Y3VzLXJpbmctY29sb3IKK30KKworLyogUmVhZC1vbmx5IHRleHQgZmllbGRzIGRvIG5vdCBzaG93
IGEgZm9jdXMgcmluZyBidXQgZG8gc3RpbGwgcmVjZWl2ZSBmb2N1cyAqLworaHRtbDpmb2N1cywg
Ym9keTpmb2N1cywgaW5wdXRbcmVhZG9ubHldOmZvY3VzIHsgCisgICAgb3V0bGluZTogbm9uZQor
fQorICAKK2lucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cywgaXNpbmRleDpmb2N1cywga2V5Z2Vu
OmZvY3VzLCBzZWxlY3Q6Zm9jdXMgeworICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4Cit9CisKK2lu
cHV0W3R5cGU9ImJ1dHRvbiJdOmZvY3VzLAoraW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1cywK
K2lucHV0W3R5cGU9ImZpbGUiXTpmb2N1cywKK2lucHV0W3R5cGU9ImhpZGRlbiJdOmZvY3VzLAor
aW5wdXRbdHlwZT0iaW1hZ2UiXTpmb2N1cywKK2lucHV0W3R5cGU9InJhZGlvIl06Zm9jdXMsCitp
bnB1dFt0eXBlPSJyZXNldCJdOmZvY3VzLAoraW5wdXRbdHlwZT0ic2VhcmNoIl06Zm9jdXMsCitp
bnB1dFt0eXBlPSJzdWJtaXQiXTpmb2N1cywKK2lucHV0W3R5cGU9ImZpbGUiXTpmb2N1czo6LXdl
YmtpdC1maWxlLXVwbG9hZC1idXR0b24geworICAgIG91dGxpbmUtb2Zmc2V0OiAwCit9CisgICAg
CithOi13ZWJraXQtYW55LWxpbmsgeworICAgIGNvbG9yOiAtd2Via2l0LWxpbms7CisgICAgdGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKK2E6LXdlYmtpdC1hbnktbGluazphY3RpdmUg
eworICAgIGNvbG9yOiAtd2Via2l0LWFjdGl2ZWxpbmsKK30KKworYW5jaG9yOi13ZWJraXQtYW55
LWxpbmsgeworICAgIGNvbG9yOiAtd2Via2l0LWxpbms7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Cit9CisKK2FuY2hvcjotd2Via2l0LWFueS1saW5rOmFjdGl2ZSB7CisgICAgY29s
b3I6IC13ZWJraXQtYWN0aXZlbGluaworfQorCisvKiBvdGhlciBlbGVtZW50cyAqLworCitub2Zy
YW1lcyB7CisgICAgZGlzcGxheTogbm9uZQorfQorCitmcmFtZXNldCwgZnJhbWUgeworICAgIGRp
c3BsYXk6IGJsb2NrCit9CisKK2ZyYW1lc2V0IHsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQK
K30KKworaWZyYW1lIHsKKyAgICBib3JkZXI6IDJweCBpbnNldAorfQorCisvKiBub3NjcmlwdCBp
cyBoYW5kbGVkIGludGVybmFsbHksIGFzIGl0IGRlcGVuZHMgb24gc2V0dGluZ3MgKi8KSW5kZXg6
IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9k
b20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsOCBAQAog
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUyLDYgKzU0LDEwIEBACiAjaW5jbHVk
ZSAiU1ZHRG9jdW1lbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJX
TUxEb2N1bWVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJM
RShTVkcpCkBAIC0zMDgsNiArMzE0LDE1IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxl
bWVudGF0aW9uOjoKICAgICAgICAgcmV0dXJuIEhUTUxEb2N1bWVudDo6Y3JlYXRlKGZyYW1lKTsK
ICAgICBpZiAodHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIikKICAgICAgICAgcmV0dXJu
IERvY3VtZW50OjpjcmVhdGVYSFRNTChmcmFtZSk7CisKKyNpZiBFTkFCTEUoV01MKQorICAgIGlm
ICgodHlwZSA9PSAidGV4dC92bmQud2FwLndtbCIpCisjaWYgRU5BQkxFKFdCWE1MKQorICAgICAg
ICB8fCAodHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC53bWxjIikKKyNlbmRpZgorICAgICAg
ICApCisgICAgICAgIHJldHVybiBXTUxEb2N1bWVudDo6Y3JlYXRlKGZyYW1lKTsKKyNlbmRpZgog
ICAgICAgICAKICNpZiBFTkFCTEUoRlRQRElSKQogICAgIC8vIFBsdWdpbnMgY2Fubm90IHRha2Ug
RlRQIGZyb20gdXMgZWl0aGVyCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCw5IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpbkRvY3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYURvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyNpZiBFTkFCTEUoV01MKQorICAgIHZpcnR1YWwgYm9vbCBpc1dN
TERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgogICAgIAogICAgIENT
U1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2Vs
ZWN0b3I7IH0KIApJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAzNTc4MCkKKysrIFdl
YkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDEz
IEBACiAjaWZuZGVmIFVTRV9RWE1MU1RSRUFNCiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgog
I2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KKyNpZiBFTkFCTEUoV01MKQorI2lu
Y2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1
ZGUgIldNTFRleHQuaCIKKyNlbmRpZgogI2Vsc2UKICNpbmNsdWRlIDxRRGVidWc+CiAjZW5kaWYK
QEAgLTc4LDYgKzg1LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogCiBjb25zdCBp
bnQgbWF4RXJyb3JzID0gMjU7CiAKKyNpZiBFTkFCTEUoV01MKQorYm9vbCBoYXNEb2NUeXBlRGVj
bCA9IGZhbHNlOworI2VuZGlmCisKICNpZm5kZWYgVVNFX1FYTUxTVFJFQU0KIGNsYXNzIFBlbmRp
bmdDYWxsYmFja3MgewogcHVibGljOgpAQCAtODY1LDYgKzg3NiwxMSBAQCB2b2lkIFhNTFRva2Vu
aXplcjo6c3RhcnRFbGVtZW50TnMoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9hdHRyaWJ1dGVzLCBuYl9kZWZhdWx0ZWQs
IGxpYnhtbEF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisjaWYgRU5BQkxF
KFdNTCkKKyAgICBpZihtX2RvYy0+aXNXTUxEb2N1bWVudCgpICYmICFoYXNEb2NUeXBlRGVjbCkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8V01MVG9rZW5pemVyKj4odGhpcyktPmhhbmRsZVdNTEVycm9y
KERvY1R5cGVEZWNsYXJhdGlvbk1pc3NFcnJvcik7CisjZW5kaWYKICAgICAKICAgICBtX3Nhd0Zp
cnN0RWxlbWVudCA9IHRydWU7CiAKQEAgLTg4MSw5ICs4OTcsMjEgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IAogICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFt
ZXNwYWNlVVJJOwogICAgIH0KIAorI2lmIEVOQUJMRShXTUwpCisgICAgLy8gY2hlY2sgaWYgdGhl
cmUgYXJlIG1vcmUgdGhhbiBvbmUgYWNjZXNzIGVsZW1lbnQKKyAgICBpZihtX2RvYy0+aXNXTUxE
b2N1bWVudCgpICYmIChsb2NhbE5hbWUgPT0gImFjY2VzcyIpKQorICAgICAgICBXTUxIZWxwZXI6
OmN1cnJlbnRCcndDb250ZXh0KCktPnNldE5lZWRDaGVja0RlY2tBY2Nlc3ModHJ1ZSk7CisjZW5k
aWYKKyAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBRdWFsaWZpZWROYW1lIHFOYW1l
KHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwotICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50
ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUsIGVjKTsKKyAgICBSZWZQdHI8RWxl
bWVudD4gbmV3RWxlbWVudCA9IDA7CisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZihtX2RvYy0+aXNX
TUxEb2N1bWVudCgpKQorICAgICAgICBuZXdFbGVtZW50ID0gV01MRWxlbWVudEZhY3Rvcnk6OmNy
ZWF0ZVdNTEVsZW1lbnQocU5hbWUsIG1fZG9jLCB0cnVlKTsKKyAgICBlbHNlCisjZW5kaWYKKyAg
ICAgICAgbmV3RWxlbWVudCA9IG1fZG9jLT5jcmVhdGVFbGVtZW50KHFOYW1lLCB0cnVlLCBlYyk7
CiAgICAgaWYgKCFuZXdFbGVtZW50KSB7CiAgICAgICAgIHN0b3BQYXJzaW5nKCk7CiAgICAgICAg
IHJldHVybjsKQEAgLTk4NCw2ICsxMDEyLDE0IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpjaGFyYWN0
ZXJzKGNvbnN0IHhtbEMKICAgICB9CiAgICAgCiAgICAgaWYgKG1fY3VycmVudE5vZGUtPmlzVGV4
dE5vZGUoKSB8fCBlbnRlclRleHQoKSkKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmKG1fZG9jLT5p
c1dNTERvY3VtZW50KCkpIHsKKyAgICAgICAgV01MVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFdN
TFRleHQqPihtX2N1cnJlbnROb2RlKTsKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgICAgIHRleHQtPmFwcGVuZERhdGEodG9TdHJpbmcocywgbGVuKSwgZWMpOworICAgICAgICB0
ZXh0LT51cGRhdGVEYXRhSWZOZWVkZWQoKTsKKyAgICB9IGVsc2UKKyNlbmRpZgogICAgICAgICBt
X2J1ZmZlcmVkVGV4dC5hcHBlbmQocywgbGVuKTsKIH0KIApAQCAtMTEwOCw2ICsxMTQ0LDIwIEBA
IHZvaWQgWE1MVG9rZW5pemVyOjppbnRlcm5hbFN1YnNldChjb25zdCAKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICAgICAKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChtX2RvYykgeworICAgICAg
ICBTdHJpbmcgZXh0SWQgPSB0b1N0cmluZyhleHRlcm5hbElEKTsKKyAgICAgICAgaWYgKG1fZG9j
LT5pc1dNTERvY3VtZW50KCkKKyAgICAgICAgICAgICYmIChleHRJZCAhPSAiLS8vV0FQRk9SVU0v
L0RURCBXTUwgMS4zLy9FTiIpCisgICAgICAgICAgICAmJiAoZXh0SWQgIT0gIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMi8vRU4iKQorICAgICAgICAgICAgJiYgKGV4dElkICE9ICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjEvL0VOIikKKyAgICAgICAgICAgICYmIChleHRJZCAhPSAiLS8vV0FQRk9S
VU0vL0RURCBXTUwgMS4wLy9FTiIpKQorICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJ
bnZhbGlkIERURCBQdWJsaWMgSUQiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAg
ICAgICAgZWxzZSBpZiAobV9kb2MtPmlzV01MRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGhhc0Rv
Y1R5cGVEZWNsID0gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKwogICAgIGlmIChtX2RvYykKICAgICAg
ICAgbV9kb2MtPmFkZENoaWxkKERvY3VtZW50VHlwZTo6Y3JlYXRlKG1fZG9jLCB0b1N0cmluZyhu
YW1lKSwgdG9TdHJpbmcoZXh0ZXJuYWxJRCksIHRvU3RyaW5nKHN5c3RlbUlEKSkpOwogfQpAQCAt
MTI0NCw3ICsxMjk0LDExIEBAIHN0YXRpYyB4bWxFbnRpdHlQdHIgZ2V0RW50aXR5SGFuZGxlcih2
b2kKICAgICB9CiAKICAgICBlbnQgPSB4bWxHZXREb2NFbnRpdHkoY3R4dC0+bXlEb2MsIG5hbWUp
OworI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKCFlbnQgJiYgKGdldFRva2VuaXplcihjbG9zdXJl
KS0+aXNYSFRNTERvY3VtZW50KCkgfHwgKGdldFRva2VuaXplcihjbG9zdXJlKS0+ZG9jdW1lbnQo
KS0+aXNXTUxEb2N1bWVudCgpKSkpIHsKKyNlbHNlCiAgICAgaWYgKCFlbnQgJiYgZ2V0VG9rZW5p
emVyKGNsb3N1cmUpLT5pc1hIVE1MRG9jdW1lbnQoKSkgeworI2VuZGlmCiAgICAgICAgIGVudCA9
IGdldFhIVE1MRW50aXR5KG5hbWUpOwogICAgICAgICBpZiAoZW50KQogICAgICAgICAgICAgZW50
LT5ldHlwZSA9IFhNTF9JTlRFUk5BTF9HRU5FUkFMX0VOVElUWTsKQEAgLTE5MjUsNiArMTk3OSwx
MSBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VTdGFydEVsZW1lbnQoKQogICAgICAgICByZXR1
cm47CiAgICAgfQogCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZihtX2RvYy0+aXNXTUxEb2N1bWVu
dCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxUb2tlbml6ZXIqPih0aGlzKS0+dXBkYXRlQXR0
cnNJZk5lZWRlZChuZXdFbGVtZW50LmdldCgpLCBsb2NhbE5hbWUpOworI2VuZGlmCisKICAgICBl
dmVudHVhbGx5TWFya0FzUGFyc2VyQ3JlYXRlZChuZXdFbGVtZW50LmdldCgpKTsKIAogICAgIGlm
IChpc1NjcmlwdEVsZW1lbnQobmV3RWxlbWVudC5nZXQoKSkpCkBAIC0xOTM4LDYgKzE5OTcsMTEg
QEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKICAgICBzZXRDdXJyZW50
Tm9kZShuZXdFbGVtZW50LmdldCgpKTsKICAgICBpZiAobV92aWV3ICYmICFuZXdFbGVtZW50LT5h
dHRhY2hlZCgpKQogICAgICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsKKworI2lmIEVOQUJMRShX
TUwpCisgICAgaWYobV9kb2MtPmlzV01MRG9jdW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxXTUxUb2tl
bml6ZXIqPih0aGlzKS0+aGFzRXJyb3IoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01MVG9rZW5p
emVyKj4odGhpcyktPmhhbmRsZVdNTEVycm9yKCk7CisjZW5kaWYKIH0KIAogdm9pZCBYTUxUb2tl
bml6ZXI6OnBhcnNlRW5kRWxlbWVudCgpCkBAIC0yMDY3LDYgKzIxMzEsMTYgQEAgc3RhdGljIFFT
dHJpbmcgcGFyc2VJZChjb25zdCBRU3RyaW5nICZkdAogICAgIHJldHVybiBkdGQubWlkKHN0YXJ0
LCBlbmQgLSBzdGFydCk7CiB9CiAjZW5kaWYKKyNpZiBFTkFCTEUoV01MKQorICAgIGVsc2UgaWYo
bV9kb2MtPmlzV01MRG9jdW1lbnQoKSkgeworICAgICAgICBSZWZQdHI8Tm9kZT4gcm9vdEVsZW1l
bnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnROUyh4aHRtbE5hbWVzcGFjZVVSSSwgImh0bWwiLCBlYyk7
CisgICAgICAgIFJlZlB0cjxOb2RlPiBib2R5ID0gZG9jLT5jcmVhdGVFbGVtZW50TlMoeGh0bWxO
YW1lc3BhY2VVUkksICJib2R5IiwgZWMpOworICAgICAgICByb290RWxlbWVudC0+YXBwZW5kQ2hp
bGQoYm9keSwgZWMpOworICAgICAgICBib2R5LT5hcHBlbmRDaGlsZChkb2N1bWVudEVsZW1lbnQs
IGVjKTsKKyAgICAgICAgZG9jLT5hcHBlbmRDaGlsZChyb290RWxlbWVudC5nZXQoKSwgZWMpOwor
ICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOworICAgIH0KKyNlbmRpZgogCiB2
b2lkIFhNTFRva2VuaXplcjo6cGFyc2VEdGQoKQogewpAQCAtMjEzNiw2ICsyMjEwLDE0IEBAIHZv
aWQgWE1MVG9rZW5pemVyOjpwYXJzZUR0ZCgpCiAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0
aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpKSB7CiAg
ICAgICAgIHNldElzWEhUTUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFj
ZSBlbnRpdGllcyBvciBub3QuCiAgICAgfQorI2lmIEVOQUJMRShXTUwpCisgICAgZWxzZSBpZiht
X2RvYy0+aXNXTUxEb2N1bWVudCgpCisgICAgICAgICAgICAmJiAocHVibGljSWQgIT0gIi0vL1dB
UEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iKQorICAgICAgICAgICAgJiYgKHB1YmxpY0lkICE9ICIt
Ly9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIikKKyAgICAgICAgICAgICYmIChwdWJsaWNJZCAh
PSAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIpCisgICAgICAgICAgICAmJiAocHVibGlj
SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMC8vRU4iKSkKKyAgICAgICAgaGFuZGxlRXJy
b3IoZmF0YWwsICJJbnZhbGlkIERURCBQdWJsaWMgSUQiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51
bWJlcigpKTsKKyNlbmRpZgogICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIG1f
ZG9jLT5hZGRDaGlsZChEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgbmFtZSwgcHVibGljSWQs
IHN5c3RlbUlkKSk7CiAgICAgCkBAIC0yMTQzLDQgKzIyMjUsMyBAQCB2b2lkIFhNTFRva2VuaXpl
cjo6cGFyc2VEdGQoKQogI2VuZGlmCiB9CiAKLQpJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5p
emVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJKHJldmlzaW9u
IDM1NzgwKQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldElzWEhU
TUxEb2N1bWVudChib29sIGlzWEhUTUwpIHsgbV9pc1hIVE1MRG9jdW1lbnQgPSBpc1hIVE1MOyB9
CiAgICAgICAgIGJvb2wgaXNYSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1hIVE1M
RG9jdW1lbnQ7IH0KIAorICAgICAgICBEb2N1bWVudCAqZG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2RvYzsgfQorCiAgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKICAgICAg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiBmaW5pc2hlZE9i
aik7CiAKQEAgLTExOCw2ICsxMjAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGlu
dCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKIAogICAgIHByaXZhdGU6CisjaWYgRU5BQkxFKFdNTCkK
KyAgICAgICAgZnJpZW5kIGNsYXNzIFdNTFRva2VuaXplcjsKKyNlbmRpZgogICAgICAgICB2b2lk
IGluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IGNoYXIqIGNodW5rID0gMCk7CiAgICAgICAg
IHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSopOwogCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0Zvcndh
cmRMaXN0LmNwcAkocmV2aXNpb24gMzU3ODApCisrKyBXZWJDb3JlL2hpc3RvcnkvQmFja0Zvcndh
cmRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjQsNCArMjY2LDE4IEBAIGJvb2wg
QmFja0ZvcndhcmRMaXN0Ojpjb250YWluc0l0ZW0oSGlzdG8KICAgICByZXR1cm4gbV9lbnRyeUhh
c2guY29udGFpbnMoZW50cnkpOwogfQogCisjaWYgRU5BQkxFKFdNTCkKK3ZvaWQgQmFja0Zvcndh
cmRMaXN0OjpjbGVhclN0YXRlKCkKK3sKKyAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXIg
PSBjdXJyZW50SXRlbSgpOworCisgICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBwYWdlQ2FjaGUoKS0+cmVt
b3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgbV9lbnRyaWVzLmNsZWFyKCk7CisgICAgbV9l
bnRyeUhhc2guY2xlYXIoKTsKKyAgICBtX2N1cnJlbnQgPSBOb0N1cnJlbnRJdGVtSW5kZXg7Cit9
CisjZW5kaWYKKwogfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0Zv
cndhcmRMaXN0LmgJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDYgKzc1LDEwIEBAIHB1YmxpYzogCiAgICAg
dm9pZCByZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7CiAgICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVu
dHJpZXMoKTsKICAgICAKKyNpZiBFTkFCTEUoV01MKQorICAgIC8vIGNsZWFyIHRoZSBoaXN0b3J5
IG9mIGN1cnJlbnQgYnJvd3NlciBjb250ZXh0IGZvciB3bWwKKyAgICB2b2lkIGNsZWFyU3RhdGUo
KTsKKyNlbmRpZgogcHJpdmF0ZToKICAgICBCYWNrRm9yd2FyZExpc3QoUGFnZSopOwogCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZl
Y3RvcjxTdHJpbmc+JikgY29uc3Q7CiAKIHByaXZhdGU6CisjaWYgRU5BQkxFKFdNTCkKKyAgICBm
cmllbmQgY2xhc3MgV01MSW1hZ2VFbGVtZW50OworI2VuZGlmCiAgICAgSFRNTEltYWdlTG9hZGVy
IG1faW1hZ2VMb2FkZXI7CiAgICAgU3RyaW5nIHVzZW1hcDsKICAgICBib29sIGlzbWFwOwpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw4IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw2ICszMywxMCBAQAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW1hZ2UuaCIKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTEltYWdlRWxlbWVudC5oIgor
I2VuZGlmCisjaW5jbHVkZSAiSW1hZ2UuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAt
MTQ2LDYgKzE1MiwxMSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2Fj
CiAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtLT5yZW5kZXJlcigpKQogICAg
ICAgICBpZiAocmVuZGVyZXItPmlzSW1hZ2UoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlckltYWdlKj4ocmVuZGVyZXIpLT5zZXRDYWNoZWRJbWFnZShtX2ltYWdlKTsKKworI2lmIEVO
QUJMRShXTUwpCisgICAgaWYobV9pbWFnZS0+aW1hZ2UoKS0+aXNOdWxsKCkgJiYgbV9lbGVtZW50
LT5oYXNUYWdOYW1lKGltZ1RhZykpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTEltYWdlRWxlbWVu
dCo+KG1fZWxlbWVudCktPnJlbG9hZEltYWdlQnlTcmNBdHRyKCk7CisjZW5kaWYKICAgICAgICAg
ICAgIAogICAgIGlmIChpbWFnZS0+ZXJyb3JPY2N1cnJlZCgpICYmIGVsZW0tPmhhc1RhZ05hbWUo
b2JqZWN0VGFnKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlbGVt
KS0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTE9wdGlv
bkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQu
aAkocmV2aXNpb24gMzU3ODApCisrKyBXZWJDb3JlL2h0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAko
d29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0
aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJr
IE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtODYsNiArODgsOSBA
QCBwcml2YXRlOgogICAgIFN0cmluZyBtX3ZhbHVlOwogICAgIGJvb2wgbV9zZWxlY3RlZDsKICAg
ICBSZW5kZXJTdHlsZSogbV9zdHlsZTsKKyNpZiBFTkFCTEUoV01MKQorICAgIGZyaWVuZCBjbGFz
cyBXTUxPcHRpb25FbGVtZW50OworI2VuZGlmCiB9OwogCiB9IC8vbmFtZXNwYWNlCkluZGV4OiBX
ZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMzU3ODApCisrKyBXZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDggQEAKICAqICAg
ICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAg
ICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Niw5ICs1OCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2Fu
U3RhcnRTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9p
ZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wg
ZmlyZU9uQ2hhbmdlID0gZmFsc2UpOwogCiAgICAgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsK
LSAgICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1
ZSwgYm9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZSk7CiAgICAgaW50IGxhc3RTZWxlY3RlZExpc3RJ
bmRleCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQpAQCAtMTcwLDYgKzE3Miw5IEBAIHByaXZhdGU6CiAgICAgU3RyaW5n
IG1fdHlwZWRTdHJpbmc7CiAKICAgICBIVE1MQ29sbGVjdGlvbjo6Q29sbGVjdGlvbkluZm8gbV9j
b2xsZWN0aW9uSW5mbzsKKyNpZiBFTkFCTEUoV01MKQorICAgIGZyaWVuZCBjbGFzcyBXTUxTZWxl
Y3RFbGVtZW50OworI2VuZGlmCiB9OwogCiAjaWZkZWYgTkRFQlVHCkluZGV4OiBXZWJDb3JlL2xv
YWRlci9GcmFtZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVM
b2FkZXIuY3BwCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDggQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29w
eXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTI2Nyw2ICsyNjksOSBAQCBGcmFtZUxvYWRlcjo6RnJhbWVMb2FkZXIoRnJhbWUqIGZyYW1l
LCBGCiAgICAgLCBtX2ZpbmlzaGVkUGFyc2luZ0R1cmluZ0xvd0JhbmR3aWR0aERpc3BsYXkoZmFs
c2UpCiAgICAgLCBtX25lZWRUb1N3aXRjaE91dExvd0JhbmR3aWR0aERpc3BsYXkoZmFsc2UpCiAj
ZW5kaWYgCisjaWYgRU5BQkxFKFdNTCkKKyAgICAsIG1fZm9yY2VSZWxvYWQoZmFsc2UpCisjZW5k
aWYKIHsKIH0KIApAQCAtMjgxMiw4ICsyODE3LDIzIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNsaWVu
dFJlZGlyZWN0ZWQoY29uc3QKICAgICBtX3F1aWNrUmVkaXJlY3RDb21pbmcgPSBsb2NrSGlzdG9y
eSAmJiBtX2RvY3VtZW50TG9hZGVyICYmICFpc0phdmFTY3JpcHRGb3JtQWN0aW9uOwogfQogCisj
aWYgRU5BQkxFKFdNTCkKK3ZvaWQgRnJhbWVMb2FkZXI6OnNldEZvcmNlUmVsb2FkKGJvb2wgcmVs
b2FkKQoreworICAgIG1fZm9yY2VSZWxvYWQgPSByZWxvYWQ7Cit9CisjZW5kaWYKKwogYm9vbCBG
cmFtZUxvYWRlcjo6c2hvdWxkUmVsb2FkKGNvbnN0IEtVUkwmIGN1cnJlbnRVUkwsIGNvbnN0IEtV
UkwmIGRlc3RpbmF0aW9uVVJMKQogeworI2lmIEVOQUJMRShXTUwpCisgICAgLy8gQXMgZm9yIFdN
TCBwYWdlLCBzb21ldGltZXMgd2Ugd2FudCB0aGUgcGFnZSB0byBiZSByZWxvYWRlZCBldmVuIGlm
IHRoZSBzYW1lIAorICAgIC8vIFVSTCB3aXRoIGZyYWdtZW50CisgICAgaWYobV9mb3JjZVJlbG9h
ZCkgeworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisjZW5kaWYKKwogICAgIC8vIFRoaXMg
ZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgcnVsZTogIkRvbid0IHJlbG9hZCBpZiBuYXZpZ2F0aW5n
IGJ5IGZyYWdtZW50IHdpdGhpbgogICAgIC8vIHRoZSBzYW1lIFVSTCwgYnV0IGRvIHJlbG9hZCBp
ZiBnb2luZyB0byBhIG5ldyBVUkwgb3IgdG8gdGhlIHNhbWUgVVJMIHdpdGggbm8KICAgICAvLyBm
cmFnbWVudCBpZGVudGlmaWVyIGF0IGFsbC4iCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxv
YWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlz
aW9uIDM1NzgwKQorKysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjY0LDYgKzI2Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGllbnRS
ZWRpcmVjdENhbmNlbGxlZE9yRmluaXNoZWQoYm9vbCBjYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3Mp
OwogICAgICAgICB2b2lkIGNsaWVudFJlZGlyZWN0ZWQoY29uc3QgS1VSTCYsIGRvdWJsZSBkZWxh
eSwgZG91YmxlIGZpcmVEYXRlLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGlzSmF2YVNjcmlwdEZv
cm1BY3Rpb24pOwogICAgICAgICBib29sIHNob3VsZFJlbG9hZChjb25zdCBLVVJMJiBjdXJyZW50
VVJMLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblVSTCk7CisjaWYgRU5BQkxFKFdNTCkKKyAgICAg
ICAgdm9pZCBzZXRGb3JjZVJlbG9hZChib29sKTsKKyNlbmRpZgogCiAgICAgICAgIGJvb2wgaXNR
dWlja1JlZGlyZWN0Q29taW5nKCkgY29uc3Q7CiAKQEAgLTY3Nyw2ICs2ODIsMTAgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgbV9wZW5kaW5nU291cmNlSW5Mb3dCYW5kd2lk
dGhEaXNwbGF5OyAgICAgICAgCiAgICAgICAgIEhhc2hTZXQ8Q2FjaGVkUmVzb3VyY2UqPiBtX2V4
dGVybmFsUmVxdWVzdHNJbkxvd0JhbmR3aWR0aERpc3BsYXk7CiAjZW5kaWYKKworI2lmIEVOQUJM
RShXTUwpCisgICAgICAgIGJvb2wgbV9mb3JjZVJlbG9hZDsKKyNlbmRpZgogICAgIH07CiAKIH0K
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2xvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHJldmlzaW9uIDM1NzgwKQorKysgV2Vi
Q29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCwxMSBAQAogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAKKyNpZiBFTkFCTEUoV0JYTUwpCisjaW5jbHVkZSAid2J4bWwuaCIKKyNpbmNsdWRlICJ3Ynht
bF9jb252LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPFNo
YXJlZEJ1ZmZlcj4gUmVzb3VyY2VMb2FkZXI6OnJlc291cmNlRGF0YSgpCkBAIC0yNDgsNiArMjUz
LDI4IEBAIHZvaWQgUmVzb3VyY2VMb2FkZXI6OmRpZFJlY2VpdmVEYXRhKGNvbnMKICAgICAvLyBh
bnl0aGluZyBpbmNsdWRpbmcgcG9zc2libHkgZGVyZWZpbmcgdGhpczsgb25lIGV4YW1wbGUgb2Yg
dGhpcyBpcyBSYWRhciAzMjY2MjE2LgogICAgIFJlZlB0cjxSZXNvdXJjZUxvYWRlcj4gcHJvdGVj
dG9yKHRoaXMpOwogCisjaWYgRU5BQkxFKFdCWE1MKQorICAgIGlmKGxlbmd0aCAmJiAobV9yZXNw
b25zZS5taW1lVHlwZSgpID09ICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiKSkgeworICAgICAg
ICBXQl9VVElOWSAqd2J4bWwgPSAoV0JfVVRJTlkqKWRhdGE7CisgICAgICAgIFdCX1VMT05HIHdi
eG1sX2xlbiA9IGxlbmd0aDsKKyAgICAgICAgV0JfVUxPTkcgeG1sX2xlbiA9IDA7CisgICAgICAg
IFdCX1VUSU5ZICp4bWwgPSAwOworICAgICAgICBXQlhNTEVycm9yIHJldCA9IFdCWE1MX09LOyAK
KyAgICAgICAgV0JYTUxHZW5YTUxQYXJhbXMgcGFyYW1zOworCisgICAgICAgIC8vIEluaXQgRGVm
YXVsdCBQYXJhbWV0ZXJzCisgICAgICAgIHBhcmFtcy5sYW5nID0gV0JYTUxfTEFOR19VTktOT1dO
OworICAgICAgICBwYXJhbXMuZ2VuX3R5cGUgPSBXQlhNTF9HRU5fWE1MX0lOREVOVDsKKyAgICAg
ICAgcGFyYW1zLmluZGVudCA9IDE7CisgICAgICAgIHBhcmFtcy5rZWVwX2lnbm9yYWJsZV93cyA9
IEZBTFNFOworCisgICAgICAgIHJldCA9IHdieG1sX2NvbnZfd2J4bWwyeG1sX3dpdGhsZW4od2J4
bWwsIHdieG1sX2xlbiwgJnhtbCwgJnhtbF9sZW4sICZwYXJhbXMpOworICAgICAgICBpZihyZXQg
IT0gV0JYTUxfT0spCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGRhdGEgPSAoY2hhciop
eG1sOworICAgICAgICBsZW5ndGggPSB4bWxfbGVuOworICAgIH0KKyNlbmRpZgogICAgIGFkZERh
dGEoZGF0YSwgbGVuZ3RoLCBhbGxBdE9uY2UpOwogICAgIC8vIEZJWE1FOiBJZiB3ZSBnZXQgYSBy
ZXNvdXJjZSB3aXRoIG1vcmUgdGhhbiAyQiBieXRlcywgdGhpcyBjb2RlIHdvbid0IGRvIHRoZSBy
aWdodCB0aGluZy4KICAgICAvLyBIb3dldmVyLCB3aXRoIHRvZGF5J3MgY29tcHV0ZXJzIGFuZCBu
ZXR3b3JraW5nIHNwZWVkcywgdGhpcyB3b24ndCBoYXBwZW4gaW4gcHJhY3RpY2UuCkluZGV4OiBX
ZWJDb3JlL3BhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2Uv
RXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMzU3ODApCisrKyBXZWJDb3JlL3BhZ2UvRXZlbnRI
YW5kbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc1Miw2ICsxNzUyLDE0IEBAIHZvaWQgRXZl
bnRIYW5kbGVyOjpkZWZhdWx0S2V5Ym9hcmRFdmVudEgKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgaWYgKGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIlUrMDAwOSIpCiAgICAgICAgICAg
ICBkZWZhdWx0VGFiRXZlbnRIYW5kbGVyKGV2ZW50KTsKKyNpZiBFTkFCTEUoV01MKQorICAgICAg
ICBlbHNlIGlmIChldmVudC0+a2V5SWRlbnRpZmllcigpID09ICJEb3duIikKKyAgICAgICAgICAg
IGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS0+YWR2YW5jZUZvY3VzKEZvY3VzRGlyZWN0aW9uRm9yd2FyZCwgZXZlbnQpKQorICAgICAgICAg
ICAgICAgIGV2ZW50LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICBlbHNlIGlmIChldmVu
dC0+a2V5SWRlbnRpZmllcigpID09ICJVcCIpCisgICAgICAgICAgICBpZiAobV9mcmFtZS0+cGFn
ZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVyKCktPmFkdmFuY2VGb2N1cyhG
b2N1c0RpcmVjdGlvbkJhY2t3YXJkLCBldmVudCkpCisgICAgICAgICAgICAgICAgZXZlbnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisjZW5kaWYKIAogICAgICAgIC8vIHByb3ZpZGVzIEtCIG5hdmln
YXRpb24gYW5kIHNlbGVjdGlvbiBmb3IgZW5oYW5jZWQgYWNjZXNzaWJpbGl0eSB1c2VycwogICAg
ICAgIGlmIChBWE9iamVjdENhY2hlOjphY2Nlc3NpYmlsaXR5RW5oYW5jZWRVc2VySW50ZXJmYWNl
RW5hYmxlZCgpKQpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMzU3ODApCisrKyBXZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTU0LDYgKzU2LDkgQEAKICNpbmNsdWRlIDxranMvY29sbGVjdG9yLmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZExlYWtDb3Vu
dGVyLmg+CisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjZW5k
aWYKIAogI2lmIEVOQUJMRShET01fU1RPUkFHRSkKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIK
QEAgLTEyMyw2ICsxMjgsOSBAQCBQYWdlOjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50
LCBDCiAgICAgLCBtX3BlbmRpbmdCZWZvcmVVbmxvYWRFdmVudENvdW50KDApCiAgICAgLCBtX2N1
c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoLTEpCiAgICAgLCBtX2N1c3RvbUhUTUxUb2tlbml6
ZXJDaHVua1NpemUoLTEpCisjaWYgRU5BQkxFKFdNTCkKKyAgICAsIG1fd21sQnJ3Q29udGV4dCgw
KQorI2VuZGlmCiB7CiAgICAgaWYgKCFhbGxQYWdlcykgewogICAgICAgICBhbGxQYWdlcyA9IG5l
dyBIYXNoU2V0PFBhZ2UqPjsKQEAgLTU1NCw2ICs1NjIsMTggQEAgdm9pZCBQYWdlOjpjaGFuZ2VQ
ZW5kaW5nQmVmb3JlVW5sb2FkRXZlbgogICAgIHJldHVybjsgCiB9CiAKKyNpZiBFTkFCTEUoV01M
KQordm9pZCBQYWdlOjpzZXRXbWxCcndDb250ZXh0KFJlZlB0cjxXTUxCcndDb250ZXh0PiBjb250
ZXh0KSAKK3sgCisgICAgbV93bWxCcndDb250ZXh0ID0gY29udGV4dDsgCit9CisKK1dNTEJyd0Nv
bnRleHQqIFBhZ2U6OndtbEJyd0NvbnRleHQoKSBjb25zdCAKK3sgCisgICAgcmV0dXJuIG1fd21s
QnJ3Q29udGV4dC5nZXQoKTsgCit9CisjZW5kaWYKKwogdm9pZCBQYWdlOjpzZXRDdXN0b21IVE1M
VG9rZW5pemVyVGltZURlbGF5KGRvdWJsZSBjdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KQog
ewogICAgIGlmIChjdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5IDwgMCkgewpJbmRleDogV2Vi
Q29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZp
c2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NiArMSw4IEBACiAvLyAtKi0gbW9kZTogYysrOyBjLWJhc2ljLW9mZnNldDogNCAtKi0KIC8qCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtNjQsNiArNjYsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2U7CiAjZW5kaWYKICAgICBjbGFzcyBTZXR0aW5nczsKKyNp
ZiBFTkFCTEUoV01MKQorICAgIGNsYXNzIFdNTEJyd0NvbnRleHQ7CisjZW5kaWYKICAgICBjbGFz
cyBLVVJMOwogCiAgICAgZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENhc2VTZW5zaXRp
dmUsIFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKQEAgLTE2OSw2ICsxNzQsMTAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldFNlc3Npb25TdG9yYWdlKFBhc3NSZWZQdHI8U2Vz
c2lvblN0b3JhZ2U+KTsKICNlbmRpZgogCisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgdm9pZCBz
ZXRXbWxCcndDb250ZXh0KFJlZlB0cjxXTUxCcndDb250ZXh0Pik7CisgICAgICAgIFdNTEJyd0Nv
bnRleHQqIHdtbEJyd0NvbnRleHQoKSBjb25zdDsKKyNlbmRpZgogICAgICAgICB2b2lkIHNldEN1
c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoZG91YmxlKTsKICAgICAgICAgYm9vbCBoYXNDdXN0
b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCkgY29uc3QgeyByZXR1cm4gbV9jdXN0b21IVE1MVG9r
ZW5pemVyVGltZURlbGF5ICE9IC0xOyB9CiAgICAgICAgIGRvdWJsZSBjdXN0b21IVE1MVG9rZW5p
emVyVGltZURlbGF5KCkgY29uc3QgeyBBU1NFUlQobV9jdXN0b21IVE1MVG9rZW5pemVyVGltZURl
bGF5ICE9IC0xKTsgcmV0dXJuIG1fY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheTsgfQpAQCAt
MjI4LDYgKzIzNywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAjaWYgUExBVEZPUk0oV0lOKSB8
fCAoUExBVEZPUk0oV1gpICYmIGRlZmluZWQoX19XWE1TV19fKSkgfHwgKFBMQVRGT1JNKFFUKSAm
JiBkZWZpbmVkKFFfV1NfV0lOKSkKICAgICAgICAgc3RhdGljIEhJTlNUQU5DRSBzX2luc3RhbmNl
SGFuZGxlOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoV01MKQorICAgICAgICBSZWZQdHI8V01MQnJ3
Q29udGV4dD4gbV93bWxCcndDb250ZXh0OworI2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCShyZXZp
c2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0xNzksNiArMTgxLDEyIEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0
ZWRKYXZhU2NyaXAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFnZU1pbWVU
eXBlcygpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVzW10gPSB7CisjaWYgRU5BQkxF
KFdNTCkKKyAgICAgICAgInRleHQvdm5kLndhcC53bWwiLAorI2VuZGlmCisjaWYgRU5BQkxFKFdC
WE1MKQorICAgICAgICAiYXBwbGljYXRpb24vdm5kLndhcC53bWxjIiwKKyNlbmRpZgogICAgICAg
ICAidGV4dC9odG1sIiwKICAgICAgICAgInRleHQveG1sIiwKICAgICAgICAgInRleHQveHNsIiwK
SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAJKHJldmlz
aW9uIDM1NzgwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Miw2ICs2MiwxMiBAQCBzdGF0aWMgY29uc3QgRXh0ZW5zaW9u
TWFwIGV4dGVuc2lvbk1hcCBbCiAgICAgeyAieHBtIiwgImltYWdlL3gteHBtIiB9LAogICAgIHsg
InhzbCIsICJ0ZXh0L3hzbCIgfSwKICAgICB7ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94aHRtbCt4
bWwiIH0sCisjaWYgRU5BQkxFKFdNTCkKKyAgICB7ICJ3bWwiLCAidGV4dC92bmQud2FwLndtbCIg
fSwKKyNlbmRpZgorI2lmIEVOQUJMRShXQlhNTCkKKyAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9u
L3ZuZC53YXAud21sYyIgfSwKKyNlbmRpZgogICAgIHsgMCwgMCB9CiB9OwogCkluZGV4OiBXZWJD
b3JlL3dtbC9XTUxBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudEhh
bmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKworI2lu
Y2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiV01MQUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKKworV01MQUVsZW1lbnQ6OldNTEFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUs
IERvY3VtZW50KiBkb2MpIAorICAgIDogV01MRWxlbWVudChuYW1lLCBkb2MpCit7CisgICAgc2V0
SXNMaW5rKHRydWUpOworfQorCitXTUxBRWxlbWVudDo6fldNTEFFbGVtZW50KCl7fQorCit2b2lk
IFdNTEFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpIAoreworICAgIGJv
b2wgc2hvdWxkSGFuZGxlID0gZmFsc2U7CisgICAgaWYoZXZ0LT50eXBlKCkgPT0gY2xpY2tFdmVu
dCkgeworICAgICAgICBzaG91bGRIYW5kbGUgPSB0cnVlOworICAgIH0gZWxzZSBpZigoZXZ0LT50
eXBlKCkgPT0ga2V5cHJlc3NFdmVudCkgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBmb2N1
c2VkKCkpIHsKKyAgICAgICAgU3RyaW5nIGtleSA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQq
PihldnQpLT5rZXlJZGVudGlmaWVyKCk7CisgICAgICAgIGlmKGtleSA9PSAiRW50ZXIiKSAKKyAg
ICAgICAgICAgIHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgfQorIAorICAgIGlmKHNob3VsZEhh
bmRsZSAmJiBpc0xpbmsoKSkgeworICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoZ2V0QXR0
cmlidXRlKFdNTE5hbWVzOjpocmVmQXR0cikpOworCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1l
KCktPmxvYWRlcigpLT51cmxTZWxlY3RlZChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLCBn
ZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0YXJnZXRBdHRyKSwgZXZ0LCBmYWxzZSwgdHJ1ZSk7CisK
KyAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0KKyAgICBlbHNlCisgICAg
ICAgIEV2ZW50VGFyZ2V0Tm9kZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworfQorCitTdHJp
bmcgV01MQUVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRl
KHRpdGxlQXR0cik7Cit9CisKK2Jvb2wgV01MQUVsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2FibGUo
S2V5Ym9hcmRFdmVudCogZXZlbnQpIGNvbnN0Cit7CisgICAgcmV0dXJuIGRvY3VtZW50KCktPmZy
YW1lKCktPmV2ZW50SGFuZGxlcigpLT50YWJzVG9MaW5rcyhldmVudCk7Cit9CisKK2Jvb2wgV01M
QUVsZW1lbnQ6OmlzRm9jdXNhYmxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsgCit9CisK
K30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS93bWwvV01MQUVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEFFbGVt
ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEFFbGVt
ZW50X2gKKyNkZWZpbmUgV01MQUVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTEFFbGVtZW50IDogcHVibGljICBXTUxF
bGVtZW50eworcHVibGljOgorICAgIFdNTEFFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOworICAgIH5XTUxBRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3Vz
YWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGlzRm9jdXNhYmxl
KCkgY29uc3Q7CisgICAgdmlydHVhbCBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKworfTsKKworfQor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS93bWwvV01MQWNjZXNzRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MQWNjZXNzRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgor
I2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MQWNjZXNz
RWxlbWVudDo6V01MQWNjZXNzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBE
b2N1bWVudCAqZG9jKQorICAgIDogV01MRWxlbWVudCh0YWdOYW1lLCBkb2MpIAoreworfQorCisK
K1dNTEFjY2Vzc0VsZW1lbnQ6On5XTUxBY2Nlc3NFbGVtZW50KCkgCit7CisgICAgV01MSGVscGVy
OjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zZXROZWVkQ2hlY2tEZWNrQWNjZXNzKGZhbHNlKTsKK30K
Kwordm9pZCBXTUxBY2Nlc3NFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqIGF0dHIpCit7CisgICAgaWYoYXR0ci0+bmFtZSgpID09IGRvbWFpbkF0dHIpIHsKKyAg
ICAgICAgaWYoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgeworICAg
ICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlh
YmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0RGVja0FjY2Vzc0RvbWFpbihh
dHRyLT52YWx1ZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwYXRoQXR0cikg
eworICAgICAgICBpZihXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7
CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlk
VmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zZXREZWNrQWNjZXNzUGF0
aChhdHRyLT52YWx1ZSgpKTsKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTEFj
Y2Vzc0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEFjY2Vzc0VsZW1lbnRfaAor
I2RlZmluZSBXTUxBY2Nlc3NFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTEFj
Y2Vzc0VsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudHsKK3B1YmxpYzoKKyAgICBXTUxBY2Nlc3NF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CisgICAgdmly
dHVhbCB+V01MQWNjZXNzRWxlbWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
d21sL1dNTEFuY2hvckVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5j
bHVkZSAiRnJhbWVMb2FkZXIuaCIKKworI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUg
IldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MQW5jaG9yRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TFRhc2tFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IFdNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK1dNTEFuY2hvckVsZW1l
bnQ6OldNTEFuY2hvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQq
IGRvYykgCisgICAgOiBIVE1MQW5jaG9yRWxlbWVudChuYW1lLCBkb2MpLCBtX3Rhc2soTlVMTCkK
K3sKKyAgICBzZXRIcmVmKCIiKTsgICAgIC8vIHRoaXMgaXMgdGhlIGhhY2sgc28gdGhhdCBhbmNo
b3IgcmVuZGVycyBsaWtlIGEgbGluaworfQorCitXTUxBbmNob3JFbGVtZW50Ojp+V01MQW5jaG9y
RWxlbWVudCgpe30KKwordm9pZCBXTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBlKSAKK3sKKyAgICBib29sIHNob3VsZEhhbmRsZSA9IGZhbHNlOworICAgIGlmKGUt
PnR5cGUoKSA9PSBjbGlja0V2ZW50KSB7CisgICAgICAgIHNob3VsZEhhbmRsZSA9IHRydWU7Cisg
ICAgfSBlbHNlIGlmKChlLT50eXBlKCkgPT0ga2V5ZG93bkV2ZW50KSAmJiBlLT5pc0tleWJvYXJk
RXZlbnQoKSAmJiBmb2N1c2VkKCkpIHsKKyAgICAgICAgU3RyaW5nIGtleSA9IHN0YXRpY19jYXN0
PEtleWJvYXJkRXZlbnQqPihlKS0+a2V5SWRlbnRpZmllcigpOworICAgICAgICBpZihrZXkgPT0g
IkVudGVyIikKKyAgICAgICAgICAgIHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgfQorCisgICAg
aWYoc2hvdWxkSGFuZGxlICYmIG1fdGFzaykgeworICAgICAgICBtX3Rhc2stPmV4ZWMoZSk7Cisg
ICAgICAgIGUtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICBF
dmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZSk7Cit9CisKK3ZvaWQgV01MQW5j
aG9yRWxlbWVudDo6cmVnaXN0ZXJUYXNrKFdNTFRhc2tFbGVtZW50KiB0YXNrKQoreyAKKyAgICBt
X3Rhc2sgPSB0YXNrOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBbmNob3JFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxBbmNob3JFbGVtZW50X2gKKyNkZWZpbmUgV01M
QW5jaG9yRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50OworICAgICAgICAgICAgICAg
ICAgICAgICAKK2NsYXNzIFdNTEFuY2hvckVsZW1lbnQgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1l
bnQgeworcHVibGljOgorICAgIFdNTEFuY2hvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxBbmNob3JFbGVtZW50KCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCisgICAgdm9pZCBy
ZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqKTsKKworcHJpdmF0ZToKKworICAgIFdNTFRhc2tF
bGVtZW50KiBtX3Rhc2s7CisKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBX
ZWJDb3JlL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEF0
dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACituYW1lc3BhY2U9
IldNTCIKK2NwcE5hbWVzcGFjZT0iV2ViQ29yZSIKK25hbWVzcGFjZVVSST0iaHR0cDovL3d3dy53
YXBmb3J1bS5vcmcvIgorZ2VuZXJhdGVGYWN0b3J5PSIxIgorZ2VuZXJhdGVXcmFwcGVyRmFjdG9y
eT0iMSIKKworbmFtZQoraWQKK3RpdGxlCituZXdjb250ZXh0CitvcmRlcmVkCitsYWJlbAorb3B0
aW9uYWwKK3R5cGUKK2hyZWYKK3ZhbHVlCitvbmVudGVyZm9yd2FyZAorb25lbnRlcmJhY2t3YXJk
CitvbnRpbWVyCitzZW5kcmVmZXJlcgorbWV0aG9kCitjYWNoZS1jb250cm9sCitlbmN0eXBlCith
Y2NlcHQtY2hhcnNldAoraW5hbWUKK2l2YWx1ZQorbXVsdGlwbGUKK3RhYmluZGV4CitvbnBpY2sK
K2Zvcm1hdAorZW1wdHlvaworc2l6ZQorbWF4bGVuZ3RoCithbHQKK3NyYworbG9jYWxzcmMKK3Zz
cGFjZQoraHNwYWNlCithbGlnbgoraGVpZ2h0Cit3aWR0aAorY29sdW1ucworbW9kZQorZG9tYWlu
CitwYXRoCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxCcndDb250ZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dtbC9XTUxCcndDb250ZXh0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
d21sL1dNTEJyd0NvbnRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiRnJhbWUu
aCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNs
dWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiTmFt
ZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTFNl
dHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIldNTENh
cmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiV01MSGVs
cGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitX
TUxCcndDb250ZXh0OjpXTUxCcndDb250ZXh0KFBhZ2UqIHBhZ2UpCit7CisgICAgbV9wYWdlID0g
cGFnZTsKKyAgICBtX2hpc3RMZW4gPSAwOworICAgIG1fYWN0aXZlQ2FyZCA9IE5VTEw7CisgICAg
bV9oYXNEZWNrQWNjZXNzID0gZmFsc2U7Cit9CisKK1dNTEJyd0NvbnRleHQ6On5XTUxCcndDb250
ZXh0KCkKK3sKKyAgICBtX3ZhcmlhYmxlcy5jbGVhcigpOworICAgIG1fcGFnZSA9IE5VTEw7Cisg
ICAgbV9hY3RpdmVDYXJkID0gTlVMTDsKKyAgICBtX2hhc0RlY2tBY2Nlc3MgPSBmYWxzZTsKK30K
Kwordm9pZCBXTUxCcndDb250ZXh0OjpyZXNldCgpCit7CisgICAgLy9yZW1vdmUgYWxsIHRoZSB2
YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQgYnJvd3NlciBjb250ZXh0CisgICAgbV92YXJpYWJsZXMu
Y2xlYXIoKTsKKworICAgIC8vY2xlYXIgdGhlIG5hdmlnYXRpb24gaGlzdG9yeSBzdGF0ZSAKKyAg
ICBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5jbGVhclN0YXRlKCk7OworCisgICAgLy9yZXNl
dCBpbXBsZW1lbnRhdGlvbi1zcGVjZmljIHN0YXRlIGlmIFVBIGhhcworICAgIG1faGlzdExlbiA9
IDE7Cit9CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c3RvcmVWYXJpYWJsZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsKSAKK3sKKyAgICBtX3ZhcmlhYmxlcy5zZXQobmFtZSwg
dmFsKTsKK30KKwordm9pZCBXTUxCcndDb250ZXh0OjpzdG9yZVZhcmlhYmxlcyhWYXJpYWJsZU1h
cCYgdmFycykgCit7CisgICAgZm9yKFZhcmlhYmxlTWFwOjppdGVyYXRvciBpdCA9IHZhcnMuYmVn
aW4oKTsgaXQgIT0gdmFycy5lbmQoKTsgKytpdCkgeyAKKyAgICAgICAgbV92YXJpYWJsZXMuc2V0
KGl0LT5maXJzdCwgaXQtPnNlY29uZCk7IAorICAgIH0KK30KKworU3RyaW5nIFdNTEJyd0NvbnRl
eHQ6OmdldFZhcmliYWxlKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QgCit7CisgICAgcmV0dXJu
IG1fdmFyaWFibGVzLmdldChuYW1lKTsKK30KKworYm9vbCBXTUxCcndDb250ZXh0OjpoYXNWYXJp
YWJsZXMoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOworfQorCitQ
YWdlKiBXTUxCcndDb250ZXh0OjpwYWdlKCkgY29uc3QgeworICAgIHJldHVybiBtX3BhZ2U7Cit9
CisKK2ludCBXTUxCcndDb250ZXh0OjpoaXN0b3J5TGVuZ3RoKCkgY29uc3QgeworICAgIHJldHVy
biBtX2hpc3RMZW47Cit9CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c2V0SGlzdG9yeUxlbmd0aChp
bnQgbGVuKSB7CisgICAgbV9oaXN0TGVuID0gbGVuOworfQorCitXTUxDYXJkRWxlbWVudCogV01M
QnJ3Q29udGV4dDo6YWN0aXZlQ2FyZCgpCit7CisgICAgcmV0dXJuIG1fYWN0aXZlQ2FyZDsKK30K
Kwordm9pZCBXTUxCcndDb250ZXh0OjpzZXRBY3RpdmVDYXJkKFdNTENhcmRFbGVtZW50KiBjYXJk
KQoreworICAgIG1fYWN0aXZlQ2FyZCA9IGNhcmQ7Cit9CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6
c2V0RGVja0FjY2Vzc0RvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbikKK3sKKyAgICBtX2FjY2Vz
c0RvbWFpbiA9IGRvbWFpbjsKK30KKwordm9pZCBXTUxCcndDb250ZXh0OjpzZXREZWNrQWNjZXNz
UGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgbV9hY2Nlc3NQYXRoID0gcGF0aDsKK30K
Kwordm9pZCBXTUxCcndDb250ZXh0OjpzZXROZWVkQ2hlY2tEZWNrQWNjZXNzKGJvb2wgbmVlZCkK
K3sKKyAgICBpZihtX2hhc0RlY2tBY2Nlc3MgJiYgbmVlZCkgeworICAgICAgICBXTUxIZWxwZXI6
OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihNdWx0aUFjY2Vzc0VsZW1lbnRzRXJyb3IpOworICAg
IH0gZWxzZSB7CisgICAgICAgIG1faGFzRGVja0FjY2VzcyA9IG5lZWQ7CisgICAgICAgIG1fYWNj
ZXNzUGF0aCA9IFN0cmluZygpOworICAgICAgICBtX2FjY2Vzc0RvbWFpbiA9IFN0cmluZygpOwor
ICAgIH0KK30KKworYm9vbCBXTUxCcndDb250ZXh0OjpoYXNEZWNrQWNjZXNzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gbV9oYXNEZWNrQWNjZXNzOworfQorCitib29sIFdNTEJyd0NvbnRleHQ6Omlz
RGVja0FjY2Vzc2libGUoKQoreworICAgIGlmKCFtX2hhc0RlY2tBY2Nlc3MgfHwgIW1fcGFnZSB8
fCAhbV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSB8fCAhbV9wYWdlLT5iYWNrRm9yd2FyZExpc3Qo
KS0+YmFja0l0ZW0oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBIaXN0b3J5SXRlbSog
aGlzdEl0ZW0gPSBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5iYWNrSXRlbSgpOworICAgIEtV
UkwgdXJsKGhpc3RJdGVtLT51cmxTdHJpbmcoKSk7CisgICAgU3RyaW5nIHByZXZIb3N0ID0gdXJs
Lmhvc3QoKTsKKyAgICAvLyBmb3IgJ2ZpbGUnIFVSSSwgdGhlIGhvc3QgcGFydCBtYXkgYmUgZW1w
dHksIHNvIHdlIHNob3VsZCBjb21wbGV0ZSBpdC4KKyAgICBpZihwcmV2SG9zdC5pc0VtcHR5KCkp
CisgICAgICAgIHByZXZIb3N0ID0gImxvY2FsaG9zdCI7CisgICAgU3RyaW5nIHByZXZQYXRoID0g
dXJsLnBhdGgoKTsKKworICAgIGhpc3RJdGVtID0gbV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+
Y3VycmVudEl0ZW0oKTsKKyAgICBLVVJMIGN1clVybChoaXN0SXRlbS0+dXJsU3RyaW5nKCkpOwor
ICAgIFN0cmluZyBjdXJQYXRoID0gY3VyVXJsLnBhdGgoKTsKKworICAgIGlmKGVxdWFsSWdub3Jp
bmdSZWYodXJsLCBjdXJVcmwpKQorICAgICAgIHJldHVybiAgdHJ1ZTsKKworICAgIGJvb2wgY2Fu
QWNjZXNzID0gZmFsc2U7CisgICAgLy8gIi8iIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGlmIG5vdCBz
cGVjaWZpZWQKKyAgICBpZihtX2FjY2Vzc1BhdGguaXNFbXB0eSgpKSAgCisgICAgICAgIG1fYWNj
ZXNzUGF0aCA9ICIvIjsKKyAgICBlbHNlIGlmKG1fYWNjZXNzUGF0aC5lbmRzV2l0aCgiLyIpICYm
IChtX2FjY2Vzc1BhdGggIT0gIi8iKSkKKyAgICAgICAgbV9hY2Nlc3NQYXRoID0gbV9hY2Nlc3NQ
YXRoLmxlZnQoKG1fYWNjZXNzUGF0aC5sZW5ndGgoKS0xKSk7CisKKyAgICAvLyBjdXJyZW50IGRl
Y2sgZG9tYWluIGlzIHRoZSBkZWZhdWx0IHZhbHVlIGlmIG5vdCBzcGVjaWZpZWQKKyAgICBpZiht
X2FjY2Vzc0RvbWFpbi5pc0VtcHR5KCkpCisgICAgICAgIG1fYWNjZXNzRG9tYWluID0gcHJldkhv
c3Q7CisKKyAgICAvL2NvbnZlcnQgcmVsYXRpdmUgVVJMIHRvIGFic29sdXRlIFVSTCBiZWZvcmUg
cGVyZm9ybWluZyBwYXRoIG1hdGNoaW5nCisgICAgaWYocHJldkhvc3QgPT0gbV9hY2Nlc3NEb21h
aW4pIHsKKyAgICAgICAgaWYoIW1fYWNjZXNzUGF0aC5zdGFydHNXaXRoKCIvIikpIHsKKyAgICAg
ICAgICAgaW50IGlkeCA9IGN1clBhdGgucmV2ZXJzZUZpbmQoJy8nKTsKKyAgICAgICAgICAgaWYo
aWR4ICE9IC0xKSB7CisgICAgICAgICAgICAgICBjdXJQYXRoID0gY3VyUGF0aC5sZWZ0KGlkeCsx
KTsKKyAgICAgICAgICAgICAgIGN1clBhdGggKz0gbV9hY2Nlc3NQYXRoOworICAgICAgICAgICAg
ICAgY3VyVXJsLnNldFBhdGgoY3VyUGF0aCk7CisgICAgICAgICAgICAgICBtX2FjY2Vzc1BhdGgg
PSBjdXJVcmwucGF0aCgpOworICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAv
LyBwYXRoIHByZWZpeCBtYXRjaGluZworICAgIGlmKHByZXZQYXRoLnN0YXJ0c1dpdGgobV9hY2Nl
c3NQYXRoKSAmJiAKKyAgICAgICAoKHByZXZQYXRoW21fYWNjZXNzUGF0aC5sZW5ndGgoKV0gPT0g
Jy8nKSB8fCAocHJldlBhdGgubGVuZ3RoKCkgPT0gbV9hY2Nlc3NQYXRoLmxlbmd0aCgpKSkpIHsK
KyAgICAgICAgY2FuQWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAvLyBkb21haW4gc3VmZml4IG1h
dGNoaW5nCisgICAgICAgIHVuc2lnbmVkIGRvbWFpbkxlbiA9IG1fYWNjZXNzRG9tYWluLmxlbmd0
aCgpOworICAgICAgICB1bnNpZ25lZCBob3N0TGVuID0gcHJldkhvc3QubGVuZ3RoKCk7CisgICAg
ICAgIGlmKHByZXZIb3N0LmVuZHNXaXRoKG1fYWNjZXNzRG9tYWluKSAmJiAKKyAgICAgICAgICAg
KHByZXZIb3N0W2hvc3RMZW4tZG9tYWluTGVuLTFdID09ICcuJykgfHwgKGhvc3RMZW4gPT0gZG9t
YWluTGVuKSkgeworICAgICAgICAgICAgY2FuQWNjZXNzID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgIGNhbkFjY2VzcyA9IGZhbHNlOworICAgICAgICB9CisKKyAgICB9CisK
KyAgICByZXR1cm4gIGNhbkFjY2VzczsKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MQnJ3
Q29udGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEJyd0NvbnRleHQuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEJyd0NvbnRleHQuaAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MQnJ3Q29udGV4dF9oCisjZGVmaW5lIFdNTEJy
d0NvbnRleHRfaAorCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFBhZ2U7CitjbGFzcyBXTUxDYXJkRWxlbWVudDsKKwordHlwZWRlZiBIYXNoTWFwPFN0
cmluZywgU3RyaW5nPiBWYXJpYWJsZU1hcDsKKworY2xhc3MgV01MQnJ3Q29udGV4dCA6IHB1Ymxp
YyBSZWZDb3VudGVkPFdNTEJyd0NvbnRleHQ+IHsKKworcHVibGljOgorICAgIFdNTEJyd0NvbnRl
eHQoUGFnZSopOworICAgIH5XTUxCcndDb250ZXh0KCk7CisKKyAgICAvLyByZXNldCB0aGUgYnJv
d3NlciBjb250ZXh0IHdoZW4gJ05ld2NvbnRleHQnIGF0dHJpYnV0ZSBvZiBjYXJkIGVsZW1lbnQg
aXMKKyAgICAvLyBwZXJmb3JtZWQgYXMgcGFydCBvZiBnbyB0YXNrCisgICAgdm9pZCByZXNldCgp
OworCisgICAgLy8gdmFyaWFibGVzIG9wZXJhdGlvbnMgCisgICAgdm9pZCBzdG9yZVZhcmlhYmxl
KGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc3RvcmVWYXJpYWJsZXMo
VmFyaWFibGVNYXAmKTsKKyAgICBTdHJpbmcgZ2V0VmFyaWJhbGUoY29uc3QgU3RyaW5nJikgY29u
c3Q7CisgICAgYm9vbCBoYXNWYXJpYWJsZXMoKSBjb25zdDsKKworICAgIGludCBoaXN0b3J5TGVu
Z3RoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIaXN0b3J5TGVuZ3RoKGludCk7CisKKyAgICBQYWdl
KiBwYWdlKCkgY29uc3Q7CisKKyAgICBXTUxDYXJkRWxlbWVudCogYWN0aXZlQ2FyZCgpOworICAg
IHZvaWQgc2V0QWN0aXZlQ2FyZChXTUxDYXJkRWxlbWVudCopOworCisgICAgLy8gZGVjayBhY2Nl
c3MgY29udHJvbAorICAgIHZvaWQgc2V0RGVja0FjY2Vzc0RvbWFpbihjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHNldERlY2tBY2Nlc3NQYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0
TmVlZENoZWNrRGVja0FjY2Vzcyhib29sKTsKKyAgICBib29sIGhhc0RlY2tBY2Nlc3MoKSBjb25z
dDsKKyAgICBib29sIGlzRGVja0FjY2Vzc2libGUoKTsKK3ByaXZhdGU6CisgICAgUGFnZSogbV9w
YWdlOworICAgIFZhcmlhYmxlTWFwIG1fdmFyaWFibGVzOworICAgIGludCBtX2hpc3RMZW47Cisg
ICAgV01MQ2FyZEVsZW1lbnQqIG1fYWN0aXZlQ2FyZDsKKyAgICBTdHJpbmcgbV9hY2Nlc3NEb21h
aW47CisgICAgU3RyaW5nIG1fYWNjZXNzUGF0aDsKKyAgICBib29sIG1faGFzRGVja0FjY2VzczsK
K307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxDYXJk
RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDMwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTEVsZW1l
bnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRG9F
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2Vs
ZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIkZy
YW1lLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRl
ICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgInd0Zi9WZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTENhcmRFbGVtZW50OjpXTUxDYXJkRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogV01M
RWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2lzVmlzaWJsZShmYWxzZSkKKyAgICAsIG1f
aXNOZXdDb250ZXh0KGZhbHNlKQorICAgICwgbV9pc09yZGVyZWQodHJ1ZSkKKyAgICAsIG1fdGVt
cGxhdGUoTlVMTCkKKyAgICAsIG1fZXZudEhhbmRsZXIoTlVMTCkKKyAgICAsIG1faGFzSW50ckV2
ZW50KGZhbHNlKQorICAgICwgbV9ldnRUaW1lcihOVUxMKQoreworfQorCitXTUxDYXJkRWxlbWVu
dDo6fldNTENhcmRFbGVtZW50KCkgCit7CisgICAgaWYobV9ldm50SGFuZGxlcikgeworICAgICAg
ICBkZWxldGUgbV9ldm50SGFuZGxlcjsKKyAgICAgICAgbV9ldm50SGFuZGxlciA9IE5VTEw7Cisg
ICAgfQorCisgICAgbV90ZW1wbGF0ZSA9IE5VTEw7CisgICAgbV9ldnRUaW1lciA9IE5VTEw7Cit9
CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSogYXR0cikKK3sKKyAgICBXTUxJbnRyRXZlbnRUeXBlIGV0eXBlID0gVU5LTk9XTjsKKwor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyKXsKKyAgICAgICAgbV90aXRsZSA9IFdN
TEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKKyAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVudGVyZm9yd2FyZEF0dHIpIHsKKyAgICAg
ICAgZXR5cGUgPSBPTkVOVEVSRk9SV0FSRDsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBvbmVudGVyYmFja3dhcmRBdHRyKSB7CisgICAgICAgIGV0eXBlID0gT05FTlRFUkJBQ0tXQVJE
OworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9udGltZXJBdHRyKSB7CisgICAgICAg
IGV0eXBlID0gT05USU1FUjsKKyAgICB9IGVsc2UgaWYoYXR0ci0+bmFtZSgpID09IG5ld2NvbnRl
eHRBdHRyKSB7CisgICAgICAgIG1faXNOZXdDb250ZXh0ID0gKGF0dHItPnZhbHVlKCkgPT0gInRy
dWUiKSA/IHRydWUgOiBmYWxzZTsKKyAgICB9IGVsc2UgaWYoYXR0ci0+bmFtZSgpID09IG9yZGVy
ZWRBdHRyKSB7CisgICAgICAgIG1faXNPcmRlcmVkID0gKGF0dHItPnZhbHVlKCkgPT0gInRydWUi
KSA/IHRydWUgOiBmYWxzZTsKKyAgICB9CisgICAgCisgICAgLy8gcmVnaXN0ZXIgaW50cmluc2lj
IGV2ZW50IHRvIGNhcmQKKyAgICBpZihldHlwZSAhPSBVTktOT1dOKSB7CisgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKCJnbyIsICJnbyIs
ICIiKTsKKyAgICAgICAgRWxlbWVudCogZ28gPSBXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01M
RWxlbWVudChxTmFtZSwgZG9jdW1lbnQoKSwgZmFsc2UpOyAKKyAgICAgICAgU3RyaW5nIGhyZWYg
PSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwg
ImVzY2FwZSIpOworICAgICAgICBnby0+c2V0QXR0cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwg
ZWMpOworCisgICAgICAgIFdNTEludHJpbnNpY0V2ZW50IGV2OworICAgICAgICBldi50YXNrID0g
c3RhdGljX2Nhc3Q8V01MR29FbGVtZW50Kj4oZ28pOworICAgICAgICBldi50YXJnZXRVUkkgPSBo
cmVmOyAKKworICAgICAgICBpZighbV9ldm50SGFuZGxlcikgeworICAgICAgICAgICAgbV9ldm50
SGFuZGxlciA9IG5ldyBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHNldEhhc0ludHJFdmVudCh0cnVlKTsKKyAgICAgICAgbV9ldm50SGFuZGxlci0+cmVn
aXN0ZXJJbnRyaW5zaWNFdmVudChldHlwZSwgZXYpOworICAgIH0KK30KKworUmVuZGVyT2JqZWN0
KiBXTUxDYXJkRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHls
ZSogc3R5bGUpIAoreworICAgIGlmKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgc3R5bGUtPnNldERp
c3BsYXkoTk9ORSk7CisgICAgCisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Y3JlYXRlT2JqZWN0
KHRoaXMsIHN0eWxlKTsKK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6c2V0VmlzaWJpbGl0eShi
b29sIGlzVmlzaWJsZSkgCit7CisgICAgbV9pc1Zpc2libGUgPSBpc1Zpc2libGU7Cit9CisKK2Jv
b2wgV01MQ2FyZEVsZW1lbnQ6OnZpc2libGUoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9pc1Zp
c2libGU7Cit9CisKK2Jvb2wgV01MQ2FyZEVsZW1lbnQ6OmlzTmV3Q29udGV4dCgpIGNvbnN0IAor
eworICAgIHJldHVybiBtX2lzTmV3Q29udGV4dDsKK30KKworYm9vbCBXTUxDYXJkRWxlbWVudDo6
aXNPcmRlcmVkKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1faXNPcmRlcmVkOworfQorCitTdHJp
bmcgV01MQ2FyZEVsZW1lbnQ6OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aXRsZTsg
Cit9CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OmJpbmRUZW1wbGF0ZShXTUxUZW1wbGF0ZUVsZW1l
bnQqIHRlbXBsKSAKK3sKKyAgICBtX3RlbXBsYXRlID0gdGVtcGw7Cit9CisKK1dNTFRlbXBsYXRl
RWxlbWVudCogV01MQ2FyZEVsZW1lbnQ6OnRlbXBsYXRlRWxlbWVudCgpCit7CisgICAgcmV0dXJu
IG1fdGVtcGxhdGU7Cit9CisKK1dNTEludHJpbnNpY0V2ZW50SGFuZGxlciogV01MQ2FyZEVsZW1l
bnQ6OmV2ZW50SGFuZGxlcigpCit7CisgICAgaWYobV9oYXNJbnRyRXZlbnQgJiYgIW1fZXZudEhh
bmRsZXIpICB7CisgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyKCk7CisgICAgfQorICAgIHJldHVybiBtX2V2bnRIYW5kbGVyOworfQorCit2b2lkIFdN
TENhcmRFbGVtZW50OjpzZXRIYXNJbnRyRXZlbnQoYm9vbCBoYXMpCit7CisgICAgbV9oYXNJbnRy
RXZlbnQgPSBoYXM7Cit9CisKK2Jvb2wgV01MQ2FyZEVsZW1lbnQ6Omhhc0ludHJFdmVudCgpCit7
CisgICAgcmV0dXJuIG1faGFzSW50ckV2ZW50OworfQorCit2b2lkIFdNTENhcmRFbGVtZW50Ojpz
ZXRJbnRyRXZlbnRUaW1lcihXTUxUaW1lckVsZW1lbnQqIHRpbWVyKQoreworICAgIC8vIG9ubHkg
b25lIHRpbWVyIGlzIGFsbG93ZWQgaW4gYSBjYXJkIAorICAgIGlmKCFtX2V2dFRpbWVyKSB7Cisg
ICAgICAgIG1fZXZ0VGltZXIgPSB0aW1lcjsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2V2dFRp
bWVyID0gMDsKKyAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoTXVs
dGlUaW1lckVsZW1lbnRzRXJyb3IpOworICAgIH0KK30KKworV01MVGltZXJFbGVtZW50KiBXTUxD
YXJkRWxlbWVudDo6ZXZlbnRUaW1lcigpCit7CisgICAgcmV0dXJuIG1fZXZ0VGltZXI7Cit9CisK
K3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnJlZ2lzdGVyRG9FbGVtZW50KFdNTERvRWxlbWVudCogZSkK
K3sKKyAgICBpZihlKSB7CisgICAgICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6aXRlcmF0b3Ig
aXQgPSBtX2RvVmVjcy5iZWdpbigpOworICAgICAgICBXTUxEb0VsZW1lbnQqIGRvZSA9IE5VTEw7
CisgICAgICAgIHdoaWxlKGl0ICE9IG1fZG9WZWNzLmVuZCgpKSB7CisgICAgICAgICAgICBkb2Ug
PSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPigqaXQrKyk7CisKKyAgICAgICAgICAgIGlmKGRv
ZS0+ZG9OYW1lKCkgPT0gZS0+ZG9OYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBXTUxIZWxwZXI6
OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihTYW1lTmFtZURvRWxlbWVudHNFcnJvcik7CisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1f
ZG9WZWNzLmFwcGVuZChlKTsKKyAgICAgICAgZS0+c2V0QWN0aXZlKHRydWUpOworICAgIH0KK30K
Kwordm9pZCBXTUxDYXJkRWxlbWVudDo6c2hhZG93RG9FbGVtZW50SWZOZWVkZWQoKQoreworICAg
IGlmKCFtX3RlbXBsYXRlKSAKKyAgICAgICAgcmV0dXJuOworCisgICAgVmVjdG9yPFdNTERvRWxl
bWVudCo+IHRlbXBsRG9OYW1lVmVjcyA9IG1fdGVtcGxhdGUtPmdldERvRWxlbWVudHMoKTsKKyAg
ICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0ZXJhdG9yIGNhcmRJdCA9IG1fZG9WZWNzLmJlZ2lu
KCk7CisgICAgVmVjdG9yPFdNTERvRWxlbWVudCo+OjppdGVyYXRvciB0ZW1wbEl0ID0gdGVtcGxE
b05hbWVWZWNzLmJlZ2luKCk7IAorCisgICAgU3RyaW5nIHRlbXBsRG9OYW1lOworICAgIFN0cmlu
ZyBjYXJkRG9OYW1lOworICAgIFdNTERvRWxlbWVudCogdGVtcGxEbyA9IDA7CisgICAgZm9yKDsg
dGVtcGxJdCAhPSB0ZW1wbERvTmFtZVZlY3MuZW5kKCk7ICsrdGVtcGxJdCl7CisgICAgICAgIHRl
bXBsRG8gPSAqdGVtcGxJdDsKKyAgICAgICAgdGVtcGxEb05hbWUgPSB0ZW1wbERvLT5kb05hbWUo
KTsKKyAgICAgICAgYm9vbCBpc0FjdGl2ZSA9IHRydWU7CisgICAgICAgIGZvcihjYXJkSXQgPSBt
X2RvVmVjcy5iZWdpbigpOyBjYXJkSXQgIT0gbV9kb1ZlY3MuZW5kKCk7ICsrY2FyZEl0KSB7Cisg
ICAgICAgICAgICBpZih0ZW1wbERvTmFtZSA9PSAoKmNhcmRJdCktPmRvTmFtZSgpKSB7CisgICAg
ICAgICAgICAgICAgaXNBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsRG8tPnNldEFjdGl2ZShpc0Fj
dGl2ZSk7CisgICAgfQorfQorCisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OmhhbmRsZUludHJFdmVu
dElmTmVlZGVkKCkKK3sKKyAgICBGcmFtZUxvYWRlciAqbG9hZGVyID0gZG9jdW1lbnQoKS0+ZnJh
bWUoKS0+bG9hZGVyKCk7CisgICAgaW50IGN1ckhpc3RMZW4gPSBsb2FkZXItPmdldEhpc3RvcnlM
ZW5ndGgoKTsKKyAgICBpbnQgb2xkSGlzdExlbiA9IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRl
eHQoKS0+aGlzdG9yeUxlbmd0aCgpOworCisgICAgLy8gY2FsY3VsYXRlIHRoZSBlbnRyeSBtZXRo
b2Qgb2YgY3VycmVudCBjYXJkIAorICAgIFdNTEludHJFdmVudFR5cGUgZXR5cGU7CisgICAgaWYo
b2xkSGlzdExlbiA+IGN1ckhpc3RMZW4pIHsKKyAgICAgICAgZXR5cGUgPSBPTkVOVEVSQkFDS1dB
UkQ7CisgICAgfSBlbHNlIGlmKG9sZEhpc3RMZW4gPCBjdXJIaXN0TGVuKSB7CisgICAgICAgIGV0
eXBlID0gT05FTlRFUkZPUldBUkQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXR5cGUgPSBVTktO
T1dOOworICAgIH0KKyAKKyAgICAvLyB1cGRhdGUgdGhlIGhoaXN0b3J5IGxlbmd0aCBpbiB0aGUg
Y3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0
KCktPnNldEhpc3RvcnlMZW5ndGgoY3VySGlzdExlbik7CisgCisgICAgLy8gaGFuZGxlIGludHJp
bnNpYyBldmVudCwgYW5kIHNoYWRvdyB0aGUgZGVjay1sZXZlbCBldmVudCBpZiBuZWVkZWQKKyAg
ICBib29sIGhhc0ludHJFdmVudCA9ICBmYWxzZTsKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIqIGV2SGFuZGxlciA9IG1fZXZudEhhbmRsZXI7IAorICAgIGlmKGV0eXBlICE9IFVOS05PV04p
IHsKKyAgICAgICAgaWYoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQo
ZXR5cGUpKSB7CisgICAgICAgICAgICAgICAgaGFzSW50ckV2ZW50ID0gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlIGlmKG1fdGVtcGxhdGUpIHsKKyAgICAgICAgICAgIGV2SGFuZGxlciA9IG1fdGVtcGxh
dGUtPmV2ZW50SGFuZGxlcigpOworICAgICAgICAgICAgaWYoZXZIYW5kbGVyICYmIGV2SGFuZGxl
ci0+aGFzSW50cmluc2ljRXZlbnQoZXR5cGUpKQorICAgICAgICAgICAgICAgIGhhc0ludHJFdmVu
dCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgCisgICAgaWYoaGFzSW50ckV2ZW50KSB7Cisg
ICAgICAgIGV2SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2ZW50KGV0eXBlKTsKKyAgICB9IGVs
c2UgeworICAgICAgICAvLyBzdGFydCB0aGUgdGltZXIgaWYgaXQgZXhpc3RzIGluIGN1cnJlbnQg
Y2FyZAorICAgICAgICBpZihtX2V2dFRpbWVyKSB7CisgICAgICAgICAgICBtX2V2dFRpbWVyLT5z
dGFydCgpOworICAgICAgICB9CisKKworICAgICAgICAvL2luaXRpYWxpc2UgaW5wdXQgZWxlbWVu
dHMoZWcuIGlucHV0LCBzZWxlY3QsIGV0YykgaW4gdGhpcyBjYXJkCisgICAgICAgIE5vZGUqIG5v
ZGUgPSB0aGlzOworICAgICAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpKSB7CisgICAgICAgICAgICBpZiAobm9kZS0+aGFzVGFnTmFtZShpbnB1dFRhZykpIHsKKyAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxJbnB1dEVsZW1lbnQqPihub2RlKS0+aW5pdCgp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpIHsK
KyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxTZWxlY3RFbGVtZW50Kj4obm9kZSktPnNl
bGVjdEluaXRpYWxPcHRpb25zKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgIH0K
K30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6dXBkYXRlVGFibGVFbGVtZW50KCkKK3sKKyAgICBO
b2RlKiBub2RlID0gdGhpczsgCisgICAgV01MVGFibGVFbGVtZW50KiB0YWJsZSA9IDA7CisgICAg
d2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSkgeworICAgICAgICBpZiAo
bm9kZS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6OnRhYmxlVGFnKSkgeworICAgICAgICAgICAgdGFi
bGUgPSBzdGF0aWNfY2FzdDxXTUxUYWJsZUVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgIGlm
ICh0YWJsZSkKKyAgICAgICAgICAgICAgICB0YWJsZS0+aW5pdCgpOworICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUtPmhhc1RhZ05hbWUoV01MTmFtZXM6OmNhcmRUYWcpKSB7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MQ2Fy
ZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVudC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MQ2FyZEVsZW1lbnRfaAorI2RlZmluZSBX
TUxDYXJkRWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiU3R5
bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRlbXBsYXRlRWxlbWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50OworY2xhc3MgV01MVGltZXJFbGVt
ZW50OworY2xhc3MgV01MRG9FbGVtZW50OworCitjbGFzcyBXTUxDYXJkRWxlbWVudCA6IHB1Ymxp
YyBXTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxDYXJkRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxDYXJkRWxlbWVudCgpOworCisg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwor
ICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJl
bmRlclN0eWxlKik7CisKKyAgICB2b2lkIHNldFZpc2liaWxpdHkoYm9vbCk7CisgICAgYm9vbCB2
aXNpYmxlKCkgY29uc3Q7CisKKyAgICBib29sIGlzTmV3Q29udGV4dCgpIGNvbnN0OworICAgIGJv
b2wgaXNPcmRlcmVkKCkgY29uc3Q7CisKKyAgICBTdHJpbmcgdGl0bGUoKSBjb25zdDsKKworICAg
IHZvaWQgYmluZFRlbXBsYXRlKFdNTFRlbXBsYXRlRWxlbWVudCopOworICAgIFdNTFRlbXBsYXRl
RWxlbWVudCogdGVtcGxhdGVFbGVtZW50KCk7CisKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIqIGV2ZW50SGFuZGxlcigpOworICAgIGJvb2wgaGFzSW50ckV2ZW50KCk7CisgICAgdm9pZCBz
ZXRIYXNJbnRyRXZlbnQoYm9vbCk7CisgICAgdm9pZCBoYW5kbGVJbnRyRXZlbnRJZk5lZWRlZCgp
OworCisgICAgdm9pZCBzZXRJbnRyRXZlbnRUaW1lcihXTUxUaW1lckVsZW1lbnQqKTsKKyAgICBX
TUxUaW1lckVsZW1lbnQqIGV2ZW50VGltZXIoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJEb0VsZW1l
bnQoV01MRG9FbGVtZW50Kik7CisgICAgdm9pZCBzaGFkb3dEb0VsZW1lbnRJZk5lZWRlZCgpOwor
CisgICAgdm9pZCB1cGRhdGVUYWJsZUVsZW1lbnQoKTsKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lz
VmlzaWJsZTsKKyAgICBTdHJpbmcgbV90aXRsZTsKKyAgICBib29sIG1faXNOZXdDb250ZXh0Owor
ICAgIGJvb2wgbV9pc09yZGVyZWQ7CisgICAgV01MVGVtcGxhdGVFbGVtZW50KiBtX3RlbXBsYXRl
OworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogbV9ldm50SGFuZGxlcjsKKyAgICBib29s
IG1faGFzSW50ckV2ZW50OworICAgIFdNTFRpbWVyRWxlbWVudCogbV9ldnRUaW1lcjsgCisgICAg
VmVjdG9yPFdNTERvRWxlbWVudCo+IG1fZG9WZWNzOworfTsKKworfSAvL25hbWVzcGFjZQorCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTERvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21s
L1dNTERvRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2Fk
ZXIuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNp
bmNsdWRlICJSZW5kZXJCdXR0b24uaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1
ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFt
ZXMuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTFBvc3RmaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxTZXR2
YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTFRp
bWVyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIldNTENh
cmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFt
ZXM7CisKK1dNTERvRWxlbWVudDo6V01MRG9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRh
ZywgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRNTElucHV0
RWxlbWVudCh0YWcsIGRvYywgZm9ybSkKKyAgICAsIG1fdGFzayhOVUxMKQorICAgICwgbV9pc09w
dGlvbihmYWxzZSkKKyAgICAsIG1faXNOb29wKGZhbHNlKQorICAgICwgbV9pc0FjdGl2ZShmYWxz
ZSkKK3sKK30KKworV01MRG9FbGVtZW50Ojp+V01MRG9FbGVtZW50KCkge30KKwordm9pZCBXTUxE
b0VsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGUpIAoreworICAgIGlmKChlLT50
eXBlKCkgPT0gY2xpY2tFdmVudCkgJiYgIW1faXNPcHRpb24pIHsKKworICAgICAgICBpZigobV90
eXBlID09ICJhY2NlcHQiKSB8fCAobV90eXBlID09ICJvcHRpb25zIikpIHsgCisgICAgICAgICAg
ICBpZihtX3Rhc2spCisgICAgICAgICAgICAgICAgbV90YXNrLT5leGVjKGUpOworICAgICAgICB9
IGVsc2UgaWYobV90eXBlID09ICJwcmV2IikgeworICAgICAgICAgICAgLy8gc3RvcCB0aGUgdGlt
ZXIgb2YgdGhlIGN1cnJlbnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICAgICAgICAgIFdNTENh
cmRFbGVtZW50KiBjYXJkID0gV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5hY3RpdmVD
YXJkKCk7CisgICAgICAgICAgICBpZihjYXJkICYmIGNhcmQtPmV2ZW50VGltZXIoKSkgeworICAg
ICAgICAgICAgICAgIGNhcmQtPmV2ZW50VGltZXIoKS0+c3RvcCgpOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBQYWdlKiBwYWdlID0gV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgp
LT5wYWdlKCk7CisgICAgICAgICAgICBwYWdlLT5nb0JhY2soKTsKKyAgICAgICAgfSBlbHNlIGlm
KG1fdHlwZSA9PSAicmVzZXQiKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRCcndD
b250ZXh0KCktPnJlc2V0KCk7CisgICAgICAgIH0gZWxzZSBpZihtX3R5cGUgPT0gImRlbGV0ZSIp
IHsKKyAgICAgICAgICAgIC8vVE9ETworICAgICAgICB9IGVsc2UgeyAKKyAgICAgICAgICAgIC8v
IEFzIGZvciAnaGVscCcsJ3Vua25vd24nLCAnWC0qLHgtKicsJ1Zbdl1OW25dRFtkXS4qJywgd2Ug
ZG8gbm90aGluZworICAgICAgICB9CisgICAgfQorCit9CisKK3ZvaWQgV01MRG9FbGVtZW50Ojpp
bnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKK3sKKyAgICBmb3IgKE5vZGUqIHBhcmVudCA9IHBh
cmVudE5vZGUoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSl7CisgICAg
ICAgIGlmKHBhcmVudC0+aGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykpIHsKKyAgICAgICAgICAgIHN0
YXRpY19jYXN0PFdNTFRlbXBsYXRlRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyRG9FbGVtZW50
KHRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH1lbHNlIGlmKHBhcmVudC0+aGFz
VGFnTmFtZShjYXJkVGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1l
bnQqPihwYXJlbnQpLT5yZWdpc3RlckRvRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorfQorCitSZW5kZXJPYmplY3QqIFdNTERvRWxlbWVudDo6Y3Jl
YXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIHJhLCBSZW5kZXJTdHlsZSogcnMpIAoreworICAgIGlm
KCFtX2lzQWN0aXZlIHx8IG1faXNPcHRpb24gfHwgbV9pc05vb3ApCisgICAgICAgIHJldHVybiBO
VUxMOworCisgICAgUmVuZGVyQnV0dG9uKiBidXR0b24gPSBuZXcgKHJhKSBSZW5kZXJCdXR0b24o
dGhpcyk7IAorICAgIHJzLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OmxpZ2h0R3JheSk7Cisg
ICAgYnV0dG9uLT5zZXRTdHlsZShycyk7CisgICAgYnV0dG9uLT5zZXRUZXh0KG1fbGFiZWwuaXNF
bXB0eSgpID8gbV9uYW1lIDogbV9sYWJlbCk7CisgICAgLy9idXR0b24tPnVwZGF0ZUJlZm9yZUFm
dGVyQ29udGVudChSZW5kZXJTdHlsZTo6QUZURVIpOworICAgIHJldHVybiBidXR0b247Cit9CisK
K3ZvaWQgV01MRG9FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUq
IGF0dHIpIAoreworICAgIGlmKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgeworICAgICAgICBp
ZihXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7CisgICAgICAgICAg
ICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZl
cmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBt
X3R5cGUgPSBhdHRyLT52YWx1ZSgpOworCisgICAgICAgIGlmKG1fbmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBtX25hbWUgPSBtX3R5cGU7CisKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBuYW1lQXR0cikgeworICAgICAgICBpZihXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0
dHItPnZhbHVlKCkpKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBv
cnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKKyAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBsYWJlbEF0dHIpIHsKKyAgICAgICAgbV9sYWJlbCA9IFdN
TEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKKyAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvcHRpb25hbEF0dHIpIHsKKyAgICAgICAgbV9p
c09wdGlvbiA9IChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIikgPyB0cnVlIDogZmFsc2U7CisgICAg
fQorCit9CisKK3ZvaWQgV01MRG9FbGVtZW50OjpyZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQq
IHRhc2spIAoreworICAgIG1fdGFzayA9IHRhc2s7Cit9CisKK3ZvaWQgV01MRG9FbGVtZW50Ojpz
ZXROb29wKGJvb2wgbm9vcCkgCit7CisgICAgbV9pc05vb3AgPSBub29wOworfQorCitTdHJpbmcg
V01MRG9FbGVtZW50Ojpkb05hbWUoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9uYW1lOworfQor
Cit2b2lkIFdNTERvRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIG1faXNB
Y3RpdmUgPSBhY3RpdmU7Cit9CisgCitib29sIFdNTERvRWxlbWVudDo6aXNBY3RpdmUoKSBjb25z
dAoreworICAgIHJldHVybiBtX2lzQWN0aXZlOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxEb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb0VsZW1lbnQuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTERvRWxlbWVudC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxEb0VsZW1lbnRfaAorI2RlZmluZSBXTUxE
b0VsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEV2ZW50OworY2xhc3MgSFRNTEZvcm1FbGVtZW50OworY2xhc3Mg
V01MVGFza0VsZW1lbnQ7CisKK2NsYXNzIFdNTERvRWxlbWVudCA6IHB1YmxpYyBIVE1MSW5wdXRF
bGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxEb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworICAgIHZpcnR1YWwgfldNTERvRWxl
bWVudCgpOworCisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsgCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRI
YW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBk
ZWVwKTsKKyAgICB2b2lkIHJlZ2lzdGVyVGFzayhXTUxUYXNrRWxlbWVudCopOworCisgICAgLy9y
ZWNvcmQgdGhlIG5vb3AgdGFzaworICAgIHZvaWQgc2V0Tm9vcChib29sKTsKKworICAgIHZvaWQg
c2V0QWN0aXZlKGJvb2wpOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsKKyAgICBTdHJpbmcg
ZG9OYW1lKCkgY29uc3Q7Citwcml2YXRlOgorICAgIFdNTFRhc2tFbGVtZW50KiBtX3Rhc2s7Cisg
ICAgU3RyaW5nIG1fdHlwZTsKKyAgICBTdHJpbmcgbV9sYWJlbDsKKyAgICBTdHJpbmcgbV9uYW1l
OworICAgIGJvb2wgbV9pc09wdGlvbjsKKyAgICBib29sIG1faXNOb29wOworICAgIGJvb2wgbV9p
c0FjdGl2ZTsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dt
bC9XTUxEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRG9jdW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MRG9jdW1lbnQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlBhZ2UuaCIKKyNpbmNsdWRlICJXTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIldNTFRva2VuaXpl
ci5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxEb2N1bWVudDo6V01MRG9jdW1lbnQoRnJhbWUq
IGZyYW1lKQorICAgIDogRG9jdW1lbnQoZnJhbWUsIGZhbHNlKSAKK3sKKyAgICBjbGVhclhNTFZl
cnNpb24oKTsKKworICAgIFBhZ2UqIHBhZ2UgPSB0aGlzLT5wYWdlKCk7CisgICAgaWYgKHBhZ2Ug
JiYgIXBhZ2UtPndtbEJyd0NvbnRleHQoKSkgeworICAgICAgICBSZWZQdHI8V01MQnJ3Q29udGV4
dD4gYnJ3Y29udGV4dCA9IG5ldyBXTUxCcndDb250ZXh0KHBhZ2UpOworICAgICAgICBwYWdlLT5z
ZXRXbWxCcndDb250ZXh0KGJyd2NvbnRleHQpOworICAgICAgICBXTUxIZWxwZXI6OnNldEN1cnJl
bnRCcndDb250ZXh0KGJyd2NvbnRleHQuZ2V0KCkpOworICAgIH0KKworfQorCitXTUxEb2N1bWVu
dDo6fldNTERvY3VtZW50KCkge30KKworVG9rZW5pemVyICpXTUxEb2N1bWVudDo6Y3JlYXRlVG9r
ZW5pemVyKCkgCit7CisgICAgcmV0dXJuIG5ldyBXTUxUb2tlbml6ZXIodGhpcyk7Cit9CisKK2lu
bGluZSBib29sIFdNTERvY3VtZW50Ojppc1dNTERvY3VtZW50KCkgY29uc3QgCit7IAorICAgIHJl
dHVybiB0cnVlOyAKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwvV01MRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MRG9jdW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgV01MRG9jdW1lbnRfaAorI2RlZmluZSBXTUxEb2N1bWVudF9o
CisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MRG9jdW1lbnQgOiBwdWJsaWMg
RG9jdW1lbnQsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V01MRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IFdNTERvY3VtZW50KGZyYW1lKTsKKyAgICB9CisgICAgV01MRG9j
dW1lbnQoRnJhbWUqKTsKKyAgICB2aXJ0dWFsIH5XTUxEb2N1bWVudCgpOworCisgICAgdmlydHVh
bCBib29sIGlzV01MRG9jdW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRva2VuaXplciogY3Jl
YXRlVG9rZW5pemVyKCk7Cit9OworCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDog
V2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJX
TUxEb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJXTUxI
ZWxwZXIuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgorI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCisjaW5j
bHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiSFRNTEZvcm1FbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgorI2lu
Y2x1ZGUgIlJlbmRlcldvcmRCcmVhay5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVk
ZSAiVGV4dC5oIgorI2luY2x1ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIlhNTFRva2Vu
aXplci5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKwordXNpbmcgc3RkOjptaW47Cit1c2luZyBzdGQ6Om1h
eDsKKworV01MRWxlbWVudDo6V01MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCAqZG9jKQorICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpIHt9CisK
KworV01MRWxlbWVudDo6fldNTEVsZW1lbnQoKSB7fQorCit2b2lkIFdNTEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopIHt9CisKK3ZvaWQgV01MRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgaWYobG9jYWxOYW1lKCkgPT0gIm5v
b3AiKSB7CisgICAgICAgIGZvciAoTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOyBwYXJlbnQ7
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKXsKKyAgICAgICAgICAgIGlmKHBhcmVudC0+
aGFzVGFnTmFtZShkb1RhZykpIHsKKyAgICAgICAgICAgICAgICBXTUxEb0VsZW1lbnQqIGRvZSA9
IHN0YXRpY19jYXN0PFdNTERvRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgICAgICAgICAgaWYo
ZG9lLT5hdHRhY2hlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvZS0+ZGV0YWNoKCk7Cisg
ICAgICAgICAgICAgICAgICAgIGRvZS0+c2V0Tm9vcCh0cnVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgZG9lLT5hdHRhY2goKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9IGVsc2UgaWYocGFyZW50LT5oYXNUYWdOYW1lKGFuY2hvclRhZykp
IHsKKyAgICAgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihX
cm9uZ1Rhc2tJbkFuY2hvckVsZW1lbnRFcnJvcik7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KworICAgIH0KKworfQorCitSZW5kZXJPYmplY3QqIFdNTEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqIHN0eWxlKSAKK3sKKyAgcmV0dXJuIFJlbmRlck9i
amVjdDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxlKTsKK30KKworYm9vbCBXTUxFbGVtZW50Ojpp
c0hUTUxFbGVtZW50KCkgY29uc3QgCit7IAorICAgIHJldHVybiB0cnVlOyAKK30KKworfQpJbmRl
eDogV2ViQ29yZS93bWwvV01MRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dN
TEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEVsZW1lbnQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MRWxlbWVudF9oCisjZGVm
aW5lIFdNTEVsZW1lbnRfaAorCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICAgICAgICAgICAgICAgICAg
ICAgICAKK2NsYXNzIFdNTEVsZW1lbnQgOiBwdWJsaWMgU3R5bGVkRWxlbWVudCB7CitwdWJsaWM6
CisgICAgV01MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCop
OworICAgIHZpcnR1YWwgfldNTEVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3Qq
IGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFs
IGJvb2wgaXNIVE1MRWxlbWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZElu
dG9UcmVlKGJvb2wgZGVlcCk7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDog
V2ViQ29yZS93bWwvV01MRWxlbWVudEZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d21sL1dNTEVsZW1lbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dN
TEVsZW1lbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXTUxF
bGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MQ2Fy
ZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxBRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEFuY2hv
ckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQcmV2RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEdv
RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFBvc3RmaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRG9FbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MUmVmcmVzaEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxUaW1lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUYWJsZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQRWxl
bWVudC5oIgorCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTEJSRWxlbWVu
dC5oIgorI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxl
Um93RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNlbGxFbGVtZW50LmgiCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOjpXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpIVE1M
TmFtZXM7CisKK3R5cGVkZWYgRWxlbWVudCAqKCpDb25zdHJ1Y3RvckZ1bmMpKERvY3VtZW50ICpk
b2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKK3R5cGVkZWYgV1RGOjpIYXNoTWFwPEF0b21pY1N0
cmluZ0ltcGwqLCBDb25zdHJ1Y3RvckZ1bmM+IEZ1bmN0aW9uTWFwOworCitzdGF0aWMgRnVuY3Rp
b25NYXAgKmdGdW5jdGlvbk1hcCA9IDA7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworRWxlbWVu
dCAqY2FyZENvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQor
eworICAgIHJldHVybiBuZXcgV01MQ2FyZEVsZW1lbnQoY2FyZFRhZywgZG9jKTsKK30KKworRWxl
bWVudCAqd21sX2FDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNl
cikKK3sKKyAgICByZXR1cm4gbmV3IFdNTEFFbGVtZW50KFdNTE5hbWVzOjphVGFnLCBkb2MpOwor
fQorCitFbGVtZW50ICppbWdDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTEltYWdlRWxlbWVudChIVE1MTmFtZXM6Omlt
Z1RhZywgZG9jKTsKK30KKworRWxlbWVudCAqYnJDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBi
b29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxCUkVsZW1lbnQoZG9j
KTsKK30KKworRWxlbWVudCAqcENvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MUEVsZW1lbnQoZG9jKTsKK30KKworRWxl
bWVudCAqaW5wdXRDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNl
cikKK3sKKyAgICByZXR1cm4gbmV3IFdNTElucHV0RWxlbWVudChXTUxOYW1lczo6aW5wdXRUYWcs
IGRvYyk7Cit9CisKK0VsZW1lbnQgKmFuY2hvckNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MQW5jaG9yRWxlbWVudChX
TUxOYW1lczo6YW5jaG9yVGFnLCBkb2MpOworICAgIAorfQorCitFbGVtZW50ICpzZWxlY3RDb25z
dHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1
cm4gbmV3IFdNTFNlbGVjdEVsZW1lbnQoV01MTmFtZXM6OnNlbGVjdFRhZywgZG9jKTsKK30KKwor
RWxlbWVudCAqb3B0aW9uQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxPcHRpb25FbGVtZW50KGRvYyk7Cit9CisKK0Vs
ZW1lbnQgKnByZXZDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNl
cikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFByZXZFbGVtZW50KGRvYyk7Cit9CisKK0VsZW1lbnQg
KmdvQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7Cisg
ICAgcmV0dXJuIG5ldyBXTUxHb0VsZW1lbnQoV01MTmFtZXM6OmdvVGFnLCBkb2MpOworfQorCitF
bGVtZW50ICpwb3N0ZmllbGRDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZXRlZEJ5
UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MUG9zdGZpZWxkRWxlbWVudChXTUxOYW1lczo6
cG9zdGZpZWxkVGFnLCBkb2MpOworfQorCitFbGVtZW50ICpzZXR2YXJDb25zdHJ1Y3RvcihEb2N1
bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFNl
dHZhckVsZW1lbnQoV01MTmFtZXM6OnNldHZhclRhZywgZG9jKTsKK30KKworRWxlbWVudCAqdGFi
bGVDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAg
ICByZXR1cm4gbmV3IFdNTFRhYmxlRWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICp0ckNvbnN0
cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVy
biBuZXcgSFRNTFRhYmxlUm93RWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICp0ZENvbnN0cnVj
dG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBu
ZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQoSFRNTE5hbWVzOjp0ZFRhZyxkb2MpOworfQorCitFbGVt
ZW50ICpkb0NvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQor
eworICAgIHJldHVybiBuZXcgV01MRG9FbGVtZW50KGRvVGFnLCBkb2MpOworfQorCitFbGVtZW50
ICpyZWZyZXNoQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBXTUxSZWZyZXNoRWxlbWVudChyZWZyZXNoVGFnLCBkb2MpOwor
fQorCitFbGVtZW50ICp0ZW1wbGF0ZUNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MVGVtcGxhdGVFbGVtZW50KHRlbXBs
YXRlVGFnLCBkb2MpOworfQorCitFbGVtZW50ICp0aW1lckNvbnN0cnVjdG9yKERvY3VtZW50ICpk
b2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MVGltZXJFbGVt
ZW50KHRpbWVyVGFnLCBkb2MpOworfQorCitFbGVtZW50ICphY2Nlc3NDb25zdHJ1Y3RvcihEb2N1
bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTEFj
Y2Vzc0VsZW1lbnQoYWNjZXNzVGFnLCBkb2MpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgY3Jl
YXRlRnVuY3Rpb25NYXBJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGdGdW5jdGlvbk1hcCkKKyAg
ICAgICAgcmV0dXJuOworICAgIC8vIENyZWF0ZSB0aGUgdGFibGUuCisgICAgZ0Z1bmN0aW9uTWFw
ID0gbmV3IEZ1bmN0aW9uTWFwOworICAgIAorICAgIC8vIFBvcHVsYXRlIGl0IHdpdGggY29uc3Ry
dWN0b3IgZnVuY3Rpb25zLgorICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpjYXJkVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgY2FyZENvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAt
PnNldChXTUxOYW1lczo6YVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHdtbF9hQ29uc3RydWN0b3Ip
OworICAgIGdGdW5jdGlvbk1hcC0+c2V0KEhUTUxOYW1lczo6aW1nVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgaW1nQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KEhUTUxOYW1lczo6
YnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBickNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25N
YXAtPnNldChXTUxOYW1lczo6cFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHBDb25zdHJ1Y3Rvcik7
CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmlucHV0VGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgaW5wdXRDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6
OmFuY2hvclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGFuY2hvckNvbnN0cnVjdG9yKTsKKyAgICBn
RnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6c2VsZWN0VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
c2VsZWN0Q29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpvcHRp
b25UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBvcHRpb25Db25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQoV01MTmFtZXM6OnByZXZUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBwcmV2Q29u
c3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpnb1RhZy5sb2NhbE5h
bWUoKS5pbXBsKCksIGdvQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5h
bWVzOjpwb3N0ZmllbGRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBwb3N0ZmllbGRDb25zdHJ1Y3Rv
cik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnNldHZhclRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksIHNldHZhckNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxO
YW1lczo6dGFibGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCB0YWJsZUNvbnN0cnVjdG9yKTsKKyAg
ICBnRnVuY3Rpb25NYXAtPnNldChIVE1MTmFtZXM6OnRyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
dHJDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoSFRNTE5hbWVzOjp0ZFRhZy5s
b2NhbE5hbWUoKS5pbXBsKCksIHRkQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0
KFdNTE5hbWVzOjpyZWZyZXNoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgcmVmcmVzaENvbnN0cnVj
dG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6ZG9UYWcubG9jYWxOYW1lKCku
aW1wbCgpLCBkb0NvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6
dGVtcGxhdGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCB0ZW1wbGF0ZUNvbnN0cnVjdG9yKTsKKyAg
ICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6dGltZXJUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCB0aW1lckNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6YWNj
ZXNzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgYWNjZXNzQ29uc3RydWN0b3IpOworfQorCitFbGVt
ZW50ICpXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiBxTmFtZSwgRG9jdW1lbnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisKKyAg
ICBXZWJDb3JlOjpXTUxOYW1lczo6aW5pdCgpOworICAgIC8vIERvbid0IG1ha2UgZWxlbWVudHMg
d2l0aG91dCBhIGRvY3VtZW50CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9IGRvYy0+c2V0dGluZ3MoKTsKKyAgICBpZiAoc2V0
dGluZ3MgJiYgc2V0dGluZ3MtPnVzZXNEYXNoYm9hcmRCYWNrd2FyZENvbXBhdGliaWxpdHlNb2Rl
KCkpCisgICAgICAgIHJldHVybiAwOworCisgICAgY3JlYXRlRnVuY3Rpb25NYXBJZk5lY2Vzc2Fy
eSgpOworICAgIENvbnN0cnVjdG9yRnVuYyBmdW5jID0gZ0Z1bmN0aW9uTWFwLT5nZXQocU5hbWUu
bG9jYWxOYW1lKCkuaW1wbCgpKTsKKyAgICBpZiAoZnVuYykKKyAgICAgICAgcmV0dXJuIGZ1bmMo
ZG9jLCBjcmVhdGVkQnlQYXJzZXIpOworICAgIAorICAgIHJldHVybiBuZXcgV01MRWxlbWVudChx
TmFtZSwgZG9jKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwpJbmRleDogV2ViQ29yZS93bWwvV01M
RWxlbWVudEZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50RmFj
dG9yeS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MRWxlbWVudEZhY3RvcnkuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MRWxlbWVudEZhY3Rv
cnlfaAorI2RlZmluZSBXTUxFbGVtZW50RmFjdG9yeV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIFF1YWxp
ZmllZE5hbWU7CisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29y
ZQoreworICAgIGNsYXNzIFdNTEVsZW1lbnQ7CisKKyAgICAvLyBUaGUgaWRlYSBiZWhpbmQgdGhp
cyBjbGFzcyBpcyB0aGF0IHRoZXJlIHdpbGwgZXZlbnR1YWxseSBiZSBhIG1hcHBpbmcgZnJvbSBu
YW1lc3BhY2UgVVJJcyB0byBFbGVtZW50RmFjdG9yaWVzIHRoYXQgY2FuIGRpc3BlbnNlCisgICAg
Ly8gZWxlbWVudHMuICBJbiBhIGNvbXBvdW5kIGRvY3VtZW50IHdvcmxkLCB0aGUgZ2VuZXJpYyBj
cmVhdGVFbGVtZW50IGZ1bmN0aW9uICh3aWxsIGVuZCB1cCBiZWluZyB2aXJ0dWFsKSB3aWxsIGJl
IGNhbGxlZC4KKyAgICBjbGFzcyBXTUxFbGVtZW50RmFjdG9yeQorICAgIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIFdlYkNvcmU6OkVsZW1lbnQgKmNyZWF0ZUVsZW1lbnQoY29uc3QgV2ViQ29yZTo6
UXVhbGlmaWVkTmFtZSYgcU5hbWUsIFdlYkNvcmU6OkRvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyID0gdHJ1ZSk7CisgICAgICAgIHN0YXRpYyBFbGVtZW50ICpjcmVhdGVXTUxFbGVt
ZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIHFOYW1lLCBXZWJDb3JlOjpEb2N1bWVu
dCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUpOworICAgIH07Cit9CisKKyNlbmRp
ZgorCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxHb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvd21sL1dNTEdvRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9X
TUxHb0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCisjaW5jbHVkZSAiRm9ybURhdGEuaCIKKyNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisKKyNpbmNsdWRl
ICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5n
LmgiCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5h
bWVzLmgiCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MUG9zdGZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNldHZh
ckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJy
d0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxUaW1lckVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKKwordGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IG4+IHN0YXRpYyB2b2lkIHJlbW92ZUZyb21W
ZWN0b3IoVmVjdG9yPFQqLCBuPiAmIHZlYywgVCogaXRlbSkgCit7CisgICAgc2l6ZV90IHNpemUg
PSB2ZWMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkKKyAg
ICAgICAgaWYgKHZlY1tpXSA9PSBpdGVtKSB7CisgICAgICAgICAgICB2ZWMucmVtb3ZlKGkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCByYW5kb21OdW1i
ZXIoKQoreworICAgIHN0YXRpYyBib29sIHJhbmRvbVNlZWRlZCA9IGZhbHNlOworIAorI2lmIFBM
QVRGT1JNKERBUldJTikKKyAgICBpZiAoIXJhbmRvbVNlZWRlZCkgeworICAgICAgICBzcmFuZG9t
ZGV2KCk7CisgICAgICAgIHJhbmRvbVNlZWRlZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBy
YW5kb20oKTsKKyNlbHNlCisgICAgaWYgKCFyYW5kb21TZWVkZWQpIHsKKyAgICAgICAgc3JhbmQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRpbWUoMCkpKTsKKyAgICAgICAgcmFuZG9tU2VlZGVkID0g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHJhbmQoKTsKKyNlbmRpZgorfQorIAorLy8gUmV0dXJu
cyBhIDAtdGVybWluYXRlZCBDIHN0cmluZyBpbiB0aGUgdmVjdG9yLgorc3RhdGljIHZvaWQgZ2V0
VW5pcXVlQm91bmRhcnlTdHJpbmcoVmVjdG9yPGNoYXI+JiBib3VuZGFyeSkKK3sKKyAgICAvLyBU
aGUgUkZDIDIwNDYgc3BlYyBzYXlzIHRoZSBBbHBoYU51bWVyaWMgY2hhcmFjdGVycyBwbHVzIHRo
ZSBmb2xsb3dpbmcgY2hhcmFjdGVycworICAgIC8vIGFyZSBsZWdhbCBmb3IgYm91bmRhcmllczog
ICcoKStfLC0uLzo9PworICAgIC8vIEhvd2V2ZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzLCB0
aG91Z2ggbGVnYWwsIGNhdXNlIHNvbWUgc2l0ZXMgdG8gZmFpbDoKKyAgICAvLyAoKSwuLzo9Cisg
ICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNTIKKyAgICBz
dGF0aWMgY29uc3QgY2hhciBBbHBoYU51bWVyaWNFbmNNYXBbNjRdID0KKyAgICB7CisgICAgICAw
eDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorICAgICAgMHg0
OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwKKyAgICAgIDB4NTEs
IDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCisgICAgICAweDU5LCAw
eDVBLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LAorICAgICAgMHg2NywgMHg2
OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwKKyAgICAgIDB4NkYsIDB4NzAs
IDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCisgICAgICAweDc3LCAweDc4LCAw
eDc5LCAweDdBLCAweDMwLCAweDMxLCAweDMyLCAweDMzLAorICAgICAgMHgzNCwgMHgzNSwgMHgz
NiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHg0MQorICAgICAgLy8gRklYTUUgPHJkYXI6Ly9w
cm9ibGVtLzUyNTI1Nzc+IGdtYWlsIGRvZXMgbm90IGFjY2VwdCBsZWdhbCBjaGFyYWN0ZXJzIGlu
IHRoZSBmb3JtIGJvdW5kYXJ5CisgICAgICAvLyBBcyBzdGF0ZWQgYWJvdmUsIHNvbWUgbGVnYWwg
Y2hhcmFjdGVycyBjYXVzZSwgc2l0ZXMgdG8gZmFpbC4gU3BlY2lmaWNhbGx5CisgICAgICAvLyB0
aGUgLyBjaGFyYWN0ZXIgd2hpY2ggd2FzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgYWJvdmUg
YXJyYXkuIEkgaGF2ZQorICAgICAgLy8gcmVwbGFjZWQgdGhlIGxhc3QgY2hhcmFjdGVyIHdpdGgg
YW5vdGhlciBjaGFyYWN0ZXIgYWxyZWFkeSBpbiB0aGUgYXJyYXkKKyAgICAgIC8vIChub3RpY2Ug
dGhlIGZpcnN0IGFuZCBsYXN0IHZhbHVlcyBhcmUgYm90aCAweDQxLCBBKS4gSW5zdGVhZCBvZiBw
aWNraW5nCisgICAgICAvLyBhbm90aGVyIHVuaXF1ZSBsZWdhbCBjaGFyYWN0ZXIgZm9yIGJvdW5k
YXJ5IHN0cmluZ3MgdGhhdCwgYmVjYXVzZSBpdCBoYXMKKyAgICAgIC8vIG5ldmVyIGJlZW4gdGVz
dGVkLCBtYXkgb3IgbWF5IG5vdCBicmVhayBvdGhlciBzaXRlcywgSSBzaW1wbHkKKyAgICAgIC8v
IHJlcGxhY2VkIC8gd2l0aCBBLiAgVGhpcyBtZWFucyBBIGlzIHR3aWNlIGFzIGxpa2VseSB0byBv
Y2N1ciBpbiBvdXIgYm91bmRhcnkKKyAgICAgIC8vIHN0cmluZ3MgdGhhbiBhbnkgb3RoZXIgY2hh
cmFjdGVyIGJ1dCBJIHRoaW5rIHRoaXMgaXMgZmluZSBmb3IgdGhlIHRpbWUgYmVpbmcuCisgICAg
ICAvLyBUaGUgRklYTUUgaGVyZSBpcyBhYm91dCByZXN0b3JpbmcgdGhlIC8gY2hhcmFjdGVyIG9u
Y2UgdGhlIGFmb3JlbWVudGlvbmVkCisgICAgICAvLyByYWRhciBoYXMgYmVlbiByZXNvbHZlZC4K
KyAgICB9OworIAorICAgIC8vIFN0YXJ0IHdpdGggYW4gaW5mb3JtYXRpdmUgcHJlZml4LgorICAg
IGNvbnN0IGNoYXIgYm91bmRhcnlQcmVmaXhbXSA9ICItLS0tV2ViS2l0Rm9ybUJvdW5kYXJ5IjsK
KyAgICBib3VuZGFyeS5hcHBlbmQoYm91bmRhcnlQcmVmaXgsIHN0cmxlbihib3VuZGFyeVByZWZp
eCkpOworIAorICAgIC8vIEFwcGVuZCAxNiByYW5kb20gN2JpdCBhc2NpaSBBbHBoYU51bWVyaWMg
Y2hhcmFjdGVycy4KKyAgICBWZWN0b3I8Y2hhcj4gcmFuZG9tQnl0ZXM7CisgCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgaW50IHJhbmRvbW5lc3MgPSByYW5kb21O
dW1iZXIoKTsKKyAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFso
cmFuZG9tbmVzcyA+PiAyNCkgJiAweDNGXSk7CisgICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChB
bHBoYU51bWVyaWNFbmNNYXBbKHJhbmRvbW5lc3MgPj4gMTYpICYgMHgzRl0pOworICAgICAgICBy
YW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwWyhyYW5kb21uZXNzID4+IDgpICYg
MHgzRl0pOworICAgICAgICByYW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwW3Jh
bmRvbW5lc3MgJiAweDNGXSk7CisgICAgfQorIAorICAgIGJvdW5kYXJ5LmFwcGVuZChyYW5kb21C
eXRlcyk7CisgICAgYm91bmRhcnkuYXBwZW5kKDApOyAvLyBBZGQgYSAwIGF0IHRoZSBlbmQgc28g
d2UgY2FuIHVzZSB0aGlzIGFzIGEgQy1zdHlsZSBzdHJpbmcuCit9CisKK1dNTEdvRWxlbWVudDo6
V01MR29FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2Mp
CisgICAgOiBXTUxUYXNrRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2VuY3R5cGUoImFw
cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpIAorICAgICwgbV9tdWx0aXBhcnQoZmFs
c2UpCisgICAgLCBtX3Bvc3QoZmFsc2UpCit7Cit9CisKK1dNTEdvRWxlbWVudDo6fldNTEdvRWxl
bWVudCgpIHt9CisKK3ZvaWQgV01MR29FbGVtZW50OjpyZWdpc3RlclBvc3RmaWVsZEVsZW1lbnQo
V01MUG9zdGZpZWxkRWxlbWVudCogZSkgCit7CisgICAgbV9wb3N0ZmllbGRzLmFwcGVuZChlKTsK
K30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OnJlbW92ZVBvc3RmaWVsZEVsZW1lbnQoV01MUG9zdGZp
ZWxkRWxlbWVudCogZSkgCit7CisgICAgcmVtb3ZlRnJvbVZlY3RvcihtX3Bvc3RmaWVsZHMsIGUp
OworfQorCitib29sIFdNTEdvRWxlbWVudDo6aGFzUG9zdGZpZWxkKCkgY29uc3QgCit7CisgICAg
cmV0dXJuICFtX3Bvc3RmaWVsZHMuaXNFbXB0eSgpOworfQorCit2b2lkIFdNTEdvRWxlbWVudDo6
cGFyc2VFbmN0eXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZih0eXBlLmNvbnRhaW5z
KCJtdWx0aXBhcnQiLCBmYWxzZSkgfHwgdHlwZS5jb250YWlucygiZm9ybS1kYXRhIiwgZmFsc2Up
KSB7CisgICAgICAgIG1fZW5jdHlwZSA9ICJtdWx0aXBhcnQvZm9ybS1kYXRhIjsKKyAgICAgICAg
bV9tdWx0aXBhcnQgPSB0cnVlOworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZW5jdHlwZSA9ICJh
cHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiOworICAgICAgICBtX211bHRpcGFydCA9
IGZhbHNlOworICAgIH0KK30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSAqYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG1l
dGhvZEF0dHIpIHsKKyAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVlKCks
ICJwb3N0IikpCisgICAgICAgICAgICBtX3Bvc3QgPSB0cnVlOworICAgICAgICBlbHNlIGlmIChl
cXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAiZ2V0IikpCisgICAgICAgICAgICBtX3Bv
c3QgPSBmYWxzZTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBlbmN0eXBlQXR0cikg
eworICAgICAgICBTdHJpbmcgZW5jdHlwZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihh
dHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKKyAgICAgICAgcGFyc2VFbmN0eXBlKGVuY3R5cGUp
OworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFjY2VwdF9jaGFyc2V0QXR0cikgewor
ICAgICAgICAvLyBzcGFjZSBzZXBhcmF0ZWQgbGlzdCBvZiBjaGFyc2V0cyB0aGUgc2VydmVyYSBh
Y2NlcHRzIC0gc2VlIHJmYzIwNDUKKyAgICAgICAgaWYoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJl
ZihhdHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+
cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisgICAgICAgIG1fYWNjZXB0Y2hhcnNldCA9IGF0dHItPnZhbHVl
KCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgV01MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cik7CisgICAgfQorfQorCitQYXNzUmVmUHRyPEZvcm1EYXRhPiBXTUxHb0VsZW1lbnQ6
OmZvcm1EYXRhKEZyYW1lTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGJvdW5kYXJ5KSAKK3sK
KyAgICBTdHJpbmcgc3RyID0gbV9hY2NlcHRjaGFyc2V0OworICAgIHN0ci5yZXBsYWNlKCcsJywg
JyAnKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IGNoYXJzZXRzOworICAgIHN0ci5zcGxpdCgnICcs
IGNoYXJzZXRzKTsKKyAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7CisgICAgVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzZXRzLmVuZCgpOworICAgIGZvciAoVmVjdG9y
PFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnNldHMuYmVnaW4oKTsgaXQgIT0gZW5k
OyArK2l0KQorICAgICAgICBpZiAoKGVuY29kaW5nID0gVGV4dEVuY29kaW5nKCppdCkpLmlzVmFs
aWQoKSkgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGlmICghZW5jb2Rp
bmcuaXNWYWxpZCgpKSB7CisgICAgICAgIGlmIChsb2FkZXIpCisgICAgICAgICAgICBlbmNvZGlu
ZyA9IGxvYWRlci0+ZW5jb2RpbmcoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jb2Rp
bmcgPSBMYXRpbjFFbmNvZGluZygpOworICAgIH0KKyAKKyAgICBSZWZQdHI8Rm9ybURhdGE+IHJl
c3VsdCA9IEZvcm1EYXRhOjpjcmVhdGUoKTsKKyAgICBTdHJpbmcgZW5jX3N0cmluZzsKKyAKKyAg
ICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9wb3N0ZmllbGRzLnNpemUoKTsgaSsrKSB7
CisKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBtX3Bvc3RmaWVsZHNbaV0tPm5hbWUoKTsKKyAgICAg
ICAgU3RyaW5nIHZhbHVlID0gbV9wb3N0ZmllbGRzW2ldLT52YWx1ZSgpOworCisgICAgICAgIGlm
ICghbV9tdWx0aXBhcnQpIHsKKyAgICAgICAgICAgIGlmICghZW5jX3N0cmluZy5pc0VtcHR5KCkp
CisgICAgICAgICAgICAgICAgZW5jX3N0cmluZyArPSAiJiI7CisKKyAgICAgICAgICAgIGVuY19z
dHJpbmcgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX3Bvc3RmaWVsZHNbaV0tPm5h
bWUoKSk7IAorICAgICAgICAgICAgZW5jX3N0cmluZyArPSAiPSI7CisgICAgICAgICAgICBlbmNf
c3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMobV9wb3N0ZmllbGRzW2ldLT52
YWx1ZSgpKTsgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcgaHN0cigiLS0i
KTsKKyAgICAgICAgICAgIGhzdHIgKz0gYm91bmRhcnk7CisgICAgICAgICAgICBoc3RyICs9ICJc
clxuIjsKKyAgICAgICAgICAgIGhzdHIgKz0gIkNvbnRlbnQtRGlzcG9zaXRpb246IGZvcm0tZGF0
YTsgbmFtZT1cIiI7CisgICAgICAgICAgICBoc3RyICs9IGVuY29kaW5nLmVuY29kZShyZWludGVy
cHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obmFtZS5jaGFyYWN0ZXJzKCkpLCBuYW1lLmxlbmd0aCgp
LCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpLmRhdGEoKTsgCisgICAgICAgICAg
ICBoc3RyICs9ICJcIiI7CisgICAgICAgICAgICBoc3RyICs9ICJcclxuXHJcbiI7CisKKyAgICAg
ICAgICAgIC8vIGFwcGVuZCBib2R5CisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoaHN0
ci5jaGFyYWN0ZXJzKCksIGhzdHIubGVuZ3RoKCkpOworCisgICAgICAgICAgICBpZighdmFsdWUu
aXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIGNzVmFsID0gZW5jb2RpbmcuZW5j
b2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPih2YWx1ZS5jaGFyYWN0ZXJzKCkpLCB2
YWx1ZS5sZW5ndGgoKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKS5kYXRhKCk7
IAorICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YShjc1ZhbC5jaGFyYWN0ZXJzKCks
IGNzVmFsLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0LT5h
cHBlbmREYXRhKCJcclxuIiwgMik7CisKKyAgICAgICAgICAgIC8vIGFjY29yZGluZyB0byB0aGUg
c2VjdGlvbiA5LjUuMSBvZiB3YXAtMTkxLXdtbC0yMDAwMDIxOS1hLnBkZiwgCisgICAgICAgICAg
ICAvLyBtYWtlIHRoZSBDb250ZW50LXR5cGUgaGVhZGVyIGluY2x1ZGUgdGhlIGNoYXJzZXQgcGFy
YW1ldGVyCisgICAgICAgICAgICBTdHJpbmcgc3RyID0gcmVzdWx0LT5mbGF0dGVuVG9TdHJpbmco
KTsKKyAgICAgICAgICAgIGlmKCFjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoc3RyLmNoYXJhY3RlcnMo
KSwgc3RyLmxlbmd0aCgpKSkgeworICAgICAgICAgICAgICAgIG1fZW5jdHlwZSArPSAiOyI7Cisg
ICAgICAgICAgICAgICAgbV9lbmN0eXBlICs9IGVuY29kaW5nLm5hbWUoKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0gLy8gZW5kIG9mIGZvciguLi4KKworICAgIGlmIChtX211bHRp
cGFydCkgeworICAgICAgICBlbmNfc3RyaW5nID0gIi0tIjsKKyAgICAgICAgZW5jX3N0cmluZyAr
PSBib3VuZGFyeTsKKyAgICAgICAgZW5jX3N0cmluZyArPSAiLS1cclxuIjsKKworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1fZW5jdHlwZSArPSAiOyI7CisgICAgICAgIG1fZW5jdHlwZSArPSBlbmNv
ZGluZy5uYW1lKCk7CisgICAgfQorIAorICAgIHJlc3VsdC0+YXBwZW5kRGF0YShlbmNfc3RyaW5n
LmNoYXJhY3RlcnMoKSwgZW5jX3N0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OmV4ZWMoRXZlbnQqIGV2dCwgU3RyaW5nIHVyaSkgCit7
CisgICAgRG9jdW1lbnQgKmRvYyA9IGRvY3VtZW50KCk7CisgICAgRnJhbWVMb2FkZXIgKmxvYWRl
cj0gZG9jLT5mcmFtZSgpLT5sb2FkZXIoKTsKKyAgICBpZighbG9hZGVyKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBjb252ZXJ0IHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2V0dmFy
IGVsZW1lbnQgaWYgbmVjZXNzYXJ5CisgICAgVmFyaWFibGVNYXAgbV92YXJzOworICAgIGlmKGhh
c1NldHZhcigpKSB7CisgICAgICAgIGZvcih1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtX3NldHZh
cnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmKCFtX3NldHZhcnNbaV0tPm5hbWUoKS5p
c0VtcHR5KCkpIAorICAgICAgICAgICAgICAgIG1fdmFycy5zZXQobV9zZXR2YXJzW2ldLT5uYW1l
KCksIG1fc2V0dmFyc1tpXS0+dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9IAorCisgICAgLy8g
dXBkYXRlIGJyb3dzZXIgY29udGV4dCAKKyAgICBpZighbV92YXJzLmlzRW1wdHkoKSkKKyAgICAg
ICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlcyhtX3ZhcnMp
OworIAorCisgICAgLy8gc3Vic3RpdHV0ZSB0YXJnZXQgdXJpIGF0dHJpYnV0ZSB2YWx1ZQorICAg
IGlmKHVyaS5pc0VtcHR5KCkpCisgICAgICAgIHVyaSA9IGdldEF0dHJpYnV0ZShocmVmQXR0cik7
CisgICAgdXJpID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHVyaSwgZG9jLCAiZXNjYXBl
Iik7CisKKyAgICAvLyBzdG9wIHRoZSB0aW1lciBvZiB0aGUgY3VycmVudCBjYXJkIGlmIGl0IGlz
IGFjdGl2ZQorICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gV01MSGVscGVyOjpjdXJyZW50QnJ3
Q29udGV4dCgpLT5hY3RpdmVDYXJkKCk7CisgICAgaWYoY2FyZCAmJiBjYXJkLT5ldmVudFRpbWVy
KCkpIHsKKyAgICAgICAgY2FyZC0+ZXZlbnRUaW1lcigpLT5zdG9wKCk7CisgICAgfQorCisgICAg
Ly8gaWYgbmV3Y29udGV4dCBhdHRyaWJ1dGUgb2YgZGVzdCBjYXJkIGlzIHRydWUsIHJlaW5pdGlh
bGl6ZSB0aGUgY29udGV4dAorICAgIGNhcmQgPSBXTUxIZWxwZXI6OnNldERlc3RpbmF0aW9uQ2Fy
ZChkb2N1bWVudCgpLCB1cmkpOworICAgIGlmKGNhcmQgJiYgY2FyZC0+aXNOZXdDb250ZXh0KCkp
CisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+cmVzZXQoKTsKKworICAg
IC8vIHByZXBhcmUgZm9yIGxvYWRpbmcgdGhlIGRlc3RpbmF0aW9uIFVSTAorICAgIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IGRhdGEgPSBOVUxMOworICAgIEtVUkwgdXJsID0gZG9jLT5jb21wbGV0ZVVS
TCh1cmkuaXNFbXB0eSgpID8gIiIgOiB1cmkpOworICAgIFJlc291cmNlUmVxdWVzdCByZXEodXJs
KTsKKyAgICBLVVJMIGRvY1VybCA9IGRvYy0+Y29tcGxldGVVUkwoZG9jLT5kb2N1bWVudFVSSSgp
KTsKKyAgICBib29sIGluU2FtZURlY2sgPSBkb2NVcmwucGF0aCgpID09IHVybC5wYXRoKCk7IAor
CisKKyAgICBTdHJpbmcgc2VuZHJlZmVyZXIgPSBnZXRBdHRyaWJ1dGUoc2VuZHJlZmVyZXJBdHRy
KTsKKyAgICBpZihzZW5kcmVmZXJlciA9PSAidHJ1ZSIpIHsKKyAgICAgICAgc2VuZHJlZmVyZXIg
PSB1cmk7CisgICAgICAgIHJlcS5zZXRIVFRQUmVmZXJyZXIoc2VuZHJlZmVyZXIpOworICAgIH0K
KworICAgIFN0cmluZyBjYWNoZUN0cmwgPSBnZXRBdHRyaWJ1dGUoY2FjaGVfY29udHJvbEF0dHIp
OworCisgICBpZihtX3Bvc3QpIHsgLy8gUE9TVAorCisgICAgICAgaWYoaW5TYW1lRGVjayAmJiAo
Y2FjaGVDdHJsICE9ICJuby1jYWNoZSIpKSB7IC8vaWdub3JlIGFsbCBwb3N0ZmllbGQgZWxlbWVu
dHMKKyAgICAgICAgICAgIHJlcS5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9h
ZCk7CisgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICBpZihtX211bHRpcGFydCkgeyAvLyBt
dWx0aXBhcnQvZm9ybS1kYXRhCisgICAgICAgICAgICAgICAgVmVjdG9yPGNoYXI+IGJvdW5kYXJ5
OworICAgICAgICAgICAgICAgIGdldFVuaXF1ZUJvdW5kYXJ5U3RyaW5nKGJvdW5kYXJ5KTsKKyAg
ICAgICAgICAgICAgICBkYXRhID0gZm9ybURhdGEobG9hZGVyLCBib3VuZGFyeS5kYXRhKCkpOwor
ICAgICAgICAgICAgICAgIHJlcS5zZXRIVFRQQ29udGVudFR5cGUobV9lbmN0eXBlICsgIjsgYm91
bmRhcnk9IiArIGJvdW5kYXJ5LmRhdGEoKSk7CisgICAgICAgICAgIH0gZWxzZSB7ICAvL3RleHQv
cGxhaW4gb3IgYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkCisgICAgICAgICAgICAg
ICAgZGF0YSA9IGZvcm1EYXRhKGxvYWRlciwgMCk7CisgICAgICAgICAgICAgICAgcmVxLnNldEhU
VFBDb250ZW50VHlwZShtX2VuY3R5cGUpOworICAgICAgICAgICB9CisKKyAgICAgICAgICAgcmVx
LnNldEhUVFBCb2R5KGRhdGEuZ2V0KCkpOworICAgICAgIH0KKworICAgICAgIHJlcS5zZXRIVFRQ
TWV0aG9kKCJQT1NUIik7CisKKyAgIH0gZWxzZSB7ICAgLy8gR0VUCisKKyAgICAgICAgaWYobV9t
dWx0aXBhcnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYoaW5TYW1lRGVjaykg
eworICAgICAgICAgICAgcmVxLnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YURvbnRMb2Fk
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHI7CisgICAgICAgICAg
ICBmb3IodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9wb3N0ZmllbGRzLnNpemUoKTsgaSsrKSB7
CisgICAgICAgICAgICAgICAgaWYoIXN0ci5pc0VtcHR5KCkpIAorICAgICAgICAgICAgICAgICAg
ICBzdHIgKz0gIiYiOyAgICAgICAgCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAg
c3RyICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMobV9wb3N0ZmllbGRzW2ldLT5uYW1l
KCkpOworICAgICAgICAgICAgICAgIHN0ciArPSAiPSI7CisgICAgICAgICAgICAgICAgc3RyICs9
IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMobV9wb3N0ZmllbGRzW2ldLT52YWx1ZSgpKTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgdXJsLnNldFF1ZXJ5KHN0cik7CisgICAgICAg
ICAgICByZXEuc2V0VVJMKHVybCk7CisgICAgICAgIH0KKworICAgICAgICByZXEuc2V0SFRUUE1l
dGhvZCgiR0VUIik7CisKKyAgIH0KKworICAgIC8vIHNldCBIVFRQIGNhY2hlLWNvbnRyb2wgaGVh
ZGVyIGlmIG5lZWRlZAorICAgIGlmKCFjYWNoZUN0cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJl
cS5zZXRIVFRQSGVhZGVyRmllbGQoImNhY2hlLWNvbnRyb2wiLCBjYWNoZUN0cmwpOworICAgICAg
ICBpZihjYWNoZUN0cmwgPT0gIm5vLWNhY2hlIikKKyAgICAgICAgICAgIHJlcS5zZXRDYWNoZVBv
bGljeShSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7CisgICAgfQorCisgICAgbG9hZGVyLT5sb2Fk
KHJlcSk7Cit9CisKK30KKwpJbmRleDogV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3dtbC9XTUxHb0VsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgV01MR29FbGVtZW50X2gKKyNkZWZpbmUgV01MR29FbGVtZW50X2gKKworI2luY2x1
ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFdmVudDsKK2NsYXNzIEZvcm1EYXRhOworY2xhc3Mg
RnJhbWVMb2FkZXI7CitjbGFzcyBXTUxDYXJkRWxlbWVudDsKK2NsYXNzIFdNTFBvc3RmaWVsZEVs
ZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIAorY2xhc3MgV01MR29FbGVtZW50IDogcHVi
bGljIFdNTFRhc2tFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxHb0VsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYyk7CisgICAgdmlydHVhbCB+V01MR29F
bGVtZW50KCk7CisgIAorICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBw
ZWRBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZXhlYyhFdmVudCosIFN0cmluZyk7CisK
KyAgICB2b2lkIHJlZ2lzdGVyUG9zdGZpZWxkRWxlbWVudChXTUxQb3N0ZmllbGRFbGVtZW50Kik7
CisgICAgdm9pZCByZW1vdmVQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqKTsK
KyAgICBib29sIGhhc1Bvc3RmaWVsZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFBhc3NSZWZQ
dHI8Rm9ybURhdGE+IGZvcm1EYXRhKEZyYW1lTG9hZGVyKiwgY29uc3QgY2hhciopOworICAgIHZv
aWQgcGFyc2VFbmN0eXBlKGNvbnN0IFN0cmluZyYpOworCisgICAgVmVjdG9yPFdNTFBvc3RmaWVs
ZEVsZW1lbnQqPiBtX3Bvc3RmaWVsZHM7CisgICAgU3RyaW5nIG1fZW5jdHlwZTsKKyAgICBTdHJp
bmcgbV9hY2NlcHRjaGFyc2V0OworICAgIGJvb2wgbV9tdWx0aXBhcnQgOiAxOworICAgIGJvb2wg
bV9wb3N0IDogMTsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3dtbC9XTUxIZWxwZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEhlbHBlci5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxIZWxwZXIuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiTm9kZUxpc3Qu
aCIKKyNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0Lmgi
CisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgor
I2luY2x1ZGUgIldNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUg
Ind0Zi9BU0NJSUNUeXBlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV01MQnJ3Q29udGV4
dCogV01MSGVscGVyOjpzX2Jyd0NvbnRleHQgPSAwOworV01MVG9rZW5pemVyKiBXTUxIZWxwZXI6
OnNfdG9rZW5pemVyID0gMDsKKworV01MQnJ3Q29udGV4dCogV01MSGVscGVyOjpjdXJyZW50QnJ3
Q29udGV4dCgpCit7CisgICAgcmV0dXJuIHNfYnJ3Q29udGV4dDsKK30KKwordm9pZCBXTUxIZWxw
ZXI6OnNldEN1cnJlbnRCcndDb250ZXh0KFdNTEJyd0NvbnRleHQqIGNvbnRleHQpCit7CisgICAg
c19icndDb250ZXh0ID0gY29udGV4dDsKK30KKworV01MVG9rZW5pemVyKiBXTUxIZWxwZXI6OnRv
a2VuaXplcigpCit7CisgICAgcmV0dXJuIHNfdG9rZW5pemVyOworfQorCit2b2lkIFdNTEhlbHBl
cjo6c2V0VG9rZW5pemVyKFdNTFRva2VuaXplciogdG9rZW5pemVyKQoreworICAgIHNfdG9rZW5p
emVyID0gdG9rZW5pemVyOworfQorCitzdGF0aWMgYm9vbCBpc1ZhbGlkRm9yVmFyaWFibGUoVUNo
YXIgY2gpIAoreworICAgIGNoYXIgYSA9IHN0YXRpY19jYXN0PGNoYXI+KGNoKTsKKyAgICByZXR1
cm4gKFdURjo6aXNBU0NJSUFscGhhKGEpIHx8IFdURjo6aXNBU0NJSURpZ2l0KGEpIHx8IGEgPT0g
J18nKTsKK30KKyAKK2Jvb2wgV01MSGVscGVyOjppc1ZhbGlkVmFyaWFibGVOYW1lKGNvbnN0IFN0
cmluZyYgdmFyTmFtZSwgYm9vbCBpc1ZhclJlZikKK3sKKyAgICBib29sIGlzVmFsaWQgPSBmYWxz
ZTsKKyAgICBVQ2hhciBjaCA9IHZhck5hbWVbMF07CisKKyAgICBTdHJpbmcgcmVmQ2hhcnMgPSAi
KCk6JCI7CisgICAgaWYoaXNWYXJSZWYpCisgICAgICAgIGlzVmFsaWQgPSAoKHJlZkNoYXJzLmZp
bmQoY2gpICE9IC0xKSB8fCBjaCA9PSAnXycgfHwgV1RGOjppc0FTQ0lJQWxwaGEoc3RhdGljX2Nh
c3Q8Y2hhcj4oY2gpKSk7CisgICAgZWxzZQorICAgICAgICBpc1ZhbGlkID0gKGNoID09ICdfJyB8
fCBXVEY6OmlzQVNDSUlBbHBoYShzdGF0aWNfY2FzdDxjaGFyPihjaCkpKTsKKworICAgIGlmKGlz
VmFsaWQpIHsKKyAgICAgICAgZm9yKHVuc2lnbmVkIGk9MTsgaTx2YXJOYW1lLmxlbmd0aCgpOyAr
K2kpIHsKKyAgICAgICAgICAgIGlmKGlzVmFyUmVmKQorICAgICAgICAgICAgICAgIGlzVmFsaWQg
PSAoKHJlZkNoYXJzLmZpbmQodmFyTmFtZVtpXSkgIT0gLTEpIHx8IGlzVmFsaWRGb3JWYXJpYWJs
ZSh2YXJOYW1lW2ldKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXNWYWxp
ZCA9IGlzVmFsaWRGb3JWYXJpYWJsZSh2YXJOYW1lW2ldKTsKKworICAgICAgICAgICAgaWYoIWlz
VmFsaWQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBpc1ZhbGlkOworfQorCitib29sIFdNTEhlbHBlcjo6aGFz
VmFyaWFibGVSZWYoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIGJvb2wgaGFzVmFyUmVmID0g
ZmFsc2U7CisgICAgaW50IHN0YXJ0UG9zID0gdGV4dC5maW5kKCckJyk7CisgICAgaWYoc3RhcnRQ
b3MgIT0gLTEpIHsKKyAgICAgICAgdW5zaWduZWQgZW5kUG9zID0gc3RhcnRQb3MgKyAxOworICAg
ICAgICB3aGlsZSh0ZXh0W2VuZFBvc10gPT0gJyQnKQorICAgICAgICAgICAgZW5kUG9zKys7CisK
KyAgICAgICAgaWYoKChlbmRQb3Mtc3RhcnRQb3MpICUgMikgIT0gMCkgeworICAgICAgICAgICAg
aGFzVmFyUmVmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBoYXNWYXJS
ZWY7Cit9CisKK3N0YXRpYyBpbnQgdmFyaWFibGVFbmRzQXQoY29uc3QgU3RyaW5nJiB2YXJpYWJs
ZSkgCit7CisgICAgLy8gd2UgYXNzdW1lIHRoZSB2YXJpYWJsZSBzdGFydHMgd2l0aCAiJCIgLCBh
bmQgdGhlbiBmb2xsb3dzIHdpdGggYXQgbGVhc3Qgb25lIHF1YWxpZmllZCBjaGFyYWN0ZXIgZm9y
IHZhcmlhYmxlIG5hbWUsIG90aGVyd2lzZSwgbm90IGEgdmFsaWQgdmFyaWFibGUKKyAgICBpZiAo
KHZhcmlhYmxlWzBdICAhPSAnJCcpIHx8IFdURjo6aXNBU0NJSURpZ2l0KHZhcmlhYmxlWzFdKSB8
fCAhaXNWYWxpZEZvclZhcmlhYmxlKHZhcmlhYmxlWzFdKSkKKyAgICAgICAgcmV0dXJuIC0xOwor
ICAgIGludCBwb3MgPSAtMTsKKyAgICBmb3IocG9zID0gMTsgcG9zIDwgc3RhdGljX2Nhc3Q8aW50
Pih2YXJpYWJsZS5sZW5ndGgoKSk7IHBvcysrKSB7CisgICAgICAgIGlmKCBpc1ZhbGlkRm9yVmFy
aWFibGUodmFyaWFibGVbcG9zXSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJu
IHBvczsKK30KKyAKK3N0YXRpYyBib29sIGhhc05hbWVBdHRyaWJ1dGVXaXRoVmFsdWUoTm9kZSAq
bm9kZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgCit7CisgCisgICAgTmFtZWRBdHRyTWFwICphdHRy
cyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICBpZighYXR0cnMpIHsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH1lbHNlIHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmdl
dEF0dHJpYnV0ZUl0ZW0oIm5hbWUiKTsKKyAgICAgICAgaWYoIWF0dHIpIHsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGF0dHItPnZhbHVlKCkg
PT0gdmFsdWUpPyB0cnVlOmZhbHNlOworICAgIH0KK30KKwordm9pZCBXTUxIZWxwZXI6OmNvbnZl
cnRWYXJJZk5lZWRlZChTdHJpbmcmIHZhciwgU3RyaW5nJiBjb252KSAKK3sKKyAgICBpZihjb252
LmlzRW1wdHkoKSB8fCB2YXIuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47IAorCisgICAgU3Ry
aW5nIHJlc3VsdDsKKyAgICBTdHJpbmcgY29udmVyID0gY29udi5sb3dlcigpOworICAgIGlmKChj
b252ZXIgPT0gImUiKSB8fCAoY29udmVyID09ICJlc2NhcGUiKSkgeworICAgICAgICByZXN1bHQg
PSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHZhcik7CisgICAgfSBlbHNlIGlmKChjb252
ZXIgPT0gInUiKSB8fCAoY29udmVyID09ICJ1bmVzYyIpKSB7CisgICAgICAgIHJlc3VsdCA9IGRl
Y29kZVVSTEVzY2FwZVNlcXVlbmNlcyh2YXIpOworICAgIH0gZWxzZSBpZigoY29udmVyID09ICJu
IikgfHwgKGNvbnZlciA9PSAibm9lc2MiKSkgeworICAgICAgICAvLyBkbyBub3RoaW5nCisgICAg
fQorCisgICAgaWYoIXJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgIHZhciA9IHJlc3VsdDsKK30K
KworU3RyaW5nIFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihjb25zdCBTdHJpbmcmIHZhclJl
ZiwgTm9kZSogZG9jdW1lbnQsIFN0cmluZyBlc2NhcGUpIAoreworICAgIGlmKHZhclJlZi5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB2YXJSZWY7CisKKyAgICBTdHJpbmcgb3JpZyA9IHZhclJl
ZjsKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyB2YXJpYWJsZTsKKyAgICBTdHJpbmcg
Y29udjsKKyAKKyAgICBib29sIGhhc0Vycm9yID0gZmFsc2U7CisgICAgd2hpbGUoIW9yaWcuaXNF
bXB0eSgpKSB7CisgICAgICAgIGludCBzdGFydCA9IG9yaWcuZmluZCgiJCIpOworICAgICAgICBp
ZihzdGFydCA9PSAtMSkgeyAgLy9pdCdzIG5vdCBhIHZhcmlhYmxlIHJlZmVyZW5jZSwgb2shCisg
ICAgICAgICAgICByZXN1bHQgKz0gb3JpZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgICAgIHJlc3VsdCArPSBvcmlnLmxlZnQoc3RhcnQpOworICAgICAgICBvcmlnID0gb3Jp
Zy5yaWdodChvcmlnLmxlbmd0aCgpIC0gc3RhcnQpOworIAorICAgICAgICAvLyBjaGVjayB0aGUg
ZG91YmxlICckJyBzaWduICwgc2tpcCB0aGVtIG92ZXIKKyAgICAgICAgaWYob3JpZ1sxXSA9PSAn
JCcpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAiJCI7CisgICAgICAgICAgICBvcmlnID0gb3Jp
Zy5yaWdodChvcmlnLmxlbmd0aCgpIC0gMik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgfQorIAorICAgICAgICBpbnQgZW5kID0gMDsKKyAgICAgICAgaWYob3JpZ1sxXSA9PSAnKCcp
IHsKKyAgICAgICAgICAgIGVuZCA9IG9yaWcuZmluZCgiKSIpOworICAgICAgICAgICAgaWYoZW5k
ID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG9yaWc7ICAgLy8gaWYgd2UgZmlu
ZCAiJCgiIGJ1dCBubyAiKSIsIHN0b3AgcGFyc2luZworICAgICAgICAgICAgICAgIGhhc0Vycm9y
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgdmFyaWFibGUgPSBvcmlnLnN1YnN0cmluZygyLCBlbmQtMik7CisgICAg
ICAgICAgICAgICAgLy8gc2VhcmNoIGNvbnZlcnNpb24gc3RyaW5nCisgICAgICAgICAgICAgICAg
aW50IHBvcyA9IHZhcmlhYmxlLmZpbmQoJzonKTsKKyAgICAgICAgICAgICAgICBpZihwb3MgIT0g
LTEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29udiA9IHZhcmlhYmxlLnN1YnN0cmluZyhwb3Mg
KyAxLCB2YXJpYWJsZS5sZW5ndGgoKSAtIHBvcyAtIDEpOworICAgICAgICAgICAgICAgICAgICB2
YXJpYWJsZSA9IHZhcmlhYmxlLmxlZnQocG9zKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gaGVyZSB3ZSBzaG91bGQgY2hlY2sgaWYgdGhl
IHZhcmlhYmxlIG5hbWUgaXMgdmFsaWQKKyAgICAgICAgICAgICAgICBpZihoYXNFcnJvciA9ICFp
c1ZhbGlkVmFyaWFibGVOYW1lKHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgICAgICBvcmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0aCgpIC0gZW5k
IC0gMSApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW5k
ID0gdmFyaWFibGVFbmRzQXQob3JpZyk7CisgICAgICAgICAgICBpZihlbmQgPCAxKSB7CisgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9IG9yaWcubGVmdCgyKTsKKyAgICAgICAgICAgICAgICBvcmln
ID0gb3JpZy5yaWdodChvcmlnLmxlbmd0aCgpIC0gMik7CisgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJpYWJsZSA9IG9yaWcuc3Vic3RyaW5n
KDEsIGVuZCAtIDEpOworICAgICAgICAgICAgb3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgo
KSAtIGVuZCApOworICAgICAgICB9CisgCisgICAgICAgIC8vIHRyYXZlcnNlIHRoZSB3aG9sZSBE
T00gdHJlZSB0byBzdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UKKyAgICAgICAgYm9v
bCBpc0RvbmUgPSBmYWxzZTsKKyAgICAgICAgU3RyaW5nIGNvbnZWYXI7CisgICAgICAgIE5vZGUq
IG5vZGUgPSBkb2N1bWVudDsgCisgICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNOYW1lQXR0cmlidXRlV2l0aFZhbHVl
KG5vZGUsIHZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KFdNTE5hbWVzOjpzZXR2YXJUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIFdNTFNldHZhckVs
ZW1lbnQqIHNldHZhciA9IHN0YXRpY19jYXN0PFdNTFNldHZhckVsZW1lbnQqPihub2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgY29udlZhciA9IHNldHZhci0+Z2V0QXR0cmlidXRlKFdNTE5hbWVz
Ojp2YWx1ZUF0dHIpOworICAgICAgICAgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAKKyAgICAgICAgLy8gdHJ5IHRvIGdldCB2YXJpYWJsZSBzdWJzdGl0dXRlIGZy
b20gY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICAgICAgaWYoIWlzRG9uZSkgeworICAgICAg
ICAgICAgY29udlZhciA9IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+Z2V0VmFyaWJh
bGUodmFyaWFibGUpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUoIWNvbnZWYXIuaXNFbXB0
eSgpKSB7CisKKyAgICAgICAgICAgIGlmKGNvbnZWYXIuY29udGFpbnMoIiQoIikpIHsKKyAgICAg
ICAgICAgICAgICBjb252VmFyID0gc3Vic3RpdHV0ZVZhclJlZihjb252VmFyLCBkb2N1bWVudCk7
CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IGlmKGNvbnYuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnYgPSBlc2NhcGU7CisgICAg
ICAgICAgICBjb252ZXJ0VmFySWZOZWVkZWQoY29udlZhciwgY29udik7CisgICAgICAgICAgICBy
ZXN1bHQgKz0gY29udlZhcjsgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAKKyAKKyAg
ICB9IC8vIGVuZCBvZiB3aGlsZSghb3JpZy5pc0VtcHR5KCkpIAorIAorICAgIGlmKGhhc0Vycm9y
KQorICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFy
aWFibGVSZWZlcmVuY2VFcnJvcik7CisKKyAgICByZXR1cm4gcmVzdWx0LmlzRW1wdHkoKSA/IHZh
clJlZiA6IHJlc3VsdDsKK30gCisKKy8vIEFjY29yZGluZyB0byB0aGUgc2VjdGlvbiA1LjIgYW5k
IDEyLjUuMSBpbiB0aGUgd21sIHNwZWM6IHdhcC0xOTEtd21sLTIwMDAwMjE5LWEucGRmCisvLyB0
aGUgZGVzdGluYXRpb24gY2FyZCBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgY2Fz
ZToKKy8vIDEsIHVzZSBmcmFnbWVudCBhbmNob3Igd2hpY2ggaXMgc3BlY2lmaWVkIGJ5IHRoZSBk
b2N1bWVudCBVUkwsIGZvbGxvd2VkIHdpdGggJyMnCisvLyAyLCBpZiBubyBmcmFnbWVudCBpcyBz
cGVjaWZlZCBvciB0aGUgZnJhZ21lbnQgbmFtZSBpcyB3cm9uZywgdGhlIGZpcnN0IGNhcmQgaXMg
dGhlIGRlc3QgY2FyZC4KK1dNTENhcmRFbGVtZW50KiBXTUxIZWxwZXI6OnNldERlc3RpbmF0aW9u
Q2FyZChSZWZQdHI8RG9jdW1lbnQ+IGRvYywgU3RyaW5nIHVyaSkgCit7CisgICAgaWYoIWRvYykK
KyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZih1cmkuaXNFbXB0eSgpKQorICAgICAgICB1
cmkgPSBkb2MtPmRvY3VtZW50VVJJKCk7CisgICAgICAgIAorICAgIFdNTENhcmRFbGVtZW50KiBj
YXJkID0gTlVMTDsKKyAgICBib29sIGZvdW5kRGVzdENhcmQgPSBmYWxzZTsKKyAgICBQYXNzUmVm
UHRyPE5vZGVMaXN0PiBubCA9IGRvYy0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImNhcmQiKTsKKyAg
ICBpZihubC5nZXQoKS0+bGVuZ3RoKCkgPD0gMCkgeworICAgICAgICByZXR1cm4gY2FyZDsKKyAg
ICB9CisKKyAgICAvL2hpZGUgYWxsIHRoZSBjYXJkcyBwcmV2aW91c2x5IAorICAgIGZvcih1bnNp
Z25lZCBpID0gMDsgaTwgbmwuZ2V0KCktPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgY2FyZCA9
IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4obmwuZ2V0KCktPml0ZW0oaSkpOworICAgICAg
ICBjYXJkLT5zZXRWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICB9CisKKyAgICBpbnQgaWR4ID0gdXJp
LmZpbmQoJyMnKTsKKyAgICBpZihpZHggPj0gMCkgeworICAgICAgICBTdHJpbmcgYXR0cklEOwor
ICAgICAgICBTdHJpbmcgZnJhZ21lbnQgPSB1cmkuc3Vic3RyaW5nKGlkeCArIDEpOworICAgICAg
ICBmb3IodW5zaWduZWQgaSA9IG5sLmdldCgpLT5sZW5ndGgoKS0xOyBpID4gMDsgaS0tKSB7Cisg
ICAgICAgICAgICBjYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihubC5nZXQoKS0+
aXRlbShpKSk7CisgICAgICAgICAgICBhdHRySUQgPSBjYXJkLT5nZXRBdHRyaWJ1dGUoV01MTmFt
ZXM6OmlkQXR0cik7CisgICAgICAgICAgICBpZihhdHRySUQgPT0gZnJhZ21lbnQpIHsKKyAgICAg
ICAgICAgICAgICBmb3VuZERlc3RDYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBjYXJkLT5z
ZXRWaXNpYmlsaXR5KHRydWUpOworICAgICAgICAgICAgICAgIC8vZm9yY2UgZnJhbWUgbG9hZGVy
IHRvIGxvYWQgdGhlIFVSTCB3aXRoIGZyYWdtZW50IGlkZW50aWZpZXIKKyAgICAgICAgICAgICAg
ICBQYWdlKiBwYWdlID0gV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5wYWdlKCk7Cisg
ICAgICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5zZXRGb3JjZVJlbG9h
ZCh0cnVlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmKCFmb3VuZERlc3RDYXJkKSB7CisgICAgICAgIGNhcmQgPSBzdGF0
aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KG5sLmdldCgpLT5pdGVtKDApKTsKKyAgICAgICAgY2Fy
ZC0+c2V0VmlzaWJpbGl0eSh0cnVlKTsKKyAgICB9CisKKyAgICAvLyB1cGRhdGUgdGhlIGRvY3Vt
ZW50J3MgdGl0bGUKKyAgICBkb2MtPnNldFRpdGxlKGNhcmQtPnRpdGxlKCkpOworCisgICAgLy8g
c2V0IHRoZSBhdGl2ZSBjYXJkIGluIHRoZSBjdXJyZW50IGJyb3dzZXIgY29udGV4dAorICAgIFdN
TEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0QWN0aXZlQ2FyZChjYXJkKTsKKworICAg
IHJldHVybiBjYXJkOworfQorCit2b2lkIFdNTEhlbHBlcjo6cmVnaXN0ZXJUZW1wbGF0ZVRvQ2Fy
ZHMoRG9jdW1lbnQqIGRvYykKK3sKKyAgICBpZighZG9jKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IE5VTEw7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4g
bGlzdCA9IGRvYy0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoInRlbXBsYXRlIik7CisgICAgV01MVGVt
cGxhdGVFbGVtZW50KiB0ZW1wbCA9IHN0YXRpY19jYXN0PFdNTFRlbXBsYXRlRWxlbWVudCo+KGxp
c3QuZ2V0KCktPml0ZW0oMCkpOworICAgIGlmKHRlbXBsKSB7CisgICAgICAgIGxpc3QgPSBkb2Mt
PmdldEVsZW1lbnRzQnlUYWdOYW1lKCJjYXJkIik7CisgICAgICAgIGZvcih1bnNpZ25lZCBpbnQg
aT0wOyBpIDwgbGlzdC5nZXQoKS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgY2FyZCA9
IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4obGlzdC5nZXQoKS0+aXRlbShpKSk7CisgICAg
ICAgICAgICBjYXJkLT5iaW5kVGVtcGxhdGUodGVtcGwpOworICAgICAgICB9CisgICAgfQorfQor
Cit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3dtbC9XTUxIZWxwZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEhlbHBlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxIZWxwZXJfaAor
I2RlZmluZSBXTUxIZWxwZXJfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBDU3RyaW5nOyAKK2NsYXNzIFdNTENhcmRFbGVtZW50Owor
Y2xhc3MgV01MQnJ3Q29udGV4dDsKK2NsYXNzIFdNTFRva2VuaXplcjsKKworLyoqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitX
TUxIZWxwZXIgY2xhc3Msd2hpY2ggb2ZmZXJzIGNvbnZlbmllbnQgZnVuY3Rpb25zIHRvIFdNTEVs
ZW1lbnQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLworY2xhc3MgV01MSGVscGVyIHsKKworcHVibGljOiAKKyAgICBzdGF0
aWMgYm9vbCBpc1ZhbGlkVmFyaWFibGVOYW1lKGNvbnN0IFN0cmluZyYsIGJvb2wgaXNWYXJSZWYg
PSBmYWxzZSk7CisgICAgc3RhdGljIGJvb2wgaGFzVmFyaWFibGVSZWYoY29uc3QgU3RyaW5nJik7
CisKKyAgICAvL05vZGUqIGlzIHRoZSByb290IG9mIERPTSB0cmVlIHdoaWNoIHdpbGwgYmUgdHJh
dmVyc2VkIGZvciBzZWFyY2hpbmcgdmFyaWFibGUgdmFsdWUKKyAgICBzdGF0aWMgU3RyaW5nIHN1
YnN0aXR1dGVWYXJSZWYoY29uc3QgU3RyaW5nJiwgTm9kZSosIFN0cmluZyBlc2NhcGUgPSBTdHJp
bmcoKSk7IAorICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRWYXJJZk5lZWRlZChTdHJpbmcmLCBTdHJp
bmcmKTsKKworICAgIHN0YXRpYyBXTUxDYXJkRWxlbWVudCogc2V0RGVzdGluYXRpb25DYXJkKFJl
ZlB0cjxEb2N1bWVudD4sIFN0cmluZyB1cmkgPSBTdHJpbmcoKSk7CisKKyAgICBzdGF0aWMgdm9p
ZCByZWdpc3RlclRlbXBsYXRlVG9DYXJkcyhEb2N1bWVudCopOworCisgICAgc3RhdGljIFdNTEJy
d0NvbnRleHQqIGN1cnJlbnRCcndDb250ZXh0KCk7CisgICAgc3RhdGljIHZvaWQgc2V0Q3VycmVu
dEJyd0NvbnRleHQoV01MQnJ3Q29udGV4dCopOworCisgICAgc3RhdGljIFdNTFRva2VuaXplciog
dG9rZW5pemVyKCk7CisgICAgc3RhdGljIHZvaWQgc2V0VG9rZW5pemVyKFdNTFRva2VuaXplciop
OworcHJpdmF0ZToKKyAgICBzdGF0aWMgV01MQnJ3Q29udGV4dCogc19icndDb250ZXh0OworICAg
IHN0YXRpYyBXTUxUb2tlbml6ZXIqIHNfdG9rZW5pemVyOworfTsKKworfSAvL25hbWVzcGFjZQor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MSW1hZ2VFbGVtZW50Lmgi
IAorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEhUTUxOYW1lczsKKworV01MSW1hZ2VFbGVtZW50OjpXTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxJbWFnZUVsZW1lbnQo
bmFtZSwgZG9jKSB7fQorCitXTUxJbWFnZUVsZW1lbnQ6On5XTUxJbWFnZUVsZW1lbnQoKSB7fQor
Cit2b2lkIFdNTEltYWdlRWxlbWVudDo6dXBkYXRlQXR0cnNJZk5lZWRlZCgpCit7CisgICAgU3Ry
aW5nIHN1YjsKKyAgICBTdHJpbmcgYWx0ID0gZ2V0QXR0cmlidXRlKGFsdEF0dHIpOworICAgIGlm
KCFhbHQuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZh
clJlZihhbHQsIGRvY3VtZW50KCkpOworICAgICAgICBpZihhbHQgIT0gc3ViKQorICAgICAgICAg
ICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHN1Yik7CisgICAgfSAgIAorCisgICAgU3RyaW5nIHNy
YyA9IGdldEF0dHJpYnV0ZShzcmNBdHRyKTsKKyAgICBpZighc3JjLmlzRW1wdHkoKSkgeworICAg
ICAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoc3JjLCBkb2N1bWVudCgpKTsK
KyAgICAgICAgaWYoc3JjICE9IHN1YikKKyAgICAgICAgICAgIHNldEF0dHJpYnV0ZShzcmNBdHRy
LCBzdWIpOworICAgIH0KKworICAgIFN0cmluZyBsb2NhbFNyYyA9IGdldEF0dHJpYnV0ZShXTUxO
YW1lczo6bG9jYWxzcmNBdHRyKTsKKyAgICBpZighbG9jYWxTcmMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIC8vIHN0b3JlIHRoZSBzcmMgYXR0cmlidXRlIGZvciB1c2UgbGF0ZXIKKyAgICAgICAgaWYo
IXNyYy5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX3NyYyA9IHN1YjsKKworICAgICAgICBzdWIg
PSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYobG9jYWxTcmMsIGRvY3VtZW50KCkpOworICAg
ICAgICBpZighc3ViLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYobG9jYWxTcmMgIT0gc3Vi
KQorICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZShXTUxOYW1lczo6bG9jYWxzcmNBdHRyLCBz
dWIpOworCisgICAgICAgICAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgc3ViKTsKKyAgICAgICAg
fQorICAgIH0KK30KKwordm9pZCBXTUxJbWFnZUVsZW1lbnQ6OnJlbG9hZEltYWdlQnlTcmNBdHRy
KCkKK3sKKyAgICBpZihtX3NyYy5pc0VtcHR5KCkpIAorICAgICAgICByZXR1cm47CisKKyAgICBz
ZXRBdHRyaWJ1dGUoc3JjQXR0ciwgbV9zcmMpOworICAgIG1fc3JjID0gIiI7CisKKyAgICBtX2lt
YWdlTG9hZGVyLnVwZGF0ZUZyb21FbGVtZW50KCk7Cit9CisKK30gLy9uYW1lc3BhY2UKSW5kZXg6
IFdlYkNvcmUvd21sL1dNTEltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTEltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MSW1hZ2VF
bGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTElt
YWdlRWxlbWVudF9oCisjZGVmaW5lIFdNTEltYWdlRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1M
SW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXTUxJbWFnZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEltYWdlRWxlbWVudCB7
CitwdWJsaWM6CisgICAgV01MSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCopOworICAgIHZpcnR1YWwgfldNTEltYWdlRWxlbWVudCgpOworCisgICAgdm9pZCB1cGRh
dGVBdHRyc0lmTmVlZGVkKCk7CisgICAgdm9pZCByZWxvYWRJbWFnZUJ5U3JjQXR0cigpOworCitw
cml2YXRlOgorICAgIFN0cmluZyBtX3NyYzsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93
bWwvV01MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMTQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVuZGVyVGV4dENvbnRyb2wuaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiVGV4
dEV2ZW50LmgiCisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3Ry
aW5nLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIlJlZ3VsYXJFeHByZXNzaW9u
LmgiCisjaW5jbHVkZSAiV01MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4
dC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgor
I2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAid3RmL0FTQ0lJQ1R5cGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIHN0ZDo6bWluOworCitXTUxJbnB1dEVsZW1lbnQ6OldN
TElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIERvY3VtZW50KiBkb2MsIEhU
TUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnQodGFnLCBkb2MsIGZv
cm0pCisgICAgLCBtX2VtcHR5T2soZmFsc2UpCisgICAgLCBtX21hc2tBbGxvd3NJbnB1dENoYXJO
dW1zKDApCit7Cit9CisKK1dNTElucHV0RWxlbWVudDo6fldNTElucHV0RWxlbWVudCgpIAorewor
fQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKSAKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IGZvcm1hdEF0dHIpIHsK
KworICAgICAgICBpZihXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7
CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlk
VmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX2Zvcm1hdCA9IHZhbGlkYXRlSW5wdXRNYXNrKGF0dHItPnZhbHVlKCkpOwor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGVtcHR5b2tBdHRyKSB7CisgICAgICAgIG1f
ZW1wdHlPayA9ICgoYXR0ci0+dmFsdWUoKSA9PSAidHJ1ZSIpID8gdHJ1ZSA6IGZhbHNlKTsKKyAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgeworCisgICAgICAgIGlmKFdN
TEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpCisgICAgICAgICAgICBXTUxI
ZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VF
cnJvcik7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAKKyAgICB9IGVsc2UgeworICAgICAgICBIVE1MSW5w
dXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICB9Cit9CisKKworU3Ry
aW5nIFdNTElucHV0RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2soY29uc3QgQXRvbWljU3RyaW5n
JiBpbnB1dE1hc2spCit7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBmb3JtYXRDb2RlcyA9ICJB
YU5uWHhNbSI7CisgICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKyAgICBib29sIGhhc1dpbGRjYXJk
ID0gZmFsc2U7CisgICAgdW5zaWduZWQgZXNjYXBlQ2hhckNudHMgPSAwOworCisgICAgdW5zaWdu
ZWQgbWFza0xlbiA9IGlucHV0TWFzay5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBpZHg7CisgICAg
VUNoYXIgYzsgCisKKyAgICBmb3IoaWR4ID0gMDsgaWR4IDwgbWFza0xlbjsgKytpZHgpIHsKKyAg
ICAgICAgYyA9IGlucHV0TWFza1tpZHhdOworCisgICAgICAgIAorICAgICAgICBpZihmb3JtYXRD
b2Rlcy5maW5kKGMpID09IC0xKSB7CisKKyAgICAgICAgICAgIGlmKChjID09ICcqJykgfHwgKFdU
Rjo6aXNBU0NJSURpZ2l0KGMpICYmIChjICE9ICcwJykpKSB7IAorICAgICAgICAgICAgICAgIC8v
IHZhbGlkYXRlIGNvZGVzIHdoaWNoIGVuZHMgd2l0aCAnKmYnIG9yICduZicKKyAgICAgICAgICAg
ICAgICBjID0gaW5wdXRNYXNrWysraWR4XTsKKyAgICAgICAgICAgICAgICBpZigoaWR4KzEgIT0g
bWFza0xlbikgfHwgZm9ybWF0Q29kZXMuZmluZChjKSA9PSAtMSkgeworICAgICAgICAgICAgICAg
ICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAg
ICAgICB9IGVsc2UgaWYoYyA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgLy9za2lwIG92ZXIg
dGhlIG5leHQgbWFzayBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBpZHgrKzsgICAKKyAgICAg
ICAgICAgICAgICBlc2NhcGVDaGFyQ250cysrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVt
YmVyIG9mIGNoYXIgYWxsb3dlZCB0byBlbnRlciBieSBpbnB1dCBtYXNrIHN0cmluZworICAgIGlm
KGlzVmFsaWQpIHsKKyAgICAgICAgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcyA9IG1hc2tMZW47
CisKKyAgICAgICAgaWYoZXNjYXBlQ2hhckNudHMpCisgICAgICAgICAgICBtX21hc2tBbGxvd3NJ
bnB1dENoYXJOdW1zIC09IGVzY2FwZUNoYXJDbnRzOworCisgICAgICAgIGlmKGhhc1dpbGRjYXJk
ICYmIGlucHV0TWFza1ttYXNrTGVuLTJdID09ICcqJykKKyAgICAgICAgICAgIG1fbWFza0FsbG93
c0lucHV0Q2hhck51bXMgPSBtYXhMZW5ndGgoKTsKKyAgICAgICAgZWxzZSBpZihoYXNXaWxkY2Fy
ZCkgeworICAgICAgICAgICAgYyA9IGlucHV0TWFza1ttYXNrTGVuLTJdOworICAgICAgICAgICAg
dW5zaWduZWQgbGVmdExlbiA9IFN0cmluZygmYykudG9JbnQoKTsKKyAgICAgICAgICAgIG1fbWFz
a0FsbG93c0lucHV0Q2hhck51bXMgPSBsZWZ0TGVuICsgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVt
cyAtIDI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaW5wdXRNYXNrOworICAgIH0KKyAK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Vuc2lnbmVkIFdNTElucHV0RWxlbWVudDo6Y3Vy
c29yUG9zVG9JZHhPZk1hc2sodW5zaWduZWQgY3Vyc29yUG9zKQoreworICAgIFVDaGFyIG1hc2s7
CisgICAgaW50IGlkeCA9IC0xOworICAgIGN1cnNvclBvcysrOworICAgIHdoaWxlKGN1cnNvclBv
cy0tKSB7CisgICAgICAgIG1hc2sgPSBtX2Zvcm1hdFsrK2lkeF07CisgICAgICAgIGlmKG1hc2sg
PT0gJ1xcJykgeworICAgICAgICAgICAgaWR4Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBp
ZigobWFzayA9PSAnKicpIHx8IChXVEY6OmlzQVNDSUlEaWdpdChtYXNrKSAmJiAobWFzayAhPSAn
MCcpKSkgeworICAgICAgICAgICAgaWR4ID0gbV9mb3JtYXQubGVuZ3RoKCkgLSAxOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0gCisgICAgfQorCisgICAgcmV0dXJuIGlkeDsKK30KKwor
Ym9vbCBXTUxJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybWVkVG9JbnB1dE1hc2soU3RyaW5nJiBpbnB1
dCkKK3sKKyAgICBib29sIGJQYXNzID0gdHJ1ZTsKKyAgICBVQ2hhciBpbkNoYXI7CisgICAgZm9y
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAg
aW5DaGFyID0gaW5wdXRbaV07CisKKyAgICAgICAgYlBhc3MgPSBpc0NvbmZvcm1lZFRvSW5wdXRN
YXNrKGluQ2hhciwgaSsxLCBmYWxzZSk7CisgICAgICAgIGlmKCFiUGFzcykKKyAgICAgICAgICAg
IGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBiUGFzczsKK30KKworYm9vbCBXTUxJbnB1dEVs
ZW1lbnQ6OmlzQ29uZm9ybWVkVG9JbnB1dE1hc2soVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBpbnB1
dENoYXJOdW0sIGJvb2wgaXNJbnB1dGVkQnlVc3IpCit7CisgICAgYm9vbCBiUGFzcyA9IHRydWU7
CisgICAgaWYobV9mb3JtYXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gYlBhc3M7CisgICAg
CisgICAgLy8gd2Ugc2hvdWxkIGxpbWl0IHRoZSBudW1iZXIgb2YgaW5wdXRlZCBjaGFyYXRlcnMg
YWNjb3JkaW5nIHRvIHRoZSBmb3JtYXQgYW5kIG1heGxlbmd0aCBhdHRyaWJ1dGUKKyAgICB1bnNp
Z25lZCBtYXhBbGxvd0lucHV0TnVtID0gbWluKG1fbWFza0FsbG93c0lucHV0Q2hhck51bXMsIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtYXhMZW5ndGgoKSkpOworCisgICAgaWYoaW5wdXRDaGFyTnVt
IDw9IG1heEFsbG93SW5wdXROdW0pIHsKKyAgICAgICAgdW5zaWduZWQgaWR4T2ZNYXNrID0gMDsK
KyAgICAgICAgaWYoaXNJbnB1dGVkQnlVc3IpIHsKKyAgICAgICAgICAgIGlkeE9mTWFzayA9IGN1
cnNvclBvc1RvSWR4T2ZNYXNrKHNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWR4T2ZNYXNrID0gY3Vyc29yUG9zVG9JZHhPZk1hc2soaW5wdXRDaGFyTnVt
IC0gMSk7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBtYXNrID0gbV9mb3JtYXRbaWR4T2ZN
YXNrXTsKKworICAgICAgICAvLyBtYXRjaCB0aGUgY2hhciBpbnB1dHRlZCB3aXRoIGlucHV0IG1h
c2sKKyAgICAgICAgaWYobWFzayA9PSAnQScpIHsKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6
aXNBU0NJSURpZ2l0KGluQ2hhcikgJiYgIVdURjo6aXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgV1RG
Ojppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBpZihtYXNrID09ICdh
JykgeworICAgICAgICAgICAgYlBhc3MgPSAhV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAh
V1RGOjppc0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFy
KTsKKyAgICAgICAgfSBlbHNlIGlmKG1hc2sgPT0gJ04nKSB7CisgICAgICAgICAgICBiUGFzcyA9
IFdURjo6aXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBpZihtYXNrID09ICdu
JykgeworICAgICAgICAgICAgYlBhc3MgPSAhV1RGOjppc0FTQ0lJQWxwaGEoaW5DaGFyKSAmJiBX
VEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgfSBlbHNlIGlmKG1hc2sgPT0g
J1gnKSB7CisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6OmlzQVNDSUlMb3dlcihpbkNoYXIpICYm
IFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICB9IGVsc2UgaWYobWFzayA9
PSAneCcpIHsKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNBU0NJSVVwcGVyKGluQ2hhcikg
JiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBpZihtYXNr
ID09ICdNJykgeworICAgICAgICAgICAgYlBhc3MgPSBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5D
aGFyKTsKKyAgICAgICAgfSBlbHNlIGlmKG1hc2sgPT0gJ20nKSB7CisgICAgICAgICAgICBiUGFz
cyA9IFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICB9IGVsc2UgeyAKKyAg
ICAgICAgICAgIGJQYXNzID0gKG1hc2sgPT0gaW5DaGFyKTsKKyAgICAgICAgfQorCisgICAgfSBl
bHNlIHsgIC8vIGlucHV0Q2hhck51bSA+IG1heEFsbG93SW5wdXROdW0KKyAgICAgICAgYlBhc3Mg
PSBmYWxzZTsKKyAgICB9CisKKyAgICByZXR1cm4gYlBhc3M7Cit9CisKKwordm9pZCBXTUxJbnB1
dEVsZW1lbnQ6OmluaXQoKQoreworICAgIFN0cmluZyBuYW1lVmFyID0gbmFtZSgpOworICAgIFN0
cmluZyB2YWwgPSB2YWx1ZSgpOworICAgIFN0cmluZyB2YXJWYWx1ZTsKKyAgICBpZighbmFtZVZh
ci5pc0VtcHR5KCkpIHsKKyAgICAgICAgdmFyVmFsdWUgPSBXTUxIZWxwZXI6OmN1cnJlbnRCcndD
b250ZXh0KCktPmdldFZhcmliYWxlKG5hbWVWYXIpOworICAgIH0KKyAgICAKKyAgICBpZih2YXJW
YWx1ZS5pc0VtcHR5KCkgfHwgIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2sodmFyVmFsdWUpKSB7Cisg
ICAgICAgIGlmKGlzQ29uZm9ybWVkVG9JbnB1dE1hc2sodmFsKSkKKyAgICAgICAgICAgIHZhclZh
bHVlID0gdmFsOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgdmFyVmFsdWUgPSAiIjsKKwor
ICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPnN0b3JlVmFyaWFibGUobmFt
ZVZhciwgdmFyVmFsdWUpOworICAgIH0KKworICAgIHNldFZhbHVlKHZhclZhbHVlKTsKKworCisg
ICAgaWYoZ2V0QXR0cmlidXRlKGVtcHR5b2tBdHRyKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYo
bV9mb3JtYXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9lbXB0eU9rID0gdHJ1ZTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvL2NoZWNrIGlmIHRoZSBmb3JtYXQgY29kZXMgaXMgYSAi
KmYiIGNvZGUKKyAgICAgICAgICAgIFN0cmluZyBmb3JtYXRDb2RlcyA9ICJNbUFhWHhObiI7Cisg
ICAgICAgICAgICBpZigobV9mb3JtYXQubGVuZ3RoKCkgPT0gMikgJiYgCisgICAgICAgICAgICAg
ICAobV9mb3JtYXRbMF0gPT0gJyonKSAmJiAKKyAgICAgICAgICAgICAgIChmb3JtYXRDb2Rlcy5m
aW5kKG1fZm9ybWF0WzFdKSAhPSAtMSkpCisgICAgICAgICAgICAgICAgbV9lbXB0eU9rID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUF0
dHJzSWZOZWVkZWQoKQoreworICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIpOyAKKyAgICBTdHJpbmcgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHZhbHVl
LCBkb2N1bWVudCgpKTsKKyAgICBpZih2YWx1ZSAhPSBzdWIpIHsKKyAgICAgICAgc2V0VmFsdWUo
c3ViKTsKKyAgICB9CisKKyAgICBTdHJpbmcgdGl0bGUgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRy
KTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUsIGRvY3VtZW50
KCkpOworICAgIGlmKHRpdGxlICE9IHN1YikgeworICAgICAgICBzZXRBdHRyaWJ1dGUodGl0bGVB
dHRyLCB0aXRsZSk7CisgICAgfQorfQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6ZGlzcGF0Y2hC
bHVyRXZlbnQoKQoreworICAgIC8vIHVwZGF0ZSB0aGUgbmFtZWQgdmFyaWFibGUgb2YgaW5wdXQg
ZWxlbWVudCAKKyAgICBTdHJpbmcgbmFtZVZhciA9IG5hbWUoKTsKKyAgICBpZighbmFtZVZhci5p
c0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIGlucHV0ID0gdGV4dCgpOworICAgICAgICBpZiht
X2VtcHR5T2sgfHwgIWlucHV0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjpj
dXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlKG5hbWVWYXIsIGlucHV0KTsKKyAgICAg
ICAgICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBmb2N1cygpOyAKKyAgICAgICAgfQorICAgIH0KKworfQorCit2
b2lkIFdNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQorewor
ICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IHRleHRJbnB1dEV2ZW50ICYm
IGV2dC0+aXNUZXh0RXZlbnQoKSkgeworICAgICAgICBTdHJpbmcgZGF0YSA9IHN0YXRpY19jYXN0
PFRleHRFdmVudCo+KGV2dCktPmRhdGEoKTsKKyAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wgKnJ0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKTsKKyAgICAgICAg
aWYocnQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGlucHV0Q2hhck51bSA9IHJ0LT50ZXh0KCku
bGVuZ3RoKCkgKyAxOworICAgICAgICAgICAgaWYoIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2soZGF0
YVswXSwgaW5wdXRDaGFyTnVtKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgIH0KKworICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0
KTsKK30KKworU3RyaW5nIFdNTElucHV0RWxlbWVudDo6dGV4dCgpIGNvbnN0Cit7CisgICAgUmVu
ZGVyVGV4dENvbnRyb2wgKiBydCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVu
ZGVyZXIoKSk7CisgICAgcmV0dXJuICgocnQgIT0gTlVMTCkgPyBydC0+dGV4dCgpIDogU3RyaW5n
KCkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwor
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBXTUxJbnB1dEVsZW1lbnRfaAorI2RlZmluZSBXTUxJbnB1dEVsZW1lbnRf
aAorCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEhUTUxGb3JtRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFz
cyBXTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCB7CitwdWJsaWM6Cisg
ICAgV01MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxG
b3JtRWxlbWVudCogPSAwKTsKKyAgICB2aXJ0dWFsIH5XTUxJbnB1dEVsZW1lbnQoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCB1
cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFN0
cmluZyYpOworICAgIGJvb2wgaXNDb25mb3JtZWRUb0lucHV0TWFzayhVQ2hhciwgdW5zaWduZWQs
IGJvb2wgaXNJbnB1dGVkQnlVc3IgPSB0cnVlKTsKKyAgICBTdHJpbmcgdGV4dCgpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIFN0cmluZyB2YWxpZGF0ZUlucHV0TWFzayhjb25zdCBBdG9taWNTdHJp
bmcmKTsKKyAgICB1bnNpZ25lZCBjdXJzb3JQb3NUb0lkeE9mTWFzayh1bnNpZ25lZCk7CisKKyAg
ICBTdHJpbmcgbV9mb3JtYXQ7CisgICAgYm9vbCBtX2VtcHR5T2s7CisgICAgdW5zaWduZWQgbV9t
YXNrQWxsb3dzSW5wdXRDaGFyTnVtczsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3dtbC9XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldN
TEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRl
ICJXTUxIZWxwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
V01MTmFtZXM7CisKK1dNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6V01MSW50cmluc2ljRXZlbnRI
YW5kbGVyKCkgCit7Cit9CisgICAgCitXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXI6On5XTUxJbnRy
aW5zaWNFdmVudEhhbmRsZXIoKQoreworfQorCit2b2lkIFdNTEludHJpbnNpY0V2ZW50SGFuZGxl
cjo6cmVnaXN0ZXJJbnRyaW5zaWNFdmVudChXTUxJbnRyRXZlbnRUeXBlIHR5cGUsIGNvbnN0IFdN
TEludHJpbnNpY0V2ZW50JiBldikKK3sKKyAgICBpZihtX2V2ZW50cy5jb250YWlucyh0eXBlKSkg
eworICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihDb25mbGljdGlu
Z0V2ZW50QmluZGluZ0Vycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2V2ZW50
cy5zZXQodHlwZSwgZXYpOworfQorCit2b2lkIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6dHJp
Z2dlckludHJpbnNpY0V2ZW50KFdNTEludHJFdmVudFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBX
TUxJbnRyaW5zaWNFdmVudCBldiA9IG1fZXZlbnRzLmdldCh0eXBlKTsKKyAgICBpZihldi50YXNr
KQorICAgICAgICBldi50YXNrLT5leGVjKE5VTEwsIGV2LnRhcmdldFVSSSk7Cit9CisKK2Jvb2wg
V01MSW50cmluc2ljRXZlbnRIYW5kbGVyOjpoYXNJbnRyaW5zaWNFdmVudChXTUxJbnRyRXZlbnRU
eXBlIHR5cGUpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZXZlbnRzLmNvbnRhaW5zKHR5cGUpOwor
fQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXJfaAorI2RlZmluZSBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXJfaAorCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgV01MVGFza0VsZW1lbnQ7CisKK2VudW0gV01MSW50ckV2ZW50VHlwZXsgCisg
ICAgVU5LTk9XTiA9IDAsIE9ORU5URVJGT1JXQVJELCBPTkVOVEVSQkFDS1dBUkQsIE9OVElNRVIs
IE9OUElDSyAKK307CisKK3R5cGVkZWYgc3RydWN0IFdNTEludHJpbnNpY0V2ZW50IHsKKyAgICBX
TUxUYXNrRWxlbWVudCogdGFzazsKKyAgICBTdHJpbmcgdGFyZ2V0VVJJOworfSBXTUxJbnRyaW5z
aWNFdmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgCit0eXBlZGVmIEhhc2hNYXA8aW50LCBX
TUxJbnRyaW5zaWNFdmVudD4gSW50cmluc2ljRXZudE1hcDsKKworY2xhc3MgV01MSW50cmluc2lj
RXZlbnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsK
KyAgICB2aXJ0dWFsIH5XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsKKworICAgIC8vIGhhbmRs
aW5nIFdNTCBpbnRyaW5zaWMgZXZlbnQKKyAgICB2b2lkIHJlZ2lzdGVySW50cmluc2ljRXZlbnQo
V01MSW50ckV2ZW50VHlwZSwgY29uc3QgV01MSW50cmluc2ljRXZlbnQmKTsKKyAgICB2b2lkIHRy
aWdnZXJJbnRyaW5zaWNFdmVudChXTUxJbnRyRXZlbnRUeXBlKSBjb25zdDsKKyAgICBib29sIGhh
c0ludHJpbnNpY0V2ZW50KFdNTEludHJFdmVudFR5cGUpIGNvbnN0OworCitwcml2YXRlOgorICAg
IEludHJpbnNpY0V2bnRNYXAgbV9ldmVudHM7CisgICAKK307CisKK30gLy9uYW1lc3BhY2UKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25FbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTEludHJpbnNpY0V2
ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEVs
ZW1lbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiV01MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCisjaW5jbHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTE9wdGlvbkVsZW1lbnQ6OldNTE9w
dGlvbkVsZW1lbnQoRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxPcHRpb25FbGVtZW50KGRvYywg
MCkKKyAgICAsIG1fZXZudEhhbmRsZXIoTlVMTCkKKyAgICAsIG1faGFzSW50ckV2ZW50KGZhbHNl
KQoreworfQorCitXTUxPcHRpb25FbGVtZW50Ojp+V01MT3B0aW9uRWxlbWVudCgpIAoreworICAg
IGlmKG1fZXZudEhhbmRsZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fZXZudEhhbmRsZXI7CisgICAg
ICAgIG1fZXZudEhhbmRsZXIgPSBOVUxMOworICAgIH0KK30KKwordm9pZCBXTUxPcHRpb25FbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAg
aWYoYXR0ci0+bmFtZSgpID09IG9ucGlja0F0dHIpIHsKKyAgICAgICAgCisgICAgICAgIFdNTElu
dHJFdmVudFR5cGUgZXR5cGUgPSBPTlBJQ0s7IAorICAgICAgICBpZighbV9ldm50SGFuZGxlcikg
eworICAgICAgICAgICAgbV9ldm50SGFuZGxlciA9IG5ldyBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIoKTsKKyAgICAgICAgfQorIAorICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAg
ICAgUXVhbGlmaWVkTmFtZSBxTmFtZSgiZ28iLCAiZ28iLCAiIik7CisgICAgICAgIEVsZW1lbnQq
IGdvID0gV01MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZVdNTEVsZW1lbnQocU5hbWUsIGRvY3VtZW50
KCksIGZhbHNlKTsKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVW
YXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAgICAgICBnby0+
c2V0QXR0cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwgZWMpOworIAorICAgICAgICBXTUxJbnRy
aW5zaWNFdmVudCBldjsKKyAgICAgICAgZXYudGFzayA9IHN0YXRpY19jYXN0PFdNTEdvRWxlbWVu
dCo+KGdvKTsKKyAgICAgICAgZXYudGFyZ2V0VVJJID0gaHJlZjsKKyAKKyAgICAgICAgbV9oYXNJ
bnRyRXZlbnQgPSB0cnVlOworICAgICAgICBtX2V2bnRIYW5kbGVyLT5yZWdpc3RlckludHJpbnNp
Y0V2ZW50KGV0eXBlLCBldik7CisKKyAgICB9IGVsc2UgeworICAgICAgICBIVE1MT3B0aW9uRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgfQorfQorCitXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIqIFdNTE9wdGlvbkVsZW1lbnQ6OmV2ZW50SGFuZGxlcigpIHsKKyAgICBp
ZihtX2hhc0ludHJFdmVudCAmJiAhbV9ldm50SGFuZGxlcikgIHsKKyAgICAgICAgbV9ldm50SGFu
ZGxlciA9IG5ldyBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsKKyAgICB9CisgICAgcmV0dXJu
IG1fZXZudEhhbmRsZXI7Cit9CisKK3ZvaWQgV01MT3B0aW9uRWxlbWVudDo6c2V0SGFzSW50ckV2
ZW50KGJvb2wgaGFzKSB7CisgICAgbV9oYXNJbnRyRXZlbnQgPSBoYXM7Cit9CisgCitib29sIFdN
TE9wdGlvbkVsZW1lbnQ6Omhhc0ludHJFdmVudCgpIHsKKyAgICByZXR1cm4gbV9oYXNJbnRyRXZl
bnQ7Cit9CisKK3ZvaWQgV01MT3B0aW9uRWxlbWVudDo6aGFuZGxlSW50ckV2ZW50SWZOZWVkZWQo
KQoreworICAgIGlmKG1fZXZudEhhbmRsZXIgJiYgbV9ldm50SGFuZGxlci0+aGFzSW50cmluc2lj
RXZlbnQoT05QSUNLKSkKKyAgICAgICAgbV9ldm50SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2
ZW50KE9OUElDSyk7Cit9CisKK3ZvaWQgV01MT3B0aW9uRWxlbWVudDo6dXBkYXRlQXR0cnNJZk5l
ZWRlZCgpIAoreworICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOwor
ICAgIFN0cmluZyBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodmFsdWUsIGRvY3Vt
ZW50KCkpOworICAgIGlmKHZhbHVlICE9IHN1YikKKyAgICAgICAgc2V0QXR0cmlidXRlKHZhbHVl
QXR0ciwgc3ViKTsKKworICAgIFN0cmluZyB0aXRsZSA9IGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIp
OworICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZih0aXRsZSwgZG9jdW1lbnQo
KSk7CisKKyAgICBpZih0aXRsZSAhPSBzdWIpCisgICAgICAgIHNldEF0dHJpYnV0ZSh0aXRsZUF0
dHIsIHRpdGxlKTsKK30KKwordm9pZCBXTUxPcHRpb25FbGVtZW50OjpzZXRTZWxlY3RlZFN0YXRl
KGJvb2wgc2VsZWN0ZWQpCit7CisgICAgaWYgKG1fc2VsZWN0ZWQgPT0gc2VsZWN0ZWQpCisgICAg
ICAgIHJldHVybjsKKworICAgIFdNTFNlbGVjdEVsZW1lbnQqIHNlbCA9IGdldFNlbGVjdCgpOwor
ICAgIGlmKCFzZWwpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc2VsZWN0ZWQgPSBzZWxlY3Rl
ZDsKKyAgICBpZihzZWwtPm11bHRpcGxlKCkgJiYgbV9oYXNJbnRyRXZlbnQpIHsKKyAgICAgICAg
aGFuZGxlSW50ckV2ZW50SWZOZWVkZWQoKTsKKyAgICB9IGVsc2UgaWYobV9oYXNJbnRyRXZlbnQg
JiYgbV9zZWxlY3RlZCkgeworICAgICAgICBoYW5kbGVJbnRyRXZlbnRJZk5lZWRlZCgpOworICAg
IH0KKworICAgIHNldENoYW5nZWQoKTsKK30KKworV01MU2VsZWN0RWxlbWVudCogV01MT3B0aW9u
RWxlbWVudDo6Z2V0U2VsZWN0KCkgY29uc3QKK3sKKyAgICBOb2RlKiBzZWxlY3QgPSBwYXJlbnRO
b2RlKCk7CisgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1lKHNlbGVjdFRh
ZykpCisgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOworCisgICAgcmV0dXJu
IHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihzZWxlY3QpOworfQorCit9IC8vbmFtZXNw
YWNlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93
bWwvV01MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBXTUxPcHRpb25FbGVtZW50X2gKKyNkZWZpbmUgV01MT3B0aW9uRWxlbWVudF9oCisK
KyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyOwor
Y2xhc3MgV01MU2VsZWN0RWxlbWVudDsKKworY2xhc3MgV01MT3B0aW9uRWxlbWVudCA6IHB1Ymxp
YyBIVE1MT3B0aW9uRWxlbWVudHsKK3B1YmxpYzoKKyAgICBXTUxPcHRpb25FbGVtZW50KERvY3Vt
ZW50Kik7CisgICAgdmlydHVhbCB+V01MT3B0aW9uRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZvaWQgc2V0
U2VsZWN0ZWRTdGF0ZShib29sKTsKKyAgICBXTUxTZWxlY3RFbGVtZW50KiBnZXRTZWxlY3QoKSBj
b25zdDsKKworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyKCk7Cisg
ICAgYm9vbCBoYXNJbnRyRXZlbnQoKTsKKyAgICB2b2lkIHNldEhhc0ludHJFdmVudChib29sKTsK
KyAgICB2b2lkIGhhbmRsZUludHJFdmVudElmTmVlZGVkKCk7CisKKyAgICB2b2lkIHVwZGF0ZUF0
dHJzSWZOZWVkZWQoKTsgCitwcml2YXRlOgorICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciog
bV9ldm50SGFuZGxlcjsKKyAgICBib29sIG1faGFzSW50ckV2ZW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS93bWwvV01MUEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS93bWwvV01MUEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFBFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAi
Q1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFt
ZXM7CisKK1dNTFBFbGVtZW50OjpXTUxQRWxlbWVudChEb2N1bWVudCogZG9jKQorICAgIDogSFRN
TFBhcmFncmFwaEVsZW1lbnQoZG9jKSAKK3sKK30KKworV01MUEVsZW1lbnQ6On5XTUxQRWxlbWVu
dCgpIHt9CisKK3ZvaWQgV01MUEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZihhdHRyLT5uYW1lKCkgPT0gbW9kZUF0dHIpIHsKKyAg
ICAgICAgbV9tb2RlID0gIGF0dHItPnZhbHVlKCk7CisgICAgICAgIGlmKG1fbW9kZSA9PSAid3Jh
cCIpCisgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdvcmRXcmFw
LCBDU1NWYWx1ZUJyZWFrV29yZCk7CisgICAgICAgIGVsc2UgaWYobV9tb2RlID09ICJub3dyYXAi
KQorICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNl
LCBDU1NWYWx1ZU5vd3JhcCk7CisgICAgfSBlbHNlCisgICAgICAgIEhUTUxQYXJhZ3JhcGhFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKK30KKwordm9pZCBXTUxQRWxlbWVudDo6
dXBkYXRlQXR0cnNJZk5lZWRlZCgpCit7CisgICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc3BlY2lm
aWVkLCB0aGUgbGluZXdyYXAgbW9kZSBpcyBpZGVudGljYWwgdG8gCisgICAgLy8gdGhlIGxpbmUt
d3JhcCBtb2RlIG9mIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggaW4gdGhlIHRleHQgZmxvdyBvZgor
ICAgIC8vIGEgY2FyZC5UaGUgZGVmYXVsdCBtb2RlIGZvciB0aGUgZmlyc3QgcGFyYWdyYXBoIGlu
IGEgY2FyZCBpcyB3cmFwCisgICAgaWYobV9tb2RlLmlzRW1wdHkoKSkgeworICAgICAgICBQYXNz
UmVmUHRyPE5vZGVMaXN0PiBubCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJw
Iik7CisgICAgICAgIGludCBuTGVuID0gbmwuZ2V0KCktPmxlbmd0aCgpOworICAgICAgICBpZihu
TGVuID09IDApCisgICAgICAgICAgICBzZXRBdHRyaWJ1dGUobW9kZUF0dHIsICJ3cmFwIik7Cisg
ICAgICAgIGVsc2UgaWYobkxlbiA+IDApIHsKKyAgICAgICAgICAgIFdNTFBFbGVtZW50KiBwRWwg
PSBzdGF0aWNfY2FzdDxXTUxQRWxlbWVudCo+KG5sLmdldCgpLT5pdGVtKG5MZW4tMSkpOworICAg
ICAgICAgICAgU3RyaW5nIHByZU1vZGUgPSBwRWwtPmdldEF0dHJpYnV0ZShtb2RlQXR0cik7Cisg
ICAgICAgICAgICBzZXRBdHRyaWJ1dGUobW9kZUF0dHIsIHByZU1vZGUpOworICAgICAgICB9Cisg
ICAgfQorfQorCit9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFBFbGVtZW50LmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3dtbC9XTUxQRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBA
CisjaWZuZGVmIFdNTFBFbGVtZW50X2gKKyNkZWZpbmUgV01MUEVsZW1lbnRfaAorCisjaW5jbHVk
ZSAiSFRNTFBhcmFncmFwaEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEb2N1bWVudDsKK2NsYXNzIFdNTFBFbGVtZW50IDogcHVibGljIEhUTUxQYXJhZ3JhcGhFbGVt
ZW50eworcHVibGljOgorICAgIFdNTFBFbGVtZW50KERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+
V01MUEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKworcHJp
dmF0ZToKKyAgICBTdHJpbmcgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJF
dmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIk5hbWVOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKworI2lu
Y2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRN
TE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQb3N0
ZmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
SGVscGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5h
bWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK1dNTFBvc3RmaWVsZEVsZW1lbnQ6
OldNTFBvc3RmaWVsZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQq
IGRvYykKKyA6IFdNTEVsZW1lbnQobmFtZSwgZG9jKSB7fQorCitXTUxQb3N0ZmllbGRFbGVtZW50
Ojp+V01MUG9zdGZpZWxkRWxlbWVudCgpIHt9CisKK3ZvaWQgV01MUG9zdGZpZWxkRWxlbWVudDo6
aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgV01MR29FbGVtZW50KiBnbyA9IE5V
TEw7CisgICAgTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCkgOworICAgIGlmIChhbmNlc3Rv
ci0+aGFzVGFnTmFtZShXTUxOYW1lczo6Z29UYWcpKSB7CisgICAgICAgIGdvID0gc3RhdGljX2Nh
c3Q8V01MR29FbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVy
bjsgICAgIC8vIHRoZSBhbmNlc3RvciBvZiA8cG9zdGZpZWxkPiBnb3QgdG8gYmUgPGdvPgorICAg
IH0KKyAgICBpZihnbyl7CisgICAgICAgIGdvLT5yZWdpc3RlclBvc3RmaWVsZEVsZW1lbnQodGhp
cyk7CisgICAgfQorfQorCitTdHJpbmcgV01MUG9zdGZpZWxkRWxlbWVudDo6bmFtZSgpIAorewor
ICAgIHJldHVybiBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoZ2V0QXR0cmlidXRlKG5hbWVB
dHRyKSwgZG9jdW1lbnQoKSk7Cit9CisKK1N0cmluZyBXTUxQb3N0ZmllbGRFbGVtZW50Ojp2YWx1
ZSgpIAoreworICAgIHJldHVybiBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoZ2V0QXR0cmli
dXRlKHZhbHVlQXR0ciksIGRvY3VtZW50KCkpOworfSAgICAKKworfQorCkluZGV4OiBXZWJDb3Jl
L3dtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
UG9zdGZpZWxkRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUG9zdGZp
ZWxkRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
ICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBX
TUxQb3N0ZmllbGRFbGVtZW50X2gKKyNkZWZpbmUgV01MUG9zdGZpZWxkRWxlbWVudF9oCisKKyNp
bmNsdWRlICJXTUxFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01M
UG9zdGZpZWxkRWxlbWVudCA6IHB1YmxpYyAgV01MRWxlbWVudHsKK3B1YmxpYzoKKyAgICBXTUxQ
b3N0ZmllbGRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2Mp
OworICAgIH5XTUxQb3N0ZmllbGRFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0
ZWRJbnRvVHJlZShib29sIGRlZXApOyAgICAvLyBuZWVkIHRvIHJlZ2lzdGVyIG15c2VsZiB0byBw
YXJlbnRzIGhlcmUsIGxpa2UgPGdvPiwgPG9uZXZlbnQ+CisKKyAgICBTdHJpbmcgbmFtZSgpOyAg
ICAvLyBldmVyeSBwb3N0ZmllbGQgdGFnIG11c3QgaGF2ZSBhIG5hbWUgYXR0cmlidXRlIGFuZCBh
IHZhbGlkIGF0dHJpYnV0ZQorICAgIFN0cmluZyB2YWx1ZSgpOworCit9OworCit9CisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvd21sL1dNTFByZXZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dtbC9XTUxQcmV2RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9X
TUxQcmV2RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUg
Ikhpc3RvcnlJdGVtLmgiCisKKyNpbmNsdWRlICJXTUxQcmV2RWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxD
YXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxUaW1lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1dNTFByZXZFbGVtZW50OjpXTUxQcmV2RWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICA6IFdNTFRhc2tFbGVtZW50KCB0YWdOYW1l
LCBkb2MpIHt9CisKK1dNTFByZXZFbGVtZW50OjpXTUxQcmV2RWxlbWVudChEb2N1bWVudCogZG9j
KQorICA6IFdNTFRhc2tFbGVtZW50KCBXTUxOYW1lczo6cHJldlRhZywgZG9jKSB7fQorCitXTUxQ
cmV2RWxlbWVudDo6fldNTFByZXZFbGVtZW50KCkge30KKyAgICAgICAgICAgICAgICAgICAgICAg
Cit2b2lkICBXTUxQcmV2RWxlbWVudDo6ZXhlYyhFdmVudCogZXZ0LCBTdHJpbmcgdXJpKQorewor
ICAgIC8vIGNvbnZlcnQgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBzZXR2YXIgZWxlbWVu
dCBpZiBuZWNlc3NhcnkKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcnM7CisgICAgaWYoaGFzU2V0dmFy
KCkpIHsKKyAgICAgICAgZm9yKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fc2V0dmFycy5zaXpl
KCk7ICsraSkgeworICAgICAgICAgICAgaWYoIW1fc2V0dmFyc1tpXS0+bmFtZSgpLmlzRW1wdHko
KSkKKyAgICAgICAgICAgICAgICBtX3ZhcnMuc2V0KG1fc2V0dmFyc1tpXS0+bmFtZSgpLCBtX3Nl
dHZhcnNbaV0tPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfQorIAorICAgIC8vIHVwZGF0ZSBi
cm93c2VyIGNvbnRleHQgCisgICAgaWYoIW1fdmFycy5pc0VtcHR5KCkpCisgICAgICAgIFdNTEhl
bHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c3RvcmVWYXJpYWJsZXMobV92YXJzKTsKKworICAg
IC8vIHN0b3AgdGhlIHRpbWVyIG9mIHRoZSBjdXJyZW50IGNhcmQgaWYgaXQgaXMgYWN0aXZlCisg
ICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCkt
PmFjdGl2ZUNhcmQoKTsKKyAgICBpZihjYXJkICYmIGNhcmQtPmV2ZW50VGltZXIoKSkKKyAgICAg
ICAgY2FyZC0+ZXZlbnRUaW1lcigpLT5zdG9wKCk7CisKKyAgICAvLyBwcmVwYXJlIGZvciBkaXNw
bGF5aW5nIHRoZSBkZXN0IGNhcmQKKyAgICBQYWdlKiBwYWdlID0gV01MSGVscGVyOjpjdXJyZW50
QnJ3Q29udGV4dCgpLT5wYWdlKCk7CisgICAgcGFnZS0+Z29CYWNrKCk7Cit9CisKKworfSAvL25h
bWVzcGFjZQorCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQcmV2RWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTFByZXZFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3dtbC9XTUxQcmV2RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBXTUxQcmV2RWxlbWVudF9oCisjZGVmaW5lIFdNTFByZXZFbGVtZW50X2gKKworI2lu
Y2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworICAgIAorY2xhc3MgV01MUHJldkVsZW1lbnQgOiBwdWJsaWMgV01MVGFz
a0VsZW1lbnQgeworcHVibGljOgorICAgIFdNTFByZXZFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpOworICAgIFdNTFByZXZFbGVtZW50KERvY3VtZW50
KiBkb2MpOworICAgIHZpcnR1YWwgfldNTFByZXZFbGVtZW50KCk7CisgICAgCisgICAgdmlydHVh
bCB2b2lkIGV4ZWMoRXZlbnQgKiwgU3RyaW5nKSA7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNl
bmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MUmVmcmVzaEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTFJlZnJlc2hFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTFJlZnJlc2hFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIkZyYW1lTG9hZGVyLmgiCisKKyNpbmNsdWRlICJXTUxSZWZyZXNoRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisj
aW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxSZWZy
ZXNoRWxlbWVudDo6V01MUmVmcmVzaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQqIGRvYykKKyAgICAgICAgOiBXTUxUYXNrRWxlbWVudCggdGFnTmFtZSwgZG9j
KSB7fQorCitXTUxSZWZyZXNoRWxlbWVudDo6fldNTFJlZnJlc2hFbGVtZW50KCkge30KKwordm9p
ZCAgV01MUmVmcmVzaEVsZW1lbnQ6OmV4ZWMoRXZlbnQqIGV2dCwgU3RyaW5nIHVyaSkgCit7Cisg
ICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCkt
PmFjdGl2ZUNhcmQoKTsKKyAgICBXTUxUaW1lckVsZW1lbnQqIHRpbWVyID0gY2FyZC0+ZXZlbnRU
aW1lcigpOworICAgIC8vIEJlZm9yZSBwZXJmb3JtIHJlZnJlc2ggdGFzaywgd2Ugc3RvcmUgdGhl
IGN1cnJlbnQgdGltZW91dCB2YWx1ZSAKKyAgICAvLyBhbmQgdGhlbiBzdG9wIHRoZSB0aW1lcgor
ICAgIGlmKHRpbWVyKSB7CisgICAgICAgIHRpbWVyLT5zdG9yZUludGVydmFsVG9CcndDb250ZXh0
KCk7CisgICAgICAgIHRpbWVyLT5zdG9wKCk7CisgICAgfQorCisgICAgLy8gY29udmVydCB2YXJp
YWJsZSBuYW1lcyBhbmQgdmFsdWVzIG9mIHNldHZhciBlbGVtZW50IGlmIG5lY2Vzc2FyeQorICAg
IFZhcmlhYmxlTWFwIG1fdmFyczsKKyAgICBpZihoYXNTZXR2YXIoKSkgeworICAgICAgICBmb3Io
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9zZXR2YXJzLnNpemUoKTsgKytpKSB7CisgICAgICAg
ICAgICBpZighbV9zZXR2YXJzW2ldLT5uYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAg
IG1fdmFycy5zZXQobV9zZXR2YXJzW2ldLT5uYW1lKCksIG1fc2V0dmFyc1tpXS0+dmFsdWUoKSk7
CisgICAgICAgIH0KKyAgICB9ICAKKworICAgIC8vIHVwZGF0ZSBicm93c2VyIGNvbnRleHQgCisg
ICAgaWYoIW1fdmFycy5pc0VtcHR5KCkpCisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0Nv
bnRleHQoKS0+c3RvcmVWYXJpYWJsZXMobV92YXJzKTsKKworICAgIC8vcmVkaXNwbGF5IGN1cnJl
bXQgY2FyZCB3aXRoIGN1cnJlbnQgdmFyaWFibGUgc3RhdGUKKyAgICBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5sb2FkZXIoKS0+cmVsb2FkKCk7CisKKyAgICAvL0FmdGVyIHJlZnJlc2hpbmcgdGFzaywg
cmVzdW1lIHRoZSB0aW1lciBpZiBpdCBleHNpdHMgCisgICAgaWYodGltZXIpCisgICAgICAgIHRp
bWVyLT5zdGFydCgpOworfQorCisKK30gLy9uYW1lc3BhY2UKKwpJbmRleDogV2ViQ29yZS93bWwv
V01MUmVmcmVzaEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxSZWZyZXNo
RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUmVmcmVzaEVsZW1lbnQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MUmVmcmVzaEVs
ZW1lbnRfaAorI2RlZmluZSBXTUxSZWZyZXNoRWxlbWVudF9oCisKKyNpbmNsdWRlICJTdHlsZWRF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFz
cyBXTUxSZWZyZXNoRWxlbWVudCA6IHB1YmxpYyBXTUxUYXNrRWxlbWVudCB7CitwdWJsaWM6Cisg
ICAgV01MUmVmcmVzaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYyk7CisgICAgdmlydHVhbCB+V01MUmVmcmVzaEVsZW1lbnQoKTsKKyAgICAKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlYyhFdmVudCAqLCBTdHJpbmcpIDsKK307CisKK30gLy9uYW1lc3BhY2UK
KworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDU4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVt
ZW50LmgiCisjaW5jbHVkZSAiV01MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgor
I2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1
ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50
LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
KyNpbmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3dGYvVmVj
dG9yLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIEFSUk9XX0tFWVNfUE9QX01FTlUg
MQorI2Vsc2UKKyNkZWZpbmUgQVJST1dfS0VZU19QT1BfTUVOVSAwCisjZW5kaWYKKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIFdN
TE5hbWVzOworCitXTUxTZWxlY3RFbGVtZW50OjpXTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZywgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50KHRh
ZywgZG9jLCAwKSB7fQorCitXTUxTZWxlY3RFbGVtZW50Ojp+V01MU2VsZWN0RWxlbWVudCgpIHt9
CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKQoreworICAgIGlmKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgeworICAg
ICAgICBpZihXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7CisgICAg
ICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFi
bGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgIH0gZWxzZSAKKyAgICAgICAgICAgIG1fbmFtZSA9
IGF0dHItPnZhbHVlKCk7CisKKyAgICB9IGVsc2UgaWYoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0
cikgeworICAgICAgICBtX3ZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICB9IGVsc2UgaWYoYXR0
ci0+bmFtZSgpID09IGluYW1lQXR0cikgeworICAgICAgICBpZihXTUxIZWxwZXI6Omhhc1Zhcmlh
YmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXpl
cigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAg
IH0gZWxzZQorICAgICAgICAgICAgbV9pTmFtZSA9IGF0dHItPnZhbHVlKCk7CisKKyAgICB9IGVs
c2UgaWYoYXR0ci0+bmFtZSgpID09IGl2YWx1ZUF0dHIpIHsKKyAgICAgICAgbV9pVmFsdWUgPSBh
dHRyLT52YWx1ZSgpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG11bHRpcGxlQXR0
cikgeworICAgICAgICBib29sIG11bHRpcGxlID0gbV9tdWx0aXBsZTsKKyAgICAgICAgbV9tdWx0
aXBsZSA9IChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIik7CisgICAgICAgIGlmICgobXVsdGlwbGUg
IT0gbV9tdWx0aXBsZSkgJiYgYXR0YWNoZWQoKSkgeworICAgICAgICAgICAgZGV0YWNoKCk7Cisg
ICAgICAgICAgICBhdHRhY2goKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZihhdHRyLT5uYW1l
KCkgPT0gSFRNTE5hbWVzOjpzaXplQXR0cikgeworICAgICAgICAvL0RvIG5vdGhpbmcKKyAgICB9
IGVsc2UgaWYoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKSB7CisgICAg
ICAgIC8vRG8gbm90aGluZworICAgIH0gZWxzZSB7CisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAgICB9CisKK30KKwordm9pZCBXTUxTZWxl
Y3RFbGVtZW50Ojp1cGRhdGVBdHRyc0lmTmVlZGVkKCkgCit7CisgICAgU3RyaW5nIHN1YiA9IFdN
TEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihtX3ZhbHVlLCBkb2N1bWVudCgpKTsKKyAgICBpZiht
X3ZhbHVlICE9IHN1YikgeworICAgICAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBzdWIpOwor
ICAgICAgICBtX3ZhbHVlID0gc3ViOworICAgIH0KKworICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vi
c3RpdHV0ZVZhclJlZihtX2lWYWx1ZSwgZG9jdW1lbnQoKSk7CisgICAgaWYobV9pVmFsdWUgIT0g
c3ViKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZShpdmFsdWVBdHRyLCBzdWIpOworICAgICAgICBt
X2lWYWx1ZSA9IHN1YjsKKyAgICB9CisKKyAgICBTdHJpbmcgdGl0bGUgPSBnZXRBdHRyaWJ1dGUo
dGl0bGVBdHRyKTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUs
IGRvY3VtZW50KCkpOworICAgIGlmKHRpdGxlICE9IHN1YikKKyAgICAgICAgc2V0QXR0cmlidXRl
KHRpdGxlQXR0ciwgdGl0bGUpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnNldFNlbGVj
dGVkSW5kZXgoaW50IG9wdGlvbkluZGV4LCBib29sIGRlc2VsZWN0LCBib29sIGZpcmVPbkNoYW5n
ZSkKK3sKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMo
KTsKKyAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgob3B0aW9uSW5kZXgpOwor
ICAgIFdNTE9wdGlvbkVsZW1lbnQqIGVsZW1lbnQgPSAwOworCisgICAgaWYgKCFtdWx0aXBsZSgp
KQorICAgICAgICBkZXNlbGVjdCA9IHRydWU7CisKKyAgICBpZiAobGlzdEluZGV4ID49IDApIHsK
KyAgICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8IGRlc2VsZWN0
KQorICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgobGlzdEluZGV4KTsK
KyAgICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXggPCAwIHx8IGRlc2VsZWN0KQor
ICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKKyAgICAg
ICAgZWxlbWVudCA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tsaXN0SW5k
ZXhdKTsKKyAgICAgICAgZWxlbWVudC0+c2V0U2VsZWN0ZWRTdGF0ZSh0cnVlKTsKKyAgICB9CisK
KyAgICBpZiAoZGVzZWxlY3QpCisgICAgICAgIGRlc2VsZWN0SXRlbXMoZWxlbWVudCk7CisKKyAg
ICBzY3JvbGxUb1NlbGVjdGlvbigpOworCisgICAgLy8gVGhpcyBvbmx5IGdldHMgY2FsbGVkIHdp
dGggZmlyZU9uQ2hhbmdlIGZvciBtZW51IGxpc3RzLiAKKyAgICBpZiAoZmlyZU9uQ2hhbmdlICYm
IHVzZXNNZW51TGlzdCgpKQorICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7Cit9CisKK1N0cmlu
ZyBXTUxTZWxlY3RFbGVtZW50Ojp2YWx1ZVRvSVZhbHVlKFN0cmluZyYgdmFsdWUpCit7CisgICAg
aWYodmFsdWUuaXNFbXB0eSgpKSAKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPFN0
cmluZz4gdmFsVmVjdHM7CisgICAgdmFsdWUuc3BsaXQoJzsnLCB2YWxWZWN0cyk7CisgICAgVmVj
dG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gdmFsVmVjdHMuYmVnaW4oKTsKKyAgICBXTUxPcHRp
b25FbGVtZW50KiBvcHRpb24gPSBOVUxMOyAKKyAgICBTdHJpbmcgaVZhbDsKKyAgICBTdHJpbmcg
dmFsOworICAgIHdoaWxlKGl0ICE9IHZhbFZlY3RzLmVuZCgpKSB7CisgICAgICAgIHZhbCA9ICpp
dDsKKyAgICAgICAgaW50IG9wdElkeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBpdGVtcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNM
b2NhbE5hbWUob3B0aW9uVGFnKSkgeworICAgICAgICAgICAgICAgIG9wdElkeCsrOworICAgICAg
ICAgICAgICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tp
XSk7CisgICAgICAgICAgICAgICAgaWYob3B0aW9uLT52YWx1ZSgpID09IHZhbCkgeworICAgICAg
ICAgICAgICAgICAgICBpVmFsICs9IFN0cmluZzo6bnVtYmVyKG9wdElkeCk7CisgICAgICAgICAg
ICAgICAgICAgIGlWYWwgKz0gIjsiOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgKytpdDsKKyAg
ICB9CisKKyAgICBpZihpVmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICBpVmFsID0gaVZhbC5s
ZWZ0KGlWYWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsaWRhdGVJbmRleFZhbHVlKGlW
YWwpOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6aXZhbHVlVG9WYWx1ZShTdHJpbmcm
IGl2YWx1ZSkKK3sKKyAgICBpZihpdmFsdWUuaXNFbXB0eSgpKSAKKyAgICAgICAgcmV0dXJuIGl2
YWx1ZTsKKworICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IE5VTEw7IAorICAgIFN0cmlu
ZyBpdmFsOworICAgIFN0cmluZyB2YWw7CisgICAgaW50IG9wdElkeCA9IC0xOworICAgIGludCBs
aXN0SWR4ID0gLTE7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlz
dEl0ZW1zKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdmFsVmVjdHM7CisgICAgaXZhbHVlLnNwbGl0
KCc7JywgdmFsVmVjdHMpOworICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IHZhbFZl
Y3RzLmJlZ2luKCk7CisgICAgd2hpbGUoaXQgIT0gdmFsVmVjdHMuZW5kKCkpIHsKKyAgICAgICAg
aXZhbCA9ICppdCsrOworCisgICAgICAgIG9wdElkeCA9IGl2YWwudG9JbnQoKTsKKyAgICAgICAg
aWYoKG9wdElkeCA8IDEpIHx8IChvcHRJZHggPiBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUo
KSkpKQorICAgICAgICAgICAgICAgY29udGludWU7IAorCisgICAgICAgIGxpc3RJZHggPSBvcHRp
b25Ub0xpc3RJbmRleChvcHRJZHgtMSk7CisgICAgICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdN
TE9wdGlvbkVsZW1lbnQqPihpdGVtc1tsaXN0SWR4XSk7CisKKyAgICAgICAgdmFsICs9IG9wdGlv
bi0+dmFsdWUoKTsKKyAgICAgICAgdmFsICs9ICI7IjsKKyAgICB9CisKKyAgICBpZih2YWwuZW5k
c1dpdGgoIjsiKSkgCisgICAgICAgIHZhbCA9IHZhbC5sZWZ0KHZhbC5sZW5ndGgoKS0xKTsKKwor
ICAgIHJldHVybiB2YWw7Cit9CisKK1N0cmluZyBXTUxTZWxlY3RFbGVtZW50Ojp2YWxpZGF0ZUlu
ZGV4VmFsdWUoU3RyaW5nJiBpdmFsKQoreworICAgIGlmKGl2YWwuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gaXZhbDsKKworICAgIGJvb2wgb2sgPSB0cnVlOworICAgIFN0cmluZyB2YWwoIiIp
OworICAgIFN0cmluZyBuZXdWYWw7CisgICAgVmVjdG9yPFN0cmluZz4gdmFsVmVjdHM7CisgICAg
aXZhbC5zcGxpdCgnOycsIHZhbFZlY3RzKTsKKyAgICBmb3Ioc2l6ZV90IGkgPSAwOyBpIDwgdmFs
VmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgblZhbCA9IHZhbFZlY3RzW2ld
LnRvSW50KCZvayk7CisgICAgICAgIGlmKCFvayB8fCAoblZhbCA8IDEpIHx8IChuVmFsID4gbGVu
Z3RoKCkpKSB7CisgICAgICAgICAgICB2YWxWZWN0cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBp
LS07CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZXdWYWwgPSBTdHJpbmc6Om51bWJl
cihuVmFsKTsKKyAgICAgICAgICAgIGlmKC0xID09IHZhbC5maW5kKG5ld1ZhbCkpIHsKKyAgICAg
ICAgICAgICAgICB2YWwgKz0gbmV3VmFsOyAKKyAgICAgICAgICAgICAgICB2YWwgKz0gIjsiOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYodmFsLmVuZHNXaXRoKCI7
IikpIAorICAgICAgICB2YWwgPSB2YWwubGVmdCh2YWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1
cm4gdmFsOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmNhbGNEZWZhdWx0T3B0aW9uSW5k
ZXgoKQoreworICAgIFN0cmluZyB2YXI7CisgICAgaWYoIW1faU5hbWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHZhciA9IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+Z2V0VmFyaWJhbGUo
bV9pTmFtZSk7CisgICAgICAgIGlmKCF2YXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2Rl
ZmF1bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFsdWUodmFyKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYgIW1faVZhbHVlLmlzRW1wdHko
KSkgeworICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFsdWUobV9pVmFs
dWUpOworICAgIH0KKworICAgIGlmKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYgIW1fbmFt
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdmFyID0gV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4
dCgpLT5nZXRWYXJpYmFsZShtX25hbWUpOworICAgICAgICBpZighdmFyLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgbV9kZWZhdWx0T3B0SWR4ID0gdmFsdWVUb0lWYWx1ZSh2YXIpOworICAgICAg
ICB9CisgICAgfQorCisgICAgaWYobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSAmJiAhbV92YWx1
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9kZWZhdWx0T3B0SWR4ID0gdmFsdWVUb0lWYWx1ZSht
X3ZhbHVlKTsKKyAgICB9CisKKyAgICBpZihtX2RlZmF1bHRPcHRJZHguaXNFbXB0eSgpICYmIG11
bHRpcGxlKCkpCisgICAgICAgIG1fZGVmYXVsdE9wdElkeCA9ICIwIjsKKyAgICBlbHNlIGlmKG1f
ZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkpCisgICAgICAgIG1fZGVmYXVsdE9wdElkeCA9ICIxIjsK
KworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmluaXRpYWxpc2VWYXJpYWJsZXMoKQorewor
ICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAg
IGlmKGl0ZW1zLnNpemUoKSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZighbV9uYW1l
LmlzRW1wdHkoKSAmJiAhbXVsdGlwbGUoKSkgeworCisgICAgICAgIHVuc2lnbmVkIGludCBpZHgg
PSBtX2RlZmF1bHRPcHRJZHgudG9JbnQoKTsgCisgICAgICAgIGlmKGlkeCA8IDEgfHwgaWR4ID4g
aXRlbXMuc2l6ZSgpKSB7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBpbnQgbGlzdElkeCA9IG9wdGlvblRvTGlzdEluZGV4KGlkeC0xKTsKKyAgICAg
ICAgICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVs
ZW1lbnQqPihpdGVtc1tsaXN0SWR4XSk7CisgICAgICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRC
cndDb250ZXh0KCktPnN0b3JlVmFyaWFibGUobV9uYW1lLCBvcHRpb24tPnZhbHVlKCkpOworICAg
ICAgICB9CisKKyAgICB9IGVsc2UgaWYoIW1fbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3Ry
aW5nIG5hbWVWYWwgPSBpdmFsdWVUb1ZhbHVlKG1fZGVmYXVsdE9wdElkeCk7CisgICAgICAgIFdN
TEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c3RvcmVWYXJpYWJsZShtX25hbWUsIG5hbWVW
YWwpOworICAgIH0KKworICAgIGlmKCFtX2lOYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgV01MSGVs
cGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlKG1faU5hbWUsIG1fZGVmYXVs
dE9wdElkeCk7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6cHJlU2VsZWN0T3B0aW9uc0J5
RGVmYXVsdCgpCit7CisgICAgVmVjdG9yPFN0cmluZz4gaWR4VmVjdHM7CisgICAgbV9kZWZhdWx0
T3B0SWR4LnNwbGl0KCc7JywgaWR4VmVjdHMpOworICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRv
ciBpdCA9IGlkeFZlY3RzLmJlZ2luKCk7CisgICAgaW50IGlkeCA9IC0xOworICAgIGlmKG11bHRp
cGxlKCkpIHsKKyAgICAgICAgd2hpbGUoaXQgIT0gaWR4VmVjdHMuZW5kKCkpIHsKKyAgICAgICAg
ICAgIGlkeCA9ICgqaXQpLnRvSW50KCk7IAorICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChp
ZHgtMSwgZmFsc2UpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGlkeCA9ICgqaXQpLnRvSW50KCk7IAorICAgICAgICBzZXRTZWxlY3RlZEluZGV4
KGlkeC0xLCBmYWxzZSk7CisgICAgfQorfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnNlbGVj
dEluaXRpYWxPcHRpb25zKCkKK3sKKyAgICBjYWxjRGVmYXVsdE9wdGlvbkluZGV4KCk7CisKKyAg
ICBpZighbV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSkgeworICAgICAgICBpbml0aWFsaXNlVmFy
aWFibGVzKCk7CisgICAgICAgIHByZVNlbGVjdE9wdGlvbnNCeURlZmF1bHQoKTsKKyAgICB9Cit9
CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0
KQoreworICAgIGlmICghbXVsdGlwbGUoKSkKKyAgICAgICAgbWVudUxpc3REZWZhdWx0RXZlbnRI
YW5kbGVyKGV2dCk7CisgICAgZWxzZSAKKyAgICAgICAgbGlzdEJveERlZmF1bHRFdmVudEhhbmRs
ZXIoZXZ0KTsKKyAgICAKKyAgICBpZiAoZXZ0LT5kZWZhdWx0SGFuZGxlZCgpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0ga2V5cHJlc3NFdmVudCAmJiBldnQtPmlz
S2V5Ym9hcmRFdmVudCgpKSB7CisgICAgICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQg
PSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KTsKKyAgICAKKyAgICAgICAgaWYgKCFr
ZXlib2FyZEV2ZW50LT5jdHJsS2V5KCkgJiYgIWtleWJvYXJkRXZlbnQtPmFsdEtleSgpICYmICFr
ZXlib2FyZEV2ZW50LT5tZXRhS2V5KCkgJiYKKyAgICAgICAgICAgIGlzUHJpbnRhYmxlQ2hhcihr
ZXlib2FyZEV2ZW50LT5jaGFyQ29kZSgpKSkgeworICAgICAgICAgICAgdHlwZUFoZWFkRmluZChr
ZXlib2FyZEV2ZW50KTsKKyAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0KKworICAgIEhUTUxGb3JtQ29udHJv
bEVsZW1lbnRXaXRoU3RhdGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKK30KKwordm9pZCBX
TUxTZWxlY3RFbGVtZW50OjptZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkK
K3sKKyAgICBSZW5kZXJNZW51TGlzdCogbWVudUxpc3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJNZW51
TGlzdCo+KHJlbmRlcmVyKCkpOworCisgICAgLy8gVXNlIGtleSBwcmVzcyBldmVudCBoZXJlIHNp
bmNlIHNlbmRpbmcgc2ltdWxhdGVkIG1vdXNlIGV2ZW50cworICAgIC8vIG9uIGtleSBkb3duIGJs
b2NrcyB0aGUgcHJvcGVyIHNlbmRpbmcgb2YgdGhlIGtleSBwcmVzcyBldmVudC4KKyAgICBpZiAo
ZXZ0LT50eXBlKCkgPT0ga2V5cHJlc3NFdmVudCkgeworICAgICAgICBpZiAoIXJlbmRlcmVyKCkg
fHwgIWV2dC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IFN0cmluZyBrZXlJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCkt
PmtleUlkZW50aWZpZXIoKTsKKyAgICAgICAgYm9vbCBoYW5kbGVkID0gZmFsc2U7CisjaWYgQVJS
T1dfS0VZU19QT1BfTUVOVQorICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRW50ZXIiKSB7
CisgICAgICAgICAgICBtZW51TGlzdE9uQ2hhbmdlKCk7CisgICAgICAgICAgICBpZiAoZm9ybSgp
KQorICAgICAgICAgICAgICAgIGZvcm0oKS0+c3VibWl0Q2xpY2soZXZ0KTsKKyAgICAgICAgICAg
IGhhbmRsZWQgPSB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09
ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09ICJVcCIgfHwga2V5SWRlbnRpZmllciA9PSAiVSsw
MDIwIikgeworICAgICAgICAgICAgZm9jdXMoKTsKKyAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNl
bGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3
ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LAorICAgICAgICAgICAgLy8g
d2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLCB3aGlj
aCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBt
ZW51LgorICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIG1lbnVM
aXN0LT5zaG93UG9wdXAoKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICB9
CisjZWxzZQorICAgICAgICBpbnQgbGlzdEluZGV4ID0gb3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0
ZWRJbmRleCgpKTsKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iIHx8IGtleUlk
ZW50aWZpZXIgPT0gIlJpZ2h0IikgeworICAgICAgICAgICAgaW50IHNpemUgPSBsaXN0SXRlbXMo
KS5zaXplKCk7CisgICAgICAgICAgICBmb3IgKGxpc3RJbmRleCArPSAxOworICAgICAgICAgICAg
ICAgICBsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplICYmIChsaXN0SXRlbXMoKVts
aXN0SW5kZXhdLT5kaXNhYmxlZCgpIHx8ICFsaXN0SXRlbXMoKVtsaXN0SW5kZXhdLT5oYXNUYWdO
YW1lKG9wdGlvblRhZykpOworICAgICAgICAgICAgICAgICArK2xpc3RJbmRleCk7CisgICAgICAg
ICAgICAKKyAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXpl
KQorICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0aW9uSW5kZXgobGlz
dEluZGV4KSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlm
IChrZXlJZGVudGlmaWVyID09ICJVcCIgfHwga2V5SWRlbnRpZmllciA9PSAiTGVmdCIpIHsKKyAg
ICAgICAgICAgIGludCBzaXplID0gbGlzdEl0ZW1zKCkuc2l6ZSgpOworICAgICAgICAgICAgZm9y
IChsaXN0SW5kZXggLT0gMTsKKyAgICAgICAgICAgICAgICAgbGlzdEluZGV4ID49IDAgJiYgbGlz
dEluZGV4IDwgc2l6ZSAmJiAobGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSB8fCAh
bGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+aGFzVGFnTmFtZShvcHRpb25UYWcpKTsKKyAgICAgICAg
ICAgICAgICAgLS1saXN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobGlz
dEluZGV4ID49IDAgJiYgbGlzdEluZGV4IDwgc2l6ZSkKKyAgICAgICAgICAgICAgICBzZXRTZWxl
Y3RlZEluZGV4KGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCkpOworICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSAiRW50ZXIi
KSB7CisgICAgICAgICAgICAvLyBsaXN0SW5kZXggc2hvdWxkIGFscmVhZHkgYmUgc2VsZWN0ZWQs
IGJ1dCB0aGlzIHdpbGwgZmlyZSB0aGUgb25jaGFuZ2UgaGFuZGxlci4KKyAgICAgICAgICAgIHNl
dFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgdHJ1ZSwgdHJ1ZSk7
CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAg
IGlmIChoYW5kbGVkKQorICAgICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisg
ICAgfQorICAgIGlmIChldnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiBldnQtPmlzTW91
c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSA9PSBM
ZWZ0QnV0dG9uKSB7CisgICAgICAgIGZvY3VzKCk7CisgICAgICAgIGlmIChtZW51TGlzdC0+cG9w
dXBJc1Zpc2libGUoKSkKKyAgICAgICAgICAgIG1lbnVMaXN0LT5oaWRlUG9wdXAoKTsKKyAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJl
IGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJp
bmcgc2V0U2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVkIGZy
b20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQgYWZ0ZXIg
dGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KKyAgICAgICAgICAgIHNh
dmVMYXN0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVwKCk7Cisg
ICAgICAgIH0KKyAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0KKworICAg
IC8vIHVwZGF0ZSBuYW1lIGFuZCBpbmFtZSB2YXJpYWJsZXMgd2l0aCBvcHRpb24ncyB2YWx1ZSBh
bmQgaW5kZXgKKyAgICB1cGRhdGVWYXJpYWJsZXMoKTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVt
ZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQoreworICAgIGlmICgh
cmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2dC0+dHlwZSgpID09IG1v
dXNlZG93bkV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgZm9jdXMoKTsK
KyAgICAgICAgCisgICAgICAgIE1vdXNlRXZlbnQqIG1FdnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2
ZW50Kj4oZXZ0KTsKKyAgICAgICAgaW50IGxpc3RJbmRleCA9IHN0YXRpY19jYXN0PFJlbmRlckxp
c3RCb3gqPihyZW5kZXJlcigpKS0+bGlzdEluZGV4QXRPZmZzZXQobUV2dC0+b2Zmc2V0WCgpLCBt
RXZ0LT5vZmZzZXRZKCkpOworICAgICAgICBpZiAobGlzdEluZGV4ID49IDApIHsKKyAgICAgICAg
ICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5l
dyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBtb3VzZXVwLCBvciBhZnRl
ciBhdXRvc2Nyb2xsIGZpbmlzaGVzLgorICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsK
KworICAgICAgICAgICAgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSA9IHRydWU7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIGJvb2wgbXVsdGlTZWxlY3RLZXlQcmVzc2VkID0gZmFsc2U7CisjaWYg
UExBVEZPUk0oTUFDKQorICAgICAgICAgICAgbXVsdGlTZWxlY3RLZXlQcmVzc2VkID0gbUV2dC0+
bWV0YUtleSgpOworI2Vsc2UKKyAgICAgICAgICAgIG11bHRpU2VsZWN0S2V5UHJlc3NlZCA9IG1F
dnQtPmN0cmxLZXkoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBib29sIHNoaWZ0U2VsZWN0ID0g
bXVsdGlwbGUoKSAmJiBtRXZ0LT5zaGlmdEtleSgpOworICAgICAgICAgICAgYm9vbCBtdWx0aVNl
bGVjdCA9IG11bHRpcGxlKCkgJiYgbXVsdGlTZWxlY3RLZXlQcmVzc2VkICYmICFtRXZ0LT5zaGlm
dEtleSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBIVE1MRWxlbWVudCogY2xpY2tlZEVs
ZW1lbnQgPSBsaXN0SXRlbXMoKVtsaXN0SW5kZXhdOyAgICAgICAgICAgIAorICAgICAgICAgICAg
V01MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gMDsKKyAgICAgICAgICAgIGlmIChjbGlja2VkRWxl
bWVudC0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKKyAgICAgICAgICAgICAgICBvcHRpb24g
PSBzdGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oY2xpY2tlZEVsZW1lbnQpOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hldGhlciBhbiBh
Y3RpdmUgc2VsZWN0aW9uIChsaWtlIGR1cmluZyBkcmFnIHNlbGVjdGlvbiksIHNob3VsZCBzZWxl
Y3Qgb3IgZGVzZWxlY3QKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0g
IW9wdGlvbi0+c2VsZWN0ZWQoKTsKKyAgICAgICAgICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVk
U3RhdGUobV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGluIGFueSBzcGVjaWFsIG11bHRpcGxl
IHNlbGVjdGlvbiBtb2RlLCB0aGVuIGRlc2VsZWN0IGFsbCBvdGhlciBpdGVtcywgZXhjbHVkaW5n
IHRoZSBjbGlja2VkIG9wdGlvbi4KKyAgICAgICAgICAgIC8vIElmIG5vIG9wdGlvbiB3YXMgY2xp
Y2tlZCwgdGhlbiB0aGlzIHdpbGwgZGVzZWxlY3QgYWxsIGl0ZW1zIGluIHRoZSBsaXN0LgorICAg
ICAgICAgICAgaWYgKCFzaGlmdFNlbGVjdCAmJiAhbXVsdGlTZWxlY3QpCisgICAgICAgICAgICAg
ICAgZGVzZWxlY3RJdGVtcyhvcHRpb24pOworCisgICAgICAgICAgICAvLyBJZiB0aGUgYW5jaG9y
IGhhc24ndCBiZWVuIHNldCwgYW5kIHdlJ3JlIGRvaW5nIGEgc2luZ2xlIHNlbGVjdGlvbiBvciBh
IHNoaWZ0IHNlbGVjdGlvbiwgdGhlbiBpbml0aWFsaXplIHRoZSBhbmNob3IgdG8gdGhlIGZpcnN0
IHNlbGVjdGVkIGluZGV4LgorICAgICAgICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9y
SW5kZXggPCAwICYmICFtdWx0aVNlbGVjdCkKKyAgICAgICAgICAgICAgICBzZXRBY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleChzZWxlY3RlZEluZGV4KCkpOworCisgICAgICAgICAgICAvLyBJZiB0
aGVyZSB3YXMgbm8gc2VsZWN0ZWRJbmRleCgpIGZvciB0aGUgcHJldmlvdXMgaW5pdGlhbGl6YXRp
b24sIG9yCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBkb2luZyBhIHNpbmdsZSBzZWxlY3Rpb24s
IG9yIGEgbXVsdGlwbGUgc2VsZWN0aW9uICh1c2luZyBjbWQgb3IgY3RybCksIHRoZW4gaW5pdGlh
bGl6ZSB0aGUgYW5jaG9yIGluZGV4IHRvIHRoZSBsaXN0SW5kZXggdGhhdCBqdXN0IGdvdCBjbGlj
a2VkLgorICAgICAgICAgICAgaWYgKGxpc3RJbmRleCA+PSAwICYmIChtX2FjdGl2ZVNlbGVjdGlv
bkFuY2hvckluZGV4IDwgMCB8fCAhc2hpZnRTZWxlY3QpKQorICAgICAgICAgICAgICAgIHNldEFj
dGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAg
ICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGxpc3RJbmRleCk7CisgICAgICAgICAg
ICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKCFtdWx0aVNlbGVjdCk7CisKKyAgICAgICAgICAgIGlm
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgICAgIGZy
YW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0TW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsKCk7CisK
KyAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50
KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0
b24gJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1dG9zY3JvbGxSZW5k
ZXJlcigpICE9IHJlbmRlcmVyKCkpCisgICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB3ZSBmaXJl
IG9uQ2hhbmdlIGZvciBhIHNpbmdsZSBjbGljay4gIEZvciBkcmFnIHNlbGVjdGlvbiwgb25DaGFu
Z2Ugd2lsbCBmaXJlIHdoZW4gdGhlIGF1dG9zY3JvbGwgdGltZXIgc3RvcHMuCisgICAgICAgIGxp
c3RCb3hPbkNoYW5nZSgpOworICAgIGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZl
bnQpIHsKKyAgICAgICAgaWYgKCFldnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEtleWJv
YXJkRXZlbnQqPihldnQpLT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICAgICAgaWYgKGtleUlkZW50
aWZpZXIgPT0gIkVudGVyIikgeworICAgICAgICAgICAgaWYgKGZvcm0oKSkKKyAgICAgICAgICAg
ICAgICBmb3JtKCktPnN1Ym1pdENsaWNrKGV2dCk7CisgICAgICAgICAgICBldnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBp
bnQgZW5kSW5kZXggPSAwOyAgICAgICAgCisgICAgICAgIGlmIChtX2FjdGl2ZVNlbGVjdGlvbkVu
ZEluZGV4IDwgMCkgeworICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZW5kIGluZGV4Cisg
ICAgICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIpCisgICAgICAgICAgICAgICAg
ZW5kSW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleChsYXN0U2VsZWN0ZWRMaXN0SW5kZXgo
KSk7CisgICAgICAgICAgICBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpCisgICAgICAg
ICAgICAgICAgZW5kSW5kZXggPSBwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgob3B0aW9uVG9M
aXN0SW5kZXgoc2VsZWN0ZWRJbmRleCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAvLyBTZXQgdGhlIGVuZCBpbmRleCBiYXNlZCBvbiB0aGUgY3VycmVudCBlbmQgaW5kZXgKKyAg
ICAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikKKyAgICAgICAgICAgICAgICBl
bmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5k
ZXgpOworICAgICAgICAgICAgZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiKQorICAgICAg
ICAgICAgICAgIGVuZEluZGV4ID0gcHJldmlvdXNTZWxlY3RhYmxlTGlzdEluZGV4KG1fYWN0aXZl
U2VsZWN0aW9uRW5kSW5kZXgpOyAgICAKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYg
KGtleUlkZW50aWZpZXIgPT0gIkRvd24iIHx8IGtleUlkZW50aWZpZXIgPT0gIlVwIikgeworICAg
ICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0
aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgb25DaGFuZ2UgaW1tZWRpYXRlbHkgYWZ0ZXIg
bWFraW5nIHRoZSBuZXcgc2VsZWN0aW9uLgorICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24o
KTsKKworICAgICAgICAgICAgQVNTRVJUKGVuZEluZGV4ID49IDAgJiYgKHVuc2lnbmVkKWVuZElu
ZGV4IDwgbGlzdEl0ZW1zKCkuc2l6ZSgpKTsgCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rp
b25FbmRJbmRleChlbmRJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHRo
ZSBhbmNob3IgaXMgdW5pdGlhbGl6ZWQsIG9yIGlmIHdlJ3JlIGdvaW5nIHRvIGRlc2VsZWN0IGFs
bCBvdGhlciBvcHRpb25zLCB0aGVuIHNldCB0aGUgYW5jaG9yIGluZGV4IGVxdWFsIHRvIHRoZSBl
bmQgaW5kZXguCisgICAgICAgICAgICBib29sIGRlc2VsZWN0T3RoZXJzID0gIW11bHRpcGxlKCkg
fHwgIXN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpLT5zaGlmdEtleSgpOworICAgICAg
ICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8IGRlc2VsZWN0T3Ro
ZXJzKSB7CisgICAgICAgICAgICAgICAgbV9hY3RpdmVTZWxlY3Rpb25TdGF0ZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgaWYgKGRlc2VsZWN0T3RoZXJzKQorICAgICAgICAgICAgICAgICAgICBk
ZXNlbGVjdEl0ZW1zKCk7CisgICAgICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9y
SW5kZXgobV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckxpc3RCb3gqPihyZW5kZXJlcigpKS0+c2Nyb2xsVG9S
ZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgoZW5kSW5kZXgpOworICAgICAgICAgICAgdXBkYXRlTGlz
dEJveFNlbGVjdGlvbihkZXNlbGVjdE90aGVycyk7CisgICAgICAgICAgICBsaXN0Qm94T25DaGFu
Z2UoKTsKKyAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIHVwZGF0ZSBuYW1lIGFuZCBpbmFtZSB2YXJpYWJsZXMgd2l0aCBvcHRp
b24ncyB2YWx1ZSBhbmQgaW5kZXgKKyAgICB1cGRhdGVWYXJpYWJsZXMoKTsKK30KKwordm9pZCBX
TUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVWYXJpYWJsZXMoKQoreworICAgIGlmKG1faU5hbWUuaXNF
bXB0eSgpICYmIG1fbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmlu
ZyBuYW1lOworICAgIFN0cmluZyBpbmFtZTsKKyAgICBpbnQgb3B0SWR4ID0gMDsKKyAgICBjb25z
dCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGl0ZW1z
W2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgeworICAgICAgICAgICAgb3B0SWR4Kys7Cisg
ICAgICAgICAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRp
b25FbGVtZW50Kj4oaXRlbXNbaV0pOworICAgICAgICAgICAgaWYob3B0aW9uLT5zZWxlY3RlZCgp
KSB7CisgICAgICAgICAgICAgICAgbmFtZSArPSBvcHRpb24tPmdldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIpOworICAgICAgICAgICAgICAgIG5hbWUgKz0gIjsiOworICAgICAgICAgICAgICAgIGluYW1l
ICs9IFN0cmluZzo6bnVtYmVyKG9wdElkeCk7CisgICAgICAgICAgICAgICAgaW5hbWUgKz0gIjsi
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYoIW1fbmFtZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgd2hpbGUobmFtZS5lbmRzV2l0aCgiOyIpKQorICAgICAgICAgICAg
bmFtZSA9IG5hbWUubGVmdChuYW1lLmxlbmd0aCgpLTEpOworICAgICAgICBXTUxIZWxwZXI6OmN1
cnJlbnRCcndDb250ZXh0KCktPnN0b3JlVmFyaWFibGUobV9uYW1lLCBuYW1lKTsKKyAgICB9CisK
KyAgICBpZighbV9pTmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYoaW5hbWUuZW5kc1dpdGgo
IjsiKSkKKyAgICAgICAgICAgIGluYW1lID0gaW5hbWUubGVmdChpbmFtZS5sZW5ndGgoKS0xKTsK
KyAgICAgICAKKyAgICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZh
cmlhYmxlKG1faU5hbWUsIGluYW1lKTsKKyAgICB9Cit9CisKK30gLy9uYW1lc3BhY2UKSW5kZXg6
IFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxTZWxl
Y3RFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdN
TFNlbGVjdEVsZW1lbnRfaAorI2RlZmluZSBXTUxTZWxlY3RFbGVtZW50X2gKKworI2luY2x1ZGUg
IkhUTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBXTUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxTZWxlY3RF
bGVtZW50eworcHVibGljOgorICAgIFdNTFNlbGVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MU2VsZWN0RWxlbWVudCgpOworCisgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAg
IHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAgICB2b2lkIHNl
dFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJl
T25DaGFuZ2UgPSBmYWxzZSk7CisgICAgdm9pZCB1cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAg
dm9pZCBzZWxlY3RJbml0aWFsT3B0aW9ucygpOworCitwcml2YXRlOgorICAgIFN0cmluZyB2YWx1
ZVRvSVZhbHVlKFN0cmluZyYpOworICAgIFN0cmluZyBpdmFsdWVUb1ZhbHVlKFN0cmluZyYpOwor
ICAgIFN0cmluZyB2YWxpZGF0ZUluZGV4VmFsdWUoU3RyaW5nJik7CisgICAgdm9pZCBjYWxjRGVm
YXVsdE9wdGlvbkluZGV4KCk7CisgICAgdm9pZCBpbml0aWFsaXNlVmFyaWFibGVzKCk7CisgICAg
dm9pZCBwcmVTZWxlY3RPcHRpb25zQnlEZWZhdWx0KCk7CisgICAgdm9pZCBtZW51TGlzdERlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIGxpc3RCb3hEZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7CisgICAgdm9pZCB1cGRhdGVWYXJpYWJsZXMoKTsKKworICAgIFN0cmluZyBt
X25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAgU3RyaW5nIG1faU5hbWU7CisgICAgU3Ry
aW5nIG1faVZhbHVlOworICAgIFN0cmluZyBtX2RlZmF1bHRPcHRJZHg7Cit9OworCit9IC8vIG5h
bWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNs
dWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQcmV2RWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTFJlZnJlc2hFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7CisKK1dNTFNldHZhckVsZW1lbnQ6OldNTFNldHZhckVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvYykgCisgICAgOiBXTUxFbGVt
ZW50KG5hbWUsIGRvYykgeyB9OworCitXTUxTZXR2YXJFbGVtZW50Ojp+V01MU2V0dmFyRWxlbWVu
dCgpe307CisKK3ZvaWQgV01MU2V0dmFyRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRl
ZXApCit7CisgICAgV01MVGFza0VsZW1lbnQqIGdvID0gTlVMTDsKKyAgICBOb2RlKiBhbmNlc3Rv
ciA9IHBhcmVudE5vZGUoKSA7CisgICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKFdNTE5hbWVz
Ojpnb1RhZykpIHsKKyAgICAgICAgZ28gPSBzdGF0aWNfY2FzdDxXTUxHb0VsZW1lbnQqPihhbmNl
c3Rvcik7CisgICAgfSBlbHNlIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShXTUxOYW1lczo6cHJl
dlRhZykpIHsKKyAgICAgICAgZ28gPSBzdGF0aWNfY2FzdDxXTUxQcmV2RWxlbWVudCo+KGFuY2Vz
dG9yKTsKKyAgICB9IGVsc2UgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpyZWZy
ZXNoVGFnKSkgeworICAgICAgICBnbyA9IHN0YXRpY19jYXN0PFdNTFJlZnJlc2hFbGVtZW50Kj4o
YW5jZXN0b3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybjsgCisgICAgfQorCisgICAg
aWYoZ28peworICAgICAgICBnby0+cmVnaXN0ZXJTZXR2YXJFbGVtZW50KHRoaXMpOworICAgIH0K
K30KKworCit2b2lkIFdNTFNldHZhckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBTdHJpbmcgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCku
dG9TdHJpbmcoKTsKKyAgICBpZihhdHRyTmFtZSA9PSBuYW1lQXR0cikgeworICAgICAgICBpZigh
V01MSGVscGVyOjppc1ZhbGlkVmFyaWFibGVOYW1lKGF0dHItPnZhbHVlKCksIHRydWUpKSB7Cisg
ICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFy
aWFibGVOYW1lRXJyb3IpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9uYW1lID0g
V01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOwor
ICAgICAgICAgICAgaWYoIVdNTEhlbHBlcjo6aXNWYWxpZFZhcmlhYmxlTmFtZShtX25hbWUsIHRy
dWUpKQorICAgICAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9y
KEludmFsaWRWYXJpYWJsZU5hbWVFcnJvcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0cmlu
ZyBXTUxTZXR2YXJFbGVtZW50OjpuYW1lKCkKK3sKKyAgICByZXR1cm4gbV9uYW1lOyAKK30KKwor
U3RyaW5nIFdNTFNldHZhckVsZW1lbnQ6OnZhbHVlKCkKK3sKKyAgICByZXR1cm4gV01MSGVscGVy
OjpzdWJzdGl0dXRlVmFyUmVmKGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLCBkb2N1bWVudCgpKTsK
K30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvd21sL1dNTFNldHZhckVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgV01MU2V0dmFyRWxlbWVudF9oCisjZGVmaW5lIFdNTFNldHZhckVsZW1lbnRf
aAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFdNTFNldHZhckVsZW1lbnQgOiBwdWJsaWMgIFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAg
V01MU2V0dmFyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+
V01MU2V0dmFyRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUo
Ym9vbCBkZWVwKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKik7IAorCisgICAgU3RyaW5nIG5hbWUoKTsKKyAgICBTdHJpbmcgdmFsdWUoKTsK
KworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93
bWwvV01MVGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRh
YmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxUb2tl
bml6ZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgi
CisjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVD
ZWxsLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
VGFibGVSb3dFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9k
ZUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFt
ZXM7CisKK1dNTFRhYmxlRWxlbWVudDo6V01MVGFibGVFbGVtZW50KERvY3VtZW50KiBkb2MpCisg
ICAgOiBIVE1MVGFibGVFbGVtZW50KGRvYykgCit7Cit9CisKK1dNTFRhYmxlRWxlbWVudDo6fldN
TFRhYmxlRWxlbWVudCgpIHt9CisKK3ZvaWQgV01MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYoYXR0ci0+bmFtZSgpID09
IGNvbHVtbnNBdHRyKSB7CisgICAgICAgIGludCBjb2x1bW5zID0gIGF0dHItPnZhbHVlKCkudG9J
bnQoKTsKKyAgICAgICAgaWYoY29sdW1ucyA8IDEpCisgICAgICAgICAgICBXTUxIZWxwZXI6OnRv
a2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkQ29sdW1uc051bWJlckZvclRhYmxlRXJycm9y
KTsKKworICAgIH0gZWxzZSBpZihhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyKSB7CisgICAgICAg
IFN0cmluZyB0aXRsZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgp
LCBkb2N1bWVudCgpKTsKKyAgICAgICAgaWYodGl0bGUgIT0gYXR0ci0+dmFsdWUoKSkKKyAgICAg
ICAgICAgIHNldEF0dHJpYnV0ZSh0aXRsZUF0dHIsIHRpdGxlKTsKKworICAgIH0gZWxzZSBpZihh
dHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7CisgICAgICAgIGlmKFdNTEhlbHBlcjo6aGFzVmFy
aWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpCisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXpl
cigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgSFRNTFRhYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CisgICAgfQorfQorCit2b2lkIFdNTFRhYmxlRWxlbWVudDo6aW5pdCgpIAoreworICAgIHVu
c2lnbmVkIGludCBpZHggPSAwOworICAgIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvdyA9IE5VTEw7
CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGxhc3RDb2wgPSBOVUxMOworICAgIFJlZlB0cjxI
VE1MVGFibGVDZWxsRWxlbWVudD4gbmV3Q2VsbDsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiBjb2x1bW5zOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdW5zaWduZWQgYWN0dWFs
Q29sTnVtID0gMDsKKyAgICB1bnNpZ25lZCBjb2xOdW0gPSBnZXRBdHRyaWJ1dGUoV01MTmFtZXM6
OmNvbHVtbnNBdHRyKS50b0ludCgpOyAKKyAgICBpZihjb2xOdW0gPCAxKSAKKyAgICAgICAgY29s
TnVtID0gMTsKKworICAgIFN0cmluZyBhbGlnbiA9IGdldEF0dHJpYnV0ZShXTUxOYW1lczo6YWxp
Z25BdHRyKTsKKworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHJvd3MgPSBjaGlsZHJl
bigpOworICAgIHVuc2lnbmVkIHJvd051bSA9IHJvd3MtPmxlbmd0aCgpOworICAgIGZvcih1bnNp
Z25lZCBpID0gMDsgaSA8IHJvd051bTsgKytpKSB7CisgICAgICAgIHJvdyA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZVJvd0VsZW1lbnQqPihyb3dzLT5pdGVtKGkpKTsKKyAgICAgICAgY29sdW1ucyA9
IHJvdy0+Y2VsbHMoKTsKKyAgICAgICAgYWN0dWFsQ29sTnVtID0gY29sdW1ucy0+bGVuZ3RoKCk7
CisKKyAgICAgICAgaWYoYWN0dWFsQ29sTnVtID4gY29sTnVtKSB7CisgICAgICAgICAgICBsYXN0
Q29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihjb2x1bW5zLT5pdGVtKGNv
bE51bSAtIDEpKTsKKworICAgICAgICAgICAgLy8gYWdncmVnYXRlIHRoZSByZWR1bmRhbnQgY29s
dW1ucyBpbnRvIHRoZSBsYXN0IGNvbHVtbgorICAgICAgICAgICAgbmV3Q2VsbCA9IG5ldyBIVE1M
VGFibGVDZWxsRWxlbWVudChIVE1MTmFtZXM6OnRkVGFnLCBkb2N1bWVudCgpKTsKKyAgICAgICAg
ICAgIGlmKG5ld0NlbGwpCisgICAgICAgICAgICAgICAgbmV3Q2VsbC0+YWRkQ2hpbGQobGFzdENv
bC0+Y2xvbmVOb2RlKHRydWUpKTsKKworICAgICAgICAgICAgaWR4ID0gY29sTnVtOworICAgICAg
ICAgICAgd2hpbGUoaWR4IDwgYWN0dWFsQ29sTnVtKSB7CisgICAgICAgICAgICAgICAgbmV3Q2Vs
bC0+YXBwZW5kQ2hpbGQoY29sdW1ucy0+aXRlbShpZHgrKyktPmNsb25lTm9kZSh0cnVlKSwgZWMp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHJlZHVuZGFudCBj
b2x1bW5zCisgICAgICAgICAgICBpZHggPSBhY3R1YWxDb2xOdW07CisgICAgICAgICAgICB3aGls
ZShpZHggPiBjb2xOdW0pIHsKKyAgICAgICAgICAgICAgICByb3ctPmRlbGV0ZUNlbGwoLS1pZHgs
IGVjKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcm93LT5yZXBsYWNlQ2hpbGQobmV3
Q2VsbCwgbGFzdENvbCwgZWMpOworCisgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBhbGlnbiBh
dHRyaWJ1dGUgb2YgdGFibGUgZWxlbWVudCB0byB0aGF0IG9mIHRkIGVsZW1lbnQKKyAgICAgICAg
ICAgIGNvbnZlcnRBbGlnbihjb2x1bW5zLCBjb2xOdW0pOworICAgICAgICB9IGVsc2UgaWYoYWN0
dWFsQ29sTnVtIDwgY29sTnVtKSB7CisgICAgICAgICAgICBjb252ZXJ0QWxpZ24oY29sdW1ucywg
YWN0dWFsQ29sTnVtKTsKKworICAgICAgICAgICAgLy8gYXBwZW5kIGVtcHR5IGNlbGxzCisgICAg
ICAgICAgICBmb3IodW5zaWduZWQgaWR4ID0gYWN0dWFsQ29sTnVtOyBpZHggPCBjb2xOdW07ICsr
aWR4KSB7CisgICAgICAgICAgICAgICAgcm93LT5pbnNlcnRDZWxsKC0xLCBlYyk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBhbGln
biBhdHRyaWJ1dGUgb2YgdGFibGUgZWxlbWVudCB0byB0aGF0IG9mIHRkIGVsZW1lbnQKKyAgICAg
ICAgICAgIGNvbnZlcnRBbGlnbihjb2x1bW5zLCBjb2xOdW0pOworICAgICAgICB9CisKKyAgICAg
ICAgLy8gc2V0IHRoZSBkZWZhdWx0IGFsaWduIGZvciBlYWNoIHJvdworICAgICAgICByb3ctPnNl
dEFsaWduKCJsZWZ0Iik7CisKKyAgICB9IC8vIGVuZCBvZiBmb3IoLi4uIAorCit9CisKK3ZvaWQg
V01MVGFibGVFbGVtZW50Ojpjb252ZXJ0QWxpZ24oUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4m
IGNvbHVtbnMsIHVuc2lnbmVkIGNlbGxOdW0pIAoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50
KiBjZWxsID0gMDsKKyAgICBTdHJpbmcgYWxpZ24gPSBnZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmFs
aWduQXR0cik7CisgICAgZm9yKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGNlbGxOdW07ICsraWR4
KSB7CisgICAgICAgIGNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KGNv
bHVtbnMtPml0ZW0oaWR4KSk7CisgICAgICAgIGlmKGFsaWduW2lkeF0gPT0gJ1InICkgeworICAg
ICAgICAgICAgY2VsbC0+c2V0QWxpZ24oInJpZ2h0Iik7CisgICAgICAgIH0gZWxzZSBpZihhbGln
bltpZHhdID09ICdDJykgeworICAgICAgICAgICAgY2VsbC0+c2V0QWxpZ24oImNlbnRlciIpOwor
ICAgICAgICB9CisgICAgfSAKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwv
V01MVGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFibGVFbGVt
ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUYWJsZUVsZW1lbnQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGFibGVFbGVtZW50X2gK
KyNkZWZpbmUgV01MVGFibGVFbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFdNTFRhYmxlRWxlbWVudCA6IHB1YmxpYyBIVE1MVGFibGVFbGVtZW50eworcHVibGljOgorICAg
IFdNTFRhYmxlRWxlbWVudChEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFRhYmxlRWxlbWVu
dCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSopOworCisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBjb252ZXJ0QWxpZ24oUGFzc1Jl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4mLCB1bnNpZ25lZCk7IAorfTsKKworfSAvLyBuYW1lc3BhY2UK
KworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUYWdOYW1lcy5pbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dtbC9XTUxUYWdOYW1lcy5pbgkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21s
L1dNTFRhZ05hbWVzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACituYW1lc3BhY2U9
IldNTCIKK2NwcE5hbWVzcGFjZT0iV2ViQ29yZSIKK25hbWVzcGFjZVVSST0iaHR0cDovL3d3dy53
YXBmb3J1bS5vcmcvIgorZ2VuZXJhdGVGYWN0b3J5PSIxIgorZ2VuZXJhdGVXcmFwcGVyRmFjdG9y
eT0iMSIKKworY2FyZAorYQorYWNjZXNzCitoZWFkCittZXRhCit0ZW1wbGF0ZQord21sCiticgor
cAordGFibGUKK3RkCit0cgorYgorYmlnCitlbQoraQorc21hbGwKK3N0cm9uZwordQorYW5jaG9y
CitpbWcKK2RvCitvbmV2ZW50Citwb3N0ZmllbGQKK2dvCitub29wCitwcmV2CityZWZyZXNoCitm
aWVsZHNldAoraW5wdXQKK29wdGdyb3VwCitvcHRpb24KK3NlbGVjdAorc2V0dmFyCit0aW1lcgpJ
bmRleDogV2ViQ29yZS93bWwvV01MVGFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTFRhc2tFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dN
TFRhc2tFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVz
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxBbmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0ZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEludHJp
bnNpY0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK3RlbXBsYXRlPGNs
YXNzIFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3RvcjxUKiwg
bj4gJiB2ZWMsIFQqIGl0ZW0pIAoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2ZWNbaV0g
PT0gaXRlbSkgeworICAgICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9Cit9CisgCitXTUxUYXNrRWxlbWVudDo6V01MVGFza0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFdNTEVsZW1lbnQo
dGFnTmFtZSwgZG9jKSB7fQorCitXTUxUYXNrRWxlbWVudDo6fldNTFRhc2tFbGVtZW50KCkge30K
Kwordm9pZCBXTUxUYXNrRWxlbWVudDo6YmluZEludHJpbnNpY0V2ZW50SW5PbmV2ZW50KE5vZGUq
IG9uZXZlbnROb2RlKQoreworICAgIFdNTEludHJFdmVudFR5cGUgdHlwZSA9IFVOS05PV047Cisg
ICAgU3RyaW5nIHR5cGVBdHRyaSA9IHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihvbmV2ZW50Tm9k
ZSktPmdldEF0dHJpYnV0ZSh0eXBlQXR0cik7CisKKyAgICBpZihXTUxIZWxwZXI6Omhhc1Zhcmlh
YmxlUmVmKHR5cGVBdHRyaSkpIHsKKyAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVw
b3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYodHlwZUF0dHJpID09ICJvbmVudGVyZm9yd2FyZCIpIHsKKyAgICAg
ICAgdHlwZSA9IE9ORU5URVJGT1JXQVJEOworICAgIH0gZWxzZSBpZiAodHlwZUF0dHJpID09ICJv
bmVudGVyYmFja3dhcmQiKSB7CisgICAgICAgIHR5cGUgPSBPTkVOVEVSQkFDS1dBUkQ7CisgICAg
fSBlbHNlIGlmICh0eXBlQXR0cmkgPT0gIm9udGltZXIiKSB7CisgICAgICAgIHR5cGUgPSBPTlRJ
TUVSOworICAgIH0gZWxzZSBpZiAodHlwZUF0dHJpID09ICJvbnBpY2siKSB7CisgICAgICAgIHR5
cGUgPSBPTlBJQ0s7CisgICAgfQorCisgICAgaWYodHlwZSA9PSBVTktOT1dOKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXTUxJbnRyaW5zaWNFdmVudCBldjsKKyAgICBldi50YXNrID0gdGhpczsK
KyAgICBpZihoYXNUYWdOYW1lKGdvVGFnKSkgeworICAgICAgICBTdHJpbmcgaHJlZiA9IGdldEF0
dHJpYnV0ZShocmVmQXR0cik7CisgICAgICAgIGV2LnRhcmdldFVSSSA9IFdNTEhlbHBlcjo6c3Vi
c3RpdHV0ZVZhclJlZihocmVmLCBkb2N1bWVudCgpLCAiZXNjYXBlIik7CisgICAgfQorCisgICAg
Ly9yZWdpc3RlciBpbnRyaW5zaWMgZXZlbnQgdG8gdGhlIGV2ZW50IGhhbmRsZXIgb2YgdGhlIG93
bmVyIG9mIG9uZXZlbnQgZWxlbWVudCAKKyAgICBOb2RlKiBwYXJlbnQgPSBvbmV2ZW50Tm9kZS0+
cGFyZW50Tm9kZSgpOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogZXZIYW5kbGVyID0g
TlVMTDsKKyAgICBpZihwYXJlbnQtPmhhc1RhZ05hbWUoY2FyZFRhZykpIHsKKyAgICAgICAgV01M
Q2FyZEVsZW1lbnQqIGNhcmQgPSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KHBhcmVudCk7
CisgICAgICAgIGNhcmQtPnNldEhhc0ludHJFdmVudCh0cnVlKTsKKyAgICAgICAgZXZIYW5kbGVy
ID0gY2FyZC0+ZXZlbnRIYW5kbGVyKCk7CisgICAgfSBlbHNlIGlmKHBhcmVudC0+aGFzVGFnTmFt
ZSh0ZW1wbGF0ZVRhZykpIHsKKyAgICAgICAgV01MVGVtcGxhdGVFbGVtZW50KiB0ZW1wbCA9IHN0
YXRpY19jYXN0PFdNTFRlbXBsYXRlRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgIHRlbXBsLT5z
ZXRIYXNJbnRyRXZlbnQodHJ1ZSk7CisgICAgICAgIGV2SGFuZGxlciA9IHRlbXBsLT5ldmVudEhh
bmRsZXIoKTsKKyAgICB9IGVsc2UgaWYocGFyZW50LT5oYXNUYWdOYW1lKG9wdGlvblRhZykpIHsK
KyAgICAgICAgV01MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9u
RWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgIG9wdGlvbi0+c2V0SGFzSW50ckV2ZW50KHRydWUp
OworICAgICAgICBldkhhbmRsZXIgPSBvcHRpb24tPmV2ZW50SGFuZGxlcigpOworICAgIH0KKwor
ICAgIGlmKGV2SGFuZGxlcikKKyAgICAgICAgZXZIYW5kbGVyLT5yZWdpc3RlckludHJpbnNpY0V2
ZW50KHR5cGUsIGV2KTsKK30KKwordm9pZCBXTUxUYXNrRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJl
ZShib29sIGRlZXApIAoreworICAgIGZvciAoTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOyBw
YXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKXsKKworICAgICAgICBpZihwYXJl
bnQtPmhhc1RhZ05hbWUoZG9UYWcpKSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxEb0Vs
ZW1lbnQqPihwYXJlbnQpLT5yZWdpc3RlclRhc2sodGhpcyk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfSBlbHNlIGlmKHBhcmVudC0+bG9jYWxOYW1lKCkgPT0gIm9uZXZlbnQiKSB7Cisg
ICAgICAgICAgICAvL2JpbmRpbmcgdGhpcyB0YXNrIHdpdGggaW50cmluc2ljIGV2ZW50IHNwZWNp
ZmllZCBieSBvbmV2ZW50IHR5cGUKKyAgICAgICAgICAgIGJpbmRJbnRyaW5zaWNFdmVudEluT25l
dmVudChwYXJlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAocGFy
ZW50LT5oYXNUYWdOYW1lKGFuY2hvclRhZykpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFdN
TEFuY2hvckVsZW1lbnQqPihwYXJlbnQpLT5yZWdpc3RlclRhc2sodGhpcyk7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgfQorCisgICAgfQorfQorCit2b2lkIFdNTFRhc2tFbGVtZW50Ojpy
ZWdpc3RlclNldHZhckVsZW1lbnQoV01MU2V0dmFyRWxlbWVudCogZSkgCit7CisgICAgbV9zZXR2
YXJzLmFwcGVuZChlKTsKK30KKwordm9pZCBXTUxUYXNrRWxlbWVudDo6cmVtb3ZlU2V0dmFyRWxl
bWVudChXTUxTZXR2YXJFbGVtZW50KiBlKSAKK3sKKyAgICByZW1vdmVGcm9tVmVjdG9yKG1fc2V0
dmFycywgZSk7Cit9CisKK2Jvb2wgV01MVGFza0VsZW1lbnQ6Omhhc1NldHZhcigpIGNvbnN0IAor
eworICAgIHJldHVybiAhbV9zZXR2YXJzLmlzRW1wdHkoKTsKK30KKworfQpJbmRleDogV2ViQ29y
ZS93bWwvV01MVGFza0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUYXNr
RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGFza0VsZW1lbnQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGFza0VsZW1lbnRf
aAorI2RlZmluZSBXTUxUYXNrRWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MU2V0dmFyRWxlbWVudDsKKworY2xhc3Mg
V01MVGFza0VsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MVGFz
a0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYyk7Cisg
ICAgdmlydHVhbCB+V01MVGFza0VsZW1lbnQoKTsKKyAgCisgICAgdmlydHVhbCB2b2lkIGV4ZWMo
RXZlbnQqLCBTdHJpbmcgdXJpID0gU3RyaW5nKCkpID0gMCA7CisKKyAgICB2aXJ0dWFsIHZvaWQg
aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVy
U2V0dmFyRWxlbWVudChXTUxTZXR2YXJFbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92
ZVNldHZhckVsZW1lbnQoV01MU2V0dmFyRWxlbWVudCopOworICAgIGJvb2wgaGFzU2V0dmFyKCkg
Y29uc3Q7CisKK3Byb3RlY3RlZDoKKyAgICBWZWN0b3I8V01MU2V0dmFyRWxlbWVudCo+IG1fc2V0
dmFyczsKKworcHJpdmF0ZToKKyAgICB2b2lkIGJpbmRJbnRyaW5zaWNFdmVudEluT25ldmVudChO
b2RlKik7CisKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dt
bC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRl
bXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0
ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJBcmVu
YS5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisj
aW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MRG9FbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MQnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnRGYWN0b3J5LmgiCisjaW5j
bHVkZSAiV01MVGVtcGxhdGVFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxU
ZW1wbGF0ZUVsZW1lbnQ6OldNTFRlbXBsYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0
YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogV01MRWxlbWVudCh0YWdOYW1lLCBkb2MpCisg
ICAgLCBtX2V2bnRIYW5kbGVyKE5VTEwpCisgICAgLCBtX2hhc0ludHJFdmVudChmYWxzZSkgCit7
Cit9CisKK1dNTFRlbXBsYXRlRWxlbWVudDo6fldNTFRlbXBsYXRlRWxlbWVudCgpIAoreworICAg
IGlmKG1fZXZudEhhbmRsZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fZXZudEhhbmRsZXI7CisgICAg
ICAgIG1fZXZudEhhbmRsZXIgPSBOVUxMOworICAgIH0KKworfQorCit2b2lkIFdNTFRlbXBsYXRl
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQorewor
ICAgIFdNTEludHJFdmVudFR5cGUgZXR5cGUgPSBVTktOT1dOOworCisgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmVudGVyZm9yd2FyZEF0dHIpIHsKKyAgICAgICAgZXR5cGUgPSBPTkVOVEVSRk9S
V0FSRDsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVudGVyYmFja3dhcmRBdHRy
KSB7CisgICAgICAgIGV0eXBlID0gT05FTlRFUkJBQ0tXQVJEOworICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IG9udGltZXJBdHRyKSB7CisgICAgICAgIGV0eXBlID0gT05USU1FUjsKKyAg
ICB9CisgICAgCisgICAgLy8gcmVnaXN0ZXIgaW50cmluc2ljIGV2ZW50IHRvIHRlbXBsYXRlIAor
ICAgIGlmKGV0eXBlICE9IFVOS05PV04pIHsKKworICAgICAgICBpZighbV9ldm50SGFuZGxlcikg
eworICAgICAgICAgICAgbV9ldm50SGFuZGxlciA9IG5ldyBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIoKTsKKyAgICAgICAgfQorCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAg
ICBRdWFsaWZpZWROYW1lIHFOYW1lKCJnbyIsICJnbyIsICIiKTsKKyAgICAgICAgRWxlbWVudCog
Z28gPSBXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgZG9jdW1lbnQo
KSwgZmFsc2UpOyAKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVW
YXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAgICAgICBnby0+
c2V0QXR0cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwgZWMpOworCisgICAgICAgIFdNTEludHJp
bnNpY0V2ZW50IGV2OworICAgICAgICBldi50YXNrID0gc3RhdGljX2Nhc3Q8V01MR29FbGVtZW50
Kj4oZ28pOworICAgICAgICBldi50YXJnZXRVUkkgPSBocmVmOyAKKworICAgICAgICBzZXRIYXNJ
bnRyRXZlbnQodHJ1ZSk7CisgICAgICAgIG1fZXZudEhhbmRsZXItPnJlZ2lzdGVySW50cmluc2lj
RXZlbnQoZXR5cGUsIGV2KTsKKyAgICB9Cit9CisKK1dNTEludHJpbnNpY0V2ZW50SGFuZGxlciog
V01MVGVtcGxhdGVFbGVtZW50OjpldmVudEhhbmRsZXIoKQoreworICAgIGlmKG1faGFzSW50ckV2
ZW50ICYmICFtX2V2bnRIYW5kbGVyKSAgeworICAgICAgICBtX2V2bnRIYW5kbGVyID0gbmV3IFdN
TEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworICAgIH0KKworICAgIHJldHVybiBtX2V2bnRIYW5k
bGVyOworfQorCit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6c2V0SGFzSW50ckV2ZW50KGJvb2wg
aGFzKSB7CisgICAgbV9oYXNJbnRyRXZlbnQgPSBoYXM7Cit9CisKK2Jvb2wgV01MVGVtcGxhdGVF
bGVtZW50OjpoYXNJbnRyRXZlbnQoKSB7CisgICAgcmV0dXJuIG1faGFzSW50ckV2ZW50OworfQor
Cit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6cmVnaXN0ZXJEb0VsZW1lbnQoV01MRG9FbGVtZW50
KiBkb2UpCit7CisgICAgaWYoZG9lKSB7CisgICAgICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6
aXRlcmF0b3IgaXQgPSBtX2RvVmVjcy5iZWdpbigpOworICAgICAgICBXTUxEb0VsZW1lbnQqIGUg
PSBOVUxMOworICAgICAgICB3aGlsZShpdCAhPSBtX2RvVmVjcy5lbmQoKSkgeworICAgICAgICAg
ICAgZSA9IHN0YXRpY19jYXN0PFdNTERvRWxlbWVudCo+KCppdCsrKTsKKyAgICAgICAgICAgIGlm
KGUtPmRvTmFtZSgpID09IGRvZS0+ZG9OYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBXTUxIZWxw
ZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihTYW1lTmFtZURvRWxlbWVudHNFcnJvcik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IG1fZG9WZWNzLmFwcGVuZChkb2UpOworICAgIH0KK30KKworVmVjdG9yPFdNTERvRWxlbWVudCo+
IFdNTFRlbXBsYXRlRWxlbWVudDo6Z2V0RG9FbGVtZW50cygpCit7CisgICAgcmV0dXJuIG1fZG9W
ZWNzOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUZW1wbGF0ZUVsZW1lbnRfaAorI2RlZmluZSBXTUxU
ZW1wbGF0ZUVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IFdNTFRhc2tFbGVtZW50OworY2xhc3MgV01MRG9FbGVtZW50OworCitjbGFzcyBXTUxUZW1wbGF0
ZUVsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MVGVtcGxhdGVF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldN
TFRlbXBsYXRlRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOworCisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBl
dmVudEhhbmRsZXIoKTsKKyAgICBib29sIGhhc0ludHJFdmVudCgpOworICAgIHZvaWQgc2V0SGFz
SW50ckV2ZW50KGJvb2wpOworCisgICAgdm9pZCByZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1l
bnQqKTsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gZ2V0RG9FbGVtZW50cygpOworcHJpdmF0
ZToKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIG1fZXZudEhhbmRsZXI7CisgICAgYm9v
bCBtX2hhc0ludHJFdmVudDsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gbV9kb1ZlY3M7Cit9
OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MVGV4dC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGV4dC5jcHAJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3dtbC9XTUxUZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxUZXh0LmgiCisjaW5jbHVkZSAi
V01MQnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV01MVGV4dDo6V01MVGV4dChEb2N1bWVu
dCogZG9jLCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBUZXh0KGRvYywgdGV4dCkge30KKwor
V01MVGV4dDo6fldNTFRleHQoKSB7fQorCit2b2lkIFdNTFRleHQ6OnVwZGF0ZURhdGFJZk5lZWRl
ZCgpIAoreworICAgIGlmKGxlbmd0aCgpID4gMSAmJiBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250
ZXh0KCktPmhhc1ZhcmlhYmxlcygpKSB7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZGF0YSgpOwor
ICAgICAgICBpZighdGV4dC5pbXBsKCktPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgeworICAg
ICAgICAgICAgdGV4dCA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZih0ZXh0LCBkb2N1bWVu
dCgpKTsKKworICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlOworICAgICAgICAgICAgc2V0RGF0
YSh0ZXh0LCBlKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCit9IC8vbmFtZXNwYWNlCkluZGV4
OiBXZWJDb3JlL3dtbC9XTUxUZXh0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGV4
dC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGV4dC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUZXh0X2gKKyNkZWZpbmUgV01MVGV4dF9o
CisKKyNpbmNsdWRlICJUZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9j
dW1lbnQ7CisKK2NsYXNzIFdNTFRleHQgOiBwdWJsaWMgVGV4dCB7CitwdWJsaWM6CisgICAgV01M
VGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgfldNTFRleHQoKTsK
KworICAgIHZvaWQgdXBkYXRlRGF0YUlmTmVlZGVkKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZQor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRpbWVyRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93bWwvV01MVGltZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTFRpbWVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMy
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRpbWVyRWxlbWVudC5o
IgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5k
bGVyLmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5o
IgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitX
TUxUaW1lckVsZW1lbnQ6OldNTFRpbWVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdO
YW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogV01MRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAg
ICAsIG1fY2FyZChOVUxMKQorICAgICAgLCBtX3RpbWVyKHRoaXMsICZXTUxUaW1lckVsZW1lbnQ6
OnRpbWVyRmlyZWQpCit7Cit9CisKK1dNTFRpbWVyRWxlbWVudDo6fldNTFRpbWVyRWxlbWVudCgp
IHt9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50Ojp0aW1lckZpcmVkKFRpbWVyPFdNTFRpbWVyRWxl
bWVudD4qKQoreworICAgIGlmKCFtX2NhcmQpIAorICAgICAgICByZXR1cm47CisKKyAgICAvL3do
ZW4gdGhlIHRpbWVyIGV4cGlyZXMsIHNldCB0aGUgbmFtZSB2YXJpYWxiZSBvZiB0aW1lciB0byAn
MCcKKyAgICBpZighbV9uYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBtX3ZhbHVlID0gIjAiOwor
ICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPnN0b3JlVmFyaWFibGUobV9u
YW1lLCBtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBXTUxJbnRyRXZlbnRUeXBlIGV0eXBlID0gT05U
SU1FUjsKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2SGFuZGxlciA9IG1fY2FyZC0+
ZXZlbnRIYW5kbGVyKCk7CisgICAgYm9vbCBoYXNJbnRyRXZlbnQgPSAgZmFsc2U7CisgICAgaWYo
ZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQoZXR5cGUpKSB7CisgICAg
ICAgICAgICBoYXNJbnRyRXZlbnQgPSB0cnVlOworICAgIH0gZWxzZSBpZihtX2NhcmQtPnRlbXBs
YXRlRWxlbWVudCgpKSB7CisgICAgICAgIGV2SGFuZGxlciA9IG1fY2FyZC0+dGVtcGxhdGVFbGVt
ZW50KCktPmV2ZW50SGFuZGxlcigpOworICAgICAgICBpZihldkhhbmRsZXIgJiYgZXZIYW5kbGVy
LT5oYXNJbnRyaW5zaWNFdmVudChldHlwZSkpCisgICAgICAgICAgICBoYXNJbnRyRXZlbnQgPSB0
cnVlOworICAgIH0KKworICAgIGlmKGhhc0ludHJFdmVudCkgeworICAgICAgICBldkhhbmRsZXIt
PnRyaWdnZXJJbnRyaW5zaWNFdmVudChldHlwZSk7CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVy
RWxlbWVudDo6c3RhcnQoaW50IGludGVydmFsKQoreworICAgIGlmKG1fY2FyZCAmJiAhbV90aW1l
ci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIAorICAgICAgICBpZigoaW50ZXJ2YWwgPD0gMCkgJiYg
IW1fbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgdGltZW91dCA9IFdN
TEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+Z2V0VmFyaWJhbGUobV9uYW1lKTsgCisgICAg
ICAgICAgICAgICAgaW50ZXJ2YWwgPSB0aW1lb3V0LnRvSW50KCk7CisgICAgICAgIH0KKworICAg
ICAgICBpZihpbnRlcnZhbCA8PSAwKQorICAgICAgICAgICAgaW50ZXJ2YWwgPSBtX3ZhbHVlLnRv
SW50KCk7CisKKyAgICAgICAgaWYoaW50ZXJ2YWwgPiAwKQorICAgICAgICAgICAgbV90aW1lci5z
dGFydE9uZVNob3QoaW50ZXJ2YWwvMTAuMCk7CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVyRWxl
bWVudDo6c3RvcCgpCit7CisgICAgaWYobV90aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3Rp
bWVyLnN0b3AoKTsKK30KKwordm9pZCBXTUxUaW1lckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikgCit7CisgICAgaWYoYXR0ci0+bmFtZSgpID09IG5h
bWVBdHRyKSB7CisgICAgICAgIGlmKCFXTUxIZWxwZXI6OmlzVmFsaWRWYXJpYWJsZU5hbWUoYXR0
ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9y
dEVycm9yKEludmFsaWRWYXJpYWJsZU5hbWVFcnJvcik7CisgICAgICAgIH0gZWxzZQorICAgICAg
ICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IHZhbHVlQXR0cikgeworICAgICAgICBtX3ZhbHVlID0gV01MSGVscGVyOjpzdWJzdGl0
dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOworICAgIH0KK30KKwordm9pZCBX
TUxUaW1lckVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIC8vIFRo
ZSB2YWx1ZSBvZiB0aW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ3JhbCBudW1iZXIsIG9y
IGlnbm9yZSBpdAorICAgIGlmKG1fdmFsdWUudG9JbnQoKSA+IDApIHsKKyAgICAgICAgZm9yIChO
b2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJl
bnROb2RlKCkpeworICAgICAgICAgICAgaWYocGFyZW50LT5oYXNUYWdOYW1lKGNhcmRUYWcpKSB7
CisgICAgICAgICAgICAgICAgbV9jYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihw
YXJlbnQpOworICAgICAgICAgICAgICAgIG1fY2FyZC0+c2V0SW50ckV2ZW50VGltZXIodGhpcyk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9
Cit9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50OjpzdG9yZUludGVydmFsVG9CcndDb250ZXh0KCkK
K3sKKyAgICBpZihtX3RpbWVyLmlzQWN0aXZlKCkpIHsKKyAgICAgICAgaW50IGludGVydmFsID0g
c3RhdGljX2Nhc3Q8aW50PihtX3RpbWVyLm5leHRGaXJlSW50ZXJ2YWwoKSkqMTA7CisgICAgICAg
IFN0cmluZyB2YWx1ZSA9IFN0cmluZzo6bnVtYmVyKGludGVydmFsKTsKKworICAgICAgICBXTUxI
ZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPnN0b3JlVmFyaWFibGUobV9uYW1lLCB2YWx1ZSk7
CisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUaW1lckVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUaW1lckVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvd21sL1dNTFRpbWVyRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2lmbmRlZiBXTUxUaW1lckVsZW1lbnRfaAorI2RlZmluZSBXTUxUaW1lckVsZW1l
bnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2luY2x1ZGUgIlRpbWVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgIAorY2xhc3MgV01MVGltZXJFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQgewor
cHVibGljOgorICAgIFdNTFRpbWVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFRpbWVyRWxlbWVudCgpOworICAgIHZpcnR1
YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworCisgICAgdm9pZCB0aW1lckZp
cmVkKFRpbWVyPFdNTFRpbWVyRWxlbWVudD4qKTsKKyAgICB2b2lkIHN0YXJ0KGludCBpbnRlcnZh
bCA9IC0xKTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICB2b2lkIHN0b3JlSW50ZXJ2YWxUb0Jyd0Nv
bnRleHQoKTsKKworcHJpdmF0ZToKKyAgICBXTUxDYXJkRWxlbWVudCogbV9jYXJkOworICAgIFN0
cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAgVGltZXI8V01MVGltZXJFbGVt
ZW50PiBtX3RpbWVyOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvd21sL1dNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVG9r
ZW5pemVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRva2VuaXplci5jcHAJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNp
bmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTEFjY2Vzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25FbGVtZW50LmgiCisj
aW5jbHVkZSAiV01MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTElucHV0RWxlbWVudC5o
IgorI2luY2x1ZGUgIldNTEltYWdlRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFBFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MVGV4dC5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKworI2luY2x1ZGUgIkNEQVRBU2Vj
dGlvbi5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1
ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUgIkNvbW1lbnQuaCIKKyNpbmNsdWRlICJEb2NM
b2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21l
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUg
IkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTY3Jp
cHRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgorI2lu
Y2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxl
LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNw
b25zZS5oIgorI2lmbmRlZiBVU0VfUVhNTFNUUkVBTQorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXIu
aD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+CisjZWxzZQorI2luY2x1ZGUg
PFFEZWJ1Zz4KKyNlbmRpZgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShYU0xUKQorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5o
PgorI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5j
bHVkZSAiU1ZHU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgorI2VuZGlm
CisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXTUxUb2tlbml6ZXI6OldNTFRva2Vu
aXplcihEb2N1bWVudCogX2RvYywgRnJhbWVWaWV3KiBfdmlldykKKzogWE1MVG9rZW5pemVyKF9k
b2MsIF92aWV3KSAKK3sKKyAgICBtX2N1cnJlbnROb2RlID0gX2RvYzsKKyAgICBtX2Vycm9yQ29k
ZSA9IE5vRXJyb3I7CisgICAgIAorICAgIFdNTEhlbHBlcjo6c2V0VG9rZW5pemVyKHRoaXMpOwor
fQorCisKK1dNTFRva2VuaXplcjo6fldNTFRva2VuaXplcigpIHt9CisKKworYm9vbCBXTUxUb2tl
bml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcywgYm9vbCAvKmFwcGVuZERhdGEq
LykgCit7CisjaWZuZGVmIFVTRV9RWE1MU1RSRUFNCisgICAgWE1MVG9rZW5pemVyOjp3cml0ZShz
LCB0cnVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbHNlCisKKyAgICBzdGF0aWMgUVhtbFN0cmVh
bVJlYWRlcjo6VG9rZW5UeXBlIG9sZFR5cGUgPSBRWG1sU3RyZWFtUmVhZGVyOjpOb1Rva2VuOwor
CisgICAgbV9zdHJlYW0uYWRkRGF0YShRU3RyaW5nKHMudG9TdHJpbmcoKSkpOworCisgICAgd2hp
bGUoIW1fc3RyZWFtLmF0RW5kKCkpIHsKKyAgICAgICAgbV9zdHJlYW0ucmVhZE5leHQoKTsKKyAg
ICAgICAgc3dpdGNoIChtX3N0cmVhbS50b2tlblR5cGUoKSkgeworICAgICAgICAgICAgY2FzZSBR
WG1sU3RyZWFtUmVhZGVyOjpTdGFydERvY3VtZW50OgorICAgICAgICAgICAgY2FzZSBRWG1sU3Ry
ZWFtUmVhZGVyOjpFbmREb2N1bWVudDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnRFbGVtZW50OiB7CisgICAgICAgICAgICAg
ICAgaWYob2xkVHlwZSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQpIHsKKyAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlV01MRXJyb3IoRG9jVHlwZURlY2xhcmF0aW9uTWlzc0Vycm9yKTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBXTUxQYXJzZVN0YXJ0RWxlbWVudCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpFbmRFbGVt
ZW50OiB7CisgICAgICAgICAgICAgICAgV01MUGFyc2VFbmRFbGVtZW50KCk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1S
ZWFkZXI6OkNoYXJhY3RlcnM6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdHJlYW0uaXNDREFU
QSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgZXhpdFRleHQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IG5ldyBDREFUQVNlY3Rpb24obV9kb2MsIG1f
c3RyZWFtLnRleHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnROb2Rl
LT5hZGRDaGlsZChuZXdOb2RlLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNo
ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZS0+YXR0YWNoKCk7CisgICAg
ICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudE5v
ZGUtPmlzVGV4dE5vZGUoKSB8fCBlbnRlclRleHQoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBXTUxUZXh0
KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8V01MVGV4dCo+KG1fY3VycmVudE5vZGUpOworICAgICAgICAg
ICAgICAgICAgICAgICAgdGV4dC0+YXBwZW5kRGF0YShtX3N0cmVhbS50ZXh0KCksIGVjKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHQtPnVwZGF0ZURhdGFJZk5lZWRlZCgpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBpZighbV9jdXJyZW50Tm9kZS0+YXR0YWNoZWQoKSkgCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbV9jdXJyZW50Tm9kZS0+YXR0YWNoKCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlm
KGhhc0Vycm9yKCkpCisgICAgICAgICAgICAgICAgICAgIGhhbmRsZVdNTEVycm9yKCk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJlbmNlOiB7CisgICAgICAgICAg
ICAgICAgUVN0cmluZyBlbnRpdHkgPSBtX3N0cmVhbS5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICAg
ICAgICAgICAgICBVQ2hhciBjID0gZGVjb2RlTmFtZWRFbnRpdHkoZW50aXR5LnRvVXRmOCgpLmNv
bnN0RGF0YSgpKTsKKworICAgICAgICAgICAgICAgIGlmIChtX2N1cnJlbnROb2RlLT5pc1RleHRO
b2RlKCkgfHwgZW50ZXJUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29k
ZSBlYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIFN0cmluZyBzdHIoJmMsIDEpOworICAgICAg
ICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxUZXh0Kj4obV9jdXJyZW50Tm9kZSktPmFwcGVuZERh
dGEoc3RyLCBlYyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpDb21tZW50
OiB7CisgICAgICAgICAgICAgICAgcGFyc2VDb21tZW50KCk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlBy
b2Nlc3NpbmdJbnN0cnVjdGlvbjogeworICAgICAgICAgICAgICAgIHBhcnNlUHJvY2Vzc2luZ0lu
c3RydWN0aW9uKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkRURDogeworICAgICAgICAgICAgICAgIG9s
ZFR5cGUgPSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQ7CisgICAgICAgICAgICAgICAgcGFyc2VEdGQo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRl
ZmF1bHQ6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdHJlYW0uZXJyb3IoKSAhPSBRWG1sU3Ry
ZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICAgICAgRXJyb3JUeXBlIHR5cGUgPSAobV9zdHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFtUmVh
ZGVyOjpOb3RXZWxsRm9ybWVkRXJyb3IpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmYXRhbCA6IHdhcm5pbmc7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUVycm9y
KHR5cGUsIHFQcmludGFibGUobV9zdHJlYW0uZXJyb3JTdHJpbmcoKSksIGxpbmVOdW1iZXIoKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uTnVtYmVyKCkpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAg
ICAgICB9IC8vIGVuZCBvZiBzd2l0Y2goLi4uCisgICAgfSAvLyBlbmQgb2Ygd2hpbGUoLi4uCisK
KyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCit9CisKK3ZvaWQgV01MVG9rZW5pemVyOjp1cGRh
dGVBdHRyc0lmTmVlZGVkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1l
KQoreworICAgIC8vIHVwZGF0ZSBhdHJyaWJ1dGVzIG9mIG9wdG9pbiBlbGVtZW50IGlmIG5lZWRl
ZAorICAgIGlmKGxvY2FsTmFtZSA9PSAib3B0aW9uIikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01M
T3B0aW9uRWxlbWVudCo+KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxz
ZSBpZihsb2NhbE5hbWUgPT0gInNlbGVjdCIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTFNlbGVj
dEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlQXR0cnNJZk5lZWRlZCgpOworICAgIGVsc2UgaWYo
bG9jYWxOYW1lID09ICJpbnB1dCIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTElucHV0RWxlbWVu
dCo+KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxzZSBpZihsb2NhbE5h
bWUgPT0gImltZyIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTEltYWdlRWxlbWVudCo+KGVsZW1l
bnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxzZSBpZihsb2NhbE5hbWUgPT0gInAi
KQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxQRWxlbWVudCo+KGVsZW1lbnQpLT51cGRhdGVBdHRy
c0lmTmVlZGVkKCk7Cit9CisKKyNpZmRlZiBVU0VfUVhNTFNUUkVBTQordm9pZCBXTUxUb2tlbml6
ZXI6OldNTFBhcnNlU3RhcnRFbGVtZW50KCkKK3sKKyAgICBleGl0VGV4dCgpOworCisgICAgUVN0
cmluZyBsb2NhbE5hbWUgPSBtX3N0cmVhbS5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICBRU3RyaW5n
IHVyaSAgICAgICA9IG1fc3RyZWFtLm5hbWVzcGFjZVVyaSgpLnRvU3RyaW5nKCk7CisgICAgUVN0
cmluZyBwcmVmaXggICAgPSBtX3N0cmVhbS5xdWFsaWZpZWROYW1lKCkudG9TdHJpbmcoKTsKKwor
ICAgIGlmKGxvY2FsTmFtZSA9PSAiYWNjZXNzIikKKyAgICAgICAgV01MSGVscGVyOjpjdXJyZW50
QnJ3Q29udGV4dCgpLT5zZXROZWVkQ2hlY2tEZWNrQWNjZXNzKHRydWUpOworCisgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisgICAgUXVhbGlmaWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFt
ZSwgdXJpKTsKKyAgICBFbGVtZW50KiBuZXdFbGVtZW50ID0gV01MRWxlbWVudEZhY3Rvcnk6OmNy
ZWF0ZVdNTEVsZW1lbnQocU5hbWUsIG1fZG9jLCB0cnVlKSA7CisKKyAgICBRWG1sU3RyZWFtQXR0
cmlidXRlcyBhdHRycyA9IG1fc3RyZWFtLmF0dHJpYnV0ZXMoKTsKKyAgICAKKyAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGF0dHJzLmNvdW50KCk7ICsraSkgeworICAgICAgICBjb25zdCBRWG1sU3Ry
ZWFtQXR0cmlidXRlICZhdHRyID0gYXR0cnNbaV07CisgICAgICAgIFN0cmluZyBhdHRyTG9jYWxO
YW1lID0gYXR0ci5uYW1lKCk7CisgICAgICAgIFN0cmluZyBhdHRyVmFsdWUgICAgID0gYXR0ci52
YWx1ZSgpOworICAgICAgICBTdHJpbmcgYXR0clVSSSAgICAgICA9IGF0dHIubmFtZXNwYWNlVXJp
KCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBTdHJpbmcoYXR0ci5uYW1lc3BhY2VVcmkoKSk7Cisg
ICAgICAgIFN0cmluZyBhdHRyUU5hbWUgICAgID0gYXR0ci5xdWFsaWZpZWROYW1lKCk7CisKKyAg
ICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMoYXR0clVSSSwgYXR0clFOYW1lLCBhdHRy
VmFsdWUsIGVjKTsKKyAgICB9CisKKyAgICB1cGRhdGVBdHRyc0lmTmVlZGVkKG5ld0VsZW1lbnQs
IGxvY2FsTmFtZSk7CisKKyAgICBpZighbV9jdXJyZW50Tm9kZS0+YWRkQ2hpbGQobmV3RWxlbWVu
dCkpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBzZXRDdXJyZW50Tm9kZShuZXdFbGVtZW50KTsKKworICAgIGlmKCFuZXdFbGVtZW50LT5hdHRh
Y2hlZCgpKQorICAgICAgICBuZXdFbGVtZW50LT5hdHRhY2goKTsgCisKKyAgICBpZihoYXNFcnJv
cigpKQorICAgICAgICBoYW5kbGVXTUxFcnJvcigpOworfQorCit2b2lkIFdNTFRva2VuaXplcjo6
V01MUGFyc2VFbmRFbGVtZW50KCkgCit7CisKKyAgICBleGl0VGV4dCgpOworCisgICAgTm9kZSog
biA9IG1fY3VycmVudE5vZGU7CisKKyAgICBSZWZQdHI8Tm9kZT4gcGFyZW50ID0gbi0+cGFyZW50
Tm9kZSgpOworICAgIG4tPmZpbmlzaGVkUGFyc2luZygpOworCisgICAgc2V0Q3VycmVudE5vZGUo
cGFyZW50LmdldCgpKTsKKworfQorI2VuZGlmCisKK3ZvaWQgV01MVG9rZW5pemVyOjpmaW5pc2go
KSAKK3sKKyAgICBpZighV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5pc0RlY2tBY2Nl
c3NpYmxlKCkpIHsKKyAgICAgICAgWE1MVG9rZW5pemVyOjpmaW5pc2goKTsKKyAgICAgICAgV01M
SGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5wYWdlKCktPmdvQmFjaygpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgLy8gbm90aWZ5IHRoZSBleGlzdGFuY2Ugb2YgdGVtcGxhdGUg
dG8gYWxsIHRoZSBjYXJkcyBvZiBjdXJyZW50IGRlY2sKKyAgICBXTUxIZWxwZXI6OnJlZ2lzdGVy
VGVtcGxhdGVUb0NhcmRzKG1fZG9jKTsKKworICAgIC8vIGRldGVybWluZSB0aGUgZGVzdGluYXRp
b24gY2FyZAorICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gV01MSGVscGVyOjpzZXREZXN0aW5h
dGlvbkNhcmQobV9kb2MpOworCisgICAgaWYoY2FyZCkgeworICAgICAgICAvLyBzaGFkb3cgdGhl
IGRlY2stbGV2ZWwgZG8gaWYgbmVlZGVkCisgICAgICAgIGNhcmQtPnNoYWRvd0RvRWxlbWVudElm
TmVlZGVkKCk7CisKKyAgICAgICAgLy9oYW5kbGUgdGhlIGludHJpbnNpYyBldmVudAorICAgICAg
ICBjYXJkLT5oYW5kbGVJbnRyRXZlbnRJZk5lZWRlZCgpOworICAgIH0KKworICAgIFhNTFRva2Vu
aXplcjo6ZmluaXNoKCk7CisKKyAgICBpZihjYXJkKQorICAgICAgICBjYXJkLT51cGRhdGVUYWJs
ZUVsZW1lbnQoKTsKK30KKwordm9pZCBXTUxUb2tlbml6ZXI6OnJlcG9ydEVycm9yKFdNTEVycm9y
Q29kZSBlcnJvcikKK3sKKyAgICBtX2Vycm9yQ29kZSA9IGVycm9yOworfQorCitib29sIFdNTFRv
a2VuaXplcjo6aGFzRXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiAobV9lcnJvckNvZGUgIT0g
Tm9FcnJvcik7Cit9CisgCit2b2lkIFdNTFRva2VuaXplcjo6aGFuZGxlV01MRXJyb3IoV01MRXJy
b3JDb2RlIGVycm9yQ29kZSkKK3sKKyAgICBpZihlcnJvckNvZGUgIT0gTm9FcnJvcikKKyAgICAg
ICAgbV9lcnJvckNvZGUgPSBlcnJvckNvZGU7CisKKyAgICBjb25zdCBjaGFyKiBlcnJNc2cgPSBO
VUxMOworICAgIHN3aXRjaChtX2Vycm9yQ29kZSkgeworICAgICAgICBjYXNlIFNhbWVOYW1lRG9F
bGVtZW50c0Vycm9yOgorICAgICAgICAgICAgZXJyTXNnID0gIkVhY2ggZG8gZWxlbWVudCBtdXN0
IGhhdmUgZGlmZmVyZW50IG5hbWUgaW4gb25lIGNhcmQgb3IgdGVtcGxhdGUhXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTXVsdGlUaW1lckVsZW1lbnRzRXJyb3I6CisgICAg
ICAgICAgICBlcnJNc2cgPSAiT25seSBvbmUgdGltZXIgZWxlbWVudCBpcyBhbGxvd2VkIGluIGEg
Y2FyZCFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aUFjY2Vzc0Vs
ZW1lbnRzRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiT25seSBvbmUgYWNjZXNzIGVsZW1l
bnQgaXMgYWxsb3dlZCBpbiBhIGRlY2shXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV3JvbmdUYXNrSW5BbmNob3JFbGVtZW50RXJyb3I6CisgICAgICAgICAgICBlcnJNc2cg
PSAiVGhlIHRhc2sgY2FuJ3QgYmUgc3BlY2lmaWVkIGluIGFuIGFuY2hvciBlbGVtZW50IVxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbmZsaWN0aW5nRXZlbnRCaW5kaW5n
RXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiQ29uZmxpY3RpbmcgZXZlbnQgYmluZGluZ3Mg
d2l0aGluIGFuIGVsbWVudCFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnZhbGlkVmFyaWFibGVOYW1lRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhlIHZhcmlh
YmxlIG5hbWUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIVxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yOgorICAgICAg
ICAgICAgZXJyTXNnID0gIlRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdXNlcyBpbnZhbGlkIHN5bnRh
eCBvciBpcyBwbGFjZWQgaW4gaW52YWxpZCBsb2NhdGlvbiFcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnZhbGlkQ29sdW1uc051bWJlckZvclRhYmxlRXJycm9yOgorICAg
ICAgICAgICAgZXJyTXNnID0gIlRoZSBudW1iZXIgb2YgdGFibGUgY29sdW1ucyBpcyBpbnZhbGlk
IVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERvY1R5cGVEZWNsYXJhdGlv
bk1pc3NFcnJvcjoKKyAgICAgICAgICAgIGVyck1zZyA9ICJET0NUWVBFIGRlY2xhcmF0aW9uIGlz
IG1pc3NlZCBiZWZvcmUgcm9vdCBlbGVtZW50IVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAKKyAgICBoYW5kbGVF
cnJvcihmYXRhbCwgZXJyTXNnLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAKKyAg
ICByZXBvcnRFcnJvcihOb0Vycm9yKTsKK30KKworfSAgLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogV2ViQ29yZS93bWwvV01MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MVG9rZW5pemVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVG9rZW5pemVy
X2gKKyNkZWZpbmUgV01MVG9rZW5pemVyX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5j
bHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcu
aCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisjaW5j
bHVkZSAiWE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisKKyNpZm5kZWYgVVNFX1FYTUxTVFJFQU0KKyNpbmNsdWRlIDxsaWJ4
bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVk
ZSA8UXRYbWwvcXhtbHN0cmVhbS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dHlwZWRlZiBlbnVtIFdNTEVycm9yQ29kZSB7IAorICAgIE5vRXJyb3IgPSAwLCAKKyAgICBTYW1l
TmFtZURvRWxlbWVudHNFcnJvciwKKyAgICBNdWx0aUFjY2Vzc0VsZW1lbnRzRXJyb3IsCisgICAg
TXVsdGlUaW1lckVsZW1lbnRzRXJyb3IsCisgICAgV3JvbmdUYXNrSW5BbmNob3JFbGVtZW50RXJy
b3IsCisgICAgQ29uZmxpY3RpbmdFdmVudEJpbmRpbmdFcnJvciwKKyAgICBJbnZhbGlkVmFyaWFi
bGVOYW1lRXJyb3IsCisgICAgSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IsCisgICAgSW52
YWxpZENvbHVtbnNOdW1iZXJGb3JUYWJsZUVycnJvciwKKyAgICBEb2NUeXBlRGVjbGFyYXRpb25N
aXNzRXJyb3IsCit9IFdNTEVycm9yQ29kZTsKKworY2xhc3MgV01MVG9rZW5pemVyIDogcHVibGlj
IFhNTFRva2VuaXplciB7CitwdWJsaWM6CisgICAgV01MVG9rZW5pemVyKERvY3VtZW50KiwgRnJh
bWVWaWV3KiA9IDApOworICAgIH5XTUxUb2tlbml6ZXIoKTsKKworCisgICAgLy8gZnJvbSBUb2tl
bml6ZXIKKyAgICB2aXJ0dWFsIGJvb2wgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9v
bCBhcHBlbmREYXRhID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKKyAgICAK
KyNpZmRlZiBVU0VfUVhNTFNUUkVBTQorICAgIHZvaWQgV01MUGFyc2VTdGFydEVsZW1lbnQoKTsK
KyAgICB2b2lkIFdNTFBhcnNlRW5kRWxlbWVudCgpOworI2VuZGlmCisKKyAgICB2b2lkIHJlcG9y
dEVycm9yKFdNTEVycm9yQ29kZSk7CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OworICAgIHZv
aWQgaGFuZGxlV01MRXJyb3IoV01MRXJyb3JDb2RlIGNvZGUgPSBOb0Vycm9yKTsKKworICAgIHZv
aWQgdXBkYXRlQXR0cnNJZk5lZWRlZChFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7Citwcml2YXRl
OgorICAgIFdNTEVycm9yQ29kZSBtX2Vycm9yQ29kZTsKK307CisKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gV01MVG9rZW5pemVyX2gKSW5kZXg6IFdlYktpdFRvb2xzL1Nj
cmlwdHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdFRvb2xzL1NjcmlwdHMvYnVp
bGQtd2Via2l0CShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQt
d2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBAIG15ICRzdmdGb250c1N1cHBv
cnQgPSAxOwogbXkgJHN2Z0FzSW1hZ2VTdXBwb3J0ID0gMTsKIG15ICR4cGF0aFN1cHBvcnQgPSAx
OwogbXkgJHhzbHRTdXBwb3J0ID0gMTsKK215ICR3bWxTdXBwb3J0ID0gMDsKIG15ICRjb3ZlcmFn
ZVN1cHBvcnQgPSAwOwogbXkgJHZpZGVvU3VwcG9ydCA9IChpc09TWCgpIHx8IGlzQ3lnd2luKCkp
OyAjIEVuYWJsZSBieSBkZWZhdWx0IG9uIE9TWCBhbmQgV2luZG93cwogbXkgJHNob3dIZWxwID0g
MDsKQEAgLTgzLDYgKzg0LDcgQEAgVXNhZ2U6ICRwcm9ncmFtTmFtZSBbb3B0aW9uc10gW29wdGlv
bnMgdAogICAtLVtuby1dc3ZnLXVzZSAgICAgICAgICAgICAgICBUb2dnbGUgU1ZHIHVzZSBlbGVt
ZW50IHN1cHBvcnQgKGRlZmF1bHQ6ICRzdmdVc2VTdXBwb3J0LCBpbXBsaWVzIFNWRyBTdXBwb3J0
KQogICAtLVtuby1deHBhdGggICAgICAgICAgICAgICAgICBUb2dnbGUgWFBhdGggc3VwcG9ydCAo
ZGVmYXVsdDogJHhwYXRoU3VwcG9ydCkKICAgLS1bbm8tXXhzbHQgICAgICAgICAgICAgICAgICAg
VG9nZ2xlIFhTTFQgc3VwcG9ydCAoZGVmYXVsdDogJHhzbHRTdXBwb3J0KQorICAtLVtuby1dd21s
ICAgICAgICAgICAgICAgICAgICBUb2dnbGUgV01MIHN1cHBvcnQgKGRlZmF1bHQ6ICR3bWxTdXBw
b3J0KQogICAtLVtuby1ddmlkZW8gICAgICAgICAgICAgICAgICBUb2dnbGUgVmlkZW8gc3VwcG9y
dCAoZGVmYXVsdDogJHZpZGVvU3VwcG9ydCkKICAgLS1bbm8tXWNvdmVyYWdlICAgICAgICAgICAg
ICAgVG9nZ2xlIGNvZGUgY292ZXJhZ2Ugc3VwcG9ydCAoZGVmYXVsdDogJGNvdmVyYWdlU3VwcG9y
dCkKIEVPRgpAQCAtMTAxLDYgKzEwMyw3IEBAIEdldE9wdGlvbnMoJ2RhdGFiYXNlIScgPT4gXCRk
YXRhYmFzZVN1cHAKICAgICAgICAgICAgJ3N2Zy11c2UhJyA9PiBcJHN2Z1VzZVN1cHBvcnQsCiAg
ICAgICAgICAgICd4cGF0aCEnID0+IFwkeHBhdGhTdXBwb3J0LAogICAgICAgICAgICAneHNsdCEn
ID0+IFwkeHNsdFN1cHBvcnQsCisgICAgICAgICAgICd3bWwhJyA9PiBcJHdtbFN1cHBvcnQsCiAg
ICAgICAgICAgICd2aWRlbyEnID0+IFwkdmlkZW9TdXBwb3J0LAogICAgICAgICAgICAnY292ZXJh
Z2UhJyA9PiBcJGNvdmVyYWdlU3VwcG9ydCwKICAgICAgICAgICAgJ2hlbHAnID0+IFwkc2hvd0hl
bHAsCkBAIC0xNjgsNiArMTcxLDcgQEAgcHVzaCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlv
biwgIkVOQQogcHVzaCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlvbiwgIkVOQUJMRV9WSURF
TyIgaWYgJHZpZGVvU3VwcG9ydDsKIHB1c2ggQG92ZXJyaWRlRmVhdHVyZURlZmluZXNPcHRpb24s
ICJFTkFCTEVfWFBBVEgiIGlmICR4cGF0aFN1cHBvcnQ7CiBwdXNoIEBvdmVycmlkZUZlYXR1cmVE
ZWZpbmVzT3B0aW9uLCAiRU5BQkxFX1hTTFQiIGlmICR4c2x0U3VwcG9ydDsKK3B1c2ggQG92ZXJy
aWRlRmVhdHVyZURlZmluZXNPcHRpb24sICJFTkFCTEVfV01MIiBpZiAkd21sU3VwcG9ydDsKIG15
ICRvdmVycmlkZUZlYXR1cmVEZWZpbmVzU3RyaW5nID0gIkZFQVRVUkVfREVGSU5FUz0iIC4gam9p
bigiICIsIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVzT3B0aW9uKTsKIAogbXkgQGNvdmVyYWdlU3Vw
cG9ydE9wdGlvbiA9ICgpOwpAQCAtMjI1LDYgKzIyOSw3IEBAIGlmIChpc0d0aygpKSB7CiAgICAg
cHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxhZygkc3ZnVXNlU3VwcG9ydCwgInN2Zy11c2UtZWxl
bWVudCIpOwogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHhwYXRoU3VwcG9ydCwg
InhwYXRoIik7CiAgICAgcHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxhZygkeHNsdFN1cHBvcnQs
ICJ4c2x0Iik7CisgICAgcHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxhZygkd21sU3VwcG9ydCwg
IndtbCIpOwogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHZpZGVvU3VwcG9ydCwg
InZpZGVvIik7CiAgICAgcHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxhZygkY292ZXJhZ2VTdXBw
b3J0LCAiY292ZXJhZ2UiKTsKIH0KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2JyLWVsZW1l
bnQtaW4tdGFibGUud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2JyLWVs
ZW1lbnQtaW4tdGFibGUud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwv
YnItZWxlbWVudC1pbi10YWJsZS53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iUGFyYWdyYXBocyI+CisgPHA+IFRoaXMgdGVzdCBjYXNl
IGlzIHVzZWQgdG8gdGVzdCBiciBlbGVtZW50IGluIGEgdGFibGUuIGVhY2ggY2VsbCBpcyBhbGln
bmVkIHRvIGxlZnQsIGFuZCB0aGUgQlIgd2lsbCBicmVhayB0aGUgInh4eHh4eHh4IiB0ZXh0IGlu
IHRoZSBsYXN0IHRkPC9wPgorIDx0YWJsZSBjb2x1bW5zPSczJyBhbGlnbj0iTExMIj4KKyAgICA8
dHI+CisgICAgIDx0ZCBpZD0iYzEiPkNlbGwgb25lPC90ZD4KKyAgICAgPHRkIGlkPSJjMiI+Q2Vs
bCB0d288L3RkPgorICAgICA8dGQgaWQ9ImMzIj5jMzwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+
CisgICAgIDx0ZCBpZD0iYSI+Y2VsbCBhPC90ZD4KKyAgICAgPHRkIGlkPSJiIj5jZWxsIGI8L3Rk
PgorICAgICA8dGQgaWQ9ImMiPnh4eHh4PGJyLz54eHg8L3RkPgorICAgIDwvdHI+CisgPC90YWJs
ZT4KKyA8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9ici1lbGVt
ZW50LWluLXRleHQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2JyLWVs
ZW1lbnQtaW4tdGV4dC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9i
ci1lbGVtZW50LWluLXRleHQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
PHdtbD4KKyA8Y2FyZCB0aXRsZT0iUGFyYWdyYXBocyI+CisgPHA+IFRoaXMgdGVzdCBjYXNlIGlz
IHVzZWQgdG8gdGVzdCBiciBlbGVtZW50IGluIHRleHQ8L3A+CisgIFRoaXMgaXMgYSBwaWVjZSBv
ZiB0ZXh0IDxici8+d2l0aCBhIGxpbmUgYnJlYWsKKyA8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9jYXJkLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd21sL2NhcmQtZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9jYXJkLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZP
UlVNLy9EVEQgV01MIDEuMC8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8x
LjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQgMSI+VGhpcyBp
cyBjYXJkIG9uZTwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+VGhpcyBp
cyBjYXJkIHR3bzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvY2Fz
ZS1zZW5zaXRpdml0eS53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvY2Fz
ZS1zZW5zaXRpdml0eS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9j
YXNlLXNlbnNpdGl2aXR5LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
PHdtbD4KKyA8Y2FyZCBpZD0nY2FyZDEnPgorIDxwPiBUZXN0IGZvciBDYXNlIHNlbnNpdGl2aXR5
IGluIFdNTCA8L3A+CisgPHA+IGNvbXBhcmUgdGhlIHJlc3VsdCBvZiBpbnNlcnRpbmcgJmx0O2Jy
LyZndDsgYW5kICZsdDtCUi8mZ3Q7IGludG8gdGhlIHNhbWUgdGV4dCwgPGJyLz50aGUgZm9ybWVy
IHNob3VsZCB3b3JrLCBhbmQgdGhlIGxhdHRlciBkb2Vzbid0LjwvcD4KKyA8dGFibGUgYm9yZGVy
PSIxIj4KKyA8dHI+PHRkPlRlc3QgY2FzZSA8YnIvPnNlbnNpdGl2aXR5IGluIFdNTCA8L3RkPjwv
dHI+CisgPHRyPjx0ZD5UZXN0IGNhc2UgPEJSLz5zZW5zaXRpdml0eSBpbiBXTUwgPC90ZD48L3Ry
PgorIDwvdGFibGU+CisgPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d21sL2NkYXRhLXNlY3Rpb24ud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2NkYXRhLXNlY3Rpb24ud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwv
Y2RhdGEtc2VjdGlvbi53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01M
IDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdt
bD4KKyA8Y2FyZCBpZD0nY2FyZDEnPgorIDxwPiBUZXN0IGZvciBDREFUQSBTZWN0aW9uIGluIFdN
TDxici8+IElmIGl0IHBhc3NlcywgeW91IGNhbiBzZWUgdGhlIGZvbGxvd2luZyB0ZXh0IDogPC9w
PgorIDwhW0NEQVRBWyBUaGlzIGlzIDxCPiBhIENEQVRBIHRlc3RdXT4KKyA8L2NhcmQ+Cis8L3dt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2NvbW1lbnQud21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd21sL2NvbW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93bWwvY29tbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPgorICA8cD4gVGVz
dCBjb21tZW50IGluIFdNTCwgdGhlIHRleHQgaW4gdGhlIGNvbW1lbnQgc2hvdWxkIG5vdCBiZSBk
aXNwbGF5ZWQsIGlmIGl0IHBhc3NlcywgeW91IGNhbiBvbmx5IHNlZSB0aGUgdGV4dDogIkhlbGxv
IFdvcmxkISIgYWZ0ZXIgdGhpcyBsaW5lIDwvcD4KKyAgPHA+CisgICAgPCEtLSBUaGlzIGlzIGEg
Y29tbWVudCAsIGl0IHNob3VsZCBub3QgYmUgZGlzcGxheWVkLS0+CisgICAgSGVsbG8gV29ybGQh
CisgIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Rv
LWVsZW1lbnQtb3B0aW9uYWwtYXR0ci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93bWwvZG8tZWxlbWVudC1vcHRpb25hbC1hdHRyLndtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd21sL2RvLWVsZW1lbnQtb3B0aW9uYWwtYXR0ci53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0iZmlyc3RjYXJkIiB0aXRs
ZT0iT25lIj4KKyAgPHA+VGVzdCBmb3IgZG8gZWxlbWVudCBpbiBXTUwgPC9wPgorICA8cD4gVGhl
cmUgYXJlIHR3byBkbyBlbGVtZW50IGluIHRoaXMgY2FyZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGRp
c3BsYXksIHRoZSBzZWNvbmQgd29uJ3QgYmVjYXVzZSBpdHMgb3B0aW9uYWwgYXR0cmlidXRlIGlz
IHRydWU8L3A+CisgIDxkbyBuYW1lPSJnbyIgdHlwZT0iYWNjZXB0IiBsYWJlbD0iRG8gMSIgb3B0
aW9uYWw9ImZhbHNlIj4KKyAgPGdvIGhyZWY9IiN0aGlyZGNhcmQiLz4KKyAgPC9kbz4KKyAgPGRv
IG5hbWU9ImdvMiIgdHlwZT0iYWNjZXB0IiBsYWJlbD0iRG8gMiIgb3B0aW9uYWw9InRydWUiPgor
ICA8Z28gaHJlZj0iI3NlY29uZGNhcmQiLz4KKyAgPC9kbz4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBp
ZD0ic2Vjb25kY2FyZCIgdGl0bGU9IlR3byI+CisgIDxwPlRoaXMgaXMgdGhlIHNlY29uZCBjYXJk
PC9wPgorIDwvY2FyZD4KKworIDxjYXJkIGlkPSJ0aGlyZGNhcmQiIHRpdGxlPSJUaHJlZSI+Cisg
IDxwPlRoaXMgaXMgdGhlIHRoaXJkIGNhcmQ8L3A+CisgPC9jYXJkPgorPC93bWw+CisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLXNoYWRvdy53bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93bWwvZG8tc2hhZG93LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd21sL2RvLXNoYWRvdy53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorPHdtbD4KKzx0ZW1wbGF0ZT4KKzxkbyB0eXBlPSJhY2NlcHQiIG5hbWU9ImRvMSIgbGFiZWw9
IlRlbXBsYXRlIERvIj4KKzxwcmV2Lz4KKzwvZG8+Cis8L3RlbXBsYXRlPgorCis8Y2FyZCBpZD0i
Zmlyc3QiPgorPHA+IFRlc3QgZm9yIGRvLXNoYWRvdyBpbiBXTUw8L3A+Cis8cD5UaGlzIGlzIGZp
cnN0IGNhcmQsIHdoaWNoIHdvbid0IHNoYWRvdyBkZWNrLWxldmVsIGRvPC9wPgorPGFuY2hvcj4K
KzxnbyBocmVmPSIjc2Vjb25kIj5HbyB0byBjYXJkIDI8L2dvPgorPC9hbmNob3I+Cis8L2NhcmQ+
CisKKzxjYXJkIGlkPSJzZWNvbmQiPgorPHA+ZGVjay1sZXZlbCBkbyBpcyBzaGFkb3dlZCB3aXRo
IG5vb3AuIEl0IGlzIG5vdCBleHBvc2VkIHRvIHRoZSB1c2VyIDwvcD4KKzxkbyB0eXBlPSJvcHRp
b25zIiBuYW1lPSJkbzEiIGxhYmVsPSJzZWNvbmQgZG8iPgorPG5vb3AvPgorPC9kbz4KKzxhbmNo
b3I+Cis8Z28gaHJlZj0iI3RoaXJkIj5HbyB0byBjYXJkIDM8L2dvPgorPC9hbmNob3I+Cis8L2Nh
cmQ+CisKKzxjYXJkIGlkPSJ0aGlyZCI+Cis8cD5kZWNrLWxldmVsIGRvIGlzIHNoYWRvd2VkLiBJ
dCBpcyByZXBsYWNlZCBieSBhIGNhcmQtbGV2ZWwgZG8gYmVjYXVzZSB0aGV5IGhhdmUgdGhlIHNh
bWUgbmFtZTwvcD4KKzxwPgorPGRvIHR5cGU9Im9wdGlvbnMiIG5hbWU9ImRvMSIgbGFiZWw9ImRv
MSI+Cis8Z28gaHJlZj0iLi90ZXN0LndtbCIvPgorPC9kbz4KKzxici8+Cis8YW5jaG9yPgorPGdv
IGhyZWY9IiNmaXJzdCI+R28gdG8gY2FyZCAxPC9nbz4KKzwvYW5jaG9yPgorPC9wPgorPC9jYXJk
PgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLXRlbXBsYXRlLndtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9kby10ZW1wbGF0ZS53bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9kby10ZW1wbGF0ZS53bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdt
bCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZv
cnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZSBpZD0iMiI+Cis8ZG8g
bmFtZT0iZ28iIHR5cGU9ImFjY2VwdCIgbGFiZWw9IlRlbXBsYXRlIGRvIj4KKzxnbyBocmVmPSIj
Zmlyc3RjYXJkIi8+Cis8L2RvPgorPC90ZW1wbGF0ZT4KKyA8Y2FyZCBpZD0iZmlyc3RjYXJkIiB0
aXRsZT0iT25lIj4KKyA8cD4gVGVzdCBmb3IgZG8gZWxlbWVudCBpbiB0ZW1wbGF0ZSBpbiBXTUw8
L3A+CisgPHA+IFdoaWNoZXZlciBjYXJkIHlvdSBlbnRlcmVkLCB5b3UgY2FuIHNlZSB0aGUgdGVt
cGxhdGUgZG8gYnV0dG9uIGJlY2F1c2UgaXQncyBnbG9iYWw8L3A+CisgIDxwPlRoaXMgaXMgdGhl
IGZpcnN0IGNhcmQ8L3A+CisgIDxwPjxhbmNob3I+PGdvIGhyZWY9IiNzZWNvbmRjYXJkIi8+R28g
dG8gY2FyZDI8L2FuY2hvcj48L3A+CisgPC9jYXJkPgorCisgPGNhcmQgaWQ9InNlY29uZGNhcmQi
IHRpdGxlPSJUd28iPgorIDxwPiBUZXN0IGZvciBkbyBlbGVtZW50IGluIHRlbXBsYXRlIGluIFdN
TDwvcD4KKyA8cD4gV2hpY2hldmVyIGNhcmQgeW91IGVudGVyZWQsIHlvdSBjYW4gc2VlIHRoZSB0
ZW1wbGF0ZSBkbyBidXR0b24gYmVjYXVzZSBpdCdzIGdsb2JhbDwvcD4KKyAgPHA+VGhpcyBpcyB0
aGUgc2Vjb25kIGNhcmQgPC9wPgorICA8YW5jaG9yPkdvIHRvIGNhcmQgMworICA8Z28gaHJlZj0i
I3RoaXJkY2FyZCIvPgorICA8L2FuY2hvcj4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0idGhpcmRj
YXJkIiB0aXRsZT0iVGhyZWUiPgorIDxwPiBUZXN0IGZvciBkbyBlbGVtZW50IGluIHRlbXBsYXRl
IGluIFdNTDwvcD4KKyA8cD4gV2hpY2hldmVyIGNhcmQgeW91IGVudGVyZWQsIHlvdSBjYW4gc2Vl
IHRoZSB0ZW1wbGF0ZSBkbyBidXR0b24gYmVjYXVzZSBpdCdzIGdsb2JhbDwvcD4KKyAgPHA+VGhp
cyBpcyB0aGUgdGhpcmQgY2FyZDwvcD4KKyAgPGFuY2hvcj5CYWNrPHByZXYvPjwvYW5jaG9yPgor
IDwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvZW50aXR5LndtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lbnRpdHkud21sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvZW50aXR5LndtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9E
VEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9Im5vMSIgdGl0bGU9IlRlc3QgZW50
aXR5Ij4KKzxwPlRlc3QgZm9yIEVudGl0aWVzIGluIFdNTCBwYWdlPC9wPgorJnF1b3Q7ICAgICAg
ICYjMzQ7Cis8YnIvPgorJmFtcDsgICAgICAgICYjMzg7Cis8YnIvPgorJmFwb3M7ICAgICAgICYj
eDI3OworPGJyLz4KKyZsdDsgICAgICAgICAmIzYwOworPGJyLz4KKyZndDsgICAgICAgICAmIzYy
OworPGJyLz4KKz0mbmJzcDs9JiMxNjA7PQorPGJyLz4KK0FBJnNoeTtBQSYjMTczO0FBCis8YnIv
PiAKKzxwPiAmbHQ7aGVsbG8mZ3Q7IDwvcD4KKzwvY2FyZD4KKworPGNhcmQgaWQ9ImNhcmQyIiB0
aXRsZT0iJChjYXJkaWQpIHRpdGxlIj5UaGlzIGlzIGNhcmQgMjwvY2FyZD4KKzwvd21sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWV2ZW50LWJpbmRpbmctY29uZmxpY3Qud21sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1ldmVudC1iaW5kaW5nLWNvbmZs
aWN0LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1ldmVudC1i
aW5kaW5nLWNvbmZsaWN0LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
PHdtbD4KKzxjYXJkIGlkPSJjYXJkMSI+CisgIDxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJk
Ij4KKyAgPHJlZnJlc2gvPgorICA8L29uZXZlbnQ+CisgIDxvbmV2ZW50IHR5cGU9Im9uZW50ZXJm
b3J3YXJkIj4KKyAgPHByZXYvPgorICA8L29uZXZlbnQ+CisgIDxwPiBUZXN0IGZvciB0aGUgZXJy
b3IgZXZlbnQtYmluZGluZyBjb25mbGljdDwvcD4KKyAgWW91IHNob3VsZCBOT1Qgc2VlIHRoaXMg
dGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgZXZlbnQtYmluZGluZyBlcnJvciBpbiBjYXJk
IGVsZW1lbnQgCis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vy
ci1pbnZhbGlkLWxvY2F0aW9uLWZvci12YXJyZWYud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlkLWxvY2F0aW9uLWZvci12YXJyZWYud21sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWludmFsaWQtbG9jYXRpb24tZm9yLXZh
cnJlZi53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4i
CisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxj
YXJkIGlkPSJubzEiIHRpdGxlPSJDYXJkIDEiPiAKKzxwPiBUZXN0IGZvciB2YXJpYWJsZSByZWZl
cmVuY2UgdmFsaWRhdGlvbjwvcD4KKzxwPiBBbiBlcnJvciB3aWxsIG9jY3VyIHdoZW4gbG9hZGlu
ZyB0aGUgY2FyZCBiZWNhdXNlIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UgaXMgcGxhY2VkIGluIGEg
aW52YWxpZCBsb2NhdGlvbjwvcD4KKzxkbyB0eXBlPSIkKHZhcikiIG5hbWU9InJlZnJlc2giPgor
ICA8cmVmcmVzaD4KKyAgICA8c2V0dmFyIG5hbWU9InZhciIgdmFsdWU9InZhcmFpYmxlMiIvPgor
ICA8L3JlZnJlc2g+Cis8L2RvPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9lcnItaW52YWxpZC10YWJsZWNvbHVtbi1udW1iZXIud21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlkLXRhYmxlY29sdW1uLW51bWJlci53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItaW52YWxpZC10YWJsZWNv
bHVtbi1udW1iZXIud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3
bWw+Cis8Y2FyZCBpZD0ibm8xIiB0aXRsZT0iQ2FyZCAxIj4gCis8cD4gVGVzdCBmb3IgdGFibGUg
Y29sdW1uIG51bWJlciB2YWxpZGF0aW9uIDwvcD4KKzxwPiBUaGUgdGFibGUgd29uJ3QgYmUgZGlz
cGxheWVkIGJlY2F1c2Ugb2YgdGhlIGludmFsaWQgY29sdW1ucyBhdHRydWlidGUgb2YgdGFibGUg
ZWxlbWVudDwvcD4KKzx0YWJsZSBjb2x1bW5zPSIwIj4KKzx0cj48dGQ+Q2VsbCAxPC90ZD48dGQ+
Q2VsbCAyPC90ZD48L3RyPgorPC90YWJsZT4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93bWwvZXJyLWludmFsaWQtdmFyaWFibGUtbmFtZS53bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWludmFsaWQtdmFyaWFibGUtbmFtZS53bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItaW52YWxpZC12YXJpYWJsZS1u
YW1lLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4w
Ij8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIK
KyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNh
cmQgaWQ9Im5vMSIgdGl0bGU9IkNhcmQgMSI+IAorPHA+IFRlc3QgZm9yIHZhcmlhYmxlIG5hbWUg
dmFsaWRhdGlvbiA8L3A+Cis8ZG8gdHlwZT0iYWNjZXB0IiBuYW1lPSJyZWZyZXNoIj4KKyAgPHJl
ZnJlc2g+CisgICAgPHNldHZhciBuYW1lPSIkK3ZhciIgdmFsdWU9InZhcmFpYmxlMiIvPgorICA8
L3JlZnJlc2g+Cis8L2RvPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9lcnItbXVsdGktYWNjZXNzLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9lcnItbXVsdGktYWNjZXNzLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd21sL2Vyci1tdWx0aS1hY2Nlc3Mud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9S
VU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4x
LnhtbCI+Cis8d21sPgorPGhlYWQ+Cis8YWNjZXNzIHBhdGg9Ii8iIGRvbWFpbj0iZG9tYWluIi8+
Cis8YWNjZXNzIHBhdGg9Ii9wYXRoIiBkb21haW49ImRvbWFpbiIvPgorPC9oZWFkPgorPGNhcmQg
aWQ9ImNhcmQxIj4KKyAgPHA+IFRlc3QgZm9yIG11bHRpLWFjY2VzcyBlcnJvcjwvcD4KKyAgWW91
IHNob3VsZCBub3Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgbXVsdGkt
YWNjZXNzIGluIGhlYWQgZWxlbWVudAorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9lcnItbXVsdGktaHR0cC1lcXVpdi1pbi1tZXRhLndtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktaHR0cC1lcXVpdi1pbi1tZXRhLndtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0aS1odHRwLWVxdWl2
LWluLW1ldGEud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4x
Ly9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgor
PGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGh0dHAtZXF1aXY9IkNvbnRl
bnQtVHlwZSIgQ29udGVudD0idGV4dC92bmQud2FwLndtbDsgQ2hhcnNldD1nYjIzMTIiLz4KKzwv
aGVhZD4KKyA8Y2FyZCBpZD0iY2FyZDEiPgorICA8cD4gVGVzdCBmb3IgbWV0YSBtdWx0aS1odHRw
LWVxdWl2IGVycm9yPC9wPgorICBZb3Ugc2hvdWxkIG5vdCBzZWUgdGhpcyB0ZXh0LCBiZWNhdXNl
IG9mIHRoZSBlcnJvciBvZiBtdWx0aS1odHRwLWVxdWl2IGluIG1ldGEgZWxlbWVudAorIDwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLW11bHRpLW5hbWUtaW4t
bWV0YS53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLW11bHRpLW5h
bWUtaW4tbWV0YS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnIt
bXVsdGktbmFtZS1pbi1tZXRhLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorPHdtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0iQ29udGVudC1UeXBlIiBuYW1lPSJDb250ZW50
LVR5cGUiIENvbnRlbnQ9InRleHQvdm5kLndhcC53bWw7IENoYXJzZXQ9Z2IyMzEyIi8+Cis8L2hl
YWQ+CisgPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPHA+IFRlc3QgZm9yIG1ldGEgbXVsdGktbmFtZSBl
cnJvcjwvcD4KKyAgWW91IHNob3VsZCBub3Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUg
ZXJyb3Igb2YgbXVsdGktbmFtZSBpbiBtZXRhIGVsZW1lbnQKKyA8L2NhcmQ+Cis8L3dtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0aS10aW1lci53bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLW11bHRpLXRpbWVyLndtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0aS10aW1lci53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwg
UFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1
bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgaWQ9ImNhcmQxIiBvbnRpbWVy
PSJ0ZXN0LndtbCI+CisgPHRpbWVyIGlkPSJ0aW1lcjEiIG5hbWU9InQxIiB2YWx1ZT0iMjAiLz4K
KyA8dGltZXIgaWQ9InRpbWVyMiIgbmFtZT0idDIiIHZhbHVlPSIzMCIvPgorICA8cD4gVGVzdCBm
b3IgZXJyb3Igb2YgbWV0YSBtdWx0aS10aW1lciBpbiBvbmUgY2FyZCA8L3A+CisgIFlvdSBzaG91
bGQgTk9UIHNlZSB0aGlzIHRleHQsIGJlY2F1c2Ugb2YgdGhlIGVycm9yIHRoYXQgbW9yZSB0aGFu
IG9uZSB0aW1lciBleGlzdCBpbiBvbmUgY2FyZCAKKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1zYW1lbmFtZS1kby53bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93bWwvZXJyLXNhbWVuYW1lLWRvLndtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1zYW1lbmFtZS1kby53bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElD
ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcv
RFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiPgorICA8ZG8gbmFtZT0i
ZG8iIHR5cGU9ImFjY2VwdCI+CisgIDxyZWZyZXNoLz4KKyAgPC9kbz4KKyAgPGRvIG5hbWU9ImRv
IiB0eXBlPSJhY2NlcHQiPgorICA8cmVmcmVzaC8+CisgIDwvZG8+CisgIDxwPiBUZXN0IGZvciB0
aGUgZXJyb3IgdGhhdCBtb3JlIHRoYW4gb25lIGRvIGVsZW1lbnQgaGFzIHNhbWUgbmFtZTwvcD4K
KyAgWW91IHNob3VsZCBOT1Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2Yg
bmFtZS1jb25mbGljdCBvZiBkbyBlbGVtZW50IAorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9lcnItdW5hbGxvd2VkLXRhc2staW4tYW5jaG9yLndtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItdW5hbGxvd2VkLXRhc2staW4tYW5jaG9y
LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci11bmFsbG93ZWQt
dGFzay1pbi1hbmNob3Iud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8
d21sPgorPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPGFuY2hvcj4KKyAgPG5vb3AvPgorICA8L2FuY2hv
cj4KKyAgPHA+IFRlc3QgZm9yIHRoZSBlcnJvciB0aGF0IHNwZWNpZnlpbmcgbm9vcCB0YXNrIHRv
IGFuY2hvciBlbGVtZW50PC9wPgorICBZb3Ugc2hvdWxkIE5PVCBzZWUgdGhpcyB0ZXh0LCBiZWNh
dXNlIG9mIHRoZSBlcnJvciB0aGF0IHNwZWNpZnlpbmcgdW5hbGxvd2VkIHRhc2sgdG8gYW5jaG9y
IGVsZW1lbnQgCis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2lt
Zy1sb2NhbHNyYy53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW1nLWxv
Y2Fsc3JjLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1sb2Nh
bHNyYy53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4i
ICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2Fy
ZCB0aXRsZT0iVGVzdCBpbWFnZSI+CisgPHA+IFRlc3QgZm9yIGltZyBlbGVtZW50IGluIFdNTCA8
L3A+CisgPHA+IFRoaXMgaW1hZ2UgaXMgc3BlY2lmaWVkIGJ5IGxvY2Fsc3JjIGF0dHJpYnV0ZSBv
ZiBpbWcgZWxlbWVudDwvcD4KKyB0ZXN0IGNvZGU6PCFbQ0RBVEFbCisgPHA+TG9jYWw8aW1nIGhl
aWdodD0iNjAiIHdpZHRoPSI0MCIgdnNwYWNlPSI0MCIgaHNwYWNlPSI2MCIgYWxpZ249Im1pZGRs
ZSIgbG9jYWxzcmM9InJlc291cmNlcy9zbWlsZS5naWYiIGFsdD0ic21pbGUiLz5JbWFnZTwvcD4K
KyBdXT4KKyA8YnIvPgorIDxwPkxvY2FsPGltZyBoZWlnaHQ9IjYwIiB3aWR0aD0iNDAiIHZzcGFj
ZT0iNDAiIGhzcGFjZT0iNjAiIGFsaWduPSJtaWRkbGUiIGxvY2Fsc3JjPSJyZXNvdXJjZXMvc21p
bGUuZ2lmIiBhbHQ9InNtaWxlIi8+SW1hZ2U8L3A+CisgPC9jYXJkPgorPC93bWw+IApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93bWwvaW1nLXNyYy1sb2NhbHNyYy1hbHQud21sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1zcmMtbG9jYWxzcmMtYWx0LndtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1zcmMtbG9jYWxzcmMtYWx0LndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIHRpdGxlPSJU
ZXN0IGltYWdlIj4KKyA8cD4gVGVzdCBmb3IgaW1nIGVsZW1lbnQgaW4gV01MIDwvcD4KKyA8cD4g
VGhpcyBpbWFnZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IGJvdGggc3JjIGFuZCBsb2NhbHNyYyBhdHRy
aWJ1dGVzIG9mIGltZyBlbGVtZW50PC9wPgorIDxwPiAxKSBsb2NhbHNyYyB0YWtlcyBwcmVjZWRl
bmNlIG92ZXIgc3JjIGF0dHJpYnV0ZSA8YnIvPgorIEltYWdlPGltZyBzcmM9Imh0dHA6Ly93d3cu
YmFpZHUuY29tL2ltZy9iYWlkdS5naWYiIGxvY2Fsc3JjPSJyZXNvdXJjZXMvc21pbGUuZ2lmIiBh
bHQ9IklNQUdFIi8+SW1hZ2UKKyA8YnIvPgorIDIpIGxvY2Fsc3JjIGNhbid0IGxvY2F0ZSB0aGUg
aW1hZ2UsIHNyYyB3b3JrcyA8YnIvPgorIEltYWdlPGltZyBzcmM9Imh0dHA6Ly93d3cuYmFpZHUu
Y29tL2ltZy9iYWlkdS5naWYiIGxvY2Fsc3JjPSJ3cm9uZ3BhdGgvc21pbGUuZ2lmIiBhbHQ9IklN
QUdFIi8+SW1hZ2UKKyA8YnIvPgorIDMpIG5laXRoZXIgbG9jYWxzcmMgbm9yIHNyYyBjYW4gbG9j
YXRlIHRoZSBpbWFnZSwgYWx0IHdvcmtzIDxici8+CisgSW1hZ2U8aW1nIHNyYz0iaHR0cDovL3d3
dy5iYWlkdS5jb20vd3JvbmdwYXRoL2JhaWR1LmdpZiIgbG9jYWxzcmM9Indyb25ncGF0aC9zbWls
ZS5naWYiIGFsdD0iSU1BR0UiLz5JbWFnZQorIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4gCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbWctc3JjLndtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9pbWctc3JjLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd21sL2ltZy1zcmMud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdN
TCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3
bWw+CisgPGNhcmQgdGl0bGU9IlRlc3QgaW1hZ2UiPgorIDxwPiBUZXN0IGZvciBpbWcgZWxlbWVu
dCBpbiBXTUwgPC9wPgorIDxwPiBUaGlzIGltYWdlIGlzIHNwZWNpZmllZCBieSBzcmMgYXR0cmli
dXRlIG9mIGltZyBlbGVtZW50PC9wPgorIHRlc3QgY29kZTo8IVtDREFUQVsKKyA8cD5OZXR3b3Jr
IDxpbWcgaGVpZ2h0PSI2MCIgd2lkdGg9IjQwIiB2c3BhY2U9IjQwIiBoc3BhY2U9IjYwIiBhbGln
bj0ibWlkZGxlIiBzcmM9Imh0dHA6Ly93YXAuYmFpZHUuY29tL2xvZ28uZ2lmIiBhbHQ9InNtaWxl
Ii8+SW1hZ2U8L3A+CisgXV0+CisgPGJyLz4KKyA8cD5OZXR3b3JrIDxpbWcgaGVpZ2h0PSI2MCIg
d2lkdGg9IjQwIiB2c3BhY2U9IjQwIiBoc3BhY2U9IjYwIiBhbGlnbj0ibWlkZGxlIiBzcmM9Imh0
dHA6Ly93YXAuYmFpZHUuY29tL2xvZ28uZ2lmIiBhbHQ9InNtaWxlIi8+SW1hZ2U8L3A+CisgPC9j
YXJkPgorPC93bWw+IApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvcC1hbGlnbi53bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvcC1hbGlnbi53bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9wLWFsaWduLndtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm91cm0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkMSI+
Cis8cD4gVGVzdCBmb3IgYWxpZ24gYXR0cmlidXRlIG9mIHAgZWxlbWVudCBpbiBXTUwgPC9wPgor
PGJyLz4KKzwhW0NEQVRBWyA8cCBhbGlnbj0iY2VudGVyIj5dXT4KKzxwIGFsaWduPSJjZW50ZXIi
PgorSGVyZSB5b3UgY2FuIGxlYXJuIHZhcmlvdXMgbW9iaWxlIHRlY2hub2xvZ2llcyBsaWtlIFdB
UCAvIFdBUCAyLjAsIFdNTCwgV01MU2NyaXB0LCBYSFRNTCBNUCwgV0NTUyAvIFdBUCBDU1MsIFVB
UHJvZiBhbmQgU01TIHRocm91Z2ggb3VyIGZyZWUgdHV0b3JpYWxzLCBhcnRpY2xlcyBhbmQgZXhh
bXBsZXMuIFRoaXMgd2ViIHNpdGUgY2FuIGhlbHAgd2ViIHByb2dyYW1tZXJzIHdobyB3aXNoIHRv
IGV4dGVuZCB0aGVpciBrbm93bGVkZ2UgdG8gdGhlIHdpcmVsZXNzIHdvcmxkLiAKKzxici8+Cit4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorPC9wPgorPGJyLz4KKzwhW0NEQVRBWyA8
cCBhbGlnbj0icmlnaHQiPl1dPgorPHAgYWxpZ249InJpZ2h0Ij4KK0hlcmUgeW91IGNhbiBsZWFy
biB2YXJpb3VzIG1vYmlsZSB0ZWNobm9sb2dpZXMgbGlrZSBXQVAgLyBXQVAgMi4wLCBXTUwsIFdN
TFNjcmlwdCwgWEhUTUwgTVAsIFdDU1MgLyBXQVAgQ1NTLCBVQVByb2YgYW5kIFNNUyB0aHJvdWdo
IG91ciBmcmVlIHR1dG9yaWFscywgYXJ0aWNsZXMgYW5kIGV4YW1wbGVzLiBUaGlzIHdlYiBzaXRl
IGNhbiBoZWxwIHdlYiBwcm9ncmFtbWVycyB3aG8gd2lzaCB0byBleHRlbmQgdGhlaXIga25vd2xl
ZGdlIHRvIHRoZSB3aXJlbGVzcyB3b3JsZC4gCis8YnIvPgoreHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHgKKzwvcD4KKzxici8+Cis8IVtDREFUQVsgPHAgYWxpZ249ImxlZnQiPl1dPgor
PHAgYWxpZ249ImxlZnQiPgorSGVyZSB5b3UgY2FuIGxlYXJuIHZhcmlvdXMgbW9iaWxlIHRlY2hu
b2xvZ2llcyBsaWtlIFdBUCAvIFdBUCAyLjAsIFdNTCwgV01MU2NyaXB0LCBYSFRNTCBNUCwgV0NT
UyAvIFdBUCBDU1MsIFVBUHJvZiBhbmQgU01TIHRocm91Z2ggb3VyIGZyZWUgdHV0b3JpYWxzLCBh
cnRpY2xlcyBhbmQgZXhhbXBsZXMuIFRoaXMgd2ViIHNpdGUgY2FuIGhlbHAgd2ViIHByb2dyYW1t
ZXJzIHdobyB3aXNoIHRvIGV4dGVuZCB0aGVpciBrbm93bGVkZ2UgdG8gdGhlIHdpcmVsZXNzIHdv
cmxkLiAKKzxici8+Cit4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorPC9wPgorPC9j
YXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9wLW1vZGUud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL3AtbW9kZS53bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9wLW1vZGUud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9X
QVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3VybS5vcmcvRFREL3dt
bF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQxIj4gCis8
IVtDREFUQVsgPHA+IGRlZmF1bHQgbW9kZSBpcyAid3JhcCIgZm9yIHRoZSBmaXJzdCBwIGVsZW1l
bnQgXV0+Cis8cD4gVGVzdCBmb3IgbW9kZSBhdHRyaWJ1dGUgb2YgcCBlbGVtZW50IGluIFdNTCA8
L3A+Cis8YnIvPgorPCFbQ0RBVEFbIDxwPiBpdCB3aWxsIHVzZSB0aGUgbW9kZSBvZiBwcmV2aW91
cyBwYXJhZ3JhcGggZWxlbWVudF1dPgorPHA+CitIZXJlIHlvdSBjYW4gbGVhcm4gdmFyaW91cyBt
b2JpbGUgdGVjaG5vbG9naWVzIGxpa2UgV0FQIC8gV0FQIDIuMCwgV01MLCBXTUxTY3JpcHQsIFhI
VE1MIE1QLCBXQ1NTIC8gV0FQIENTUywgVUFQcm9mIGFuZCBTTVMgdGhyb3VnaCBvdXIgZnJlZSB0
dXRvcmlhbHMsIGFydGljbGVzIGFuZCBleGFtcGxlcy4gVGhpcyB3ZWIgc2l0ZSBjYW4gaGVscCB3
ZWIgcHJvZ3JhbW1lcnMgd2hvIHdpc2ggdG8gZXh0ZW5kIHRoZWlyIGtub3dsZWRnZSB0byB0aGUg
d2lyZWxlc3Mgd29ybGQuIAorPGJyLz4KK0hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEgKKzwvcD4KKzxici8+Cis8IVtDREFUQVsgPHAgbW9kZT0ibm93cmFw
Ij5dXT4KKzxwIG1vZGU9Im5vd3JhcCI+CitIZXJlIHlvdSBjYW4gbGVhcm4gdmFyaW91cyBtb2Jp
bGUgdGVjaG5vbG9naWVzIGxpa2UgV0FQIC8gV0FQIDIuMCwgV01MLCBXTUxTY3JpcHQsIFhIVE1M
IE1QLCBXQ1NTIC8gV0FQIENTUywgVUFQcm9mIGFuZCBTTVMgdGhyb3VnaCBvdXIgZnJlZSB0dXRv
cmlhbHMsIGFydGljbGVzIGFuZCBleGFtcGxlcy4gVGhpcyB3ZWIgc2l0ZSBjYW4gaGVscCB3ZWIg
cHJvZ3JhbW1lcnMgd2hvIHdpc2ggdG8gZXh0ZW5kIHRoZWlyIGtub3dsZWRnZSB0byB0aGUgd2ly
ZWxlc3Mgd29ybGQuIAorPGJyLz4KK0hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEgKKzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93bWwvc2hvdy1maXJzdC1jYXJkLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9zaG93LWZpcnN0LWNhcmQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93bWwvc2hvdy1maXJzdC1jYXJkLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjAvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4x
LnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0ibm8xIj48cD5UZXN0IGZvciBzaG93aW5nIHRoZSBm
aXJzdCBjYXJkIG9mIHdtbCBkZWNrIGluIGRlZmF1bHQgd2hlbiB5b3UgZG9lc24ndCBzcGVjaWZ5
IGFueSBjb3JyZWN0IFVSTCBmcmFnbWVudC48L3A+IElmIHRoZSB0ZXN0IHBhc3NlcywgeW91IHNo
b3VsZCBzZWUgdGhpcyB0ZXh0LjwvY2FyZD4KKzxjYXJkIGlkPSJubzIiPlRoaXMgaXMgY2FyZCAy
LCB5b3Ugc2hvdWxkIE5PVCBzZWUgdGhlc2UgdGV4dCB3aGlsZSBydW5uaW5nIHRoaXMgdGVzdDwv
Y2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvdGFibGUtZWxlbWVudC53
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvdGFibGUtZWxlbWVudC53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC90YWJsZS1lbGVtZW50LndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkPgorIDxwPiBU
ZXN0IGZvciB0YWJsZSBlbGVtZW50IGluIFdNTCA8L3A+CisgPHA+IHNvdXJjZSBjb2RlOiA8L3A+
CisgPCFbQ0RBVEFbCisgICA8dGFibGUgY29sdW1ucz0iMyIgYWxpZ249IkxSUiI+IAorICAgIDx0
cj4KKyAgICAgPHRkPkNlbGwgb25lPC90ZD4KKyAgICAgPHRkPkM8YnIvPmVsbDxici8+IHR3bzwv
dGQ+CisgICAgIDx0ZD5DZWxsIHRocmVlPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICA8
dGQ+IG9uZSA8L3RkPgorICAgIDx0ZC8+CisgICAgPHRkPkMgdGhyZWU8L3RkPgorICAgIDwvdHI+
CisgICA8L3RhYmxlPgorIF1dPgorIDxici8+CisgIDxwPgorICAgPHRhYmxlIGNvbHVtbnM9IjMi
IGFsaWduPSJMUlIiPiAKKyAgICA8dHI+CisgICAgIDx0ZD5DZWxsIG9uZTwvdGQ+CisgICAgIDx0
ZD5DPGJyLz5lbGw8YnIvPiB0d288L3RkPgorICAgICA8dGQ+Q2VsbCB0aHJlZTwvdGQ+CisgICAg
PC90cj4KKyAgICA8dHI+CisgICAgPHRkPiBvbmUgPC90ZD4KKyAgICA8dGQvPgorICAgIDx0ZD5D
IHRocmVlPC90ZD4KKyAgICA8L3RyPgorICAgPC90YWJsZT4KKyA8L3A+CisgPC9jYXJkPgorPC93
bWw+IApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvdGVzdC53bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93bWwvdGVzdC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dtbC90ZXN0LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8
d21sPgorIDxjYXJkIGlkPSdjYXJkMSc+CisgPHA+IFRoaXMgcGFnZSBpcyBhc3Npc3RhbnQgcGFn
ZS4gTWFueSB0ZXN0IHBhZ2VzIHdpbGwganVtcCBoZXJlLiA8L3A+CisgPHA+Q2xpY2sgIkJhY2si
IHRvIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2U8L3A+CisgPGFuY2hvcj4gQmFjayA8cHJl
di8+PC9hbmNob3I+CisgPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dt
bC90ZXh0LWVtcGhhc2lzLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC90
ZXh0LWVtcGhhc2lzLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL3Rl
eHQtZW1waGFzaXMud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+
CisgPGNhcmQgdGl0bGU9IlRleHQgRm9ybWF0dGluZyI+CisgIDxwPiBUZXN0IGZvciB0ZXh0IGVt
cGhhc2lzIG9mIFdNTCA8L3A+CisgIDxwPgorICAgbm9ybWFsPGJyLz4KKyAgIDxlbT5lbXBoYXNp
emVkPC9lbT48YnIvPgorICAgPHN0cm9uZz5zdHJvbmc8L3N0cm9uZz48YnIvPgorICAgPGI+Ym9s
ZDwvYj48YnIvPgorICAgPGk+aXRhbGljPC9pPjxici8+CisgICA8dT51bmRlcmxpbmU8L3U+PGJy
Lz4KKyAgIDxiaWc+YmlnPC9iaWc+PGJyLz4KKyAgIDxzbWFsbD5zbWFsbDwvc21hbGw+CisgIDwv
cD4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL3ZhbGlkYXRl
LWR0ZC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvdmFsaWRhdGUtZHRk
LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL3ZhbGlkYXRlLWR0ZC53
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8
IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6
Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9Im5v
MSIgdGl0bGU9IkNhcmQgMSI+IAorPHA+VGVzdCBmb3IgRFREIHZhbGlkYXRpb24gb2YgV01MIGZp
bGU8YnIvPklmIHRoZSBEVENUWVBFIGlzIGluY29ycmVjdCBvciBtaXNzaW5nLCB0aGlzIHRlc3Qg
ZmFpbGVzLjwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy9hLWJyLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYS1ici1lbGVtZW50LndtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYS1ici1lbGVtZW50
LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0
dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIHRp
dGxlPSJBIGVsZW1lbnQgVGVzdCI+CisgIDxwPlRlc3QgZm9yIEEgZWxlbWVudCBpbmNsdWRpbmcg
QlIgZWxlbWVudDwvcD4KKyAgPHA+CisgICAiTmV4dCBQYWdlIiB3aWxsIGJlIGJyb2tlbiBieSBC
UiBlbGVtZW50IGJldHdlZW4gdGhlbTxici8+CisgICA8YSBocmVmPSIuLi90ZXN0LndtbCI+TmV4
dCA8YnIvPiBwYWdlPC9hPgorICA8L3A+CisgPC9jYXJkPgorPC93bWw+IAorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtZWxlbWVudC53bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWVsZW1lbnQud21s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9h
LWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cisg
PGNhcmQgdGl0bGU9IkEgZWxlbWVudCBUZXN0Ij4KKyAgPHA+VGVzdCBmb3IgQSBlbGVtZW50LiA8
YnIvPldoZW4gbW91c2UgbW92ZXMgaW50byBsaW5rLCAiZ28gdG8gdGVzdC53bWwiIHdpbGwgYXBw
ZWFyLCBjbGljayB0aGUgbGluaywgd2lsbCBqdW1wIHRvIHRlc3Qud21sPC9wPgorICAKKyAgPHA+
CisgICA8YSBocmVmPSIuLi90ZXN0LndtbCIgdGl0bGU9ImdvIHRvIHRlc3Qud21sIiA+TmV4dCBw
YWdlPC9hPgorICA8L3A+CisgPC9jYXJkPgorPC93bWw+IAorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtaW1nLWVsZW1lbnQud21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYS1pbWctZWxlbWVudC53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2Et
aW1nLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+
CisgPGNhcmQgdGl0bGU9IkEgZWxlbWVudCBUZXN0Ij4KKyAgPHA+VGVzdCBmb3IgQSBlbGVtZW50
IGluY2x1ZGluZyBpbWcgZWxlbWVudC4gPC9wPgorICA8cD4KKyAgIDxhIGhyZWY9Ii4uL3Rlc3Qu
d21sIiB0aXRsZT0iTmV4dCBQYWdlIj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL3NtaWxlLmdpZiIv
PjwvYT4KKyAgPC9wPgorIDwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hY2Nlc3MtdGFyZ2V0LndtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FjY2Vzcy10YXJnZXQud21sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hY2Nl
c3MtdGFyZ2V0LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4x
Ly9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21s
PgorPGNhcmQgb250aW1lcj0iLi90YXJnZXRkZWNrLndtbCI+Cis8dGltZXIgbmFtZT0idDEiIHZh
bHVlPSIzMCIvPgorPHA+IFRlc3QgZm9yIERlY2sgQWNjZXNzIGNvbnRyb2wgaW4gV01MLiA8L3A+
Cis8cD4gSWYgdGhlIHRlc3QgcGFzc2VzLCB0aGlzIGRlY2sgd2lsbCBqdW1wIHRvICJ0YXJnZXRk
ZWNrLndtbCIgYWZ0ZXIgMyBzZWNvbmQ8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWJyLWVsZW1lbnQud21sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9y
LWJyLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50
ZXJhY3RpdmVjYXNlcy9hbmNob3ItYnItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICIt
Ly9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4g
VGVzdCBmb3IgYnIgZWxlbWVudCBlbmNsb3NlZCB3aXRoIGFuY2hvciBlbGVtZW50IDwvcD4KKzxw
PgorPGFuY2hvcj48Z28gaHJlZj0iLi4vdGVzdC53bWwiLz5HbyB0byA8YnIvPnRlc3Qud21sPC9h
bmNob3I+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWVsZW1lbnQud21sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hbmNob3It
ZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8v
RU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8
Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+CisgIDxwPgorICBUaGlzIGlzIGFuIGFuY2hvciBib3Vu
ZCB0byBnbyB0YXNrPGJyLz4KKyAgIDxhbmNob3I+TmV4dCBwYWdlCisgIDxnbyBocmVmPSJjYXJk
cy53bWwiLz4KKyAgIDwvYW5jaG9yPgorICA8L3A+CisKKyAgIDxwPgorICAgVGhpcyBhbiBhbmNo
b3IgYm91bmQgdG8gcHJldiB0YXNrPGJyLz4KKyAgIDxhbmNob3IgdGl0bGU9IlByZXZpb3VzIiA+
UHJldiBwYWdlCisgICA8cHJldi8+CisgICA8L2FuY2hvcj4KKyAgPC9wPgorCisgICA8cD4KKyAg
ICBUaGlzIGFuIGFuY2hvciBib3VuZCB0byByZWZyZXNoIHRhc2s8YnIvPgorICAgIDxhbmNob3Ig
dGl0bGU9IlJlZnJlc2giPlJlZnJlc2ggJHZhcgorICAgIDxyZWZyZXNoPiAKKyAgICA8c2V0dmFy
IG5hbWU9InZhciIgdmFsdWU9Im1lIi8+CisgICAgPC9yZWZyZXNoPgorICAgIDwvYW5jaG9yPgor
ICA8L3A+CisKKyAgIDxwPgorICAgVGhpcyBpcyBhbiBhbmNob3IgY29udGFpbnMgaW1nIGVsZW1l
bnQsIGJvdW5kIHRvIHByZXYgdGFzayA8YnIvPgorICAgPGFuY2hvciB0aXRsZT0iY2xpY2sgdG8g
Z28gYmFjayI+CisgICA8cHJldi8+CisgICA8aW1nIHNyYz0iLi4vcmVzb3VyY2VzL3NtaWxlLmdp
ZiIgLz4KKyAgIDwvYW5jaG9yPgorICAgPC9wPgorIDwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWltZy1lbGVtZW50Lndt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2Fu
Y2hvci1pbWctZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1pbWctZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVC
TElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+
Cis8cD4gVGVzdCBmb3IgV01MIGltZyBlbmNsb3NlZCB3aXRoIGFuY2hvciBlbGVtZW50LCB3aGVu
IHRoZSBtb3VzZSBtb3ZlIGludG8gdGhlIGltYWdlLCB0aGUgdGlwICJnbyB0byB0ZXN0LndtbCIg
d2lsbCBhcHBlYXI8L3A+Cis8cD4KKzxhbmNob3IgdGl0bGU9ImdvIHRvIHRlc3Qud21sIj48aW1n
IHNyYz0iLi4vcmVzb3VyY2VzL3NtaWxlLmdpZiIvPiA8Z28gaHJlZj0iLi4vdGVzdC53bWwiLz48
L2FuY2hvcj4KKzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW5ld2NvbnRleHQtYXR0ci53bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW5ld2NvbnRleHQt
YXR0ci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL2NhcmQtbmV3Y29udGV4dC1hdHRyLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQ
Rk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxf
MS4xLnhtbCI+CisKKzx3bWw+CisgPGNhcmQgaWQ9ImZpcnN0Y2FyZCIgdGl0bGU9Ik9uZSI+Cisg
PHA+IFRlc3QgZm9yIG5ld2NvbnRleHQgYXR0cmlidXRlIG9mIGNhcmQgZWxlbWVudDwvcD4KKyA8
cD4gVGhpcyBpcyB0aGUgZmlyc3QgY2FyZCwgQ2xpY2sgIkdvIiB0byBlbnRlciBjYXJkIHR3by4g
PGJyLz4gQmVjYXVzZSBuZXdjb250ZXh0IG9mIGNhcmQgdHdvIGlzIHRydWUsIHRoZSBoaXN0b3J5
IHN0YXRlIHdpbGwgYmUgY2xlYW4sIGFuZCB0aGUgdmFyaWFibGUgIiR2YXIxIiB3b24ndCBiZSBy
ZXBsYWNlZDwvcD4KKyA8ZG8gdHlwZT0iYWNjZXB0IiBsYWJlbD0iR28iPgorIDxnbyBocmVmPSIj
c2Vjb25kY2FyZCI+CisgICAgPHNldHZhciBuYW1lPSJ2YXIxIiB2YWx1ZT0idHdvIi8+IAorIDwv
Z28+CisgPC9kbz4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0ic2Vjb25kY2FyZCIgdGl0bGU9IiR2
YXIxIiBuZXdjb250ZXh0PSJ0cnVlIj4KKyA8cD4gVGhpcyBpcyB0aGUgY2FyZCAkdmFyMSA8L3A+
CisgPHA+IEJlY2F1c2UgbmV3Y29udGV4dCBvZiB0aGlzIGNhcmQgaXMgdHJ1ZSwgdGhlIGhpc3Rv
cnkgc3RhdGUgd2lsbCBiZSBjbGVhbiwgYW5kIHRoZSB2YXJpYWJsZSAiJHZhcjEiIHdvbid0IGJl
IHJlcGxhY2VkPC9wPgorIDwvY2FyZD4KKzwvd21sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb25lbnRlcmJhY2t3YXJkLndtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb25lbnRlcmJh
Y2t3YXJkLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvY2FyZC1vbmVudGVyYmFja3dhcmQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9X
QVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93
bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIiBvbmVu
dGVyYmFja3dhcmQ9IiNjYXJkMyI+IAorPHA+VGVzdCBmb3IgY2FyZCBvbmVudGVyYmFja3dhcmQg
aW50cmluc2ljIGV2ZW50PC9wPgorPHA+IENsaWNrICJHbyIgdG8ganVtcCB0byB0aGUgY2FyZDIs
IGlmIHlvdSBnbyBiYWNrIGZyb20gY2FyZDIsIGl0IHdpbGwganVtcCB0byBjYXJkMzwvcD4KKzxh
bmNob3IgdGl0bGU9ImdvIHRvIGNhcmQyIj4KKzxnbyBocmVmPSIjY2FyZDIiPkdvPC9nbz4KKzwv
YW5jaG9yPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iQ2FyZCAyIj4gCis8cD5U
aGlzIGlzIGNhcmQyLGNsaWNrICJCYWNrIiB3aWxsIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2U8
L3A+IAorPGFuY2hvcj4KK0JhY2sKKzxwcmV2IC8+Cis8L2FuY2hvcj4KKzwvY2FyZD4KKzxjYXJk
IGlkPSJjYXJkMyIgdGl0bGU9IkNhcmQgMyIgPgorPHA+VGhpcyBpcyBjYXJkMzwvcD4KKzwvY2Fy
ZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
Y2FyZC1vbmVudGVyZm9yd2FyZC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW9uZW50ZXJmb3J3YXJkLndtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVyZm9y
d2FyZC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4i
CisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2Fy
ZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiIG9uZW50ZXJmb3J3YXJkPSIjY2FyZDIiPgorPHA+
VGVzdCBmb3IgY2FyZCBvbmVudGVyZm9yd2FyZCBldmVudDwvcD4KKzxwPkNhcmQgb25lIHdpbGwg
anVtcCB0byBjYXJkIHR3byB3aGVuIGVudGVyZWQgZm9yd2FyZCBpdDwvcD4KKzwvY2FyZD4KKzxj
YXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+Cis8cD5UZXN0IGZvciBjYXJkIG9uZW50ZXJm
b3J3YXJkIGV2ZW50PC9wPgorPHA+VGhpcyBpcyBjYXJkMiwgSSBhbSBlbnRlcmVkIGJ5IGNhcmQg
b25lIGZvcndhcmRpbmc8L3A+Cis8L2NhcmQ+Cis8L3dtbD4gCisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbnRpbWVyLndtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb250aW1lci53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2Nh
cmQtb250aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEu
MS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21s
PgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJtYXgt
YWdlPTAiLz4KKzwvaGVhZD4KKzxjYXJkIGlkPSJjYXJkMSIgb250aW1lcj0iI2NhcmQyIiB0aXRs
ZT0iQ2FyZCBvbmUiPgorPHA+IFRlc3QgZm9yIGNhcmQgb250aW1lciBpbnRyaW5zaWMgZXZlbnQg
aW4gV01MIDwvcD4KKzx0aW1lciBuYW1lPSJ0aW1lMSIgdmFsdWU9IjUwIi8+Cis8cD4KK1RoaXMg
aXMgY2FyZCBvbmU8YnIvPlRoZSB0aW1lciBpcyB0cmlnZ2VyZWQgYnkgdGhlIG9udGltZXIgaW50
cmluc2ljIGV2ZW50KG9udGltZXIgYXMgYXR0cmlidXRlIG9mIGNhcmQgZWxlbWVudCk8YnIvPldo
ZW4gdGhlIHRpbWVyIGlzIHRpbWVvdXQoYWZ0ZXIgNXMpLCB3aWxsIGp1bXAgdG8gY2FyZCB0d28u
Cis8L3A+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIiPgorVGhpcyBpcyBDYXJkIHR3bworPC9j
YXJkPgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvZGVjay1hY2Nlc3MtY29udHJvbC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9kZWNrLWFjY2Vzcy1jb250cm9sLndtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZGVjay1hY2Nlc3Mt
Y29udHJvbC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8v
RU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4K
KzxjYXJkIG9uZW50ZXJmb3J3YXJkPSJ0YXJnZXRkZWNrLndtbCI+Cis8cD4gVGVzdCBmb3IgRGVj
ayBBY2Nlc3MgY29udHJvbCBpbiBXTUwuIDwvcD4KKzxwPiBUaGlzIGRlY2sgd2lsbCB0cnkgdG8g
anVtcCB0byAidGFyZ2V0ZGVjay53bWwiIHdoZW4gaXQgaXMgbG9hZGVkLiBCdXQgaXQgd2lsbCA8
c3Ryb25nPkZBSUw8L3N0cm9uZz4gYmVjYXVzZSAidGFyZ2V0ZGVjay53bWwiIGp1c3QgYWxsb3dz
ICJhY2Nlc3MtdGFyZ2V0LndtbCIgdG8gYWNjZXNzIGl0LjwvcD4KKzxwPiBZb3UgY2FuIGNsaWNr
ICdHbycgdG8gZW50ZXIgJ2FjY2Vzcy10YXJnZXQud21sJywgYW5kIHRoZW4gZW50ZXIgJ3Rhcmdl
dGRlY2sud21sJyBmcm9tIHRoZXJlPC9wPgorPGFuY2hvciB0aXRsZT0iZ28gdG8gYWNjZXNzLXRh
cmdldC53bWwiPjxnbyBocmVmPSIuL2FjY2Vzcy10YXJnZXQud21sIj5HbzwvZ28+PC9hbmNob3I+
Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvZ28tZWxlbWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy9nby1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZ28tZWxlbWVudC53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJP
bmUiPgorICA8cD4gVGVzdCBmb3IgZ28gZWxlbWVudCBpbiBXTUwgPC9wPgorICA8YnIvPgorICBD
YXNlIDE6IGp1bXAgYW1vbmcgb25lIGRlY2sKKyAgPGRvIG5hbWU9ImdvIiB0eXBlPSJhY2NlcHQi
IGxhYmVsPSJHbyB0byBjYXJkMiI+CisgICA8Z28gaHJlZj0iI2NhcmQyIiBzZW5kcmVmZXJlcj0i
dHJ1ZSIgLz4KKyAgPC9kbz4KKyAgPHAvPgorICBDYXNlIDI6IGp1bXAgZnJvbSBvbmUgZGVjayB0
byBhbm90aGVyIG9uZQorICA8ZG8gbmFtZT0iZ28yIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJHbyB0
byB0ZXN0LndtbCI+CisgICA8Z28gaHJlZj0iLi4vdGVzdC53bWwiLz4KKyAgPC9kbz4KKyAgPHAv
PgorICBDYXNlIDM6IGp1bXAgdG8gdGVzdC53bWwgYW5kIHBvc3QgZGF0YSB3aXRoIHBvc3QgbWV0
aG9kCisgIDxkbyBuYW1lPSJnbzMiIHR5cGU9ImFjY2VwdCIgbGFiZWw9IlBvc3QgdG8gdGVzdC53
bWwiPgorICAgPGdvIGhyZWY9Ii4uL3Rlc3Qud21sIiBtZXRob2Q9InBvc3QiIGFjY2VwdC1jaGFy
c2V0PSJ1dGYtOCwgbGF0aW4xIj4KKyAgICA8cG9zdGZpZWxkIG5hbWU9InZhcjEiIHZhbHVlPSJo
ZWxsbyIvPgorICAgIDxwb3N0ZmllbGQgbmFtZT0idmFyMiIgdmFsdWU9IiB3b3JsZCIvPgorICAg
PC9nbz4KKyAgPC9kbz4KKyAgPHAvPgorICBDYXNlIDQ6IGp1bXAgdG8gdGVzdC53bWwgYW5kIHNl
bmQgcmVxdWVzdCB3aXRoIGdldCBtZXRob2QgCisgIDxkbyBuYW1lPSJnbzQiIHR5cGU9ImFjY2Vw
dCIgbGFiZWw9ImdldCBmcm9tIHRlc3Qud21sIiBzZW5kcmVmZXJlcj0idHJ1ZSI+CisgICA8Z28g
aHJlZj0iLi4vdGVzdC53bWwiIG1ldGhvZD0iZ2V0IiBhY2NlcHQtY2hhcnNldD0idXRmLTgsbGF0
aW4xLGlzby04ODU5LTEiPgorICAgIDxwb3N0ZmllbGQgbmFtZT0idmFyMSIgdmFsdWU9ImhlbGxv
Ii8+CisgICAgPHBvc3RmaWVsZCBuYW1lPSJ2YXIyIiB2YWx1ZT0iZnJpZW5kIi8+CisgICA8L2dv
PgorICA8L2RvPgorIDwvY2FyZD4KKworIDxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IlR3byI+Cisg
IDxwIGFsaWduPSJjZW50ZXIiPgorICBUaGlzIGlzIHRoZSBzZWNvbmQgY2FyZAorIDwvcD4KKyA8
L2NhcmQ+Cis8L3dtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9pbnB1dC1lbXB0eW9rLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9pbnRlcmFjdGl2ZWNhc2VzL2lucHV0LWVtcHR5b2sud21sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1lbXB0eW9rLndtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZ
UEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3
LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQ+Cis8cD4gVGVz
dCBmb3IgaW5wdXQgZW1wdHlvayBhdHRyaWJ1dGUgaW4gV01MIDwvcD4KK0ZvciB0aGUgZm9sbG93
aW5nIGlucHV0IGVsZW1lbnRzLCBpbnB1dCBpcyByZXF1aXJlZDoKKzxici8+Citmb3JtYXQ9TipN
O2VtcHR5b2s9ZmFsc2U8aW5wdXQgbmFtZT0ieDIiIGVtcHR5b2s9ImZhbHNlIiBmb3JtYXQ9Ik4q
TSIvPgorPGJyLz4KK2Zvcm1hdD0qTTtlbXB0eW9rPWZhbHNlPGlucHV0IG5hbWU9IngzIiBlbXB0
eW9rPSJmYWxzZSIgZm9ybWF0PSIqTSIvPgorPGJyLz4KK0ZvciB0aGUgZm9sbG93aW5nIGlucHV0
IGVsZW1lbnRzLCBpbnB1dCBpcyBub3QgcmVxdWlyZWQ6Cis8YnIvPgorZGVmYXVsdDxpbnB1dCBu
YW1lPSJ4NCIvPiAKKzxici8+Citmb3JtYXQ9Kk08aW5wdXQgbmFtZT0ieDUiIGZvcm1hdD0iKk0i
Lz4gCis8YnIvPgorZW1wdHlvaz10cnVlPGlucHV0IG5hbWU9Ing2IiBlbXB0eW9rPSJ0cnVlIi8+
Cis8YnIvPgorZm9ybWF0PW4qTTtlbXB0eW9rPXRydWU8aW5wdXQgbmFtZT0ieDciIGVtcHR5b2s9
InRydWUiIGZvcm1hdD0ibipNIi8+Cis8YnIvPgorZm9ybWF0PSpNO2VtcHR5b2s9dHJ1ZTxpbnB1
dCBuYW1lPSJ4OCIgZW1wdHlvaz0idHJ1ZSIgZm9ybWF0PSIqTSIvPgorPC9jYXJkPgorPC93bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2lucHV0LWZvcm1h
dC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNl
cy9pbnB1dC1mb3JtYXQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1mb3JtYXQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9X
QVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93
bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCB0aXRsZT0iSW5wdXQiPgorPHA+IFRlc3QgZm9y
IGlucHV0IGZvcm1hdCBpbiBXTUw8L3A+Cis8cD4KK1Bhc3N3b3JkKGRlZmF1bHQ6Kk0pOjxpbnB1
dCBuYW1lPSJkZWZhdWx0Ii8+Cis8YnIvPgorUGFzc3dvcmQoNk0pOiA8aW5wdXQgbmFtZT0iUHdk
IiB0eXBlPSJwYXNzd29yZCIgZm9ybWF0PSI2TSIvPgorPGJyLz4KK1Bhc3N3b3JkKEFBYSk6IDxp
bnB1dCBuYW1lPSJQd2QyIiB0eXBlPSJwYXNzd29yZCIgZm9ybWF0PSJBQWEiLz4gCis8YnIvPgor
b25lLW51bWVyaWMrbG93ZXJjYXNlKE4qYSk6PGlucHV0IG5hbWU9InVwcGVyIiBmb3JtYXQ9Ik4q
YSIvPiAKKzxici8+CitVcHBlcmNhc2Urbm9uLW51bWVyaWMoQUFBO3NpemU9OCk6PGlucHV0IG5h
bWU9InVwcGVyIiBzaXplPSI4IiBmb3JtYXQ9IkFBQSIvPiAKKzxici8+CitMb3dlcmNhc2Urbm9u
LW51bWVyaWMoYWFhO3NpemU9ODt3aWR0aD0yKTo8aW5wdXQgbmFtZT0ibG93ZXIiIHNpemU9Ijgi
IHdpZHRoPSIyIiBmb3JtYXQ9ImFhYSIvPgorPGJyLz4KK051bWVyaWMoNU47bWF4bGVuPTMpOjxp
bnB1dCBuYW1lPSJudW1lcmljIiBtYXhsZW5ndGg9IjMiIGZvcm1hdD0iNU4iLz4KKzxici8+CitO
dW1laXJjK3N5bWJvbHMobm5uKTo8aW5wdXQgbmFtZT0ibnVtZXJpYysiIGZvcm1hdD0ibm5uIi8+
Cis8YnIvPgorVXBwZXJjYXNlK251bWVyaWMrc3ltYm9scyhYWFgpOjxpbnB1dCBuYW1lPSJ1cHBl
cisiIGZvcm1hdD0iWFhYIi8+Cis8YnIvPgorTG93ZXJjYXNlK251bWVyaWMrc3ltYm9scyh4eHgp
OjxpbnB1dCBuYW1lPSJsb3dlcisiIGZvcm1hdD0ieHh4Ii8+Cis8YnIvPgorVXBwZXJjYXNlK251
bWVyaWMrc3ltYm9scyhNTU0pOjxpbnB1dCBuYW1lPSJkZWZfdXBwZXIrIiBmb3JtYXQ9Ik1NTSIv
PgorPGJyLz4KK0xvd2VyY2FzZStudW1lcmljK3N5bWJvbHMobW1tKTo8aW5wdXQgbmFtZT0iZGVm
X2xvd2VyKyIgZm9ybWF0PSJtbW0iLz4KKzxici8+CitNaXhlZCBkYXRhKGFcLU5OKngpPGlucHV0
IG5hbWU9ImFueSIgZm9ybWF0PSJhXC1OTip4Ii8+Cis8YnIvPgorPC9wPgorPC9jYXJkPgorPC93
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQt
Z28ud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvb25ldmVudC1nby53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtZ28ud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIw
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBG
T1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxf
MS4xLnhtbCI+Cis8d21sPgorCis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPiAKKyA8
b25ldmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+CisgIDxnbyBocmVmPSIjY2FyZDIiLz4KKyA8
L29uZXZlbnQ+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgZ28gdGFz
ayB3aXRoIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+d2hlbiBlbnRlciBmb3J3YXJkIHRv
IHRoaXMgY2FyZCwgaXQgd2lsbCBqdW1wIHRvIGNhcmQgMjwvcD4KKzwvY2FyZD4KKzxjYXJkIGlk
PSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hp
Y2ggYmluZHMgZ28gdGFzayB3aXRoIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+d2hpbGUg
Y2FyZCAxIGlzIGxvYWRlZCwgaXQgd2lsbCB0cmlnZ2VyIHRoZSBvbmVudGVyZm9yd2FyZCBldmVu
dCBhbmQganVtcCB0byBjYXJkMiBpbW1lZGlhdGVseTwvcD4KKzxwPlRoaXMgaXMgY2FyZDI8L3A+
Cis8L2NhcmQ+CisKKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy9vbmV2ZW50LW5vb3Aud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1ub29wLndtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1ub29wLndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKworPGNhcmQgaWQ9ImNh
cmQxIiB0aXRsZT0iQ2FyZCAxIj4gCisgPG9uZXZlbnQgdHlwZT0ib25lbnRlcmZvcndhcmQiPgor
IDxub29wLz4KKyA8L29uZXZlbnQ+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2gg
YmluZHMgbm9vcCB0YXNrIHdpdGggb25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8cD53aGVuIGVu
dGVyIGZvcndhcmQgdG8gdGhpcyBjYXJkLCBpdCB3b24ndCBkbyBhbnl0aGluZyBhcyBpZiB0aGUg
b25lbnRlcmZvcndhcmQgZXZlbnQgd2Fzbid0IHRyaWdnZXJlZDwvcD4KKzwvY2FyZD4KKzwvd21s
PiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50
LXByZXYud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvb25ldmVudC1wcmV2LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1wcmV2LndtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9E
VEQvd21sXzEuMS54bWwiPgorPHdtbD4KKworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAx
Ij4gCis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgcHJldiB0YXNrIHdp
dGggb25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8cD5DbGlja2luZyAiR28iIHdpbGwgY2F1c2Ug
aXQgdG8ganVtcCB0byB0aGUgY2FyZDIsIGJ1dCB3aGljaCBiaW5kcyBwcmV2IHRhc2sgdG8gb25l
bnRlcmZvcndhcmQgZXZlbnQgd2l0aGluIG9uZXZlbnQgZWxlbWVudCwgYXMgYSByZXN1bHQsIGl0
IHdpbGwganVtcCBiYWNrIHRvIGNhcmQgMTwvcD4KKzxhbmNob3IgdGl0bGU9IkdvIHRvIGNhcmQy
Ij5HbworPGdvIGhyZWY9IiNjYXJkMiIvPgorPC9hbmNob3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlk
PSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hp
Y2ggYmluZHMgcHJldiB0YXNrIHdpdGggb25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8cD5UaGlz
IGlzIGNhcmQyLiBXaGVuIGNhcmQgMiBpcyBlbnRlcmVkIGZvcndhcmQsIGl0IHdpbGwganVtcCBi
YWNrIHRvIHRoZSBwcmV2aW91cyBwYWdlIDwvcD4KKyA8b25ldmVudCB0eXBlPSJvbmVudGVyZm9y
d2FyZCI+CisgPHByZXYvPgorIDwvb25ldmVudD4KKzwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXJlZnJlc2gud21s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25l
dmVudC1yZWZyZXNoLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvb25ldmVudC1yZWZyZXNoLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8v
V0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorPHdtbD4KKworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4g
CisgPHRpbWVyIG5hbWU9IlQiIHZhbHVlPSIzMCIvPgorIDxvbmV2ZW50IHR5cGU9Im9udGltZXIi
PgorIDxyZWZyZXNoPgorIDxzZXR2YXIgbmFtZT0idmFyIiB2YWx1ZT0iVkFSSUFCTEUiLz4KKyA8
L3JlZnJlc2g+CisgPC9vbmV2ZW50PgorPHA+VGVzdCBmb3Igb25ldmVudCBlbGVtZW50IHdoaWNo
IGJpbmRzIHJlZnJlc2ggdGFzayB3aXRoIG9udGltZXIgZXZlbnQ8L3A+Cis8cD4gV2hlbiB0aGUg
dGltZXIgdGltZW91dCgzcyksIHRoZSBwYWdlIHdpbGwgYmUgcmVmcmVzaC4gQXMgYSBjb25zZXF1
ZW5jZSwgd2UgY2FuIHNlZSB0aGUgZm9sbG93aW5nIHZhcmlhYmxlIHJlZmVyZW5jZSBoYXMgYmVl
biBzdWJzdGl0dXRlZDwvcD4KKzxwIGFsaWduPSJjZW50ZXIiPiBIZXJlIGlzIGEgdmFyaWFibGUg
OiB2YXIgPSAkdmFyIDwvcD4KKzwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXNoYWRvdy53bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXNoYWRvdy53
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2Vz
L29uZXZlbnQtc2hhZG93LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
PHdtbD4KKzx0ZW1wbGF0ZT4KKzxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKzxnbyBo
cmVmPSIjY2FyZDIiLz4KKzwvb25ldmVudD4KKzwvdGVtcGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEi
IHRpdGxlPSJDYXJkIE9uZSI+Cis8b25ldmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+Cis8Z28g
aHJlZj0iI2NhcmQzIi8+Cis8L29uZXZlbnQ+Cis8cD5UZXN0IGZvciBvbmV2ZW50IHNoYWRvd2lu
ZyBpbiBXTUw8L3A+Cis8cD5UaGUgY2FyZC1sZXZlbCBvbmV2ZW50IHdpbGwgc2hhZG93IHRoZSBk
ZWNrLWxldmVsIG9uZXZlbnQuIEFzIGEgcmVzdWx0LCBjYXJkIDEgd29uJ3QganVtcCB0byBjYXJk
MiAgYnV0IHRvIGNhcmQgMyBhY2NvcmRpbmcgdG8gdGhlIGNhcmQtbGV2ZWwgb25ldmVudCdzIHJl
cXVpcmVtZW50LiBBZnRlciBlbnRlcmVkIHRoZSBjYXJkIDMsIHRoZSBkZWNrLWxldmVsIG9uZXZl
bnQgZWxlbWVudCBpc24ndCBzaGFkb3dlZCBieSB0aGlzIGNhcmQsIHNvIGl0IHdpbGwganVtcCB0
byBjYXJkIDIgaW1tZWRpYXRlbHkuPC9wPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQyIiB0aXRs
ZT0iQ2FyZCB0d28iID4KKzxwPlRoaXMgaXMgY2FyZCAyPC9wPgorPC9jYXJkPgorPGNhcmQgaWQ9
ImNhcmQzIiB0aXRsZT0iQ2FyZCBUaHJlZSI+Cis8cD5UaGlzIGlzIGNhcmQgMzwvcD4KKzwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9w
b3N0ZmllbGQtZ2V0LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL3Bvc3RmaWVsZC1nZXQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0ZmllbGQtZ2V0LndtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21s
IFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZv
cnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPjx3bWw+Cis8Y2FyZD4KKzxwPlRlc3QgZm9yIHBvc3Rm
aWVsZCBlbGVtZW50IGluIFdNTCA8L3A+Cis8cD4KKyBDbGljayAiR2V0IiB0byBTZW5kIGRhdGEg
YnkgZ2V0IG1ldGhvZDxiciAvPgorIDxkbyB0eXBlPSJhY2NlcHQiIGxhYmVsPSJHZXQiPgorICA8
Z28gaHJlZj0iLi4vdGVzdC53bWwiIG1ldGhvZD0iZ2V0Ij4KKyAgIDxwb3N0ZmllbGQgbmFtZT0i
aSIgdmFsdWU9IjIiLz4KKyAgIDxwb3N0ZmllbGQgbmFtZT0iaiIgdmFsdWU9IjMwIi8+CisgIDwv
Z28+CisgPC9kbz4KKzwvcD4KKzwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvcG9zdGZpZWxkLXBvc3Qud21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvcG9zdGZpZWxkLXBvc3Qud21s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9w
b3N0ZmllbGQtcG9zdC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01M
IDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3
bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJjYXJkMSI+Cis8cD5UZXN0IGZvciBwb3N0Zmll
bGQgZWxlbWVudCBpbiBXTUw8L3A+Cis8cD4KKyBDbGljayAiUG9zdCIgdG8gU2VuZCBkYXRhIHdp
dGggcG9zdCBtZXRob2Q8YnIvPgorIDxkbyB0eXBlPSJhY2NlcHQiIG5hbWU9Ik9rIiBsYWJlbD0i
UG9zdCI+CisgIDxnbyBocmVmPSIuLi90ZXN0LndtbCIgbWV0aG9kPSJwb3N0Ij4KKyAgIDxwb3N0
ZmllbGQgbmFtZT0iaSIgdmFsdWU9IjIiLz4KKyAgIDxwb3N0ZmllbGQgbmFtZT0iaiIgdmFsdWU9
IjMwIi8+CisgIDwvZ28+CisgPC9kbz4KKzwvcD4KKzwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvc2VsZWN0LWVsZW1lbnQud21sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvc2VsZWN0
LWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy9zZWxlY3QtZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZP
UlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8x
LjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IlNlbGVjdCBUZXN0Ij4K
KzxwPiBUZXN0IGZvciBzZWxlY3QgZWxlbWVudCBpbiBXTUwgPC9wPgorPHA+IFlvdSBjYW4gc2Vs
ZWN0IG9uZSBvciBtb3JlIG9wdGlvbnMsIGFuZCB0aGVuIGNsaWNrICdBbnN3ZXInLCB0aGUgc2Vj
b25kIGNhcmQgd2lsbCB0ZWxsIHlvdSB3aGF0IHlvdSBzZWxlY3RlZDwvcD4KKzxwPgorPHNlbGVj
dCBuYW1lPSJjYXJzIiB0aXRsZT0iU0VMRUNUIiBtdWx0aXBsZT0idHJ1ZSIgPgorICA8b3B0aW9u
IHZhbHVlPSJ2b2x2byIgPlZvbHZvPC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9ImZpYXQiPkZp
YXQ8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0ic2FhYiI+U2FhYjwvb3B0aW9uPgorICA8b3B0
aW9uIHZhbHVlPSJhdWRpIj5BdWRpPC9vcHRpb24+Cis8L3NlbGVjdD4KKzwvcD4KKzxkbyB0eXBl
PSJhY2NlcHQiIGxhYmVsPSJBbnN3ZXIiPgorICA8Z28gaHJlZj0iI2NhcmQyIi8+Cis8L2RvPgor
PC9jYXJkPgorCis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJBbnN3ZXIiPgorPHA+CitZb3Ugc2Vs
ZWN0ZWQ6ICQoY2FycykKKzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZWxlY3Qtb25waWNrLWV2ZW50LndtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3NlbGVjdC1vbnBp
Y2stZXZlbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy9zZWxlY3Qtb25waWNrLWV2ZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8v
V0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQ+Cis8cD4gVGVzdCBmb3Igc2VsZWN0IG9ucGlj
ayBpbnRyaW5zaWMgZXZlbnQgaW4gV01MIDwvcD4KKzxwPiBXaGVuIHlvdSBzZWxlY3QgdGhlICdM
aW9uJyBvcHRpb24sIHdpbGwganVtcCB0byB0ZXN0LndtbDwvcD4KK1BsZWFzZSBjaG9vc2UgeW91
ciBmYXZvdXJpdGUgYW5pbWFsOjxici8+Cis8c2VsZWN0IG5hbWU9IlgiIG11bHRpcGxlPSJ0cnVl
Ij4KKzxvcHRpb24gdmFsdWU9IkQiPkRvZzwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iQyI+Q2F0
PC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJMIiBvbnBpY2s9Ii4uL3Rlc3Qud21sIj5MaW9uPC9v
cHRpb24+Cis8L3NlbGVjdD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZXR2YXItZWxlbWVudC53bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZXR2YXItZWxlbWVudC53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Nl
dHZhci1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwg
MS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21s
PgorIDxjYXJkIGlkPSJmaXJzdGNhcmQiIHRpdGxlPSJUZXN0IGZvciBTZXR2YXIgZWxlbWVudCI+
CisgPHA+IFRlc3QgZm9yIHNldHZhciBlbGVtZW50IGluIFdNTCA8L3A+CisgPHA+VGhpcyBpcyB0
aGUgZmlyc3QgY2FyZCAsIGhhcyB2YXJpYWJsZTogVkFSPSckdmFyJzwvcD4KKyA8cD5DbGljayAi
UmVmcmVzaCIgd2lsbCB1cGRhdGUgdGhlIHZhbHVlIG9mIFZBUiB2YXJhaWJsZSB3aGljaCBzcGVj
aWZpZWQgYnkgc2V0dmFyIGVsZW1lbnQ8L3A+CisgIDxkbyBuYW1lPSJSZWZyZXNoIiB0eXBlPSJh
Y2NlcHQiPiAKKyAgIDxyZWZyZXNoPgorICAgPHNldHZhciBuYW1lPSJ2YXIiIHZhbHVlPSJWQUxV
RSIvPgorICAgPC9yZWZyZXNoPgorICA8L2RvPgorIDwvY2FyZD4KKzwvd21sPgorCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RhcmdldGRlY2sud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFyZ2V0ZGVj
ay53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL3RhcmdldGRlY2sud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdN
TCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisK
Kzx3bWw+Cis8aGVhZD4KKzxhY2Nlc3MgZG9tYWluPSJsb2NhbGhvc3QiIHBhdGg9ImFjY2Vzcy10
YXJnZXQud21sIi8+Cis8L2hlYWQ+Cis8Y2FyZD4KKzxwPiBUZXN0IGZvciBEZWNrIEFjY2VzcyBj
b250cm9sIGluIFdNTC4gPC9wPgorPHA+IFRoaXMgaXMgdGhlIHRhcmdldGRlY2ssIG9ubHkgJy4v
YWNjZXNzLXRhcmdldC53bWwiIGNhbiBhY2Nlc3MgbWUgPC9wPgorPC9jYXJkPgorPC93bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stZ28taW4tYW5j
aG9yLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL3Rhc2stZ28taW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFzay1nby1pbi1hbmNob3Iud21sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21s
IFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZv
cnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgdGl0bGU9IkFuY2hvciBU
YWciPgorPHA+IFRlc3QgZm9yIFdNTCBnbyB0YXNrIGVuY2xvc2VkIHdpdGggYW5jaG9yIGVsZW1l
bnQgPC9wPgorPHA+IGNsaWNrICdOZXh0IHBhZ2UnIHRvIGdvIHRvIHRlc3Qud21sIDwvcD4KKzxw
PgorPGFuY2hvcj5OZXh0IHBhZ2U8Z28gaHJlZj0iLi4vdGVzdC53bWwiLz4gPC9hbmNob3I+Cis8
L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvdGFzay1ub29wLWluLWRvLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1kby53bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1k
by53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisi
aHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJk
IGlkPSJjYXJkMSI+Cis8cD4gVGVzdCBmb3IgTm9vcCB0YXNrIGluIGRvIGVsZW1lbnQgb2YgV01M
LiA8L3A+Cis8cD4gSWYgaXQgcGFzc2VzLCB5b3Ugc2hvdWxkIG5vdCBzZWUgdGhlICJCYWNrIiBi
dXR0b248L3A+CisgPGRvIG5hbWU9ImRvIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJCYWNrIj4KKyA8
bm9vcC8+CisgPC9kbz4KKzwvY2FyZD4gCis8L3dtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1vbmV2ZW50LndtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1v
bmV2ZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvdGFzay1ub29wLWluLW9uZXZlbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9X
QVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93
bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZD4gCis8cD4gVGVzdCBmb3Igbm9vcCB0YXNrIGlu
IG9uZXZlbnQgZWxlbWVudCBvZiBXTUw8L3A+Cis8cD4gSWYgaXQgcGFzc2VzLCB5b3Ugd2lsbCBz
ZWUgdGhlIGNhcmQgb25lIGluIHRoaXMgZGVjazwvcD4KKyAgPG9uZXZlbnQgdHlwZT0ib25lbnRp
bWVyIj4KKyAgPG5vb3AvPgorICA8L29uZXZlbnQ+Cis8cD4gVGhpcyBpcyBDYXJkIG9uZSA8L3A+
Cis8L2NhcmQ+IAorPC93bWw+IApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3Rp
dmVjYXNlcy90YXNrLXByZXYtaW4tYW5jaG9yLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stcHJldi1pbi1hbmNob3Iud21sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLXBy
ZXYtaW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01M
IDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKwor
PHdtbD4KKzxjYXJkIHRpdGxlPSJBbmNob3IgVGFnIj4KKzxwPiBUZXN0IGZvciBXTUwgcHJldiB0
YXNrIGVuY2xvc2VkIHdpdGggYW5jaG9yIGVsZW1lbnQgPC9wPgorPHA+IGNsaWNrICdwcmV2IHBh
Z2UnIHRvIGdvIHRvIHByZXZpb3VzIHBhZ2UgaWYgaXQgaXMgbm90IHRoZSBmaXJzdCBwYWdlIGlu
IGhpc3Rvcnk8L3A+Cis8cD4KKzxhbmNob3I+UHJldiBwYWdlPHByZXYvPjwvYW5jaG9yPgorPC9w
PgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL3Rhc2stcmVmcmVzaC1pbi1hbmNob3Iud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFzay1yZWZyZXNoLWluLWFuY2hvci53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rh
c2stcmVmcmVzaC1pbi1hbmNob3Iud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8v
RFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1s
Ij4KKzx3bWw+Cis8Y2FyZCB0aXRsZT0iJFQiPgorIDxwPiBUZXN0IGZvciByZWZyZXNoIHRhc2sg
d2l0aGluIFdNTCBhbmNob3IgZWxlbWVudC4gPGJyLz4gY2xpY2sgIlJlZnJlc2giIHdpbGwgcmVm
cmVzaCB0aGlzIHBhZ2UsIGFzIGEgcmVzdWx0IHRoZSBwYWdlIHRpdGxlIHdpbGwgYmUgdXBkYXRl
ZC4gPC9wPgorICA8cD4KKyAgIDxhbmNob3I+CisgICAgUmVmcmVzaAorICAgIDxyZWZyZXNoPgor
ICAgIDxzZXR2YXIgbmFtZT0iVCIgdmFsdWU9IlRlc3QgcmVmcmVzaCB0YXNrIi8+CisgICAgPC9y
ZWZyZXNoPgorICAgPC9hbmNob3I+CisgIDwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1nby53bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1n
by53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL3RlbXBsYXRlLWdvLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisK
Kzx3bWw+Cis8dGVtcGxhdGU+CisgPGRvIG5hbWU9ImdvIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJU
ZW1wbGF0ZSBHbyI+CisgIDxnbyBocmVmPSIjY2FyZDIiLz4KKyA8L2RvPgorPC90ZW1wbGF0ZT4K
KzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQgMSI+Cis8cD5UZXN0IGZvciB0ZW1wbGF0ZSBl
bGVtZW50IGluIFdNTC4gVGVtcGxhdGUgZ28gYnV0dG9uIGlzIGdsb2JhbDwvcD4KKzxwPiBUaGlz
IGlzIENhcmQgb25lLCBjbGljayAnVGVtcGxhdGUgR28nIHRvIGp1bXAgdG8gQ2FyZCB0d288L3A+
Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJDYXJkIDIiPgorPHA+VGhpcyBpcyBj
YXJkIHR3by4gPGJyLz5UaGUgZ2xvYmFsIHRlbXBsYXRlIEdvIGJ1dHRvbiBpcyBzdGlsbCB2aXNp
YmxlIGZvciBtZTwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1vbmV2ZW50LndtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RlbXBsYXRlLW9uZXZlbnQud21s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90
ZW1wbGF0ZS1vbmV2ZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
PHdtbD4KKzx0ZW1wbGF0ZT4KKzxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKzxnbyBo
cmVmPSIjY2FyZDIiLz4KKzwvb25ldmVudD4KKzwvdGVtcGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEi
PgorPHA+VGVzdCBmb3IgdGVtcGxhdGUgZWxlbWVudCBpbiBXTUw8L3A+Cis8cD5XaGVuIG90aGVy
IHBhZ2UgZW50ZXIgZm9yd2FyZCB0aGlzIHBhZ2UsIGl0IGZpcnN0IHNob3cgY2FyZCAxLCBhbmQg
dGhlbiBpbW1lZGlhdGVseSBqdW1wIHRvIGNhcmQgMiBiZWNhdXNlIG9mIHRoZSB0ZW1wbGF0ZSBv
bmVudGVyZm9yd2FyZCBldmVudDwvcD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9
ImNhcmQgMiI+Cis8cD4KK1RoaXMgaXMgY2FyZCAyCis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGVtcGxhdGUtb250aW1l
ci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNl
cy90ZW1wbGF0ZS1vbnRpbWVyLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvdGVtcGxhdGUtb250aW1lci53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5v
cmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8dGVtcGxhdGUgb250aW1lcj0iI2NhcmQyIj4K
KzwvdGVtcGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEiPgorPHA+VGVzdCBmb3IgdGVtcGxhdGUgb250
aW1lciBldmVudCBpbiBXTUw8L3A+Cis8cD5UaGlzIGlzIENhcmQgb25lLHdlIHdpbGwganVtcCB0
byBjYXJkIDIgYWZ0ZXIgNXMgYmVjYXVzZSBvZiB0aGUgdGVtcGxhdGUgb250aW1lciBldmVudDwv
cD4KKzx0aW1lciB2YWx1ZT0iNTAiLz4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9
ImNhcmQgMiI+Cis8cD4KK1RoaXMgaXMgY2FyZCAyCis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGltZXIud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGltZXIud21s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90
aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4i
ICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGhl
YWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJtYXgtYWdlPTAi
Lz4KKzwvaGVhZD4KKzxjYXJkIGlkPSJjYXJkMSIgb250aW1lcj0iI2NhcmQyIiB0aXRsZT0iQ2Fy
ZCBvbmUiPgorPHA+IFRoaXMgdGVzdCBjYXNlIGlzIHVzZWQgdG8gdGVzdCB0aW1lciBpbiBXTUwg
PC9wPgorICAgIDx0aW1lciBuYW1lPSJ0aW1lMSIgdmFsdWU9IjUwIi8+CisgICAgPHA+CisgICAg
VGhpcyBpcyBjYXJkIG9uZTxici8+VGhlIHRpbWVyIGlzIHRyaWdnZXJlZCBieSB0aGUgb250aW1l
ciBpbnRyaW5zaWMgZXZlbnQob250aW1lciBhcyBhdHRyaWJ1dGUgb2YgY2FyZCBlbGVtZW50KTxi
ci8+V2hlbiB0aGUgdGltZXIgaXMgdGltZW91dChhZnRlciA1cyksIHdpbGwganVtcCB0byBjYXJk
IHR3by4KKyAgICA8L3A+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQg
dHdvIj4KKyAgICA8b25ldmVudCB0eXBlPSJvbnRpbWVyIj4KKyAgICA8Z28gaHJlZj0iI2NhcmQx
Ii8+CisgICAgPC9vbmV2ZW50PgorICAgIDx0aW1lciBuYW1lPSJ0aW1lcjIiIHZhbHVlPSIzMCIv
PgorICAgIDxwPiAKKyAgICBUaGlzIGlzIGNhcmQgVHdvITxici8+IFRoZSB0aW1lciBpcyB0cmln
Z2VyZWQgYnkgdGhlIG9udGltZXIgaW50cmluc2ljIGV2ZW50KG9udGltZXIgaXMgc3BlY2lmaWVk
IGJ5IG9uZXZlbnQgZWxlbWVudCk8YnIvPldoZW4gdGhlIHRpbWVyIGlzIHRpbWVvdXQoYWZ0ZXIg
M3MpLCB3aWxsIGp1bXAgYmFjayB0byBjYXJkIG9uZS4KKyAgICA8L3A+Cis8L2NhcmQ+Cis8L3dt
bD4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy92YXJpYWJs
ZS1zdWJzdGl0dXRpb24ud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvdmFyaWFibGUtc3Vic3RpdHV0aW9uLndtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdmFyaWFibGUtc3Vic3RpdHV0
aW9uLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4w
Ij8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIg
Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJk
IGlkPSJjYXJkMSIgdGl0bGU9IlRlc3QgdmFyaWFibGUgc3Vic3RpdHV0aW9uIj4KKyA8cD4gVGVz
dCBmb3IgdmFyaWFibGUgc3Vic3RpdHV0aW9uIDwvcD4KKyA8cD4gQ2xpY2sgIlJlZmVyc2giIHRv
IHJlZnJlc2ggdGhlIGNhcmQsIGFuZCB0aGUgdmFyYWlibGUgcmVmZXJlbmNlcyBpbiB0aGUgY2Fy
ZCB3aWxsIGJlIHN1YnN0aXR1ZWQ8L3A+CisgIDxhbmNob3I+IFJlZnJlc2ggPGJyLz4KKyAgPHJl
ZnJlc2g+IAorICA8c2V0dmFyIG5hbWU9ImhpIiB2YWx1ZT0iaGVsbG8iLz4KKyAgPHNldHZhciBu
YW1lPSJuYW1lIiB2YWx1ZT0iIFlpIGNoYW8iLz4KKyAgPHNldHZhciBuYW1lPSJuYW1lMiIgdmFs
dWU9IiQobmFtZTplKSIvPgorICA8c2V0dmFyIG5hbWU9Im5hbWUzIiB2YWx1ZT0iJChuYW1lMjp1
KSIvPgorICA8L3JlZnJlc2g+CisgIDwvYW5jaG9yPgorICA8cD5zZXQgaGkgPSAiaGVsbG8iLCBu
YW1lID0gIiBZaSBjaGFvIiA8YnIvPgorICA8IVtDREFUQVskKGhpKSwkbmFtZV1dPiA9PiAkKGhp
KSwkbmFtZSA8YnIvPgorICA8IVtDREFUQVskaGksJChuYW1lOmVzQ2FwZSldXT4gPT4gJGhpLCQo
bmFtZTplc0NhcGUpIDxici8+CisgIDwhW0NEQVRBWyRoaSwkKG5hbWU6ZSldXT4gPT4gJGhpLCQo
bmFtZTplKSA8YnIvPgorICA8IVtDREFUQVskaGksJChuYW1lOlUpXV0+ID0+ICRoaSwkKG5hbWU6
VSkgPGJyLz4KKyAgPC9wPgorICA8cD5zZXQgbmFtZTIgPSAkJChuYW1lOmUpIDxici8+CisgIDwh
W0NEQVRBWyQoaGkpLCQobmFtZTIpXV0+ID0+ICQoaGkpLCQobmFtZTIpIDxici8+CisgIDwhW0NE
QVRBWyQoaGkpLCQkKG5hbWU6ZSldXT4gPT4gJChoaSksJCQobmFtZTplKSA8YnIvPgorICA8L3A+
CisgIDxwPnNldCBuYW1lMyA9ICQkKG5hbWUyOnUpIDxici8+CisgIDwhW0NEQVRBWyQoaGkpLCRu
YW1lM11dPiA9PiAkKGhpKSwkbmFtZTM8YnIvPgorICA8IVtDREFUQVskKGhpKSwkKG5hbWUzOmUp
XV0+ID0+ICQoaGkpLCQobmFtZTM6ZSkgPGJyLz4KKyAgPC9wPgorIDwvY2FyZD4KKzwvd21sPgo=
</data>
<flag name="review"
          id="10132"
          type_id="1"
          status="-"
          setter="rwlbuis"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22955</attachid>
            <date>2008-08-23 20:03:34 -0700</date>
            <delta_ts>2008-11-12 11:17:27 -0800</delta_ts>
            <desc>Patch to implement WML</desc>
            <filename>webkit-wml.patch</filename>
            <type>text/plain</type>
            <size>336038</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL3d0Zi9BU0NJSUNUeXBlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvd3RmL0FTQ0lJQ1R5cGUuaAkocmV2aXNpb24gMzU3ODApCisrKyBKYXZhU2Ny
aXB0Q29yZS93dGYvQVNDSUlDVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjYsNiArMTI2LDEy
IEBAIG5hbWVzcGFjZSBXVEYgewogI2VuZGlmCiAgICAgaW5saW5lIGludCB0b0FTQ0lJSGV4VmFs
dWUoaW50IGMpIHsgQVNTRVJUKGlzQVNDSUlIZXhEaWdpdChjKSk7IHJldHVybiBjIDwgJ0EnID8g
YyAtICcwJyA6IChjIC0gJ0EnICsgMTApICYgMHhGOyB9CiAKKyAgICBpbmxpbmUgYm9vbCBpc0FT
Q0lJUHJpbnRhYmxlKGNoYXIgYykgeyByZXR1cm4gYyA+PSAwNDAgJiYgYyA8PSAwMTc2OyB9Cisg
ICAgaW5saW5lIGJvb2wgaXNBU0NJSVByaW50YWJsZSh1bnNpZ25lZCBzaG9ydCBjKSB7IHJldHVy
biBjID49IDA0MCAmJiBjIDw9IDAxNzY7IH0KKyNpZiAhQ09NUElMRVIoTVNWQykgfHwgZGVmaW5l
ZChfTkFUSVZFX1dDSEFSX1RfREVGSU5FRCkKKyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJUHJpbnRh
YmxlKHdjaGFyX3QgYykgeyByZXR1cm4gYyA+PSAwNDAgJiYgYyA8PSAwMTc2OyB9CisjZW5kaWYK
KyAgICBpbmxpbmUgYm9vbCBpc0FTQ0lJUHJpbnRhYmxlKGludCBjKSB7IHJldHVybiBjID49IDA0
MCAmJiBjIDw9IDAxNzY7IH0KIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCShyZXZp
c2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5
KQpAQCAtMzcsNiArMzcsNyBAQCBWUEFUSCA9IFwKICAgICAkKFdlYkNvcmUpL3BsdWdpbnMgXAog
ICAgICQoV2ViQ29yZSkvc3RvcmFnZSBcCiAgICAgJChXZWJDb3JlKS94bWwgXAorICAgICQoV2Vi
Q29yZSkvd21sIFwKICAgICAkKFdlYkNvcmUpL3N2ZyBcCiAjCiAKQEAgLTM3OCw2ICszNzksNyBA
QCBhbGwgOiBcCiAgICAgRG9jVHlwZVN0cmluZ3MuY3BwIFwKICAgICBIVE1MRW50aXR5TmFtZXMu
YyBcCiAgICAgSFRNTE5hbWVzLmNwcCBcCisgICAgV01MTmFtZXMuY3BwIFwKICAgICBKU1NWR0Vs
ZW1lbnRXcmFwcGVyRmFjdG9yeS5jcHAgXAogICAgIFNWR0VsZW1lbnRGYWN0b3J5LmNwcCBcCiAg
ICAgU1ZHTmFtZXMuY3BwIFwKQEAgLTQ5Myw3ICs0OTUsNyBAQCBYUGF0aEdyYW1tYXIuY3BwIDog
eG1sL1hQYXRoR3JhbW1hci55ICQoCiAKICMgdXNlciBhZ2VudCBzdHlsZSBzaGVldHMKIAotVVNF
Ul9BR0VOVF9TVFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3Jl
KS9jc3MvcXVpcmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3MgJChXZWJDb3Jl
KS9jc3Mvc3ZnLmNzcyAKK1VTRVJfQUdFTlRfU1RZTEVfU0hFRVRTID0gJChXZWJDb3JlKS9jc3Mv
aHRtbDQuY3NzICQoV2ViQ29yZSkvY3NzL3F1aXJrcy5jc3MgJChXZWJDb3JlKS9jc3Mvdmlldy1z
b3VyY2UuY3NzICQoV2ViQ29yZSkvY3NzL3N2Zy5jc3MgJChXZWJDb3JlKS9jc3Mvd21sLmNzcwog
VXNlckFnZW50U3R5bGVTaGVldHMuaCA6IGNzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5wbCAkKFVT
RVJfQUdFTlRfU1RZTEVfU0hFRVRTKQogCXBlcmwgJDwgJEAgVXNlckFnZW50U3R5bGVTaGVldHNE
YXRhLmNwcCAkKFVTRVJfQUdFTlRfU1RZTEVfU0hFRVRTKQogCkBAIC01MjksNiArNTMxLDkgQEAg
ZW5kaWYKIFhNTE5hbWVzLmNwcCA6IGRvbS9tYWtlX25hbWVzLnBsIHhtbC94bWxhdHRycy5pbgog
CXBlcmwgLUkgJChXZWJDb3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tYXR0cnMgJChXZWJDb3Jl
KS94bWwveG1sYXR0cnMuaW4KIAorV01MTmFtZXMuY3BwIDogZG9tL21ha2VfbmFtZXMucGwgd21s
L1dNTFRhZ05hbWVzLmluIHdtbC9XTUxBdHRyaWJ1dGVOYW1lcy5pbgorCXBlcmwgLUkgJChXZWJD
b3JlKS9iaW5kaW5ncy9zY3JpcHRzICQ8IC0tdGFncyAkKFdlYkNvcmUpL3dtbC9XTUxUYWdOYW1l
cy5pbiAtLWF0dHJzICQoV2ViQ29yZSkvd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluIC0tb3V0cHV0
IC4KKwogIyAtLS0tLS0tLQogCiBpZmVxICgkKGZpbmRzdHJpbmcgRU5BQkxFX1NWRywkKEZFQVRV
UkVfREVGSU5FUykpLCBFTkFCTEVfU1ZHKQpJbmRleDogV2ViQ29yZS9XZWJDb3JlLnBybwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUucHJvCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNv
cmUvV2ViQ29yZS5wcm8JKHdvcmtpbmcgY29weSkKQEAgLTY1LDYgKzY1LDcgQEAgd2luMzItZysr
IHsKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfSUNPTkRBVEFCQVNFPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9JQ09OREFUQUJBU0U9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YUEFUSD0u
KTogREVGSU5FUyArPSBFTkFCTEVfWFBBVEg9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
WEJMPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YQkw9MQorIyFjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfV01MPS4pOiBERUZJTkVTICs9IEVOQUJMRV9XTUw9MQogIWNvbnRhaW5zKERFRklORVMsIEVO
QUJMRV9TVkc9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWRz0xCiAjIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9TVkdfRk9OVFM9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19GT05UUz0xCiAhY29u
dGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19GSUxURVJTPS4pOiBERUZJTkVTICs9IEVOQUJMRV9T
VkdfRklMVEVSUz0xCkBAIC0xNTIsNiArMTUzLDcgQEAgSU5DTFVERVBBVEggKz0gICQkUFdEIFwK
ICAgICAgICAgICAgICAgICAkJFBXRC9oaXN0b3J5IFwKICAgICAgICAgICAgICAgICAkJFBXRC94
bWwgXAogICAgICAgICAgICAgICAgICQkUFdEL2h0bWwgXAorICAgICAgICAgICAgICAgICQkUFdE
L3dtbCBcCiAgICAgICAgICAgICAgICAgJCRQV0QvYmluZGluZ3MvanMgXAogICAgICAgICAgICAg
ICAgICQkUFdEL3N2ZyBcCiAgICAgICAgICAgICAgICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMgXApAQCAtMTI1MCw2ICsxMjUyLDUwIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9Y
Qkw9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9YQkw9MQog
fQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVfV01MPTEpIHsKKyAgICBTT1VSQ0VTICs9IFwK
KyAgICAgICAgd21sL1dNTERvY3VtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxUb2tlbml6ZXIu
Y3BwIFwKKyAgICAgICAgd21sL1dNTEVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTENhcmRF
bGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxBRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwv
V01MQW5jaG9yRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MVGFza0VsZW1lbnQuY3BwIFwK
KyAgICAgICAgd21sL1dNTFByZXZFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxHb0VsZW1l
bnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFJlZnJlc2hFbGVtZW50LmNwcCBcCisgICAgICAgIHdt
bC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxTZXR2YXJFbGVtZW50
LmNwcCBcCisgICAgICAgIHdtbC9XTUxFbGVtZW50RmFjdG9yeS5jcHAgXAorICAgICAgICB3bWwv
V01MQnJ3Q29udGV4dC5jcHAgXAorICAgICAgICB3bWwvV01MRG9FbGVtZW50LmNwcCBcCisgICAg
ICAgIHdtbC9XTUxUZXh0LmNwcCBcCisgICAgICAgIHdtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3Bw
IFwKKyAgICAgICAgd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgXAorICAgICAgICB3
bWwvV01MVGltZXJFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxIZWxwZXIuY3BwIFwKKyAg
ICAgICAgd21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFNlbGVjdEVs
ZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwIFwKKyAgICAgICAg
d21sL1dNTElucHV0RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MVGFibGVFbGVtZW50LmNw
cCBcCisgICAgICAgIHdtbC9XTUxJbWFnZUVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFBF
bGVtZW50LmNwcAorCisgICAgRkVBVFVSRV9ERUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1dN
TD0xCisKKyAgICBXTUxfTkFNRVMgPSAkJFBXRC93bWwvV01MVGFnTmFtZXMuaW4KKworICAgIHdt
bG5hbWVzX2Eub3V0cHV0ID0gJCRHRU5FUkFURURfU09VUkNFU19ESVIvV01MTmFtZXMuY3BwCisg
ICAgd21sbmFtZXNfYS5jb21tYW5kcyA9IHBlcmwgJCRQV0Qva3N2ZzIvc2NyaXB0cy9tYWtlX25h
bWVzLnBsIC0tdGFncyAkJFBXRC93bWwvV01MVGFnTmFtZXMuaW4gLS1hdHRycyAkJFBXRC93bWwv
V01MQXR0cmlidXRlTmFtZXMuaW4gLS1uYW1lc3BhY2UgV01MIC0tY3BwTmFtZXNwYWNlIFdlYkNv
cmUgLS1uYW1lc3BhY2VVUkkgJ2h0dHA6Ly93d3cud2FwZm9ydW0ub3JnLycgIC0tYXR0cnNOdWxs
TmFtZXNwYWNlIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiIC0tb3V0cHV0ICQk
R0VORVJBVEVEX1NPVVJDRVNfRElSCisgICAgd21sbmFtZXNfYS5pbnB1dCA9IFdNTF9OQU1FUwor
ICAgIHdtbG5hbWVzX2EuZGVwZW5kZW5jeV90eXBlID0gVFlQRV9DCisgICAgd21sbmFtZXNfYS5D
T05GSUcgPSB0YXJnZXRfcHJlZGVwcworICAgIHdtbG5hbWVzX2EudmFyaWFibGVfb3V0ID0gR0VO
RVJBVEVEX1NPVVJDRVMKKyAgICB3bWxuYW1lc19hLmNsZWFuID0gJHtRTUFLRV9GSUxFX09VVH0g
JHtRTUFLRV9WQVJfR0VORVJBVEVEX1NPVVJDRVNfRElSX1NMQVNIfVdNTE5hbWVzLmgKKyAgICBh
ZGRFeHRyYUNvbXBpbGVyKHdtbG5hbWVzX2EpCit9CisKIGNvbnRhaW5zKERFRklORVMsIEVOQUJM
RV9TVkc9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9TVkc9
MQogCkBAIC0xNjM0LDYgKzE2ODAsOCBAQCBTT1VSQ0VTICs9IFwKICAgICAgICAgc3ZnZWxlbWVu
dHdyYXBwZXJfaGVhZGVyLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9GSUxFUwogICAgICAgICBh
ZGRFeHRyYUNvbXBpbGVyKHN2Z2VsZW1lbnR3cmFwcGVyX2hlYWRlcikKIAorCisKICAgICAgICAg
IyBHRU5FUkFUT1IgNS1EOgogICAgICAgICB4bGlua25hbWVzLm91dHB1dCA9ICQkR0VORVJBVEVE
X1NPVVJDRVNfRElSL1hMaW5rTmFtZXMuY3BwCiAgICAgICAgIHhsaW5rbmFtZXMuY29tbWFuZHMg
PSBwZXJsIC1JJCRQV0QvYmluZGluZ3Mvc2NyaXB0cyAkJFBXRC9kb20vbWFrZV9uYW1lcy5wbCAt
LWF0dHJzICQkUFdEL3N2Zy94bGlua2F0dHJzLmluIC0tbmFtZXNwYWNlIFhMaW5rIC0tY3BwTmFt
ZXNwYWNlIFdlYkNvcmUgLS1uYW1lc3BhY2VVUkkgJ2h0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp
bmsnIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiIC0tb3V0cHV0RGlyICQkR0VO
RVJBVEVEX1NPVVJDRVNfRElSCkBAIC0xNzc0LDcgKzE4MjIsNyBAQCBhZGRFeHRyYUNvbXBpbGVy
KGNvbG9yZGF0YSkKIAogIyBHRU5FUkFUT1IgOToKIHN0eWxlc2hlZXRzLm91dHB1dCA9ICQkR0VO
RVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAKLXN0eWxlc2hl
ZXRzLmNvbW1hbmRzID0gcGVybCAkJFBXRC9jc3MvbWFrZS1jc3MtZmlsZS1hcnJheXMucGwgLS1w
cmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJCRHRU5FUkFURURfU09VUkNFU19ESVIv
VXNlckFnZW50U3R5bGVTaGVldHMuaCAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRT
dHlsZVNoZWV0c0RhdGEuY3BwICQkUFdEL2Nzcy9odG1sNC5jc3MgJCRQV0QvY3NzL3F1aXJrcy5j
c3MgJCRQV0QvY3NzL3N2Zy5jc3MgJCRQV0QvY3NzL3ZpZXctc291cmNlLmNzcworc3R5bGVzaGVl
dHMuY29tbWFuZHMgPSBwZXJsICQkUFdEL2Nzcy9tYWtlLWNzcy1maWxlLWFycmF5cy5wbCAtLXBy
ZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9V
c2VyQWdlbnRTdHlsZVNoZWV0cy5oICQkR0VORVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0
eWxlU2hlZXRzRGF0YS5jcHAgJCRQV0QvY3NzL2h0bWw0LmNzcyAkJFBXRC9jc3MvcXVpcmtzLmNz
cyAkJFBXRC9jc3Mvc3ZnLmNzcyAkJFBXRC9jc3Mvdmlldy1zb3VyY2UuY3NzICQkUFdEL2Nzcy93
bWwuY3NzCiBzdHlsZXNoZWV0cy5pbnB1dCA9IFNUWUxFU0hFRVRTX0VNQkVECiBzdHlsZXNoZWV0
cy5DT05GSUcgPSB0YXJnZXRfcHJlZGVwcwogc3R5bGVzaGVldHMudmFyaWFibGVfb3V0ID0gR0VO
RVJBVEVEX1NPVVJDRVMKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC00NzgsNiArNDc4LDY0IEBACiAJCTRCNkZB
NkY3MEMzOUU0QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjZGQTZGNjBDMzlFNEExMDAwODcwMTEg
LyogU21hcnRSZXBsYWNlQ0YuY3BwICovOyB9OwogCQk0QjhBRjRBQTBCMUNFMDJCMDA2ODc2OTAg
LyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QjhBRjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJkQWNj
ZXNzUG9saWN5LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNEJBRTk1QjEwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJBRTk1QjAwQjJG
QTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTRDNkI5OTRFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxBY2Nlc3NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTE2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50
LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NEYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1l
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTE3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggKi87IH07CisJCTRDNkI5
OTUwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxODBFNTJFMzczMDA0ODdCQjcgLyog
V01MQUVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk1MTBFNTJFMzczMDA0ODdCQjcgLyogV01M
QUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTE5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5oICovOyB9OworCQk0QzZC
OTk1MjBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQTBFNTJFMzczMDA0ODdC
QjcgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTUzMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQjBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxl
bWVudC5oICovOyB9OworCQk0QzZCOTk1NDBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmlidXRl
TmFtZXMuaW4gaW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTFDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBdHRyaWJ1dGVOYW1lcy5pbiAqLzsgfTsK
KwkJNEM2Qjk5NTUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUQwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuY3BwICovOyB9OworCQk0QzZCOTk1NjBFNTJFMzczMDA0
ODdCQjcgLyogV01MQnJ3Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEM2Qjk5MUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQu
aCAqLzsgfTsKKwkJNEM2Qjk5NTcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFG
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTU4
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjAwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TENhcmRFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTU5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxE
b2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTkyMTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk1QTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTIyMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxEb2N1bWVudC5oICovOyB9OworCQk0QzZCOTk1QjBFNTJFMzczMDA0ODdCQjcgLyogV01M
RG9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRDNkI5OTIzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuY3BwICovOyB9Owor
CQk0QzZCOTk1QzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyNDBFNTJFMzczMDA0ODdC
QjcgLyogV01MRG9FbGVtZW50LmggKi87IH07CisJCTRDNkI5OTVEMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTI1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmNwcCAqLzsgfTsK
KwkJNEM2Qjk5NUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTI2MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTVGMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxFbGVtZW50RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkyNzBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rvcnku
Y3BwICovOyB9OworCQk0QzZCOTk2MDBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovOyB9OworCQk0QzZC
OTk2MTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTI5MEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxHb0VsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2MjBFNTJFMzczMDA0ODdCQjcgLyog
V01MR29FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QzZCOTkyQTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmggKi87IH07CisJ
CTRDNkI5OTYzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MkIwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEhlbHBlci5jcHAgKi87IH07CisJCTRDNkI5OTY0MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxIZWxwZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTJDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuaCAqLzsgfTsKKwkJNEM2Qjk5
NjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyRDBFNTJFMzczMDA0ODdCQjcg
LyogV01MSW1hZ2VFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjYwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNEM2Qjk5MkUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5o
ICovOyB9OworCQk0QzZCOTk2NzBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJG
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnB1dEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2
ODBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzMDBFNTJFMzczMDA0ODdCQjcgLyog
V01MSW5wdXRFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTY5MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNp
Y0V2ZW50SGFuZGxlci5jcHAgKi87IH07CisJCTRDNkI5OTZBMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXIuaCAqLzsgfTsKKwkJNEM2Qjk5NkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9w
dGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5MzMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwICov
OyB9OworCQk0QzZCOTk2QzBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NkQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxl
bWVudC5jcHAgKi87IH07CisJCTRDNkI5OTZFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
MzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTZGMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTM3MEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxQb3N0ZmllbGRFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzAwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTM4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0Zmll
bGRFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTcxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQcmV2
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTkzOTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwICovOyB9Owor
CQk0QzZCOTk3MjBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNBMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk3MzBFNTJFMzczMDA0ODdC
QjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hF
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJl
c2hFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTkzQzBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuaCAqLzsgfTsK
KwkJNEM2Qjk5NzUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0QwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3NjBFNTJF
MzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0UwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNl
bGVjdEVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNl
dHZhckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5M0YwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwICov
OyB9OworCQk0QzZCOTk3ODBFNTJFMzczMDA0ODdCQjcgLyogV01MU2V0dmFyRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDAwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NzkwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0MTBFNTJFMzczMDA0ODdCQjcgLyogV01M
VGFibGVFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5N0EwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhYmxlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5NDIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5oICovOyB9
OworCQk0QzZCOTk3QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gaW4gUmVzb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQzMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUYWdOYW1lcy5pbiAqLzsgfTsKKwkJNEM2Qjk5N0MwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRhc2tFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVu
dC5jcHAgKi87IH07CisJCTRDNkI5OTdEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
NDUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhc2tFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTdF
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDYwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFRlbXBsYXRlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTdGMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0
ZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5ODAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
NDgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwICovOyB9OworCQk0QzZCOTk4MTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEM2Qjk5NDkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCAqLzsg
fTsKKwkJNEM2Qjk5ODIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0QTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5ODMwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NEIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRp
bWVyRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk4NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9r
ZW5pemVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTRDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuY3BwICovOyB9OworCQk0
QzZCOTk4NTBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0RDBFNTJFMzczMDA0ODdCQjcg
LyogV01MVG9rZW5pemVyLmggKi87IH07CisJCTRDRjZEMzAxMEU1NTZGNEMwMEVEM0Y3NCAvKiBX
TUxOYW1lcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICovOyB9OworCQk0Q0Y2
RDMwMjBFNTU2RjREMDBFRDNGNzQgLyogV01MTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDQTNBQjQ4MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxO
YW1lcy5oICovOyB9OwogCQk0RTE5NTkyMTBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJl
TmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NEUxOTU5MUYwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCAqLzsgfTsK
IAkJNEUxOTU5MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyMDBBMzlEQUJB
MDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuaCAqLzsgfTsKIAkJNEUxOTU5MjkwQTM5REFD
QzAwMjIwRkU1IC8qIE1lZGlhUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5MjMwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnku
Y3BwICovOyB9OwpAQCAtNTAyOSw2ICs1MDg3LDY1IEBACiAJCTRCNkZBNkY2MEMzOUU0QTEwMDA4
NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBTbWFydFJlcGxhY2VDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTRCOEFGNEE5MEIxQ0UwMkIwMDY4NzY5MCAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZEFjY2Vzc1BvbGljeS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0QkFFOTVCMDBCMkZBOUNFMDBBRUQ4QTAgLyog
RWRpdG9yRGVsZXRlQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVk
aXRvckRlbGV0ZUFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkx
NjBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MQWNjZXNzRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTE3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NF
bGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxBY2Nlc3NFbGVt
ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTE4MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV01MQUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZC
OTkxOTBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdNTEFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRDNkI5OTFBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEFuY2hvckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdN
TEFuY2hvckVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUMw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBXTUxBdHRyaWJ1dGVOYW1lcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5MUQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEJyd0NvbnRleHQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxRTBFNTJFMzczMDA0ODdCQjcgLyogV01MQnJ3
Q29udGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQnJ3Q29udGV4
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxRjBFNTJFMzczMDA0ODdC
QjcgLyogV01MQ2FyZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdNTENhcmRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxDYXJkRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkyMTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTERvY3VtZW50LmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTERvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxEb2N1
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyMzBFNTJFMzczMDA0
ODdCQjcgLyogV01MRG9FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXTUxEb0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTkyNDBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXTUxEb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5MjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEVsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyNjBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyNzBFNTJFMzczMDA0ODdCQjcgLyog
V01MRWxlbWVudEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdNTEVsZW1lbnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyOTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxHb0VsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyQTBFNTJFMzczMDA0
ODdCQjcgLyogV01MR29FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXTUxHb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MkIw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV01MSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5MkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV01MSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTRDNkI5OTJEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEltYWdlRWxlbWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxJbWFnZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdN
TEltYWdlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyRjBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbnB1dEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkzMDBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxJbnB1dEVsZW1lbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2
ZW50SGFuZGxlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MSW50cmlu
c2ljRXZlbnRIYW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMz
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxPcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVs
ZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE9wdGlvbkVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzUwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBXTUxQRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5
OTM2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gV01MUEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5MzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFBvc3RmaWVsZEVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzODBFNTJFMzczMDA0ODdC
QjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV01MUG9zdGZpZWxkRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0QzZCOTkzOTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFByZXZFbGVtZW50LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0EwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBy
ZXZFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxQcmV2RWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzQjBFNTJFMzczMDA0
ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IFdNTFJlZnJlc2hFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxSZWZyZXNoRWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzRDBFNTJFMzczMDA0ODdCQjcgLyog
V01MU2VsZWN0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV01MU2VsZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
NkI5OTNFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxTZWxlY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTRDNkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVt
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxTZXR2YXJF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDAwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdNTFNldHZhckVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5NDEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVGFibGVFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDIwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhYmxlRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVGFi
bGVFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQzMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUYWdOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV01M
VGFnTmFtZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQ0MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV01MVGFza0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0QzZCOTk0NTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1w
bGF0ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdN
TFRlbXBsYXRlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5
OTQ3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFRlbXBsYXRlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0QzZCOTk0ODBFNTJFMzczMDA0ODdCQjcgLyogV01MVGV4dC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVGV4dC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
ZXh0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUZXh0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTRBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
aW1lckVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdN
TFRpbWVyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTRC
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFdNTFRpbWVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0QzZCOTk0QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxUb2tlbml6ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0RDBFNTJFMzczMDA0ODdCQjcgLyogV01M
VG9rZW5pemVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUb2tlbml6
ZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNENBM0FCNDgwRTU1NkYyNDAwRTlD
MEMwIC8qIFdNTE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXTUxO
YW1lcy5oOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29y
ZS9XTUxOYW1lcy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTRDQTNBQjQ5MEU1
NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gV01MTmFtZXMuY3BwOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVy
aXZlZFNvdXJjZXMvV2ViQ29yZS9XTUxOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9P
VDsgfTsKKwkJNENERTU0RUMwRTU1Nzk3ODAwODlFMjZDIC8qIHdtbC5jc3MgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IHdtbC5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1
OTFGMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFGZWF0dXJlTmFtZXMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk0RTE5NTkyMDBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFG
ZWF0dXJlTmFtZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRmVh
dHVyZU5hbWVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1OTIzMEEzOURB
Q0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBNZWRpYVF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTYzMzcsNyArNjQ1NCw3IEBACiAJCTkzRUVDMUY3MDlDMjg3NzcwMEM1MTVEMSAvKiBXaGVlbEV2
ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXaGVlbEV2ZW50LmlkbDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZhc1Bh
dHRlcm4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzUGF0
dGVybi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjcwMDlDMzIxODgw
MEM1MTVEMSAvKiBDYW52YXNTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDYW52YXNTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkz
RjE5QjE5MDgyNDVFNTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0
LnhtbDsgcGF0aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRo
ID0gODsgdXNlc1RhYnMgPSAwOyB9OworCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5m
by5wbGlzdCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOTNGMTlCMUEw
ODI0NUU1QTAwMUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUlu
SW5kZXggPSAwOyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9Q
Uk9EVUNUU19ESVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3Jl
LmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
ImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5bGliOyBwYXRoID0g
L3Vzci9saWIvbGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsK
IAkJOTNGOEIzMDUwQTMwMEZFMTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3IucG0gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSB0ZXh0LnNjcmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvci5wbTsgcGF0aCA9IHNjcmlw
dHMvQ29kZUdlbmVyYXRvci5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg1NjEs
NiArODY3OCw3IEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8gPSB7
CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTRDNkI5OTE1MEU1MkUz
NzMwMDQ4N0JCNyAvKiB3bWwgKi8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNv
bmZpZy5oICovLAogCQkJCUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4
LmggKi8sCiAJCQkJOTMwNzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERlcml2ZWRTb3VyY2VzLm1h
a2UgKi8sCkBAIC04OTA1LDYgKzkwMjMsNjkgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNU
YWJzID0gMDsKIAkJfTsKKwkJNEM2Qjk5MTUwRTUyRTM3MzAwNDg3QkI3IC8qIHdtbCAqLyA9IHsK
KwkJCWlzYSA9IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNEM2Qjk5MTYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTE3MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MTgwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkxOTBFNTJFMzczMDA0
ODdCQjcgLyogV01MQUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcg
LyogV01MQW5jaG9yRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MUIwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkxQzBFNTJFMzczMDA0ODdCQjcg
LyogV01MQXR0cmlidXRlTmFtZXMuaW4gKi8sCisJCQkJNEM2Qjk5MUQwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEJyd0NvbnRleHQuY3BwICovLAorCQkJCTRDNkI5OTFFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxCcndDb250ZXh0LmggKi8sCisJCQkJNEM2Qjk5MUYwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TENhcmRFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyMDBFNTJFMzczMDA0ODdCQjcgLyogV01M
Q2FyZEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyMTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9j
dW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTIyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVu
dC5oICovLAorCQkJCTRDNkI5OTIzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuY3Bw
ICovLAorCQkJCTRDNkI5OTI0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuaCAqLywK
KwkJCQk0QzZCOTkyNTBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MjYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTky
NzBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwICovLAorCQkJCTRDNkI5
OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovLAorCQkJCTRDNkI5
OTI5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxHb0VsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTJB
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxHb0VsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyQjBFNTJF
MzczMDA0ODdCQjcgLyogV01MSGVscGVyLmNwcCAqLywKKwkJCQk0QzZCOTkyQzBFNTJFMzczMDA0
ODdCQjcgLyogV01MSGVscGVyLmggKi8sCisJCQkJNEM2Qjk5MkQwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEltYWdlRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MkUwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEltYWdlRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTJGMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxJbnB1dEVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTMwMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxJbnB1dEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzMTBFNTJFMzczMDA0ODdCQjcgLyogV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCAqLywKKwkJCQk0QzZCOTkzMjBFNTJFMzczMDA0ODdC
QjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi8sCisJCQkJNEM2Qjk5MzMwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTM0MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzUwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzNjBFNTJFMzczMDA0
ODdCQjcgLyogV01MUEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzNzBFNTJFMzczMDA0ODdCQjcg
LyogV01MUG9zdGZpZWxkRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MzgwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzOTBFNTJFMzczMDA0
ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTNBMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oICovLAorCQkJCTRDNkI5OTNCMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxSZWZyZXNoRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5M0MwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5M0QwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTNFMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5M0YwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQwMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5NDEwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5NDIwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTQzMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxUYWdOYW1lcy5pbiAqLywKKwkJCQk0QzZCOTk0NDBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGFza0VsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQ1MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUYXNrRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
ZW1wbGF0ZUVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQ3MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUZW1wbGF0ZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0ODBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGV4dC5jcHAgKi8sCisJCQkJNEM2Qjk5NDkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQu
aCAqLywKKwkJCQk0QzZCOTk0QTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNw
cCAqLywKKwkJCQk0QzZCOTk0QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50Lmgg
Ki8sCisJCQkJNEM2Qjk5NEMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5jcHAgKi8s
CisJCQkJNEM2Qjk5NEQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovLAorCQkJ
KTsKKwkJCXBhdGggPSB3bWw7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQk1
MTI2RTZCNjBBMkUzQUVGMDA1QzI5RkEgLyogaWNvbiAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3Vw
OwogCQkJY2hpbGRyZW4gPSAoCkBAIC05MDEyLDYgKzkxOTMsOCBAQAogCQk2NTY1ODBFQzA5RDEy
QjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7
CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0Q0EzQUI0ODBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFt
ZXMuaCAqLywKKwkJCQk0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICov
LAogCQkJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAvKiBDaGFyc2V0RGF0YS5jcHAgKi8sCiAJ
CQkJNjU2NTgxQUQwOUQxNEVFNjAwMEU2MUQ3IC8qIENvbG9yRGF0YS5jICovLAogCQkJCTY1NjU4
MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFyLmNwcCAqLywKQEAgLTEyODMzLDYgKzEz
MDE2LDggQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlz
YSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNENERTU0RUMwRTU1Nzk3ODAwODlF
MjZDIC8qIHdtbC5jc3MgKi8sCisJCQkJMzE2MTFFNTQwRTFDNEQ0QTAwRjZBNTc5IC8qIFdlYktp
dENTU1RyYW5zZm9ybVZhbHVlLmlkbCAqLywKIAkJCQlBODBFNkNEQTBBMTk4OUNBMDA3RkI4QzUg
LyogQ291bnRlci5oICovLAogCQkJCTkzMDcwNUM3MDlFMEM5NUYwMEIxN0ZFNCAvKiBDb3VudGVy
LmlkbCAqLywKIAkJCQlBODBFNkNCQjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VW
YWx1ZS5jcHAgKi8sCkBAIC0xNTM4NCw2ICsxNTU2OSwzNCBAQAogCQkJCTMxNjExRTYzMEUxQzRF
MTQwMEY2QTU3OSAvKiBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZUludGVybmFsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzNBNDRERTBFMjZEMjAyMDBDMTRERkEgLyogTlNSZXNvbHZlci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQkMzQTQ0RTMwRTI2RDIxQjAwQzE0REZBIC8qIEpTTlNSZXNvbHZl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NEYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFj
Y2Vzc0VsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTUxMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxBRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NTMwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTU2
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0
QzZCOTk1ODBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuaCBpbiBIZWFkZXJzICov
LAorCQkJCTRDNkI5OTVBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNEM2Qjk5NUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oIGlu
IEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTYwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVt
ZW50RmFjdG9yeS5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjIwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEdvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjQwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEhlbHBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5
NjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNEM2Qjk5NkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlv
bkVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTZFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxQRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NzAwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTcy
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NEM2Qjk5NzQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmggaW4gSGVhZGVy
cyAqLywKKwkJCQk0QzZCOTk3NjBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNldHZh
ckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTdBMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTdEMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5N0Yw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRlbXBsYXRlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJ
CQkJNEM2Qjk5ODEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCBpbiBIZWFkZXJzICovLAor
CQkJCTRDNkI5OTgzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCBpbiBIZWFk
ZXJzICovLAorCQkJCTRDNkI5OTg1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuaCBp
biBIZWFkZXJzICovLAorCQkJCTRDRjZEMzAyMEU1NTZGNEQwMEVEM0Y3NCAvKiBXTUxOYW1lcy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTgyNEI0NjUwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4u
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDREZENDhFMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRw
UmVxdWVzdFVwbG9hZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERkQ0OTYwRTMwNTkyRjAwOUQx
MEFEIC8qIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCBpbiBIZWFkZXJzICovLApAQCAtMTU0NDEs
NyArMTU2NTQsNiBAQAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmpl
Y3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlz
dCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3Qg
Zm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAi
WGNvZGUgMi40IjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdp
b25zID0gKAogCQkJCUVuZ2xpc2gsCkBAIC0xNTUxOSw2ICsxNTczMSw4IEBACiAJCQkJQkMxODgx
REQwRTA4QzU0MzAwMDQ4QzEzIC8qIEZpbGVMaXN0LmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJ
MzE2MTFFNTUwRTFDNEQ0QTAwRjZBNTc5IC8qIFdlYktpdENTU1RyYW5zZm9ybVZhbHVlLmlkbCBp
biBSZXNvdXJjZXMgKi8sCiAJCQkJQkMzQTQ0REYwRTI2RDIwMjAwQzE0REZBIC8qIE5TUmVzb2x2
ZXIuaWRsIGluIFJlc291cmNlcyAqLywKKwkJCQk0QzZCOTk1NDBFNTJFMzczMDA0ODdCQjcgLyog
V01MQXR0cmlidXRlTmFtZXMuaW4gaW4gUmVzb3VyY2VzICovLAorCQkJCTRDNkI5OTdCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUYWdOYW1lcy5pbiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMzFDMEZG
MjMwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdEFuaW1hdGlvbkV2ZW50LmlkbCBpbiBSZXNvdXJj
ZXMgKi8sCiAJCQkJMzFDMEZGMjYwRTRDRUI2RTAwN0Q2RkU1IC8qIFdlYktpdFRyYW5zaXRpb25F
dmVudC5pZGwgaW4gUmVzb3VyY2VzICovLAogCQkJKTsKQEAgLTE3MTcxLDYgKzE3Mzg1LDM0IEBA
CiAJCQkJMzE2MTFFNUEwRTFDNERFMDAwRjZBNTc5IC8qIEpTV2ViS2l0Q1NTVHJhbnNmb3JtVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMzE2MTFFNjIwRTFDNEUxNDAwRjZBNTc5IC8qIERP
TVdlYktpdENTU1RyYW5zZm9ybVZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCiAJCQkJQkMzQTQ0RTIw
RTI2RDIxQjAwQzE0REZBIC8qIEpTTlNSZXNvbHZlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
QzZCOTk0RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0QzZCOTk1MDBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NTIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NTUwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEJyd0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NTcwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTU5
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0
QzZCOTk1QjBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTRDNkI5OTVEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTRDNkI5OTVGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9y
eS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk2MTBFNTJFMzczMDA0ODdCQjcgLyogV01M
R29FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTYzMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NjUwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk2
NzBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTRDNkI5OTY5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9w
dGlvbkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NkQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTZGMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTRDNkI5OTcxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5jcHAgaW4gU291cmNl
cyAqLywKKwkJCQk0QzZCOTk3MzBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NzUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNl
bGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NzcwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5Nzkw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQk0QzZCOTk3QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8sCisJCQkJNEM2Qjk5N0UwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRlbXBsYXRlRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk4MDBFNTJFMzczMDA0ODdCQjcgLyogV01M
VGV4dC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk4MjBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGltZXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTg0MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNENGNkQzMDEw
RTU1NkY0QzAwRUQzRjc0IC8qIFdNTE5hbWVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREZE
NDhGMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQlCQ0RGRDQ5MjBFMzA1NkJEMDA5RDEwQUQgLyogSlNYTUxIdHRwUmVxdWVzdFVw
bG9hZEN1c3RvbS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RGRDQ5NTBFMzA1OTJGMDA5RDEw
QUQgLyogSlNYTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdl
YkNvcmUvY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3Nz
L0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvY3NzL0NT
U1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzksNiArMzM5LDkgQEAgc3Rh
dGljIENTU1J1bGVTZXQqIGRlZmF1bHRTdHlsZTsKIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0
UXVpcmtzU3R5bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVsdFByaW50U3R5bGU7CiBzdGF0
aWMgQ1NTUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKKyNpZiBFTkFCTEUoV01MKQor
c3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRXbWxTdHlsZSA9IDA7CisjZW5kaWYKIAogUmVuZGVy
U3R5bGUqIENTU1N0eWxlU2VsZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CiAKQEAgLTQ5
NSw2ICs0OTgsMTEgQEAgc3RhdGljIHZvaWQgbG9hZERlZmF1bHRTdHlsZSgpCiAgICAgCiAgICAg
Ly8gVmlldyBzb3VyY2UgcnVsZXMuCiAgICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZS0+YWRkUnVs
ZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVv
Zihzb3VyY2VVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7CisKKyNpZiBFTkFC
TEUoV01MKQorICAgIGRlZmF1bHRXbWxTdHlsZSA9IG5ldyBDU1NSdWxlU2V0OworICAgIGRlZmF1
bHRXbWxTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHdtbFVzZXJBZ2VudFN0
eWxlU2hlZXQsIHNpemVvZih3bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7
CisjZW5kaWYKIH0KIAogdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRp
b24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2wpCkBAIC0xMDExLDEwICsxMDE5LDE4
IEBAIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpsb2NhdGVTaGEKIAogdm9pZCBDU1NT
dHlsZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMoaW50JiBmaXJzdFVBUnVsZSwgaW50JiBsYXN0VUFS
dWxlKQogeworI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fY2hlY2tlci5tX2RvY3VtZW50LT5p
c1dNTERvY3VtZW50KCkpIHsKKyAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0V21sU3R5bGUsIGZp
cnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKKyAgICB9IGVsc2UgeworI2VuZGlmCiAgICAgLy8gRmly
c3Qgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgdXNlciBhZ2VudCBzaGVldC4KICAgICBDU1NSdWxl
U2V0KiB1c2VyQWdlbnRTdHlsZVNoZWV0ID0gbV9tZWRpdW0tPm1lZGlhVHlwZU1hdGNoU3BlY2lm
aWMoInByaW50IikKICAgICAgICAgPyBkZWZhdWx0UHJpbnRTdHlsZSA6IGRlZmF1bHRTdHlsZTsK
ICAgICBtYXRjaFJ1bGVzKHVzZXJBZ2VudFN0eWxlU2hlZXQsIGZpcnN0VUFSdWxlLCBsYXN0VUFS
dWxlKTsKKyNpZiBFTkFCTEUoV01MKQorICAgIH0KKyNlbmRpZgogCiAgICAgLy8gSW4gcXVpcmtz
IG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0Lgog
ICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZykKSW5kZXg6IFdlYkNvcmUvY3NzL3dt
bC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mvd21sLmNzcwkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvY3NzL3dtbC5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjAxIEBACisvKgor
ICogVGhlIGRlZmF1bHQgc3R5bGUgc2hlZXQgdXNlZCB0byByZW5kZXIgSFRNTC4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UK
KyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJ
ZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCisgKgorICovCisKK0BuYW1lc3BhY2UgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnLyI7
CisKK2h0bWwgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKKy8qIGNoaWxkcmVuIG9mIHRoZSA8
aGVhZD4gZWxlbWVudCBhbGwgaGF2ZSBkaXNwbGF5Om5vbmUgKi8KK2hlYWQgeworICAgIGRpc3Bs
YXk6IG5vbmUKK30KKworbWV0YSB7CisgICAgZGlzcGxheTogbm9uZQorfQorCit0aXRsZSB7Cisg
ICAgZGlzcGxheTogbm9uZQorfQorCitsaW5rIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK3N0
eWxlIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK3NjcmlwdCB7CisgICAgZGlzcGxheTogbm9u
ZQorfQorCisvKiBnZW5lcmljIGJsb2NrLWxldmVsIGVsZW1lbnRzICovCisKK2JvZHkgeworICAg
IGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogOHB4Cit9CisKK3AgeworICAgIGRpc3BsYXk6
IGJsb2NrOworICAgIG1hcmdpbjogMS4wX19xZW0gMHB4Cit9CisKK2RpdiB7CisgICAgZGlzcGxh
eTogYmxvY2sKK30KKworbGF5ZXIgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKK21hcnF1ZWUg
eworICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKKyAgICBvdmVyZmxvdzogLXdlYmtpdC1tYXJx
dWVlCit9CisKK2FkZHJlc3MgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKK2Jsb2NrcXVvdGUg
eworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogMV9fcWVtIDQwcHggMWVtIDQwcHgK
K30KKworcSB7CisgICAgZGlzcGxheTogaW5saW5lCit9CisKK3E6YmVmb3JlIHsKKyAgICBjb250
ZW50OiAnIicKKyAgICAvKiBGSVhNRTogY29udGVudDogb3Blbi1xdW90ZTsgKi8KK30KKworcTph
ZnRlciB7CisgICAgY29udGVudDogJyInCisgICAgLyogRklYTUU6IGNvbnRlbnQ6IGNsb3NlLXF1
b3RlOyAqLworfQorCitjZW50ZXIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIC8qIHNwZWNp
YWwgY2VudGVyaW5nIHRvIGJlIGFibGUgdG8gZW11bGF0ZSB0aGUgaHRtbDQvbmV0c2NhcGUgYmVo
YXZpb3VyICovCisgICAgdGV4dC1hbGlnbjogLXdlYmtpdC1jZW50ZXIKK30KKworaHIgeworICAg
IGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogMC41ZW0gYXV0bzsKKyAgICBib3JkZXItc3R5
bGU6IGluc2V0OworICAgIGJvcmRlci13aWR0aDogMXB4Cit9CisKK21hcCB7CisgICAgZGlzcGxh
eTogaW5saW5lCit9CisKKy8qIGhlYWRpbmcgZWxlbWVudHMgKi8KKworaDEgeworICAgIGRpc3Bs
YXk6IGJsb2NrOworICAgIGZvbnQtc2l6ZTogMmVtOworICAgIG1hcmdpbjogLjY3X19xZW0gMCAu
NjdlbSAwOworICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9CisKK2gyIHsKKyAgICBkaXNwbGF5OiBi
bG9jazsKKyAgICBmb250LXNpemU6IDEuNWVtOworICAgIG1hcmdpbjogLjgzX19xZW0gMCAuODNl
bSAwOworICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9CisKK2gzIHsKKyAgICBkaXNwbGF5OiBibG9j
azsKKyAgICBmb250LXNpemU6IDEuMTdlbTsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFlbSAwOwor
ICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9CisKK2g0IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAg
ICBtYXJnaW46IDEuMzNfX3FlbSAwIDEuMzNlbSAwOworICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9
CisKK2g1IHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBmb250LXNpemU6IC44M2VtOworICAg
IG1hcmdpbjogMS42N19fcWVtIDAgMS42N2VtIDA7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQKK30K
KworaDYgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGZvbnQtc2l6ZTogLjY3ZW07CisgICAg
bWFyZ2luOiAyLjMzX19xZW0gMCAyLjMzZW0gMDsKKyAgICBmb250LXdlaWdodDogYm9sZAorfQor
CisvKiB0YWJsZXMgKi8KKwordGFibGUgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGJvcmRl
ci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgYm9yZGVyLXNwYWNpbmc6IDJweDsKKyAgICBib3Jk
ZXItY29sb3I6IGdyYXkKK30KKwordGFibGVbYWxpZ249ImNlbnRlciJdIHsKKyAgICBtYXJnaW4t
bGVmdDogYXV0bzsKKyAgICBtYXJnaW4tcmlnaHQ6IGF1dG8KK30KKwordGhlYWQgeworICAgIGRp
c3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwor
ICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCit0Ym9keSB7CisgICAgZGlzcGxheTogdGFi
bGUtcm93LWdyb3VwOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgYm9yZGVyLWNv
bG9yOiBpbmhlcml0Cit9CisKK3Rmb290IHsKKyAgICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3Jv
dXA7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgICBib3JkZXItY29sb3I6IGluaGVy
aXQKK30KKworLyogZm9yIHRhYmxlcyB3aXRob3V0IHRhYmxlIHNlY3Rpb24gZWxlbWVudHMgKGNh
biBoYXBwZW4gd2l0aCBYSFRNTCBvciBkeW5hbWljYWxseSBjcmVhdGVkIHRhYmxlcykgKi8KK3Rh
YmxlID4gdHIgeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKK2NvbCB7CisgICAg
ZGlzcGxheTogdGFibGUtY29sdW1uCit9CisKK2NvbGdyb3VwIHsKKyAgICBkaXNwbGF5OiB0YWJs
ZS1jb2x1bW4tZ3JvdXAKK30KKwordHIgeworICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKKyAgICB2
ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQKK30KKwor
dGQsIHRoIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAgIHZlcnRpY2FsLWFsaWduOiBp
bmhlcml0Cit9CisKK3RoIHsKKyAgICBmb250LXdlaWdodDogYm9sZAorfQorCitjYXB0aW9uIHsK
KyAgICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uOworICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2Vu
dGVyCit9CisKKy8qIGxpc3RzICovCisKK3VsLCBtZW51LCBkaXIgeworICAgIGRpc3BsYXk6IGJs
b2NrOworICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFl
bSAwOworICAgIC13ZWJraXQtcGFkZGluZy1zdGFydDogNDBweAorfQorCitvbCB7CisgICAgZGlz
cGxheTogYmxvY2s7CisgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOworICAgIG1hcmdpbjog
MV9fcWVtIDAgMWVtIDA7CisgICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiA0MHB4Cit9CisKK2xp
IHsKKyAgICBkaXNwbGF5OiBsaXN0LWl0ZW0KK30KKwordWwgdWwsIG9sIHVsIHsKKyAgICBsaXN0
LXN0eWxlLXR5cGU6IGNpcmNsZQorfQorCitvbCBvbCB1bCwgb2wgdWwgdWwsIHVsIG9sIHVsLCB1
bCB1bCB1bCB7CisgICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmUKK30KKworZGQgeworICAgIGRp
c3BsYXk6IGJsb2NrOworICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiA0MHB4Cit9CisKK2RsIHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFlbSAwCit9CisKK2R0
IHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCitvbCB1bCwgdWwgb2wsIHVsIHVsLCBvbCBvbCB7
CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwCit9CisKKy8qIGZvcm0g
ZWxlbWVudHMgKi8KKworZm9ybSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luOiAw
X19xZW0gMCAxZW0gMAorfQorCitsYWJlbCB7CisgICAgY3Vyc29yOiBkZWZhdWx0OworfQorCits
ZWdlbmQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBhZGRpbmctbGVmdDogMnB4OworICAg
IHBhZGRpbmctcmlnaHQ6IDJweDsKKyAgICBib3JkZXI6IG5vbmUKK30KKworZmllbGRzZXQgewor
ICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbi1sZWZ0OiAycHg7CisgICAgbWFyZ2luLXJp
Z2h0OiAycHg7CisgICAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtOworICAgIGJvcmRl
cjogMnB4IGdyb292ZSBUaHJlZURGYWNlCit9CisKK2J1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBidXR0b247Cit9CisKK2lucHV0LCB0ZXh0YXJlYSwga2V5Z2VuLCBzZWxlY3QsIGJ1
dHRvbiwgaXNpbmRleCB7CisgICAgbWFyZ2luOiAwX19xZW07CisgICAgZm9udDogLXdlYmtpdC1z
bWFsbC1jb250cm9sOworICAgIGNvbG9yOiBpbml0aWFsOworICAgIGxldHRlci1zcGFjaW5nOiBu
b3JtYWw7CisgICAgd29yZC1zcGFjaW5nOiBub3JtYWw7CisgICAgbGluZS1oZWlnaHQ6IG5vcm1h
bDsKKyAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKKyAgICB0ZXh0LWluZGVudDogMDsKKyAgICB0
ZXh0LXNoYWRvdzogbm9uZTsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgdGV4dC1h
bGlnbjogLXdlYmtpdC1hdXRvOworfQorCitpbnB1dFt0eXBlPSJoaWRkZW4iXSB7CisgICAgZGlz
cGxheTogbm9uZQorfQorCitpbnB1dCwgaW5wdXRbdHlwZT0icGFzc3dvcmQiXSwgaW5wdXRbdHlw
ZT0ic2VhcmNoIl0sIGlzaW5kZXggeworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxk
OworICAgIHBhZGRpbmc6IDFweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBi
b3JkZXI6IDJweCBpbnNldDsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAg
ICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIGN1cnNvcjogYXV0bzsKK30KKworaW5w
dXRbdHlwZT0ic2VhcmNoIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQ7
CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitpbnB1dFt0eXBlPSJz
ZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uOworfQorCitpbnB1dFt0eXBlPSJzZWFy
Y2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNl
OiBzZWFyY2hmaWVsZC1kZWNvcmF0aW9uOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdl
YmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6
IHNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbjsKK30KKworaW5wdXRbdHlwZT0ic2VhcmNo
Il06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFu
Y2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9uOworfQorCit0ZXh0YXJlYSB7CisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK
KyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNh
bDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIC13ZWJraXQtYm94LW9yaWVu
dDogdmVydGljYWw7CisgICAgcmVzaXplOiBhdXRvOworICAgIGN1cnNvcjogYXV0bzsKK30KKwor
aW5wdXRbdHlwZT0icGFzc3dvcmQiXSB7CisgICAgLXdlYmtpdC10ZXh0LXNlY3VyaXR5OiBkaXNj
ICFpbXBvcnRhbnQ7Cit9CisKK2lucHV0W3R5cGU9ImhpZGRlbiJdLCBpbnB1dFt0eXBlPSJpbWFn
ZSJdLCBpbnB1dFt0eXBlPSJmaWxlIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogaW5pdGlh
bDsKKyAgICBwYWRkaW5nOiBpbml0aWFsOworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7
CisgICAgYm9yZGVyOiBpbml0aWFsOworfQorCitpbnB1dFt0eXBlPSJmaWxlIl0geworICAgIC13
ZWJraXQtYm94LWFsaWduOiBiYXNlbGluZTsKK30KKworaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCB7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZBRkZCRCAhaW1wb3J0YW50OworICAgIGJhY2tncm91
bmQtaW1hZ2U6bm9uZSAhaW1wb3J0YW50OworfQorCitpbnB1dFt0eXBlPSJyYWRpbyJdLCBpbnB1
dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBtYXJnaW46IDNweCAwLjVleDsKKyAgICBwYWRkaW5n
OiBpbml0aWFsOworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBp
bml0aWFsOworfQorCitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0s
IGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1maWxlLXVw
bG9hZC1idXR0b24geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcHVzaC1idXR0b247CisgICAg
d2hpdGUtc3BhY2U6IHByZQorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0i
c3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtp
dC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbiB7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNl
bnRlcjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY3Vyc29yOiBkZWZhdWx0OworICAg
IGNvbG9yOiBCdXR0b25UZXh0OworICAgIHBhZGRpbmc6IDJweCA2cHggM3B4IDZweDsKKyAgICBi
b3JkZXI6IDJweCBvdXRzZXQgQnV0dG9uRmFjZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0
b25GYWNlOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveAorfQorCitpbnB1dFt0
eXBlPSJyYW5nZSJdIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlci1ob3Jpem9udGFs
OworICAgIHBhZGRpbmc6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworICAgIG1hcmdp
bjogMnB4OworfQorCitpbnB1dFt0eXBlPSJyYW5nZSJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7
CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzbGlkZXJ0aHVtYi1ob3Jpem9udGFsOworfQorCitp
bnB1dFt0eXBlPSJidXR0b24iXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06ZGlzYWJs
ZWQsIGlucHV0W3R5cGU9InJlc2V0Il06ZGlzYWJsZWQsIGlucHV0W3R5cGU9ImZpbGUiXTpkaXNh
YmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjpkaXNhYmxlZCwgc2VsZWN0
OmRpc2FibGVkLCBrZXlnZW46ZGlzYWJsZWQsIG9wdGdyb3VwOmRpc2FibGVkLCBvcHRpb246ZGlz
YWJsZWQgeworICAgIGNvbG9yOiBHcmF5VGV4dAorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXTph
Y3RpdmUsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0icmVzZXQiXTph
Y3RpdmUsIGlucHV0W3R5cGU9ImZpbGUiXTphY3RpdmU6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0
dG9uLCBidXR0b246YWN0aXZlIHsKKyAgICBib3JkZXItc3R5bGU6IGluc2V0Cit9CisKK2lucHV0
W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06YWN0
aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJyZXNldCJdOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRb
dHlwZT0iZmlsZSJdOmFjdGl2ZTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24s
IGJ1dHRvbjphY3RpdmU6ZGlzYWJsZWQgeworICAgIGJvcmRlci1zdHlsZTogb3V0c2V0Cit9CisK
K2FyZWEsIHBhcmFtIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2lucHV0W3R5cGU9ImNoZWNr
Ym94Il0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7CisgICAgLXdlYmtpdC1i
b3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitpbnB1dFt0eXBlPSJyYWRpbyJdIHsKKyAgICAt
d2Via2l0LWFwcGVhcmFuY2U6IHJhZGlvOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVy
LWJveDsKK30KKwora2V5Z2VuLCBzZWxlY3QgeworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVu
dWxpc3Q7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13ZWJraXQt
Ym94LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiAxcHggc29saWQ7CisgICAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiA1cHg7CisgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAtd2Via2l0LXJ0
bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICBjb2xvcjogYmxhY2s7CisgICAgYmFja2dyb3VuZC1j
b2xvcjogd2hpdGU7CisgICAgY3Vyc29yOiBkZWZhdWx0OworfQorCitzZWxlY3Rbc2l6ZV0sCitz
ZWxlY3RbbXVsdGlwbGVdLAorc2VsZWN0W3NpemVdW211bHRpcGxlXSB7CisgICAgLXdlYmtpdC1h
cHBlYXJhbmNlOiBsaXN0Ym94OworICAgIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDsKKyAgICBi
b3JkZXI6IDFweCBpbnNldCBncmF5OworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogaW5pdGlh
bDsKKyAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDsKK30KKworc2VsZWN0W3NpemU9IjAiXSwKK3Nl
bGVjdFtzaXplPSIxIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7CisgICAg
LXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAt
d2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworfQorCitv
cHRncm91cCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKK30KKworb3B0aW9uIHsKKyAgICBm
b250LXdlaWdodDogbm9ybWFsOworfQorCisvKiBpbmxpbmUgZWxlbWVudHMgKi8KKwordSwgaW5z
IHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZQorfQorCitzdHJvbmcsIGIgeworICAg
IGZvbnQtd2VpZ2h0OiBib2xkZXIKK30KKworaSwgY2l0ZSwgZW0sIHZhciwgYWRkcmVzcyB7Cisg
ICAgZm9udC1zdHlsZTogaXRhbGljCit9CisKK3R0LCBjb2RlLCBrYmQsIHNhbXAgeworICAgIGZv
bnQtZmFtaWx5OiBtb25vc3BhY2UKK30KKworcHJlLCB4bXAsIHBsYWludGV4dCwgbGlzdGluZyB7
CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICB3
aGl0ZS1zcGFjZTogcHJlOworICAgIG1hcmdpbjogMV9fcWVtIDAKK30KKworYmlnIHsKKyAgICBm
b250LXNpemU6IGxhcmdlcgorfQorCitzbWFsbCB7CisgICAgZm9udC1zaXplOiBzbWFsbGVyCit9
CisKK3MsIHN0cmlrZSwgZGVsIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaAor
fQorCitzdWIgeworICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7CisgICAgZm9udC1zaXplOiBzbWFs
bGVyCit9CisKK3N1cCB7CisgICAgdmVydGljYWwtYWxpZ246IHN1cGVyOworICAgIGZvbnQtc2l6
ZTogc21hbGxlcgorfQorCitub2JyIHsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwCit9CisKKy8q
IHN0YXRlcyAqLworCis6Zm9jdXMgeyAKKyAgICBvdXRsaW5lOiBhdXRvIDVweCAtd2Via2l0LWZv
Y3VzLXJpbmctY29sb3IKK30KKworLyogUmVhZC1vbmx5IHRleHQgZmllbGRzIGRvIG5vdCBzaG93
IGEgZm9jdXMgcmluZyBidXQgZG8gc3RpbGwgcmVjZWl2ZSBmb2N1cyAqLworaHRtbDpmb2N1cywg
Ym9keTpmb2N1cywgaW5wdXRbcmVhZG9ubHldOmZvY3VzIHsgCisgICAgb3V0bGluZTogbm9uZQor
fQorICAKK2lucHV0OmZvY3VzLCB0ZXh0YXJlYTpmb2N1cywgaXNpbmRleDpmb2N1cywga2V5Z2Vu
OmZvY3VzLCBzZWxlY3Q6Zm9jdXMgeworICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4Cit9CisKK2lu
cHV0W3R5cGU9ImJ1dHRvbiJdOmZvY3VzLAoraW5wdXRbdHlwZT0iY2hlY2tib3giXTpmb2N1cywK
K2lucHV0W3R5cGU9ImZpbGUiXTpmb2N1cywKK2lucHV0W3R5cGU9ImhpZGRlbiJdOmZvY3VzLAor
aW5wdXRbdHlwZT0iaW1hZ2UiXTpmb2N1cywKK2lucHV0W3R5cGU9InJhZGlvIl06Zm9jdXMsCitp
bnB1dFt0eXBlPSJyZXNldCJdOmZvY3VzLAoraW5wdXRbdHlwZT0ic2VhcmNoIl06Zm9jdXMsCitp
bnB1dFt0eXBlPSJzdWJtaXQiXTpmb2N1cywKK2lucHV0W3R5cGU9ImZpbGUiXTpmb2N1czo6LXdl
YmtpdC1maWxlLXVwbG9hZC1idXR0b24geworICAgIG91dGxpbmUtb2Zmc2V0OiAwCit9CisgICAg
CithOi13ZWJraXQtYW55LWxpbmsgeworICAgIGNvbG9yOiAtd2Via2l0LWxpbms7CisgICAgdGV4
dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7Cit9CisKK2E6LXdlYmtpdC1hbnktbGluazphY3RpdmUg
eworICAgIGNvbG9yOiAtd2Via2l0LWFjdGl2ZWxpbmsKK30KKworYW5jaG9yOi13ZWJraXQtYW55
LWxpbmsgeworICAgIGNvbG9yOiAtd2Via2l0LWxpbms7CisgICAgdGV4dC1kZWNvcmF0aW9uOiB1
bmRlcmxpbmU7Cit9CisKK2FuY2hvcjotd2Via2l0LWFueS1saW5rOmFjdGl2ZSB7CisgICAgY29s
b3I6IC13ZWJraXQtYWN0aXZlbGluaworfQorCisvKiBvdGhlciBlbGVtZW50cyAqLworCitub2Zy
YW1lcyB7CisgICAgZGlzcGxheTogbm9uZQorfQorCitmcmFtZXNldCwgZnJhbWUgeworICAgIGRp
c3BsYXk6IGJsb2NrCit9CisKK2ZyYW1lc2V0IHsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQK
K30KKworaWZyYW1lIHsKKyAgICBib3JkZXI6IDJweCBpbnNldAorfQorCisvKiBub3NjcmlwdCBp
cyBoYW5kbGVkIGludGVybmFsbHksIGFzIGl0IGRlcGVuZHMgb24gc2V0dGluZ3MgKi8KSW5kZXg6
IFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9k
b20vRE9NSW1wbGVtZW50YXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsOCBAQAog
ICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICog
Q29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNiBTYW11ZWwgV2VpbmlnIChz
YW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTUyLDYgKzU0LDEwIEBACiAjaW5jbHVk
ZSAiU1ZHRG9jdW1lbnQuaCIKICNlbmRpZgogCisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJX
TUxEb2N1bWVudC5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIEVOQUJM
RShTVkcpCkBAIC0zMDgsNiArMzE0LDE1IEBAIFBhc3NSZWZQdHI8RG9jdW1lbnQ+IERPTUltcGxl
bWVudGF0aW9uOjoKICAgICAgICAgcmV0dXJuIEhUTUxEb2N1bWVudDo6Y3JlYXRlKGZyYW1lKTsK
ICAgICBpZiAodHlwZSA9PSAiYXBwbGljYXRpb24veGh0bWwreG1sIikKICAgICAgICAgcmV0dXJu
IERvY3VtZW50OjpjcmVhdGVYSFRNTChmcmFtZSk7CisKKyNpZiBFTkFCTEUoV01MKQorICAgIGlm
ICgodHlwZSA9PSAidGV4dC92bmQud2FwLndtbCIpCisjaWYgRU5BQkxFKFdCWE1MKQorICAgICAg
ICB8fCAodHlwZSA9PSAiYXBwbGljYXRpb24vdm5kLndhcC53bWxjIikKKyNlbmRpZgorICAgICAg
ICApCisgICAgICAgIHJldHVybiBXTUxEb2N1bWVudDo6Y3JlYXRlKGZyYW1lKTsKKyNlbmRpZgog
ICAgICAgICAKICNpZiBFTkFCTEUoRlRQRElSKQogICAgIC8vIFBsdWdpbnMgY2Fubm90IHRha2Ug
RlRQIGZyb20gdXMgZWl0aGVyCkluZGV4OiBXZWJDb3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29y
ZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMjkwLDYgKzI5MCw5IEBAIHB1Ymxp
YzoKICNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpbkRvY3VtZW50KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYURvY3VtZW50KCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KKyNpZiBFTkFCTEUoV01MKQorICAgIHZpcnR1YWwgYm9vbCBpc1dN
TERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgogICAgIAogICAgIENT
U1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2Vs
ZWN0b3I7IH0KIApJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAzNTc4MCkKKysrIFdl
YkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDYgKzUyLDEz
IEBACiAjaWZuZGVmIFVTRV9RWE1MU1RSRUFNCiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgog
I2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KKyNpZiBFTkFCTEUoV01MKQorI2lu
Y2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1
ZGUgIldNTFRleHQuaCIKKyNlbmRpZgogI2Vsc2UKICNpbmNsdWRlIDxRRGVidWc+CiAjZW5kaWYK
QEAgLTc4LDYgKzg1LDEwIEBAIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogCiBjb25zdCBp
bnQgbWF4RXJyb3JzID0gMjU7CiAKKyNpZiBFTkFCTEUoV01MKQorYm9vbCBoYXNEb2NUeXBlRGVj
bCA9IGZhbHNlOworI2VuZGlmCisKICNpZm5kZWYgVVNFX1FYTUxTVFJFQU0KIGNsYXNzIFBlbmRp
bmdDYWxsYmFja3MgewogcHVibGljOgpAQCAtODY1LDYgKzg3NiwxMSBAQCB2b2lkIFhNTFRva2Vu
aXplcjo6c3RhcnRFbGVtZW50TnMoY29uc3QgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYl9hdHRyaWJ1dGVzLCBuYl9kZWZhdWx0ZWQs
IGxpYnhtbEF0dHJpYnV0ZXMpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCisjaWYgRU5BQkxF
KFdNTCkKKyAgICBpZiAobV9kb2MtPmlzV01MRG9jdW1lbnQoKSAmJiAhaGFzRG9jVHlwZURlY2wp
CisgICAgICAgIHN0YXRpY19jYXN0PFdNTFRva2VuaXplcio+KHRoaXMpLT5oYW5kbGVXTUxFcnJv
cihEb2NUeXBlRGVjbGFyYXRpb25NaXNzRXJyb3IpOworI2VuZGlmCiAgICAgCiAgICAgbV9zYXdG
aXJzdEVsZW1lbnQgPSB0cnVlOwogCkBAIC04ODEsOSArODk3LDIxIEBAIHZvaWQgWE1MVG9rZW5p
emVyOjpzdGFydEVsZW1lbnROcyhjb25zdCAKICAgICAgICAgICAgIHVyaSA9IG1fZGVmYXVsdE5h
bWVzcGFjZVVSSTsKICAgICB9CiAKKyNpZiBFTkFCTEUoV01MKQorICAgIC8vIGNoZWNrIGlmIHRo
ZXJlIGFyZSBtb3JlIHRoYW4gb25lIGFjY2VzcyBlbGVtZW50CisgICAgaWYgKG1fZG9jLT5pc1dN
TERvY3VtZW50KCkgJiYgbG9jYWxOYW1lID09ICJhY2Nlc3MiKQorICAgICAgICBXTUxIZWxwZXI6
OmN1cnJlbnRCcndDb250ZXh0KCktPnNldE5lZWRDaGVja0RlY2tBY2Nlc3ModHJ1ZSk7CisjZW5k
aWYKKyAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBRdWFsaWZpZWROYW1lIHFOYW1l
KHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwotICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50
ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUsIGVjKTsKKyAgICBSZWZQdHI8RWxl
bWVudD4gbmV3RWxlbWVudCA9IDA7CisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAobV9kb2MtPmlz
V01MRG9jdW1lbnQoKSkKKyAgICAgICAgbmV3RWxlbWVudCA9IFdNTEVsZW1lbnRGYWN0b3J5Ojpj
cmVhdGVXTUxFbGVtZW50KHFOYW1lLCBtX2RvYywgdHJ1ZSk7CisgICAgZWxzZQorI2VuZGlmCisg
ICAgICAgIG5ld0VsZW1lbnQgPSBtX2RvYy0+Y3JlYXRlRWxlbWVudChxTmFtZSwgdHJ1ZSwgZWMp
OwogICAgIGlmICghbmV3RWxlbWVudCkgewogICAgICAgICBzdG9wUGFyc2luZygpOwogICAgICAg
ICByZXR1cm47CkBAIC05ODQsNiArMTAxMiwxNCBAQCB2b2lkIFhNTFRva2VuaXplcjo6Y2hhcmFj
dGVycyhjb25zdCB4bWxDCiAgICAgfQogICAgIAogICAgIGlmIChtX2N1cnJlbnROb2RlLT5pc1Rl
eHROb2RlKCkgfHwgZW50ZXJUZXh0KCkpCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAobV9kb2Mt
PmlzV01MRG9jdW1lbnQoKSkgeworICAgICAgICBXTUxUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8
V01MVGV4dCo+KG1fY3VycmVudE5vZGUpOworICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsK
KyAgICAgICAgdGV4dC0+YXBwZW5kRGF0YSh0b1N0cmluZyhzLCBsZW4pLCBlYyk7CisgICAgICAg
IHRleHQtPnVwZGF0ZURhdGFJZk5lZWRlZCgpOworICAgIH0gZWxzZQorI2VuZGlmCiAgICAgICAg
IG1fYnVmZmVyZWRUZXh0LmFwcGVuZChzLCBsZW4pOwogfQogCkBAIC0xMTA4LDYgKzExNDQsMjAg
QEAgdm9pZCBYTUxUb2tlbml6ZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IAogICAgICAgICByZXR1
cm47CiAgICAgfQogICAgIAorI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fZG9jKSB7CisgICAg
ICAgIFN0cmluZyBleHRJZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQpOworICAgICAgICBpZiAobV9k
b2MtPmlzV01MRG9jdW1lbnQoKQorICAgICAgICAgICAgJiYgKGV4dElkICE9ICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjMvL0VOIikKKyAgICAgICAgICAgICYmIChleHRJZCAhPSAiLS8vV0FQRk9S
VU0vL0RURCBXTUwgMS4yLy9FTiIpCisgICAgICAgICAgICAmJiAoZXh0SWQgIT0gIi0vL1dBUEZP
UlVNLy9EVEQgV01MIDEuMS8vRU4iKQorICAgICAgICAgICAgJiYgKGV4dElkICE9ICItLy9XQVBG
T1JVTS8vRFREIFdNTCAxLjAvL0VOIikpCisgICAgICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwg
IkludmFsaWQgRFREIFB1YmxpYyBJRCIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOwor
ICAgICAgICBlbHNlIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVudCgpKQorICAgICAgICAgICAgaGFz
RG9jVHlwZURlY2wgPSB0cnVlOworICAgIH0KKyNlbmRpZgorCiAgICAgaWYgKG1fZG9jKQogICAg
ICAgICBtX2RvYy0+YWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2MsIHRvU3RyaW5n
KG5hbWUpLCB0b1N0cmluZyhleHRlcm5hbElEKSwgdG9TdHJpbmcoc3lzdGVtSUQpKSk7CiB9CkBA
IC0xMjQ0LDcgKzEyOTQsMTEgQEAgc3RhdGljIHhtbEVudGl0eVB0ciBnZXRFbnRpdHlIYW5kbGVy
KHZvaQogICAgIH0KIAogICAgIGVudCA9IHhtbEdldERvY0VudGl0eShjdHh0LT5teURvYywgbmFt
ZSk7CisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAoIWVudCAmJiAoZ2V0VG9rZW5pemVyKGNsb3N1
cmUpLT5pc1hIVE1MRG9jdW1lbnQoKSB8fCAoZ2V0VG9rZW5pemVyKGNsb3N1cmUpLT5kb2N1bWVu
dCgpLT5pc1dNTERvY3VtZW50KCkpKSkgeworI2Vsc2UKICAgICBpZiAoIWVudCAmJiBnZXRUb2tl
bml6ZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpKSB7CisjZW5kaWYKICAgICAgICAgZW50
ID0gZ2V0WEhUTUxFbnRpdHkobmFtZSk7CiAgICAgICAgIGlmIChlbnQpCiAgICAgICAgICAgICBl
bnQtPmV0eXBlID0gWE1MX0lOVEVSTkFMX0dFTkVSQUxfRU5USVRZOwpAQCAtMTQ5Nyw2ICsxNTUx
LDE2IEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnNlcnRFcnJvck1lc3NhZ2VCbG8KICAgICAgICAg
ZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKICAgICB9CiAjZW5kaWYKKyNpZiBFTkFCTEUo
V01MKQorICAgIGVsc2UgaWYgKG1fZG9jLT5pc1dNTERvY3VtZW50KCkpIHsKKyAgICAgICAgUmVm
UHRyPE5vZGU+IHJvb3RFbGVtZW50ID0gZG9jLT5jcmVhdGVFbGVtZW50TlMoSFRNTE5hbWVzOjp4
aHRtbE5hbWVzcGFjZVVSSSwgImh0bWwiLCBlYyk7CisgICAgICAgIFJlZlB0cjxOb2RlPiBib2R5
ID0gZG9jLT5jcmVhdGVFbGVtZW50TlMoSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSwgImJv
ZHkiLCBlYyk7CisgICAgICAgIHJvb3RFbGVtZW50LT5hcHBlbmRDaGlsZChib2R5LCBlYyk7Cisg
ICAgICAgIGJvZHktPmFwcGVuZENoaWxkKGRvY3VtZW50RWxlbWVudCwgZWMpOworICAgICAgICBk
b2MtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7CisgICAgICAgIGRvY3VtZW50
RWxlbWVudCA9IGJvZHkuZ2V0KCk7CisgICAgfQorI2VuZGlmCiAKICAgICBSZWZQdHI8RWxlbWVu
dD4gcmVwb3J0RWxlbWVudCA9IGNyZWF0ZVhIVE1MUGFyc2VyRXJyb3JIZWFkZXIoZG9jLCBtX2Vy
cm9yTWVzc2FnZXMpOwogICAgIGRvY3VtZW50RWxlbWVudC0+aW5zZXJ0QmVmb3JlKHJlcG9ydEVs
ZW1lbnQsIGRvY3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBlYyk7CkBAIC0xOTI1LDYgKzE5
ODksMTEgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlU3RhcnRFbGVtZW50KCkKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIAorI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fZG9jLT5pc1dNTERv
Y3VtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTFRva2VuaXplcio+KHRoaXMpLT51cGRh
dGVBdHRyc0lmTmVlZGVkKG5ld0VsZW1lbnQuZ2V0KCksIGxvY2FsTmFtZSk7CisjZW5kaWYKKwog
ICAgIGV2ZW50dWFsbHlNYXJrQXNQYXJzZXJDcmVhdGVkKG5ld0VsZW1lbnQuZ2V0KCkpOwogCiAg
ICAgaWYgKGlzU2NyaXB0RWxlbWVudChuZXdFbGVtZW50LmdldCgpKSkKQEAgLTE5MzgsNiArMjAw
NywxMSBAQCB2b2lkIFhNTFRva2VuaXplcjo6cGFyc2VTdGFydEVsZW1lbnQoKQogICAgIHNldEN1
cnJlbnROb2RlKG5ld0VsZW1lbnQuZ2V0KCkpOwogICAgIGlmIChtX3ZpZXcgJiYgIW5ld0VsZW1l
bnQtPmF0dGFjaGVkKCkpCiAgICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgpOworCisjaWYgRU5B
QkxFKFdNTCkKKyAgICBpZiAobV9kb2MtPmlzV01MRG9jdW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxX
TUxUb2tlbml6ZXIqPih0aGlzKS0+aGFzRXJyb3IoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01M
VG9rZW5pemVyKj4odGhpcyktPmhhbmRsZVdNTEVycm9yKCk7CisjZW5kaWYKIH0KIAogdm9pZCBY
TUxUb2tlbml6ZXI6OnBhcnNlRW5kRWxlbWVudCgpCkBAIC0yMTM2LDYgKzIyMTAsMTQgQEAgdm9p
ZCBYTUxUb2tlbml6ZXI6OnBhcnNlRHRkKCkKICAgICAgICAgfHwgKHB1YmxpY0lkID09IFFMYXRp
bjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEuMC8vRU4iKSkpIHsKICAg
ICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9scyBpZiB3ZSByZXBsYWNl
IGVudGl0aWVzIG9yIG5vdC4KICAgICB9CisjaWYgRU5BQkxFKFdNTCkKKyAgICBlbHNlIGlmICht
X2RvYy0+aXNXTUxEb2N1bWVudCgpCisgICAgICAgICAgICAmJiAocHVibGljSWQgIT0gIi0vL1dB
UEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iKQorICAgICAgICAgICAgJiYgKHB1YmxpY0lkICE9ICIt
Ly9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIikKKyAgICAgICAgICAgICYmIChwdWJsaWNJZCAh
PSAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIpCisgICAgICAgICAgICAmJiAocHVibGlj
SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMC8vRU4iKSkKKyAgICAgICAgaGFuZGxlRXJy
b3IoZmF0YWwsICJJbnZhbGlkIERURCBQdWJsaWMgSUQiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51
bWJlcigpKTsKKyNlbmRpZgogICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIG1f
ZG9jLT5hZGRDaGlsZChEb2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgbmFtZSwgcHVibGljSWQs
IHN5c3RlbUlkKSk7CiAgICAgCkBAIC0yMTQzLDQgKzIyMjUsMyBAQCB2b2lkIFhNTFRva2VuaXpl
cjo6cGFyc2VEdGQoKQogI2VuZGlmCiB9CiAKLQpJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5p
emVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJKHJldmlzaW9u
IDM1NzgwKQorKysgV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc3LDYgKzc3LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldElzWEhU
TUxEb2N1bWVudChib29sIGlzWEhUTUwpIHsgbV9pc1hIVE1MRG9jdW1lbnQgPSBpc1hIVE1MOyB9
CiAgICAgICAgIGJvb2wgaXNYSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9pc1hIVE1M
RG9jdW1lbnQ7IH0KIAorICAgICAgICBEb2N1bWVudCAqZG9jdW1lbnQoKSBjb25zdCB7IHJldHVy
biBtX2RvYzsgfQorCiAgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VDbGllbnQKICAgICAg
ICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNlKiBmaW5pc2hlZE9i
aik7CiAKQEAgLTExOCw2ICsxMjAsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGlu
dCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKIAogICAgIHByaXZhdGU6CisjaWYgRU5BQkxFKFdNTCkK
KyAgICAgICAgZnJpZW5kIGNsYXNzIFdNTFRva2VuaXplcjsKKyNlbmRpZgogICAgICAgICB2b2lk
IGluaXRpYWxpemVQYXJzZXJDb250ZXh0KGNvbnN0IGNoYXIqIGNodW5rID0gMCk7CiAgICAgICAg
IHZvaWQgc2V0Q3VycmVudE5vZGUoTm9kZSopOwogCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0Zvcndh
cmRMaXN0LmNwcAkocmV2aXNpb24gMzU3ODApCisrKyBXZWJDb3JlL2hpc3RvcnkvQmFja0Zvcndh
cmRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjQsNCArMjY2LDE4IEBAIGJvb2wg
QmFja0ZvcndhcmRMaXN0Ojpjb250YWluc0l0ZW0oSGlzdG8KICAgICByZXR1cm4gbV9lbnRyeUhh
c2guY29udGFpbnMoZW50cnkpOwogfQogCisjaWYgRU5BQkxFKFdNTCkKK3ZvaWQgQmFja0Zvcndh
cmRMaXN0OjpjbGVhclN0YXRlKCkKK3sKKyAgICBQYXNzUmVmUHRyPEhpc3RvcnlJdGVtPiBjdXIg
PSBjdXJyZW50SXRlbSgpOworCisgICAgaW50IHNpemUgPSBtX2VudHJpZXMuc2l6ZSgpOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQorICAgICAgICBwYWdlQ2FjaGUoKS0+cmVt
b3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgbV9lbnRyaWVzLmNsZWFyKCk7CisgICAgbV9l
bnRyeUhhc2guY2xlYXIoKTsKKyAgICBtX2N1cnJlbnQgPSBOb0N1cnJlbnRJdGVtSW5kZXg7Cit9
CisjZW5kaWYKKwogfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvaGlzdG9y
eS9CYWNrRm9yd2FyZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0Zv
cndhcmRMaXN0LmgJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDYgKzc1LDEwIEBAIHB1YmxpYzogCiAgICAg
dm9pZCByZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7CiAgICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVu
dHJpZXMoKTsKICAgICAKKyNpZiBFTkFCTEUoV01MKQorICAgIC8vIGNsZWFyIHRoZSBoaXN0b3J5
IG9mIGN1cnJlbnQgYnJvd3NlciBjb250ZXh0IGZvciB3bWwKKyAgICB2b2lkIGNsZWFyU3RhdGUo
KTsKKyNlbmRpZgogcHJpdmF0ZToKICAgICBCYWNrRm9yd2FyZExpc3QoUGFnZSopOwogCkluZGV4
OiBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
aHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9odG1s
L0hUTUxJbWFnZUVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDYgKzExNyw5IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZl
Y3RvcjxTdHJpbmc+JikgY29uc3Q7CiAKIHByaXZhdGU6CisjaWYgRU5BQkxFKFdNTCkKKyAgICBm
cmllbmQgY2xhc3MgV01MSW1hZ2VFbGVtZW50OworI2VuZGlmCiAgICAgSFRNTEltYWdlTG9hZGVy
IG1faW1hZ2VMb2FkZXI7CiAgICAgU3RyaW5nIHVzZW1hcDsKICAgICBib29sIGlzbWFwOwpJbmRl
eDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9o
dG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw4IEBACiAg
KiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqIENvcHly
aWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMSw2ICszMywxMCBAQAogI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVy
SW1hZ2UuaCIKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTEltYWdlRWxlbWVudC5oIgor
I2VuZGlmCisjaW5jbHVkZSAiSW1hZ2UuaCIKIAogdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIApAQCAt
MTQ2LDYgKzE1MiwxMSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2Fj
CiAgICAgaWYgKFJlbmRlck9iamVjdCogcmVuZGVyZXIgPSBlbGVtLT5yZW5kZXJlcigpKQogICAg
ICAgICBpZiAocmVuZGVyZXItPmlzSW1hZ2UoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlckltYWdlKj4ocmVuZGVyZXIpLT5zZXRDYWNoZWRJbWFnZShtX2ltYWdlKTsKKworI2lmIEVO
QUJMRShXTUwpCisgICAgaWYgKG1faW1hZ2UtPmltYWdlKCktPmlzTnVsbCgpICYmIG1fZWxlbWVu
dC0+aGFzVGFnTmFtZShpbWdUYWcpKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxJbWFnZUVsZW1l
bnQqPihtX2VsZW1lbnQpLT5yZWxvYWRJbWFnZUJ5U3JjQXR0cigpOworI2VuZGlmCiAgICAgICAg
ICAgICAKICAgICBpZiAoaW1hZ2UtPmVycm9yT2NjdXJyZWQoKSAmJiBlbGVtLT5oYXNUYWdOYW1l
KG9iamVjdFRhZykpCiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4oZWxl
bSktPnJlbmRlckZhbGxiYWNrQ29udGVudCgpOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxPcHRp
b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50
LmgJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9odG1sL0hUTUxPcHRpb25FbGVtZW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSw4IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50
dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGly
ayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUs
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTg2LDYgKzg4LDkg
QEAgcHJpdmF0ZToKICAgICBTdHJpbmcgbV92YWx1ZTsKICAgICBib29sIG1fc2VsZWN0ZWQ7CiAg
ICAgUmVuZGVyU3R5bGUqIG1fc3R5bGU7CisjaWYgRU5BQkxFKFdNTCkKKyAgICBmcmllbmQgY2xh
c3MgV01MT3B0aW9uRWxlbWVudDsKKyNlbmRpZgogfTsKIAogfSAvL25hbWVzcGFjZQpJbmRleDog
V2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDM1NzgwKQorKysgV2ViQ29yZS9odG1s
L0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw4IEBACiAgKiAg
ICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTYsOSArNTgsOSBAQCBwdWJsaWM6CiAgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGNh
blN0YXJ0U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZv
aWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29s
IGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsKIAogICAgIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7
Ci0gICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRy
dWUsIGJvb2wgZmlyZU9uQ2hhbmdlID0gZmFsc2UpOwogICAgIGludCBsYXN0U2VsZWN0ZWRMaXN0
SW5kZXgoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0
IHsgcmV0dXJuIHRydWU7IH0KQEAgLTE3MCw2ICsxNzIsOSBAQCBwcml2YXRlOgogICAgIFN0cmlu
ZyBtX3R5cGVkU3RyaW5nOwogCiAgICAgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvIG1f
Y29sbGVjdGlvbkluZm87CisjaWYgRU5BQkxFKFdNTCkKKyAgICBmcmllbmQgY2xhc3MgV01MU2Vs
ZWN0RWxlbWVudDsKKyNlbmRpZgogfTsKIAogI2lmZGVmIE5ERUJVRwpJbmRleDogV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmNwcAkocmV2aXNpb24gMzU3ODApCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChD
KSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNjcsNiArMjY5LDkgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFt
ZSwgRgogICAgICwgbV9maW5pc2hlZFBhcnNpbmdEdXJpbmdMb3dCYW5kd2lkdGhEaXNwbGF5KGZh
bHNlKQogICAgICwgbV9uZWVkVG9Td2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5KGZhbHNlKQog
I2VuZGlmIAorI2lmIEVOQUJMRShXTUwpCisgICAgLCBtX2ZvcmNlUmVsb2FkKGZhbHNlKQorI2Vu
ZGlmCiB7CiB9CiAKQEAgLTI4MTIsOCArMjgxNywyMiBAQCB2b2lkIEZyYW1lTG9hZGVyOjpjbGll
bnRSZWRpcmVjdGVkKGNvbnN0CiAgICAgbV9xdWlja1JlZGlyZWN0Q29taW5nID0gbG9ja0hpc3Rv
cnkgJiYgbV9kb2N1bWVudExvYWRlciAmJiAhaXNKYXZhU2NyaXB0Rm9ybUFjdGlvbjsKIH0KIAor
I2lmIEVOQUJMRShXTUwpCit2b2lkIEZyYW1lTG9hZGVyOjpzZXRGb3JjZVJlbG9hZChib29sIHJl
bG9hZCkKK3sKKyAgICBtX2ZvcmNlUmVsb2FkID0gcmVsb2FkOworfQorI2VuZGlmCisKIGJvb2wg
RnJhbWVMb2FkZXI6OnNob3VsZFJlbG9hZChjb25zdCBLVVJMJiBjdXJyZW50VVJMLCBjb25zdCBL
VVJMJiBkZXN0aW5hdGlvblVSTCkKIHsKKyNpZiBFTkFCTEUoV01MKQorICAgIC8vIEFzIGZvciBX
TUwgcGFnZSwgc29tZXRpbWVzIHdlIHdhbnQgdGhlIHBhZ2UgdG8gYmUgcmVsb2FkZWQgZXZlbiBp
ZiB0aGUgc2FtZSAKKyAgICAvLyBVUkwgd2l0aCBmcmFnbWVudAorICAgIGlmIChtX2ZvcmNlUmVs
b2FkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCiAgICAgLy8gVGhpcyBmdW5jdGlv
biBpbXBsZW1lbnRzIHRoZSBydWxlOiAiRG9uJ3QgcmVsb2FkIGlmIG5hdmlnYXRpbmcgYnkgZnJh
Z21lbnQgd2l0aGluCiAgICAgLy8gdGhlIHNhbWUgVVJMLCBidXQgZG8gcmVsb2FkIGlmIGdvaW5n
IHRvIGEgbmV3IFVSTCBvciB0byB0aGUgc2FtZSBVUkwgd2l0aCBubwogICAgIC8vIGZyYWdtZW50
IGlkZW50aWZpZXIgYXQgYWxsLiIKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkocmV2aXNpb24gMzU3
ODApCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjQsNiAr
MjY2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNsaWVudFJlZGlyZWN0
Q2FuY2VsbGVkT3JGaW5pc2hlZChib29sIGNhbmNlbFdpdGhMb2FkSW5Qcm9ncmVzcyk7CiAgICAg
ICAgIHZvaWQgY2xpZW50UmVkaXJlY3RlZChjb25zdCBLVVJMJiwgZG91YmxlIGRlbGF5LCBkb3Vi
bGUgZmlyZURhdGUsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgaXNKYXZhU2NyaXB0Rm9ybUFjdGlv
bik7CiAgICAgICAgIGJvb2wgc2hvdWxkUmVsb2FkKGNvbnN0IEtVUkwmIGN1cnJlbnRVUkwsIGNv
bnN0IEtVUkwmIGRlc3RpbmF0aW9uVVJMKTsKKyNpZiBFTkFCTEUoV01MKQorICAgICAgICB2b2lk
IHNldEZvcmNlUmVsb2FkKGJvb2wpOworI2VuZGlmCiAKICAgICAgICAgYm9vbCBpc1F1aWNrUmVk
aXJlY3RDb21pbmcoKSBjb25zdDsKIApAQCAtNjc3LDYgKzY4MiwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFN0cmluZyBtX3BlbmRpbmdTb3VyY2VJbkxvd0JhbmR3aWR0aERpc3Bs
YXk7ICAgICAgICAKICAgICAgICAgSGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IG1fZXh0ZXJuYWxS
ZXF1ZXN0c0luTG93QmFuZHdpZHRoRGlzcGxheTsKICNlbmRpZgorCisjaWYgRU5BQkxFKFdNTCkK
KyAgICAgICAgYm9vbCBtX2ZvcmNlUmVsb2FkOworI2VuZGlmCiAgICAgfTsKIAogfQpJbmRleDog
V2ViQ29yZS9sb2FkZXIvUmVzb3VyY2VMb2FkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMzU3ODApCisrKyBXZWJDb3JlL2xv
YWRlci9SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDExIEBA
CiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAorI2lm
IEVOQUJMRShXQlhNTCkKKyNpbmNsdWRlICJ3YnhtbC5oIgorI2luY2x1ZGUgIndieG1sX2NvbnYu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVm
ZmVyPiBSZXNvdXJjZUxvYWRlcjo6cmVzb3VyY2VEYXRhKCkKQEAgLTI0OCw2ICsyNTMsMjggQEAg
dm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlkUmVjZWl2ZURhdGEoY29ucwogICAgIC8vIGFueXRoaW5n
IGluY2x1ZGluZyBwb3NzaWJseSBkZXJlZmluZyB0aGlzOyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlz
IFJhZGFyIDMyNjYyMTYuCiAgICAgUmVmUHRyPFJlc291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhp
cyk7CiAKKyNpZiBFTkFCTEUoV0JYTUwpCisgICAgaWYgKGxlbmd0aCAmJiBtX3Jlc3BvbnNlLm1p
bWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIpIHsKKyAgICAgICAgV0JfVVRJ
TlkgKndieG1sID0gKFdCX1VUSU5ZKilkYXRhOworICAgICAgICBXQl9VTE9ORyB3YnhtbF9sZW4g
PSBsZW5ndGg7CisgICAgICAgIFdCX1VMT05HIHhtbF9sZW4gPSAwOworICAgICAgICBXQl9VVElO
WSAqeG1sID0gMDsKKyAgICAgICAgV0JYTUxFcnJvciByZXQgPSBXQlhNTF9PSzsgCisgICAgICAg
IFdCWE1MR2VuWE1MUGFyYW1zIHBhcmFtczsKKworICAgICAgICAvLyBJbml0IERlZmF1bHQgUGFy
YW1ldGVycworICAgICAgICBwYXJhbXMubGFuZyA9IFdCWE1MX0xBTkdfVU5LTk9XTjsKKyAgICAg
ICAgcGFyYW1zLmdlbl90eXBlID0gV0JYTUxfR0VOX1hNTF9JTkRFTlQ7CisgICAgICAgIHBhcmFt
cy5pbmRlbnQgPSAxOworICAgICAgICBwYXJhbXMua2VlcF9pZ25vcmFibGVfd3MgPSBGQUxTRTsK
KworICAgICAgICByZXQgPSB3YnhtbF9jb252X3dieG1sMnhtbF93aXRobGVuKHdieG1sLCB3Ynht
bF9sZW4sICZ4bWwsICZ4bWxfbGVuLCAmcGFyYW1zKTsKKyAgICAgICAgaWYgKHJldCAhPSBXQlhN
TF9PSykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YSA9IChjaGFyKil4bWw7Cisg
ICAgICAgIGxlbmd0aCA9IHhtbF9sZW47CisgICAgfQorI2VuZGlmCiAgICAgYWRkRGF0YShkYXRh
LCBsZW5ndGgsIGFsbEF0T25jZSk7CiAgICAgLy8gRklYTUU6IElmIHdlIGdldCBhIHJlc291cmNl
IHdpdGggbW9yZSB0aGFuIDJCIGJ5dGVzLCB0aGlzIGNvZGUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRo
aW5nLgogICAgIC8vIEhvd2V2ZXIsIHdpdGggdG9kYXkncyBjb21wdXRlcnMgYW5kIG5ldHdvcmtp
bmcgc3BlZWRzLCB0aGlzIHdvbid0IGhhcHBlbiBpbiBwcmFjdGljZS4KSW5kZXg6IFdlYkNvcmUv
cGFnZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9FdmVudEhh
bmRsZXIuY3BwCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzUyLDYgKzE3NTIsMTQgQEAgdm9pZCBFdmVudEhhbmRs
ZXI6OmRlZmF1bHRLZXlib2FyZEV2ZW50SAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBp
ZiAoZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVSswMDA5IikKICAgICAgICAgICAgIGRlZmF1
bHRUYWJFdmVudEhhbmRsZXIoZXZlbnQpOworI2lmIEVOQUJMRShXTUwpCisgICAgICAgIGVsc2Ug
aWYgKGV2ZW50LT5rZXlJZGVudGlmaWVyKCkgPT0gIkRvd24iKQorICAgICAgICAgICAgaWYgKG1f
ZnJhbWUtPnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5hZHZh
bmNlRm9jdXMoRm9jdXNEaXJlY3Rpb25Gb3J3YXJkLCBldmVudCkpCisgICAgICAgICAgICAgICAg
ZXZlbnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgIGVsc2UgaWYgKGV2ZW50LT5rZXlJ
ZGVudGlmaWVyKCkgPT0gIlVwIikKKyAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5wYWdlKCkgJiYg
bV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIoKS0+YWR2YW5jZUZvY3VzKEZvY3VzRGly
ZWN0aW9uQmFja3dhcmQsIGV2ZW50KSkKKyAgICAgICAgICAgICAgICBldmVudC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyNlbmRpZgogCiAgICAgICAgLy8gcHJvdmlkZXMgS0IgbmF2aWdhdGlvbiBh
bmQgc2VsZWN0aW9uIGZvciBlbmhhbmNlZCBhY2Nlc3NpYmlsaXR5IHVzZXJzCiAgICAgICAgaWYg
KEFYT2JqZWN0Q2FjaGU6OmFjY2Vzc2liaWxpdHlFbmhhbmNlZFVzZXJJbnRlcmZhY2VFbmFibGVk
KCkpCkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCShyZXZpc2lvbiAzNTc4MCkKKysrIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAg
ICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTQsNiArNTYsOSBAQAogI2luY2x1ZGUgPGtqcy9jb2xsZWN0b3IuaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4K
KyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNlbmRpZgogCiAj
aWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIkxvY2FsU3RvcmFnZS5oIgpAQCAtMTIz
LDYgKzEyOCw5IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50KiBjaHJvbWVDbGllbnQsIEMKICAg
ICAsIG1fcGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50Q291bnQoMCkKICAgICAsIG1fY3VzdG9tSFRN
TFRva2VuaXplclRpbWVEZWxheSgtMSkKICAgICAsIG1fY3VzdG9tSFRNTFRva2VuaXplckNodW5r
U2l6ZSgtMSkKKyNpZiBFTkFCTEUoV01MKQorICAgICwgbV93bWxCcndDb250ZXh0KDApCisjZW5k
aWYKIHsKICAgICBpZiAoIWFsbFBhZ2VzKSB7CiAgICAgICAgIGFsbFBhZ2VzID0gbmV3IEhhc2hT
ZXQ8UGFnZSo+OwpAQCAtNTU0LDYgKzU2MiwxOCBAQCB2b2lkIFBhZ2U6OmNoYW5nZVBlbmRpbmdC
ZWZvcmVVbmxvYWRFdmVuCiAgICAgcmV0dXJuOyAKIH0KIAorI2lmIEVOQUJMRShXTUwpCit2b2lk
IFBhZ2U6OnNldFdtbEJyd0NvbnRleHQoUmVmUHRyPFdNTEJyd0NvbnRleHQ+IGNvbnRleHQpIAor
eyAKKyAgICBtX3dtbEJyd0NvbnRleHQgPSBjb250ZXh0OyAKK30KKworV01MQnJ3Q29udGV4dCog
UGFnZTo6d21sQnJ3Q29udGV4dCgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gbV93bWxCcndDb250
ZXh0LmdldCgpOyAKK30KKyNlbmRpZgorCiB2b2lkIFBhZ2U6OnNldEN1c3RvbUhUTUxUb2tlbml6
ZXJUaW1lRGVsYXkoZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkpCiB7CiAgICAg
aWYgKGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgPCAwKSB7CkluZGV4OiBXZWJDb3JlL3Bh
Z2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmgJKHJldmlzaW9uIDM1
NzgwKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDgg
QEAKIC8vIC0qLSBtb2RlOiBjKys7IGMtYmFzaWMtb2Zmc2V0OiA0IC0qLQogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCkBAIC02NCw2ICs2Niw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFz
cyBTZXNzaW9uU3RvcmFnZTsKICNlbmRpZgogICAgIGNsYXNzIFNldHRpbmdzOworI2lmIEVOQUJM
RShXTUwpCisgICAgY2xhc3MgV01MQnJ3Q29udGV4dDsKKyNlbmRpZgogICAgIGNsYXNzIEtVUkw7
CiAKICAgICBlbnVtIFRleHRDYXNlU2Vuc2l0aXZpdHkgeyBUZXh0Q2FzZVNlbnNpdGl2ZSwgVGV4
dENhc2VJbnNlbnNpdGl2ZSB9OwpAQCAtMTY5LDYgKzE3NCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIHZvaWQgc2V0U2Vzc2lvblN0b3JhZ2UoUGFzc1JlZlB0cjxTZXNzaW9uU3Rv
cmFnZT4pOwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQorICAgICAgICB2b2lkIHNldFdtbEJy
d0NvbnRleHQoUmVmUHRyPFdNTEJyd0NvbnRleHQ+KTsKKyAgICAgICAgV01MQnJ3Q29udGV4dCog
d21sQnJ3Q29udGV4dCgpIGNvbnN0OworI2VuZGlmCiAgICAgICAgIHZvaWQgc2V0Q3VzdG9tSFRN
TFRva2VuaXplclRpbWVEZWxheShkb3VibGUpOwogICAgICAgICBib29sIGhhc0N1c3RvbUhUTUxU
b2tlbml6ZXJUaW1lRGVsYXkoKSBjb25zdCB7IHJldHVybiBtX2N1c3RvbUhUTUxUb2tlbml6ZXJU
aW1lRGVsYXkgIT0gLTE7IH0KICAgICAgICAgZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1l
RGVsYXkoKSBjb25zdCB7IEFTU0VSVChtX2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgIT0g
LTEpOyByZXR1cm4gbV9jdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5OyB9CkBAIC0yMjgsNiAr
MjM3LDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICNpZiBQTEFURk9STShXSU4pIHx8IChQTEFU
Rk9STShXWCkgJiYgZGVmaW5lZChfX1dYTVNXX18pKSB8fCAoUExBVEZPUk0oUVQpICYmIGRlZmlu
ZWQoUV9XU19XSU4pKQogICAgICAgICBzdGF0aWMgSElOU1RBTkNFIHNfaW5zdGFuY2VIYW5kbGU7
CiAjZW5kaWYKKworI2lmIEVOQUJMRShXTUwpCisgICAgICAgIFJlZlB0cjxXTUxCcndDb250ZXh0
PiBtX3dtbEJyd0NvbnRleHQ7CisjZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDM1
NzgwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTE3OSw2ICsxODEsMTIgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZEphdmFT
Y3JpcAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTWltZVR5cGVzKCkK
IHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogdHlwZXNbXSA9IHsKKyNpZiBFTkFCTEUoV01MKQor
ICAgICAgICAidGV4dC92bmQud2FwLndtbCIsCisjZW5kaWYKKyNpZiBFTkFCTEUoV0JYTUwpCisg
ICAgICAgICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiLAorI2VuZGlmCiAgICAgICAgICJ0ZXh0
L2h0bWwiLAogICAgICAgICAidGV4dC94bWwiLAogICAgICAgICAidGV4dC94c2wiLApJbmRleDog
V2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAkocmV2aXNpb24gMzU3
ODApCisrKyBXZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYyLDYgKzYyLDEyIEBAIHN0YXRpYyBjb25zdCBFeHRlbnNpb25NYXAgZXh0
ZW5zaW9uTWFwIFsKICAgICB7ICJ4cG0iLCAiaW1hZ2UveC14cG0iIH0sCiAgICAgeyAieHNsIiwg
InRleHQveHNsIiB9LAogICAgIHsgInhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwK
KyNpZiBFTkFCTEUoV01MKQorICAgIHsgIndtbCIsICJ0ZXh0L3ZuZC53YXAud21sIiB9LAorI2Vu
ZGlmCisjaWYgRU5BQkxFKFdCWE1MKQorICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24vdm5kLndh
cC53bWxjIiB9LAorI2VuZGlmCiAgICAgeyAwLCAwIH0KIH07CiAKSW5kZXg6IFdlYkNvcmUvd21s
L1dNTEFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5j
cHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorCisjaW5jbHVkZSAi
Q1NTSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMu
aCIKKyNpbmNsdWRlICJXTUxBRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOworCitX
TUxBRWxlbWVudDo6V01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1l
bnQqIGRvYykgCisgICAgOiBXTUxFbGVtZW50KG5hbWUsIGRvYykKK3sKKyAgICBzZXRJc0xpbmso
dHJ1ZSk7Cit9CisKK1dNTEFFbGVtZW50Ojp+V01MQUVsZW1lbnQoKQoreworfQorCit2b2lkIFdN
TEFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpIAoreworICAgIGJvb2wg
c2hvdWxkSGFuZGxlID0gZmFsc2U7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGNsaWNrRXZlbnQp
IHsKKyAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICB9IGVsc2UgaWYgKChldnQtPnR5
cGUoKSA9PSBrZXlwcmVzc0V2ZW50KSAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpICYmIGZvY3Vz
ZWQoKSkgeworICAgICAgICBTdHJpbmcga2V5ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+
KGV2dCktPmtleUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKGtleSA9PSAiRW50ZXIiKSAKKyAg
ICAgICAgICAgIHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgfQorIAorICAgIGlmIChzaG91bGRI
YW5kbGUgJiYgaXNMaW5rKCkpIHsKKyAgICAgICAgU3RyaW5nIHVybCA9IHBhcnNlVVJMKGdldEF0
dHJpYnV0ZShXTUxOYW1lczo6aHJlZkF0dHIpKTsKKworICAgICAgICBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQoZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwodXJsKSwg
Z2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dGFyZ2V0QXR0ciksIGV2dCwgZmFsc2UsIHRydWUpOwor
CisgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICB9CisgICAgZWxzZQorICAg
ICAgICBFdmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKK30KKworU3Ry
aW5nIFdNTEFFbGVtZW50Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0
ZSh0aXRsZUF0dHIpOworfQorCitib29sIFdNTEFFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxl
KEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5m
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+dGFic1RvTGlua3MoZXZlbnQpOworfQorCitib29sIFdN
TEFFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7IAorfQor
Cit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTEFFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBRWxl
bWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxBRWxl
bWVudF9oCisjZGVmaW5lIFdNTEFFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxBRWxlbWVudCA6IHB1YmxpYyAgV01M
RWxlbWVudHsKK3B1YmxpYzoKKyAgICBXTUxBRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwg
RG9jdW1lbnQqKTsKKyAgICB+V01MQUVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWZh
dWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1
c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJs
ZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisKK307CisKK30K
KworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvd21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTEFjY2Vzc0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIK
KyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTEFjY2Vz
c0VsZW1lbnQ6OldNTEFjY2Vzc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykKKyAgICA6IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKSAKK3sKK30KKwor
CitXTUxBY2Nlc3NFbGVtZW50Ojp+V01MQWNjZXNzRWxlbWVudCgpIAoreworICAgIFdNTEhlbHBl
cjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0TmVlZENoZWNrRGVja0FjY2VzcyhmYWxzZSk7Cit9
CisKK3ZvaWQgV01MQWNjZXNzRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZG9tYWluQXR0cikgewor
ICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgewor
ICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZh
cmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0RGVja0FjY2Vzc0RvbWFp
bihhdHRyLT52YWx1ZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwYXRoQXR0
cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgp
KSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52
YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0RGVja0FjY2Vz
c1BhdGgoYXR0ci0+dmFsdWUoKSk7CisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxBY2Nlc3NFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQWNjZXNzRWxl
bWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQWNjZXNzRWxlbWVudC5oCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRv
cmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBD
T1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24s
IE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxBY2Nlc3NFbGVtZW50
X2gKKyNkZWZpbmUgV01MQWNjZXNzRWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxFbGVtZW50Lmgi
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBX
TUxBY2Nlc3NFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MQWNj
ZXNzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworICAg
IHZpcnR1YWwgfldNTEFjY2Vzc0VsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNl
bmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3dtbC9XTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNs
dWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTEFuY2hvckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxUYXNrRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOworCitXTUxBbmNob3JF
bGVtZW50OjpXTUxBbmNob3JFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3Vt
ZW50KiBkb2MpIAorICAgIDogSFRNTEFuY2hvckVsZW1lbnQobmFtZSwgZG9jKSwgbV90YXNrKDAp
Cit7CisgICAgc2V0SHJlZigiIik7ICAgICAvLyB0aGlzIGlzIHRoZSBoYWNrIHNvIHRoYXQgYW5j
aG9yIHJlbmRlcnMgbGlrZSBhIGxpbmsKK30KKworV01MQW5jaG9yRWxlbWVudDo6fldNTEFuY2hv
ckVsZW1lbnQoKQoreworfQorCit2b2lkIFdNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGUpIAoreworICAgIGJvb2wgc2hvdWxkSGFuZGxlID0gZmFsc2U7CisgICAg
aWYgKGUtPnR5cGUoKSA9PSBjbGlja0V2ZW50KSB7CisgICAgICAgIHNob3VsZEhhbmRsZSA9IHRy
dWU7CisgICAgfSBlbHNlIGlmICgoZS0+dHlwZSgpID09IGtleWRvd25FdmVudCkgJiYgZS0+aXNL
ZXlib2FyZEV2ZW50KCkgJiYgZm9jdXNlZCgpKSB7CisgICAgICAgIFN0cmluZyBrZXkgPSBzdGF0
aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZSktPmtleUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYg
KGtleSA9PSAiRW50ZXIiKQorICAgICAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAoc2hvdWxkSGFuZGxlICYmIG1fdGFzaykgeworICAgICAgICBtX3Rhc2stPmV4
ZWMoZSk7CisgICAgICAgIGUtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorICAgIGVsc2UK
KyAgICAgICBFdmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZSk7Cit9CisKK3Zv
aWQgV01MQW5jaG9yRWxlbWVudDo6cmVnaXN0ZXJUYXNrKFdNTFRhc2tFbGVtZW50KiB0YXNrKQor
eyAKKyAgICBtX3Rhc2sgPSB0YXNrOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBbmNo
b3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVudC5o
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxBbmNob3JFbGVtZW50X2gKKyNk
ZWZpbmUgV01MQW5jaG9yRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MQW5jaG9yRWxlbWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50OworICAgICAg
ICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEFuY2hvckVsZW1lbnQgOiBwdWJsaWMgSFRNTEFu
Y2hvckVsZW1lbnQgeworcHVibGljOgorICAgIFdNTEFuY2hvckVsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxBbmNob3JFbGVtZW50
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCisg
ICAgdm9pZCByZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqKTsKKworcHJpdmF0ZToKKworICAg
IFdNTFRhc2tFbGVtZW50KiBtX3Rhc2s7CisKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5pbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
d21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACitu
YW1lc3BhY2U9IldNTCIKK2NwcE5hbWVzcGFjZT0iV2ViQ29yZSIKK25hbWVzcGFjZVVSST0iaHR0
cDovL3d3dy53YXBmb3J1bS5vcmcvIgorZ2VuZXJhdGVGYWN0b3J5PSIxIgorZ2VuZXJhdGVXcmFw
cGVyRmFjdG9yeT0iMSIKKworbmFtZQoraWQKK3RpdGxlCituZXdjb250ZXh0CitvcmRlcmVkCits
YWJlbAorb3B0aW9uYWwKK3R5cGUKK2hyZWYKK3ZhbHVlCitvbmVudGVyZm9yd2FyZAorb25lbnRl
cmJhY2t3YXJkCitvbnRpbWVyCitzZW5kcmVmZXJlcgorbWV0aG9kCitjYWNoZS1jb250cm9sCitl
bmN0eXBlCithY2NlcHQtY2hhcnNldAoraW5hbWUKK2l2YWx1ZQorbXVsdGlwbGUKK3RhYmluZGV4
CitvbnBpY2sKK2Zvcm1hdAorZW1wdHlvaworc2l6ZQorbWF4bGVuZ3RoCithbHQKK3NyYworbG9j
YWxzcmMKK3ZzcGFjZQoraHNwYWNlCithbGlnbgoraGVpZ2h0Cit3aWR0aAorY29sdW1ucworbW9k
ZQorZG9tYWluCitwYXRoCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxCcndDb250ZXh0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxCcndDb250ZXh0LmNwcAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvd21sL1dNTEJyd0NvbnRleHQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIw
MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisjaW5j
bHVkZSAiTmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgorI2luY2x1
ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxEb2N1bWVudC5oIgorI2luY2x1
ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVk
ZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitXTUxCcndDb250ZXh0OjpXTUxCcndDb250ZXh0KFBhZ2UqIHBhZ2UpCit7CisgICAg
bV9wYWdlID0gcGFnZTsKKyAgICBtX2hpc3RMZW4gPSAwOworICAgIG1fYWN0aXZlQ2FyZCA9IDA7
CisgICAgbV9oYXNEZWNrQWNjZXNzID0gZmFsc2U7Cit9CisKK1dNTEJyd0NvbnRleHQ6On5XTUxC
cndDb250ZXh0KCkKK3sKKyAgICBtX3ZhcmlhYmxlcy5jbGVhcigpOworICAgIG1fcGFnZSA9IDA7
CisgICAgbV9hY3RpdmVDYXJkID0gMDsKKyAgICBtX2hhc0RlY2tBY2Nlc3MgPSBmYWxzZTsKK30K
Kwordm9pZCBXTUxCcndDb250ZXh0OjpyZXNldCgpCit7CisgICAgLy9yZW1vdmUgYWxsIHRoZSB2
YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQgYnJvd3NlciBjb250ZXh0CisgICAgbV92YXJpYWJsZXMu
Y2xlYXIoKTsKKworICAgIC8vY2xlYXIgdGhlIG5hdmlnYXRpb24gaGlzdG9yeSBzdGF0ZSAKKyAg
ICBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5jbGVhclN0YXRlKCk7OworCisgICAgLy9yZXNl
dCBpbXBsZW1lbnRhdGlvbi1zcGVjZmljIHN0YXRlIGlmIFVBIGhhcworICAgIG1faGlzdExlbiA9
IDE7Cit9CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c3RvcmVWYXJpYWJsZShjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsKSAKK3sKKyAgICBtX3ZhcmlhYmxlcy5zZXQobmFtZSwg
dmFsKTsKK30KKwordm9pZCBXTUxCcndDb250ZXh0OjpzdG9yZVZhcmlhYmxlcyhWYXJpYWJsZU1h
cCYgdmFycykgCit7CisgICAgZm9yIChWYXJpYWJsZU1hcDo6aXRlcmF0b3IgaXQgPSB2YXJzLmJl
Z2luKCk7IGl0ICE9IHZhcnMuZW5kKCk7ICsraXQpIHsgCisgICAgICAgIG1fdmFyaWFibGVzLnNl
dChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOyAKKyAgICB9Cit9CisKK1N0cmluZyBXTUxCcndDb250
ZXh0OjpnZXRWYXJpYmFsZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0IAoreworICAgIHJldHVy
biBtX3ZhcmlhYmxlcy5nZXQobmFtZSk7Cit9CisKK2Jvb2wgV01MQnJ3Q29udGV4dDo6aGFzVmFy
aWFibGVzKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsKK30KKwor
UGFnZSogV01MQnJ3Q29udGV4dDo6cGFnZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9wYWdlOwor
fQorCitpbnQgV01MQnJ3Q29udGV4dDo6aGlzdG9yeUxlbmd0aCgpIGNvbnN0IHsKKyAgICByZXR1
cm4gbV9oaXN0TGVuOworfQorCit2b2lkIFdNTEJyd0NvbnRleHQ6OnNldEhpc3RvcnlMZW5ndGgo
aW50IGxlbikgeworICAgIG1faGlzdExlbiA9IGxlbjsKK30KKworV01MQ2FyZEVsZW1lbnQqIFdN
TEJyd0NvbnRleHQ6OmFjdGl2ZUNhcmQoKQoreworICAgIHJldHVybiBtX2FjdGl2ZUNhcmQ7Cit9
CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c2V0QWN0aXZlQ2FyZChXTUxDYXJkRWxlbWVudCogY2Fy
ZCkKK3sKKyAgICBtX2FjdGl2ZUNhcmQgPSBjYXJkOworfQorCit2b2lkIFdNTEJyd0NvbnRleHQ6
OnNldERlY2tBY2Nlc3NEb21haW4oY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgbV9hY2Nl
c3NEb21haW4gPSBkb21haW47Cit9CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c2V0RGVja0FjY2Vz
c1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fYWNjZXNzUGF0aCA9IHBhdGg7Cit9
CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c2V0TmVlZENoZWNrRGVja0FjY2Vzcyhib29sIG5lZWQp
Cit7CisgICAgaWYgKG1faGFzRGVja0FjY2VzcyAmJiBuZWVkKSB7CisgICAgICAgIFdNTEhlbHBl
cjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKE11bHRpQWNjZXNzRWxlbWVudHNFcnJvcik7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9oYXNEZWNrQWNjZXNzID0gbmVlZDsKKyAgICAgICAgbV9h
Y2Nlc3NQYXRoID0gU3RyaW5nKCk7CisgICAgICAgIG1fYWNjZXNzRG9tYWluID0gU3RyaW5nKCk7
CisgICAgfQorfQorCitib29sIFdNTEJyd0NvbnRleHQ6Omhhc0RlY2tBY2Nlc3MoKSBjb25zdAor
eworICAgIHJldHVybiBtX2hhc0RlY2tBY2Nlc3M7Cit9CisKK2Jvb2wgV01MQnJ3Q29udGV4dDo6
aXNEZWNrQWNjZXNzaWJsZSgpCit7CisgICAgaWYgKCFtX2hhc0RlY2tBY2Nlc3MgfHwgIW1fcGFn
ZSB8fCAhbV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSB8fCAhbV9wYWdlLT5iYWNrRm9yd2FyZExp
c3QoKS0+YmFja0l0ZW0oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBIaXN0b3J5SXRl
bSogaGlzdEl0ZW0gPSBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5iYWNrSXRlbSgpOworICAg
IEtVUkwgdXJsKGhpc3RJdGVtLT51cmxTdHJpbmcoKSk7CisgICAgU3RyaW5nIHByZXZIb3N0ID0g
dXJsLmhvc3QoKTsKKyAgICAvLyBmb3IgJ2ZpbGUnIFVSSSwgdGhlIGhvc3QgcGFydCBtYXkgYmUg
ZW1wdHksIHNvIHdlIHNob3VsZCBjb21wbGV0ZSBpdC4KKyAgICBpZiAocHJldkhvc3QuaXNFbXB0
eSgpKQorICAgICAgICBwcmV2SG9zdCA9ICJsb2NhbGhvc3QiOworICAgIFN0cmluZyBwcmV2UGF0
aCA9IHVybC5wYXRoKCk7CisKKyAgICBoaXN0SXRlbSA9IG1fcGFnZS0+YmFja0ZvcndhcmRMaXN0
KCktPmN1cnJlbnRJdGVtKCk7CisgICAgS1VSTCBjdXJVcmwoaGlzdEl0ZW0tPnVybFN0cmluZygp
KTsKKyAgICBTdHJpbmcgY3VyUGF0aCA9IGN1clVybC5wYXRoKCk7CisKKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ1JlZih1cmwsIGN1clVybCkpCisgICAgICAgcmV0dXJuICB0cnVlOworCisgICAgYm9v
bCBjYW5BY2Nlc3MgPSBmYWxzZTsKKyAgICAvLyAiLyIgaXMgdGhlIGRlZmF1bHQgdmFsdWUgaWYg
bm90IHNwZWNpZmllZAorICAgIGlmIChtX2FjY2Vzc1BhdGguaXNFbXB0eSgpKSAgCisgICAgICAg
IG1fYWNjZXNzUGF0aCA9ICIvIjsKKyAgICBlbHNlIGlmIChtX2FjY2Vzc1BhdGguZW5kc1dpdGgo
Ii8iKSAmJiAobV9hY2Nlc3NQYXRoICE9ICIvIikpCisgICAgICAgIG1fYWNjZXNzUGF0aCA9IG1f
YWNjZXNzUGF0aC5sZWZ0KChtX2FjY2Vzc1BhdGgubGVuZ3RoKCktMSkpOworCisgICAgLy8gY3Vy
cmVudCBkZWNrIGRvbWFpbiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc3BlY2lmaWVkCisg
ICAgaWYgKG1fYWNjZXNzRG9tYWluLmlzRW1wdHkoKSkKKyAgICAgICAgbV9hY2Nlc3NEb21haW4g
PSBwcmV2SG9zdDsKKworICAgIC8vY29udmVydCByZWxhdGl2ZSBVUkwgdG8gYWJzb2x1dGUgVVJM
IGJlZm9yZSBwZXJmb3JtaW5nIHBhdGggbWF0Y2hpbmcKKyAgICBpZiAocHJldkhvc3QgPT0gbV9h
Y2Nlc3NEb21haW4pIHsKKyAgICAgICAgaWYgKCFtX2FjY2Vzc1BhdGguc3RhcnRzV2l0aCgiLyIp
KSB7CisgICAgICAgICAgIGludCBpZHggPSBjdXJQYXRoLnJldmVyc2VGaW5kKCcvJyk7CisgICAg
ICAgICAgIGlmIChpZHggIT0gLTEpIHsKKyAgICAgICAgICAgICAgIGN1clBhdGggPSBjdXJQYXRo
LmxlZnQoaWR4KzEpOworICAgICAgICAgICAgICAgY3VyUGF0aCArPSBtX2FjY2Vzc1BhdGg7Cisg
ICAgICAgICAgICAgICBjdXJVcmwuc2V0UGF0aChjdXJQYXRoKTsKKyAgICAgICAgICAgICAgIG1f
YWNjZXNzUGF0aCA9IGN1clVybC5wYXRoKCk7CisgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
IH0KKworICAgIC8vIHBhdGggcHJlZml4IG1hdGNoaW5nCisgICAgaWYgKHByZXZQYXRoLnN0YXJ0
c1dpdGgobV9hY2Nlc3NQYXRoKSAmJiAKKyAgICAgICAoKHByZXZQYXRoW21fYWNjZXNzUGF0aC5s
ZW5ndGgoKV0gPT0gJy8nKSB8fCAocHJldlBhdGgubGVuZ3RoKCkgPT0gbV9hY2Nlc3NQYXRoLmxl
bmd0aCgpKSkpIHsKKyAgICAgICAgY2FuQWNjZXNzID0gdHJ1ZTsKKworICAgICAgICAvLyBkb21h
aW4gc3VmZml4IG1hdGNoaW5nCisgICAgICAgIHVuc2lnbmVkIGRvbWFpbkxlbiA9IG1fYWNjZXNz
RG9tYWluLmxlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBob3N0TGVuID0gcHJldkhvc3QubGVu
Z3RoKCk7CisgICAgICAgIGlmIChwcmV2SG9zdC5lbmRzV2l0aChtX2FjY2Vzc0RvbWFpbikgJiYg
CisgICAgICAgICAgIChwcmV2SG9zdFtob3N0TGVuLWRvbWFpbkxlbi0xXSA9PSAnLicpIHx8ICho
b3N0TGVuID09IGRvbWFpbkxlbikpIHsKKyAgICAgICAgICAgIGNhbkFjY2VzcyA9IHRydWU7Cisg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjYW5BY2Nlc3MgPSBmYWxzZTsKKyAgICAgICAg
fQorCisgICAgfQorCisgICAgcmV0dXJuICBjYW5BY2Nlc3M7Cit9CisKK30KSW5kZXg6IFdlYkNv
cmUvd21sL1dNTEJyd0NvbnRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxCcndD
b250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxCcndDb250ZXh0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEJyd0NvbnRleHRfaAor
I2RlZmluZSBXTUxCcndDb250ZXh0X2gKKworI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBQYWdlOworY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CisKK3R5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gVmFyaWFibGVNYXA7CisKK2NsYXNzIFdNTEJyd0Nv
bnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXTUxCcndDb250ZXh0PiB7CisKK3B1YmxpYzoKKyAg
ICBXTUxCcndDb250ZXh0KFBhZ2UqKTsKKyAgICB+V01MQnJ3Q29udGV4dCgpOworCisgICAgLy8g
cmVzZXQgdGhlIGJyb3dzZXIgY29udGV4dCB3aGVuICdOZXdjb250ZXh0JyBhdHRyaWJ1dGUgb2Yg
Y2FyZCBlbGVtZW50IGlzCisgICAgLy8gcGVyZm9ybWVkIGFzIHBhcnQgb2YgZ28gdGFzaworICAg
IHZvaWQgcmVzZXQoKTsKKworICAgIC8vIHZhcmlhYmxlcyBvcGVyYXRpb25zIAorICAgIHZvaWQg
c3RvcmVWYXJpYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHN0
b3JlVmFyaWFibGVzKFZhcmlhYmxlTWFwJik7CisgICAgU3RyaW5nIGdldFZhcmliYWxlKGNvbnN0
IFN0cmluZyYpIGNvbnN0OworICAgIGJvb2wgaGFzVmFyaWFibGVzKCkgY29uc3Q7CisKKyAgICBp
bnQgaGlzdG9yeUxlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0SGlzdG9yeUxlbmd0aChpbnQp
OworCisgICAgUGFnZSogcGFnZSgpIGNvbnN0OworCisgICAgV01MQ2FyZEVsZW1lbnQqIGFjdGl2
ZUNhcmQoKTsKKyAgICB2b2lkIHNldEFjdGl2ZUNhcmQoV01MQ2FyZEVsZW1lbnQqKTsKKworICAg
IC8vIGRlY2sgYWNjZXNzIGNvbnRyb2wKKyAgICB2b2lkIHNldERlY2tBY2Nlc3NEb21haW4oY29u
c3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXREZWNrQWNjZXNzUGF0aChjb25zdCBTdHJpbmcmKTsK
KyAgICB2b2lkIHNldE5lZWRDaGVja0RlY2tBY2Nlc3MoYm9vbCk7CisgICAgYm9vbCBoYXNEZWNr
QWNjZXNzKCkgY29uc3Q7CisgICAgYm9vbCBpc0RlY2tBY2Nlc3NpYmxlKCk7Citwcml2YXRlOgor
ICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcmlhYmxlczsKKyAgICBpbnQg
bV9oaXN0TGVuOworICAgIFdNTENhcmRFbGVtZW50KiBtX2FjdGl2ZUNhcmQ7CisgICAgU3RyaW5n
IG1fYWNjZXNzRG9tYWluOworICAgIFN0cmluZyBtX2FjY2Vzc1BhdGg7CisgICAgYm9vbCBtX2hh
c0RlY2tBY2Nlc3M7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS93bWwvV01MQ2FyZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTENh
cmRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTENhcmRFbGVtZW50
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNs
dWRlICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRpbWVyRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxUYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9yLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxDYXJkRWxlbWVudDo6
V01MQ2FyZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRv
YykKKyAgICA6IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV9pc1Zpc2libGUoZmFs
c2UpCisgICAgLCBtX2lzTmV3Q29udGV4dChmYWxzZSkKKyAgICAsIG1faXNPcmRlcmVkKHRydWUp
CisgICAgLCBtX3RlbXBsYXRlKDApCisgICAgLCBtX2V2bnRIYW5kbGVyKDApCisgICAgLCBtX2hh
c0ludHJFdmVudChmYWxzZSkKKyAgICAsIG1fZXZ0VGltZXIoMCkKK3sKK30KKworV01MQ2FyZEVs
ZW1lbnQ6On5XTUxDYXJkRWxlbWVudCgpIAoreworICAgIGlmIChtX2V2bnRIYW5kbGVyKSB7Cisg
ICAgICAgIGRlbGV0ZSBtX2V2bnRIYW5kbGVyOworICAgICAgICBtX2V2bnRIYW5kbGVyID0gMDsK
KyAgICB9CisKKyAgICBtX3RlbXBsYXRlID0gMDsKKyAgICBtX2V2dFRpbWVyID0gMDsKK30KKwor
dm9pZCBXTUxDYXJkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
KiBhdHRyKQoreworICAgIFdNTEludHJFdmVudFR5cGUgZXR5cGUgPSBVbmtub3duOworCisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSB0aXRsZUF0dHIpIHsKKyAgICAgICAgbV90aXRsZSA9IFdNTEhl
bHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKKyAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVudGVyZm9yd2FyZEF0dHIpIHsKKyAgICAgICAg
ZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
bmVudGVyYmFja3dhcmRBdHRyKSB7CisgICAgICAgIGV0eXBlID0gT25FbnRlckJhY2t3YXJkOwor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9udGltZXJBdHRyKSB7CisgICAgICAgIGV0
eXBlID0gT25UaW1lcjsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuZXdjb250ZXh0
QXR0cikgeworICAgICAgICBtX2lzTmV3Q29udGV4dCA9IChhdHRyLT52YWx1ZSgpID09ICJ0cnVl
IikgPyB0cnVlIDogZmFsc2U7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb3JkZXJl
ZEF0dHIpIHsKKyAgICAgICAgbV9pc09yZGVyZWQgPSAoYXR0ci0+dmFsdWUoKSA9PSAidHJ1ZSIp
ID8gdHJ1ZSA6IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyByZWdpc3RlciBpbnRyaW5zaWMg
ZXZlbnQgdG8gY2FyZAorICAgIGlmIChldHlwZSAhPSBVbmtub3duKSB7CisgICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOworICAgICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKCJnbyIsICJnbyIs
ICIiKTsKKyAgICAgICAgRWxlbWVudCogZ28gPSBXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01M
RWxlbWVudChxTmFtZSwgZG9jdW1lbnQoKSwgZmFsc2UpOyAKKyAgICAgICAgU3RyaW5nIGhyZWYg
PSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwg
ImVzY2FwZSIpOworICAgICAgICBnby0+c2V0QXR0cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwg
ZWMpOworCisgICAgICAgIFdNTEludHJpbnNpY0V2ZW50IGV2OworICAgICAgICBldi50YXNrID0g
c3RhdGljX2Nhc3Q8V01MR29FbGVtZW50Kj4oZ28pOworICAgICAgICBldi50YXJnZXRVUkkgPSBo
cmVmOyAKKworICAgICAgICBpZiAoIW1fZXZudEhhbmRsZXIpIHsKKyAgICAgICAgICAgIG1fZXZu
dEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIH0KKwor
ICAgICAgICBzZXRIYXNJbnRyRXZlbnQodHJ1ZSk7CisgICAgICAgIG1fZXZudEhhbmRsZXItPnJl
Z2lzdGVySW50cmluc2ljRXZlbnQoZXR5cGUsIGV2KTsKKyAgICB9Cit9CisKK1JlbmRlck9iamVj
dCogV01MQ2FyZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5
bGUqIHN0eWxlKSAKK3sKKyAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICBzdHlsZS0+c2V0
RGlzcGxheShOT05FKTsKKyAgICAKKyAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmpl
Y3QodGhpcywgc3R5bGUpOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpzZXRWaXNpYmlsaXR5
KGJvb2wgaXNWaXNpYmxlKSAKK3sKKyAgICBtX2lzVmlzaWJsZSA9IGlzVmlzaWJsZTsKK30KKwor
Ym9vbCBXTUxDYXJkRWxlbWVudDo6dmlzaWJsZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX2lz
VmlzaWJsZTsKK30KKworYm9vbCBXTUxDYXJkRWxlbWVudDo6aXNOZXdDb250ZXh0KCkgY29uc3Qg
Cit7CisgICAgcmV0dXJuIG1faXNOZXdDb250ZXh0OworfQorCitib29sIFdNTENhcmRFbGVtZW50
Ojppc09yZGVyZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9pc09yZGVyZWQ7Cit9CisKK1N0
cmluZyBXTUxDYXJkRWxlbWVudDo6dGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpdGxl
OyAKK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6YmluZFRlbXBsYXRlKFdNTFRlbXBsYXRlRWxl
bWVudCogdGVtcGwpIAoreworICAgIG1fdGVtcGxhdGUgPSB0ZW1wbDsKK30KKworV01MVGVtcGxh
dGVFbGVtZW50KiBXTUxDYXJkRWxlbWVudDo6dGVtcGxhdGVFbGVtZW50KCkKK3sKKyAgICByZXR1
cm4gbV90ZW1wbGF0ZTsKK30KKworV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBXTUxDYXJkRWxl
bWVudDo6ZXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAobV9oYXNJbnRyRXZlbnQgJiYgIW1fZXZu
dEhhbmRsZXIpICB7CisgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyKCk7CisgICAgfQorICAgIHJldHVybiBtX2V2bnRIYW5kbGVyOworfQorCit2b2lk
IFdNTENhcmRFbGVtZW50OjpzZXRIYXNJbnRyRXZlbnQoYm9vbCBoYXMpCit7CisgICAgbV9oYXNJ
bnRyRXZlbnQgPSBoYXM7Cit9CisKK2Jvb2wgV01MQ2FyZEVsZW1lbnQ6Omhhc0ludHJFdmVudCgp
Cit7CisgICAgcmV0dXJuIG1faGFzSW50ckV2ZW50OworfQorCit2b2lkIFdNTENhcmRFbGVtZW50
OjpzZXRJbnRyRXZlbnRUaW1lcihXTUxUaW1lckVsZW1lbnQqIHRpbWVyKQoreworICAgIC8vIG9u
bHkgb25lIHRpbWVyIGlzIGFsbG93ZWQgaW4gYSBjYXJkIAorICAgIGlmICghbV9ldnRUaW1lcikg
eworICAgICAgICBtX2V2dFRpbWVyID0gdGltZXI7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9l
dnRUaW1lciA9IDA7CisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9y
KE11bHRpVGltZXJFbGVtZW50c0Vycm9yKTsKKyAgICB9Cit9CisKK1dNTFRpbWVyRWxlbWVudCog
V01MQ2FyZEVsZW1lbnQ6OmV2ZW50VGltZXIoKQoreworICAgIHJldHVybiBtX2V2dFRpbWVyOwor
fQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpyZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQq
IGUpCit7CisgICAgaWYgKGUpIHsKKyAgICAgICAgVmVjdG9yPFdNTERvRWxlbWVudCo+OjppdGVy
YXRvciBpdCA9IG1fZG9WZWNzLmJlZ2luKCk7CisgICAgICAgIFdNTERvRWxlbWVudCogZG9lID0g
MDsKKyAgICAgICAgd2hpbGUgKGl0ICE9IG1fZG9WZWNzLmVuZCgpKSB7CisgICAgICAgICAgICBk
b2UgPSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPigqaXQrKyk7CisKKyAgICAgICAgICAgIGlm
IChkb2UtPmRvTmFtZSgpID09IGUtPmRvTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgV01MSGVs
cGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoU2FtZU5hbWVEb0VsZW1lbnRzRXJyb3IpOwor
ICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBtX2RvVmVjcy5hcHBlbmQoZSk7CisgICAgICAgIGUtPnNldEFjdGl2ZSh0cnVlKTsKKyAgICB9
Cit9CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnNoYWRvd0RvRWxlbWVudElmTmVlZGVkKCkKK3sK
KyAgICBpZiAoIW1fdGVtcGxhdGUpIAorICAgICAgICByZXR1cm47CisKKyAgICBWZWN0b3I8V01M
RG9FbGVtZW50Kj4gdGVtcGxEb05hbWVWZWNzID0gbV90ZW1wbGF0ZS0+Z2V0RG9FbGVtZW50cygp
OworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6aXRlcmF0b3IgY2FyZEl0ID0gbV9kb1ZlY3Mu
YmVnaW4oKTsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0ZXJhdG9yIHRlbXBsSXQgPSB0
ZW1wbERvTmFtZVZlY3MuYmVnaW4oKTsgCisKKyAgICBTdHJpbmcgdGVtcGxEb05hbWU7CisgICAg
U3RyaW5nIGNhcmREb05hbWU7CisgICAgV01MRG9FbGVtZW50KiB0ZW1wbERvID0gMDsKKyAgICBm
b3IgKDsgdGVtcGxJdCAhPSB0ZW1wbERvTmFtZVZlY3MuZW5kKCk7ICsrdGVtcGxJdCkgeworICAg
ICAgICB0ZW1wbERvID0gKnRlbXBsSXQ7CisgICAgICAgIHRlbXBsRG9OYW1lID0gdGVtcGxEby0+
ZG9OYW1lKCk7CisgICAgICAgIGJvb2wgaXNBY3RpdmUgPSB0cnVlOworICAgICAgICBmb3IgKGNh
cmRJdCA9IG1fZG9WZWNzLmJlZ2luKCk7IGNhcmRJdCAhPSBtX2RvVmVjcy5lbmQoKTsgKytjYXJk
SXQpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wbERvTmFtZSA9PSAoKmNhcmRJdCktPmRvTmFtZSgp
KSB7CisgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsRG8tPnNldEFj
dGl2ZShpc0FjdGl2ZSk7CisgICAgfQorfQorCisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OmhhbmRs
ZUludHJFdmVudElmTmVlZGVkKCkKK3sKKyAgICBGcmFtZUxvYWRlciAqbG9hZGVyID0gZG9jdW1l
bnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCk7CisgICAgaW50IGN1ckhpc3RMZW4gPSBsb2FkZXItPmdl
dEhpc3RvcnlMZW5ndGgoKTsKKyAgICBpbnQgb2xkSGlzdExlbiA9IFdNTEhlbHBlcjo6Y3VycmVu
dEJyd0NvbnRleHQoKS0+aGlzdG9yeUxlbmd0aCgpOworCisgICAgLy8gY2FsY3VsYXRlIHRoZSBl
bnRyeSBtZXRob2Qgb2YgY3VycmVudCBjYXJkIAorICAgIFdNTEludHJFdmVudFR5cGUgZXR5cGU7
CisgICAgaWYgKG9sZEhpc3RMZW4gPiBjdXJIaXN0TGVuKSB7CisgICAgICAgIGV0eXBlID0gT25F
bnRlckJhY2t3YXJkOworICAgIH0gZWxzZSBpZiAob2xkSGlzdExlbiA8IGN1ckhpc3RMZW4pIHsK
KyAgICAgICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICB9IGVsc2UgeworICAgICAgICBl
dHlwZSA9IFVua25vd247CisgICAgfQorIAorICAgIC8vIHVwZGF0ZSB0aGUgaGhpc3RvcnkgbGVu
Z3RoIGluIHRoZSBjdXJyZW50IGJyb3dzZXIgY29udGV4dAorICAgIFdNTEhlbHBlcjo6Y3VycmVu
dEJyd0NvbnRleHQoKS0+c2V0SGlzdG9yeUxlbmd0aChjdXJIaXN0TGVuKTsKKyAKKyAgICAvLyBo
YW5kbGUgaW50cmluc2ljIGV2ZW50LCBhbmQgc2hhZG93IHRoZSBkZWNrLWxldmVsIGV2ZW50IGlm
IG5lZWRlZAorICAgIGJvb2wgaGFzSW50ckV2ZW50ID0gIGZhbHNlOworICAgIFdNTEludHJpbnNp
Y0V2ZW50SGFuZGxlciogZXZIYW5kbGVyID0gbV9ldm50SGFuZGxlcjsgCisgICAgaWYgKGV0eXBl
ICE9IFVua25vd24pIHsKKyAgICAgICAgaWYgKGV2SGFuZGxlciAmJiBldkhhbmRsZXItPmhhc0lu
dHJpbnNpY0V2ZW50KGV0eXBlKSkgeworICAgICAgICAgICAgICAgIGhhc0ludHJFdmVudCA9IHRy
dWU7CisgICAgICAgIH0gZWxzZSBpZiAobV90ZW1wbGF0ZSkgeworICAgICAgICAgICAgZXZIYW5k
bGVyID0gbV90ZW1wbGF0ZS0+ZXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBpZiAoZXZIYW5k
bGVyICYmIGV2SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQoZXR5cGUpKQorICAgICAgICAgICAg
ICAgIGhhc0ludHJFdmVudCA9IHRydWU7CisgICAgICAgIH0KKyAgICB9CisgCisgICAgaWYgKGhh
c0ludHJFdmVudCkgeworICAgICAgICBldkhhbmRsZXItPnRyaWdnZXJJbnRyaW5zaWNFdmVudChl
dHlwZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gc3RhcnQgdGhlIHRpbWVyIGlmIGl0IGV4
aXN0cyBpbiBjdXJyZW50IGNhcmQKKyAgICAgICAgaWYgKG1fZXZ0VGltZXIpIHsKKyAgICAgICAg
ICAgIG1fZXZ0VGltZXItPnN0YXJ0KCk7CisgICAgICAgIH0KKworCisgICAgICAgIC8vaW5pdGlh
bGlzZSBpbnB1dCBlbGVtZW50cyhlZy4gaW5wdXQsIHNlbGVjdCwgZXRjKSBpbiB0aGlzIGNhcmQK
KyAgICAgICAgTm9kZSogbm9kZSA9IHRoaXM7CisgICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUt
PnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1l
KGlucHV0VGFnKSkgeworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdNTElucHV0RWxlbWVu
dCo+KG5vZGUpLT5pbml0KCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG5vZGUtPmhhc1RhZ05h
bWUoc2VsZWN0VGFnKSkgeworICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFdNTFNlbGVjdEVs
ZW1lbnQqPihub2RlKS0+c2VsZWN0SW5pdGlhbE9wdGlvbnMoKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgfQorfQorCit2b2lkIFdNTENhcmRFbGVtZW50Ojp1cGRhdGVUYWJsZUVs
ZW1lbnQoKQoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzOyAKKyAgICBXTUxUYWJsZUVsZW1lbnQq
IHRhYmxlID0gMDsKKyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKCkp
KSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVUYWcpKSB7
CisgICAgICAgICAgICB0YWJsZSA9IHN0YXRpY19jYXN0PFdNTFRhYmxlRWxlbWVudCo+KG5vZGUp
OworICAgICAgICAgICAgaWYgKHRhYmxlKQorICAgICAgICAgICAgICAgIHRhYmxlLT5pbml0KCk7
CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShXTUxOYW1lczo6Y2FyZFRhZykp
IHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCit9CkluZGV4OiBX
ZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dN
TENhcmRFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVu
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxDYXJkRWxl
bWVudF9oCisjZGVmaW5lIFdNTENhcmRFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGVtcGxhdGVFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MVGFza0VsZW1lbnQ7Citj
bGFzcyBXTUxUaW1lckVsZW1lbnQ7CitjbGFzcyBXTUxEb0VsZW1lbnQ7CisKK2NsYXNzIFdNTENh
cmRFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQgeworcHVibGljOgorICAgIFdNTENhcmRFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTENh
cmRFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKik7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVy
KFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKworICAgIHZvaWQgc2V0VmlzaWJpbGl0eShi
b29sKTsKKyAgICBib29sIHZpc2libGUoKSBjb25zdDsKKworICAgIGJvb2wgaXNOZXdDb250ZXh0
KCkgY29uc3Q7CisgICAgYm9vbCBpc09yZGVyZWQoKSBjb25zdDsKKworICAgIFN0cmluZyB0aXRs
ZSgpIGNvbnN0OworCisgICAgdm9pZCBiaW5kVGVtcGxhdGUoV01MVGVtcGxhdGVFbGVtZW50Kik7
CisgICAgV01MVGVtcGxhdGVFbGVtZW50KiB0ZW1wbGF0ZUVsZW1lbnQoKTsKKworICAgIFdNTElu
dHJpbnNpY0V2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyKCk7CisgICAgYm9vbCBoYXNJbnRyRXZl
bnQoKTsKKyAgICB2b2lkIHNldEhhc0ludHJFdmVudChib29sKTsKKyAgICB2b2lkIGhhbmRsZUlu
dHJFdmVudElmTmVlZGVkKCk7CisKKyAgICB2b2lkIHNldEludHJFdmVudFRpbWVyKFdNTFRpbWVy
RWxlbWVudCopOworICAgIFdNTFRpbWVyRWxlbWVudCogZXZlbnRUaW1lcigpOworCisgICAgdm9p
ZCByZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQqKTsKKyAgICB2b2lkIHNoYWRvd0RvRWxl
bWVudElmTmVlZGVkKCk7CisKKyAgICB2b2lkIHVwZGF0ZVRhYmxlRWxlbWVudCgpOworcHJpdmF0
ZToKKyAgICBib29sIG1faXNWaXNpYmxlOworICAgIFN0cmluZyBtX3RpdGxlOworICAgIGJvb2wg
bV9pc05ld0NvbnRleHQ7CisgICAgYm9vbCBtX2lzT3JkZXJlZDsKKyAgICBXTUxUZW1wbGF0ZUVs
ZW1lbnQqIG1fdGVtcGxhdGU7CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBtX2V2bnRI
YW5kbGVyOworICAgIGJvb2wgbV9oYXNJbnRyRXZlbnQ7CisgICAgV01MVGltZXJFbGVtZW50KiBt
X2V2dFRpbWVyOyAKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gbV9kb1ZlY3M7Cit9OworCit9
IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb0VsZW1lbnQuY3BwCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNp
bmNsdWRlICJGcmFtZUxvYWRlci5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
IkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgorI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MUG9zdGZpZWxkRWxlbWVudC5oIgor
I2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0Lmgi
CisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgi
CisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKKworV01MRG9FbGVtZW50OjpXTUxEb0VsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0p
CisgICAgOiBIVE1MSW5wdXRFbGVtZW50KHRhZywgZG9jLCBmb3JtKQorICAgICwgbV90YXNrKDAp
CisgICAgLCBtX2lzT3B0aW9uKGZhbHNlKQorICAgICwgbV9pc05vb3AoZmFsc2UpCisgICAgLCBt
X2lzQWN0aXZlKGZhbHNlKQoreworfQorCitXTUxEb0VsZW1lbnQ6On5XTUxEb0VsZW1lbnQoKSB7
fQorCit2b2lkIFdNTERvRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZSkgCit7
CisgICAgaWYgKChlLT50eXBlKCkgPT0gY2xpY2tFdmVudCkgJiYgIW1faXNPcHRpb24pIHsKKwor
ICAgICAgICBpZiAoKG1fdHlwZSA9PSAiYWNjZXB0IikgfHwgKG1fdHlwZSA9PSAib3B0aW9ucyIp
KSB7IAorICAgICAgICAgICAgaWYgKG1fdGFzaykKKyAgICAgICAgICAgICAgICBtX3Rhc2stPmV4
ZWMoZSk7CisgICAgICAgIH0gZWxzZSBpZiAobV90eXBlID09ICJwcmV2IikgeworICAgICAgICAg
ICAgLy8gc3RvcCB0aGUgdGltZXIgb2YgdGhlIGN1cnJlbnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUK
KyAgICAgICAgICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gV01MSGVscGVyOjpjdXJyZW50QnJ3
Q29udGV4dCgpLT5hY3RpdmVDYXJkKCk7CisgICAgICAgICAgICBpZiAoY2FyZCAmJiBjYXJkLT5l
dmVudFRpbWVyKCkpIHsKKyAgICAgICAgICAgICAgICBjYXJkLT5ldmVudFRpbWVyKCktPnN0b3Ao
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUGFnZSogcGFnZSA9IFdNTEhlbHBlcjo6
Y3VycmVudEJyd0NvbnRleHQoKS0+cGFnZSgpOworICAgICAgICAgICAgcGFnZS0+Z29CYWNrKCk7
CisgICAgICAgIH0gZWxzZSBpZiAobV90eXBlID09ICJyZXNldCIpIHsKKyAgICAgICAgICAgIFdN
TEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+cmVzZXQoKTsKKyAgICAgICAgfSBlbHNlIGlm
IChtX3R5cGUgPT0gImRlbGV0ZSIpIHsKKyAgICAgICAgICAgIC8vVE9ETworICAgICAgICB9IGVs
c2UgeyAKKyAgICAgICAgICAgIC8vIEFzIGZvciAnaGVscCcsJ3Vua25vd24nLCAnWC0qLHgtKics
J1Zbdl1OW25dRFtkXS4qJywgd2UgZG8gbm90aGluZworICAgICAgICB9CisgICAgfQorCit9CisK
K3ZvaWQgV01MRG9FbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKK3sKKyAgICBm
b3IgKE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQt
PnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKHRlbXBsYXRl
VGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MVGVtcGxhdGVFbGVtZW50Kj4ocGFy
ZW50KS0+cmVnaXN0ZXJEb0VsZW1lbnQodGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfWVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShjYXJkVGFnKSkgeworICAgICAgICAgICAg
c3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihwYXJlbnQpLT5yZWdpc3RlckRvRWxlbWVudCh0
aGlzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorfQorCitSZW5kZXJP
YmplY3QqIFdNTERvRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIHJhLCBSZW5k
ZXJTdHlsZSogcnMpIAoreworICAgIGlmICghbV9pc0FjdGl2ZSB8fCBtX2lzT3B0aW9uIHx8IG1f
aXNOb29wKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uID0g
bmV3IChyYSkgUmVuZGVyQnV0dG9uKHRoaXMpOyAKKyAgICBycy0+c2V0QmFja2dyb3VuZENvbG9y
KENvbG9yOjpsaWdodEdyYXkpOworICAgIGJ1dHRvbi0+c2V0U3R5bGUocnMpOworICAgIGJ1dHRv
bi0+c2V0VGV4dChtX2xhYmVsLmlzRW1wdHkoKSA/IG1fbmFtZSA6IG1fbGFiZWwpOworICAgIC8v
YnV0dG9uLT51cGRhdGVCZWZvcmVBZnRlckNvbnRlbnQoUmVuZGVyU3R5bGU6OkFGVEVSKTsKKyAg
ICByZXR1cm4gYnV0dG9uOworfQorCit2b2lkIFdNTERvRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKSAKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IHR5cGVBdHRyKSB7CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHIt
PnZhbHVlKCkpKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRF
cnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBtX3R5cGUgPSBhdHRyLT52YWx1ZSgpOworCisgICAgICAg
IGlmIChtX25hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9uYW1lID0gbV90eXBlOworCisg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKFdN
TEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIFdN
TEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5j
ZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBtX25hbWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGxhYmVsQXR0
cikgeworICAgICAgICBtX2xhYmVsID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHIt
PnZhbHVlKCksIGRvY3VtZW50KCkpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9w
dGlvbmFsQXR0cikgeworICAgICAgICBtX2lzT3B0aW9uID0gKGF0dHItPnZhbHVlKCkgPT0gInRy
dWUiKSA/IHRydWUgOiBmYWxzZTsKKyAgICB9CisKK30KKwordm9pZCBXTUxEb0VsZW1lbnQ6OnJl
Z2lzdGVyVGFzayhXTUxUYXNrRWxlbWVudCogdGFzaykgCit7CisgICAgbV90YXNrID0gdGFzazsK
K30KKwordm9pZCBXTUxEb0VsZW1lbnQ6OnNldE5vb3AoYm9vbCBub29wKSAKK3sKKyAgICBtX2lz
Tm9vcCA9IG5vb3A7Cit9CisKK1N0cmluZyBXTUxEb0VsZW1lbnQ6OmRvTmFtZSgpIGNvbnN0IAor
eworICAgIHJldHVybiBtX25hbWU7Cit9CisKK3ZvaWQgV01MRG9FbGVtZW50OjpzZXRBY3RpdmUo
Ym9vbCBhY3RpdmUpCit7CisgICAgbV9pc0FjdGl2ZSA9IGFjdGl2ZTsKK30KKyAKK2Jvb2wgV01M
RG9FbGVtZW50Ojppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXNBY3RpdmU7Cit9
CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTERvRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvd21sL1dNTERvRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01M
RG9FbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdN
TERvRWxlbWVudF9oCisjZGVmaW5lIFdNTERvRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnQ7CitjbGFz
cyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFzcyBXTUxUYXNrRWxlbWVudDsKKworY2xhc3MgV01MRG9F
bGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVsZW1lbnQgeworcHVibGljOgorICAgIFdNTERvRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0g
MCk7CisgICAgdmlydHVhbCB+V01MRG9FbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIFJlbmRlck9i
amVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOyAKKyAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAg
dmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZv
aWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworICAgIHZvaWQgcmVnaXN0ZXJUYXNrKFdN
TFRhc2tFbGVtZW50Kik7CisKKyAgICAvL3JlY29yZCB0aGUgbm9vcCB0YXNrCisgICAgdm9pZCBz
ZXROb29wKGJvb2wpOworCisgICAgdm9pZCBzZXRBY3RpdmUoYm9vbCk7CisgICAgYm9vbCBpc0Fj
dGl2ZSgpIGNvbnN0OworICAgIFN0cmluZyBkb05hbWUoKSBjb25zdDsKK3ByaXZhdGU6CisgICAg
V01MVGFza0VsZW1lbnQqIG1fdGFzazsKKyAgICBTdHJpbmcgbV90eXBlOworICAgIFN0cmluZyBt
X2xhYmVsOworICAgIFN0cmluZyBtX25hbWU7CisgICAgYm9vbCBtX2lzT3B0aW9uOworICAgIGJv
b2wgbV9pc05vb3A7CisgICAgYm9vbCBtX2lzQWN0aXZlOworfTsKKworfSAvL25hbWVzcGFjZQor
CisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTERvY3VtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dt
bC9XTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIldNTERvY3VtZW50
LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5o
IgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dNTERv
Y3VtZW50OjpXTUxEb2N1bWVudChGcmFtZSogZnJhbWUpCisgICAgOiBEb2N1bWVudChmcmFtZSwg
ZmFsc2UpIAoreworICAgIGNsZWFyWE1MVmVyc2lvbigpOworCisgICAgUGFnZSogcGFnZSA9IHRo
aXMtPnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiAhcGFnZS0+d21sQnJ3Q29udGV4dCgpKSB7Cisg
ICAgICAgIFJlZlB0cjxXTUxCcndDb250ZXh0PiBicndjb250ZXh0ID0gbmV3IFdNTEJyd0NvbnRl
eHQocGFnZSk7CisgICAgICAgIHBhZ2UtPnNldFdtbEJyd0NvbnRleHQoYnJ3Y29udGV4dCk7Cisg
ICAgICAgIFdNTEhlbHBlcjo6c2V0Q3VycmVudEJyd0NvbnRleHQoYnJ3Y29udGV4dC5nZXQoKSk7
CisgICAgfQorCit9CisKK1dNTERvY3VtZW50Ojp+V01MRG9jdW1lbnQoKSB7fQorCitUb2tlbml6
ZXIgKldNTERvY3VtZW50OjpjcmVhdGVUb2tlbml6ZXIoKSAKK3sKKyAgICByZXR1cm4gbmV3IFdN
TFRva2VuaXplcih0aGlzKTsKK30KKworaW5saW5lIGJvb2wgV01MRG9jdW1lbnQ6OmlzV01MRG9j
dW1lbnQoKSBjb25zdCAKK3sgCisgICAgcmV0dXJuIHRydWU7IAorfQorCit9IC8vbmFtZXNwYWNl
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d21sL1dNTERvY3VtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxEb2N1bWVu
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxEb2N1bWVu
dF9oCisjZGVmaW5lIFdNTERvY3VtZW50X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xp
ZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBXTUxEb2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudCwgcHVibGljIENhY2hlZFJlc291cmNl
Q2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxXTUxEb2N1bWVudD4gY3Jl
YXRlKEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIHJldHVybiBuZXcgV01MRG9jdW1lbnQo
ZnJhbWUpOworICAgIH0KKyAgICBXTUxEb2N1bWVudChGcmFtZSopOworICAgIHZpcnR1YWwgfldN
TERvY3VtZW50KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNXTUxEb2N1bWVudCgpIGNvbnN0Owor
ICAgIHZpcnR1YWwgVG9rZW5pemVyKiBjcmVhdGVUb2tlbml6ZXIoKTsKK307CisKKworfSAvLyBu
YW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDk3IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRv
a2VuaXplci5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorCisjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJEb2N1
bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudExpc3Rl
bmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUu
aCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxlbWVudEZhY3RvcnkuaCIKKyNp
bmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNs
dWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiUmVuZGVyV29yZEJyZWFrLmgiCisjaW5j
bHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJh
dG9yLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCit1c2lu
ZyBzdGQ6Om1pbjsKK3VzaW5nIHN0ZDo6bWF4OworCitXTUxFbGVtZW50OjpXTUxFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTdHlsZWRF
bGVtZW50KHRhZ05hbWUsIGRvYykge30KKworCitXTUxFbGVtZW50Ojp+V01MRWxlbWVudCgpIHt9
CisKK3ZvaWQgV01MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
Kikge30KKwordm9pZCBXTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKK3sK
KyAgICBpZiAobG9jYWxOYW1lKCkgPT0gIm5vb3AiKSB7CisgICAgICAgIGZvciAoTm9kZSogcGFy
ZW50ID0gcGFyZW50Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGRvVGFnKSkgeworICAgICAg
ICAgICAgICAgIFdNTERvRWxlbWVudCogZG9lID0gc3RhdGljX2Nhc3Q8V01MRG9FbGVtZW50Kj4o
cGFyZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoZG9lLT5hdHRhY2hlZCgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIGRvZS0+ZGV0YWNoKCk7CisgICAgICAgICAgICAgICAgICAgIGRvZS0+c2V0
Tm9vcCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZG9lLT5hdHRhY2goKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KHBhcmVudC0+aGFzVGFnTmFtZShhbmNob3JUYWcpKSB7CisgICAgICAgICAgICAgICAgV01MSGVs
cGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoV3JvbmdUYXNrSW5BbmNob3JFbGVtZW50RXJy
b3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9CisKK30KKworUmVuZGVyT2Jq
ZWN0KiBXTUxFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxl
KiBzdHlsZSkgCit7CisgIHJldHVybiBSZW5kZXJPYmplY3Q6OmNyZWF0ZU9iamVjdCh0aGlzLCBz
dHlsZSk7Cit9CisKK2Jvb2wgV01MRWxlbWVudDo6aXNIVE1MRWxlbWVudCgpIGNvbnN0IAoreyAK
KyAgICByZXR1cm4gdHJ1ZTsgCit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTEVsZW1lbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFdNTEVsZW1lbnRfaAorI2RlZmluZSBXTUxFbGVtZW50X2gKKworI2luY2x1
ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFzcyBXTUxFbGVtZW50IDog
cHVibGljIFN0eWxlZEVsZW1lbnQgeworcHVibGljOgorICAgIFdNTEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxFbGVtZW50
KCk7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworfTsKKwor
fSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEVsZW1lbnRGYWN0
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50RmFjdG9yeS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50RmFjdG9yeS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3RvcnkuaCIKKyNpbmNsdWRl
ICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
QUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxBbmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
UHJldkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQ
b3N0ZmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFJlZnJlc2hFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MVGVtcGxhdGVFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MQWNjZXNzRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSW5wdXRF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSW1h
Z2VFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MUEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQnV0dG9u
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MVGFibGVDZWxsRWxlbWVudC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6V01MTmFtZXM7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOworCit0eXBlZGVmIEVsZW1lbnQg
KigqQ29uc3RydWN0b3JGdW5jKShEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
Cit0eXBlZGVmIFdURjo6SGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ29uc3RydWN0b3JGdW5j
PiBGdW5jdGlvbk1hcDsKKworc3RhdGljIEZ1bmN0aW9uTWFwICpnRnVuY3Rpb25NYXAgPSAwOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VsZW1lbnQgKmNhcmRDb25zdHJ1Y3RvcihEb2N1bWVu
dCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTENhcmRF
bGVtZW50KGNhcmRUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKndtbF9hQ29uc3RydWN0b3IoRG9j
dW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxB
RWxlbWVudChXTUxOYW1lczo6YVRhZywgZG9jKTsKK30KKworRWxlbWVudCAqaW1nQ29uc3RydWN0
b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5l
dyBXTUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQg
KmJyQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7Cisg
ICAgcmV0dXJuIG5ldyBIVE1MQlJFbGVtZW50KGRvYyk7Cit9CisKK0VsZW1lbnQgKnBDb25zdHJ1
Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4g
bmV3IFdNTFBFbGVtZW50KGRvYyk7Cit9CisKK0VsZW1lbnQgKmlucHV0Q29uc3RydWN0b3IoRG9j
dW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxJ
bnB1dEVsZW1lbnQoV01MTmFtZXM6OmlucHV0VGFnLCBkb2MpOworfQorCitFbGVtZW50ICphbmNo
b3JDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAg
ICByZXR1cm4gbmV3IFdNTEFuY2hvckVsZW1lbnQoV01MTmFtZXM6OmFuY2hvclRhZywgZG9jKTsK
KyAgICAKK30KKworRWxlbWVudCAqc2VsZWN0Q29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxTZWxlY3RFbGVtZW50KFdN
TE5hbWVzOjpzZWxlY3RUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKm9wdGlvbkNvbnN0cnVjdG9y
KERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcg
V01MT3B0aW9uRWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICpwcmV2Q29uc3RydWN0b3IoRG9j
dW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxQ
cmV2RWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICpnb0NvbnN0cnVjdG9yKERvY3VtZW50ICpk
b2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MR29FbGVtZW50
KFdNTE5hbWVzOjpnb1RhZywgZG9jKTsKK30KKworRWxlbWVudCAqcG9zdGZpZWxkQ29uc3RydWN0
b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmV0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3
IFdNTFBvc3RmaWVsZEVsZW1lbnQoV01MTmFtZXM6OnBvc3RmaWVsZFRhZywgZG9jKTsKK30KKwor
RWxlbWVudCAqc2V0dmFyQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxTZXR2YXJFbGVtZW50KFdNTE5hbWVzOjpzZXR2
YXJUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnRhYmxlQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRv
YywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxUYWJsZUVsZW1l
bnQoZG9jKTsKK30KKworRWxlbWVudCAqdHJDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29s
IGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnQo
ZG9jKTsKK30KKworRWxlbWVudCAqdGRDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50KEhU
TUxOYW1lczo6dGRUYWcsZG9jKTsKK30KKworRWxlbWVudCAqZG9Db25zdHJ1Y3RvcihEb2N1bWVu
dCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTERvRWxl
bWVudChkb1RhZywgZG9jKTsKK30KKworRWxlbWVudCAqcmVmcmVzaENvbnN0cnVjdG9yKERvY3Vt
ZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MUmVm
cmVzaEVsZW1lbnQocmVmcmVzaFRhZywgZG9jKTsKK30KKworRWxlbWVudCAqdGVtcGxhdGVDb25z
dHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1
cm4gbmV3IFdNTFRlbXBsYXRlRWxlbWVudCh0ZW1wbGF0ZVRhZywgZG9jKTsKK30KKworRWxlbWVu
dCAqdGltZXJDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikK
K3sKKyAgICByZXR1cm4gbmV3IFdNTFRpbWVyRWxlbWVudCh0aW1lclRhZywgZG9jKTsKK30KKwor
RWxlbWVudCAqYWNjZXNzQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxBY2Nlc3NFbGVtZW50KGFjY2Vzc1RhZywgZG9j
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZUZ1bmN0aW9uTWFwSWZOZWNlc3Nhcnko
KQoreworICAgIGlmIChnRnVuY3Rpb25NYXApCisgICAgICAgIHJldHVybjsKKyAgICAvLyBDcmVh
dGUgdGhlIHRhYmxlLgorICAgIGdGdW5jdGlvbk1hcCA9IG5ldyBGdW5jdGlvbk1hcDsKKyAgICAK
KyAgICAvLyBQb3B1bGF0ZSBpdCB3aXRoIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucy4KKyAgICBnRnVu
Y3Rpb25NYXAtPnNldChXTUxOYW1lczo6Y2FyZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNhcmRD
b25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmFUYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCB3bWxfYUNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChI
VE1MTmFtZXM6OmltZ1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGltZ0NvbnN0cnVjdG9yKTsKKyAg
ICBnRnVuY3Rpb25NYXAtPnNldChIVE1MTmFtZXM6OmJyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
YnJDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnBUYWcubG9j
YWxOYW1lKCkuaW1wbCgpLCBwQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdN
TE5hbWVzOjppbnB1dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGlucHV0Q29uc3RydWN0b3IpOwor
ICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjphbmNob3JUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCBhbmNob3JDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6
OnNlbGVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHNlbGVjdENvbnN0cnVjdG9yKTsKKyAgICBn
RnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6b3B0aW9uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
b3B0aW9uQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpwcmV2
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgcHJldkNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25N
YXAtPnNldChXTUxOYW1lczo6Z29UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBnb0NvbnN0cnVjdG9y
KTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6cG9zdGZpZWxkVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgcG9zdGZpZWxkQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0
KFdNTE5hbWVzOjpzZXR2YXJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBzZXR2YXJDb25zdHJ1Y3Rv
cik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnRhYmxlVGFnLmxvY2FsTmFtZSgp
LmltcGwoKSwgdGFibGVDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoSFRNTE5h
bWVzOjp0clRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRyQ29uc3RydWN0b3IpOworICAgIGdGdW5j
dGlvbk1hcC0+c2V0KEhUTUxOYW1lczo6dGRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCB0ZENvbnN0
cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6cmVmcmVzaFRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksIHJlZnJlc2hDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5z
ZXQoV01MTmFtZXM6OmRvVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgZG9Db25zdHJ1Y3Rvcik7Cisg
ICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnRlbXBsYXRlVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgdGVtcGxhdGVDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFt
ZXM6OnRpbWVyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGltZXJDb25zdHJ1Y3Rvcik7CisgICAg
Z0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmFjY2Vzc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCks
IGFjY2Vzc0NvbnN0cnVjdG9yKTsKK30KKworRWxlbWVudCAqV01MRWxlbWVudEZhY3Rvcnk6OmNy
ZWF0ZVdNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50KiBkb2Ms
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworCisgICAgV2ViQ29yZTo6V01MTmFtZXM6OmluaXQo
KTsKKyAgICAvLyBEb24ndCBtYWtlIGVsZW1lbnRzIHdpdGhvdXQgYSBkb2N1bWVudAorICAgIGlm
ICghZG9jKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBTZXR0aW5ncyogc2V0dGluZ3Mg
PSBkb2MtPnNldHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdzICYmIHNldHRpbmdzLT51c2VzRGFz
aGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQorICAgICAgICByZXR1cm4gMDsKKwor
ICAgIGNyZWF0ZUZ1bmN0aW9uTWFwSWZOZWNlc3NhcnkoKTsKKyAgICBDb25zdHJ1Y3RvckZ1bmMg
ZnVuYyA9IGdGdW5jdGlvbk1hcC0+Z2V0KHFOYW1lLmxvY2FsTmFtZSgpLmltcGwoKSk7CisgICAg
aWYgKGZ1bmMpCisgICAgICAgIHJldHVybiBmdW5jKGRvYywgY3JlYXRlZEJ5UGFyc2VyKTsKKyAg
ICAKKyAgICByZXR1cm4gbmV3IFdNTEVsZW1lbnQocU5hbWUsIGRvYyk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlCisKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEVsZW1lbnRGYWN0b3J5LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93bWwvV01MRWxlbWVudEZhY3RvcnkuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTEVsZW1lbnRGYWN0b3J5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDgg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFdNTEVsZW1lbnRGYWN0b3J5X2gKKyNkZWZpbmUgV01MRWxlbWVudEZh
Y3RvcnlfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBj
bGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBRdWFsaWZpZWROYW1lOworICAgIGNsYXNzIEF0b21p
Y1N0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKyAgICBjbGFzcyBXTUxFbGVtZW50
OworCisgICAgLy8gVGhlIGlkZWEgYmVoaW5kIHRoaXMgY2xhc3MgaXMgdGhhdCB0aGVyZSB3aWxs
IGV2ZW50dWFsbHkgYmUgYSBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIFVSSXMgdG8gRWxlbWVudEZh
Y3RvcmllcyB0aGF0IGNhbiBkaXNwZW5zZQorICAgIC8vIGVsZW1lbnRzLiAgSW4gYSBjb21wb3Vu
ZCBkb2N1bWVudCB3b3JsZCwgdGhlIGdlbmVyaWMgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiAod2ls
bCBlbmQgdXAgYmVpbmcgdmlydHVhbCkgd2lsbCBiZSBjYWxsZWQuCisgICAgY2xhc3MgV01MRWxl
bWVudEZhY3RvcnkKKyAgICB7CisgICAgcHVibGljOgorICAgICAgICBXZWJDb3JlOjpFbGVtZW50
ICpjcmVhdGVFbGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIHFOYW1lLCBXZWJD
b3JlOjpEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUpOworICAgICAg
ICBzdGF0aWMgRWxlbWVudCAqY3JlYXRlV01MRWxlbWVudChjb25zdCBXZWJDb3JlOjpRdWFsaWZp
ZWROYW1lJiBxTmFtZSwgV2ViQ29yZTo6RG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJz
ZXIgPSB0cnVlKTsKKyAgICB9OworfQorCisjZW5kaWYKKwpJbmRleDogV2ViQ29yZS93bWwvV01M
R29FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxHb0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwzODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
RXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5o
IgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
RnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZvcm1EYXRhLmgi
CisjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0Lmgi
CisjaW5jbHVkZSAiS1VSTC5oIgorCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIktV
UkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkNTU0hlbHBlci5o
IgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJX
TUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFBvc3RmaWVs
ZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
Q2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01M
SGVscGVyLmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9r
ZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5h
bWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK3RlbXBsYXRlPGNsYXNzIFQsIHNp
emVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3RvcjxUKiwgbj4gJiB2ZWMs
IFQqIGl0ZW0pIAoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2ZWNbaV0gPT0gaXRlbSkg
eworICAgICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9Cit9CisKK3N0YXRpYyBpbnQgcmFuZG9tTnVtYmVyKCkKK3sKKyAgICBzdGF0aWMgYm9vbCBy
YW5kb21TZWVkZWQgPSBmYWxzZTsKKyAKKyNpZiBQTEFURk9STShEQVJXSU4pCisgICAgaWYgKCFy
YW5kb21TZWVkZWQpIHsKKyAgICAgICAgc3JhbmRvbWRldigpOworICAgICAgICByYW5kb21TZWVk
ZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gcmFuZG9tKCk7CisjZWxzZQorICAgIGlmICgh
cmFuZG9tU2VlZGVkKSB7CisgICAgICAgIHNyYW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0aW1l
KDApKSk7CisgICAgICAgIHJhbmRvbVNlZWRlZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBy
YW5kKCk7CisjZW5kaWYKK30KKyAKKy8vIFJldHVybnMgYSAwLXRlcm1pbmF0ZWQgQyBzdHJpbmcg
aW4gdGhlIHZlY3Rvci4KK3N0YXRpYyB2b2lkIGdldFVuaXF1ZUJvdW5kYXJ5U3RyaW5nKFZlY3Rv
cjxjaGFyPiYgYm91bmRhcnkpCit7CisgICAgLy8gVGhlIFJGQyAyMDQ2IHNwZWMgc2F5cyB0aGUg
QWxwaGFOdW1lcmljIGNoYXJhY3RlcnMgcGx1cyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMKKyAg
ICAvLyBhcmUgbGVnYWwgZm9yIGJvdW5kYXJpZXM6ICAnKCkrXywtLi86PT8KKyAgICAvLyBIb3dl
dmVyIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycywgdGhvdWdoIGxlZ2FsLCBjYXVzZSBzb21lIHNp
dGVzIHRvIGZhaWw6CisgICAgLy8gKCksLi86PQorICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEzMzUyCisgICAgc3RhdGljIGNvbnN0IGNoYXIgQWxwaGFOdW1l
cmljRW5jTWFwWzY0XSA9CisgICAgeworICAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0
NSwgMHg0NiwgMHg0NywgMHg0OCwKKyAgICAgIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQs
IDB4NEUsIDB4NEYsIDB4NTAsCisgICAgICAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAw
eDU2LCAweDU3LCAweDU4LAorICAgICAgMHg1OSwgMHg1QSwgMHg2MSwgMHg2MiwgMHg2MywgMHg2
NCwgMHg2NSwgMHg2NiwKKyAgICAgIDB4NjcsIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMs
IDB4NkQsIDB4NkUsCisgICAgICAweDZGLCAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAw
eDc1LCAweDc2LAorICAgICAgMHg3NywgMHg3OCwgMHg3OSwgMHg3QSwgMHgzMCwgMHgzMSwgMHgz
MiwgMHgzMywKKyAgICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkIs
IDB4NDEKKyAgICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS81MjUyNTc3PiBnbWFpbCBkb2Vz
IG5vdCBhY2NlcHQgbGVnYWwgY2hhcmFjdGVycyBpbiB0aGUgZm9ybSBib3VuZGFyeQorICAgICAg
Ly8gQXMgc3RhdGVkIGFib3ZlLCBzb21lIGxlZ2FsIGNoYXJhY3RlcnMgY2F1c2UsIHNpdGVzIHRv
IGZhaWwuIFNwZWNpZmljYWxseQorICAgICAgLy8gdGhlIC8gY2hhcmFjdGVyIHdoaWNoIHdhcyB0
aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGFib3ZlIGFycmF5LiBJIGhhdmUKKyAgICAgIC8vIHJl
cGxhY2VkIHRoZSBsYXN0IGNoYXJhY3RlciB3aXRoIGFub3RoZXIgY2hhcmFjdGVyIGFscmVhZHkg
aW4gdGhlIGFycmF5CisgICAgICAvLyAobm90aWNlIHRoZSBmaXJzdCBhbmQgbGFzdCB2YWx1ZXMg
YXJlIGJvdGggMHg0MSwgQSkuIEluc3RlYWQgb2YgcGlja2luZworICAgICAgLy8gYW5vdGhlciB1
bmlxdWUgbGVnYWwgY2hhcmFjdGVyIGZvciBib3VuZGFyeSBzdHJpbmdzIHRoYXQsIGJlY2F1c2Ug
aXQgaGFzCisgICAgICAvLyBuZXZlciBiZWVuIHRlc3RlZCwgbWF5IG9yIG1heSBub3QgYnJlYWsg
b3RoZXIgc2l0ZXMsIEkgc2ltcGx5CisgICAgICAvLyByZXBsYWNlZCAvIHdpdGggQS4gIFRoaXMg
bWVhbnMgQSBpcyB0d2ljZSBhcyBsaWtlbHkgdG8gb2NjdXIgaW4gb3VyIGJvdW5kYXJ5CisgICAg
ICAvLyBzdHJpbmdzIHRoYW4gYW55IG90aGVyIGNoYXJhY3RlciBidXQgSSB0aGluayB0aGlzIGlz
IGZpbmUgZm9yIHRoZSB0aW1lIGJlaW5nLgorICAgICAgLy8gVGhlIEZJWE1FIGhlcmUgaXMgYWJv
dXQgcmVzdG9yaW5nIHRoZSAvIGNoYXJhY3RlciBvbmNlIHRoZSBhZm9yZW1lbnRpb25lZAorICAg
ICAgLy8gcmFkYXIgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgfTsKKyAKKyAgICAvLyBTdGFydCB3
aXRoIGFuIGluZm9ybWF0aXZlIHByZWZpeC4KKyAgICBjb25zdCBjaGFyIGJvdW5kYXJ5UHJlZml4
W10gPSAiLS0tLVdlYktpdEZvcm1Cb3VuZGFyeSI7CisgICAgYm91bmRhcnkuYXBwZW5kKGJvdW5k
YXJ5UHJlZml4LCBzdHJsZW4oYm91bmRhcnlQcmVmaXgpKTsKKyAKKyAgICAvLyBBcHBlbmQgMTYg
cmFuZG9tIDdiaXQgYXNjaWkgQWxwaGFOdW1lcmljIGNoYXJhY3RlcnMuCisgICAgVmVjdG9yPGNo
YXI+IHJhbmRvbUJ5dGVzOworIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7Cisg
ICAgICAgIGludCByYW5kb21uZXNzID0gcmFuZG9tTnVtYmVyKCk7CisgICAgICAgIHJhbmRvbUJ5
dGVzLmFwcGVuZChBbHBoYU51bWVyaWNFbmNNYXBbKHJhbmRvbW5lc3MgPj4gMjQpICYgMHgzRl0p
OworICAgICAgICByYW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwWyhyYW5kb21u
ZXNzID4+IDE2KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVt
ZXJpY0VuY01hcFsocmFuZG9tbmVzcyA+PiA4KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9tQnl0
ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFtyYW5kb21uZXNzICYgMHgzRl0pOworICAgIH0K
KyAKKyAgICBib3VuZGFyeS5hcHBlbmQocmFuZG9tQnl0ZXMpOworICAgIGJvdW5kYXJ5LmFwcGVu
ZCgwKTsgLy8gQWRkIGEgMCBhdCB0aGUgZW5kIHNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIEMtc3R5
bGUgc3RyaW5nLgorfQorCitXTUxHb0VsZW1lbnQ6OldNTEdvRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogV01MVGFza0VsZW1lbnQodGFn
TmFtZSwgZG9jKQorICAgICwgbV9lbmN0eXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQiKSAKKyAgICAsIG1fbXVsdGlwYXJ0KGZhbHNlKQorICAgICwgbV9wb3N0KGZhbHNlKQor
eworfQorCitXTUxHb0VsZW1lbnQ6On5XTUxHb0VsZW1lbnQoKSB7fQorCit2b2lkIFdNTEdvRWxl
bWVudDo6cmVnaXN0ZXJQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqIGUpIAor
eworICAgIG1fcG9zdGZpZWxkcy5hcHBlbmQoZSk7Cit9CisKK3ZvaWQgV01MR29FbGVtZW50Ojpy
ZW1vdmVQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqIGUpIAoreworICAgIHJl
bW92ZUZyb21WZWN0b3IobV9wb3N0ZmllbGRzLCBlKTsKK30KKworYm9vbCBXTUxHb0VsZW1lbnQ6
Omhhc1Bvc3RmaWVsZCgpIGNvbnN0IAoreworICAgIHJldHVybiAhbV9wb3N0ZmllbGRzLmlzRW1w
dHkoKTsKK30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OnBhcnNlRW5jdHlwZShjb25zdCBTdHJpbmcm
IHR5cGUpCit7CisgICAgaWYgKHR5cGUuY29udGFpbnMoIm11bHRpcGFydCIsIGZhbHNlKSB8fCB0
eXBlLmNvbnRhaW5zKCJmb3JtLWRhdGEiLCBmYWxzZSkpIHsKKyAgICAgICAgbV9lbmN0eXBlID0g
Im11bHRpcGFydC9mb3JtLWRhdGEiOworICAgICAgICBtX211bHRpcGFydCA9IHRydWU7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgbV9lbmN0eXBlID0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJs
ZW5jb2RlZCI7CisgICAgICAgIG1fbXVsdGlwYXJ0ID0gZmFsc2U7CisgICAgfQorfQorCit2b2lk
IFdNTEdvRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRy
KQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbWV0aG9kQXR0cikgeworICAgICAgICBpZiAo
ZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInBvc3QiKSkKKyAgICAgICAgICAgIG1f
cG9zdCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZh
bHVlKCksICJnZXQiKSkKKyAgICAgICAgICAgIG1fcG9zdCA9IGZhbHNlOworICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGVuY3R5cGVBdHRyKSB7CisgICAgICAgIFN0cmluZyBlbmN0eXBl
ID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkp
OworICAgICAgICBwYXJzZUVuY3R5cGUoZW5jdHlwZSk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKSB7CisgICAgICAgIC8vIHNwYWNlIHNlcGFyYXRl
ZCBsaXN0IG9mIGNoYXJzZXRzIHRoZSBzZXJ2ZXJhIGFjY2VwdHMgLSBzZWUgcmZjMjA0NQorICAg
ICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgeworICAg
ICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlh
YmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAg
ICAgIG1fYWNjZXB0Y2hhcnNldCA9IGF0dHItPnZhbHVlKCk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgV01MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgfQorfQorCitQ
YXNzUmVmUHRyPEZvcm1EYXRhPiBXTUxHb0VsZW1lbnQ6OmZvcm1EYXRhKEZyYW1lTG9hZGVyKiBs
b2FkZXIsIGNvbnN0IGNoYXIqIGJvdW5kYXJ5KSAKK3sKKyAgICBTdHJpbmcgc3RyID0gbV9hY2Nl
cHRjaGFyc2V0OworICAgIHN0ci5yZXBsYWNlKCcsJywgJyAnKTsKKworICAgIFZlY3RvcjxTdHJp
bmc+IGNoYXJzZXRzOworICAgIHN0ci5zcGxpdCgnICcsIGNoYXJzZXRzKTsKKyAgICBUZXh0RW5j
b2RpbmcgZW5jb2Rpbmc7CisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9
IGNoYXJzZXRzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9y
IGl0ID0gY2hhcnNldHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpZiAoKGVu
Y29kaW5nID0gVGV4dEVuY29kaW5nKCppdCkpLmlzVmFsaWQoKSkgeworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKworICAgIGlmICghZW5jb2RpbmcuaXNWYWxpZCgpKSB7CisgICAgICAg
IGlmIChsb2FkZXIpCisgICAgICAgICAgICBlbmNvZGluZyA9IGxvYWRlci0+ZW5jb2RpbmcoKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jb2RpbmcgPSBMYXRpbjFFbmNvZGluZygpOwor
ICAgIH0KKyAKKyAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9IEZvcm1EYXRhOjpjcmVhdGUo
KTsKKyAgICBTdHJpbmcgZW5jX3N0cmluZzsKKyAKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0g
MDsgaSA8IG1fcG9zdGZpZWxkcy5zaXplKCk7IGkrKykgeworCisgICAgICAgIFN0cmluZyBuYW1l
ID0gbV9wb3N0ZmllbGRzW2ldLT5uYW1lKCk7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IG1fcG9z
dGZpZWxkc1tpXS0+dmFsdWUoKTsKKworICAgICAgICBpZiAoIW1fbXVsdGlwYXJ0KSB7CisgICAg
ICAgICAgICBpZiAoIWVuY19zdHJpbmcuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGVuY19z
dHJpbmcgKz0gIiYiOworCisgICAgICAgICAgICBlbmNfc3RyaW5nICs9IGVuY29kZVdpdGhVUkxF
c2NhcGVTZXF1ZW5jZXMobV9wb3N0ZmllbGRzW2ldLT5uYW1lKCkpOyAKKyAgICAgICAgICAgIGVu
Y19zdHJpbmcgKz0gIj0iOworICAgICAgICAgICAgZW5jX3N0cmluZyArPSBlbmNvZGVXaXRoVVJM
RXNjYXBlU2VxdWVuY2VzKG1fcG9zdGZpZWxkc1tpXS0+dmFsdWUoKSk7IAorICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgU3RyaW5nIGhzdHIoIi0tIik7CisgICAgICAgICAgICBoc3RyICs9
IGJvdW5kYXJ5OworICAgICAgICAgICAgaHN0ciArPSAiXHJcbiI7CisgICAgICAgICAgICBoc3Ry
ICs9ICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5hbWU9XCIiOworICAgICAgICAg
ICAgaHN0ciArPSBlbmNvZGluZy5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+
KG5hbWUuY2hhcmFjdGVycygpKSwgbmFtZS5sZW5ndGgoKSwgVVJMRW5jb2RlZEVudGl0aWVzRm9y
VW5lbmNvZGFibGVzKS5kYXRhKCk7IAorICAgICAgICAgICAgaHN0ciArPSAiXCIiOworICAgICAg
ICAgICAgaHN0ciArPSAiXHJcblxyXG4iOworCisgICAgICAgICAgICAvLyBhcHBlbmQgYm9keQor
ICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGhzdHIuY2hhcmFjdGVycygpLCBoc3RyLmxl
bmd0aCgpKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ICAgICAgICBTdHJpbmcgY3NWYWwgPSBlbmNvZGluZy5lbmNvZGUocmVpbnRlcnByZXRfY2FzdDxj
b25zdCBVQ2hhcio+KHZhbHVlLmNoYXJhY3RlcnMoKSksIHZhbHVlLmxlbmd0aCgpLCBVUkxFbmNv
ZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpLmRhdGEoKTsgCisgICAgICAgICAgICAgICAgcmVz
dWx0LT5hcHBlbmREYXRhKGNzVmFsLmNoYXJhY3RlcnMoKSwgY3NWYWwubGVuZ3RoKCkpOworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoIlxyXG4iLCAyKTsK
KworICAgICAgICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzZWN0aW9uIDkuNS4xIG9mIHdhcC0x
OTEtd21sLTIwMDAwMjE5LWEucGRmLCAKKyAgICAgICAgICAgIC8vIG1ha2UgdGhlIENvbnRlbnQt
dHlwZSBoZWFkZXIgaW5jbHVkZSB0aGUgY2hhcnNldCBwYXJhbWV0ZXIKKyAgICAgICAgICAgIFN0
cmluZyBzdHIgPSByZXN1bHQtPmZsYXR0ZW5Ub1N0cmluZygpOworICAgICAgICAgICAgaWYgKCFj
aGFyYWN0ZXJzQXJlQWxsQVNDSUkoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpKSkgewor
ICAgICAgICAgICAgICAgIG1fZW5jdHlwZSArPSAiOyI7CisgICAgICAgICAgICAgICAgbV9lbmN0
eXBlICs9IGVuY29kaW5nLm5hbWUoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0g
Ly8gZW5kIG9mIGZvciAoLi4uCisKKyAgICBpZiAobV9tdWx0aXBhcnQpIHsKKyAgICAgICAgZW5j
X3N0cmluZyA9ICItLSI7CisgICAgICAgIGVuY19zdHJpbmcgKz0gYm91bmRhcnk7CisgICAgICAg
IGVuY19zdHJpbmcgKz0gIi0tXHJcbiI7CisKKyAgICB9IGVsc2UgeworICAgICAgICBtX2VuY3R5
cGUgKz0gIjsiOworICAgICAgICBtX2VuY3R5cGUgKz0gZW5jb2RpbmcubmFtZSgpOworICAgIH0K
KyAKKyAgICByZXN1bHQtPmFwcGVuZERhdGEoZW5jX3N0cmluZy5jaGFyYWN0ZXJzKCksIGVuY19z
dHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgV01MR29FbGVt
ZW50OjpleGVjKEV2ZW50KiBldnQsIFN0cmluZyB1cmkpIAoreworICAgIERvY3VtZW50ICpkb2Mg
PSBkb2N1bWVudCgpOworICAgIEZyYW1lTG9hZGVyICpsb2FkZXI9IGRvYy0+ZnJhbWUoKS0+bG9h
ZGVyKCk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIGNvbnZl
cnQgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBzZXR2YXIgZWxlbWVudCBpZiBuZWNlc3Nh
cnkKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcnM7CisgICAgaWYgKGhhc1NldHZhcigpKSB7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9zZXR2YXJzLnNpemUoKTsgKytpKSB7
CisgICAgICAgICAgICBpZiAoIW1fc2V0dmFyc1tpXS0+bmFtZSgpLmlzRW1wdHkoKSkgCisgICAg
ICAgICAgICAgICAgbV92YXJzLnNldChtX3NldHZhcnNbaV0tPm5hbWUoKSwgbV9zZXR2YXJzW2ld
LT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0gCisKKyAgICAvLyB1cGRhdGUgYnJvd3NlciBj
b250ZXh0IAorICAgIGlmICghbV92YXJzLmlzRW1wdHkoKSkKKyAgICAgICAgV01MSGVscGVyOjpj
dXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlcyhtX3ZhcnMpOworIAorCisgICAgLy8g
c3Vic3RpdHV0ZSB0YXJnZXQgdXJpIGF0dHJpYnV0ZSB2YWx1ZQorICAgIGlmICh1cmkuaXNFbXB0
eSgpKQorICAgICAgICB1cmkgPSBnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworICAgIHVyaSA9IFdN
TEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZih1cmksIGRvYywgImVzY2FwZSIpOworCisgICAgLy8g
c3RvcCB0aGUgdGltZXIgb2YgdGhlIGN1cnJlbnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICBX
TUxDYXJkRWxlbWVudCogY2FyZCA9IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+YWN0
aXZlQ2FyZCgpOworICAgIGlmIChjYXJkICYmIGNhcmQtPmV2ZW50VGltZXIoKSkgeworICAgICAg
ICBjYXJkLT5ldmVudFRpbWVyKCktPnN0b3AoKTsKKyAgICB9CisKKyAgICAvLyBpZiBuZXdjb250
ZXh0IGF0dHJpYnV0ZSBvZiBkZXN0IGNhcmQgaXMgdHJ1ZSwgcmVpbml0aWFsaXplIHRoZSBjb250
ZXh0CisgICAgY2FyZCA9IFdNTEhlbHBlcjo6c2V0RGVzdGluYXRpb25DYXJkKGRvY3VtZW50KCks
IHVyaSk7CisgICAgaWYgKGNhcmQgJiYgY2FyZC0+aXNOZXdDb250ZXh0KCkpCisgICAgICAgIFdN
TEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+cmVzZXQoKTsKKworICAgIC8vIHByZXBhcmUg
Zm9yIGxvYWRpbmcgdGhlIGRlc3RpbmF0aW9uIFVSTAorICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+
IGRhdGEgPSAwOworICAgIEtVUkwgdXJsID0gZG9jLT5jb21wbGV0ZVVSTCh1cmkuaXNFbXB0eSgp
ID8gIiIgOiB1cmkpOworICAgIFJlc291cmNlUmVxdWVzdCByZXEodXJsKTsKKyAgICBLVVJMIGRv
Y1VybCA9IGRvYy0+Y29tcGxldGVVUkwoZG9jLT5kb2N1bWVudFVSSSgpKTsKKyAgICBib29sIGlu
U2FtZURlY2sgPSBkb2NVcmwucGF0aCgpID09IHVybC5wYXRoKCk7IAorCisKKyAgICBTdHJpbmcg
c2VuZHJlZmVyZXIgPSBnZXRBdHRyaWJ1dGUoc2VuZHJlZmVyZXJBdHRyKTsKKyAgICBpZiAoc2Vu
ZHJlZmVyZXIgPT0gInRydWUiKSB7CisgICAgICAgIHNlbmRyZWZlcmVyID0gdXJpOworICAgICAg
ICByZXEuc2V0SFRUUFJlZmVycmVyKHNlbmRyZWZlcmVyKTsKKyAgICB9CisKKyAgICBTdHJpbmcg
Y2FjaGVDdHJsID0gZ2V0QXR0cmlidXRlKGNhY2hlX2NvbnRyb2xBdHRyKTsKKworICAgaWYgKG1f
cG9zdCkgeyAvLyBQT1NUCisKKyAgICAgICBpZiAoaW5TYW1lRGVjayAmJiAoY2FjaGVDdHJsICE9
ICJuby1jYWNoZSIpKSB7IC8vaWdub3JlIGFsbCBwb3N0ZmllbGQgZWxlbWVudHMKKyAgICAgICAg
ICAgIHJlcS5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7CisgICAgICAg
fSBlbHNlIHsKKworICAgICAgICAgICBpZiAobV9tdWx0aXBhcnQpIHsgLy8gbXVsdGlwYXJ0L2Zv
cm0tZGF0YQorICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKKyAgICAgICAg
ICAgICAgICBnZXRVbmlxdWVCb3VuZGFyeVN0cmluZyhib3VuZGFyeSk7CisgICAgICAgICAgICAg
ICAgZGF0YSA9IGZvcm1EYXRhKGxvYWRlciwgYm91bmRhcnkuZGF0YSgpKTsKKyAgICAgICAgICAg
ICAgICByZXEuc2V0SFRUUENvbnRlbnRUeXBlKG1fZW5jdHlwZSArICI7IGJvdW5kYXJ5PSIgKyBi
b3VuZGFyeS5kYXRhKCkpOworICAgICAgICAgICB9IGVsc2UgeyAgLy90ZXh0L3BsYWluIG9yIGFw
cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZAorICAgICAgICAgICAgICAgIGRhdGEgPSBm
b3JtRGF0YShsb2FkZXIsIDApOworICAgICAgICAgICAgICAgIHJlcS5zZXRIVFRQQ29udGVudFR5
cGUobV9lbmN0eXBlKTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIHJlcS5zZXRIVFRQQm9k
eShkYXRhLmdldCgpKTsKKyAgICAgICB9CisKKyAgICAgICByZXEuc2V0SFRUUE1ldGhvZCgiUE9T
VCIpOworCisgICB9IGVsc2UgeyAgIC8vIEdFVAorCisgICAgICAgIGlmIChtX211bHRpcGFydCkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoaW5TYW1lRGVjaykgeworICAgICAg
ICAgICAgcmVxLnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YURvbnRMb2FkKTsKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHI7CisgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG1fcG9zdGZpZWxkcy5zaXplKCk7IGkrKykgeworICAgICAg
ICAgICAgICAgIGlmICghc3RyLmlzRW1wdHkoKSkgCisgICAgICAgICAgICAgICAgICAgIHN0ciAr
PSAiJiI7ICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdHIgKz0g
ZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX3Bvc3RmaWVsZHNbaV0tPm5hbWUoKSk7Cisg
ICAgICAgICAgICAgICAgc3RyICs9ICI9IjsKKyAgICAgICAgICAgICAgICBzdHIgKz0gZW5jb2Rl
V2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX3Bvc3RmaWVsZHNbaV0tPnZhbHVlKCkpOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB1cmwuc2V0UXVlcnkoc3RyKTsKKyAgICAgICAgICAgIHJl
cS5zZXRVUkwodXJsKTsKKyAgICAgICAgfQorCisgICAgICAgIHJlcS5zZXRIVFRQTWV0aG9kKCJH
RVQiKTsKKworICAgfQorCisgICAgLy8gc2V0IEhUVFAgY2FjaGUtY29udHJvbCBoZWFkZXIgaWYg
bmVlZGVkCisgICAgaWYgKCFjYWNoZUN0cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlcS5zZXRI
VFRQSGVhZGVyRmllbGQoImNhY2hlLWNvbnRyb2wiLCBjYWNoZUN0cmwpOworICAgICAgICBpZiAo
Y2FjaGVDdHJsID09ICJuby1jYWNoZSIpCisgICAgICAgICAgICByZXEuc2V0Q2FjaGVQb2xpY3ko
UmVsb2FkSWdub3JpbmdDYWNoZURhdGEpOworICAgIH0KKworICAgIGxvYWRlci0+bG9hZChyZXEp
OworfQorCit9CisKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93
bWwvV01MR29FbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFdNTEdvRWxlbWVudF9oCisjZGVmaW5lIFdNTEdvRWxlbWVudF9oCisKKyNpbmNsdWRlICJI
VE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnQ7CitjbGFzcyBGb3JtRGF0YTsKK2NsYXNzIEZyYW1l
TG9hZGVyOworY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CitjbGFzcyBXTUxQb3N0ZmllbGRFbGVtZW50
OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEdvRWxlbWVudCA6IHB1YmxpYyBX
TUxUYXNrRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MR29FbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpOworICAgIHZpcnR1YWwgfldNTEdvRWxlbWVu
dCgpOworICAKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGV4ZWMoRXZlbnQqLCBTdHJpbmcpOworCisgICAg
dm9pZCByZWdpc3RlclBvc3RmaWVsZEVsZW1lbnQoV01MUG9zdGZpZWxkRWxlbWVudCopOworICAg
IHZvaWQgcmVtb3ZlUG9zdGZpZWxkRWxlbWVudChXTUxQb3N0ZmllbGRFbGVtZW50Kik7CisgICAg
Ym9vbCBoYXNQb3N0ZmllbGQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPEZv
cm1EYXRhPiBmb3JtRGF0YShGcmFtZUxvYWRlciosIGNvbnN0IGNoYXIqKTsKKyAgICB2b2lkIHBh
cnNlRW5jdHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIFZlY3RvcjxXTUxQb3N0ZmllbGRFbGVt
ZW50Kj4gbV9wb3N0ZmllbGRzOworICAgIFN0cmluZyBtX2VuY3R5cGU7CisgICAgU3RyaW5nIG1f
YWNjZXB0Y2hhcnNldDsKKyAgICBib29sIG1fbXVsdGlwYXJ0IDogMTsKKyAgICBib29sIG1fcG9z
dCA6IDE7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwv
V01MSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxIZWxwZXIuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MSGVscGVyLmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisj
aW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgorI2lu
Y2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNs
dWRlICJXTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJ3dGYv
QVNDSUlDVHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dNTEJyd0NvbnRleHQqIFdN
TEhlbHBlcjo6c19icndDb250ZXh0ID0gMDsKK1dNTFRva2VuaXplciogV01MSGVscGVyOjpzX3Rv
a2VuaXplciA9IDA7CisKK1dNTEJyd0NvbnRleHQqIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRl
eHQoKQoreworICAgIHJldHVybiBzX2Jyd0NvbnRleHQ7Cit9CisKK3ZvaWQgV01MSGVscGVyOjpz
ZXRDdXJyZW50QnJ3Q29udGV4dChXTUxCcndDb250ZXh0KiBjb250ZXh0KQoreworICAgIHNfYnJ3
Q29udGV4dCA9IGNvbnRleHQ7Cit9CisKK1dNTFRva2VuaXplciogV01MSGVscGVyOjp0b2tlbml6
ZXIoKQoreworICAgIHJldHVybiBzX3Rva2VuaXplcjsKK30KKwordm9pZCBXTUxIZWxwZXI6OnNl
dFRva2VuaXplcihXTUxUb2tlbml6ZXIqIHRva2VuaXplcikKK3sKKyAgICBzX3Rva2VuaXplciA9
IHRva2VuaXplcjsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZEZvclZhcmlhYmxlKFVDaGFyIGNo
KSAKK3sKKyAgICBjaGFyIGEgPSBzdGF0aWNfY2FzdDxjaGFyPihjaCk7CisgICAgcmV0dXJuIChX
VEY6OmlzQVNDSUlBbHBoYShhKSB8fCBXVEY6OmlzQVNDSUlEaWdpdChhKSB8fCBhID09ICdfJyk7
Cit9CisgCitib29sIFdNTEhlbHBlcjo6aXNWYWxpZFZhcmlhYmxlTmFtZShjb25zdCBTdHJpbmcm
IHZhck5hbWUsIGJvb2wgaXNWYXJSZWYpCit7CisgICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7Cisg
ICAgVUNoYXIgY2ggPSB2YXJOYW1lWzBdOworCisgICAgU3RyaW5nIHJlZkNoYXJzID0gIigpOiQi
OworICAgIGlmIChpc1ZhclJlZikKKyAgICAgICAgaXNWYWxpZCA9ICgocmVmQ2hhcnMuZmluZChj
aCkgIT0gLTEpIHx8IGNoID09ICdfJyB8fCBXVEY6OmlzQVNDSUlBbHBoYShzdGF0aWNfY2FzdDxj
aGFyPihjaCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlzVmFsaWQgPSAoY2ggPT0gJ18nIHx8IFdU
Rjo6aXNBU0NJSUFscGhhKHN0YXRpY19jYXN0PGNoYXI+KGNoKSkpOworCisgICAgaWYgKGlzVmFs
aWQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpPTE7IGk8dmFyTmFtZS5sZW5ndGgoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoaXNWYXJSZWYpCisgICAgICAgICAgICAgICAgaXNWYWxpZCA9
ICgocmVmQ2hhcnMuZmluZCh2YXJOYW1lW2ldKSAhPSAtMSkgfHwgaXNWYWxpZEZvclZhcmlhYmxl
KHZhck5hbWVbaV0pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1ZhbGlk
ID0gaXNWYWxpZEZvclZhcmlhYmxlKHZhck5hbWVbaV0pOworCisgICAgICAgICAgICBpZiAoIWlz
VmFsaWQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIHJldHVybiBpc1ZhbGlkOworfQorCitib29sIFdNTEhlbHBlcjo6aGFz
VmFyaWFibGVSZWYoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAgIGJvb2wgaGFzVmFyUmVmID0g
ZmFsc2U7CisgICAgaW50IHN0YXJ0UG9zID0gdGV4dC5maW5kKCckJyk7CisgICAgaWYgKHN0YXJ0
UG9zICE9IC0xKSB7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvcyA9IHN0YXJ0UG9zICsgMTsKKyAg
ICAgICAgd2hpbGUgKHRleHRbZW5kUG9zXSA9PSAnJCcpCisgICAgICAgICAgICBlbmRQb3MrKzsK
KworICAgICAgICBpZiAoKChlbmRQb3Mtc3RhcnRQb3MpICUgMikgIT0gMCkgeworICAgICAgICAg
ICAgaGFzVmFyUmVmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBoYXNW
YXJSZWY7Cit9CisKK3N0YXRpYyBpbnQgdmFyaWFibGVFbmRzQXQoY29uc3QgU3RyaW5nJiB2YXJp
YWJsZSkgCit7CisgICAgLy8gd2UgYXNzdW1lIHRoZSB2YXJpYWJsZSBzdGFydHMgd2l0aCAiJCIg
LCBhbmQgdGhlbiBmb2xsb3dzIHdpdGggYXQgbGVhc3Qgb25lIHF1YWxpZmllZCBjaGFyYWN0ZXIg
Zm9yIHZhcmlhYmxlIG5hbWUsIG90aGVyd2lzZSwgbm90IGEgdmFsaWQgdmFyaWFibGUKKyAgICBp
ZiAoKHZhcmlhYmxlWzBdICAhPSAnJCcpIHx8IFdURjo6aXNBU0NJSURpZ2l0KHZhcmlhYmxlWzFd
KSB8fCAhaXNWYWxpZEZvclZhcmlhYmxlKHZhcmlhYmxlWzFdKSkKKyAgICAgICAgcmV0dXJuIC0x
OworICAgIGludCBwb3MgPSAtMTsKKyAgICBmb3IgKHBvcyA9IDE7IHBvcyA8IHN0YXRpY19jYXN0
PGludD4odmFyaWFibGUubGVuZ3RoKCkpOyBwb3MrKykgeworICAgICAgICBpZiAoIGlzVmFsaWRG
b3JWYXJpYWJsZSh2YXJpYWJsZVtwb3NdKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBy
ZXR1cm4gcG9zOworfQorIAorc3RhdGljIGJvb2wgaGFzTmFtZUF0dHJpYnV0ZVdpdGhWYWx1ZShO
b2RlICpub2RlLCBjb25zdCBTdHJpbmcmIHZhbHVlKSAKK3sKKyAKKyAgICBOYW1lZEF0dHJNYXAg
KmF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygpOworICAgIGlmICghYXR0cnMpIHsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH1lbHNlIHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0
cnMtPmdldEF0dHJpYnV0ZUl0ZW0oIm5hbWUiKTsKKyAgICAgICAgaWYgKCFhdHRyKSB7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIChhdHRyLT52
YWx1ZSgpID09IHZhbHVlKT8gdHJ1ZTpmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV01MSGVscGVy
Ojpjb252ZXJ0VmFySWZOZWVkZWQoU3RyaW5nJiB2YXIsIFN0cmluZyYgY29udikgCit7CisgICAg
aWYgKGNvbnYuaXNFbXB0eSgpIHx8IHZhci5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybjsgCisK
KyAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyBjb252ZXIgPSBjb252Lmxvd2VyKCk7Cisg
ICAgaWYgKChjb252ZXIgPT0gImUiKSB8fCAoY29udmVyID09ICJlc2NhcGUiKSkgeworICAgICAg
ICByZXN1bHQgPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHZhcik7CisgICAgfSBlbHNl
IGlmICgoY29udmVyID09ICJ1IikgfHwgKGNvbnZlciA9PSAidW5lc2MiKSkgeworICAgICAgICBy
ZXN1bHQgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModmFyKTsKKyAgICB9IGVsc2UgaWYgKChj
b252ZXIgPT0gIm4iKSB8fCAoY29udmVyID09ICJub2VzYyIpKSB7CisgICAgICAgIC8vIGRvIG5v
dGhpbmcKKyAgICB9CisKKyAgICBpZiAoIXJlc3VsdC5pc0VtcHR5KCkpCisgICAgICAgIHZhciA9
IHJlc3VsdDsKK30KKworU3RyaW5nIFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihjb25zdCBT
dHJpbmcmIHZhclJlZiwgTm9kZSogZG9jdW1lbnQsIFN0cmluZyBlc2NhcGUpIAoreworICAgIGlm
ICh2YXJSZWYuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdmFyUmVmOworCisgICAgU3RyaW5n
IG9yaWcgPSB2YXJSZWY7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBTdHJpbmcgdmFyaWFibGU7
CisgICAgU3RyaW5nIGNvbnY7CisgCisgICAgYm9vbCBoYXNFcnJvciA9IGZhbHNlOworICAgIHdo
aWxlICghb3JpZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gb3JpZy5maW5kKCIk
Iik7CisgICAgICAgIGlmIChzdGFydCA9PSAtMSkgeyAgLy9pdCdzIG5vdCBhIHZhcmlhYmxlIHJl
ZmVyZW5jZSwgb2shCisgICAgICAgICAgICByZXN1bHQgKz0gb3JpZzsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCArPSBvcmlnLmxlZnQoc3RhcnQpOworICAg
ICAgICBvcmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0aCgpIC0gc3RhcnQpOworIAorICAgICAg
ICAvLyBjaGVjayB0aGUgZG91YmxlICckJyBzaWduICwgc2tpcCB0aGVtIG92ZXIKKyAgICAgICAg
aWYgKG9yaWdbMV0gPT0gJyQnKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gIiQiOworICAgICAg
ICAgICAgb3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIDIpOworICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIH0KKyAKKyAgICAgICAgaW50IGVuZCA9IDA7CisgICAgICAgIGlm
IChvcmlnWzFdID09ICcoJykgeworICAgICAgICAgICAgZW5kID0gb3JpZy5maW5kKCIpIik7Cisg
ICAgICAgICAgICBpZiAoZW5kID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG9y
aWc7ICAgLy8gaWYgd2UgZmluZCAiJCgiIGJ1dCBubyAiKSIsIHN0b3AgcGFyc2luZworICAgICAg
ICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBvcmlnLnN1YnN0cmlu
ZygyLCBlbmQtMik7CisgICAgICAgICAgICAgICAgLy8gc2VhcmNoIGNvbnZlcnNpb24gc3RyaW5n
CisgICAgICAgICAgICAgICAgaW50IHBvcyA9IHZhcmlhYmxlLmZpbmQoJzonKTsKKyAgICAgICAg
ICAgICAgICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnYgPSB2YXJp
YWJsZS5zdWJzdHJpbmcocG9zICsgMSwgdmFyaWFibGUubGVuZ3RoKCkgLSBwb3MgLSAxKTsKKyAg
ICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5sZWZ0KHBvcyk7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIGhlcmUgd2Ug
c2hvdWxkIGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGlzIHZhbGlkCisgICAgICAgICAgICAg
ICAgaWYgKGhhc0Vycm9yID0gIWlzVmFsaWRWYXJpYWJsZU5hbWUodmFyaWFibGUpKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIG9yaWcgPSBvcmlnLnJpZ2h0
KG9yaWcubGVuZ3RoKCkgLSBlbmQgLSAxICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBlbmQgPSB2YXJpYWJsZUVuZHNBdChvcmlnKTsKKyAgICAgICAgICAg
IGlmIChlbmQgPCAxKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG9yaWcubGVmdCgyKTsK
KyAgICAgICAgICAgICAgICBvcmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0aCgpIC0gMik7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJp
YWJsZSA9IG9yaWcuc3Vic3RyaW5nKDEsIGVuZCAtIDEpOworICAgICAgICAgICAgb3JpZyA9IG9y
aWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIGVuZCApOworICAgICAgICB9CisgCisgICAgICAgIC8v
IHRyYXZlcnNlIHRoZSB3aG9sZSBET00gdHJlZSB0byBzdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSBy
ZWZlcmVuY2UKKyAgICAgICAgYm9vbCBpc0RvbmUgPSBmYWxzZTsKKyAgICAgICAgU3RyaW5nIGNv
bnZWYXI7CisgICAgICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudDsgCisgICAgICAgIHdoaWxlICgo
bm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNO
YW1lQXR0cmlidXRlV2l0aFZhbHVlKG5vZGUsIHZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAg
IGlmIChub2RlLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpzZXR2YXJUYWcpKSB7CisgICAgICAgICAg
ICAgICAgICAgIFdNTFNldHZhckVsZW1lbnQqIHNldHZhciA9IHN0YXRpY19jYXN0PFdNTFNldHZh
ckVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgY29udlZhciA9IHNldHZhci0+
Z2V0QXR0cmlidXRlKFdNTE5hbWVzOjp2YWx1ZUF0dHIpOworICAgICAgICAgICAgICAgICAgICBp
c0RvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAKKyAgICAgICAgLy8gdHJ5IHRvIGdldCB2
YXJpYWJsZSBzdWJzdGl0dXRlIGZyb20gY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICAgICAg
aWYgKCFpc0RvbmUpIHsKKyAgICAgICAgICAgIGNvbnZWYXIgPSBXTUxIZWxwZXI6OmN1cnJlbnRC
cndDb250ZXh0KCktPmdldFZhcmliYWxlKHZhcmlhYmxlKTsKKyAgICAgICAgfQorCisgICAgICAg
IHdoaWxlICghY29udlZhci5pc0VtcHR5KCkpIHsKKworICAgICAgICAgICAgaWYgKGNvbnZWYXIu
Y29udGFpbnMoIiQoIikpIHsKKyAgICAgICAgICAgICAgICBjb252VmFyID0gc3Vic3RpdHV0ZVZh
clJlZihjb252VmFyLCBkb2N1bWVudCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb252LmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBjb252ID0gZXNjYXBlOworICAgICAgICAgICAgY29udmVydFZhcklmTmVlZGVkKGNvbnZW
YXIsIGNvbnYpOworICAgICAgICAgICAgcmVzdWx0ICs9IGNvbnZWYXI7IAorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0gCisgCisgICAgfSAvLyBlbmQgb2Ygd2hpbGUgKCFvcmlnLmlzRW1w
dHkoKSkgCisgCisgICAgaWYgKGhhc0Vycm9yKQorICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXpl
cigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisKKyAgICBy
ZXR1cm4gcmVzdWx0LmlzRW1wdHkoKSA/IHZhclJlZiA6IHJlc3VsdDsKK30gCisKKy8vIEFjY29y
ZGluZyB0byB0aGUgc2VjdGlvbiA1LjIgYW5kIDEyLjUuMSBpbiB0aGUgd21sIHNwZWM6IHdhcC0x
OTEtd21sLTIwMDAwMjE5LWEucGRmCisvLyB0aGUgZGVzdGluYXRpb24gY2FyZCBjYW4gYmUgc3Bl
Y2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgY2FzZToKKy8vIDEsIHVzZSBmcmFnbWVudCBhbmNob3Ig
d2hpY2ggaXMgc3BlY2lmaWVkIGJ5IHRoZSBkb2N1bWVudCBVUkwsIGZvbGxvd2VkIHdpdGggJyMn
CisvLyAyLCBpZiBubyBmcmFnbWVudCBpcyBzcGVjaWZlZCBvciB0aGUgZnJhZ21lbnQgbmFtZSBp
cyB3cm9uZywgdGhlIGZpcnN0IGNhcmQgaXMgdGhlIGRlc3QgY2FyZC4KK1dNTENhcmRFbGVtZW50
KiBXTUxIZWxwZXI6OnNldERlc3RpbmF0aW9uQ2FyZChSZWZQdHI8RG9jdW1lbnQ+IGRvYywgU3Ry
aW5nIHVyaSkgCit7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYg
KHVyaS5pc0VtcHR5KCkpCisgICAgICAgIHVyaSA9IGRvYy0+ZG9jdW1lbnRVUkkoKTsKKyAgICAg
ICAgCisgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSAwOworICAgIGJvb2wgZm91bmREZXN0Q2Fy
ZCA9IGZhbHNlOworICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5sID0gZG9jLT5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiY2FyZCIpOworICAgIGlmIChubC5nZXQoKS0+bGVuZ3RoKCkgPD0gMCkgewor
ICAgICAgICByZXR1cm4gY2FyZDsKKyAgICB9CisKKyAgICAvL2hpZGUgYWxsIHRoZSBjYXJkcyBw
cmV2aW91c2x5IAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGk8IG5sLmdldCgpLT5sZW5ndGgo
KTsgaSsrKSB7CisgICAgICAgIGNhcmQgPSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KG5s
LmdldCgpLT5pdGVtKGkpKTsKKyAgICAgICAgY2FyZC0+c2V0VmlzaWJpbGl0eShmYWxzZSk7Cisg
ICAgfQorCisgICAgaW50IGlkeCA9IHVyaS5maW5kKCcjJyk7CisgICAgaWYgKGlkeCA+PSAwKSB7
CisgICAgICAgIFN0cmluZyBhdHRySUQ7CisgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IHVyaS5z
dWJzdHJpbmcoaWR4ICsgMSk7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG5sLmdldCgpLT5s
ZW5ndGgoKS0xOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICBjYXJkID0gc3RhdGljX2Nhc3Q8
V01MQ2FyZEVsZW1lbnQqPihubC5nZXQoKS0+aXRlbShpKSk7CisgICAgICAgICAgICBhdHRySUQg
PSBjYXJkLT5nZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmlkQXR0cik7CisgICAgICAgICAgICBpZiAo
YXR0cklEID09IGZyYWdtZW50KSB7CisgICAgICAgICAgICAgICAgZm91bmREZXN0Q2FyZCA9IHRy
dWU7CisgICAgICAgICAgICAgICAgY2FyZC0+c2V0VmlzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAg
ICAgICAgICAvL2ZvcmNlIGZyYW1lIGxvYWRlciB0byBsb2FkIHRoZSBVUkwgd2l0aCBmcmFnbWVu
dCBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAgUGFnZSogcGFnZSA9IFdNTEhlbHBlcjo6Y3Vy
cmVudEJyd0NvbnRleHQoKS0+cGFnZSgpOworICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFt
ZSgpLT5sb2FkZXIoKS0+c2V0Rm9yY2VSZWxvYWQodHJ1ZSk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWZvdW5kRGVz
dENhcmQpIHsKKyAgICAgICAgY2FyZCA9IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4obmwu
Z2V0KCktPml0ZW0oMCkpOworICAgICAgICBjYXJkLT5zZXRWaXNpYmlsaXR5KHRydWUpOworICAg
IH0KKworICAgIC8vIHVwZGF0ZSB0aGUgZG9jdW1lbnQncyB0aXRsZQorICAgIGRvYy0+c2V0VGl0
bGUoY2FyZC0+dGl0bGUoKSk7CisKKyAgICAvLyBzZXQgdGhlIGF0aXZlIGNhcmQgaW4gdGhlIGN1
cnJlbnQgYnJvd3NlciBjb250ZXh0CisgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgp
LT5zZXRBY3RpdmVDYXJkKGNhcmQpOworCisgICAgcmV0dXJuIGNhcmQ7Cit9CisKK3ZvaWQgV01M
SGVscGVyOjpyZWdpc3RlclRlbXBsYXRlVG9DYXJkcyhEb2N1bWVudCogZG9jKQoreworICAgIGlm
ICghZG9jKQorICAgICAgICByZXR1cm47CisKKyAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IDA7
CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IGRvYy0+Z2V0RWxlbWVudHNCeVRhZ05h
bWUoInRlbXBsYXRlIik7CisgICAgV01MVGVtcGxhdGVFbGVtZW50KiB0ZW1wbCA9IHN0YXRpY19j
YXN0PFdNTFRlbXBsYXRlRWxlbWVudCo+KGxpc3QuZ2V0KCktPml0ZW0oMCkpOworICAgIGlmICh0
ZW1wbCkgeworICAgICAgICBsaXN0ID0gZG9jLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FyZCIp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGkgPCBsaXN0LmdldCgpLT5sZW5ndGgo
KTsgKytpKSB7CisgICAgICAgICAgICBjYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQq
PihsaXN0LmdldCgpLT5pdGVtKGkpKTsKKyAgICAgICAgICAgIGNhcmQtPmJpbmRUZW1wbGF0ZSh0
ZW1wbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTEhl
bHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEhlbHBlci5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS93bWwvV01MSGVscGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFdNTEhlbHBlcl9oCisjZGVmaW5lIFdNTEhlbHBlcl9oCisKKyNpbmNs
dWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIENTdHJp
bmc7IAorY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CitjbGFzcyBXTUxCcndDb250ZXh0OworY2xhc3Mg
V01MVG9rZW5pemVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCisKK1dNTEhlbHBlciBjbGFzcyx3aGljaCBvZmZlcnMg
Y29udmVuaWVudCBmdW5jdGlvbnMgdG8gV01MRWxlbWVudAorCisqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjbGFzcyBXTUxI
ZWxwZXIgeworCitwdWJsaWM6IAorICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYXJpYWJsZU5hbWUo
Y29uc3QgU3RyaW5nJiwgYm9vbCBpc1ZhclJlZiA9IGZhbHNlKTsKKyAgICBzdGF0aWMgYm9vbCBo
YXNWYXJpYWJsZVJlZihjb25zdCBTdHJpbmcmKTsKKworICAgIC8vTm9kZSogaXMgdGhlIHJvb3Qg
b2YgRE9NIHRyZWUgd2hpY2ggd2lsbCBiZSB0cmF2ZXJzZWQgZm9yIHNlYXJjaGluZyB2YXJpYWJs
ZSB2YWx1ZQorICAgIHN0YXRpYyBTdHJpbmcgc3Vic3RpdHV0ZVZhclJlZihjb25zdCBTdHJpbmcm
LCBOb2RlKiwgU3RyaW5nIGVzY2FwZSA9IFN0cmluZygpKTsgCisgICAgc3RhdGljIHZvaWQgY29u
dmVydFZhcklmTmVlZGVkKFN0cmluZyYsIFN0cmluZyYpOworCisgICAgc3RhdGljIFdNTENhcmRF
bGVtZW50KiBzZXREZXN0aW5hdGlvbkNhcmQoUmVmUHRyPERvY3VtZW50PiwgU3RyaW5nIHVyaSA9
IFN0cmluZygpKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVGVtcGxhdGVUb0NhcmRzKERv
Y3VtZW50Kik7CisKKyAgICBzdGF0aWMgV01MQnJ3Q29udGV4dCogY3VycmVudEJyd0NvbnRleHQo
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50QnJ3Q29udGV4dChXTUxCcndDb250ZXh0Kik7
CisKKyAgICBzdGF0aWMgV01MVG9rZW5pemVyKiB0b2tlbml6ZXIoKTsKKyAgICBzdGF0aWMgdm9p
ZCBzZXRUb2tlbml6ZXIoV01MVG9rZW5pemVyKik7Citwcml2YXRlOgorICAgIHN0YXRpYyBXTUxC
cndDb250ZXh0KiBzX2Jyd0NvbnRleHQ7CisgICAgc3RhdGljIFdNTFRva2VuaXplciogc190b2tl
bml6ZXI7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwv
V01MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxJbWFnZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIgCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisj
aW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCitXTUxJbWFnZUVsZW1l
bnQ6OldNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCog
ZG9jKQorICAgIDogSFRNTEltYWdlRWxlbWVudChuYW1lLCBkb2MpIHt9CisKK1dNTEltYWdlRWxl
bWVudDo6fldNTEltYWdlRWxlbWVudCgpIHt9CisKK3ZvaWQgV01MSW1hZ2VFbGVtZW50Ojp1cGRh
dGVBdHRyc0lmTmVlZGVkKCkKK3sKKyAgICBTdHJpbmcgc3ViOworICAgIFN0cmluZyBhbHQgPSBn
ZXRBdHRyaWJ1dGUoYWx0QXR0cik7CisgICAgaWYgKCFhbHQuaXNFbXB0eSgpKSB7CisgICAgICAg
IHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhbHQsIGRvY3VtZW50KCkpOworICAg
ICAgICBpZiAoYWx0ICE9IHN1YikKKyAgICAgICAgICAgIHNldEF0dHJpYnV0ZShhbHRBdHRyLCBz
dWIpOworICAgIH0gICAKKworICAgIFN0cmluZyBzcmMgPSBnZXRBdHRyaWJ1dGUoc3JjQXR0cik7
CisgICAgaWYgKCFzcmMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vi
c3RpdHV0ZVZhclJlZihzcmMsIGRvY3VtZW50KCkpOworICAgICAgICBpZiAoc3JjICE9IHN1YikK
KyAgICAgICAgICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCBzdWIpOworICAgIH0KKworICAgIFN0
cmluZyBsb2NhbFNyYyA9IGdldEF0dHJpYnV0ZShXTUxOYW1lczo6bG9jYWxzcmNBdHRyKTsKKyAg
ICBpZiAoIWxvY2FsU3JjLmlzRW1wdHkoKSkgeworICAgICAgICAvLyBzdG9yZSB0aGUgc3JjIGF0
dHJpYnV0ZSBmb3IgdXNlIGxhdGVyCisgICAgICAgIGlmICghc3JjLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIG1fc3JjID0gc3ViOworCisgICAgICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0
ZVZhclJlZihsb2NhbFNyYywgZG9jdW1lbnQoKSk7CisgICAgICAgIGlmICghc3ViLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgaWYgKGxvY2FsU3JjICE9IHN1YikKKyAgICAgICAgICAgICAgICBz
ZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmxvY2Fsc3JjQXR0ciwgc3ViKTsKKworICAgICAgICAgICAg
c2V0QXR0cmlidXRlKHNyY0F0dHIsIHN1Yik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQg
V01MSW1hZ2VFbGVtZW50OjpyZWxvYWRJbWFnZUJ5U3JjQXR0cigpCit7CisgICAgaWYgKG1fc3Jj
LmlzRW1wdHkoKSkgCisgICAgICAgIHJldHVybjsKKworICAgIHNldEF0dHJpYnV0ZShzcmNBdHRy
LCBtX3NyYyk7CisgICAgbV9zcmMgPSAiIjsKKworICAgIG1faW1hZ2VMb2FkZXIudXBkYXRlRnJv
bUVsZW1lbnQoKTsKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwvV01MSW1h
Z2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MSW1hZ2VFbGVtZW50X2gKKyNkZWZp
bmUgV01MSW1hZ2VFbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTElt
YWdlRWxlbWVudCA6IHB1YmxpYyBIVE1MSW1hZ2VFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxJ
bWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVh
bCB+V01MSW1hZ2VFbGVtZW50KCk7CisKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsK
KyAgICB2b2lkIHJlbG9hZEltYWdlQnlTcmNBdHRyKCk7CisKK3ByaXZhdGU6CisgICAgU3RyaW5n
IG1fc3JjOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dt
bC9XTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTElucHV0
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
ICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJUZXh0RXZlbnQuaCIKKyNpbmNsdWRl
ICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJXTUxJ
bnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01M
SGVscGVyLmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMu
aCIKKyNpbmNsdWRlICJ3dGYvQVNDSUlDVHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwor
dXNpbmcgc3RkOjptaW47CisKK1dNTElucHV0RWxlbWVudDo6V01MSW5wdXRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZywgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
KQorICAgIDogSFRNTElucHV0RWxlbWVudCh0YWcsIGRvYywgZm9ybSkKKyAgICAsIG1fZW1wdHlP
ayhmYWxzZSkKKyAgICAsIG1fbWFza0FsbG93c0lucHV0Q2hhck51bXMoMCkKK3sKK30KKworV01M
SW5wdXRFbGVtZW50Ojp+V01MSW5wdXRFbGVtZW50KCkgCit7Cit9CisKK3ZvaWQgV01MSW5wdXRF
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpIAorewor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybWF0QXR0cikgeworCisgICAgICAgIGlmIChXTUxI
ZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7CisgICAgICAgICAgICBXTUxI
ZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VF
cnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX2Zvcm1h
dCA9IHZhbGlkYXRlSW5wdXRNYXNrKGF0dHItPnZhbHVlKCkpOworICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGVtcHR5b2tBdHRyKSB7CisgICAgICAgIG1fZW1wdHlPayA9ICgoYXR0ci0+
dmFsdWUoKSA9PSAidHJ1ZSIpID8gdHJ1ZSA6IGZhbHNlKTsKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBuYW1lQXR0cikgeworCisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1Zhcmlh
YmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIo
KS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICBl
bHNlIAorICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CisgCisgICAgfSBlbHNlIHsKKyAgICAgICAgSFRNTElucHV0RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgfQorfQorCisKK1N0cmluZyBXTUxJbnB1dEVsZW1l
bnQ6OnZhbGlkYXRlSW5wdXRNYXNrKGNvbnN0IEF0b21pY1N0cmluZyYgaW5wdXRNYXNrKQorewor
ICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZm9ybWF0Q29kZXMgPSAiQWFOblh4TW0iOworICAgIGJv
b2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2FyZCA9IGZhbHNlOworICAgIHVu
c2lnbmVkIGVzY2FwZUNoYXJDbnRzID0gMDsKKworICAgIHVuc2lnbmVkIG1hc2tMZW4gPSBpbnB1
dE1hc2subGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaWR4OworICAgIFVDaGFyIGM7IAorCisgICAg
Zm9yIChpZHggPSAwOyBpZHggPCBtYXNrTGVuOyArK2lkeCkgeworICAgICAgICBjID0gaW5wdXRN
YXNrW2lkeF07CisKKyAgICAgICAgCisgICAgICAgIGlmIChmb3JtYXRDb2Rlcy5maW5kKGMpID09
IC0xKSB7CisKKyAgICAgICAgICAgIGlmICgoYyA9PSAnKicpIHx8IChXVEY6OmlzQVNDSUlEaWdp
dChjKSAmJiAoYyAhPSAnMCcpKSkgeyAKKyAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBjb2Rl
cyB3aGljaCBlbmRzIHdpdGggJypmJyBvciAnbmYnCisgICAgICAgICAgICAgICAgYyA9IGlucHV0
TWFza1srK2lkeF07CisgICAgICAgICAgICAgICAgaWYgKChpZHgrMSAhPSBtYXNrTGVuKSB8fCBm
b3JtYXRDb2Rlcy5maW5kKGMpID09IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGlzVmFsaWQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZSBp
ZiAoYyA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgLy9za2lwIG92ZXIgdGhlIG5leHQgbWFz
ayBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBpZHgrKzsgICAKKyAgICAgICAgICAgICAgICBl
c2NhcGVDaGFyQ250cysrOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBp
c1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGNhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoYXIg
YWxsb3dlZCB0byBlbnRlciBieSBpbnB1dCBtYXNrIHN0cmluZworICAgIGlmIChpc1ZhbGlkKSB7
CisgICAgICAgIG1fbWFza0FsbG93c0lucHV0Q2hhck51bXMgPSBtYXNrTGVuOworCisgICAgICAg
IGlmIChlc2NhcGVDaGFyQ250cykKKyAgICAgICAgICAgIG1fbWFza0FsbG93c0lucHV0Q2hhck51
bXMgLT0gZXNjYXBlQ2hhckNudHM7CisKKyAgICAgICAgaWYgKGhhc1dpbGRjYXJkICYmIGlucHV0
TWFza1ttYXNrTGVuLTJdID09ICcqJykKKyAgICAgICAgICAgIG1fbWFza0FsbG93c0lucHV0Q2hh
ck51bXMgPSBtYXhMZW5ndGgoKTsKKyAgICAgICAgZWxzZSBpZiAoaGFzV2lsZGNhcmQpIHsKKyAg
ICAgICAgICAgIGMgPSBpbnB1dE1hc2tbbWFza0xlbi0yXTsKKyAgICAgICAgICAgIHVuc2lnbmVk
IGxlZnRMZW4gPSBTdHJpbmcoJmMpLnRvSW50KCk7CisgICAgICAgICAgICBtX21hc2tBbGxvd3NJ
bnB1dENoYXJOdW1zID0gbGVmdExlbiArIG1fbWFza0FsbG93c0lucHV0Q2hhck51bXMgLSAyOwor
ICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGlucHV0TWFzazsKKyAgICB9CisgCisgICAgcmV0
dXJuIFN0cmluZygpOworfQorCit1bnNpZ25lZCBXTUxJbnB1dEVsZW1lbnQ6OmN1cnNvclBvc1Rv
SWR4T2ZNYXNrKHVuc2lnbmVkIGN1cnNvclBvcykKK3sKKyAgICBVQ2hhciBtYXNrOworICAgIGlu
dCBpZHggPSAtMTsKKyAgICBjdXJzb3JQb3MrKzsKKyAgICB3aGlsZSAoY3Vyc29yUG9zLS0pIHsK
KyAgICAgICAgbWFzayA9IG1fZm9ybWF0WysraWR4XTsKKyAgICAgICAgaWYgKG1hc2sgPT0gJ1xc
JykgeworICAgICAgICAgICAgaWR4Kys7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoKG1h
c2sgPT0gJyonKSB8fCAoV1RGOjppc0FTQ0lJRGlnaXQobWFzaykgJiYgKG1hc2sgIT0gJzAnKSkp
IHsKKyAgICAgICAgICAgIGlkeCA9IG1fZm9ybWF0Lmxlbmd0aCgpIC0gMTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9IAorICAgIH0KKworICAgIHJldHVybiBpZHg7Cit9CisKK2Jvb2wg
V01MSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFN0cmluZyYgaW5wdXQpCit7
CisgICAgYm9vbCBiUGFzcyA9IHRydWU7CisgICAgVUNoYXIgaW5DaGFyOworICAgIGZvciAodW5z
aWduZWQgaW50IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpbkNo
YXIgPSBpbnB1dFtpXTsKKworICAgICAgICBiUGFzcyA9IGlzQ29uZm9ybWVkVG9JbnB1dE1hc2so
aW5DaGFyLCBpKzEsIGZhbHNlKTsKKyAgICAgICAgaWYgKCFiUGFzcykKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBiUGFzczsKK30KKworYm9vbCBXTUxJbnB1dEVsZW1l
bnQ6OmlzQ29uZm9ybWVkVG9JbnB1dE1hc2soVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBpbnB1dENo
YXJOdW0sIGJvb2wgaXNJbnB1dGVkQnlVc3IpCit7CisgICAgYm9vbCBiUGFzcyA9IHRydWU7Cisg
ICAgaWYgKG1fZm9ybWF0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGJQYXNzOworICAgIAor
ICAgIC8vIHdlIHNob3VsZCBsaW1pdCB0aGUgbnVtYmVyIG9mIGlucHV0ZWQgY2hhcmF0ZXJzIGFj
Y29yZGluZyB0byB0aGUgZm9ybWF0IGFuZCBtYXhsZW5ndGggYXR0cmlidXRlCisgICAgdW5zaWdu
ZWQgbWF4QWxsb3dJbnB1dE51bSA9IG1pbihtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1zLCBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4obWF4TGVuZ3RoKCkpKTsKKworICAgIGlmIChpbnB1dENoYXJOdW0g
PD0gbWF4QWxsb3dJbnB1dE51bSkgeworICAgICAgICB1bnNpZ25lZCBpZHhPZk1hc2sgPSAwOwor
ICAgICAgICBpZiAoaXNJbnB1dGVkQnlVc3IpIHsKKyAgICAgICAgICAgIGlkeE9mTWFzayA9IGN1
cnNvclBvc1RvSWR4T2ZNYXNrKHNlbGVjdGlvblN0YXJ0KCkpOworICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgaWR4T2ZNYXNrID0gY3Vyc29yUG9zVG9JZHhPZk1hc2soaW5wdXRDaGFyTnVt
IC0gMSk7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBtYXNrID0gbV9mb3JtYXRbaWR4T2ZN
YXNrXTsKKworICAgICAgICAvLyBtYXRjaCB0aGUgY2hhciBpbnB1dHRlZCB3aXRoIGlucHV0IG1h
c2sKKyAgICAgICAgaWYgKG1hc2sgPT0gJ0EnKSB7CisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6
OmlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFXVEY6OmlzQVNDSUlMb3dlcihpbkNoYXIpICYmIFdU
Rjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICB9IGVsc2UgaWYgKG1hc2sgPT0g
J2EnKSB7CisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6OmlzQVNDSUlEaWdpdChpbkNoYXIpICYm
ICFXVEY6OmlzQVNDSUlVcHBlcihpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNo
YXIpOworICAgICAgICB9IGVsc2UgaWYgKG1hc2sgPT0gJ04nKSB7CisgICAgICAgICAgICBiUGFz
cyA9IFdURjo6aXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBpZiAobWFzayA9
PSAnbicpIHsKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNBU0NJSUFscGhhKGluQ2hhcikg
JiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBpZiAobWFz
ayA9PSAnWCcpIHsKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNBU0NJSUxvd2VyKGluQ2hh
cikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBpZiAo
bWFzayA9PSAneCcpIHsKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNBU0NJSVVwcGVyKGlu
Q2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBp
ZiAobWFzayA9PSAnTScpIHsKKyAgICAgICAgICAgIGJQYXNzID0gV1RGOjppc0FTQ0lJUHJpbnRh
YmxlKGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBpZiAobWFzayA9PSAnbScpIHsKKyAgICAgICAg
ICAgIGJQYXNzID0gV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIH0gZWxz
ZSB7IAorICAgICAgICAgICAgYlBhc3MgPSAobWFzayA9PSBpbkNoYXIpOworICAgICAgICB9CisK
KyAgICB9IGVsc2UgeyAgLy8gaW5wdXRDaGFyTnVtID4gbWF4QWxsb3dJbnB1dE51bQorICAgICAg
ICBiUGFzcyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBiUGFzczsKK30KKworCit2b2lk
IFdNTElucHV0RWxlbWVudDo6aW5pdCgpCit7CisgICAgU3RyaW5nIG5hbWVWYXIgPSBuYW1lKCk7
CisgICAgU3RyaW5nIHZhbCA9IHZhbHVlKCk7CisgICAgU3RyaW5nIHZhclZhbHVlOworICAgIGlm
ICghbmFtZVZhci5pc0VtcHR5KCkpIHsKKyAgICAgICAgdmFyVmFsdWUgPSBXTUxIZWxwZXI6OmN1
cnJlbnRCcndDb250ZXh0KCktPmdldFZhcmliYWxlKG5hbWVWYXIpOworICAgIH0KKyAgICAKKyAg
ICBpZiAodmFyVmFsdWUuaXNFbXB0eSgpIHx8ICFpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKHZhclZh
bHVlKSkgeworICAgICAgICBpZiAoaXNDb25mb3JtZWRUb0lucHV0TWFzayh2YWwpKQorICAgICAg
ICAgICAgdmFyVmFsdWUgPSB2YWw7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICB2YXJWYWx1
ZSA9ICIiOworCisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c3RvcmVW
YXJpYWJsZShuYW1lVmFyLCB2YXJWYWx1ZSk7CisgICAgfQorCisgICAgc2V0VmFsdWUodmFyVmFs
dWUpOworCisKKyAgICBpZiAoZ2V0QXR0cmlidXRlKGVtcHR5b2tBdHRyKS5pc0VtcHR5KCkpIHsK
KyAgICAgICAgaWYgKG1fZm9ybWF0LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fZW1wdHlPayA9
IHRydWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy9jaGVjayBpZiB0aGUgZm9ybWF0
IGNvZGVzIGlzIGEgIipmIiBjb2RlCisgICAgICAgICAgICBTdHJpbmcgZm9ybWF0Q29kZXMgPSAi
TW1BYVh4Tm4iOworICAgICAgICAgICAgaWYgKChtX2Zvcm1hdC5sZW5ndGgoKSA9PSAyKSAmJiAK
KyAgICAgICAgICAgICAgIChtX2Zvcm1hdFswXSA9PSAnKicpICYmIAorICAgICAgICAgICAgICAg
KGZvcm1hdENvZGVzLmZpbmQobV9mb3JtYXRbMV0pICE9IC0xKSkKKyAgICAgICAgICAgICAgICBt
X2VtcHR5T2sgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdNTElucHV0RWxl
bWVudDo6dXBkYXRlQXR0cnNJZk5lZWRlZCgpCit7CisgICAgU3RyaW5nIHZhbHVlID0gZ2V0QXR0
cmlidXRlKHZhbHVlQXR0cik7IAorICAgIFN0cmluZyBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1
dGVWYXJSZWYodmFsdWUsIGRvY3VtZW50KCkpOworICAgIGlmICh2YWx1ZSAhPSBzdWIpIHsKKyAg
ICAgICAgc2V0VmFsdWUoc3ViKTsKKyAgICB9CisKKyAgICBTdHJpbmcgdGl0bGUgPSBnZXRBdHRy
aWJ1dGUodGl0bGVBdHRyKTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYo
dGl0bGUsIGRvY3VtZW50KCkpOworICAgIGlmICh0aXRsZSAhPSBzdWIpIHsKKyAgICAgICAgc2V0
QXR0cmlidXRlKHRpdGxlQXR0ciwgdGl0bGUpOworICAgIH0KK30KKwordm9pZCBXTUxJbnB1dEVs
ZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKK3sKKyAgICAvLyB1cGRhdGUgdGhlIG5hbWVkIHZh
cmlhYmxlIG9mIGlucHV0IGVsZW1lbnQgCisgICAgU3RyaW5nIG5hbWVWYXIgPSBuYW1lKCk7Cisg
ICAgaWYgKCFuYW1lVmFyLmlzRW1wdHkoKSkgeworICAgICAgICBTdHJpbmcgaW5wdXQgPSB0ZXh0
KCk7CisgICAgICAgIGlmIChtX2VtcHR5T2sgfHwgIWlucHV0LmlzRW1wdHkoKSkgeworICAgICAg
ICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlKG5hbWVW
YXIsIGlucHV0KTsKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2
ZW50KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBmb2N1cygpOyAKKyAgICAgICAg
fQorICAgIH0KKworfQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCogZXZ0KQoreworICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09
IHRleHRJbnB1dEV2ZW50ICYmIGV2dC0+aXNUZXh0RXZlbnQoKSkgeworICAgICAgICBTdHJpbmcg
ZGF0YSA9IHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2dCktPmRhdGEoKTsKKyAgICAgICAgUmVu
ZGVyVGV4dENvbnRyb2wgKnJ0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5k
ZXJlcigpKTsKKyAgICAgICAgaWYgKHJ0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnB1dENo
YXJOdW0gPSBydC0+dGV4dCgpLmxlbmd0aCgpICsgMTsKKyAgICAgICAgICAgIGlmICghaXNDb25m
b3JtZWRUb0lucHV0TWFzayhkYXRhWzBdLCBpbnB1dENoYXJOdW0pKQorICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgSFRNTElucHV0RWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihldnQpOworfQorCitTdHJpbmcgV01MSW5wdXRFbGVtZW50Ojp0ZXh0
KCkgY29uc3QKK3sKKyAgICBSZW5kZXJUZXh0Q29udHJvbCAqIHJ0ID0gc3RhdGljX2Nhc3Q8UmVu
ZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKTsKKyAgICByZXR1cm4gKChydCAhPSAwKSA/IHJ0
LT50ZXh0KCkgOiBTdHJpbmcoKSk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTElucHV0
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTElucHV0RWxlbWVudF9oCisjZGVmaW5l
IFdNTElucHV0RWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEZvcm1FbGVtZW50OworICAgICAgICAgICAg
ICAgICAgICAgICAKK2NsYXNzIFdNTElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MSW5wdXRFbGVt
ZW50IHsKK3B1YmxpYzoKKyAgICBXTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworICAgIHZpcnR1YWwgfldNTElucHV0
RWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOworICAg
IHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAgICB2b2lkIGlu
aXQoKTsKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBib29sIGlzQ29uZm9y
bWVkVG9JbnB1dE1hc2soU3RyaW5nJik7CisgICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNr
KFVDaGFyLCB1bnNpZ25lZCwgYm9vbCBpc0lucHV0ZWRCeVVzciA9IHRydWUpOworICAgIFN0cmlu
ZyB0ZXh0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIHZhbGlkYXRlSW5wdXRNYXNr
KGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHVuc2lnbmVkIGN1cnNvclBvc1RvSWR4T2ZNYXNr
KHVuc2lnbmVkKTsKKworICAgIFN0cmluZyBtX2Zvcm1hdDsKKyAgICBib29sIG1fZW1wdHlPazsK
KyAgICB1bnNpZ25lZCBtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1zOworfTsKKworfSAvL25hbWVz
cGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW50cmluc2ljRXZlbnRIYW5kbGVy
LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxl
ci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiV01M
TmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRva2Vu
aXplci5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MSW50cmluc2ljRXZlbnRIYW5kbGVyOjpX
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKSAKK3sKK30KKyAgICAKK1dNTEludHJpbnNpY0V2ZW50
SGFuZGxlcjo6fldNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpCit7Cit9CisKK3ZvaWQgV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyOjpyZWdpc3RlckludHJpbnNpY0V2ZW50KFdNTEludHJFdmVudFR5
cGUgdHlwZSwgY29uc3QgV01MSW50cmluc2ljRXZlbnQmIGV2KQoreworICAgIGlmIChtX2V2ZW50
cy5jb250YWlucyh0eXBlKSkgeworICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBv
cnRFcnJvcihDb25mbGljdGluZ0V2ZW50QmluZGluZ0Vycm9yKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBtX2V2ZW50cy5zZXQodHlwZSwgZXYpOworfQorCit2b2lkIFdNTEludHJpbnNp
Y0V2ZW50SGFuZGxlcjo6dHJpZ2dlckludHJpbnNpY0V2ZW50KFdNTEludHJFdmVudFR5cGUgdHlw
ZSkgY29uc3QKK3sKKyAgICBXTUxJbnRyaW5zaWNFdmVudCBldiA9IG1fZXZlbnRzLmdldCh0eXBl
KTsKKyAgICBpZiAoZXYudGFzaykKKyAgICAgICAgZXYudGFzay0+ZXhlYygwLCBldi50YXJnZXRV
UkkpOworfQorCitib29sIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6aGFzSW50cmluc2ljRXZl
bnQoV01MSW50ckV2ZW50VHlwZSB0eXBlKSBjb25zdAoreworICAgIHJldHVybiBtX2V2ZW50cy5j
b250YWlucyh0eXBlKTsKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxJbnRyaW5zaWNFdmVudEhh
bmRsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyX2gKKyNkZWZpbmUgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyX2gK
KworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50OworCitlbnVtIFdNTElu
dHJFdmVudFR5cGUgeworICAgIFVua25vd24gPSAwLCBPbkVudGVyRm9yd2FyZCwgT25FbnRlckJh
Y2t3YXJkLCBPblRpbWVyLCBPblBpY2sgCit9OworCit0eXBlZGVmIHN0cnVjdCBXTUxJbnRyaW5z
aWNFdmVudCB7CisgICAgV01MVGFza0VsZW1lbnQqIHRhc2s7CisgICAgU3RyaW5nIHRhcmdldFVS
STsKK30gV01MSW50cmluc2ljRXZlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIAordHlwZWRl
ZiBIYXNoTWFwPGludCwgV01MSW50cmluc2ljRXZlbnQ+IEludHJpbnNpY0V2bnRNYXA7CisKK2Ns
YXNzIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciB7CitwdWJsaWM6CisgICAgV01MSW50cmluc2lj
RXZlbnRIYW5kbGVyKCk7CisgICAgdmlydHVhbCB+V01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7
CisKKyAgICAvLyBoYW5kbGluZyBXTUwgaW50cmluc2ljIGV2ZW50CisgICAgdm9pZCByZWdpc3Rl
ckludHJpbnNpY0V2ZW50KFdNTEludHJFdmVudFR5cGUsIGNvbnN0IFdNTEludHJpbnNpY0V2ZW50
Jik7CisgICAgdm9pZCB0cmlnZ2VySW50cmluc2ljRXZlbnQoV01MSW50ckV2ZW50VHlwZSkgY29u
c3Q7CisgICAgYm9vbCBoYXNJbnRyaW5zaWNFdmVudChXTUxJbnRyRXZlbnRUeXBlKSBjb25zdDsK
KworcHJpdmF0ZToKKyAgICBJbnRyaW5zaWNFdm50TWFwIG1fZXZlbnRzOworICAgCit9OworCit9
IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V01MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRl
ICJXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxPcHRp
b25FbGVtZW50OjpXTUxPcHRpb25FbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MT3B0
aW9uRWxlbWVudChkb2MsIDApCisgICAgLCBtX2V2bnRIYW5kbGVyKDApCisgICAgLCBtX2hhc0lu
dHJFdmVudChmYWxzZSkKK3sKK30KKworV01MT3B0aW9uRWxlbWVudDo6fldNTE9wdGlvbkVsZW1l
bnQoKSAKK3sKKyAgICBpZiAobV9ldm50SGFuZGxlcikgeworICAgICAgICBkZWxldGUgbV9ldm50
SGFuZGxlcjsKKyAgICAgICAgbV9ldm50SGFuZGxlciA9IDA7CisgICAgfQorfQorCit2b2lkIFdN
TE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0
cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG9ucGlja0F0dHIpIHsKKyAgICAgICAgCisg
ICAgICAgIFdNTEludHJFdmVudFR5cGUgZXR5cGUgPSBPblBpY2s7IAorICAgICAgICBpZiAoIW1f
ZXZudEhhbmRsZXIpIHsKKyAgICAgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmlu
c2ljRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIH0KKyAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBl
YyA9IDA7CisgICAgICAgIFF1YWxpZmllZE5hbWUgcU5hbWUoImdvIiwgImdvIiwgIiIpOworICAg
ICAgICBFbGVtZW50KiBnbyA9IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KHFO
YW1lLCBkb2N1bWVudCgpLCBmYWxzZSk7CisgICAgICAgIFN0cmluZyBocmVmID0gV01MSGVscGVy
OjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCksICJlc2NhcGUiKTsK
KyAgICAgICAgZ28tPnNldEF0dHJpYnV0ZU5TKCIiLCAiaHJlZiIsIGhyZWYsIGVjKTsKKyAKKyAg
ICAgICAgV01MSW50cmluc2ljRXZlbnQgZXY7CisgICAgICAgIGV2LnRhc2sgPSBzdGF0aWNfY2Fz
dDxXTUxHb0VsZW1lbnQqPihnbyk7CisgICAgICAgIGV2LnRhcmdldFVSSSA9IGhyZWY7CisgCisg
ICAgICAgIG1faGFzSW50ckV2ZW50ID0gdHJ1ZTsKKyAgICAgICAgbV9ldm50SGFuZGxlci0+cmVn
aXN0ZXJJbnRyaW5zaWNFdmVudChldHlwZSwgZXYpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAg
SFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgIH0KK30K
KworV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBXTUxPcHRpb25FbGVtZW50OjpldmVudEhhbmRs
ZXIoKSB7CisgICAgaWYgKG1faGFzSW50ckV2ZW50ICYmICFtX2V2bnRIYW5kbGVyKSAgeworICAg
ICAgICBtX2V2bnRIYW5kbGVyID0gbmV3IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworICAg
IH0KKyAgICByZXR1cm4gbV9ldm50SGFuZGxlcjsKK30KKwordm9pZCBXTUxPcHRpb25FbGVtZW50
OjpzZXRIYXNJbnRyRXZlbnQoYm9vbCBoYXMpIHsKKyAgICBtX2hhc0ludHJFdmVudCA9IGhhczsK
K30KKyAKK2Jvb2wgV01MT3B0aW9uRWxlbWVudDo6aGFzSW50ckV2ZW50KCkgeworICAgIHJldHVy
biBtX2hhc0ludHJFdmVudDsKK30KKwordm9pZCBXTUxPcHRpb25FbGVtZW50OjpoYW5kbGVJbnRy
RXZlbnRJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fZXZudEhhbmRsZXIgJiYgbV9ldm50SGFuZGxl
ci0+aGFzSW50cmluc2ljRXZlbnQoT25QaWNrKSkKKyAgICAgICAgbV9ldm50SGFuZGxlci0+dHJp
Z2dlckludHJpbnNpY0V2ZW50KE9uUGljayk7Cit9CisKK3ZvaWQgV01MT3B0aW9uRWxlbWVudDo6
dXBkYXRlQXR0cnNJZk5lZWRlZCgpIAoreworICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0
ZSh2YWx1ZUF0dHIpOworICAgIFN0cmluZyBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYodmFsdWUsIGRvY3VtZW50KCkpOworICAgIGlmICh2YWx1ZSAhPSBzdWIpCisgICAgICAgIHNl
dEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHN1Yik7CisKKyAgICBTdHJpbmcgdGl0bGUgPSBnZXRBdHRy
aWJ1dGUodGl0bGVBdHRyKTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYo
dGl0bGUsIGRvY3VtZW50KCkpOworCisgICAgaWYgKHRpdGxlICE9IHN1YikKKyAgICAgICAgc2V0
QXR0cmlidXRlKHRpdGxlQXR0ciwgdGl0bGUpOworfQorCit2b2lkIFdNTE9wdGlvbkVsZW1lbnQ6
OnNldFNlbGVjdGVkU3RhdGUoYm9vbCBzZWxlY3RlZCkKK3sKKyAgICBpZiAobV9zZWxlY3RlZCA9
PSBzZWxlY3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV01MU2VsZWN0RWxlbWVudCogc2Vs
ID0gZ2V0U2VsZWN0KCk7CisgICAgaWYgKCFzZWwpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c2VsZWN0ZWQgPSBzZWxlY3RlZDsKKyAgICBpZiAoc2VsLT5tdWx0aXBsZSgpICYmIG1faGFzSW50
ckV2ZW50KSB7CisgICAgICAgIGhhbmRsZUludHJFdmVudElmTmVlZGVkKCk7CisgICAgfSBlbHNl
IGlmIChtX2hhc0ludHJFdmVudCAmJiBtX3NlbGVjdGVkKSB7CisgICAgICAgIGhhbmRsZUludHJF
dmVudElmTmVlZGVkKCk7CisgICAgfQorCisgICAgc2V0Q2hhbmdlZCgpOworfQorCitXTUxTZWxl
Y3RFbGVtZW50KiBXTUxPcHRpb25FbGVtZW50OjpnZXRTZWxlY3QoKSBjb25zdAoreworICAgIE5v
ZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKKyAgICB3aGlsZSAoc2VsZWN0ICYmICFzZWxlY3Qt
Pmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICAgICAgc2VsZWN0ID0gc2VsZWN0LT5wYXJlbnRO
b2RlKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V01MU2VsZWN0RWxlbWVudCo+KHNlbGVj
dCk7Cit9CisKK30gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTE9wdGlvbkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTE9wdGlvbkVsZW1lbnRfaAorI2RlZmluZSBX
TUxPcHRpb25FbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50LmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxJbnRy
aW5zaWNFdmVudEhhbmRsZXI7CitjbGFzcyBXTUxTZWxlY3RFbGVtZW50OworCitjbGFzcyBXTUxP
cHRpb25FbGVtZW50IDogcHVibGljIEhUTUxPcHRpb25FbGVtZW50eworcHVibGljOgorICAgIFdN
TE9wdGlvbkVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxPcHRpb25FbGVtZW50
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKik7CisgICAgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wpOworICAgIFdNTFNlbGVjdEVs
ZW1lbnQqIGdldFNlbGVjdCgpIGNvbnN0OworCisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVy
KiBldmVudEhhbmRsZXIoKTsKKyAgICBib29sIGhhc0ludHJFdmVudCgpOworICAgIHZvaWQgc2V0
SGFzSW50ckV2ZW50KGJvb2wpOworICAgIHZvaWQgaGFuZGxlSW50ckV2ZW50SWZOZWVkZWQoKTsK
KworICAgIHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZCgpOyAKK3ByaXZhdGU6CisgICAgV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyKiBtX2V2bnRIYW5kbGVyOworICAgIGJvb2wgbV9oYXNJbnRyRXZl
bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dN
TFBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxQRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxQRWxlbWVudC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01M
UEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiTm9kZUxp
c3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MUEVsZW1lbnQ6OldNTFBFbGVtZW50KERvY3Vt
ZW50KiBkb2MpCisgICAgOiBIVE1MUGFyYWdyYXBoRWxlbWVudChkb2MpIAoreworfQorCitXTUxQ
RWxlbWVudDo6fldNTFBFbGVtZW50KCkge30KKwordm9pZCBXTUxQRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gbW9kZUF0dHIpIHsKKyAgICAgICAgbV9tb2RlID0gIGF0dHItPnZhbHVlKCk7CisgICAg
ICAgIGlmIChtX21vZGUgPT0gIndyYXAiKQorICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTUHJvcGVydHlXb3JkV3JhcCwgQ1NTVmFsdWVCcmVha1dvcmQpOworICAgICAgICBlbHNl
IGlmIChtX21vZGUgPT0gIm5vd3JhcCIpCisgICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRy
LCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlTm93cmFwKTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwor
fQorCit2b2lkIFdNTFBFbGVtZW50Ojp1cGRhdGVBdHRyc0lmTmVlZGVkKCkKK3sKKyAgICAvLyBJ
ZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQsIHRoZSBsaW5ld3JhcCBtb2RlIGlzIGlkZW50aWNh
bCB0byAKKyAgICAvLyB0aGUgbGluZS13cmFwIG1vZGUgb2YgdGhlIHByZXZpb3VzIHBhcmFncmFw
aCBpbiB0aGUgdGV4dCBmbG93IG9mCisgICAgLy8gYSBjYXJkLlRoZSBkZWZhdWx0IG1vZGUgZm9y
IHRoZSBmaXJzdCBwYXJhZ3JhcGggaW4gYSBjYXJkIGlzIHdyYXAKKyAgICBpZiAobV9tb2RlLmlz
RW1wdHkoKSkgeworICAgICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBubCA9IGRvY3VtZW50KCkt
PmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIik7CisgICAgICAgIGludCBuTGVuID0gbmwuZ2V0KCkt
Pmxlbmd0aCgpOworICAgICAgICBpZiAobkxlbiA9PSAwKQorICAgICAgICAgICAgc2V0QXR0cmli
dXRlKG1vZGVBdHRyLCAid3JhcCIpOworICAgICAgICBlbHNlIGlmIChuTGVuID4gMCkgeworICAg
ICAgICAgICAgV01MUEVsZW1lbnQqIHBFbCA9IHN0YXRpY19jYXN0PFdNTFBFbGVtZW50Kj4obmwu
Z2V0KCktPml0ZW0obkxlbi0xKSk7CisgICAgICAgICAgICBTdHJpbmcgcHJlTW9kZSA9IHBFbC0+
Z2V0QXR0cmlidXRlKG1vZGVBdHRyKTsKKyAgICAgICAgICAgIHNldEF0dHJpYnV0ZShtb2RlQXR0
ciwgcHJlTW9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30gLy9uYW1lc3BhY2UKSW5kZXg6
IFdlYkNvcmUvd21sL1dNTFBFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
UEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFBFbGVtZW50LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgV01MUEVsZW1lbnRfaAorI2RlZmlu
ZSBXTUxQRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgV01MUEVsZW1lbnQg
OiBwdWJsaWMgSFRNTFBhcmFncmFwaEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MUEVsZW1lbnQo
RG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxQRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2
b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZvaWQgdXBk
YXRlQXR0cnNJZk5lZWRlZCgpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX21vZGU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFBvc3RmaWVs
ZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFBvc3RmaWVsZEVsZW1l
bnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUG9zdGZpZWxkRWxlbWVudC5j
cHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAg
ICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2
ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiTmFtZU5vZGVMaXN0LmgiCisj
aW5jbHVkZSAiQ1N0cmluZy5oIgorCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAi
V01MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxl
bWVudC5oIgorI2luY2x1ZGUgIldNTFBvc3RmaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxH
b0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1l
czsKKworV01MUG9zdGZpZWxkRWxlbWVudDo6V01MUG9zdGZpZWxkRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKQorIDogV01MRWxlbWVudChuYW1lLCBkb2Mp
IHt9CisKK1dNTFBvc3RmaWVsZEVsZW1lbnQ6On5XTUxQb3N0ZmllbGRFbGVtZW50KCkge30KKwor
dm9pZCBXTUxQb3N0ZmllbGRFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKK3sK
KyAgICBXTUxHb0VsZW1lbnQqIGdvID0gMDsKKyAgICBOb2RlKiBhbmNlc3RvciA9IHBhcmVudE5v
ZGUoKSA7CisgICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpnb1RhZykpIHsK
KyAgICAgICAgZ28gPSBzdGF0aWNfY2FzdDxXTUxHb0VsZW1lbnQqPihhbmNlc3Rvcik7CisgICAg
fSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOyAgICAgLy8gdGhlIGFuY2VzdG9yIG9mIDxwb3N0Zmll
bGQ+IGdvdCB0byBiZSA8Z28+CisgICAgfQorICAgIGlmIChnbykgeworICAgICAgICBnby0+cmVn
aXN0ZXJQb3N0ZmllbGRFbGVtZW50KHRoaXMpOworICAgIH0KK30KKworU3RyaW5nIFdNTFBvc3Rm
aWVsZEVsZW1lbnQ6Om5hbWUoKSAKK3sKKyAgICByZXR1cm4gV01MSGVscGVyOjpzdWJzdGl0dXRl
VmFyUmVmKGdldEF0dHJpYnV0ZShuYW1lQXR0ciksIGRvY3VtZW50KCkpOworfQorCitTdHJpbmcg
V01MUG9zdGZpZWxkRWxlbWVudDo6dmFsdWUoKSAKK3sKKyAgICByZXR1cm4gV01MSGVscGVyOjpz
dWJzdGl0dXRlVmFyUmVmKGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLCBkb2N1bWVudCgpKTsKK30g
ICAgCisKK30KKwpJbmRleDogV2ViQ29yZS93bWwvV01MUG9zdGZpZWxkRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgV01MUG9zdGZpZWxkRWxlbWVudF9oCisjZGVmaW5lIFdN
TFBvc3RmaWVsZEVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFBvc3RmaWVsZEVsZW1lbnQgOiBwdWJsaWMgIFdNTEVs
ZW1lbnR7CitwdWJsaWM6CisgICAgV01MUG9zdGZpZWxkRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKTsKKyAgICB+V01MUG9zdGZpZWxkRWxlbWVudCgpOwor
CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsgICAgLy8gbmVl
ZCB0byByZWdpc3RlciBteXNlbGYgdG8gcGFyZW50cyBoZXJlLCBsaWtlIDxnbz4sIDxvbmV2ZW50
PgorCisgICAgU3RyaW5nIG5hbWUoKTsgICAgLy8gZXZlcnkgcG9zdGZpZWxkIHRhZyBtdXN0IGhh
dmUgYSBuYW1lIGF0dHJpYnV0ZSBhbmQgYSB2YWxpZCBhdHRyaWJ1dGUKKyAgICBTdHJpbmcgdmFs
dWUoKTsKKworfTsKKworfQorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQcmV2RWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MUHJldkVsZW1lbnQuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUHJldkVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorCisjaW5jbHVkZSAiV01M
UHJldkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxCcndD
b250ZXh0LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxTZXR2
YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
TmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxQcmV2RWxlbWVudDo6V01MUHJl
dkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAg
OiBXTUxUYXNrRWxlbWVudCggdGFnTmFtZSwgZG9jKSB7fQorCitXTUxQcmV2RWxlbWVudDo6V01M
UHJldkVsZW1lbnQoRG9jdW1lbnQqIGRvYykKKyAgOiBXTUxUYXNrRWxlbWVudCggV01MTmFtZXM6
OnByZXZUYWcsIGRvYykge30KKworV01MUHJldkVsZW1lbnQ6On5XTUxQcmV2RWxlbWVudCgpIHt9
CisgICAgICAgICAgICAgICAgICAgICAgIAordm9pZCAgV01MUHJldkVsZW1lbnQ6OmV4ZWMoRXZl
bnQqIGV2dCwgU3RyaW5nIHVyaSkKK3sKKyAgICAvLyBjb252ZXJ0IHZhcmlhYmxlIG5hbWVzIGFu
ZCB2YWx1ZXMgb2Ygc2V0dmFyIGVsZW1lbnQgaWYgbmVjZXNzYXJ5CisgICAgVmFyaWFibGVNYXAg
bV92YXJzOworICAgIGlmIChoYXNTZXR2YXIoKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGlu
dCBpID0gMDsgaSA8IG1fc2V0dmFycy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKCFt
X3NldHZhcnNbaV0tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgbV92YXJzLnNl
dChtX3NldHZhcnNbaV0tPm5hbWUoKSwgbV9zZXR2YXJzW2ldLT52YWx1ZSgpKTsKKyAgICAgICAg
fQorICAgIH0KKyAKKyAgICAvLyB1cGRhdGUgYnJvd3NlciBjb250ZXh0IAorICAgIGlmICghbV92
YXJzLmlzRW1wdHkoKSkKKyAgICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5z
dG9yZVZhcmlhYmxlcyhtX3ZhcnMpOworCisgICAgLy8gc3RvcCB0aGUgdGltZXIgb2YgdGhlIGN1
cnJlbnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IFdN
TEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+YWN0aXZlQ2FyZCgpOworICAgIGlmIChjYXJk
ICYmIGNhcmQtPmV2ZW50VGltZXIoKSkKKyAgICAgICAgY2FyZC0+ZXZlbnRUaW1lcigpLT5zdG9w
KCk7CisKKyAgICAvLyBwcmVwYXJlIGZvciBkaXNwbGF5aW5nIHRoZSBkZXN0IGNhcmQKKyAgICBQ
YWdlKiBwYWdlID0gV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5wYWdlKCk7CisgICAg
cGFnZS0+Z29CYWNrKCk7Cit9CisKKworfSAvL25hbWVzcGFjZQorCkluZGV4OiBXZWJDb3JlL3dt
bC9XTUxQcmV2RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFByZXZFbGVt
ZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxQcmV2RWxlbWVudC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxQcmV2RWxlbWVudF9oCisj
ZGVmaW5lIFdNTFByZXZFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworICAgIAorY2xhc3Mg
V01MUHJldkVsZW1lbnQgOiBwdWJsaWMgV01MVGFza0VsZW1lbnQgeworcHVibGljOgorICAgIFdN
TFByZXZFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2Mp
OworICAgIFdNTFByZXZFbGVtZW50KERvY3VtZW50KiBkb2MpOworICAgIHZpcnR1YWwgfldNTFBy
ZXZFbGVtZW50KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGV4ZWMoRXZlbnQgKiwgU3RyaW5n
KSA7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01M
UmVmcmVzaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFJlZnJlc2hF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFJlZnJlc2hFbGVtZW50
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
ICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAi
RXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisKKyNpbmNs
dWRlICJXTUxSZWZyZXNoRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5j
bHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxSZWZyZXNoRWxlbWVudDo6V01MUmVmcmVzaEVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICAgICAg
OiBXTUxUYXNrRWxlbWVudCggdGFnTmFtZSwgZG9jKSB7fQorCitXTUxSZWZyZXNoRWxlbWVudDo6
fldNTFJlZnJlc2hFbGVtZW50KCkge30KKwordm9pZCAgV01MUmVmcmVzaEVsZW1lbnQ6OmV4ZWMo
RXZlbnQqIGV2dCwgU3RyaW5nIHVyaSkgCit7CisgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSBX
TUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPmFjdGl2ZUNhcmQoKTsKKyAgICBXTUxUaW1l
ckVsZW1lbnQqIHRpbWVyID0gY2FyZC0+ZXZlbnRUaW1lcigpOworICAgIC8vIEJlZm9yZSBwZXJm
b3JtIHJlZnJlc2ggdGFzaywgd2Ugc3RvcmUgdGhlIGN1cnJlbnQgdGltZW91dCB2YWx1ZSAKKyAg
ICAvLyBhbmQgdGhlbiBzdG9wIHRoZSB0aW1lcgorICAgIGlmICh0aW1lcikgeworICAgICAgICB0
aW1lci0+c3RvcmVJbnRlcnZhbFRvQnJ3Q29udGV4dCgpOworICAgICAgICB0aW1lci0+c3RvcCgp
OworICAgIH0KKworICAgIC8vIGNvbnZlcnQgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBz
ZXR2YXIgZWxlbWVudCBpZiBuZWNlc3NhcnkKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcnM7CisgICAg
aWYgKGhhc1NldHZhcigpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwg
bV9zZXR2YXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fc2V0dmFyc1tpXS0+
bmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3ZhcnMuc2V0KG1fc2V0dmFyc1tp
XS0+bmFtZSgpLCBtX3NldHZhcnNbaV0tPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfSAgCisK
KyAgICAvLyB1cGRhdGUgYnJvd3NlciBjb250ZXh0IAorICAgIGlmICghbV92YXJzLmlzRW1wdHko
KSkKKyAgICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxl
cyhtX3ZhcnMpOworCisgICAgLy9yZWRpc3BsYXkgY3VycmVtdCBjYXJkIHdpdGggY3VycmVudCB2
YXJpYWJsZSBzdGF0ZQorICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5yZWxvYWQo
KTsKKworICAgIC8vQWZ0ZXIgcmVmcmVzaGluZyB0YXNrLCByZXN1bWUgdGhlIHRpbWVyIGlmIGl0
IGV4c2l0cyAKKyAgICBpZiAodGltZXIpCisgICAgICAgIHRpbWVyLT5zdGFydCgpOworfQorCisK
K30gLy9uYW1lc3BhY2UKKwpJbmRleDogV2ViQ29yZS93bWwvV01MUmVmcmVzaEVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxSZWZyZXNoRWxlbWVudC5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS93bWwvV01MUmVmcmVzaEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgV01MUmVmcmVzaEVsZW1lbnRfaAorI2RlZmluZSBXTUxS
ZWZyZXNoRWxlbWVudF9oCisKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiV01M
TmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFt
ZXM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFzcyBXTUxSZWZyZXNoRWxlbWVudCA6
IHB1YmxpYyBXTUxUYXNrRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MUmVmcmVzaEVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYyk7CisgICAgdmlydHVh
bCB+V01MUmVmcmVzaEVsZW1lbnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZXhlYyhFdmVu
dCAqLCBTdHJpbmcpIDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9X
TUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFNlbGVj
dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4MCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
T3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJX
TUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFRva2VuaXpl
ci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVk
ZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIktl
eWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVy
T2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJMaXN0
Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgor
I2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBQTEFURk9S
TShNQUMpCisjZGVmaW5lIEFSUk9XX0tFWVNfUE9QX01FTlUgMQorI2Vsc2UKKyNkZWZpbmUgQVJS
T1dfS0VZU19QT1BfTUVOVSAwCisjZW5kaWYKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5n
IG5hbWVzcGFjZSBVbmljb2RlOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxTZWxlY3RF
bGVtZW50OjpXTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgRG9jdW1l
bnQqIGRvYykKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50KHRhZywgZG9jLCAwKSB7fQorCitXTUxT
ZWxlY3RFbGVtZW50Ojp+V01MU2VsZWN0RWxlbWVudCgpIHt9CisKK3ZvaWQgV01MU2VsZWN0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6
aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6
dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsK
KyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKKwor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgeworICAgICAgICBtX3Zh
bHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpbmFt
ZUF0dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFs
dWUoKSkpIHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9y
KEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAg
ICAgICBtX2lOYW1lID0gYXR0ci0+dmFsdWUoKTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGl2YWx1ZUF0dHIpIHsKKyAgICAgICAgbV9pVmFsdWUgPSBhdHRyLT52YWx1ZSgpOwor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG11bHRpcGxlQXR0cikgeworICAgICAgICBi
b29sIG11bHRpcGxlID0gbV9tdWx0aXBsZTsKKyAgICAgICAgbV9tdWx0aXBsZSA9IChhdHRyLT52
YWx1ZSgpID09ICJ0cnVlIik7CisgICAgICAgIGlmICgobXVsdGlwbGUgIT0gbV9tdWx0aXBsZSkg
JiYgYXR0YWNoZWQoKSkgeworICAgICAgICAgICAgZGV0YWNoKCk7CisgICAgICAgICAgICBhdHRh
Y2goKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1l
czo6c2l6ZUF0dHIpIHsKKyAgICAgICAgLy9EbyBub3RoaW5nCisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpIHsKKyAgICAgICAgLy9EbyBub3Ro
aW5nCisgICAgfSBlbHNlIHsKKyAgICAgICAgSFRNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworICAgIH0KKworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnVw
ZGF0ZUF0dHJzSWZOZWVkZWQoKSAKK3sKKyAgICBTdHJpbmcgc3ViID0gV01MSGVscGVyOjpzdWJz
dGl0dXRlVmFyUmVmKG1fdmFsdWUsIGRvY3VtZW50KCkpOworICAgIGlmIChtX3ZhbHVlICE9IHN1
YikgeworICAgICAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBzdWIpOworICAgICAgICBtX3Zh
bHVlID0gc3ViOworICAgIH0KKworICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJl
ZihtX2lWYWx1ZSwgZG9jdW1lbnQoKSk7CisgICAgaWYgKG1faVZhbHVlICE9IHN1YikgeworICAg
ICAgICBzZXRBdHRyaWJ1dGUoaXZhbHVlQXR0ciwgc3ViKTsKKyAgICAgICAgbV9pVmFsdWUgPSBz
dWI7CisgICAgfQorCisgICAgU3RyaW5nIHRpdGxlID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7
CisgICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHRpdGxlLCBkb2N1bWVudCgp
KTsKKyAgICBpZiAodGl0bGUgIT0gc3ViKQorICAgICAgICBzZXRBdHRyaWJ1dGUodGl0bGVBdHRy
LCB0aXRsZSk7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChp
bnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlKQoreworICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGlu
dCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCk7CisgICAgV01MT3B0
aW9uRWxlbWVudCogZWxlbWVudCA9IDA7CisKKyAgICBpZiAoIW11bHRpcGxlKCkpCisgICAgICAg
IGRlc2VsZWN0ID0gdHJ1ZTsKKworICAgIGlmIChsaXN0SW5kZXggPj0gMCkgeworICAgICAgICBp
ZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCA8IDAgfHwgZGVzZWxlY3QpCisgICAgICAg
ICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChsaXN0SW5kZXgpOworICAgICAgICBp
ZiAobV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCA8IDAgfHwgZGVzZWxlY3QpCisgICAgICAgICAg
ICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChsaXN0SW5kZXgpOworICAgICAgICBlbGVtZW50
ID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2xpc3RJbmRleF0pOworICAg
ICAgICBlbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOworICAgIH0KKworICAgIGlmIChk
ZXNlbGVjdCkKKyAgICAgICAgZGVzZWxlY3RJdGVtcyhlbGVtZW50KTsKKworICAgIHNjcm9sbFRv
U2VsZWN0aW9uKCk7CisKKyAgICAvLyBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCBmaXJlT25D
aGFuZ2UgZm9yIG1lbnUgbGlzdHMuIAorICAgIGlmIChmaXJlT25DaGFuZ2UgJiYgdXNlc01lbnVM
aXN0KCkpCisgICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsKK30KKworU3RyaW5nIFdNTFNlbGVj
dEVsZW1lbnQ6OnZhbHVlVG9JVmFsdWUoU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUu
aXNFbXB0eSgpKSAKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgY29uc3QgVmVjdG9yPEhU
TUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdmFs
VmVjdHM7CisgICAgdmFsdWUuc3BsaXQoJzsnLCB2YWxWZWN0cyk7CisgICAgVmVjdG9yPFN0cmlu
Zz46Oml0ZXJhdG9yIGl0ID0gdmFsVmVjdHMuYmVnaW4oKTsKKyAgICBXTUxPcHRpb25FbGVtZW50
KiBvcHRpb24gPSAwOyAKKyAgICBTdHJpbmcgaVZhbDsKKyAgICBTdHJpbmcgdmFsOworICAgIHdo
aWxlIChpdCAhPSB2YWxWZWN0cy5lbmQoKSkgeworICAgICAgICB2YWwgPSAqaXQ7CisgICAgICAg
IGludCBvcHRJZHggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMu
c2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9w
dGlvblRhZykpIHsKKyAgICAgICAgICAgICAgICBvcHRJZHgrKzsKKyAgICAgICAgICAgICAgICBv
cHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pOworICAgICAg
ICAgICAgICAgIGlmIChvcHRpb24tPnZhbHVlKCkgPT0gdmFsKSB7CisgICAgICAgICAgICAgICAg
ICAgIGlWYWwgKz0gU3RyaW5nOjpudW1iZXIob3B0SWR4KTsKKyAgICAgICAgICAgICAgICAgICAg
aVZhbCArPSAiOyI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICArK2l0OworICAgIH0KKworICAg
IGlmIChpVmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICBpVmFsID0gaVZhbC5sZWZ0KGlWYWwu
bGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsaWRhdGVJbmRleFZhbHVlKGlWYWwpOworfQor
CitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6aXZhbHVlVG9WYWx1ZShTdHJpbmcmIGl2YWx1ZSkK
K3sKKyAgICBpZiAoaXZhbHVlLmlzRW1wdHkoKSkgCisgICAgICAgIHJldHVybiBpdmFsdWU7CisK
KyAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAwOyAKKyAgICBTdHJpbmcgaXZhbDsKKyAg
ICBTdHJpbmcgdmFsOworICAgIGludCBvcHRJZHggPSAtMTsKKyAgICBpbnQgbGlzdElkeCA9IC0x
OworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOwor
ICAgIFZlY3RvcjxTdHJpbmc+IHZhbFZlY3RzOworICAgIGl2YWx1ZS5zcGxpdCgnOycsIHZhbFZl
Y3RzKTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSB2YWxWZWN0cy5iZWdpbigp
OworICAgIHdoaWxlIChpdCAhPSB2YWxWZWN0cy5lbmQoKSkgeworICAgICAgICBpdmFsID0gKml0
Kys7CisKKyAgICAgICAgb3B0SWR4ID0gaXZhbC50b0ludCgpOworICAgICAgICBpZiAoKG9wdElk
eCA8IDEpIHx8IChvcHRJZHggPiBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkpKQorICAg
ICAgICAgICAgICAgY29udGludWU7IAorCisgICAgICAgIGxpc3RJZHggPSBvcHRpb25Ub0xpc3RJ
bmRleChvcHRJZHgtMSk7CisgICAgICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVs
ZW1lbnQqPihpdGVtc1tsaXN0SWR4XSk7CisKKyAgICAgICAgdmFsICs9IG9wdGlvbi0+dmFsdWUo
KTsKKyAgICAgICAgdmFsICs9ICI7IjsKKyAgICB9CisKKyAgICBpZiAodmFsLmVuZHNXaXRoKCI7
IikpIAorICAgICAgICB2YWwgPSB2YWwubGVmdCh2YWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1
cm4gdmFsOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6dmFsaWRhdGVJbmRleFZhbHVl
KFN0cmluZyYgaXZhbCkKK3sKKyAgICBpZiAoaXZhbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biBpdmFsOworCisgICAgYm9vbCBvayA9IHRydWU7CisgICAgU3RyaW5nIHZhbCgiIik7CisgICAg
U3RyaW5nIG5ld1ZhbDsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxWZWN0czsKKyAgICBpdmFsLnNw
bGl0KCc7JywgdmFsVmVjdHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsVmVjdHMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgblZhbCA9IHZhbFZlY3RzW2ldLnRvSW50
KCZvayk7CisgICAgICAgIGlmICghb2sgfHwgKG5WYWwgPCAxKSB8fCAoblZhbCA+IGxlbmd0aCgp
KSkgeworICAgICAgICAgICAgdmFsVmVjdHMucmVtb3ZlKGkpOworICAgICAgICAgICAgaS0tOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV3VmFsID0gU3RyaW5nOjpudW1iZXIoblZh
bCk7CisgICAgICAgICAgICBpZiAoLTEgPT0gdmFsLmZpbmQobmV3VmFsKSkgeworICAgICAgICAg
ICAgICAgIHZhbCArPSBuZXdWYWw7IAorICAgICAgICAgICAgICAgIHZhbCArPSAiOyI7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmFsLmVuZHNXaXRoKCI7Iikp
IAorICAgICAgICB2YWwgPSB2YWwubGVmdCh2YWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4g
dmFsOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmNhbGNEZWZhdWx0T3B0aW9uSW5kZXgo
KQoreworICAgIFN0cmluZyB2YXI7CisgICAgaWYgKCFtX2lOYW1lLmlzRW1wdHkoKSkgeworICAg
ICAgICB2YXIgPSBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPmdldFZhcmliYWxlKG1f
aU5hbWUpOworICAgICAgICBpZiAoIXZhci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIG1fZGVm
YXVsdE9wdElkeCA9IHZhbGlkYXRlSW5kZXhWYWx1ZSh2YXIpOworICAgICAgICB9CisgICAgfQor
CisgICAgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYgIW1faVZhbHVlLmlzRW1wdHko
KSkgeworICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFsdWUobV9pVmFs
dWUpOworICAgIH0KKworICAgIGlmIChtX2RlZmF1bHRPcHRJZHguaXNFbXB0eSgpICYmICFtX25h
bWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHZhciA9IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRl
eHQoKS0+Z2V0VmFyaWJhbGUobV9uYW1lKTsKKyAgICAgICAgaWYgKCF2YXIuaXNFbXB0eSgpKSB7
CisgICAgICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWx1ZVRvSVZhbHVlKHZhcik7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSAmJiAhbV92
YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9kZWZhdWx0T3B0SWR4ID0gdmFsdWVUb0lWYWx1
ZShtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpZiAobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSAm
JiBtdWx0aXBsZSgpKQorICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSAiMCI7CisgICAgZWxzZSBp
ZiAobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSkKKyAgICAgICAgbV9kZWZhdWx0T3B0SWR4ID0g
IjEiOworCit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6aW5pdGlhbGlzZVZhcmlhYmxlcygp
Cit7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7
CisgICAgaWYgKGl0ZW1zLnNpemUoKSA8PSAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IW1fbmFtZS5pc0VtcHR5KCkgJiYgIW11bHRpcGxlKCkpIHsKKworICAgICAgICB1bnNpZ25lZCBp
bnQgaWR4ID0gbV9kZWZhdWx0T3B0SWR4LnRvSW50KCk7IAorICAgICAgICBpZiAoaWR4IDwgMSB8
fCBpZHggPiBpdGVtcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIGludCBsaXN0SWR4ID0gb3B0aW9uVG9MaXN0SW5kZXgoaWR4LTEp
OworICAgICAgICAgICAgV01MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8V01M
T3B0aW9uRWxlbWVudCo+KGl0ZW1zW2xpc3RJZHhdKTsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6
Y3VycmVudEJyd0NvbnRleHQoKS0+c3RvcmVWYXJpYWJsZShtX25hbWUsIG9wdGlvbi0+dmFsdWUo
KSk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoIW1fbmFtZS5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgU3RyaW5nIG5hbWVWYWwgPSBpdmFsdWVUb1ZhbHVlKG1fZGVmYXVsdE9wdElkeCk7Cisg
ICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c3RvcmVWYXJpYWJsZShtX25h
bWUsIG5hbWVWYWwpOworICAgIH0KKworICAgIGlmICghbV9pTmFtZS5pc0VtcHR5KCkpCisgICAg
ICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c3RvcmVWYXJpYWJsZShtX2lOYW1l
LCBtX2RlZmF1bHRPcHRJZHgpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnByZVNlbGVj
dE9wdGlvbnNCeURlZmF1bHQoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IGlkeFZlY3RzOworICAg
IG1fZGVmYXVsdE9wdElkeC5zcGxpdCgnOycsIGlkeFZlY3RzKTsKKyAgICBWZWN0b3I8U3RyaW5n
Pjo6aXRlcmF0b3IgaXQgPSBpZHhWZWN0cy5iZWdpbigpOworICAgIGludCBpZHggPSAtMTsKKyAg
ICBpZiAobXVsdGlwbGUoKSkgeworICAgICAgICB3aGlsZSAoaXQgIT0gaWR4VmVjdHMuZW5kKCkp
IHsKKyAgICAgICAgICAgIGlkeCA9ICgqaXQpLnRvSW50KCk7IAorICAgICAgICAgICAgc2V0U2Vs
ZWN0ZWRJbmRleChpZHgtMSwgZmFsc2UpOworICAgICAgICAgICAgKytpdDsKKyAgICAgICAgfQor
ICAgIH0gZWxzZSB7CisgICAgICAgIGlkeCA9ICgqaXQpLnRvSW50KCk7IAorICAgICAgICBzZXRT
ZWxlY3RlZEluZGV4KGlkeC0xLCBmYWxzZSk7CisgICAgfQorfQorCit2b2lkIFdNTFNlbGVjdEVs
ZW1lbnQ6OnNlbGVjdEluaXRpYWxPcHRpb25zKCkKK3sKKyAgICBjYWxjRGVmYXVsdE9wdGlvbklu
ZGV4KCk7CisKKyAgICBpZiAoIW1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aW5pdGlhbGlzZVZhcmlhYmxlcygpOworICAgICAgICBwcmVTZWxlY3RPcHRpb25zQnlEZWZhdWx0
KCk7CisgICAgfQorfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqIGV2dCkKK3sKKyAgICBpZiAoIW11bHRpcGxlKCkpCisgICAgICAgIG1lbnVMaXN0
RGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworICAgIGVsc2UgCisgICAgICAgIGxpc3RCb3hEZWZh
dWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgCisgICAgaWYgKGV2dC0+ZGVmYXVsdEhhbmRsZWQo
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZl
bnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkgeworICAgICAgICBLZXlib2FyZEV2ZW50KiBr
ZXlib2FyZEV2ZW50ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCk7CisgICAgCisg
ICAgICAgIGlmICgha2V5Ym9hcmRFdmVudC0+Y3RybEtleSgpICYmICFrZXlib2FyZEV2ZW50LT5h
bHRLZXkoKSAmJiAha2V5Ym9hcmRFdmVudC0+bWV0YUtleSgpICYmCisgICAgICAgICAgICBpc1By
aW50YWJsZUNoYXIoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSkpIHsKKyAgICAgICAgICAgIHR5
cGVBaGVhZEZpbmQoa2V5Ym9hcmRFdmVudCk7CisgICAgICAgICAgICBldnQtPnNldERlZmF1bHRI
YW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBI
VE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7
Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6bWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50KiBldnQpCit7CisgICAgUmVuZGVyTWVudUxpc3QqIG1lbnVMaXN0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyTWVudUxpc3QqPihyZW5kZXJlcigpKTsKKworICAgIC8vIFVzZSBrZXkgcHJlc3Mg
ZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBtb3VzZSBldmVudHMKKyAgICAvLyBv
biBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5nIG9mIHRoZSBrZXkgcHJlc3MgZXZl
bnQuCisgICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQpIHsKKyAgICAgICAgaWYg
KCFyZW5kZXJlcigpIHx8ICFldnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnQqPihldnQpLT5rZXlJZGVudGlmaWVyKCk7CisgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZh
bHNlOworI2lmIEFSUk9XX0tFWVNfUE9QX01FTlUKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIg
PT0gIkVudGVyIikgeworICAgICAgICAgICAgbWVudUxpc3RPbkNoYW5nZSgpOworICAgICAgICAg
ICAgaWYgKGZvcm0oKSkKKyAgICAgICAgICAgICAgICBmb3JtKCktPnN1Ym1pdENsaWNrKGV2dCk7
CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5
SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiVXAiIHx8IGtleUlkZW50
aWZpZXIgPT0gIlUrMDAyMCIpIHsKKyAgICAgICAgICAgIGZvY3VzKCk7CisgICAgICAgICAgICAv
LyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2Vs
ZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwKKyAg
ICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVl
Q2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQgYWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rp
b24gZnJvbSB0aGUgbWVudS4KKyAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisgICAg
ICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVwKCk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1
ZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlz
dEluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJE
b3duIiB8fCBrZXlJZGVudGlmaWVyID09ICJSaWdodCIpIHsKKyAgICAgICAgICAgIGludCBzaXpl
ID0gbGlzdEl0ZW1zKCkuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChsaXN0SW5kZXggKz0gMTsK
KyAgICAgICAgICAgICAgICAgbGlzdEluZGV4ID49IDAgJiYgbGlzdEluZGV4IDwgc2l6ZSAmJiAo
bGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSB8fCAhbGlzdEl0ZW1zKClbbGlzdElu
ZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpOworICAgICAgICAgICAgICAgICArK2xpc3RJ
bmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCAmJiBs
aXN0SW5kZXggPCBzaXplKQorICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRv
T3B0aW9uSW5kZXgobGlzdEluZGV4KSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAg
ICAgICAgfSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIgfHwga2V5SWRlbnRpZmllciA9
PSAiTGVmdCIpIHsKKyAgICAgICAgICAgIGludCBzaXplID0gbGlzdEl0ZW1zKCkuc2l6ZSgpOwor
ICAgICAgICAgICAgZm9yIChsaXN0SW5kZXggLT0gMTsKKyAgICAgICAgICAgICAgICAgbGlzdElu
ZGV4ID49IDAgJiYgbGlzdEluZGV4IDwgc2l6ZSAmJiAobGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+
ZGlzYWJsZWQoKSB8fCAhbGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlv
blRhZykpOworICAgICAgICAgICAgICAgICAtLWxpc3RJbmRleCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplKQorICAgICAg
ICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7
CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXlJZGVu
dGlmaWVyID09ICJFbnRlciIpIHsKKyAgICAgICAgICAgIC8vIGxpc3RJbmRleCBzaG91bGQgYWxy
ZWFkeSBiZSBzZWxlY3RlZCwgYnV0IHRoaXMgd2lsbCBmaXJlIHRoZSBvbmNoYW5nZSBoYW5kbGVy
LgorICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChsaXN0VG9PcHRpb25JbmRleChsaXN0SW5k
ZXgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICB9
CisjZW5kaWYKKyAgICAgICAgaWYgKGhhbmRsZWQpCisgICAgICAgICAgICBldnQtPnNldERlZmF1
bHRIYW5kbGVkKCk7CisKKyAgICB9CisgICAgaWYgKGV2dC0+dHlwZSgpID09IG1vdXNlZG93bkV2
ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2
dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAgZm9jdXMoKTsKKyAgICAgICAg
aWYgKG1lbnVMaXN0LT5wb3B1cElzVmlzaWJsZSgpKQorICAgICAgICAgICAgbWVudUxpc3QtPmhp
ZGVQb3B1cCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVj
dGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBj
YWxsIG9uQ2hhbmdlIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LAorICAgICAgICAgICAgLy8gd2hp
Y2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFsdWVDaGFuZ2VkLCB3aGljaCBn
ZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVjdGlvbiBmcm9tIHRoZSBtZW51
LgorICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKKyAgICAgICAgICAgIG1lbnVMaXN0
LT5zaG93UG9wdXAoKTsKKyAgICAgICAgfQorICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgfQorCisgICAgLy8gdXBkYXRlIG5hbWUgYW5kIGluYW1lIHZhcmlhYmxlcyB3aXRo
IG9wdGlvbidzIHZhbHVlIGFuZCBpbmRleAorICAgIHVwZGF0ZVZhcmlhYmxlcygpOworfQorCit2
b2lkIFdNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dnQpCit7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
ZXZ0LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBz
dGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbikgewor
ICAgICAgICBmb2N1cygpOworICAgICAgICAKKyAgICAgICAgTW91c2VFdmVudCogbUV2dCA9IHN0
YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOworICAgICAgICBpbnQgbGlzdEluZGV4ID0gc3Rh
dGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KHJlbmRlcmVyKCkpLT5saXN0SW5kZXhBdE9mZnNldCht
RXZ0LT5vZmZzZXRYKCksIG1FdnQtPm9mZnNldFkoKSk7CisgICAgICAgIGlmIChsaXN0SW5kZXgg
Pj0gMCkgeworICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBj
b21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5n
IG1vdXNldXAsIG9yIGFmdGVyIGF1dG9zY3JvbGwgZmluaXNoZXMuCisgICAgICAgICAgICBzYXZl
TGFzdFNlbGVjdGlvbigpOworCisgICAgICAgICAgICBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0g
dHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBtdWx0aVNlbGVjdEtleVByZXNz
ZWQgPSBmYWxzZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAgICAgICBtdWx0aVNlbGVjdEtl
eVByZXNzZWQgPSBtRXZ0LT5tZXRhS2V5KCk7CisjZWxzZQorICAgICAgICAgICAgbXVsdGlTZWxl
Y3RLZXlQcmVzc2VkID0gbUV2dC0+Y3RybEtleSgpOworI2VuZGlmCisKKyAgICAgICAgICAgIGJv
b2wgc2hpZnRTZWxlY3QgPSBtdWx0aXBsZSgpICYmIG1FdnQtPnNoaWZ0S2V5KCk7CisgICAgICAg
ICAgICBib29sIG11bHRpU2VsZWN0ID0gbXVsdGlwbGUoKSAmJiBtdWx0aVNlbGVjdEtleVByZXNz
ZWQgJiYgIW1FdnQtPnNoaWZ0S2V5KCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEhUTUxF
bGVtZW50KiBjbGlja2VkRWxlbWVudCA9IGxpc3RJdGVtcygpW2xpc3RJbmRleF07ICAgICAgICAg
ICAgCisgICAgICAgICAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAwOworICAgICAgICAg
ICAgaWYgKGNsaWNrZWRFbGVtZW50LT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgeworICAgICAg
ICAgICAgICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihjbGlja2Vk
RWxlbWVudCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gS2VlcCB0cmFj
ayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxpa2UgZHVyaW5nIGRyYWcgc2VsZWN0
aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNlbGVjdAorICAgICAgICAgICAgICAgIG1fYWN0aXZl
U2VsZWN0aW9uU3RhdGUgPSAhb3B0aW9uLT5zZWxlY3RlZCgpOworICAgICAgICAgICAgICAgIG9w
dGlvbi0+c2V0U2VsZWN0ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlvblN0YXRlKTsKKworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBub3QgaW4gYW55
IHNwZWNpYWwgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGUsIHRoZW4gZGVzZWxlY3QgYWxsIG90aGVy
IGl0ZW1zLCBleGNsdWRpbmcgdGhlIGNsaWNrZWQgb3B0aW9uLgorICAgICAgICAgICAgLy8gSWYg
bm8gb3B0aW9uIHdhcyBjbGlja2VkLCB0aGVuIHRoaXMgd2lsbCBkZXNlbGVjdCBhbGwgaXRlbXMg
aW4gdGhlIGxpc3QuCisgICAgICAgICAgICBpZiAoIXNoaWZ0U2VsZWN0ICYmICFtdWx0aVNlbGVj
dCkKKyAgICAgICAgICAgICAgICBkZXNlbGVjdEl0ZW1zKG9wdGlvbik7CisKKyAgICAgICAgICAg
IC8vIElmIHRoZSBhbmNob3IgaGFzbid0IGJlZW4gc2V0LCBhbmQgd2UncmUgZG9pbmcgYSBzaW5n
bGUgc2VsZWN0aW9uIG9yIGEgc2hpZnQgc2VsZWN0aW9uLCB0aGVuIGluaXRpYWxpemUgdGhlIGFu
Y2hvciB0byB0aGUgZmlyc3Qgc2VsZWN0ZWQgaW5kZXguCisgICAgICAgICAgICBpZiAobV9hY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleCA8IDAgJiYgIW11bHRpU2VsZWN0KQorICAgICAgICAgICAg
ICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CisKKyAg
ICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBubyBzZWxlY3RlZEluZGV4KCkgZm9yIHRoZSBwcmV2
aW91cyBpbml0aWFsaXphdGlvbiwgb3IKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIGRvaW5nIGEg
c2luZ2xlIHNlbGVjdGlvbiwgb3IgYSBtdWx0aXBsZSBzZWxlY3Rpb24gKHVzaW5nIGNtZCBvciBj
dHJsKSwgdGhlbiBpbml0aWFsaXplIHRoZSBhbmNob3IgaW5kZXggdG8gdGhlIGxpc3RJbmRleCB0
aGF0IGp1c3QgZ290IGNsaWNrZWQuCisgICAgICAgICAgICBpZiAobGlzdEluZGV4ID49IDAgJiYg
KG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8ICFzaGlmdFNlbGVjdCkpCisgICAg
ICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgobGlzdEluZGV4KTsKKyAg
ICAgICAgICAgIAorICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgobGlzdElu
ZGV4KTsKKyAgICAgICAgICAgIHVwZGF0ZUxpc3RCb3hTZWxlY3Rpb24oIW11bHRpU2VsZWN0KTsK
KworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50KCktPmZyYW1lKCkpCisg
ICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5zZXRNb3VzZURvd25NYXlTdGFy
dEF1dG9zY3JvbGwoKTsKKworICAgICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldnQtPnR5cGUoKSA9PSBtb3VzZXVwRXZlbnQgJiYg
ZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0
dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIo
KS0+YXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkKKyAgICAgICAgLy8gVGhpcyBt
YWtlcyBzdXJlIHdlIGZpcmUgb25DaGFuZ2UgZm9yIGEgc2luZ2xlIGNsaWNrLiAgRm9yIGRyYWcg
c2VsZWN0aW9uLCBvbkNoYW5nZSB3aWxsIGZpcmUgd2hlbiB0aGUgYXV0b3Njcm9sbCB0aW1lciBz
dG9wcy4KKyAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CisgICAgZWxzZSBpZiAoZXZ0LT50eXBl
KCkgPT0ga2V5cHJlc3NFdmVudCkgeworICAgICAgICBpZiAoIWV2dC0+aXNLZXlib2FyZEV2ZW50
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cmluZyBrZXlJZGVudGlmaWVyID0g
c3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPmtleUlkZW50aWZpZXIoKTsKKworICAg
ICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRW50ZXIiKSB7CisgICAgICAgICAgICBpZiAoZm9y
bSgpKQorICAgICAgICAgICAgICAgIGZvcm0oKS0+c3VibWl0Q2xpY2soZXZ0KTsKKyAgICAgICAg
ICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCBlbmRJbmRleCA9IDA7ICAgICAgICAKKyAgICAgICAgaWYgKG1f
YWN0aXZlU2VsZWN0aW9uRW5kSW5kZXggPCAwKSB7CisgICAgICAgICAgICAvLyBJbml0aWFsaXpl
IHRoZSBlbmQgaW5kZXgKKyAgICAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikK
KyAgICAgICAgICAgICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KGxhc3RT
ZWxlY3RlZExpc3RJbmRleCgpKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGtleUlkZW50aWZpZXIg
PT0gIlVwIikKKyAgICAgICAgICAgICAgICBlbmRJbmRleCA9IHByZXZpb3VzU2VsZWN0YWJsZUxp
c3RJbmRleChvcHRpb25Ub0xpc3RJbmRleChzZWxlY3RlZEluZGV4KCkpKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgZW5kIGluZGV4IGJhc2VkIG9uIHRoZSBjdXJy
ZW50IGVuZCBpbmRleAorICAgICAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iKQor
ICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gbmV4dFNlbGVjdGFibGVMaXN0SW5kZXgobV9hY3Rp
dmVTZWxlY3Rpb25FbmRJbmRleCk7CisgICAgICAgICAgICBlbHNlIGlmIChrZXlJZGVudGlmaWVy
ID09ICJVcCIpCisgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBwcmV2aW91c1NlbGVjdGFibGVM
aXN0SW5kZXgobV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCk7ICAgIAorICAgICAgICB9CisgICAg
ICAgIAorICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmll
ciA9PSAiVXAiKSB7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2Fu
IGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBp
bW1lZGlhdGVseSBhZnRlciBtYWtpbmcgdGhlIG5ldyBzZWxlY3Rpb24uCisgICAgICAgICAgICBz
YXZlTGFzdFNlbGVjdGlvbigpOworCisgICAgICAgICAgICBBU1NFUlQoZW5kSW5kZXggPj0gMCAm
JiAodW5zaWduZWQpZW5kSW5kZXggPCBsaXN0SXRlbXMoKS5zaXplKCkpOyAKKyAgICAgICAgICAg
IHNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGVuZEluZGV4KTsKKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgLy8gSWYgdGhlIGFuY2hvciBpcyB1bml0aWFsaXplZCwgb3IgaWYgd2UncmUgZ29p
bmcgdG8gZGVzZWxlY3QgYWxsIG90aGVyIG9wdGlvbnMsIHRoZW4gc2V0IHRoZSBhbmNob3IgaW5k
ZXggZXF1YWwgdG8gdGhlIGVuZCBpbmRleC4KKyAgICAgICAgICAgIGJvb2wgZGVzZWxlY3RPdGhl
cnMgPSAhbXVsdGlwbGUoKSB8fCAhc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPnNo
aWZ0S2V5KCk7CisgICAgICAgICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCA8
IDAgfHwgZGVzZWxlY3RPdGhlcnMpIHsKKyAgICAgICAgICAgICAgICBtX2FjdGl2ZVNlbGVjdGlv
blN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZGVzZWxlY3RPdGhlcnMpCisgICAg
ICAgICAgICAgICAgICAgIGRlc2VsZWN0SXRlbXMoKTsKKyAgICAgICAgICAgICAgICBzZXRBY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleChtX2FjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KHJlbmRl
cmVyKCkpLT5zY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleChlbmRJbmRleCk7CisgICAg
ICAgICAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKGRlc2VsZWN0T3RoZXJzKTsKKyAgICAgICAg
ICAgIGxpc3RCb3hPbkNoYW5nZSgpOworICAgICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gdXBkYXRlIG5hbWUgYW5kIGluYW1lIHZh
cmlhYmxlcyB3aXRoIG9wdGlvbidzIHZhbHVlIGFuZCBpbmRleAorICAgIHVwZGF0ZVZhcmlhYmxl
cygpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVZhcmlhYmxlcygpCit7Cisg
ICAgaWYgKG1faU5hbWUuaXNFbXB0eSgpICYmIG1fbmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIFN0cmluZyBuYW1lOworICAgIFN0cmluZyBpbmFtZTsKKyAgICBpbnQgb3B0
SWR4ID0gMDsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRlbXMgPSBsaXN0SXRl
bXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsK
KyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFnKSkgeworICAgICAg
ICAgICAgb3B0SWR4Kys7CisgICAgICAgICAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBz
dGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pOworICAgICAgICAgICAgaWYg
KG9wdGlvbi0+c2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgICAgIG5hbWUgKz0gb3B0aW9uLT5n
ZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAgICAgICAgICAgICAgICBuYW1lICs9ICI7IjsKKyAg
ICAgICAgICAgICAgICBpbmFtZSArPSBTdHJpbmc6Om51bWJlcihvcHRJZHgpOworICAgICAgICAg
ICAgICAgIGluYW1lICs9ICI7IjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSkgeworICAgICAgICB3aGlsZSAobmFtZS5lbmRzV2l0
aCgiOyIpKQorICAgICAgICAgICAgbmFtZSA9IG5hbWUubGVmdChuYW1lLmxlbmd0aCgpLTEpOwor
ICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPnN0b3JlVmFyaWFibGUobV9u
YW1lLCBuYW1lKTsKKyAgICB9CisKKyAgICBpZiAoIW1faU5hbWUuaXNFbXB0eSgpKSB7CisgICAg
ICAgIGlmIChpbmFtZS5lbmRzV2l0aCgiOyIpKQorICAgICAgICAgICAgaW5hbWUgPSBpbmFtZS5s
ZWZ0KGluYW1lLmxlbmd0aCgpLTEpOworICAgICAgIAorICAgICAgICBXTUxIZWxwZXI6OmN1cnJl
bnRCcndDb250ZXh0KCktPnN0b3JlVmFyaWFibGUobV9pTmFtZSwgaW5hbWUpOworICAgIH0KK30K
KworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwvV01MU2VsZWN0RWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgV01MU2VsZWN0RWxlbWVudF9oCisjZGVmaW5lIFdNTFNlbGVj
dEVsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFNlbGVjdEVsZW1l
bnQgOiBwdWJsaWMgSFRNTFNlbGVjdEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MU2VsZWN0RWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxT
ZWxlY3RFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIo
RXZlbnQqKTsKKworICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVz
ZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsKKyAgICB2b2lkIHVwZGF0
ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICB2b2lkIHNlbGVjdEluaXRpYWxPcHRpb25zKCk7CisKK3By
aXZhdGU6CisgICAgU3RyaW5nIHZhbHVlVG9JVmFsdWUoU3RyaW5nJik7CisgICAgU3RyaW5nIGl2
YWx1ZVRvVmFsdWUoU3RyaW5nJik7CisgICAgU3RyaW5nIHZhbGlkYXRlSW5kZXhWYWx1ZShTdHJp
bmcmKTsKKyAgICB2b2lkIGNhbGNEZWZhdWx0T3B0aW9uSW5kZXgoKTsKKyAgICB2b2lkIGluaXRp
YWxpc2VWYXJpYWJsZXMoKTsKKyAgICB2b2lkIHByZVNlbGVjdE9wdGlvbnNCeURlZmF1bHQoKTsK
KyAgICB2b2lkIG1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZvaWQg
bGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIHVwZGF0ZVZhcmlh
YmxlcygpOworCisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBT
dHJpbmcgbV9pTmFtZTsKKyAgICBTdHJpbmcgbV9pVmFsdWU7CisgICAgU3RyaW5nIG1fZGVmYXVs
dE9wdElkeDsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93
bWwvV01MU2V0dmFyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MU2V0
dmFyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxTZXR2YXJFbGVt
ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJG
cmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIu
aCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRl
ICJXTUxUYXNrRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxQcmV2RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFJlZnJlc2hFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNw
YWNlIFdNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK1dNTFNldHZhckVs
ZW1lbnQ6OldNTFNldHZhckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1l
bnQqIGRvYykgCisgICAgOiBXTUxFbGVtZW50KG5hbWUsIGRvYykKK3sKK30KKworV01MU2V0dmFy
RWxlbWVudDo6fldNTFNldHZhckVsZW1lbnQoKQoreworfQorCit2b2lkIFdNTFNldHZhckVsZW1l
bnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIFdNTFRhc2tFbGVtZW50KiBn
byA9IDA7CisgICAgTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2RlKCkgOworICAgIGlmIChhbmNl
c3Rvci0+aGFzVGFnTmFtZShXTUxOYW1lczo6Z29UYWcpKSB7CisgICAgICAgIGdvID0gc3RhdGlj
X2Nhc3Q8V01MR29FbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIH0gZWxzZSBpZiAoYW5jZXN0b3It
Pmhhc1RhZ05hbWUoV01MTmFtZXM6OnByZXZUYWcpKSB7CisgICAgICAgIGdvID0gc3RhdGljX2Nh
c3Q8V01MUHJldkVsZW1lbnQqPihhbmNlc3Rvcik7CisgICAgfSBlbHNlIGlmIChhbmNlc3Rvci0+
aGFzVGFnTmFtZShXTUxOYW1lczo6cmVmcmVzaFRhZykpIHsKKyAgICAgICAgZ28gPSBzdGF0aWNf
Y2FzdDxXTUxSZWZyZXNoRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICByZXR1cm47IAorICAgIH0KKworICAgIGlmIChnbykgeworICAgICAgICBnby0+cmVnaXN0ZXJT
ZXR2YXJFbGVtZW50KHRoaXMpOworICAgIH0KK30KKworCit2b2lkIFdNTFNldHZhckVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBTdHJp
bmcgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICBpZiAoYXR0ck5hbWUg
PT0gbmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKCFXTUxIZWxwZXI6OmlzVmFsaWRWYXJpYWJsZU5h
bWUoYXR0ci0+dmFsdWUoKSwgdHJ1ZSkpIHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5p
emVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZU5hbWVFcnJvcik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBtX25hbWUgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYo
YXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBpZiAoIVdNTEhlbHBlcjo6
aXNWYWxpZFZhcmlhYmxlTmFtZShtX25hbWUsIHRydWUpKQorICAgICAgICAgICAgICAgIFdNTEhl
bHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZU5hbWVFcnJvcik7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0cmluZyBXTUxTZXR2YXJFbGVtZW50OjpuYW1lKCkK
K3sKKyAgICByZXR1cm4gbV9uYW1lOyAKK30KKworU3RyaW5nIFdNTFNldHZhckVsZW1lbnQ6OnZh
bHVlKCkKK3sKKyAgICByZXR1cm4gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGdldEF0dHJp
YnV0ZSh2YWx1ZUF0dHIpLCBkb2N1bWVudCgpKTsKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwv
V01MU2V0dmFyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNldHZhckVs
ZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MU2V0dmFyRWxlbWVu
dF9oCisjZGVmaW5lIFdNTFNldHZhckVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFNldHZhckVsZW1lbnQgOiBwdWJs
aWMgIFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MU2V0dmFyRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+V01MU2V0dmFyRWxlbWVudCgpOworCisgICAg
dmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKKyAgICB2aXJ0dWFsIHZv
aWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7IAorCisgICAgU3RyaW5n
IG5hbWUoKTsKKyAgICBTdHJpbmcgdmFsdWUoKTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9u
YW1lOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50LmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldN
TFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJX
TUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1l
cy5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0
aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxl
Q2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTFRhYmxlRWxlbWVudDo6V01M
VGFibGVFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MVGFibGVFbGVtZW50KGRvYykg
Cit7Cit9CisKK1dNTFRhYmxlRWxlbWVudDo6fldNTFRhYmxlRWxlbWVudCgpIHt9CisKK3ZvaWQg
V01MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0
dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2x1bW5zQXR0cikgeworICAgICAgICBp
bnQgY29sdW1ucyA9ICBhdHRyLT52YWx1ZSgpLnRvSW50KCk7CisgICAgICAgIGlmIChjb2x1bW5z
IDwgMSkKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKElu
dmFsaWRDb2x1bW5zTnVtYmVyRm9yVGFibGVFcnJyb3IpOworCisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gdGl0bGVBdHRyKSB7CisgICAgICAgIFN0cmluZyB0aXRsZSA9IFdNTEhlbHBl
cjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKKyAgICAgICAg
aWYgKHRpdGxlICE9IGF0dHItPnZhbHVlKCkpCisgICAgICAgICAgICBzZXRBdHRyaWJ1dGUodGl0
bGVBdHRyLCB0aXRsZSk7CisKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhbGlnbkF0
dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUo
KSkpCisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZh
bGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgSFRNTFRh
YmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgfQorfQorCit2b2lk
IFdNTFRhYmxlRWxlbWVudDo6aW5pdCgpIAoreworICAgIHVuc2lnbmVkIGludCBpZHggPSAwOwor
ICAgIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvdyA9IDA7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1l
bnQqIGxhc3RDb2wgPSAwOworICAgIFJlZlB0cjxIVE1MVGFibGVDZWxsRWxlbWVudD4gbmV3Q2Vs
bDsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2x1bW5zOworICAgIEV4Y2VwdGlv
bkNvZGUgZWM7CisgICAgdW5zaWduZWQgYWN0dWFsQ29sTnVtID0gMDsKKyAgICB1bnNpZ25lZCBj
b2xOdW0gPSBnZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmNvbHVtbnNBdHRyKS50b0ludCgpOyAKKyAg
ICBpZiAoY29sTnVtIDwgMSkgCisgICAgICAgIGNvbE51bSA9IDE7CisKKyAgICBTdHJpbmcgYWxp
Z24gPSBnZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmFsaWduQXR0cik7CisKKyAgICBQYXNzUmVmUHRy
PEhUTUxDb2xsZWN0aW9uPiByb3dzID0gY2hpbGRyZW4oKTsKKyAgICB1bnNpZ25lZCByb3dOdW0g
PSByb3dzLT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcm93TnVtOyAr
K2kpIHsKKyAgICAgICAgcm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudCo+KHJv
d3MtPml0ZW0oaSkpOworICAgICAgICBjb2x1bW5zID0gcm93LT5jZWxscygpOworICAgICAgICBh
Y3R1YWxDb2xOdW0gPSBjb2x1bW5zLT5sZW5ndGgoKTsKKworICAgICAgICBpZiAoYWN0dWFsQ29s
TnVtID4gY29sTnVtKSB7CisgICAgICAgICAgICBsYXN0Q29sID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlQ2VsbEVsZW1lbnQqPihjb2x1bW5zLT5pdGVtKGNvbE51bSAtIDEpKTsKKworICAgICAgICAg
ICAgLy8gYWdncmVnYXRlIHRoZSByZWR1bmRhbnQgY29sdW1ucyBpbnRvIHRoZSBsYXN0IGNvbHVt
bgorICAgICAgICAgICAgbmV3Q2VsbCA9IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudChIVE1MTmFt
ZXM6OnRkVGFnLCBkb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGlmIChuZXdDZWxsKQorICAgICAg
ICAgICAgICAgIG5ld0NlbGwtPmFkZENoaWxkKGxhc3RDb2wtPmNsb25lTm9kZSh0cnVlKSk7CisK
KyAgICAgICAgICAgIGlkeCA9IGNvbE51bTsKKyAgICAgICAgICAgIHdoaWxlIChpZHggPCBhY3R1
YWxDb2xOdW0pIHsKKyAgICAgICAgICAgICAgICBuZXdDZWxsLT5hcHBlbmRDaGlsZChjb2x1bW5z
LT5pdGVtKGlkeCsrKS0+Y2xvbmVOb2RlKHRydWUpLCBlYyk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcmVkdW5kYW50IGNvbHVtbnMKKyAgICAgICAgICAgIGlk
eCA9IGFjdHVhbENvbE51bTsKKyAgICAgICAgICAgIHdoaWxlIChpZHggPiBjb2xOdW0pIHsKKyAg
ICAgICAgICAgICAgICByb3ctPmRlbGV0ZUNlbGwoLS1pZHgsIGVjKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcm93LT5yZXBsYWNlQ2hpbGQobmV3Q2VsbCwgbGFzdENvbCwgZWMpOwor
CisgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBhbGlnbiBhdHRyaWJ1dGUgb2YgdGFibGUgZWxl
bWVudCB0byB0aGF0IG9mIHRkIGVsZW1lbnQKKyAgICAgICAgICAgIGNvbnZlcnRBbGlnbihjb2x1
bW5zLCBjb2xOdW0pOworICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbENvbE51bSA8IGNvbE51bSkg
eworICAgICAgICAgICAgY29udmVydEFsaWduKGNvbHVtbnMsIGFjdHVhbENvbE51bSk7CisKKyAg
ICAgICAgICAgIC8vIGFwcGVuZCBlbXB0eSBjZWxscworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpZHggPSBhY3R1YWxDb2xOdW07IGlkeCA8IGNvbE51bTsgKytpZHgpIHsKKyAgICAgICAgICAg
ICAgICByb3ctPmluc2VydENlbGwoLTEsIGVjKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIGFsaWduIGF0dHJpYnV0ZSBvZiB0YWJs
ZSBlbGVtZW50IHRvIHRoYXQgb2YgdGQgZWxlbWVudAorICAgICAgICAgICAgY29udmVydEFsaWdu
KGNvbHVtbnMsIGNvbE51bSk7CisgICAgICAgIH0KKworICAgICAgICAvLyBzZXQgdGhlIGRlZmF1
bHQgYWxpZ24gZm9yIGVhY2ggcm93CisgICAgICAgIHJvdy0+c2V0QWxpZ24oImxlZnQiKTsKKwor
ICAgIH0gLy8gZW5kIG9mIGZvciAoLi4uIAorCit9CisKK3ZvaWQgV01MVGFibGVFbGVtZW50Ojpj
b252ZXJ0QWxpZ24oUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4mIGNvbHVtbnMsIHVuc2lnbmVk
IGNlbGxOdW0pIAoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBjZWxsID0gMDsKKyAgICBT
dHJpbmcgYWxpZ24gPSBnZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmFsaWduQXR0cik7CisgICAgZm9y
ICh1bnNpZ25lZCBpZHggPSAwOyBpZHggPCBjZWxsTnVtOyArK2lkeCkgeworICAgICAgICBjZWxs
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihjb2x1bW5zLT5pdGVtKGlkeCkp
OworICAgICAgICBpZiAoYWxpZ25baWR4XSA9PSAnUicgKSB7CisgICAgICAgICAgICBjZWxsLT5z
ZXRBbGlnbigicmlnaHQiKTsKKyAgICAgICAgfSBlbHNlIGlmIChhbGlnbltpZHhdID09ICdDJykg
eworICAgICAgICAgICAgY2VsbC0+c2V0QWxpZ24oImNlbnRlciIpOworICAgICAgICB9CisgICAg
fSAKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50LmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3dtbC9XTUxUYWJsZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGFibGVFbGVtZW50X2gKKyNkZWZpbmUgV01MVGFi
bGVFbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhYmxlRWxlbWVu
dCA6IHB1YmxpYyBIVE1MVGFibGVFbGVtZW50eworcHVibGljOgorICAgIFdNTFRhYmxlRWxlbWVu
dChEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFRhYmxlRWxlbWVudCgpOworCisgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworCisgICAg
dm9pZCBpbml0KCk7CisgICAgdm9pZCBjb252ZXJ0QWxpZ24oUGFzc1JlZlB0cjxIVE1MQ29sbGVj
dGlvbj4mLCB1bnNpZ25lZCk7IAorfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3dtbC9XTUxUYWdOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9X
TUxUYWdOYW1lcy5pbgkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRhZ05hbWVzLmlu
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACituYW1lc3BhY2U9IldNTCIKK2NwcE5hbWVz
cGFjZT0iV2ViQ29yZSIKK25hbWVzcGFjZVVSST0iaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvIgor
Z2VuZXJhdGVGYWN0b3J5PSIxIgorZ2VuZXJhdGVXcmFwcGVyRmFjdG9yeT0iMSIKKworY2FyZAor
YQorYWNjZXNzCitoZWFkCittZXRhCit0ZW1wbGF0ZQord21sCiticgorcAordGFibGUKK3RkCit0
cgorYgorYmlnCitlbQoraQorc21hbGwKK3N0cm9uZwordQorYW5jaG9yCitpbWcKK2RvCitvbmV2
ZW50Citwb3N0ZmllbGQKK2dvCitub29wCitwcmV2CityZWZyZXNoCitmaWVsZHNldAoraW5wdXQK
K29wdGdyb3VwCitvcHRpb24KK3NlbGVjdAorc2V0dmFyCit0aW1lcgpJbmRleDogV2ViQ29yZS93
bWwvV01MVGFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRhc2tF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRhc2tFbGVtZW50LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAg
ICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAi
V01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxB
bmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxl
ci5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6
ZXIuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK3RlbXBsYXRlPGNsYXNzIFQsIHNpemVfdCBu
PiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3RvcjxUKiwgbj4gJiB2ZWMsIFQqIGl0
ZW0pIAoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2ZWNbaV0gPT0gaXRlbSkgeworICAg
ICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cit9
CisgCitXTUxUYXNrRWxlbWVudDo6V01MVGFza0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKSB7
fQorCitXTUxUYXNrRWxlbWVudDo6fldNTFRhc2tFbGVtZW50KCkge30KKwordm9pZCBXTUxUYXNr
RWxlbWVudDo6YmluZEludHJpbnNpY0V2ZW50SW5PbmV2ZW50KE5vZGUqIG9uZXZlbnROb2RlKQor
eworICAgIFdNTEludHJFdmVudFR5cGUgdHlwZSA9IFVua25vd247CisgICAgU3RyaW5nIHR5cGVB
dHRyaSA9IHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihvbmV2ZW50Tm9kZSktPmdldEF0dHJpYnV0
ZSh0eXBlQXR0cik7CisKKyAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZih0eXBlQXR0
cmkpKSB7CisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFs
aWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGlmICh0eXBlQXR0cmkgPT0gIm9uZW50ZXJmb3J3YXJkIikgeworICAgICAgICB0eXBlID0gT25F
bnRlckZvcndhcmQ7CisgICAgfSBlbHNlIGlmICh0eXBlQXR0cmkgPT0gIm9uZW50ZXJiYWNrd2Fy
ZCIpIHsKKyAgICAgICAgdHlwZSA9IE9uRW50ZXJCYWNrd2FyZDsKKyAgICB9IGVsc2UgaWYgKHR5
cGVBdHRyaSA9PSAib250aW1lciIpIHsKKyAgICAgICAgdHlwZSA9IE9uVGltZXI7CisgICAgfSBl
bHNlIGlmICh0eXBlQXR0cmkgPT0gIm9ucGljayIpIHsKKyAgICAgICAgdHlwZSA9IE9uUGljazsK
KyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBVbmtub3duKQorICAgICAgICByZXR1cm47CisKKyAg
ICBXTUxJbnRyaW5zaWNFdmVudCBldjsKKyAgICBldi50YXNrID0gdGhpczsKKyAgICBpZiAoaGFz
VGFnTmFtZShnb1RhZykpIHsKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBnZXRBdHRyaWJ1dGUoaHJl
ZkF0dHIpOworICAgICAgICBldi50YXJnZXRVUkkgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYoaHJlZiwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAgIH0KKworICAgIC8vcmVnaXN0ZXIg
aW50cmluc2ljIGV2ZW50IHRvIHRoZSBldmVudCBoYW5kbGVyIG9mIHRoZSBvd25lciBvZiBvbmV2
ZW50IGVsZW1lbnQgCisgICAgTm9kZSogcGFyZW50ID0gb25ldmVudE5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2SGFuZGxlciA9IDA7CisgICAgaWYg
KHBhcmVudC0+aGFzVGFnTmFtZShjYXJkVGFnKSkgeworICAgICAgICBXTUxDYXJkRWxlbWVudCog
Y2FyZCA9IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4ocGFyZW50KTsKKyAgICAgICAgY2Fy
ZC0+c2V0SGFzSW50ckV2ZW50KHRydWUpOworICAgICAgICBldkhhbmRsZXIgPSBjYXJkLT5ldmVu
dEhhbmRsZXIoKTsKKyAgICB9IGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZSh0ZW1wbGF0ZVRh
ZykpIHsKKyAgICAgICAgV01MVGVtcGxhdGVFbGVtZW50KiB0ZW1wbCA9IHN0YXRpY19jYXN0PFdN
TFRlbXBsYXRlRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgIHRlbXBsLT5zZXRIYXNJbnRyRXZl
bnQodHJ1ZSk7CisgICAgICAgIGV2SGFuZGxlciA9IHRlbXBsLT5ldmVudEhhbmRsZXIoKTsKKyAg
ICB9IGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CisgICAgICAgIFdN
TE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihw
YXJlbnQpOworICAgICAgICBvcHRpb24tPnNldEhhc0ludHJFdmVudCh0cnVlKTsKKyAgICAgICAg
ZXZIYW5kbGVyID0gb3B0aW9uLT5ldmVudEhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAoZXZI
YW5kbGVyKQorICAgICAgICBldkhhbmRsZXItPnJlZ2lzdGVySW50cmluc2ljRXZlbnQodHlwZSwg
ZXYpOworfQorCit2b2lkIFdNTFRhc2tFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVl
cCkgCit7CisgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7IHBhcmVudDsgcGFy
ZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKworICAgICAgICBpZiAocGFyZW50LT5oYXNU
YWdOYW1lKGRvVGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MRG9FbGVtZW50Kj4o
cGFyZW50KS0+cmVnaXN0ZXJUYXNrKHRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0gZWxzZSBpZiAocGFyZW50LT5sb2NhbE5hbWUoKSA9PSAib25ldmVudCIpIHsKKyAgICAgICAg
ICAgIC8vYmluZGluZyB0aGlzIHRhc2sgd2l0aCBpbnRyaW5zaWMgZXZlbnQgc3BlY2lmaWVkIGJ5
IG9uZXZlbnQgdHlwZQorICAgICAgICAgICAgYmluZEludHJpbnNpY0V2ZW50SW5PbmV2ZW50KHBh
cmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQtPmhh
c1RhZ05hbWUoYW5jaG9yVGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MQW5jaG9y
RWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyVGFzayh0aGlzKTsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisKKyAgICB9Cit9CisKK3ZvaWQgV01MVGFza0VsZW1lbnQ6OnJlZ2lzdGVy
U2V0dmFyRWxlbWVudChXTUxTZXR2YXJFbGVtZW50KiBlKSAKK3sKKyAgICBtX3NldHZhcnMuYXBw
ZW5kKGUpOworfQorCit2b2lkIFdNTFRhc2tFbGVtZW50OjpyZW1vdmVTZXR2YXJFbGVtZW50KFdN
TFNldHZhckVsZW1lbnQqIGUpIAoreworICAgIHJlbW92ZUZyb21WZWN0b3IobV9zZXR2YXJzLCBl
KTsKK30KKworYm9vbCBXTUxUYXNrRWxlbWVudDo6aGFzU2V0dmFyKCkgY29uc3QgCit7CisgICAg
cmV0dXJuICFtX3NldHZhcnMuaXNFbXB0eSgpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxUYXNrRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRhc2tFbGVtZW50
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUYXNrRWxlbWVudF9oCisjZGVm
aW5lIFdNTFRhc2tFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxTZXR2YXJFbGVtZW50OworCitjbGFzcyBXTUxUYXNr
RWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxUYXNrRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKTsKKyAgICB2aXJ0
dWFsIH5XTUxUYXNrRWxlbWVudCgpOworICAKKyAgICB2aXJ0dWFsIHZvaWQgZXhlYyhFdmVudCos
IFN0cmluZyB1cmkgPSBTdHJpbmcoKSkgPSAwIDsKKworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRl
ZEludG9UcmVlKGJvb2wgZGVlcCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTZXR2YXJF
bGVtZW50KFdNTFNldHZhckVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2V0dmFy
RWxlbWVudChXTUxTZXR2YXJFbGVtZW50Kik7CisgICAgYm9vbCBoYXNTZXR2YXIoKSBjb25zdDsK
KworcHJvdGVjdGVkOgorICAgIFZlY3RvcjxXTUxTZXR2YXJFbGVtZW50Kj4gbV9zZXR2YXJzOwor
Citwcml2YXRlOgorICAgIHZvaWQgYmluZEludHJpbnNpY0V2ZW50SW5PbmV2ZW50KE5vZGUqKTsK
KworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRl
bXBsYXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGVtcGxhdGVF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5o
IgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlckFyZW5hLmgiCisj
aW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxC
cndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJX
TUxUZW1wbGF0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTFRlbXBsYXRl
RWxlbWVudDo6V01MVGVtcGxhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50ICpkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1f
ZXZudEhhbmRsZXIoMCkKKyAgICAsIG1faGFzSW50ckV2ZW50KGZhbHNlKSAKK3sKK30KKworV01M
VGVtcGxhdGVFbGVtZW50Ojp+V01MVGVtcGxhdGVFbGVtZW50KCkgCit7CisgICAgaWYgKG1fZXZu
dEhhbmRsZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fZXZudEhhbmRsZXI7CisgICAgICAgIG1fZXZu
dEhhbmRsZXIgPSAwOworICAgIH0KKworfQorCit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIFdNTEludHJF
dmVudFR5cGUgZXR5cGUgPSBVbmtub3duOworCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVu
dGVyZm9yd2FyZEF0dHIpIHsKKyAgICAgICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVudGVyYmFja3dhcmRBdHRyKSB7CisgICAgICAg
IGV0eXBlID0gT25FbnRlckJhY2t3YXJkOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG9udGltZXJBdHRyKSB7CisgICAgICAgIGV0eXBlID0gT25UaW1lcjsKKyAgICB9CisgICAgCisg
ICAgLy8gcmVnaXN0ZXIgaW50cmluc2ljIGV2ZW50IHRvIHRlbXBsYXRlIAorICAgIGlmIChldHlw
ZSAhPSBVbmtub3duKSB7CisKKyAgICAgICAgaWYgKCFtX2V2bnRIYW5kbGVyKSB7CisgICAgICAg
ICAgICBtX2V2bnRIYW5kbGVyID0gbmV3IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworICAg
ICAgICB9CisKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFF1YWxpZmll
ZE5hbWUgcU5hbWUoImdvIiwgImdvIiwgIiIpOworICAgICAgICBFbGVtZW50KiBnbyA9IFdNTEVs
ZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KHFOYW1lLCBkb2N1bWVudCgpLCBmYWxzZSk7
IAorICAgICAgICBTdHJpbmcgaHJlZiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRy
LT52YWx1ZSgpLCBkb2N1bWVudCgpLCAiZXNjYXBlIik7CisgICAgICAgIGdvLT5zZXRBdHRyaWJ1
dGVOUygiIiwgImhyZWYiLCBocmVmLCBlYyk7CisKKyAgICAgICAgV01MSW50cmluc2ljRXZlbnQg
ZXY7CisgICAgICAgIGV2LnRhc2sgPSBzdGF0aWNfY2FzdDxXTUxHb0VsZW1lbnQqPihnbyk7Cisg
ICAgICAgIGV2LnRhcmdldFVSSSA9IGhyZWY7IAorCisgICAgICAgIHNldEhhc0ludHJFdmVudCh0
cnVlKTsKKyAgICAgICAgbV9ldm50SGFuZGxlci0+cmVnaXN0ZXJJbnRyaW5zaWNFdmVudChldHlw
ZSwgZXYpOworICAgIH0KK30KKworV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBXTUxUZW1wbGF0
ZUVsZW1lbnQ6OmV2ZW50SGFuZGxlcigpCit7CisgICAgaWYgKG1faGFzSW50ckV2ZW50ICYmICFt
X2V2bnRIYW5kbGVyKSAgeworICAgICAgICBtX2V2bnRIYW5kbGVyID0gbmV3IFdNTEludHJpbnNp
Y0V2ZW50SGFuZGxlcigpOworICAgIH0KKworICAgIHJldHVybiBtX2V2bnRIYW5kbGVyOworfQor
Cit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6c2V0SGFzSW50ckV2ZW50KGJvb2wgaGFzKSB7Cisg
ICAgbV9oYXNJbnRyRXZlbnQgPSBoYXM7Cit9CisKK2Jvb2wgV01MVGVtcGxhdGVFbGVtZW50Ojpo
YXNJbnRyRXZlbnQoKSB7CisgICAgcmV0dXJuIG1faGFzSW50ckV2ZW50OworfQorCit2b2lkIFdN
TFRlbXBsYXRlRWxlbWVudDo6cmVnaXN0ZXJEb0VsZW1lbnQoV01MRG9FbGVtZW50KiBkb2UpCit7
CisgICAgaWYgKGRvZSkgeworICAgICAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0ZXJhdG9y
IGl0ID0gbV9kb1ZlY3MuYmVnaW4oKTsKKyAgICAgICAgV01MRG9FbGVtZW50KiBlID0gMDsKKyAg
ICAgICAgd2hpbGUgKGl0ICE9IG1fZG9WZWNzLmVuZCgpKSB7CisgICAgICAgICAgICBlID0gc3Rh
dGljX2Nhc3Q8V01MRG9FbGVtZW50Kj4oKml0KyspOworICAgICAgICAgICAgaWYgKGUtPmRvTmFt
ZSgpID09IGRvZS0+ZG9OYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2Vu
aXplcigpLT5yZXBvcnRFcnJvcihTYW1lTmFtZURvRWxlbWVudHNFcnJvcik7CisgICAgICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIG1fZG9WZWNz
LmFwcGVuZChkb2UpOworICAgIH0KK30KKworVmVjdG9yPFdNTERvRWxlbWVudCo+IFdNTFRlbXBs
YXRlRWxlbWVudDo6Z2V0RG9FbGVtZW50cygpCit7CisgICAgcmV0dXJuIG1fZG9WZWNzOworfQor
Cit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvd21sL1dNTFRlbXBsYXRlRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwor
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBXTUxUZW1wbGF0ZUVsZW1lbnRfaAorI2RlZmluZSBXTUxUZW1wbGF0ZUVs
ZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEludHJpbnNp
Y0V2ZW50SGFuZGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tF
bGVtZW50OworY2xhc3MgV01MRG9FbGVtZW50OworCitjbGFzcyBXTUxUZW1wbGF0ZUVsZW1lbnQg
OiBwdWJsaWMgV01MRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MVGVtcGxhdGVFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFRlbXBsYXRl
RWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOworCisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBldmVudEhhbmRs
ZXIoKTsKKyAgICBib29sIGhhc0ludHJFdmVudCgpOworICAgIHZvaWQgc2V0SGFzSW50ckV2ZW50
KGJvb2wpOworCisgICAgdm9pZCByZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQqKTsKKyAg
ICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gZ2V0RG9FbGVtZW50cygpOworcHJpdmF0ZToKKyAgICBX
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIG1fZXZudEhhbmRsZXI7CisgICAgYm9vbCBtX2hhc0lu
dHJFdmVudDsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gbV9kb1ZlY3M7Cit9OworCit9IC8v
bmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MVGV4dC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGV4dC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3dtbC9XTUxUZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxUZXh0LmgiCisjaW5jbHVkZSAiV01MQnJ3Q29u
dGV4dC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV01MVGV4dDo6V01MVGV4dChEb2N1bWVudCogZG9jLCBj
b25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBUZXh0KGRvYywgdGV4dCkge30KKworV01MVGV4dDo6
fldNTFRleHQoKSB7fQorCit2b2lkIFdNTFRleHQ6OnVwZGF0ZURhdGFJZk5lZWRlZCgpIAorewor
ICAgIGlmIChsZW5ndGgoKSA+IDEgJiYgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5o
YXNWYXJpYWJsZXMoKSkgeworICAgICAgICBTdHJpbmcgdGV4dCA9IGRhdGEoKTsKKyAgICAgICAg
aWYgKCF0ZXh0LmltcGwoKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSB7CisgICAgICAgICAg
ICB0ZXh0ID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHRleHQsIGRvY3VtZW50KCkpOwor
CisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGU7CisgICAgICAgICAgICBzZXREYXRhKHRleHQs
IGUpOworICAgICAgICB9CisgICAgfQorfQorCisKK30gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNv
cmUvd21sL1dNTFRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUZXh0LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaWZuZGVmIFdNTFRleHRfaAorI2RlZmluZSBXTUxUZXh0X2gKKworI2lu
Y2x1ZGUgIlRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsK
KworY2xhc3MgV01MVGV4dCA6IHB1YmxpYyBUZXh0IHsKK3B1YmxpYzoKKyAgICBXTUxUZXh0KERv
Y3VtZW50KiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB+V01MVGV4dCgpOworCisgICAg
dm9pZCB1cGRhdGVEYXRhSWZOZWVkZWQoKTsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS93bWwvV01MVGltZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxUaW1lckVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93
bWwvV01MVGltZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCIK
KyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5j
bHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTFRpbWVy
RWxlbWVudDo6V01MVGltZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50ICpkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAgICwgbV9j
YXJkKDApCisgICAgICAsIG1fdGltZXIodGhpcywgJldNTFRpbWVyRWxlbWVudDo6dGltZXJGaXJl
ZCkKK3sKK30KKworV01MVGltZXJFbGVtZW50Ojp+V01MVGltZXJFbGVtZW50KCkge30KKwordm9p
ZCBXTUxUaW1lckVsZW1lbnQ6OnRpbWVyRmlyZWQoVGltZXI8V01MVGltZXJFbGVtZW50PiopCit7
CisgICAgaWYgKCFtX2NhcmQpIAorICAgICAgICByZXR1cm47CisKKyAgICAvL3doZW4gdGhlIHRp
bWVyIGV4cGlyZXMsIHNldCB0aGUgbmFtZSB2YXJpYWxiZSBvZiB0aW1lciB0byAnMCcKKyAgICBp
ZiAoIW1fbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV92YWx1ZSA9ICIwIjsKKyAgICAgICAg
V01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlKG1fbmFtZSwgbV92
YWx1ZSk7CisgICAgfQorCisgICAgV01MSW50ckV2ZW50VHlwZSBldHlwZSA9IE9uVGltZXI7Cisg
ICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBldkhhbmRsZXIgPSBtX2NhcmQtPmV2ZW50SGFu
ZGxlcigpOworICAgIGJvb2wgaGFzSW50ckV2ZW50ID0gIGZhbHNlOworICAgIGlmIChldkhhbmRs
ZXIgJiYgZXZIYW5kbGVyLT5oYXNJbnRyaW5zaWNFdmVudChldHlwZSkpIHsKKyAgICAgICAgICAg
IGhhc0ludHJFdmVudCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChtX2NhcmQtPnRlbXBsYXRlRWxl
bWVudCgpKSB7CisgICAgICAgIGV2SGFuZGxlciA9IG1fY2FyZC0+dGVtcGxhdGVFbGVtZW50KCkt
PmV2ZW50SGFuZGxlcigpOworICAgICAgICBpZiAoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFz
SW50cmluc2ljRXZlbnQoZXR5cGUpKQorICAgICAgICAgICAgaGFzSW50ckV2ZW50ID0gdHJ1ZTsK
KyAgICB9CisKKyAgICBpZiAoaGFzSW50ckV2ZW50KSB7CisgICAgICAgIGV2SGFuZGxlci0+dHJp
Z2dlckludHJpbnNpY0V2ZW50KGV0eXBlKTsKKyAgICB9Cit9CisKK3ZvaWQgV01MVGltZXJFbGVt
ZW50OjpzdGFydChpbnQgaW50ZXJ2YWwpCit7CisgICAgaWYgKG1fY2FyZCAmJiAhbV90aW1lci5p
c0FjdGl2ZSgpKSB7CisgICAgICAgIAorICAgICAgICBpZiAoKGludGVydmFsIDw9IDApICYmICFt
X25hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgU3RyaW5nIHRpbWVvdXQgPSBXTUxI
ZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPmdldFZhcmliYWxlKG1fbmFtZSk7IAorICAgICAg
ICAgICAgICAgIGludGVydmFsID0gdGltZW91dC50b0ludCgpOworICAgICAgICB9CisKKyAgICAg
ICAgaWYgKGludGVydmFsIDw9IDApCisgICAgICAgICAgICBpbnRlcnZhbCA9IG1fdmFsdWUudG9J
bnQoKTsKKworICAgICAgICBpZiAoaW50ZXJ2YWwgPiAwKQorICAgICAgICAgICAgbV90aW1lci5z
dGFydE9uZVNob3QoaW50ZXJ2YWwvMTAuMCk7CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVyRWxl
bWVudDo6c3RvcCgpCit7CisgICAgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90
aW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpIAoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0g
bmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKCFXTUxIZWxwZXI6OmlzVmFsaWRWYXJpYWJsZU5hbWUo
YXR0ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJl
cG9ydEVycm9yKEludmFsaWRWYXJpYWJsZU5hbWVFcnJvcik7CisgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IHZhbHVlQXR0cikgeworICAgICAgICBtX3ZhbHVlID0gV01MSGVscGVyOjpzdWJz
dGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOworICAgIH0KK30KKwordm9p
ZCBXTUxUaW1lckVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIC8v
IFRoZSB2YWx1ZSBvZiB0aW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ3JhbCBudW1iZXIs
IG9yIGlnbm9yZSBpdAorICAgIGlmIChtX3ZhbHVlLnRvSW50KCkgPiAwKSB7CisgICAgICAgIGZv
ciAoTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+
cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGNhcmRU
YWcpKSB7CisgICAgICAgICAgICAgICAgbV9jYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1l
bnQqPihwYXJlbnQpOworICAgICAgICAgICAgICAgIG1fY2FyZC0+c2V0SW50ckV2ZW50VGltZXIo
dGhpcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50OjpzdG9yZUludGVydmFsVG9CcndDb250
ZXh0KCkKK3sKKyAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIGludCBpbnRl
cnZhbCA9IHN0YXRpY19jYXN0PGludD4obV90aW1lci5uZXh0RmlyZUludGVydmFsKCkpKjEwOwor
ICAgICAgICBTdHJpbmcgdmFsdWUgPSBTdHJpbmc6Om51bWJlcihpbnRlcnZhbCk7CisKKyAgICAg
ICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlKG1fbmFtZSwg
dmFsdWUpOworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MVGltZXJFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGltZXJFbGVtZW50LmgJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3dtbC9XTUxUaW1lckVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGltZXJFbGVtZW50X2gKKyNkZWZpbmUgV01MVGlt
ZXJFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTENhcmRFbGVtZW50OworICAgICAg
ICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTFRpbWVyRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVt
ZW50IHsKK3B1YmxpYzoKKyAgICBXTUxUaW1lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxUaW1lckVsZW1lbnQoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Cisg
ICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKKworICAgIHZvaWQg
dGltZXJGaXJlZChUaW1lcjxXTUxUaW1lckVsZW1lbnQ+Kik7CisgICAgdm9pZCBzdGFydChpbnQg
aW50ZXJ2YWwgPSAtMSk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgdm9pZCBzdG9yZUludGVydmFs
VG9CcndDb250ZXh0KCk7CisKK3ByaXZhdGU6CisgICAgV01MQ2FyZEVsZW1lbnQqIG1fY2FyZDsK
KyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX3ZhbHVlOworICAgIFRpbWVyPFdNTFRp
bWVyRWxlbWVudD4gbV90aW1lcjsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUb2tlbml6
ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MT3B0aW9uRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbnB1dEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQRWxl
bWVudC5oIgorI2luY2x1ZGUgIldNTFRleHQuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorCisj
aW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVtLmgiCisKKyNpbmNsdWRlICJD
REFUQVNlY3Rpb24uaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2FjaGUuaCIK
KyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVk
ZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5jbHVkZSAiRXZlbnRO
YW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNp
bmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIu
aCIKKyNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291
cmNlUmVzcG9uc2UuaCIKKyNpZm5kZWYgVVNFX1FYTUxTVFJFQU0KKyNpbmNsdWRlIDxsaWJ4bWwv
cGFyc2VyLmg+CisjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgorI2Vsc2UKKyNp
bmNsdWRlIDxRRGVidWc+CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoWFNMVCkKKyNpbmNsdWRlIDxsaWJ4c2x0
L3hzbHQuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdOYW1lcy5o
IgorI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIK
KyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsK
KworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworV01MVG9rZW5pemVyOjpX
TUxUb2tlbml6ZXIoRG9jdW1lbnQqIF9kb2MsIEZyYW1lVmlldyogX3ZpZXcpCis6IFhNTFRva2Vu
aXplcihfZG9jLCBfdmlldykgCit7CisgICAgbV9jdXJyZW50Tm9kZSA9IF9kb2M7CisgICAgbV9l
cnJvckNvZGUgPSBOb0Vycm9yOworICAgICAKKyAgICBXTUxIZWxwZXI6OnNldFRva2VuaXplcih0
aGlzKTsKK30KKworCitXTUxUb2tlbml6ZXI6On5XTUxUb2tlbml6ZXIoKSB7fQorCisKK2Jvb2wg
V01MVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmIHMsIGJvb2wgLyphcHBl
bmREYXRhKi8pIAoreworI2lmbmRlZiBVU0VfUVhNTFNUUkVBTQorICAgIFhNTFRva2VuaXplcjo6
d3JpdGUocywgdHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorCisgICAgc3RhdGljIFFY
bWxTdHJlYW1SZWFkZXI6OlRva2VuVHlwZSBvbGRUeXBlID0gUVhtbFN0cmVhbVJlYWRlcjo6Tm9U
b2tlbjsKKworICAgIG1fc3RyZWFtLmFkZERhdGEoUVN0cmluZyhzLnRvU3RyaW5nKCkpKTsKKwor
ICAgIHdoaWxlICghbV9zdHJlYW0uYXRFbmQoKSkgeworICAgICAgICBtX3N0cmVhbS5yZWFkTmV4
dCgpOworICAgICAgICBzd2l0Y2ggKG1fc3RyZWFtLnRva2VuVHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RG9jdW1lbnQ6CisgICAgICAgICAgICBjYXNl
IFFYbWxTdHJlYW1SZWFkZXI6OkVuZERvY3VtZW50OgorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpTdGFydEVsZW1lbnQ6IHsKKyAgICAg
ICAgICAgICAgICBpZiAob2xkVHlwZSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlV01MRXJyb3IoRG9jVHlwZURlY2xhcmF0aW9uTWlzc0Vycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBXTUxQYXJzZVN0YXJ0RWxlbWVudCgpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVy
OjpFbmRFbGVtZW50OiB7CisgICAgICAgICAgICAgICAgV01MUGFyc2VFbmRFbGVtZW50KCk7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFY
bWxTdHJlYW1SZWFkZXI6OkNoYXJhY3RlcnM6IHsKKyAgICAgICAgICAgICAgICBpZiAobV9zdHJl
YW0uaXNDREFUQSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgZXhpdFRleHQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IG5ldyBDREFUQVNlY3Rpb24o
bV9kb2MsIG1fc3RyZWFtLnRleHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2N1
cnJlbnROb2RlLT5hZGRDaGlsZChuZXdOb2RlLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKG1fdmlldyAmJiAhbmV3Tm9k
ZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3Tm9kZS0+YXR0YWNo
KCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
Y3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSB8fCBlbnRlclRleHQoKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgICAgICAgICAgICAgICAg
ICBXTUxUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8V01MVGV4dCo+KG1fY3VycmVudE5vZGUpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC0+YXBwZW5kRGF0YShtX3N0cmVhbS50ZXh0KCks
IGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtPnVwZGF0ZURhdGFJZk5lZWRlZCgp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY3VycmVudE5vZGUtPmF0dGFjaGVk
KCkpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3VycmVudE5vZGUtPmF0dGFjaCgp
OworCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlV01MRXJy
b3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpFbnRpdHlSZWZlcmVuY2U6IHsK
KyAgICAgICAgICAgICAgICBRU3RyaW5nIGVudGl0eSA9IG1fc3RyZWFtLm5hbWUoKS50b1N0cmlu
ZygpOworICAgICAgICAgICAgICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShlbnRpdHku
dG9VdGY4KCkuY29uc3REYXRhKCkpOworCisgICAgICAgICAgICAgICAgaWYgKG1fY3VycmVudE5v
ZGUtPmlzVGV4dE5vZGUoKSB8fCBlbnRlclRleHQoKSkgeworICAgICAgICAgICAgICAgICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cigmYywg
MSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihtX2N1cnJlbnROb2Rl
KS0+YXBwZW5kRGF0YShzdHIsIGVjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFk
ZXI6OkNvbW1lbnQ6IHsKKyAgICAgICAgICAgICAgICBwYXJzZUNvbW1lbnQoKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVh
bVJlYWRlcjo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOiB7CisgICAgICAgICAgICAgICAgcGFyc2VQ
cm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RFREOiB7CisgICAgICAg
ICAgICAgICAgb2xkVHlwZSA9IFFYbWxTdHJlYW1SZWFkZXI6OkRURDsKKyAgICAgICAgICAgICAg
ICBwYXJzZUR0ZCgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIGlmIChtX3N0cmVhbS5lcnJvcigp
ICE9IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcikgeworICAg
ICAgICAgICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9IChtX3N0cmVhbS5lcnJvcigpID09IFFY
bWxTdHJlYW1SZWFkZXI6Ok5vdFdlbGxGb3JtZWRFcnJvcikgPworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZhdGFsIDogd2FybmluZzsKKyAgICAgICAgICAgICAgICAgICAg
aGFuZGxlRXJyb3IodHlwZSwgcVByaW50YWJsZShtX3N0cmVhbS5lcnJvclN0cmluZygpKSwgbGlu
ZU51bWJlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIo
KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJy
ZWFrOworCisgICAgICAgIH0gLy8gZW5kIG9mIHN3aXRjaCAoLi4uCisgICAgfSAvLyBlbmQgb2Yg
d2hpbGUgKC4uLgorCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYKKworfQorCit2b2lkIFdNTFRv
a2VuaXplcjo6dXBkYXRlQXR0cnNJZk5lZWRlZChFbGVtZW50KiBlbGVtZW50LCBjb25zdCBTdHJp
bmcmIGxvY2FsTmFtZSkKK3sKKyAgICAvLyB1cGRhdGUgYXRycmlidXRlcyBvZiBvcHRvaW4gZWxl
bWVudCBpZiBuZWVkZWQKKyAgICBpZiAobG9jYWxOYW1lID09ICJvcHRpb24iKQorICAgICAgICBz
dGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oZWxlbWVudCktPnVwZGF0ZUF0dHJzSWZOZWVk
ZWQoKTsKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gInNlbGVjdCIpCisgICAgICAgIHN0YXRp
Y19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlQXR0cnNJZk5lZWRlZCgp
OworICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSAiaW5wdXQiKQorICAgICAgICBzdGF0aWNfY2Fz
dDxXTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlQXR0cnNJZk5lZWRlZCgpOworICAg
IGVsc2UgaWYgKGxvY2FsTmFtZSA9PSAiaW1nIikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01MSW1h
Z2VFbGVtZW50Kj4oZWxlbWVudCktPnVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBlbHNlIGlm
IChsb2NhbE5hbWUgPT0gInAiKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxQRWxlbWVudCo+KGVs
ZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7Cit9CisKKyNpZmRlZiBVU0VfUVhNTFNUUkVB
TQordm9pZCBXTUxUb2tlbml6ZXI6OldNTFBhcnNlU3RhcnRFbGVtZW50KCkKK3sKKyAgICBleGl0
VGV4dCgpOworCisgICAgUVN0cmluZyBsb2NhbE5hbWUgPSBtX3N0cmVhbS5uYW1lKCkudG9TdHJp
bmcoKTsKKyAgICBRU3RyaW5nIHVyaSAgICAgICA9IG1fc3RyZWFtLm5hbWVzcGFjZVVyaSgpLnRv
U3RyaW5nKCk7CisgICAgUVN0cmluZyBwcmVmaXggICAgPSBtX3N0cmVhbS5xdWFsaWZpZWROYW1l
KCkudG9TdHJpbmcoKTsKKworICAgIGlmIChsb2NhbE5hbWUgPT0gImFjY2VzcyIpCisgICAgICAg
IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0TmVlZENoZWNrRGVja0FjY2Vzcyh0
cnVlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgIFF1YWxpZmllZE5hbWUgcU5h
bWUocHJlZml4LCBsb2NhbE5hbWUsIHVyaSk7CisgICAgRWxlbWVudCogbmV3RWxlbWVudCA9IFdN
TEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KHFOYW1lLCBtX2RvYywgdHJ1ZSkgOwor
CisgICAgUVhtbFN0cmVhbUF0dHJpYnV0ZXMgYXR0cnMgPSBtX3N0cmVhbS5hdHRyaWJ1dGVzKCk7
CisgICAgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5jb3VudCgpOyArK2kpIHsKKyAg
ICAgICAgY29uc3QgUVhtbFN0cmVhbUF0dHJpYnV0ZSAmYXR0ciA9IGF0dHJzW2ldOworICAgICAg
ICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9IGF0dHIubmFtZSgpOworICAgICAgICBTdHJpbmcgYXR0
clZhbHVlICAgICA9IGF0dHIudmFsdWUoKTsKKyAgICAgICAgU3RyaW5nIGF0dHJVUkkgICAgICAg
PSBhdHRyLm5hbWVzcGFjZVVyaSgpLmlzRW1wdHkoKSA/IFN0cmluZygpIDogU3RyaW5nKGF0dHIu
bmFtZXNwYWNlVXJpKCkpOworICAgICAgICBTdHJpbmcgYXR0clFOYW1lICAgICA9IGF0dHIucXVh
bGlmaWVkTmFtZSgpOworCisgICAgICAgIG5ld0VsZW1lbnQtPnNldEF0dHJpYnV0ZU5TKGF0dHJV
UkksIGF0dHJRTmFtZSwgYXR0clZhbHVlLCBlYyk7CisgICAgfQorCisgICAgdXBkYXRlQXR0cnNJ
Zk5lZWRlZChuZXdFbGVtZW50LCBsb2NhbE5hbWUpOworCisgICAgaWYgKCFtX2N1cnJlbnROb2Rl
LT5hZGRDaGlsZChuZXdFbGVtZW50KSkgeworICAgICAgICBzdG9wUGFyc2luZygpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIHNldEN1cnJlbnROb2RlKG5ld0VsZW1lbnQpOworCisgICAg
aWYgKCFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQorICAgICAgICBuZXdFbGVtZW50LT5hdHRhY2go
KTsgCisKKyAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgaGFuZGxlV01MRXJyb3IoKTsKK30K
Kwordm9pZCBXTUxUb2tlbml6ZXI6OldNTFBhcnNlRW5kRWxlbWVudCgpIAoreworCisgICAgZXhp
dFRleHQoKTsKKworICAgIE5vZGUqIG4gPSBtX2N1cnJlbnROb2RlOworCisgICAgUmVmUHRyPE5v
ZGU+IHBhcmVudCA9IG4tPnBhcmVudE5vZGUoKTsKKyAgICBuLT5maW5pc2hlZFBhcnNpbmcoKTsK
KworICAgIHNldEN1cnJlbnROb2RlKHBhcmVudC5nZXQoKSk7CisKK30KKyNlbmRpZgorCit2b2lk
IFdNTFRva2VuaXplcjo6ZmluaXNoKCkgCit7CisgICAgaWYgKCFXTUxIZWxwZXI6OmN1cnJlbnRC
cndDb250ZXh0KCktPmlzRGVja0FjY2Vzc2libGUoKSkgeworICAgICAgICBYTUxUb2tlbml6ZXI6
OmZpbmlzaCgpOworICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPnBhZ2Uo
KS0+Z29CYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBub3RpZnkgdGhl
IGV4aXN0YW5jZSBvZiB0ZW1wbGF0ZSB0byBhbGwgdGhlIGNhcmRzIG9mIGN1cnJlbnQgZGVjawor
ICAgIFdNTEhlbHBlcjo6cmVnaXN0ZXJUZW1wbGF0ZVRvQ2FyZHMobV9kb2MpOworCisgICAgLy8g
ZGV0ZXJtaW5lIHRoZSBkZXN0aW5hdGlvbiBjYXJkCisgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQg
PSBXTUxIZWxwZXI6OnNldERlc3RpbmF0aW9uQ2FyZChtX2RvYyk7CisKKyAgICBpZiAoY2FyZCkg
eworICAgICAgICAvLyBzaGFkb3cgdGhlIGRlY2stbGV2ZWwgZG8gaWYgbmVlZGVkCisgICAgICAg
IGNhcmQtPnNoYWRvd0RvRWxlbWVudElmTmVlZGVkKCk7CisKKyAgICAgICAgLy9oYW5kbGUgdGhl
IGludHJpbnNpYyBldmVudAorICAgICAgICBjYXJkLT5oYW5kbGVJbnRyRXZlbnRJZk5lZWRlZCgp
OworICAgIH0KKworICAgIFhNTFRva2VuaXplcjo6ZmluaXNoKCk7CisKKyAgICBpZiAoY2FyZCkK
KyAgICAgICAgY2FyZC0+dXBkYXRlVGFibGVFbGVtZW50KCk7Cit9CisKK3ZvaWQgV01MVG9rZW5p
emVyOjpyZXBvcnRFcnJvcihXTUxFcnJvckNvZGUgZXJyb3IpCit7CisgICAgbV9lcnJvckNvZGUg
PSBlcnJvcjsKK30KKworYm9vbCBXTUxUb2tlbml6ZXI6Omhhc0Vycm9yKCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gKG1fZXJyb3JDb2RlICE9IE5vRXJyb3IpOworfQorIAordm9pZCBXTUxUb2tlbml6
ZXI6OmhhbmRsZVdNTEVycm9yKFdNTEVycm9yQ29kZSBlcnJvckNvZGUpCit7CisgICAgaWYgKGVy
cm9yQ29kZSAhPSBOb0Vycm9yKQorICAgICAgICBtX2Vycm9yQ29kZSA9IGVycm9yQ29kZTsKKwor
ICAgIGNvbnN0IGNoYXIqIGVyck1zZyA9IDA7CisgICAgc3dpdGNoIChtX2Vycm9yQ29kZSkgewor
ICAgICAgICBjYXNlIFNhbWVOYW1lRG9FbGVtZW50c0Vycm9yOgorICAgICAgICAgICAgZXJyTXNn
ID0gIkVhY2ggZG8gZWxlbWVudCBtdXN0IGhhdmUgZGlmZmVyZW50IG5hbWUgaW4gb25lIGNhcmQg
b3IgdGVtcGxhdGUhXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTXVsdGlU
aW1lckVsZW1lbnRzRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiT25seSBvbmUgdGltZXIg
ZWxlbWVudCBpcyBhbGxvd2VkIGluIGEgY2FyZCFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBNdWx0aUFjY2Vzc0VsZW1lbnRzRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cg
PSAiT25seSBvbmUgYWNjZXNzIGVsZW1lbnQgaXMgYWxsb3dlZCBpbiBhIGRlY2shXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV3JvbmdUYXNrSW5BbmNob3JFbGVtZW50RXJy
b3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhlIHRhc2sgY2FuJ3QgYmUgc3BlY2lmaWVkIGlu
IGFuIGFuY2hvciBlbGVtZW50IVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNl
IENvbmZsaWN0aW5nRXZlbnRCaW5kaW5nRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiQ29u
ZmxpY3RpbmcgZXZlbnQgYmluZGluZ3Mgd2l0aGluIGFuIGVsbWVudCFcbiI7CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSBJbnZhbGlkVmFyaWFibGVOYW1lRXJyb3I6CisgICAgICAg
ICAgICBlcnJNc2cgPSAiVGhlIHZhcmlhYmxlIG5hbWUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0
ZXJzIVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludmFsaWRWYXJpYWJs
ZVJlZmVyZW5jZUVycm9yOgorICAgICAgICAgICAgZXJyTXNnID0gIlRoZSB2YXJpYWJsZSByZWZl
cmVuY2UgdXNlcyBpbnZhbGlkIHN5bnRheCBvciBpcyBwbGFjZWQgaW4gaW52YWxpZCBsb2NhdGlv
biFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnZhbGlkQ29sdW1uc051
bWJlckZvclRhYmxlRXJycm9yOgorICAgICAgICAgICAgZXJyTXNnID0gIlRoZSBudW1iZXIgb2Yg
dGFibGUgY29sdW1ucyBpcyBpbnZhbGlkIVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIERvY1R5cGVEZWNsYXJhdGlvbk1pc3NFcnJvcjoKKyAgICAgICAgICAgIGVyck1zZyA9
ICJET0NUWVBFIGRlY2xhcmF0aW9uIGlzIG1pc3NlZCBiZWZvcmUgcm9vdCBlbGVtZW50IVxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
OworICAgIH0KKyAKKyAgICBoYW5kbGVFcnJvcihmYXRhbCwgZXJyTXNnLCBsaW5lTnVtYmVyKCks
IGNvbHVtbk51bWJlcigpKTsKKyAKKyAgICByZXBvcnRFcnJvcihOb0Vycm9yKTsKK30KKworfSAg
Ly9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS93bWwvV01MVG9rZW5pemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVG9rZW5pemVyLmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgV01MVG9rZW5pemVyX2gKKyNkZWZpbmUgV01MVG9rZW5pemVyX2gKKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNp
bmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5j
bHVkZSAiVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNpZm5kZWYgVVNFX1FY
TUxTVFJFQU0KKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI2luY2x1ZGUgPGxpYnhtbC94bWxz
dHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8UXRYbWwvcXhtbHN0cmVhbS5oPgorI2VuZGlmCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBlbnVtIFdNTEVycm9yQ29kZSB7IAorICAg
IE5vRXJyb3IgPSAwLCAKKyAgICBTYW1lTmFtZURvRWxlbWVudHNFcnJvciwKKyAgICBNdWx0aUFj
Y2Vzc0VsZW1lbnRzRXJyb3IsCisgICAgTXVsdGlUaW1lckVsZW1lbnRzRXJyb3IsCisgICAgV3Jv
bmdUYXNrSW5BbmNob3JFbGVtZW50RXJyb3IsCisgICAgQ29uZmxpY3RpbmdFdmVudEJpbmRpbmdF
cnJvciwKKyAgICBJbnZhbGlkVmFyaWFibGVOYW1lRXJyb3IsCisgICAgSW52YWxpZFZhcmlhYmxl
UmVmZXJlbmNlRXJyb3IsCisgICAgSW52YWxpZENvbHVtbnNOdW1iZXJGb3JUYWJsZUVycnJvciwK
KyAgICBEb2NUeXBlRGVjbGFyYXRpb25NaXNzRXJyb3IsCit9IFdNTEVycm9yQ29kZTsKKworY2xh
c3MgV01MVG9rZW5pemVyIDogcHVibGljIFhNTFRva2VuaXplciB7CitwdWJsaWM6CisgICAgV01M
VG9rZW5pemVyKERvY3VtZW50KiwgRnJhbWVWaWV3KiA9IDApOworICAgIH5XTUxUb2tlbml6ZXIo
KTsKKworCisgICAgLy8gZnJvbSBUb2tlbml6ZXIKKyAgICB2aXJ0dWFsIGJvb2wgd3JpdGUoY29u
c3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBlbmREYXRhID0gZmFsc2UpOworICAgIHZpcnR1
YWwgdm9pZCBmaW5pc2goKTsKKyAgICAKKyNpZmRlZiBVU0VfUVhNTFNUUkVBTQorICAgIHZvaWQg
V01MUGFyc2VTdGFydEVsZW1lbnQoKTsKKyAgICB2b2lkIFdNTFBhcnNlRW5kRWxlbWVudCgpOwor
I2VuZGlmCisKKyAgICB2b2lkIHJlcG9ydEVycm9yKFdNTEVycm9yQ29kZSk7CisgICAgYm9vbCBo
YXNFcnJvcigpIGNvbnN0OworICAgIHZvaWQgaGFuZGxlV01MRXJyb3IoV01MRXJyb3JDb2RlIGNv
ZGUgPSBOb0Vycm9yKTsKKworICAgIHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZChFbGVtZW50Kiwg
Y29uc3QgU3RyaW5nJik7Citwcml2YXRlOgorICAgIFdNTEVycm9yQ29kZSBtX2Vycm9yQ29kZTsK
K307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV01MVG9rZW5pemVy
X2gKSW5kZXg6IFdlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CShyZXZpc2lvbiAzNTc4MCkKKysrIFdl
YktpdFRvb2xzL1NjcmlwdHMvYnVpbGQtd2Via2l0CSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1
Myw3IEBAIG15ICRzdmdGb250c1N1cHBvcnQgPSAxOwogbXkgJHN2Z0FzSW1hZ2VTdXBwb3J0ID0g
MTsKIG15ICR4cGF0aFN1cHBvcnQgPSAxOwogbXkgJHhzbHRTdXBwb3J0ID0gMTsKK215ICR3bWxT
dXBwb3J0ID0gMDsKIG15ICRjb3ZlcmFnZVN1cHBvcnQgPSAwOwogbXkgJHZpZGVvU3VwcG9ydCA9
IChpc09TWCgpIHx8IGlzQ3lnd2luKCkpOyAjIEVuYWJsZSBieSBkZWZhdWx0IG9uIE9TWCBhbmQg
V2luZG93cwogbXkgJHNob3dIZWxwID0gMDsKQEAgLTgzLDYgKzg0LDcgQEAgVXNhZ2U6ICRwcm9n
cmFtTmFtZSBbb3B0aW9uc10gW29wdGlvbnMgdAogICAtLVtuby1dc3ZnLXVzZSAgICAgICAgICAg
ICAgICBUb2dnbGUgU1ZHIHVzZSBlbGVtZW50IHN1cHBvcnQgKGRlZmF1bHQ6ICRzdmdVc2VTdXBw
b3J0LCBpbXBsaWVzIFNWRyBTdXBwb3J0KQogICAtLVtuby1deHBhdGggICAgICAgICAgICAgICAg
ICBUb2dnbGUgWFBhdGggc3VwcG9ydCAoZGVmYXVsdDogJHhwYXRoU3VwcG9ydCkKICAgLS1bbm8t
XXhzbHQgICAgICAgICAgICAgICAgICAgVG9nZ2xlIFhTTFQgc3VwcG9ydCAoZGVmYXVsdDogJHhz
bHRTdXBwb3J0KQorICAtLVtuby1dd21sICAgICAgICAgICAgICAgICAgICBUb2dnbGUgV01MIHN1
cHBvcnQgKGRlZmF1bHQ6ICR3bWxTdXBwb3J0KQogICAtLVtuby1ddmlkZW8gICAgICAgICAgICAg
ICAgICBUb2dnbGUgVmlkZW8gc3VwcG9ydCAoZGVmYXVsdDogJHZpZGVvU3VwcG9ydCkKICAgLS1b
bm8tXWNvdmVyYWdlICAgICAgICAgICAgICAgVG9nZ2xlIGNvZGUgY292ZXJhZ2Ugc3VwcG9ydCAo
ZGVmYXVsdDogJGNvdmVyYWdlU3VwcG9ydCkKIEVPRgpAQCAtMTAxLDYgKzEwMyw3IEBAIEdldE9w
dGlvbnMoJ2RhdGFiYXNlIScgPT4gXCRkYXRhYmFzZVN1cHAKICAgICAgICAgICAgJ3N2Zy11c2Uh
JyA9PiBcJHN2Z1VzZVN1cHBvcnQsCiAgICAgICAgICAgICd4cGF0aCEnID0+IFwkeHBhdGhTdXBw
b3J0LAogICAgICAgICAgICAneHNsdCEnID0+IFwkeHNsdFN1cHBvcnQsCisgICAgICAgICAgICd3
bWwhJyA9PiBcJHdtbFN1cHBvcnQsCiAgICAgICAgICAgICd2aWRlbyEnID0+IFwkdmlkZW9TdXBw
b3J0LAogICAgICAgICAgICAnY292ZXJhZ2UhJyA9PiBcJGNvdmVyYWdlU3VwcG9ydCwKICAgICAg
ICAgICAgJ2hlbHAnID0+IFwkc2hvd0hlbHAsCkBAIC0xNjgsNiArMTcxLDcgQEAgcHVzaCBAb3Zl
cnJpZGVGZWF0dXJlRGVmaW5lc09wdGlvbiwgIkVOQQogcHVzaCBAb3ZlcnJpZGVGZWF0dXJlRGVm
aW5lc09wdGlvbiwgIkVOQUJMRV9WSURFTyIgaWYgJHZpZGVvU3VwcG9ydDsKIHB1c2ggQG92ZXJy
aWRlRmVhdHVyZURlZmluZXNPcHRpb24sICJFTkFCTEVfWFBBVEgiIGlmICR4cGF0aFN1cHBvcnQ7
CiBwdXNoIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVzT3B0aW9uLCAiRU5BQkxFX1hTTFQiIGlmICR4
c2x0U3VwcG9ydDsKK3B1c2ggQG92ZXJyaWRlRmVhdHVyZURlZmluZXNPcHRpb24sICJFTkFCTEVf
V01MIiBpZiAkd21sU3VwcG9ydDsKIG15ICRvdmVycmlkZUZlYXR1cmVEZWZpbmVzU3RyaW5nID0g
IkZFQVRVUkVfREVGSU5FUz0iIC4gam9pbigiICIsIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVzT3B0
aW9uKTsKIAogbXkgQGNvdmVyYWdlU3VwcG9ydE9wdGlvbiA9ICgpOwpAQCAtMjI1LDYgKzIyOSw3
IEBAIGlmIChpc0d0aygpKSB7CiAgICAgcHVzaCBAb3B0aW9ucywgYXV0b3Rvb2xzRmxhZygkc3Zn
VXNlU3VwcG9ydCwgInN2Zy11c2UtZWxlbWVudCIpOwogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90
b29sc0ZsYWcoJHhwYXRoU3VwcG9ydCwgInhwYXRoIik7CiAgICAgcHVzaCBAb3B0aW9ucywgYXV0
b3Rvb2xzRmxhZygkeHNsdFN1cHBvcnQsICJ4c2x0Iik7CisgICAgcHVzaCBAb3B0aW9ucywgYXV0
b3Rvb2xzRmxhZygkd21sU3VwcG9ydCwgIndtbCIpOwogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90
b29sc0ZsYWcoJHZpZGVvU3VwcG9ydCwgInZpZGVvIik7CiAgICAgcHVzaCBAb3B0aW9ucywgYXV0
b3Rvb2xzRmxhZygkY292ZXJhZ2VTdXBwb3J0LCAiY292ZXJhZ2UiKTsKIH0KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd21sL2JyLWVsZW1lbnQtaW4tdGFibGUud21sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd21sL2JyLWVsZW1lbnQtaW4tdGFibGUud21sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93bWwvYnItZWxlbWVudC1pbi10YWJsZS53bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdt
bCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZv
cnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iUGFyYWdyYXBo
cyI+CisgPHA+IFRoaXMgdGVzdCBjYXNlIGlzIHVzZWQgdG8gdGVzdCBiciBlbGVtZW50IGluIGEg
dGFibGUuIGVhY2ggY2VsbCBpcyBhbGlnbmVkIHRvIGxlZnQsIGFuZCB0aGUgQlIgd2lsbCBicmVh
ayB0aGUgInh4eHh4eHh4IiB0ZXh0IGluIHRoZSBsYXN0IHRkPC9wPgorIDx0YWJsZSBjb2x1bW5z
PSczJyBhbGlnbj0iTExMIj4KKyAgICA8dHI+CisgICAgIDx0ZCBpZD0iYzEiPkNlbGwgb25lPC90
ZD4KKyAgICAgPHRkIGlkPSJjMiI+Q2VsbCB0d288L3RkPgorICAgICA8dGQgaWQ9ImMzIj5jMzwv
dGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgIDx0ZCBpZD0iYSI+Y2VsbCBhPC90ZD4KKyAg
ICAgPHRkIGlkPSJiIj5jZWxsIGI8L3RkPgorICAgICA8dGQgaWQ9ImMiPnh4eHh4PGJyLz54eHg8
L3RkPgorICAgIDwvdHI+CisgPC90YWJsZT4KKyA8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9ici1lbGVtZW50LWluLXRleHQud21sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2Zhc3Qvd21sL2JyLWVsZW1lbnQtaW4tdGV4dC53bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9ici1lbGVtZW50LWluLXRleHQud21sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iUGFyYWdyYXBocyI+
CisgPHA+IFRoaXMgdGVzdCBjYXNlIGlzIHVzZWQgdG8gdGVzdCBiciBlbGVtZW50IGluIHRleHQ8
L3A+CisgIFRoaXMgaXMgYSBwaWVjZSBvZiB0ZXh0IDxici8+d2l0aCBhIGxpbmUgYnJlYWsKKyA8
L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9jYXJkLWVsZW1lbnQu
d21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2NhcmQtZWxlbWVudC53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9jYXJkLWVsZW1lbnQud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NU
WVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMC8vRU4iCisiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJjYXJk
MSIgdGl0bGU9IkNhcmQgMSI+VGhpcyBpcyBjYXJkIG9uZTwvY2FyZD4KKzxjYXJkIGlkPSJjYXJk
MiIgdGl0bGU9IkNhcmQgMiI+VGhpcyBpcyBjYXJkIHR3bzwvY2FyZD4KKzwvd21sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93bWwvY2FzZS1zZW5zaXRpdml0eS53bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93bWwvY2FzZS1zZW5zaXRpdml0eS53bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9jYXNlLXNlbnNpdGl2aXR5LndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0nY2FyZDEnPgorIDxwPiBU
ZXN0IGZvciBDYXNlIHNlbnNpdGl2aXR5IGluIFdNTCA8L3A+CisgPHA+IGNvbXBhcmUgdGhlIHJl
c3VsdCBvZiBpbnNlcnRpbmcgJmx0O2JyLyZndDsgYW5kICZsdDtCUi8mZ3Q7IGludG8gdGhlIHNh
bWUgdGV4dCwgPGJyLz50aGUgZm9ybWVyIHNob3VsZCB3b3JrLCBhbmQgdGhlIGxhdHRlciBkb2Vz
bid0LjwvcD4KKyA8dGFibGUgYm9yZGVyPSIxIj4KKyA8dHI+PHRkPlRlc3QgY2FzZSA8YnIvPnNl
bnNpdGl2aXR5IGluIFdNTCA8L3RkPjwvdHI+CisgPHRyPjx0ZD5UZXN0IGNhc2UgPEJSLz5zZW5z
aXRpdml0eSBpbiBXTUwgPC90ZD48L3RyPgorIDwvdGFibGU+CisgPC9jYXJkPgorPC93bWw+CisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2NkYXRhLXNlY3Rpb24ud21sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2NkYXRhLXNlY3Rpb24ud21sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93bWwvY2RhdGEtc2VjdGlvbi53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0nY2FyZDEnPgorIDxwPiBUZXN0
IGZvciBDREFUQSBTZWN0aW9uIGluIFdNTDxici8+IElmIGl0IHBhc3NlcywgeW91IGNhbiBzZWUg
dGhlIGZvbGxvd2luZyB0ZXh0IDogPC9wPgorIDwhW0NEQVRBWyBUaGlzIGlzIDxCPiBhIENEQVRB
IHRlc3RdXT4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Nv
bW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2NvbW1lbnQud21s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvY29tbWVudC53bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBF
IHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3Lndh
cGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0iY2FyZDEiIHRp
dGxlPSJDYXJkIDEiPgorICA8cD4gVGVzdCBjb21tZW50IGluIFdNTCwgdGhlIHRleHQgaW4gdGhl
IGNvbW1lbnQgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQsIGlmIGl0IHBhc3NlcywgeW91IGNhbiBv
bmx5IHNlZSB0aGUgdGV4dDogIkhlbGxvIFdvcmxkISIgYWZ0ZXIgdGhpcyBsaW5lIDwvcD4KKyAg
PHA+CisgICAgPCEtLSBUaGlzIGlzIGEgY29tbWVudCAsIGl0IHNob3VsZCBub3QgYmUgZGlzcGxh
eWVkLS0+CisgICAgSGVsbG8gV29ybGQhCisgIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLWVsZW1lbnQtb3B0aW9uYWwtYXR0ci53bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZG8tZWxlbWVudC1vcHRpb25hbC1hdHRyLndt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLWVsZW1lbnQtb3B0aW9u
YWwtYXR0ci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8v
RU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8
Y2FyZCBpZD0iZmlyc3RjYXJkIiB0aXRsZT0iT25lIj4KKyAgPHA+VGVzdCBmb3IgZG8gZWxlbWVu
dCBpbiBXTUwgPC9wPgorICA8cD4gVGhlcmUgYXJlIHR3byBkbyBlbGVtZW50IGluIHRoaXMgY2Fy
ZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGRpc3BsYXksIHRoZSBzZWNvbmQgd29uJ3QgYmVjYXVzZSBp
dHMgb3B0aW9uYWwgYXR0cmlidXRlIGlzIHRydWU8L3A+CisgIDxkbyBuYW1lPSJnbyIgdHlwZT0i
YWNjZXB0IiBsYWJlbD0iRG8gMSIgb3B0aW9uYWw9ImZhbHNlIj4KKyAgPGdvIGhyZWY9IiN0aGly
ZGNhcmQiLz4KKyAgPC9kbz4KKyAgPGRvIG5hbWU9ImdvMiIgdHlwZT0iYWNjZXB0IiBsYWJlbD0i
RG8gMiIgb3B0aW9uYWw9InRydWUiPgorICA8Z28gaHJlZj0iI3NlY29uZGNhcmQiLz4KKyAgPC9k
bz4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0ic2Vjb25kY2FyZCIgdGl0bGU9IlR3byI+CisgIDxw
PlRoaXMgaXMgdGhlIHNlY29uZCBjYXJkPC9wPgorIDwvY2FyZD4KKworIDxjYXJkIGlkPSJ0aGly
ZGNhcmQiIHRpdGxlPSJUaHJlZSI+CisgIDxwPlRoaXMgaXMgdGhlIHRoaXJkIGNhcmQ8L3A+Cisg
PC9jYXJkPgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLXNoYWRvdy53
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZG8tc2hhZG93LndtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLXNoYWRvdy53bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdt
bCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZv
cnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZT4KKzxkbyB0eXBlPSJh
Y2NlcHQiIG5hbWU9ImRvMSIgbGFiZWw9IlRlbXBsYXRlIERvIj4KKzxwcmV2Lz4KKzwvZG8+Cis8
L3RlbXBsYXRlPgorCis8Y2FyZCBpZD0iZmlyc3QiPgorPHA+IFRlc3QgZm9yIGRvLXNoYWRvdyBp
biBXTUw8L3A+Cis8cD5UaGlzIGlzIGZpcnN0IGNhcmQsIHdoaWNoIHdvbid0IHNoYWRvdyBkZWNr
LWxldmVsIGRvPC9wPgorPGFuY2hvcj4KKzxnbyBocmVmPSIjc2Vjb25kIj5HbyB0byBjYXJkIDI8
L2dvPgorPC9hbmNob3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJzZWNvbmQiPgorPHA+ZGVjay1s
ZXZlbCBkbyBpcyBzaGFkb3dlZCB3aXRoIG5vb3AuIEl0IGlzIG5vdCBleHBvc2VkIHRvIHRoZSB1
c2VyIDwvcD4KKzxkbyB0eXBlPSJvcHRpb25zIiBuYW1lPSJkbzEiIGxhYmVsPSJzZWNvbmQgZG8i
PgorPG5vb3AvPgorPC9kbz4KKzxhbmNob3I+Cis8Z28gaHJlZj0iI3RoaXJkIj5HbyB0byBjYXJk
IDM8L2dvPgorPC9hbmNob3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJ0aGlyZCI+Cis8cD5kZWNr
LWxldmVsIGRvIGlzIHNoYWRvd2VkLiBJdCBpcyByZXBsYWNlZCBieSBhIGNhcmQtbGV2ZWwgZG8g
YmVjYXVzZSB0aGV5IGhhdmUgdGhlIHNhbWUgbmFtZTwvcD4KKzxwPgorPGRvIHR5cGU9Im9wdGlv
bnMiIG5hbWU9ImRvMSIgbGFiZWw9ImRvMSI+Cis8Z28gaHJlZj0iLi90ZXN0LndtbCIvPgorPC9k
bz4KKzxici8+Cis8YW5jaG9yPgorPGdvIGhyZWY9IiNmaXJzdCI+R28gdG8gY2FyZCAxPC9nbz4K
KzwvYW5jaG9yPgorPC9wPgorPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvd21sL2RvLXRlbXBsYXRlLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9kby10ZW1wbGF0ZS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9k
by10ZW1wbGF0ZS53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEu
MS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4K
Kzx0ZW1wbGF0ZSBpZD0iMiI+Cis8ZG8gbmFtZT0iZ28iIHR5cGU9ImFjY2VwdCIgbGFiZWw9IlRl
bXBsYXRlIGRvIj4KKzxnbyBocmVmPSIjZmlyc3RjYXJkIi8+Cis8L2RvPgorPC90ZW1wbGF0ZT4K
KyA8Y2FyZCBpZD0iZmlyc3RjYXJkIiB0aXRsZT0iT25lIj4KKyA8cD4gVGVzdCBmb3IgZG8gZWxl
bWVudCBpbiB0ZW1wbGF0ZSBpbiBXTUw8L3A+CisgPHA+IFdoaWNoZXZlciBjYXJkIHlvdSBlbnRl
cmVkLCB5b3UgY2FuIHNlZSB0aGUgdGVtcGxhdGUgZG8gYnV0dG9uIGJlY2F1c2UgaXQncyBnbG9i
YWw8L3A+CisgIDxwPlRoaXMgaXMgdGhlIGZpcnN0IGNhcmQ8L3A+CisgIDxwPjxhbmNob3I+PGdv
IGhyZWY9IiNzZWNvbmRjYXJkIi8+R28gdG8gY2FyZDI8L2FuY2hvcj48L3A+CisgPC9jYXJkPgor
CisgPGNhcmQgaWQ9InNlY29uZGNhcmQiIHRpdGxlPSJUd28iPgorIDxwPiBUZXN0IGZvciBkbyBl
bGVtZW50IGluIHRlbXBsYXRlIGluIFdNTDwvcD4KKyA8cD4gV2hpY2hldmVyIGNhcmQgeW91IGVu
dGVyZWQsIHlvdSBjYW4gc2VlIHRoZSB0ZW1wbGF0ZSBkbyBidXR0b24gYmVjYXVzZSBpdCdzIGds
b2JhbDwvcD4KKyAgPHA+VGhpcyBpcyB0aGUgc2Vjb25kIGNhcmQgPC9wPgorICA8YW5jaG9yPkdv
IHRvIGNhcmQgMworICA8Z28gaHJlZj0iI3RoaXJkY2FyZCIvPgorICA8L2FuY2hvcj4KKyA8L2Nh
cmQ+CisKKyA8Y2FyZCBpZD0idGhpcmRjYXJkIiB0aXRsZT0iVGhyZWUiPgorIDxwPiBUZXN0IGZv
ciBkbyBlbGVtZW50IGluIHRlbXBsYXRlIGluIFdNTDwvcD4KKyA8cD4gV2hpY2hldmVyIGNhcmQg
eW91IGVudGVyZWQsIHlvdSBjYW4gc2VlIHRoZSB0ZW1wbGF0ZSBkbyBidXR0b24gYmVjYXVzZSBp
dCdzIGdsb2JhbDwvcD4KKyAgPHA+VGhpcyBpcyB0aGUgdGhpcmQgY2FyZDwvcD4KKyAgPGFuY2hv
cj5CYWNrPHByZXYvPjwvYW5jaG9yPgorIDwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93bWwvZW50aXR5LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9lbnRpdHkud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvZW50aXR5
LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJo
dHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQg
aWQ9Im5vMSIgdGl0bGU9IlRlc3QgZW50aXR5Ij4KKzxwPlRlc3QgZm9yIEVudGl0aWVzIGluIFdN
TCBwYWdlPC9wPgorJnF1b3Q7ICAgICAgICYjMzQ7Cis8YnIvPgorJmFtcDsgICAgICAgICYjMzg7
Cis8YnIvPgorJmFwb3M7ICAgICAgICYjeDI3OworPGJyLz4KKyZsdDsgICAgICAgICAmIzYwOwor
PGJyLz4KKyZndDsgICAgICAgICAmIzYyOworPGJyLz4KKz0mbmJzcDs9JiMxNjA7PQorPGJyLz4K
K0FBJnNoeTtBQSYjMTczO0FBCis8YnIvPiAKKzxwPiAmbHQ7aGVsbG8mZ3Q7IDwvcD4KKzwvY2Fy
ZD4KKworPGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iJChjYXJkaWQpIHRpdGxlIj5UaGlzIGlzIGNh
cmQgMjwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWV2ZW50
LWJpbmRpbmctY29uZmxpY3Qud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2Vyci1ldmVudC1iaW5kaW5nLWNvbmZsaWN0LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3Qvd21sL2Vyci1ldmVudC1iaW5kaW5nLWNvbmZsaWN0LndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSI+CisgIDxvbmV2
ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKyAgPHJlZnJlc2gvPgorICA8L29uZXZlbnQ+Cisg
IDxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKyAgPHByZXYvPgorICA8L29uZXZlbnQ+
CisgIDxwPiBUZXN0IGZvciB0aGUgZXJyb3IgZXZlbnQtYmluZGluZyBjb25mbGljdDwvcD4KKyAg
WW91IHNob3VsZCBOT1Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgZXZl
bnQtYmluZGluZyBlcnJvciBpbiBjYXJkIGVsZW1lbnQgCis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlkLWxvY2F0aW9uLWZvci12YXJyZWYud21s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlkLWxvY2F0aW9u
LWZvci12YXJyZWYud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJy
LWludmFsaWQtbG9jYXRpb24tZm9yLXZhcnJlZi53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dB
UEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dt
bF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJubzEiIHRpdGxlPSJDYXJkIDEiPiAKKzxw
PiBUZXN0IGZvciB2YXJpYWJsZSByZWZlcmVuY2UgdmFsaWRhdGlvbjwvcD4KKzxwPiBBbiBlcnJv
ciB3aWxsIG9jY3VyIHdoZW4gbG9hZGluZyB0aGUgY2FyZCBiZWNhdXNlIHRoZSB2YXJpYWJsZSBy
ZWZlcmVuY2UgaXMgcGxhY2VkIGluIGEgaW52YWxpZCBsb2NhdGlvbjwvcD4KKzxkbyB0eXBlPSIk
KHZhcikiIG5hbWU9InJlZnJlc2giPgorICA8cmVmcmVzaD4KKyAgICA8c2V0dmFyIG5hbWU9InZh
ciIgdmFsdWU9InZhcmFpYmxlMiIvPgorICA8L3JlZnJlc2g+Cis8L2RvPgorPC9jYXJkPgorPC93
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItaW52YWxpZC10YWJsZWNvbHVtbi1u
dW1iZXIud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlk
LXRhYmxlY29sdW1uLW51bWJlci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9lcnItaW52YWxpZC10YWJsZWNvbHVtbi1udW1iZXIud21sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElD
ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3Jn
L0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0ibm8xIiB0aXRsZT0iQ2FyZCAx
Ij4gCis8cD4gVGVzdCBmb3IgdGFibGUgY29sdW1uIG51bWJlciB2YWxpZGF0aW9uIDwvcD4KKzxw
PiBUaGUgdGFibGUgd29uJ3QgYmUgZGlzcGxheWVkIGJlY2F1c2Ugb2YgdGhlIGludmFsaWQgY29s
dW1ucyBhdHRydWlidGUgb2YgdGFibGUgZWxlbWVudDwvcD4KKzx0YWJsZSBjb2x1bW5zPSIwIj4K
Kzx0cj48dGQ+Q2VsbCAxPC90ZD48dGQ+Q2VsbCAyPC90ZD48L3RyPgorPC90YWJsZT4KKzwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWludmFsaWQtdmFyaWFi
bGUtbmFtZS53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWludmFs
aWQtdmFyaWFibGUtbmFtZS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9lcnItaW52YWxpZC12YXJpYWJsZS1uYW1lLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQ
Rk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21s
XzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9Im5vMSIgdGl0bGU9IkNhcmQgMSI+IAorPHA+
IFRlc3QgZm9yIHZhcmlhYmxlIG5hbWUgdmFsaWRhdGlvbiA8L3A+Cis8ZG8gdHlwZT0iYWNjZXB0
IiBuYW1lPSJyZWZyZXNoIj4KKyAgPHJlZnJlc2g+CisgICAgPHNldHZhciBuYW1lPSIkK3ZhciIg
dmFsdWU9InZhcmFpYmxlMiIvPgorICA8L3JlZnJlc2g+Cis8L2RvPgorPC9jYXJkPgorPC93bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktYWNjZXNzLndtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktYWNjZXNzLndtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0aS1hY2Nlc3Mud21sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZ
UEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGhlYWQ+Cis8YWNjZXNzIHBh
dGg9Ii8iIGRvbWFpbj0iZG9tYWluIi8+Cis8YWNjZXNzIHBhdGg9Ii9wYXRoIiBkb21haW49ImRv
bWFpbiIvPgorPC9oZWFkPgorPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPHA+IFRlc3QgZm9yIG11bHRp
LWFjY2VzcyBlcnJvcjwvcD4KKyAgWW91IHNob3VsZCBub3Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVz
ZSBvZiB0aGUgZXJyb3Igb2YgbXVsdGktYWNjZXNzIGluIGhlYWQgZWxlbWVudAorPC9jYXJkPgor
PC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktaHR0cC1lcXVpdi1p
bi1tZXRhLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGkt
aHR0cC1lcXVpdi1pbi1tZXRhLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d21sL2Vyci1tdWx0aS1odHRwLWVxdWl2LWluLW1ldGEud21sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50
LVR5cGUiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgQ29udGVudD0idGV4dC92bmQud2FwLndt
bDsgQ2hhcnNldD1nYjIzMTIiLz4KKzwvaGVhZD4KKyA8Y2FyZCBpZD0iY2FyZDEiPgorICA8cD4g
VGVzdCBmb3IgbWV0YSBtdWx0aS1odHRwLWVxdWl2IGVycm9yPC9wPgorICBZb3Ugc2hvdWxkIG5v
dCBzZWUgdGhpcyB0ZXh0LCBiZWNhdXNlIG9mIHRoZSBlcnJvciBvZiBtdWx0aS1odHRwLWVxdWl2
IGluIG1ldGEgZWxlbWVudAorIDwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93bWwvZXJyLW11bHRpLW5hbWUtaW4tbWV0YS53bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93bWwvZXJyLW11bHRpLW5hbWUtaW4tbWV0YS53bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktbmFtZS1pbi1tZXRhLndtbAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdt
bCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZv
cnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0iQ29u
dGVudC1UeXBlIiBuYW1lPSJDb250ZW50LVR5cGUiIENvbnRlbnQ9InRleHQvdm5kLndhcC53bWw7
IENoYXJzZXQ9Z2IyMzEyIi8+Cis8L2hlYWQ+CisgPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPHA+IFRl
c3QgZm9yIG1ldGEgbXVsdGktbmFtZSBlcnJvcjwvcD4KKyAgWW91IHNob3VsZCBub3Qgc2VlIHRo
aXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgbXVsdGktbmFtZSBpbiBtZXRhIGVsZW1l
bnQKKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0
aS10aW1lci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLW11bHRp
LXRpbWVyLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0
aS10aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cisg
PGNhcmQgaWQ9ImNhcmQxIiBvbnRpbWVyPSJ0ZXN0LndtbCI+CisgPHRpbWVyIGlkPSJ0aW1lcjEi
IG5hbWU9InQxIiB2YWx1ZT0iMjAiLz4KKyA8dGltZXIgaWQ9InRpbWVyMiIgbmFtZT0idDIiIHZh
bHVlPSIzMCIvPgorICA8cD4gVGVzdCBmb3IgZXJyb3Igb2YgbWV0YSBtdWx0aS10aW1lciBpbiBv
bmUgY2FyZCA8L3A+CisgIFlvdSBzaG91bGQgTk9UIHNlZSB0aGlzIHRleHQsIGJlY2F1c2Ugb2Yg
dGhlIGVycm9yIHRoYXQgbW9yZSB0aGFuIG9uZSB0aW1lciBleGlzdCBpbiBvbmUgY2FyZCAKKyA8
L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1zYW1lbmFtZS1k
by53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLXNhbWVuYW1lLWRv
LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1zYW1lbmFtZS1k
by53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIg
Pz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAi
aHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCBp
ZD0iY2FyZDEiPgorICA8ZG8gbmFtZT0iZG8iIHR5cGU9ImFjY2VwdCI+CisgIDxyZWZyZXNoLz4K
KyAgPC9kbz4KKyAgPGRvIG5hbWU9ImRvIiB0eXBlPSJhY2NlcHQiPgorICA8cmVmcmVzaC8+Cisg
IDwvZG8+CisgIDxwPiBUZXN0IGZvciB0aGUgZXJyb3IgdGhhdCBtb3JlIHRoYW4gb25lIGRvIGVs
ZW1lbnQgaGFzIHNhbWUgbmFtZTwvcD4KKyAgWW91IHNob3VsZCBOT1Qgc2VlIHRoaXMgdGV4dCwg
YmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgbmFtZS1jb25mbGljdCBvZiBkbyBlbGVtZW50IAorPC9j
YXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItdW5hbGxvd2VkLXRh
c2staW4tYW5jaG9yLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnIt
dW5hbGxvd2VkLXRhc2staW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd21sL2Vyci11bmFsbG93ZWQtdGFzay1pbi1hbmNob3Iud21sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPGFuY2hv
cj4KKyAgPG5vb3AvPgorICA8L2FuY2hvcj4KKyAgPHA+IFRlc3QgZm9yIHRoZSBlcnJvciB0aGF0
IHNwZWNpZnlpbmcgbm9vcCB0YXNrIHRvIGFuY2hvciBlbGVtZW50PC9wPgorICBZb3Ugc2hvdWxk
IE5PVCBzZWUgdGhpcyB0ZXh0LCBiZWNhdXNlIG9mIHRoZSBlcnJvciB0aGF0IHNwZWNpZnlpbmcg
dW5hbGxvd2VkIHRhc2sgdG8gYW5jaG9yIGVsZW1lbnQgCis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1sb2NhbHNyYy53bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW1nLWxvY2Fsc3JjLndtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd21sL2ltZy1sb2NhbHNyYy53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dB
UEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21s
XzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iVGVzdCBpbWFnZSI+CisgPHA+IFRlc3Qg
Zm9yIGltZyBlbGVtZW50IGluIFdNTCA8L3A+CisgPHA+IFRoaXMgaW1hZ2UgaXMgc3BlY2lmaWVk
IGJ5IGxvY2Fsc3JjIGF0dHJpYnV0ZSBvZiBpbWcgZWxlbWVudDwvcD4KKyB0ZXN0IGNvZGU6PCFb
Q0RBVEFbCisgPHA+TG9jYWw8aW1nIGhlaWdodD0iNjAiIHdpZHRoPSI0MCIgdnNwYWNlPSI0MCIg
aHNwYWNlPSI2MCIgYWxpZ249Im1pZGRsZSIgbG9jYWxzcmM9InJlc291cmNlcy9zbWlsZS5naWYi
IGFsdD0ic21pbGUiLz5JbWFnZTwvcD4KKyBdXT4KKyA8YnIvPgorIDxwPkxvY2FsPGltZyBoZWln
aHQ9IjYwIiB3aWR0aD0iNDAiIHZzcGFjZT0iNDAiIGhzcGFjZT0iNjAiIGFsaWduPSJtaWRkbGUi
IGxvY2Fsc3JjPSJyZXNvdXJjZXMvc21pbGUuZ2lmIiBhbHQ9InNtaWxlIi8+SW1hZ2U8L3A+Cisg
PC9jYXJkPgorPC93bWw+IApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW1nLXNyYy1sb2Nh
bHNyYy1hbHQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1zcmMt
bG9jYWxzcmMtYWx0LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2lt
Zy1zcmMtbG9jYWxzcmMtYWx0LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RU
RCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+
Cis8d21sPgorIDxjYXJkIHRpdGxlPSJUZXN0IGltYWdlIj4KKyA8cD4gVGVzdCBmb3IgaW1nIGVs
ZW1lbnQgaW4gV01MIDwvcD4KKyA8cD4gVGhpcyBpbWFnZSBjYW4gYmUgc3BlY2lmaWVkIGJ5IGJv
dGggc3JjIGFuZCBsb2NhbHNyYyBhdHRyaWJ1dGVzIG9mIGltZyBlbGVtZW50PC9wPgorIDxwPiAx
KSBsb2NhbHNyYyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgc3JjIGF0dHJpYnV0ZSA8YnIvPgorIElt
YWdlPGltZyBzcmM9Imh0dHA6Ly93d3cuYmFpZHUuY29tL2ltZy9iYWlkdS5naWYiIGxvY2Fsc3Jj
PSJyZXNvdXJjZXMvc21pbGUuZ2lmIiBhbHQ9IklNQUdFIi8+SW1hZ2UKKyA8YnIvPgorIDIpIGxv
Y2Fsc3JjIGNhbid0IGxvY2F0ZSB0aGUgaW1hZ2UsIHNyYyB3b3JrcyA8YnIvPgorIEltYWdlPGlt
ZyBzcmM9Imh0dHA6Ly93d3cuYmFpZHUuY29tL2ltZy9iYWlkdS5naWYiIGxvY2Fsc3JjPSJ3cm9u
Z3BhdGgvc21pbGUuZ2lmIiBhbHQ9IklNQUdFIi8+SW1hZ2UKKyA8YnIvPgorIDMpIG5laXRoZXIg
bG9jYWxzcmMgbm9yIHNyYyBjYW4gbG9jYXRlIHRoZSBpbWFnZSwgYWx0IHdvcmtzIDxici8+Cisg
SW1hZ2U8aW1nIHNyYz0iaHR0cDovL3d3dy5iYWlkdS5jb20vd3JvbmdwYXRoL2JhaWR1LmdpZiIg
bG9jYWxzcmM9Indyb25ncGF0aC9zbWlsZS5naWYiIGFsdD0iSU1BR0UiLz5JbWFnZQorIDwvcD4K
KyA8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbWctc3JjLndt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbWctc3JjLndtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1zcmMud21sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVC
TElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5v
cmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IlRlc3QgaW1hZ2UiPgor
IDxwPiBUZXN0IGZvciBpbWcgZWxlbWVudCBpbiBXTUwgPC9wPgorIDxwPiBUaGlzIGltYWdlIGlz
IHNwZWNpZmllZCBieSBzcmMgYXR0cmlidXRlIG9mIGltZyBlbGVtZW50PC9wPgorIHRlc3QgY29k
ZTo8IVtDREFUQVsKKyA8cD5OZXR3b3JrIDxpbWcgaGVpZ2h0PSI2MCIgd2lkdGg9IjQwIiB2c3Bh
Y2U9IjQwIiBoc3BhY2U9IjYwIiBhbGlnbj0ibWlkZGxlIiBzcmM9Imh0dHA6Ly93YXAuYmFpZHUu
Y29tL2xvZ28uZ2lmIiBhbHQ9InNtaWxlIi8+SW1hZ2U8L3A+CisgXV0+CisgPGJyLz4KKyA8cD5O
ZXR3b3JrIDxpbWcgaGVpZ2h0PSI2MCIgd2lkdGg9IjQwIiB2c3BhY2U9IjQwIiBoc3BhY2U9IjYw
IiBhbGlnbj0ibWlkZGxlIiBzcmM9Imh0dHA6Ly93YXAuYmFpZHUuY29tL2xvZ28uZ2lmIiBhbHQ9
InNtaWxlIi8+SW1hZ2U8L3A+CisgPC9jYXJkPgorPC93bWw+IApJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93bWwvcC1hbGlnbi53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwv
cC1hbGlnbi53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9wLWFsaWdu
LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0
dHA6Ly93d3cud2FwZm91cm0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBp
ZD0iY2FyZDEiIHRpdGxlPSJDYXJkMSI+Cis8cD4gVGVzdCBmb3IgYWxpZ24gYXR0cmlidXRlIG9m
IHAgZWxlbWVudCBpbiBXTUwgPC9wPgorPGJyLz4KKzwhW0NEQVRBWyA8cCBhbGlnbj0iY2VudGVy
Ij5dXT4KKzxwIGFsaWduPSJjZW50ZXIiPgorSGVyZSB5b3UgY2FuIGxlYXJuIHZhcmlvdXMgbW9i
aWxlIHRlY2hub2xvZ2llcyBsaWtlIFdBUCAvIFdBUCAyLjAsIFdNTCwgV01MU2NyaXB0LCBYSFRN
TCBNUCwgV0NTUyAvIFdBUCBDU1MsIFVBUHJvZiBhbmQgU01TIHRocm91Z2ggb3VyIGZyZWUgdHV0
b3JpYWxzLCBhcnRpY2xlcyBhbmQgZXhhbXBsZXMuIFRoaXMgd2ViIHNpdGUgY2FuIGhlbHAgd2Vi
IHByb2dyYW1tZXJzIHdobyB3aXNoIHRvIGV4dGVuZCB0aGVpciBrbm93bGVkZ2UgdG8gdGhlIHdp
cmVsZXNzIHdvcmxkLiAKKzxici8+Cit4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAor
PC9wPgorPGJyLz4KKzwhW0NEQVRBWyA8cCBhbGlnbj0icmlnaHQiPl1dPgorPHAgYWxpZ249InJp
Z2h0Ij4KK0hlcmUgeW91IGNhbiBsZWFybiB2YXJpb3VzIG1vYmlsZSB0ZWNobm9sb2dpZXMgbGlr
ZSBXQVAgLyBXQVAgMi4wLCBXTUwsIFdNTFNjcmlwdCwgWEhUTUwgTVAsIFdDU1MgLyBXQVAgQ1NT
LCBVQVByb2YgYW5kIFNNUyB0aHJvdWdoIG91ciBmcmVlIHR1dG9yaWFscywgYXJ0aWNsZXMgYW5k
IGV4YW1wbGVzLiBUaGlzIHdlYiBzaXRlIGNhbiBoZWxwIHdlYiBwcm9ncmFtbWVycyB3aG8gd2lz
aCB0byBleHRlbmQgdGhlaXIga25vd2xlZGdlIHRvIHRoZSB3aXJlbGVzcyB3b3JsZC4gCis8YnIv
PgoreHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKKzwvcD4KKzxici8+Cis8IVtDREFU
QVsgPHAgYWxpZ249ImxlZnQiPl1dPgorPHAgYWxpZ249ImxlZnQiPgorSGVyZSB5b3UgY2FuIGxl
YXJuIHZhcmlvdXMgbW9iaWxlIHRlY2hub2xvZ2llcyBsaWtlIFdBUCAvIFdBUCAyLjAsIFdNTCwg
V01MU2NyaXB0LCBYSFRNTCBNUCwgV0NTUyAvIFdBUCBDU1MsIFVBUHJvZiBhbmQgU01TIHRocm91
Z2ggb3VyIGZyZWUgdHV0b3JpYWxzLCBhcnRpY2xlcyBhbmQgZXhhbXBsZXMuIFRoaXMgd2ViIHNp
dGUgY2FuIGhlbHAgd2ViIHByb2dyYW1tZXJzIHdobyB3aXNoIHRvIGV4dGVuZCB0aGVpciBrbm93
bGVkZ2UgdG8gdGhlIHdpcmVsZXNzIHdvcmxkLiAKKzxici8+Cit4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eAorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9wLW1vZGUud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL3At
bW9kZS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9wLW1vZGUud21s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwh
RE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDov
L3d3dy53YXBmb3VybS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJj
YXJkMSIgdGl0bGU9IkNhcmQxIj4gCis8IVtDREFUQVsgPHA+IGRlZmF1bHQgbW9kZSBpcyAid3Jh
cCIgZm9yIHRoZSBmaXJzdCBwIGVsZW1lbnQgXV0+Cis8cD4gVGVzdCBmb3IgbW9kZSBhdHRyaWJ1
dGUgb2YgcCBlbGVtZW50IGluIFdNTCA8L3A+Cis8YnIvPgorPCFbQ0RBVEFbIDxwPiBpdCB3aWxs
IHVzZSB0aGUgbW9kZSBvZiBwcmV2aW91cyBwYXJhZ3JhcGggZWxlbWVudF1dPgorPHA+CitIZXJl
IHlvdSBjYW4gbGVhcm4gdmFyaW91cyBtb2JpbGUgdGVjaG5vbG9naWVzIGxpa2UgV0FQIC8gV0FQ
IDIuMCwgV01MLCBXTUxTY3JpcHQsIFhIVE1MIE1QLCBXQ1NTIC8gV0FQIENTUywgVUFQcm9mIGFu
ZCBTTVMgdGhyb3VnaCBvdXIgZnJlZSB0dXRvcmlhbHMsIGFydGljbGVzIGFuZCBleGFtcGxlcy4g
VGhpcyB3ZWIgc2l0ZSBjYW4gaGVscCB3ZWIgcHJvZ3JhbW1lcnMgd2hvIHdpc2ggdG8gZXh0ZW5k
IHRoZWlyIGtub3dsZWRnZSB0byB0aGUgd2lyZWxlc3Mgd29ybGQuIAorPGJyLz4KK0hISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgKKzwvcD4KKzxici8+Cis8
IVtDREFUQVsgPHAgbW9kZT0ibm93cmFwIj5dXT4KKzxwIG1vZGU9Im5vd3JhcCI+CitIZXJlIHlv
dSBjYW4gbGVhcm4gdmFyaW91cyBtb2JpbGUgdGVjaG5vbG9naWVzIGxpa2UgV0FQIC8gV0FQIDIu
MCwgV01MLCBXTUxTY3JpcHQsIFhIVE1MIE1QLCBXQ1NTIC8gV0FQIENTUywgVUFQcm9mIGFuZCBT
TVMgdGhyb3VnaCBvdXIgZnJlZSB0dXRvcmlhbHMsIGFydGljbGVzIGFuZCBleGFtcGxlcy4gVGhp
cyB3ZWIgc2l0ZSBjYW4gaGVscCB3ZWIgcHJvZ3JhbW1lcnMgd2hvIHdpc2ggdG8gZXh0ZW5kIHRo
ZWlyIGtub3dsZWRnZSB0byB0aGUgd2lyZWxlc3Mgd29ybGQuIAorPGJyLz4KK0hISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgKKzwvcD4KKzwvY2FyZD4KKzwv
d21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvc2hvdy1maXJzdC1jYXJkLndtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9zaG93LWZpcnN0LWNhcmQud21sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvc2hvdy1maXJzdC1jYXJkLndtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQ
RSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIgorImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0ibm8xIj48
cD5UZXN0IGZvciBzaG93aW5nIHRoZSBmaXJzdCBjYXJkIG9mIHdtbCBkZWNrIGluIGRlZmF1bHQg
d2hlbiB5b3UgZG9lc24ndCBzcGVjaWZ5IGFueSBjb3JyZWN0IFVSTCBmcmFnbWVudC48L3A+IElm
IHRoZSB0ZXN0IHBhc3NlcywgeW91IHNob3VsZCBzZWUgdGhpcyB0ZXh0LjwvY2FyZD4KKzxjYXJk
IGlkPSJubzIiPlRoaXMgaXMgY2FyZCAyLCB5b3Ugc2hvdWxkIE5PVCBzZWUgdGhlc2UgdGV4dCB3
aGlsZSBydW5uaW5nIHRoaXMgdGVzdDwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93bWwvdGFibGUtZWxlbWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93bWwvdGFibGUtZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC90YWJsZS1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNyBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RU
RCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+
Cis8d21sPgorIDxjYXJkPgorIDxwPiBUZXN0IGZvciB0YWJsZSBlbGVtZW50IGluIFdNTCA8L3A+
CisgPHA+IHNvdXJjZSBjb2RlOiA8L3A+CisgPCFbQ0RBVEFbCisgICA8dGFibGUgY29sdW1ucz0i
MyIgYWxpZ249IkxSUiI+IAorICAgIDx0cj4KKyAgICAgPHRkPkNlbGwgb25lPC90ZD4KKyAgICAg
PHRkPkM8YnIvPmVsbDxici8+IHR3bzwvdGQ+CisgICAgIDx0ZD5DZWxsIHRocmVlPC90ZD4KKyAg
ICA8L3RyPgorICAgIDx0cj4KKyAgICA8dGQ+IG9uZSA8L3RkPgorICAgIDx0ZC8+CisgICAgPHRk
PkMgdGhyZWU8L3RkPgorICAgIDwvdHI+CisgICA8L3RhYmxlPgorIF1dPgorIDxici8+CisgIDxw
PgorICAgPHRhYmxlIGNvbHVtbnM9IjMiIGFsaWduPSJMUlIiPiAKKyAgICA8dHI+CisgICAgIDx0
ZD5DZWxsIG9uZTwvdGQ+CisgICAgIDx0ZD5DPGJyLz5lbGw8YnIvPiB0d288L3RkPgorICAgICA8
dGQ+Q2VsbCB0aHJlZTwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgPHRkPiBvbmUgPC90
ZD4KKyAgICA8dGQvPgorICAgIDx0ZD5DIHRocmVlPC90ZD4KKyAgICA8L3RyPgorICAgPC90YWJs
ZT4KKyA8L3A+CisgPC9jYXJkPgorPC93bWw+IApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwv
dGVzdC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvdGVzdC53bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC90ZXN0LndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIGlkPSdjYXJkMSc+CisgPHA+IFRo
aXMgcGFnZSBpcyBhc3Npc3RhbnQgcGFnZS4gTWFueSB0ZXN0IHBhZ2VzIHdpbGwganVtcCBoZXJl
LiA8L3A+CisgPHA+Q2xpY2sgIkJhY2siIHRvIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2U8
L3A+CisgPGFuY2hvcj4gQmFjayA8cHJldi8+PC9hbmNob3I+CisgPC9jYXJkPgorPC93bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC90ZXh0LWVtcGhhc2lzLndtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dtbC90ZXh0LWVtcGhhc2lzLndtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd21sL3RleHQtZW1waGFzaXMud21sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElD
ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcv
RFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IlRleHQgRm9ybWF0dGluZyI+
CisgIDxwPiBUZXN0IGZvciB0ZXh0IGVtcGhhc2lzIG9mIFdNTCA8L3A+CisgIDxwPgorICAgbm9y
bWFsPGJyLz4KKyAgIDxlbT5lbXBoYXNpemVkPC9lbT48YnIvPgorICAgPHN0cm9uZz5zdHJvbmc8
L3N0cm9uZz48YnIvPgorICAgPGI+Ym9sZDwvYj48YnIvPgorICAgPGk+aXRhbGljPC9pPjxici8+
CisgICA8dT51bmRlcmxpbmU8L3U+PGJyLz4KKyAgIDxiaWc+YmlnPC9iaWc+PGJyLz4KKyAgIDxz
bWFsbD5zbWFsbDwvc21hbGw+CisgIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd21sL3ZhbGlkYXRlLWR0ZC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93bWwvdmFsaWRhdGUtZHRkLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd21sL3ZhbGlkYXRlLWR0ZC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0v
L0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnht
bCI+Cis8d21sPgorPGNhcmQgaWQ9Im5vMSIgdGl0bGU9IkNhcmQgMSI+IAorPHA+VGVzdCBmb3Ig
RFREIHZhbGlkYXRpb24gb2YgV01MIGZpbGU8YnIvPklmIHRoZSBEVENUWVBFIGlzIGluY29ycmVj
dCBvciBtaXNzaW5nLCB0aGlzIHRlc3QgZmFpbGVzLjwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWJyLWVsZW1lbnQud21s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYS1i
ci1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVy
YWN0aXZlY2FzZXMvYS1ici1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9S
VU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4x
LnhtbCI+Cis8d21sPgorIDxjYXJkIHRpdGxlPSJBIGVsZW1lbnQgVGVzdCI+CisgIDxwPlRlc3Qg
Zm9yIEEgZWxlbWVudCBpbmNsdWRpbmcgQlIgZWxlbWVudDwvcD4KKyAgPHA+CisgICAiTmV4dCBQ
YWdlIiB3aWxsIGJlIGJyb2tlbiBieSBCUiBlbGVtZW50IGJldHdlZW4gdGhlbTxici8+CisgICA8
YSBocmVmPSIuLi90ZXN0LndtbCI+TmV4dCA8YnIvPiBwYWdlPC9hPgorICA8L3A+CisgPC9jYXJk
PgorPC93bWw+IAorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2Vz
L2EtZWxlbWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy9hLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICIt
Ly9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFRE
L3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IkEgZWxlbWVudCBUZXN0Ij4KKyAg
PHA+VGVzdCBmb3IgQSBlbGVtZW50LiA8YnIvPldoZW4gbW91c2UgbW92ZXMgaW50byBsaW5rLCAi
Z28gdG8gdGVzdC53bWwiIHdpbGwgYXBwZWFyLCBjbGljayB0aGUgbGluaywgd2lsbCBqdW1wIHRv
IHRlc3Qud21sPC9wPgorICAKKyAgPHA+CisgICA8YSBocmVmPSIuLi90ZXN0LndtbCIgdGl0bGU9
ImdvIHRvIHRlc3Qud21sIiA+TmV4dCBwYWdlPC9hPgorICA8L3A+CisgPC9jYXJkPgorPC93bWw+
IAorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtaW1nLWVs
ZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvYS1pbWctZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtaW1nLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElD
ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcv
RFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IkEgZWxlbWVudCBUZXN0Ij4K
KyAgPHA+VGVzdCBmb3IgQSBlbGVtZW50IGluY2x1ZGluZyBpbWcgZWxlbWVudC4gPC9wPgorICA8
cD4KKyAgIDxhIGhyZWY9Ii4uL3Rlc3Qud21sIiB0aXRsZT0iTmV4dCBQYWdlIj48aW1nIHNyYz0i
Li4vcmVzb3VyY2VzL3NtaWxlLmdpZiIvPjwvYT4KKyAgPC9wPgorIDwvY2FyZD4KKzwvd21sPiAK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hY2Nlc3MtdGFy
Z2V0LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL2FjY2Vzcy10YXJnZXQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy9hY2Nlc3MtdGFyZ2V0LndtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9E
VEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgb250aW1lcj0iLi90YXJnZXRkZWNrLndt
bCI+Cis8dGltZXIgbmFtZT0idDEiIHZhbHVlPSIzMCIvPgorPHA+IFRlc3QgZm9yIERlY2sgQWNj
ZXNzIGNvbnRyb2wgaW4gV01MLiA8L3A+Cis8cD4gSWYgdGhlIHRlc3QgcGFzc2VzLCB0aGlzIGRl
Y2sgd2lsbCBqdW1wIHRvICJ0YXJnZXRkZWNrLndtbCIgYWZ0ZXIgMyBzZWNvbmQ8L3A+Cis8L2Nh
cmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
YW5jaG9yLWJyLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWJyLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hbmNob3ItYnItZWxlbWVudC53
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4K
KzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0
dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCB0
aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4gVGVzdCBmb3IgYnIgZWxlbWVudCBlbmNsb3NlZCB3aXRo
IGFuY2hvciBlbGVtZW50IDwvcD4KKzxwPgorPGFuY2hvcj48Z28gaHJlZj0iLi4vdGVzdC53bWwi
Lz5HbyB0byA8YnIvPnRlc3Qud21sPC9hbmNob3I+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWVsZW1lbnQu
d21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
YW5jaG9yLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy9hbmNob3ItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+CisgIDxwPgor
ICBUaGlzIGlzIGFuIGFuY2hvciBib3VuZCB0byBnbyB0YXNrPGJyLz4KKyAgIDxhbmNob3I+TmV4
dCBwYWdlCisgIDxnbyBocmVmPSJjYXJkcy53bWwiLz4KKyAgIDwvYW5jaG9yPgorICA8L3A+CisK
KyAgIDxwPgorICAgVGhpcyBhbiBhbmNob3IgYm91bmQgdG8gcHJldiB0YXNrPGJyLz4KKyAgIDxh
bmNob3IgdGl0bGU9IlByZXZpb3VzIiA+UHJldiBwYWdlCisgICA8cHJldi8+CisgICA8L2FuY2hv
cj4KKyAgPC9wPgorCisgICA8cD4KKyAgICBUaGlzIGFuIGFuY2hvciBib3VuZCB0byByZWZyZXNo
IHRhc2s8YnIvPgorICAgIDxhbmNob3IgdGl0bGU9IlJlZnJlc2giPlJlZnJlc2ggJHZhcgorICAg
IDxyZWZyZXNoPiAKKyAgICA8c2V0dmFyIG5hbWU9InZhciIgdmFsdWU9Im1lIi8+CisgICAgPC9y
ZWZyZXNoPgorICAgIDwvYW5jaG9yPgorICA8L3A+CisKKyAgIDxwPgorICAgVGhpcyBpcyBhbiBh
bmNob3IgY29udGFpbnMgaW1nIGVsZW1lbnQsIGJvdW5kIHRvIHByZXYgdGFzayA8YnIvPgorICAg
PGFuY2hvciB0aXRsZT0iY2xpY2sgdG8gZ28gYmFjayI+CisgICA8cHJldi8+CisgICA8aW1nIHNy
Yz0iLi4vcmVzb3VyY2VzL3NtaWxlLmdpZiIgLz4KKyAgIDwvYW5jaG9yPgorICAgPC9wPgorIDwv
Y2FyZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvYW5jaG9yLWltZy1lbGVtZW50LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1pbWctZWxlbWVudC53bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1pbWctZWxl
bWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VO
IgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8
Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4gVGVzdCBmb3IgV01MIGltZyBlbmNsb3NlZCB3
aXRoIGFuY2hvciBlbGVtZW50LCB3aGVuIHRoZSBtb3VzZSBtb3ZlIGludG8gdGhlIGltYWdlLCB0
aGUgdGlwICJnbyB0byB0ZXN0LndtbCIgd2lsbCBhcHBlYXI8L3A+Cis8cD4KKzxhbmNob3IgdGl0
bGU9ImdvIHRvIHRlc3Qud21sIj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL3NtaWxlLmdpZiIvPiA8
Z28gaHJlZj0iLi4vdGVzdC53bWwiLz48L2FuY2hvcj4KKzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW5ld2NvbnRl
eHQtYXR0ci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3Rp
dmVjYXNlcy9jYXJkLW5ld2NvbnRleHQtYXR0ci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtbmV3Y29udGV4dC1hdHRyLndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+CisgPGNhcmQgaWQ9ImZp
cnN0Y2FyZCIgdGl0bGU9Ik9uZSI+CisgPHA+IFRlc3QgZm9yIG5ld2NvbnRleHQgYXR0cmlidXRl
IG9mIGNhcmQgZWxlbWVudDwvcD4KKyA8cD4gVGhpcyBpcyB0aGUgZmlyc3QgY2FyZCwgQ2xpY2sg
IkdvIiB0byBlbnRlciBjYXJkIHR3by4gPGJyLz4gQmVjYXVzZSBuZXdjb250ZXh0IG9mIGNhcmQg
dHdvIGlzIHRydWUsIHRoZSBoaXN0b3J5IHN0YXRlIHdpbGwgYmUgY2xlYW4sIGFuZCB0aGUgdmFy
aWFibGUgIiR2YXIxIiB3b24ndCBiZSByZXBsYWNlZDwvcD4KKyA8ZG8gdHlwZT0iYWNjZXB0IiBs
YWJlbD0iR28iPgorIDxnbyBocmVmPSIjc2Vjb25kY2FyZCI+CisgICAgPHNldHZhciBuYW1lPSJ2
YXIxIiB2YWx1ZT0idHdvIi8+IAorIDwvZ28+CisgPC9kbz4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBp
ZD0ic2Vjb25kY2FyZCIgdGl0bGU9IiR2YXIxIiBuZXdjb250ZXh0PSJ0cnVlIj4KKyA8cD4gVGhp
cyBpcyB0aGUgY2FyZCAkdmFyMSA8L3A+CisgPHA+IEJlY2F1c2UgbmV3Y29udGV4dCBvZiB0aGlz
IGNhcmQgaXMgdHJ1ZSwgdGhlIGhpc3Rvcnkgc3RhdGUgd2lsbCBiZSBjbGVhbiwgYW5kIHRoZSB2
YXJpYWJsZSAiJHZhcjEiIHdvbid0IGJlIHJlcGxhY2VkPC9wPgorIDwvY2FyZD4KKzwvd21sPgor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb25lbnRl
cmJhY2t3YXJkLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL2NhcmQtb25lbnRlcmJhY2t3YXJkLndtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVyYmFja3dhcmQud21s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwh
RE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6
Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9ImNh
cmQxIiB0aXRsZT0iQ2FyZCAxIiBvbmVudGVyYmFja3dhcmQ9IiNjYXJkMyI+IAorPHA+VGVzdCBm
b3IgY2FyZCBvbmVudGVyYmFja3dhcmQgaW50cmluc2ljIGV2ZW50PC9wPgorPHA+IENsaWNrICJH
byIgdG8ganVtcCB0byB0aGUgY2FyZDIsIGlmIHlvdSBnbyBiYWNrIGZyb20gY2FyZDIsIGl0IHdp
bGwganVtcCB0byBjYXJkMzwvcD4KKzxhbmNob3IgdGl0bGU9ImdvIHRvIGNhcmQyIj4KKzxnbyBo
cmVmPSIjY2FyZDIiPkdvPC9nbz4KKzwvYW5jaG9yPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQy
IiB0aXRsZT0iQ2FyZCAyIj4gCis8cD5UaGlzIGlzIGNhcmQyLGNsaWNrICJCYWNrIiB3aWxsIGJh
Y2sgdG8gdGhlIHByZXZpb3VzIHBhZ2U8L3A+IAorPGFuY2hvcj4KK0JhY2sKKzxwcmV2IC8+Cis8
L2FuY2hvcj4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMyIgdGl0bGU9IkNhcmQgMyIgPgorPHA+
VGhpcyBpcyBjYXJkMzwvcD4KKzwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVyZm9yd2FyZC53bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW9uZW50ZXJm
b3J3YXJkLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvY2FyZC1vbmVudGVyZm9yd2FyZC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dB
UEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dt
bF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiIG9uZW50
ZXJmb3J3YXJkPSIjY2FyZDIiPgorPHA+VGVzdCBmb3IgY2FyZCBvbmVudGVyZm9yd2FyZCBldmVu
dDwvcD4KKzxwPkNhcmQgb25lIHdpbGwganVtcCB0byBjYXJkIHR3byB3aGVuIGVudGVyZWQgZm9y
d2FyZCBpdDwvcD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+Cis8
cD5UZXN0IGZvciBjYXJkIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+VGhpcyBpcyBjYXJk
MiwgSSBhbSBlbnRlcmVkIGJ5IGNhcmQgb25lIGZvcndhcmRpbmc8L3A+Cis8L2NhcmQ+Cis8L3dt
bD4gCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1v
bnRpbWVyLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL2NhcmQtb250aW1lci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb250aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMg
Ii0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9E
VEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDYWNo
ZS1Db250cm9sIiBjb250ZW50PSJtYXgtYWdlPTAiLz4KKzwvaGVhZD4KKzxjYXJkIGlkPSJjYXJk
MSIgb250aW1lcj0iI2NhcmQyIiB0aXRsZT0iQ2FyZCBvbmUiPgorPHA+IFRlc3QgZm9yIGNhcmQg
b250aW1lciBpbnRyaW5zaWMgZXZlbnQgaW4gV01MIDwvcD4KKzx0aW1lciBuYW1lPSJ0aW1lMSIg
dmFsdWU9IjUwIi8+Cis8cD4KK1RoaXMgaXMgY2FyZCBvbmU8YnIvPlRoZSB0aW1lciBpcyB0cmln
Z2VyZWQgYnkgdGhlIG9udGltZXIgaW50cmluc2ljIGV2ZW50KG9udGltZXIgYXMgYXR0cmlidXRl
IG9mIGNhcmQgZWxlbWVudCk8YnIvPldoZW4gdGhlIHRpbWVyIGlzIHRpbWVvdXQoYWZ0ZXIgNXMp
LCB3aWxsIGp1bXAgdG8gY2FyZCB0d28uCis8L3A+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIi
PgorVGhpcyBpcyBDYXJkIHR3bworPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZGVjay1hY2Nlc3MtY29udHJvbC53bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9kZWNrLWFjY2Vz
cy1jb250cm9sLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVy
YWN0aXZlY2FzZXMvZGVjay1hY2Nlc3MtY29udHJvbC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFRE
L3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIG9uZW50ZXJmb3J3YXJkPSJ0YXJnZXRkZWNr
LndtbCI+Cis8cD4gVGVzdCBmb3IgRGVjayBBY2Nlc3MgY29udHJvbCBpbiBXTUwuIDwvcD4KKzxw
PiBUaGlzIGRlY2sgd2lsbCB0cnkgdG8ganVtcCB0byAidGFyZ2V0ZGVjay53bWwiIHdoZW4gaXQg
aXMgbG9hZGVkLiBCdXQgaXQgd2lsbCA8c3Ryb25nPkZBSUw8L3N0cm9uZz4gYmVjYXVzZSAidGFy
Z2V0ZGVjay53bWwiIGp1c3QgYWxsb3dzICJhY2Nlc3MtdGFyZ2V0LndtbCIgdG8gYWNjZXNzIGl0
LjwvcD4KKzxwPiBZb3UgY2FuIGNsaWNrICdHbycgdG8gZW50ZXIgJ2FjY2Vzcy10YXJnZXQud21s
JywgYW5kIHRoZW4gZW50ZXIgJ3RhcmdldGRlY2sud21sJyBmcm9tIHRoZXJlPC9wPgorPGFuY2hv
ciB0aXRsZT0iZ28gdG8gYWNjZXNzLXRhcmdldC53bWwiPjxnbyBocmVmPSIuL2FjY2Vzcy10YXJn
ZXQud21sIj5HbzwvZ28+PC9hbmNob3I+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZ28tZWxlbWVudC53bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9nby1lbGVtZW50LndtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZ28t
ZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8v
RU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8
Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJPbmUiPgorICA8cD4gVGVzdCBmb3IgZ28gZWxlbWVudCBp
biBXTUwgPC9wPgorICA8YnIvPgorICBDYXNlIDE6IGp1bXAgYW1vbmcgb25lIGRlY2sKKyAgPGRv
IG5hbWU9ImdvIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJHbyB0byBjYXJkMiI+CisgICA8Z28gaHJl
Zj0iI2NhcmQyIiBzZW5kcmVmZXJlcj0idHJ1ZSIgLz4KKyAgPC9kbz4KKyAgPHAvPgorICBDYXNl
IDI6IGp1bXAgZnJvbSBvbmUgZGVjayB0byBhbm90aGVyIG9uZQorICA8ZG8gbmFtZT0iZ28yIiB0
eXBlPSJhY2NlcHQiIGxhYmVsPSJHbyB0byB0ZXN0LndtbCI+CisgICA8Z28gaHJlZj0iLi4vdGVz
dC53bWwiLz4KKyAgPC9kbz4KKyAgPHAvPgorICBDYXNlIDM6IGp1bXAgdG8gdGVzdC53bWwgYW5k
IHBvc3QgZGF0YSB3aXRoIHBvc3QgbWV0aG9kCisgIDxkbyBuYW1lPSJnbzMiIHR5cGU9ImFjY2Vw
dCIgbGFiZWw9IlBvc3QgdG8gdGVzdC53bWwiPgorICAgPGdvIGhyZWY9Ii4uL3Rlc3Qud21sIiBt
ZXRob2Q9InBvc3QiIGFjY2VwdC1jaGFyc2V0PSJ1dGYtOCwgbGF0aW4xIj4KKyAgICA8cG9zdGZp
ZWxkIG5hbWU9InZhcjEiIHZhbHVlPSJoZWxsbyIvPgorICAgIDxwb3N0ZmllbGQgbmFtZT0idmFy
MiIgdmFsdWU9IiB3b3JsZCIvPgorICAgPC9nbz4KKyAgPC9kbz4KKyAgPHAvPgorICBDYXNlIDQ6
IGp1bXAgdG8gdGVzdC53bWwgYW5kIHNlbmQgcmVxdWVzdCB3aXRoIGdldCBtZXRob2QgCisgIDxk
byBuYW1lPSJnbzQiIHR5cGU9ImFjY2VwdCIgbGFiZWw9ImdldCBmcm9tIHRlc3Qud21sIiBzZW5k
cmVmZXJlcj0idHJ1ZSI+CisgICA8Z28gaHJlZj0iLi4vdGVzdC53bWwiIG1ldGhvZD0iZ2V0IiBh
Y2NlcHQtY2hhcnNldD0idXRmLTgsbGF0aW4xLGlzby04ODU5LTEiPgorICAgIDxwb3N0ZmllbGQg
bmFtZT0idmFyMSIgdmFsdWU9ImhlbGxvIi8+CisgICAgPHBvc3RmaWVsZCBuYW1lPSJ2YXIyIiB2
YWx1ZT0iZnJpZW5kIi8+CisgICA8L2dvPgorICA8L2RvPgorIDwvY2FyZD4KKworIDxjYXJkIGlk
PSJjYXJkMiIgdGl0bGU9IlR3byI+CisgIDxwIGFsaWduPSJjZW50ZXIiPgorICBUaGlzIGlzIHRo
ZSBzZWNvbmQgY2FyZAorIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4KKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1lbXB0eW9rLndtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2lucHV0LWVtcHR5b2su
d21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNl
cy9pbnB1dC1lbXB0eW9rLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
Cis8d21sPgorPGNhcmQ+Cis8cD4gVGVzdCBmb3IgaW5wdXQgZW1wdHlvayBhdHRyaWJ1dGUgaW4g
V01MIDwvcD4KK0ZvciB0aGUgZm9sbG93aW5nIGlucHV0IGVsZW1lbnRzLCBpbnB1dCBpcyByZXF1
aXJlZDoKKzxici8+Citmb3JtYXQ9TipNO2VtcHR5b2s9ZmFsc2U8aW5wdXQgbmFtZT0ieDIiIGVt
cHR5b2s9ImZhbHNlIiBmb3JtYXQ9Ik4qTSIvPgorPGJyLz4KK2Zvcm1hdD0qTTtlbXB0eW9rPWZh
bHNlPGlucHV0IG5hbWU9IngzIiBlbXB0eW9rPSJmYWxzZSIgZm9ybWF0PSIqTSIvPgorPGJyLz4K
K0ZvciB0aGUgZm9sbG93aW5nIGlucHV0IGVsZW1lbnRzLCBpbnB1dCBpcyBub3QgcmVxdWlyZWQ6
Cis8YnIvPgorZGVmYXVsdDxpbnB1dCBuYW1lPSJ4NCIvPiAKKzxici8+Citmb3JtYXQ9Kk08aW5w
dXQgbmFtZT0ieDUiIGZvcm1hdD0iKk0iLz4gCis8YnIvPgorZW1wdHlvaz10cnVlPGlucHV0IG5h
bWU9Ing2IiBlbXB0eW9rPSJ0cnVlIi8+Cis8YnIvPgorZm9ybWF0PW4qTTtlbXB0eW9rPXRydWU8
aW5wdXQgbmFtZT0ieDciIGVtcHR5b2s9InRydWUiIGZvcm1hdD0ibipNIi8+Cis8YnIvPgorZm9y
bWF0PSpNO2VtcHR5b2s9dHJ1ZTxpbnB1dCBuYW1lPSJ4OCIgZW1wdHlvaz0idHJ1ZSIgZm9ybWF0
PSIqTSIvPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL2lucHV0LWZvcm1hdC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1mb3JtYXQud21sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1mb3JtYXQud21s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwh
RE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6
Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCB0aXRs
ZT0iSW5wdXQiPgorPHA+IFRlc3QgZm9yIGlucHV0IGZvcm1hdCBpbiBXTUw8L3A+Cis8cD4KK1Bh
c3N3b3JkKGRlZmF1bHQ6Kk0pOjxpbnB1dCBuYW1lPSJkZWZhdWx0Ii8+Cis8YnIvPgorUGFzc3dv
cmQoNk0pOiA8aW5wdXQgbmFtZT0iUHdkIiB0eXBlPSJwYXNzd29yZCIgZm9ybWF0PSI2TSIvPgor
PGJyLz4KK1Bhc3N3b3JkKEFBYSk6IDxpbnB1dCBuYW1lPSJQd2QyIiB0eXBlPSJwYXNzd29yZCIg
Zm9ybWF0PSJBQWEiLz4gCis8YnIvPgorb25lLW51bWVyaWMrbG93ZXJjYXNlKE4qYSk6PGlucHV0
IG5hbWU9InVwcGVyIiBmb3JtYXQ9Ik4qYSIvPiAKKzxici8+CitVcHBlcmNhc2Urbm9uLW51bWVy
aWMoQUFBO3NpemU9OCk6PGlucHV0IG5hbWU9InVwcGVyIiBzaXplPSI4IiBmb3JtYXQ9IkFBQSIv
PiAKKzxici8+CitMb3dlcmNhc2Urbm9uLW51bWVyaWMoYWFhO3NpemU9ODt3aWR0aD0yKTo8aW5w
dXQgbmFtZT0ibG93ZXIiIHNpemU9IjgiIHdpZHRoPSIyIiBmb3JtYXQ9ImFhYSIvPgorPGJyLz4K
K051bWVyaWMoNU47bWF4bGVuPTMpOjxpbnB1dCBuYW1lPSJudW1lcmljIiBtYXhsZW5ndGg9IjMi
IGZvcm1hdD0iNU4iLz4KKzxici8+CitOdW1laXJjK3N5bWJvbHMobm5uKTo8aW5wdXQgbmFtZT0i
bnVtZXJpYysiIGZvcm1hdD0ibm5uIi8+Cis8YnIvPgorVXBwZXJjYXNlK251bWVyaWMrc3ltYm9s
cyhYWFgpOjxpbnB1dCBuYW1lPSJ1cHBlcisiIGZvcm1hdD0iWFhYIi8+Cis8YnIvPgorTG93ZXJj
YXNlK251bWVyaWMrc3ltYm9scyh4eHgpOjxpbnB1dCBuYW1lPSJsb3dlcisiIGZvcm1hdD0ieHh4
Ii8+Cis8YnIvPgorVXBwZXJjYXNlK251bWVyaWMrc3ltYm9scyhNTU0pOjxpbnB1dCBuYW1lPSJk
ZWZfdXBwZXIrIiBmb3JtYXQ9Ik1NTSIvPgorPGJyLz4KK0xvd2VyY2FzZStudW1lcmljK3N5bWJv
bHMobW1tKTo8aW5wdXQgbmFtZT0iZGVmX2xvd2VyKyIgZm9ybWF0PSJtbW0iLz4KKzxici8+CitN
aXhlZCBkYXRhKGFcLU5OKngpPGlucHV0IG5hbWU9ImFueSIgZm9ybWF0PSJhXC1OTip4Ii8+Cis8
YnIvPgorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtZ28ud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1nby53bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtZ28ud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorCis8Y2FyZCBpZD0iY2Fy
ZDEiIHRpdGxlPSJDYXJkIDEiPiAKKyA8b25ldmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+Cisg
IDxnbyBocmVmPSIjY2FyZDIiLz4KKyA8L29uZXZlbnQ+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVs
ZW1lbnQgd2hpY2ggYmluZHMgZ28gdGFzayB3aXRoIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgor
PHA+d2hlbiBlbnRlciBmb3J3YXJkIHRvIHRoaXMgY2FyZCwgaXQgd2lsbCBqdW1wIHRvIGNhcmQg
MjwvcD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+Cis8cD5UZXN0
IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgZ28gdGFzayB3aXRoIG9uZW50ZXJmb3J3
YXJkIGV2ZW50PC9wPgorPHA+d2hpbGUgY2FyZCAxIGlzIGxvYWRlZCwgaXQgd2lsbCB0cmlnZ2Vy
IHRoZSBvbmVudGVyZm9yd2FyZCBldmVudCBhbmQganVtcCB0byBjYXJkMiBpbW1lZGlhdGVseTwv
cD4KKzxwPlRoaXMgaXMgY2FyZDI8L3A+Cis8L2NhcmQ+CisKKzwvd21sPiAKKwpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LW5vb3Aud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1u
b29wLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvb25ldmVudC1ub29wLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RU
RCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorPHdtbD4KKworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4gCisgPG9uZXZlbnQg
dHlwZT0ib25lbnRlcmZvcndhcmQiPgorIDxub29wLz4KKyA8L29uZXZlbnQ+Cis8cD5UZXN0IGZv
ciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgbm9vcCB0YXNrIHdpdGggb25lbnRlcmZvcndh
cmQgZXZlbnQ8L3A+Cis8cD53aGVuIGVudGVyIGZvcndhcmQgdG8gdGhpcyBjYXJkLCBpdCB3b24n
dCBkbyBhbnl0aGluZyBhcyBpZiB0aGUgb25lbnRlcmZvcndhcmQgZXZlbnQgd2Fzbid0IHRyaWdn
ZXJlZDwvcD4KKzwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXByZXYud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1wcmV2LndtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1wcmV2
LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJo
dHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKworPGNhcmQg
aWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4gCis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQg
d2hpY2ggYmluZHMgcHJldiB0YXNrIHdpdGggb25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8cD5D
bGlja2luZyAiR28iIHdpbGwgY2F1c2UgaXQgdG8ganVtcCB0byB0aGUgY2FyZDIsIGJ1dCB3aGlj
aCBiaW5kcyBwcmV2IHRhc2sgdG8gb25lbnRlcmZvcndhcmQgZXZlbnQgd2l0aGluIG9uZXZlbnQg
ZWxlbWVudCwgYXMgYSByZXN1bHQsIGl0IHdpbGwganVtcCBiYWNrIHRvIGNhcmQgMTwvcD4KKzxh
bmNob3IgdGl0bGU9IkdvIHRvIGNhcmQyIj5HbworPGdvIGhyZWY9IiNjYXJkMiIvPgorPC9hbmNo
b3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+Cis8cD5UZXN0
IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgcHJldiB0YXNrIHdpdGggb25lbnRlcmZv
cndhcmQgZXZlbnQ8L3A+Cis8cD5UaGlzIGlzIGNhcmQyLiBXaGVuIGNhcmQgMiBpcyBlbnRlcmVk
IGZvcndhcmQsIGl0IHdpbGwganVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBwYWdlIDwvcD4KKyA8
b25ldmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+CisgPHByZXYvPgorIDwvb25ldmVudD4KKzwv
Y2FyZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9vbmV2ZW50LXJlZnJlc2gud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1yZWZyZXNoLndtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1yZWZyZXNoLndt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8
IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRw
Oi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKworPGNhcmQgaWQ9
ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4gCisgPHRpbWVyIG5hbWU9IlQiIHZhbHVlPSIzMCIvPgor
IDxvbmV2ZW50IHR5cGU9Im9udGltZXIiPgorIDxyZWZyZXNoPgorIDxzZXR2YXIgbmFtZT0idmFy
IiB2YWx1ZT0iVkFSSUFCTEUiLz4KKyA8L3JlZnJlc2g+CisgPC9vbmV2ZW50PgorPHA+VGVzdCBm
b3Igb25ldmVudCBlbGVtZW50IHdoaWNoIGJpbmRzIHJlZnJlc2ggdGFzayB3aXRoIG9udGltZXIg
ZXZlbnQ8L3A+Cis8cD4gV2hlbiB0aGUgdGltZXIgdGltZW91dCgzcyksIHRoZSBwYWdlIHdpbGwg
YmUgcmVmcmVzaC4gQXMgYSBjb25zZXF1ZW5jZSwgd2UgY2FuIHNlZSB0aGUgZm9sbG93aW5nIHZh
cmlhYmxlIHJlZmVyZW5jZSBoYXMgYmVlbiBzdWJzdGl0dXRlZDwvcD4KKzxwIGFsaWduPSJjZW50
ZXIiPiBIZXJlIGlzIGEgdmFyaWFibGUgOiB2YXIgPSAkdmFyIDwvcD4KKzwvY2FyZD4KKzwvd21s
PiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50
LXNoYWRvdy53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3Rp
dmVjYXNlcy9vbmV2ZW50LXNoYWRvdy53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtc2hhZG93LndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZT4KKzxvbmV2ZW50IHR5cGU9
Im9uZW50ZXJmb3J3YXJkIj4KKzxnbyBocmVmPSIjY2FyZDIiLz4KKzwvb25ldmVudD4KKzwvdGVt
cGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIE9uZSI+Cis8b25ldmVudCB0eXBl
PSJvbmVudGVyZm9yd2FyZCI+Cis8Z28gaHJlZj0iI2NhcmQzIi8+Cis8L29uZXZlbnQ+Cis8cD5U
ZXN0IGZvciBvbmV2ZW50IHNoYWRvd2luZyBpbiBXTUw8L3A+Cis8cD5UaGUgY2FyZC1sZXZlbCBv
bmV2ZW50IHdpbGwgc2hhZG93IHRoZSBkZWNrLWxldmVsIG9uZXZlbnQuIEFzIGEgcmVzdWx0LCBj
YXJkIDEgd29uJ3QganVtcCB0byBjYXJkMiAgYnV0IHRvIGNhcmQgMyBhY2NvcmRpbmcgdG8gdGhl
IGNhcmQtbGV2ZWwgb25ldmVudCdzIHJlcXVpcmVtZW50LiBBZnRlciBlbnRlcmVkIHRoZSBjYXJk
IDMsIHRoZSBkZWNrLWxldmVsIG9uZXZlbnQgZWxlbWVudCBpc24ndCBzaGFkb3dlZCBieSB0aGlz
IGNhcmQsIHNvIGl0IHdpbGwganVtcCB0byBjYXJkIDIgaW1tZWRpYXRlbHkuPC9wPgorPC9jYXJk
PgorPGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iQ2FyZCB0d28iID4KKzxwPlRoaXMgaXMgY2FyZCAy
PC9wPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQzIiB0aXRsZT0iQ2FyZCBUaHJlZSI+Cis8cD5U
aGlzIGlzIGNhcmQgMzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0ZmllbGQtZ2V0LndtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Bvc3RmaWVsZC1nZXQud21sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0
ZmllbGQtZ2V0LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4x
Ly9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPjx3bWw+Cis8
Y2FyZD4KKzxwPlRlc3QgZm9yIHBvc3RmaWVsZCBlbGVtZW50IGluIFdNTCA8L3A+Cis8cD4KKyBD
bGljayAiR2V0IiB0byBTZW5kIGRhdGEgYnkgZ2V0IG1ldGhvZDxiciAvPgorIDxkbyB0eXBlPSJh
Y2NlcHQiIGxhYmVsPSJHZXQiPgorICA8Z28gaHJlZj0iLi4vdGVzdC53bWwiIG1ldGhvZD0iZ2V0
Ij4KKyAgIDxwb3N0ZmllbGQgbmFtZT0iaSIgdmFsdWU9IjIiLz4KKyAgIDxwb3N0ZmllbGQgbmFt
ZT0iaiIgdmFsdWU9IjMwIi8+CisgIDwvZ28+CisgPC9kbz4KKzwvcD4KKzwvY2FyZD4KKzwvd21s
PiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvcG9zdGZpZWxk
LXBvc3Qud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvcG9zdGZpZWxkLXBvc3Qud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0ZmllbGQtcG9zdC53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5v
cmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJjYXJk
MSI+Cis8cD5UZXN0IGZvciBwb3N0ZmllbGQgZWxlbWVudCBpbiBXTUw8L3A+Cis8cD4KKyBDbGlj
ayAiUG9zdCIgdG8gU2VuZCBkYXRhIHdpdGggcG9zdCBtZXRob2Q8YnIvPgorIDxkbyB0eXBlPSJh
Y2NlcHQiIG5hbWU9Ik9rIiBsYWJlbD0iUG9zdCI+CisgIDxnbyBocmVmPSIuLi90ZXN0LndtbCIg
bWV0aG9kPSJwb3N0Ij4KKyAgIDxwb3N0ZmllbGQgbmFtZT0iaSIgdmFsdWU9IjIiLz4KKyAgIDxw
b3N0ZmllbGQgbmFtZT0iaiIgdmFsdWU9IjMwIi8+CisgIDwvZ28+CisgPC9kbz4KKzwvcD4KKzwv
Y2FyZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvc2VsZWN0LWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvc2VsZWN0LWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZWxlY3QtZWxlbWVudC53bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NU
WVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJjYXJk
MSIgdGl0bGU9IlNlbGVjdCBUZXN0Ij4KKzxwPiBUZXN0IGZvciBzZWxlY3QgZWxlbWVudCBpbiBX
TUwgPC9wPgorPHA+IFlvdSBjYW4gc2VsZWN0IG9uZSBvciBtb3JlIG9wdGlvbnMsIGFuZCB0aGVu
IGNsaWNrICdBbnN3ZXInLCB0aGUgc2Vjb25kIGNhcmQgd2lsbCB0ZWxsIHlvdSB3aGF0IHlvdSBz
ZWxlY3RlZDwvcD4KKzxwPgorPHNlbGVjdCBuYW1lPSJjYXJzIiB0aXRsZT0iU0VMRUNUIiBtdWx0
aXBsZT0idHJ1ZSIgPgorICA8b3B0aW9uIHZhbHVlPSJ2b2x2byIgPlZvbHZvPC9vcHRpb24+Cisg
IDxvcHRpb24gdmFsdWU9ImZpYXQiPkZpYXQ8L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0ic2Fh
YiI+U2FhYjwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJhdWRpIj5BdWRpPC9vcHRpb24+Cis8
L3NlbGVjdD4KKzwvcD4KKzxkbyB0eXBlPSJhY2NlcHQiIGxhYmVsPSJBbnN3ZXIiPgorICA8Z28g
aHJlZj0iI2NhcmQyIi8+Cis8L2RvPgorPC9jYXJkPgorCis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxl
PSJBbnN3ZXIiPgorPHA+CitZb3Ugc2VsZWN0ZWQ6ICQoY2FycykKKzwvcD4KKzwvY2FyZD4KKzwv
d21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZWxlY3Qt
b25waWNrLWV2ZW50LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL3NlbGVjdC1vbnBpY2stZXZlbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZWxlY3Qtb25waWNrLWV2ZW50Lndt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8
IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRw
Oi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQ+Cis8
cD4gVGVzdCBmb3Igc2VsZWN0IG9ucGljayBpbnRyaW5zaWMgZXZlbnQgaW4gV01MIDwvcD4KKzxw
PiBXaGVuIHlvdSBzZWxlY3QgdGhlICdMaW9uJyBvcHRpb24sIHdpbGwganVtcCB0byB0ZXN0Lndt
bDwvcD4KK1BsZWFzZSBjaG9vc2UgeW91ciBmYXZvdXJpdGUgYW5pbWFsOjxici8+Cis8c2VsZWN0
IG5hbWU9IlgiIG11bHRpcGxlPSJ0cnVlIj4KKzxvcHRpb24gdmFsdWU9IkQiPkRvZzwvb3B0aW9u
PgorPG9wdGlvbiB2YWx1ZT0iQyI+Q2F0PC9vcHRpb24+Cis8b3B0aW9uIHZhbHVlPSJMIiBvbnBp
Y2s9Ii4uL3Rlc3Qud21sIj5MaW9uPC9vcHRpb24+Cis8L3NlbGVjdD4KKzwvY2FyZD4KKzwvd21s
PgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZXR2YXItZWxl
bWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9zZXR2YXItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3NldHZhci1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJ
QyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3Jn
L0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIGlkPSJmaXJzdGNhcmQiIHRpdGxlPSJU
ZXN0IGZvciBTZXR2YXIgZWxlbWVudCI+CisgPHA+IFRlc3QgZm9yIHNldHZhciBlbGVtZW50IGlu
IFdNTCA8L3A+CisgPHA+VGhpcyBpcyB0aGUgZmlyc3QgY2FyZCAsIGhhcyB2YXJpYWJsZTogVkFS
PSckdmFyJzwvcD4KKyA8cD5DbGljayAiUmVmcmVzaCIgd2lsbCB1cGRhdGUgdGhlIHZhbHVlIG9m
IFZBUiB2YXJhaWJsZSB3aGljaCBzcGVjaWZpZWQgYnkgc2V0dmFyIGVsZW1lbnQ8L3A+CisgIDxk
byBuYW1lPSJSZWZyZXNoIiB0eXBlPSJhY2NlcHQiPiAKKyAgIDxyZWZyZXNoPgorICAgPHNldHZh
ciBuYW1lPSJ2YXIiIHZhbHVlPSJWQUxVRSIvPgorICAgPC9yZWZyZXNoPgorICA8L2RvPgorIDwv
Y2FyZD4KKzwvd21sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL3RhcmdldGRlY2sud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvdGFyZ2V0ZGVjay53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RhcmdldGRlY2sud21sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVC
TElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8aGVhZD4KKzxhY2Nlc3MgZG9tYWluPSJs
b2NhbGhvc3QiIHBhdGg9ImFjY2Vzcy10YXJnZXQud21sIi8+Cis8L2hlYWQ+Cis8Y2FyZD4KKzxw
PiBUZXN0IGZvciBEZWNrIEFjY2VzcyBjb250cm9sIGluIFdNTC4gPC9wPgorPHA+IFRoaXMgaXMg
dGhlIHRhcmdldGRlY2ssIG9ubHkgJy4vYWNjZXNzLXRhcmdldC53bWwiIGNhbiBhY2Nlc3MgbWUg
PC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL3Rhc2stZ28taW4tYW5jaG9yLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stZ28taW4tYW5jaG9yLndtbAkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFzay1nby1p
bi1hbmNob3Iud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4x
Ly9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21s
PgorPGNhcmQgdGl0bGU9IkFuY2hvciBUYWciPgorPHA+IFRlc3QgZm9yIFdNTCBnbyB0YXNrIGVu
Y2xvc2VkIHdpdGggYW5jaG9yIGVsZW1lbnQgPC9wPgorPHA+IGNsaWNrICdOZXh0IHBhZ2UnIHRv
IGdvIHRvIHRlc3Qud21sIDwvcD4KKzxwPgorPGFuY2hvcj5OZXh0IHBhZ2U8Z28gaHJlZj0iLi4v
dGVzdC53bWwiLz4gPC9hbmNob3I+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFzay1ub29wLWluLWRvLndtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9v
cC1pbi1kby53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1kby53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZP
UlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8x
LjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSI+Cis8cD4gVGVzdCBmb3IgTm9vcCB0
YXNrIGluIGRvIGVsZW1lbnQgb2YgV01MLiA8L3A+Cis8cD4gSWYgaXQgcGFzc2VzLCB5b3Ugc2hv
dWxkIG5vdCBzZWUgdGhlICJCYWNrIiBidXR0b248L3A+CisgPGRvIG5hbWU9ImRvIiB0eXBlPSJh
Y2NlcHQiIGxhYmVsPSJCYWNrIj4KKyA8bm9vcC8+CisgPC9kbz4KKzwvY2FyZD4gCis8L3dtbD4g
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1p
bi1vbmV2ZW50LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1vbmV2ZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFzay1ub29wLWluLW9uZXZlbnQud21s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwh
RE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6
Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZD4gCis8
cD4gVGVzdCBmb3Igbm9vcCB0YXNrIGluIG9uZXZlbnQgZWxlbWVudCBvZiBXTUw8L3A+Cis8cD4g
SWYgaXQgcGFzc2VzLCB5b3Ugd2lsbCBzZWUgdGhlIGNhcmQgb25lIGluIHRoaXMgZGVjazwvcD4K
KyAgPG9uZXZlbnQgdHlwZT0ib25lbnRpbWVyIj4KKyAgPG5vb3AvPgorICA8L29uZXZlbnQ+Cis8
cD4gVGhpcyBpcyBDYXJkIG9uZSA8L3A+Cis8L2NhcmQ+IAorPC93bWw+IApJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLXByZXYtaW4tYW5jaG9yLndtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2st
cHJldi1pbi1hbmNob3Iud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy90YXNrLXByZXYtaW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5v
cmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIHRpdGxlPSJBbmNob3IgVGFnIj4K
KzxwPiBUZXN0IGZvciBXTUwgcHJldiB0YXNrIGVuY2xvc2VkIHdpdGggYW5jaG9yIGVsZW1lbnQg
PC9wPgorPHA+IGNsaWNrICdwcmV2IHBhZ2UnIHRvIGdvIHRvIHByZXZpb3VzIHBhZ2UgaWYgaXQg
aXMgbm90IHRoZSBmaXJzdCBwYWdlIGluIGhpc3Rvcnk8L3A+Cis8cD4KKzxhbmNob3I+UHJldiBw
YWdlPHByZXYvPjwvYW5jaG9yPgorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stcmVmcmVzaC1pbi1hbmNob3Iud21s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFz
ay1yZWZyZXNoLWluLWFuY2hvci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stcmVmcmVzaC1pbi1hbmNob3Iud21sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3
bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBm
b3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCB0aXRsZT0iJFQiPgorIDxw
PiBUZXN0IGZvciByZWZyZXNoIHRhc2sgd2l0aGluIFdNTCBhbmNob3IgZWxlbWVudC4gPGJyLz4g
Y2xpY2sgIlJlZnJlc2giIHdpbGwgcmVmcmVzaCB0aGlzIHBhZ2UsIGFzIGEgcmVzdWx0IHRoZSBw
YWdlIHRpdGxlIHdpbGwgYmUgdXBkYXRlZC4gPC9wPgorICA8cD4KKyAgIDxhbmNob3I+CisgICAg
UmVmcmVzaAorICAgIDxyZWZyZXNoPgorICAgIDxzZXR2YXIgbmFtZT0iVCIgdmFsdWU9IlRlc3Qg
cmVmcmVzaCB0YXNrIi8+CisgICAgPC9yZWZyZXNoPgorICAgPC9hbmNob3I+CisgIDwvcD4KKzwv
Y2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNl
cy90ZW1wbGF0ZS1nby53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50
ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1nby53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RlbXBsYXRlLWdvLndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8dGVtcGxhdGU+CisgPGRvIG5hbWU9Imdv
IiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJUZW1wbGF0ZSBHbyI+CisgIDxnbyBocmVmPSIjY2FyZDIi
Lz4KKyA8L2RvPgorPC90ZW1wbGF0ZT4KKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQgMSI+
Cis8cD5UZXN0IGZvciB0ZW1wbGF0ZSBlbGVtZW50IGluIFdNTC4gVGVtcGxhdGUgZ28gYnV0dG9u
IGlzIGdsb2JhbDwvcD4KKzxwPiBUaGlzIGlzIENhcmQgb25lLCBjbGljayAnVGVtcGxhdGUgR28n
IHRvIGp1bXAgdG8gQ2FyZCB0d288L3A+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxl
PSJDYXJkIDIiPgorPHA+VGhpcyBpcyBjYXJkIHR3by4gPGJyLz5UaGUgZ2xvYmFsIHRlbXBsYXRl
IEdvIGJ1dHRvbiBpcyBzdGlsbCB2aXNpYmxlIGZvciBtZTwvcD4KKzwvY2FyZD4KKzwvd21sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1vbmV2
ZW50LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL3RlbXBsYXRlLW9uZXZlbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1vbmV2ZW50LndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZT4KKzxvbmV2ZW50IHR5cGU9
Im9uZW50ZXJmb3J3YXJkIj4KKzxnbyBocmVmPSIjY2FyZDIiLz4KKzwvb25ldmVudD4KKzwvdGVt
cGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEiPgorPHA+VGVzdCBmb3IgdGVtcGxhdGUgZWxlbWVudCBp
biBXTUw8L3A+Cis8cD5XaGVuIG90aGVyIHBhZ2UgZW50ZXIgZm9yd2FyZCB0aGlzIHBhZ2UsIGl0
IGZpcnN0IHNob3cgY2FyZCAxLCBhbmQgdGhlbiBpbW1lZGlhdGVseSBqdW1wIHRvIGNhcmQgMiBi
ZWNhdXNlIG9mIHRoZSB0ZW1wbGF0ZSBvbmVudGVyZm9yd2FyZCBldmVudDwvcD4KKzwvY2FyZD4K
KzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9ImNhcmQgMiI+Cis8cD4KK1RoaXMgaXMgY2FyZCAyCis8
L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvdGVtcGxhdGUtb250aW1lci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1vbnRpbWVyLndtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGVtcGxhdGUtb250
aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4i
CisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8dGVt
cGxhdGUgb250aW1lcj0iI2NhcmQyIj4KKzwvdGVtcGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEiPgor
PHA+VGVzdCBmb3IgdGVtcGxhdGUgb250aW1lciBldmVudCBpbiBXTUw8L3A+Cis8cD5UaGlzIGlz
IENhcmQgb25lLHdlIHdpbGwganVtcCB0byBjYXJkIDIgYWZ0ZXIgNXMgYmVjYXVzZSBvZiB0aGUg
dGVtcGxhdGUgb250aW1lciBldmVudDwvcD4KKzx0aW1lciB2YWx1ZT0iNTAiLz4KKzwvY2FyZD4K
KzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9ImNhcmQgMiI+Cis8cD4KK1RoaXMgaXMgY2FyZCAyCis8
L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvdGltZXIud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvdGltZXIud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy90aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dB
UEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21s
XzEuMS54bWwiPgorCis8d21sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250
cm9sIiBjb250ZW50PSJtYXgtYWdlPTAiLz4KKzwvaGVhZD4KKzxjYXJkIGlkPSJjYXJkMSIgb250
aW1lcj0iI2NhcmQyIiB0aXRsZT0iQ2FyZCBvbmUiPgorPHA+IFRoaXMgdGVzdCBjYXNlIGlzIHVz
ZWQgdG8gdGVzdCB0aW1lciBpbiBXTUwgPC9wPgorICAgIDx0aW1lciBuYW1lPSJ0aW1lMSIgdmFs
dWU9IjUwIi8+CisgICAgPHA+CisgICAgVGhpcyBpcyBjYXJkIG9uZTxici8+VGhlIHRpbWVyIGlz
IHRyaWdnZXJlZCBieSB0aGUgb250aW1lciBpbnRyaW5zaWMgZXZlbnQob250aW1lciBhcyBhdHRy
aWJ1dGUgb2YgY2FyZCBlbGVtZW50KTxici8+V2hlbiB0aGUgdGltZXIgaXMgdGltZW91dChhZnRl
ciA1cyksIHdpbGwganVtcCB0byBjYXJkIHR3by4KKyAgICA8L3A+Cis8L2NhcmQ+CisKKzxjYXJk
IGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgdHdvIj4KKyAgICA8b25ldmVudCB0eXBlPSJvbnRpbWVy
Ij4KKyAgICA8Z28gaHJlZj0iI2NhcmQxIi8+CisgICAgPC9vbmV2ZW50PgorICAgIDx0aW1lciBu
YW1lPSJ0aW1lcjIiIHZhbHVlPSIzMCIvPgorICAgIDxwPiAKKyAgICBUaGlzIGlzIGNhcmQgVHdv
ITxici8+IFRoZSB0aW1lciBpcyB0cmlnZ2VyZWQgYnkgdGhlIG9udGltZXIgaW50cmluc2ljIGV2
ZW50KG9udGltZXIgaXMgc3BlY2lmaWVkIGJ5IG9uZXZlbnQgZWxlbWVudCk8YnIvPldoZW4gdGhl
IHRpbWVyIGlzIHRpbWVvdXQoYWZ0ZXIgM3MpLCB3aWxsIGp1bXAgYmFjayB0byBjYXJkIG9uZS4K
KyAgICA8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy92YXJpYWJsZS1zdWJzdGl0dXRpb24ud21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdmFyaWFibGUtc3Vic3RpdHV0
aW9uLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvdmFyaWFibGUtc3Vic3RpdHV0aW9uLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQ
Rk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxf
MS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IlRlc3QgdmFyaWFibGUg
c3Vic3RpdHV0aW9uIj4KKyA8cD4gVGVzdCBmb3IgdmFyaWFibGUgc3Vic3RpdHV0aW9uIDwvcD4K
KyA8cD4gQ2xpY2sgIlJlZmVyc2giIHRvIHJlZnJlc2ggdGhlIGNhcmQsIGFuZCB0aGUgdmFyYWli
bGUgcmVmZXJlbmNlcyBpbiB0aGUgY2FyZCB3aWxsIGJlIHN1YnN0aXR1ZWQ8L3A+CisgIDxhbmNo
b3I+IFJlZnJlc2ggPGJyLz4KKyAgPHJlZnJlc2g+IAorICA8c2V0dmFyIG5hbWU9ImhpIiB2YWx1
ZT0iaGVsbG8iLz4KKyAgPHNldHZhciBuYW1lPSJuYW1lIiB2YWx1ZT0iIFlpIGNoYW8iLz4KKyAg
PHNldHZhciBuYW1lPSJuYW1lMiIgdmFsdWU9IiQobmFtZTplKSIvPgorICA8c2V0dmFyIG5hbWU9
Im5hbWUzIiB2YWx1ZT0iJChuYW1lMjp1KSIvPgorICA8L3JlZnJlc2g+CisgIDwvYW5jaG9yPgor
ICA8cD5zZXQgaGkgPSAiaGVsbG8iLCBuYW1lID0gIiBZaSBjaGFvIiA8YnIvPgorICA8IVtDREFU
QVskKGhpKSwkbmFtZV1dPiA9PiAkKGhpKSwkbmFtZSA8YnIvPgorICA8IVtDREFUQVskaGksJChu
YW1lOmVzQ2FwZSldXT4gPT4gJGhpLCQobmFtZTplc0NhcGUpIDxici8+CisgIDwhW0NEQVRBWyRo
aSwkKG5hbWU6ZSldXT4gPT4gJGhpLCQobmFtZTplKSA8YnIvPgorICA8IVtDREFUQVskaGksJChu
YW1lOlUpXV0+ID0+ICRoaSwkKG5hbWU6VSkgPGJyLz4KKyAgPC9wPgorICA8cD5zZXQgbmFtZTIg
PSAkJChuYW1lOmUpIDxici8+CisgIDwhW0NEQVRBWyQoaGkpLCQobmFtZTIpXV0+ID0+ICQoaGkp
LCQobmFtZTIpIDxici8+CisgIDwhW0NEQVRBWyQoaGkpLCQkKG5hbWU6ZSldXT4gPT4gJChoaSks
JCQobmFtZTplKSA8YnIvPgorICA8L3A+CisgIDxwPnNldCBuYW1lMyA9ICQkKG5hbWUyOnUpIDxi
ci8+CisgIDwhW0NEQVRBWyQoaGkpLCRuYW1lM11dPiA9PiAkKGhpKSwkbmFtZTM8YnIvPgorICA8
IVtDREFUQVskKGhpKSwkKG5hbWUzOmUpXV0+ID0+ICQoaGkpLCQobmFtZTM6ZSkgPGJyLz4KKyAg
PC9wPgorIDwvY2FyZD4KKzwvd21sPgo=
</data>
<flag name="review"
          id="10214"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23849</attachid>
            <date>2008-09-26 07:17:20 -0700</date>
            <delta_ts>2008-11-12 11:17:27 -0800</delta_ts>
            <desc>Layout tests</desc>
            <filename>wml-layouttests.patch</filename>
            <type>text/plain</type>
            <size>56066</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2JyLWVsZW1lbnQtaW4tdGFibGUud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2JyLWVsZW1lbnQtaW4tdGFibGUud21sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvYnItZWxlbWVudC1pbi10YWJsZS53
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pgor
PCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRw
Oi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRs
ZT0iUGFyYWdyYXBocyI+CisgPHA+IFRoaXMgdGVzdCBjYXNlIGlzIHVzZWQgdG8gdGVzdCBiciBl
bGVtZW50IGluIGEgdGFibGUuIGVhY2ggY2VsbCBpcyBhbGlnbmVkIHRvIGxlZnQsIGFuZCB0aGUg
QlIgd2lsbCBicmVhayB0aGUgInh4eHh4eHh4IiB0ZXh0IGluIHRoZSBsYXN0IHRkPC9wPgorIDx0
YWJsZSBjb2x1bW5zPSczJyBhbGlnbj0iTExMIj4KKyAgICA8dHI+CisgICAgIDx0ZCBpZD0iYzEi
PkNlbGwgb25lPC90ZD4KKyAgICAgPHRkIGlkPSJjMiI+Q2VsbCB0d288L3RkPgorICAgICA8dGQg
aWQ9ImMzIj5jMzwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgIDx0ZCBpZD0iYSI+Y2Vs
bCBhPC90ZD4KKyAgICAgPHRkIGlkPSJiIj5jZWxsIGI8L3RkPgorICAgICA8dGQgaWQ9ImMiPnh4
eHh4PGJyLz54eHg8L3RkPgorICAgIDwvdHI+CisgPC90YWJsZT4KKyA8L2NhcmQ+Cis8L3dtbD4g
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9ici1lbGVtZW50LWluLXRleHQud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2JyLWVsZW1lbnQtaW4tdGV4dC53bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9ici1lbGVtZW50LWluLXRleHQud21s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFE
T0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0i
UGFyYWdyYXBocyI+CisgPHA+IFRoaXMgdGVzdCBjYXNlIGlzIHVzZWQgdG8gdGVzdCBiciBlbGVt
ZW50IGluIHRleHQ8L3A+CisgIFRoaXMgaXMgYSBwaWVjZSBvZiB0ZXh0IDxici8+d2l0aCBhIGxp
bmUgYnJlYWsKKyA8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9j
YXJkLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2NhcmQt
ZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9jYXJkLWVs
ZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMC8vRU4i
CisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxj
YXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQgMSI+VGhpcyBpcyBjYXJkIG9uZTwvY2FyZD4KKzxj
YXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+VGhpcyBpcyBjYXJkIHR3bzwvY2FyZD4KKzwv
d21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvY2FzZS1zZW5zaXRpdml0eS53bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvY2FzZS1zZW5zaXRpdml0eS53bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9jYXNlLXNlbnNpdGl2aXR5LndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFE
T0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0nY2Fy
ZDEnPgorIDxwPiBUZXN0IGZvciBDYXNlIHNlbnNpdGl2aXR5IGluIFdNTCA8L3A+CisgPHA+IGNv
bXBhcmUgdGhlIHJlc3VsdCBvZiBpbnNlcnRpbmcgJmx0O2JyLyZndDsgYW5kICZsdDtCUi8mZ3Q7
IGludG8gdGhlIHNhbWUgdGV4dCwgPGJyLz50aGUgZm9ybWVyIHNob3VsZCB3b3JrLCBhbmQgdGhl
IGxhdHRlciBkb2Vzbid0LjwvcD4KKyA8dGFibGUgYm9yZGVyPSIxIj4KKyA8dHI+PHRkPlRlc3Qg
Y2FzZSA8YnIvPnNlbnNpdGl2aXR5IGluIFdNTCA8L3RkPjwvdHI+CisgPHRyPjx0ZD5UZXN0IGNh
c2UgPEJSLz5zZW5zaXRpdml0eSBpbiBXTUwgPC90ZD48L3RyPgorIDwvdGFibGU+CisgPC9jYXJk
PgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2NkYXRhLXNlY3Rpb24ud21s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2NkYXRhLXNlY3Rpb24ud21sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvY2RhdGEtc2VjdGlvbi53bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NU
WVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3
LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0nY2FyZDEn
PgorIDxwPiBUZXN0IGZvciBDREFUQSBTZWN0aW9uIGluIFdNTDxici8+IElmIGl0IHBhc3Nlcywg
eW91IGNhbiBzZWUgdGhlIGZvbGxvd2luZyB0ZXh0IDogPC9wPgorIDwhW0NEQVRBWyBUaGlzIGlz
IDxCPiBhIENEQVRBIHRlc3RdXT4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd21sL2NvbW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2NvbW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvY29tbWVu
dC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJo
dHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBp
ZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPgorICA8cD4gVGVzdCBjb21tZW50IGluIFdNTCwgdGhl
IHRleHQgaW4gdGhlIGNvbW1lbnQgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQsIGlmIGl0IHBhc3Nl
cywgeW91IGNhbiBvbmx5IHNlZSB0aGUgdGV4dDogIkhlbGxvIFdvcmxkISIgYWZ0ZXIgdGhpcyBs
aW5lIDwvcD4KKyAgPHA+CisgICAgPCEtLSBUaGlzIGlzIGEgY29tbWVudCAsIGl0IHNob3VsZCBu
b3QgYmUgZGlzcGxheWVkLS0+CisgICAgSGVsbG8gV29ybGQhCisgIDwvcD4KKyA8L2NhcmQ+Cis8
L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLWVsZW1lbnQtb3B0aW9uYWwtYXR0
ci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZG8tZWxlbWVudC1vcHRp
b25hbC1hdHRyLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLWVs
ZW1lbnQtb3B0aW9uYWwtYXR0ci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorPHdtbD4KKyA8Y2FyZCBpZD0iZmlyc3RjYXJkIiB0aXRsZT0iT25lIj4KKyAgPHA+VGVzdCBm
b3IgZG8gZWxlbWVudCBpbiBXTUwgPC9wPgorICA8cD4gVGhlcmUgYXJlIHR3byBkbyBlbGVtZW50
IGluIHRoaXMgY2FyZCwgdGhlIGZpcnN0IG9uZSB3aWxsIGRpc3BsYXksIHRoZSBzZWNvbmQgd29u
J3QgYmVjYXVzZSBpdHMgb3B0aW9uYWwgYXR0cmlidXRlIGlzIHRydWU8L3A+CisgIDxkbyBuYW1l
PSJnbyIgdHlwZT0iYWNjZXB0IiBsYWJlbD0iRG8gMSIgb3B0aW9uYWw9ImZhbHNlIj4KKyAgPGdv
IGhyZWY9IiN0aGlyZGNhcmQiLz4KKyAgPC9kbz4KKyAgPGRvIG5hbWU9ImdvMiIgdHlwZT0iYWNj
ZXB0IiBsYWJlbD0iRG8gMiIgb3B0aW9uYWw9InRydWUiPgorICA8Z28gaHJlZj0iI3NlY29uZGNh
cmQiLz4KKyAgPC9kbz4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0ic2Vjb25kY2FyZCIgdGl0bGU9
IlR3byI+CisgIDxwPlRoaXMgaXMgdGhlIHNlY29uZCBjYXJkPC9wPgorIDwvY2FyZD4KKworIDxj
YXJkIGlkPSJ0aGlyZGNhcmQiIHRpdGxlPSJUaHJlZSI+CisgIDxwPlRoaXMgaXMgdGhlIHRoaXJk
IGNhcmQ8L3A+CisgPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21s
L2RvLXNoYWRvdy53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZG8tc2hh
ZG93LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLXNoYWRvdy53
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pgor
PCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRw
Oi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZT4K
KzxkbyB0eXBlPSJhY2NlcHQiIG5hbWU9ImRvMSIgbGFiZWw9IlRlbXBsYXRlIERvIj4KKzxwcmV2
Lz4KKzwvZG8+Cis8L3RlbXBsYXRlPgorCis8Y2FyZCBpZD0iZmlyc3QiPgorPHA+IFRlc3QgZm9y
IGRvLXNoYWRvdyBpbiBXTUw8L3A+Cis8cD5UaGlzIGlzIGZpcnN0IGNhcmQsIHdoaWNoIHdvbid0
IHNoYWRvdyBkZWNrLWxldmVsIGRvPC9wPgorPGFuY2hvcj4KKzxnbyBocmVmPSIjc2Vjb25kIj5H
byB0byBjYXJkIDI8L2dvPgorPC9hbmNob3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJzZWNvbmQi
PgorPHA+ZGVjay1sZXZlbCBkbyBpcyBzaGFkb3dlZCB3aXRoIG5vb3AuIEl0IGlzIG5vdCBleHBv
c2VkIHRvIHRoZSB1c2VyIDwvcD4KKzxkbyB0eXBlPSJvcHRpb25zIiBuYW1lPSJkbzEiIGxhYmVs
PSJzZWNvbmQgZG8iPgorPG5vb3AvPgorPC9kbz4KKzxhbmNob3I+Cis8Z28gaHJlZj0iI3RoaXJk
Ij5HbyB0byBjYXJkIDM8L2dvPgorPC9hbmNob3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJ0aGly
ZCI+Cis8cD5kZWNrLWxldmVsIGRvIGlzIHNoYWRvd2VkLiBJdCBpcyByZXBsYWNlZCBieSBhIGNh
cmQtbGV2ZWwgZG8gYmVjYXVzZSB0aGV5IGhhdmUgdGhlIHNhbWUgbmFtZTwvcD4KKzxwPgorPGRv
IHR5cGU9Im9wdGlvbnMiIG5hbWU9ImRvMSIgbGFiZWw9ImRvMSI+Cis8Z28gaHJlZj0iLi90ZXN0
LndtbCIvPgorPC9kbz4KKzxici8+Cis8YW5jaG9yPgorPGdvIGhyZWY9IiNmaXJzdCI+R28gdG8g
Y2FyZCAxPC9nbz4KKzwvYW5jaG9yPgorPC9wPgorPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd21sL2RvLXRlbXBsYXRlLndtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9kby10ZW1wbGF0ZS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9kby10ZW1wbGF0ZS53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzEgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZSBpZD0iMiI+Cis8ZG8gbmFtZT0iZ28iIHR5cGU9ImFjY2Vw
dCIgbGFiZWw9IlRlbXBsYXRlIGRvIj4KKzxnbyBocmVmPSIjZmlyc3RjYXJkIi8+Cis8L2RvPgor
PC90ZW1wbGF0ZT4KKyA8Y2FyZCBpZD0iZmlyc3RjYXJkIiB0aXRsZT0iT25lIj4KKyA8cD4gVGVz
dCBmb3IgZG8gZWxlbWVudCBpbiB0ZW1wbGF0ZSBpbiBXTUw8L3A+CisgPHA+IFdoaWNoZXZlciBj
YXJkIHlvdSBlbnRlcmVkLCB5b3UgY2FuIHNlZSB0aGUgdGVtcGxhdGUgZG8gYnV0dG9uIGJlY2F1
c2UgaXQncyBnbG9iYWw8L3A+CisgIDxwPlRoaXMgaXMgdGhlIGZpcnN0IGNhcmQ8L3A+CisgIDxw
PjxhbmNob3I+PGdvIGhyZWY9IiNzZWNvbmRjYXJkIi8+R28gdG8gY2FyZDI8L2FuY2hvcj48L3A+
CisgPC9jYXJkPgorCisgPGNhcmQgaWQ9InNlY29uZGNhcmQiIHRpdGxlPSJUd28iPgorIDxwPiBU
ZXN0IGZvciBkbyBlbGVtZW50IGluIHRlbXBsYXRlIGluIFdNTDwvcD4KKyA8cD4gV2hpY2hldmVy
IGNhcmQgeW91IGVudGVyZWQsIHlvdSBjYW4gc2VlIHRoZSB0ZW1wbGF0ZSBkbyBidXR0b24gYmVj
YXVzZSBpdCdzIGdsb2JhbDwvcD4KKyAgPHA+VGhpcyBpcyB0aGUgc2Vjb25kIGNhcmQgPC9wPgor
ICA8YW5jaG9yPkdvIHRvIGNhcmQgMworICA8Z28gaHJlZj0iI3RoaXJkY2FyZCIvPgorICA8L2Fu
Y2hvcj4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0idGhpcmRjYXJkIiB0aXRsZT0iVGhyZWUiPgor
IDxwPiBUZXN0IGZvciBkbyBlbGVtZW50IGluIHRlbXBsYXRlIGluIFdNTDwvcD4KKyA8cD4gV2hp
Y2hldmVyIGNhcmQgeW91IGVudGVyZWQsIHlvdSBjYW4gc2VlIHRoZSB0ZW1wbGF0ZSBkbyBidXR0
b24gYmVjYXVzZSBpdCdzIGdsb2JhbDwvcD4KKyAgPHA+VGhpcyBpcyB0aGUgdGhpcmQgY2FyZDwv
cD4KKyAgPGFuY2hvcj5CYWNrPHByZXYvPjwvYW5jaG9yPgorIDwvY2FyZD4KKzwvd21sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93bWwvZW50aXR5LndtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9lbnRpdHkud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93bWwvZW50aXR5LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwg
MS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8
d21sPgorPGNhcmQgaWQ9Im5vMSIgdGl0bGU9IlRlc3QgZW50aXR5Ij4KKzxwPlRlc3QgZm9yIEVu
dGl0aWVzIGluIFdNTCBwYWdlPC9wPgorJnF1b3Q7ICAgICAgICYjMzQ7Cis8YnIvPgorJmFtcDsg
ICAgICAgICYjMzg7Cis8YnIvPgorJmFwb3M7ICAgICAgICYjeDI3OworPGJyLz4KKyZsdDsgICAg
ICAgICAmIzYwOworPGJyLz4KKyZndDsgICAgICAgICAmIzYyOworPGJyLz4KKz0mbmJzcDs9JiMx
NjA7PQorPGJyLz4KK0FBJnNoeTtBQSYjMTczO0FBCis8YnIvPiAKKzxwPiAmbHQ7aGVsbG8mZ3Q7
IDwvcD4KKzwvY2FyZD4KKworPGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iJChjYXJkaWQpIHRpdGxl
Ij5UaGlzIGlzIGNhcmQgMjwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93
bWwvZXJyLWV2ZW50LWJpbmRpbmctY29uZmxpY3Qud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2Vyci1ldmVudC1iaW5kaW5nLWNvbmZsaWN0LndtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1ldmVudC1iaW5kaW5nLWNvbmZsaWN0LndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFE
T0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzxjYXJkIGlkPSJjYXJk
MSI+CisgIDxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKyAgPHJlZnJlc2gvPgorICA8
L29uZXZlbnQ+CisgIDxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKyAgPHByZXYvPgor
ICA8L29uZXZlbnQ+CisgIDxwPiBUZXN0IGZvciB0aGUgZXJyb3IgZXZlbnQtYmluZGluZyBjb25m
bGljdDwvcD4KKyAgWW91IHNob3VsZCBOT1Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUg
ZXJyb3Igb2YgZXZlbnQtYmluZGluZyBlcnJvciBpbiBjYXJkIGVsZW1lbnQgCis8L2NhcmQ+Cis8
L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlkLWxvY2F0aW9uLWZv
ci12YXJyZWYud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZh
bGlkLWxvY2F0aW9uLWZvci12YXJyZWYud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93bWwvZXJyLWludmFsaWQtbG9jYXRpb24tZm9yLXZhcnJlZi53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1
bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJubzEiIHRpdGxlPSJD
YXJkIDEiPiAKKzxwPiBUZXN0IGZvciB2YXJpYWJsZSByZWZlcmVuY2UgdmFsaWRhdGlvbjwvcD4K
KzxwPiBBbiBlcnJvciB3aWxsIG9jY3VyIHdoZW4gbG9hZGluZyB0aGUgY2FyZCBiZWNhdXNlIHRo
ZSB2YXJpYWJsZSByZWZlcmVuY2UgaXMgcGxhY2VkIGluIGEgaW52YWxpZCBsb2NhdGlvbjwvcD4K
KzxkbyB0eXBlPSIkKHZhcikiIG5hbWU9InJlZnJlc2giPgorICA8cmVmcmVzaD4KKyAgICA8c2V0
dmFyIG5hbWU9InZhciIgdmFsdWU9InZhcmFpYmxlMiIvPgorICA8L3JlZnJlc2g+Cis8L2RvPgor
PC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItaW52YWxpZC10
YWJsZWNvbHVtbi1udW1iZXIud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2Vyci1pbnZhbGlkLXRhYmxlY29sdW1uLW51bWJlci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9lcnItaW52YWxpZC10YWJsZWNvbHVtbi1udW1iZXIud21sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQ
RSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0ibm8xIiB0
aXRsZT0iQ2FyZCAxIj4gCis8cD4gVGVzdCBmb3IgdGFibGUgY29sdW1uIG51bWJlciB2YWxpZGF0
aW9uIDwvcD4KKzxwPiBUaGUgdGFibGUgd29uJ3QgYmUgZGlzcGxheWVkIGJlY2F1c2Ugb2YgdGhl
IGludmFsaWQgY29sdW1ucyBhdHRydWlidGUgb2YgdGFibGUgZWxlbWVudDwvcD4KKzx0YWJsZSBj
b2x1bW5zPSIwIj4KKzx0cj48dGQ+Q2VsbCAxPC90ZD48dGQ+Q2VsbCAyPC90ZD48L3RyPgorPC90
YWJsZT4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWlu
dmFsaWQtdmFyaWFibGUtbmFtZS53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
bWwvZXJyLWludmFsaWQtdmFyaWFibGUtbmFtZS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9lcnItaW52YWxpZC12YXJpYWJsZS1uYW1lLndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9Im5vMSIgdGl0bGU9IkNh
cmQgMSI+IAorPHA+IFRlc3QgZm9yIHZhcmlhYmxlIG5hbWUgdmFsaWRhdGlvbiA8L3A+Cis8ZG8g
dHlwZT0iYWNjZXB0IiBuYW1lPSJyZWZyZXNoIj4KKyAgPHJlZnJlc2g+CisgICAgPHNldHZhciBu
YW1lPSIkK3ZhciIgdmFsdWU9InZhcmFpYmxlMiIvPgorICA8L3JlZnJlc2g+Cis8L2RvPgorPC9j
YXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktYWNjZXNz
LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktYWNjZXNz
LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0aS1hY2Nl
c3Mud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
ID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIg
Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGhlYWQ+
Cis8YWNjZXNzIHBhdGg9Ii8iIGRvbWFpbj0iZG9tYWluIi8+Cis8YWNjZXNzIHBhdGg9Ii9wYXRo
IiBkb21haW49ImRvbWFpbiIvPgorPC9oZWFkPgorPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPHA+IFRl
c3QgZm9yIG11bHRpLWFjY2VzcyBlcnJvcjwvcD4KKyAgWW91IHNob3VsZCBub3Qgc2VlIHRoaXMg
dGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgbXVsdGktYWNjZXNzIGluIGhlYWQgZWxlbWVu
dAorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGkt
aHR0cC1lcXVpdi1pbi1tZXRhLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9lcnItbXVsdGktaHR0cC1lcXVpdi1pbi1tZXRhLndtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0aS1odHRwLWVxdWl2LWluLW1ldGEud21sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUg
d21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2Fw
Zm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVx
dWl2PSJDb250ZW50LVR5cGUiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgQ29udGVudD0idGV4
dC92bmQud2FwLndtbDsgQ2hhcnNldD1nYjIzMTIiLz4KKzwvaGVhZD4KKyA8Y2FyZCBpZD0iY2Fy
ZDEiPgorICA8cD4gVGVzdCBmb3IgbWV0YSBtdWx0aS1odHRwLWVxdWl2IGVycm9yPC9wPgorICBZ
b3Ugc2hvdWxkIG5vdCBzZWUgdGhpcyB0ZXh0LCBiZWNhdXNlIG9mIHRoZSBlcnJvciBvZiBtdWx0
aS1odHRwLWVxdWl2IGluIG1ldGEgZWxlbWVudAorIDwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93bWwvZXJyLW11bHRpLW5hbWUtaW4tbWV0YS53bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLW11bHRpLW5hbWUtaW4tbWV0YS53bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktbmFtZS1pbi1tZXRhLndt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/Pgor
PCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRw
Oi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzxoZWFkPgorPG1l
dGEgbmFtZT0iQ29udGVudC1UeXBlIiBuYW1lPSJDb250ZW50LVR5cGUiIENvbnRlbnQ9InRleHQv
dm5kLndhcC53bWw7IENoYXJzZXQ9Z2IyMzEyIi8+Cis8L2hlYWQ+CisgPGNhcmQgaWQ9ImNhcmQx
Ij4KKyAgPHA+IFRlc3QgZm9yIG1ldGEgbXVsdGktbmFtZSBlcnJvcjwvcD4KKyAgWW91IHNob3Vs
ZCBub3Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgbXVsdGktbmFtZSBp
biBtZXRhIGVsZW1lbnQKKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d21sL2Vyci1tdWx0aS10aW1lci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
bWwvZXJyLW11bHRpLXRpbWVyLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d21sL2Vyci1tdWx0aS10aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8v
RFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1s
Ij4KKzx3bWw+CisgPGNhcmQgaWQ9ImNhcmQxIiBvbnRpbWVyPSJ0ZXN0LndtbCI+CisgPHRpbWVy
IGlkPSJ0aW1lcjEiIG5hbWU9InQxIiB2YWx1ZT0iMjAiLz4KKyA8dGltZXIgaWQ9InRpbWVyMiIg
bmFtZT0idDIiIHZhbHVlPSIzMCIvPgorICA8cD4gVGVzdCBmb3IgZXJyb3Igb2YgbWV0YSBtdWx0
aS10aW1lciBpbiBvbmUgY2FyZCA8L3A+CisgIFlvdSBzaG91bGQgTk9UIHNlZSB0aGlzIHRleHQs
IGJlY2F1c2Ugb2YgdGhlIGVycm9yIHRoYXQgbW9yZSB0aGFuIG9uZSB0aW1lciBleGlzdCBpbiBv
bmUgY2FyZCAKKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vy
ci1zYW1lbmFtZS1kby53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJy
LXNhbWVuYW1lLWRvLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vy
ci1zYW1lbmFtZS1kby53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdN
TCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3
bWw+Cis8Y2FyZCBpZD0iY2FyZDEiPgorICA8ZG8gbmFtZT0iZG8iIHR5cGU9ImFjY2VwdCI+Cisg
IDxyZWZyZXNoLz4KKyAgPC9kbz4KKyAgPGRvIG5hbWU9ImRvIiB0eXBlPSJhY2NlcHQiPgorICA8
cmVmcmVzaC8+CisgIDwvZG8+CisgIDxwPiBUZXN0IGZvciB0aGUgZXJyb3IgdGhhdCBtb3JlIHRo
YW4gb25lIGRvIGVsZW1lbnQgaGFzIHNhbWUgbmFtZTwvcD4KKyAgWW91IHNob3VsZCBOT1Qgc2Vl
IHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgbmFtZS1jb25mbGljdCBvZiBkbyBl
bGVtZW50IAorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnIt
dW5hbGxvd2VkLXRhc2staW4tYW5jaG9yLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9lcnItdW5hbGxvd2VkLXRhc2staW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci11bmFsbG93ZWQtdGFzay1pbi1hbmNob3Iud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9ImNhcmQx
Ij4KKyAgPGFuY2hvcj4KKyAgPG5vb3AvPgorICA8L2FuY2hvcj4KKyAgPHA+IFRlc3QgZm9yIHRo
ZSBlcnJvciB0aGF0IHNwZWNpZnlpbmcgbm9vcCB0YXNrIHRvIGFuY2hvciBlbGVtZW50PC9wPgor
ICBZb3Ugc2hvdWxkIE5PVCBzZWUgdGhpcyB0ZXh0LCBiZWNhdXNlIG9mIHRoZSBlcnJvciB0aGF0
IHNwZWNpZnlpbmcgdW5hbGxvd2VkIHRhc2sgdG8gYW5jaG9yIGVsZW1lbnQgCis8L2NhcmQ+Cis8
L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1sb2NhbHNyYy53bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW1nLWxvY2Fsc3JjLndtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1sb2NhbHNyYy53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iVGVzdCBpbWFnZSI+
CisgPHA+IFRlc3QgZm9yIGltZyBlbGVtZW50IGluIFdNTCA8L3A+CisgPHA+IFRoaXMgaW1hZ2Ug
aXMgc3BlY2lmaWVkIGJ5IGxvY2Fsc3JjIGF0dHJpYnV0ZSBvZiBpbWcgZWxlbWVudDwvcD4KKyB0
ZXN0IGNvZGU6PCFbQ0RBVEFbCisgPHA+TG9jYWw8aW1nIGhlaWdodD0iNjAiIHdpZHRoPSI0MCIg
dnNwYWNlPSI0MCIgaHNwYWNlPSI2MCIgYWxpZ249Im1pZGRsZSIgbG9jYWxzcmM9InJlc291cmNl
cy9zbWlsZS5naWYiIGFsdD0ic21pbGUiLz5JbWFnZTwvcD4KKyBdXT4KKyA8YnIvPgorIDxwPkxv
Y2FsPGltZyBoZWlnaHQ9IjYwIiB3aWR0aD0iNDAiIHZzcGFjZT0iNDAiIGhzcGFjZT0iNjAiIGFs
aWduPSJtaWRkbGUiIGxvY2Fsc3JjPSJyZXNvdXJjZXMvc21pbGUuZ2lmIiBhbHQ9InNtaWxlIi8+
SW1hZ2U8L3A+CisgPC9jYXJkPgorPC93bWw+IApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW1nLXNyYy1sb2NhbHNyYy1hbHQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d21sL2ltZy1zcmMtbG9jYWxzcmMtYWx0LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ltZy1zcmMtbG9jYWxzcmMtYWx0LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8v
V0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93
bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIHRpdGxlPSJUZXN0IGltYWdlIj4KKyA8cD4gVGVz
dCBmb3IgaW1nIGVsZW1lbnQgaW4gV01MIDwvcD4KKyA8cD4gVGhpcyBpbWFnZSBjYW4gYmUgc3Bl
Y2lmaWVkIGJ5IGJvdGggc3JjIGFuZCBsb2NhbHNyYyBhdHRyaWJ1dGVzIG9mIGltZyBlbGVtZW50
PC9wPgorIDxwPiAxKSBsb2NhbHNyYyB0YWtlcyBwcmVjZWRlbmNlIG92ZXIgc3JjIGF0dHJpYnV0
ZSA8YnIvPgorIEltYWdlPGltZyBzcmM9Imh0dHA6Ly93d3cuYmFpZHUuY29tL2ltZy9iYWlkdS5n
aWYiIGxvY2Fsc3JjPSJyZXNvdXJjZXMvc21pbGUuZ2lmIiBhbHQ9IklNQUdFIi8+SW1hZ2UKKyA8
YnIvPgorIDIpIGxvY2Fsc3JjIGNhbid0IGxvY2F0ZSB0aGUgaW1hZ2UsIHNyYyB3b3JrcyA8YnIv
PgorIEltYWdlPGltZyBzcmM9Imh0dHA6Ly93d3cuYmFpZHUuY29tL2ltZy9iYWlkdS5naWYiIGxv
Y2Fsc3JjPSJ3cm9uZ3BhdGgvc21pbGUuZ2lmIiBhbHQ9IklNQUdFIi8+SW1hZ2UKKyA8YnIvPgor
IDMpIG5laXRoZXIgbG9jYWxzcmMgbm9yIHNyYyBjYW4gbG9jYXRlIHRoZSBpbWFnZSwgYWx0IHdv
cmtzIDxici8+CisgSW1hZ2U8aW1nIHNyYz0iaHR0cDovL3d3dy5iYWlkdS5jb20vd3JvbmdwYXRo
L2JhaWR1LmdpZiIgbG9jYWxzcmM9Indyb25ncGF0aC9zbWlsZS5naWYiIGFsdD0iSU1BR0UiLz5J
bWFnZQorIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9pbWctc3JjLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbWctc3Jj
LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1zcmMud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IlRl
c3QgaW1hZ2UiPgorIDxwPiBUZXN0IGZvciBpbWcgZWxlbWVudCBpbiBXTUwgPC9wPgorIDxwPiBU
aGlzIGltYWdlIGlzIHNwZWNpZmllZCBieSBzcmMgYXR0cmlidXRlIG9mIGltZyBlbGVtZW50PC9w
PgorIHRlc3QgY29kZTo8IVtDREFUQVsKKyA8cD5OZXR3b3JrIDxpbWcgaGVpZ2h0PSI2MCIgd2lk
dGg9IjQwIiB2c3BhY2U9IjQwIiBoc3BhY2U9IjYwIiBhbGlnbj0ibWlkZGxlIiBzcmM9Imh0dHA6
Ly93YXAuYmFpZHUuY29tL2xvZ28uZ2lmIiBhbHQ9InNtaWxlIi8+SW1hZ2U8L3A+CisgXV0+Cisg
PGJyLz4KKyA8cD5OZXR3b3JrIDxpbWcgaGVpZ2h0PSI2MCIgd2lkdGg9IjQwIiB2c3BhY2U9IjQw
IiBoc3BhY2U9IjYwIiBhbGlnbj0ibWlkZGxlIiBzcmM9Imh0dHA6Ly93YXAuYmFpZHUuY29tL2xv
Z28uZ2lmIiBhbHQ9InNtaWxlIi8+SW1hZ2U8L3A+CisgPC9jYXJkPgorPC93bWw+IApJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93bWwvcC1hbGlnbi53bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93bWwvcC1hbGlnbi53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9wLWFsaWduLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOSBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwg
MS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm91cm0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3
bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkMSI+Cis8cD4gVGVzdCBmb3IgYWxpZ24g
YXR0cmlidXRlIG9mIHAgZWxlbWVudCBpbiBXTUwgPC9wPgorPGJyLz4KKzwhW0NEQVRBWyA8cCBh
bGlnbj0iY2VudGVyIj5dXT4KKzxwIGFsaWduPSJjZW50ZXIiPgorSGVyZSB5b3UgY2FuIGxlYXJu
IHZhcmlvdXMgbW9iaWxlIHRlY2hub2xvZ2llcyBsaWtlIFdBUCAvIFdBUCAyLjAsIFdNTCwgV01M
U2NyaXB0LCBYSFRNTCBNUCwgV0NTUyAvIFdBUCBDU1MsIFVBUHJvZiBhbmQgU01TIHRocm91Z2gg
b3VyIGZyZWUgdHV0b3JpYWxzLCBhcnRpY2xlcyBhbmQgZXhhbXBsZXMuIFRoaXMgd2ViIHNpdGUg
Y2FuIGhlbHAgd2ViIHByb2dyYW1tZXJzIHdobyB3aXNoIHRvIGV4dGVuZCB0aGVpciBrbm93bGVk
Z2UgdG8gdGhlIHdpcmVsZXNzIHdvcmxkLiAKKzxici8+Cit4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eAorPC9wPgorPGJyLz4KKzwhW0NEQVRBWyA8cCBhbGlnbj0icmlnaHQiPl1dPgor
PHAgYWxpZ249InJpZ2h0Ij4KK0hlcmUgeW91IGNhbiBsZWFybiB2YXJpb3VzIG1vYmlsZSB0ZWNo
bm9sb2dpZXMgbGlrZSBXQVAgLyBXQVAgMi4wLCBXTUwsIFdNTFNjcmlwdCwgWEhUTUwgTVAsIFdD
U1MgLyBXQVAgQ1NTLCBVQVByb2YgYW5kIFNNUyB0aHJvdWdoIG91ciBmcmVlIHR1dG9yaWFscywg
YXJ0aWNsZXMgYW5kIGV4YW1wbGVzLiBUaGlzIHdlYiBzaXRlIGNhbiBoZWxwIHdlYiBwcm9ncmFt
bWVycyB3aG8gd2lzaCB0byBleHRlbmQgdGhlaXIga25vd2xlZGdlIHRvIHRoZSB3aXJlbGVzcyB3
b3JsZC4gCis8YnIvPgoreHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKKzwvcD4KKzxi
ci8+Cis8IVtDREFUQVsgPHAgYWxpZ249ImxlZnQiPl1dPgorPHAgYWxpZ249ImxlZnQiPgorSGVy
ZSB5b3UgY2FuIGxlYXJuIHZhcmlvdXMgbW9iaWxlIHRlY2hub2xvZ2llcyBsaWtlIFdBUCAvIFdB
UCAyLjAsIFdNTCwgV01MU2NyaXB0LCBYSFRNTCBNUCwgV0NTUyAvIFdBUCBDU1MsIFVBUHJvZiBh
bmQgU01TIHRocm91Z2ggb3VyIGZyZWUgdHV0b3JpYWxzLCBhcnRpY2xlcyBhbmQgZXhhbXBsZXMu
IFRoaXMgd2ViIHNpdGUgY2FuIGhlbHAgd2ViIHByb2dyYW1tZXJzIHdobyB3aXNoIHRvIGV4dGVu
ZCB0aGVpciBrbm93bGVkZ2UgdG8gdGhlIHdpcmVsZXNzIHdvcmxkLiAKKzxici8+Cit4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eAorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9wLW1vZGUud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd21sL3AtbW9kZS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9wLW1vZGUud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIiAiaHR0cDovL3d3dy53YXBmb3VybS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4K
KzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQxIj4gCis8IVtDREFUQVsgPHA+IGRlZmF1bHQg
bW9kZSBpcyAid3JhcCIgZm9yIHRoZSBmaXJzdCBwIGVsZW1lbnQgXV0+Cis8cD4gVGVzdCBmb3Ig
bW9kZSBhdHRyaWJ1dGUgb2YgcCBlbGVtZW50IGluIFdNTCA8L3A+Cis8YnIvPgorPCFbQ0RBVEFb
IDxwPiBpdCB3aWxsIHVzZSB0aGUgbW9kZSBvZiBwcmV2aW91cyBwYXJhZ3JhcGggZWxlbWVudF1d
PgorPHA+CitIZXJlIHlvdSBjYW4gbGVhcm4gdmFyaW91cyBtb2JpbGUgdGVjaG5vbG9naWVzIGxp
a2UgV0FQIC8gV0FQIDIuMCwgV01MLCBXTUxTY3JpcHQsIFhIVE1MIE1QLCBXQ1NTIC8gV0FQIENT
UywgVUFQcm9mIGFuZCBTTVMgdGhyb3VnaCBvdXIgZnJlZSB0dXRvcmlhbHMsIGFydGljbGVzIGFu
ZCBleGFtcGxlcy4gVGhpcyB3ZWIgc2l0ZSBjYW4gaGVscCB3ZWIgcHJvZ3JhbW1lcnMgd2hvIHdp
c2ggdG8gZXh0ZW5kIHRoZWlyIGtub3dsZWRnZSB0byB0aGUgd2lyZWxlc3Mgd29ybGQuIAorPGJy
Lz4KK0hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgKKzwv
cD4KKzxici8+Cis8IVtDREFUQVsgPHAgbW9kZT0ibm93cmFwIj5dXT4KKzxwIG1vZGU9Im5vd3Jh
cCI+CitIZXJlIHlvdSBjYW4gbGVhcm4gdmFyaW91cyBtb2JpbGUgdGVjaG5vbG9naWVzIGxpa2Ug
V0FQIC8gV0FQIDIuMCwgV01MLCBXTUxTY3JpcHQsIFhIVE1MIE1QLCBXQ1NTIC8gV0FQIENTUywg
VUFQcm9mIGFuZCBTTVMgdGhyb3VnaCBvdXIgZnJlZSB0dXRvcmlhbHMsIGFydGljbGVzIGFuZCBl
eGFtcGxlcy4gVGhpcyB3ZWIgc2l0ZSBjYW4gaGVscCB3ZWIgcHJvZ3JhbW1lcnMgd2hvIHdpc2gg
dG8gZXh0ZW5kIHRoZWlyIGtub3dsZWRnZSB0byB0aGUgd2lyZWxlc3Mgd29ybGQuIAorPGJyLz4K
K0hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEgKKzwvcD4K
KzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvc2hvdy1maXJzdC1j
YXJkLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9zaG93LWZpcnN0LWNh
cmQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvc2hvdy1maXJzdC1j
YXJkLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
Pz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIgor
Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2Fy
ZCBpZD0ibm8xIj48cD5UZXN0IGZvciBzaG93aW5nIHRoZSBmaXJzdCBjYXJkIG9mIHdtbCBkZWNr
IGluIGRlZmF1bHQgd2hlbiB5b3UgZG9lc24ndCBzcGVjaWZ5IGFueSBjb3JyZWN0IFVSTCBmcmFn
bWVudC48L3A+IElmIHRoZSB0ZXN0IHBhc3NlcywgeW91IHNob3VsZCBzZWUgdGhpcyB0ZXh0Ljwv
Y2FyZD4KKzxjYXJkIGlkPSJubzIiPlRoaXMgaXMgY2FyZCAyLCB5b3Ugc2hvdWxkIE5PVCBzZWUg
dGhlc2UgdGV4dCB3aGlsZSBydW5uaW5nIHRoaXMgdGVzdDwvY2FyZD4KKzwvd21sPgpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC93bWwvdGFibGUtZWxlbWVudC53bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93bWwvdGFibGUtZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dtbC90YWJsZS1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8v
V0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93
bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkPgorIDxwPiBUZXN0IGZvciB0YWJsZSBlbGVtZW50
IGluIFdNTCA8L3A+CisgPHA+IHNvdXJjZSBjb2RlOiA8L3A+CisgPCFbQ0RBVEFbCisgICA8dGFi
bGUgY29sdW1ucz0iMyIgYWxpZ249IkxSUiI+IAorICAgIDx0cj4KKyAgICAgPHRkPkNlbGwgb25l
PC90ZD4KKyAgICAgPHRkPkM8YnIvPmVsbDxici8+IHR3bzwvdGQ+CisgICAgIDx0ZD5DZWxsIHRo
cmVlPC90ZD4KKyAgICA8L3RyPgorICAgIDx0cj4KKyAgICA8dGQ+IG9uZSA8L3RkPgorICAgIDx0
ZC8+CisgICAgPHRkPkMgdGhyZWU8L3RkPgorICAgIDwvdHI+CisgICA8L3RhYmxlPgorIF1dPgor
IDxici8+CisgIDxwPgorICAgPHRhYmxlIGNvbHVtbnM9IjMiIGFsaWduPSJMUlIiPiAKKyAgICA8
dHI+CisgICAgIDx0ZD5DZWxsIG9uZTwvdGQ+CisgICAgIDx0ZD5DPGJyLz5lbGw8YnIvPiB0d288
L3RkPgorICAgICA8dGQ+Q2VsbCB0aHJlZTwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAg
PHRkPiBvbmUgPC90ZD4KKyAgICA8dGQvPgorICAgIDx0ZD5DIHRocmVlPC90ZD4KKyAgICA8L3Ry
PgorICAgPC90YWJsZT4KKyA8L3A+CisgPC9jYXJkPgorPC93bWw+IApJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93bWwvdGVzdC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwv
dGVzdC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC90ZXN0LndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIGlkPSdjYXJk
MSc+CisgPHA+IFRoaXMgcGFnZSBpcyBhc3Npc3RhbnQgcGFnZS4gTWFueSB0ZXN0IHBhZ2VzIHdp
bGwganVtcCBoZXJlLiA8L3A+CisgPHA+Q2xpY2sgIkJhY2siIHRvIGdvIGJhY2sgdG8gdGhlIHBy
ZXZpb3VzIHBhZ2U8L3A+CisgPGFuY2hvcj4gQmFjayA8cHJldi8+PC9hbmNob3I+CisgPC9jYXJk
PgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC90ZXh0LWVtcGhhc2lzLndtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC90ZXh0LWVtcGhhc2lzLndtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL3RleHQtZW1waGFzaXMud21sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQ
RSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53
YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IlRleHQg
Rm9ybWF0dGluZyI+CisgIDxwPiBUZXN0IGZvciB0ZXh0IGVtcGhhc2lzIG9mIFdNTCA8L3A+Cisg
IDxwPgorICAgbm9ybWFsPGJyLz4KKyAgIDxlbT5lbXBoYXNpemVkPC9lbT48YnIvPgorICAgPHN0
cm9uZz5zdHJvbmc8L3N0cm9uZz48YnIvPgorICAgPGI+Ym9sZDwvYj48YnIvPgorICAgPGk+aXRh
bGljPC9pPjxici8+CisgICA8dT51bmRlcmxpbmU8L3U+PGJyLz4KKyAgIDxiaWc+YmlnPC9iaWc+
PGJyLz4KKyAgIDxzbWFsbD5zbWFsbDwvc21hbGw+CisgIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL3ZhbGlkYXRlLWR0ZC53bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvdmFsaWRhdGUtZHRkLndtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd21sL3ZhbGlkYXRlLWR0ZC53bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9Im5vMSIgdGl0bGU9IkNhcmQgMSI+IAor
PHA+VGVzdCBmb3IgRFREIHZhbGlkYXRpb24gb2YgV01MIGZpbGU8YnIvPklmIHRoZSBEVENUWVBF
IGlzIGluY29ycmVjdCBvciBtaXNzaW5nLCB0aGlzIHRlc3QgZmFpbGVzLjwvcD4KKzwvY2FyZD4K
Kzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWJy
LWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvYS1ici1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYS1ici1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJ
QyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3Jn
L0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIHRpdGxlPSJBIGVsZW1lbnQgVGVzdCI+
CisgIDxwPlRlc3QgZm9yIEEgZWxlbWVudCBpbmNsdWRpbmcgQlIgZWxlbWVudDwvcD4KKyAgPHA+
CisgICAiTmV4dCBQYWdlIiB3aWxsIGJlIGJyb2tlbiBieSBCUiBlbGVtZW50IGJldHdlZW4gdGhl
bTxici8+CisgICA8YSBocmVmPSIuLi90ZXN0LndtbCI+TmV4dCA8YnIvPiBwYWdlPC9hPgorICA8
L3A+CisgPC9jYXJkPgorPC93bWw+IAorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL2EtZWxlbWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWVsZW1lbnQud21sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3
bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBm
b3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IkEgZWxlbWVu
dCBUZXN0Ij4KKyAgPHA+VGVzdCBmb3IgQSBlbGVtZW50LiA8YnIvPldoZW4gbW91c2UgbW92ZXMg
aW50byBsaW5rLCAiZ28gdG8gdGVzdC53bWwiIHdpbGwgYXBwZWFyLCBjbGljayB0aGUgbGluaywg
d2lsbCBqdW1wIHRvIHRlc3Qud21sPC9wPgorICAKKyAgPHA+CisgICA8YSBocmVmPSIuLi90ZXN0
LndtbCIgdGl0bGU9ImdvIHRvIHRlc3Qud21sIiA+TmV4dCBwYWdlPC9hPgorICA8L3A+CisgPC9j
YXJkPgorPC93bWw+IAorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL2EtaW1nLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvYS1pbWctZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtaW1nLWVsZW1lbnQud21sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQ
RSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53
YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IkEgZWxl
bWVudCBUZXN0Ij4KKyAgPHA+VGVzdCBmb3IgQSBlbGVtZW50IGluY2x1ZGluZyBpbWcgZWxlbWVu
dC4gPC9wPgorICA8cD4KKyAgIDxhIGhyZWY9Ii4uL3Rlc3Qud21sIiB0aXRsZT0iTmV4dCBQYWdl
Ij48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL3NtaWxlLmdpZiIvPjwvYT4KKyAgPC9wPgorIDwvY2Fy
ZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNl
cy9hY2Nlc3MtdGFyZ2V0LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL2FjY2Vzcy10YXJnZXQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hY2Nlc3MtdGFyZ2V0LndtbAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUg
d21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3Lndh
cGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgb250aW1lcj0iLi90
YXJnZXRkZWNrLndtbCI+Cis8dGltZXIgbmFtZT0idDEiIHZhbHVlPSIzMCIvPgorPHA+IFRlc3Qg
Zm9yIERlY2sgQWNjZXNzIGNvbnRyb2wgaW4gV01MLiA8L3A+Cis8cD4gSWYgdGhlIHRlc3QgcGFz
c2VzLCB0aGlzIGRlY2sgd2lsbCBqdW1wIHRvICJ0YXJnZXRkZWNrLndtbCIgYWZ0ZXIgMyBzZWNv
bmQ8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVy
YWN0aXZlY2FzZXMvYW5jaG9yLWJyLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWJyLWVsZW1lbnQud21sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hbmNob3It
YnItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3
bWw+Cis8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4gVGVzdCBmb3IgYnIgZWxlbWVudCBl
bmNsb3NlZCB3aXRoIGFuY2hvciBlbGVtZW50IDwvcD4KKzxwPgorPGFuY2hvcj48Z28gaHJlZj0i
Li4vdGVzdC53bWwiLz5HbyB0byA8YnIvPnRlc3Qud21sPC9hbmNob3I+Cis8L3A+Cis8L2NhcmQ+
Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5j
aG9yLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVy
YWN0aXZlY2FzZXMvYW5jaG9yLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hbmNob3ItZWxlbWVudC53bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdt
bCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZv
cnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iQW5jaG9yIFRh
ZyI+CisgIDxwPgorICBUaGlzIGlzIGFuIGFuY2hvciBib3VuZCB0byBnbyB0YXNrPGJyLz4KKyAg
IDxhbmNob3I+TmV4dCBwYWdlCisgIDxnbyBocmVmPSJjYXJkcy53bWwiLz4KKyAgIDwvYW5jaG9y
PgorICA8L3A+CisKKyAgIDxwPgorICAgVGhpcyBhbiBhbmNob3IgYm91bmQgdG8gcHJldiB0YXNr
PGJyLz4KKyAgIDxhbmNob3IgdGl0bGU9IlByZXZpb3VzIiA+UHJldiBwYWdlCisgICA8cHJldi8+
CisgICA8L2FuY2hvcj4KKyAgPC9wPgorCisgICA8cD4KKyAgICBUaGlzIGFuIGFuY2hvciBib3Vu
ZCB0byByZWZyZXNoIHRhc2s8YnIvPgorICAgIDxhbmNob3IgdGl0bGU9IlJlZnJlc2giPlJlZnJl
c2ggJHZhcgorICAgIDxyZWZyZXNoPiAKKyAgICA8c2V0dmFyIG5hbWU9InZhciIgdmFsdWU9Im1l
Ii8+CisgICAgPC9yZWZyZXNoPgorICAgIDwvYW5jaG9yPgorICA8L3A+CisKKyAgIDxwPgorICAg
VGhpcyBpcyBhbiBhbmNob3IgY29udGFpbnMgaW1nIGVsZW1lbnQsIGJvdW5kIHRvIHByZXYgdGFz
ayA8YnIvPgorICAgPGFuY2hvciB0aXRsZT0iY2xpY2sgdG8gZ28gYmFjayI+CisgICA8cHJldi8+
CisgICA8aW1nIHNyYz0iLi4vcmVzb3VyY2VzL3NtaWxlLmdpZiIgLz4KKyAgIDwvYW5jaG9yPgor
ICAgPC9wPgorIDwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvYW5jaG9yLWltZy1lbGVtZW50LndtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1pbWctZWxlbWVudC53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2Fu
Y2hvci1pbWctZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFRE
IFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+
CisKKzx3bWw+Cis8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4gVGVzdCBmb3IgV01MIGlt
ZyBlbmNsb3NlZCB3aXRoIGFuY2hvciBlbGVtZW50LCB3aGVuIHRoZSBtb3VzZSBtb3ZlIGludG8g
dGhlIGltYWdlLCB0aGUgdGlwICJnbyB0byB0ZXN0LndtbCIgd2lsbCBhcHBlYXI8L3A+Cis8cD4K
KzxhbmNob3IgdGl0bGU9ImdvIHRvIHRlc3Qud21sIj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL3Nt
aWxlLmdpZiIvPiA8Z28gaHJlZj0iLi4vdGVzdC53bWwiLz48L2FuY2hvcj4KKzwvcD4KKzwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9j
YXJkLW5ld2NvbnRleHQtYXR0ci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW5ld2NvbnRleHQtYXR0ci53bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtbmV3Y29udGV4
dC1hdHRyLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9F
TiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cisg
PGNhcmQgaWQ9ImZpcnN0Y2FyZCIgdGl0bGU9Ik9uZSI+CisgPHA+IFRlc3QgZm9yIG5ld2NvbnRl
eHQgYXR0cmlidXRlIG9mIGNhcmQgZWxlbWVudDwvcD4KKyA8cD4gVGhpcyBpcyB0aGUgZmlyc3Qg
Y2FyZCwgQ2xpY2sgIkdvIiB0byBlbnRlciBjYXJkIHR3by4gPGJyLz4gQmVjYXVzZSBuZXdjb250
ZXh0IG9mIGNhcmQgdHdvIGlzIHRydWUsIHRoZSBoaXN0b3J5IHN0YXRlIHdpbGwgYmUgY2xlYW4s
IGFuZCB0aGUgdmFyaWFibGUgIiR2YXIxIiB3b24ndCBiZSByZXBsYWNlZDwvcD4KKyA8ZG8gdHlw
ZT0iYWNjZXB0IiBsYWJlbD0iR28iPgorIDxnbyBocmVmPSIjc2Vjb25kY2FyZCI+CisgICAgPHNl
dHZhciBuYW1lPSJ2YXIxIiB2YWx1ZT0idHdvIi8+IAorIDwvZ28+CisgPC9kbz4KKyA8L2NhcmQ+
CisKKyA8Y2FyZCBpZD0ic2Vjb25kY2FyZCIgdGl0bGU9IiR2YXIxIiBuZXdjb250ZXh0PSJ0cnVl
Ij4KKyA8cD4gVGhpcyBpcyB0aGUgY2FyZCAkdmFyMSA8L3A+CisgPHA+IEJlY2F1c2UgbmV3Y29u
dGV4dCBvZiB0aGlzIGNhcmQgaXMgdHJ1ZSwgdGhlIGhpc3Rvcnkgc3RhdGUgd2lsbCBiZSBjbGVh
biwgYW5kIHRoZSB2YXJpYWJsZSAiJHZhcjEiIHdvbid0IGJlIHJlcGxhY2VkPC9wPgorIDwvY2Fy
ZD4KKzwvd21sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2Vz
L2NhcmQtb25lbnRlcmJhY2t3YXJkLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb25lbnRlcmJhY2t3YXJkLndtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVy
YmFja3dhcmQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgor
PGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIiBvbmVudGVyYmFja3dhcmQ9IiNjYXJkMyI+
IAorPHA+VGVzdCBmb3IgY2FyZCBvbmVudGVyYmFja3dhcmQgaW50cmluc2ljIGV2ZW50PC9wPgor
PHA+IENsaWNrICJHbyIgdG8ganVtcCB0byB0aGUgY2FyZDIsIGlmIHlvdSBnbyBiYWNrIGZyb20g
Y2FyZDIsIGl0IHdpbGwganVtcCB0byBjYXJkMzwvcD4KKzxhbmNob3IgdGl0bGU9ImdvIHRvIGNh
cmQyIj4KKzxnbyBocmVmPSIjY2FyZDIiPkdvPC9nbz4KKzwvYW5jaG9yPgorPC9jYXJkPgorPGNh
cmQgaWQ9ImNhcmQyIiB0aXRsZT0iQ2FyZCAyIj4gCis8cD5UaGlzIGlzIGNhcmQyLGNsaWNrICJC
YWNrIiB3aWxsIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2U8L3A+IAorPGFuY2hvcj4KK0JhY2sK
KzxwcmV2IC8+Cis8L2FuY2hvcj4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMyIgdGl0bGU9IkNh
cmQgMyIgPgorPHA+VGhpcyBpcyBjYXJkMzwvcD4KKzwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IExh
eW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVyZm9yd2FyZC53
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9j
YXJkLW9uZW50ZXJmb3J3YXJkLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVyZm9yd2FyZC53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1
bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJD
YXJkIDEiIG9uZW50ZXJmb3J3YXJkPSIjY2FyZDIiPgorPHA+VGVzdCBmb3IgY2FyZCBvbmVudGVy
Zm9yd2FyZCBldmVudDwvcD4KKzxwPkNhcmQgb25lIHdpbGwganVtcCB0byBjYXJkIHR3byB3aGVu
IGVudGVyZWQgZm9yd2FyZCBpdDwvcD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9
IkNhcmQgMiI+Cis8cD5UZXN0IGZvciBjYXJkIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+
VGhpcyBpcyBjYXJkMiwgSSBhbSBlbnRlcmVkIGJ5IGNhcmQgb25lIGZvcndhcmRpbmc8L3A+Cis8
L2NhcmQ+Cis8L3dtbD4gCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvY2FyZC1vbnRpbWVyLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb250aW1lci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb250aW1lci53bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBF
IHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3Lndh
cGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGhlYWQ+Cis8bWV0YSBodHRw
LWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJtYXgtYWdlPTAiLz4KKzwvaGVhZD4KKzxj
YXJkIGlkPSJjYXJkMSIgb250aW1lcj0iI2NhcmQyIiB0aXRsZT0iQ2FyZCBvbmUiPgorPHA+IFRl
c3QgZm9yIGNhcmQgb250aW1lciBpbnRyaW5zaWMgZXZlbnQgaW4gV01MIDwvcD4KKzx0aW1lciBu
YW1lPSJ0aW1lMSIgdmFsdWU9IjUwIi8+Cis8cD4KK1RoaXMgaXMgY2FyZCBvbmU8YnIvPlRoZSB0
aW1lciBpcyB0cmlnZ2VyZWQgYnkgdGhlIG9udGltZXIgaW50cmluc2ljIGV2ZW50KG9udGltZXIg
YXMgYXR0cmlidXRlIG9mIGNhcmQgZWxlbWVudCk8YnIvPldoZW4gdGhlIHRpbWVyIGlzIHRpbWVv
dXQoYWZ0ZXIgNXMpLCB3aWxsIGp1bXAgdG8gY2FyZCB0d28uCis8L3A+Cis8L2NhcmQ+Cis8Y2Fy
ZCBpZD0iY2FyZDIiPgorVGhpcyBpcyBDYXJkIHR3bworPC9jYXJkPgorPC93bWw+CisKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZGVjay1hY2Nlc3MtY29udHJv
bC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNl
cy9kZWNrLWFjY2Vzcy1jb250cm9sLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZGVjay1hY2Nlc3MtY29udHJvbC53bWwJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdt
bCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBm
b3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIG9uZW50ZXJmb3J3YXJk
PSJ0YXJnZXRkZWNrLndtbCI+Cis8cD4gVGVzdCBmb3IgRGVjayBBY2Nlc3MgY29udHJvbCBpbiBX
TUwuIDwvcD4KKzxwPiBUaGlzIGRlY2sgd2lsbCB0cnkgdG8ganVtcCB0byAidGFyZ2V0ZGVjay53
bWwiIHdoZW4gaXQgaXMgbG9hZGVkLiBCdXQgaXQgd2lsbCA8c3Ryb25nPkZBSUw8L3N0cm9uZz4g
YmVjYXVzZSAidGFyZ2V0ZGVjay53bWwiIGp1c3QgYWxsb3dzICJhY2Nlc3MtdGFyZ2V0LndtbCIg
dG8gYWNjZXNzIGl0LjwvcD4KKzxwPiBZb3UgY2FuIGNsaWNrICdHbycgdG8gZW50ZXIgJ2FjY2Vz
cy10YXJnZXQud21sJywgYW5kIHRoZW4gZW50ZXIgJ3RhcmdldGRlY2sud21sJyBmcm9tIHRoZXJl
PC9wPgorPGFuY2hvciB0aXRsZT0iZ28gdG8gYWNjZXNzLXRhcmdldC53bWwiPjxnbyBocmVmPSIu
L2FjY2Vzcy10YXJnZXQud21sIj5HbzwvZ28+PC9hbmNob3I+Cis8L2NhcmQ+Cis8L3dtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZ28tZWxlbWVudC53bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9nby1l
bGVtZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvZ28tZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorPHdtbD4KKyA8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJPbmUiPgorICA8cD4gVGVzdCBmb3Ig
Z28gZWxlbWVudCBpbiBXTUwgPC9wPgorICA8YnIvPgorICBDYXNlIDE6IGp1bXAgYW1vbmcgb25l
IGRlY2sKKyAgPGRvIG5hbWU9ImdvIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJHbyB0byBjYXJkMiI+
CisgICA8Z28gaHJlZj0iI2NhcmQyIiBzZW5kcmVmZXJlcj0idHJ1ZSIgLz4KKyAgPC9kbz4KKyAg
PHAvPgorICBDYXNlIDI6IGp1bXAgZnJvbSBvbmUgZGVjayB0byBhbm90aGVyIG9uZQorICA8ZG8g
bmFtZT0iZ28yIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJHbyB0byB0ZXN0LndtbCI+CisgICA8Z28g
aHJlZj0iLi4vdGVzdC53bWwiLz4KKyAgPC9kbz4KKyAgPHAvPgorICBDYXNlIDM6IGp1bXAgdG8g
dGVzdC53bWwgYW5kIHBvc3QgZGF0YSB3aXRoIHBvc3QgbWV0aG9kCisgIDxkbyBuYW1lPSJnbzMi
IHR5cGU9ImFjY2VwdCIgbGFiZWw9IlBvc3QgdG8gdGVzdC53bWwiPgorICAgPGdvIGhyZWY9Ii4u
L3Rlc3Qud21sIiBtZXRob2Q9InBvc3QiIGFjY2VwdC1jaGFyc2V0PSJ1dGYtOCwgbGF0aW4xIj4K
KyAgICA8cG9zdGZpZWxkIG5hbWU9InZhcjEiIHZhbHVlPSJoZWxsbyIvPgorICAgIDxwb3N0Zmll
bGQgbmFtZT0idmFyMiIgdmFsdWU9IiB3b3JsZCIvPgorICAgPC9nbz4KKyAgPC9kbz4KKyAgPHAv
PgorICBDYXNlIDQ6IGp1bXAgdG8gdGVzdC53bWwgYW5kIHNlbmQgcmVxdWVzdCB3aXRoIGdldCBt
ZXRob2QgCisgIDxkbyBuYW1lPSJnbzQiIHR5cGU9ImFjY2VwdCIgbGFiZWw9ImdldCBmcm9tIHRl
c3Qud21sIiBzZW5kcmVmZXJlcj0idHJ1ZSI+CisgICA8Z28gaHJlZj0iLi4vdGVzdC53bWwiIG1l
dGhvZD0iZ2V0IiBhY2NlcHQtY2hhcnNldD0idXRmLTgsbGF0aW4xLGlzby04ODU5LTEiPgorICAg
IDxwb3N0ZmllbGQgbmFtZT0idmFyMSIgdmFsdWU9ImhlbGxvIi8+CisgICAgPHBvc3RmaWVsZCBu
YW1lPSJ2YXIyIiB2YWx1ZT0iZnJpZW5kIi8+CisgICA8L2dvPgorICA8L2RvPgorIDwvY2FyZD4K
KworIDxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IlR3byI+CisgIDxwIGFsaWduPSJjZW50ZXIiPgor
ICBUaGlzIGlzIHRoZSBzZWNvbmQgY2FyZAorIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4KKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1lbXB0eW9rLndt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2lu
cHV0LWVtcHR5b2sud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50
ZXJhY3RpdmVjYXNlcy9pbnB1dC1lbXB0eW9rLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
NiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQ
Rk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21s
XzEuMS54bWwiPgorCis8d21sPgorPGNhcmQ+Cis8cD4gVGVzdCBmb3IgaW5wdXQgZW1wdHlvayBh
dHRyaWJ1dGUgaW4gV01MIDwvcD4KK0ZvciB0aGUgZm9sbG93aW5nIGlucHV0IGVsZW1lbnRzLCBp
bnB1dCBpcyByZXF1aXJlZDoKKzxici8+Citmb3JtYXQ9TipNO2VtcHR5b2s9ZmFsc2U8aW5wdXQg
bmFtZT0ieDIiIGVtcHR5b2s9ImZhbHNlIiBmb3JtYXQ9Ik4qTSIvPgorPGJyLz4KK2Zvcm1hdD0q
TTtlbXB0eW9rPWZhbHNlPGlucHV0IG5hbWU9IngzIiBlbXB0eW9rPSJmYWxzZSIgZm9ybWF0PSIq
TSIvPgorPGJyLz4KK0ZvciB0aGUgZm9sbG93aW5nIGlucHV0IGVsZW1lbnRzLCBpbnB1dCBpcyBu
b3QgcmVxdWlyZWQ6Cis8YnIvPgorZGVmYXVsdDxpbnB1dCBuYW1lPSJ4NCIvPiAKKzxici8+Citm
b3JtYXQ9Kk08aW5wdXQgbmFtZT0ieDUiIGZvcm1hdD0iKk0iLz4gCis8YnIvPgorZW1wdHlvaz10
cnVlPGlucHV0IG5hbWU9Ing2IiBlbXB0eW9rPSJ0cnVlIi8+Cis8YnIvPgorZm9ybWF0PW4qTTtl
bXB0eW9rPXRydWU8aW5wdXQgbmFtZT0ieDciIGVtcHR5b2s9InRydWUiIGZvcm1hdD0ibipNIi8+
Cis8YnIvPgorZm9ybWF0PSpNO2VtcHR5b2s9dHJ1ZTxpbnB1dCBuYW1lPSJ4OCIgZW1wdHlvaz0i
dHJ1ZSIgZm9ybWF0PSIqTSIvPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2lucHV0LWZvcm1hdC53bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1mb3JtYXQud21sCShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1
dC1mb3JtYXQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+
Cis8Y2FyZCB0aXRsZT0iSW5wdXQiPgorPHA+IFRlc3QgZm9yIGlucHV0IGZvcm1hdCBpbiBXTUw8
L3A+Cis8cD4KK1Bhc3N3b3JkKGRlZmF1bHQ6Kk0pOjxpbnB1dCBuYW1lPSJkZWZhdWx0Ii8+Cis8
YnIvPgorUGFzc3dvcmQoNk0pOiA8aW5wdXQgbmFtZT0iUHdkIiB0eXBlPSJwYXNzd29yZCIgZm9y
bWF0PSI2TSIvPgorPGJyLz4KK1Bhc3N3b3JkKEFBYSk6IDxpbnB1dCBuYW1lPSJQd2QyIiB0eXBl
PSJwYXNzd29yZCIgZm9ybWF0PSJBQWEiLz4gCis8YnIvPgorb25lLW51bWVyaWMrbG93ZXJjYXNl
KE4qYSk6PGlucHV0IG5hbWU9InVwcGVyIiBmb3JtYXQ9Ik4qYSIvPiAKKzxici8+CitVcHBlcmNh
c2Urbm9uLW51bWVyaWMoQUFBO3NpemU9OCk6PGlucHV0IG5hbWU9InVwcGVyIiBzaXplPSI4IiBm
b3JtYXQ9IkFBQSIvPiAKKzxici8+CitMb3dlcmNhc2Urbm9uLW51bWVyaWMoYWFhO3NpemU9ODt3
aWR0aD0yKTo8aW5wdXQgbmFtZT0ibG93ZXIiIHNpemU9IjgiIHdpZHRoPSIyIiBmb3JtYXQ9ImFh
YSIvPgorPGJyLz4KK051bWVyaWMoNU47bWF4bGVuPTMpOjxpbnB1dCBuYW1lPSJudW1lcmljIiBt
YXhsZW5ndGg9IjMiIGZvcm1hdD0iNU4iLz4KKzxici8+CitOdW1laXJjK3N5bWJvbHMobm5uKTo8
aW5wdXQgbmFtZT0ibnVtZXJpYysiIGZvcm1hdD0ibm5uIi8+Cis8YnIvPgorVXBwZXJjYXNlK251
bWVyaWMrc3ltYm9scyhYWFgpOjxpbnB1dCBuYW1lPSJ1cHBlcisiIGZvcm1hdD0iWFhYIi8+Cis8
YnIvPgorTG93ZXJjYXNlK251bWVyaWMrc3ltYm9scyh4eHgpOjxpbnB1dCBuYW1lPSJsb3dlcisi
IGZvcm1hdD0ieHh4Ii8+Cis8YnIvPgorVXBwZXJjYXNlK251bWVyaWMrc3ltYm9scyhNTU0pOjxp
bnB1dCBuYW1lPSJkZWZfdXBwZXIrIiBmb3JtYXQ9Ik1NTSIvPgorPGJyLz4KK0xvd2VyY2FzZStu
dW1lcmljK3N5bWJvbHMobW1tKTo8aW5wdXQgbmFtZT0iZGVmX2xvd2VyKyIgZm9ybWF0PSJtbW0i
Lz4KKzxici8+CitNaXhlZCBkYXRhKGFcLU5OKngpPGlucHV0IG5hbWU9ImFueSIgZm9ybWF0PSJh
XC1OTip4Ii8+Cis8YnIvPgorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtZ28ud21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1nby53bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZl
bnQtZ28ud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VO
IgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorCis8
Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPiAKKyA8b25ldmVudCB0eXBlPSJvbmVudGVy
Zm9yd2FyZCI+CisgIDxnbyBocmVmPSIjY2FyZDIiLz4KKyA8L29uZXZlbnQ+Cis8cD5UZXN0IGZv
ciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgZ28gdGFzayB3aXRoIG9uZW50ZXJmb3J3YXJk
IGV2ZW50PC9wPgorPHA+d2hlbiBlbnRlciBmb3J3YXJkIHRvIHRoaXMgY2FyZCwgaXQgd2lsbCBq
dW1wIHRvIGNhcmQgMjwvcD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQg
MiI+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgZ28gdGFzayB3aXRo
IG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+d2hpbGUgY2FyZCAxIGlzIGxvYWRlZCwgaXQg
d2lsbCB0cmlnZ2VyIHRoZSBvbmVudGVyZm9yd2FyZCBldmVudCBhbmQganVtcCB0byBjYXJkMiBp
bW1lZGlhdGVseTwvcD4KKzxwPlRoaXMgaXMgY2FyZDI8L3A+Cis8L2NhcmQ+CisKKzwvd21sPiAK
KwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LW5v
b3Aud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvb25ldmVudC1ub29wLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1ub29wLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8v
V0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorPHdtbD4KKworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4g
CisgPG9uZXZlbnQgdHlwZT0ib25lbnRlcmZvcndhcmQiPgorIDxub29wLz4KKyA8L29uZXZlbnQ+
Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgbm9vcCB0YXNrIHdpdGgg
b25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8cD53aGVuIGVudGVyIGZvcndhcmQgdG8gdGhpcyBj
YXJkLCBpdCB3b24ndCBkbyBhbnl0aGluZyBhcyBpZiB0aGUgb25lbnRlcmZvcndhcmQgZXZlbnQg
d2Fzbid0IHRyaWdnZXJlZDwvcD4KKzwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXByZXYud21sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1wcmV2Lndt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
b25ldmVudC1wcmV2LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMiBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwg
MS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdt
bD4KKworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4gCis8cD5UZXN0IGZvciBvbmV2
ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgcHJldiB0YXNrIHdpdGggb25lbnRlcmZvcndhcmQgZXZl
bnQ8L3A+Cis8cD5DbGlja2luZyAiR28iIHdpbGwgY2F1c2UgaXQgdG8ganVtcCB0byB0aGUgY2Fy
ZDIsIGJ1dCB3aGljaCBiaW5kcyBwcmV2IHRhc2sgdG8gb25lbnRlcmZvcndhcmQgZXZlbnQgd2l0
aGluIG9uZXZlbnQgZWxlbWVudCwgYXMgYSByZXN1bHQsIGl0IHdpbGwganVtcCBiYWNrIHRvIGNh
cmQgMTwvcD4KKzxhbmNob3IgdGl0bGU9IkdvIHRvIGNhcmQyIj5HbworPGdvIGhyZWY9IiNjYXJk
MiIvPgorPC9hbmNob3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQg
MiI+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgcHJldiB0YXNrIHdp
dGggb25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8cD5UaGlzIGlzIGNhcmQyLiBXaGVuIGNhcmQg
MiBpcyBlbnRlcmVkIGZvcndhcmQsIGl0IHdpbGwganVtcCBiYWNrIHRvIHRoZSBwcmV2aW91cyBw
YWdlIDwvcD4KKyA8b25ldmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+CisgPHByZXYvPgorIDwv
b25ldmVudD4KKzwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXJlZnJlc2gud21sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1yZWZyZXNoLndtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVu
dC1yZWZyZXNoLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOCBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4x
Ly9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4K
KworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4gCisgPHRpbWVyIG5hbWU9IlQiIHZh
bHVlPSIzMCIvPgorIDxvbmV2ZW50IHR5cGU9Im9udGltZXIiPgorIDxyZWZyZXNoPgorIDxzZXR2
YXIgbmFtZT0idmFyIiB2YWx1ZT0iVkFSSUFCTEUiLz4KKyA8L3JlZnJlc2g+CisgPC9vbmV2ZW50
PgorPHA+VGVzdCBmb3Igb25ldmVudCBlbGVtZW50IHdoaWNoIGJpbmRzIHJlZnJlc2ggdGFzayB3
aXRoIG9udGltZXIgZXZlbnQ8L3A+Cis8cD4gV2hlbiB0aGUgdGltZXIgdGltZW91dCgzcyksIHRo
ZSBwYWdlIHdpbGwgYmUgcmVmcmVzaC4gQXMgYSBjb25zZXF1ZW5jZSwgd2UgY2FuIHNlZSB0aGUg
Zm9sbG93aW5nIHZhcmlhYmxlIHJlZmVyZW5jZSBoYXMgYmVlbiBzdWJzdGl0dXRlZDwvcD4KKzxw
IGFsaWduPSJjZW50ZXIiPiBIZXJlIGlzIGEgdmFyaWFibGUgOiB2YXIgPSAkdmFyIDwvcD4KKzwv
Y2FyZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9vbmV2ZW50LXNoYWRvdy53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXNoYWRvdy53bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtc2hhZG93LndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZT4KKzxv
bmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKzxnbyBocmVmPSIjY2FyZDIiLz4KKzwvb25l
dmVudD4KKzwvdGVtcGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIE9uZSI+Cis8
b25ldmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+Cis8Z28gaHJlZj0iI2NhcmQzIi8+Cis8L29u
ZXZlbnQ+Cis8cD5UZXN0IGZvciBvbmV2ZW50IHNoYWRvd2luZyBpbiBXTUw8L3A+Cis8cD5UaGUg
Y2FyZC1sZXZlbCBvbmV2ZW50IHdpbGwgc2hhZG93IHRoZSBkZWNrLWxldmVsIG9uZXZlbnQuIEFz
IGEgcmVzdWx0LCBjYXJkIDEgd29uJ3QganVtcCB0byBjYXJkMiAgYnV0IHRvIGNhcmQgMyBhY2Nv
cmRpbmcgdG8gdGhlIGNhcmQtbGV2ZWwgb25ldmVudCdzIHJlcXVpcmVtZW50LiBBZnRlciBlbnRl
cmVkIHRoZSBjYXJkIDMsIHRoZSBkZWNrLWxldmVsIG9uZXZlbnQgZWxlbWVudCBpc24ndCBzaGFk
b3dlZCBieSB0aGlzIGNhcmQsIHNvIGl0IHdpbGwganVtcCB0byBjYXJkIDIgaW1tZWRpYXRlbHku
PC9wPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iQ2FyZCB0d28iID4KKzxwPlRo
aXMgaXMgY2FyZCAyPC9wPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQzIiB0aXRsZT0iQ2FyZCBU
aHJlZSI+Cis8cD5UaGlzIGlzIGNhcmQgMzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0ZmllbGQtZ2V0LndtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Bvc3RmaWVs
ZC1nZXQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3Rp
dmVjYXNlcy9wb3N0ZmllbGQtZ2V0LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0v
L0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPjx3bWw+Cis8Y2FyZD4KKzxwPlRlc3QgZm9yIHBvc3RmaWVsZCBlbGVtZW50IGluIFdNTCA8
L3A+Cis8cD4KKyBDbGljayAiR2V0IiB0byBTZW5kIGRhdGEgYnkgZ2V0IG1ldGhvZDxiciAvPgor
IDxkbyB0eXBlPSJhY2NlcHQiIGxhYmVsPSJHZXQiPgorICA8Z28gaHJlZj0iLi4vdGVzdC53bWwi
IG1ldGhvZD0iZ2V0Ij4KKyAgIDxwb3N0ZmllbGQgbmFtZT0iaSIgdmFsdWU9IjIiLz4KKyAgIDxw
b3N0ZmllbGQgbmFtZT0iaiIgdmFsdWU9IjMwIi8+CisgIDwvZ28+CisgPC9kbz4KKzwvcD4KKzwv
Y2FyZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvcG9zdGZpZWxkLXBvc3Qud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvcG9zdGZpZWxkLXBvc3Qud21sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0ZmllbGQtcG9zdC53bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NU
WVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEi
IHRpdGxlPSJjYXJkMSI+Cis8cD5UZXN0IGZvciBwb3N0ZmllbGQgZWxlbWVudCBpbiBXTUw8L3A+
Cis8cD4KKyBDbGljayAiUG9zdCIgdG8gU2VuZCBkYXRhIHdpdGggcG9zdCBtZXRob2Q8YnIvPgor
IDxkbyB0eXBlPSJhY2NlcHQiIG5hbWU9Ik9rIiBsYWJlbD0iUG9zdCI+CisgIDxnbyBocmVmPSIu
Li90ZXN0LndtbCIgbWV0aG9kPSJwb3N0Ij4KKyAgIDxwb3N0ZmllbGQgbmFtZT0iaSIgdmFsdWU9
IjIiLz4KKyAgIDxwb3N0ZmllbGQgbmFtZT0iaiIgdmFsdWU9IjMwIi8+CisgIDwvZ28+CisgPC9k
bz4KKzwvcD4KKzwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvc2VsZWN0LWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvc2VsZWN0LWVsZW1lbnQud21sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZWxlY3QtZWxl
bWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjcgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4i
CisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxj
YXJkIGlkPSJjYXJkMSIgdGl0bGU9IlNlbGVjdCBUZXN0Ij4KKzxwPiBUZXN0IGZvciBzZWxlY3Qg
ZWxlbWVudCBpbiBXTUwgPC9wPgorPHA+IFlvdSBjYW4gc2VsZWN0IG9uZSBvciBtb3JlIG9wdGlv
bnMsIGFuZCB0aGVuIGNsaWNrICdBbnN3ZXInLCB0aGUgc2Vjb25kIGNhcmQgd2lsbCB0ZWxsIHlv
dSB3aGF0IHlvdSBzZWxlY3RlZDwvcD4KKzxwPgorPHNlbGVjdCBuYW1lPSJjYXJzIiB0aXRsZT0i
U0VMRUNUIiBtdWx0aXBsZT0idHJ1ZSIgPgorICA8b3B0aW9uIHZhbHVlPSJ2b2x2byIgPlZvbHZv
PC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9ImZpYXQiPkZpYXQ8L29wdGlvbj4KKyAgPG9wdGlv
biB2YWx1ZT0ic2FhYiI+U2FhYjwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJhdWRpIj5BdWRp
PC9vcHRpb24+Cis8L3NlbGVjdD4KKzwvcD4KKzxkbyB0eXBlPSJhY2NlcHQiIGxhYmVsPSJBbnN3
ZXIiPgorICA8Z28gaHJlZj0iI2NhcmQyIi8+Cis8L2RvPgorPC9jYXJkPgorCis8Y2FyZCBpZD0i
Y2FyZDIiIHRpdGxlPSJBbnN3ZXIiPgorPHA+CitZb3Ugc2VsZWN0ZWQ6ICQoY2FycykKKzwvcD4K
KzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9zZWxlY3Qtb25waWNrLWV2ZW50LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3NlbGVjdC1vbnBpY2stZXZlbnQud21sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZWxlY3Qtb25w
aWNrLWV2ZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNiBAQAorPD94bWwgdmVyc2lv
bj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4x
Ly9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21s
PgorPGNhcmQ+Cis8cD4gVGVzdCBmb3Igc2VsZWN0IG9ucGljayBpbnRyaW5zaWMgZXZlbnQgaW4g
V01MIDwvcD4KKzxwPiBXaGVuIHlvdSBzZWxlY3QgdGhlICdMaW9uJyBvcHRpb24sIHdpbGwganVt
cCB0byB0ZXN0LndtbDwvcD4KK1BsZWFzZSBjaG9vc2UgeW91ciBmYXZvdXJpdGUgYW5pbWFsOjxi
ci8+Cis8c2VsZWN0IG5hbWU9IlgiIG11bHRpcGxlPSJ0cnVlIj4KKzxvcHRpb24gdmFsdWU9IkQi
PkRvZzwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iQyI+Q2F0PC9vcHRpb24+Cis8b3B0aW9uIHZh
bHVlPSJMIiBvbnBpY2s9Ii4uL3Rlc3Qud21sIj5MaW9uPC9vcHRpb24+Cis8L3NlbGVjdD4KKzwv
Y2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNl
cy9zZXR2YXItZWxlbWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy9zZXR2YXItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3NldHZhci1lbGVtZW50LndtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZ
UEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIGlkPSJmaXJzdGNh
cmQiIHRpdGxlPSJUZXN0IGZvciBTZXR2YXIgZWxlbWVudCI+CisgPHA+IFRlc3QgZm9yIHNldHZh
ciBlbGVtZW50IGluIFdNTCA8L3A+CisgPHA+VGhpcyBpcyB0aGUgZmlyc3QgY2FyZCAsIGhhcyB2
YXJpYWJsZTogVkFSPSckdmFyJzwvcD4KKyA8cD5DbGljayAiUmVmcmVzaCIgd2lsbCB1cGRhdGUg
dGhlIHZhbHVlIG9mIFZBUiB2YXJhaWJsZSB3aGljaCBzcGVjaWZpZWQgYnkgc2V0dmFyIGVsZW1l
bnQ8L3A+CisgIDxkbyBuYW1lPSJSZWZyZXNoIiB0eXBlPSJhY2NlcHQiPiAKKyAgIDxyZWZyZXNo
PgorICAgPHNldHZhciBuYW1lPSJ2YXIiIHZhbHVlPSJWQUxVRSIvPgorICAgPC9yZWZyZXNoPgor
ICA8L2RvPgorIDwvY2FyZD4KKzwvd21sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL3RhcmdldGRlY2sud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFyZ2V0ZGVjay53bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RhcmdldGRlY2sud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8aGVhZD4KKzxhY2Nl
c3MgZG9tYWluPSJsb2NhbGhvc3QiIHBhdGg9ImFjY2Vzcy10YXJnZXQud21sIi8+Cis8L2hlYWQ+
Cis8Y2FyZD4KKzxwPiBUZXN0IGZvciBEZWNrIEFjY2VzcyBjb250cm9sIGluIFdNTC4gPC9wPgor
PHA+IFRoaXMgaXMgdGhlIHRhcmdldGRlY2ssIG9ubHkgJy4vYWNjZXNzLXRhcmdldC53bWwiIGNh
biBhY2Nlc3MgbWUgPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stZ28taW4tYW5jaG9yLndtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stZ28taW4tYW5jaG9y
LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvdGFzay1nby1pbi1hbmNob3Iud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0v
L0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorCis8d21sPgorPGNhcmQgdGl0bGU9IkFuY2hvciBUYWciPgorPHA+IFRlc3QgZm9yIFdN
TCBnbyB0YXNrIGVuY2xvc2VkIHdpdGggYW5jaG9yIGVsZW1lbnQgPC9wPgorPHA+IGNsaWNrICdO
ZXh0IHBhZ2UnIHRvIGdvIHRvIHRlc3Qud21sIDwvcD4KKzxwPgorPGFuY2hvcj5OZXh0IHBhZ2U8
Z28gaHJlZj0iLi4vdGVzdC53bWwiLz4gPC9hbmNob3I+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFzay1ub29wLWlu
LWRvLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL3Rhc2stbm9vcC1pbi1kby53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1kby53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5v
cmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSI+Cis8cD4gVGVz
dCBmb3IgTm9vcCB0YXNrIGluIGRvIGVsZW1lbnQgb2YgV01MLiA8L3A+Cis8cD4gSWYgaXQgcGFz
c2VzLCB5b3Ugc2hvdWxkIG5vdCBzZWUgdGhlICJCYWNrIiBidXR0b248L3A+CisgPGRvIG5hbWU9
ImRvIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJCYWNrIj4KKyA8bm9vcC8+CisgPC9kbz4KKzwvY2Fy
ZD4gCis8L3dtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2Vz
L3Rhc2stbm9vcC1pbi1vbmV2ZW50LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1vbmV2ZW50LndtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFzay1ub29wLWlu
LW9uZXZlbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+
Cis8Y2FyZD4gCis8cD4gVGVzdCBmb3Igbm9vcCB0YXNrIGluIG9uZXZlbnQgZWxlbWVudCBvZiBX
TUw8L3A+Cis8cD4gSWYgaXQgcGFzc2VzLCB5b3Ugd2lsbCBzZWUgdGhlIGNhcmQgb25lIGluIHRo
aXMgZGVjazwvcD4KKyAgPG9uZXZlbnQgdHlwZT0ib25lbnRpbWVyIj4KKyAgPG5vb3AvPgorICA8
L29uZXZlbnQ+Cis8cD4gVGhpcyBpcyBDYXJkIG9uZSA8L3A+Cis8L2NhcmQ+IAorPC93bWw+IApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLXByZXYtaW4t
YW5jaG9yLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL3Rhc2stcHJldi1pbi1hbmNob3Iud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLXByZXYtaW4tYW5jaG9yLndtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NU
WVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIHRpdGxlPSJB
bmNob3IgVGFnIj4KKzxwPiBUZXN0IGZvciBXTUwgcHJldiB0YXNrIGVuY2xvc2VkIHdpdGggYW5j
aG9yIGVsZW1lbnQgPC9wPgorPHA+IGNsaWNrICdwcmV2IHBhZ2UnIHRvIGdvIHRvIHByZXZpb3Vz
IHBhZ2UgaWYgaXQgaXMgbm90IHRoZSBmaXJzdCBwYWdlIGluIGhpc3Rvcnk8L3A+Cis8cD4KKzxh
bmNob3I+UHJldiBwYWdlPHByZXYvPjwvYW5jaG9yPgorPC9wPgorPC9jYXJkPgorPC93bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stcmVmcmVzaC1p
bi1hbmNob3Iud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvdGFzay1yZWZyZXNoLWluLWFuY2hvci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stcmVmcmVzaC1pbi1hbmNob3Iu
d21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4K
KzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0
cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCB0aXRs
ZT0iJFQiPgorIDxwPiBUZXN0IGZvciByZWZyZXNoIHRhc2sgd2l0aGluIFdNTCBhbmNob3IgZWxl
bWVudC4gPGJyLz4gY2xpY2sgIlJlZnJlc2giIHdpbGwgcmVmcmVzaCB0aGlzIHBhZ2UsIGFzIGEg
cmVzdWx0IHRoZSBwYWdlIHRpdGxlIHdpbGwgYmUgdXBkYXRlZC4gPC9wPgorICA8cD4KKyAgIDxh
bmNob3I+CisgICAgUmVmcmVzaAorICAgIDxyZWZyZXNoPgorICAgIDxzZXR2YXIgbmFtZT0iVCIg
dmFsdWU9IlRlc3QgcmVmcmVzaCB0YXNrIi8+CisgICAgPC9yZWZyZXNoPgorICAgPC9hbmNob3I+
CisgIDwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50
ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1nby53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1nby53bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RlbXBsYXRlLWdvLndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8dGVtcGxhdGU+Cisg
PGRvIG5hbWU9ImdvIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJUZW1wbGF0ZSBHbyI+CisgIDxnbyBo
cmVmPSIjY2FyZDIiLz4KKyA8L2RvPgorPC90ZW1wbGF0ZT4KKzxjYXJkIGlkPSJjYXJkMSIgdGl0
bGU9IkNhcmQgMSI+Cis8cD5UZXN0IGZvciB0ZW1wbGF0ZSBlbGVtZW50IGluIFdNTC4gVGVtcGxh
dGUgZ28gYnV0dG9uIGlzIGdsb2JhbDwvcD4KKzxwPiBUaGlzIGlzIENhcmQgb25lLCBjbGljayAn
VGVtcGxhdGUgR28nIHRvIGp1bXAgdG8gQ2FyZCB0d288L3A+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0i
Y2FyZDIiIHRpdGxlPSJDYXJkIDIiPgorPHA+VGhpcyBpcyBjYXJkIHR3by4gPGJyLz5UaGUgZ2xv
YmFsIHRlbXBsYXRlIEdvIGJ1dHRvbiBpcyBzdGlsbCB2aXNpYmxlIGZvciBtZTwvcD4KKzwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90
ZW1wbGF0ZS1vbmV2ZW50LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL3RlbXBsYXRlLW9uZXZlbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1vbmV2ZW50LndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZT4KKzxv
bmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKzxnbyBocmVmPSIjY2FyZDIiLz4KKzwvb25l
dmVudD4KKzwvdGVtcGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEiPgorPHA+VGVzdCBmb3IgdGVtcGxh
dGUgZWxlbWVudCBpbiBXTUw8L3A+Cis8cD5XaGVuIG90aGVyIHBhZ2UgZW50ZXIgZm9yd2FyZCB0
aGlzIHBhZ2UsIGl0IGZpcnN0IHNob3cgY2FyZCAxLCBhbmQgdGhlbiBpbW1lZGlhdGVseSBqdW1w
IHRvIGNhcmQgMiBiZWNhdXNlIG9mIHRoZSB0ZW1wbGF0ZSBvbmVudGVyZm9yd2FyZCBldmVudDwv
cD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9ImNhcmQgMiI+Cis8cD4KK1RoaXMg
aXMgY2FyZCAyCis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvdGVtcGxhdGUtb250aW1lci53bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1vbnRpbWVyLndt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
dGVtcGxhdGUtb250aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4K
Kzx3bWw+Cis8dGVtcGxhdGUgb250aW1lcj0iI2NhcmQyIj4KKzwvdGVtcGxhdGU+Cis8Y2FyZCBp
ZD0iY2FyZDEiPgorPHA+VGVzdCBmb3IgdGVtcGxhdGUgb250aW1lciBldmVudCBpbiBXTUw8L3A+
Cis8cD5UaGlzIGlzIENhcmQgb25lLHdlIHdpbGwganVtcCB0byBjYXJkIDIgYWZ0ZXIgNXMgYmVj
YXVzZSBvZiB0aGUgdGVtcGxhdGUgb250aW1lciBldmVudDwvcD4KKzx0aW1lciB2YWx1ZT0iNTAi
Lz4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9ImNhcmQgMiI+Cis8cD4KK1RoaXMg
aXMgY2FyZCAyCis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvdGltZXIud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGltZXIud21sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90aW1lci53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2
PSJDYWNoZS1Db250cm9sIiBjb250ZW50PSJtYXgtYWdlPTAiLz4KKzwvaGVhZD4KKzxjYXJkIGlk
PSJjYXJkMSIgb250aW1lcj0iI2NhcmQyIiB0aXRsZT0iQ2FyZCBvbmUiPgorPHA+IFRoaXMgdGVz
dCBjYXNlIGlzIHVzZWQgdG8gdGVzdCB0aW1lciBpbiBXTUwgPC9wPgorICAgIDx0aW1lciBuYW1l
PSJ0aW1lMSIgdmFsdWU9IjUwIi8+CisgICAgPHA+CisgICAgVGhpcyBpcyBjYXJkIG9uZTxici8+
VGhlIHRpbWVyIGlzIHRyaWdnZXJlZCBieSB0aGUgb250aW1lciBpbnRyaW5zaWMgZXZlbnQob250
aW1lciBhcyBhdHRyaWJ1dGUgb2YgY2FyZCBlbGVtZW50KTxici8+V2hlbiB0aGUgdGltZXIgaXMg
dGltZW91dChhZnRlciA1cyksIHdpbGwganVtcCB0byBjYXJkIHR3by4KKyAgICA8L3A+Cis8L2Nh
cmQ+CisKKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgdHdvIj4KKyAgICA8b25ldmVudCB0
eXBlPSJvbnRpbWVyIj4KKyAgICA8Z28gaHJlZj0iI2NhcmQxIi8+CisgICAgPC9vbmV2ZW50Pgor
ICAgIDx0aW1lciBuYW1lPSJ0aW1lcjIiIHZhbHVlPSIzMCIvPgorICAgIDxwPiAKKyAgICBUaGlz
IGlzIGNhcmQgVHdvITxici8+IFRoZSB0aW1lciBpcyB0cmlnZ2VyZWQgYnkgdGhlIG9udGltZXIg
aW50cmluc2ljIGV2ZW50KG9udGltZXIgaXMgc3BlY2lmaWVkIGJ5IG9uZXZlbnQgZWxlbWVudCk8
YnIvPldoZW4gdGhlIHRpbWVyIGlzIHRpbWVvdXQoYWZ0ZXIgM3MpLCB3aWxsIGp1bXAgYmFjayB0
byBjYXJkIG9uZS4KKyAgICA8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy92YXJpYWJsZS1zdWJzdGl0dXRpb24ud21sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdmFyaWFi
bGUtc3Vic3RpdHV0aW9uLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvdmFyaWFibGUtc3Vic3RpdHV0aW9uLndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IlRl
c3QgdmFyaWFibGUgc3Vic3RpdHV0aW9uIj4KKyA8cD4gVGVzdCBmb3IgdmFyaWFibGUgc3Vic3Rp
dHV0aW9uIDwvcD4KKyA8cD4gQ2xpY2sgIlJlZmVyc2giIHRvIHJlZnJlc2ggdGhlIGNhcmQsIGFu
ZCB0aGUgdmFyYWlibGUgcmVmZXJlbmNlcyBpbiB0aGUgY2FyZCB3aWxsIGJlIHN1YnN0aXR1ZWQ8
L3A+CisgIDxhbmNob3I+IFJlZnJlc2ggPGJyLz4KKyAgPHJlZnJlc2g+IAorICA8c2V0dmFyIG5h
bWU9ImhpIiB2YWx1ZT0iaGVsbG8iLz4KKyAgPHNldHZhciBuYW1lPSJuYW1lIiB2YWx1ZT0iIFlp
IGNoYW8iLz4KKyAgPHNldHZhciBuYW1lPSJuYW1lMiIgdmFsdWU9IiQobmFtZTplKSIvPgorICA8
c2V0dmFyIG5hbWU9Im5hbWUzIiB2YWx1ZT0iJChuYW1lMjp1KSIvPgorICA8L3JlZnJlc2g+Cisg
IDwvYW5jaG9yPgorICA8cD5zZXQgaGkgPSAiaGVsbG8iLCBuYW1lID0gIiBZaSBjaGFvIiA8YnIv
PgorICA8IVtDREFUQVskKGhpKSwkbmFtZV1dPiA9PiAkKGhpKSwkbmFtZSA8YnIvPgorICA8IVtD
REFUQVskaGksJChuYW1lOmVzQ2FwZSldXT4gPT4gJGhpLCQobmFtZTplc0NhcGUpIDxici8+Cisg
IDwhW0NEQVRBWyRoaSwkKG5hbWU6ZSldXT4gPT4gJGhpLCQobmFtZTplKSA8YnIvPgorICA8IVtD
REFUQVskaGksJChuYW1lOlUpXV0+ID0+ICRoaSwkKG5hbWU6VSkgPGJyLz4KKyAgPC9wPgorICA8
cD5zZXQgbmFtZTIgPSAkJChuYW1lOmUpIDxici8+CisgIDwhW0NEQVRBWyQoaGkpLCQobmFtZTIp
XV0+ID0+ICQoaGkpLCQobmFtZTIpIDxici8+CisgIDwhW0NEQVRBWyQoaGkpLCQkKG5hbWU6ZSld
XT4gPT4gJChoaSksJCQobmFtZTplKSA8YnIvPgorICA8L3A+CisgIDxwPnNldCBuYW1lMyA9ICQk
KG5hbWUyOnUpIDxici8+CisgIDwhW0NEQVRBWyQoaGkpLCRuYW1lM11dPiA9PiAkKGhpKSwkbmFt
ZTM8YnIvPgorICA8IVtDREFUQVskKGhpKSwkKG5hbWUzOmUpXV0+ID0+ICQoaGkpLCQobmFtZTM6
ZSkgPGJyLz4KKyAgPC9wPgorIDwvY2FyZD4KKzwvd21sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>23850</attachid>
            <date>2008-09-26 07:25:25 -0700</date>
            <delta_ts>2008-11-12 11:17:27 -0800</delta_ts>
            <desc>WML directory patch</desc>
            <filename>wml-wmldir.patch</filename>
            <type>text/plain</type>
            <size>199863</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3dtbC9XTUxBRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBRWxl
bWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJL
ZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxBRWxlbWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFj
ZSBFdmVudE5hbWVzOworCitXTUxBRWxlbWVudDo6V01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvYykgCisgICAgOiBXTUxFbGVtZW50KG5hbWUsIGRvYykK
K3sKKyAgICBzZXRJc0xpbmsodHJ1ZSk7Cit9CisKK1dNTEFFbGVtZW50Ojp+V01MQUVsZW1lbnQo
KQoreworfQorCit2b2lkIFdNTEFFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
dnQpIAoreworICAgIGJvb2wgc2hvdWxkSGFuZGxlID0gZmFsc2U7CisgICAgaWYgKGV2dC0+dHlw
ZSgpID09IGNsaWNrRXZlbnQpIHsKKyAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICB9
IGVsc2UgaWYgKChldnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50KSAmJiBldnQtPmlzS2V5Ym9h
cmRFdmVudCgpICYmIGZvY3VzZWQoKSkgeworICAgICAgICBTdHJpbmcga2V5ID0gc3RhdGljX2Nh
c3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPmtleUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKGtl
eSA9PSAiRW50ZXIiKSAKKyAgICAgICAgICAgIHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgfQor
IAorICAgIGlmIChzaG91bGRIYW5kbGUgJiYgaXNMaW5rKCkpIHsKKyAgICAgICAgU3RyaW5nIHVy
bCA9IHBhcnNlVVJMKGdldEF0dHJpYnV0ZShXTUxOYW1lczo6aHJlZkF0dHIpKTsKKworICAgICAg
ICBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2FkZXIoKS0+dXJsU2VsZWN0ZWQoZG9jdW1lbnQoKS0+
Y29tcGxldGVVUkwodXJsKSwgZ2V0QXR0cmlidXRlKEhUTUxOYW1lczo6dGFyZ2V0QXR0ciksIGV2
dCwgZmFsc2UsIHRydWUpOworCisgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAg
ICB9CisgICAgZWxzZQorICAgICAgICBFdmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZXZ0KTsKK30KKworU3RyaW5nIFdNTEFFbGVtZW50Ojp0aXRsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGdldEF0dHJpYnV0ZSh0aXRsZUF0dHIpOworfQorCitib29sIFdNTEFFbGVtZW50Ojpp
c0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBjb25zdAoreworICAgIHJl
dHVybiBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+dGFic1RvTGlua3MoZXZl
bnQpOworfQorCitib29sIFdNTEFFbGVtZW50Ojppc0ZvY3VzYWJsZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIHRydWU7IAorfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBXTUxBRWxlbWVudF9oCisjZGVmaW5lIFdNTEFFbGVtZW50X2gKKworI2luY2x1
ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxBRWxl
bWVudCA6IHB1YmxpYyAgV01MRWxlbWVudHsKK3B1YmxpYzoKKyAgICBXTUxBRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+V01MQUVsZW1lbnQoKTsKKworICAg
IHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCBi
b29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwgU3RyaW5nIHRpdGxlKCkg
Y29uc3Q7CisKK307CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldNTEFjY2Vzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUg
IldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxU
b2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01M
TmFtZXM7CisKK1dNTEFjY2Vzc0VsZW1lbnQ6OldNTEFjY2Vzc0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFdNTEVsZW1lbnQodGFnTmFt
ZSwgZG9jKSAKK3sKK30KKworCitXTUxBY2Nlc3NFbGVtZW50Ojp+V01MQWNjZXNzRWxlbWVudCgp
IAoreworICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0TmVlZENoZWNrRGVj
a0FjY2VzcyhmYWxzZSk7Cit9CisKK3ZvaWQgV01MQWNjZXNzRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkg
PT0gZG9tYWluQXR0cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihh
dHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVw
b3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+
c2V0RGVja0FjY2Vzc0RvbWFpbihhdHRyLT52YWx1ZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBwYXRoQXR0cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJs
ZVJlZihhdHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIo
KS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRl
eHQoKS0+c2V0RGVja0FjY2Vzc1BhdGgoYXR0ci0+dmFsdWUoKSk7CisgICAgfQorfQorCit9Cklu
ZGV4OiBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS93bWwvV01MQWNjZXNzRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01M
QWNjZXNzRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBXTUxBY2Nlc3NFbGVtZW50X2gKKyNkZWZpbmUgV01MQWNjZXNzRWxlbWVudF9oCisKKyNpbmNs
dWRlICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBXTUxBY2Nlc3NFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnR7Citw
dWJsaWM6CisgICAgV01MQWNjZXNzRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1l
LCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTEFjY2Vzc0VsZW1lbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7Cit9OworCit9
IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBbmNob3JFbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJF
dmVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisKKyNpbmNsdWRlICJD
U1NIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTEFuY2hvckVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5h
bWVzOworCitXTUxBbmNob3JFbGVtZW50OjpXTUxBbmNob3JFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpIAorICAgIDogSFRNTEFuY2hvckVsZW1lbnQobmFt
ZSwgZG9jKSwgbV90YXNrKDApCit7CisgICAgc2V0SHJlZigiIik7ICAgICAvLyB0aGlzIGlzIHRo
ZSBoYWNrIHNvIHRoYXQgYW5jaG9yIHJlbmRlcnMgbGlrZSBhIGxpbmsKK30KKworV01MQW5jaG9y
RWxlbWVudDo6fldNTEFuY2hvckVsZW1lbnQoKQoreworfQorCit2b2lkIFdNTEFuY2hvckVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGUpIAoreworICAgIGJvb2wgc2hvdWxkSGFu
ZGxlID0gZmFsc2U7CisgICAgaWYgKGUtPnR5cGUoKSA9PSBjbGlja0V2ZW50KSB7CisgICAgICAg
IHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgfSBlbHNlIGlmICgoZS0+dHlwZSgpID09IGtleWRv
d25FdmVudCkgJiYgZS0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZm9jdXNlZCgpKSB7CisgICAgICAg
IFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZSktPmtleUlkZW50aWZp
ZXIoKTsKKyAgICAgICAgaWYgKGtleSA9PSAiRW50ZXIiKQorICAgICAgICAgICAgc2hvdWxkSGFu
ZGxlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkSGFuZGxlICYmIG1fdGFzaykgewor
ICAgICAgICBtX3Rhc2stPmV4ZWMoZSk7CisgICAgICAgIGUtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgfQorICAgIGVsc2UKKyAgICAgICBFdmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVudEhh
bmRsZXIoZSk7Cit9CisKK3ZvaWQgV01MQW5jaG9yRWxlbWVudDo6cmVnaXN0ZXJUYXNrKFdNTFRh
c2tFbGVtZW50KiB0YXNrKQoreyAKKyAgICBtX3Rhc2sgPSB0YXNrOworfQorCit9CkluZGV4OiBX
ZWJDb3JlL3dtbC9XTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQW5jaG9y
RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxB
bmNob3JFbGVtZW50X2gKKyNkZWZpbmUgV01MQW5jaG9yRWxlbWVudF9oCisKKyNpbmNsdWRlICJI
VE1MQW5jaG9yRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRh
c2tFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEFuY2hvckVsZW1l
bnQgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgeworcHVibGljOgorICAgIFdNTEFuY2hvckVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFs
IH5XTUxBbmNob3JFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCopOworCisgICAgdm9pZCByZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqKTsK
KworcHJpdmF0ZToKKworICAgIFdNTFRhc2tFbGVtZW50KiBtX3Rhc2s7CisKK307CisKK30gLy9u
YW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5p
bgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQ1IEBACituYW1lc3BhY2U9IldNTCIKK2NwcE5hbWVzcGFjZT0iV2ViQ29yZSIK
K25hbWVzcGFjZVVSST0iaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvIgorZ2VuZXJhdGVGYWN0b3J5
PSIxIgorZ2VuZXJhdGVXcmFwcGVyRmFjdG9yeT0iMSIKKworbmFtZQoraWQKK3RpdGxlCituZXdj
b250ZXh0CitvcmRlcmVkCitsYWJlbAorb3B0aW9uYWwKK3R5cGUKK2hyZWYKK3ZhbHVlCitvbmVu
dGVyZm9yd2FyZAorb25lbnRlcmJhY2t3YXJkCitvbnRpbWVyCitzZW5kcmVmZXJlcgorbWV0aG9k
CitjYWNoZS1jb250cm9sCitlbmN0eXBlCithY2NlcHQtY2hhcnNldAoraW5hbWUKK2l2YWx1ZQor
bXVsdGlwbGUKK3RhYmluZGV4CitvbnBpY2sKK2Zvcm1hdAorZW1wdHlvaworc2l6ZQorbWF4bGVu
Z3RoCithbHQKK3NyYworbG9jYWxzcmMKK3ZzcGFjZQoraHNwYWNlCithbGlnbgoraGVpZ2h0Cit3
aWR0aAorY29sdW1ucworbW9kZQorZG9tYWluCitwYXRoCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxC
cndDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxCcndDb250ZXh0LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEJyd0NvbnRleHQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIwMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJQYWdlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIkhp
c3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiV01MQnJ3
Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxE
b2N1bWVudC5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9r
ZW5pemVyLmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxCcndDb250ZXh0OjpXTUxCcndDb250ZXh0KFBh
Z2UqIHBhZ2UpCit7CisgICAgbV9wYWdlID0gcGFnZTsKKyAgICBtX2hpc3RMZW4gPSAwOworICAg
IG1fYWN0aXZlQ2FyZCA9IDA7CisgICAgbV9oYXNEZWNrQWNjZXNzID0gZmFsc2U7Cit9CisKK1dN
TEJyd0NvbnRleHQ6On5XTUxCcndDb250ZXh0KCkKK3sKKyAgICBtX3ZhcmlhYmxlcy5jbGVhcigp
OworICAgIG1fcGFnZSA9IDA7CisgICAgbV9hY3RpdmVDYXJkID0gMDsKKyAgICBtX2hhc0RlY2tB
Y2Nlc3MgPSBmYWxzZTsKK30KKwordm9pZCBXTUxCcndDb250ZXh0OjpyZXNldCgpCit7CisgICAg
Ly9yZW1vdmUgYWxsIHRoZSB2YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQgYnJvd3NlciBjb250ZXh0
CisgICAgbV92YXJpYWJsZXMuY2xlYXIoKTsKKworICAgIC8vY2xlYXIgdGhlIG5hdmlnYXRpb24g
aGlzdG9yeSBzdGF0ZSAKKyAgICBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5jbGVhclN0YXRl
KCk7OworCisgICAgLy9yZXNldCBpbXBsZW1lbnRhdGlvbi1zcGVjZmljIHN0YXRlIGlmIFVBIGhh
cworICAgIG1faGlzdExlbiA9IDE7Cit9CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c3RvcmVWYXJp
YWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsKSAKK3sKKyAgICBtX3Zh
cmlhYmxlcy5zZXQobmFtZSwgdmFsKTsKK30KKwordm9pZCBXTUxCcndDb250ZXh0OjpzdG9yZVZh
cmlhYmxlcyhWYXJpYWJsZU1hcCYgdmFycykgCit7CisgICAgZm9yIChWYXJpYWJsZU1hcDo6aXRl
cmF0b3IgaXQgPSB2YXJzLmJlZ2luKCk7IGl0ICE9IHZhcnMuZW5kKCk7ICsraXQpIHsgCisgICAg
ICAgIG1fdmFyaWFibGVzLnNldChpdC0+Zmlyc3QsIGl0LT5zZWNvbmQpOyAKKyAgICB9Cit9CisK
K1N0cmluZyBXTUxCcndDb250ZXh0OjpnZXRWYXJpYmFsZShjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0IAoreworICAgIHJldHVybiBtX3ZhcmlhYmxlcy5nZXQobmFtZSk7Cit9CisKK2Jvb2wgV01M
QnJ3Q29udGV4dDo6aGFzVmFyaWFibGVzKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fdmFyaWFi
bGVzLnNpemUoKTsKK30KKworUGFnZSogV01MQnJ3Q29udGV4dDo6cGFnZSgpIGNvbnN0IHsKKyAg
ICByZXR1cm4gbV9wYWdlOworfQorCitpbnQgV01MQnJ3Q29udGV4dDo6aGlzdG9yeUxlbmd0aCgp
IGNvbnN0IHsKKyAgICByZXR1cm4gbV9oaXN0TGVuOworfQorCit2b2lkIFdNTEJyd0NvbnRleHQ6
OnNldEhpc3RvcnlMZW5ndGgoaW50IGxlbikgeworICAgIG1faGlzdExlbiA9IGxlbjsKK30KKwor
V01MQ2FyZEVsZW1lbnQqIFdNTEJyd0NvbnRleHQ6OmFjdGl2ZUNhcmQoKQoreworICAgIHJldHVy
biBtX2FjdGl2ZUNhcmQ7Cit9CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c2V0QWN0aXZlQ2FyZChX
TUxDYXJkRWxlbWVudCogY2FyZCkKK3sKKyAgICBtX2FjdGl2ZUNhcmQgPSBjYXJkOworfQorCit2
b2lkIFdNTEJyd0NvbnRleHQ6OnNldERlY2tBY2Nlc3NEb21haW4oY29uc3QgU3RyaW5nJiBkb21h
aW4pCit7CisgICAgbV9hY2Nlc3NEb21haW4gPSBkb21haW47Cit9CisKK3ZvaWQgV01MQnJ3Q29u
dGV4dDo6c2V0RGVja0FjY2Vzc1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIG1fYWNj
ZXNzUGF0aCA9IHBhdGg7Cit9CisKK3ZvaWQgV01MQnJ3Q29udGV4dDo6c2V0TmVlZENoZWNrRGVj
a0FjY2Vzcyhib29sIG5lZWQpCit7CisgICAgaWYgKG1faGFzRGVja0FjY2VzcyAmJiBuZWVkKSB7
CisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKE11bHRpQWNjZXNz
RWxlbWVudHNFcnJvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9oYXNEZWNrQWNjZXNzID0g
bmVlZDsKKyAgICAgICAgbV9hY2Nlc3NQYXRoID0gU3RyaW5nKCk7CisgICAgICAgIG1fYWNjZXNz
RG9tYWluID0gU3RyaW5nKCk7CisgICAgfQorfQorCitib29sIFdNTEJyd0NvbnRleHQ6Omhhc0Rl
Y2tBY2Nlc3MoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc0RlY2tBY2Nlc3M7Cit9CisKK2Jv
b2wgV01MQnJ3Q29udGV4dDo6aXNEZWNrQWNjZXNzaWJsZSgpCit7CisgICAgaWYgKCFtX2hhc0Rl
Y2tBY2Nlc3MgfHwgIW1fcGFnZSB8fCAhbV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKSB8fCAhbV9w
YWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+YmFja0l0ZW0oKSkKKyAgICAgICAgcmV0dXJuIHRydWU7
CisKKyAgICBIaXN0b3J5SXRlbSogaGlzdEl0ZW0gPSBtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgp
LT5iYWNrSXRlbSgpOworICAgIEtVUkwgdXJsKGhpc3RJdGVtLT51cmxTdHJpbmcoKSk7CisgICAg
U3RyaW5nIHByZXZIb3N0ID0gdXJsLmhvc3QoKTsKKyAgICAvLyBmb3IgJ2ZpbGUnIFVSSSwgdGhl
IGhvc3QgcGFydCBtYXkgYmUgZW1wdHksIHNvIHdlIHNob3VsZCBjb21wbGV0ZSBpdC4KKyAgICBp
ZiAocHJldkhvc3QuaXNFbXB0eSgpKQorICAgICAgICBwcmV2SG9zdCA9ICJsb2NhbGhvc3QiOwor
ICAgIFN0cmluZyBwcmV2UGF0aCA9IHVybC5wYXRoKCk7CisKKyAgICBoaXN0SXRlbSA9IG1fcGFn
ZS0+YmFja0ZvcndhcmRMaXN0KCktPmN1cnJlbnRJdGVtKCk7CisgICAgS1VSTCBjdXJVcmwoaGlz
dEl0ZW0tPnVybFN0cmluZygpKTsKKyAgICBTdHJpbmcgY3VyUGF0aCA9IGN1clVybC5wYXRoKCk7
CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ1JlZih1cmwsIGN1clVybCkpCisgICAgICAgcmV0dXJu
ICB0cnVlOworCisgICAgYm9vbCBjYW5BY2Nlc3MgPSBmYWxzZTsKKyAgICAvLyAiLyIgaXMgdGhl
IGRlZmF1bHQgdmFsdWUgaWYgbm90IHNwZWNpZmllZAorICAgIGlmIChtX2FjY2Vzc1BhdGguaXNF
bXB0eSgpKSAgCisgICAgICAgIG1fYWNjZXNzUGF0aCA9ICIvIjsKKyAgICBlbHNlIGlmIChtX2Fj
Y2Vzc1BhdGguZW5kc1dpdGgoIi8iKSAmJiAobV9hY2Nlc3NQYXRoICE9ICIvIikpCisgICAgICAg
IG1fYWNjZXNzUGF0aCA9IG1fYWNjZXNzUGF0aC5sZWZ0KChtX2FjY2Vzc1BhdGgubGVuZ3RoKCkt
MSkpOworCisgICAgLy8gY3VycmVudCBkZWNrIGRvbWFpbiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBp
ZiBub3Qgc3BlY2lmaWVkCisgICAgaWYgKG1fYWNjZXNzRG9tYWluLmlzRW1wdHkoKSkKKyAgICAg
ICAgbV9hY2Nlc3NEb21haW4gPSBwcmV2SG9zdDsKKworICAgIC8vY29udmVydCByZWxhdGl2ZSBV
UkwgdG8gYWJzb2x1dGUgVVJMIGJlZm9yZSBwZXJmb3JtaW5nIHBhdGggbWF0Y2hpbmcKKyAgICBp
ZiAocHJldkhvc3QgPT0gbV9hY2Nlc3NEb21haW4pIHsKKyAgICAgICAgaWYgKCFtX2FjY2Vzc1Bh
dGguc3RhcnRzV2l0aCgiLyIpKSB7CisgICAgICAgICAgIGludCBpZHggPSBjdXJQYXRoLnJldmVy
c2VGaW5kKCcvJyk7CisgICAgICAgICAgIGlmIChpZHggIT0gLTEpIHsKKyAgICAgICAgICAgICAg
IGN1clBhdGggPSBjdXJQYXRoLmxlZnQoaWR4KzEpOworICAgICAgICAgICAgICAgY3VyUGF0aCAr
PSBtX2FjY2Vzc1BhdGg7CisgICAgICAgICAgICAgICBjdXJVcmwuc2V0UGF0aChjdXJQYXRoKTsK
KyAgICAgICAgICAgICAgIG1fYWNjZXNzUGF0aCA9IGN1clVybC5wYXRoKCk7CisgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHBhdGggcHJlZml4IG1hdGNoaW5nCisgICAg
aWYgKHByZXZQYXRoLnN0YXJ0c1dpdGgobV9hY2Nlc3NQYXRoKSAmJiAKKyAgICAgICAoKHByZXZQ
YXRoW21fYWNjZXNzUGF0aC5sZW5ndGgoKV0gPT0gJy8nKSB8fCAocHJldlBhdGgubGVuZ3RoKCkg
PT0gbV9hY2Nlc3NQYXRoLmxlbmd0aCgpKSkpIHsKKyAgICAgICAgY2FuQWNjZXNzID0gdHJ1ZTsK
KworICAgICAgICAvLyBkb21haW4gc3VmZml4IG1hdGNoaW5nCisgICAgICAgIHVuc2lnbmVkIGRv
bWFpbkxlbiA9IG1fYWNjZXNzRG9tYWluLmxlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBob3N0
TGVuID0gcHJldkhvc3QubGVuZ3RoKCk7CisgICAgICAgIGlmIChwcmV2SG9zdC5lbmRzV2l0aCht
X2FjY2Vzc0RvbWFpbikgJiYgCisgICAgICAgICAgIChwcmV2SG9zdFtob3N0TGVuLWRvbWFpbkxl
bi0xXSA9PSAnLicpIHx8IChob3N0TGVuID09IGRvbWFpbkxlbikpIHsKKyAgICAgICAgICAgIGNh
bkFjY2VzcyA9IHRydWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjYW5BY2Nlc3Mg
PSBmYWxzZTsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgcmV0dXJuICBjYW5BY2Nlc3M7Cit9
CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTEJyd0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxCcndDb250ZXh0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9X
TUxCcndDb250ZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IFdNTEJyd0NvbnRleHRfaAorI2RlZmluZSBXTUxCcndDb250ZXh0X2gKKworI2luY2x1ZGUgIlN0
cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQYWdlOworY2xhc3MgV01MQ2Fy
ZEVsZW1lbnQ7CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gVmFyaWFibGVNYXA7
CisKK2NsYXNzIFdNTEJyd0NvbnRleHQgOiBwdWJsaWMgUmVmQ291bnRlZDxXTUxCcndDb250ZXh0
PiB7CisKK3B1YmxpYzoKKyAgICBXTUxCcndDb250ZXh0KFBhZ2UqKTsKKyAgICB+V01MQnJ3Q29u
dGV4dCgpOworCisgICAgLy8gcmVzZXQgdGhlIGJyb3dzZXIgY29udGV4dCB3aGVuICdOZXdjb250
ZXh0JyBhdHRyaWJ1dGUgb2YgY2FyZCBlbGVtZW50IGlzCisgICAgLy8gcGVyZm9ybWVkIGFzIHBh
cnQgb2YgZ28gdGFzaworICAgIHZvaWQgcmVzZXQoKTsKKworICAgIC8vIHZhcmlhYmxlcyBvcGVy
YXRpb25zIAorICAgIHZvaWQgc3RvcmVWYXJpYWJsZShjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHN0b3JlVmFyaWFibGVzKFZhcmlhYmxlTWFwJik7CisgICAgU3RyaW5n
IGdldFZhcmliYWxlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAgIGJvb2wgaGFzVmFyaWFibGVz
KCkgY29uc3Q7CisKKyAgICBpbnQgaGlzdG9yeUxlbmd0aCgpIGNvbnN0OworICAgIHZvaWQgc2V0
SGlzdG9yeUxlbmd0aChpbnQpOworCisgICAgUGFnZSogcGFnZSgpIGNvbnN0OworCisgICAgV01M
Q2FyZEVsZW1lbnQqIGFjdGl2ZUNhcmQoKTsKKyAgICB2b2lkIHNldEFjdGl2ZUNhcmQoV01MQ2Fy
ZEVsZW1lbnQqKTsKKworICAgIC8vIGRlY2sgYWNjZXNzIGNvbnRyb2wKKyAgICB2b2lkIHNldERl
Y2tBY2Nlc3NEb21haW4oY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzZXREZWNrQWNjZXNzUGF0
aChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldE5lZWRDaGVja0RlY2tBY2Nlc3MoYm9vbCk7
CisgICAgYm9vbCBoYXNEZWNrQWNjZXNzKCkgY29uc3Q7CisgICAgYm9vbCBpc0RlY2tBY2Nlc3Np
YmxlKCk7Citwcml2YXRlOgorICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBWYXJpYWJsZU1hcCBtX3Zh
cmlhYmxlczsKKyAgICBpbnQgbV9oaXN0TGVuOworICAgIFdNTENhcmRFbGVtZW50KiBtX2FjdGl2
ZUNhcmQ7CisgICAgU3RyaW5nIG1fYWNjZXNzRG9tYWluOworICAgIFN0cmluZyBtX2FjY2Vzc1Bh
dGg7CisgICAgYm9vbCBtX2hhc0RlY2tBY2Nlc3M7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNl
bmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
d21sL1dNTENhcmRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAi
V01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldN
TEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRp
bWVyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIk5vZGVMaXN0
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVk
ZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9y
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwor
CitXTUxDYXJkRWxlbWVudDo6V01MQ2FyZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAg
ICwgbV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2lzTmV3Q29udGV4dChmYWxzZSkKKyAgICAs
IG1faXNPcmRlcmVkKHRydWUpCisgICAgLCBtX3RlbXBsYXRlKDApCisgICAgLCBtX2V2bnRIYW5k
bGVyKDApCisgICAgLCBtX2hhc0ludHJFdmVudChmYWxzZSkKKyAgICAsIG1fZXZ0VGltZXIoMCkK
K3sKK30KKworV01MQ2FyZEVsZW1lbnQ6On5XTUxDYXJkRWxlbWVudCgpIAoreworICAgIGlmICht
X2V2bnRIYW5kbGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX2V2bnRIYW5kbGVyOworICAgICAgICBt
X2V2bnRIYW5kbGVyID0gMDsKKyAgICB9CisKKyAgICBtX3RlbXBsYXRlID0gMDsKKyAgICBtX2V2
dFRpbWVyID0gMDsKK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIFdNTEludHJFdmVudFR5cGUgZXR5cGUg
PSBVbmtub3duOworCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0aXRsZUF0dHIpIHsKKyAgICAg
ICAgbV90aXRsZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBk
b2N1bWVudCgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVudGVyZm9yd2Fy
ZEF0dHIpIHsKKyAgICAgICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICB9IGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmVudGVyYmFja3dhcmRBdHRyKSB7CisgICAgICAgIGV0eXBlID0g
T25FbnRlckJhY2t3YXJkOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9udGltZXJB
dHRyKSB7CisgICAgICAgIGV0eXBlID0gT25UaW1lcjsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBuZXdjb250ZXh0QXR0cikgeworICAgICAgICBtX2lzTmV3Q29udGV4dCA9IChhdHRy
LT52YWx1ZSgpID09ICJ0cnVlIikgPyB0cnVlIDogZmFsc2U7CisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb3JkZXJlZEF0dHIpIHsKKyAgICAgICAgbV9pc09yZGVyZWQgPSAoYXR0ci0+
dmFsdWUoKSA9PSAidHJ1ZSIpID8gdHJ1ZSA6IGZhbHNlOworICAgIH0KKyAgICAKKyAgICAvLyBy
ZWdpc3RlciBpbnRyaW5zaWMgZXZlbnQgdG8gY2FyZAorICAgIGlmIChldHlwZSAhPSBVbmtub3du
KSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBRdWFsaWZpZWROYW1l
IHFOYW1lKCJnbyIsICJnbyIsICIiKTsKKyAgICAgICAgRWxlbWVudCogZ28gPSBXTUxFbGVtZW50
RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgZG9jdW1lbnQoKSwgZmFsc2UpOyAKKyAg
ICAgICAgU3RyaW5nIGhyZWYgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFs
dWUoKSwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAgICAgICBnby0+c2V0QXR0cmlidXRlTlMo
IiIsICJocmVmIiwgaHJlZiwgZWMpOworCisgICAgICAgIFdNTEludHJpbnNpY0V2ZW50IGV2Owor
ICAgICAgICBldi50YXNrID0gc3RhdGljX2Nhc3Q8V01MR29FbGVtZW50Kj4oZ28pOworICAgICAg
ICBldi50YXJnZXRVUkkgPSBocmVmOyAKKworICAgICAgICBpZiAoIW1fZXZudEhhbmRsZXIpIHsK
KyAgICAgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVy
KCk7CisgICAgICAgIH0KKworICAgICAgICBzZXRIYXNJbnRyRXZlbnQodHJ1ZSk7CisgICAgICAg
IG1fZXZudEhhbmRsZXItPnJlZ2lzdGVySW50cmluc2ljRXZlbnQoZXR5cGUsIGV2KTsKKyAgICB9
Cit9CisKK1JlbmRlck9iamVjdCogV01MQ2FyZEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiwgUmVuZGVyU3R5bGUqIHN0eWxlKSAKK3sKKyAgICBpZiAoIW1faXNWaXNpYmxlKQor
ICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShOT05FKTsKKyAgICAKKyAgICByZXR1cm4gUmVuZGVy
T2JqZWN0OjpjcmVhdGVPYmplY3QodGhpcywgc3R5bGUpOworfQorCit2b2lkIFdNTENhcmRFbGVt
ZW50OjpzZXRWaXNpYmlsaXR5KGJvb2wgaXNWaXNpYmxlKSAKK3sKKyAgICBtX2lzVmlzaWJsZSA9
IGlzVmlzaWJsZTsKK30KKworYm9vbCBXTUxDYXJkRWxlbWVudDo6dmlzaWJsZSgpIGNvbnN0IAor
eworICAgIHJldHVybiBtX2lzVmlzaWJsZTsKK30KKworYm9vbCBXTUxDYXJkRWxlbWVudDo6aXNO
ZXdDb250ZXh0KCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1faXNOZXdDb250ZXh0OworfQorCiti
b29sIFdNTENhcmRFbGVtZW50Ojppc09yZGVyZWQoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9p
c09yZGVyZWQ7Cit9CisKK1N0cmluZyBXTUxDYXJkRWxlbWVudDo6dGl0bGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3RpdGxlOyAKK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6YmluZFRlbXBs
YXRlKFdNTFRlbXBsYXRlRWxlbWVudCogdGVtcGwpIAoreworICAgIG1fdGVtcGxhdGUgPSB0ZW1w
bDsKK30KKworV01MVGVtcGxhdGVFbGVtZW50KiBXTUxDYXJkRWxlbWVudDo6dGVtcGxhdGVFbGVt
ZW50KCkKK3sKKyAgICByZXR1cm4gbV90ZW1wbGF0ZTsKK30KKworV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyKiBXTUxDYXJkRWxlbWVudDo6ZXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAobV9oYXNJ
bnRyRXZlbnQgJiYgIW1fZXZudEhhbmRsZXIpICB7CisgICAgICAgIG1fZXZudEhhbmRsZXIgPSBu
ZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisgICAgfQorICAgIHJldHVybiBtX2V2bnRI
YW5kbGVyOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpzZXRIYXNJbnRyRXZlbnQoYm9vbCBo
YXMpCit7CisgICAgbV9oYXNJbnRyRXZlbnQgPSBoYXM7Cit9CisKK2Jvb2wgV01MQ2FyZEVsZW1l
bnQ6Omhhc0ludHJFdmVudCgpCit7CisgICAgcmV0dXJuIG1faGFzSW50ckV2ZW50OworfQorCit2
b2lkIFdNTENhcmRFbGVtZW50OjpzZXRJbnRyRXZlbnRUaW1lcihXTUxUaW1lckVsZW1lbnQqIHRp
bWVyKQoreworICAgIC8vIG9ubHkgb25lIHRpbWVyIGlzIGFsbG93ZWQgaW4gYSBjYXJkIAorICAg
IGlmICghbV9ldnRUaW1lcikgeworICAgICAgICBtX2V2dFRpbWVyID0gdGltZXI7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9ldnRUaW1lciA9IDA7CisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5p
emVyKCktPnJlcG9ydEVycm9yKE11bHRpVGltZXJFbGVtZW50c0Vycm9yKTsKKyAgICB9Cit9CisK
K1dNTFRpbWVyRWxlbWVudCogV01MQ2FyZEVsZW1lbnQ6OmV2ZW50VGltZXIoKQoreworICAgIHJl
dHVybiBtX2V2dFRpbWVyOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpyZWdpc3RlckRvRWxl
bWVudChXTUxEb0VsZW1lbnQqIGUpCit7CisgICAgaWYgKGUpIHsKKyAgICAgICAgVmVjdG9yPFdN
TERvRWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1fZG9WZWNzLmJlZ2luKCk7CisgICAgICAgIFdN
TERvRWxlbWVudCogZG9lID0gMDsKKyAgICAgICAgd2hpbGUgKGl0ICE9IG1fZG9WZWNzLmVuZCgp
KSB7CisgICAgICAgICAgICBkb2UgPSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPigqaXQrKyk7
CisKKyAgICAgICAgICAgIGlmIChkb2UtPmRvTmFtZSgpID09IGUtPmRvTmFtZSgpKSB7CisgICAg
ICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoU2FtZU5hbWVE
b0VsZW1lbnRzRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBtX2RvVmVjcy5hcHBlbmQoZSk7CisgICAgICAgIGUtPnNldEFj
dGl2ZSh0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnNoYWRvd0RvRWxl
bWVudElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fdGVtcGxhdGUpIAorICAgICAgICByZXR1cm47
CisKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gdGVtcGxEb05hbWVWZWNzID0gbV90ZW1wbGF0
ZS0+Z2V0RG9FbGVtZW50cygpOworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6aXRlcmF0b3Ig
Y2FyZEl0ID0gbV9kb1ZlY3MuYmVnaW4oKTsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0
ZXJhdG9yIHRlbXBsSXQgPSB0ZW1wbERvTmFtZVZlY3MuYmVnaW4oKTsgCisKKyAgICBTdHJpbmcg
dGVtcGxEb05hbWU7CisgICAgU3RyaW5nIGNhcmREb05hbWU7CisgICAgV01MRG9FbGVtZW50KiB0
ZW1wbERvID0gMDsKKyAgICBmb3IgKDsgdGVtcGxJdCAhPSB0ZW1wbERvTmFtZVZlY3MuZW5kKCk7
ICsrdGVtcGxJdCkgeworICAgICAgICB0ZW1wbERvID0gKnRlbXBsSXQ7CisgICAgICAgIHRlbXBs
RG9OYW1lID0gdGVtcGxEby0+ZG9OYW1lKCk7CisgICAgICAgIGJvb2wgaXNBY3RpdmUgPSB0cnVl
OworICAgICAgICBmb3IgKGNhcmRJdCA9IG1fZG9WZWNzLmJlZ2luKCk7IGNhcmRJdCAhPSBtX2Rv
VmVjcy5lbmQoKTsgKytjYXJkSXQpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wbERvTmFtZSA9PSAo
KmNhcmRJdCktPmRvTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHRlbXBsRG8tPnNldEFjdGl2ZShpc0FjdGl2ZSk7CisgICAgfQorfQorCisKK3ZvaWQgV01M
Q2FyZEVsZW1lbnQ6OmhhbmRsZUludHJFdmVudElmTmVlZGVkKCkKK3sKKyAgICBGcmFtZUxvYWRl
ciAqbG9hZGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCk7CisgICAgaW50IGN1ckhp
c3RMZW4gPSBsb2FkZXItPmdldEhpc3RvcnlMZW5ndGgoKTsKKyAgICBpbnQgb2xkSGlzdExlbiA9
IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+aGlzdG9yeUxlbmd0aCgpOworCisgICAg
Ly8gY2FsY3VsYXRlIHRoZSBlbnRyeSBtZXRob2Qgb2YgY3VycmVudCBjYXJkIAorICAgIFdNTElu
dHJFdmVudFR5cGUgZXR5cGU7CisgICAgaWYgKG9sZEhpc3RMZW4gPiBjdXJIaXN0TGVuKSB7Cisg
ICAgICAgIGV0eXBlID0gT25FbnRlckJhY2t3YXJkOworICAgIH0gZWxzZSBpZiAob2xkSGlzdExl
biA8IGN1ckhpc3RMZW4pIHsKKyAgICAgICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICB9
IGVsc2UgeworICAgICAgICBldHlwZSA9IFVua25vd247CisgICAgfQorIAorICAgIC8vIHVwZGF0
ZSB0aGUgaGhpc3RvcnkgbGVuZ3RoIGluIHRoZSBjdXJyZW50IGJyb3dzZXIgY29udGV4dAorICAg
IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0SGlzdG9yeUxlbmd0aChjdXJIaXN0
TGVuKTsKKyAKKyAgICAvLyBoYW5kbGUgaW50cmluc2ljIGV2ZW50LCBhbmQgc2hhZG93IHRoZSBk
ZWNrLWxldmVsIGV2ZW50IGlmIG5lZWRlZAorICAgIGJvb2wgaGFzSW50ckV2ZW50ID0gIGZhbHNl
OworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogZXZIYW5kbGVyID0gbV9ldm50SGFuZGxl
cjsgCisgICAgaWYgKGV0eXBlICE9IFVua25vd24pIHsKKyAgICAgICAgaWYgKGV2SGFuZGxlciAm
JiBldkhhbmRsZXItPmhhc0ludHJpbnNpY0V2ZW50KGV0eXBlKSkgeworICAgICAgICAgICAgICAg
IGhhc0ludHJFdmVudCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAobV90ZW1wbGF0ZSkgewor
ICAgICAgICAgICAgZXZIYW5kbGVyID0gbV90ZW1wbGF0ZS0+ZXZlbnRIYW5kbGVyKCk7CisgICAg
ICAgICAgICBpZiAoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQoZXR5
cGUpKQorICAgICAgICAgICAgICAgIGhhc0ludHJFdmVudCA9IHRydWU7CisgICAgICAgIH0KKyAg
ICB9CisgCisgICAgaWYgKGhhc0ludHJFdmVudCkgeworICAgICAgICBldkhhbmRsZXItPnRyaWdn
ZXJJbnRyaW5zaWNFdmVudChldHlwZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLy8gc3RhcnQg
dGhlIHRpbWVyIGlmIGl0IGV4aXN0cyBpbiBjdXJyZW50IGNhcmQKKyAgICAgICAgaWYgKG1fZXZ0
VGltZXIpIHsKKyAgICAgICAgICAgIG1fZXZ0VGltZXItPnN0YXJ0KCk7CisgICAgICAgIH0KKwor
CisgICAgICAgIC8vaW5pdGlhbGlzZSBpbnB1dCBlbGVtZW50cyhlZy4gaW5wdXQsIHNlbGVjdCwg
ZXRjKSBpbiB0aGlzIGNhcmQKKyAgICAgICAgTm9kZSogbm9kZSA9IHRoaXM7CisgICAgICAgIHdo
aWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlm
IChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkgeworICAgICAgICAgICAgICAgIHN0YXRpY19j
YXN0PFdNTElucHV0RWxlbWVudCo+KG5vZGUpLT5pbml0KCk7CisgICAgICAgICAgICB9IGVsc2Ug
aWYgKG5vZGUtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkgeworICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihub2RlKS0+c2VsZWN0SW5pdGlhbE9wdGlvbnMoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgfQorfQorCit2b2lkIFdNTENhcmRFbGVt
ZW50Ojp1cGRhdGVUYWJsZUVsZW1lbnQoKQoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzOyAKKyAg
ICBXTUxUYWJsZUVsZW1lbnQqIHRhYmxlID0gMDsKKyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50
cmF2ZXJzZU5leHROb2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxO
YW1lczo6dGFibGVUYWcpKSB7CisgICAgICAgICAgICB0YWJsZSA9IHN0YXRpY19jYXN0PFdNTFRh
YmxlRWxlbWVudCo+KG5vZGUpOworICAgICAgICAgICAgaWYgKHRhYmxlKQorICAgICAgICAgICAg
ICAgIHRhYmxlLT5pbml0KCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShX
TUxOYW1lczo6Y2FyZFRhZykpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAg
fQorfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVudC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3dtbC9XTUxDYXJkRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBXTUxDYXJkRWxlbWVudF9oCisjZGVmaW5lIFdNTENhcmRFbGVtZW50X2gKKworI2lu
Y2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MVGVtcGxhdGVFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
V01MVGFza0VsZW1lbnQ7CitjbGFzcyBXTUxUaW1lckVsZW1lbnQ7CitjbGFzcyBXTUxEb0VsZW1l
bnQ7CisKK2NsYXNzIFdNTENhcmRFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQgeworcHVibGlj
OgorICAgIFdNTENhcmRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOwor
ICAgIHZpcnR1YWwgfldNTENhcmRFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdmlydHVhbCBSZW5kZXJPYmpl
Y3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKworICAgIHZv
aWQgc2V0VmlzaWJpbGl0eShib29sKTsKKyAgICBib29sIHZpc2libGUoKSBjb25zdDsKKworICAg
IGJvb2wgaXNOZXdDb250ZXh0KCkgY29uc3Q7CisgICAgYm9vbCBpc09yZGVyZWQoKSBjb25zdDsK
KworICAgIFN0cmluZyB0aXRsZSgpIGNvbnN0OworCisgICAgdm9pZCBiaW5kVGVtcGxhdGUoV01M
VGVtcGxhdGVFbGVtZW50Kik7CisgICAgV01MVGVtcGxhdGVFbGVtZW50KiB0ZW1wbGF0ZUVsZW1l
bnQoKTsKKworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyKCk7Cisg
ICAgYm9vbCBoYXNJbnRyRXZlbnQoKTsKKyAgICB2b2lkIHNldEhhc0ludHJFdmVudChib29sKTsK
KyAgICB2b2lkIGhhbmRsZUludHJFdmVudElmTmVlZGVkKCk7CisKKyAgICB2b2lkIHNldEludHJF
dmVudFRpbWVyKFdNTFRpbWVyRWxlbWVudCopOworICAgIFdNTFRpbWVyRWxlbWVudCogZXZlbnRU
aW1lcigpOworCisgICAgdm9pZCByZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQqKTsKKyAg
ICB2b2lkIHNoYWRvd0RvRWxlbWVudElmTmVlZGVkKCk7CisKKyAgICB2b2lkIHVwZGF0ZVRhYmxl
RWxlbWVudCgpOworcHJpdmF0ZToKKyAgICBib29sIG1faXNWaXNpYmxlOworICAgIFN0cmluZyBt
X3RpdGxlOworICAgIGJvb2wgbV9pc05ld0NvbnRleHQ7CisgICAgYm9vbCBtX2lzT3JkZXJlZDsK
KyAgICBXTUxUZW1wbGF0ZUVsZW1lbnQqIG1fdGVtcGxhdGU7CisgICAgV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyKiBtX2V2bnRIYW5kbGVyOworICAgIGJvb2wgbV9oYXNJbnRyRXZlbnQ7CisgICAg
V01MVGltZXJFbGVtZW50KiBtX2V2dFRpbWVyOyAKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4g
bV9kb1ZlY3M7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93
bWwvV01MRG9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb0VsZW1l
bnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorCisjaW5jbHVkZSAiQ1N0
cmluZy5oIgorI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5o
IgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUg
IkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTERv
RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MUG9z
dGZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxIZWxwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2Ug
V01MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKKworV01MRG9FbGVtZW50OjpX
TUxEb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnLCBEb2N1bWVudCogZG9jLCBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MSW5wdXRFbGVtZW50KHRhZywgZG9jLCBmb3Jt
KQorICAgICwgbV90YXNrKDApCisgICAgLCBtX2lzT3B0aW9uKGZhbHNlKQorICAgICwgbV9pc05v
b3AoZmFsc2UpCisgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQoreworfQorCitXTUxEb0VsZW1lbnQ6
On5XTUxEb0VsZW1lbnQoKSB7fQorCit2b2lkIFdNTERvRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFu
ZGxlcihFdmVudCogZSkgCit7CisgICAgaWYgKChlLT50eXBlKCkgPT0gY2xpY2tFdmVudCkgJiYg
IW1faXNPcHRpb24pIHsKKworICAgICAgICBpZiAoKG1fdHlwZSA9PSAiYWNjZXB0IikgfHwgKG1f
dHlwZSA9PSAib3B0aW9ucyIpKSB7IAorICAgICAgICAgICAgaWYgKG1fdGFzaykKKyAgICAgICAg
ICAgICAgICBtX3Rhc2stPmV4ZWMoZSk7CisgICAgICAgIH0gZWxzZSBpZiAobV90eXBlID09ICJw
cmV2IikgeworICAgICAgICAgICAgLy8gc3RvcCB0aGUgdGltZXIgb2YgdGhlIGN1cnJlbnQgY2Fy
ZCBpZiBpdCBpcyBhY3RpdmUKKyAgICAgICAgICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gV01M
SGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5hY3RpdmVDYXJkKCk7CisgICAgICAgICAgICBp
ZiAoY2FyZCAmJiBjYXJkLT5ldmVudFRpbWVyKCkpIHsKKyAgICAgICAgICAgICAgICBjYXJkLT5l
dmVudFRpbWVyKCktPnN0b3AoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgUGFnZSog
cGFnZSA9IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+cGFnZSgpOworICAgICAgICAg
ICAgcGFnZS0+Z29CYWNrKCk7CisgICAgICAgIH0gZWxzZSBpZiAobV90eXBlID09ICJyZXNldCIp
IHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+cmVzZXQoKTsK
KyAgICAgICAgfSBlbHNlIGlmIChtX3R5cGUgPT0gImRlbGV0ZSIpIHsKKyAgICAgICAgICAgIC8v
VE9ETworICAgICAgICB9IGVsc2UgeyAKKyAgICAgICAgICAgIC8vIEFzIGZvciAnaGVscCcsJ3Vu
a25vd24nLCAnWC0qLHgtKicsJ1Zbdl1OW25dRFtkXS4qJywgd2UgZG8gbm90aGluZworICAgICAg
ICB9CisgICAgfQorCit9CisKK3ZvaWQgV01MRG9FbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJv
b2wgZGVlcCkKK3sKKyAgICBmb3IgKE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgcGFyZW50
OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAocGFyZW50LT5o
YXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MVGVt
cGxhdGVFbGVtZW50Kj4ocGFyZW50KS0+cmVnaXN0ZXJEb0VsZW1lbnQodGhpcyk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfWVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShjYXJkVGFn
KSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihwYXJlbnQpLT5y
ZWdpc3RlckRvRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg
ICAgfQorfQorCitSZW5kZXJPYmplY3QqIFdNTERvRWxlbWVudDo6Y3JlYXRlUmVuZGVyZXIoUmVu
ZGVyQXJlbmEqIHJhLCBSZW5kZXJTdHlsZSogcnMpIAoreworICAgIGlmICghbV9pc0FjdGl2ZSB8
fCBtX2lzT3B0aW9uIHx8IG1faXNOb29wKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFJlbmRl
ckJ1dHRvbiogYnV0dG9uID0gbmV3IChyYSkgUmVuZGVyQnV0dG9uKHRoaXMpOyAKKyAgICBycy0+
c2V0QmFja2dyb3VuZENvbG9yKENvbG9yOjpsaWdodEdyYXkpOworICAgIGJ1dHRvbi0+c2V0U3R5
bGUocnMpOworICAgIGJ1dHRvbi0+c2V0VGV4dChtX2xhYmVsLmlzRW1wdHkoKSA/IG1fbmFtZSA6
IG1fbGFiZWwpOworICAgIC8vYnV0dG9uLT51cGRhdGVCZWZvcmVBZnRlckNvbnRlbnQoUmVuZGVy
U3R5bGU6OkFGVEVSKTsKKyAgICByZXR1cm4gYnV0dG9uOworfQorCit2b2lkIFdNTERvRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKSAKK3sKKyAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhh
c1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRv
a2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3R5cGUgPSBhdHRyLT52
YWx1ZSgpOworCisgICAgICAgIGlmIChtX25hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9u
YW1lID0gbV90eXBlOworCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIp
IHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUoKSkp
IHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFs
aWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBtX25hbWUgPSBhdHRyLT52YWx1ZSgpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IGxhYmVsQXR0cikgeworICAgICAgICBtX2xhYmVsID0gV01MSGVscGVyOjpzdWJz
dGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOworICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9wdGlvbmFsQXR0cikgeworICAgICAgICBtX2lzT3B0aW9uID0gKGF0
dHItPnZhbHVlKCkgPT0gInRydWUiKSA/IHRydWUgOiBmYWxzZTsKKyAgICB9CisKK30KKwordm9p
ZCBXTUxEb0VsZW1lbnQ6OnJlZ2lzdGVyVGFzayhXTUxUYXNrRWxlbWVudCogdGFzaykgCit7Cisg
ICAgbV90YXNrID0gdGFzazsKK30KKwordm9pZCBXTUxEb0VsZW1lbnQ6OnNldE5vb3AoYm9vbCBu
b29wKSAKK3sKKyAgICBtX2lzTm9vcCA9IG5vb3A7Cit9CisKK1N0cmluZyBXTUxEb0VsZW1lbnQ6
OmRvTmFtZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX25hbWU7Cit9CisKK3ZvaWQgV01MRG9F
bGVtZW50OjpzZXRBY3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgbV9pc0FjdGl2ZSA9IGFjdGl2
ZTsKK30KKyAKK2Jvb2wgV01MRG9FbGVtZW50Ojppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0
dXJuIG1faXNBY3RpdmU7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTERvRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTERvRWxlbWVudC5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFdNTERvRWxlbWVudF9oCisjZGVmaW5lIFdNTERvRWxlbWVudF9oCisK
KyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRXZlbnQ7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFzcyBXTUxUYXNrRWxlbWVu
dDsKKworY2xhc3MgV01MRG9FbGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVsZW1lbnQgeworcHVi
bGljOgorICAgIFdNTERvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqLCBI
VE1MRm9ybUVsZW1lbnQqID0gMCk7CisgICAgdmlydHVhbCB+V01MRG9FbGVtZW50KCk7CisKKyAg
ICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5k
ZXJTdHlsZSopOyAKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworICAgIHZv
aWQgcmVnaXN0ZXJUYXNrKFdNTFRhc2tFbGVtZW50Kik7CisKKyAgICAvL3JlY29yZCB0aGUgbm9v
cCB0YXNrCisgICAgdm9pZCBzZXROb29wKGJvb2wpOworCisgICAgdm9pZCBzZXRBY3RpdmUoYm9v
bCk7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgIFN0cmluZyBkb05hbWUoKSBjb25z
dDsKK3ByaXZhdGU6CisgICAgV01MVGFza0VsZW1lbnQqIG1fdGFzazsKKyAgICBTdHJpbmcgbV90
eXBlOworICAgIFN0cmluZyBtX2xhYmVsOworICAgIFN0cmluZyBtX25hbWU7CisgICAgYm9vbCBt
X2lzT3B0aW9uOworICAgIGJvb2wgbV9pc05vb3A7CisgICAgYm9vbCBtX2lzQWN0aXZlOworfTsK
KworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTERvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIldNTERvY3VtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVk
ZSAiV01MQnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1dNTERvY3VtZW50OjpXTUxEb2N1bWVudChGcmFtZSogZnJhbWUpCisgICAg
OiBEb2N1bWVudChmcmFtZSwgZmFsc2UpIAoreworICAgIGNsZWFyWE1MVmVyc2lvbigpOworCisg
ICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiAhcGFnZS0+d21s
QnJ3Q29udGV4dCgpKSB7CisgICAgICAgIFJlZlB0cjxXTUxCcndDb250ZXh0PiBicndjb250ZXh0
ID0gbmV3IFdNTEJyd0NvbnRleHQocGFnZSk7CisgICAgICAgIHBhZ2UtPnNldFdtbEJyd0NvbnRl
eHQoYnJ3Y29udGV4dCk7CisgICAgICAgIFdNTEhlbHBlcjo6c2V0Q3VycmVudEJyd0NvbnRleHQo
YnJ3Y29udGV4dC5nZXQoKSk7CisgICAgfQorCit9CisKK1dNTERvY3VtZW50Ojp+V01MRG9jdW1l
bnQoKSB7fQorCitUb2tlbml6ZXIgKldNTERvY3VtZW50OjpjcmVhdGVUb2tlbml6ZXIoKSAKK3sK
KyAgICByZXR1cm4gbmV3IFdNTFRva2VuaXplcih0aGlzKTsKK30KKworaW5saW5lIGJvb2wgV01M
RG9jdW1lbnQ6OmlzV01MRG9jdW1lbnQoKSBjb25zdCAKK3sgCisgICAgcmV0dXJuIHRydWU7IAor
fQorCit9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTERvY3VtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3dtbC9XTUxEb2N1bWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2lmbmRlZiBXTUxEb2N1bWVudF9oCisjZGVmaW5lIFdNTERvY3VtZW50X2gKKworI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxEb2N1bWVudCA6IHB1YmxpYyBEb2N1bWVudCwgcHVi
bGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxXTUxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBuZXcgV01MRG9jdW1lbnQoZnJhbWUpOworICAgIH0KKyAgICBXTUxEb2N1bWVudChGcmFtZSop
OworICAgIHZpcnR1YWwgfldNTERvY3VtZW50KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNXTUxE
b2N1bWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgVG9rZW5pemVyKiBjcmVhdGVUb2tlbml6ZXIo
KTsKK307CisKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5o
IgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorCisj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNp
bmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1
ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxC
UkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRWxl
bWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiUmVuZGVy
V29yZEJyZWFrLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJUZXh0LmgiCisj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisjaW5j
bHVkZSAibWFya3VwLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IFdNTE5hbWVzOworCit1c2luZyBzdGQ6Om1pbjsKK3VzaW5nIHN0ZDo6bWF4OworCitXTUxFbGVt
ZW50OjpXTUxFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpk
b2MpCisgICAgOiBTdHlsZWRFbGVtZW50KHRhZ05hbWUsIGRvYykge30KKworCitXTUxFbGVtZW50
Ojp+V01MRWxlbWVudCgpIHt9CisKK3ZvaWQgV01MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKikge30KKwordm9pZCBXTUxFbGVtZW50OjppbnNlcnRlZEludG9U
cmVlKGJvb2wgZGVlcCkKK3sKKyAgICBpZiAobG9jYWxOYW1lKCkgPT0gIm5vb3AiKSB7CisgICAg
ICAgIGZvciAoTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBh
cmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1l
KGRvVGFnKSkgeworICAgICAgICAgICAgICAgIFdNTERvRWxlbWVudCogZG9lID0gc3RhdGljX2Nh
c3Q8V01MRG9FbGVtZW50Kj4ocGFyZW50KTsKKyAgICAgICAgICAgICAgICBpZiAoZG9lLT5hdHRh
Y2hlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvZS0+ZGV0YWNoKCk7CisgICAgICAgICAg
ICAgICAgICAgIGRvZS0+c2V0Tm9vcCh0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZG9lLT5h
dHRhY2goKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9IGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShhbmNob3JUYWcpKSB7CisgICAg
ICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoV3JvbmdUYXNr
SW5BbmNob3JFbGVtZW50RXJyb3IpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICB9
CisKK30KKworUmVuZGVyT2JqZWN0KiBXTUxFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJB
cmVuYSosIFJlbmRlclN0eWxlKiBzdHlsZSkgCit7CisgIHJldHVybiBSZW5kZXJPYmplY3Q6OmNy
ZWF0ZU9iamVjdCh0aGlzLCBzdHlsZSk7Cit9CisKK2Jvb2wgV01MRWxlbWVudDo6aXNIVE1MRWxl
bWVudCgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gdHJ1ZTsgCit9CisKK30KSW5kZXg6IFdlYkNv
cmUvd21sL1dNTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEVsZW1lbnRfaAorI2RlZmluZSBXTUxF
bGVtZW50X2gKKworI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgCitj
bGFzcyBXTUxFbGVtZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQgeworcHVibGljOgorICAgIFdN
TEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2
aXJ0dWFsIH5XTUxFbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVS
ZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBib29sIGlz
SFRNTEVsZW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShi
b29sIGRlZXApOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
d21sL1dNTEVsZW1lbnRGYWN0b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxF
bGVtZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50
RmFjdG9yeS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
ICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZh
Y3RvcnkuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MQUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxBbmNob3JFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MUHJldkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJXTUxQb3N0ZmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2V0dmFy
RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFJlZnJl
c2hFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGVtcGxhdGVFbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQWNjZXNzRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25FbGVtZW50LmgiCisj
aW5jbHVkZSAiV01MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGFibGVFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MUEVsZW1lbnQuaCIK
KworI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MQnV0dG9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVJvd0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgorCisjaW5jbHVkZSA8d3Rm
L0hhc2hNYXAuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTo6V01MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOwor
Cit0eXBlZGVmIEVsZW1lbnQgKigqQ29uc3RydWN0b3JGdW5jKShEb2N1bWVudCAqZG9jLCBib29s
IGNyZWF0ZWRCeVBhcnNlcik7Cit0eXBlZGVmIFdURjo6SGFzaE1hcDxBdG9taWNTdHJpbmdJbXBs
KiwgQ29uc3RydWN0b3JGdW5jPiBGdW5jdGlvbk1hcDsKKworc3RhdGljIEZ1bmN0aW9uTWFwICpn
RnVuY3Rpb25NYXAgPSAwOworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VsZW1lbnQgKmNhcmRD
b25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IFdNTENhcmRFbGVtZW50KGNhcmRUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKndt
bF9hQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7Cisg
ICAgcmV0dXJuIG5ldyBXTUxBRWxlbWVudChXTUxOYW1lczo6YVRhZywgZG9jKTsKK30KKworRWxl
bWVudCAqaW1nQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBXTUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcsIGRv
Yyk7Cit9CisKK0VsZW1lbnQgKmJyQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVh
dGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MQlJFbGVtZW50KGRvYyk7Cit9CisK
K0VsZW1lbnQgKnBDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNl
cikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFBFbGVtZW50KGRvYyk7Cit9CisKK0VsZW1lbnQgKmlu
cHV0Q29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7Cisg
ICAgcmV0dXJuIG5ldyBXTUxJbnB1dEVsZW1lbnQoV01MTmFtZXM6OmlucHV0VGFnLCBkb2MpOwor
fQorCitFbGVtZW50ICphbmNob3JDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTEFuY2hvckVsZW1lbnQoV01MTmFtZXM6
OmFuY2hvclRhZywgZG9jKTsKKyAgICAKK30KKworRWxlbWVudCAqc2VsZWN0Q29uc3RydWN0b3Io
RG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBX
TUxTZWxlY3RFbGVtZW50KFdNTE5hbWVzOjpzZWxlY3RUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQg
Km9wdGlvbkNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQor
eworICAgIHJldHVybiBuZXcgV01MT3B0aW9uRWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICpw
cmV2Q29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7Cisg
ICAgcmV0dXJuIG5ldyBXTUxQcmV2RWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICpnb0NvbnN0
cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVy
biBuZXcgV01MR29FbGVtZW50KFdNTE5hbWVzOjpnb1RhZywgZG9jKTsKK30KKworRWxlbWVudCAq
cG9zdGZpZWxkQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmV0ZWRCeVBhcnNlcikK
K3sKKyAgICByZXR1cm4gbmV3IFdNTFBvc3RmaWVsZEVsZW1lbnQoV01MTmFtZXM6OnBvc3RmaWVs
ZFRhZywgZG9jKTsKK30KKworRWxlbWVudCAqc2V0dmFyQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRv
YywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxTZXR2YXJFbGVt
ZW50KFdNTE5hbWVzOjpzZXR2YXJUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnRhYmxlQ29uc3Ry
dWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJu
IG5ldyBXTUxUYWJsZUVsZW1lbnQoZG9jKTsKK30KKworRWxlbWVudCAqdHJDb25zdHJ1Y3RvcihE
b2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhU
TUxUYWJsZVJvd0VsZW1lbnQoZG9jKTsKK30KKworRWxlbWVudCAqdGRDb25zdHJ1Y3RvcihEb2N1
bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxU
YWJsZUNlbGxFbGVtZW50KEhUTUxOYW1lczo6dGRUYWcsZG9jKTsKK30KKworRWxlbWVudCAqZG9D
b25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICBy
ZXR1cm4gbmV3IFdNTERvRWxlbWVudChkb1RhZywgZG9jKTsKK30KKworRWxlbWVudCAqcmVmcmVz
aENvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAg
IHJldHVybiBuZXcgV01MUmVmcmVzaEVsZW1lbnQocmVmcmVzaFRhZywgZG9jKTsKK30KKworRWxl
bWVudCAqdGVtcGxhdGVDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBh
cnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFRlbXBsYXRlRWxlbWVudCh0ZW1wbGF0ZVRhZywg
ZG9jKTsKK30KKworRWxlbWVudCAqdGltZXJDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29s
IGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFRpbWVyRWxlbWVudCh0aW1l
clRhZywgZG9jKTsKK30KKworRWxlbWVudCAqYWNjZXNzQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRv
YywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxBY2Nlc3NFbGVt
ZW50KGFjY2Vzc1RhZywgZG9jKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZUZ1bmN0
aW9uTWFwSWZOZWNlc3NhcnkoKQoreworICAgIGlmIChnRnVuY3Rpb25NYXApCisgICAgICAgIHJl
dHVybjsKKyAgICAvLyBDcmVhdGUgdGhlIHRhYmxlLgorICAgIGdGdW5jdGlvbk1hcCA9IG5ldyBG
dW5jdGlvbk1hcDsKKyAgICAKKyAgICAvLyBQb3B1bGF0ZSBpdCB3aXRoIGNvbnN0cnVjdG9yIGZ1
bmN0aW9ucy4KKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6Y2FyZFRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksIGNhcmRDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01M
TmFtZXM6OmFUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCB3bWxfYUNvbnN0cnVjdG9yKTsKKyAgICBn
RnVuY3Rpb25NYXAtPnNldChIVE1MTmFtZXM6OmltZ1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGlt
Z0NvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChIVE1MTmFtZXM6OmJyVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgYnJDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQo
V01MTmFtZXM6OnBUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBwQ29uc3RydWN0b3IpOworICAgIGdG
dW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjppbnB1dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGlu
cHV0Q29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjphbmNob3JU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCBhbmNob3JDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9u
TWFwLT5zZXQoV01MTmFtZXM6OnNlbGVjdFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHNlbGVjdENv
bnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6b3B0aW9uVGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgb3B0aW9uQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+
c2V0KFdNTE5hbWVzOjpwcmV2VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgcHJldkNvbnN0cnVjdG9y
KTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6Z29UYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCBnb0NvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6cG9z
dGZpZWxkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgcG9zdGZpZWxkQ29uc3RydWN0b3IpOworICAg
IGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpzZXR2YXJUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBzZXR2YXJDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnRh
YmxlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGFibGVDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQoSFRNTE5hbWVzOjp0clRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRyQ29uc3Ry
dWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KEhUTUxOYW1lczo6dGRUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCB0ZENvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1l
czo6cmVmcmVzaFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHJlZnJlc2hDb25zdHJ1Y3Rvcik7Cisg
ICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmRvVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
ZG9Db25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnRlbXBsYXRl
VGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGVtcGxhdGVDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQoV01MTmFtZXM6OnRpbWVyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGltZXJD
b25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmFjY2Vzc1RhZy5s
b2NhbE5hbWUoKS5pbXBsKCksIGFjY2Vzc0NvbnN0cnVjdG9yKTsKK30KKworRWxlbWVudCAqV01M
RWxlbWVudEZhY3Rvcnk6OmNyZWF0ZVdNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5h
bWUsIERvY3VtZW50KiBkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworCisgICAgV2ViQ29y
ZTo6V01MTmFtZXM6OmluaXQoKTsKKyAgICAvLyBEb24ndCBtYWtlIGVsZW1lbnRzIHdpdGhvdXQg
YSBkb2N1bWVudAorICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBT
ZXR0aW5ncyogc2V0dGluZ3MgPSBkb2MtPnNldHRpbmdzKCk7CisgICAgaWYgKHNldHRpbmdzICYm
IHNldHRpbmdzLT51c2VzRGFzaGJvYXJkQmFja3dhcmRDb21wYXRpYmlsaXR5TW9kZSgpKQorICAg
ICAgICByZXR1cm4gMDsKKworICAgIGNyZWF0ZUZ1bmN0aW9uTWFwSWZOZWNlc3NhcnkoKTsKKyAg
ICBDb25zdHJ1Y3RvckZ1bmMgZnVuYyA9IGdGdW5jdGlvbk1hcC0+Z2V0KHFOYW1lLmxvY2FsTmFt
ZSgpLmltcGwoKSk7CisgICAgaWYgKGZ1bmMpCisgICAgICAgIHJldHVybiBmdW5jKGRvYywgY3Jl
YXRlZEJ5UGFyc2VyKTsKKyAgICAKKyAgICByZXR1cm4gbmV3IFdNTEVsZW1lbnQocU5hbWUsIGRv
Yyk7Cit9CisKK30gLy8gbmFtZXNwYWNlCisKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEVsZW1lbnRG
YWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRWxlbWVudEZhY3RvcnkuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEVsZW1lbnRGYWN0b3J5LmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEVsZW1lbnRGYWN0b3J5X2gKKyNk
ZWZpbmUgV01MRWxlbWVudEZhY3RvcnlfaAorCituYW1lc3BhY2UgV2ViQ29yZSB7CisgICAgY2xh
c3MgRWxlbWVudDsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBRdWFsaWZpZWROYW1l
OworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKK30KKworbmFtZXNwYWNlIFdlYkNvcmUKK3sKKyAg
ICBjbGFzcyBXTUxFbGVtZW50OworCisgICAgLy8gVGhlIGlkZWEgYmVoaW5kIHRoaXMgY2xhc3Mg
aXMgdGhhdCB0aGVyZSB3aWxsIGV2ZW50dWFsbHkgYmUgYSBtYXBwaW5nIGZyb20gbmFtZXNwYWNl
IFVSSXMgdG8gRWxlbWVudEZhY3RvcmllcyB0aGF0IGNhbiBkaXNwZW5zZQorICAgIC8vIGVsZW1l
bnRzLiAgSW4gYSBjb21wb3VuZCBkb2N1bWVudCB3b3JsZCwgdGhlIGdlbmVyaWMgY3JlYXRlRWxl
bWVudCBmdW5jdGlvbiAod2lsbCBlbmQgdXAgYmVpbmcgdmlydHVhbCkgd2lsbCBiZSBjYWxsZWQu
CisgICAgY2xhc3MgV01MRWxlbWVudEZhY3RvcnkKKyAgICB7CisgICAgcHVibGljOgorICAgICAg
ICBXZWJDb3JlOjpFbGVtZW50ICpjcmVhdGVFbGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmll
ZE5hbWUmIHFOYW1lLCBXZWJDb3JlOjpEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNl
ciA9IHRydWUpOworICAgICAgICBzdGF0aWMgRWxlbWVudCAqY3JlYXRlV01MRWxlbWVudChjb25z
dCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBxTmFtZSwgV2ViQ29yZTo6RG9jdW1lbnQgKmRvYywg
Ym9vbCBjcmVhdGVkQnlQYXJzZXIgPSB0cnVlKTsKKyAgICB9OworfQorCisjZW5kaWYKKwpJbmRl
eDogV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxHb0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MR29FbGVt
ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzODYgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisjaW5jbHVkZSAi
UmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2lu
Y2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgor
I2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTFBvc3RmaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxTZXR2YXJFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK3Rl
bXBsYXRlPGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZl
Y3RvcjxUKiwgbj4gJiB2ZWMsIFQqIGl0ZW0pIAoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNp
emUoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlm
ICh2ZWNbaV0gPT0gaXRlbSkgeworICAgICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9Cit9CisKK3N0YXRpYyBpbnQgcmFuZG9tTnVtYmVyKCkKK3sK
KyAgICBzdGF0aWMgYm9vbCByYW5kb21TZWVkZWQgPSBmYWxzZTsKKyAKKyNpZiBQTEFURk9STShE
QVJXSU4pCisgICAgaWYgKCFyYW5kb21TZWVkZWQpIHsKKyAgICAgICAgc3JhbmRvbWRldigpOwor
ICAgICAgICByYW5kb21TZWVkZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gcmFuZG9tKCk7
CisjZWxzZQorICAgIGlmICghcmFuZG9tU2VlZGVkKSB7CisgICAgICAgIHNyYW5kKHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0aW1lKDApKSk7CisgICAgICAgIHJhbmRvbVNlZWRlZCA9IHRydWU7Cisg
ICAgfQorICAgIHJldHVybiByYW5kKCk7CisjZW5kaWYKK30KKyAKKy8vIFJldHVybnMgYSAwLXRl
cm1pbmF0ZWQgQyBzdHJpbmcgaW4gdGhlIHZlY3Rvci4KK3N0YXRpYyB2b2lkIGdldFVuaXF1ZUJv
dW5kYXJ5U3RyaW5nKFZlY3RvcjxjaGFyPiYgYm91bmRhcnkpCit7CisgICAgLy8gVGhlIFJGQyAy
MDQ2IHNwZWMgc2F5cyB0aGUgQWxwaGFOdW1lcmljIGNoYXJhY3RlcnMgcGx1cyB0aGUgZm9sbG93
aW5nIGNoYXJhY3RlcnMKKyAgICAvLyBhcmUgbGVnYWwgZm9yIGJvdW5kYXJpZXM6ICAnKCkrXywt
Li86PT8KKyAgICAvLyBIb3dldmVyIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycywgdGhvdWdoIGxl
Z2FsLCBjYXVzZSBzb21lIHNpdGVzIHRvIGZhaWw6CisgICAgLy8gKCksLi86PQorICAgIC8vIGh0
dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzUyCisgICAgc3RhdGljIGNv
bnN0IGNoYXIgQWxwaGFOdW1lcmljRW5jTWFwWzY0XSA9CisgICAgeworICAgICAgMHg0MSwgMHg0
MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKKyAgICAgIDB4NDksIDB4NEEs
IDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUsIDB4NEYsIDB4NTAsCisgICAgICAweDUxLCAweDUyLCAw
eDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAorICAgICAgMHg1OSwgMHg1QSwgMHg2
MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwKKyAgICAgIDB4NjcsIDB4NjgsIDB4Njks
IDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQsIDB4NkUsCisgICAgICAweDZGLCAweDcwLCAweDcxLCAw
eDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LAorICAgICAgMHg3NywgMHg3OCwgMHg3OSwgMHg3
QSwgMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywKKyAgICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4Mzcs
IDB4MzgsIDB4MzksIDB4MkIsIDB4NDEKKyAgICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS81
MjUyNTc3PiBnbWFpbCBkb2VzIG5vdCBhY2NlcHQgbGVnYWwgY2hhcmFjdGVycyBpbiB0aGUgZm9y
bSBib3VuZGFyeQorICAgICAgLy8gQXMgc3RhdGVkIGFib3ZlLCBzb21lIGxlZ2FsIGNoYXJhY3Rl
cnMgY2F1c2UsIHNpdGVzIHRvIGZhaWwuIFNwZWNpZmljYWxseQorICAgICAgLy8gdGhlIC8gY2hh
cmFjdGVyIHdoaWNoIHdhcyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGFib3ZlIGFycmF5LiBJ
IGhhdmUKKyAgICAgIC8vIHJlcGxhY2VkIHRoZSBsYXN0IGNoYXJhY3RlciB3aXRoIGFub3RoZXIg
Y2hhcmFjdGVyIGFscmVhZHkgaW4gdGhlIGFycmF5CisgICAgICAvLyAobm90aWNlIHRoZSBmaXJz
dCBhbmQgbGFzdCB2YWx1ZXMgYXJlIGJvdGggMHg0MSwgQSkuIEluc3RlYWQgb2YgcGlja2luZwor
ICAgICAgLy8gYW5vdGhlciB1bmlxdWUgbGVnYWwgY2hhcmFjdGVyIGZvciBib3VuZGFyeSBzdHJp
bmdzIHRoYXQsIGJlY2F1c2UgaXQgaGFzCisgICAgICAvLyBuZXZlciBiZWVuIHRlc3RlZCwgbWF5
IG9yIG1heSBub3QgYnJlYWsgb3RoZXIgc2l0ZXMsIEkgc2ltcGx5CisgICAgICAvLyByZXBsYWNl
ZCAvIHdpdGggQS4gIFRoaXMgbWVhbnMgQSBpcyB0d2ljZSBhcyBsaWtlbHkgdG8gb2NjdXIgaW4g
b3VyIGJvdW5kYXJ5CisgICAgICAvLyBzdHJpbmdzIHRoYW4gYW55IG90aGVyIGNoYXJhY3RlciBi
dXQgSSB0aGluayB0aGlzIGlzIGZpbmUgZm9yIHRoZSB0aW1lIGJlaW5nLgorICAgICAgLy8gVGhl
IEZJWE1FIGhlcmUgaXMgYWJvdXQgcmVzdG9yaW5nIHRoZSAvIGNoYXJhY3RlciBvbmNlIHRoZSBh
Zm9yZW1lbnRpb25lZAorICAgICAgLy8gcmFkYXIgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgfTsK
KyAKKyAgICAvLyBTdGFydCB3aXRoIGFuIGluZm9ybWF0aXZlIHByZWZpeC4KKyAgICBjb25zdCBj
aGFyIGJvdW5kYXJ5UHJlZml4W10gPSAiLS0tLVdlYktpdEZvcm1Cb3VuZGFyeSI7CisgICAgYm91
bmRhcnkuYXBwZW5kKGJvdW5kYXJ5UHJlZml4LCBzdHJsZW4oYm91bmRhcnlQcmVmaXgpKTsKKyAK
KyAgICAvLyBBcHBlbmQgMTYgcmFuZG9tIDdiaXQgYXNjaWkgQWxwaGFOdW1lcmljIGNoYXJhY3Rl
cnMuCisgICAgVmVjdG9yPGNoYXI+IHJhbmRvbUJ5dGVzOworIAorICAgIGZvciAoaW50IGkgPSAw
OyBpIDwgNDsgKytpKSB7CisgICAgICAgIGludCByYW5kb21uZXNzID0gcmFuZG9tTnVtYmVyKCk7
CisgICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChBbHBoYU51bWVyaWNFbmNNYXBbKHJhbmRvbW5l
c3MgPj4gMjQpICYgMHgzRl0pOworICAgICAgICByYW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1l
cmljRW5jTWFwWyhyYW5kb21uZXNzID4+IDE2KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9tQnl0
ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFsocmFuZG9tbmVzcyA+PiA4KSAmIDB4M0ZdKTsK
KyAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFtyYW5kb21uZXNz
ICYgMHgzRl0pOworICAgIH0KKyAKKyAgICBib3VuZGFyeS5hcHBlbmQocmFuZG9tQnl0ZXMpOwor
ICAgIGJvdW5kYXJ5LmFwcGVuZCgwKTsgLy8gQWRkIGEgMCBhdCB0aGUgZW5kIHNvIHdlIGNhbiB1
c2UgdGhpcyBhcyBhIEMtc3R5bGUgc3RyaW5nLgorfQorCitXTUxHb0VsZW1lbnQ6OldNTEdvRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDog
V01MVGFza0VsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV9lbmN0eXBlKCJhcHBsaWNhdGlv
bi94LXd3dy1mb3JtLXVybGVuY29kZWQiKSAKKyAgICAsIG1fbXVsdGlwYXJ0KGZhbHNlKQorICAg
ICwgbV9wb3N0KGZhbHNlKQoreworfQorCitXTUxHb0VsZW1lbnQ6On5XTUxHb0VsZW1lbnQoKSB7
fQorCit2b2lkIFdNTEdvRWxlbWVudDo6cmVnaXN0ZXJQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3Rm
aWVsZEVsZW1lbnQqIGUpIAoreworICAgIG1fcG9zdGZpZWxkcy5hcHBlbmQoZSk7Cit9CisKK3Zv
aWQgV01MR29FbGVtZW50OjpyZW1vdmVQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1l
bnQqIGUpIAoreworICAgIHJlbW92ZUZyb21WZWN0b3IobV9wb3N0ZmllbGRzLCBlKTsKK30KKwor
Ym9vbCBXTUxHb0VsZW1lbnQ6Omhhc1Bvc3RmaWVsZCgpIGNvbnN0IAoreworICAgIHJldHVybiAh
bV9wb3N0ZmllbGRzLmlzRW1wdHkoKTsKK30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OnBhcnNlRW5j
dHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuY29udGFpbnMoIm11bHRp
cGFydCIsIGZhbHNlKSB8fCB0eXBlLmNvbnRhaW5zKCJmb3JtLWRhdGEiLCBmYWxzZSkpIHsKKyAg
ICAgICAgbV9lbmN0eXBlID0gIm11bHRpcGFydC9mb3JtLWRhdGEiOworICAgICAgICBtX211bHRp
cGFydCA9IHRydWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9lbmN0eXBlID0gImFwcGxpY2F0
aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI7CisgICAgICAgIG1fbXVsdGlwYXJ0ID0gZmFsc2U7
CisgICAgfQorfQorCit2b2lkIFdNTEdvRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlICphdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbWV0aG9kQXR0
cikgeworICAgICAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInBvc3Qi
KSkKKyAgICAgICAgICAgIG1fcG9zdCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdu
b3JpbmdDYXNlKGF0dHItPnZhbHVlKCksICJnZXQiKSkKKyAgICAgICAgICAgIG1fcG9zdCA9IGZh
bHNlOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGVuY3R5cGVBdHRyKSB7CisgICAg
ICAgIFN0cmluZyBlbmN0eXBlID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZh
bHVlKCksIGRvY3VtZW50KCkpOworICAgICAgICBwYXJzZUVuY3R5cGUoZW5jdHlwZSk7CisgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKSB7CisgICAgICAg
IC8vIHNwYWNlIHNlcGFyYXRlZCBsaXN0IG9mIGNoYXJzZXRzIHRoZSBzZXJ2ZXJhIGFjY2VwdHMg
LSBzZWUgcmZjMjA0NQorICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRy
LT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0
RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisgICAgICAgIG1fYWNjZXB0Y2hhcnNldCA9IGF0dHItPnZhbHVlKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgV01MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0
cik7CisgICAgfQorfQorCitQYXNzUmVmUHRyPEZvcm1EYXRhPiBXTUxHb0VsZW1lbnQ6OmZvcm1E
YXRhKEZyYW1lTG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGJvdW5kYXJ5KSAKK3sKKyAgICBT
dHJpbmcgc3RyID0gbV9hY2NlcHRjaGFyc2V0OworICAgIHN0ci5yZXBsYWNlKCcsJywgJyAnKTsK
KworICAgIFZlY3RvcjxTdHJpbmc+IGNoYXJzZXRzOworICAgIHN0ci5zcGxpdCgnICcsIGNoYXJz
ZXRzKTsKKyAgICBUZXh0RW5jb2RpbmcgZW5jb2Rpbmc7CisgICAgVmVjdG9yPFN0cmluZz46OmNv
bnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzZXRzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmlu
Zz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnNldHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0
KQorICAgICAgICBpZiAoKGVuY29kaW5nID0gVGV4dEVuY29kaW5nKCppdCkpLmlzVmFsaWQoKSkg
eworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIGlmICghZW5jb2RpbmcuaXNW
YWxpZCgpKSB7CisgICAgICAgIGlmIChsb2FkZXIpCisgICAgICAgICAgICBlbmNvZGluZyA9IGxv
YWRlci0+ZW5jb2RpbmcoKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW5jb2RpbmcgPSBM
YXRpbjFFbmNvZGluZygpOworICAgIH0KKyAKKyAgICBSZWZQdHI8Rm9ybURhdGE+IHJlc3VsdCA9
IEZvcm1EYXRhOjpjcmVhdGUoKTsKKyAgICBTdHJpbmcgZW5jX3N0cmluZzsKKyAKKyAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fcG9zdGZpZWxkcy5zaXplKCk7IGkrKykgeworCisg
ICAgICAgIFN0cmluZyBuYW1lID0gbV9wb3N0ZmllbGRzW2ldLT5uYW1lKCk7CisgICAgICAgIFN0
cmluZyB2YWx1ZSA9IG1fcG9zdGZpZWxkc1tpXS0+dmFsdWUoKTsKKworICAgICAgICBpZiAoIW1f
bXVsdGlwYXJ0KSB7CisgICAgICAgICAgICBpZiAoIWVuY19zdHJpbmcuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIGVuY19zdHJpbmcgKz0gIiYiOworCisgICAgICAgICAgICBlbmNfc3RyaW5n
ICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMobV9wb3N0ZmllbGRzW2ldLT5uYW1lKCkp
OyAKKyAgICAgICAgICAgIGVuY19zdHJpbmcgKz0gIj0iOworICAgICAgICAgICAgZW5jX3N0cmlu
ZyArPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKG1fcG9zdGZpZWxkc1tpXS0+dmFsdWUo
KSk7IAorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIGhzdHIoIi0tIik7Cisg
ICAgICAgICAgICBoc3RyICs9IGJvdW5kYXJ5OworICAgICAgICAgICAgaHN0ciArPSAiXHJcbiI7
CisgICAgICAgICAgICBoc3RyICs9ICJDb250ZW50LURpc3Bvc2l0aW9uOiBmb3JtLWRhdGE7IG5h
bWU9XCIiOworICAgICAgICAgICAgaHN0ciArPSBlbmNvZGluZy5lbmNvZGUocmVpbnRlcnByZXRf
Y2FzdDxjb25zdCBVQ2hhcio+KG5hbWUuY2hhcmFjdGVycygpKSwgbmFtZS5sZW5ndGgoKSwgVVJM
RW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKS5kYXRhKCk7IAorICAgICAgICAgICAgaHN0
ciArPSAiXCIiOworICAgICAgICAgICAgaHN0ciArPSAiXHJcblxyXG4iOworCisgICAgICAgICAg
ICAvLyBhcHBlbmQgYm9keQorICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGhzdHIuY2hh
cmFjdGVycygpLCBoc3RyLmxlbmd0aCgpKTsKKworICAgICAgICAgICAgaWYgKCF2YWx1ZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY3NWYWwgPSBlbmNvZGluZy5lbmNvZGUo
cmVpbnRlcnByZXRfY2FzdDxjb25zdCBVQ2hhcio+KHZhbHVlLmNoYXJhY3RlcnMoKSksIHZhbHVl
Lmxlbmd0aCgpLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpLmRhdGEoKTsgCisg
ICAgICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKGNzVmFsLmNoYXJhY3RlcnMoKSwgY3NW
YWwubGVuZ3RoKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZERhdGEoIlxyXG4iLCAyKTsKKworICAgICAgICAgICAgLy8gYWNjb3JkaW5nIHRvIHRoZSBzZWN0
aW9uIDkuNS4xIG9mIHdhcC0xOTEtd21sLTIwMDAwMjE5LWEucGRmLCAKKyAgICAgICAgICAgIC8v
IG1ha2UgdGhlIENvbnRlbnQtdHlwZSBoZWFkZXIgaW5jbHVkZSB0aGUgY2hhcnNldCBwYXJhbWV0
ZXIKKyAgICAgICAgICAgIFN0cmluZyBzdHIgPSByZXN1bHQtPmZsYXR0ZW5Ub1N0cmluZygpOwor
ICAgICAgICAgICAgaWYgKCFjaGFyYWN0ZXJzQXJlQWxsQVNDSUkoc3RyLmNoYXJhY3RlcnMoKSwg
c3RyLmxlbmd0aCgpKSkgeworICAgICAgICAgICAgICAgIG1fZW5jdHlwZSArPSAiOyI7CisgICAg
ICAgICAgICAgICAgbV9lbmN0eXBlICs9IGVuY29kaW5nLm5hbWUoKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0gLy8gZW5kIG9mIGZvciAoLi4uCisKKyAgICBpZiAobV9tdWx0aXBh
cnQpIHsKKyAgICAgICAgZW5jX3N0cmluZyA9ICItLSI7CisgICAgICAgIGVuY19zdHJpbmcgKz0g
Ym91bmRhcnk7CisgICAgICAgIGVuY19zdHJpbmcgKz0gIi0tXHJcbiI7CisKKyAgICB9IGVsc2Ug
eworICAgICAgICBtX2VuY3R5cGUgKz0gIjsiOworICAgICAgICBtX2VuY3R5cGUgKz0gZW5jb2Rp
bmcubmFtZSgpOworICAgIH0KKyAKKyAgICByZXN1bHQtPmFwcGVuZERhdGEoZW5jX3N0cmluZy5j
aGFyYWN0ZXJzKCksIGVuY19zdHJpbmcubGVuZ3RoKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK3ZvaWQgV01MR29FbGVtZW50OjpleGVjKEV2ZW50KiBldnQsIFN0cmluZyB1cmkpIAorewor
ICAgIERvY3VtZW50ICpkb2MgPSBkb2N1bWVudCgpOworICAgIEZyYW1lTG9hZGVyICpsb2FkZXI9
IGRvYy0+ZnJhbWUoKS0+bG9hZGVyKCk7CisgICAgaWYgKCFsb2FkZXIpCisgICAgICAgIHJldHVy
bjsKKworICAgIC8vIGNvbnZlcnQgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBzZXR2YXIg
ZWxlbWVudCBpZiBuZWNlc3NhcnkKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcnM7CisgICAgaWYgKGhh
c1NldHZhcigpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9zZXR2
YXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fc2V0dmFyc1tpXS0+bmFtZSgp
LmlzRW1wdHkoKSkgCisgICAgICAgICAgICAgICAgbV92YXJzLnNldChtX3NldHZhcnNbaV0tPm5h
bWUoKSwgbV9zZXR2YXJzW2ldLT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0gCisKKyAgICAv
LyB1cGRhdGUgYnJvd3NlciBjb250ZXh0IAorICAgIGlmICghbV92YXJzLmlzRW1wdHkoKSkKKyAg
ICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlcyhtX3Zh
cnMpOworIAorCisgICAgLy8gc3Vic3RpdHV0ZSB0YXJnZXQgdXJpIGF0dHJpYnV0ZSB2YWx1ZQor
ICAgIGlmICh1cmkuaXNFbXB0eSgpKQorICAgICAgICB1cmkgPSBnZXRBdHRyaWJ1dGUoaHJlZkF0
dHIpOworICAgIHVyaSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZih1cmksIGRvYywgImVz
Y2FwZSIpOworCisgICAgLy8gc3RvcCB0aGUgdGltZXIgb2YgdGhlIGN1cnJlbnQgY2FyZCBpZiBp
dCBpcyBhY3RpdmUKKyAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IFdNTEhlbHBlcjo6Y3VycmVu
dEJyd0NvbnRleHQoKS0+YWN0aXZlQ2FyZCgpOworICAgIGlmIChjYXJkICYmIGNhcmQtPmV2ZW50
VGltZXIoKSkgeworICAgICAgICBjYXJkLT5ldmVudFRpbWVyKCktPnN0b3AoKTsKKyAgICB9CisK
KyAgICAvLyBpZiBuZXdjb250ZXh0IGF0dHJpYnV0ZSBvZiBkZXN0IGNhcmQgaXMgdHJ1ZSwgcmVp
bml0aWFsaXplIHRoZSBjb250ZXh0CisgICAgY2FyZCA9IFdNTEhlbHBlcjo6c2V0RGVzdGluYXRp
b25DYXJkKGRvY3VtZW50KCksIHVyaSk7CisgICAgaWYgKGNhcmQgJiYgY2FyZC0+aXNOZXdDb250
ZXh0KCkpCisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+cmVzZXQoKTsK
KworICAgIC8vIHByZXBhcmUgZm9yIGxvYWRpbmcgdGhlIGRlc3RpbmF0aW9uIFVSTAorICAgIFBh
c3NSZWZQdHI8Rm9ybURhdGE+IGRhdGEgPSAwOworICAgIEtVUkwgdXJsID0gZG9jLT5jb21wbGV0
ZVVSTCh1cmkuaXNFbXB0eSgpID8gIiIgOiB1cmkpOworICAgIFJlc291cmNlUmVxdWVzdCByZXEo
dXJsKTsKKyAgICBLVVJMIGRvY1VybCA9IGRvYy0+Y29tcGxldGVVUkwoZG9jLT5kb2N1bWVudFVS
SSgpKTsKKyAgICBib29sIGluU2FtZURlY2sgPSBkb2NVcmwucGF0aCgpID09IHVybC5wYXRoKCk7
IAorCisKKyAgICBTdHJpbmcgc2VuZHJlZmVyZXIgPSBnZXRBdHRyaWJ1dGUoc2VuZHJlZmVyZXJB
dHRyKTsKKyAgICBpZiAoc2VuZHJlZmVyZXIgPT0gInRydWUiKSB7CisgICAgICAgIHNlbmRyZWZl
cmVyID0gdXJpOworICAgICAgICByZXEuc2V0SFRUUFJlZmVycmVyKHNlbmRyZWZlcmVyKTsKKyAg
ICB9CisKKyAgICBTdHJpbmcgY2FjaGVDdHJsID0gZ2V0QXR0cmlidXRlKGNhY2hlX2NvbnRyb2xB
dHRyKTsKKworICAgaWYgKG1fcG9zdCkgeyAvLyBQT1NUCisKKyAgICAgICBpZiAoaW5TYW1lRGVj
ayAmJiAoY2FjaGVDdHJsICE9ICJuby1jYWNoZSIpKSB7IC8vaWdub3JlIGFsbCBwb3N0ZmllbGQg
ZWxlbWVudHMKKyAgICAgICAgICAgIHJlcS5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFE
b250TG9hZCk7CisgICAgICAgfSBlbHNlIHsKKworICAgICAgICAgICBpZiAobV9tdWx0aXBhcnQp
IHsgLy8gbXVsdGlwYXJ0L2Zvcm0tZGF0YQorICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBi
b3VuZGFyeTsKKyAgICAgICAgICAgICAgICBnZXRVbmlxdWVCb3VuZGFyeVN0cmluZyhib3VuZGFy
eSk7CisgICAgICAgICAgICAgICAgZGF0YSA9IGZvcm1EYXRhKGxvYWRlciwgYm91bmRhcnkuZGF0
YSgpKTsKKyAgICAgICAgICAgICAgICByZXEuc2V0SFRUUENvbnRlbnRUeXBlKG1fZW5jdHlwZSAr
ICI7IGJvdW5kYXJ5PSIgKyBib3VuZGFyeS5kYXRhKCkpOworICAgICAgICAgICB9IGVsc2UgeyAg
Ly90ZXh0L3BsYWluIG9yIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZAorICAgICAg
ICAgICAgICAgIGRhdGEgPSBmb3JtRGF0YShsb2FkZXIsIDApOworICAgICAgICAgICAgICAgIHJl
cS5zZXRIVFRQQ29udGVudFR5cGUobV9lbmN0eXBlKTsKKyAgICAgICAgICAgfQorCisgICAgICAg
ICAgIHJlcS5zZXRIVFRQQm9keShkYXRhLmdldCgpKTsKKyAgICAgICB9CisKKyAgICAgICByZXEu
c2V0SFRUUE1ldGhvZCgiUE9TVCIpOworCisgICB9IGVsc2UgeyAgIC8vIEdFVAorCisgICAgICAg
IGlmIChtX211bHRpcGFydCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoaW5T
YW1lRGVjaykgeworICAgICAgICAgICAgcmVxLnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0
YURvbnRMb2FkKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBzdHI7Cisg
ICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fcG9zdGZpZWxkcy5zaXpl
KCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghc3RyLmlzRW1wdHkoKSkgCisgICAgICAg
ICAgICAgICAgICAgIHN0ciArPSAiJiI7ICAgICAgICAKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICBzdHIgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX3Bvc3RmaWVs
ZHNbaV0tPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgc3RyICs9ICI9IjsKKyAgICAgICAgICAg
ICAgICBzdHIgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX3Bvc3RmaWVsZHNbaV0t
PnZhbHVlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cmwuc2V0UXVlcnkoc3Ry
KTsKKyAgICAgICAgICAgIHJlcS5zZXRVUkwodXJsKTsKKyAgICAgICAgfQorCisgICAgICAgIHJl
cS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKworICAgfQorCisgICAgLy8gc2V0IEhUVFAgY2FjaGUt
Y29udHJvbCBoZWFkZXIgaWYgbmVlZGVkCisgICAgaWYgKCFjYWNoZUN0cmwuaXNFbXB0eSgpKSB7
CisgICAgICAgIHJlcS5zZXRIVFRQSGVhZGVyRmllbGQoImNhY2hlLWNvbnRyb2wiLCBjYWNoZUN0
cmwpOworICAgICAgICBpZiAoY2FjaGVDdHJsID09ICJuby1jYWNoZSIpCisgICAgICAgICAgICBy
ZXEuc2V0Q2FjaGVQb2xpY3koUmVsb2FkSWdub3JpbmdDYWNoZURhdGEpOworICAgIH0KKworICAg
IGxvYWRlci0+bG9hZChyZXEpOworfQorCit9CisKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEdvRWxl
bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaWZuZGVmIFdNTEdvRWxlbWVudF9oCisjZGVmaW5lIFdNTEdvRWxlbWVu
dF9oCisKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnQ7CitjbGFzcyBGb3Jt
RGF0YTsKK2NsYXNzIEZyYW1lTG9hZGVyOworY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CitjbGFzcyBX
TUxQb3N0ZmllbGRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEdv
RWxlbWVudCA6IHB1YmxpYyBXTUxUYXNrRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MR29FbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpOworICAgIHZp
cnR1YWwgfldNTEdvRWxlbWVudCgpOworICAKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRB
dHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGV4ZWMoRXZlbnQq
LCBTdHJpbmcpOworCisgICAgdm9pZCByZWdpc3RlclBvc3RmaWVsZEVsZW1lbnQoV01MUG9zdGZp
ZWxkRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlUG9zdGZpZWxkRWxlbWVudChXTUxQb3N0Zmll
bGRFbGVtZW50Kik7CisgICAgYm9vbCBoYXNQb3N0ZmllbGQoKSBjb25zdDsKKworcHJpdmF0ZToK
KyAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YShGcmFtZUxvYWRlciosIGNvbnN0IGNo
YXIqKTsKKyAgICB2b2lkIHBhcnNlRW5jdHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIFZlY3Rv
cjxXTUxQb3N0ZmllbGRFbGVtZW50Kj4gbV9wb3N0ZmllbGRzOworICAgIFN0cmluZyBtX2VuY3R5
cGU7CisgICAgU3RyaW5nIG1fYWNjZXB0Y2hhcnNldDsKKyAgICBib29sIG1fbXVsdGlwYXJ0IDog
MTsKKyAgICBib29sIG1fcG9zdCA6IDE7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJ
bmRleDogV2ViQ29yZS93bWwvV01MSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxIZWxwZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MSGVscGVyLmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAg
ICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1
ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiV01M
QnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIldNTENhcmRF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMu
aCIKKyNpbmNsdWRlICJ3dGYvQVNDSUlDVHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1dNTEJyd0NvbnRleHQqIFdNTEhlbHBlcjo6c19icndDb250ZXh0ID0gMDsKK1dNTFRva2VuaXpl
ciogV01MSGVscGVyOjpzX3Rva2VuaXplciA9IDA7CisKK1dNTEJyd0NvbnRleHQqIFdNTEhlbHBl
cjo6Y3VycmVudEJyd0NvbnRleHQoKQoreworICAgIHJldHVybiBzX2Jyd0NvbnRleHQ7Cit9CisK
K3ZvaWQgV01MSGVscGVyOjpzZXRDdXJyZW50QnJ3Q29udGV4dChXTUxCcndDb250ZXh0KiBjb250
ZXh0KQoreworICAgIHNfYnJ3Q29udGV4dCA9IGNvbnRleHQ7Cit9CisKK1dNTFRva2VuaXplciog
V01MSGVscGVyOjp0b2tlbml6ZXIoKQoreworICAgIHJldHVybiBzX3Rva2VuaXplcjsKK30KKwor
dm9pZCBXTUxIZWxwZXI6OnNldFRva2VuaXplcihXTUxUb2tlbml6ZXIqIHRva2VuaXplcikKK3sK
KyAgICBzX3Rva2VuaXplciA9IHRva2VuaXplcjsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZEZv
clZhcmlhYmxlKFVDaGFyIGNoKSAKK3sKKyAgICBjaGFyIGEgPSBzdGF0aWNfY2FzdDxjaGFyPihj
aCk7CisgICAgcmV0dXJuIChXVEY6OmlzQVNDSUlBbHBoYShhKSB8fCBXVEY6OmlzQVNDSUlEaWdp
dChhKSB8fCBhID09ICdfJyk7Cit9CisgCitib29sIFdNTEhlbHBlcjo6aXNWYWxpZFZhcmlhYmxl
TmFtZShjb25zdCBTdHJpbmcmIHZhck5hbWUsIGJvb2wgaXNWYXJSZWYpCit7CisgICAgYm9vbCBp
c1ZhbGlkID0gZmFsc2U7CisgICAgVUNoYXIgY2ggPSB2YXJOYW1lWzBdOworCisgICAgU3RyaW5n
IHJlZkNoYXJzID0gIigpOiQiOworICAgIGlmIChpc1ZhclJlZikKKyAgICAgICAgaXNWYWxpZCA9
ICgocmVmQ2hhcnMuZmluZChjaCkgIT0gLTEpIHx8IGNoID09ICdfJyB8fCBXVEY6OmlzQVNDSUlB
bHBoYShzdGF0aWNfY2FzdDxjaGFyPihjaCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlzVmFsaWQg
PSAoY2ggPT0gJ18nIHx8IFdURjo6aXNBU0NJSUFscGhhKHN0YXRpY19jYXN0PGNoYXI+KGNoKSkp
OworCisgICAgaWYgKGlzVmFsaWQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpPTE7IGk8dmFy
TmFtZS5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaXNWYXJSZWYpCisgICAgICAg
ICAgICAgICAgaXNWYWxpZCA9ICgocmVmQ2hhcnMuZmluZCh2YXJOYW1lW2ldKSAhPSAtMSkgfHwg
aXNWYWxpZEZvclZhcmlhYmxlKHZhck5hbWVbaV0pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBpc1ZhbGlkID0gaXNWYWxpZEZvclZhcmlhYmxlKHZhck5hbWVbaV0pOworCisg
ICAgICAgICAgICBpZiAoIWlzVmFsaWQpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBpc1ZhbGlkOworfQorCiti
b29sIFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoY29uc3QgU3RyaW5nJiB0ZXh0KQoreworICAg
IGJvb2wgaGFzVmFyUmVmID0gZmFsc2U7CisgICAgaW50IHN0YXJ0UG9zID0gdGV4dC5maW5kKCck
Jyk7CisgICAgaWYgKHN0YXJ0UG9zICE9IC0xKSB7CisgICAgICAgIHVuc2lnbmVkIGVuZFBvcyA9
IHN0YXJ0UG9zICsgMTsKKyAgICAgICAgd2hpbGUgKHRleHRbZW5kUG9zXSA9PSAnJCcpCisgICAg
ICAgICAgICBlbmRQb3MrKzsKKworICAgICAgICBpZiAoKChlbmRQb3Mtc3RhcnRQb3MpICUgMikg
IT0gMCkgeworICAgICAgICAgICAgaGFzVmFyUmVmID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIHJldHVybiBoYXNWYXJSZWY7Cit9CisKK3N0YXRpYyBpbnQgdmFyaWFibGVFbmRzQXQo
Y29uc3QgU3RyaW5nJiB2YXJpYWJsZSkgCit7CisgICAgLy8gd2UgYXNzdW1lIHRoZSB2YXJpYWJs
ZSBzdGFydHMgd2l0aCAiJCIgLCBhbmQgdGhlbiBmb2xsb3dzIHdpdGggYXQgbGVhc3Qgb25lIHF1
YWxpZmllZCBjaGFyYWN0ZXIgZm9yIHZhcmlhYmxlIG5hbWUsIG90aGVyd2lzZSwgbm90IGEgdmFs
aWQgdmFyaWFibGUKKyAgICBpZiAoKHZhcmlhYmxlWzBdICAhPSAnJCcpIHx8IFdURjo6aXNBU0NJ
SURpZ2l0KHZhcmlhYmxlWzFdKSB8fCAhaXNWYWxpZEZvclZhcmlhYmxlKHZhcmlhYmxlWzFdKSkK
KyAgICAgICAgcmV0dXJuIC0xOworICAgIGludCBwb3MgPSAtMTsKKyAgICBmb3IgKHBvcyA9IDE7
IHBvcyA8IHN0YXRpY19jYXN0PGludD4odmFyaWFibGUubGVuZ3RoKCkpOyBwb3MrKykgeworICAg
ICAgICBpZiAoIGlzVmFsaWRGb3JWYXJpYWJsZSh2YXJpYWJsZVtwb3NdKSkgeworICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKyAgICByZXR1cm4gcG9zOworfQorIAorc3RhdGljIGJvb2wgaGFzTmFtZUF0
dHJpYnV0ZVdpdGhWYWx1ZShOb2RlICpub2RlLCBjb25zdCBTdHJpbmcmIHZhbHVlKSAKK3sKKyAK
KyAgICBOYW1lZEF0dHJNYXAgKmF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygpOworICAgIGlmICgh
YXR0cnMpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH1lbHNlIHsKKyAgICAgICAgQXR0
cmlidXRlKiBhdHRyID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oIm5hbWUiKTsKKyAgICAgICAg
aWYgKCFhdHRyKSB7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIChhdHRyLT52YWx1ZSgpID09IHZhbHVlKT8gdHJ1ZTpmYWxzZTsKKyAgICB9Cit9
CisKK3ZvaWQgV01MSGVscGVyOjpjb252ZXJ0VmFySWZOZWVkZWQoU3RyaW5nJiB2YXIsIFN0cmlu
ZyYgY29udikgCit7CisgICAgaWYgKGNvbnYuaXNFbXB0eSgpIHx8IHZhci5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsgCisKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyBjb252ZXIg
PSBjb252Lmxvd2VyKCk7CisgICAgaWYgKChjb252ZXIgPT0gImUiKSB8fCAoY29udmVyID09ICJl
c2NhcGUiKSkgeworICAgICAgICByZXN1bHQgPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2Vz
KHZhcik7CisgICAgfSBlbHNlIGlmICgoY29udmVyID09ICJ1IikgfHwgKGNvbnZlciA9PSAidW5l
c2MiKSkgeworICAgICAgICByZXN1bHQgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModmFyKTsK
KyAgICB9IGVsc2UgaWYgKChjb252ZXIgPT0gIm4iKSB8fCAoY29udmVyID09ICJub2VzYyIpKSB7
CisgICAgICAgIC8vIGRvIG5vdGhpbmcKKyAgICB9CisKKyAgICBpZiAoIXJlc3VsdC5pc0VtcHR5
KCkpCisgICAgICAgIHZhciA9IHJlc3VsdDsKK30KKworU3RyaW5nIFdNTEhlbHBlcjo6c3Vic3Rp
dHV0ZVZhclJlZihjb25zdCBTdHJpbmcmIHZhclJlZiwgTm9kZSogZG9jdW1lbnQsIFN0cmluZyBl
c2NhcGUpIAoreworICAgIGlmICh2YXJSZWYuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdmFy
UmVmOworCisgICAgU3RyaW5nIG9yaWcgPSB2YXJSZWY7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAg
ICBTdHJpbmcgdmFyaWFibGU7CisgICAgU3RyaW5nIGNvbnY7CisgCisgICAgYm9vbCBoYXNFcnJv
ciA9IGZhbHNlOworICAgIHdoaWxlICghb3JpZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50IHN0
YXJ0ID0gb3JpZy5maW5kKCIkIik7CisgICAgICAgIGlmIChzdGFydCA9PSAtMSkgeyAgLy9pdCdz
IG5vdCBhIHZhcmlhYmxlIHJlZmVyZW5jZSwgb2shCisgICAgICAgICAgICByZXN1bHQgKz0gb3Jp
ZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCArPSBvcmln
LmxlZnQoc3RhcnQpOworICAgICAgICBvcmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0aCgpIC0g
c3RhcnQpOworIAorICAgICAgICAvLyBjaGVjayB0aGUgZG91YmxlICckJyBzaWduICwgc2tpcCB0
aGVtIG92ZXIKKyAgICAgICAgaWYgKG9yaWdbMV0gPT0gJyQnKSB7CisgICAgICAgICAgICByZXN1
bHQgKz0gIiQiOworICAgICAgICAgICAgb3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAt
IDIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAKKyAgICAgICAgaW50IGVu
ZCA9IDA7CisgICAgICAgIGlmIChvcmlnWzFdID09ICcoJykgeworICAgICAgICAgICAgZW5kID0g
b3JpZy5maW5kKCIpIik7CisgICAgICAgICAgICBpZiAoZW5kID09IC0xKSB7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9IG9yaWc7ICAgLy8gaWYgd2UgZmluZCAiJCgiIGJ1dCBubyAiKSIsIHN0
b3AgcGFyc2luZworICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaWFi
bGUgPSBvcmlnLnN1YnN0cmluZygyLCBlbmQtMik7CisgICAgICAgICAgICAgICAgLy8gc2VhcmNo
IGNvbnZlcnNpb24gc3RyaW5nCisgICAgICAgICAgICAgICAgaW50IHBvcyA9IHZhcmlhYmxlLmZp
bmQoJzonKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnYgPSB2YXJpYWJsZS5zdWJzdHJpbmcocG9zICsgMSwgdmFyaWFibGUubGVuZ3Ro
KCkgLSBwb3MgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5s
ZWZ0KHBvcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgICAgIC8vIGhlcmUgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGlzIHZh
bGlkCisgICAgICAgICAgICAgICAgaWYgKGhhc0Vycm9yID0gIWlzVmFsaWRWYXJpYWJsZU5hbWUo
dmFyaWFibGUpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAg
IG9yaWcgPSBvcmlnLnJpZ2h0KG9yaWcubGVuZ3RoKCkgLSBlbmQgLSAxICk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbmQgPSB2YXJpYWJsZUVuZHNBdChv
cmlnKTsKKyAgICAgICAgICAgIGlmIChlbmQgPCAxKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0
ICs9IG9yaWcubGVmdCgyKTsKKyAgICAgICAgICAgICAgICBvcmlnID0gb3JpZy5yaWdodChvcmln
Lmxlbmd0aCgpIC0gMik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICB2YXJpYWJsZSA9IG9yaWcuc3Vic3RyaW5nKDEsIGVuZCAtIDEpOworICAg
ICAgICAgICAgb3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIGVuZCApOworICAgICAg
ICB9CisgCisgICAgICAgIC8vIHRyYXZlcnNlIHRoZSB3aG9sZSBET00gdHJlZSB0byBzdWJzdGl0
dXRlIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UKKyAgICAgICAgYm9vbCBpc0RvbmUgPSBmYWxzZTsK
KyAgICAgICAgU3RyaW5nIGNvbnZWYXI7CisgICAgICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudDsg
CisgICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChoYXNOYW1lQXR0cmlidXRlV2l0aFZhbHVlKG5vZGUsIHZhcmlhYmxlKSkg
eworICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpzZXR2YXJU
YWcpKSB7CisgICAgICAgICAgICAgICAgICAgIFdNTFNldHZhckVsZW1lbnQqIHNldHZhciA9IHN0
YXRpY19jYXN0PFdNTFNldHZhckVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgICAgICAgICAg
Y29udlZhciA9IHNldHZhci0+Z2V0QXR0cmlidXRlKFdNTE5hbWVzOjp2YWx1ZUF0dHIpOworICAg
ICAgICAgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAKKyAgICAg
ICAgLy8gdHJ5IHRvIGdldCB2YXJpYWJsZSBzdWJzdGl0dXRlIGZyb20gY3VycmVudCBicm93c2Vy
IGNvbnRleHQKKyAgICAgICAgaWYgKCFpc0RvbmUpIHsKKyAgICAgICAgICAgIGNvbnZWYXIgPSBX
TUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPmdldFZhcmliYWxlKHZhcmlhYmxlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHdoaWxlICghY29udlZhci5pc0VtcHR5KCkpIHsKKworICAgICAg
ICAgICAgaWYgKGNvbnZWYXIuY29udGFpbnMoIiQoIikpIHsKKyAgICAgICAgICAgICAgICBjb252
VmFyID0gc3Vic3RpdHV0ZVZhclJlZihjb252VmFyLCBkb2N1bWVudCk7CisgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb252LmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICBjb252ID0gZXNjYXBlOworICAgICAgICAgICAgY29udmVy
dFZhcklmTmVlZGVkKGNvbnZWYXIsIGNvbnYpOworICAgICAgICAgICAgcmVzdWx0ICs9IGNvbnZW
YXI7IAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisgCisgICAgfSAvLyBlbmQgb2Yg
d2hpbGUgKCFvcmlnLmlzRW1wdHkoKSkgCisgCisgICAgaWYgKGhhc0Vycm9yKQorICAgICAgICBX
TUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVu
Y2VFcnJvcik7CisKKyAgICByZXR1cm4gcmVzdWx0LmlzRW1wdHkoKSA/IHZhclJlZiA6IHJlc3Vs
dDsKK30gCisKKy8vIEFjY29yZGluZyB0byB0aGUgc2VjdGlvbiA1LjIgYW5kIDEyLjUuMSBpbiB0
aGUgd21sIHNwZWM6IHdhcC0xOTEtd21sLTIwMDAwMjE5LWEucGRmCisvLyB0aGUgZGVzdGluYXRp
b24gY2FyZCBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSBmb2xsb3dpbmcgY2FzZToKKy8vIDEsIHVz
ZSBmcmFnbWVudCBhbmNob3Igd2hpY2ggaXMgc3BlY2lmaWVkIGJ5IHRoZSBkb2N1bWVudCBVUkws
IGZvbGxvd2VkIHdpdGggJyMnCisvLyAyLCBpZiBubyBmcmFnbWVudCBpcyBzcGVjaWZlZCBvciB0
aGUgZnJhZ21lbnQgbmFtZSBpcyB3cm9uZywgdGhlIGZpcnN0IGNhcmQgaXMgdGhlIGRlc3QgY2Fy
ZC4KK1dNTENhcmRFbGVtZW50KiBXTUxIZWxwZXI6OnNldERlc3RpbmF0aW9uQ2FyZChSZWZQdHI8
RG9jdW1lbnQ+IGRvYywgU3RyaW5nIHVyaSkgCit7CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgaWYgKHVyaS5pc0VtcHR5KCkpCisgICAgICAgIHVyaSA9IGRvYy0+ZG9j
dW1lbnRVUkkoKTsKKyAgICAgICAgCisgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSAwOworICAg
IGJvb2wgZm91bmREZXN0Q2FyZCA9IGZhbHNlOworICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5s
ID0gZG9jLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2FyZCIpOworICAgIGlmIChubC5nZXQoKS0+
bGVuZ3RoKCkgPD0gMCkgeworICAgICAgICByZXR1cm4gY2FyZDsKKyAgICB9CisKKyAgICAvL2hp
ZGUgYWxsIHRoZSBjYXJkcyBwcmV2aW91c2x5IAorICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGk8
IG5sLmdldCgpLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGNhcmQgPSBzdGF0aWNfY2FzdDxX
TUxDYXJkRWxlbWVudCo+KG5sLmdldCgpLT5pdGVtKGkpKTsKKyAgICAgICAgY2FyZC0+c2V0Vmlz
aWJpbGl0eShmYWxzZSk7CisgICAgfQorCisgICAgaW50IGlkeCA9IHVyaS5maW5kKCcjJyk7Cisg
ICAgaWYgKGlkeCA+PSAwKSB7CisgICAgICAgIFN0cmluZyBhdHRySUQ7CisgICAgICAgIFN0cmlu
ZyBmcmFnbWVudCA9IHVyaS5zdWJzdHJpbmcoaWR4ICsgMSk7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaSA9IG5sLmdldCgpLT5sZW5ndGgoKS0xOyBpID4gMDsgaS0tKSB7CisgICAgICAgICAgICBj
YXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihubC5nZXQoKS0+aXRlbShpKSk7Cisg
ICAgICAgICAgICBhdHRySUQgPSBjYXJkLT5nZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmlkQXR0cik7
CisgICAgICAgICAgICBpZiAoYXR0cklEID09IGZyYWdtZW50KSB7CisgICAgICAgICAgICAgICAg
Zm91bmREZXN0Q2FyZCA9IHRydWU7CisgICAgICAgICAgICAgICAgY2FyZC0+c2V0VmlzaWJpbGl0
eSh0cnVlKTsKKyAgICAgICAgICAgICAgICAvL2ZvcmNlIGZyYW1lIGxvYWRlciB0byBsb2FkIHRo
ZSBVUkwgd2l0aCBmcmFnbWVudCBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAgUGFnZSogcGFn
ZSA9IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+cGFnZSgpOworICAgICAgICAgICAg
ICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c2V0Rm9yY2VSZWxvYWQodHJ1ZSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoIWZvdW5kRGVzdENhcmQpIHsKKyAgICAgICAgY2FyZCA9IHN0YXRpY19jYXN0PFdN
TENhcmRFbGVtZW50Kj4obmwuZ2V0KCktPml0ZW0oMCkpOworICAgICAgICBjYXJkLT5zZXRWaXNp
YmlsaXR5KHRydWUpOworICAgIH0KKworICAgIC8vIHVwZGF0ZSB0aGUgZG9jdW1lbnQncyB0aXRs
ZQorICAgIGRvYy0+c2V0VGl0bGUoY2FyZC0+dGl0bGUoKSk7CisKKyAgICAvLyBzZXQgdGhlIGF0
aXZlIGNhcmQgaW4gdGhlIGN1cnJlbnQgYnJvd3NlciBjb250ZXh0CisgICAgV01MSGVscGVyOjpj
dXJyZW50QnJ3Q29udGV4dCgpLT5zZXRBY3RpdmVDYXJkKGNhcmQpOworCisgICAgcmV0dXJuIGNh
cmQ7Cit9CisKK3ZvaWQgV01MSGVscGVyOjpyZWdpc3RlclRlbXBsYXRlVG9DYXJkcyhEb2N1bWVu
dCogZG9jKQoreworICAgIGlmICghZG9jKQorICAgICAgICByZXR1cm47CisKKyAgICBXTUxDYXJk
RWxlbWVudCogY2FyZCA9IDA7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbGlzdCA9IGRvYy0+
Z2V0RWxlbWVudHNCeVRhZ05hbWUoInRlbXBsYXRlIik7CisgICAgV01MVGVtcGxhdGVFbGVtZW50
KiB0ZW1wbCA9IHN0YXRpY19jYXN0PFdNTFRlbXBsYXRlRWxlbWVudCo+KGxpc3QuZ2V0KCktPml0
ZW0oMCkpOworICAgIGlmICh0ZW1wbCkgeworICAgICAgICBsaXN0ID0gZG9jLT5nZXRFbGVtZW50
c0J5VGFnTmFtZSgiY2FyZCIpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpPTA7IGkgPCBs
aXN0LmdldCgpLT5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBjYXJkID0gc3RhdGljX2Nh
c3Q8V01MQ2FyZEVsZW1lbnQqPihsaXN0LmdldCgpLT5pdGVtKGkpKTsKKyAgICAgICAgICAgIGNh
cmQtPmJpbmRUZW1wbGF0ZSh0ZW1wbCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvd21sL1dNTEhlbHBlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEhl
bHBlci5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MSGVscGVyLmgJKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEhlbHBlcl9oCisjZGVmaW5lIFdN
TEhlbHBlcl9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIENTdHJpbmc7IAorY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CitjbGFzcyBXTUxC
cndDb250ZXh0OworY2xhc3MgV01MVG9rZW5pemVyOworCisvKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1dNTEhlbHBlciBj
bGFzcyx3aGljaCBvZmZlcnMgY29udmVuaWVudCBmdW5jdGlvbnMgdG8gV01MRWxlbWVudAorCisq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCitjbGFzcyBXTUxIZWxwZXIgeworCitwdWJsaWM6IAorICAgIHN0YXRpYyBib29sIGlz
VmFsaWRWYXJpYWJsZU5hbWUoY29uc3QgU3RyaW5nJiwgYm9vbCBpc1ZhclJlZiA9IGZhbHNlKTsK
KyAgICBzdGF0aWMgYm9vbCBoYXNWYXJpYWJsZVJlZihjb25zdCBTdHJpbmcmKTsKKworICAgIC8v
Tm9kZSogaXMgdGhlIHJvb3Qgb2YgRE9NIHRyZWUgd2hpY2ggd2lsbCBiZSB0cmF2ZXJzZWQgZm9y
IHNlYXJjaGluZyB2YXJpYWJsZSB2YWx1ZQorICAgIHN0YXRpYyBTdHJpbmcgc3Vic3RpdHV0ZVZh
clJlZihjb25zdCBTdHJpbmcmLCBOb2RlKiwgU3RyaW5nIGVzY2FwZSA9IFN0cmluZygpKTsgCisg
ICAgc3RhdGljIHZvaWQgY29udmVydFZhcklmTmVlZGVkKFN0cmluZyYsIFN0cmluZyYpOworCisg
ICAgc3RhdGljIFdNTENhcmRFbGVtZW50KiBzZXREZXN0aW5hdGlvbkNhcmQoUmVmUHRyPERvY3Vt
ZW50PiwgU3RyaW5nIHVyaSA9IFN0cmluZygpKTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVy
VGVtcGxhdGVUb0NhcmRzKERvY3VtZW50Kik7CisKKyAgICBzdGF0aWMgV01MQnJ3Q29udGV4dCog
Y3VycmVudEJyd0NvbnRleHQoKTsKKyAgICBzdGF0aWMgdm9pZCBzZXRDdXJyZW50QnJ3Q29udGV4
dChXTUxCcndDb250ZXh0Kik7CisKKyAgICBzdGF0aWMgV01MVG9rZW5pemVyKiB0b2tlbml6ZXIo
KTsKKyAgICBzdGF0aWMgdm9pZCBzZXRUb2tlbml6ZXIoV01MVG9rZW5pemVyKik7Citwcml2YXRl
OgorICAgIHN0YXRpYyBXTUxCcndDb250ZXh0KiBzX2Jyd0NvbnRleHQ7CisgICAgc3RhdGljIFdN
TFRva2VuaXplciogc190b2tlbml6ZXI7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJ
bmRleDogV2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dtbC9XTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwv
V01MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIgCisjaW5jbHVk
ZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVz
OworCitXTUxJbWFnZUVsZW1lbnQ6OldNTEltYWdlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiBuYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogSFRNTEltYWdlRWxlbWVudChuYW1lLCBkb2Mp
IHt9CisKK1dNTEltYWdlRWxlbWVudDo6fldNTEltYWdlRWxlbWVudCgpIHt9CisKK3ZvaWQgV01M
SW1hZ2VFbGVtZW50Ojp1cGRhdGVBdHRyc0lmTmVlZGVkKCkKK3sKKyAgICBTdHJpbmcgc3ViOwor
ICAgIFN0cmluZyBhbHQgPSBnZXRBdHRyaWJ1dGUoYWx0QXR0cik7CisgICAgaWYgKCFhbHQuaXNF
bXB0eSgpKSB7CisgICAgICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhbHQs
IGRvY3VtZW50KCkpOworICAgICAgICBpZiAoYWx0ICE9IHN1YikKKyAgICAgICAgICAgIHNldEF0
dHJpYnV0ZShhbHRBdHRyLCBzdWIpOworICAgIH0gICAKKworICAgIFN0cmluZyBzcmMgPSBnZXRB
dHRyaWJ1dGUoc3JjQXR0cik7CisgICAgaWYgKCFzcmMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1
YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihzcmMsIGRvY3VtZW50KCkpOworICAgICAg
ICBpZiAoc3JjICE9IHN1YikKKyAgICAgICAgICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCBzdWIp
OworICAgIH0KKworICAgIFN0cmluZyBsb2NhbFNyYyA9IGdldEF0dHJpYnV0ZShXTUxOYW1lczo6
bG9jYWxzcmNBdHRyKTsKKyAgICBpZiAoIWxvY2FsU3JjLmlzRW1wdHkoKSkgeworICAgICAgICAv
LyBzdG9yZSB0aGUgc3JjIGF0dHJpYnV0ZSBmb3IgdXNlIGxhdGVyCisgICAgICAgIGlmICghc3Jj
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fc3JjID0gc3ViOworCisgICAgICAgIHN1YiA9IFdN
TEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihsb2NhbFNyYywgZG9jdW1lbnQoKSk7CisgICAgICAg
IGlmICghc3ViLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsU3JjICE9IHN1YikK
KyAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmxvY2Fsc3JjQXR0ciwgc3Vi
KTsKKworICAgICAgICAgICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHN1Yik7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgV01MSW1hZ2VFbGVtZW50OjpyZWxvYWRJbWFnZUJ5U3JjQXR0cigp
Cit7CisgICAgaWYgKG1fc3JjLmlzRW1wdHkoKSkgCisgICAgICAgIHJldHVybjsKKworICAgIHNl
dEF0dHJpYnV0ZShzcmNBdHRyLCBtX3NyYyk7CisgICAgbV9zcmMgPSAiIjsKKworICAgIG1faW1h
Z2VMb2FkZXIudXBkYXRlRnJvbUVsZW1lbnQoKTsKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDog
V2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxJbWFnZUVs
ZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MSW1h
Z2VFbGVtZW50X2gKKyNkZWZpbmUgV01MSW1hZ2VFbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxJ
bWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFdNTEltYWdlRWxlbWVudCA6IHB1YmxpYyBIVE1MSW1hZ2VFbGVtZW50IHsK
K3B1YmxpYzoKKyAgICBXTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3Vt
ZW50Kik7CisgICAgdmlydHVhbCB+V01MSW1hZ2VFbGVtZW50KCk7CisKKyAgICB2b2lkIHVwZGF0
ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICB2b2lkIHJlbG9hZEltYWdlQnlTcmNBdHRyKCk7CisKK3By
aXZhdGU6CisgICAgU3RyaW5nIG1fc3JjOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dt
bC9XTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxNCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2lu
Y2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJUZXh0
RXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24u
aCIKKyNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisj
aW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJ3dGYvQVNDSUlDVHlwZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOwordXNpbmcgc3RkOjptaW47CisKK1dNTElucHV0RWxlbWVudDo6V01M
SW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgRG9jdW1lbnQqIGRvYywgSFRN
TEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRNTElucHV0RWxlbWVudCh0YWcsIGRvYywgZm9y
bSkKKyAgICAsIG1fZW1wdHlPayhmYWxzZSkKKyAgICAsIG1fbWFza0FsbG93c0lucHV0Q2hhck51
bXMoMCkKK3sKK30KKworV01MSW5wdXRFbGVtZW50Ojp+V01MSW5wdXRFbGVtZW50KCkgCit7Cit9
CisKK3ZvaWQgV01MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqIGF0dHIpIAoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybWF0QXR0cikgewor
CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7
CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlk
VmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX2Zvcm1hdCA9IHZhbGlkYXRlSW5wdXRNYXNrKGF0dHItPnZhbHVlKCkpOwor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGVtcHR5b2tBdHRyKSB7CisgICAgICAgIG1f
ZW1wdHlPayA9ICgoYXR0ci0+dmFsdWUoKSA9PSAidHJ1ZSIpID8gdHJ1ZSA6IGZhbHNlKTsKKyAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgeworCisgICAgICAgIGlmIChX
TUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAgICAgICAgICAgV01M
SGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNl
RXJyb3IpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgCisgICAgfSBlbHNlIHsKKyAgICAgICAgSFRNTElu
cHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgICAgfQorfQorCisKK1N0
cmluZyBXTUxJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW5wdXRNYXNrKQoreworICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZm9ybWF0Q29kZXMgPSAi
QWFOblh4TW0iOworICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2Fy
ZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGVzY2FwZUNoYXJDbnRzID0gMDsKKworICAgIHVuc2ln
bmVkIG1hc2tMZW4gPSBpbnB1dE1hc2subGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaWR4OworICAg
IFVDaGFyIGM7IAorCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXNrTGVuOyArK2lkeCkgewor
ICAgICAgICBjID0gaW5wdXRNYXNrW2lkeF07CisKKyAgICAgICAgCisgICAgICAgIGlmIChmb3Jt
YXRDb2Rlcy5maW5kKGMpID09IC0xKSB7CisKKyAgICAgICAgICAgIGlmICgoYyA9PSAnKicpIHx8
IChXVEY6OmlzQVNDSUlEaWdpdChjKSAmJiAoYyAhPSAnMCcpKSkgeyAKKyAgICAgICAgICAgICAg
ICAvLyB2YWxpZGF0ZSBjb2RlcyB3aGljaCBlbmRzIHdpdGggJypmJyBvciAnbmYnCisgICAgICAg
ICAgICAgICAgYyA9IGlucHV0TWFza1srK2lkeF07CisgICAgICAgICAgICAgICAgaWYgKChpZHgr
MSAhPSBtYXNrTGVuKSB8fCBmb3JtYXRDb2Rlcy5maW5kKGMpID09IC0xKSB7CisgICAgICAgICAg
ICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGhhc1dpbGRjYXJkID0gdHJ1ZTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgLy9za2lw
IG92ZXIgdGhlIG5leHQgbWFzayBjaGFyYWN0ZXIKKyAgICAgICAgICAgICAgICBpZHgrKzsgICAK
KyAgICAgICAgICAgICAgICBlc2NhcGVDaGFyQ250cysrOworICAgICAgICAgICAgfSBlbHNlIHsK
KyAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGNhbGN1bGF0ZSB0
aGUgbnVtYmVyIG9mIGNoYXIgYWxsb3dlZCB0byBlbnRlciBieSBpbnB1dCBtYXNrIHN0cmluZwor
ICAgIGlmIChpc1ZhbGlkKSB7CisgICAgICAgIG1fbWFza0FsbG93c0lucHV0Q2hhck51bXMgPSBt
YXNrTGVuOworCisgICAgICAgIGlmIChlc2NhcGVDaGFyQ250cykKKyAgICAgICAgICAgIG1fbWFz
a0FsbG93c0lucHV0Q2hhck51bXMgLT0gZXNjYXBlQ2hhckNudHM7CisKKyAgICAgICAgaWYgKGhh
c1dpbGRjYXJkICYmIGlucHV0TWFza1ttYXNrTGVuLTJdID09ICcqJykKKyAgICAgICAgICAgIG1f
bWFza0FsbG93c0lucHV0Q2hhck51bXMgPSBtYXhMZW5ndGgoKTsKKyAgICAgICAgZWxzZSBpZiAo
aGFzV2lsZGNhcmQpIHsKKyAgICAgICAgICAgIGMgPSBpbnB1dE1hc2tbbWFza0xlbi0yXTsKKyAg
ICAgICAgICAgIHVuc2lnbmVkIGxlZnRMZW4gPSBTdHJpbmcoJmMpLnRvSW50KCk7CisgICAgICAg
ICAgICBtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1zID0gbGVmdExlbiArIG1fbWFza0FsbG93c0lu
cHV0Q2hhck51bXMgLSAyOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIGlucHV0TWFzazsK
KyAgICB9CisgCisgICAgcmV0dXJuIFN0cmluZygpOworfQorCit1bnNpZ25lZCBXTUxJbnB1dEVs
ZW1lbnQ6OmN1cnNvclBvc1RvSWR4T2ZNYXNrKHVuc2lnbmVkIGN1cnNvclBvcykKK3sKKyAgICBV
Q2hhciBtYXNrOworICAgIGludCBpZHggPSAtMTsKKyAgICBjdXJzb3JQb3MrKzsKKyAgICB3aGls
ZSAoY3Vyc29yUG9zLS0pIHsKKyAgICAgICAgbWFzayA9IG1fZm9ybWF0WysraWR4XTsKKyAgICAg
ICAgaWYgKG1hc2sgPT0gJ1xcJykgeworICAgICAgICAgICAgaWR4Kys7CisgICAgICAgIH0KKyAg
ICAgICAgZWxzZSBpZiAoKG1hc2sgPT0gJyonKSB8fCAoV1RGOjppc0FTQ0lJRGlnaXQobWFzaykg
JiYgKG1hc2sgIT0gJzAnKSkpIHsKKyAgICAgICAgICAgIGlkeCA9IG1fZm9ybWF0Lmxlbmd0aCgp
IC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IAorICAgIH0KKworICAgIHJldHVy
biBpZHg7Cit9CisKK2Jvb2wgV01MSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1lZFRvSW5wdXRNYXNr
KFN0cmluZyYgaW5wdXQpCit7CisgICAgYm9vbCBiUGFzcyA9IHRydWU7CisgICAgVUNoYXIgaW5D
aGFyOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgaW5wdXQubGVuZ3RoKCk7ICsr
aSkgeworICAgICAgICBpbkNoYXIgPSBpbnB1dFtpXTsKKworICAgICAgICBiUGFzcyA9IGlzQ29u
Zm9ybWVkVG9JbnB1dE1hc2soaW5DaGFyLCBpKzEsIGZhbHNlKTsKKyAgICAgICAgaWYgKCFiUGFz
cykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBiUGFzczsKK30KKwor
Ym9vbCBXTUxJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybWVkVG9JbnB1dE1hc2soVUNoYXIgaW5DaGFy
LCB1bnNpZ25lZCBpbnB1dENoYXJOdW0sIGJvb2wgaXNJbnB1dGVkQnlVc3IpCit7CisgICAgYm9v
bCBiUGFzcyA9IHRydWU7CisgICAgaWYgKG1fZm9ybWF0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGJQYXNzOworICAgIAorICAgIC8vIHdlIHNob3VsZCBsaW1pdCB0aGUgbnVtYmVyIG9mIGlu
cHV0ZWQgY2hhcmF0ZXJzIGFjY29yZGluZyB0byB0aGUgZm9ybWF0IGFuZCBtYXhsZW5ndGggYXR0
cmlidXRlCisgICAgdW5zaWduZWQgbWF4QWxsb3dJbnB1dE51bSA9IG1pbihtX21hc2tBbGxvd3NJ
bnB1dENoYXJOdW1zLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obWF4TGVuZ3RoKCkpKTsKKworICAg
IGlmIChpbnB1dENoYXJOdW0gPD0gbWF4QWxsb3dJbnB1dE51bSkgeworICAgICAgICB1bnNpZ25l
ZCBpZHhPZk1hc2sgPSAwOworICAgICAgICBpZiAoaXNJbnB1dGVkQnlVc3IpIHsKKyAgICAgICAg
ICAgIGlkeE9mTWFzayA9IGN1cnNvclBvc1RvSWR4T2ZNYXNrKHNlbGVjdGlvblN0YXJ0KCkpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWR4T2ZNYXNrID0gY3Vyc29yUG9zVG9JZHhP
Zk1hc2soaW5wdXRDaGFyTnVtIC0gMSk7CisgICAgICAgIH0KKworICAgICAgICBVQ2hhciBtYXNr
ID0gbV9mb3JtYXRbaWR4T2ZNYXNrXTsKKworICAgICAgICAvLyBtYXRjaCB0aGUgY2hhciBpbnB1
dHRlZCB3aXRoIGlucHV0IG1hc2sKKyAgICAgICAgaWYgKG1hc2sgPT0gJ0EnKSB7CisgICAgICAg
ICAgICBiUGFzcyA9ICFXVEY6OmlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFXVEY6OmlzQVNDSUlM
b3dlcihpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICB9
IGVsc2UgaWYgKG1hc2sgPT0gJ2EnKSB7CisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6OmlzQVND
SUlEaWdpdChpbkNoYXIpICYmICFXVEY6OmlzQVNDSUlVcHBlcihpbkNoYXIpICYmIFdURjo6aXNB
U0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICB9IGVsc2UgaWYgKG1hc2sgPT0gJ04nKSB7
CisgICAgICAgICAgICBiUGFzcyA9IFdURjo6aXNBU0NJSURpZ2l0KGluQ2hhcik7CisgICAgICAg
IH0gZWxzZSBpZiAobWFzayA9PSAnbicpIHsKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNB
U0NJSUFscGhhKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAg
ICAgIH0gZWxzZSBpZiAobWFzayA9PSAnWCcpIHsKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6
aXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Cisg
ICAgICAgIH0gZWxzZSBpZiAobWFzayA9PSAneCcpIHsKKyAgICAgICAgICAgIGJQYXNzID0gIVdU
Rjo6aXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7
CisgICAgICAgIH0gZWxzZSBpZiAobWFzayA9PSAnTScpIHsKKyAgICAgICAgICAgIGJQYXNzID0g
V1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIH0gZWxzZSBpZiAobWFzayA9
PSAnbScpIHsKKyAgICAgICAgICAgIGJQYXNzID0gV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hh
cik7CisgICAgICAgIH0gZWxzZSB7IAorICAgICAgICAgICAgYlBhc3MgPSAobWFzayA9PSBpbkNo
YXIpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgeyAgLy8gaW5wdXRDaGFyTnVtID4gbWF4QWxs
b3dJbnB1dE51bQorICAgICAgICBiUGFzcyA9IGZhbHNlOworICAgIH0KKworICAgIHJldHVybiBi
UGFzczsKK30KKworCit2b2lkIFdNTElucHV0RWxlbWVudDo6aW5pdCgpCit7CisgICAgU3RyaW5n
IG5hbWVWYXIgPSBuYW1lKCk7CisgICAgU3RyaW5nIHZhbCA9IHZhbHVlKCk7CisgICAgU3RyaW5n
IHZhclZhbHVlOworICAgIGlmICghbmFtZVZhci5pc0VtcHR5KCkpIHsKKyAgICAgICAgdmFyVmFs
dWUgPSBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPmdldFZhcmliYWxlKG5hbWVWYXIp
OworICAgIH0KKyAgICAKKyAgICBpZiAodmFyVmFsdWUuaXNFbXB0eSgpIHx8ICFpc0NvbmZvcm1l
ZFRvSW5wdXRNYXNrKHZhclZhbHVlKSkgeworICAgICAgICBpZiAoaXNDb25mb3JtZWRUb0lucHV0
TWFzayh2YWwpKQorICAgICAgICAgICAgdmFyVmFsdWUgPSB2YWw7CisgICAgICAgIGVsc2UgCisg
ICAgICAgICAgICB2YXJWYWx1ZSA9ICIiOworCisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJy
d0NvbnRleHQoKS0+c3RvcmVWYXJpYWJsZShuYW1lVmFyLCB2YXJWYWx1ZSk7CisgICAgfQorCisg
ICAgc2V0VmFsdWUodmFyVmFsdWUpOworCisKKyAgICBpZiAoZ2V0QXR0cmlidXRlKGVtcHR5b2tB
dHRyKS5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fZm9ybWF0LmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIG1fZW1wdHlPayA9IHRydWU7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy9j
aGVjayBpZiB0aGUgZm9ybWF0IGNvZGVzIGlzIGEgIipmIiBjb2RlCisgICAgICAgICAgICBTdHJp
bmcgZm9ybWF0Q29kZXMgPSAiTW1BYVh4Tm4iOworICAgICAgICAgICAgaWYgKChtX2Zvcm1hdC5s
ZW5ndGgoKSA9PSAyKSAmJiAKKyAgICAgICAgICAgICAgIChtX2Zvcm1hdFswXSA9PSAnKicpICYm
IAorICAgICAgICAgICAgICAgKGZvcm1hdENvZGVzLmZpbmQobV9mb3JtYXRbMV0pICE9IC0xKSkK
KyAgICAgICAgICAgICAgICBtX2VtcHR5T2sgPSB0cnVlOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIFdNTElucHV0RWxlbWVudDo6dXBkYXRlQXR0cnNJZk5lZWRlZCgpCit7CisgICAgU3Ry
aW5nIHZhbHVlID0gZ2V0QXR0cmlidXRlKHZhbHVlQXR0cik7IAorICAgIFN0cmluZyBzdWIgPSBX
TUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodmFsdWUsIGRvY3VtZW50KCkpOworICAgIGlmICh2
YWx1ZSAhPSBzdWIpIHsKKyAgICAgICAgc2V0VmFsdWUoc3ViKTsKKyAgICB9CisKKyAgICBTdHJp
bmcgdGl0bGUgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6
OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUsIGRvY3VtZW50KCkpOworICAgIGlmICh0aXRsZSAhPSBz
dWIpIHsKKyAgICAgICAgc2V0QXR0cmlidXRlKHRpdGxlQXR0ciwgdGl0bGUpOworICAgIH0KK30K
Kwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKK3sKKyAgICAvLyB1
cGRhdGUgdGhlIG5hbWVkIHZhcmlhYmxlIG9mIGlucHV0IGVsZW1lbnQgCisgICAgU3RyaW5nIG5h
bWVWYXIgPSBuYW1lKCk7CisgICAgaWYgKCFuYW1lVmFyLmlzRW1wdHkoKSkgeworICAgICAgICBT
dHJpbmcgaW5wdXQgPSB0ZXh0KCk7CisgICAgICAgIGlmIChtX2VtcHR5T2sgfHwgIWlucHV0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5z
dG9yZVZhcmlhYmxlKG5hbWVWYXIsIGlucHV0KTsKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1l
bnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBm
b2N1cygpOyAKKyAgICAgICAgfQorICAgIH0KKworfQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQoreworICAgIGlmIChpc1RleHRGaWVsZCgp
ICYmIGV2dC0+dHlwZSgpID09IHRleHRJbnB1dEV2ZW50ICYmIGV2dC0+aXNUZXh0RXZlbnQoKSkg
eworICAgICAgICBTdHJpbmcgZGF0YSA9IHN0YXRpY19jYXN0PFRleHRFdmVudCo+KGV2dCktPmRh
dGEoKTsKKyAgICAgICAgUmVuZGVyVGV4dENvbnRyb2wgKnJ0ID0gc3RhdGljX2Nhc3Q8UmVuZGVy
VGV4dENvbnRyb2wqPihyZW5kZXJlcigpKTsKKyAgICAgICAgaWYgKHJ0KSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBpbnB1dENoYXJOdW0gPSBydC0+dGV4dCgpLmxlbmd0aCgpICsgMTsKKyAgICAg
ICAgICAgIGlmICghaXNDb25mb3JtZWRUb0lucHV0TWFzayhkYXRhWzBdLCBpbnB1dENoYXJOdW0p
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgfQorCisgICAgSFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworfQorCitTdHJpbmcgV01M
SW5wdXRFbGVtZW50Ojp0ZXh0KCkgY29uc3QKK3sKKyAgICBSZW5kZXJUZXh0Q29udHJvbCAqIHJ0
ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKTsKKyAgICByZXR1
cm4gKChydCAhPSAwKSA/IHJ0LT50ZXh0KCkgOiBTdHJpbmcoKSk7Cit9CisKK30KSW5kZXg6IFdl
YkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dN
TElucHV0RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MSW5wdXRFbGVt
ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTElucHV0
RWxlbWVudF9oCisjZGVmaW5lIFdNTElucHV0RWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MSW5w
dXRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgSFRNTEZvcm1FbGVt
ZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTElucHV0RWxlbWVudCA6IHB1
YmxpYyBIVE1MSW5wdXRFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxJbnB1dEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworICAg
IHZpcnR1YWwgfldNTElucHV0RWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aEJsdXJFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
Kik7CisKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsK
KyAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soU3RyaW5nJik7CisgICAgYm9vbCBpc0Nv
bmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25lZCwgYm9vbCBpc0lucHV0ZWRCeVVzciA9
IHRydWUpOworICAgIFN0cmluZyB0ZXh0KCkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgU3RyaW5n
IHZhbGlkYXRlSW5wdXRNYXNrKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHVuc2lnbmVkIGN1
cnNvclBvc1RvSWR4T2ZNYXNrKHVuc2lnbmVkKTsKKworICAgIFN0cmluZyBtX2Zvcm1hdDsKKyAg
ICBib29sIG1fZW1wdHlPazsKKyAgICB1bnNpZ25lZCBtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1z
OworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTElu
dHJpbnNpY0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTElu
dHJpbnNpY0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5kbGVy
LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgor
I2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MSW50cmlu
c2ljRXZlbnRIYW5kbGVyOjpXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKSAKK3sKK30KKyAgICAK
K1dNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6fldNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpCit7
Cit9CisKK3ZvaWQgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyOjpyZWdpc3RlckludHJpbnNpY0V2
ZW50KFdNTEludHJFdmVudFR5cGUgdHlwZSwgY29uc3QgV01MSW50cmluc2ljRXZlbnQmIGV2KQor
eworICAgIGlmIChtX2V2ZW50cy5jb250YWlucyh0eXBlKSkgeworICAgICAgICBXTUxIZWxwZXI6
OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihDb25mbGljdGluZ0V2ZW50QmluZGluZ0Vycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2V2ZW50cy5zZXQodHlwZSwgZXYpOworfQor
Cit2b2lkIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6dHJpZ2dlckludHJpbnNpY0V2ZW50KFdN
TEludHJFdmVudFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBXTUxJbnRyaW5zaWNFdmVudCBldiA9
IG1fZXZlbnRzLmdldCh0eXBlKTsKKyAgICBpZiAoZXYudGFzaykKKyAgICAgICAgZXYudGFzay0+
ZXhlYygwLCBldi50YXJnZXRVUkkpOworfQorCitib29sIFdNTEludHJpbnNpY0V2ZW50SGFuZGxl
cjo6aGFzSW50cmluc2ljRXZlbnQoV01MSW50ckV2ZW50VHlwZSB0eXBlKSBjb25zdAoreworICAg
IHJldHVybiBtX2V2ZW50cy5jb250YWlucyh0eXBlKTsKK30KKworfQpJbmRleDogV2ViQ29yZS93
bWwvV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9X
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpZm5kZWYgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyX2gKKyNkZWZpbmUgV01MSW50cmlu
c2ljRXZlbnRIYW5kbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSAi
U3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVt
ZW50OworCitlbnVtIFdNTEludHJFdmVudFR5cGUgeworICAgIFVua25vd24gPSAwLCBPbkVudGVy
Rm9yd2FyZCwgT25FbnRlckJhY2t3YXJkLCBPblRpbWVyLCBPblBpY2sgCit9OworCit0eXBlZGVm
IHN0cnVjdCBXTUxJbnRyaW5zaWNFdmVudCB7CisgICAgV01MVGFza0VsZW1lbnQqIHRhc2s7Cisg
ICAgU3RyaW5nIHRhcmdldFVSSTsKK30gV01MSW50cmluc2ljRXZlbnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgIAordHlwZWRlZiBIYXNoTWFwPGludCwgV01MSW50cmluc2ljRXZlbnQ+IEludHJp
bnNpY0V2bnRNYXA7CisKK2NsYXNzIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciB7CitwdWJsaWM6
CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisgICAgdmlydHVhbCB+V01MSW50cmlu
c2ljRXZlbnRIYW5kbGVyKCk7CisKKyAgICAvLyBoYW5kbGluZyBXTUwgaW50cmluc2ljIGV2ZW50
CisgICAgdm9pZCByZWdpc3RlckludHJpbnNpY0V2ZW50KFdNTEludHJFdmVudFR5cGUsIGNvbnN0
IFdNTEludHJpbnNpY0V2ZW50Jik7CisgICAgdm9pZCB0cmlnZ2VySW50cmluc2ljRXZlbnQoV01M
SW50ckV2ZW50VHlwZSkgY29uc3Q7CisgICAgYm9vbCBoYXNJbnRyaW5zaWNFdmVudChXTUxJbnRy
RXZlbnRUeXBlKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBJbnRyaW5zaWNFdm50TWFwIG1fZXZl
bnRzOworICAgCit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93
bWwvV01MT3B0aW9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MT3B0
aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVt
ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV01MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1
ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRl
ICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxPcHRp
b25FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdN
TE5hbWVzOworCitXTUxPcHRpb25FbGVtZW50OjpXTUxPcHRpb25FbGVtZW50KERvY3VtZW50KiBk
b2MpCisgICAgOiBIVE1MT3B0aW9uRWxlbWVudChkb2MsIDApCisgICAgLCBtX2V2bnRIYW5kbGVy
KDApCisgICAgLCBtX2hhc0ludHJFdmVudChmYWxzZSkKK3sKK30KKworV01MT3B0aW9uRWxlbWVu
dDo6fldNTE9wdGlvbkVsZW1lbnQoKSAKK3sKKyAgICBpZiAobV9ldm50SGFuZGxlcikgeworICAg
ICAgICBkZWxldGUgbV9ldm50SGFuZGxlcjsKKyAgICAgICAgbV9ldm50SGFuZGxlciA9IDA7Cisg
ICAgfQorfQorCit2b2lkIFdNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG9ucGlja0F0
dHIpIHsKKyAgICAgICAgCisgICAgICAgIFdNTEludHJFdmVudFR5cGUgZXR5cGUgPSBPblBpY2s7
IAorICAgICAgICBpZiAoIW1fZXZudEhhbmRsZXIpIHsKKyAgICAgICAgICAgIG1fZXZudEhhbmRs
ZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisgICAgICAgIH0KKyAKKyAgICAg
ICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFF1YWxpZmllZE5hbWUgcU5hbWUoImdv
IiwgImdvIiwgIiIpOworICAgICAgICBFbGVtZW50KiBnbyA9IFdNTEVsZW1lbnRGYWN0b3J5Ojpj
cmVhdGVXTUxFbGVtZW50KHFOYW1lLCBkb2N1bWVudCgpLCBmYWxzZSk7CisgICAgICAgIFN0cmlu
ZyBocmVmID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3Vt
ZW50KCksICJlc2NhcGUiKTsKKyAgICAgICAgZ28tPnNldEF0dHJpYnV0ZU5TKCIiLCAiaHJlZiIs
IGhyZWYsIGVjKTsKKyAKKyAgICAgICAgV01MSW50cmluc2ljRXZlbnQgZXY7CisgICAgICAgIGV2
LnRhc2sgPSBzdGF0aWNfY2FzdDxXTUxHb0VsZW1lbnQqPihnbyk7CisgICAgICAgIGV2LnRhcmdl
dFVSSSA9IGhyZWY7CisgCisgICAgICAgIG1faGFzSW50ckV2ZW50ID0gdHJ1ZTsKKyAgICAgICAg
bV9ldm50SGFuZGxlci0+cmVnaXN0ZXJJbnRyaW5zaWNFdmVudChldHlwZSwgZXYpOworCisgICAg
fSBlbHNlIHsKKyAgICAgICAgSFRNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpOworICAgIH0KK30KKworV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBXTUxPcHRpb25F
bGVtZW50OjpldmVudEhhbmRsZXIoKSB7CisgICAgaWYgKG1faGFzSW50ckV2ZW50ICYmICFtX2V2
bnRIYW5kbGVyKSAgeworICAgICAgICBtX2V2bnRIYW5kbGVyID0gbmV3IFdNTEludHJpbnNpY0V2
ZW50SGFuZGxlcigpOworICAgIH0KKyAgICByZXR1cm4gbV9ldm50SGFuZGxlcjsKK30KKwordm9p
ZCBXTUxPcHRpb25FbGVtZW50OjpzZXRIYXNJbnRyRXZlbnQoYm9vbCBoYXMpIHsKKyAgICBtX2hh
c0ludHJFdmVudCA9IGhhczsKK30KKyAKK2Jvb2wgV01MT3B0aW9uRWxlbWVudDo6aGFzSW50ckV2
ZW50KCkgeworICAgIHJldHVybiBtX2hhc0ludHJFdmVudDsKK30KKwordm9pZCBXTUxPcHRpb25F
bGVtZW50OjpoYW5kbGVJbnRyRXZlbnRJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fZXZudEhhbmRs
ZXIgJiYgbV9ldm50SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQoT25QaWNrKSkKKyAgICAgICAg
bV9ldm50SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2ZW50KE9uUGljayk7Cit9CisKK3ZvaWQg
V01MT3B0aW9uRWxlbWVudDo6dXBkYXRlQXR0cnNJZk5lZWRlZCgpIAoreworICAgIFN0cmluZyB2
YWx1ZSA9IGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpOworICAgIFN0cmluZyBzdWIgPSBXTUxIZWxw
ZXI6OnN1YnN0aXR1dGVWYXJSZWYodmFsdWUsIGRvY3VtZW50KCkpOworICAgIGlmICh2YWx1ZSAh
PSBzdWIpCisgICAgICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHN1Yik7CisKKyAgICBTdHJp
bmcgdGl0bGUgPSBnZXRBdHRyaWJ1dGUodGl0bGVBdHRyKTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6
OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUsIGRvY3VtZW50KCkpOworCisgICAgaWYgKHRpdGxlICE9
IHN1YikKKyAgICAgICAgc2V0QXR0cmlidXRlKHRpdGxlQXR0ciwgdGl0bGUpOworfQorCit2b2lk
IFdNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUoYm9vbCBzZWxlY3RlZCkKK3sKKyAg
ICBpZiAobV9zZWxlY3RlZCA9PSBzZWxlY3RlZCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV01M
U2VsZWN0RWxlbWVudCogc2VsID0gZ2V0U2VsZWN0KCk7CisgICAgaWYgKCFzZWwpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fc2VsZWN0ZWQgPSBzZWxlY3RlZDsKKyAgICBpZiAoc2VsLT5tdWx0
aXBsZSgpICYmIG1faGFzSW50ckV2ZW50KSB7CisgICAgICAgIGhhbmRsZUludHJFdmVudElmTmVl
ZGVkKCk7CisgICAgfSBlbHNlIGlmIChtX2hhc0ludHJFdmVudCAmJiBtX3NlbGVjdGVkKSB7Cisg
ICAgICAgIGhhbmRsZUludHJFdmVudElmTmVlZGVkKCk7CisgICAgfQorCisgICAgc2V0Q2hhbmdl
ZCgpOworfQorCitXTUxTZWxlY3RFbGVtZW50KiBXTUxPcHRpb25FbGVtZW50OjpnZXRTZWxlY3Qo
KSBjb25zdAoreworICAgIE5vZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKKyAgICB3aGlsZSAo
c2VsZWN0ICYmICFzZWxlY3QtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICAgICAgc2VsZWN0
ID0gc2VsZWN0LT5wYXJlbnROb2RlKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V01MU2Vs
ZWN0RWxlbWVudCo+KHNlbGVjdCk7Cit9CisKK30gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUv
d21sL1dNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxPcHRp
b25FbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50
LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAg
ICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTE9wdGlvbkVs
ZW1lbnRfaAorI2RlZmluZSBXTUxPcHRpb25FbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxPcHRp
b25FbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXI7CitjbGFzcyBXTUxTZWxlY3RFbGVt
ZW50OworCitjbGFzcyBXTUxPcHRpb25FbGVtZW50IDogcHVibGljIEhUTUxPcHRpb25FbGVtZW50
eworcHVibGljOgorICAgIFdNTE9wdGlvbkVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFs
IH5XTUxPcHRpb25FbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wp
OworICAgIFdNTFNlbGVjdEVsZW1lbnQqIGdldFNlbGVjdCgpIGNvbnN0OworCisgICAgV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIoKTsKKyAgICBib29sIGhhc0ludHJFdmVu
dCgpOworICAgIHZvaWQgc2V0SGFzSW50ckV2ZW50KGJvb2wpOworICAgIHZvaWQgaGFuZGxlSW50
ckV2ZW50SWZOZWVkZWQoKTsKKworICAgIHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZCgpOyAKK3By
aXZhdGU6CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBtX2V2bnRIYW5kbGVyOworICAg
IGJvb2wgbV9oYXNJbnRyRXZlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvd21sL1dNTFBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxQRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxQRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV01MUEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgi
CisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MUEVsZW1lbnQ6
OldNTFBFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MUGFyYWdyYXBoRWxlbWVudChk
b2MpIAoreworfQorCitXTUxQRWxlbWVudDo6fldNTFBFbGVtZW50KCkge30KKwordm9pZCBXTUxQ
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQorewor
ICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbW9kZUF0dHIpIHsKKyAgICAgICAgbV9tb2RlID0gIGF0
dHItPnZhbHVlKCk7CisgICAgICAgIGlmIChtX21vZGUgPT0gIndyYXAiKQorICAgICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXb3JkV3JhcCwgQ1NTVmFsdWVCcmVha1dv
cmQpOworICAgICAgICBlbHNlIGlmIChtX21vZGUgPT0gIm5vd3JhcCIpCisgICAgICAgICAgICBh
ZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlTm93cmFw
KTsKKyAgICB9IGVsc2UKKyAgICAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKGF0dHIpOworfQorCit2b2lkIFdNTFBFbGVtZW50Ojp1cGRhdGVBdHRyc0lmTmVl
ZGVkKCkKK3sKKyAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQsIHRoZSBsaW5ld3Jh
cCBtb2RlIGlzIGlkZW50aWNhbCB0byAKKyAgICAvLyB0aGUgbGluZS13cmFwIG1vZGUgb2YgdGhl
IHByZXZpb3VzIHBhcmFncmFwaCBpbiB0aGUgdGV4dCBmbG93IG9mCisgICAgLy8gYSBjYXJkLlRo
ZSBkZWZhdWx0IG1vZGUgZm9yIHRoZSBmaXJzdCBwYXJhZ3JhcGggaW4gYSBjYXJkIGlzIHdyYXAK
KyAgICBpZiAobV9tb2RlLmlzRW1wdHkoKSkgeworICAgICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0
PiBubCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIik7CisgICAgICAgIGlu
dCBuTGVuID0gbmwuZ2V0KCktPmxlbmd0aCgpOworICAgICAgICBpZiAobkxlbiA9PSAwKQorICAg
ICAgICAgICAgc2V0QXR0cmlidXRlKG1vZGVBdHRyLCAid3JhcCIpOworICAgICAgICBlbHNlIGlm
IChuTGVuID4gMCkgeworICAgICAgICAgICAgV01MUEVsZW1lbnQqIHBFbCA9IHN0YXRpY19jYXN0
PFdNTFBFbGVtZW50Kj4obmwuZ2V0KCktPml0ZW0obkxlbi0xKSk7CisgICAgICAgICAgICBTdHJp
bmcgcHJlTW9kZSA9IHBFbC0+Z2V0QXR0cmlidXRlKG1vZGVBdHRyKTsKKyAgICAgICAgICAgIHNl
dEF0dHJpYnV0ZShtb2RlQXR0ciwgcHJlTW9kZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK30g
Ly9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFBFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS93bWwvV01MUEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21s
L1dNTFBFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKyNpZm5kZWYgV01M
UEVsZW1lbnRfaAorI2RlZmluZSBXTUxQRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MUGFyYWdy
YXBoRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50Owor
Y2xhc3MgV01MUEVsZW1lbnQgOiBwdWJsaWMgSFRNTFBhcmFncmFwaEVsZW1lbnR7CitwdWJsaWM6
CisgICAgV01MUEVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxQRWxlbWVudCgp
OworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOworICAgIHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZCgpOworCitwcml2YXRlOgorICAgIFN0
cmluZyBtX21vZGU7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNv
cmUvd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTFBvc3RmaWVsZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01M
UG9zdGZpZWxkRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
TmFtZU5vZGVMaXN0LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorCisjaW5jbHVkZSAiQ1NTSGVs
cGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFBvc3RmaWVsZEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKKworV01MUG9zdGZpZWxkRWxlbWVudDo6V01MUG9zdGZpZWxk
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKQorIDogV01M
RWxlbWVudChuYW1lLCBkb2MpIHt9CisKK1dNTFBvc3RmaWVsZEVsZW1lbnQ6On5XTUxQb3N0Zmll
bGRFbGVtZW50KCkge30KKwordm9pZCBXTUxQb3N0ZmllbGRFbGVtZW50OjppbnNlcnRlZEludG9U
cmVlKGJvb2wgZGVlcCkKK3sKKyAgICBXTUxHb0VsZW1lbnQqIGdvID0gMDsKKyAgICBOb2RlKiBh
bmNlc3RvciA9IHBhcmVudE5vZGUoKSA7CisgICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKFdN
TE5hbWVzOjpnb1RhZykpIHsKKyAgICAgICAgZ28gPSBzdGF0aWNfY2FzdDxXTUxHb0VsZW1lbnQq
PihhbmNlc3Rvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuOyAgICAgLy8gdGhlIGFu
Y2VzdG9yIG9mIDxwb3N0ZmllbGQ+IGdvdCB0byBiZSA8Z28+CisgICAgfQorICAgIGlmIChnbykg
eworICAgICAgICBnby0+cmVnaXN0ZXJQb3N0ZmllbGRFbGVtZW50KHRoaXMpOworICAgIH0KK30K
KworU3RyaW5nIFdNTFBvc3RmaWVsZEVsZW1lbnQ6Om5hbWUoKSAKK3sKKyAgICByZXR1cm4gV01M
SGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGdldEF0dHJpYnV0ZShuYW1lQXR0ciksIGRvY3VtZW50
KCkpOworfQorCitTdHJpbmcgV01MUG9zdGZpZWxkRWxlbWVudDo6dmFsdWUoKSAKK3sKKyAgICBy
ZXR1cm4gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIp
LCBkb2N1bWVudCgpKTsKK30gICAgCisKK30KKwpJbmRleDogV2ViQ29yZS93bWwvV01MUG9zdGZp
ZWxkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFBvc3RmaWVsZEVsZW1l
bnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MUG9zdGZpZWxkRWxl
bWVudF9oCisjZGVmaW5lIFdNTFBvc3RmaWVsZEVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFBvc3RmaWVsZEVsZW1l
bnQgOiBwdWJsaWMgIFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MUG9zdGZpZWxkRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKTsKKyAgICB+V01MUG9z
dGZpZWxkRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9v
bCBkZWVwKTsgICAgLy8gbmVlZCB0byByZWdpc3RlciBteXNlbGYgdG8gcGFyZW50cyBoZXJlLCBs
aWtlIDxnbz4sIDxvbmV2ZW50PgorCisgICAgU3RyaW5nIG5hbWUoKTsgICAgLy8gZXZlcnkgcG9z
dGZpZWxkIHRhZyBtdXN0IGhhdmUgYSBuYW1lIGF0dHJpYnV0ZSBhbmQgYSB2YWxpZCBhdHRyaWJ1
dGUKKyAgICBTdHJpbmcgdmFsdWUoKTsKKworfTsKKworfQorI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3dtbC9XTUxQcmV2RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MUHJl
dkVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUHJldkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5o
IgorCisjaW5jbHVkZSAiV01MUHJldkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIK
KyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxQ
cmV2RWxlbWVudDo6V01MUHJldkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYykKKyAgOiBXTUxUYXNrRWxlbWVudCggdGFnTmFtZSwgZG9jKSB7fQorCitX
TUxQcmV2RWxlbWVudDo6V01MUHJldkVsZW1lbnQoRG9jdW1lbnQqIGRvYykKKyAgOiBXTUxUYXNr
RWxlbWVudCggV01MTmFtZXM6OnByZXZUYWcsIGRvYykge30KKworV01MUHJldkVsZW1lbnQ6On5X
TUxQcmV2RWxlbWVudCgpIHt9CisgICAgICAgICAgICAgICAgICAgICAgIAordm9pZCAgV01MUHJl
dkVsZW1lbnQ6OmV4ZWMoRXZlbnQqIGV2dCwgU3RyaW5nIHVyaSkKK3sKKyAgICAvLyBjb252ZXJ0
IHZhcmlhYmxlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2V0dmFyIGVsZW1lbnQgaWYgbmVjZXNzYXJ5
CisgICAgVmFyaWFibGVNYXAgbV92YXJzOworICAgIGlmIChoYXNTZXR2YXIoKSkgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fc2V0dmFycy5zaXplKCk7ICsraSkgewor
ICAgICAgICAgICAgaWYgKCFtX3NldHZhcnNbaV0tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAg
ICAgICAgICAgbV92YXJzLnNldChtX3NldHZhcnNbaV0tPm5hbWUoKSwgbV9zZXR2YXJzW2ldLT52
YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICAvLyB1cGRhdGUgYnJvd3NlciBjb250
ZXh0IAorICAgIGlmICghbV92YXJzLmlzRW1wdHkoKSkKKyAgICAgICAgV01MSGVscGVyOjpjdXJy
ZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZhcmlhYmxlcyhtX3ZhcnMpOworCisgICAgLy8gc3RvcCB0
aGUgdGltZXIgb2YgdGhlIGN1cnJlbnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICBXTUxDYXJk
RWxlbWVudCogY2FyZCA9IFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+YWN0aXZlQ2Fy
ZCgpOworICAgIGlmIChjYXJkICYmIGNhcmQtPmV2ZW50VGltZXIoKSkKKyAgICAgICAgY2FyZC0+
ZXZlbnRUaW1lcigpLT5zdG9wKCk7CisKKyAgICAvLyBwcmVwYXJlIGZvciBkaXNwbGF5aW5nIHRo
ZSBkZXN0IGNhcmQKKyAgICBQYWdlKiBwYWdlID0gV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4
dCgpLT5wYWdlKCk7CisgICAgcGFnZS0+Z29CYWNrKCk7Cit9CisKKworfSAvL25hbWVzcGFjZQor
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQcmV2RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTFByZXZFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxQ
cmV2RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
ICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBX
TUxQcmV2RWxlbWVudF9oCisjZGVmaW5lIFdNTFByZXZFbGVtZW50X2gKKworI2luY2x1ZGUgIldN
TFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworICAgIAorY2xhc3MgV01MUHJldkVsZW1lbnQgOiBwdWJsaWMgV01MVGFza0VsZW1lbnQg
eworcHVibGljOgorICAgIFdNTFByZXZFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05h
bWUsIERvY3VtZW50KiBkb2MpOworICAgIFdNTFByZXZFbGVtZW50KERvY3VtZW50KiBkb2MpOwor
ICAgIHZpcnR1YWwgfldNTFByZXZFbGVtZW50KCk7CisgICAgCisgICAgdmlydHVhbCB2b2lkIGV4
ZWMoRXZlbnQgKiwgU3RyaW5nKSA7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS93bWwvV01MUmVmcmVzaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTFJlZnJlc2hFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21s
L1dNTFJlZnJlc2hFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MCBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCisKKyNpbmNsdWRlICJXTUxSZWZyZXNoRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAi
V01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
Q2FyZEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxSZWZyZXNoRWxlbWVu
dDo6V01MUmVmcmVzaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYykKKyAgICAgICAgOiBXTUxUYXNrRWxlbWVudCggdGFnTmFtZSwgZG9jKSB7fQorCitX
TUxSZWZyZXNoRWxlbWVudDo6fldNTFJlZnJlc2hFbGVtZW50KCkge30KKwordm9pZCAgV01MUmVm
cmVzaEVsZW1lbnQ6OmV4ZWMoRXZlbnQqIGV2dCwgU3RyaW5nIHVyaSkgCit7CisgICAgV01MQ2Fy
ZEVsZW1lbnQqIGNhcmQgPSBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPmFjdGl2ZUNh
cmQoKTsKKyAgICBXTUxUaW1lckVsZW1lbnQqIHRpbWVyID0gY2FyZC0+ZXZlbnRUaW1lcigpOwor
ICAgIC8vIEJlZm9yZSBwZXJmb3JtIHJlZnJlc2ggdGFzaywgd2Ugc3RvcmUgdGhlIGN1cnJlbnQg
dGltZW91dCB2YWx1ZSAKKyAgICAvLyBhbmQgdGhlbiBzdG9wIHRoZSB0aW1lcgorICAgIGlmICh0
aW1lcikgeworICAgICAgICB0aW1lci0+c3RvcmVJbnRlcnZhbFRvQnJ3Q29udGV4dCgpOworICAg
ICAgICB0aW1lci0+c3RvcCgpOworICAgIH0KKworICAgIC8vIGNvbnZlcnQgdmFyaWFibGUgbmFt
ZXMgYW5kIHZhbHVlcyBvZiBzZXR2YXIgZWxlbWVudCBpZiBuZWNlc3NhcnkKKyAgICBWYXJpYWJs
ZU1hcCBtX3ZhcnM7CisgICAgaWYgKGhhc1NldHZhcigpKSB7CisgICAgICAgIGZvciAodW5zaWdu
ZWQgaW50IGkgPSAwOyBpIDwgbV9zZXR2YXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBp
ZiAoIW1fc2V0dmFyc1tpXS0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3Zh
cnMuc2V0KG1fc2V0dmFyc1tpXS0+bmFtZSgpLCBtX3NldHZhcnNbaV0tPnZhbHVlKCkpOworICAg
ICAgICB9CisgICAgfSAgCisKKyAgICAvLyB1cGRhdGUgYnJvd3NlciBjb250ZXh0IAorICAgIGlm
ICghbV92YXJzLmlzRW1wdHkoKSkKKyAgICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4
dCgpLT5zdG9yZVZhcmlhYmxlcyhtX3ZhcnMpOworCisgICAgLy9yZWRpc3BsYXkgY3VycmVtdCBj
YXJkIHdpdGggY3VycmVudCB2YXJpYWJsZSBzdGF0ZQorICAgIGRvY3VtZW50KCktPmZyYW1lKCkt
PmxvYWRlcigpLT5yZWxvYWQoKTsKKworICAgIC8vQWZ0ZXIgcmVmcmVzaGluZyB0YXNrLCByZXN1
bWUgdGhlIHRpbWVyIGlmIGl0IGV4c2l0cyAKKyAgICBpZiAodGltZXIpCisgICAgICAgIHRpbWVy
LT5zdGFydCgpOworfQorCisKK30gLy9uYW1lc3BhY2UKKwpJbmRleDogV2ViQ29yZS93bWwvV01M
UmVmcmVzaEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxSZWZyZXNoRWxl
bWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUmVmcmVzaEVsZW1lbnQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MUmVmcmVzaEVsZW1l
bnRfaAorI2RlZmluZSBXTUxSZWZyZXNoRWxlbWVudF9oCisKKyNpbmNsdWRlICJTdHlsZWRFbGVt
ZW50LmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgorCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFzcyBX
TUxSZWZyZXNoRWxlbWVudCA6IHB1YmxpYyBXTUxUYXNrRWxlbWVudCB7CitwdWJsaWM6CisgICAg
V01MUmVmcmVzaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
IGRvYyk7CisgICAgdmlydHVhbCB+V01MUmVmcmVzaEVsZW1lbnQoKTsKKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgZXhlYyhFdmVudCAqLCBTdHJpbmcpIDsKK307CisKK30gLy9uYW1lc3BhY2UKKwor
I2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJNb3VzZUV2ZW50Lmgi
CisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNp
bmNsdWRlICJSZW5kZXJMaXN0Qm94LmgiCisjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKKyNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIEFSUk9XX0tFWVNfUE9QX01FTlUgMQor
I2Vsc2UKKyNkZWZpbmUgQVJST1dfS0VZU19QT1BfTUVOVSAwCisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIFdNTE5h
bWVzOworCitXTUxTZWxlY3RFbGVtZW50OjpXTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZywgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50KHRhZywg
ZG9jLCAwKSB7fQorCitXTUxTZWxlY3RFbGVtZW50Ojp+V01MU2VsZWN0RWxlbWVudCgpIHt9CisK
K3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKKyAgICAg
ICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpIHsKKyAgICAg
ICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJs
ZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgfSBlbHNlIAorICAgICAgICAgICAgbV9uYW1lID0g
YXR0ci0+dmFsdWUoKTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0
cikgeworICAgICAgICBtX3ZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBpbmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFy
aWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5p
emVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAg
ICAgfSBlbHNlCisgICAgICAgICAgICBtX2lOYW1lID0gYXR0ci0+dmFsdWUoKTsKKworICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGl2YWx1ZUF0dHIpIHsKKyAgICAgICAgbV9pVmFsdWUg
PSBhdHRyLT52YWx1ZSgpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG11bHRpcGxl
QXR0cikgeworICAgICAgICBib29sIG11bHRpcGxlID0gbV9tdWx0aXBsZTsKKyAgICAgICAgbV9t
dWx0aXBsZSA9IChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIik7CisgICAgICAgIGlmICgobXVsdGlw
bGUgIT0gbV9tdWx0aXBsZSkgJiYgYXR0YWNoZWQoKSkgeworICAgICAgICAgICAgZGV0YWNoKCk7
CisgICAgICAgICAgICBhdHRhY2goKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IEhUTUxOYW1lczo6c2l6ZUF0dHIpIHsKKyAgICAgICAgLy9EbyBub3RoaW5nCisg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpIHsK
KyAgICAgICAgLy9EbyBub3RoaW5nCisgICAgfSBlbHNlIHsKKyAgICAgICAgSFRNTFNlbGVjdEVs
ZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworICAgIH0KKworfQorCit2b2lkIFdN
TFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZUF0dHJzSWZOZWVkZWQoKSAKK3sKKyAgICBTdHJpbmcgc3Vi
ID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKG1fdmFsdWUsIGRvY3VtZW50KCkpOworICAg
IGlmIChtX3ZhbHVlICE9IHN1YikgeworICAgICAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBz
dWIpOworICAgICAgICBtX3ZhbHVlID0gc3ViOworICAgIH0KKworICAgIHN1YiA9IFdNTEhlbHBl
cjo6c3Vic3RpdHV0ZVZhclJlZihtX2lWYWx1ZSwgZG9jdW1lbnQoKSk7CisgICAgaWYgKG1faVZh
bHVlICE9IHN1YikgeworICAgICAgICBzZXRBdHRyaWJ1dGUoaXZhbHVlQXR0ciwgc3ViKTsKKyAg
ICAgICAgbV9pVmFsdWUgPSBzdWI7CisgICAgfQorCisgICAgU3RyaW5nIHRpdGxlID0gZ2V0QXR0
cmlidXRlKHRpdGxlQXR0cik7CisgICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVm
KHRpdGxlLCBkb2N1bWVudCgpKTsKKyAgICBpZiAodGl0bGUgIT0gc3ViKQorICAgICAgICBzZXRB
dHRyaWJ1dGUodGl0bGVBdHRyLCB0aXRsZSk7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6
c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmly
ZU9uQ2hhbmdlKQoreworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxp
c3RJdGVtcygpOworICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRpb25J
bmRleCk7CisgICAgV01MT3B0aW9uRWxlbWVudCogZWxlbWVudCA9IDA7CisKKyAgICBpZiAoIW11
bHRpcGxlKCkpCisgICAgICAgIGRlc2VsZWN0ID0gdHJ1ZTsKKworICAgIGlmIChsaXN0SW5kZXgg
Pj0gMCkgeworICAgICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCA8IDAgfHwg
ZGVzZWxlY3QpCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChsaXN0
SW5kZXgpOworICAgICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCA8IDAgfHwgZGVz
ZWxlY3QpCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChsaXN0SW5kZXgp
OworICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+KGl0ZW1z
W2xpc3RJbmRleF0pOworICAgICAgICBlbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOwor
ICAgIH0KKworICAgIGlmIChkZXNlbGVjdCkKKyAgICAgICAgZGVzZWxlY3RJdGVtcyhlbGVtZW50
KTsKKworICAgIHNjcm9sbFRvU2VsZWN0aW9uKCk7CisKKyAgICAvLyBUaGlzIG9ubHkgZ2V0cyBj
YWxsZWQgd2l0aCBmaXJlT25DaGFuZ2UgZm9yIG1lbnUgbGlzdHMuIAorICAgIGlmIChmaXJlT25D
aGFuZ2UgJiYgdXNlc01lbnVMaXN0KCkpCisgICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsKK30K
KworU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlVG9JVmFsdWUoU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSAKKyAgICAgICAgcmV0dXJuIHZhbHVlOworCisg
ICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAg
VmVjdG9yPFN0cmluZz4gdmFsVmVjdHM7CisgICAgdmFsdWUuc3BsaXQoJzsnLCB2YWxWZWN0cyk7
CisgICAgVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gdmFsVmVjdHMuYmVnaW4oKTsKKyAg
ICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAwOyAKKyAgICBTdHJpbmcgaVZhbDsKKyAgICBT
dHJpbmcgdmFsOworICAgIHdoaWxlIChpdCAhPSB2YWxWZWN0cy5lbmQoKSkgeworICAgICAgICB2
YWwgPSAqaXQ7CisgICAgICAgIGludCBvcHRJZHggPSAwOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpdGVtc1tp
XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKKyAgICAgICAgICAgICAgICBvcHRJZHgrKzsK
KyAgICAgICAgICAgICAgICBvcHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4o
aXRlbXNbaV0pOworICAgICAgICAgICAgICAgIGlmIChvcHRpb24tPnZhbHVlKCkgPT0gdmFsKSB7
CisgICAgICAgICAgICAgICAgICAgIGlWYWwgKz0gU3RyaW5nOjpudW1iZXIob3B0SWR4KTsKKyAg
ICAgICAgICAgICAgICAgICAgaVZhbCArPSAiOyI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAr
K2l0OworICAgIH0KKworICAgIGlmIChpVmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICBpVmFs
ID0gaVZhbC5sZWZ0KGlWYWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsaWRhdGVJbmRl
eFZhbHVlKGlWYWwpOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6aXZhbHVlVG9WYWx1
ZShTdHJpbmcmIGl2YWx1ZSkKK3sKKyAgICBpZiAoaXZhbHVlLmlzRW1wdHkoKSkgCisgICAgICAg
IHJldHVybiBpdmFsdWU7CisKKyAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAwOyAKKyAg
ICBTdHJpbmcgaXZhbDsKKyAgICBTdHJpbmcgdmFsOworICAgIGludCBvcHRJZHggPSAtMTsKKyAg
ICBpbnQgbGlzdElkeCA9IC0xOworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVt
cyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxTdHJpbmc+IHZhbFZlY3RzOworICAgIGl2YWx1
ZS5zcGxpdCgnOycsIHZhbFZlY3RzKTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXQg
PSB2YWxWZWN0cy5iZWdpbigpOworICAgIHdoaWxlIChpdCAhPSB2YWxWZWN0cy5lbmQoKSkgewor
ICAgICAgICBpdmFsID0gKml0Kys7CisKKyAgICAgICAgb3B0SWR4ID0gaXZhbC50b0ludCgpOwor
ICAgICAgICBpZiAoKG9wdElkeCA8IDEpIHx8IChvcHRJZHggPiBzdGF0aWNfY2FzdDxpbnQ+KGl0
ZW1zLnNpemUoKSkpKQorICAgICAgICAgICAgICAgY29udGludWU7IAorCisgICAgICAgIGxpc3RJ
ZHggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRJZHgtMSk7CisgICAgICAgIG9wdGlvbiA9IHN0YXRp
Y19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tsaXN0SWR4XSk7CisKKyAgICAgICAgdmFs
ICs9IG9wdGlvbi0+dmFsdWUoKTsKKyAgICAgICAgdmFsICs9ICI7IjsKKyAgICB9CisKKyAgICBp
ZiAodmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICB2YWwgPSB2YWwubGVmdCh2YWwubGVuZ3Ro
KCktMSk7CisKKyAgICByZXR1cm4gdmFsOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6
dmFsaWRhdGVJbmRleFZhbHVlKFN0cmluZyYgaXZhbCkKK3sKKyAgICBpZiAoaXZhbC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBpdmFsOworCisgICAgYm9vbCBvayA9IHRydWU7CisgICAgU3Ry
aW5nIHZhbCgiIik7CisgICAgU3RyaW5nIG5ld1ZhbDsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxW
ZWN0czsKKyAgICBpdmFsLnNwbGl0KCc7JywgdmFsVmVjdHMpOworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgdmFsVmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgblZhbCA9
IHZhbFZlY3RzW2ldLnRvSW50KCZvayk7CisgICAgICAgIGlmICghb2sgfHwgKG5WYWwgPCAxKSB8
fCAoblZhbCA+IGxlbmd0aCgpKSkgeworICAgICAgICAgICAgdmFsVmVjdHMucmVtb3ZlKGkpOwor
ICAgICAgICAgICAgaS0tOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV3VmFsID0g
U3RyaW5nOjpudW1iZXIoblZhbCk7CisgICAgICAgICAgICBpZiAoLTEgPT0gdmFsLmZpbmQobmV3
VmFsKSkgeworICAgICAgICAgICAgICAgIHZhbCArPSBuZXdWYWw7IAorICAgICAgICAgICAgICAg
IHZhbCArPSAiOyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
dmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICB2YWwgPSB2YWwubGVmdCh2YWwubGVuZ3RoKCkt
MSk7CisKKyAgICByZXR1cm4gdmFsOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmNhbGNE
ZWZhdWx0T3B0aW9uSW5kZXgoKQoreworICAgIFN0cmluZyB2YXI7CisgICAgaWYgKCFtX2lOYW1l
LmlzRW1wdHkoKSkgeworICAgICAgICB2YXIgPSBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0
KCktPmdldFZhcmliYWxlKG1faU5hbWUpOworICAgICAgICBpZiAoIXZhci5pc0VtcHR5KCkpIHsK
KyAgICAgICAgICAgIG1fZGVmYXVsdE9wdElkeCA9IHZhbGlkYXRlSW5kZXhWYWx1ZSh2YXIpOwor
ICAgICAgICB9CisgICAgfQorCisgICAgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYg
IW1faVZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWxpZGF0
ZUluZGV4VmFsdWUobV9pVmFsdWUpOworICAgIH0KKworICAgIGlmIChtX2RlZmF1bHRPcHRJZHgu
aXNFbXB0eSgpICYmICFtX25hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHZhciA9IFdNTEhlbHBl
cjo6Y3VycmVudEJyd0NvbnRleHQoKS0+Z2V0VmFyaWJhbGUobV9uYW1lKTsKKyAgICAgICAgaWYg
KCF2YXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWx1ZVRv
SVZhbHVlKHZhcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobV9kZWZhdWx0T3B0SWR4
LmlzRW1wdHkoKSAmJiAhbV92YWx1ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV9kZWZhdWx0T3B0
SWR4ID0gdmFsdWVUb0lWYWx1ZShtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBpZiAobV9kZWZhdWx0
T3B0SWR4LmlzRW1wdHkoKSAmJiBtdWx0aXBsZSgpKQorICAgICAgICBtX2RlZmF1bHRPcHRJZHgg
PSAiMCI7CisgICAgZWxzZSBpZiAobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSkKKyAgICAgICAg
bV9kZWZhdWx0T3B0SWR4ID0gIjEiOworCit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6aW5p
dGlhbGlzZVZhcmlhYmxlcygpCit7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0
ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgaWYgKGl0ZW1zLnNpemUoKSA8PSAwKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoIW1fbmFtZS5pc0VtcHR5KCkgJiYgIW11bHRpcGxlKCkpIHsKKwor
ICAgICAgICB1bnNpZ25lZCBpbnQgaWR4ID0gbV9kZWZhdWx0T3B0SWR4LnRvSW50KCk7IAorICAg
ICAgICBpZiAoaWR4IDwgMSB8fCBpZHggPiBpdGVtcy5zaXplKCkpIHsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGludCBsaXN0SWR4ID0gb3B0aW9u
VG9MaXN0SW5kZXgoaWR4LTEpOworICAgICAgICAgICAgV01MT3B0aW9uRWxlbWVudCogb3B0aW9u
ID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2xpc3RJZHhdKTsKKyAgICAg
ICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c3RvcmVWYXJpYWJsZShtX25h
bWUsIG9wdGlvbi0+dmFsdWUoKSk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoIW1fbmFt
ZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgU3RyaW5nIG5hbWVWYWwgPSBpdmFsdWVUb1ZhbHVlKG1f
ZGVmYXVsdE9wdElkeCk7CisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+
c3RvcmVWYXJpYWJsZShtX25hbWUsIG5hbWVWYWwpOworICAgIH0KKworICAgIGlmICghbV9pTmFt
ZS5pc0VtcHR5KCkpCisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c3Rv
cmVWYXJpYWJsZShtX2lOYW1lLCBtX2RlZmF1bHRPcHRJZHgpOworfQorCit2b2lkIFdNTFNlbGVj
dEVsZW1lbnQ6OnByZVNlbGVjdE9wdGlvbnNCeURlZmF1bHQoKQoreworICAgIFZlY3RvcjxTdHJp
bmc+IGlkeFZlY3RzOworICAgIG1fZGVmYXVsdE9wdElkeC5zcGxpdCgnOycsIGlkeFZlY3RzKTsK
KyAgICBWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBpZHhWZWN0cy5iZWdpbigpOworICAg
IGludCBpZHggPSAtMTsKKyAgICBpZiAobXVsdGlwbGUoKSkgeworICAgICAgICB3aGlsZSAoaXQg
IT0gaWR4VmVjdHMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlkeCA9ICgqaXQpLnRvSW50KCk7IAor
ICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChpZHgtMSwgZmFsc2UpOworICAgICAgICAgICAg
KytpdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlkeCA9ICgqaXQpLnRvSW50
KCk7IAorICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGlkeC0xLCBmYWxzZSk7CisgICAgfQorfQor
Cit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEluaXRpYWxPcHRpb25zKCkKK3sKKyAgICBj
YWxjRGVmYXVsdE9wdGlvbkluZGV4KCk7CisKKyAgICBpZiAoIW1fZGVmYXVsdE9wdElkeC5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGlzZVZhcmlhYmxlcygpOworICAgICAgICBwcmVTZWxl
Y3RPcHRpb25zQnlEZWZhdWx0KCk7CisgICAgfQorfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6
OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKK3sKKyAgICBpZiAoIW11bHRpcGxlKCkp
CisgICAgICAgIG1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworICAgIGVsc2UgCisg
ICAgICAgIGxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgCisgICAgaWYgKGV2
dC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2dC0+dHlw
ZSgpID09IGtleXByZXNzRXZlbnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkgeworICAgICAg
ICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVu
dCo+KGV2dCk7CisgICAgCisgICAgICAgIGlmICgha2V5Ym9hcmRFdmVudC0+Y3RybEtleSgpICYm
ICFrZXlib2FyZEV2ZW50LT5hbHRLZXkoKSAmJiAha2V5Ym9hcmRFdmVudC0+bWV0YUtleSgpICYm
CisgICAgICAgICAgICBpc1ByaW50YWJsZUNoYXIoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUoKSkp
IHsKKyAgICAgICAgICAgIHR5cGVBaGVhZEZpbmQoa2V5Ym9hcmRFdmVudCk7CisgICAgICAgICAg
ICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZhdWx0
RXZlbnRIYW5kbGVyKGV2dCk7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6bWVudUxpc3RE
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCit7CisgICAgUmVuZGVyTWVudUxpc3QqIG1l
bnVMaXN0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTWVudUxpc3QqPihyZW5kZXJlcigpKTsKKworICAg
IC8vIFVzZSBrZXkgcHJlc3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBtb3Vz
ZSBldmVudHMKKyAgICAvLyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5nIG9m
IHRoZSBrZXkgcHJlc3MgZXZlbnQuCisgICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZl
bnQpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFldnQtPmlzS2V5Ym9hcmRFdmVudCgp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IHN0
YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpLT5rZXlJZGVudGlmaWVyKCk7CisgICAgICAg
IGJvb2wgaGFuZGxlZCA9IGZhbHNlOworI2lmIEFSUk9XX0tFWVNfUE9QX01FTlUKKyAgICAgICAg
aWYgKGtleUlkZW50aWZpZXIgPT0gIkVudGVyIikgeworICAgICAgICAgICAgbWVudUxpc3RPbkNo
YW5nZSgpOworICAgICAgICAgICAgaWYgKGZvcm0oKSkKKyAgICAgICAgICAgICAgICBmb3JtKCkt
PnN1Ym1pdENsaWNrKGV2dCk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9
PSAiVXAiIHx8IGtleUlkZW50aWZpZXIgPT0gIlUrMDAyMCIpIHsKKyAgICAgICAgICAgIGZvY3Vz
KCk7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBh
cmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJpbmcgc2V0
U2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gUmVu
ZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQgYWZ0ZXIgdGhlIHVz
ZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KKyAgICAgICAgICAgIHNhdmVMYXN0
U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVwKCk7CisgICAgICAg
ICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaW50IGxpc3RJ
bmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGlmIChr
ZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09ICJSaWdodCIpIHsKKyAg
ICAgICAgICAgIGludCBzaXplID0gbGlzdEl0ZW1zKCkuc2l6ZSgpOworICAgICAgICAgICAgZm9y
IChsaXN0SW5kZXggKz0gMTsKKyAgICAgICAgICAgICAgICAgbGlzdEluZGV4ID49IDAgJiYgbGlz
dEluZGV4IDwgc2l6ZSAmJiAobGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSB8fCAh
bGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpOworICAgICAg
ICAgICAgICAgICArK2xpc3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChs
aXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplKQorICAgICAgICAgICAgICAgIHNldFNl
bGVjdGVkSW5kZXgobGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7CisgICAgICAgICAgICBo
YW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIg
fHwga2V5SWRlbnRpZmllciA9PSAiTGVmdCIpIHsKKyAgICAgICAgICAgIGludCBzaXplID0gbGlz
dEl0ZW1zKCkuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChsaXN0SW5kZXggLT0gMTsKKyAgICAg
ICAgICAgICAgICAgbGlzdEluZGV4ID49IDAgJiYgbGlzdEluZGV4IDwgc2l6ZSAmJiAobGlzdEl0
ZW1zKClbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSB8fCAhbGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+
aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpOworICAgICAgICAgICAgICAgICAtLWxpc3RJbmRleCk7
CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5k
ZXggPCBzaXplKQorICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0aW9u
SW5kZXgobGlzdEluZGV4KSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAg
fSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJFbnRlciIpIHsKKyAgICAgICAgICAgIC8vIGxp
c3RJbmRleCBzaG91bGQgYWxyZWFkeSBiZSBzZWxlY3RlZCwgYnV0IHRoaXMgd2lsbCBmaXJlIHRo
ZSBvbmNoYW5nZSBoYW5kbGVyLgorICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChsaXN0VG9P
cHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIGhhbmRsZWQg
PSB0cnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKGhhbmRsZWQpCisgICAgICAg
ICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICB9CisgICAgaWYgKGV2dC0+dHlw
ZSgpID09IG1vdXNlZG93bkV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nh
c3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAg
Zm9jdXMoKTsKKyAgICAgICAgaWYgKG1lbnVMaXN0LT5wb3B1cElzVmlzaWJsZSgpKQorICAgICAg
ICAgICAgbWVudUxpc3QtPmhpZGVQb3B1cCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAg
IC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBz
ZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4LAor
ICAgICAgICAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6dmFs
dWVDaGFuZ2VkLCB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNlbGVj
dGlvbiBmcm9tIHRoZSBtZW51LgorICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKKyAg
ICAgICAgICAgIG1lbnVMaXN0LT5zaG93UG9wdXAoKTsKKyAgICAgICAgfQorICAgICAgICBldnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorCisgICAgLy8gdXBkYXRlIG5hbWUgYW5kIGlu
YW1lIHZhcmlhYmxlcyB3aXRoIG9wdGlvbidzIHZhbHVlIGFuZCBpbmRleAorICAgIHVwZGF0ZVZh
cmlhYmxlcygpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldnQpCit7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQgJiYgZXZ0LT5p
c01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkg
PT0gTGVmdEJ1dHRvbikgeworICAgICAgICBmb2N1cygpOworICAgICAgICAKKyAgICAgICAgTW91
c2VFdmVudCogbUV2dCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOworICAgICAgICBp
bnQgbGlzdEluZGV4ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KHJlbmRlcmVyKCkpLT5s
aXN0SW5kZXhBdE9mZnNldChtRXZ0LT5vZmZzZXRYKCksIG1FdnQtPm9mZnNldFkoKSk7CisgICAg
ICAgIGlmIChsaXN0SW5kZXggPj0gMCkgeworICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0
aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNh
bGwgb25DaGFuZ2UgZHVyaW5nIG1vdXNldXAsIG9yIGFmdGVyIGF1dG9zY3JvbGwgZmluaXNoZXMu
CisgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOworCisgICAgICAgICAgICBtX2FjdGl2
ZVNlbGVjdGlvblN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9vbCBt
dWx0aVNlbGVjdEtleVByZXNzZWQgPSBmYWxzZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAgICAg
ICAgICBtdWx0aVNlbGVjdEtleVByZXNzZWQgPSBtRXZ0LT5tZXRhS2V5KCk7CisjZWxzZQorICAg
ICAgICAgICAgbXVsdGlTZWxlY3RLZXlQcmVzc2VkID0gbUV2dC0+Y3RybEtleSgpOworI2VuZGlm
CisKKyAgICAgICAgICAgIGJvb2wgc2hpZnRTZWxlY3QgPSBtdWx0aXBsZSgpICYmIG1FdnQtPnNo
aWZ0S2V5KCk7CisgICAgICAgICAgICBib29sIG11bHRpU2VsZWN0ID0gbXVsdGlwbGUoKSAmJiBt
dWx0aVNlbGVjdEtleVByZXNzZWQgJiYgIW1FdnQtPnNoaWZ0S2V5KCk7CisgICAgICAgICAgICAK
KyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBjbGlja2VkRWxlbWVudCA9IGxpc3RJdGVtcygpW2xp
c3RJbmRleF07ICAgICAgICAgICAgCisgICAgICAgICAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRp
b24gPSAwOworICAgICAgICAgICAgaWYgKGNsaWNrZWRFbGVtZW50LT5oYXNMb2NhbE5hbWUob3B0
aW9uVGFnKSkgeworICAgICAgICAgICAgICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlv
bkVsZW1lbnQqPihjbGlja2VkRWxlbWVudCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxpa2Ug
ZHVyaW5nIGRyYWcgc2VsZWN0aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNlbGVjdAorICAgICAg
ICAgICAgICAgIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGUgPSAhb3B0aW9uLT5zZWxlY3RlZCgpOwor
ICAgICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0ZWRTdGF0ZShtX2FjdGl2ZVNlbGVjdGlv
blN0YXRlKTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJ
ZiB3ZSdyZSBub3QgaW4gYW55IHNwZWNpYWwgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGUsIHRoZW4g
ZGVzZWxlY3QgYWxsIG90aGVyIGl0ZW1zLCBleGNsdWRpbmcgdGhlIGNsaWNrZWQgb3B0aW9uLgor
ICAgICAgICAgICAgLy8gSWYgbm8gb3B0aW9uIHdhcyBjbGlja2VkLCB0aGVuIHRoaXMgd2lsbCBk
ZXNlbGVjdCBhbGwgaXRlbXMgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICBpZiAoIXNoaWZ0U2Vs
ZWN0ICYmICFtdWx0aVNlbGVjdCkKKyAgICAgICAgICAgICAgICBkZXNlbGVjdEl0ZW1zKG9wdGlv
bik7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBhbmNob3IgaGFzbid0IGJlZW4gc2V0LCBhbmQg
d2UncmUgZG9pbmcgYSBzaW5nbGUgc2VsZWN0aW9uIG9yIGEgc2hpZnQgc2VsZWN0aW9uLCB0aGVu
IGluaXRpYWxpemUgdGhlIGFuY2hvciB0byB0aGUgZmlyc3Qgc2VsZWN0ZWQgaW5kZXguCisgICAg
ICAgICAgICBpZiAobV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCA8IDAgJiYgIW11bHRpU2Vs
ZWN0KQorICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KHNlbGVj
dGVkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBubyBzZWxlY3RlZElu
ZGV4KCkgZm9yIHRoZSBwcmV2aW91cyBpbml0aWFsaXphdGlvbiwgb3IKKyAgICAgICAgICAgIC8v
IElmIHdlJ3JlIGRvaW5nIGEgc2luZ2xlIHNlbGVjdGlvbiwgb3IgYSBtdWx0aXBsZSBzZWxlY3Rp
b24gKHVzaW5nIGNtZCBvciBjdHJsKSwgdGhlbiBpbml0aWFsaXplIHRoZSBhbmNob3IgaW5kZXgg
dG8gdGhlIGxpc3RJbmRleCB0aGF0IGp1c3QgZ290IGNsaWNrZWQuCisgICAgICAgICAgICBpZiAo
bGlzdEluZGV4ID49IDAgJiYgKG1fYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXggPCAwIHx8ICFz
aGlmdFNlbGVjdCkpCisgICAgICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5k
ZXgobGlzdEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0
aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKKyAgICAgICAgICAgIHVwZGF0ZUxpc3RCb3hTZWxlY3Rp
b24oIW11bHRpU2VsZWN0KTsKKworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigpLT5z
ZXRNb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGwoKTsKKworICAgICAgICAgICAgZXZ0LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldnQtPnR5cGUoKSA9
PSBtb3VzZXVwRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3Vz
ZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiBkb2N1bWVudCgpLT5mcmFt
ZSgpLT5ldmVudEhhbmRsZXIoKS0+YXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkK
KyAgICAgICAgLy8gVGhpcyBtYWtlcyBzdXJlIHdlIGZpcmUgb25DaGFuZ2UgZm9yIGEgc2luZ2xl
IGNsaWNrLiAgRm9yIGRyYWcgc2VsZWN0aW9uLCBvbkNoYW5nZSB3aWxsIGZpcmUgd2hlbiB0aGUg
YXV0b3Njcm9sbCB0aW1lciBzdG9wcy4KKyAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CisgICAg
ZWxzZSBpZiAoZXZ0LT50eXBlKCkgPT0ga2V5cHJlc3NFdmVudCkgeworICAgICAgICBpZiAoIWV2
dC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0cmlu
ZyBrZXlJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPmtleUlk
ZW50aWZpZXIoKTsKKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRW50ZXIiKSB7Cisg
ICAgICAgICAgICBpZiAoZm9ybSgpKQorICAgICAgICAgICAgICAgIGZvcm0oKS0+c3VibWl0Q2xp
Y2soZXZ0KTsKKyAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBlbmRJbmRleCA9IDA7ICAgICAg
ICAKKyAgICAgICAgaWYgKG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXggPCAwKSB7CisgICAgICAg
ICAgICAvLyBJbml0aWFsaXplIHRoZSBlbmQgaW5kZXgKKyAgICAgICAgICAgIGlmIChrZXlJZGVu
dGlmaWVyID09ICJEb3duIikKKyAgICAgICAgICAgICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3Rh
YmxlTGlzdEluZGV4KGxhc3RTZWxlY3RlZExpc3RJbmRleCgpKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKGtleUlkZW50aWZpZXIgPT0gIlVwIikKKyAgICAgICAgICAgICAgICBlbmRJbmRleCA9IHBy
ZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChvcHRpb25Ub0xpc3RJbmRleChzZWxlY3RlZEluZGV4
KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgZW5kIGluZGV4
IGJhc2VkIG9uIHRoZSBjdXJyZW50IGVuZCBpbmRleAorICAgICAgICAgICAgaWYgKGtleUlkZW50
aWZpZXIgPT0gIkRvd24iKQorICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gbmV4dFNlbGVjdGFi
bGVMaXN0SW5kZXgobV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCk7CisgICAgICAgICAgICBlbHNl
IGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpCisgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBw
cmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgobV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleCk7ICAg
IAorICAgICAgICB9CisgICAgICAgIAorICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93
biIgfHwga2V5SWRlbnRpZmllciA9PSAiVXAiKSB7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBz
ZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4g
d2UgY2FsbCBvbkNoYW5nZSBpbW1lZGlhdGVseSBhZnRlciBtYWtpbmcgdGhlIG5ldyBzZWxlY3Rp
b24uCisgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOworCisgICAgICAgICAgICBBU1NF
UlQoZW5kSW5kZXggPj0gMCAmJiAodW5zaWduZWQpZW5kSW5kZXggPCBsaXN0SXRlbXMoKS5zaXpl
KCkpOyAKKyAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGVuZEluZGV4KTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgdGhlIGFuY2hvciBpcyB1bml0aWFsaXpl
ZCwgb3IgaWYgd2UncmUgZ29pbmcgdG8gZGVzZWxlY3QgYWxsIG90aGVyIG9wdGlvbnMsIHRoZW4g
c2V0IHRoZSBhbmNob3IgaW5kZXggZXF1YWwgdG8gdGhlIGVuZCBpbmRleC4KKyAgICAgICAgICAg
IGJvb2wgZGVzZWxlY3RPdGhlcnMgPSAhbXVsdGlwbGUoKSB8fCAhc3RhdGljX2Nhc3Q8S2V5Ym9h
cmRFdmVudCo+KGV2dCktPnNoaWZ0S2V5KCk7CisgICAgICAgICAgICBpZiAobV9hY3RpdmVTZWxl
Y3Rpb25BbmNob3JJbmRleCA8IDAgfHwgZGVzZWxlY3RPdGhlcnMpIHsKKyAgICAgICAgICAgICAg
ICBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBpZiAoZGVz
ZWxlY3RPdGhlcnMpCisgICAgICAgICAgICAgICAgICAgIGRlc2VsZWN0SXRlbXMoKTsKKyAgICAg
ICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChtX2FjdGl2ZVNlbGVjdGlv
bkVuZEluZGV4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVu
ZGVyTGlzdEJveCo+KHJlbmRlcmVyKCkpLT5zY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRl
eChlbmRJbmRleCk7CisgICAgICAgICAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKGRlc2VsZWN0
T3RoZXJzKTsKKyAgICAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOworICAgICAgICAgICAgZXZ0
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gdXBkYXRl
IG5hbWUgYW5kIGluYW1lIHZhcmlhYmxlcyB3aXRoIG9wdGlvbidzIHZhbHVlIGFuZCBpbmRleAor
ICAgIHVwZGF0ZVZhcmlhYmxlcygpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0
ZVZhcmlhYmxlcygpCit7CisgICAgaWYgKG1faU5hbWUuaXNFbXB0eSgpICYmIG1fbmFtZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBuYW1lOworICAgIFN0cmluZyBp
bmFtZTsKKyAgICBpbnQgb3B0SWR4ID0gMDsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQq
PiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRl
bXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0
aW9uVGFnKSkgeworICAgICAgICAgICAgb3B0SWR4Kys7CisgICAgICAgICAgICBXTUxPcHRpb25F
bGVtZW50KiBvcHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0p
OworICAgICAgICAgICAgaWYgKG9wdGlvbi0+c2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgICAg
IG5hbWUgKz0gb3B0aW9uLT5nZXRBdHRyaWJ1dGUodmFsdWVBdHRyKTsKKyAgICAgICAgICAgICAg
ICBuYW1lICs9ICI7IjsKKyAgICAgICAgICAgICAgICBpbmFtZSArPSBTdHJpbmc6Om51bWJlcihv
cHRJZHgpOworICAgICAgICAgICAgICAgIGluYW1lICs9ICI7IjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSkgeworICAgICAgICB3
aGlsZSAobmFtZS5lbmRzV2l0aCgiOyIpKQorICAgICAgICAgICAgbmFtZSA9IG5hbWUubGVmdChu
YW1lLmxlbmd0aCgpLTEpOworICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCkt
PnN0b3JlVmFyaWFibGUobV9uYW1lLCBuYW1lKTsKKyAgICB9CisKKyAgICBpZiAoIW1faU5hbWUu
aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChpbmFtZS5lbmRzV2l0aCgiOyIpKQorICAgICAgICAg
ICAgaW5hbWUgPSBpbmFtZS5sZWZ0KGluYW1lLmxlbmd0aCgpLTEpOworICAgICAgIAorICAgICAg
ICBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPnN0b3JlVmFyaWFibGUobV9pTmFtZSwg
aW5hbWUpOworICAgIH0KK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwvV01M
U2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1l
bnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MU2VsZWN0RWxlbWVudF9o
CisjZGVmaW5lIFdNTFNlbGVjdEVsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTFNlbGVjdEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFdNTFNlbGVjdEVsZW1lbnQgOiBwdWJsaWMgSFRNTFNlbGVjdEVsZW1lbnR7CitwdWJsaWM6
CisgICAgV01MU2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsK
KyAgICB2aXJ0dWFsIH5XTUxTZWxlY3RFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFy
c2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRl
ZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKworICAgIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChp
bnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNl
KTsKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICB2b2lkIHNlbGVjdEluaXRp
YWxPcHRpb25zKCk7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIHZhbHVlVG9JVmFsdWUoU3RyaW5n
Jik7CisgICAgU3RyaW5nIGl2YWx1ZVRvVmFsdWUoU3RyaW5nJik7CisgICAgU3RyaW5nIHZhbGlk
YXRlSW5kZXhWYWx1ZShTdHJpbmcmKTsKKyAgICB2b2lkIGNhbGNEZWZhdWx0T3B0aW9uSW5kZXgo
KTsKKyAgICB2b2lkIGluaXRpYWxpc2VWYXJpYWJsZXMoKTsKKyAgICB2b2lkIHByZVNlbGVjdE9w
dGlvbnNCeURlZmF1bHQoKTsKKyAgICB2b2lkIG1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCopOworICAgIHZvaWQgbGlzdEJveERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAg
ICB2b2lkIHVwZGF0ZVZhcmlhYmxlcygpOworCisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJp
bmcgbV92YWx1ZTsKKyAgICBTdHJpbmcgbV9pTmFtZTsKKyAgICBTdHJpbmcgbV9pVmFsdWU7Cisg
ICAgU3RyaW5nIG1fZGVmYXVsdE9wdElkeDsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3dtbC9XTUxTZXR2YXJFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMDAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJE
b2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisKKyNp
bmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiV01M
TmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNldHZh
ckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxQcmV2RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFJlZnJlc2hF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFt
ZXM7CisKK1dNTFNldHZhckVsZW1lbnQ6OldNTFNldHZhckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvYykgCisgICAgOiBXTUxFbGVtZW50KG5hbWUsIGRvYykK
K3sKK30KKworV01MU2V0dmFyRWxlbWVudDo6fldNTFNldHZhckVsZW1lbnQoKQoreworfQorCit2
b2lkIFdNTFNldHZhckVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAg
IFdNTFRhc2tFbGVtZW50KiBnbyA9IDA7CisgICAgTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2Rl
KCkgOworICAgIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShXTUxOYW1lczo6Z29UYWcpKSB7Cisg
ICAgICAgIGdvID0gc3RhdGljX2Nhc3Q8V01MR29FbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIH0g
ZWxzZSBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoV01MTmFtZXM6OnByZXZUYWcpKSB7CisgICAg
ICAgIGdvID0gc3RhdGljX2Nhc3Q8V01MUHJldkVsZW1lbnQqPihhbmNlc3Rvcik7CisgICAgfSBl
bHNlIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShXTUxOYW1lczo6cmVmcmVzaFRhZykpIHsKKyAg
ICAgICAgZ28gPSBzdGF0aWNfY2FzdDxXTUxSZWZyZXNoRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAg
ICB9IGVsc2UgeworICAgICAgICByZXR1cm47IAorICAgIH0KKworICAgIGlmIChnbykgeworICAg
ICAgICBnby0+cmVnaXN0ZXJTZXR2YXJFbGVtZW50KHRoaXMpOworICAgIH0KK30KKworCit2b2lk
IFdNTFNldHZhckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKK3sKKyAgICBTdHJpbmcgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKTsK
KyAgICBpZiAoYXR0ck5hbWUgPT0gbmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKCFXTUxIZWxwZXI6
OmlzVmFsaWRWYXJpYWJsZU5hbWUoYXR0ci0+dmFsdWUoKSwgdHJ1ZSkpIHsKKyAgICAgICAgICAg
IFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZU5hbWVF
cnJvcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX25hbWUgPSBXTUxIZWxwZXI6
OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSk7CisgICAgICAgICAg
ICBpZiAoIVdNTEhlbHBlcjo6aXNWYWxpZFZhcmlhYmxlTmFtZShtX25hbWUsIHRydWUpKQorICAg
ICAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRW
YXJpYWJsZU5hbWVFcnJvcik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK1N0cmluZyBXTUxTZXR2
YXJFbGVtZW50OjpuYW1lKCkKK3sKKyAgICByZXR1cm4gbV9uYW1lOyAKK30KKworU3RyaW5nIFdN
TFNldHZhckVsZW1lbnQ6OnZhbHVlKCkKK3sKKyAgICByZXR1cm4gV01MSGVscGVyOjpzdWJzdGl0
dXRlVmFyUmVmKGdldEF0dHJpYnV0ZSh2YWx1ZUF0dHIpLCBkb2N1bWVudCgpKTsKK30KKworfQpJ
bmRleDogV2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTFNldHZhckVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dN
TFNldHZhckVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgV01MU2V0dmFyRWxlbWVudF9oCisjZGVmaW5lIFdNTFNldHZhckVsZW1lbnRfaAorCisjaW5j
bHVkZSAiV01MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFNl
dHZhckVsZW1lbnQgOiBwdWJsaWMgIFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MU2V0dmFy
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+V01MU2V0dmFy
RWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVw
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
Kik7IAorCisgICAgU3RyaW5nIG5hbWUoKTsKKyAgICBTdHJpbmcgdmFsdWUoKTsKKworcHJpdmF0
ZToKKyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
d21sL1dNTFRhYmxlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFi
bGVFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIldNTFRhYmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRl
eHQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCisj
aW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVSb3dF
bGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dN
TFRhYmxlRWxlbWVudDo6V01MVGFibGVFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1M
VGFibGVFbGVtZW50KGRvYykgCit7Cit9CisKK1dNTFRhYmxlRWxlbWVudDo6fldNTFRhYmxlRWxl
bWVudCgpIHt9CisKK3ZvaWQgV01MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2x1bW5z
QXR0cikgeworICAgICAgICBpbnQgY29sdW1ucyA9ICBhdHRyLT52YWx1ZSgpLnRvSW50KCk7Cisg
ICAgICAgIGlmIChjb2x1bW5zIDwgMSkKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVy
KCktPnJlcG9ydEVycm9yKEludmFsaWRDb2x1bW5zTnVtYmVyRm9yVGFibGVFcnJyb3IpOworCisg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyKSB7CisgICAgICAgIFN0cmlu
ZyB0aXRsZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1
bWVudCgpKTsKKyAgICAgICAgaWYgKHRpdGxlICE9IGF0dHItPnZhbHVlKCkpCisgICAgICAgICAg
ICBzZXRBdHRyaWJ1dGUodGl0bGVBdHRyLCB0aXRsZSk7CisKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBhbGlnbkF0dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFi
bGVSZWYoYXR0ci0+dmFsdWUoKSkpCisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigp
LT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgSFRNTFRhYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7
CisgICAgfQorfQorCit2b2lkIFdNTFRhYmxlRWxlbWVudDo6aW5pdCgpIAoreworICAgIHVuc2ln
bmVkIGludCBpZHggPSAwOworICAgIEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvdyA9IDA7CisgICAg
SFRNTFRhYmxlQ2VsbEVsZW1lbnQqIGxhc3RDb2wgPSAwOworICAgIFJlZlB0cjxIVE1MVGFibGVD
ZWxsRWxlbWVudD4gbmV3Q2VsbDsKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2x1
bW5zOworICAgIEV4Y2VwdGlvbkNvZGUgZWM7CisgICAgdW5zaWduZWQgYWN0dWFsQ29sTnVtID0g
MDsKKyAgICB1bnNpZ25lZCBjb2xOdW0gPSBnZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmNvbHVtbnNB
dHRyKS50b0ludCgpOyAKKyAgICBpZiAoY29sTnVtIDwgMSkgCisgICAgICAgIGNvbE51bSA9IDE7
CisKKyAgICBTdHJpbmcgYWxpZ24gPSBnZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmFsaWduQXR0cik7
CisKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiByb3dzID0gY2hpbGRyZW4oKTsKKyAg
ICB1bnNpZ25lZCByb3dOdW0gPSByb3dzLT5sZW5ndGgoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgcm93TnVtOyArK2kpIHsKKyAgICAgICAgcm93ID0gc3RhdGljX2Nhc3Q8SFRNTFRh
YmxlUm93RWxlbWVudCo+KHJvd3MtPml0ZW0oaSkpOworICAgICAgICBjb2x1bW5zID0gcm93LT5j
ZWxscygpOworICAgICAgICBhY3R1YWxDb2xOdW0gPSBjb2x1bW5zLT5sZW5ndGgoKTsKKworICAg
ICAgICBpZiAoYWN0dWFsQ29sTnVtID4gY29sTnVtKSB7CisgICAgICAgICAgICBsYXN0Q29sID0g
c3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihjb2x1bW5zLT5pdGVtKGNvbE51bSAt
IDEpKTsKKworICAgICAgICAgICAgLy8gYWdncmVnYXRlIHRoZSByZWR1bmRhbnQgY29sdW1ucyBp
bnRvIHRoZSBsYXN0IGNvbHVtbgorICAgICAgICAgICAgbmV3Q2VsbCA9IG5ldyBIVE1MVGFibGVD
ZWxsRWxlbWVudChIVE1MTmFtZXM6OnRkVGFnLCBkb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGlm
IChuZXdDZWxsKQorICAgICAgICAgICAgICAgIG5ld0NlbGwtPmFkZENoaWxkKGxhc3RDb2wtPmNs
b25lTm9kZSh0cnVlKSk7CisKKyAgICAgICAgICAgIGlkeCA9IGNvbE51bTsKKyAgICAgICAgICAg
IHdoaWxlIChpZHggPCBhY3R1YWxDb2xOdW0pIHsKKyAgICAgICAgICAgICAgICBuZXdDZWxsLT5h
cHBlbmRDaGlsZChjb2x1bW5zLT5pdGVtKGlkeCsrKS0+Y2xvbmVOb2RlKHRydWUpLCBlYyk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcmVkdW5kYW50IGNvbHVt
bnMKKyAgICAgICAgICAgIGlkeCA9IGFjdHVhbENvbE51bTsKKyAgICAgICAgICAgIHdoaWxlIChp
ZHggPiBjb2xOdW0pIHsKKyAgICAgICAgICAgICAgICByb3ctPmRlbGV0ZUNlbGwoLS1pZHgsIGVj
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcm93LT5yZXBsYWNlQ2hpbGQobmV3Q2Vs
bCwgbGFzdENvbCwgZWMpOworCisgICAgICAgICAgICAvLyBjb252ZXJ0IHRoZSBhbGlnbiBhdHRy
aWJ1dGUgb2YgdGFibGUgZWxlbWVudCB0byB0aGF0IG9mIHRkIGVsZW1lbnQKKyAgICAgICAgICAg
IGNvbnZlcnRBbGlnbihjb2x1bW5zLCBjb2xOdW0pOworICAgICAgICB9IGVsc2UgaWYgKGFjdHVh
bENvbE51bSA8IGNvbE51bSkgeworICAgICAgICAgICAgY29udmVydEFsaWduKGNvbHVtbnMsIGFj
dHVhbENvbE51bSk7CisKKyAgICAgICAgICAgIC8vIGFwcGVuZCBlbXB0eSBjZWxscworICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpZHggPSBhY3R1YWxDb2xOdW07IGlkeCA8IGNvbE51bTsgKytp
ZHgpIHsKKyAgICAgICAgICAgICAgICByb3ctPmluc2VydENlbGwoLTEsIGVjKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIGFsaWdu
IGF0dHJpYnV0ZSBvZiB0YWJsZSBlbGVtZW50IHRvIHRoYXQgb2YgdGQgZWxlbWVudAorICAgICAg
ICAgICAgY29udmVydEFsaWduKGNvbHVtbnMsIGNvbE51bSk7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBzZXQgdGhlIGRlZmF1bHQgYWxpZ24gZm9yIGVhY2ggcm93CisgICAgICAgIHJvdy0+c2V0
QWxpZ24oImxlZnQiKTsKKworICAgIH0gLy8gZW5kIG9mIGZvciAoLi4uIAorCit9CisKK3ZvaWQg
V01MVGFibGVFbGVtZW50Ojpjb252ZXJ0QWxpZ24oUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4m
IGNvbHVtbnMsIHVuc2lnbmVkIGNlbGxOdW0pIAoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50
KiBjZWxsID0gMDsKKyAgICBTdHJpbmcgYWxpZ24gPSBnZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmFs
aWduQXR0cik7CisgICAgZm9yICh1bnNpZ25lZCBpZHggPSAwOyBpZHggPCBjZWxsTnVtOyArK2lk
eCkgeworICAgICAgICBjZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihj
b2x1bW5zLT5pdGVtKGlkeCkpOworICAgICAgICBpZiAoYWxpZ25baWR4XSA9PSAnUicgKSB7Cisg
ICAgICAgICAgICBjZWxsLT5zZXRBbGlnbigicmlnaHQiKTsKKyAgICAgICAgfSBlbHNlIGlmIChh
bGlnbltpZHhdID09ICdDJykgeworICAgICAgICAgICAgY2VsbC0+c2V0QWxpZ24oImNlbnRlciIp
OworICAgICAgICB9CisgICAgfSAKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93
bWwvV01MVGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFibGVF
bGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUYWJsZUVsZW1lbnQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGFibGVFbGVtZW50
X2gKKyNkZWZpbmUgV01MVGFibGVFbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1l
bnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFdNTFRhYmxlRWxlbWVudCA6IHB1YmxpYyBIVE1MVGFibGVFbGVtZW50eworcHVibGljOgor
ICAgIFdNTFRhYmxlRWxlbWVudChEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFRhYmxlRWxl
bWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0
dHJpYnV0ZSopOworCisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBjb252ZXJ0QWxpZ24oUGFz
c1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4mLCB1bnNpZ25lZCk7IAorfTsKKworfSAvLyBuYW1lc3Bh
Y2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUYWdOYW1lcy5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxUYWdOYW1lcy5pbgkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
d21sL1dNTFRhZ05hbWVzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACituYW1lc3Bh
Y2U9IldNTCIKK2NwcE5hbWVzcGFjZT0iV2ViQ29yZSIKK25hbWVzcGFjZVVSST0iaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvIgorZ2VuZXJhdGVGYWN0b3J5PSIxIgorZ2VuZXJhdGVXcmFwcGVyRmFj
dG9yeT0iMSIKKworY2FyZAorYQorYWNjZXNzCitoZWFkCittZXRhCit0ZW1wbGF0ZQord21sCiti
cgorcAordGFibGUKK3RkCit0cgorYgorYmlnCitlbQoraQorc21hbGwKK3N0cm9uZwordQorYW5j
aG9yCitpbWcKK2RvCitvbmV2ZW50Citwb3N0ZmllbGQKK2dvCitub29wCitwcmV2CityZWZyZXNo
CitmaWVsZHNldAoraW5wdXQKK29wdGdyb3VwCitvcHRpb24KK3NlbGVjdAorc2V0dmFyCit0aW1l
cgpJbmRleDogV2ViQ29yZS93bWwvV01MVGFza0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvd21sL1dNTFRhc2tFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21s
L1dNTFRhc2tFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5h
bWVzLmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJXTUxBbmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxl
bWVudC5oIgorI2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTElu
dHJpbnNpY0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK3RlbXBsYXRl
PGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3RvcjxU
Kiwgbj4gJiB2ZWMsIFQqIGl0ZW0pIAoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2ZWNb
aV0gPT0gaXRlbSkgeworICAgICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9Cit9CisgCitXTUxUYXNrRWxlbWVudDo6V01MVGFza0VsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFdNTEVsZW1l
bnQodGFnTmFtZSwgZG9jKSB7fQorCitXTUxUYXNrRWxlbWVudDo6fldNTFRhc2tFbGVtZW50KCkg
e30KKwordm9pZCBXTUxUYXNrRWxlbWVudDo6YmluZEludHJpbnNpY0V2ZW50SW5PbmV2ZW50KE5v
ZGUqIG9uZXZlbnROb2RlKQoreworICAgIFdNTEludHJFdmVudFR5cGUgdHlwZSA9IFVua25vd247
CisgICAgU3RyaW5nIHR5cGVBdHRyaSA9IHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihvbmV2ZW50
Tm9kZSktPmdldEF0dHJpYnV0ZSh0eXBlQXR0cik7CisKKyAgICBpZiAoV01MSGVscGVyOjpoYXNW
YXJpYWJsZVJlZih0eXBlQXR0cmkpKSB7CisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCkt
PnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICh0eXBlQXR0cmkgPT0gIm9uZW50ZXJmb3J3YXJkIikgewor
ICAgICAgICB0eXBlID0gT25FbnRlckZvcndhcmQ7CisgICAgfSBlbHNlIGlmICh0eXBlQXR0cmkg
PT0gIm9uZW50ZXJiYWNrd2FyZCIpIHsKKyAgICAgICAgdHlwZSA9IE9uRW50ZXJCYWNrd2FyZDsK
KyAgICB9IGVsc2UgaWYgKHR5cGVBdHRyaSA9PSAib250aW1lciIpIHsKKyAgICAgICAgdHlwZSA9
IE9uVGltZXI7CisgICAgfSBlbHNlIGlmICh0eXBlQXR0cmkgPT0gIm9ucGljayIpIHsKKyAgICAg
ICAgdHlwZSA9IE9uUGljazsKKyAgICB9CisKKyAgICBpZiAodHlwZSA9PSBVbmtub3duKQorICAg
ICAgICByZXR1cm47CisKKyAgICBXTUxJbnRyaW5zaWNFdmVudCBldjsKKyAgICBldi50YXNrID0g
dGhpczsKKyAgICBpZiAoaGFzVGFnTmFtZShnb1RhZykpIHsKKyAgICAgICAgU3RyaW5nIGhyZWYg
PSBnZXRBdHRyaWJ1dGUoaHJlZkF0dHIpOworICAgICAgICBldi50YXJnZXRVUkkgPSBXTUxIZWxw
ZXI6OnN1YnN0aXR1dGVWYXJSZWYoaHJlZiwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAgIH0K
KworICAgIC8vcmVnaXN0ZXIgaW50cmluc2ljIGV2ZW50IHRvIHRoZSBldmVudCBoYW5kbGVyIG9m
IHRoZSBvd25lciBvZiBvbmV2ZW50IGVsZW1lbnQgCisgICAgTm9kZSogcGFyZW50ID0gb25ldmVu
dE5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2SGFu
ZGxlciA9IDA7CisgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShjYXJkVGFnKSkgeworICAgICAg
ICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4ocGFy
ZW50KTsKKyAgICAgICAgY2FyZC0+c2V0SGFzSW50ckV2ZW50KHRydWUpOworICAgICAgICBldkhh
bmRsZXIgPSBjYXJkLT5ldmVudEhhbmRsZXIoKTsKKyAgICB9IGVsc2UgaWYgKHBhcmVudC0+aGFz
VGFnTmFtZSh0ZW1wbGF0ZVRhZykpIHsKKyAgICAgICAgV01MVGVtcGxhdGVFbGVtZW50KiB0ZW1w
bCA9IHN0YXRpY19jYXN0PFdNTFRlbXBsYXRlRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgIHRl
bXBsLT5zZXRIYXNJbnRyRXZlbnQodHJ1ZSk7CisgICAgICAgIGV2SGFuZGxlciA9IHRlbXBsLT5l
dmVudEhhbmRsZXIoKTsKKyAgICB9IGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShvcHRpb25U
YWcpKSB7CisgICAgICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdN
TE9wdGlvbkVsZW1lbnQqPihwYXJlbnQpOworICAgICAgICBvcHRpb24tPnNldEhhc0ludHJFdmVu
dCh0cnVlKTsKKyAgICAgICAgZXZIYW5kbGVyID0gb3B0aW9uLT5ldmVudEhhbmRsZXIoKTsKKyAg
ICB9CisKKyAgICBpZiAoZXZIYW5kbGVyKQorICAgICAgICBldkhhbmRsZXItPnJlZ2lzdGVySW50
cmluc2ljRXZlbnQodHlwZSwgZXYpOworfQorCit2b2lkIFdNTFRhc2tFbGVtZW50OjppbnNlcnRl
ZEludG9UcmVlKGJvb2wgZGVlcCkgCit7CisgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnRO
b2RlKCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKworICAgICAg
ICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGRvVGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nh
c3Q8V01MRG9FbGVtZW50Kj4ocGFyZW50KS0+cmVnaXN0ZXJUYXNrKHRoaXMpOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAocGFyZW50LT5sb2NhbE5hbWUoKSA9PSAib25l
dmVudCIpIHsKKyAgICAgICAgICAgIC8vYmluZGluZyB0aGlzIHRhc2sgd2l0aCBpbnRyaW5zaWMg
ZXZlbnQgc3BlY2lmaWVkIGJ5IG9uZXZlbnQgdHlwZQorICAgICAgICAgICAgYmluZEludHJpbnNp
Y0V2ZW50SW5PbmV2ZW50KHBhcmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBl
bHNlIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoYW5jaG9yVGFnKSkgeworICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8V01MQW5jaG9yRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyVGFzayh0aGlzKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9Cit9CisKK3ZvaWQgV01MVGFz
a0VsZW1lbnQ6OnJlZ2lzdGVyU2V0dmFyRWxlbWVudChXTUxTZXR2YXJFbGVtZW50KiBlKSAKK3sK
KyAgICBtX3NldHZhcnMuYXBwZW5kKGUpOworfQorCit2b2lkIFdNTFRhc2tFbGVtZW50OjpyZW1v
dmVTZXR2YXJFbGVtZW50KFdNTFNldHZhckVsZW1lbnQqIGUpIAoreworICAgIHJlbW92ZUZyb21W
ZWN0b3IobV9zZXR2YXJzLCBlKTsKK30KKworYm9vbCBXTUxUYXNrRWxlbWVudDo6aGFzU2V0dmFy
KCkgY29uc3QgCit7CisgICAgcmV0dXJuICFtX3NldHZhcnMuaXNFbXB0eSgpOworfQorCit9Cklu
ZGV4OiBXZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d21sL1dNTFRhc2tFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUYXNr
RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxU
YXNrRWxlbWVudF9oCisjZGVmaW5lIFdNTFRhc2tFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVs
ZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxTZXR2YXJFbGVtZW50
OworCitjbGFzcyBXTUxUYXNrRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50IHsKK3B1YmxpYzoK
KyAgICBXTUxUYXNrRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCogZG9jKTsKKyAgICB2aXJ0dWFsIH5XTUxUYXNrRWxlbWVudCgpOworICAKKyAgICB2aXJ0dWFs
IHZvaWQgZXhlYyhFdmVudCosIFN0cmluZyB1cmkgPSBTdHJpbmcoKSkgPSAwIDsKKworICAgIHZp
cnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7CisKKyAgICB2aXJ0dWFsIHZv
aWQgcmVnaXN0ZXJTZXR2YXJFbGVtZW50KFdNTFNldHZhckVsZW1lbnQqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlU2V0dmFyRWxlbWVudChXTUxTZXR2YXJFbGVtZW50Kik7CisgICAgYm9vbCBo
YXNTZXR2YXIoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIFZlY3RvcjxXTUxTZXR2YXJFbGVt
ZW50Kj4gbV9zZXR2YXJzOworCitwcml2YXRlOgorICAgIHZvaWQgYmluZEludHJpbnNpY0V2ZW50
SW5PbmV2ZW50KE5vZGUqKTsKKworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6
IFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS93bWwvV01MVGVtcGxhdGVFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21s
L1dNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNs
dWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUg
IlJlbmRlckFyZW5hLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxHb0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQu
aCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3Rv
cnkuaCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tl
bml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFt
ZXM7CisKK1dNTFRlbXBsYXRlRWxlbWVudDo6V01MVGVtcGxhdGVFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05h
bWUsIGRvYykKKyAgICAsIG1fZXZudEhhbmRsZXIoMCkKKyAgICAsIG1faGFzSW50ckV2ZW50KGZh
bHNlKSAKK3sKK30KKworV01MVGVtcGxhdGVFbGVtZW50Ojp+V01MVGVtcGxhdGVFbGVtZW50KCkg
Cit7CisgICAgaWYgKG1fZXZudEhhbmRsZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fZXZudEhhbmRs
ZXI7CisgICAgICAgIG1fZXZudEhhbmRsZXIgPSAwOworICAgIH0KKworfQorCit2b2lkIFdNTFRl
bXBsYXRlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRy
KQoreworICAgIFdNTEludHJFdmVudFR5cGUgZXR5cGUgPSBVbmtub3duOworCisgICAgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbmVudGVyZm9yd2FyZEF0dHIpIHsKKyAgICAgICAgZXR5cGUgPSBPbkVu
dGVyRm9yd2FyZDsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVudGVyYmFja3dh
cmRBdHRyKSB7CisgICAgICAgIGV0eXBlID0gT25FbnRlckJhY2t3YXJkOworICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IG9udGltZXJBdHRyKSB7CisgICAgICAgIGV0eXBlID0gT25UaW1l
cjsKKyAgICB9CisgICAgCisgICAgLy8gcmVnaXN0ZXIgaW50cmluc2ljIGV2ZW50IHRvIHRlbXBs
YXRlIAorICAgIGlmIChldHlwZSAhPSBVbmtub3duKSB7CisKKyAgICAgICAgaWYgKCFtX2V2bnRI
YW5kbGVyKSB7CisgICAgICAgICAgICBtX2V2bnRIYW5kbGVyID0gbmV3IFdNTEludHJpbnNpY0V2
ZW50SGFuZGxlcigpOworICAgICAgICB9CisKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgIFF1YWxpZmllZE5hbWUgcU5hbWUoImdvIiwgImdvIiwgIiIpOworICAgICAgICBF
bGVtZW50KiBnbyA9IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KHFOYW1lLCBk
b2N1bWVudCgpLCBmYWxzZSk7IAorICAgICAgICBTdHJpbmcgaHJlZiA9IFdNTEhlbHBlcjo6c3Vi
c3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLCAiZXNjYXBlIik7CisgICAg
ICAgIGdvLT5zZXRBdHRyaWJ1dGVOUygiIiwgImhyZWYiLCBocmVmLCBlYyk7CisKKyAgICAgICAg
V01MSW50cmluc2ljRXZlbnQgZXY7CisgICAgICAgIGV2LnRhc2sgPSBzdGF0aWNfY2FzdDxXTUxH
b0VsZW1lbnQqPihnbyk7CisgICAgICAgIGV2LnRhcmdldFVSSSA9IGhyZWY7IAorCisgICAgICAg
IHNldEhhc0ludHJFdmVudCh0cnVlKTsKKyAgICAgICAgbV9ldm50SGFuZGxlci0+cmVnaXN0ZXJJ
bnRyaW5zaWNFdmVudChldHlwZSwgZXYpOworICAgIH0KK30KKworV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyKiBXTUxUZW1wbGF0ZUVsZW1lbnQ6OmV2ZW50SGFuZGxlcigpCit7CisgICAgaWYgKG1f
aGFzSW50ckV2ZW50ICYmICFtX2V2bnRIYW5kbGVyKSAgeworICAgICAgICBtX2V2bnRIYW5kbGVy
ID0gbmV3IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworICAgIH0KKworICAgIHJldHVybiBt
X2V2bnRIYW5kbGVyOworfQorCit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6c2V0SGFzSW50ckV2
ZW50KGJvb2wgaGFzKSB7CisgICAgbV9oYXNJbnRyRXZlbnQgPSBoYXM7Cit9CisKK2Jvb2wgV01M
VGVtcGxhdGVFbGVtZW50OjpoYXNJbnRyRXZlbnQoKSB7CisgICAgcmV0dXJuIG1faGFzSW50ckV2
ZW50OworfQorCit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6cmVnaXN0ZXJEb0VsZW1lbnQoV01M
RG9FbGVtZW50KiBkb2UpCit7CisgICAgaWYgKGRvZSkgeworICAgICAgICBWZWN0b3I8V01MRG9F
bGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9kb1ZlY3MuYmVnaW4oKTsKKyAgICAgICAgV01MRG9F
bGVtZW50KiBlID0gMDsKKyAgICAgICAgd2hpbGUgKGl0ICE9IG1fZG9WZWNzLmVuZCgpKSB7Cisg
ICAgICAgICAgICBlID0gc3RhdGljX2Nhc3Q8V01MRG9FbGVtZW50Kj4oKml0KyspOworICAgICAg
ICAgICAgaWYgKGUtPmRvTmFtZSgpID09IGRvZS0+ZG9OYW1lKCkpIHsKKyAgICAgICAgICAgICAg
ICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihTYW1lTmFtZURvRWxlbWVudHNF
cnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIG1fZG9WZWNzLmFwcGVuZChkb2UpOworICAgIH0KK30KKworVmVjdG9yPFdNTERv
RWxlbWVudCo+IFdNTFRlbXBsYXRlRWxlbWVudDo6Z2V0RG9FbGVtZW50cygpCit7CisgICAgcmV0
dXJuIG1fZG9WZWNzOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuaAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVudC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUZW1wbGF0ZUVsZW1lbnRfaAorI2Rl
ZmluZSBXTUxUZW1wbGF0ZUVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50OworY2xhc3MgV01MRG9FbGVtZW50OworCitjbGFzcyBX
TUxUZW1wbGF0ZUVsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01M
VGVtcGxhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZp
cnR1YWwgfldNTFRlbXBsYXRlRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworCisgICAgV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyKiBldmVudEhhbmRsZXIoKTsKKyAgICBib29sIGhhc0ludHJFdmVudCgpOworICAgIHZv
aWQgc2V0SGFzSW50ckV2ZW50KGJvb2wpOworCisgICAgdm9pZCByZWdpc3RlckRvRWxlbWVudChX
TUxEb0VsZW1lbnQqKTsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gZ2V0RG9FbGVtZW50cygp
OworcHJpdmF0ZToKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIG1fZXZudEhhbmRsZXI7
CisgICAgYm9vbCBtX2hhc0ludHJFdmVudDsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gbV9k
b1ZlY3M7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwv
V01MVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGV4dC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUZXh0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxUZXh0LmgiCisj
aW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV01MVGV4dDo6V01MVGV4
dChEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBUZXh0KGRvYywgdGV4
dCkge30KKworV01MVGV4dDo6fldNTFRleHQoKSB7fQorCit2b2lkIFdNTFRleHQ6OnVwZGF0ZURh
dGFJZk5lZWRlZCgpIAoreworICAgIGlmIChsZW5ndGgoKSA+IDEgJiYgV01MSGVscGVyOjpjdXJy
ZW50QnJ3Q29udGV4dCgpLT5oYXNWYXJpYWJsZXMoKSkgeworICAgICAgICBTdHJpbmcgdGV4dCA9
IGRhdGEoKTsKKyAgICAgICAgaWYgKCF0ZXh0LmltcGwoKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFj
ZSgpKSB7CisgICAgICAgICAgICB0ZXh0ID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHRl
eHQsIGRvY3VtZW50KCkpOworCisgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGU7CisgICAgICAg
ICAgICBzZXREYXRhKHRleHQsIGUpOworICAgICAgICB9CisgICAgfQorfQorCisKK30gLy9uYW1l
c3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRleHQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3dtbC9XTUxUZXh0LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUZXh0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTFRleHRfaAorI2RlZmlu
ZSBXTUxUZXh0X2gKKworI2luY2x1ZGUgIlRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgV01MVGV4dCA6IHB1YmxpYyBUZXh0IHsKK3B1Ymxp
YzoKKyAgICBXTUxUZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB+
V01MVGV4dCgpOworCisgICAgdm9pZCB1cGRhdGVEYXRhSWZOZWVkZWQoKTsKK307CisKK30gLy8g
bmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MVGltZXJFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUaW1lckVsZW1lbnQuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MVGltZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MVGlt
ZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAi
V01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxU
b2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01M
TmFtZXM7CisKK1dNTFRpbWVyRWxlbWVudDo6V01MVGltZXJFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUs
IGRvYykKKyAgICAgICwgbV9jYXJkKDApCisgICAgICAsIG1fdGltZXIodGhpcywgJldNTFRpbWVy
RWxlbWVudDo6dGltZXJGaXJlZCkKK3sKK30KKworV01MVGltZXJFbGVtZW50Ojp+V01MVGltZXJF
bGVtZW50KCkge30KKwordm9pZCBXTUxUaW1lckVsZW1lbnQ6OnRpbWVyRmlyZWQoVGltZXI8V01M
VGltZXJFbGVtZW50PiopCit7CisgICAgaWYgKCFtX2NhcmQpIAorICAgICAgICByZXR1cm47CisK
KyAgICAvL3doZW4gdGhlIHRpbWVyIGV4cGlyZXMsIHNldCB0aGUgbmFtZSB2YXJpYWxiZSBvZiB0
aW1lciB0byAnMCcKKyAgICBpZiAoIW1fbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV92YWx1
ZSA9ICIwIjsKKyAgICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9yZVZh
cmlhYmxlKG1fbmFtZSwgbV92YWx1ZSk7CisgICAgfQorCisgICAgV01MSW50ckV2ZW50VHlwZSBl
dHlwZSA9IE9uVGltZXI7CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBldkhhbmRsZXIg
PSBtX2NhcmQtPmV2ZW50SGFuZGxlcigpOworICAgIGJvb2wgaGFzSW50ckV2ZW50ID0gIGZhbHNl
OworICAgIGlmIChldkhhbmRsZXIgJiYgZXZIYW5kbGVyLT5oYXNJbnRyaW5zaWNFdmVudChldHlw
ZSkpIHsKKyAgICAgICAgICAgIGhhc0ludHJFdmVudCA9IHRydWU7CisgICAgfSBlbHNlIGlmICht
X2NhcmQtPnRlbXBsYXRlRWxlbWVudCgpKSB7CisgICAgICAgIGV2SGFuZGxlciA9IG1fY2FyZC0+
dGVtcGxhdGVFbGVtZW50KCktPmV2ZW50SGFuZGxlcigpOworICAgICAgICBpZiAoZXZIYW5kbGVy
ICYmIGV2SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQoZXR5cGUpKQorICAgICAgICAgICAgaGFz
SW50ckV2ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaGFzSW50ckV2ZW50KSB7CisgICAg
ICAgIGV2SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2ZW50KGV0eXBlKTsKKyAgICB9Cit9CisK
K3ZvaWQgV01MVGltZXJFbGVtZW50OjpzdGFydChpbnQgaW50ZXJ2YWwpCit7CisgICAgaWYgKG1f
Y2FyZCAmJiAhbV90aW1lci5pc0FjdGl2ZSgpKSB7CisgICAgICAgIAorICAgICAgICBpZiAoKGlu
dGVydmFsIDw9IDApICYmICFtX25hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgU3Ry
aW5nIHRpbWVvdXQgPSBXTUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPmdldFZhcmliYWxl
KG1fbmFtZSk7IAorICAgICAgICAgICAgICAgIGludGVydmFsID0gdGltZW91dC50b0ludCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGludGVydmFsIDw9IDApCisgICAgICAgICAgICBpbnRl
cnZhbCA9IG1fdmFsdWUudG9JbnQoKTsKKworICAgICAgICBpZiAoaW50ZXJ2YWwgPiAwKQorICAg
ICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwvMTAuMCk7CisgICAgfQorfQor
Cit2b2lkIFdNTFRpbWVyRWxlbWVudDo6c3RvcCgpCit7CisgICAgaWYgKG1fdGltZXIuaXNBY3Rp
dmUoKSkKKyAgICAgICAgbV90aW1lci5zdG9wKCk7Cit9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpIAoreworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKCFXTUxIZWxwZXI6Omlz
VmFsaWRWYXJpYWJsZU5hbWUoYXR0ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIFdNTEhlbHBl
cjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZU5hbWVFcnJvcik7Cisg
ICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKKworICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikgeworICAgICAgICBtX3ZhbHVl
ID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkp
OworICAgIH0KK30KKwordm9pZCBXTUxUaW1lckVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9v
bCBkZWVwKQoreworICAgIC8vIFRoZSB2YWx1ZSBvZiB0aW1lb3V0IG11c3QgYmUgYSBwb3NpdGl2
ZSBpbnRlZ3JhbCBudW1iZXIsIG9yIGlnbm9yZSBpdAorICAgIGlmIChtX3ZhbHVlLnRvSW50KCkg
PiAwKSB7CisgICAgICAgIGZvciAoTm9kZSogcGFyZW50ID0gcGFyZW50Tm9kZSgpOyBwYXJlbnQ7
IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAgICAgICBpZiAocGFyZW50
LT5oYXNUYWdOYW1lKGNhcmRUYWcpKSB7CisgICAgICAgICAgICAgICAgbV9jYXJkID0gc3RhdGlj
X2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihwYXJlbnQpOworICAgICAgICAgICAgICAgIG1fY2FyZC0+
c2V0SW50ckV2ZW50VGltZXIodGhpcyk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50OjpzdG9y
ZUludGVydmFsVG9CcndDb250ZXh0KCkKK3sKKyAgICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKSB7
CisgICAgICAgIGludCBpbnRlcnZhbCA9IHN0YXRpY19jYXN0PGludD4obV90aW1lci5uZXh0Rmly
ZUludGVydmFsKCkpKjEwOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBTdHJpbmc6Om51bWJlcihp
bnRlcnZhbCk7CisKKyAgICAgICAgV01MSGVscGVyOjpjdXJyZW50QnJ3Q29udGV4dCgpLT5zdG9y
ZVZhcmlhYmxlKG1fbmFtZSwgdmFsdWUpOworICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS93
bWwvV01MVGltZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGltZXJF
bGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUaW1lckVsZW1lbnQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGltZXJFbGVtZW50
X2gKKyNkZWZpbmUgV01MVGltZXJFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTENh
cmRFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTFRpbWVyRWxlbWVu
dCA6IHB1YmxpYyBXTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxUaW1lckVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxU
aW1lckVsZW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBk
ZWVwKTsKKworICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxXTUxUaW1lckVsZW1lbnQ+Kik7Cisg
ICAgdm9pZCBzdGFydChpbnQgaW50ZXJ2YWwgPSAtMSk7CisgICAgdm9pZCBzdG9wKCk7CisgICAg
dm9pZCBzdG9yZUludGVydmFsVG9CcndDb250ZXh0KCk7CisKK3ByaXZhdGU6CisgICAgV01MQ2Fy
ZEVsZW1lbnQqIG1fY2FyZDsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmluZyBtX3ZhbHVl
OworICAgIFRpbWVyPFdNTFRpbWVyRWxlbWVudD4gbV90aW1lcjsKK307CisKK30gLy9uYW1lc3Bh
Y2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3dtbC9XTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM1NiBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNs
dWRlICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3RvcnkuaCIKKyNpbmNs
dWRlICJXTUxCcndDb250ZXh0LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAi
V01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxQRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRleHQuaCIKKyNpbmNsdWRl
ICJOb2RlTGlzdC5oIgorCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIkhpc3RvcnlJdGVt
LmgiCisKKyNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJDYWNoZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJD
b21tZW50LmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
KyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgi
CisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHls
ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIK
KyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5o
IgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2UuaCIKKyNpZm5kZWYgVVNFX1FYTUxTVFJFQU0K
KyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VyLmg+CisjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVy
bmFscy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxRRGVidWc+CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYv
UGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBFTkFCTEUoWFNMVCkK
KyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQuaD4KKyNlbmRpZgorCisjaWYgRU5BQkxFKFNWRykKKyNp
bmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNWR1N0eWxlRWxlbWVudC5oIgorI2luY2x1
ZGUgIlhMaW5rTmFtZXMuaCIKKyNlbmRpZgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFt
ZXNwYWNlIEhUTUxOYW1lczsKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworV01MVG9rZW5pemVyOjpXTUxUb2tlbml6ZXIoRG9jdW1lbnQqIF9kb2MsIEZyYW1lVmlldyog
X3ZpZXcpCis6IFhNTFRva2VuaXplcihfZG9jLCBfdmlldykgCit7CisgICAgbV9jdXJyZW50Tm9k
ZSA9IF9kb2M7CisgICAgbV9lcnJvckNvZGUgPSBOb0Vycm9yOworICAgICAKKyAgICBXTUxIZWxw
ZXI6OnNldFRva2VuaXplcih0aGlzKTsKK30KKworCitXTUxUb2tlbml6ZXI6On5XTUxUb2tlbml6
ZXIoKSB7fQorCisKK2Jvb2wgV01MVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJp
bmcmIHMsIGJvb2wgLyphcHBlbmREYXRhKi8pIAoreworI2lmbmRlZiBVU0VfUVhNTFNUUkVBTQor
ICAgIFhNTFRva2VuaXplcjo6d3JpdGUocywgdHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7CisjZWxz
ZQorCisgICAgc3RhdGljIFFYbWxTdHJlYW1SZWFkZXI6OlRva2VuVHlwZSBvbGRUeXBlID0gUVht
bFN0cmVhbVJlYWRlcjo6Tm9Ub2tlbjsKKworICAgIG1fc3RyZWFtLmFkZERhdGEoUVN0cmluZyhz
LnRvU3RyaW5nKCkpKTsKKworICAgIHdoaWxlICghbV9zdHJlYW0uYXRFbmQoKSkgeworICAgICAg
ICBtX3N0cmVhbS5yZWFkTmV4dCgpOworICAgICAgICBzd2l0Y2ggKG1fc3RyZWFtLnRva2VuVHlw
ZSgpKSB7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RG9jdW1lbnQ6
CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVuZERvY3VtZW50OgorICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpTdGFy
dEVsZW1lbnQ6IHsKKyAgICAgICAgICAgICAgICBpZiAob2xkVHlwZSAhPSBRWG1sU3RyZWFtUmVh
ZGVyOjpEVEQpIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlV01MRXJyb3IoRG9jVHlwZURl
Y2xhcmF0aW9uTWlzc0Vycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBXTUxQYXJzZVN0YXJ0RWxlbWVudCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBRWG1sU3RyZWFtUmVhZGVyOjpFbmRFbGVtZW50OiB7CisgICAgICAgICAgICAgICAgV01MUGFy
c2VFbmRFbGVtZW50KCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNoYXJhY3RlcnM6IHsKKyAgICAgICAg
ICAgICAgICBpZiAobV9zdHJlYW0uaXNDREFUQSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ZXhpdFRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9
IG5ldyBDREFUQVNlY3Rpb24obV9kb2MsIG1fc3RyZWFtLnRleHQoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgaWYgKCFtX2N1cnJlbnROb2RlLT5hZGRDaGlsZChuZXdOb2RlLmdldCgpKSkKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgaWYg
KG1fdmlldyAmJiAhbmV3Tm9kZS0+YXR0YWNoZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmV3Tm9kZS0+YXR0YWNoKCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKG1fY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSB8fCBlbnRlclRleHQo
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAg
ICAgICAgICAgICAgICAgICAgICBXTUxUZXh0KiB0ZXh0ID0gc3RhdGljX2Nhc3Q8V01MVGV4dCo+
KG1fY3VycmVudE5vZGUpOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4dC0+YXBwZW5kRGF0
YShtX3N0cmVhbS50ZXh0KCksIGVjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtPnVw
ZGF0ZURhdGFJZk5lZWRlZCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY3Vy
cmVudE5vZGUtPmF0dGFjaGVkKCkpIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY3Vy
cmVudE5vZGUtPmF0dGFjaCgpOworCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgICAgICAg
ICAgICAgaGFuZGxlV01MRXJyb3IoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpF
bnRpdHlSZWZlcmVuY2U6IHsKKyAgICAgICAgICAgICAgICBRU3RyaW5nIGVudGl0eSA9IG1fc3Ry
ZWFtLm5hbWUoKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIFVDaGFyIGMgPSBkZWNvZGVO
YW1lZEVudGl0eShlbnRpdHkudG9VdGY4KCkuY29uc3REYXRhKCkpOworCisgICAgICAgICAgICAg
ICAgaWYgKG1fY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSB8fCBlbnRlclRleHQoKSkgeworICAg
ICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICAg
ICAgU3RyaW5nIHN0cigmYywgMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRl
eHQqPihtX2N1cnJlbnROb2RlKS0+YXBwZW5kRGF0YShzdHIsIGVjKTsKKyAgICAgICAgICAgICAg
ICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBj
YXNlIFFYbWxTdHJlYW1SZWFkZXI6OkNvbW1lbnQ6IHsKKyAgICAgICAgICAgICAgICBwYXJzZUNv
bW1lbnQoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6UHJvY2Vzc2luZ0luc3RydWN0aW9uOiB7CisgICAg
ICAgICAgICAgICAgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRl
cjo6RFREOiB7CisgICAgICAgICAgICAgICAgb2xkVHlwZSA9IFFYbWxTdHJlYW1SZWFkZXI6OkRU
RDsKKyAgICAgICAgICAgICAgICBwYXJzZUR0ZCgpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIGlm
IChtX3N0cmVhbS5lcnJvcigpICE9IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9j
dW1lbnRFcnJvcikgeworICAgICAgICAgICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9IChtX3N0
cmVhbS5lcnJvcigpID09IFFYbWxTdHJlYW1SZWFkZXI6Ok5vdFdlbGxGb3JtZWRFcnJvcikgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhdGFsIDogd2FybmluZzsKKyAg
ICAgICAgICAgICAgICAgICAgaGFuZGxlRXJyb3IodHlwZSwgcVByaW50YWJsZShtX3N0cmVhbS5l
cnJvclN0cmluZygpKSwgbGluZU51bWJlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBjb2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIH0gLy8gZW5kIG9mIHN3aXRjaCAoLi4u
CisgICAgfSAvLyBlbmQgb2Ygd2hpbGUgKC4uLgorCisgICAgcmV0dXJuIHRydWU7CisjZW5kaWYK
KworfQorCit2b2lkIFdNTFRva2VuaXplcjo6dXBkYXRlQXR0cnNJZk5lZWRlZChFbGVtZW50KiBl
bGVtZW50LCBjb25zdCBTdHJpbmcmIGxvY2FsTmFtZSkKK3sKKyAgICAvLyB1cGRhdGUgYXRycmli
dXRlcyBvZiBvcHRvaW4gZWxlbWVudCBpZiBuZWVkZWQKKyAgICBpZiAobG9jYWxOYW1lID09ICJv
cHRpb24iKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oZWxlbWVudCkt
PnVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gInNlbGVj
dCIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihlbGVtZW50KS0+dXBk
YXRlQXR0cnNJZk5lZWRlZCgpOworICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSAiaW5wdXQiKQor
ICAgICAgICBzdGF0aWNfY2FzdDxXTUxJbnB1dEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlQXR0
cnNJZk5lZWRlZCgpOworICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSAiaW1nIikKKyAgICAgICAg
c3RhdGljX2Nhc3Q8V01MSW1hZ2VFbGVtZW50Kj4oZWxlbWVudCktPnVwZGF0ZUF0dHJzSWZOZWVk
ZWQoKTsKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gInAiKQorICAgICAgICBzdGF0aWNfY2Fz
dDxXTUxQRWxlbWVudCo+KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7Cit9CisKKyNp
ZmRlZiBVU0VfUVhNTFNUUkVBTQordm9pZCBXTUxUb2tlbml6ZXI6OldNTFBhcnNlU3RhcnRFbGVt
ZW50KCkKK3sKKyAgICBleGl0VGV4dCgpOworCisgICAgUVN0cmluZyBsb2NhbE5hbWUgPSBtX3N0
cmVhbS5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICBRU3RyaW5nIHVyaSAgICAgICA9IG1fc3RyZWFt
Lm5hbWVzcGFjZVVyaSgpLnRvU3RyaW5nKCk7CisgICAgUVN0cmluZyBwcmVmaXggICAgPSBtX3N0
cmVhbS5xdWFsaWZpZWROYW1lKCkudG9TdHJpbmcoKTsKKworICAgIGlmIChsb2NhbE5hbWUgPT0g
ImFjY2VzcyIpCisgICAgICAgIFdNTEhlbHBlcjo6Y3VycmVudEJyd0NvbnRleHQoKS0+c2V0TmVl
ZENoZWNrRGVja0FjY2Vzcyh0cnVlKTsKKworICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
IFF1YWxpZmllZE5hbWUgcU5hbWUocHJlZml4LCBsb2NhbE5hbWUsIHVyaSk7CisgICAgRWxlbWVu
dCogbmV3RWxlbWVudCA9IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KHFOYW1l
LCBtX2RvYywgdHJ1ZSkgOworCisgICAgUVhtbFN0cmVhbUF0dHJpYnV0ZXMgYXR0cnMgPSBtX3N0
cmVhbS5hdHRyaWJ1dGVzKCk7CisgICAgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhdHRycy5j
b3VudCgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgUVhtbFN0cmVhbUF0dHJpYnV0ZSAmYXR0ciA9
IGF0dHJzW2ldOworICAgICAgICBTdHJpbmcgYXR0ckxvY2FsTmFtZSA9IGF0dHIubmFtZSgpOwor
ICAgICAgICBTdHJpbmcgYXR0clZhbHVlICAgICA9IGF0dHIudmFsdWUoKTsKKyAgICAgICAgU3Ry
aW5nIGF0dHJVUkkgICAgICAgPSBhdHRyLm5hbWVzcGFjZVVyaSgpLmlzRW1wdHkoKSA/IFN0cmlu
ZygpIDogU3RyaW5nKGF0dHIubmFtZXNwYWNlVXJpKCkpOworICAgICAgICBTdHJpbmcgYXR0clFO
YW1lICAgICA9IGF0dHIucXVhbGlmaWVkTmFtZSgpOworCisgICAgICAgIG5ld0VsZW1lbnQtPnNl
dEF0dHJpYnV0ZU5TKGF0dHJVUkksIGF0dHJRTmFtZSwgYXR0clZhbHVlLCBlYyk7CisgICAgfQor
CisgICAgdXBkYXRlQXR0cnNJZk5lZWRlZChuZXdFbGVtZW50LCBsb2NhbE5hbWUpOworCisgICAg
aWYgKCFtX2N1cnJlbnROb2RlLT5hZGRDaGlsZChuZXdFbGVtZW50KSkgeworICAgICAgICBzdG9w
UGFyc2luZygpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNldEN1cnJlbnROb2RlKG5l
d0VsZW1lbnQpOworCisgICAgaWYgKCFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQorICAgICAgICBu
ZXdFbGVtZW50LT5hdHRhY2goKTsgCisKKyAgICBpZiAoaGFzRXJyb3IoKSkKKyAgICAgICAgaGFu
ZGxlV01MRXJyb3IoKTsKK30KKwordm9pZCBXTUxUb2tlbml6ZXI6OldNTFBhcnNlRW5kRWxlbWVu
dCgpIAoreworCisgICAgZXhpdFRleHQoKTsKKworICAgIE5vZGUqIG4gPSBtX2N1cnJlbnROb2Rl
OworCisgICAgUmVmUHRyPE5vZGU+IHBhcmVudCA9IG4tPnBhcmVudE5vZGUoKTsKKyAgICBuLT5m
aW5pc2hlZFBhcnNpbmcoKTsKKworICAgIHNldEN1cnJlbnROb2RlKHBhcmVudC5nZXQoKSk7CisK
K30KKyNlbmRpZgorCit2b2lkIFdNTFRva2VuaXplcjo6ZmluaXNoKCkgCit7CisgICAgaWYgKCFX
TUxIZWxwZXI6OmN1cnJlbnRCcndDb250ZXh0KCktPmlzRGVja0FjY2Vzc2libGUoKSkgeworICAg
ICAgICBYTUxUb2tlbml6ZXI6OmZpbmlzaCgpOworICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRC
cndDb250ZXh0KCktPnBhZ2UoKS0+Z29CYWNrKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICAvLyBub3RpZnkgdGhlIGV4aXN0YW5jZSBvZiB0ZW1wbGF0ZSB0byBhbGwgdGhlIGNhcmRz
IG9mIGN1cnJlbnQgZGVjaworICAgIFdNTEhlbHBlcjo6cmVnaXN0ZXJUZW1wbGF0ZVRvQ2FyZHMo
bV9kb2MpOworCisgICAgLy8gZGV0ZXJtaW5lIHRoZSBkZXN0aW5hdGlvbiBjYXJkCisgICAgV01M
Q2FyZEVsZW1lbnQqIGNhcmQgPSBXTUxIZWxwZXI6OnNldERlc3RpbmF0aW9uQ2FyZChtX2RvYyk7
CisKKyAgICBpZiAoY2FyZCkgeworICAgICAgICAvLyBzaGFkb3cgdGhlIGRlY2stbGV2ZWwgZG8g
aWYgbmVlZGVkCisgICAgICAgIGNhcmQtPnNoYWRvd0RvRWxlbWVudElmTmVlZGVkKCk7CisKKyAg
ICAgICAgLy9oYW5kbGUgdGhlIGludHJpbnNpYyBldmVudAorICAgICAgICBjYXJkLT5oYW5kbGVJ
bnRyRXZlbnRJZk5lZWRlZCgpOworICAgIH0KKworICAgIFhNTFRva2VuaXplcjo6ZmluaXNoKCk7
CisKKyAgICBpZiAoY2FyZCkKKyAgICAgICAgY2FyZC0+dXBkYXRlVGFibGVFbGVtZW50KCk7Cit9
CisKK3ZvaWQgV01MVG9rZW5pemVyOjpyZXBvcnRFcnJvcihXTUxFcnJvckNvZGUgZXJyb3IpCit7
CisgICAgbV9lcnJvckNvZGUgPSBlcnJvcjsKK30KKworYm9vbCBXTUxUb2tlbml6ZXI6Omhhc0Vy
cm9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fZXJyb3JDb2RlICE9IE5vRXJyb3IpOworfQor
IAordm9pZCBXTUxUb2tlbml6ZXI6OmhhbmRsZVdNTEVycm9yKFdNTEVycm9yQ29kZSBlcnJvckNv
ZGUpCit7CisgICAgaWYgKGVycm9yQ29kZSAhPSBOb0Vycm9yKQorICAgICAgICBtX2Vycm9yQ29k
ZSA9IGVycm9yQ29kZTsKKworICAgIGNvbnN0IGNoYXIqIGVyck1zZyA9IDA7CisgICAgc3dpdGNo
IChtX2Vycm9yQ29kZSkgeworICAgICAgICBjYXNlIFNhbWVOYW1lRG9FbGVtZW50c0Vycm9yOgor
ICAgICAgICAgICAgZXJyTXNnID0gIkVhY2ggZG8gZWxlbWVudCBtdXN0IGhhdmUgZGlmZmVyZW50
IG5hbWUgaW4gb25lIGNhcmQgb3IgdGVtcGxhdGUhXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTXVsdGlUaW1lckVsZW1lbnRzRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cg
PSAiT25seSBvbmUgdGltZXIgZWxlbWVudCBpcyBhbGxvd2VkIGluIGEgY2FyZCFcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aUFjY2Vzc0VsZW1lbnRzRXJyb3I6Cisg
ICAgICAgICAgICBlcnJNc2cgPSAiT25seSBvbmUgYWNjZXNzIGVsZW1lbnQgaXMgYWxsb3dlZCBp
biBhIGRlY2shXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV3JvbmdUYXNr
SW5BbmNob3JFbGVtZW50RXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhlIHRhc2sgY2Fu
J3QgYmUgc3BlY2lmaWVkIGluIGFuIGFuY2hvciBlbGVtZW50IVxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbmZsaWN0aW5nRXZlbnRCaW5kaW5nRXJyb3I6CisgICAgICAg
ICAgICBlcnJNc2cgPSAiQ29uZmxpY3RpbmcgZXZlbnQgYmluZGluZ3Mgd2l0aGluIGFuIGVsbWVu
dCFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnZhbGlkVmFyaWFibGVO
YW1lRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhlIHZhcmlhYmxlIG5hbWUgY29udGFp
bnMgaW52YWxpZCBjaGFyYWN0ZXJzIVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yOgorICAgICAgICAgICAgZXJyTXNnID0g
IlRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdXNlcyBpbnZhbGlkIHN5bnRheCBvciBpcyBwbGFjZWQg
aW4gaW52YWxpZCBsb2NhdGlvbiFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnZhbGlkQ29sdW1uc051bWJlckZvclRhYmxlRXJycm9yOgorICAgICAgICAgICAgZXJyTXNn
ID0gIlRoZSBudW1iZXIgb2YgdGFibGUgY29sdW1ucyBpcyBpbnZhbGlkIVxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIERvY1R5cGVEZWNsYXJhdGlvbk1pc3NFcnJvcjoKKyAg
ICAgICAgICAgIGVyck1zZyA9ICJET0NUWVBFIGRlY2xhcmF0aW9uIGlzIG1pc3NlZCBiZWZvcmUg
cm9vdCBlbGVtZW50IVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAKKyAgICBoYW5kbGVFcnJvcihmYXRhbCwgZXJy
TXNnLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAKKyAgICByZXBvcnRFcnJvcihO
b0Vycm9yKTsKK30KKworfSAgLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS93bWwv
V01MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVG9rZW5pemVyLmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVG9rZW5pemVyX2gKKyNkZWZpbmUgV01M
VG9rZW5pemVyX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVz
b3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJT
dHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5p
emVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKKyNpZm5kZWYgVVNFX1FYTUxTVFJFQU0KKyNpbmNsdWRlIDxsaWJ4bWwvdHJlZS5oPgorI2lu
Y2x1ZGUgPGxpYnhtbC94bWxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8UXRYbWwvcXhtbHN0
cmVhbS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordHlwZWRlZiBlbnVtIFdN
TEVycm9yQ29kZSB7IAorICAgIE5vRXJyb3IgPSAwLCAKKyAgICBTYW1lTmFtZURvRWxlbWVudHNF
cnJvciwKKyAgICBNdWx0aUFjY2Vzc0VsZW1lbnRzRXJyb3IsCisgICAgTXVsdGlUaW1lckVsZW1l
bnRzRXJyb3IsCisgICAgV3JvbmdUYXNrSW5BbmNob3JFbGVtZW50RXJyb3IsCisgICAgQ29uZmxp
Y3RpbmdFdmVudEJpbmRpbmdFcnJvciwKKyAgICBJbnZhbGlkVmFyaWFibGVOYW1lRXJyb3IsCisg
ICAgSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IsCisgICAgSW52YWxpZENvbHVtbnNOdW1i
ZXJGb3JUYWJsZUVycnJvciwKKyAgICBEb2NUeXBlRGVjbGFyYXRpb25NaXNzRXJyb3IsCit9IFdN
TEVycm9yQ29kZTsKKworY2xhc3MgV01MVG9rZW5pemVyIDogcHVibGljIFhNTFRva2VuaXplciB7
CitwdWJsaWM6CisgICAgV01MVG9rZW5pemVyKERvY3VtZW50KiwgRnJhbWVWaWV3KiA9IDApOwor
ICAgIH5XTUxUb2tlbml6ZXIoKTsKKworCisgICAgLy8gZnJvbSBUb2tlbml6ZXIKKyAgICB2aXJ0
dWFsIGJvb2wgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBlbmREYXRhID0g
ZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKKyAgICAKKyNpZmRlZiBVU0VfUVhN
TFNUUkVBTQorICAgIHZvaWQgV01MUGFyc2VTdGFydEVsZW1lbnQoKTsKKyAgICB2b2lkIFdNTFBh
cnNlRW5kRWxlbWVudCgpOworI2VuZGlmCisKKyAgICB2b2lkIHJlcG9ydEVycm9yKFdNTEVycm9y
Q29kZSk7CisgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OworICAgIHZvaWQgaGFuZGxlV01MRXJy
b3IoV01MRXJyb3JDb2RlIGNvZGUgPSBOb0Vycm9yKTsKKworICAgIHZvaWQgdXBkYXRlQXR0cnNJ
Zk5lZWRlZChFbGVtZW50KiwgY29uc3QgU3RyaW5nJik7Citwcml2YXRlOgorICAgIFdNTEVycm9y
Q29kZSBtX2Vycm9yQ29kZTsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gV01MVG9rZW5pemVyX2gK
</data>
<flag name="review"
          id="10742"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24139</attachid>
            <date>2008-10-06 23:05:45 -0700</date>
            <delta_ts>2008-11-12 11:17:27 -0800</delta_ts>
            <desc>All the bits that integrate with existing code</desc>
            <filename>wml-integration-bits.patch</filename>
            <type>text/plain</type>
            <size>80664</size>
            <attacher name="George Staikos">staikos</attacher>
            
              <data encoding="base64">SW5kZXg6IERlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRGVyaXZlZFNvdXJjZXMu
bWFrZQkocmV2aXNpb24gMzcwMzgpCisrKyBEZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC0zNyw2ICszNyw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvcGx1Z2lucyBc
CiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCisgICAgJChX
ZWJDb3JlKS93bWwgXAogICAgICQoV2ViQ29yZSkvc3ZnIFwKICMKIApAQCAtMzgzLDYgKzM4NCw3
IEBAIGFsbCA6IFwKICAgICBEb2NUeXBlU3RyaW5ncy5jcHAgXAogICAgIEhUTUxFbnRpdHlOYW1l
cy5jIFwKICAgICBIVE1MTmFtZXMuY3BwIFwKKyAgICBXTUxOYW1lcy5jcHAgXAogICAgIEpTU1ZH
RWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCBcCiAgICAgU1ZHRWxlbWVudEZhY3RvcnkuY3BwIFwK
ICAgICBTVkdOYW1lcy5jcHAgXApAQCAtNDk4LDcgKzUwMCw3IEBAIFhQYXRoR3JhbW1hci5jcHAg
OiB4bWwvWFBhdGhHcmFtbWFyLnkgJCgKIAogIyB1c2VyIGFnZW50IHN0eWxlIHNoZWV0cwogCi1V
U0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9ICQoV2ViQ29yZSkvY3NzL2h0bWw0LmNzcyAkKFdlYkNv
cmUpL2Nzcy9xdWlya3MuY3NzICQoV2ViQ29yZSkvY3NzL3ZpZXctc291cmNlLmNzcyAkKFdlYkNv
cmUpL2Nzcy9zdmcuY3NzIAorVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nz
cy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3
LXNvdXJjZS5jc3MgJChXZWJDb3JlKS9jc3Mvc3ZnLmNzcyAkKFdlYkNvcmUpL2Nzcy93bWwuY3Nz
CiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIDogY3NzL21ha2UtY3NzLWZpbGUtYXJyYXlzLnBsICQo
VVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpCiAJcGVybCAkPCAkQCBVc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpCiAKQEAgLTUzNCw2ICs1MzYsOSBA
QCBlbmRpZgogWE1MTmFtZXMuY3BwIDogZG9tL21ha2VfbmFtZXMucGwgeG1sL3htbGF0dHJzLmlu
CiAJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS1hdHRycyAkKFdlYkNv
cmUpL3htbC94bWxhdHRycy5pbgogCitXTUxOYW1lcy5jcHAgOiBkb20vbWFrZV9uYW1lcy5wbCB3
bWwvV01MVGFnTmFtZXMuaW4gd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluCisJcGVybCAtSSAkKFdl
YkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS10YWdzICQoV2ViQ29yZSkvd21sL1dNTFRhZ05h
bWVzLmluIC0tYXR0cnMgJChXZWJDb3JlKS93bWwvV01MQXR0cmlidXRlTmFtZXMuaW4gLS1vdXRw
dXQgLgorCiAjIC0tLS0tLS0tCiAKIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU1ZHLCQoRkVB
VFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkcpCkluZGV4OiBXZWJDb3JlLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlLnBybwkocmV2aXNpb24gMzcwMzgpCisrKyBXZWJDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCB3aW4zMi1nKysgewogIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9JQ09OREFUQUJBU0U9Lik6IERFRklORVMgKz0gRU5BQkxFX0lDT05EQVRBQkFTRT0x
CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPS4pOiBERUZJTkVTICs9IEVOQUJMRV9Y
UEFUSD0xCiAjIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMgKz0gRU5B
QkxFX1hCTD0xCisjIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9XTUw9Lik6IERFRklORVMgKz0g
RU5BQkxFX1dNTD0xCiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWRz0uKTogREVGSU5FUyAr
PSBFTkFCTEVfU1ZHPTEKICMhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1NWR19GT05UUz0uKTog
REVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZPTlRTPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
U1ZHX0ZJTFRFUlM9Lik6IERFRklORVMgKz0gRU5BQkxFX1NWR19GSUxURVJTPTEKQEAgLTE1Nyw2
ICsxNTgsNyBAQCBJTkNMVURFUEFUSCArPSAgJCRQV0QgXAogICAgICAgICAgICAgICAgICQkUFdE
L2hpc3RvcnkgXAogICAgICAgICAgICAgICAgICQkUFdEL3htbCBcCiAgICAgICAgICAgICAgICAg
JCRQV0QvaHRtbCBcCisgICAgICAgICAgICAgICAgJCRQV0Qvd21sIFwKICAgICAgICAgICAgICAg
ICAkJFBXRC9iaW5kaW5ncy9qcyBcCiAgICAgICAgICAgICAgICAgJCRQV0Qvc3ZnIFwKICAgICAg
ICAgICAgICAgICAkJFBXRC9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycyBcCkBAIC0xMzEyLDYgKzEz
MTQsNTAgQEAgY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hCTD0xKSB7CiAgICAgRkVBVFVSRV9E
RUZJTkVTX0pBVkFTQ1JJUFQgKz0gRU5BQkxFX1hCTD0xCiB9CiAKK2NvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9XTUw9MSkgeworICAgIFNPVVJDRVMgKz0gXAorICAgICAgICB3bWwvV01MRG9jdW1l
bnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFRva2VuaXplci5jcHAgXAorICAgICAgICB3bWwvV01M
RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MQ2FyZEVsZW1lbnQuY3BwIFwKKyAgICAgICAg
d21sL1dNTEFFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxBbmNob3JFbGVtZW50LmNwcCBc
CisgICAgICAgIHdtbC9XTUxUYXNrRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MUHJldkVs
ZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTEdvRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwv
V01MUmVmcmVzaEVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQu
Y3BwIFwKKyAgICAgICAgd21sL1dNTFNldHZhckVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dN
TEVsZW1lbnRGYWN0b3J5LmNwcCBcCisgICAgICAgIHdtbC9XTUxCcndDb250ZXh0LmNwcCBcCisg
ICAgICAgIHdtbC9XTUxEb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFRleHQuY3BwIFwK
KyAgICAgICAgd21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBcCisgICAgICAgIHdtbC9XTUxUaW1lckVsZW1lbnQuY3Bw
IFwKKyAgICAgICAgd21sL1dNTEhlbHBlci5jcHAgXAorICAgICAgICB3bWwvV01MQWNjZXNzRWxl
bWVudC5jcHAgXAorICAgICAgICB3bWwvV01MU2VsZWN0RWxlbWVudC5jcHAgXAorICAgICAgICB3
bWwvV01MT3B0aW9uRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW5wdXRFbGVtZW50LmNw
cCBcCisgICAgICAgIHdtbC9XTUxUYWJsZUVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTElt
YWdlRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MUEVsZW1lbnQuY3BwCisKKyAgICBGRUFU
VVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfV01MPTEKKworICAgIFdNTF9OQU1FUyA9
ICQkUFdEL3dtbC9XTUxUYWdOYW1lcy5pbgorCisgICAgd21sbmFtZXNfYS5vdXRwdXQgPSAkJEdF
TkVSQVRFRF9TT1VSQ0VTX0RJUi9XTUxOYW1lcy5jcHAKKyAgICB3bWxuYW1lc19hLmNvbW1hbmRz
ID0gd21sbmFtZXNfYS5jb21tYW5kcyA9IHBlcmwgLUkkJFBXRC9iaW5kaW5ncy9zY3JpcHRzICQk
UFdEL2RvbS9tYWtlX25hbWVzLnBsIC0tdGFncyAkJFBXRC93bWwvV01MVGFnTmFtZXMuaW4gLS1h
dHRycyAkJFBXRC93bWwvV01MQXR0cmlidXRlTmFtZXMuaW4gLS1uYW1lc3BhY2UgV01MIC0tY3Bw
TmFtZXNwYWNlIFdlYkNvcmUgLS1uYW1lc3BhY2VVUkkgJ2h0dHA6Ly93d3cud2FwZm9ydW0ub3Jn
LycgIC0tYXR0cnNOdWxsTmFtZXNwYWNlIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAt
RVwiIC0tb3V0cHV0ICQkR0VORVJBVEVEX1NPVVJDRVNfRElSCisgICAgd21sbmFtZXNfYS5pbnB1
dCA9IFdNTF9OQU1FUworICAgIHdtbG5hbWVzX2EuZGVwZW5kZW5jeV90eXBlID0gVFlQRV9DCisg
ICAgd21sbmFtZXNfYS5DT05GSUcgPSB0YXJnZXRfcHJlZGVwcworICAgIHdtbG5hbWVzX2EudmFy
aWFibGVfb3V0ID0gR0VORVJBVEVEX1NPVVJDRVMKKyAgICB3bWxuYW1lc19hLmNsZWFuID0gJHtR
TUFLRV9GSUxFX09VVH0gJHtRTUFLRV9WQVJfR0VORVJBVEVEX1NPVVJDRVNfRElSX1NMQVNIfVdN
TE5hbWVzLmgKKyAgICBhZGRFeHRyYUNvbXBpbGVyKHdtbG5hbWVzX2EpCit9CisKIGNvbnRhaW5z
KERFRklORVMsIEVOQUJMRV9TVkc9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19KQVZBU0NSSVBU
ICs9IEVOQUJMRV9TVkc9MQogCkBAIC0xNjk3LDYgKzE3NDMsOCBAQCBTT1VSQ0VTICs9IFwKICAg
ICAgICAgc3ZnZWxlbWVudHdyYXBwZXJfaGVhZGVyLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9G
SUxFUwogICAgICAgICBhZGRFeHRyYUNvbXBpbGVyKHN2Z2VsZW1lbnR3cmFwcGVyX2hlYWRlcikK
IAorCisKICAgICAgICAgIyBHRU5FUkFUT1IgNS1EOgogICAgICAgICB4bGlua25hbWVzLm91dHB1
dCA9ICQkR0VORVJBVEVEX1NPVVJDRVNfRElSL1hMaW5rTmFtZXMuY3BwCiAgICAgICAgIHhsaW5r
bmFtZXMuY29tbWFuZHMgPSBwZXJsIC1JJCRQV0QvYmluZGluZ3Mvc2NyaXB0cyAkJFBXRC9kb20v
bWFrZV9uYW1lcy5wbCAtLWF0dHJzICQkUFdEL3N2Zy94bGlua2F0dHJzLmluIC0tbmFtZXNwYWNl
IFhMaW5rIC0tY3BwTmFtZXNwYWNlIFdlYkNvcmUgLS1uYW1lc3BhY2VVUkkgJ2h0dHA6Ly93d3cu
dzMub3JnLzE5OTkveGxpbmsnIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiIC0t
b3V0cHV0RGlyICQkR0VORVJBVEVEX1NPVVJDRVNfRElSCkBAIC0xODM3LDcgKzE4ODUsNyBAQCBh
ZGRFeHRyYUNvbXBpbGVyKGNvbG9yZGF0YSkKIAogIyBHRU5FUkFUT1IgOToKIHN0eWxlc2hlZXRz
Lm91dHB1dCA9ICQkR0VORVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0
YS5jcHAKLXN0eWxlc2hlZXRzLmNvbW1hbmRzID0gcGVybCAkJFBXRC9jc3MvbWFrZS1jc3MtZmls
ZS1hcnJheXMucGwgLS1wcmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJCRHRU5FUkFU
RURfU09VUkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHMuaCAkJEdFTkVSQVRFRF9TT1VSQ0VT
X0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQkUFdEL2Nzcy9odG1sNC5jc3MgJCRQ
V0QvY3NzL3F1aXJrcy5jc3MgJCRQV0QvY3NzL3N2Zy5jc3MgJCRQV0QvY3NzL3ZpZXctc291cmNl
LmNzcworc3R5bGVzaGVldHMuY29tbWFuZHMgPSBwZXJsICQkUFdEL2Nzcy9tYWtlLWNzcy1maWxl
LWFycmF5cy5wbCAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAkJEdFTkVSQVRF
RF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0cy5oICQkR0VORVJBVEVEX1NPVVJDRVNf
RElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzRGF0YS5jcHAgJCRQV0QvY3NzL2h0bWw0LmNzcyAkJFBX
RC9jc3MvcXVpcmtzLmNzcyAkJFBXRC9jc3Mvc3ZnLmNzcyAkJFBXRC9jc3Mvdmlldy1zb3VyY2Uu
Y3NzICQkUFdEL2Nzcy93bWwuY3NzCiBzdHlsZXNoZWV0cy5pbnB1dCA9IFNUWUxFU0hFRVRTX0VN
QkVECiBzdHlsZXNoZWV0cy5DT05GSUcgPSB0YXJnZXRfcHJlZGVwcwogc3R5bGVzaGVldHMudmFy
aWFibGVfb3V0ID0gR0VORVJBVEVEX1NPVVJDRVMKSW5kZXg6IFdlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDM3MDM4KQorKysgV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCSh3b3JraW5nIGNvcHkpCkBAIC01MTgsNiArNTE4LDY0IEBACiAJCTRCNkZBNkY3MEMzOUU0
QTEwMDA4NzAxMSAvKiBTbWFydFJlcGxhY2VDRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QjZGQTZGNjBDMzlFNEExMDAwODcwMTEgLyogU21hcnRS
ZXBsYWNlQ0YuY3BwICovOyB9OwogCQk0QjhBRjRBQTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJv
YXJkQWNjZXNzUG9saWN5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QjhBRjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNEJB
RTk1QjEwQjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEJBRTk1QjAwQjJGQTlDRTAwQUVE
OEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CisJCTRDNkI5OTRFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nl
c3NFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRDNkI5OTE2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5NEYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTE3MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTUwMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxODBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1l
bnQuY3BwICovOyB9OworCQk0QzZCOTk1MTBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTE5
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1MjBFNTJF
MzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcgLyogV01M
QW5jaG9yRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTUzMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxBbmNob3JFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QzZCOTkxQjBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5oICov
OyB9OworCQk0QzZCOTk1NDBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmlidXRlTmFtZXMuaW4g
aW4gUmVzb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFD
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBdHRyaWJ1dGVOYW1lcy5pbiAqLzsgfTsKKwkJNEM2Qjk5
NTUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUQwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEJyd0NvbnRleHQuY3BwICovOyB9OworCQk0QzZCOTk1NjBFNTJFMzczMDA0ODdCQjcgLyog
V01MQnJ3Q29udGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5MUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCAqLzsgfTsK
KwkJNEM2Qjk5NTcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFGMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTU4MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVt
ZW50LmggKi87IH07CisJCTRDNkI5OTU5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
MTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk1QTBF
NTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTIyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1
bWVudC5oICovOyB9OworCQk0QzZCOTk1QjBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTIzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk1
QzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyNDBFNTJFMzczMDA0ODdCQjcgLyogV01M
RG9FbGVtZW50LmggKi87IH07CisJCTRDNkI5OTVEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVt
ZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRD
NkI5OTI1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5
NUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTI2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxF
bGVtZW50LmggKi87IH07CisJCTRDNkI5OTVGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
RmFjdG9yeS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTkyNzBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwICovOyB9
OworCQk0QzZCOTk2MDBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTI4MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovOyB9OworCQk0QzZCOTk2MTBFNTJF
MzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTI5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxHb0Vs
ZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2MjBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZC
OTkyQTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmggKi87IH07CisJCTRDNkI5OTYz
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhl
bHBlci5jcHAgKi87IH07CisJCTRDNkI5OTY0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJD
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuaCAqLzsgfTsKKwkJNEM2Qjk5NjUwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyRDBFNTJFMzczMDA0ODdCQjcgLyogV01MSW1h
Z2VFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElt
YWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEM2Qjk5MkUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5oICovOyB9Owor
CQk0QzZCOTk2NzBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJGMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxJbnB1dEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2ODBFNTJFMzcz
MDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzMDBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRF
bGVtZW50LmggKi87IH07CisJCTRDNkI5OTY5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEM2Qjk5MzEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFu
ZGxlci5jcHAgKi87IH07CisJCTRDNkI5OTZBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTMyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIuaCAqLzsgfTsKKwkJNEM2Qjk5NkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MzMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk2QzBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NkQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAg
Ki87IH07CisJCTRDNkI5OTZFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTZGMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTM3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0
ZmllbGRFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzAwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFBvc3RmaWVsZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRDNkI5OTM4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50
LmggKi87IH07CisJCTRDNkI5OTcxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkz
OTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3
MjBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNBMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxQcmV2RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk3MzBFNTJFMzczMDA0ODdCQjcgLyogV01M
UmVmcmVzaEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEM2Qjk5M0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNw
cCAqLzsgfTsKKwkJNEM2Qjk5NzQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkz
QzBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5
NzUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0QwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3NjBFNTJFMzczMDA0ODdC
QjcgLyogV01MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEM2Qjk5M0UwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1l
bnQuaCAqLzsgfTsKKwkJNEM2Qjk5NzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5M0YwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk3ODBFNTJFMzczMDA0ODdCQjcgLyogV01MU2V0dmFyRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDAwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NzkwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0MTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFibGVFbGVt
ZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5N0EwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5NDIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5oICovOyB9OworCQk0QzZC
OTk3QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gaW4gUmVzb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQzMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxUYWdOYW1lcy5pbiAqLzsgfTsKKwkJNEM2Qjk5N0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhc2tFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTQ0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgKi87
IH07CisJCTRDNkI5OTdEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDUwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFRhc2tFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTdFMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRl
bXBsYXRlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTdGMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUZW1wbGF0ZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRDNkI5OTQ3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQu
aCAqLzsgfTsKKwkJNEM2Qjk5ODAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDgwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwICovOyB9OworCQk0QzZCOTk4MTBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGV4dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5NDkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCAqLzsgfTsKKwkJNEM2
Qjk5ODIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0QTBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGltZXJFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5ODMwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEM2Qjk5NEIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVu
dC5oICovOyB9OworCQk0QzZCOTk4NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTRD
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuY3BwICovOyB9OworCQk0QzZCOTk4NTBF
NTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0RDBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9r
ZW5pemVyLmggKi87IH07CisJCTRDRjZEMzAxMEU1NTZGNEMwMEVEM0Y3NCAvKiBXTUxOYW1lcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Q0EzQUI0
OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICovOyB9OworCQk0Q0Y2RDMwMjBFNTU2
RjREMDBFRDNGNzQgLyogV01MTmFtZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRDQTNBQjQ4MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5oICov
OyB9OwogCQk0RTE5NTkyMTBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5MUYw
QTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCAqLzsgfTsKIAkJNEUxOTU5
MjIwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0RTE5NTkyMDBBMzlEQUJBMDAyMjBGRTUg
LyogTWVkaWFGZWF0dXJlTmFtZXMuaCAqLzsgfTsKIAkJNEUxOTU5MjkwQTM5REFDQzAwMjIwRkU1
IC8qIE1lZGlhUXVlcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEUxOTU5MjMwQTM5REFDQzAwMjIwRkU1IC8qIE1lZGlhUXVlcnkuY3BwICovOyB9
OwpAQCAtNTIxNyw2ICs1Mjc1LDY1IEBACiAJCTRCNkZBNkY2MEMzOUU0QTEwMDA4NzAxMSAvKiBT
bWFydFJlcGxhY2VDRi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBT
bWFydFJlcGxhY2VDRi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRCOEFGNEE5
MEIxQ0UwMkIwMDY4NzY5MCAvKiBDbGlwYm9hcmRBY2Nlc3NQb2xpY3kuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENsaXBib2FyZEFjY2Vzc1BvbGljeS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0QkFFOTVCMDBCMkZBOUNFMDBBRUQ4QTAgLyogRWRpdG9yRGVs
ZXRlQWN0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVkaXRvckRlbGV0
ZUFjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxNjBFNTJFMzcz
MDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV01MQWNjZXNzRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTE3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxBY2Nlc3NFbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTE4MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxBRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
QUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxOTBFNTJF
MzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTEFFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5
OTFBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hv
ckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEFuY2hvckVs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUMwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBX
TUxBdHRyaWJ1dGVOYW1lcy5pbjsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5
MUQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEJyd0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkxRTBFNTJFMzczMDA0ODdCQjcgLyogV01MQnJ3Q29udGV4dC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQnJ3Q29udGV4dC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxRjBFNTJFMzczMDA0ODdCQjcgLyogV01M
Q2FyZEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdN
TENhcmRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjAw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXTUxDYXJkRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTkyMTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTERvY3VtZW50LmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3Vt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxEb2N1bWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcgLyog
V01MRG9FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxEb0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyNDBF
NTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBXTUxEb0VsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkyNjBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyNzBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVu
dEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEVs
ZW1lbnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5Mjgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTkyOTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxHb0VsZW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyQTBFNTJFMzczMDA0ODdCQjcgLyog
V01MR29FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxHb0Vs
ZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MkIwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEhlbHBlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV01MSGVscGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5
MkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV01MSGVscGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
NkI5OTJEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEltYWdlRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFn
ZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEltYWdlRWxl
bWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyRjBFNTJFMzczMDA0
ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXTUxJbnB1dEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTkzMDBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxJbnB1dEVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJp
bnNpY0V2ZW50SGFuZGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNEM2Qjk5MzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMzMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBXTUxPcHRpb25FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5MzQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTE9wdGlvbkVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzUwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFBFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxQ
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM2MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV01MUEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5
MzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzODBFNTJFMzczMDA0ODdCQjcgLyogV01M
UG9zdGZpZWxkRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
UG9zdGZpZWxkRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkz
OTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFByZXZFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0EwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxQcmV2RWxlbWVudC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzQjBFNTJFMzczMDA0ODdCQjcgLyog
V01MUmVmcmVzaEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFdNTFJlZnJlc2hFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxSZWZyZXNoRWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzRDBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MU2Vs
ZWN0RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNFMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXTUxTZWxlY3RFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTRDNkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxTZXR2YXJFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFNldHZhckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdNTFNldHZhckVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5
NDEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVGFibGVFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVGFibGVFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQzMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxUYWdOYW1lcy5pbiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV01MVGFnTmFtZXMu
aW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQ0MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gV01MVGFza0VsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTk0NTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTRDNkI5OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRlbXBsYXRl
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQ3MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdNTFRlbXBsYXRlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0QzZCOTk0ODBFNTJFMzczMDA0ODdCQjcgLyogV01MVGV4dC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZXh0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUZXh0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTRDNkI5OTRBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1l
bnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRpbWVyRWxl
bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTRCMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTFRpbWVyRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTk0QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxUb2tlbml6ZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0QzZCOTk0RDBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVy
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUb2tlbml6ZXIuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNENBM0FCNDgwRTU1NkYyNDAwRTlDMEMwIC8qIFdN
TE5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBXTUxOYW1lcy5oOyBw
YXRoID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJjZXMvV2ViQ29yZS9XTUxOYW1l
cy5oOyBzb3VyY2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTRDQTNBQjQ5MEU1NTZGMjQwMEU5
QzBDMCAvKiBXTUxOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gV01MTmFtZXMuY3BwOyBwYXRoID0gLi4vV2ViS2l0QnVpbGQvRGVidWcvRGVyaXZlZFNvdXJj
ZXMvV2ViQ29yZS9XTUxOYW1lcy5jcHA7IHNvdXJjZVRyZWUgPSBTT1VSQ0VfUk9PVDsgfTsKKwkJ
NENERTU0RUMwRTU1Nzk3ODAwODlFMjZDIC8qIHdtbC5jc3MgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IHdtbC5jc3M7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1OTFGMEEzOURB
QkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFGZWF0dXJlTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0RTE5NTkyMDBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFt
ZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IE1lZGlhRmVhdHVyZU5hbWVz
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTRFMTk1OTIzMEEzOURBQ0MwMDIyMEZF
NSAvKiBNZWRpYVF1ZXJ5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBNZWRpYVF1ZXJ5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTY1MzQsNyAr
NjY1MSw3IEBACiAJCTkzRUVDMUY3MDlDMjg3NzcwMEM1MTVEMSAvKiBXaGVlbEV2ZW50LmlkbCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXaGVlbEV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJOTNFRUMyNkUwOUMzMjE4MDAwQzUxNUQxIC8qIENhbnZhc1BhdHRlcm4uY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzUGF0dGVybi5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjcwMDlDMzIxODgwMEM1MTVEMSAv
KiBDYW52YXNTdHlsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
YW52YXNTdHlsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTkzRjE5QjE5MDgy
NDVFNTkwMDFFOUFCQyAvKiBJbmZvLnBsaXN0ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnBsaXN0LnhtbDsgcGF0
aCA9IEluZm8ucGxpc3Q7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgdXNl
c1RhYnMgPSAwOyB9OworCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKIAkJOTNGMTlCMUEwODI0NUU1QTAw
MUU5QUJDIC8qIFdlYkNvcmUuZnJhbWV3b3JrICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSB3cmFwcGVyLmZyYW1ld29yazsgaW5jbHVkZUluSW5kZXggPSAw
OyBwYXRoID0gV2ViQ29yZS5mcmFtZXdvcms7IHNvdXJjZVRyZWUgPSBCVUlMVF9QUk9EVUNUU19E
SVI7IH07CiAJCTkzRjFEMzFBMDU1OENDNUMwMDgyMUJDMCAvKiBsaWJpY3Vjb3JlLmR5bGliICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gImNvbXBpbGVk
Lm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJpY3Vjb3JlLmR5bGliOyBwYXRoID0gL3Vzci9saWIv
bGliaWN1Y29yZS5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+IjsgfTsKIAkJOTNGOEIz
MDUwQTMwMEZFMTAwRjYxQUI4IC8qIENvZGVHZW5lcmF0b3IucG0gKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0LnNj
cmlwdC5wZXJsOyBuYW1lID0gQ29kZUdlbmVyYXRvci5wbTsgcGF0aCA9IHNjcmlwdHMvQ29kZUdl
bmVyYXRvci5wbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTg4NTcsNiArODk3NCw3
IEBACiAJCTA4NjdENjkxRkU4NDAyOEZDMDJBQUMwNyAvKiBXZWJLaXQgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTRDNkI5OTE1MEU1MkUzNzMwMDQ4N0JC
NyAvKiB3bWwgKi8sCiAJCQkJNjVDOTdBRjIwOEVBOTA4ODAwQUNEMjczIC8qIGNvbmZpZy5oICov
LAogCQkJCUVERUM5ODAyMEFFRDdFMTcwMDU5MTM3RiAvKiBXZWJDb3JlUHJlZml4LmggKi8sCiAJ
CQkJOTMwNzA2MTMwOUUwQ0E4MjAwQjE3RkU0IC8qIERlcml2ZWRTb3VyY2VzLm1ha2UgKi8sCkBA
IC05MjAwLDYgKzkzMTgsNjkgQEAKIAkJCXRhYldpZHRoID0gNDsKIAkJCXVzZXNUYWJzID0gMDsK
IAkJfTsKKwkJNEM2Qjk5MTUwRTUyRTM3MzAwNDg3QkI3IC8qIHdtbCAqLyA9IHsKKwkJCWlzYSA9
IFBCWEdyb3VwOworCQkJY2hpbGRyZW4gPSAoCisJCQkJNEM2Qjk5MTYwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEFjY2Vzc0VsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTE3MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MTgwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEFFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkxOTBFNTJFMzczMDA0ODdCQjcgLyog
V01MQUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MUIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFu
Y2hvckVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkxQzBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0
cmlidXRlTmFtZXMuaW4gKi8sCisJCQkJNEM2Qjk5MUQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJy
d0NvbnRleHQuY3BwICovLAorCQkJCTRDNkI5OTFFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmggKi8sCisJCQkJNEM2Qjk5MUYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVt
ZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyMDBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1l
bnQuaCAqLywKKwkJCQk0QzZCOTkyMTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3Bw
ICovLAorCQkJCTRDNkI5OTIyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oICovLAor
CQkJCTRDNkI5OTIzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuY3BwICovLAorCQkJ
CTRDNkI5OTI0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb0VsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTkyNTBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MjYw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyNzBFNTJFMzcz
MDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwICovLAorCQkJCTRDNkI5OTI4MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovLAorCQkJCTRDNkI5OTI5MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxHb0VsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTJBMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxHb0VsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyQjBFNTJFMzczMDA0ODdC
QjcgLyogV01MSGVscGVyLmNwcCAqLywKKwkJCQk0QzZCOTkyQzBFNTJFMzczMDA0ODdCQjcgLyog
V01MSGVscGVyLmggKi8sCisJCQkJNEM2Qjk5MkQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdl
RWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MkUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdl
RWxlbWVudC5oICovLAorCQkJCTRDNkI5OTJGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnB1dEVs
ZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTMwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnB1dEVs
ZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzMTBFNTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2lj
RXZlbnRIYW5kbGVyLmNwcCAqLywKKwkJCQk0QzZCOTkzMjBFNTJFMzczMDA0ODdCQjcgLyogV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi8sCisJCQkJNEM2Qjk5MzMwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTE9wdGlvbkVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTM0MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzUwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFBFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzNjBFNTJFMzczMDA0ODdCQjcgLyog
V01MUEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzNzBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9z
dGZpZWxkRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFBvc3RmaWVsZEVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzOTBFNTJFMzczMDA0ODdCQjcgLyog
V01MUHJldkVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTNBMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxQcmV2RWxlbWVudC5oICovLAorCQkJCTRDNkI5OTNCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxS
ZWZyZXNoRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFJlZnJlc2hFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5M0QwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFNlbGVjdEVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTNFMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxTZWxlY3RFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5M0YwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFNldHZhckVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxTZXR2YXJFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5NDEwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhYmxlRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5NDIwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhYmxlRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTQzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
YWdOYW1lcy5pbiAqLywKKwkJCQk0QzZCOTk0NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0Vs
ZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQ1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxl
bWVudC5oICovLAorCQkJCTRDNkI5OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVs
ZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQ3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0
ZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0ODBFNTJFMzczMDA0ODdCQjcgLyogV01MVGV4dC5j
cHAgKi8sCisJCQkJNEM2Qjk5NDkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCAqLywKKwkJ
CQk0QzZCOTk0QTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNwcCAqLywKKwkJ
CQk0QzZCOTk0QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmggKi8sCisJCQkJ
NEM2Qjk5NEMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5jcHAgKi8sCisJCQkJNEM2
Qjk5NEQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovLAorCQkJKTsKKwkJCXBh
dGggPSB3bWw7CisJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOworCQl9OwogCQkzMTZGRTEwNjBF
NkUxRDg0MDBCRjYwODggLyogYW5pbWF0aW9uICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJ
CQljaGlsZHJlbiA9ICgKQEAgLTkzMjQsNiArOTUwNSw4IEBACiAJCTY1NjU4MEVDMDlEMTJCMjAw
MDBFNjFENyAvKiBEZXJpdmVkIFNvdXJjZXMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJ
CWNoaWxkcmVuID0gKAorCQkJCTRDQTNBQjQ4MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5o
ICovLAorCQkJCTRDQTNBQjQ5MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5jcHAgKi8sCiAJ
CQkJNjU2NTgxQUMwOUQxNEVFNjAwMEU2MUQ3IC8qIENoYXJzZXREYXRhLmNwcCAqLywKIAkJCQk2
NTY1ODFBRDA5RDE0RUU2MDAwRTYxRDcgLyogQ29sb3JEYXRhLmMgKi8sCiAJCQkJNjU2NTgxNDQw
OUQxMzA0MzAwMEU2MUQ3IC8qIENTU0dyYW1tYXIuY3BwICovLApAQCAtMTMyODYsNiArMTM0Njks
NyBAQAogCQlGNTIzRDE4NDAyREU0MkU4MDE4NjM1Q0EgLyogY3NzICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0Q0RFNTRFQzBFNTU3OTc4MDA4OUUyNkMg
Lyogd21sLmNzcyAqLywKIAkJCQlBODBFNkNEQTBBMTk4OUNBMDA3RkI4QzUgLyogQ291bnRlci5o
ICovLAogCQkJCTkzMDcwNUM3MDlFMEM5NUYwMEIxN0ZFNCAvKiBDb3VudGVyLmlkbCAqLywKIAkJ
CQlBODBFNkNCQjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTQm9yZGVySW1hZ2VWYWx1ZS5jcHAgKi8s
CkBAIC0xNTgzOSw2ICsxNjAyMywzNCBAQAogCQkJCTMxNjExRTYzMEUxQzRFMTQwMEY2QTU3OSAv
KiBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzNBNDRERTBFMjZEMjAyMDBDMTRERkEgLyogTlNSZXNvbHZlci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMzQTQ0RTMwRTI2RDIxQjAwQzE0REZBIC8qIEpTTlNSZXNvbHZlci5oIGluIEhlYWRl
cnMgKi8sCisJCQkJNEM2Qjk5NEYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTUxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NTMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TEFuY2hvckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTU2MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxCcndDb250ZXh0LmggaW4gSGVhZGVycyAqLywKKwkJCQk0QzZCOTk1ODBFNTJF
MzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5
OTVBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJ
NEM2Qjk5NUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJNEM2Qjk5NUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCBpbiBIZWFkZXJz
ICovLAorCQkJCTRDNkI5OTYwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9yeS5o
IGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TEhlbHBlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjYwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEltYWdlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NjgwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NkEw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNEM2Qjk5NkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTRDNkI5OTZFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NzAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBv
c3RmaWVsZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTcyMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5NzQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmggaW4gSGVhZGVycyAqLywKKwkJCQk0
QzZCOTk3NjBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8sCisJCQkJNEM2Qjk5NzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQuaCBp
biBIZWFkZXJzICovLAorCQkJCTRDNkI5OTdBMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTdEMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUYXNrRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5N0YwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRlbXBsYXRlRWxlbWVudC5oIGluIEhlYWRlcnMgKi8sCisJCQkJNEM2Qjk5ODEw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCBpbiBIZWFkZXJzICovLAorCQkJCTRDNkI5OTgz
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCBpbiBIZWFkZXJzICovLAorCQkJ
CTRDNkI5OTg1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuaCBpbiBIZWFkZXJzICov
LAorCQkJCTRDRjZEMzAyMEU1NTZGNEQwMEVEM0Y3NCAvKiBXTUxOYW1lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJQTgyNEI0NjUwRTJFRjJFQTAwODFBN0I3IC8qIFRleHRSdW4uaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDREZENDhFMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRwUmVxdWVzdFVwbG9h
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERkQ0OTYwRTMwNTkyRjAwOUQxMEFEIC8qIEpTWE1M
SHR0cFJlcXVlc3RVcGxvYWQuaCBpbiBIZWFkZXJzICovLApAQCAtMTU5ODgsNyArMTYyMDAsNiBA
QAogCQkwODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJ
CQlpc2EgPSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQz
MDg5MDJCMTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2pl
Y3QgIldlYkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsK
IAkJCWhhc1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJ
CUVuZ2xpc2gsCkBAIC0xNjA2Miw2ICsxNjI3Myw4IEBACiAJCQkJODUxMzZDQTgwQUVENjY1OTAw
RjkwQTNEIC8qIHdlc3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIx
QUU3QTBDMDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8s
CiAJCQkJMUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJl
c291cmNlcyAqLywKKwkJCQk0QzZCOTk1NDBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmlidXRl
TmFtZXMuaW4gaW4gUmVzb3VyY2VzICovLAorCQkJCTRDNkI5OTdCMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxUYWdOYW1lcy5pbiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJQkNFRjQ1NDAwRTY3NkFDMTAw
MUMxMjg3IC8qIFRleHRNZXRyaWNzLmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJRTFBREVDQzcw
RTc2QUQxRjAwNEExQTVFIC8qIE1lc3NhZ2VQb3J0LmlkbCBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJ
RTFBREVDRDEwRTc2QURBQjAwNEExQTVFIC8qIE1lc3NhZ2VDaGFubmVsLmlkbCBpbiBSZXNvdXJj
ZXMgKi8sCkBAIC0xNzcwNyw2ICsxNzkyMCwzNCBAQAogCQkJCTMxNjExRTVBMEUxQzRERTAwMEY2
QTU3OSAvKiBKU1dlYktpdENTU1RyYW5zZm9ybVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTMxNjExRTYyMEUxQzRFMTQwMEY2QTU3OSAvKiBET01XZWJLaXRDU1NUcmFuc2Zvcm1WYWx1ZS5t
bSBpbiBTb3VyY2VzICovLAogCQkJCUJDM0E0NEUyMEUyNkQyMUIwMEMxNERGQSAvKiBKU05TUmVz
b2x2ZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NEUwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEFjY2Vzc0VsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NTAwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTUy
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAor
CQkJCTRDNkI5OTU1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTRDNkI5OTU3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk1OTBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9j
dW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NUIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTERvRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk1RDBFNTJFMzczMDA0
ODdCQjcgLyogV01MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk1RjBFNTJF
MzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NEM2Qjk5NjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LywKKwkJCQk0QzZCOTk2MzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVyLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCTRDNkI5OTY1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NjcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElu
cHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk2OTBFNTJFMzczMDA0ODdC
QjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRD
NkI5OTZCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTRDNkI5OTZEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgaW4g
U291cmNlcyAqLywKKwkJCQk0QzZCOTk2RjBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxk
RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk0QzZCOTk3MTBFNTJFMzczMDA0ODdCQjcg
LyogV01MUHJldkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5NzMwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRD
NkI5OTc1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovLAorCQkJCTRDNkI5OTc3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTc5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJs
ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNEM2Qjk5N0MwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFRhc2tFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTRDNkI5OTdFMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
NEM2Qjk5ODAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwIGluIFNvdXJjZXMgKi8sCisJ
CQkJNEM2Qjk5ODIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk0QzZCOTk4NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTRDRjZEMzAxMEU1NTZGNEMwMEVEM0Y3NCAvKiBXTUxOYW1l
cy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQ0RGRDQ4RjBFMzA1MjkwMDA5RDEwQUQgLyogWE1M
SHR0cFJlcXVlc3RVcGxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNERkQ0OTIwRTMwNTZC
RDAwOUQxMEFEIC8qIEpTWE1MSHR0cFJlcXVlc3RVcGxvYWRDdXN0b20uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQkNERkQ0OTUwRTMwNTkyRjAwOUQxMEFEIC8qIEpTWE1MSHR0cFJlcXVlc3RVcGxv
YWQuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gY3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCShyZXZpc2lvbiAzNzAzOCkKKysr
IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAK
ICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtv
diA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRl
bCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzUxLDYgKzM1Myw5IEBAIHN0
YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVs
dFF1aXJrc1N0eWxlOwogc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwogc3Rh
dGljIENTU1J1bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7CisjaWYgRU5BQkxFKFdNTCkK
K3N0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0V21sU3R5bGUgPSAwOworI2VuZGlmCiBzdGF0aWMg
Q1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7CiAKIFJlbmRlclN0eWxlKiBD
U1NTdHlsZVNlbGVjdG9yOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwpAQCAtNTY3LDYgKzU3Miwx
MSBAQCBzdGF0aWMgdm9pZCBsb2FkVmlld1NvdXJjZVN0eWxlKCkKICAgICBBU1NFUlQoIWRlZmF1
bHRWaWV3U291cmNlU3R5bGUpOwogICAgIGRlZmF1bHRWaWV3U291cmNlU3R5bGUgPSBuZXcgQ1NT
UnVsZVNldDsKICAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChw
YXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJB
Z2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKKworI2lmIEVOQUJMRShXTUwpCisgICAg
ZGVmYXVsdFdtbFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7CisgICAgZGVmYXVsdFdtbFN0eWxlLT5h
ZGRSdWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQod21sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6
ZW9mKHdtbFVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKKyNlbmRpZgogfQog
CiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6OmFkZE1hdGNoZWREZWNsYXJhdGlvbihDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogZGVjbCkKQEAgLTEwMjcsMTAgKzEwMzcsMTggQEAgUmVuZGVyU3R5
bGUqIENTU1N0eWxlU2VsZWN0b3I6OmxvY2F0ZVNoYQogCiB2b2lkIENTU1N0eWxlU2VsZWN0b3I6
Om1hdGNoVUFSdWxlcyhpbnQmIGZpcnN0VUFSdWxlLCBpbnQmIGxhc3RVQVJ1bGUpCiB7CisjaWYg
RU5BQkxFKFdNTCkKKyAgICBpZiAobV9jaGVja2VyLm1fZG9jdW1lbnQtPmlzV01MRG9jdW1lbnQo
KSkgeworICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRXbWxTdHlsZSwgZmlyc3RVQVJ1bGUsIGxh
c3RVQVJ1bGUpOworICAgIH0gZWxzZSB7CisjZW5kaWYKICAgICAvLyBGaXJzdCB3ZSBtYXRjaCBy
dWxlcyBmcm9tIHRoZSB1c2VyIGFnZW50IHNoZWV0LgogICAgIENTU1J1bGVTZXQqIHVzZXJBZ2Vu
dFN0eWxlU2hlZXQgPSBtX21lZGl1bS0+bWVkaWFUeXBlTWF0Y2hTcGVjaWZpYygicHJpbnQiKQog
ICAgICAgICA/IGRlZmF1bHRQcmludFN0eWxlIDogZGVmYXVsdFN0eWxlOwogICAgIG1hdGNoUnVs
ZXModXNlckFnZW50U3R5bGVTaGVldCwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOworI2lmIEVO
QUJMRShXTUwpCisgICAgfQorI2VuZGlmCiAKICAgICAvLyBJbiBxdWlya3MgbW9kZSwgd2UgbWF0
Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCiAgICAgaWYgKCFtX2No
ZWNrZXIubV9zdHJpY3RQYXJzaW5nKQpJbmRleDogY3NzL3dtbC5jc3MKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
Y3NzL3dtbC5jc3MJKHJldmlzaW9uIDApCisrKyBjc3Mvd21sLmNzcwkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw2MDEgQEAKKy8qCisgKiBUaGUgZGVmYXVsdCBzdHlsZSBzaGVldCB1c2VkIHRvIHJl
bmRlciBIVE1MLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChrbm9sbEBr
ZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworQG5hbWVzcGFjZSAiaHR0cDov
L3d3dy53YXBmb3J1bS5vcmcvIjsKKworaHRtbCB7CisgICAgZGlzcGxheTogYmxvY2sKK30KKwor
LyogY2hpbGRyZW4gb2YgdGhlIDxoZWFkPiBlbGVtZW50IGFsbCBoYXZlIGRpc3BsYXk6bm9uZSAq
LworaGVhZCB7CisgICAgZGlzcGxheTogbm9uZQorfQorCittZXRhIHsKKyAgICBkaXNwbGF5OiBu
b25lCit9CisKK3RpdGxlIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2xpbmsgeworICAgIGRp
c3BsYXk6IG5vbmUKK30KKworc3R5bGUgeworICAgIGRpc3BsYXk6IG5vbmUKK30KKworc2NyaXB0
IHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKKy8qIGdlbmVyaWMgYmxvY2stbGV2ZWwgZWxlbWVu
dHMgKi8KKworYm9keSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luOiA4cHgKK30K
KworcCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luOiAxLjBfX3FlbSAwcHgKK30K
KworZGl2IHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCitsYXllciB7CisgICAgZGlzcGxheTog
YmxvY2sKK30KKworbWFycXVlZSB7CisgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOworICAgIG92
ZXJmbG93OiAtd2Via2l0LW1hcnF1ZWUKK30KKworYWRkcmVzcyB7CisgICAgZGlzcGxheTogYmxv
Y2sKK30KKworYmxvY2txdW90ZSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luOiAx
X19xZW0gNDBweCAxZW0gNDBweAorfQorCitxIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUKK30KKwor
cTpiZWZvcmUgeworICAgIGNvbnRlbnQ6ICciJworICAgIC8qIEZJWE1FOiBjb250ZW50OiBvcGVu
LXF1b3RlOyAqLworfQorCitxOmFmdGVyIHsKKyAgICBjb250ZW50OiAnIicKKyAgICAvKiBGSVhN
RTogY29udGVudDogY2xvc2UtcXVvdGU7ICovCit9CisKK2NlbnRlciB7CisgICAgZGlzcGxheTog
YmxvY2s7CisgICAgLyogc3BlY2lhbCBjZW50ZXJpbmcgdG8gYmUgYWJsZSB0byBlbXVsYXRlIHRo
ZSBodG1sNC9uZXRzY2FwZSBiZWhhdmlvdXIgKi8KKyAgICB0ZXh0LWFsaWduOiAtd2Via2l0LWNl
bnRlcgorfQorCitociB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luOiAwLjVlbSBh
dXRvOworICAgIGJvcmRlci1zdHlsZTogaW5zZXQ7CisgICAgYm9yZGVyLXdpZHRoOiAxcHgKK30K
KworbWFwIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUKK30KKworLyogaGVhZGluZyBlbGVtZW50cyAq
LworCitoMSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZm9udC1zaXplOiAyZW07CisgICAg
bWFyZ2luOiAuNjdfX3FlbSAwIC42N2VtIDA7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQKK30KKwor
aDIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGZvbnQtc2l6ZTogMS41ZW07CisgICAgbWFy
Z2luOiAuODNfX3FlbSAwIC44M2VtIDA7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQKK30KKworaDMg
eworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGZvbnQtc2l6ZTogMS4xN2VtOworICAgIG1hcmdp
bjogMV9fcWVtIDAgMWVtIDA7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQKK30KKworaDQgeworICAg
IGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogMS4zM19fcWVtIDAgMS4zM2VtIDA7CisgICAg
Zm9udC13ZWlnaHQ6IGJvbGQKK30KKworaDUgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGZv
bnQtc2l6ZTogLjgzZW07CisgICAgbWFyZ2luOiAxLjY3X19xZW0gMCAxLjY3ZW0gMDsKKyAgICBm
b250LXdlaWdodDogYm9sZAorfQorCitoNiB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZm9u
dC1zaXplOiAuNjdlbTsKKyAgICBtYXJnaW46IDIuMzNfX3FlbSAwIDIuMzNlbSAwOworICAgIGZv
bnQtd2VpZ2h0OiBib2xkCit9CisKKy8qIHRhYmxlcyAqLworCit0YWJsZSB7CisgICAgZGlzcGxh
eTogdGFibGU7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKKyAgICBib3JkZXItc3Bh
Y2luZzogMnB4OworICAgIGJvcmRlci1jb2xvcjogZ3JheQorfQorCit0YWJsZVthbGlnbj0iY2Vu
dGVyIl0geworICAgIG1hcmdpbi1sZWZ0OiBhdXRvOworICAgIG1hcmdpbi1yaWdodDogYXV0bwor
fQorCit0aGVhZCB7CisgICAgZGlzcGxheTogdGFibGUtaGVhZGVyLWdyb3VwOworICAgIHZlcnRp
Y2FsLWFsaWduOiBtaWRkbGU7CisgICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0Cit9CisKK3Rib2R5
IHsKKyAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7CisgICAgdmVydGljYWwtYWxpZ246IG1p
ZGRsZTsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQKK30KKwordGZvb3QgeworICAgIGRpc3Bs
YXk6IHRhYmxlLWZvb3Rlci1ncm91cDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICAg
IGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCisvKiBmb3IgdGFibGVzIHdpdGhvdXQgdGFibGUg
c2VjdGlvbiBlbGVtZW50cyAoY2FuIGhhcHBlbiB3aXRoIFhIVE1MIG9yIGR5bmFtaWNhbGx5IGNy
ZWF0ZWQgdGFibGVzKSAqLwordGFibGUgPiB0ciB7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRs
ZTsKK30KKworY29sIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4KK30KKworY29sZ3JvdXAg
eworICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91cAorfQorCit0ciB7CisgICAgZGlzcGxh
eTogdGFibGUtcm93OworICAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0OworICAgIGJvcmRlci1j
b2xvcjogaW5oZXJpdAorfQorCit0ZCwgdGggeworICAgIGRpc3BsYXk6IHRhYmxlLWNlbGw7Cisg
ICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQKK30KKwordGggeworICAgIGZvbnQtd2VpZ2h0OiBi
b2xkCit9CisKK2NhcHRpb24geworICAgIGRpc3BsYXk6IHRhYmxlLWNhcHRpb247CisgICAgdGV4
dC1hbGlnbjogLXdlYmtpdC1jZW50ZXIKK30KKworLyogbGlzdHMgKi8KKwordWwsIG1lbnUsIGRp
ciB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbGlzdC1zdHlsZS10eXBlOiBkaXNjOworICAg
IG1hcmdpbjogMV9fcWVtIDAgMWVtIDA7CisgICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiA0MHB4
Cit9CisKK29sIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBsaXN0LXN0eWxlLXR5cGU6IGRl
Y2ltYWw7CisgICAgbWFyZ2luOiAxX19xZW0gMCAxZW0gMDsKKyAgICAtd2Via2l0LXBhZGRpbmct
c3RhcnQ6IDQwcHgKK30KKworbGkgeworICAgIGRpc3BsYXk6IGxpc3QtaXRlbQorfQorCit1bCB1
bCwgb2wgdWwgeworICAgIGxpc3Qtc3R5bGUtdHlwZTogY2lyY2xlCit9CisKK29sIG9sIHVsLCBv
bCB1bCB1bCwgdWwgb2wgdWwsIHVsIHVsIHVsIHsKKyAgICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFy
ZQorfQorCitkZCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgLXdlYmtpdC1tYXJnaW4tc3Rh
cnQ6IDQwcHgKK30KKworZGwgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogMV9f
cWVtIDAgMWVtIDAKK30KKworZHQgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKK29sIHVsLCB1
bCBvbCwgdWwgdWwsIG9sIG9sIHsKKyAgICBtYXJnaW4tdG9wOiAwOworICAgIG1hcmdpbi1ib3R0
b206IDAKK30KKworLyogZm9ybSBlbGVtZW50cyAqLworCitmb3JtIHsKKyAgICBkaXNwbGF5OiBi
bG9jazsKKyAgICBtYXJnaW46IDBfX3FlbSAwIDFlbSAwCit9CisKK2xhYmVsIHsKKyAgICBjdXJz
b3I6IGRlZmF1bHQ7Cit9CisKK2xlZ2VuZCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgcGFk
ZGluZy1sZWZ0OiAycHg7CisgICAgcGFkZGluZy1yaWdodDogMnB4OworICAgIGJvcmRlcjogbm9u
ZQorfQorCitmaWVsZHNldCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luLWxlZnQ6
IDJweDsKKyAgICBtYXJnaW4tcmlnaHQ6IDJweDsKKyAgICBwYWRkaW5nOiAwLjM1ZW0gMC43NWVt
IDAuNjI1ZW07CisgICAgYm9yZGVyOiAycHggZ3Jvb3ZlIFRocmVlREZhY2UKK30KKworYnV0dG9u
IHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRvbjsKK30KKworaW5wdXQsIHRleHRhcmVh
LCBrZXlnZW4sIHNlbGVjdCwgYnV0dG9uLCBpc2luZGV4IHsKKyAgICBtYXJnaW46IDBfX3FlbTsK
KyAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7CisgICAgY29sb3I6IGluaXRpYWw7Cisg
ICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKKyAgICB3b3JkLXNwYWNpbmc6IG5vcm1hbDsKKyAg
ICBsaW5lLWhlaWdodDogbm9ybWFsOworICAgIHRleHQtdHJhbnNmb3JtOiBub25lOworICAgIHRl
eHQtaW5kZW50OiAwOworICAgIHRleHQtc2hhZG93OiBub25lOworICAgIGRpc3BsYXk6IGlubGlu
ZS1ibG9jazsKKyAgICB0ZXh0LWFsaWduOiAtd2Via2l0LWF1dG87Cit9CisKK2lucHV0W3R5cGU9
ImhpZGRlbiJdIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2lucHV0LCBpbnB1dFt0eXBlPSJw
YXNzd29yZCJdLCBpbnB1dFt0eXBlPSJzZWFyY2giXSwgaXNpbmRleCB7CisgICAgLXdlYmtpdC1h
cHBlYXJhbmNlOiB0ZXh0ZmllbGQ7CisgICAgcGFkZGluZzogMXB4OworICAgIGJhY2tncm91bmQt
Y29sb3I6IHdoaXRlOworICAgIGJvcmRlcjogMnB4IGluc2V0OworICAgIC13ZWJraXQtcnRsLW9y
ZGVyaW5nOiBsb2dpY2FsOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7CisgICAgY3Vy
c29yOiBhdXRvOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXSB7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBzZWFyY2hmaWVsZDsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7
Cit9CisKK2lucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1jYW5jZWwtYnV0dG9u
IHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLWNhbmNlbC1idXR0b247Cit9
CisKK2lucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uIHsKKyAg
ICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLWRlY29yYXRpb247Cit9CisKK2lucHV0
W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29yYXRpb24geworICAg
IC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQtcmVzdWx0cy1kZWNvcmF0aW9uOworfQor
CitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1idXR0b24gewor
ICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQtcmVzdWx0cy1idXR0b247Cit9CisK
K3RleHRhcmVhIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVhOworICAgIGJhY2tn
cm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlcjogMXB4IHNvbGlkOworICAgIC13ZWJraXQt
cnRsLW9yZGVyaW5nOiBsb2dpY2FsOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRleHQ7Cisg
ICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgICByZXNpemU6IGF1dG87CisgICAg
Y3Vyc29yOiBhdXRvOworfQorCitpbnB1dFt0eXBlPSJwYXNzd29yZCJdIHsKKyAgICAtd2Via2l0
LXRleHQtc2VjdXJpdHk6IGRpc2MgIWltcG9ydGFudDsKK30KKworaW5wdXRbdHlwZT0iaGlkZGVu
Il0sIGlucHV0W3R5cGU9ImltYWdlIl0sIGlucHV0W3R5cGU9ImZpbGUiXSB7CisgICAgLXdlYmtp
dC1hcHBlYXJhbmNlOiBpbml0aWFsOworICAgIHBhZGRpbmc6IGluaXRpYWw7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogaW5pdGlhbDsKKyAgICBib3JkZXI6IGluaXRpYWw7Cit9CisKK2lucHV0W3R5
cGU9ImZpbGUiXSB7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGJhc2VsaW5lOworfQorCitpbnB1
dDotd2Via2l0LWF1dG9maWxsIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjRkFGRkJEICFpbXBv
cnRhbnQ7CisgICAgYmFja2dyb3VuZC1pbWFnZTpub25lICFpbXBvcnRhbnQ7Cit9CisKK2lucHV0
W3R5cGU9InJhZGlvIl0sIGlucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAgIG1hcmdpbjogM3B4
IDAuNWV4OworICAgIHBhZGRpbmc6IGluaXRpYWw7CisgICAgYmFja2dyb3VuZC1jb2xvcjogaW5p
dGlhbDsKKyAgICBib3JkZXI6IGluaXRpYWw7Cit9CisKK2lucHV0W3R5cGU9ImJ1dHRvbiJdLCBp
bnB1dFt0eXBlPSJzdWJtaXQiXSwgaW5wdXRbdHlwZT0icmVzZXQiXSwgaW5wdXRbdHlwZT0iZmls
ZSJdOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNl
OiBwdXNoLWJ1dHRvbjsKKyAgICB3aGl0ZS1zcGFjZTogcHJlCit9CisKK2lucHV0W3R5cGU9ImJ1
dHRvbiJdLCBpbnB1dFt0eXBlPSJzdWJtaXQiXSwgaW5wdXRbdHlwZT0icmVzZXQiXSwgaW5wdXRb
dHlwZT0iZmlsZSJdOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0dG9uIHsKKyAgICAt
d2Via2l0LWJveC1hbGlnbjogY2VudGVyOworICAgIHRleHQtYWxpZ246IGNlbnRlcjsKKyAgICBj
dXJzb3I6IGRlZmF1bHQ7CisgICAgY29sb3I6IEJ1dHRvblRleHQ7CisgICAgcGFkZGluZzogMnB4
IDZweCAzcHggNnB4OworICAgIGJvcmRlcjogMnB4IG91dHNldCBCdXR0b25GYWNlOworICAgIGJh
Y2tncm91bmQtY29sb3I6IEJ1dHRvbkZhY2U7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3Jk
ZXItYm94Cit9CisKK2lucHV0W3R5cGU9InJhbmdlIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5j
ZTogc2xpZGVyLWhvcml6b250YWw7CisgICAgcGFkZGluZzogaW5pdGlhbDsKKyAgICBib3JkZXI6
IGluaXRpYWw7CisgICAgbWFyZ2luOiAycHg7Cit9CisKK2lucHV0W3R5cGU9InJhbmdlIl06Oi13
ZWJraXQtc2xpZGVyLXRodW1iIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlcnRodW1i
LWhvcml6b250YWw7Cit9CisKK2lucHV0W3R5cGU9ImJ1dHRvbiJdOmRpc2FibGVkLCBpbnB1dFt0
eXBlPSJzdWJtaXQiXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0icmVzZXQiXTpkaXNhYmxlZCwgaW5w
dXRbdHlwZT0iZmlsZSJdOmRpc2FibGVkOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0
dG9uOmRpc2FibGVkLCBzZWxlY3Q6ZGlzYWJsZWQsIGtleWdlbjpkaXNhYmxlZCwgb3B0Z3JvdXA6
ZGlzYWJsZWQsIG9wdGlvbjpkaXNhYmxlZCB7CisgICAgY29sb3I6IEdyYXlUZXh0Cit9CisKK2lu
cHV0W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0ic3VibWl0Il06YWN0aXZlLCBp
bnB1dFt0eXBlPSJyZXNldCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0iZmlsZSJdOmFjdGl2ZTo6LXdl
YmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjphY3RpdmUgeworICAgIGJvcmRlci1zdHls
ZTogaW5zZXQKK30KKworaW5wdXRbdHlwZT0iYnV0dG9uIl06YWN0aXZlOmRpc2FibGVkLCBpbnB1
dFt0eXBlPSJzdWJtaXQiXTphY3RpdmU6ZGlzYWJsZWQsIGlucHV0W3R5cGU9InJlc2V0Il06YWN0
aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJmaWxlIl06YWN0aXZlOmRpc2FibGVkOjotd2Via2l0
LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0dG9uOmFjdGl2ZTpkaXNhYmxlZCB7CisgICAgYm9yZGVy
LXN0eWxlOiBvdXRzZXQKK30KKworYXJlYSwgcGFyYW0geworICAgIGRpc3BsYXk6IG5vbmUKK30K
KworaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBjaGVj
a2JveDsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Cit9CisKK2lucHV0W3R5
cGU9InJhZGlvIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcmFkaW87CisgICAgLXdlYmtp
dC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitrZXlnZW4sIHNlbGVjdCB7CisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdDsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRl
ci1ib3g7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IDFweCBz
b2xpZDsKKyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgICB3aGl0ZS1zcGFjZTog
cHJlOworICAgIC13ZWJraXQtcnRsLW9yZGVyaW5nOiBsb2dpY2FsOworICAgIGNvbG9yOiBibGFj
azsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7Cit9
CisKK3NlbGVjdFtzaXplXSwKK3NlbGVjdFttdWx0aXBsZV0sCitzZWxlY3Rbc2l6ZV1bbXVsdGlw
bGVdIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGxpc3Rib3g7CisgICAgLXdlYmtpdC1ib3gt
YWxpZ246IHN0YXJ0OworICAgIGJvcmRlcjogMXB4IGluc2V0IGdyYXk7CisgICAgLXdlYmtpdC1i
b3JkZXItcmFkaXVzOiBpbml0aWFsOworICAgIHdoaXRlLXNwYWNlOiBpbml0aWFsOworfQorCitz
ZWxlY3Rbc2l6ZT0iMCJdLAorc2VsZWN0W3NpemU9IjEiXSB7CisgICAgLXdlYmtpdC1hcHBlYXJh
bmNlOiBtZW51bGlzdDsKKyAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOworICAgIGJvcmRl
cjogMXB4IHNvbGlkOworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4OworICAgIHdoaXRl
LXNwYWNlOiBwcmU7Cit9CisKK29wdGdyb3VwIHsKKyAgICBmb250LXdlaWdodDogYm9sZGVyOwor
fQorCitvcHRpb24geworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisKKy8qIGlubGluZSBl
bGVtZW50cyAqLworCit1LCBpbnMgeworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lCit9
CisKK3N0cm9uZywgYiB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGRlcgorfQorCitpLCBjaXRlLCBl
bSwgdmFyLCBhZGRyZXNzIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWMKK30KKwordHQsIGNvZGUs
IGtiZCwgc2FtcCB7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZQorfQorCitwcmUsIHhtcCwg
cGxhaW50ZXh0LCBsaXN0aW5nIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBmb250LWZhbWls
eTogbW9ub3NwYWNlOworICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgbWFyZ2luOiAxX19xZW0g
MAorfQorCitiaWcgeworICAgIGZvbnQtc2l6ZTogbGFyZ2VyCit9CisKK3NtYWxsIHsKKyAgICBm
b250LXNpemU6IHNtYWxsZXIKK30KKworcywgc3RyaWtlLCBkZWwgeworICAgIHRleHQtZGVjb3Jh
dGlvbjogbGluZS10aHJvdWdoCit9CisKK3N1YiB7CisgICAgdmVydGljYWwtYWxpZ246IHN1YjsK
KyAgICBmb250LXNpemU6IHNtYWxsZXIKK30KKworc3VwIHsKKyAgICB2ZXJ0aWNhbC1hbGlnbjog
c3VwZXI7CisgICAgZm9udC1zaXplOiBzbWFsbGVyCit9CisKK25vYnIgeworICAgIHdoaXRlLXNw
YWNlOiBub3dyYXAKK30KKworLyogc3RhdGVzICovCisKKzpmb2N1cyB7IAorICAgIG91dGxpbmU6
IGF1dG8gNXB4IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcgorfQorCisvKiBSZWFkLW9ubHkgdGV4
dCBmaWVsZHMgZG8gbm90IHNob3cgYSBmb2N1cyByaW5nIGJ1dCBkbyBzdGlsbCByZWNlaXZlIGZv
Y3VzICovCitodG1sOmZvY3VzLCBib2R5OmZvY3VzLCBpbnB1dFtyZWFkb25seV06Zm9jdXMgeyAK
KyAgICBvdXRsaW5lOiBub25lCit9CisgIAoraW5wdXQ6Zm9jdXMsIHRleHRhcmVhOmZvY3VzLCBp
c2luZGV4OmZvY3VzLCBrZXlnZW46Zm9jdXMsIHNlbGVjdDpmb2N1cyB7CisgICAgb3V0bGluZS1v
ZmZzZXQ6IC0ycHgKK30KKworaW5wdXRbdHlwZT0iYnV0dG9uIl06Zm9jdXMsCitpbnB1dFt0eXBl
PSJjaGVja2JveCJdOmZvY3VzLAoraW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLAoraW5wdXRbdHlw
ZT0iaGlkZGVuIl06Zm9jdXMsCitpbnB1dFt0eXBlPSJpbWFnZSJdOmZvY3VzLAoraW5wdXRbdHlw
ZT0icmFkaW8iXTpmb2N1cywKK2lucHV0W3R5cGU9InJlc2V0Il06Zm9jdXMsCitpbnB1dFt0eXBl
PSJzZWFyY2giXTpmb2N1cywKK2lucHV0W3R5cGU9InN1Ym1pdCJdOmZvY3VzLAoraW5wdXRbdHlw
ZT0iZmlsZSJdOmZvY3VzOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7CisgICAgb3V0bGlu
ZS1vZmZzZXQ6IDAKK30KKyAgICAKK2E6LXdlYmtpdC1hbnktbGluayB7CisgICAgY29sb3I6IC13
ZWJraXQtbGluazsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworYTotd2Vi
a2l0LWFueS1saW5rOmFjdGl2ZSB7CisgICAgY29sb3I6IC13ZWJraXQtYWN0aXZlbGluaworfQor
CithbmNob3I6LXdlYmtpdC1hbnktbGluayB7CisgICAgY29sb3I6IC13ZWJraXQtbGluazsKKyAg
ICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworYW5jaG9yOi13ZWJraXQtYW55LWxp
bms6YWN0aXZlIHsKKyAgICBjb2xvcjogLXdlYmtpdC1hY3RpdmVsaW5rCit9CisKKy8qIG90aGVy
IGVsZW1lbnRzICovCisKK25vZnJhbWVzIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2ZyYW1l
c2V0LCBmcmFtZSB7CisgICAgZGlzcGxheTogYmxvY2sKK30KKworZnJhbWVzZXQgeworICAgIGJv
cmRlci1jb2xvcjogaW5oZXJpdAorfQorCitpZnJhbWUgeworICAgIGJvcmRlcjogMnB4IGluc2V0
Cit9CisKKy8qIG5vc2NyaXB0IGlzIGhhbmRsZWQgaW50ZXJuYWxseSwgYXMgaXQgZGVwZW5kcyBv
biBzZXR0aW5ncyAqLwpJbmRleDogZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBkb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCShyZXZpc2lvbiAzNzAzOCkKKysrIGRvbS9E
T01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw4IEBACiAgKiAg
ICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbUB3
ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsNiArNTQsMTAgQEAKICNpbmNsdWRlICJT
VkdEb2N1bWVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTERv
Y3VtZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFNW
RykKQEAgLTMwOCw2ICszMTQsMTUgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50
YXRpb246OgogICAgICAgICByZXR1cm4gSFRNTERvY3VtZW50OjpjcmVhdGUoZnJhbWUpOwogICAg
IGlmICh0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiKQogICAgICAgICByZXR1cm4gRG9j
dW1lbnQ6OmNyZWF0ZVhIVE1MKGZyYW1lKTsKKworI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKCh0
eXBlID09ICJ0ZXh0L3ZuZC53YXAud21sIikKKyNpZiBFTkFCTEUoV0JYTUwpCisgICAgICAgIHx8
ICh0eXBlID09ICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiKQorI2VuZGlmCisgICAgICAgICkK
KyAgICAgICAgcmV0dXJuIFdNTERvY3VtZW50OjpjcmVhdGUoZnJhbWUpOworI2VuZGlmCiAgICAg
ICAgIAogI2lmIEVOQUJMRShGVFBESVIpCiAgICAgLy8gUGx1Z2lucyBjYW5ub3QgdGFrZSBGVFAg
ZnJvbSB1cyBlaXRoZXIKSW5kZXg6IGRvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGRvbS9E
b2N1bWVudC5oCShyZXZpc2lvbiAzNzAzOCkKKysrIGRvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNv
cHkpCkBAIC00LDYgKzQsOCBAQAogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAo
bXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFr
b3YgKGFwQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIw
MDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpA
QCAtMjkwLDYgKzI5Miw5IEBAIHB1YmxpYzoKICNlbmRpZgogICAgIHZpcnR1YWwgYm9vbCBpc1Bs
dWdpbkRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wg
aXNNZWRpYURvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNpZiBFTkFCTEUoV01M
KQorICAgIHZpcnR1YWwgYm9vbCBpc1dNTERvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KKyNlbmRpZgogICAgIAogICAgIENTU1N0eWxlU2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IoKSBj
b25zdCB7IHJldHVybiBtX3N0eWxlU2VsZWN0b3I7IH0KIApJbmRleDogZG9tL1hNTFRva2VuaXpl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZG9tL1hNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDM3MDM4
KQorKysgZG9tL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSw3IEBA
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICogQ29weXJpZ2h0IChDKSAyMDA4
IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCkBAIC0yODcsNiArMjg4LDE2IEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnNlcnRFcnJvck1l
c3NhZ2VCbG8KICAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKICAgICB9CiAj
ZW5kaWYKKyNpZiBFTkFCTEUoV01MKQorICAgIGVsc2UgaWYgKG1fZG9jLT5pc1dNTERvY3VtZW50
KCkpIHsKKyAgICAgICAgUmVmUHRyPE5vZGU+IHJvb3RFbGVtZW50ID0gZG9jLT5jcmVhdGVFbGVt
ZW50TlMoSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSwgImh0bWwiLCBlYyk7CisgICAgICAg
IFJlZlB0cjxOb2RlPiBib2R5ID0gZG9jLT5jcmVhdGVFbGVtZW50TlMoSFRNTE5hbWVzOjp4aHRt
bE5hbWVzcGFjZVVSSSwgImJvZHkiLCBlYyk7CisgICAgICAgIHJvb3RFbGVtZW50LT5hcHBlbmRD
aGlsZChib2R5LCBlYyk7CisgICAgICAgIGJvZHktPmFwcGVuZENoaWxkKGRvY3VtZW50RWxlbWVu
dCwgZWMpOworICAgICAgICBkb2MtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7
CisgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGJvZHkuZ2V0KCk7CisgICAgfQorI2VuZGlmCiAK
ICAgICBSZWZQdHI8RWxlbWVudD4gcmVwb3J0RWxlbWVudCA9IGNyZWF0ZVhIVE1MUGFyc2VyRXJy
b3JIZWFkZXIoZG9jLCBtX2Vycm9yTWVzc2FnZXMpOwogICAgIGRvY3VtZW50RWxlbWVudC0+aW5z
ZXJ0QmVmb3JlKHJlcG9ydEVsZW1lbnQsIGRvY3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBl
Yyk7CkluZGV4OiBkb20vWE1MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL1hNTFRva2Vu
aXplci5oCShyZXZpc2lvbiAzNzAzOCkKKysrIGRvbS9YTUxUb2tlbml6ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2Ft
dWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0
ZWNoIEFTQQorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzMsNiArNzQsOCBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0SXNYSFRNTERvY3VtZW50KGJv
b2wgaXNYSFRNTCkgeyBtX2lzWEhUTUxEb2N1bWVudCA9IGlzWEhUTUw7IH0KICAgICAgICAgYm9v
bCBpc1hIVE1MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxEb2N1bWVudDsgfQog
CisgICAgICAgIERvY3VtZW50ICpkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jOyB9CisK
ICAgICAgICAgLy8gZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAogICAgICAgICB2aXJ0dWFsIHZv
aWQgbm90aWZ5RmluaXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGZpbmlzaGVkT2JqKTsKIApAQCAtMTE2
LDYgKzExOSw5IEBAIHB1YmxpYzoKICAgICAgICAgZnJpZW5kIGJvb2wgcGFyc2VYTUxEb2N1bWVu
dEZyYWdtZW50KGNvbnN0IFN0cmluZyYgY2h1bmssIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
LCBFbGVtZW50KiBwYXJlbnQpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGV2ZW50dWFsbHlNYXJr
QXNQYXJzZXJDcmVhdGVkKEVsZW1lbnQqIGVsZW1lbnQpOworI2lmIEVOQUJMRShXTUwpCisgICAg
ICAgIGZyaWVuZCBjbGFzcyBXTUxUb2tlbml6ZXI7CisjZW5kaWYKICAgICAgICAgdm9pZCBpbml0
aWFsaXplUGFyc2VyQ29udGV4dChjb25zdCBjaGFyKiBjaHVuayA9IDApOwogICAgICAgICB2b2lk
IHNldEN1cnJlbnROb2RlKE5vZGUqKTsKIApJbmRleDogZG9tL1hNTFRva2VuaXplckxpYnhtbDIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGRvbS9YTUxUb2tlbml6ZXJMaWJ4bWwyLmNwcAkocmV2aXNpb24g
MzcwMzgpCisrKyBkb20vWE1MVG9rZW5pemVyTGlieG1sMi5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdl
YmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgVHJvbGx0ZWNoIEFTQQogICogQ29weXJp
Z2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC01OSw2ICs2MCwxMyBAQAogI2luY2x1ZGUgPGxpYnhzbHQveHNs
dC5oPgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTEhlbHBlci5oIgor
I2luY2x1ZGUgIldNTEJyd0NvbnRleHQuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5o
IgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIldNTFRleHQuaCIKKyNlbmRp
ZgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC02Niw2ICs3NCwxMCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwogCisjaWYgRU5BQkxFKFdN
TCkKK2Jvb2wgaGFzRG9jVHlwZURlY2wgPSBmYWxzZTsKKyNlbmRpZgorCiBjbGFzcyBQZW5kaW5n
Q2FsbGJhY2tzIHsKIHB1YmxpYzoKICAgICBQZW5kaW5nQ2FsbGJhY2tzKCkKQEAgLTcwNiw2ICs3
MTgsMTAgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IAogICAgICAg
ICByZXR1cm47CiAgICAgfQogICAgIAorI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fZG9jLT5p
c1dNTERvY3VtZW50KCkgJiYgIWhhc0RvY1R5cGVEZWNsKQorICAgICAgICBzdGF0aWNfY2FzdDxX
TUxUb2tlbml6ZXIqPih0aGlzKS0+aGFuZGxlV01MRXJyb3IoRG9jVHlwZURlY2xhcmF0aW9uTWlz
c0Vycm9yKTsKKyNlbmRpZgogICAgIG1fc2F3Rmlyc3RFbGVtZW50ID0gdHJ1ZTsKIAogICAgIGV4
aXRUZXh0KCk7CkBAIC03MjEsOSArNzM3LDIxIEBAIHZvaWQgWE1MVG9rZW5pemVyOjpzdGFydEVs
ZW1lbnROcyhjb25zdCAKICAgICAgICAgICAgIHVyaSA9IG1fZGVmYXVsdE5hbWVzcGFjZVVSSTsK
ICAgICB9CiAKKyNpZiBFTkFCTEUoV01MKQorICAgIC8vIGNoZWNrIGlmIHRoZXJlIGFyZSBtb3Jl
IHRoYW4gb25lIGFjY2VzcyBlbGVtZW50CisgICAgaWYgKG1fZG9jLT5pc1dNTERvY3VtZW50KCkg
JiYgbG9jYWxOYW1lID09ICJhY2Nlc3MiKQorICAgICAgICBXTUxIZWxwZXI6OmN1cnJlbnRCcndD
b250ZXh0KCktPnNldE5lZWRDaGVja0RlY2tBY2Nlc3ModHJ1ZSk7CisjZW5kaWYKKyAKICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwgbG9j
YWxOYW1lLCB1cmkpOwotICAgIFJlZlB0cjxFbGVtZW50PiBuZXdFbGVtZW50ID0gbV9kb2MtPmNy
ZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUsIGVjKTsKKyAgICBSZWZQdHI8RWxlbWVudD4gbmV3RWxl
bWVudCA9IDA7CisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAobV9kb2MtPmlzV01MRG9jdW1lbnQo
KSkKKyAgICAgICAgbmV3RWxlbWVudCA9IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVt
ZW50KHFOYW1lLCBtX2RvYywgdHJ1ZSk7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIG5ld0Vs
ZW1lbnQgPSBtX2RvYy0+Y3JlYXRlRWxlbWVudChxTmFtZSwgdHJ1ZSwgZWMpOwogICAgIGlmICgh
bmV3RWxlbWVudCkgewogICAgICAgICBzdG9wUGFyc2luZygpOwogICAgICAgICByZXR1cm47CkBA
IC04MjQsNiArODUyLDE0IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpjaGFyYWN0ZXJzKGNvbnN0IHht
bEMKICAgICB9CiAgICAgCiAgICAgaWYgKG1fY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSB8fCBl
bnRlclRleHQoKSkKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVu
dCgpKSB7CisgICAgICAgIFdNTFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxXTUxUZXh0Kj4obV9j
dXJyZW50Tm9kZSk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICB0ZXh0
LT5hcHBlbmREYXRhKHRvU3RyaW5nKHMsIGxlbiksIGVjKTsKKyAgICAgICAgdGV4dC0+dXBkYXRl
RGF0YUlmTmVlZGVkKCk7CisgICAgfSBlbHNlCisjZW5kaWYKICAgICAgICAgbV9idWZmZXJlZFRl
eHQuYXBwZW5kKHMsIGxlbik7CiB9CiAKQEAgLTk0OCw2ICs5ODQsMTkgQEAgdm9pZCBYTUxUb2tl
bml6ZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IAogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAorI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fZG9jKSB7CisgICAgICAgIFN0cmluZyBleHRJ
ZCA9IHRvU3RyaW5nKGV4dGVybmFsSUQpOworICAgICAgICBpZiAobV9kb2MtPmlzV01MRG9jdW1l
bnQoKQorICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8v
RU4iCisgICAgICAgICAgICAmJiBleHRJZCAhPSAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9F
TiIKKyAgICAgICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VO
IgorICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMC8vRU4i
KQorICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERURCBQdWJsaWMgSUQi
LCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgZWxzZSBpZiAobV9kb2Mt
PmlzV01MRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGhhc0RvY1R5cGVEZWNsID0gdHJ1ZTsKKyAg
ICB9CisjZW5kaWYKICAgICBpZiAobV9kb2MpCiAgICAgICAgIG1fZG9jLT5hZGRDaGlsZChEb2N1
bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFs
SUQpLCB0b1N0cmluZyhzeXN0ZW1JRCkpKTsKIH0KQEAgLTEwODQsNyArMTEzMywxMSBAQCBzdGF0
aWMgeG1sRW50aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pCiAgICAgfQogCiAgICAgZW50ID0g
eG1sR2V0RG9jRW50aXR5KGN0eHQtPm15RG9jLCBuYW1lKTsKKyNpZiBFTkFCTEUoV01MKQorICAg
IGlmICghZW50ICYmIChnZXRUb2tlbml6ZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpIHx8
IChnZXRUb2tlbml6ZXIoY2xvc3VyZSktPmRvY3VtZW50KCktPmlzV01MRG9jdW1lbnQoKSkpKSB7
CisjZWxzZQogICAgIGlmICghZW50ICYmIGdldFRva2VuaXplcihjbG9zdXJlKS0+aXNYSFRNTERv
Y3VtZW50KCkpIHsKKyNlbmRpZgogICAgICAgICBlbnQgPSBnZXRYSFRNTEVudGl0eShuYW1lKTsK
ICAgICAgICAgaWYgKGVudCkKICAgICAgICAgICAgIGVudC0+ZXR5cGUgPSBYTUxfSU5URVJOQUxf
R0VORVJBTF9FTlRJVFk7CkluZGV4OiBkb20vWE1MVG9rZW5pemVyUXQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHJldmlzaW9uIDM3MDM4KQorKysgZG9tL1hNTFRv
a2VuaXplclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwNyBUcm9sbHRlY2ggQVNBCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAg
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc0Nyw2
ICs3NDgsMTQgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRHRkKCkKICAgICAgICAgfHwgKHB1
YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxlIDEu
MC8vRU4iKSkpIHsKICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250cm9s
cyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9yIG5vdC4KICAgICB9CisjaWYgRU5BQkxFKFdNTCkK
KyAgICBlbHNlIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVudCgpCisgICAgICAgICAgICAmJiBwdWJs
aWNJZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIikKKyAg
ICAgICAgICAgICYmIHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMi8vRU4iKQorICAgICAgICAgICAgJiYgcHVibGljSWQgIT0gUUxhdGluMVN0cmluZygi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIpCisgICAgICAgICAgICAmJiBwdWJsaWNJZCAh
PSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIikpCisgICAgICAg
IGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBEVEQgUHVibGljIElEIiwgbGluZU51bWJlcigp
LCBjb2x1bW5OdW1iZXIoKSk7CisjZW5kaWYKICAgICBpZiAoIW1fcGFyc2luZ0ZyYWdtZW50KQog
ICAgICAgICBtX2RvYy0+YWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2MsIG5hbWUs
IHB1YmxpY0lkLCBzeXN0ZW1JZCkpOwogICAgIApJbmRleDogaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAkocmV2aXNp
b24gMzcwMzgpCisrKyBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwpAQCAtMjY0LDQgKzI2NiwxOCBAQCBib29sIEJhY2tGb3J3YXJkTGlzdDo6Y29udGFpbnNJ
dGVtKEhpc3RvCiAgICAgcmV0dXJuIG1fZW50cnlIYXNoLmNvbnRhaW5zKGVudHJ5KTsKIH0KIAor
I2lmIEVOQUJMRShXTUwpCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJTdGF0ZSgpCit7Cisg
ICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3VyID0gY3VycmVudEl0ZW0oKTsKKworICAgIGlu
dCBzaXplID0gbV9lbnRyaWVzLnNpemUoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7
ICsraSkKKyAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZShtX2VudHJpZXNbaV0uZ2V0KCkpOwor
ICAgIG1fZW50cmllcy5jbGVhcigpOworICAgIG1fZW50cnlIYXNoLmNsZWFyKCk7CisgICAgbV9j
dXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworfQorI2VuZGlmCisKIH07IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCkluZGV4OiBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmgJKHJldmlzaW9uIDM3MDM4KQorKysgaGlzdG9yeS9C
YWNrRm9yd2FyZExpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw2ICs3NSwxMCBAQCBwdWJsaWM6
IAogICAgIHZvaWQgcmVtb3ZlSXRlbShIaXN0b3J5SXRlbSopOwogICAgIEhpc3RvcnlJdGVtVmVj
dG9yJiBlbnRyaWVzKCk7CiAgICAgCisjaWYgRU5BQkxFKFdNTCkKKyAgICAvLyBjbGVhciB0aGUg
aGlzdG9yeSBvZiBjdXJyZW50IGJyb3dzZXIgY29udGV4dCBmb3Igd21sCisgICAgdm9pZCBjbGVh
clN0YXRlKCk7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgQmFja0ZvcndhcmRMaXN0KFBhZ2UqKTsK
IApJbmRleDogaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDM3MDM4KQorKysgaHRtbC9IVE1MSW1hZ2VFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkg
TGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBL
b2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwOCBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMTcsNiAr
MTE5LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJyZXNvdXJjZUF0dHJpYnV0
ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKIAogcHJpdmF0ZToKKyNpZiBFTkFCTEUo
V01MKQorICAgIGZyaWVuZCBjbGFzcyBXTUxJbWFnZUVsZW1lbnQ7CisjZW5kaWYKICAgICBIVE1M
SW1hZ2VMb2FkZXIgbV9pbWFnZUxvYWRlcjsKICAgICBTdHJpbmcgdXNlbWFwOwogICAgIGJvb2wg
aXNtYXA7CkluZGV4OiBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRt
bC9IVE1MSW1hZ2VMb2FkZXIuY3BwCShyZXZpc2lvbiAzNzAzOCkKKysrIGh0bWwvSFRNTEltYWdl
TG9hZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDggQEAKICAqIENvcHlyaWdodCAo
QykgMTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5
IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTI4LDYgKzMwLDEwIEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCisjaWYg
RU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIKKyNlbmRpZgorI2luY2x1
ZGUgIkltYWdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsNiArNjYsMTEgQEAg
dm9pZCBIVE1MSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogICAgIEVsZW1lbnQqIGVs
ZW0gPSBlbGVtZW50KCk7CiAgICAgSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKGltYWdlKTsK
IAorI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKEltYWdlTG9hZGVyOjppbWFnZSgpLT5pbWFnZSgp
LT5pc051bGwoKSAmJiBlbGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6aW1nVGFnKSkKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8V01MSW1hZ2VFbGVtZW50Kj4oZWxlbSktPnJlbG9hZEltYWdlQnlTcmNB
dHRyKCk7CisjZW5kaWYKKyAgICAgICAgICAgIAogICAgIGlmIChpbWFnZS0+ZXJyb3JPY2N1cnJl
ZCgpICYmIGVsZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQogICAgICAgICBz
dGF0aWNfY2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+KGVsZW0pLT5yZW5kZXJGYWxsYmFja0NvbnRl
bnQoKTsKIH0KSW5kZXg6IGh0bWwvSFRNTE9wdGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBo
dG1sL0hUTUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDM3MDM4KQorKysgaHRtbC9IVE1MT3B0
aW9uRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsOCBAQAogICogICAgICAgICAg
IChDKSAxOTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChD
KSAyMDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC04Nyw2ICs4OSw5IEBAIHByaXZhdGU6CiAgICAgU3RyaW5nIG1fdmFsdWU7CiAgICAgYm9vbCBt
X3NlbGVjdGVkOwogICAgIFJlbmRlclN0eWxlKiBtX3N0eWxlOworI2lmIEVOQUJMRShXTUwpCisg
ICAgZnJpZW5kIGNsYXNzIFdNTE9wdGlvbkVsZW1lbnQ7CisjZW5kaWYKIH07CiAKIH0gLy9uYW1l
c3BhY2UKSW5kZXg6IGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAzNzAzOCkKKysrIGh0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsNyBAQAogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0
IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEBueXBvcC5j
b20pCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpJbmRleDogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGh0
bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMzcwMzgpCisrKyBodG1sL0hUTUxTZWxl
Y3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw4IEBACiAgKiAgICAgICAgICAg
KEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAg
KEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwpAQCAtNTYsOSArNTgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lk
IGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2Vs
ZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2Vs
ZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNo
YW5nZSA9IGZhbHNlKTsKIAogICAgIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7Ci0gICAgdm9p
ZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wg
ZmlyZU9uQ2hhbmdlID0gZmFsc2UpOwogICAgIGludCBsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSBj
b25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJu
IHRydWU7IH0KQEAgLTE3MCw2ICsxNzIsOSBAQCBwcml2YXRlOgogICAgIFN0cmluZyBtX3R5cGVk
U3RyaW5nOwogCiAgICAgSFRNTENvbGxlY3Rpb246OkNvbGxlY3Rpb25JbmZvIG1fY29sbGVjdGlv
bkluZm87CisjaWYgRU5BQkxFKFdNTCkKKyAgICBmcmllbmQgY2xhc3MgV01MU2VsZWN0RWxlbWVu
dDsKKyNlbmRpZgogfTsKIAogI2lmZGVmIE5ERUJVRwpJbmRleDogbG9hZGVyL0ZyYW1lTG9hZGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCShyZXZpc2lvbiAzNzAz
OCkKKysrIGxvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw4
IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBUcm9sbHRlY2ggQVNBCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNzAsNiArMjcyLDkgQEAgRnJhbWVMb2FkZXI6
OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFtZSwgRgogICAgICwgbV9maW5pc2hlZFBhcnNpbmdEdXJp
bmdMb3dCYW5kd2lkdGhEaXNwbGF5KGZhbHNlKQogICAgICwgbV9uZWVkVG9Td2l0Y2hPdXRMb3dC
YW5kd2lkdGhEaXNwbGF5KGZhbHNlKQogI2VuZGlmIAorI2lmIEVOQUJMRShXTUwpCisgICAgLCBt
X2ZvcmNlUmVsb2FkKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKQEAgLTI4NjMsOCArMjg2OCwyMiBA
QCB2b2lkIEZyYW1lTG9hZGVyOjpjbGllbnRSZWRpcmVjdGVkKGNvbnN0CiAgICAgbV9xdWlja1Jl
ZGlyZWN0Q29taW5nID0gbG9ja0hpc3RvcnkgJiYgbV9kb2N1bWVudExvYWRlciAmJiAhaXNKYXZh
U2NyaXB0Rm9ybUFjdGlvbjsKIH0KIAorI2lmIEVOQUJMRShXTUwpCit2b2lkIEZyYW1lTG9hZGVy
OjpzZXRGb3JjZVJlbG9hZChib29sIHJlbG9hZCkKK3sKKyAgICBtX2ZvcmNlUmVsb2FkID0gcmVs
b2FkOworfQorI2VuZGlmCisKIGJvb2wgRnJhbWVMb2FkZXI6OnNob3VsZFJlbG9hZChjb25zdCBL
VVJMJiBjdXJyZW50VVJMLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblVSTCkKIHsKKyNpZiBFTkFC
TEUoV01MKQorICAgIC8vIEFzIGZvciBXTUwgcGFnZSwgc29tZXRpbWVzIHdlIHdhbnQgdGhlIHBh
Z2UgdG8gYmUgcmVsb2FkZWQgZXZlbiBpZiB0aGUgc2FtZSAKKyAgICAvLyBVUkwgd2l0aCBmcmFn
bWVudAorICAgIGlmIChtX2ZvcmNlUmVsb2FkKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyNlbmRp
ZgorCiAgICAgLy8gVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBydWxlOiAiRG9uJ3QgcmVs
b2FkIGlmIG5hdmlnYXRpbmcgYnkgZnJhZ21lbnQgd2l0aGluCiAgICAgLy8gdGhlIHNhbWUgVVJM
LCBidXQgZG8gcmVsb2FkIGlmIGdvaW5nIHRvIGEgbmV3IFVSTCBvciB0byB0aGUgc2FtZSBVUkwg
d2l0aCBubwogICAgIC8vIGZyYWdtZW50IGlkZW50aWZpZXIgYXQgYWxsLiIKSW5kZXg6IGxvYWRl
ci9GcmFtZUxvYWRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9GcmFtZUxvYWRlci5oCShyZXZp
c2lvbiAzNzAzOCkKKysrIGxvYWRlci9GcmFtZUxvYWRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjQsNiAr
MjY2LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIGNsaWVudFJlZGlyZWN0
Q2FuY2VsbGVkT3JGaW5pc2hlZChib29sIGNhbmNlbFdpdGhMb2FkSW5Qcm9ncmVzcyk7CiAgICAg
ICAgIHZvaWQgY2xpZW50UmVkaXJlY3RlZChjb25zdCBLVVJMJiwgZG91YmxlIGRlbGF5LCBkb3Vi
bGUgZmlyZURhdGUsIGJvb2wgbG9ja0hpc3RvcnksIGJvb2wgaXNKYXZhU2NyaXB0Rm9ybUFjdGlv
bik7CiAgICAgICAgIGJvb2wgc2hvdWxkUmVsb2FkKGNvbnN0IEtVUkwmIGN1cnJlbnRVUkwsIGNv
bnN0IEtVUkwmIGRlc3RpbmF0aW9uVVJMKTsKKyNpZiBFTkFCTEUoV01MKQorICAgICAgICB2b2lk
IHNldEZvcmNlUmVsb2FkKGJvb2wpOworI2VuZGlmCiAKICAgICAgICAgYm9vbCBpc1F1aWNrUmVk
aXJlY3RDb21pbmcoKSBjb25zdDsKIApAQCAtNjg0LDYgKzY4OSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIFN0cmluZyBtX3BlbmRpbmdTb3VyY2VJbkxvd0JhbmR3aWR0aERpc3Bs
YXk7ICAgICAgICAKICAgICAgICAgSGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IG1fZXh0ZXJuYWxS
ZXF1ZXN0c0luTG93QmFuZHdpZHRoRGlzcGxheTsKICNlbmRpZgorCisjaWYgRU5BQkxFKFdNTCkK
KyAgICAgICAgYm9vbCBtX2ZvcmNlUmVsb2FkOworI2VuZGlmCiAgICAgfTsKIAogfQpJbmRleDog
bG9hZGVyL1Jlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBsb2FkZXIvUmVzb3VyY2VM
b2FkZXIuY3BwCShyZXZpc2lvbiAzNzAzOCkKKysrIGxvYWRlci9SZXNvdXJjZUxvYWRlci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2
LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykg
MjAwNyBHcmFoYW0gRGVubmlzIChncmFoYW0uZGVubmlzQGdtYWlsLmNvbSkKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTQwLDYgKzQyLDExIEBACiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIK
ICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKIAorI2lmIEVOQUJMRShXQlhNTCkKKyNpbmNsdWRl
ICJ3YnhtbC5oIgorI2luY2x1ZGUgIndieG1sX2NvbnYuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8U2hhcmVkQnVmZmVyPiBSZXNvdXJjZUxvYWRlcjo6cmVz
b3VyY2VEYXRhKCkKQEAgLTI0OCw2ICsyNTUsMjggQEAgdm9pZCBSZXNvdXJjZUxvYWRlcjo6ZGlk
UmVjZWl2ZURhdGEoY29ucwogICAgIC8vIGFueXRoaW5nIGluY2x1ZGluZyBwb3NzaWJseSBkZXJl
ZmluZyB0aGlzOyBvbmUgZXhhbXBsZSBvZiB0aGlzIGlzIFJhZGFyIDMyNjYyMTYuCiAgICAgUmVm
UHRyPFJlc291cmNlTG9hZGVyPiBwcm90ZWN0b3IodGhpcyk7CiAKKyNpZiBFTkFCTEUoV0JYTUwp
CisgICAgaWYgKGxlbmd0aCAmJiBtX3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9u
L3ZuZC53YXAud21sYyIpIHsKKyAgICAgICAgV0JfVVRJTlkgKndieG1sID0gKFdCX1VUSU5ZKilk
YXRhOworICAgICAgICBXQl9VTE9ORyB3YnhtbF9sZW4gPSBsZW5ndGg7CisgICAgICAgIFdCX1VM
T05HIHhtbF9sZW4gPSAwOworICAgICAgICBXQl9VVElOWSAqeG1sID0gMDsKKyAgICAgICAgV0JY
TUxFcnJvciByZXQgPSBXQlhNTF9PSzsgCisgICAgICAgIFdCWE1MR2VuWE1MUGFyYW1zIHBhcmFt
czsKKworICAgICAgICAvLyBJbml0IERlZmF1bHQgUGFyYW1ldGVycworICAgICAgICBwYXJhbXMu
bGFuZyA9IFdCWE1MX0xBTkdfVU5LTk9XTjsKKyAgICAgICAgcGFyYW1zLmdlbl90eXBlID0gV0JY
TUxfR0VOX1hNTF9JTkRFTlQ7CisgICAgICAgIHBhcmFtcy5pbmRlbnQgPSAxOworICAgICAgICBw
YXJhbXMua2VlcF9pZ25vcmFibGVfd3MgPSBGQUxTRTsKKworICAgICAgICByZXQgPSB3YnhtbF9j
b252X3dieG1sMnhtbF93aXRobGVuKHdieG1sLCB3YnhtbF9sZW4sICZ4bWwsICZ4bWxfbGVuLCAm
cGFyYW1zKTsKKyAgICAgICAgaWYgKHJldCAhPSBXQlhNTF9PSykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZGF0YSA9IChjaGFyKil4bWw7CisgICAgICAgIGxlbmd0aCA9IHhtbF9sZW47
CisgICAgfQorI2VuZGlmCiAgICAgYWRkRGF0YShkYXRhLCBsZW5ndGgsIGFsbEF0T25jZSk7CiAg
ICAgLy8gRklYTUU6IElmIHdlIGdldCBhIHJlc291cmNlIHdpdGggbW9yZSB0aGFuIDJCIGJ5dGVz
LCB0aGlzIGNvZGUgd29uJ3QgZG8gdGhlIHJpZ2h0IHRoaW5nLgogICAgIC8vIEhvd2V2ZXIsIHdp
dGggdG9kYXkncyBjb21wdXRlcnMgYW5kIG5ldHdvcmtpbmcgc3BlZWRzLCB0aGlzIHdvbid0IGhh
cHBlbiBpbiBwcmFjdGljZS4KSW5kZXg6IHBhZ2UvRXZlbnRIYW5kbGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBwYWdlL0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDM3MDM4KQorKysgcGFnZS9FdmVu
dEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsOCBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9y
ZykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4MDcsNiArMTgwOSwxNCBAQCB2b2lk
IEV2ZW50SGFuZGxlcjo6ZGVmYXVsdEtleWJvYXJkRXZlbnRICiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGlmIChldmVudC0+a2V5SWRlbnRpZmllcigpID09ICJVKzAwMDkiKQogICAgICAg
ICAgICAgZGVmYXVsdFRhYkV2ZW50SGFuZGxlcihldmVudCk7CisjaWYgRU5BQkxFKFdNTCkKKyAg
ICAgICAgZWxzZSBpZiAoZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiRG93biIpCisgICAgICAg
ICAgICBpZiAobV9mcmFtZS0+cGFnZSgpICYmIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9s
bGVyKCktPmFkdmFuY2VGb2N1cyhGb2N1c0RpcmVjdGlvbkZvcndhcmQsIGV2ZW50KSkKKyAgICAg
ICAgICAgICAgICBldmVudC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgZWxzZSBpZiAo
ZXZlbnQtPmtleUlkZW50aWZpZXIoKSA9PSAiVXAiKQorICAgICAgICAgICAgaWYgKG1fZnJhbWUt
PnBhZ2UoKSAmJiBtX2ZyYW1lLT5wYWdlKCktPmZvY3VzQ29udHJvbGxlcigpLT5hZHZhbmNlRm9j
dXMoRm9jdXNEaXJlY3Rpb25CYWNrd2FyZCwgZXZlbnQpKQorICAgICAgICAgICAgICAgIGV2ZW50
LT5zZXREZWZhdWx0SGFuZGxlZCgpOworI2VuZGlmCiAKICAgICAgICAvLyBwcm92aWRlcyBLQiBu
YXZpZ2F0aW9uIGFuZCBzZWxlY3Rpb24gZm9yIGVuaGFuY2VkIGFjY2Vzc2liaWxpdHkgdXNlcnMK
ICAgICAgICBpZiAoQVhPYmplY3RDYWNoZTo6YWNjZXNzaWJpbGl0eUVuaGFuY2VkVXNlckludGVy
ZmFjZUVuYWJsZWQoKSkKSW5kZXg6IHBhZ2UvUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGFnZS9Q
YWdlLmNwcAkocmV2aXNpb24gMzcwMzgpCisrKyBwYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBB
cHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NSw2ICs1
Nyw5IEBACiAjaW5jbHVkZSA8a2pzL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgorI2lmIEVOQUJMRShXTUwp
CisjaW5jbHVkZSAiV01MQnJ3Q29udGV4dC5oIgorI2VuZGlmCiAKICNpZiBFTkFCTEUoRE9NX1NU
T1JBR0UpCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCkBAIC0xMjQsNiArMTI5LDkgQEAgUGFn
ZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQwogICAgICwgbV9wZW5kaW5nQmVm
b3JlVW5sb2FkRXZlbnRDb3VudCgwKQogICAgICwgbV9jdXN0b21IVE1MVG9rZW5pemVyVGltZURl
bGF5KC0xKQogICAgICwgbV9jdXN0b21IVE1MVG9rZW5pemVyQ2h1bmtTaXplKC0xKQorI2lmIEVO
QUJMRShXTUwpCisgICAgLCBtX3dtbEJyd0NvbnRleHQoMCkKKyNlbmRpZgogewogICAgIGlmICgh
YWxsUGFnZXMpIHsKICAgICAgICAgYWxsUGFnZXMgPSBuZXcgSGFzaFNldDxQYWdlKj47CkBAIC01
NTgsNiArNTY2LDE4IEBAIHZvaWQgUGFnZTo6Y2hhbmdlUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW4K
ICAgICByZXR1cm47IAogfQogCisjaWYgRU5BQkxFKFdNTCkKK3ZvaWQgUGFnZTo6c2V0V21sQnJ3
Q29udGV4dChSZWZQdHI8V01MQnJ3Q29udGV4dD4gY29udGV4dCkgCit7IAorICAgIG1fd21sQnJ3
Q29udGV4dCA9IGNvbnRleHQ7IAorfQorCitXTUxCcndDb250ZXh0KiBQYWdlOjp3bWxCcndDb250
ZXh0KCkgY29uc3QgCit7IAorICAgIHJldHVybiBtX3dtbEJyd0NvbnRleHQuZ2V0KCk7IAorfQor
I2VuZGlmCisKIHZvaWQgUGFnZTo6c2V0Q3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheShkb3Vi
bGUgY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSkKIHsKICAgICBpZiAoY3VzdG9tSFRNTFRv
a2VuaXplclRpbWVEZWxheSA8IDApIHsKSW5kZXg6IHBhZ2UvUGFnZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHBhZ2UvUGFnZS5oCShyZXZpc2lvbiAzNzAzOCkKKysrIHBhZ2UvUGFnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02Myw2ICs2NSw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZTsKICNlbmRp
ZgogICAgIGNsYXNzIFNldHRpbmdzOworI2lmIEVOQUJMRShXTUwpCisgICAgY2xhc3MgV01MQnJ3
Q29udGV4dDsKKyNlbmRpZgogICAgIGNsYXNzIEtVUkw7CiAKICAgICBlbnVtIFRleHRDYXNlU2Vu
c2l0aXZpdHkgeyBUZXh0Q2FzZVNlbnNpdGl2ZSwgVGV4dENhc2VJbnNlbnNpdGl2ZSB9OwpAQCAt
MTY4LDYgKzE3MywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0U2Vz
c2lvblN0b3JhZ2UoUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4pOwogI2VuZGlmCiAKKyNpZiBF
TkFCTEUoV01MKQorICAgICAgICB2b2lkIHNldFdtbEJyd0NvbnRleHQoUmVmUHRyPFdNTEJyd0Nv
bnRleHQ+KTsKKyAgICAgICAgV01MQnJ3Q29udGV4dCogd21sQnJ3Q29udGV4dCgpIGNvbnN0Owor
I2VuZGlmCiAgICAgICAgIHZvaWQgc2V0Q3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheShkb3Vi
bGUpOwogICAgICAgICBib29sIGhhc0N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25z
dCB7IHJldHVybiBtX2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgIT0gLTE7IH0KICAgICAg
ICAgZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25zdCB7IEFTU0VSVCht
X2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgIT0gLTEpOyByZXR1cm4gbV9jdXN0b21IVE1M
VG9rZW5pemVyVGltZURlbGF5OyB9CkBAIC0yMjcsNiArMjM2LDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNpZiBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShXWCkgJiYgZGVmaW5lZChfX1dY
TVNXX18pKSB8fCAoUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUV9XU19XSU4pKQogICAgICAgICBz
dGF0aWMgSElOU1RBTkNFIHNfaW5zdGFuY2VIYW5kbGU7CiAjZW5kaWYKKworI2lmIEVOQUJMRShX
TUwpCisgICAgICAgIFJlZlB0cjxXTUxCcndDb250ZXh0PiBtX3dtbEJyd0NvbnRleHQ7CisjZW5k
aWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBwbGF0Zm9ybS9NSU1F
VHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5
LmNwcAkocmV2aXNpb24gMzcwMzgpCisrKyBwbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYs
IDIwMDggQXBwbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTE4MSw2ICsxODMsMTIgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBv
cnRlZEphdmFTY3JpcAogc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTWlt
ZVR5cGVzKCkKIHsKICAgICBzdGF0aWMgY29uc3QgY2hhciogdHlwZXNbXSA9IHsKKyNpZiBFTkFC
TEUoV01MKQorICAgICAgICAidGV4dC92bmQud2FwLndtbCIsCisjZW5kaWYKKyNpZiBFTkFCTEUo
V0JYTUwpCisgICAgICAgICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiLAorI2VuZGlmCiAgICAg
ICAgICJ0ZXh0L2h0bWwiLAogICAgICAgICAidGV4dC94bWwiLAogICAgICAgICAidGV4dC94c2wi
LApJbmRleDogcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBwbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCShyZXZpc2lvbiAzNzAzOCkKKysr
IHBsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3Jn
PgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA3IFRyb2xsdGVjaCBBU0EKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDYgKzYzLDEyIEBAIHN0
YXRpYyBjb25zdCBFeHRlbnNpb25NYXAgZXh0ZW5zaW9uTWFwIFsKICAgICB7ICJ4cG0iLCAiaW1h
Z2UveC14cG0iIH0sCiAgICAgeyAieHNsIiwgInRleHQveHNsIiB9LAogICAgIHsgInhodG1sIiwg
ImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyNpZiBFTkFCTEUoV01MKQorICAgIHsgIndtbCIs
ICJ0ZXh0L3ZuZC53YXAud21sIiB9LAorI2VuZGlmCisjaWYgRU5BQkxFKFdCWE1MKQorICAgIHsg
IndtbGMiLCAiYXBwbGljYXRpb24vdm5kLndhcC53bWxjIiB9LAorI2VuZGlmCiAgICAgeyAwLCAw
IH0KIH07CiAK
</data>
<flag name="review"
          id="10959"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24708</attachid>
            <date>2008-10-28 03:58:07 -0700</date>
            <delta_ts>2008-11-14 02:30:17 -0800</delta_ts>
            <desc>WML module</desc>
            <filename>wml_dir.patch</filename>
            <type>text/plain</type>
            <size>199876</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IHdtbC9XTUxBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEFFbGVtZW50
LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxBRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MQUVs
ZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOworCitXTUxBRWxl
bWVudDo6V01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRv
YykgCisgICAgOiBXTUxFbGVtZW50KG5hbWUsIGRvYykKK3sKKyAgICBzZXRJc0xpbmsodHJ1ZSk7
Cit9CisKK1dNTEFFbGVtZW50Ojp+V01MQUVsZW1lbnQoKQoreworfQorCit2b2lkIFdNTEFFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpIAoreworICAgIGJvb2wgc2hvdWxk
SGFuZGxlID0gZmFsc2U7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGNsaWNrRXZlbnQpCisgICAg
ICAgIHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgZWxzZSBpZiAoKGV2dC0+dHlwZSgpID09IGtl
eXByZXNzRXZlbnQpICYmIGV2dC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZm9jdXNlZCgpKSB7Cisg
ICAgICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5
SWRlbnRpZmllcigpOworICAgICAgICBpZiAoa2V5ID09ICJFbnRlciIpIAorICAgICAgICAgICAg
c2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICB9CisgCisgICAgaWYgKHNob3VsZEhhbmRsZSAmJiBp
c0xpbmsoKSkgeworICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoZ2V0QXR0cmlidXRlKCJo
cmVmIikpOworCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT51cmxTZWxl
Y3RlZChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLCBnZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
Ojp0YXJnZXRBdHRyKSwgZXZ0LCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgZXZ0LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgIH0gZWxzZQorICAgICAgICBFdmVudFRhcmdldE5vZGU6OmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZ0KTsKK30KKworU3RyaW5nIFdNTEFFbGVtZW50Ojp0aXRsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSgidGl0bGUiKTsKK30KKworYm9vbCBXTUxB
RWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnRhYnNU
b0xpbmtzKGV2ZW50KTsKK30KKworYm9vbCBXTUxBRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOyAKK30KKworfQpJbmRleDogd21sL1dNTEFFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gd21sL1dNTEFFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01M
QUVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAg
ICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01M
QUVsZW1lbnRfaAorI2RlZmluZSBXTUxBRWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxFbGVtZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MQUVsZW1lbnQgOiBwdWJsaWMg
IFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisgICAgfldNTEFFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJk
Rm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1
c2FibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OworCit9Owor
Cit9CisKKyNlbmRpZgpJbmRleDogd21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHdtbC9XTUxBY2Nlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxBY2Nl
c3NFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
SGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3RhdGUu
aCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1
c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTEFjY2Vzc0VsZW1lbnQ6OldNTEFjY2Vzc0Vs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6
IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKSAKK3sKK30KKworCitXTUxBY2Nlc3NFbGVtZW50Ojp+
V01MQWNjZXNzRWxlbWVudCgpIAoreworfQorCit2b2lkIFdNTEFjY2Vzc0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+
bmFtZSgpID09IGRvbWFpbkF0dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFi
bGVSZWYoYXR0ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChXTUxIZWxwZXI6OnRv
a2VuaXplcigpKTsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVy
cm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKS0+c2V0RGVja0FjY2Vzc0RvbWFpbihh
dHRyLT52YWx1ZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwYXRoQXR0cikg
eworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkg
eworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxp
ZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCisgICAgICAgICAgICBkb2N1bWVudCgp
LT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zZXREZWNrQWNjZXNzUGF0aChhdHRyLT52YWx1ZSgp
KTsKKyAgICB9Cit9CisKK30KSW5kZXg6IHdtbC9XTUxBY2Nlc3NFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gd21sL1dNTEFjY2Vzc0VsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxBY2Nl
c3NFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdN
TEFjY2Vzc0VsZW1lbnRfaAorI2RlZmluZSBXTUxBY2Nlc3NFbGVtZW50X2gKKworI2luY2x1ZGUg
IldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsK
KworY2xhc3MgV01MQWNjZXNzRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50eworcHVibGljOgor
ICAgIFdNTEFjY2Vzc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxBY2Nlc3NFbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworfTsKKworfSAvL25hbWVz
cGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSB3bWwvV01MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MQW5j
aG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MQW5jaG9yRWxlbWVudC5oIgorCisjaW5jbHVkZSAi
Q1NTSGVscGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgor
I2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS2V5Ym9h
cmRFdmVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1l
bnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7
Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKKworV01MQW5jaG9yRWxlbWVudDo6V01MQW5j
aG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKSAKKyAg
ICA6IEhUTUxBbmNob3JFbGVtZW50KG5hbWUsIGRvYyksIG1fdGFzaygwKQoreworICAgIHNldEhy
ZWYoIiIpOyAgICAgLy8gdGhpcyBpcyB0aGUgaGFjayBzbyB0aGF0IGFuY2hvciByZW5kZXJzIGxp
a2UgYSBsaW5rCit9CisKK1dNTEFuY2hvckVsZW1lbnQ6On5XTUxBbmNob3JFbGVtZW50KCkKK3sK
K30KKwordm9pZCBXTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
KSAKK3sKKyAgICBib29sIHNob3VsZEhhbmRsZSA9IGZhbHNlOworICAgIGlmIChlLT50eXBlKCkg
PT0gY2xpY2tFdmVudCkKKyAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICBlbHNlIGlm
ICgoZS0+dHlwZSgpID09IGtleWRvd25FdmVudCkgJiYgZS0+aXNLZXlib2FyZEV2ZW50KCkgJiYg
Zm9jdXNlZCgpKSB7CisgICAgICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZSktPmtleUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKGtleSA9PSAiRW50ZXIiKQor
ICAgICAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxk
SGFuZGxlICYmIG1fdGFzaykgeworICAgICAgICBtX3Rhc2stPmV4ZWMoZSk7CisgICAgICAgIGUt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICBFdmVudFRhcmdl
dE5vZGU6OmRlZmF1bHRFdmVudEhhbmRsZXIoZSk7Cit9CisKK3ZvaWQgV01MQW5jaG9yRWxlbWVu
dDo6cmVnaXN0ZXJUYXNrKFdNTFRhc2tFbGVtZW50KiB0YXNrKQoreyAKKyAgICBtX3Rhc2sgPSB0
YXNrOworfQorCit9CkluZGV4OiB3bWwvV01MQW5jaG9yRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdtbC9XTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MQW5jaG9yRWxl
bWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxBbmNo
b3JFbGVtZW50X2gKKyNkZWZpbmUgV01MQW5jaG9yRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1M
QW5jaG9yRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tF
bGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEFuY2hvckVsZW1lbnQg
OiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgeworcHVibGljOgorICAgIFdNTEFuY2hvckVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5X
TUxBbmNob3JFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOworCisgICAgdm9pZCByZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqKTsKKwor
cHJpdmF0ZToKKworICAgIFdNTFRhc2tFbGVtZW50KiBtX3Rhc2s7CisKK307CisKK30gLy9uYW1l
c3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MQXR0cmlidXRlTmFtZXMuaW4KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAwKQorKysgd21sL1dNTEF0
dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACituYW1lc3BhY2U9
IldNTCIKK25hbWVzcGFjZVVSST0iIgorZ3VhcmRGYWN0b3J5V2l0aD0iRU5BQkxFKFdNTCkiCith
dHRyc051bGxOYW1lc3BhY2U9IjEiCisKK25hbWUKK2lkCit0aXRsZQorbmV3Y29udGV4dAorb3Jk
ZXJlZAorbGFiZWwKK29wdGlvbmFsCit0eXBlCitocmVmCit2YWx1ZQorb25lbnRlcmZvcndhcmQK
K29uZW50ZXJiYWNrd2FyZAorb250aW1lcgorc2VuZHJlZmVyZXIKK21ldGhvZAorY2FjaGUtY29u
dHJvbAorZW5jdHlwZQorYWNjZXB0LWNoYXJzZXQKK2luYW1lCitpdmFsdWUKK211bHRpcGxlCit0
YWJpbmRleAorb25waWNrCitmb3JtYXQKK2VtcHR5b2sKK3NpemUKK21heGxlbmd0aAorYWx0Citz
cmMKK2xvY2Fsc3JjCit2c3BhY2UKK2hzcGFjZQorYWxpZ24KK2hlaWdodAord2lkdGgKK2NvbHVt
bnMKK21vZGUKK2RvbWFpbgorcGF0aApJbmRleDogd21sL1dNTENhcmRFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSB3bWwvV01MQ2FyZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgd21sL1dN
TENhcmRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKworI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJU
aW1lci5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnRG
YWN0b3J5LmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVy
LmgiCisjaW5jbHVkZSAiV01MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIK
KyNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MVGFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAid3RmL1ZlY3Rvci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01M
Q2FyZEVsZW1lbnQ6OldNTENhcmRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUs
IERvY3VtZW50ICpkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1f
aXNWaXNpYmxlKGZhbHNlKQorICAgICwgbV9pc05ld0NvbnRleHQoZmFsc2UpCisgICAgLCBtX2lz
T3JkZXJlZCh0cnVlKQorICAgICwgbV90ZW1wbGF0ZSgwKQorICAgICwgbV9ldm50SGFuZGxlcigw
KQorICAgICwgbV9oYXNJbnRyaW5zaWNFdmVudChmYWxzZSkKKyAgICAsIG1fZXZ0VGltZXIoMCkK
K3sKK30KKworV01MQ2FyZEVsZW1lbnQ6On5XTUxDYXJkRWxlbWVudCgpIAoreworICAgIGlmICht
X2V2bnRIYW5kbGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX2V2bnRIYW5kbGVyOworICAgICAgICBt
X2V2bnRIYW5kbGVyID0gMDsKKyAgICB9CisKKyAgICBtX3RlbXBsYXRlID0gMDsKKyAgICBtX2V2
dFRpbWVyID0gMDsKK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIFdNTEludHJpbnNpY0V2ZW50VHlwZSBl
dHlwZSA9IFVua25vd247CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0cikKKyAg
ICAgICAgbV90aXRsZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgp
LCBkb2N1bWVudCgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lbnRlcmZvcndh
cmRBdHRyKQorICAgICAgICBldHlwZSA9IE9uRW50ZXJGb3J3YXJkOworICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBvbmVudGVyYmFja3dhcmRBdHRyKQorICAgICAgICBldHlwZSA9IE9uRW50
ZXJCYWNrd2FyZDsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb250aW1lckF0dHIpCisg
ICAgICAgIGV0eXBlID0gT25UaW1lcjsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmV3
Y29udGV4dEF0dHIpCisgICAgICAgIG1faXNOZXdDb250ZXh0ID0gKGF0dHItPnZhbHVlKCkgPT0g
InRydWUiKSA/IHRydWUgOiBmYWxzZTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb3Jk
ZXJlZEF0dHIpCisgICAgICAgIG1faXNPcmRlcmVkID0gKGF0dHItPnZhbHVlKCkgPT0gInRydWUi
KSA/IHRydWUgOiBmYWxzZTsKKyAgICAKKyAgICAvLyByZWdpc3RlciBpbnRyaW5zaWMgZXZlbnQg
dG8gY2FyZAorICAgIGlmIChldHlwZSAhPSBVbmtub3duKSB7CisgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKCJnbyIsICJnbyIsICIiKTsK
KyAgICAgICAgRWxlbWVudCogZ28gPSBXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVu
dChxTmFtZSwgZG9jdW1lbnQoKSwgZmFsc2UpOyAKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBXTUxI
ZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwgImVzY2Fw
ZSIpOworICAgICAgICBnby0+c2V0QXR0cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwgZWMpOwor
CisgICAgICAgIFdNTEludHJpbnNpY0V2ZW50IGV2OworICAgICAgICBldi50YXNrID0gc3RhdGlj
X2Nhc3Q8V01MR29FbGVtZW50Kj4oZ28pOworICAgICAgICBldi50YXJnZXRVUkkgPSBocmVmOyAK
KworICAgICAgICBpZiAoIW1fZXZudEhhbmRsZXIpCisgICAgICAgICAgICBtX2V2bnRIYW5kbGVy
ID0gbmV3IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworCisgICAgICAgIHNldEhhc0ludHJp
bnNpY0V2ZW50KHRydWUpOworICAgICAgICBtX2V2bnRIYW5kbGVyLT5yZWdpc3RlckludHJpbnNp
Y0V2ZW50KGV0eXBlLCBldik7CisgICAgfQorfQorCitSZW5kZXJPYmplY3QqIFdNTENhcmRFbGVt
ZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiBzdHlsZSkgCit7
CisgICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoTk9ORSk7
CisgICAgCisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxl
KTsKK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6c2V0VmlzaWJpbGl0eShib29sIGlzVmlzaWJs
ZSkgCit7CisgICAgbV9pc1Zpc2libGUgPSBpc1Zpc2libGU7Cit9CisKK2Jvb2wgV01MQ2FyZEVs
ZW1lbnQ6OnZpc2libGUoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9pc1Zpc2libGU7Cit9CisK
K2Jvb2wgV01MQ2FyZEVsZW1lbnQ6OmlzTmV3Q29udGV4dCgpIGNvbnN0IAoreworICAgIHJldHVy
biBtX2lzTmV3Q29udGV4dDsKK30KKworYm9vbCBXTUxDYXJkRWxlbWVudDo6aXNPcmRlcmVkKCkg
Y29uc3QgCit7CisgICAgcmV0dXJuIG1faXNPcmRlcmVkOworfQorCitTdHJpbmcgV01MQ2FyZEVs
ZW1lbnQ6OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aXRsZTsgCit9CisKK3ZvaWQg
V01MQ2FyZEVsZW1lbnQ6OmJpbmRUZW1wbGF0ZShXTUxUZW1wbGF0ZUVsZW1lbnQqIHRlbXBsKSAK
K3sKKyAgICBtX3RlbXBsYXRlID0gdGVtcGw7Cit9CisKK1dNTFRlbXBsYXRlRWxlbWVudCogV01M
Q2FyZEVsZW1lbnQ6OnRlbXBsYXRlRWxlbWVudCgpCit7CisgICAgcmV0dXJuIG1fdGVtcGxhdGU7
Cit9CisKK1dNTEludHJpbnNpY0V2ZW50SGFuZGxlciogV01MQ2FyZEVsZW1lbnQ6OmV2ZW50SGFu
ZGxlcigpCit7CisgICAgaWYgKG1faGFzSW50cmluc2ljRXZlbnQgJiYgIW1fZXZudEhhbmRsZXIp
ICB7CisgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVy
KCk7CisgICAgfQorICAgIHJldHVybiBtX2V2bnRIYW5kbGVyOworfQorCit2b2lkIFdNTENhcmRF
bGVtZW50OjpzZXRIYXNJbnRyaW5zaWNFdmVudChib29sIGhhcykKK3sKKyAgICBtX2hhc0ludHJp
bnNpY0V2ZW50ID0gaGFzOworfQorCitib29sIFdNTENhcmRFbGVtZW50OjpoYXNJbnRyaW5zaWNF
dmVudCgpCit7CisgICAgcmV0dXJuIG1faGFzSW50cmluc2ljRXZlbnQ7Cit9CisKK3ZvaWQgV01M
Q2FyZEVsZW1lbnQ6OnNldEludHJpbnNpY0V2ZW50VGltZXIoV01MVGltZXJFbGVtZW50KiB0aW1l
cikKK3sKKyAgICAvLyBvbmx5IG9uZSB0aW1lciBpcyBhbGxvd2VkIGluIGEgY2FyZCAKKyAgICBp
ZiAoIW1fZXZ0VGltZXIpCisgICAgICAgIG1fZXZ0VGltZXIgPSB0aW1lcjsKKyAgICBlbHNlIHsK
KyAgICAgICAgbV9ldnRUaW1lciA9IDA7CisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCkt
PnJlcG9ydEVycm9yKE11bHRpVGltZXJFbGVtZW50c0Vycm9yKTsKKyAgICB9Cit9CisKK1dNTFRp
bWVyRWxlbWVudCogV01MQ2FyZEVsZW1lbnQ6OmV2ZW50VGltZXIoKQoreworICAgIHJldHVybiBt
X2V2dFRpbWVyOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpyZWdpc3RlckRvRWxlbWVudChX
TUxEb0VsZW1lbnQqIGUpCit7CisgICAgaWYgKGUpIHsKKyAgICAgICAgVmVjdG9yPFdNTERvRWxl
bWVudCo+OjppdGVyYXRvciBpdCA9IG1fZG9WZWNzLmJlZ2luKCk7CisgICAgICAgIFdNTERvRWxl
bWVudCogZG9FbGVtID0gMDsKKyAgICAgICAgd2hpbGUgKGl0ICE9IG1fZG9WZWNzLmVuZCgpKSB7
CisgICAgICAgICAgICBkb0VsZW0gPSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPigqaXQrKyk7
CisKKyAgICAgICAgICAgIGlmIChkb0VsZW0tPmRvTmFtZSgpID09IGUtPmRvTmFtZSgpKSB7Cisg
ICAgICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoU2FtZU5h
bWVEb0VsZW1lbnRzRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBtX2RvVmVjcy5hcHBlbmQoZSk7CisgICAgICAgIGUtPnNl
dEFjdGl2ZSh0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnNoYWRvd0Rv
RWxlbWVudElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fdGVtcGxhdGUpIAorICAgICAgICByZXR1
cm47CisKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gdGVtcGxEb05hbWVWZWNzID0gbV90ZW1w
bGF0ZS0+Z2V0RG9FbGVtZW50cygpOworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6aXRlcmF0
b3IgY2FyZEl0ID0gbV9kb1ZlY3MuYmVnaW4oKTsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46
Oml0ZXJhdG9yIHRlbXBsSXQgPSB0ZW1wbERvTmFtZVZlY3MuYmVnaW4oKTsgCisKKyAgICBTdHJp
bmcgdGVtcGxEb05hbWU7CisgICAgU3RyaW5nIGNhcmREb05hbWU7CisgICAgV01MRG9FbGVtZW50
KiB0ZW1wbERvID0gMDsKKyAgICBmb3IgKDsgdGVtcGxJdCAhPSB0ZW1wbERvTmFtZVZlY3MuZW5k
KCk7ICsrdGVtcGxJdCkgeworICAgICAgICB0ZW1wbERvID0gKnRlbXBsSXQ7CisgICAgICAgIHRl
bXBsRG9OYW1lID0gdGVtcGxEby0+ZG9OYW1lKCk7CisgICAgICAgIGJvb2wgaXNBY3RpdmUgPSB0
cnVlOworICAgICAgICBmb3IgKGNhcmRJdCA9IG1fZG9WZWNzLmJlZ2luKCk7IGNhcmRJdCAhPSBt
X2RvVmVjcy5lbmQoKTsgKytjYXJkSXQpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wbERvTmFtZSA9
PSAoKmNhcmRJdCktPmRvTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisg
ICAgICAgIHRlbXBsRG8tPnNldEFjdGl2ZShpc0FjdGl2ZSk7CisgICAgfQorfQorCisKK3ZvaWQg
V01MQ2FyZEVsZW1lbnQ6OmhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVkZWQoKQoreworICAgIEFT
U0VSVChkb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgp
KTsKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVy
KCk7CisgICAgQVNTRVJUKGxvYWRlcik7CisgICAgV01MUGFnZVN0YXRlKiBwYWdlU3RhdGUgPSBk
b2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIEFTU0VSVChwYWdlU3RhdGUp
OworICAgIGludCBjdXJIaXN0TGVuID0gbG9hZGVyLT5nZXRIaXN0b3J5TGVuZ3RoKCk7CisgICAg
aW50IG9sZEhpc3RMZW4gPSBwYWdlU3RhdGUtPmhpc3RvcnlMZW5ndGgoKTsKKworICAgIC8vIGNh
bGN1bGF0ZSB0aGUgZW50cnkgbWV0aG9kIG9mIGN1cnJlbnQgY2FyZCAKKyAgICBXTUxJbnRyaW5z
aWNFdmVudFR5cGUgZXR5cGU7CisgICAgaWYgKG9sZEhpc3RMZW4gPiBjdXJIaXN0TGVuKQorICAg
ICAgICBldHlwZSA9IE9uRW50ZXJCYWNrd2FyZDsKKyAgICBlbHNlIGlmIChvbGRIaXN0TGVuIDwg
Y3VySGlzdExlbikKKyAgICAgICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICBlbHNlCisg
ICAgICAgIGV0eXBlID0gVW5rbm93bjsKKyAKKyAgICAvLyB1cGRhdGUgdGhlIGhoaXN0b3J5IGxl
bmd0aCBpbiB0aGUgY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICBwYWdlU3RhdGUtPnNldEhp
c3RvcnlMZW5ndGgoY3VySGlzdExlbik7CisgCisgICAgLy8gaGFuZGxlIGludHJpbnNpYyBldmVu
dCwgYW5kIHNoYWRvdyB0aGUgZGVjay1sZXZlbCBldmVudCBpZiBuZWVkZWQKKyAgICBib29sIGhh
c0ludHJpbnNpY0V2ZW50ID0gIGZhbHNlOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciog
ZXZIYW5kbGVyID0gbV9ldm50SGFuZGxlcjsgCisgICAgaWYgKGV0eXBlICE9IFVua25vd24pIHsK
KyAgICAgICAgaWYgKGV2SGFuZGxlciAmJiBldkhhbmRsZXItPmhhc0ludHJpbnNpY0V2ZW50KGV0
eXBlKSkKKyAgICAgICAgICAgIGhhc0ludHJpbnNpY0V2ZW50ID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZSBpZiAobV90ZW1wbGF0ZSkgeworICAgICAgICAgICAgZXZIYW5kbGVyID0gbV90ZW1wbGF0ZS0+
ZXZlbnRIYW5kbGVyKCk7CisgICAgICAgICAgICBpZiAoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+
aGFzSW50cmluc2ljRXZlbnQoZXR5cGUpKQorICAgICAgICAgICAgICAgIGhhc0ludHJpbnNpY0V2
ZW50ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICBpZiAoaGFzSW50cmluc2ljRXZl
bnQpCisgICAgICAgIGV2SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2ZW50KGV0eXBlKTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgLy8gc3RhcnQgdGhlIHRpbWVyIGlmIGl0IGV4aXN0cyBpbiBjdXJy
ZW50IGNhcmQKKyAgICAgICAgaWYgKG1fZXZ0VGltZXIpCisgICAgICAgICAgICBtX2V2dFRpbWVy
LT5zdGFydCgpOworCisgICAgICAgIC8vaW5pdGlhbGlzZSBpbnB1dCBlbGVtZW50cyhlZy4gaW5w
dXQsIHNlbGVjdCwgZXRjKSBpbiB0aGlzIGNhcmQKKyAgICAgICAgTm9kZSogbm9kZSA9IHRoaXM7
CisgICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsKKyAg
ICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICAgICAgICAgICAg
ICBzdGF0aWNfY2FzdDxXTUxJbnB1dEVsZW1lbnQqPihub2RlKS0+aW5pdCgpOworICAgICAgICAg
ICAgZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgICAgICAgICAgICAg
IHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihub2RlKS0+c2VsZWN0SW5pdGlhbE9wdGlv
bnMoKTsKKyAgICAgICAgfQorCisgICAgfQorfQorCit2b2lkIFdNTENhcmRFbGVtZW50Ojp1cGRh
dGVUYWJsZUVsZW1lbnQoKQoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzOyAKKyAgICBXTUxUYWJs
ZUVsZW1lbnQqIHRhYmxlID0gMDsKKyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5l
eHROb2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFi
bGVUYWcpKSB7CisgICAgICAgICAgICB0YWJsZSA9IHN0YXRpY19jYXN0PFdNTFRhYmxlRWxlbWVu
dCo+KG5vZGUpOworICAgICAgICAgICAgaWYgKHRhYmxlKQorICAgICAgICAgICAgICAgIHRhYmxl
LT5pbml0KCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShXTUxOYW1lczo6
Y2FyZFRhZykpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30KSW5kZXg6IHdtbC9X
TUxDYXJkRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxDYXJkRWxlbWVudC5oCShyZXZp
c2lvbiAwKQorKysgd21sL1dNTENhcmRFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
ODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFdNTENhcmRFbGVtZW50X2gKKyNkZWZpbmUgV01MQ2FyZEVsZW1l
bnRfaAorCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBXTUxUYXNrRWxlbWVudDsKK2NsYXNzIFdNTFRpbWVyRWxlbWVudDsKK2NsYXNz
IFdNTERvRWxlbWVudDsKKworY2xhc3MgV01MQ2FyZEVsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVu
dCB7CitwdWJsaWM6CisgICAgV01MQ2FyZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERv
Y3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MQ2FyZEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFs
IFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSop
OworCisgICAgdm9pZCBzZXRWaXNpYmlsaXR5KGJvb2wpOworICAgIGJvb2wgdmlzaWJsZSgpIGNv
bnN0OworCisgICAgYm9vbCBpc05ld0NvbnRleHQoKSBjb25zdDsKKyAgICBib29sIGlzT3JkZXJl
ZCgpIGNvbnN0OworCisgICAgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisKKyAgICB2b2lkIGJpbmRU
ZW1wbGF0ZShXTUxUZW1wbGF0ZUVsZW1lbnQqKTsKKyAgICBXTUxUZW1wbGF0ZUVsZW1lbnQqIHRl
bXBsYXRlRWxlbWVudCgpOworCisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBldmVudEhh
bmRsZXIoKTsKKyAgICBib29sIGhhc0ludHJpbnNpY0V2ZW50KCk7CisgICAgdm9pZCBzZXRIYXNJ
bnRyaW5zaWNFdmVudChib29sKTsKKyAgICB2b2lkIGhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVk
ZWQoKTsKKworICAgIHZvaWQgc2V0SW50cmluc2ljRXZlbnRUaW1lcihXTUxUaW1lckVsZW1lbnQq
KTsKKyAgICBXTUxUaW1lckVsZW1lbnQqIGV2ZW50VGltZXIoKTsKKworICAgIHZvaWQgcmVnaXN0
ZXJEb0VsZW1lbnQoV01MRG9FbGVtZW50Kik7CisgICAgdm9pZCBzaGFkb3dEb0VsZW1lbnRJZk5l
ZWRlZCgpOworCisgICAgdm9pZCB1cGRhdGVUYWJsZUVsZW1lbnQoKTsKK3ByaXZhdGU6CisgICAg
Ym9vbCBtX2lzVmlzaWJsZTsKKyAgICBTdHJpbmcgbV90aXRsZTsKKyAgICBib29sIG1faXNOZXdD
b250ZXh0OworICAgIGJvb2wgbV9pc09yZGVyZWQ7CisgICAgV01MVGVtcGxhdGVFbGVtZW50KiBt
X3RlbXBsYXRlOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogbV9ldm50SGFuZGxlcjsK
KyAgICBib29sIG1faGFzSW50cmluc2ljRXZlbnQ7CisgICAgV01MVGltZXJFbGVtZW50KiBtX2V2
dFRpbWVyOyAKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gbV9kb1ZlY3M7Cit9OworCit9IC8v
bmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTERvRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gd21sL1dNTERvRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MRG9FbGVt
ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV01MRG9FbGVtZW50LmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIu
aCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5j
bHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5j
bHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgorI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRl
ICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxQb3N0ZmllbGRFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisj
aW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcg
bmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK1dNTERvRWxlbWVudDo6V01MRG9FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZywgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3Jt
KQorICAgIDogSFRNTEJ1dHRvbkVsZW1lbnQodGFnLCBkb2MsIGZvcm0pCisgICAgLCBtX3Rhc2so
MCkKKyAgICAsIG1faXNPcHRpb24oZmFsc2UpCisgICAgLCBtX2lzTm9vcChmYWxzZSkKKyAgICAs
IG1faXNBY3RpdmUoZmFsc2UpCit7Cit9CisKK1dNTERvRWxlbWVudDo6fldNTERvRWxlbWVudCgp
Cit7Cit9CisKK3ZvaWQgV01MRG9FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBl
KSAKK3sKKyAgICBpZiAobV9pc09wdGlvbikKKyAgICAgICAgcmV0dXJuOworIAorICAgIGJvb2wg
c2hvdWxkSGFuZGxlID0gZmFsc2U7CisgICAgaWYgKGUtPnR5cGUoKSA9PSBjbGlja0V2ZW50KQor
ICAgICAgICBzaG91bGRIYW5kbGUgPSB0cnVlOworICAgIGVsc2UgaWYgKGUtPnR5cGUoKSA9PSBr
ZXlwcmVzc0V2ZW50KQorICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKGUpOworICAgIGVsc2UgaWYgKGUtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgJiYg
ZS0+aXNLZXlib2FyZEV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGUpLT5r
ZXlJZGVudGlmaWVyKCkgPT0gIkVudGVyIikKKyAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsK
KyAKKyAgICBpZiAoc2hvdWxkSGFuZGxlKSB7CisgCisgICAgICAgIGlmICgobV90eXBlID09ICJh
Y2NlcHQiKSB8fCAobV90eXBlID09ICJvcHRpb25zIikpIHsKKyAgICAgICAgICAgIGlmIChtX3Rh
c2spCisgICAgICAgICAgICAgICAgbV90YXNrLT5leGVjKGUpOworICAgICAgICB9IGVsc2UgaWYg
KG1fdHlwZSA9PSAicHJldiIpIHsKKyAgICAgICAgICAgIC8vIHN0b3AgdGhlIHRpbWVyIG9mIHRo
ZSBjdXJyZW50IGNhcmQgaWYgaXQgaXMgYWN0aXZlCisgICAgICAgICAgICBQYWdlKiBwYWdlID0g
ZG9jdW1lbnQoKS0+cGFnZSgpOworICAgICAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gcGFnZS0+d21s
UGFnZVN0YXRlKCktPmFjdGl2ZUNhcmQoKTsKKyAgICAgICAgICAgIGlmIChjYXJkICYmIGNhcmQt
PmV2ZW50VGltZXIoKSkKKyAgICAgICAgICAgICAgICBjYXJkLT5ldmVudFRpbWVyKCktPnN0b3Ao
KTsKKyAKKyAgICAgICAgICAgIHBhZ2UtPmdvQmFjaygpOworICAgICAgICB9IGVsc2UgaWYgKG1f
dHlwZSA9PSAicmVzZXQiKQorICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKSkKKyAg
ICAgICAgICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5yZXNldCgp
OworICAgICAgICBlbHNlIGlmIChtX3R5cGUgPT0gImRlbGV0ZSIpCisgICAgICAgICAgICA7Ly9U
T0RPCisgICAgfQorICAgICAgICAgICAgIAorfQorCit2b2lkIFdNTERvRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnRO
b2RlKCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAg
aWYgKHBhcmVudC0+aGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykpIHsKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFdNTFRlbXBsYXRlRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyRG9FbGVtZW50KHRo
aXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAocGFyZW50LT5oYXNU
YWdOYW1lKGNhcmRUYWcpKSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVu
dCo+KHBhcmVudCktPnJlZ2lzdGVyRG9FbGVtZW50KHRoaXMpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KKyAgICB9Cit9CisKK1JlbmRlck9iamVjdCogV01MRG9FbGVtZW50OjpjcmVh
dGVSZW5kZXJlcihSZW5kZXJBcmVuYSogcmEsIFJlbmRlclN0eWxlKiBycykgCit7CisgICAgaWYg
KCFtX2lzQWN0aXZlIHx8IG1faXNPcHRpb24gfHwgbV9pc05vb3ApCisgICAgICAgIHJldHVybiAw
OworCisgICAgUmVuZGVyQnV0dG9uKiBidXR0b24gPSBuZXcgKHJhKSBSZW5kZXJCdXR0b24odGhp
cyk7IAorICAgIHJzLT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OmxpZ2h0R3JheSk7CisgICAg
YnV0dG9uLT5zZXRTdHlsZShycyk7CisgICAgYnV0dG9uLT5zZXRUZXh0KG1fbGFiZWwuaXNFbXB0
eSgpID8gbV9uYW1lIDogbV9sYWJlbCk7CisgICAgcmV0dXJuIGJ1dHRvbjsKK30KKwordm9pZCBX
TUxEb0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikg
Cit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgeworICAgICAgICBpZiAoV01M
SGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01M
SGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNl
RXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV90eXBl
ID0gYXR0ci0+dmFsdWUoKTsKKworICAgICAgICBpZiAobV9uYW1lLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIG1fbmFtZSA9IG1fdHlwZTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IG5hbWVBdHRyKSB7CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHIt
PnZhbHVlKCkpKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRF
cnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKKyAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBsYWJlbEF0dHIpCisgICAgICAgIG1fbGFiZWwgPSBXTUxIZWxw
ZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSk7CisgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IG9wdGlvbmFsQXR0cikKKyAgICAgICAgbV9pc09wdGlvbiA9
IChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZSk7Cit9CisKK3ZvaWQgV01M
RG9FbGVtZW50OjpyZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqIHRhc2spIAoreworICAgIG1f
dGFzayA9IHRhc2s7Cit9CisKK3ZvaWQgV01MRG9FbGVtZW50OjpzZXROb29wKGJvb2wgbm9vcCkg
Cit7CisgICAgbV9pc05vb3AgPSBub29wOworfQorCitTdHJpbmcgV01MRG9FbGVtZW50Ojpkb05h
bWUoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9uYW1lOworfQorCit2b2lkIFdNTERvRWxlbWVu
dDo6c2V0QWN0aXZlKGJvb2wgYWN0aXZlKQoreworICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7Cit9
CisgCitib29sIFdNTERvRWxlbWVudDo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBt
X2lzQWN0aXZlOworfQorCitib29sIFdNTERvRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShL
ZXlib2FyZEV2ZW50KikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRleDog
d21sL1dNTERvRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxEb0VsZW1lbnQuaAkocmV2
aXNpb24gMCkKKysrIHdtbC9XTUxEb0VsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgV01MRG9FbGVtZW50X2gKKyNkZWZpbmUgV01MRG9FbGVtZW50X2gK
KworI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRXZlbnQ7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFzcyBXTUxUYXNrRWxl
bWVudDsKKworY2xhc3MgV01MRG9FbGVtZW50IDogcHVibGljIEhUTUxCdXR0b25FbGVtZW50IHsK
K3B1YmxpYzoKKyAgICBXTUxEb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworICAgIHZpcnR1YWwgfldNTERvRWxlbWVudCgpOwor
CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwg
UmVuZGVyU3R5bGUqKTsgCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2
ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKKyAg
ICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KikgY29uc3Q7
CisgICAgdm9pZCByZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqKTsKKworICAgIC8vcmVjb3Jk
IHRoZSBub29wIHRhc2sKKyAgICB2b2lkIHNldE5vb3AoYm9vbCk7CisKKyAgICB2b2lkIHNldEFj
dGl2ZShib29sKTsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAgU3RyaW5nIGRvTmFt
ZSgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBXTUxUYXNrRWxlbWVudCogbV90YXNrOworICAgIFN0
cmluZyBtX3R5cGU7CisgICAgU3RyaW5nIG1fbGFiZWw7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAg
ICBib29sIG1faXNPcHRpb247CisgICAgYm9vbCBtX2lzTm9vcDsKKyAgICBib29sIG1faXNBY3Rp
dmU7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTERvY3VtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
d21sL1dNTERvY3VtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxEb2N1bWVudC5oIgorCisjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5o
IgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dN
TERvY3VtZW50OjpXTUxEb2N1bWVudChGcmFtZSogZnJhbWUpCisgICAgOiBEb2N1bWVudChmcmFt
ZSwgZmFsc2UpIAoreworICAgIGNsZWFyWE1MVmVyc2lvbigpOworCisgICAgUGFnZSogcGFnZSA9
IHRoaXMtPnBhZ2UoKTsKKyAgICBpZiAocGFnZSAmJiAhcGFnZS0+d21sUGFnZVN0YXRlKCkpIHsK
KyAgICAgICAgUmVmUHRyPFdNTFBhZ2VTdGF0ZT4gcGFnZVN0YXRlID0gbmV3IFdNTFBhZ2VTdGF0
ZShwYWdlKTsKKyAgICAgICAgcGFnZS0+c2V0V01MUGFnZVN0YXRlKHBhZ2VTdGF0ZSk7CisgICAg
fQorfQorCitXTUxEb2N1bWVudDo6fldNTERvY3VtZW50KCkKK3sKK30KKworVG9rZW5pemVyICpX
TUxEb2N1bWVudDo6Y3JlYXRlVG9rZW5pemVyKCkgCit7CisgICAgcmV0dXJuIG5ldyBXTUxUb2tl
bml6ZXIodGhpcyk7Cit9CisKK2lubGluZSBib29sIFdNTERvY3VtZW50Ojppc1dNTERvY3VtZW50
KCkgY29uc3QgCit7IAorICAgIHJldHVybiB0cnVlOyAKK30KKworfSAvL25hbWVzcGFjZQpJbmRl
eDogd21sL1dNTERvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTERvY3VtZW50LmgJKHJl
dmlzaW9uIDApCisrKyB3bWwvV01MRG9jdW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgV01MRG9jdW1lbnRfaAorI2RlZmluZSBXTUxEb2N1bWVudF9oCisK
KyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MRG9jdW1lbnQgOiBwdWJsaWMgRG9j
dW1lbnQsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFBhc3NSZWZQdHI8V01MRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUpCisgICAgeworICAg
ICAgICByZXR1cm4gbmV3IFdNTERvY3VtZW50KGZyYW1lKTsKKyAgICB9CisgICAgV01MRG9jdW1l
bnQoRnJhbWUqKTsKKyAgICB2aXJ0dWFsIH5XTUxEb2N1bWVudCgpOworCisgICAgdmlydHVhbCBi
b29sIGlzV01MRG9jdW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRva2VuaXplciogY3JlYXRl
VG9rZW5pemVyKCk7Cit9OworCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21s
L1dNTEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxFbGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIHdtbC9XTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisKKyNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVk
ZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEJS
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVt
ZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhU
TUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJtYXJrdXAu
aCIKKyNpbmNsdWRlICJSZW5kZXJXb3JkQnJlYWsuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgor
I2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJUZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJX
TUxEb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1l
cy5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIlhNTFRva2VuaXplci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKwor
V01MRWxlbWVudDo6V01MRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1
bWVudCAqZG9jKQorICAgIDogU3R5bGVkRWxlbWVudCh0YWdOYW1lLCBkb2MpCit7Cit9CisKK1dN
TEVsZW1lbnQ6On5XTUxFbGVtZW50KCkgCit7Cit9CisKK3ZvaWQgV01MRWxlbWVudDo6aW5zZXJ0
ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAgaWYgKGxvY2FsTmFtZSgpID09ICJub29wIikg
eworICAgICAgICBmb3IgKE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgcGFyZW50OyBwYXJl
bnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFz
VGFnTmFtZShkb1RhZykpIHsKKyAgICAgICAgICAgICAgICBXTUxEb0VsZW1lbnQqIGRvRWxlbXQg
PSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPihwYXJlbnQpOworICAgICAgICAgICAgICAgIGlm
IChkb0VsZW10LT5hdHRhY2hlZCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRvRWxlbXQtPmRl
dGFjaCgpOworICAgICAgICAgICAgICAgICAgICBkb0VsZW10LT5zZXROb29wKHRydWUpOworICAg
ICAgICAgICAgICAgICAgICBkb0VsZW10LT5hdHRhY2goKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBhcmVudC0+aGFz
VGFnTmFtZShhbmNob3JUYWcpKQorICAgICAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVy
KCktPnJlcG9ydEVycm9yKFdyb25nVGFza0luQW5jaG9yRWxlbWVudEVycm9yKTsKKyAgICAgICAg
fQorICAgIH0KK30KKworUmVuZGVyT2JqZWN0KiBXTUxFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiBzdHlsZSkgCit7CisgICAgcmV0dXJuIFJlbmRlck9i
amVjdDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxlKTsKK30KKworYm9vbCBXTUxFbGVtZW50Ojpp
c0hUTUxFbGVtZW50KCkgY29uc3QgCit7IAorICAgIHJldHVybiB0cnVlOyAKK30KKworfQpJbmRl
eDogd21sL1dNTEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MRWxlbWVudC5oCShyZXZp
c2lvbiAwKQorKysgd21sL1dNTEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgV01MRWxlbWVudF9oCisjZGVmaW5lIFdNTEVsZW1lbnRfaAorCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEVsZW1lbnQg
OiBwdWJsaWMgU3R5bGVkRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTEVsZW1l
bnQoKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJl
bmEqLCBSZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVtZW50KCkgY29u
c3Q7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKK307CisK
K30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MRWxlbWVudEZhY3RvcnkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHdtbC9XTUxFbGVtZW50RmFjdG9yeS5jcHAJKHJldmlzaW9uIDApCisr
KyB3bWwvV01MRWxlbWVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIxOCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5o
IgorCisjaW5jbHVkZSAiSFRNTEJSRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVt
ZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCisjaW5jbHVkZSAiU2V0
dGluZ3MuaCIKKyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxBbmNob3JFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQ2Fy
ZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxHb0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxQRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFBvc3RmaWVsZEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQcmV2RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFJlZnJl
c2hFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUaW1lckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIK
KworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwor
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OldNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIFdlYkNv
cmU6OkhUTUxOYW1lczsKKwordHlwZWRlZiBFbGVtZW50ICooKkNvbnN0cnVjdG9yRnVuYykoRG9j
dW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwordHlwZWRlZiBXVEY6Okhhc2hNYXA8
QXRvbWljU3RyaW5nSW1wbCosIENvbnN0cnVjdG9yRnVuYz4gRnVuY3Rpb25NYXA7CisKK3N0YXRp
YyBGdW5jdGlvbk1hcCAqZ0Z1bmN0aW9uTWFwID0gMDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitFbGVtZW50ICpjYXJkQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxDYXJkRWxlbWVudChjYXJkVGFnLCBkb2MpOwor
fQorCitFbGVtZW50ICp3bWxfYUNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MQUVsZW1lbnQoV01MTmFtZXM6OmFUYWcs
IGRvYyk7Cit9CisKK0VsZW1lbnQgKmltZ0NvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MSW1hZ2VFbGVtZW50KEhUTUxO
YW1lczo6aW1nVGFnLCBkb2MpOworfQorCitFbGVtZW50ICpickNvbnN0cnVjdG9yKERvY3VtZW50
ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgSFRNTEJSRWxl
bWVudChkb2MpOworfQorCitFbGVtZW50ICpwQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxQRWxlbWVudChkb2MpOwor
fQorCitFbGVtZW50ICppbnB1dENvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MSW5wdXRFbGVtZW50KFdNTE5hbWVzOjpp
bnB1dFRhZywgZG9jKTsKK30KKworRWxlbWVudCAqYW5jaG9yQ29uc3RydWN0b3IoRG9jdW1lbnQg
KmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxBbmNob3JF
bGVtZW50KFdNTE5hbWVzOjphbmNob3JUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnNlbGVjdENv
bnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJl
dHVybiBuZXcgV01MU2VsZWN0RWxlbWVudChXTUxOYW1lczo6c2VsZWN0VGFnLCBkb2MpOworfQor
CitFbGVtZW50ICpvcHRpb25Db25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTE9wdGlvbkVsZW1lbnQoZG9jKTsKK30KKwor
RWxlbWVudCAqcHJldkNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQoreworICAgIHJldHVybiBuZXcgV01MUHJldkVsZW1lbnQoZG9jKTsKK30KKworRWxlbWVu
dCAqZ29Db25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sK
KyAgICByZXR1cm4gbmV3IFdNTEdvRWxlbWVudChXTUxOYW1lczo6Z29UYWcsIGRvYyk7Cit9CisK
K0VsZW1lbnQgKnBvc3RmaWVsZENvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JldGVk
QnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxQb3N0ZmllbGRFbGVtZW50KFdNTE5hbWVz
Ojpwb3N0ZmllbGRUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnNldHZhckNvbnN0cnVjdG9yKERv
Y3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01M
U2V0dmFyRWxlbWVudChXTUxOYW1lczo6c2V0dmFyVGFnLCBkb2MpOworfQorCitFbGVtZW50ICp0
YWJsZUNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQorewor
ICAgIHJldHVybiBuZXcgV01MVGFibGVFbGVtZW50KGRvYyk7Cit9CisKK0VsZW1lbnQgKnRyQ29u
c3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0
dXJuIG5ldyBIVE1MVGFibGVSb3dFbGVtZW50KGRvYyk7Cit9CisKK0VsZW1lbnQgKnRkQ29uc3Ry
dWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJu
IG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudChIVE1MTmFtZXM6OnRkVGFnLGRvYyk7Cit9CisKK0Vs
ZW1lbnQgKmRvQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBXTUxEb0VsZW1lbnQoZG9UYWcsIGRvYyk7Cit9CisKK0VsZW1l
bnQgKnJlZnJlc2hDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNl
cikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFJlZnJlc2hFbGVtZW50KHJlZnJlc2hUYWcsIGRvYyk7
Cit9CisKK0VsZW1lbnQgKnRlbXBsYXRlQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBj
cmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxUZW1wbGF0ZUVsZW1lbnQodGVt
cGxhdGVUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnRpbWVyQ29uc3RydWN0b3IoRG9jdW1lbnQg
KmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxUaW1lckVs
ZW1lbnQodGltZXJUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKmFjY2Vzc0NvbnN0cnVjdG9yKERv
Y3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01M
QWNjZXNzRWxlbWVudChhY2Nlc3NUYWcsIGRvYyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBj
cmVhdGVGdW5jdGlvbk1hcElmTmVjZXNzYXJ5KCkKK3sKKyAgICBpZiAoZ0Z1bmN0aW9uTWFwKQor
ICAgICAgICByZXR1cm47CisgICAgLy8gQ3JlYXRlIHRoZSB0YWJsZS4KKyAgICBnRnVuY3Rpb25N
YXAgPSBuZXcgRnVuY3Rpb25NYXA7CisgICAgCisgICAgLy8gUG9wdWxhdGUgaXQgd2l0aCBjb25z
dHJ1Y3RvciBmdW5jdGlvbnMuCisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmNhcmRU
YWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjYXJkQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1h
cC0+c2V0KFdNTE5hbWVzOjphVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgd21sX2FDb25zdHJ1Y3Rv
cik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoSFRNTE5hbWVzOjppbWdUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCBpbWdDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoSFRNTE5hbWVz
OjpiclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGJyQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlv
bk1hcC0+c2V0KFdNTE5hbWVzOjpwVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgcENvbnN0cnVjdG9y
KTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6aW5wdXRUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCBpbnB1dENvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1l
czo6YW5jaG9yVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgYW5jaG9yQ29uc3RydWN0b3IpOworICAg
IGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpzZWxlY3RUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCBzZWxlY3RDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6Om9w
dGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIG9wdGlvbkNvbnN0cnVjdG9yKTsKKyAgICBnRnVu
Y3Rpb25NYXAtPnNldChXTUxOYW1lczo6cHJldlRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHByZXZD
b25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmdvVGFnLmxvY2Fs
TmFtZSgpLmltcGwoKSwgZ29Db25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01M
TmFtZXM6OnBvc3RmaWVsZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHBvc3RmaWVsZENvbnN0cnVj
dG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6c2V0dmFyVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgc2V0dmFyQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdN
TE5hbWVzOjp0YWJsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRhYmxlQ29uc3RydWN0b3IpOwor
ICAgIGdGdW5jdGlvbk1hcC0+c2V0KEhUTUxOYW1lczo6dHJUYWcubG9jYWxOYW1lKCkuaW1wbCgp
LCB0ckNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChIVE1MTmFtZXM6OnRkVGFn
LmxvY2FsTmFtZSgpLmltcGwoKSwgdGRDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5z
ZXQoV01MTmFtZXM6OnJlZnJlc2hUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCByZWZyZXNoQ29uc3Ry
dWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpkb1RhZy5sb2NhbE5hbWUo
KS5pbXBsKCksIGRvQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVz
Ojp0ZW1wbGF0ZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRlbXBsYXRlQ29uc3RydWN0b3IpOwor
ICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjp0aW1lclRhZy5sb2NhbE5hbWUoKS5pbXBs
KCksIHRpbWVyQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjph
Y2Nlc3NUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBhY2Nlc3NDb25zdHJ1Y3Rvcik7Cit9CisKK0Vs
ZW1lbnQgKldNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHFOYW1lLCBEb2N1bWVudCogZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKwor
ICAgIFdlYkNvcmU6OldNTE5hbWVzOjppbml0KCk7CisgICAgLy8gRG9uJ3QgbWFrZSBlbGVtZW50
cyB3aXRob3V0IGEgZG9jdW1lbnQKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuIDA7Cisg
ICAgCisgICAgY3JlYXRlRnVuY3Rpb25NYXBJZk5lY2Vzc2FyeSgpOworICAgIENvbnN0cnVjdG9y
RnVuYyBmdW5jID0gZ0Z1bmN0aW9uTWFwLT5nZXQocU5hbWUubG9jYWxOYW1lKCkuaW1wbCgpKTsK
KyAgICBpZiAoZnVuYykKKyAgICAgICAgcmV0dXJuIGZ1bmMoZG9jLCBjcmVhdGVkQnlQYXJzZXIp
OworICAgIAorICAgIHJldHVybiBuZXcgV01MRWxlbWVudChxTmFtZSwgZG9jKTsKK30KKworfSAv
LyBuYW1lc3BhY2UKKwpJbmRleDogd21sL1dNTEVsZW1lbnRGYWN0b3J5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gd21sL1dNTEVsZW1lbnRGYWN0b3J5LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MRWxlbWVu
dEZhY3RvcnkuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAg
ICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01M
RWxlbWVudEZhY3RvcnlfaAorI2RlZmluZSBXTUxFbGVtZW50RmFjdG9yeV9oCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIERvY3VtZW50OworICAg
IGNsYXNzIFF1YWxpZmllZE5hbWU7CisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworfQorCituYW1l
c3BhY2UgV2ViQ29yZQoreworICAgIGNsYXNzIFdNTEVsZW1lbnQ7CisKKyAgICAvLyBUaGUgaWRl
YSBiZWhpbmQgdGhpcyBjbGFzcyBpcyB0aGF0IHRoZXJlIHdpbGwgZXZlbnR1YWxseSBiZSBhIG1h
cHBpbmcgZnJvbSBuYW1lc3BhY2UgVVJJcyB0byBFbGVtZW50RmFjdG9yaWVzIHRoYXQgY2FuIGRp
c3BlbnNlCisgICAgLy8gZWxlbWVudHMuICBJbiBhIGNvbXBvdW5kIGRvY3VtZW50IHdvcmxkLCB0
aGUgZ2VuZXJpYyBjcmVhdGVFbGVtZW50IGZ1bmN0aW9uICh3aWxsIGVuZCB1cCBiZWluZyB2aXJ0
dWFsKSB3aWxsIGJlIGNhbGxlZC4KKyAgICBjbGFzcyBXTUxFbGVtZW50RmFjdG9yeQorICAgIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFdlYkNvcmU6OkVsZW1lbnQgKmNyZWF0ZUVsZW1lbnQoY29u
c3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUsIFdlYkNvcmU6OkRvY3VtZW50ICpkb2Ms
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1ZSk7CisgICAgICAgIHN0YXRpYyBFbGVtZW50ICpj
cmVhdGVXTUxFbGVtZW50KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIHFOYW1lLCBXZWJD
b3JlOjpEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUpOworICAgIH07
Cit9CisKKyNlbmRpZgorCkluZGV4OiB3bWwvV01MR29FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB3bWwvV01MR29FbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxHb0VsZW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
ICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU0hlbHBlci5oIgor
I2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2
ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5o
IgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRl
ICJGb3JtRGF0YS5oIgorI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1ZGUgIkhUTUxO
YW1lcy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKKyNpbmNsdWRl
ICJUZXh0LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgi
CisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxQb3N0ZmllbGRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwor
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK3RlbXBsYXRlPGNsYXNzIFQsIHNpemVfdCBu
PiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3RvcjxUKiwgbj4gJiB2ZWMsIFQqIGl0
ZW0pIAoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2ZWNbaV0gPT0gaXRlbSkgeworICAg
ICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cit9
CisKK3N0YXRpYyBpbnQgcmFuZG9tTnVtYmVyKCkKK3sKKyAgICBzdGF0aWMgYm9vbCByYW5kb21T
ZWVkZWQgPSBmYWxzZTsKKyAKKyNpZiBQTEFURk9STShEQVJXSU4pCisgICAgaWYgKCFyYW5kb21T
ZWVkZWQpIHsKKyAgICAgICAgc3JhbmRvbWRldigpOworICAgICAgICByYW5kb21TZWVkZWQgPSB0
cnVlOworICAgIH0KKyAgICByZXR1cm4gcmFuZG9tKCk7CisjZWxzZQorICAgIGlmICghcmFuZG9t
U2VlZGVkKSB7CisgICAgICAgIHNyYW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0aW1lKDApKSk7
CisgICAgICAgIHJhbmRvbVNlZWRlZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiByYW5kKCk7
CisjZW5kaWYKK30KKyAKKy8vIFJldHVybnMgYSAwLXRlcm1pbmF0ZWQgQyBzdHJpbmcgaW4gdGhl
IHZlY3Rvci4KK3N0YXRpYyB2b2lkIGdldFVuaXF1ZUJvdW5kYXJ5U3RyaW5nKFZlY3RvcjxjaGFy
PiYgYm91bmRhcnkpCit7CisgICAgLy8gVGhlIFJGQyAyMDQ2IHNwZWMgc2F5cyB0aGUgQWxwaGFO
dW1lcmljIGNoYXJhY3RlcnMgcGx1cyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMKKyAgICAvLyBh
cmUgbGVnYWwgZm9yIGJvdW5kYXJpZXM6ICAnKCkrXywtLi86PT8KKyAgICAvLyBIb3dldmVyIHRo
ZSBmb2xsb3dpbmcgY2hhcmFjdGVycywgdGhvdWdoIGxlZ2FsLCBjYXVzZSBzb21lIHNpdGVzIHRv
IGZhaWw6CisgICAgLy8gKCksLi86PQorICAgIC8vIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMzUyCisgICAgc3RhdGljIGNvbnN0IGNoYXIgQWxwaGFOdW1lcmljRW5j
TWFwWzY0XSA9CisgICAgeworICAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwgMHg0NSwgMHg0
NiwgMHg0NywgMHg0OCwKKyAgICAgIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4NEQsIDB4NEUs
IDB4NEYsIDB4NTAsCisgICAgICAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAw
eDU3LCAweDU4LAorICAgICAgMHg1OSwgMHg1QSwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2
NSwgMHg2NiwKKyAgICAgIDB4NjcsIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4NkMsIDB4NkQs
IDB4NkUsCisgICAgICAweDZGLCAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAw
eDc2LAorICAgICAgMHg3NywgMHg3OCwgMHg3OSwgMHg3QSwgMHgzMCwgMHgzMSwgMHgzMiwgMHgz
MywKKyAgICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4MkIsIDB4NDEK
KyAgICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS81MjUyNTc3PiBnbWFpbCBkb2VzIG5vdCBh
Y2NlcHQgbGVnYWwgY2hhcmFjdGVycyBpbiB0aGUgZm9ybSBib3VuZGFyeQorICAgICAgLy8gQXMg
c3RhdGVkIGFib3ZlLCBzb21lIGxlZ2FsIGNoYXJhY3RlcnMgY2F1c2UsIHNpdGVzIHRvIGZhaWwu
IFNwZWNpZmljYWxseQorICAgICAgLy8gdGhlIC8gY2hhcmFjdGVyIHdoaWNoIHdhcyB0aGUgbGFz
dCBjaGFyYWN0ZXIgaW4gdGhlIGFib3ZlIGFycmF5LiBJIGhhdmUKKyAgICAgIC8vIHJlcGxhY2Vk
IHRoZSBsYXN0IGNoYXJhY3RlciB3aXRoIGFub3RoZXIgY2hhcmFjdGVyIGFscmVhZHkgaW4gdGhl
IGFycmF5CisgICAgICAvLyAobm90aWNlIHRoZSBmaXJzdCBhbmQgbGFzdCB2YWx1ZXMgYXJlIGJv
dGggMHg0MSwgQSkuIEluc3RlYWQgb2YgcGlja2luZworICAgICAgLy8gYW5vdGhlciB1bmlxdWUg
bGVnYWwgY2hhcmFjdGVyIGZvciBib3VuZGFyeSBzdHJpbmdzIHRoYXQsIGJlY2F1c2UgaXQgaGFz
CisgICAgICAvLyBuZXZlciBiZWVuIHRlc3RlZCwgbWF5IG9yIG1heSBub3QgYnJlYWsgb3RoZXIg
c2l0ZXMsIEkgc2ltcGx5CisgICAgICAvLyByZXBsYWNlZCAvIHdpdGggQS4gIFRoaXMgbWVhbnMg
QSBpcyB0d2ljZSBhcyBsaWtlbHkgdG8gb2NjdXIgaW4gb3VyIGJvdW5kYXJ5CisgICAgICAvLyBz
dHJpbmdzIHRoYW4gYW55IG90aGVyIGNoYXJhY3RlciBidXQgSSB0aGluayB0aGlzIGlzIGZpbmUg
Zm9yIHRoZSB0aW1lIGJlaW5nLgorICAgICAgLy8gVGhlIEZJWE1FIGhlcmUgaXMgYWJvdXQgcmVz
dG9yaW5nIHRoZSAvIGNoYXJhY3RlciBvbmNlIHRoZSBhZm9yZW1lbnRpb25lZAorICAgICAgLy8g
cmFkYXIgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgfTsKKyAKKyAgICAvLyBTdGFydCB3aXRoIGFu
IGluZm9ybWF0aXZlIHByZWZpeC4KKyAgICBjb25zdCBjaGFyIGJvdW5kYXJ5UHJlZml4W10gPSAi
LS0tLVdlYktpdEZvcm1Cb3VuZGFyeSI7CisgICAgYm91bmRhcnkuYXBwZW5kKGJvdW5kYXJ5UHJl
Zml4LCBzdHJsZW4oYm91bmRhcnlQcmVmaXgpKTsKKyAKKyAgICAvLyBBcHBlbmQgMTYgcmFuZG9t
IDdiaXQgYXNjaWkgQWxwaGFOdW1lcmljIGNoYXJhY3RlcnMuCisgICAgVmVjdG9yPGNoYXI+IHJh
bmRvbUJ5dGVzOworIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7CisgICAgICAg
IGludCByYW5kb21uZXNzID0gcmFuZG9tTnVtYmVyKCk7CisgICAgICAgIHJhbmRvbUJ5dGVzLmFw
cGVuZChBbHBoYU51bWVyaWNFbmNNYXBbKHJhbmRvbW5lc3MgPj4gMjQpICYgMHgzRl0pOworICAg
ICAgICByYW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwWyhyYW5kb21uZXNzID4+
IDE2KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0Vu
Y01hcFsocmFuZG9tbmVzcyA+PiA4KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9tQnl0ZXMuYXBw
ZW5kKEFscGhhTnVtZXJpY0VuY01hcFtyYW5kb21uZXNzICYgMHgzRl0pOworICAgIH0KKyAKKyAg
ICBib3VuZGFyeS5hcHBlbmQocmFuZG9tQnl0ZXMpOworICAgIGJvdW5kYXJ5LmFwcGVuZCgwKTsg
Ly8gQWRkIGEgMCBhdCB0aGUgZW5kIHNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIEMtc3R5bGUgc3Ry
aW5nLgorfQorCitXTUxHb0VsZW1lbnQ6OldNTEdvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogV01MVGFza0VsZW1lbnQodGFnTmFtZSwg
ZG9jKQorICAgICwgbV9lbmN0eXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQi
KSAKKyAgICAsIG1fbXVsdGlwYXJ0KGZhbHNlKQorICAgICwgbV9wb3N0KGZhbHNlKQoreworfQor
CitXTUxHb0VsZW1lbnQ6On5XTUxHb0VsZW1lbnQoKQoreworfQorCit2b2lkIFdNTEdvRWxlbWVu
dDo6cmVnaXN0ZXJQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqIGUpIAorewor
ICAgIG1fcG9zdGZpZWxkcy5hcHBlbmQoZSk7Cit9CisKK3ZvaWQgV01MR29FbGVtZW50OjpyZW1v
dmVQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqIGUpIAoreworICAgIHJlbW92
ZUZyb21WZWN0b3IobV9wb3N0ZmllbGRzLCBlKTsKK30KKworYm9vbCBXTUxHb0VsZW1lbnQ6Omhh
c1Bvc3RmaWVsZCgpIGNvbnN0IAoreworICAgIHJldHVybiAhbV9wb3N0ZmllbGRzLmlzRW1wdHko
KTsKK30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OnBhcnNlRW5jdHlwZShjb25zdCBTdHJpbmcmIHR5
cGUpCit7CisgICAgaWYgKHR5cGUuY29udGFpbnMoIm11bHRpcGFydCIsIGZhbHNlKSB8fCB0eXBl
LmNvbnRhaW5zKCJmb3JtLWRhdGEiLCBmYWxzZSkpIHsKKyAgICAgICAgbV9lbmN0eXBlID0gIm11
bHRpcGFydC9mb3JtLWRhdGEiOworICAgICAgICBtX211bHRpcGFydCA9IHRydWU7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbV9lbmN0eXBlID0gImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5j
b2RlZCI7CisgICAgICAgIG1fbXVsdGlwYXJ0ID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIFdN
TEdvRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlICphdHRyKQor
eworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbWV0aG9kQXR0cikgeworICAgICAgICBpZiAoZXF1
YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInBvc3QiKSkKKyAgICAgICAgICAgIG1fcG9z
dCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0dHItPnZhbHVl
KCksICJnZXQiKSkKKyAgICAgICAgICAgIG1fcG9zdCA9IGZhbHNlOworICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IGVuY3R5cGVBdHRyKSB7CisgICAgICAgIFN0cmluZyBlbmN0eXBlID0g
V01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOwor
ICAgICAgICBwYXJzZUVuY3R5cGUoZW5jdHlwZSk7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKSB7CisgICAgICAgIC8vIHNwYWNlIHNlcGFyYXRlZCBs
aXN0IG9mIGNoYXJzZXRzIHRoZSBzZXJ2ZXJhIGFjY2VwdHMgLSBzZWUgcmZjMjA0NQorICAgICAg
ICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgeworICAgICAg
ICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxl
UmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG1fYWNjZXB0Y2hhcnNldCA9IGF0dHItPnZhbHVlKCk7CisgICAgfSBlbHNlCisgICAgICAgIFdN
TEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCitQYXNzUmVmUHRyPEZv
cm1EYXRhPiBXTUxHb0VsZW1lbnQ6OmZvcm1EYXRhKEZyYW1lTG9hZGVyKiBsb2FkZXIsIGNvbnN0
IGNoYXIqIGJvdW5kYXJ5KSAKK3sKKyAgICBTdHJpbmcgc3RyID0gbV9hY2NlcHRjaGFyc2V0Owor
ICAgIHN0ci5yZXBsYWNlKCcsJywgJyAnKTsKKworICAgIFZlY3RvcjxTdHJpbmc+IGNoYXJzZXRz
OworICAgIHN0ci5zcGxpdCgnICcsIGNoYXJzZXRzKTsKKyAgICBUZXh0RW5jb2RpbmcgZW5jb2Rp
bmc7CisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNoYXJzZXRzLmVu
ZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gY2hhcnNl
dHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpZiAoKGVuY29kaW5nID0gVGV4
dEVuY29kaW5nKCppdCkpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYg
KCFlbmNvZGluZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgaWYgKGxvYWRlcikKKyAgICAgICAgICAg
IGVuY29kaW5nID0gbG9hZGVyLT5lbmNvZGluZygpOworICAgICAgICBlbHNlCisgICAgICAgICAg
ICBlbmNvZGluZyA9IExhdGluMUVuY29kaW5nKCk7CisgICAgfQorIAorICAgIFJlZlB0cjxGb3Jt
RGF0YT4gcmVzdWx0ID0gRm9ybURhdGE6OmNyZWF0ZSgpOworICAgIFN0cmluZyBlbmNfc3RyaW5n
OworIAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9wb3N0ZmllbGRzLnNpemUo
KTsgaSsrKSB7CisKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBtX3Bvc3RmaWVsZHNbaV0tPm5hbWUo
KTsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gbV9wb3N0ZmllbGRzW2ldLT52YWx1ZSgpOworCisg
ICAgICAgIGlmICghbV9tdWx0aXBhcnQpIHsKKyAgICAgICAgICAgIGlmICghZW5jX3N0cmluZy5p
c0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZW5jX3N0cmluZyArPSAiJiI7CisKKyAgICAgICAg
ICAgIGVuY19zdHJpbmcgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX3Bvc3RmaWVs
ZHNbaV0tPm5hbWUoKSk7IAorICAgICAgICAgICAgZW5jX3N0cmluZyArPSAiPSI7CisgICAgICAg
ICAgICBlbmNfc3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMobV9wb3N0Zmll
bGRzW2ldLT52YWx1ZSgpKTsgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBTdHJpbmcg
aHN0cigiLS0iKTsKKyAgICAgICAgICAgIGhzdHIgKz0gYm91bmRhcnk7CisgICAgICAgICAgICBo
c3RyICs9ICJcclxuIjsKKyAgICAgICAgICAgIGhzdHIgKz0gIkNvbnRlbnQtRGlzcG9zaXRpb246
IGZvcm0tZGF0YTsgbmFtZT1cIiI7CisgICAgICAgICAgICBoc3RyICs9IGVuY29kaW5nLmVuY29k
ZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obmFtZS5jaGFyYWN0ZXJzKCkpLCBuYW1l
Lmxlbmd0aCgpLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpLmRhdGEoKTsgCisg
ICAgICAgICAgICBoc3RyICs9ICJcIiI7CisgICAgICAgICAgICBoc3RyICs9ICJcclxuXHJcbiI7
CisKKyAgICAgICAgICAgIC8vIGFwcGVuZCBib2R5CisgICAgICAgICAgICByZXN1bHQtPmFwcGVu
ZERhdGEoaHN0ci5jaGFyYWN0ZXJzKCksIGhzdHIubGVuZ3RoKCkpOworCisgICAgICAgICAgICBp
ZiAoIXZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBjc1ZhbCA9IGVu
Y29kaW5nLmVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odmFsdWUuY2hhcmFj
dGVycygpKSwgdmFsdWUubGVuZ3RoKCksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cykuZGF0YSgpOyAKKyAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEoY3NWYWwuY2hh
cmFjdGVycygpLCBjc1ZhbC5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kRGF0YSgiXHJcbiIsIDIpOworCisgICAgICAgICAgICAvLyBhY2NvcmRp
bmcgdG8gdGhlIHNlY3Rpb24gOS41LjEgb2Ygd2FwLTE5MS13bWwtMjAwMDAyMTktYS5wZGYsIAor
ICAgICAgICAgICAgLy8gbWFrZSB0aGUgQ29udGVudC10eXBlIGhlYWRlciBpbmNsdWRlIHRoZSBj
aGFyc2V0IHBhcmFtZXRlcgorICAgICAgICAgICAgU3RyaW5nIHN0ciA9IHJlc3VsdC0+ZmxhdHRl
blRvU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxBU0NJSShzdHIu
Y2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAgbV9lbmN0eXBl
ICs9ICI7IjsKKyAgICAgICAgICAgICAgICBtX2VuY3R5cGUgKz0gZW5jb2RpbmcubmFtZSgpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAvLyBlbmQgb2YgZm9yICguLi4KKworICAg
IGlmIChtX211bHRpcGFydCkgeworICAgICAgICBlbmNfc3RyaW5nID0gIi0tIjsKKyAgICAgICAg
ZW5jX3N0cmluZyArPSBib3VuZGFyeTsKKyAgICAgICAgZW5jX3N0cmluZyArPSAiLS1cclxuIjsK
KworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZW5jdHlwZSArPSAiOyI7CisgICAgICAgIG1fZW5j
dHlwZSArPSBlbmNvZGluZy5uYW1lKCk7CisgICAgfQorIAorICAgIHJlc3VsdC0+YXBwZW5kRGF0
YShlbmNfc3RyaW5nLmNoYXJhY3RlcnMoKSwgZW5jX3N0cmluZy5sZW5ndGgoKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OmV4ZWMoRXZlbnQqIGV2dCwgU3Ry
aW5nIHVyaSkgCit7CisgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7CisgICAgQVNTRVJU
KGRvYyk7CisgICAgQVNTRVJUKGRvYy0+ZnJhbWUoKSk7CisgICAgRnJhbWVMb2FkZXIqIGxvYWRl
cj0gZG9jLT5mcmFtZSgpLT5sb2FkZXIoKTsKKyAgICBQYWdlKiBwYWdlID0gZG9jLT5wYWdlKCk7
CisgICAgaWYgKCFsb2FkZXIgfHwgIXBhZ2UpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIGNv
bnZlcnQgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBzZXR2YXIgZWxlbWVudCBpZiBuZWNl
c3NhcnkKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcnM7CisgICAgaWYgKGhhc1NldHZhcigpKSB7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9zZXR2YXJzLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICBpZiAoIW1fc2V0dmFyc1tpXS0+bmFtZSgpLmlzRW1wdHkoKSkgCisg
ICAgICAgICAgICAgICAgbV92YXJzLnNldChtX3NldHZhcnNbaV0tPm5hbWUoKSwgbV9zZXR2YXJz
W2ldLT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0gCisKKyAgICBXTUxQYWdlU3RhdGUqIHBh
Z2VTdGF0ZSA9IHBhZ2UtPndtbFBhZ2VTdGF0ZSgpOworICAgIC8vIHVwZGF0ZSBicm93c2VyIGNv
bnRleHQgCisgICAgaWYgKCFtX3ZhcnMuaXNFbXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0
b3JlVmFyaWFibGVzKG1fdmFycyk7CisgCisKKyAgICAvLyBzdWJzdGl0dXRlIHRhcmdldCB1cmkg
YXR0cmlidXRlIHZhbHVlCisgICAgaWYgKHVyaS5pc0VtcHR5KCkpCisgICAgICAgIHVyaSA9IGdl
dEF0dHJpYnV0ZSgiaHJlZiIpOworICAgIHVyaSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJl
Zih1cmksIGRvYywgImVzY2FwZSIpOworCisgICAgLy8gc3RvcCB0aGUgdGltZXIgb2YgdGhlIGN1
cnJlbnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IHBh
Z2VTdGF0ZS0+YWN0aXZlQ2FyZCgpOworICAgIGlmIChjYXJkICYmIGNhcmQtPmV2ZW50VGltZXIo
KSkKKyAgICAgICAgY2FyZC0+ZXZlbnRUaW1lcigpLT5zdG9wKCk7CisKKyAgICAvLyBpZiBuZXdj
b250ZXh0IGF0dHJpYnV0ZSBvZiBkZXN0IGNhcmQgaXMgdHJ1ZSwgcmVpbml0aWFsaXplIHRoZSBj
b250ZXh0CisgICAgY2FyZCA9IFdNTEhlbHBlcjo6c2V0RGVzdGluYXRpb25DYXJkKGRvY3VtZW50
KCksIHVyaSk7CisgICAgaWYgKGNhcmQgJiYgY2FyZC0+aXNOZXdDb250ZXh0KCkpCisgICAgICAg
IHBhZ2VTdGF0ZS0+cmVzZXQoKTsKKworICAgIC8vIHByZXBhcmUgZm9yIGxvYWRpbmcgdGhlIGRl
c3RpbmF0aW9uIFVSTAorICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRhdGEgPSAwOworICAgIEtV
UkwgdXJsID0gZG9jLT5jb21wbGV0ZVVSTCh1cmkuaXNFbXB0eSgpID8gIiIgOiB1cmkpOworICAg
IFJlc291cmNlUmVxdWVzdCByZXEodXJsKTsKKyAgICBLVVJMIGRvY1VybCA9IGRvYy0+Y29tcGxl
dGVVUkwoZG9jLT5kb2N1bWVudFVSSSgpKTsKKyAgICBib29sIGluU2FtZURlY2sgPSBkb2NVcmwu
cGF0aCgpID09IHVybC5wYXRoKCk7IAorCisKKyAgICBTdHJpbmcgc2VuZHJlZmVyZXIgPSBnZXRB
dHRyaWJ1dGUoInNlbmRyZWZlcmVyIik7CisgICAgaWYgKHNlbmRyZWZlcmVyID09ICJ0cnVlIikg
eworICAgICAgICBzZW5kcmVmZXJlciA9IHVyaTsKKyAgICAgICAgcmVxLnNldEhUVFBSZWZlcnJl
cihzZW5kcmVmZXJlcik7CisgICAgfQorCisgICAgU3RyaW5nIGNhY2hlQ3RybCA9IGdldEF0dHJp
YnV0ZSgiY2FjaGVfY29udHJvbCIpOworCisgICBpZiAobV9wb3N0KSB7IC8vIFBPU1QKKworICAg
ICAgIGlmIChpblNhbWVEZWNrICYmIChjYWNoZUN0cmwgIT0gIm5vLWNhY2hlIikpIC8vaWdub3Jl
IGFsbCBwb3N0ZmllbGQgZWxlbWVudHMKKyAgICAgICAgICAgIHJlcS5zZXRDYWNoZVBvbGljeShS
ZXR1cm5DYWNoZURhdGFEb250TG9hZCk7CisgICAgICAgZWxzZSB7CisKKyAgICAgICAgICAgaWYg
KG1fbXVsdGlwYXJ0KSB7IC8vIG11bHRpcGFydC9mb3JtLWRhdGEKKyAgICAgICAgICAgICAgICBW
ZWN0b3I8Y2hhcj4gYm91bmRhcnk7CisgICAgICAgICAgICAgICAgZ2V0VW5pcXVlQm91bmRhcnlT
dHJpbmcoYm91bmRhcnkpOworICAgICAgICAgICAgICAgIGRhdGEgPSBmb3JtRGF0YShsb2FkZXIs
IGJvdW5kYXJ5LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcmVxLnNldEhUVFBDb250ZW50VHlw
ZShtX2VuY3R5cGUgKyAiOyBib3VuZGFyeT0iICsgYm91bmRhcnkuZGF0YSgpKTsKKyAgICAgICAg
ICAgfSBlbHNlIHsgIC8vdGV4dC9wbGFpbiBvciBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVu
Y29kZWQKKyAgICAgICAgICAgICAgICBkYXRhID0gZm9ybURhdGEobG9hZGVyLCAwKTsKKyAgICAg
ICAgICAgICAgICByZXEuc2V0SFRUUENvbnRlbnRUeXBlKG1fZW5jdHlwZSk7CisgICAgICAgICAg
IH0KKworICAgICAgICAgICByZXEuc2V0SFRUUEJvZHkoZGF0YS5nZXQoKSk7CisgICAgICAgfQor
CisgICAgICAgcmVxLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKKworICAgfSBlbHNlIHsgICAvLyBH
RVQKKworICAgICAgICBpZiAobV9tdWx0aXBhcnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgaWYgKGluU2FtZURlY2spCisgICAgICAgICAgICByZXEuc2V0Q2FjaGVQb2xpY3koUmV0
dXJuQ2FjaGVEYXRhRG9udExvYWQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIFN0cmlu
ZyBzdHI7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fcG9zdGZp
ZWxkcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghc3RyLmlzRW1wdHkoKSkg
CisgICAgICAgICAgICAgICAgICAgIHN0ciArPSAiJiI7ICAgICAgICAKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBzdHIgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyht
X3Bvc3RmaWVsZHNbaV0tPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgc3RyICs9ICI9IjsKKyAg
ICAgICAgICAgICAgICBzdHIgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX3Bvc3Rm
aWVsZHNbaV0tPnZhbHVlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1cmwuc2V0
UXVlcnkoc3RyKTsKKyAgICAgICAgICAgIHJlcS5zZXRVUkwodXJsKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHJlcS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKworICAgfQorCisgICAgLy8gc2V0IEhU
VFAgY2FjaGUtY29udHJvbCBoZWFkZXIgaWYgbmVlZGVkCisgICAgaWYgKCFjYWNoZUN0cmwuaXNF
bXB0eSgpKSB7CisgICAgICAgIHJlcS5zZXRIVFRQSGVhZGVyRmllbGQoImNhY2hlLWNvbnRyb2wi
LCBjYWNoZUN0cmwpOworICAgICAgICBpZiAoY2FjaGVDdHJsID09ICJuby1jYWNoZSIpCisgICAg
ICAgICAgICByZXEuc2V0Q2FjaGVQb2xpY3koUmVsb2FkSWdub3JpbmdDYWNoZURhdGEpOworICAg
IH0KKworICAgIGxvYWRlci0+bG9hZChyZXEpOworfQorCit9CisKSW5kZXg6IHdtbC9XTUxHb0Vs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MR29FbGVtZW50LmgJKHJldmlzaW9uIDApCisr
KyB3bWwvV01MR29FbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIFdNTEdvRWxlbWVudF9oCisjZGVmaW5lIFdNTEdvRWxlbWVudF9oCisKKyNpbmNsdWRl
ICJIVE1MQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnQ7CitjbGFzcyBGb3JtRGF0YTsKK2NsYXNzIEZy
YW1lTG9hZGVyOworY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CitjbGFzcyBXTUxQb3N0ZmllbGRFbGVt
ZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEdvRWxlbWVudCA6IHB1Ymxp
YyBXTUxUYXNrRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MR29FbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpOworICAgIHZpcnR1YWwgfldNTEdvRWxl
bWVudCgpOworICAKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGV4ZWMoRXZlbnQqLCBTdHJpbmcpOworCisg
ICAgdm9pZCByZWdpc3RlclBvc3RmaWVsZEVsZW1lbnQoV01MUG9zdGZpZWxkRWxlbWVudCopOwor
ICAgIHZvaWQgcmVtb3ZlUG9zdGZpZWxkRWxlbWVudChXTUxQb3N0ZmllbGRFbGVtZW50Kik7Cisg
ICAgYm9vbCBoYXNQb3N0ZmllbGQoKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRy
PEZvcm1EYXRhPiBmb3JtRGF0YShGcmFtZUxvYWRlciosIGNvbnN0IGNoYXIqKTsKKyAgICB2b2lk
IHBhcnNlRW5jdHlwZShjb25zdCBTdHJpbmcmKTsKKworICAgIFZlY3RvcjxXTUxQb3N0ZmllbGRF
bGVtZW50Kj4gbV9wb3N0ZmllbGRzOworICAgIFN0cmluZyBtX2VuY3R5cGU7CisgICAgU3RyaW5n
IG1fYWNjZXB0Y2hhcnNldDsKKyAgICBib29sIG1fbXVsdGlwYXJ0IDogMTsKKyAgICBib29sIG1f
cG9zdCA6IDE7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTEhl
bHBlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEhlbHBlci5jcHAJKHJldmlzaW9uIDApCisr
KyB3bWwvV01MSGVscGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlICJOYW1lZEF0dHJNYXAuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTERvY3VtZW50
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNs
dWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAid3RmL0FTQ0lJQ1R5cGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXTUxUb2tlbml6ZXIqIFdNTEhlbHBlcjo6c190b2tlbml6ZXIg
PSAwOworCitXTUxUb2tlbml6ZXIqIFdNTEhlbHBlcjo6dG9rZW5pemVyKCkKK3sKKyAgICByZXR1
cm4gc190b2tlbml6ZXI7Cit9CisKK3ZvaWQgV01MSGVscGVyOjpzZXRUb2tlbml6ZXIoV01MVG9r
ZW5pemVyKiB0b2tlbml6ZXIpCit7CisgICAgc190b2tlbml6ZXIgPSB0b2tlbml6ZXI7Cit9CisK
K3N0YXRpYyBib29sIGlzVmFsaWRGb3JWYXJpYWJsZShVQ2hhciBjaCkgCit7CisgICAgY2hhciBh
ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oY2gpOworICAgIHJldHVybiAoV1RGOjppc0FTQ0lJQWxwaGEo
YSkgfHwgV1RGOjppc0FTQ0lJRGlnaXQoYSkgfHwgYSA9PSAnXycpOworfQorIAorYm9vbCBXTUxI
ZWxwZXI6OmlzVmFsaWRWYXJpYWJsZU5hbWUoY29uc3QgU3RyaW5nJiB2YXJOYW1lLCBib29sIGlz
VmFyUmVmKQoreworICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIFVDaGFyIGNoID0gdmFy
TmFtZVswXTsKKworICAgIFN0cmluZyByZWZDaGFycyA9ICIoKTokIjsKKyAgICBpZiAoaXNWYXJS
ZWYpCisgICAgICAgIGlzVmFsaWQgPSAoKHJlZkNoYXJzLmZpbmQoY2gpICE9IC0xKSB8fCBjaCA9
PSAnXycgfHwgV1RGOjppc0FTQ0lJQWxwaGEoc3RhdGljX2Nhc3Q8Y2hhcj4oY2gpKSk7CisgICAg
ZWxzZQorICAgICAgICBpc1ZhbGlkID0gKGNoID09ICdfJyB8fCBXVEY6OmlzQVNDSUlBbHBoYShz
dGF0aWNfY2FzdDxjaGFyPihjaCkpKTsKKworICAgIGlmIChpc1ZhbGlkKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaT0xOyBpPHZhck5hbWUubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKGlzVmFyUmVmKQorICAgICAgICAgICAgICAgIGlzVmFsaWQgPSAoKHJlZkNoYXJzLmZpbmQo
dmFyTmFtZVtpXSkgIT0gLTEpIHx8IGlzVmFsaWRGb3JWYXJpYWJsZSh2YXJOYW1lW2ldKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGlzVmFsaWRGb3JWYXJp
YWJsZSh2YXJOYW1lW2ldKTsKKworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGlzVmFsaWQ7Cit9
CisKK2Jvb2wgV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihjb25zdCBTdHJpbmcmIHRleHQpCit7
CisgICAgYm9vbCBoYXNWYXJSZWYgPSBmYWxzZTsKKyAgICBpbnQgc3RhcnRQb3MgPSB0ZXh0LmZp
bmQoJyQnKTsKKyAgICBpZiAoc3RhcnRQb3MgIT0gLTEpIHsKKyAgICAgICAgdW5zaWduZWQgZW5k
UG9zID0gc3RhcnRQb3MgKyAxOworICAgICAgICB3aGlsZSAodGV4dFtlbmRQb3NdID09ICckJykK
KyAgICAgICAgICAgIGVuZFBvcysrOworCisgICAgICAgIGlmICgoKGVuZFBvcy1zdGFydFBvcykg
JSAyKSAhPSAwKQorICAgICAgICAgICAgaGFzVmFyUmVmID0gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaGFzVmFyUmVmOworfQorCitzdGF0aWMgaW50IHZhcmlhYmxlRW5kc0F0KGNvbnN0IFN0
cmluZyYgdmFyaWFibGUpIAoreworICAgIC8vIHdlIGFzc3VtZSB0aGUgdmFyaWFibGUgc3RhcnRz
IHdpdGggIiQiICwgYW5kIHRoZW4gZm9sbG93cyB3aXRoIGF0IGxlYXN0IG9uZSBxdWFsaWZpZWQg
Y2hhcmFjdGVyIGZvciB2YXJpYWJsZSBuYW1lLCBvdGhlcndpc2UsIG5vdCBhIHZhbGlkIHZhcmlh
YmxlCisgICAgaWYgKCh2YXJpYWJsZVswXSAgIT0gJyQnKSB8fCBXVEY6OmlzQVNDSUlEaWdpdCh2
YXJpYWJsZVsxXSkgfHwgIWlzVmFsaWRGb3JWYXJpYWJsZSh2YXJpYWJsZVsxXSkpCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBpbnQgcG9zID0gLTE7CisgICAgZm9yIChwb3MgPSAxOyBwb3MgPCBz
dGF0aWNfY2FzdDxpbnQ+KHZhcmlhYmxlLmxlbmd0aCgpKTsgcG9zKyspIHsKKyAgICAgICAgaWYg
KCFpc1ZhbGlkRm9yVmFyaWFibGUodmFyaWFibGVbcG9zXSkpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIHBvczsKK30KKyAKK3N0YXRpYyBib29sIGhhc05hbWVBdHRyaWJ1
dGVXaXRoVmFsdWUoTm9kZSAqbm9kZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgCit7CisgICAgTmFt
ZWRBdHRyTWFwICphdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWF0dHJzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIEF0dHJpYnV0ZSogYXR0
ciA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFdNTE5hbWVzOjpuYW1lQXR0cik7CisgICAgICAg
IGlmICghYXR0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIChh
dHRyLT52YWx1ZSgpID09IHZhbHVlKSA/IHRydWUgOiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQg
V01MSGVscGVyOjpjb252ZXJ0VmFySWZOZWVkZWQoU3RyaW5nJiB2YXIsIFN0cmluZyYgY29udikg
Cit7CisgICAgaWYgKGNvbnYuaXNFbXB0eSgpIHx8IHZhci5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsgCisKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyBjb252ZXIgPSBjb252Lmxv
d2VyKCk7CisgICAgaWYgKChjb252ZXIgPT0gImUiKSB8fCAoY29udmVyID09ICJlc2NhcGUiKSkK
KyAgICAgICAgcmVzdWx0ID0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh2YXIpOworICAg
IGVsc2UgaWYgKChjb252ZXIgPT0gInUiKSB8fCAoY29udmVyID09ICJ1bmVzYyIpKQorICAgICAg
ICByZXN1bHQgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModmFyKTsKKyAgICBlbHNlIGlmICgo
Y29udmVyID09ICJuIikgfHwgKGNvbnZlciA9PSAibm9lc2MiKSkKKyAgICAgICAgOy8vIGRvIG5v
dGhpbmcKKworICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgdmFyID0gcmVzdWx0
OworfQorCitTdHJpbmcgV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGNvbnN0IFN0cmluZyYg
dmFyUmVmLCBOb2RlKiBkb2N1bWVudCwgU3RyaW5nIGVzY2FwZSkgCit7CisgICAgaWYgKHZhclJl
Zi5pc0VtcHR5KCkgfHwgIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+aXNEb2N1bWVudE5vZGUoKSkg
eworICAgICAgICByZXR1cm4gdmFyUmVmOworICAgIH0KKworICAgIFN0cmluZyBvcmlnID0gdmFy
UmVmOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgU3RyaW5nIHZhcmlhYmxlOworICAgIFN0cmlu
ZyBjb252OworIAorICAgIGJvb2wgaGFzRXJyb3IgPSBmYWxzZTsKKyAgICB3aGlsZSAoIW9yaWcu
aXNFbXB0eSgpKSB7CisgICAgICAgIGludCBzdGFydCA9IG9yaWcuZmluZCgiJCIpOworICAgICAg
ICBpZiAoc3RhcnQgPT0gLTEpIHsgIC8vaXQncyBub3QgYSB2YXJpYWJsZSByZWZlcmVuY2UsIG9r
IQorICAgICAgICAgICAgcmVzdWx0ICs9IG9yaWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICByZXN1bHQgKz0gb3JpZy5sZWZ0KHN0YXJ0KTsKKyAgICAgICAgb3JpZyA9
IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIHN0YXJ0KTsKKyAKKyAgICAgICAgLy8gY2hlY2sg
dGhlIGRvdWJsZSAnJCcgc2lnbiAsIHNraXAgdGhlbSBvdmVyCisgICAgICAgIGlmIChvcmlnWzFd
ID09ICckJykgeworICAgICAgICAgICAgcmVzdWx0ICs9ICIkIjsKKyAgICAgICAgICAgIG9yaWcg
PSBvcmlnLnJpZ2h0KG9yaWcubGVuZ3RoKCkgLSAyKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgCisgICAgICAgIGludCBlbmQgPSAwOworICAgICAgICBpZiAob3JpZ1sxXSA9
PSAnKCcpIHsKKyAgICAgICAgICAgIGVuZCA9IG9yaWcuZmluZCgiKSIpOworICAgICAgICAgICAg
aWYgKGVuZCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBvcmlnOyAgIC8vIGlm
IHdlIGZpbmQgIiQoIiBidXQgbm8gIikiLCBzdG9wIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBo
YXNFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gb3JpZy5zdWJzdHJpbmcoMiwgZW5kLTIp
OworICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBjb252ZXJzaW9uIHN0cmluZworICAgICAgICAg
ICAgICAgIGludCBwb3MgPSB2YXJpYWJsZS5maW5kKCc6Jyk7CisgICAgICAgICAgICAgICAgaWYg
KHBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjb252ID0gdmFyaWFibGUuc3Vic3Ry
aW5nKHBvcyArIDEsIHZhcmlhYmxlLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUubGVmdChwb3MpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBoZXJlIHdlIHNob3VsZCBjaGVj
ayBpZiB0aGUgdmFyaWFibGUgbmFtZSBpcyB2YWxpZAorICAgICAgICAgICAgICAgIGlmIChoYXNF
cnJvciA9ICFpc1ZhbGlkVmFyaWFibGVOYW1lKHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBvcmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0
aCgpIC0gZW5kIC0gMSApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZW5kID0gdmFyaWFibGVFbmRzQXQob3JpZyk7CisgICAgICAgICAgICBpZiAoZW5kIDwg
MSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBvcmlnLmxlZnQoMik7CisgICAgICAgICAg
ICAgICAgb3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIDIpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBvcmln
LnN1YnN0cmluZygxLCBlbmQgLSAxKTsKKyAgICAgICAgICAgIG9yaWcgPSBvcmlnLnJpZ2h0KG9y
aWcubGVuZ3RoKCkgLSBlbmQgKTsKKyAgICAgICAgfQorIAorICAgICAgICAvLyB0cmF2ZXJzZSB0
aGUgd2hvbGUgRE9NIHRyZWUgdG8gc3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgcmVmZXJlbmNlCisg
ICAgICAgIGJvb2wgaXNEb25lID0gZmFsc2U7CisgICAgICAgIFN0cmluZyBjb252VmFyOworICAg
ICAgICBOb2RlKiBub2RlID0gZG9jdW1lbnQ7IAorICAgICAgICB3aGlsZSAoKG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoaGFzTmFtZUF0dHJpYnV0
ZVdpdGhWYWx1ZShub2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aGFzVGFnTmFtZShXTUxOYW1lczo6c2V0dmFyVGFnKSkgeworICAgICAgICAgICAgICAgICAgICBX
TUxTZXR2YXJFbGVtZW50KiBzZXR2YXIgPSBzdGF0aWNfY2FzdDxXTUxTZXR2YXJFbGVtZW50Kj4o
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnZWYXIgPSBzZXR2YXItPmdldEF0dHJpYnV0
ZSgidmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgCisgICAgICAgIC8vIHRyeSB0byBnZXQgdmFyaWFibGUgc3Vic3RpdHV0ZSBmcm9t
IGN1cnJlbnQgYnJvd3NlciBjb250ZXh0CisgICAgICAgIGlmICghaXNEb25lKSB7CisgICAgICAg
ICAgICBQYWdlKiBwYWdlID0gKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oZG9jdW1lbnQpKS0+cGFn
ZSgpOworICAgICAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiB2YXJS
ZWY7CisKKyAgICAgICAgICAgIEFTU0VSVChwYWdlLT53bWxQYWdlU3RhdGUoKSk7CisgICAgICAg
ICAgICBjb252VmFyID0gcGFnZS0+d21sUGFnZVN0YXRlKCktPmdldFZhcmliYWxlKHZhcmlhYmxl
KTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICghY29udlZhci5pc0VtcHR5KCkpIHsKKwor
ICAgICAgICAgICAgaWYgKGNvbnZWYXIuY29udGFpbnMoIiQoIikpIHsKKyAgICAgICAgICAgICAg
ICBjb252VmFyID0gc3Vic3RpdHV0ZVZhclJlZihjb252VmFyLCBkb2N1bWVudCk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb252
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb252ID0gZXNjYXBlOworICAgICAgICAgICAg
Y29udmVydFZhcklmTmVlZGVkKGNvbnZWYXIsIGNvbnYpOworICAgICAgICAgICAgcmVzdWx0ICs9
IGNvbnZWYXI7IAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisgCisgICAgfSAvLyBl
bmQgb2Ygd2hpbGUgKCFvcmlnLmlzRW1wdHkoKSkgCisgCisgICAgaWYgKGhhc0Vycm9yICYmIFdN
TEhlbHBlcjo6dG9rZW5pemVyKCkpCisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJl
cG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKworICAgIHJldHVybiBy
ZXN1bHQuaXNFbXB0eSgpID8gdmFyUmVmIDogcmVzdWx0OworfSAKKworLy8gQWNjb3JkaW5nIHRv
IHRoZSBzZWN0aW9uIDUuMiBhbmQgMTIuNS4xIGluIHRoZSB3bWwgc3BlYzogd2FwLTE5MS13bWwt
MjAwMDAyMTktYS5wZGYKKy8vIHRoZSBkZXN0aW5hdGlvbiBjYXJkIGNhbiBiZSBzcGVjaWZpZWQg
aW4gdGhlIGZvbGxvd2luZyBjYXNlOgorLy8gMSwgdXNlIGZyYWdtZW50IGFuY2hvciB3aGljaCBp
cyBzcGVjaWZpZWQgYnkgdGhlIGRvY3VtZW50IFVSTCwgZm9sbG93ZWQgd2l0aCAnIycKKy8vIDIs
IGlmIG5vIGZyYWdtZW50IGlzIHNwZWNpZmVkIG9yIHRoZSBmcmFnbWVudCBuYW1lIGlzIHdyb25n
LCB0aGUgZmlyc3QgY2FyZCBpcyB0aGUgZGVzdCBjYXJkLgorV01MQ2FyZEVsZW1lbnQqIFdNTEhl
bHBlcjo6c2V0RGVzdGluYXRpb25DYXJkKFJlZlB0cjxEb2N1bWVudD4gZG9jLCBTdHJpbmcgdXJp
KSAKK3sKKyAgICBpZiAoIWRvYyB8fCAhZG9jLT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUGFnZSogcGFnZSA9IGRvYy0+cGFnZSgpOworCisgICAgaWYgKHVyaS5pc0VtcHR5KCkp
CisgICAgICAgIHVyaSA9IGRvYy0+ZG9jdW1lbnRVUkkoKTsKKyAgICAgICAgCisgICAgV01MQ2Fy
ZEVsZW1lbnQqIGNhcmQgPSAwOworICAgIGJvb2wgZm91bmREZXN0Q2FyZCA9IGZhbHNlOworICAg
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5sID0gZG9jLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2Fy
ZCIpOworICAgIGlmIChubC5nZXQoKS0+bGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIGNh
cmQ7CisKKyAgICAvL2hpZGUgYWxsIHRoZSBjYXJkcyBwcmV2aW91c2x5IAorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGk8IG5sLmdldCgpLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGNhcmQg
PSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KG5sLmdldCgpLT5pdGVtKGkpKTsKKyAgICAg
ICAgY2FyZC0+c2V0VmlzaWJpbGl0eShmYWxzZSk7CisgICAgfQorCisgICAgaW50IGlkeCA9IHVy
aS5maW5kKCcjJyk7CisgICAgaWYgKGlkeCA+PSAwKSB7CisgICAgICAgIFN0cmluZyBhdHRySUQ7
CisgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IHVyaS5zdWJzdHJpbmcoaWR4ICsgMSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG5sLmdldCgpLT5sZW5ndGgoKS0xOyBpID4gMDsgaS0tKSB7
CisgICAgICAgICAgICBjYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihubC5nZXQo
KS0+aXRlbShpKSk7CisgICAgICAgICAgICBhdHRySUQgPSBjYXJkLT5nZXRBdHRyaWJ1dGUoImlk
Iik7CisgICAgICAgICAgICBpZiAoYXR0cklEID09IGZyYWdtZW50KSB7CisgICAgICAgICAgICAg
ICAgLy9mb3JjZSBmcmFtZSBsb2FkZXIgdG8gbG9hZCB0aGUgVVJMIHdpdGggZnJhZ21lbnQgaWRl
bnRpZmllcgorICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c2V0
Rm9yY2VSZWxvYWRXbWxEZWNrKHRydWUpOworICAgICAgICAgICAgICAgIGNhcmQtPnNldFZpc2li
aWxpdHkodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm91bmREZXN0Q2FyZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIWZvdW5kRGVzdENhcmQpIHsKKyAgICAgICAgY2FyZCA9IHN0YXRpY19jYXN0PFdNTENh
cmRFbGVtZW50Kj4obmwuZ2V0KCktPml0ZW0oMCkpOworICAgICAgICBjYXJkLT5zZXRWaXNpYmls
aXR5KHRydWUpOworICAgIH0KKworICAgIC8vIHVwZGF0ZSB0aGUgZG9jdW1lbnQncyB0aXRsZQor
ICAgIGRvYy0+c2V0VGl0bGUoY2FyZC0+dGl0bGUoKSk7CisKKyAgICAvLyBzZXQgdGhlIGF0aXZl
IGNhcmQgaW4gdGhlIGN1cnJlbnQgYnJvd3NlciBjb250ZXh0CisgICAgcGFnZS0+d21sUGFnZVN0
YXRlKCktPnNldEFjdGl2ZUNhcmQoY2FyZCk7CisKKyAgICByZXR1cm4gY2FyZDsKK30KKwordm9p
ZCBXTUxIZWxwZXI6OnJlZ2lzdGVyVGVtcGxhdGVUb0NhcmRzKERvY3VtZW50KiBkb2MpCit7Cisg
ICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybjsKKworICAgIFdNTENhcmRFbGVtZW50KiBjYXJk
ID0gMDsKKyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZG9jLT5nZXRFbGVtZW50c0J5
VGFnTmFtZSgidGVtcGxhdGUiKTsKKyAgICBXTUxUZW1wbGF0ZUVsZW1lbnQqIHRlbXBsID0gc3Rh
dGljX2Nhc3Q8V01MVGVtcGxhdGVFbGVtZW50Kj4obGlzdC5nZXQoKS0+aXRlbSgwKSk7CisgICAg
aWYgKHRlbXBsKSB7CisgICAgICAgIGxpc3QgPSBkb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJj
YXJkIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaSA8IGxpc3QuZ2V0KCktPmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNhcmQgPSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxl
bWVudCo+KGxpc3QuZ2V0KCktPml0ZW0oaSkpOworICAgICAgICAgICAgY2FyZC0+YmluZFRlbXBs
YXRlKHRlbXBsKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQpJbmRleDogd21sL1dNTEhlbHBl
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxIZWxwZXIuaAkocmV2aXNpb24gMCkKKysrIHdtbC9X
TUxIZWxwZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAg
ICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01M
SGVscGVyX2gKKyNkZWZpbmUgV01MSGVscGVyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1N0cmluZzsgCitjbGFzcyBXTUxDYXJk
RWxlbWVudDsKK2NsYXNzIFdNTFRva2VuaXplcjsKKworLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitXTUxIZWxwZXIgY2xh
c3Msd2hpY2ggb2ZmZXJzIGNvbnZlbmllbnQgZnVuY3Rpb25zIHRvIFdNTEVsZW1lbnQKKworKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLworY2xhc3MgV01MSGVscGVyIHsKKworcHVibGljOiAKKyAgICBzdGF0aWMgYm9vbCBpc1Zh
bGlkVmFyaWFibGVOYW1lKGNvbnN0IFN0cmluZyYsIGJvb2wgaXNWYXJSZWYgPSBmYWxzZSk7Cisg
ICAgc3RhdGljIGJvb2wgaGFzVmFyaWFibGVSZWYoY29uc3QgU3RyaW5nJik7CisKKyAgICAvL05v
ZGUqIGlzIHRoZSByb290IG9mIERPTSB0cmVlIHdoaWNoIHdpbGwgYmUgdHJhdmVyc2VkIGZvciBz
ZWFyY2hpbmcgdmFyaWFibGUgdmFsdWUKKyAgICBzdGF0aWMgU3RyaW5nIHN1YnN0aXR1dGVWYXJS
ZWYoY29uc3QgU3RyaW5nJiwgTm9kZSosIFN0cmluZyBlc2NhcGUgPSBTdHJpbmcoKSk7IAorICAg
IHN0YXRpYyB2b2lkIGNvbnZlcnRWYXJJZk5lZWRlZChTdHJpbmcmLCBTdHJpbmcmKTsKKworICAg
IHN0YXRpYyBXTUxDYXJkRWxlbWVudCogc2V0RGVzdGluYXRpb25DYXJkKFJlZlB0cjxEb2N1bWVu
dD4sIFN0cmluZyB1cmkgPSBTdHJpbmcoKSk7CisKKyAgICBzdGF0aWMgdm9pZCByZWdpc3RlclRl
bXBsYXRlVG9DYXJkcyhEb2N1bWVudCopOworCisgICAgc3RhdGljIFdNTFRva2VuaXplciogdG9r
ZW5pemVyKCk7CisgICAgc3RhdGljIHZvaWQgc2V0VG9rZW5pemVyKFdNTFRva2VuaXplciopOwor
Citwcml2YXRlOgorICAgIHN0YXRpYyBXTUxUb2tlbml6ZXIqIHNfdG9rZW5pemVyOworfTsKKwor
fSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxJbWFnZUVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHdtbC9XTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgd21s
L1dNTEltYWdlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MSW1hZ2VFbGVtZW50LmgiIAorCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxI
ZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKK1dNTEltYWdlRWxlbWVudDo6V01MSW1hZ2VF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBI
VE1MSW1hZ2VFbGVtZW50KG5hbWUsIGRvYykgCit7Cit9CisKK1dNTEltYWdlRWxlbWVudDo6fldN
TEltYWdlRWxlbWVudCgpIAoreworfQorCit2b2lkIFdNTEltYWdlRWxlbWVudDo6dXBkYXRlQXR0
cnNJZk5lZWRlZCgpCit7CisgICAgU3RyaW5nIHN1YjsKKyAgICBTdHJpbmcgYWx0ID0gZ2V0QXR0
cmlidXRlKCJhbHQiKTsKKyAgICBpZiAoIWFsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3ViID0g
V01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGFsdCwgZG9jdW1lbnQoKSk7CisgICAgICAgIGlm
IChhbHQgIT0gc3ViKQorICAgICAgICAgICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHN1Yik7Cisg
ICAgfSAgIAorCisgICAgU3RyaW5nIHNyYyA9IGdldEF0dHJpYnV0ZSgic3JjIik7CisgICAgaWYg
KCFzcmMuaXNFbXB0eSgpKSB7CisgICAgICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZh
clJlZihzcmMsIGRvY3VtZW50KCkpOworICAgICAgICBpZiAoc3JjICE9IHN1YikKKyAgICAgICAg
ICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCBzdWIpOworICAgIH0KKworICAgIFN0cmluZyBsb2Nh
bFNyYyA9IGdldEF0dHJpYnV0ZSgibG9jYWxzcmMiKTsKKyAgICBpZiAoIWxvY2FsU3JjLmlzRW1w
dHkoKSkgeworICAgICAgICAvLyBzdG9yZSB0aGUgc3JjIGF0dHJpYnV0ZSBmb3IgdXNlIGxhdGVy
CisgICAgICAgIGlmICghc3JjLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fc3JjID0gc3ViOwor
CisgICAgICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihsb2NhbFNyYywgZG9j
dW1lbnQoKSk7CisgICAgICAgIGlmICghc3ViLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYg
KGxvY2FsU3JjICE9IHN1YikKKyAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGUoV01MTmFtZXM6
OmxvY2Fsc3JjQXR0ciwgc3ViKTsKKworICAgICAgICAgICAgc2V0QXR0cmlidXRlKHNyY0F0dHIs
IHN1Yik7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV01MSW1hZ2VFbGVtZW50OjpyZWxv
YWRJbWFnZUJ5U3JjQXR0cigpCit7CisgICAgaWYgKG1fc3JjLmlzRW1wdHkoKSkgCisgICAgICAg
IHJldHVybjsKKworICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCBtX3NyYyk7CisgICAgbV9zcmMg
PSAiIjsKKworICAgIGltYWdlTG9hZGVyKCkudXBkYXRlRnJvbUVsZW1lbnQoKTsKK30KKworYm9v
bCBXTUxJbWFnZUVsZW1lbnQ6OmlzV01MSW1hZ2VFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogd21sL1dNTEltYWdlRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHdtbC9XTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIHdt
bC9XTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
Zm5kZWYgV01MSW1hZ2VFbGVtZW50X2gKKyNkZWZpbmUgV01MSW1hZ2VFbGVtZW50X2gKKworI2lu
Y2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBXTUxJbWFnZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEltYWdlRWxlbWVudCB7CitwdWJsaWM6Cisg
ICAgV01MSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAg
IHZpcnR1YWwgfldNTEltYWdlRWxlbWVudCgpOworCisgICAgdmlydHVhbCBib29sIGlzV01MSW1h
Z2VFbGVtZW50KCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAg
ICB2b2lkIHJlbG9hZEltYWdlQnlTcmNBdHRyKCk7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1f
c3JjOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MSW5wdXRF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIHdtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDMwMSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxJbnB1dEVsZW1l
bnQuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKKyNpbmNsdWRl
ICJSZW5kZXJUZXh0Q29udHJvbC5oIgorI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1ZGUg
IldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5h
bWVzLmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAid3RmL0FTQ0lJQ1R5
cGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7
Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIHN0ZDo6bWluOworCitXTUxJbnB1
dEVsZW1lbnQ6OldNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIERvY3Vt
ZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnQo
dGFnLCBkb2MsIGZvcm0pCisgICAgLCBtX2VtcHR5T2soZmFsc2UpCisgICAgLCBtX21hc2tBbGxv
d3NJbnB1dENoYXJOdW1zKDApCit7Cit9CisKK1dNTElucHV0RWxlbWVudDo6fldNTElucHV0RWxl
bWVudCgpIAoreworfQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKSAKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IGZv
cm1hdEF0dHIpIHsKKworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRy
LT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0
RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICB9CisKKyAgICAgICAgbV9mb3JtYXQgPSB2YWxpZGF0ZUlucHV0TWFzayhhdHRy
LT52YWx1ZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBlbXB0eW9rQXR0cikK
KyAgICAgICAgbV9lbXB0eU9rID0gKChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIikgPyB0cnVlIDog
ZmFsc2UpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgeworCisgICAg
ICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAgICAg
ICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxl
UmVmZXJlbmNlRXJyb3IpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgSFRNTElucHV0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgCisgICAgfSBlbHNlCisgICAgICAg
IEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCisKK1N0
cmluZyBXTUxJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKGNvbnN0IEF0b21pY1N0cmlu
ZyYgaW5wdXRNYXNrKQoreworICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZm9ybWF0Q29kZXMgPSAi
QWFOblh4TW0iOworICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2Fy
ZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGVzY2FwZUNoYXJDbnRzID0gMDsKKworICAgIHVuc2ln
bmVkIG1hc2tMZW4gPSBpbnB1dE1hc2subGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaWR4OworICAg
IFVDaGFyIGM7IAorCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXNrTGVuOyArK2lkeCkgewor
ICAgICAgICBjID0gaW5wdXRNYXNrW2lkeF07CisKKyAgICAgICAgaWYgKGZvcm1hdENvZGVzLmZp
bmQoYykgPT0gLTEpIHsKKworICAgICAgICAgICAgaWYgKChjID09ICcqJykgfHwgKFdURjo6aXNB
U0NJSURpZ2l0KGMpICYmIChjICE9ICcwJykpKSB7IAorICAgICAgICAgICAgICAgIC8vIHZhbGlk
YXRlIGNvZGVzIHdoaWNoIGVuZHMgd2l0aCAnKmYnIG9yICduZicKKyAgICAgICAgICAgICAgICBj
ID0gaW5wdXRNYXNrWysraWR4XTsKKyAgICAgICAgICAgICAgICBpZiAoKGlkeCsxICE9IG1hc2tM
ZW4pIHx8IGZvcm1hdENvZGVzLmZpbmQoYykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAg
aXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAgICAgICAgICAg
fSBlbHNlIGlmIChjID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAvL3NraXAgb3ZlciB0aGUg
bmV4dCBtYXNrIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgIGlkeCsrOyAgIAorICAgICAgICAg
ICAgICAgIGVzY2FwZUNoYXJDbnRzKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICB9CisgICAgfQorCisgICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXIg
b2YgY2hhciBhbGxvd2VkIHRvIGVudGVyIGJ5IGlucHV0IG1hc2sgc3RyaW5nCisgICAgaWYgKGlz
VmFsaWQpIHsKKyAgICAgICAgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcyA9IG1hc2tMZW47CisK
KyAgICAgICAgaWYgKGVzY2FwZUNoYXJDbnRzKQorICAgICAgICAgICAgbV9tYXNrQWxsb3dzSW5w
dXRDaGFyTnVtcyAtPSBlc2NhcGVDaGFyQ250czsKKworICAgICAgICBpZiAoaGFzV2lsZGNhcmQg
JiYgaW5wdXRNYXNrW21hc2tMZW4tMl0gPT0gJyonKQorICAgICAgICAgICAgbV9tYXNrQWxsb3dz
SW5wdXRDaGFyTnVtcyA9IG1heExlbmd0aCgpOworICAgICAgICBlbHNlIGlmIChoYXNXaWxkY2Fy
ZCkgeworICAgICAgICAgICAgYyA9IGlucHV0TWFza1ttYXNrTGVuLTJdOworICAgICAgICAgICAg
dW5zaWduZWQgbGVmdExlbiA9IFN0cmluZygmYykudG9JbnQoKTsKKyAgICAgICAgICAgIG1fbWFz
a0FsbG93c0lucHV0Q2hhck51bXMgPSBsZWZ0TGVuICsgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVt
cyAtIDI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaW5wdXRNYXNrOworICAgIH0KKyAK
KyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Vuc2lnbmVkIFdNTElucHV0RWxlbWVudDo6Y3Vy
c29yUG9zVG9JZHhPZk1hc2sodW5zaWduZWQgY3Vyc29yUG9zKQoreworICAgIFVDaGFyIG1hc2s7
CisgICAgaW50IGlkeCA9IC0xOworICAgIGN1cnNvclBvcysrOworICAgIHdoaWxlIChjdXJzb3JQ
b3MtLSkgeworICAgICAgICBtYXNrID0gbV9mb3JtYXRbKytpZHhdOworICAgICAgICBpZiAobWFz
ayA9PSAnXFwnKQorICAgICAgICAgICAgaWR4Kys7CisgICAgICAgIGVsc2UgaWYgKChtYXNrID09
ICcqJykgfHwgKFdURjo6aXNBU0NJSURpZ2l0KG1hc2spICYmIChtYXNrICE9ICcwJykpKSB7Cisg
ICAgICAgICAgICBpZHggPSBtX2Zvcm1hdC5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfSAKKyAgICB9CisKKyAgICByZXR1cm4gaWR4OworfQorCitib29sIFdNTElu
cHV0RWxlbWVudDo6aXNDb25mb3JtZWRUb0lucHV0TWFzayhTdHJpbmcmIGlucHV0KQoreworICAg
IGJvb2wgYlBhc3MgPSB0cnVlOworICAgIFVDaGFyIGluQ2hhcjsKKyAgICBmb3IgKHVuc2lnbmVk
IGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaW5DaGFyID0g
aW5wdXRbaV07CisKKyAgICAgICAgYlBhc3MgPSBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGluQ2hh
ciwgaSsxLCBmYWxzZSk7CisgICAgICAgIGlmICghYlBhc3MpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisKKyAgICByZXR1cm4gYlBhc3M7Cit9CisKK2Jvb2wgV01MSW5wdXRFbGVtZW50Ojpp
c0NvbmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyIGluQ2hhciwgdW5zaWduZWQgaW5wdXRDaGFyTnVt
LCBib29sIGlzSW5wdXRlZEJ5VXNyKQoreworICAgIGJvb2wgYlBhc3MgPSB0cnVlOworICAgIGlm
IChtX2Zvcm1hdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBiUGFzczsKKyAgICAKKyAgICAv
LyB3ZSBzaG91bGQgbGltaXQgdGhlIG51bWJlciBvZiBpbnB1dGVkIGNoYXJhdGVycyBhY2NvcmRp
bmcgdG8gdGhlIGZvcm1hdCBhbmQgbWF4bGVuZ3RoIGF0dHJpYnV0ZQorICAgIHVuc2lnbmVkIG1h
eEFsbG93SW5wdXROdW0gPSBtaW4obV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcywgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KG1heExlbmd0aCgpKSk7CisKKyAgICBpZiAoaW5wdXRDaGFyTnVtIDw9IG1h
eEFsbG93SW5wdXROdW0pIHsKKyAgICAgICAgdW5zaWduZWQgaWR4T2ZNYXNrID0gMDsKKyAgICAg
ICAgaWYgKGlzSW5wdXRlZEJ5VXNyKQorICAgICAgICAgICAgaWR4T2ZNYXNrID0gY3Vyc29yUG9z
VG9JZHhPZk1hc2soc2VsZWN0aW9uU3RhcnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IGlkeE9mTWFzayA9IGN1cnNvclBvc1RvSWR4T2ZNYXNrKGlucHV0Q2hhck51bSAtIDEpOworCisg
ICAgICAgIFVDaGFyIG1hc2sgPSBtX2Zvcm1hdFtpZHhPZk1hc2tdOworICAgICAgICAvLyBtYXRj
aCB0aGUgY2hhciBpbnB1dHRlZCB3aXRoIGlucHV0IG1hc2sKKyAgICAgICAgaWYgKG1hc2sgPT0g
J0EnKQorICAgICAgICAgICAgYlBhc3MgPSAhV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAh
V1RGOjppc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFy
KTsKKyAgICAgICAgZWxzZSBpZiAobWFzayA9PSAnYScpCisgICAgICAgICAgICBiUGFzcyA9ICFX
VEY6OmlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFXVEY6OmlzQVNDSUlVcHBlcihpbkNoYXIpICYm
IFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBlbHNlIGlmIChtYXNrID09
ICdOJykKKyAgICAgICAgICAgIGJQYXNzID0gV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKTsKKyAg
ICAgICAgZWxzZSBpZiAobWFzayA9PSAnbicpCisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6Omlz
QVNDSUlBbHBoYShpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAg
ICAgICBlbHNlIGlmIChtYXNrID09ICdYJykKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNB
U0NJSUxvd2VyKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAg
ICAgIGVsc2UgaWYgKG1hc2sgPT0gJ3gnKQorICAgICAgICAgICAgYlBhc3MgPSAhV1RGOjppc0FT
Q0lJVXBwZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAg
ICAgZWxzZSBpZiAobWFzayA9PSAnTScpCisgICAgICAgICAgICBiUGFzcyA9IFdURjo6aXNBU0NJ
SVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBlbHNlIGlmIChtYXNrID09ICdtJykKKyAgICAg
ICAgICAgIGJQYXNzID0gV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGJQYXNzID0gKG1hc2sgPT0gaW5DaGFyKTsKKworICAgIH0gZWxzZSAg
Ly8gaW5wdXRDaGFyTnVtID4gbWF4QWxsb3dJbnB1dE51bQorICAgICAgICBiUGFzcyA9IGZhbHNl
OworCisgICAgcmV0dXJuIGJQYXNzOworfQorCisKK3ZvaWQgV01MSW5wdXRFbGVtZW50Ojppbml0
KCkKK3sKKyAgICBpZiAoIWRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IFN0cmluZyBuYW1lVmFyID0gbmFtZSgpOworICAgIFN0cmluZyB2YWwgPSB2YWx1ZSgpOworICAg
IFN0cmluZyB2YXJWYWx1ZTsKKworICAgIFdNTFBhZ2VTdGF0ZSAqcGFnZVNhdGUgPSBkb2N1bWVu
dCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIGlmICghbmFtZVZhci5pc0VtcHR5KCkp
CisgICAgICAgIHZhclZhbHVlID0gcGFnZVNhdGUtPmdldFZhcmliYWxlKG5hbWVWYXIpOworICAg
IAorICAgIGlmICh2YXJWYWx1ZS5pc0VtcHR5KCkgfHwgIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2so
dmFyVmFsdWUpKSB7CisgICAgICAgIGlmIChpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKHZhbCkpCisg
ICAgICAgICAgICB2YXJWYWx1ZSA9IHZhbDsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHZh
clZhbHVlID0gIiI7CisKKyAgICAgICAgcGFnZVNhdGUtPnN0b3JlVmFyaWFibGUobmFtZVZhciwg
dmFyVmFsdWUpOworICAgIH0KKworICAgIHNldFZhbHVlKHZhclZhbHVlKTsKKworCisgICAgaWYg
KGdldEF0dHJpYnV0ZSgiZW1wdHlvayIpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9mb3Jt
YXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9lbXB0eU9rID0gdHJ1ZTsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAvL2NoZWNrIGlmIHRoZSBmb3JtYXQgY29kZXMgaXMgYSAiKmYiIGNv
ZGUKKyAgICAgICAgICAgIFN0cmluZyBmb3JtYXRDb2RlcyA9ICJNbUFhWHhObiI7CisgICAgICAg
ICAgICBpZiAoKG1fZm9ybWF0Lmxlbmd0aCgpID09IDIpICYmIChtX2Zvcm1hdFswXSA9PSAnKicp
ICYmIChmb3JtYXRDb2Rlcy5maW5kKG1fZm9ybWF0WzFdKSAhPSAtMSkpCisgICAgICAgICAgICAg
ICAgbV9lbXB0eU9rID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBXTUxJbnB1
dEVsZW1lbnQ6OnVwZGF0ZUF0dHJzSWZOZWVkZWQoKQoreworICAgIFN0cmluZyB2YWx1ZSA9IGdl
dEF0dHJpYnV0ZSgidmFsdWUiKTsgCisgICAgU3RyaW5nIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3Rp
dHV0ZVZhclJlZih2YWx1ZSwgZG9jdW1lbnQoKSk7CisgICAgaWYgKHZhbHVlICE9IHN1YikKKyAg
ICAgICAgc2V0VmFsdWUoc3ViKTsKKworICAgIFN0cmluZyB0aXRsZSA9IGdldEF0dHJpYnV0ZSgi
dGl0bGUiKTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUsIGRv
Y3VtZW50KCkpOworICAgIGlmICh0aXRsZSAhPSBzdWIpCisgICAgICAgIHNldEF0dHJpYnV0ZSh0
aXRsZUF0dHIsIHRpdGxlKTsKK30KKwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1
ckV2ZW50KCkKK3sKKyAgICAvLyB1cGRhdGUgdGhlIG5hbWVkIHZhcmlhYmxlIG9mIGlucHV0IGVs
ZW1lbnQgCisgICAgU3RyaW5nIG5hbWVWYXIgPSBuYW1lKCk7CisgICAgaWYgKCFuYW1lVmFyLmlz
RW1wdHkoKSkgeworICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCAqIHJ0ID0gc3RhdGljX2Nhc3Q8
UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKTsKKyAgICAgICAgU3RyaW5nIGlucHV0ID0g
KHJ0ICE9IDAgPyBydC0+dGV4dCgpIDogU3RyaW5nKCkpOworICAgICAgICBpZiAobV9lbXB0eU9r
IHx8ICFpbnB1dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChkb2N1bWVudCgpLT5w
YWdlKCkpOworICAgICAgICAgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0
YXRlKCkpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKS0+
c3RvcmVWYXJpYWJsZShuYW1lVmFyLCBpbnB1dCk7CisgICAgICAgICAgICBIVE1MSW5wdXRFbGVt
ZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZv
Y3VzKCk7IAorICAgIH0KK30KKwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoRXZlbnQqIGV2dCkKK3sKKyAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBldnQtPnR5cGUo
KSA9PSB0ZXh0SW5wdXRFdmVudCAmJiBldnQtPmlzVGV4dEV2ZW50KCkpIHsKKyAgICAgICAgU3Ry
aW5nIGRhdGEgPSBzdGF0aWNfY2FzdDxUZXh0RXZlbnQqPihldnQpLT5kYXRhKCk7CisgICAgICAg
IFJlbmRlclRleHRDb250cm9sICpydCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4o
cmVuZGVyZXIoKSk7CisgICAgICAgIGlmIChydCkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5w
dXRDaGFyTnVtID0gcnQtPnRleHQoKS5sZW5ndGgoKSArIDE7CisgICAgICAgICAgICBpZiAoIWlz
Q29uZm9ybWVkVG9JbnB1dE1hc2soZGF0YVswXSwgaW5wdXRDaGFyTnVtKSkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBIVE1MSW5wdXRFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7Cit9CisKK30KSW5kZXg6IHdtbC9XTUxJbnB1dEVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDApCisr
KyB3bWwvV01MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFdNTElucHV0RWxlbWVudF9oCisjZGVmaW5lIFdNTElucHV0RWxlbWVudF9oCisK
KyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgSFRNTEZvcm1FbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdN
TElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MSW5wdXRFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBX
TUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRNTEZvcm1F
bGVtZW50KiA9IDApOworICAgIHZpcnR1YWwgfldNTElucHV0RWxlbWVudCgpOworCisgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZp
cnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lkIHVwZGF0
ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soU3RyaW5n
Jik7CisgICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25lZCwgYm9v
bCBpc0lucHV0ZWRCeVVzciA9IHRydWUpOworCitwcml2YXRlOgorICAgIFN0cmluZyB2YWxpZGF0
ZUlucHV0TWFzayhjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB1bnNpZ25lZCBjdXJzb3JQb3NU
b0lkeE9mTWFzayh1bnNpZ25lZCk7CisKKyAgICBTdHJpbmcgbV9mb3JtYXQ7CisgICAgYm9vbCBt
X2VtcHR5T2s7CisgICAgdW5zaWduZWQgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtczsKK307CisK
K30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MSW50cmluc2ljRXZlbnRIYW5k
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcAko
cmV2aXNpb24gMCkKKysrIHdtbC9XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5j
bHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNs
dWRlICJXTUxIZWxwZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgV01MTmFtZXM7CisKK1dNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6V01MSW50cmluc2ljRXZl
bnRIYW5kbGVyKCkgCit7Cit9CisgICAgCitXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXI6On5XTUxJ
bnRyaW5zaWNFdmVudEhhbmRsZXIoKQoreworfQorCit2b2lkIFdNTEludHJpbnNpY0V2ZW50SGFu
ZGxlcjo6cmVnaXN0ZXJJbnRyaW5zaWNFdmVudChXTUxJbnRyaW5zaWNFdmVudFR5cGUgdHlwZSwg
Y29uc3QgV01MSW50cmluc2ljRXZlbnQmIGV2KQoreworICAgIGlmIChtX2V2ZW50cy5jb250YWlu
cyh0eXBlKSkgeworICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihD
b25mbGljdGluZ0V2ZW50QmluZGluZ0Vycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2V2ZW50cy5zZXQodHlwZSwgZXYpOworfQorCit2b2lkIFdNTEludHJpbnNpY0V2ZW50SGFu
ZGxlcjo6dHJpZ2dlckludHJpbnNpY0V2ZW50KFdNTEludHJpbnNpY0V2ZW50VHlwZSB0eXBlKSBj
b25zdAoreworICAgIFdNTEludHJpbnNpY0V2ZW50IGV2ID0gbV9ldmVudHMuZ2V0KHR5cGUpOwor
ICAgIGlmIChldi50YXNrKQorICAgICAgICBldi50YXNrLT5leGVjKDAsIGV2LnRhcmdldFVSSSk7
Cit9CisKK2Jvb2wgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyOjpoYXNJbnRyaW5zaWNFdmVudChX
TUxJbnRyaW5zaWNFdmVudFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9ldmVudHMu
Y29udGFpbnModHlwZSk7Cit9CisKK30KSW5kZXg6IHdtbC9XTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgJKHJldmlz
aW9uIDApCisrKyB3bWwvV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcl9oCisj
ZGVmaW5lIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBXTUxUYXNrRWxlbWVudDsKKworZW51bSBXTUxJbnRyaW5zaWNFdmVudFR5cGUgeworICAg
IFVua25vd24gPSAwLCBPbkVudGVyRm9yd2FyZCwgT25FbnRlckJhY2t3YXJkLCBPblRpbWVyLCBP
blBpY2sgCit9OworCit0eXBlZGVmIHN0cnVjdCBXTUxJbnRyaW5zaWNFdmVudCB7CisgICAgV01M
VGFza0VsZW1lbnQqIHRhc2s7CisgICAgU3RyaW5nIHRhcmdldFVSSTsKK30gV01MSW50cmluc2lj
RXZlbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiBIYXNoTWFwPGludCwgV01M
SW50cmluc2ljRXZlbnQ+IEludHJpbnNpY0V2bnRNYXA7CisKK2NsYXNzIFdNTEludHJpbnNpY0V2
ZW50SGFuZGxlciB7CitwdWJsaWM6CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7Cisg
ICAgdmlydHVhbCB+V01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisKKyAgICAvLyBoYW5kbGlu
ZyBXTUwgaW50cmluc2ljIGV2ZW50CisgICAgdm9pZCByZWdpc3RlckludHJpbnNpY0V2ZW50KFdN
TEludHJpbnNpY0V2ZW50VHlwZSwgY29uc3QgV01MSW50cmluc2ljRXZlbnQmKTsKKyAgICB2b2lk
IHRyaWdnZXJJbnRyaW5zaWNFdmVudChXTUxJbnRyaW5zaWNFdmVudFR5cGUpIGNvbnN0OworICAg
IGJvb2wgaGFzSW50cmluc2ljRXZlbnQoV01MSW50cmluc2ljRXZlbnRUeXBlKSBjb25zdDsKKwor
cHJpdmF0ZToKKyAgICBJbnRyaW5zaWNFdm50TWFwIG1fZXZlbnRzOworICAgCit9OworCit9IC8v
bmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHdtbC9XTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9X
TUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNDQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MT3B0aW9uRWxlbWVudC5oIgorCisjaW5j
bHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJX
TUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAi
V01MU2VsZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVz
cGFjZSBXTUxOYW1lczsKKworV01MT3B0aW9uRWxlbWVudDo6V01MT3B0aW9uRWxlbWVudChEb2N1
bWVudCogZG9jKQorICAgIDogSFRNTE9wdGlvbkVsZW1lbnQoZG9jLCAwKQorICAgICwgbV9ldm50
SGFuZGxlcigwKQorICAgICwgbV9oYXNJbnRyaW5zaWNFdmVudChmYWxzZSkKK3sKK30KKworV01M
T3B0aW9uRWxlbWVudDo6fldNTE9wdGlvbkVsZW1lbnQoKSAKK3sKKyAgICBpZiAobV9ldm50SGFu
ZGxlcikgeworICAgICAgICBkZWxldGUgbV9ldm50SGFuZGxlcjsKKyAgICAgICAgbV9ldm50SGFu
ZGxlciA9IDA7CisgICAgfQorfQorCit2b2lkIFdNTE9wdGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgp
ID09IG9ucGlja0F0dHIpIHsKKyAgICAgICAgCisgICAgICAgIFdNTEludHJpbnNpY0V2ZW50VHlw
ZSBldHlwZSA9IE9uUGljazsgCisgICAgICAgIGlmICghbV9ldm50SGFuZGxlcikKKyAgICAgICAg
ICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisgCisg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICBRdWFsaWZpZWROYW1lIHFOYW1l
KCJnbyIsICJnbyIsICIiKTsKKyAgICAgICAgRWxlbWVudCogZ28gPSBXTUxFbGVtZW50RmFjdG9y
eTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgZG9jdW1lbnQoKSwgZmFsc2UpOworICAgICAgICBT
dHJpbmcgaHJlZiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBk
b2N1bWVudCgpLCAiZXNjYXBlIik7CisgICAgICAgIGdvLT5zZXRBdHRyaWJ1dGVOUygiIiwgImhy
ZWYiLCBocmVmLCBlYyk7CisgCisgICAgICAgIFdNTEludHJpbnNpY0V2ZW50IGV2OworICAgICAg
ICBldi50YXNrID0gc3RhdGljX2Nhc3Q8V01MR29FbGVtZW50Kj4oZ28pOworICAgICAgICBldi50
YXJnZXRVUkkgPSBocmVmOworIAorICAgICAgICBtX2hhc0ludHJpbnNpY0V2ZW50ID0gdHJ1ZTsK
KyAgICAgICAgbV9ldm50SGFuZGxlci0+cmVnaXN0ZXJJbnRyaW5zaWNFdmVudChldHlwZSwgZXYp
OworCisgICAgfSBlbHNlCisgICAgICAgIEhUTUxPcHRpb25FbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKK30KKworV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBXTUxPcHRpb25F
bGVtZW50OjpldmVudEhhbmRsZXIoKSAKK3sKKyAgICBpZiAobV9oYXNJbnRyaW5zaWNFdmVudCAm
JiAhbV9ldm50SGFuZGxlcikKKyAgICAgICAgbV9ldm50SGFuZGxlciA9IG5ldyBXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIoKTsKKyAgICByZXR1cm4gbV9ldm50SGFuZGxlcjsKK30KKwordm9pZCBX
TUxPcHRpb25FbGVtZW50OjpzZXRIYXNJbnRyaW5zaWNFdmVudChib29sIGhhcykgCit7CisgICAg
bV9oYXNJbnRyaW5zaWNFdmVudCA9IGhhczsKK30KKyAKK2Jvb2wgV01MT3B0aW9uRWxlbWVudDo6
aGFzSW50cmluc2ljRXZlbnQoKQoreworICAgIHJldHVybiBtX2hhc0ludHJpbnNpY0V2ZW50Owor
fQorCit2b2lkIFdNTE9wdGlvbkVsZW1lbnQ6OmhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVkZWQo
KQoreworICAgIGlmIChtX2V2bnRIYW5kbGVyICYmIG1fZXZudEhhbmRsZXItPmhhc0ludHJpbnNp
Y0V2ZW50KE9uUGljaykpCisgICAgICAgIG1fZXZudEhhbmRsZXItPnRyaWdnZXJJbnRyaW5zaWNF
dmVudChPblBpY2spOworfQorCit2b2lkIFdNTE9wdGlvbkVsZW1lbnQ6OnVwZGF0ZUF0dHJzSWZO
ZWVkZWQoKSAKK3sKKyAgICBTdHJpbmcgdmFsdWUgPSBnZXRBdHRyaWJ1dGUoInZhbHVlIik7Cisg
ICAgU3RyaW5nIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZih2YWx1ZSwgZG9jdW1l
bnQoKSk7CisgICAgaWYgKHZhbHVlICE9IHN1YikKKyAgICAgICAgc2V0QXR0cmlidXRlKHZhbHVl
QXR0ciwgc3ViKTsKKworICAgIFN0cmluZyB0aXRsZSA9IGdldEF0dHJpYnV0ZSgidGl0bGUiKTsK
KyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUsIGRvY3VtZW50KCkp
OworCisgICAgaWYgKHRpdGxlICE9IHN1YikKKyAgICAgICAgc2V0QXR0cmlidXRlKHRpdGxlQXR0
ciwgdGl0bGUpOworfQorCit2b2lkIFdNTE9wdGlvbkVsZW1lbnQ6OnNldFNlbGVjdGVkU3RhdGUo
Ym9vbCBzZWxlY3QpCit7CisgICAgaWYgKHNlbGVjdGVkKCkgPT0gc2VsZWN0KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBXTUxTZWxlY3RFbGVtZW50KiBzZWwgPSBnZXRTZWxlY3QoKTsKKyAgICBp
ZiAoIXNlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0U2VsZWN0ZWQoc2VsZWN0KTsKKyAg
ICBpZiAoc2VsLT5tdWx0aXBsZSgpICYmIG1faGFzSW50cmluc2ljRXZlbnQpCisgICAgICAgIGhh
bmRsZUludHJpbnNpY0V2ZW50SWZOZWVkZWQoKTsKKyAgICBlbHNlIGlmIChtX2hhc0ludHJpbnNp
Y0V2ZW50ICYmIHNlbGVjdGVkKCkpCisgICAgICAgIGhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVk
ZWQoKTsKKworICAgIHNldENoYW5nZWQoKTsKK30KKworV01MU2VsZWN0RWxlbWVudCogV01MT3B0
aW9uRWxlbWVudDo6Z2V0U2VsZWN0KCkgY29uc3QKK3sKKyAgICBOb2RlKiBzZWxlY3QgPSBwYXJl
bnROb2RlKCk7CisgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2VsZWN0LT5oYXNUYWdOYW1lKHNlbGVj
dFRhZykpCisgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFyZW50Tm9kZSgpOworCisgICAgcmV0
dXJuIHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihzZWxlY3QpOworfQorCit9IC8vbmFt
ZXNwYWNlCkluZGV4OiB3bWwvV01MT3B0aW9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9X
TUxPcHRpb25FbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MT3B0aW9uRWxlbWVudC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxPcHRpb25FbGVt
ZW50X2gKKyNkZWZpbmUgV01MT3B0aW9uRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MT3B0aW9u
RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xh
c3MgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyOworY2xhc3MgV01MU2VsZWN0RWxlbWVudDsKKwor
Y2xhc3MgV01MT3B0aW9uRWxlbWVudCA6IHB1YmxpYyBIVE1MT3B0aW9uRWxlbWVudHsKK3B1Ymxp
YzoKKyAgICBXTUxPcHRpb25FbGVtZW50KERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MT3B0
aW9uRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSopOworICAgIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShib29sKTsKKyAgICBX
TUxTZWxlY3RFbGVtZW50KiBnZXRTZWxlY3QoKSBjb25zdDsKKworICAgIFdNTEludHJpbnNpY0V2
ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyKCk7CisgICAgYm9vbCBoYXNJbnRyaW5zaWNFdmVudCgp
OworICAgIHZvaWQgc2V0SGFzSW50cmluc2ljRXZlbnQoYm9vbCk7CisgICAgdm9pZCBoYW5kbGVJ
bnRyaW5zaWNFdmVudElmTmVlZGVkKCk7CisKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQo
KTsgCitwcml2YXRlOgorICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogbV9ldm50SGFuZGxl
cjsKKyAgICBib29sIG1faGFzSW50cmluc2ljRXZlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZQor
CisjZW5kaWYKSW5kZXg6IHdtbC9XTUxQRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dN
TFBFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxQRWxlbWVudC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiV01MUEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxQRWxlbWVudDo6V01MUEVsZW1l
bnQoRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxQYXJhZ3JhcGhFbGVtZW50KGRvYykgCit7Cit9
CisKK1dNTFBFbGVtZW50Ojp+V01MUEVsZW1lbnQoKSAKK3sKK30KKwordm9pZCBXTUxQRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlm
IChhdHRyLT5uYW1lKCkgPT0gbW9kZUF0dHIpIHsKKyAgICAgICAgbV9tb2RlID0gIGF0dHItPnZh
bHVlKCk7CisgICAgICAgIGlmIChtX21vZGUgPT0gIndyYXAiKQorICAgICAgICAgICAgYWRkQ1NT
UHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXb3JkV3JhcCwgQ1NTVmFsdWVCcmVha1dvcmQpOwor
ICAgICAgICBlbHNlIGlmIChtX21vZGUgPT0gIm5vd3JhcCIpCisgICAgICAgICAgICBhZGRDU1NQ
cm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVlTm93cmFwKTsKKyAg
ICB9IGVsc2UKKyAgICAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpOworfQorCit2b2lkIFdNTFBFbGVtZW50Ojp1cGRhdGVBdHRyc0lmTmVlZGVkKCkK
K3sKKyAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQsIHRoZSBsaW5ld3JhcCBtb2Rl
IGlzIGlkZW50aWNhbCB0byAKKyAgICAvLyB0aGUgbGluZS13cmFwIG1vZGUgb2YgdGhlIHByZXZp
b3VzIHBhcmFncmFwaCBpbiB0aGUgdGV4dCBmbG93IG9mCisgICAgLy8gYSBjYXJkLlRoZSBkZWZh
dWx0IG1vZGUgZm9yIHRoZSBmaXJzdCBwYXJhZ3JhcGggaW4gYSBjYXJkIGlzIHdyYXAKKyAgICBp
ZiAobV9tb2RlLmlzRW1wdHkoKSkgeworICAgICAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBubCA9
IGRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIik7CisgICAgICAgIGludCBuTGVu
ID0gbmwuZ2V0KCktPmxlbmd0aCgpOworICAgICAgICBpZiAobkxlbiA9PSAwKQorICAgICAgICAg
ICAgc2V0QXR0cmlidXRlKG1vZGVBdHRyLCAid3JhcCIpOworICAgICAgICBlbHNlIGlmIChuTGVu
ID4gMCkgeworICAgICAgICAgICAgV01MUEVsZW1lbnQqIHBFbCA9IHN0YXRpY19jYXN0PFdNTFBF
bGVtZW50Kj4obmwuZ2V0KCktPml0ZW0obkxlbi0xKSk7CisgICAgICAgICAgICBTdHJpbmcgcHJl
TW9kZSA9IHBFbC0+Z2V0QXR0cmlidXRlKCJtb2RlIik7CisgICAgICAgICAgICBzZXRBdHRyaWJ1
dGUobW9kZUF0dHIsIHByZU1vZGUpOworICAgICAgICB9CisgICAgfQorfQorCit9IC8vbmFtZXNw
YWNlCkluZGV4OiB3bWwvV01MUEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MUEVsZW1l
bnQuaAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxQRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKyNpZm5kZWYgV01MUEVsZW1lbnRfaAorI2RlZmluZSBXTUxQRWxlbWVu
dF9oCisKKyNpbmNsdWRlICJIVE1MUGFyYWdyYXBoRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBXTUxQRWxlbWVudCA6IHB1YmxpYyBI
VE1MUGFyYWdyYXBoRWxlbWVudHsKK3B1YmxpYzoKKyAgICBXTUxQRWxlbWVudChEb2N1bWVudCop
OworICAgIHZpcnR1YWwgfldNTFBFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdm9pZCB1cGRhdGVBdHRyc0lm
TmVlZGVkKCk7CisKK3ByaXZhdGU6CisgICAgU3RyaW5nIG1fbW9kZTsKK307CisKK30gLy8gbmFt
ZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTFBhZ2VTdGF0ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gd21sL1dNTFBhZ2VTdGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MUGFnZVN0YXRl
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhp
c3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiTm9kZUxp
c3QuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTERvY3VtZW50
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNs
dWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworV01MUGFnZVN0YXRlOjpXTUxQYWdlU3RhdGUoUGFnZSogcGFn
ZSkKK3sKKyAgICBtX3BhZ2UgPSBwYWdlOworICAgIG1faGlzdExlbiA9IDA7CisgICAgbV9hY3Rp
dmVDYXJkID0gMDsKKyAgICBtX2hhc0RlY2tBY2Nlc3MgPSBmYWxzZTsKK30KKworV01MUGFnZVN0
YXRlOjp+V01MUGFnZVN0YXRlKCkKK3sKKyAgICBtX3ZhcmlhYmxlcy5jbGVhcigpOworICAgIG1f
cGFnZSA9IDA7CisgICAgbV9hY3RpdmVDYXJkID0gMDsKKyAgICBtX2hhc0RlY2tBY2Nlc3MgPSBm
YWxzZTsKK30KKwordm9pZCBXTUxQYWdlU3RhdGU6OnJlc2V0KCkKK3sKKyAgICAvL3JlbW92ZSBh
bGwgdGhlIHZhcmlhYmxlcyBpbiB0aGUgY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICBtX3Zh
cmlhYmxlcy5jbGVhcigpOworCisgICAgLy9jbGVhciB0aGUgbmF2aWdhdGlvbiBoaXN0b3J5IHN0
YXRlIAorICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkt
PmNsZWFyV21sUGFnZUhpc3RvcnkoKTsKKworICAgIC8vcmVzZXQgaW1wbGVtZW50YXRpb24tc3Bl
Y2ZpYyBzdGF0ZSBpZiBVQSBoYXMKKyAgICBtX2hpc3RMZW4gPSAxOworfQorCit2b2lkIFdNTFBh
Z2VTdGF0ZTo6c3RvcmVWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYg
dmFsKSAKK3sKKyAgICBtX3ZhcmlhYmxlcy5zZXQobmFtZSwgdmFsKTsKK30KKwordm9pZCBXTUxQ
YWdlU3RhdGU6OnN0b3JlVmFyaWFibGVzKFZhcmlhYmxlTWFwJiB2YXJzKSAKK3sKKyAgICBtX3Zh
cmlhYmxlcyA9IHZhcnM7Cit9CisKK1N0cmluZyBXTUxQYWdlU3RhdGU6OmdldFZhcmliYWxlKGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fdmFyaWFibGVzLmdldChu
YW1lKTsKK30KKworYm9vbCBXTUxQYWdlU3RhdGU6Omhhc1ZhcmlhYmxlcygpIGNvbnN0IAorewor
ICAgIHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7Cit9CisKK1BhZ2UqIFdNTFBhZ2VTdGF0ZTo6
cGFnZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9wYWdlOworfQorCitpbnQgV01MUGFnZVN0YXRl
OjpoaXN0b3J5TGVuZ3RoKCkgY29uc3QgeworICAgIHJldHVybiBtX2hpc3RMZW47Cit9CisKK3Zv
aWQgV01MUGFnZVN0YXRlOjpzZXRIaXN0b3J5TGVuZ3RoKGludCBsZW4pIHsKKyAgICBtX2hpc3RM
ZW4gPSBsZW47Cit9CisKK1dNTENhcmRFbGVtZW50KiBXTUxQYWdlU3RhdGU6OmFjdGl2ZUNhcmQo
KQoreworICAgIHJldHVybiBtX2FjdGl2ZUNhcmQ7Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRlOjpz
ZXRBY3RpdmVDYXJkKFdNTENhcmRFbGVtZW50KiBjYXJkKQoreworICAgIG1fYWN0aXZlQ2FyZCA9
IGNhcmQ7Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRlOjpzZXREZWNrQWNjZXNzRG9tYWluKGNvbnN0
IFN0cmluZyYgZG9tYWluKQoreworICAgIG1fYWNjZXNzRG9tYWluID0gZG9tYWluOworfQorCit2
b2lkIFdNTFBhZ2VTdGF0ZTo6c2V0RGVja0FjY2Vzc1BhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIG1fYWNjZXNzUGF0aCA9IHBhdGg7Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRlOjpzZXRO
ZWVkQ2hlY2tEZWNrQWNjZXNzKGJvb2wgbmVlZCkKK3sKKyAgICBpZiAobV9oYXNEZWNrQWNjZXNz
ICYmIG5lZWQpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6dG9rZW5pemVyKCkpCisgICAgICAg
ICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihNdWx0aUFjY2Vzc0VsZW1l
bnRzRXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faGFzRGVja0FjY2VzcyA9IG5lZWQ7
CisgICAgICAgIG1fYWNjZXNzUGF0aCA9IFN0cmluZygpOworICAgICAgICBtX2FjY2Vzc0RvbWFp
biA9IFN0cmluZygpOworICAgIH0KK30KKworYm9vbCBXTUxQYWdlU3RhdGU6Omhhc0RlY2tBY2Nl
c3MoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc0RlY2tBY2Nlc3M7Cit9CisKK2Jvb2wgV01M
UGFnZVN0YXRlOjppc0RlY2tBY2Nlc3NpYmxlKCkKK3sKKyAgICBpZiAoIW1faGFzRGVja0FjY2Vz
cyB8fCAhbV9wYWdlIHx8ICFtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpIHx8ICFtX3BhZ2UtPmJh
Y2tGb3J3YXJkTGlzdCgpLT5iYWNrSXRlbSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAg
IEhpc3RvcnlJdGVtKiBoaXN0SXRlbSA9IG1fcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmJhY2tJ
dGVtKCk7CisgICAgS1VSTCB1cmwoaGlzdEl0ZW0tPnVybFN0cmluZygpKTsKKyAgICBTdHJpbmcg
cHJldkhvc3QgPSB1cmwuaG9zdCgpOworICAgIC8vIGZvciAnZmlsZScgVVJJLCB0aGUgaG9zdCBw
YXJ0IG1heSBiZSBlbXB0eSwgc28gd2Ugc2hvdWxkIGNvbXBsZXRlIGl0LgorICAgIGlmIChwcmV2
SG9zdC5pc0VtcHR5KCkpCisgICAgICAgIHByZXZIb3N0ID0gImxvY2FsaG9zdCI7CisgICAgU3Ry
aW5nIHByZXZQYXRoID0gdXJsLnBhdGgoKTsKKworICAgIGhpc3RJdGVtID0gbV9wYWdlLT5iYWNr
Rm9yd2FyZExpc3QoKS0+Y3VycmVudEl0ZW0oKTsKKyAgICBLVVJMIGN1clVybChoaXN0SXRlbS0+
dXJsU3RyaW5nKCkpOworICAgIFN0cmluZyBjdXJQYXRoID0gY3VyVXJsLnBhdGgoKTsKKworICAg
IGlmIChlcXVhbElnbm9yaW5nUmVmKHVybCwgY3VyVXJsKSkKKyAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGJvb2wgY2FuQWNjZXNzID0gZmFsc2U7CisgICAgLy8gIi8iIGlzIHRoZSBkZWZhdWx0
IHZhbHVlIGlmIG5vdCBzcGVjaWZpZWQKKyAgICBpZiAobV9hY2Nlc3NQYXRoLmlzRW1wdHkoKSkg
IAorICAgICAgICBtX2FjY2Vzc1BhdGggPSAiLyI7CisgICAgZWxzZSBpZiAobV9hY2Nlc3NQYXRo
LmVuZHNXaXRoKCIvIikgJiYgKG1fYWNjZXNzUGF0aCAhPSAiLyIpKQorICAgICAgICBtX2FjY2Vz
c1BhdGggPSBtX2FjY2Vzc1BhdGgubGVmdCgobV9hY2Nlc3NQYXRoLmxlbmd0aCgpLTEpKTsKKwor
CisgICAgLy8gY3VycmVudCBkZWNrIGRvbWFpbiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qg
c3BlY2lmaWVkCisgICAgaWYgKG1fYWNjZXNzRG9tYWluLmlzRW1wdHkoKSkKKyAgICAgICAgbV9h
Y2Nlc3NEb21haW4gPSBwcmV2SG9zdDsKKworICAgIC8vY29udmVydCByZWxhdGl2ZSBVUkwgdG8g
YWJzb2x1dGUgVVJMIGJlZm9yZSBwZXJmb3JtaW5nIHBhdGggbWF0Y2hpbmcKKyAgICBpZiAocHJl
dkhvc3QgPT0gbV9hY2Nlc3NEb21haW4pIHsKKyAgICAgICAgaWYgKCFtX2FjY2Vzc1BhdGguc3Rh
cnRzV2l0aCgiLyIpKSB7CisgICAgICAgICAgIGludCBpZHggPSBjdXJQYXRoLnJldmVyc2VGaW5k
KCcvJyk7CisgICAgICAgICAgIGlmIChpZHggIT0gLTEpIHsKKyAgICAgICAgICAgICAgIGN1clBh
dGggPSBjdXJQYXRoLmxlZnQoaWR4KzEpOworICAgICAgICAgICAgICAgY3VyUGF0aCArPSBtX2Fj
Y2Vzc1BhdGg7CisgICAgICAgICAgICAgICBjdXJVcmwuc2V0UGF0aChjdXJQYXRoKTsKKyAgICAg
ICAgICAgICAgIG1fYWNjZXNzUGF0aCA9IGN1clVybC5wYXRoKCk7CisgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIC8vIHBhdGggcHJlZml4IG1hdGNoaW5nCisgICAgaWYgKHBy
ZXZQYXRoLnN0YXJ0c1dpdGgobV9hY2Nlc3NQYXRoKSAmJiAKKyAgICAgICAoKHByZXZQYXRoW21f
YWNjZXNzUGF0aC5sZW5ndGgoKV0gPT0gJy8nKSB8fCAocHJldlBhdGgubGVuZ3RoKCkgPT0gbV9h
Y2Nlc3NQYXRoLmxlbmd0aCgpKSkpIHsKKyAgICAgICAgY2FuQWNjZXNzID0gdHJ1ZTsKKworICAg
ICAgICAvLyBkb21haW4gc3VmZml4IG1hdGNoaW5nCisgICAgICAgIHVuc2lnbmVkIGRvbWFpbkxl
biA9IG1fYWNjZXNzRG9tYWluLmxlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBob3N0TGVuID0g
cHJldkhvc3QubGVuZ3RoKCk7CisgICAgICAgIGlmIChwcmV2SG9zdC5lbmRzV2l0aChtX2FjY2Vz
c0RvbWFpbikgJiYgKHByZXZIb3N0W2hvc3RMZW4tZG9tYWluTGVuLTFdID09ICcuJykgfHwgKGhv
c3RMZW4gPT0gZG9tYWluTGVuKSkKKyAgICAgICAgICAgIGNhbkFjY2VzcyA9IHRydWU7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIGNhbkFjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAgIHJl
dHVybiAgY2FuQWNjZXNzOworfQorCit9CkluZGV4OiB3bWwvV01MUGFnZVN0YXRlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gd21sL1dNTFBhZ2VTdGF0ZS5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFBhZ2VT
dGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDgxIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0
LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0
aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisg
KiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxQYWdl
U3RhdGVfaAorI2RlZmluZSBXTUxQYWdlU3RhdGVfaAorCisjaW5jbHVkZSAiUGFnZS5oIgorI2lu
Y2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBQYWdlOworY2xh
c3MgV01MQ2FyZEVsZW1lbnQ7CisKK3R5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gVmFy
aWFibGVNYXA7CisKK2NsYXNzIFdNTFBhZ2VTdGF0ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFdNTFBh
Z2VTdGF0ZT4geworCitwdWJsaWM6CisgICAgV01MUGFnZVN0YXRlKFBhZ2UqKTsKKyAgICB+V01M
UGFnZVN0YXRlKCk7CisKKyAgICAvLyByZXNldCB0aGUgYnJvd3NlciBjb250ZXh0IHdoZW4gJ05l
d2NvbnRleHQnIGF0dHJpYnV0ZSBvZiBjYXJkIGVsZW1lbnQgaXMKKyAgICAvLyBwZXJmb3JtZWQg
YXMgcGFydCBvZiBnbyB0YXNrCisgICAgdm9pZCByZXNldCgpOworCisgICAgLy8gdmFyaWFibGVz
IG9wZXJhdGlvbnMgCisgICAgdm9pZCBzdG9yZVZhcmlhYmxlKGNvbnN0IFN0cmluZyYsIGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgc3RvcmVWYXJpYWJsZXMoVmFyaWFibGVNYXAmKTsKKyAgICBT
dHJpbmcgZ2V0VmFyaWJhbGUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgYm9vbCBoYXNWYXJp
YWJsZXMoKSBjb25zdDsKKworICAgIGludCBoaXN0b3J5TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9p
ZCBzZXRIaXN0b3J5TGVuZ3RoKGludCk7CisKKyAgICBQYWdlKiBwYWdlKCkgY29uc3Q7CisKKyAg
ICBXTUxDYXJkRWxlbWVudCogYWN0aXZlQ2FyZCgpOworICAgIHZvaWQgc2V0QWN0aXZlQ2FyZChX
TUxDYXJkRWxlbWVudCopOworCisgICAgLy8gZGVjayBhY2Nlc3MgY29udHJvbAorICAgIHZvaWQg
c2V0RGVja0FjY2Vzc0RvbWFpbihjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldERlY2tBY2Nl
c3NQYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc2V0TmVlZENoZWNrRGVja0FjY2Vzcyhi
b29sKTsKKyAgICBib29sIGhhc0RlY2tBY2Nlc3MoKSBjb25zdDsKKyAgICBib29sIGlzRGVja0Fj
Y2Vzc2libGUoKTsKKworcHJpdmF0ZToKKyAgICBQYWdlKiBtX3BhZ2U7CisgICAgVmFyaWFibGVN
YXAgbV92YXJpYWJsZXM7CisgICAgaW50IG1faGlzdExlbjsKKyAgICBXTUxDYXJkRWxlbWVudCog
bV9hY3RpdmVDYXJkOworICAgIFN0cmluZyBtX2FjY2Vzc0RvbWFpbjsKKyAgICBTdHJpbmcgbV9h
Y2Nlc3NQYXRoOworICAgIGJvb2wgbV9oYXNEZWNrQWNjZXNzOworfTsKKworfSAvL25hbWVzcGFj
ZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSB3bWwvV01MUG9zdGZpZWxkRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01M
UG9zdGZpZWxkRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MUG9zdGZpZWxkRWxlbWVudC5oIgorCisj
aW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIK
KyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5hbWVOb2Rl
TGlzdC5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5o
IgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBu
YW1lc3BhY2UgRXZlbnROYW1lczsKKworV01MUG9zdGZpZWxkRWxlbWVudDo6V01MUG9zdGZpZWxk
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKQorIDogV01M
RWxlbWVudChuYW1lLCBkb2MpCit7Cit9CisKK1dNTFBvc3RmaWVsZEVsZW1lbnQ6On5XTUxQb3N0
ZmllbGRFbGVtZW50KCkKK3sKK30KKwordm9pZCBXTUxQb3N0ZmllbGRFbGVtZW50OjppbnNlcnRl
ZEludG9UcmVlKGJvb2wgZGVlcCkKK3sKKyAgICBOb2RlKiBhbmNlc3RvciA9IHBhcmVudE5vZGUo
KTsKKyAgICAvLyB0aGUgYW5jZXN0b3Igb2YgPHBvc3RmaWVsZD4gZ290IHRvIGJlIDxnbz4KKyAg
ICBpZiAoIWFuY2VzdG9yLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpnb1RhZykpCisgICAgICAgIHJl
dHVybjsgICAgIAorCisgICAgV01MR29FbGVtZW50KiBnbyA9IDA7CisgICAgZ28gPSBzdGF0aWNf
Y2FzdDxXTUxHb0VsZW1lbnQqPihhbmNlc3Rvcik7CisgICAgaWYgKGdvKQorICAgICAgICBnby0+
cmVnaXN0ZXJQb3N0ZmllbGRFbGVtZW50KHRoaXMpOworfQorCitTdHJpbmcgV01MUG9zdGZpZWxk
RWxlbWVudDo6bmFtZSgpIAoreworICAgIHJldHVybiBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYoZ2V0QXR0cmlidXRlKCJuYW1lIiksIGRvY3VtZW50KCkpOworfQorCitTdHJpbmcgV01MUG9z
dGZpZWxkRWxlbWVudDo6dmFsdWUoKSAKK3sKKyAgICByZXR1cm4gV01MSGVscGVyOjpzdWJzdGl0
dXRlVmFyUmVmKGdldEF0dHJpYnV0ZSgidmFsdWUiKSwgZG9jdW1lbnQoKSk7Cit9ICAgIAorCit9
CisKSW5kZXg6IHdtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dN
TFBvc3RmaWVsZEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxQb3N0ZmllbGRFbGVt
ZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTFBvc3Rm
aWVsZEVsZW1lbnRfaAorI2RlZmluZSBXTUxQb3N0ZmllbGRFbGVtZW50X2gKKworI2luY2x1ZGUg
IldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxQb3N0Zmll
bGRFbGVtZW50IDogcHVibGljICBXTUxFbGVtZW50eworcHVibGljOgorICAgIFdNTFBvc3RmaWVs
ZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvYyk7CisgICAg
fldNTFBvc3RmaWVsZEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9U
cmVlKGJvb2wgZGVlcCk7ICAgIC8vIG5lZWQgdG8gcmVnaXN0ZXIgbXlzZWxmIHRvIHBhcmVudHMg
aGVyZSwgbGlrZSA8Z28+LCA8b25ldmVudD4KKworICAgIFN0cmluZyBuYW1lKCk7ICAgIC8vIGV2
ZXJ5IHBvc3RmaWVsZCB0YWcgbXVzdCBoYXZlIGEgbmFtZSBhdHRyaWJ1dGUgYW5kIGEgdmFsaWQg
YXR0cmlidXRlCisgICAgU3RyaW5nIHZhbHVlKCk7CisKK307CisKK30KKyNlbmRpZgpJbmRleDog
d21sL1dNTFByZXZFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MUHJldkVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFByZXZFbGVtZW50LmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxQ
cmV2RWxlbWVudC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5o
IgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKyNp
bmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0
ZS5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUaW1lckVs
ZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxQcmV2RWxlbWVudDo6V01MUHJl
dkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAg
OiBXTUxUYXNrRWxlbWVudCh0YWdOYW1lLCBkb2MpCit7Cit9CisKK1dNTFByZXZFbGVtZW50OjpX
TUxQcmV2RWxlbWVudChEb2N1bWVudCogZG9jKQorICA6IFdNTFRhc2tFbGVtZW50KFdNTE5hbWVz
OjpwcmV2VGFnLCBkb2MpCit7Cit9CisKK1dNTFByZXZFbGVtZW50Ojp+V01MUHJldkVsZW1lbnQo
KQoreworfQorICAgICAgICAgICAgICAgICAgICAgICAKK3ZvaWQgV01MUHJldkVsZW1lbnQ6OmV4
ZWMoRXZlbnQqIGV2dCwgU3RyaW5nIHVyaSkKK3sKKyAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQo
KS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gY29u
dmVydCB2YXJpYWJsZSBuYW1lcyBhbmQgdmFsdWVzIG9mIHNldHZhciBlbGVtZW50IGlmIG5lY2Vz
c2FyeQorICAgIFZhcmlhYmxlTWFwIG1fdmFyczsKKyAgICBpZiAoaGFzU2V0dmFyKCkpIHsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtX3NldHZhcnMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgICAgIGlmICghbV9zZXR2YXJzW2ldLT5uYW1lKCkuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgIG1fdmFycy5zZXQobV9zZXR2YXJzW2ldLT5uYW1lKCksIG1fc2V0dmFyc1tp
XS0+dmFsdWUoKSk7CisgICAgICAgIH0KKyAgICB9CisgCisgICAgLy8gdXBkYXRlIGJyb3dzZXIg
Y29udGV4dCAKKyAgICBpZiAoIW1fdmFycy5pc0VtcHR5KCkpCisgICAgICAgIHBhZ2UtPndtbFBh
Z2VTdGF0ZSgpLT5zdG9yZVZhcmlhYmxlcyhtX3ZhcnMpOworCisgICAgLy8gc3RvcCB0aGUgdGlt
ZXIgb2YgdGhlIGN1cnJlbnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICBXTUxDYXJkRWxlbWVu
dCogY2FyZCA9IHBhZ2UtPndtbFBhZ2VTdGF0ZSgpLT5hY3RpdmVDYXJkKCk7CisgICAgaWYgKGNh
cmQgJiYgY2FyZC0+ZXZlbnRUaW1lcigpKQorICAgICAgICBjYXJkLT5ldmVudFRpbWVyKCktPnN0
b3AoKTsKKworICAgIC8vIHByZXBhcmUgZm9yIGRpc3BsYXlpbmcgdGhlIGRlc3QgY2FyZAorICAg
IHBhZ2UtPmdvQmFjaygpOworfQorCisKK30gLy9uYW1lc3BhY2UKKwpJbmRleDogd21sL1dNTFBy
ZXZFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFByZXZFbGVtZW50LmgJKHJldmlzaW9u
IDApCisrKyB3bWwvV01MUHJldkVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MSBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgV01MUHJldkVsZW1lbnRfaAorI2RlZmluZSBXTUxQcmV2RWxlbWVudF9o
CisKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7Cisg
ICAgCitjbGFzcyBXTUxQcmV2RWxlbWVudCA6IHB1YmxpYyBXTUxUYXNrRWxlbWVudCB7CitwdWJs
aWM6CisgICAgV01MUHJldkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9j
dW1lbnQqIGRvYyk7CisgICAgV01MUHJldkVsZW1lbnQoRG9jdW1lbnQqIGRvYyk7CisgICAgdmly
dHVhbCB+V01MUHJldkVsZW1lbnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZXhlYyhFdmVu
dCAqLCBTdHJpbmcpIDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwv
V01MUmVmcmVzaEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxSZWZyZXNoRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MUmVmcmVzaEVsZW1lbnQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldNTFJlZnJlc2hFbGVtZW50LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUg
IkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1l
cy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNs
dWRlICJQYWdlLmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MQ2Fy
ZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxTZXR2YXJF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworV01MUmVmcmVzaEVsZW1lbnQ6OldNTFJlZnJlc2hFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgICAgIDogV01MVGFza0VsZW1l
bnQoIHRhZ05hbWUsIGRvYykKK3sKK30KKworV01MUmVmcmVzaEVsZW1lbnQ6On5XTUxSZWZyZXNo
RWxlbWVudCgpCit7Cit9CisKK3ZvaWQgIFdNTFJlZnJlc2hFbGVtZW50OjpleGVjKEV2ZW50KiBl
dnQsIFN0cmluZyB1cmkpIAoreworICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAg
ICByZXR1cm47CisgICAgV01MUGFnZVN0YXRlKiBwYWdlU3RhdGUgPSBkb2N1bWVudCgpLT5wYWdl
KCktPndtbFBhZ2VTdGF0ZSgpOworICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gcGFnZVN0YXRl
LT5hY3RpdmVDYXJkKCk7CisgICAgV01MVGltZXJFbGVtZW50KiB0aW1lciA9IGNhcmQtPmV2ZW50
VGltZXIoKTsKKyAgICAvLyBCZWZvcmUgcGVyZm9ybSByZWZyZXNoIHRhc2ssIHdlIHN0b3JlIHRo
ZSBjdXJyZW50IHRpbWVvdXQgdmFsdWUgCisgICAgLy8gYW5kIHRoZW4gc3RvcCB0aGUgdGltZXIK
KyAgICBpZiAodGltZXIpIHsKKyAgICAgICAgdGltZXItPnN0b3JlSW50ZXJ2YWxUb1BhZ2VTdGF0
ZSgpOworICAgICAgICB0aW1lci0+c3RvcCgpOworICAgIH0KKworICAgIC8vIGNvbnZlcnQgdmFy
aWFibGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBzZXR2YXIgZWxlbWVudCBpZiBuZWNlc3NhcnkKKyAg
ICBWYXJpYWJsZU1hcCBtX3ZhcnM7CisgICAgaWYgKGhhc1NldHZhcigpKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9zZXR2YXJzLnNpemUoKTsgKytpKSB7CisgICAg
ICAgICAgICBpZiAoIW1fc2V0dmFyc1tpXS0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
ICAgICBtX3ZhcnMuc2V0KG1fc2V0dmFyc1tpXS0+bmFtZSgpLCBtX3NldHZhcnNbaV0tPnZhbHVl
KCkpOworICAgICAgICB9CisgICAgfSAgCisKKyAgICAvLyB1cGRhdGUgYnJvd3NlciBjb250ZXh0
IAorICAgIGlmICghbV92YXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcGFnZVN0YXRlLT5zdG9yZVZh
cmlhYmxlcyhtX3ZhcnMpOworCisgICAgLy9yZWRpc3BsYXkgY3VycmVtdCBjYXJkIHdpdGggY3Vy
cmVudCB2YXJpYWJsZSBzdGF0ZQorICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5y
ZWxvYWQoKTsKKworICAgIC8vQWZ0ZXIgcmVmcmVzaGluZyB0YXNrLCByZXN1bWUgdGhlIHRpbWVy
IGlmIGl0IGV4c2l0cyAKKyAgICBpZiAodGltZXIpCisgICAgICAgIHRpbWVyLT5zdGFydCgpOwor
fQorCit9IC8vbmFtZXNwYWNlCisKSW5kZXg6IHdtbC9XTUxSZWZyZXNoRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHdtbC9XTUxSZWZyZXNoRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dN
TFJlZnJlc2hFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFdNTFJlZnJlc2hFbGVtZW50X2gKKyNkZWZpbmUgV01MUmVmcmVzaEVsZW1lbnRfaAorCisj
aW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiV01MVGFza0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgV01MTmFtZXM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFzcyBXTUxSZWZy
ZXNoRWxlbWVudCA6IHB1YmxpYyBXTUxUYXNrRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MUmVm
cmVzaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYyk7
CisgICAgdmlydHVhbCB+V01MUmVmcmVzaEVsZW1lbnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlYyhFdmVudCAqLCBTdHJpbmcpIDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlm
CkluZGV4OiB3bWwvV01MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFNl
bGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFNlbGVjdEVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCisKKyNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZl
bnQuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAiTW91c2VFdmVudC5oIgorI2luY2x1
ZGUgIlJlbmRlckxpc3RCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJNZW51TGlzdC5oIgorI2luY2x1
ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAi
V01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25F
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MVG9rZW5p
emVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgUExBVEZPUk0oTUFDKQorI2Rl
ZmluZSBBUlJPV19LRVlTX1BPUF9NRU5VIDEKKyNlbHNlCisjZGVmaW5lIEFSUk9XX0tFWVNfUE9Q
X01FTlUgMAorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7Cit1c2luZyBuYW1lc3BhY2Ug
VW5pY29kZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgRXZlbnRO
YW1lczsKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MU2VsZWN0RWxlbWVudDo6V01M
U2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIERvY3VtZW50KiBkb2MpCisg
ICAgOiBIVE1MU2VsZWN0RWxlbWVudCh0YWcsIGRvYywgMCkKK3sKK30KKworV01MU2VsZWN0RWxl
bWVudDo6fldNTFNlbGVjdEVsZW1lbnQoKQoreworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAo
YXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1Zh
cmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6
ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAg
ICBlbHNlIAorICAgICAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKKworICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikKKyAgICAgICAgbV92YWx1ZSA9IGF0dHIt
PnZhbHVlKCk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGluYW1lQXR0cikgeworICAg
ICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkKKyAgICAg
ICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJs
ZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9pTmFtZSA9IGF0
dHItPnZhbHVlKCk7CisKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpdmFsdWVBdHRy
KQorICAgICAgICBtX2lWYWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG11bHRpcGxlQXR0cikgeworICAgICAgICBib29sIG9sZE11bHRpcGxlID0gbXVs
dGlwbGUoKTsKKyAgICAgICAgc2V0TXVsdGlwbGUoYXR0ci0+dmFsdWUoKSA9PSAidHJ1ZSIpOwor
ICAgICAgICBpZiAoKG9sZE11bHRpcGxlICE9IG11bHRpcGxlKCkpICYmIGF0dGFjaGVkKCkpIHsK
KyAgICAgICAgICAgIGRldGFjaCgpOworICAgICAgICAgICAgYXR0YWNoKCk7CisgICAgICAgIH0K
KyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6OnNpemVBdHRyKQorICAg
ICAgICA7Ly9EbyBub3RoaW5nCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IEhUTUxOYW1l
czo6ZGlzYWJsZWRBdHRyKQorICAgICAgICA7Ly9EbyBub3RoaW5nCisgICAgZWxzZQorICAgICAg
ICBIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK3Zv
aWQgV01MU2VsZWN0RWxlbWVudDo6dXBkYXRlQXR0cnNJZk5lZWRlZCgpIAoreworICAgIFN0cmlu
ZyBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYobV92YWx1ZSwgZG9jdW1lbnQoKSk7
CisgICAgaWYgKG1fdmFsdWUgIT0gc3ViKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0
dHIsIHN1Yik7CisgICAgICAgIG1fdmFsdWUgPSBzdWI7CisgICAgfQorCisgICAgc3ViID0gV01M
SGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKG1faVZhbHVlLCBkb2N1bWVudCgpKTsKKyAgICBpZiAo
bV9pVmFsdWUgIT0gc3ViKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZShpdmFsdWVBdHRyLCBzdWIp
OworICAgICAgICBtX2lWYWx1ZSA9IHN1YjsKKyAgICB9CisKKyAgICBTdHJpbmcgdGl0bGUgPSBn
ZXRBdHRyaWJ1dGUoInRpdGxlIik7CisgICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFy
UmVmKHRpdGxlLCBkb2N1bWVudCgpKTsKKyAgICBpZiAodGl0bGUgIT0gc3ViKQorICAgICAgICBz
ZXRBdHRyaWJ1dGUodGl0bGVBdHRyLCB0aXRsZSk7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVu
dDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5kZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wg
ZmlyZU9uQ2hhbmdlKQoreworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9
IGxpc3RJdGVtcygpOworICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRp
b25JbmRleCk7CisgICAgV01MT3B0aW9uRWxlbWVudCogZWxlbWVudCA9IDA7CisKKyAgICBpZiAo
IW11bHRpcGxlKCkpCisgICAgICAgIGRlc2VsZWN0ID0gdHJ1ZTsKKworICAgIGlmIChsaXN0SW5k
ZXggPj0gMCkgeworICAgICAgICBpZiAoYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoKSA8IDAg
fHwgZGVzZWxlY3QpCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChs
aXN0SW5kZXgpOworICAgICAgICBpZiAoYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoKSA8IDAgfHwg
ZGVzZWxlY3QpCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChsaXN0SW5k
ZXgpOworICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+KGl0
ZW1zW2xpc3RJbmRleF0pOworICAgICAgICBlbGVtZW50LT5zZXRTZWxlY3RlZFN0YXRlKHRydWUp
OworICAgIH0KKworICAgIGlmIChkZXNlbGVjdCkKKyAgICAgICAgZGVzZWxlY3RJdGVtcyhlbGVt
ZW50KTsKKworICAgIHNjcm9sbFRvU2VsZWN0aW9uKCk7CisKKyAgICAvLyBUaGlzIG9ubHkgZ2V0
cyBjYWxsZWQgd2l0aCBmaXJlT25DaGFuZ2UgZm9yIG1lbnUgbGlzdHMuIAorICAgIGlmIChmaXJl
T25DaGFuZ2UgJiYgdXNlc01lbnVMaXN0KCkpCisgICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsK
K30KKworU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlVG9JVmFsdWUoU3RyaW5nJiB2YWx1
ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSAKKyAgICAgICAgcmV0dXJuIHZhbHVlOwor
CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7Cisg
ICAgVmVjdG9yPFN0cmluZz4gdmFsVmVjdHM7CisgICAgdmFsdWUuc3BsaXQoJzsnLCB2YWxWZWN0
cyk7CisgICAgVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gdmFsVmVjdHMuYmVnaW4oKTsK
KyAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAwOyAKKyAgICBTdHJpbmcgaVZhbDsKKyAg
ICBTdHJpbmcgdmFsOworICAgIHdoaWxlIChpdCAhPSB2YWxWZWN0cy5lbmQoKSkgeworICAgICAg
ICB2YWwgPSAqaXQ7CisgICAgICAgIGludCBvcHRJZHggPSAwOworICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKKyAgICAgICAgICAgICAgICBvcHRJZHgr
KzsKKyAgICAgICAgICAgICAgICBvcHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50
Kj4oaXRlbXNbaV0pOworICAgICAgICAgICAgICAgIGlmIChvcHRpb24tPnZhbHVlKCkgPT0gdmFs
KSB7CisgICAgICAgICAgICAgICAgICAgIGlWYWwgKz0gU3RyaW5nOjpudW1iZXIob3B0SWR4KTsK
KyAgICAgICAgICAgICAgICAgICAgaVZhbCArPSAiOyI7CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICArK2l0OworICAgIH0KKworICAgIGlmIChpVmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICBp
VmFsID0gaVZhbC5sZWZ0KGlWYWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsaWRhdGVJ
bmRleFZhbHVlKGlWYWwpOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6aXZhbHVlVG9W
YWx1ZShTdHJpbmcmIGl2YWx1ZSkKK3sKKyAgICBpZiAoaXZhbHVlLmlzRW1wdHkoKSkgCisgICAg
ICAgIHJldHVybiBpdmFsdWU7CisKKyAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAwOyAK
KyAgICBTdHJpbmcgaXZhbDsKKyAgICBTdHJpbmcgdmFsOworICAgIGludCBvcHRJZHggPSAtMTsK
KyAgICBpbnQgbGlzdElkeCA9IC0xOworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBp
dGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxTdHJpbmc+IHZhbFZlY3RzOworICAgIGl2
YWx1ZS5zcGxpdCgnOycsIHZhbFZlY3RzKTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3Ig
aXQgPSB2YWxWZWN0cy5iZWdpbigpOworICAgIHdoaWxlIChpdCAhPSB2YWxWZWN0cy5lbmQoKSkg
eworICAgICAgICBpdmFsID0gKml0Kys7CisKKyAgICAgICAgb3B0SWR4ID0gaXZhbC50b0ludCgp
OworICAgICAgICBpZiAoKG9wdElkeCA8IDEpIHx8IChvcHRJZHggPiBzdGF0aWNfY2FzdDxpbnQ+
KGl0ZW1zLnNpemUoKSkpKQorICAgICAgICAgICAgICAgY29udGludWU7IAorCisgICAgICAgIGxp
c3RJZHggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRJZHgtMSk7CisgICAgICAgIG9wdGlvbiA9IHN0
YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tsaXN0SWR4XSk7CisKKyAgICAgICAg
dmFsICs9IG9wdGlvbi0+dmFsdWUoKTsKKyAgICAgICAgdmFsICs9ICI7IjsKKyAgICB9CisKKyAg
ICBpZiAodmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICB2YWwgPSB2YWwubGVmdCh2YWwubGVu
Z3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVu
dDo6dmFsaWRhdGVJbmRleFZhbHVlKFN0cmluZyYgaXZhbCkKK3sKKyAgICBpZiAoaXZhbC5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBpdmFsOworCisgICAgYm9vbCBvayA9IHRydWU7CisgICAg
U3RyaW5nIHZhbCgiIik7CisgICAgU3RyaW5nIG5ld1ZhbDsKKyAgICBWZWN0b3I8U3RyaW5nPiB2
YWxWZWN0czsKKyAgICBpdmFsLnNwbGl0KCc7JywgdmFsVmVjdHMpOworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgdmFsVmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgdW5zaWduZWQgblZh
bCA9IHZhbFZlY3RzW2ldLnRvSW50KCZvayk7CisgICAgICAgIGlmICghb2sgfHwgKG5WYWwgPCAx
KSB8fCAoblZhbCA+IGxlbmd0aCgpKSkgeworICAgICAgICAgICAgdmFsVmVjdHMucmVtb3ZlKGkp
OworICAgICAgICAgICAgaS0tOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV3VmFs
ID0gU3RyaW5nOjpudW1iZXIoblZhbCk7CisgICAgICAgICAgICBpZiAoLTEgPT0gdmFsLmZpbmQo
bmV3VmFsKSkgeworICAgICAgICAgICAgICAgIHZhbCArPSBuZXdWYWw7IAorICAgICAgICAgICAg
ICAgIHZhbCArPSAiOyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
ZiAodmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICB2YWwgPSB2YWwubGVmdCh2YWwubGVuZ3Ro
KCktMSk7CisKKyAgICByZXR1cm4gdmFsOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmNh
bGNEZWZhdWx0T3B0aW9uSW5kZXgoKQoreworICAgIGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQor
ICAgICAgICByZXR1cm47CisgICAgV01MUGFnZVN0YXRlICpwYWdlU3RhdGUgPSBkb2N1bWVudCgp
LT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIFN0cmluZyB2YXI7CisgICAgaWYgKCFtX2lO
YW1lLmlzRW1wdHkoKSkgeworICAgICAgICB2YXIgPSBwYWdlU3RhdGUtPmdldFZhcmliYWxlKG1f
aU5hbWUpOworICAgICAgICBpZiAoIXZhci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2RlZmF1
bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFsdWUodmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9k
ZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSAmJiAhbV9pVmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBt
X2RlZmF1bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFsdWUobV9pVmFsdWUpOworCisgICAgaWYg
KG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYgIW1fbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgdmFyID0gcGFnZVN0YXRlLT5nZXRWYXJpYmFsZShtX25hbWUpOworICAgICAgICBpZiAoIXZh
ci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWx1ZVRvSVZhbHVl
KHZhcik7CisgICAgfQorCisgICAgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYgIW1f
dmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWx1ZVRvSVZhbHVl
KG1fdmFsdWUpOworCisgICAgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYgbXVsdGlw
bGUoKSkKKyAgICAgICAgbV9kZWZhdWx0T3B0SWR4ID0gIjAiOworICAgIGVsc2UgaWYgKG1fZGVm
YXVsdE9wdElkeC5pc0VtcHR5KCkpCisgICAgICAgIG1fZGVmYXVsdE9wdElkeCA9ICIxIjsKKwor
fQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmluaXRpYWxpc2VWYXJpYWJsZXMoKQoreworICAg
IGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGlm
IChpdGVtcy5zaXplKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNTRVJUKGRvY3Vt
ZW50KCktPnBhZ2UoKSk7CisgICAgV01MUGFnZVN0YXRlKiBwYWdlU3RhdGUgPSBkb2N1bWVudCgp
LT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIEFTU0VSVChwYWdlU3RhdGUpOworICAgIGlm
ICghbV9uYW1lLmlzRW1wdHkoKSAmJiAhbXVsdGlwbGUoKSkgeworCisgICAgICAgIHVuc2lnbmVk
IGludCBpZHggPSBtX2RlZmF1bHRPcHRJZHgudG9JbnQoKTsgCisgICAgICAgIGlmIChpZHggPCAx
IHx8IGlkeCA+IGl0ZW1zLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICBpbnQgbGlzdElkeCA9IG9wdGlvblRvTGlzdEluZGV4KGlkeC0xKTsK
KyAgICAgICAgICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9w
dGlvbkVsZW1lbnQqPihpdGVtc1tsaXN0SWR4XSk7CisgICAgICAgICAgICBwYWdlU3RhdGUtPnN0
b3JlVmFyaWFibGUobV9uYW1lLCBvcHRpb24tPnZhbHVlKCkpOworICAgICAgICB9CisKKyAgICB9
IGVsc2UgaWYgKCFtX25hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFN0cmluZyBuYW1lVmFsID0g
aXZhbHVlVG9WYWx1ZShtX2RlZmF1bHRPcHRJZHgpOworICAgICAgICBwYWdlU3RhdGUtPnN0b3Jl
VmFyaWFibGUobV9uYW1lLCBuYW1lVmFsKTsKKyAgICB9CisKKyAgICBpZiAoIW1faU5hbWUuaXNF
bXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobV9pTmFtZSwgbV9kZWZh
dWx0T3B0SWR4KTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50OjpwcmVTZWxlY3RPcHRpb25z
QnlEZWZhdWx0KCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBpZHhWZWN0czsKKyAgICBtX2RlZmF1
bHRPcHRJZHguc3BsaXQoJzsnLCBpZHhWZWN0cyk7CisgICAgVmVjdG9yPFN0cmluZz46Oml0ZXJh
dG9yIGl0ID0gaWR4VmVjdHMuYmVnaW4oKTsKKyAgICBpbnQgaWR4ID0gLTE7CisgICAgaWYgKG11
bHRpcGxlKCkpIHsKKyAgICAgICAgd2hpbGUgKGl0ICE9IGlkeFZlY3RzLmVuZCgpKSB7CisgICAg
ICAgICAgICBpZHggPSAoKml0KS50b0ludCgpOyAKKyAgICAgICAgICAgIHNldFNlbGVjdGVkSW5k
ZXgoaWR4LTEsIGZhbHNlKTsKKyAgICAgICAgICAgICsraXQ7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBpZHggPSAoKml0KS50b0ludCgpOyAKKyAgICAgICAgc2V0U2VsZWN0ZWRJ
bmRleChpZHgtMSwgZmFsc2UpOworICAgIH0KK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50Ojpz
ZWxlY3RJbml0aWFsT3B0aW9ucygpCit7CisgICAgY2FsY0RlZmF1bHRPcHRpb25JbmRleCgpOwor
CisgICAgaWYgKCFtX2RlZmF1bHRPcHRJZHguaXNFbXB0eSgpKSB7CisgICAgICAgIGluaXRpYWxp
c2VWYXJpYWJsZXMoKTsKKyAgICAgICAgcHJlU2VsZWN0T3B0aW9uc0J5RGVmYXVsdCgpOworICAg
IH0KK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50
KiBldnQpCit7CisgICAgaWYgKCFtdWx0aXBsZSgpKQorICAgICAgICBtZW51TGlzdERlZmF1bHRF
dmVudEhhbmRsZXIoZXZ0KTsKKyAgICBlbHNlIAorICAgICAgICBsaXN0Qm94RGVmYXVsdEV2ZW50
SGFuZGxlcihldnQpOworICAgIAorICAgIGlmIChldnQtPmRlZmF1bHRIYW5kbGVkKCkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGlmIChldnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50ICYmIGV2
dC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKKyAgICAgICAgS2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRF
dmVudCA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpOworICAgIAorICAgICAgICBp
ZiAoIWtleWJvYXJkRXZlbnQtPmN0cmxLZXkoKSAmJiAha2V5Ym9hcmRFdmVudC0+YWx0S2V5KCkg
JiYgIWtleWJvYXJkRXZlbnQtPm1ldGFLZXkoKSAmJgorICAgICAgICAgICAgaXNQcmludGFibGVD
aGFyKGtleWJvYXJkRXZlbnQtPmNoYXJDb2RlKCkpKSB7CisgICAgICAgICAgICB0eXBlQWhlYWRG
aW5kKGtleWJvYXJkRXZlbnQpOworICAgICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgp
OworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSFRNTEZvcm1D
b250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworfQorCit2
b2lkIFdNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZ0KQoreworICAgIFJlbmRlck1lbnVMaXN0KiBtZW51TGlzdCA9IHN0YXRpY19jYXN0PFJlbmRl
ck1lbnVMaXN0Kj4ocmVuZGVyZXIoKSk7CisKKyAgICAvLyBVc2Uga2V5IHByZXNzIGV2ZW50IGhl
cmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2UgZXZlbnRzCisgICAgLy8gb24ga2V5IGRv
d24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0aGUga2V5IHByZXNzIGV2ZW50LgorICAg
IGlmIChldnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50KSB7CisgICAgICAgIGlmICghcmVuZGVy
ZXIoKSB8fCAhZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgU3RyaW5nIGtleUlkZW50aWZpZXIgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4o
ZXZ0KS0+a2V5SWRlbnRpZmllcigpOworICAgICAgICBib29sIGhhbmRsZWQgPSBmYWxzZTsKKyNp
ZiBBUlJPV19LRVlTX1BPUF9NRU5VCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJFbnRl
ciIpIHsKKyAgICAgICAgICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsKKyAgICAgICAgICAgIGlmIChm
b3JtKCkpCisgICAgICAgICAgICAgICAgZm9ybSgpLT5zdWJtaXRDbGljayhldnQpOworICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGtleUlkZW50aWZp
ZXIgPT0gIkRvd24iIHx8IGtleUlkZW50aWZpZXIgPT0gIlVwIiB8fCBrZXlJZGVudGlmaWVyID09
ICJVKzAwMjAiKSB7CisgICAgICAgICAgICBmb2N1cygpOworICAgICAgICAgICAgLy8gU2F2ZSB0
aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3
aGVuIHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5nIHNldFNlbGVjdGVkSW5kZXgsCisgICAgICAgICAg
ICAvLyB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIFJlbmRlck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQs
IHdoaWNoIGdldHMgY2FsbGVkIGFmdGVyIHRoZSB1c2VyIG1ha2VzIGEgc2VsZWN0aW9uIGZyb20g
dGhlIG1lbnUuCisgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOworICAgICAgICAgICAg
bWVudUxpc3QtPnNob3dQb3B1cCgpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAg
ICAgIH0KKyNlbHNlCisgICAgICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25Ub0xpc3RJbmRleChz
ZWxlY3RlZEluZGV4KCkpOworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwg
a2V5SWRlbnRpZmllciA9PSAiUmlnaHQiKSB7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IGxpc3RJ
dGVtcygpLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAobGlzdEluZGV4ICs9IDE7CisgICAgICAg
ICAgICAgICAgIGxpc3RJbmRleCA+PSAwICYmIGxpc3RJbmRleCA8IHNpemUgJiYgKGxpc3RJdGVt
cygpW2xpc3RJbmRleF0tPmRpc2FibGVkKCkgfHwgIWxpc3RJdGVtcygpW2xpc3RJbmRleF0tPmhh
c0xvY2FsTmFtZShvcHRpb25UYWcpKTsKKyAgICAgICAgICAgICAgICAgKytsaXN0SW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobGlzdEluZGV4ID49IDAgJiYgbGlzdEluZGV4
IDwgc2l6ZSkKKyAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGxpc3RUb09wdGlvbklu
ZGV4KGxpc3RJbmRleCkpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0g
ZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiIHx8IGtleUlkZW50aWZpZXIgPT0gIkxlZnQi
KSB7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IGxpc3RJdGVtcygpLnNpemUoKTsKKyAgICAgICAg
ICAgIGZvciAobGlzdEluZGV4IC09IDE7CisgICAgICAgICAgICAgICAgIGxpc3RJbmRleCA+PSAw
ICYmIGxpc3RJbmRleCA8IHNpemUgJiYgKGxpc3RJdGVtcygpW2xpc3RJbmRleF0tPmRpc2FibGVk
KCkgfHwgIWxpc3RJdGVtcygpW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKTsK
KyAgICAgICAgICAgICAgICAgLS1saXN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAg
ICBpZiAobGlzdEluZGV4ID49IDAgJiYgbGlzdEluZGV4IDwgc2l6ZSkKKyAgICAgICAgICAgICAg
ICBzZXRTZWxlY3RlZEluZGV4KGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCkpOworICAgICAg
ICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9
PSAiRW50ZXIiKSB7CisgICAgICAgICAgICAvLyBsaXN0SW5kZXggc2hvdWxkIGFscmVhZHkgYmUg
c2VsZWN0ZWQsIGJ1dCB0aGlzIHdpbGwgZmlyZSB0aGUgb25jaGFuZ2UgaGFuZGxlci4KKyAgICAg
ICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSwgdHJ1
ZSwgdHJ1ZSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorI2VuZGlm
CisgICAgICAgIGlmIChoYW5kbGVkKQorICAgICAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxl
ZCgpOworCisgICAgfQorICAgIGlmIChldnQtPnR5cGUoKSA9PSBtb3VzZWRvd25FdmVudCAmJiBl
dnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0
b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIGZvY3VzKCk7CisgICAgICAgIGlmIChtZW51
TGlzdC0+cG9wdXBJc1Zpc2libGUoKSkKKyAgICAgICAgICAgIG1lbnVMaXN0LT5oaWRlUG9wdXAo
KTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28g
aXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNo
YW5nZSBkdXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgIC8vIHdoaWNoIGdldHMg
Y2FsbGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxs
ZWQgYWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KKyAgICAg
ICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1Bv
cHVwKCk7CisgICAgICAgIH0KKyAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAg
IH0KKworICAgIC8vIHVwZGF0ZSBuYW1lIGFuZCBpbmFtZSB2YXJpYWJsZXMgd2l0aCBvcHRpb24n
cyB2YWx1ZSBhbmQgaW5kZXgKKyAgICB1cGRhdGVWYXJpYWJsZXMoKTsKK30KKwordm9pZCBXTUxT
ZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQorewor
ICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2dC0+dHlw
ZSgpID09IG1vdXNlZG93bkV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nh
c3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAgICAg
Zm9jdXMoKTsKKyAgICAgICAgCisgICAgICAgIE1vdXNlRXZlbnQqIG1FdnQgPSBzdGF0aWNfY2Fz
dDxNb3VzZUV2ZW50Kj4oZXZ0KTsKKyAgICAgICAgaW50IGxpc3RJbmRleCA9IHN0YXRpY19jYXN0
PFJlbmRlckxpc3RCb3gqPihyZW5kZXJlcigpKS0+bGlzdEluZGV4QXRPZmZzZXQobUV2dC0+b2Zm
c2V0WCgpLCBtRXZ0LT5vZmZzZXRZKCkpOworICAgICAgICBpZiAobGlzdEluZGV4ID49IDApIHsK
KyAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQg
dG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBtb3VzZXVw
LCBvciBhZnRlciBhdXRvc2Nyb2xsIGZpbmlzaGVzLgorICAgICAgICAgICAgc2F2ZUxhc3RTZWxl
Y3Rpb24oKTsKKworICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUodHJ1ZSk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgbXVsdGlTZWxlY3RLZXlQcmVzc2VkID0gZmFs
c2U7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAgICAgbXVsdGlTZWxlY3RLZXlQcmVzc2Vk
ID0gbUV2dC0+bWV0YUtleSgpOworI2Vsc2UKKyAgICAgICAgICAgIG11bHRpU2VsZWN0S2V5UHJl
c3NlZCA9IG1FdnQtPmN0cmxLZXkoKTsKKyNlbmRpZgorCisgICAgICAgICAgICBib29sIHNoaWZ0
U2VsZWN0ID0gbXVsdGlwbGUoKSAmJiBtRXZ0LT5zaGlmdEtleSgpOworICAgICAgICAgICAgYm9v
bCBtdWx0aVNlbGVjdCA9IG11bHRpcGxlKCkgJiYgbXVsdGlTZWxlY3RLZXlQcmVzc2VkICYmICFt
RXZ0LT5zaGlmdEtleSgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBIVE1MRWxlbWVudCog
Y2xpY2tlZEVsZW1lbnQgPSBsaXN0SXRlbXMoKVtsaXN0SW5kZXhdOyAgICAgICAgICAgIAorICAg
ICAgICAgICAgV01MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gMDsKKyAgICAgICAgICAgIGlmIChj
bGlja2VkRWxlbWVudC0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKKyAgICAgICAgICAgICAg
ICBvcHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oY2xpY2tlZEVsZW1lbnQp
OworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hl
dGhlciBhbiBhY3RpdmUgc2VsZWN0aW9uIChsaWtlIGR1cmluZyBkcmFnIHNlbGVjdGlvbiksIHNo
b3VsZCBzZWxlY3Qgb3IgZGVzZWxlY3QKKyAgICAgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rp
b25TdGF0ZSghb3B0aW9uLT5zZWxlY3RlZCgpKTsKKyAgICAgICAgICAgICAgICBvcHRpb24tPnNl
dFNlbGVjdGVkU3RhdGUoYWN0aXZlU2VsZWN0aW9uU3RhdGUoKSk7CisKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYgd2UncmUgbm90IGluIGFueSBzcGVjaWFs
IG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlLCB0aGVuIGRlc2VsZWN0IGFsbCBvdGhlciBpdGVtcywg
ZXhjbHVkaW5nIHRoZSBjbGlja2VkIG9wdGlvbi4KKyAgICAgICAgICAgIC8vIElmIG5vIG9wdGlv
biB3YXMgY2xpY2tlZCwgdGhlbiB0aGlzIHdpbGwgZGVzZWxlY3QgYWxsIGl0ZW1zIGluIHRoZSBs
aXN0LgorICAgICAgICAgICAgaWYgKCFzaGlmdFNlbGVjdCAmJiAhbXVsdGlTZWxlY3QpCisgICAg
ICAgICAgICAgICAgZGVzZWxlY3RJdGVtcyhvcHRpb24pOworCisgICAgICAgICAgICAvLyBJZiB0
aGUgYW5jaG9yIGhhc24ndCBiZWVuIHNldCwgYW5kIHdlJ3JlIGRvaW5nIGEgc2luZ2xlIHNlbGVj
dGlvbiBvciBhIHNoaWZ0IHNlbGVjdGlvbiwgdGhlbiBpbml0aWFsaXplIHRoZSBhbmNob3IgdG8g
dGhlIGZpcnN0IHNlbGVjdGVkIGluZGV4LgorICAgICAgICAgICAgaWYgKGFjdGl2ZVNlbGVjdGlv
bkFuY2hvckluZGV4KCkgPCAwICYmICFtdWx0aVNlbGVjdCkKKyAgICAgICAgICAgICAgICBzZXRB
Y3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChzZWxlY3RlZEluZGV4KCkpOworCisgICAgICAgICAg
ICAvLyBJZiB0aGVyZSB3YXMgbm8gc2VsZWN0ZWRJbmRleCgpIGZvciB0aGUgcHJldmlvdXMgaW5p
dGlhbGl6YXRpb24sIG9yCisgICAgICAgICAgICAvLyBJZiB3ZSdyZSBkb2luZyBhIHNpbmdsZSBz
ZWxlY3Rpb24sIG9yIGEgbXVsdGlwbGUgc2VsZWN0aW9uICh1c2luZyBjbWQgb3IgY3RybCksIHRo
ZW4gaW5pdGlhbGl6ZSB0aGUgYW5jaG9yIGluZGV4IHRvIHRoZSBsaXN0SW5kZXggdGhhdCBqdXN0
IGdvdCBjbGlja2VkLgorICAgICAgICAgICAgaWYgKGxpc3RJbmRleCA+PSAwICYmIChhY3RpdmVT
ZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCB8fCAhc2hpZnRTZWxlY3QpKQorICAgICAgICAgICAg
ICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KGxpc3RJbmRleCk7Cisg
ICAgICAgICAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKCFtdWx0aVNlbGVjdCk7CisKKyAgICAg
ICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudCgpLT5mcmFtZSgpKQorICAgICAgICAg
ICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0TW91c2VEb3duTWF5U3RhcnRBdXRvc2Ny
b2xsKCk7CisKKyAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2V1cEV2ZW50ICYmIGV2dC0+aXNN
b3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09
IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPmF1dG9z
Y3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkpCisgICAgICAgIC8vIFRoaXMgbWFrZXMgc3Vy
ZSB3ZSBmaXJlIG9uQ2hhbmdlIGZvciBhIHNpbmdsZSBjbGljay4gIEZvciBkcmFnIHNlbGVjdGlv
biwgb25DaGFuZ2Ugd2lsbCBmaXJlIHdoZW4gdGhlIGF1dG9zY3JvbGwgdGltZXIgc3RvcHMuCisg
ICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOworICAgIGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGtl
eXByZXNzRXZlbnQpIHsKKyAgICAgICAgaWYgKCFldnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IHN0YXRpY19j
YXN0PEtleWJvYXJkRXZlbnQqPihldnQpLT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICAgICAgaWYg
KGtleUlkZW50aWZpZXIgPT0gIkVudGVyIikgeworICAgICAgICAgICAgaWYgKGZvcm0oKSkKKyAg
ICAgICAgICAgICAgICBmb3JtKCktPnN1Ym1pdENsaWNrKGV2dCk7CisgICAgICAgICAgICBldnQt
PnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor
ICAgICAgICBpbnQgZW5kSW5kZXggPSAwOyAgICAgICAgCisgICAgICAgIGludCBhY3RpdmVTZWxl
Y3Rpb25FbmRJZHggPSBhY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpOworICAgICAgICBpZiAoYWN0
aXZlU2VsZWN0aW9uRW5kSWR4IDwgMCkgeworICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUg
ZW5kIGluZGV4CisgICAgICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIpCisgICAg
ICAgICAgICAgICAgZW5kSW5kZXggPSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleChsYXN0U2VsZWN0
ZWRMaXN0SW5kZXgoKSk7CisgICAgICAgICAgICBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJV
cCIpCisgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5k
ZXgob3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0ZWRJbmRleCgpKSk7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAvLyBTZXQgdGhlIGVuZCBpbmRleCBiYXNlZCBvbiB0aGUgY3VycmVudCBl
bmQgaW5kZXgKKyAgICAgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikKKyAgICAg
ICAgICAgICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KGFjdGl2ZVNlbGVj
dGlvbkVuZElkeCk7CisgICAgICAgICAgICBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIp
CisgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgo
YWN0aXZlU2VsZWN0aW9uRW5kSWR4KTsgICAgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09ICJVcCIpIHsK
KyAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQg
dG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGltbWVkaWF0ZWx5IGFm
dGVyIG1ha2luZyB0aGUgbmV3IHNlbGVjdGlvbi4KKyAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0
aW9uKCk7CisKKyAgICAgICAgICAgIEFTU0VSVChlbmRJbmRleCA+PSAwICYmICh1bnNpZ25lZCll
bmRJbmRleCA8IGxpc3RJdGVtcygpLnNpemUoKSk7IAorICAgICAgICAgICAgc2V0QWN0aXZlU2Vs
ZWN0aW9uRW5kSW5kZXgoZW5kSW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJ
ZiB0aGUgYW5jaG9yIGlzIHVuaXRpYWxpemVkLCBvciBpZiB3ZSdyZSBnb2luZyB0byBkZXNlbGVj
dCBhbGwgb3RoZXIgb3B0aW9ucywgdGhlbiBzZXQgdGhlIGFuY2hvciBpbmRleCBlcXVhbCB0byB0
aGUgZW5kIGluZGV4LgorICAgICAgICAgICAgYm9vbCBkZXNlbGVjdE90aGVycyA9ICFtdWx0aXBs
ZSgpIHx8ICFzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+c2hpZnRLZXkoKTsKKyAg
ICAgICAgICAgIGlmIChhY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCB8fCBkZXNlbGVj
dE90aGVycykgeworICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKHRydWUp
OworICAgICAgICAgICAgICAgIGlmIChkZXNlbGVjdE90aGVycykKKyAgICAgICAgICAgICAgICAg
ICAgZGVzZWxlY3RJdGVtcygpOworICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFu
Y2hvckluZGV4KGFjdGl2ZVNlbGVjdGlvbkVuZElkeCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckxpc3RCb3gqPihyZW5kZXJlcigpKS0+c2Nyb2xsVG9S
ZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgoZW5kSW5kZXgpOworICAgICAgICAgICAgdXBkYXRlTGlz
dEJveFNlbGVjdGlvbihkZXNlbGVjdE90aGVycyk7CisgICAgICAgICAgICBsaXN0Qm94T25DaGFu
Z2UoKTsKKyAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgfQor
ICAgIH0KKworICAgIC8vIHVwZGF0ZSBuYW1lIGFuZCBpbmFtZSB2YXJpYWJsZXMgd2l0aCBvcHRp
b24ncyB2YWx1ZSBhbmQgaW5kZXgKKyAgICB1cGRhdGVWYXJpYWJsZXMoKTsKK30KKwordm9pZCBX
TUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVWYXJpYWJsZXMoKQoreworICAgIGlmIChtX2lOYW1lLmlz
RW1wdHkoKSAmJiBtX25hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJp
bmcgbmFtZTsKKyAgICBTdHJpbmcgaW5hbWU7CisgICAgaW50IG9wdElkeCA9IDA7CisgICAgY29u
c3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpdGVt
c1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKKyAgICAgICAgICAgIG9wdElkeCsrOwor
ICAgICAgICAgICAgV01MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8V01MT3B0
aW9uRWxlbWVudCo+KGl0ZW1zW2ldKTsKKyAgICAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVk
KCkpIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9IG9wdGlvbi0+Z2V0QXR0cmlidXRlKCJ2YWx1
ZSIpOworICAgICAgICAgICAgICAgIG5hbWUgKz0gIjsiOworICAgICAgICAgICAgICAgIGluYW1l
ICs9IFN0cmluZzo6bnVtYmVyKG9wdElkeCk7CisgICAgICAgICAgICAgICAgaW5hbWUgKz0gIjsi
OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKGRvY3VtZW50
KCktPnBhZ2UoKSk7CisgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRl
KCkpOworICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSkgeworICAgICAgICB3aGlsZSAobmFtZS5l
bmRzV2l0aCgiOyIpKQorICAgICAgICAgICAgbmFtZSA9IG5hbWUubGVmdChuYW1lLmxlbmd0aCgp
LTEpOworICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zdG9yZVZh
cmlhYmxlKG1fbmFtZSwgbmFtZSk7CisgICAgfQorCisgICAgaWYgKCFtX2lOYW1lLmlzRW1wdHko
KSkgeworICAgICAgICBpZiAoaW5hbWUuZW5kc1dpdGgoIjsiKSkKKyAgICAgICAgICAgIGluYW1l
ID0gaW5hbWUubGVmdChpbmFtZS5sZW5ndGgoKS0xKTsKKyAgICAgICAKKyAgICAgICAgZG9jdW1l
bnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKS0+c3RvcmVWYXJpYWJsZShtX2lOYW1lLCBpbmFt
ZSk7CisgICAgfQorfQorCit9IC8vbmFtZXNwYWNlCkluZGV4OiB3bWwvV01MU2VsZWN0RWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDApCisr
KyB3bWwvV01MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2lmbmRlZiBXTUxTZWxlY3RFbGVtZW50X2gKKyNkZWZpbmUgV01MU2VsZWN0RWxlbWVudF9o
CisKKyNpbmNsdWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBXTUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhU
TUxTZWxlY3RFbGVtZW50eworcHVibGljOgorICAgIFdNTFNlbGVjdEVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MU2VsZWN0RWxlbWVudCgp
OworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAg
ICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwg
Ym9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZSk7CisgICAgdm9pZCB1cGRhdGVBdHRyc0lmTmVlZGVk
KCk7CisgICAgdm9pZCBzZWxlY3RJbml0aWFsT3B0aW9ucygpOworCitwcml2YXRlOgorICAgIFN0
cmluZyB2YWx1ZVRvSVZhbHVlKFN0cmluZyYpOworICAgIFN0cmluZyBpdmFsdWVUb1ZhbHVlKFN0
cmluZyYpOworICAgIFN0cmluZyB2YWxpZGF0ZUluZGV4VmFsdWUoU3RyaW5nJik7CisgICAgdm9p
ZCBjYWxjRGVmYXVsdE9wdGlvbkluZGV4KCk7CisgICAgdm9pZCBpbml0aWFsaXNlVmFyaWFibGVz
KCk7CisgICAgdm9pZCBwcmVTZWxlY3RPcHRpb25zQnlEZWZhdWx0KCk7CisgICAgdm9pZCBtZW51
TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIGxpc3RCb3hEZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdm9pZCB1cGRhdGVWYXJpYWJsZXMoKTsKKworICAg
IFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAgU3RyaW5nIG1faU5hbWU7
CisgICAgU3RyaW5nIG1faVZhbHVlOworICAgIFN0cmluZyBtX2RlZmF1bHRPcHRJZHg7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxTZXR2YXJFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSB3bWwvV01MU2V0dmFyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisr
KyB3bWwvV01MU2V0dmFyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgor
CisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIu
aCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRl
ICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUHJldkVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxSZWZyZXNoRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRhc2tF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFt
ZXM7CisKK1dNTFNldHZhckVsZW1lbnQ6OldNTFNldHZhckVsZW1lbnQoY29uc3QgUXVhbGlmaWVk
TmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvYykgCisgICAgOiBXTUxFbGVtZW50KG5hbWUsIGRvYykK
K3sKK30KKworV01MU2V0dmFyRWxlbWVudDo6fldNTFNldHZhckVsZW1lbnQoKQoreworfQorCit2
b2lkIFdNTFNldHZhckVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAg
IFdNTFRhc2tFbGVtZW50KiBnbyA9IDA7CisgICAgTm9kZSogYW5jZXN0b3IgPSBwYXJlbnROb2Rl
KCkgOworICAgIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShXTUxOYW1lczo6Z29UYWcpKQorICAg
ICAgICBnbyA9IHN0YXRpY19jYXN0PFdNTEdvRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICBlbHNl
IGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShXTUxOYW1lczo6cHJldlRhZykpCisgICAgICAgIGdv
ID0gc3RhdGljX2Nhc3Q8V01MUHJldkVsZW1lbnQqPihhbmNlc3Rvcik7CisgICAgZWxzZSBpZiAo
YW5jZXN0b3ItPmhhc1RhZ05hbWUoV01MTmFtZXM6OnJlZnJlc2hUYWcpKQorICAgICAgICBnbyA9
IHN0YXRpY19jYXN0PFdNTFJlZnJlc2hFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIGVsc2UKKyAg
ICAgICAgcmV0dXJuOyAKKworICAgIGlmIChnbykKKyAgICAgICAgZ28tPnJlZ2lzdGVyU2V0dmFy
RWxlbWVudCh0aGlzKTsKK30KKworCit2b2lkIFdNTFNldHZhckVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBTdHJpbmcgYXR0ck5hbWUg
PSBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gbmFtZUF0dHIp
IHsKKyAgICAgICAgaWYgKCFXTUxIZWxwZXI6OmlzVmFsaWRWYXJpYWJsZU5hbWUoYXR0ci0+dmFs
dWUoKSwgdHJ1ZSkpCisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRF
cnJvcihJbnZhbGlkVmFyaWFibGVOYW1lRXJyb3IpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIG1fbmFtZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBk
b2N1bWVudCgpKTsKKyAgICAgICAgICAgIGlmICghV01MSGVscGVyOjppc1ZhbGlkVmFyaWFibGVO
YW1lKG1fbmFtZSwgdHJ1ZSkpCisgICAgICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIo
KS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlTmFtZUVycm9yKTsKKyAgICAgICAgfQorICAg
IH0KK30KKworU3RyaW5nIFdNTFNldHZhckVsZW1lbnQ6Om5hbWUoKQoreworICAgIHJldHVybiBt
X25hbWU7IAorfQorCitTdHJpbmcgV01MU2V0dmFyRWxlbWVudDo6dmFsdWUoKQoreworICAgIHJl
dHVybiBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLCBk
b2N1bWVudCgpKTsKK30KKworfQpJbmRleDogd21sL1dNTFNldHZhckVsZW1lbnQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSB3bWwvV01MU2V0dmFyRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFNl
dHZhckVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYg
V01MU2V0dmFyRWxlbWVudF9oCisjZGVmaW5lIFdNTFNldHZhckVsZW1lbnRfaAorCisjaW5jbHVk
ZSAiV01MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFNldHZh
ckVsZW1lbnQgOiBwdWJsaWMgIFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MU2V0dmFyRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+V01MU2V0dmFyRWxl
bWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7
IAorCisgICAgU3RyaW5nIG5hbWUoKTsKKyAgICBTdHJpbmcgdmFsdWUoKTsKKworcHJpdmF0ZToK
KyAgICBTdHJpbmcgbV9uYW1lOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxUYWJs
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxUYWJsZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAwKQorKysgd21sL1dNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRhYmxlRWxl
bWVudC5oIgorCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlQ2Vs
bEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCisjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgorI2luY2x1ZGUgIlJlbmRlclRh
YmxlQ2VsbC5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlU2VjdGlvbi5oIgorI2luY2x1ZGUgIldN
TFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVz
LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxUYWJsZUVsZW1lbnQ6OldNTFRhYmxlRWxl
bWVudChEb2N1bWVudCogZG9jKQorICAgIDogSFRNTFRhYmxlRWxlbWVudChkb2MpIAoreworfQor
CitXTUxUYWJsZUVsZW1lbnQ6On5XTUxUYWJsZUVsZW1lbnQoKQoreworfQorCit2b2lkIFdNTFRh
YmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQor
eworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gY29sdW1uc0F0dHIpIHsKKyAgICAgICAgaW50IGNv
bHVtbnMgPSAgYXR0ci0+dmFsdWUoKS50b0ludCgpOworICAgICAgICBpZiAoY29sdW1ucyA8IDEp
CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlk
Q29sdW1uc051bWJlckZvclRhYmxlRXJycm9yKTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IHRpdGxlQXR0cikgeworICAgICAgICBTdHJpbmcgdGl0bGUgPSBXTUxIZWxwZXI6OnN1
YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSk7CisgICAgICAgIGlmICh0
aXRsZSAhPSBhdHRyLT52YWx1ZSgpKQorICAgICAgICAgICAgc2V0QXR0cmlidXRlKHRpdGxlQXR0
ciwgdGl0bGUpOworCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25BdHRyKSB7
CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKQor
ICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZh
cmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgIH0gZWxzZQorICAgICAgICBIVE1MVGFibGVFbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKK30KKwordm9pZCBXTUxUYWJsZUVsZW1l
bnQ6OmluaXQoKSAKK3sKKyAgICB1bnNpZ25lZCBpbnQgaWR4ID0gMDsKKyAgICBIVE1MVGFibGVS
b3dFbGVtZW50KiByb3cgPSAwOworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBsYXN0Q29sID0g
MDsKKyAgICBSZWZQdHI8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+IG5ld0NlbGw7CisgICAgUGFzc1Jl
ZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sdW1uczsKKyAgICBFeGNlcHRpb25Db2RlIGVjOworICAg
IHVuc2lnbmVkIGFjdHVhbENvbE51bSA9IDA7CisgICAgdW5zaWduZWQgY29sTnVtID0gZ2V0QXR0
cmlidXRlKCJjb2x1bW5zIikudG9JbnQoKTsgCisgICAgaWYgKGNvbE51bSA8IDEpIAorICAgICAg
ICBjb2xOdW0gPSAxOworCisgICAgU3RyaW5nIGFsaWduID0gZ2V0QXR0cmlidXRlKCJhbGlnbiIp
OworCisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gcm93cyA9IGNoaWxkcmVuKCk7Cisg
ICAgdW5zaWduZWQgcm93TnVtID0gcm93cy0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJvd051bTsgKytpKSB7CisgICAgICAgIHJvdyA9IHN0YXRpY19jYXN0PEhUTUxU
YWJsZVJvd0VsZW1lbnQqPihyb3dzLT5pdGVtKGkpKTsKKyAgICAgICAgY29sdW1ucyA9IHJvdy0+
Y2VsbHMoKTsKKyAgICAgICAgYWN0dWFsQ29sTnVtID0gY29sdW1ucy0+bGVuZ3RoKCk7CisKKyAg
ICAgICAgaWYgKGFjdHVhbENvbE51bSA+IGNvbE51bSkgeworICAgICAgICAgICAgbGFzdENvbCA9
IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Kj4oY29sdW1ucy0+aXRlbShjb2xOdW0g
LSAxKSk7CisKKyAgICAgICAgICAgIC8vIGFnZ3JlZ2F0ZSB0aGUgcmVkdW5kYW50IGNvbHVtbnMg
aW50byB0aGUgbGFzdCBjb2x1bW4KKyAgICAgICAgICAgIG5ld0NlbGwgPSBuZXcgSFRNTFRhYmxl
Q2VsbEVsZW1lbnQoSFRNTE5hbWVzOjp0ZFRhZywgZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBp
ZiAobmV3Q2VsbCkKKyAgICAgICAgICAgICAgICBuZXdDZWxsLT5hZGRDaGlsZChsYXN0Q29sLT5j
bG9uZU5vZGUodHJ1ZSkpOworCisgICAgICAgICAgICBpZHggPSBjb2xOdW07CisgICAgICAgICAg
ICB3aGlsZSAoaWR4IDwgYWN0dWFsQ29sTnVtKQorICAgICAgICAgICAgICAgIG5ld0NlbGwtPmFw
cGVuZENoaWxkKGNvbHVtbnMtPml0ZW0oaWR4KyspLT5jbG9uZU5vZGUodHJ1ZSksIGVjKTsKKwor
ICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSByZWR1bmRhbnQgY29sdW1ucworICAgICAgICAgICAg
aWR4ID0gYWN0dWFsQ29sTnVtOworICAgICAgICAgICAgd2hpbGUgKGlkeCA+IGNvbE51bSkKKyAg
ICAgICAgICAgICAgICByb3ctPmRlbGV0ZUNlbGwoLS1pZHgsIGVjKTsKKworICAgICAgICAgICAg
cm93LT5yZXBsYWNlQ2hpbGQobmV3Q2VsbCwgbGFzdENvbCwgZWMpOworCisgICAgICAgICAgICAv
LyBjb252ZXJ0IHRoZSBhbGlnbiBhdHRyaWJ1dGUgb2YgdGFibGUgZWxlbWVudCB0byB0aGF0IG9m
IHRkIGVsZW1lbnQKKyAgICAgICAgICAgIGNvbnZlcnRBbGlnbihjb2x1bW5zLCBjb2xOdW0pOwor
ICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbENvbE51bSA8IGNvbE51bSkgeworICAgICAgICAgICAg
Y29udmVydEFsaWduKGNvbHVtbnMsIGFjdHVhbENvbE51bSk7CisKKyAgICAgICAgICAgIC8vIGFw
cGVuZCBlbXB0eSBjZWxscworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpZHggPSBhY3R1YWxD
b2xOdW07IGlkeCA8IGNvbE51bTsgKytpZHgpCisgICAgICAgICAgICAgICAgcm93LT5pbnNlcnRD
ZWxsKC0xLCBlYyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgLy8gY29udmVydCB0aGUg
YWxpZ24gYXR0cmlidXRlIG9mIHRhYmxlIGVsZW1lbnQgdG8gdGhhdCBvZiB0ZCBlbGVtZW50Cisg
ICAgICAgICAgICBjb252ZXJ0QWxpZ24oY29sdW1ucywgY29sTnVtKTsKKworICAgICAgICAvLyBz
ZXQgdGhlIGRlZmF1bHQgYWxpZ24gZm9yIGVhY2ggcm93CisgICAgICAgIHJvdy0+c2V0QWxpZ24o
ImxlZnQiKTsKKworICAgIH0gLy8gZW5kIG9mIGZvciAoLi4uIAorCit9CisKK3ZvaWQgV01MVGFi
bGVFbGVtZW50Ojpjb252ZXJ0QWxpZ24oUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4mIGNvbHVt
bnMsIHVuc2lnbmVkIGNlbGxOdW0pIAoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBjZWxs
ID0gMDsKKyAgICBTdHJpbmcgYWxpZ24gPSBnZXRBdHRyaWJ1dGUoImFsaWduIik7CisgICAgZm9y
ICh1bnNpZ25lZCBpZHggPSAwOyBpZHggPCBjZWxsTnVtOyArK2lkeCkgeworICAgICAgICBjZWxs
ID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihjb2x1bW5zLT5pdGVtKGlkeCkp
OworICAgICAgICBpZiAoYWxpZ25baWR4XSA9PSAnUicgKQorICAgICAgICAgICAgY2VsbC0+c2V0
QWxpZ24oInJpZ2h0Iik7CisgICAgICAgIGVsc2UgaWYgKGFsaWduW2lkeF0gPT0gJ0MnKQorICAg
ICAgICAgICAgY2VsbC0+c2V0QWxpZ24oImNlbnRlciIpOworICAgIH0gCit9CisKK30gLy9uYW1l
c3BhY2UKSW5kZXg6IHdtbC9XTUxUYWJsZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01M
VGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MVGFibGVFbGVtZW50LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTFRhYmxlRWxlbWVudF9o
CisjZGVmaW5lIFdNTFRhYmxlRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CisKK2NsYXNzIFdN
TFRhYmxlRWxlbWVudCA6IHB1YmxpYyBIVE1MVGFibGVFbGVtZW50eworcHVibGljOgorICAgIFdN
TFRhYmxlRWxlbWVudChEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFRhYmxlRWxlbWVudCgp
OworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOworCisgICAgdm9pZCBpbml0KCk7CisgICAgdm9pZCBjb252ZXJ0QWxpZ24oUGFzc1JlZlB0
cjxIVE1MQ29sbGVjdGlvbj4mLCB1bnNpZ25lZCk7IAorfTsKKworfSAvLyBuYW1lc3BhY2UKKwor
I2VuZGlmCkluZGV4OiB3bWwvV01MVGFnTmFtZXMuaW4KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFRh
Z05hbWVzLmluCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFRhZ05hbWVzLmluCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM5IEBACituYW1lc3BhY2U9IldNTCIKK25hbWVzcGFjZVVSST0iIgorZ3Vh
cmRGYWN0b3J5V2l0aD0iRU5BQkxFKFdNTCkiCisKK2NhcmQKK2EKK2FjY2VzcworaGVhZAorbWV0
YQordGVtcGxhdGUKK3dtbAorYnIKK3AKK3RhYmxlCit0ZAordHIKK2IKK2JpZworZW0KK2kKK3Nt
YWxsCitzdHJvbmcKK3UKK2FuY2hvcgoraW1nCitkbworb25ldmVudAorcG9zdGZpZWxkCitnbwor
bm9vcAorcHJldgorcmVmcmVzaAorZmllbGRzZXQKK2lucHV0CitvcHRncm91cAorb3B0aW9uCitz
ZWxlY3QKK3NldHZhcgordGltZXIKSW5kZXg6IHdtbC9XTUxUYXNrRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gd21sL1dNTFRhc2tFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxU
YXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisKKyNpbmNsdWRlICJF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MQW5jaG9yRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTENh
cmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRG9FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVs
cGVyLmgiCisjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAi
V01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
UGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TFRlbXBsYXRlRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKwordGVtcGxhdGU8Y2xh
c3MgVCwgc2l6ZV90IG4+IHN0YXRpYyB2b2lkIHJlbW92ZUZyb21WZWN0b3IoVmVjdG9yPFQqLCBu
PiAmIHZlYywgVCogaXRlbSkgCit7CisgICAgc2l6ZV90IHNpemUgPSB2ZWMuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkKKyAgICAgICAgaWYgKHZlY1tpXSA9
PSBpdGVtKSB7CisgICAgICAgICAgICB2ZWMucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KK30KKyAKK1dNTFRhc2tFbGVtZW50OjpXTUxUYXNrRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogV01MRWxlbWVudCh0
YWdOYW1lLCBkb2MpCit7Cit9CisKK1dNTFRhc2tFbGVtZW50Ojp+V01MVGFza0VsZW1lbnQoKQor
eworfQorCit2b2lkIFdNTFRhc2tFbGVtZW50OjpiaW5kSW50cmluc2ljRXZlbnRJbk9uZXZlbnQo
Tm9kZSogb25ldmVudE5vZGUpCit7CisgICAgV01MSW50cmluc2ljRXZlbnRUeXBlIHR5cGUgPSBV
bmtub3duOworICAgIFN0cmluZyB0eXBlQXR0cmkgPSBzdGF0aWNfY2FzdDxXTUxFbGVtZW50Kj4o
b25ldmVudE5vZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKTsKKworICAgIGlmIChXTUxIZWxwZXI6
Omhhc1ZhcmlhYmxlUmVmKHR5cGVBdHRyaSkpIHsKKyAgICAgICAgV01MSGVscGVyOjp0b2tlbml6
ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHR5cGVBdHRyaSA9PSAib25lbnRlcmZvcndhcmQi
KQorICAgICAgICB0eXBlID0gT25FbnRlckZvcndhcmQ7CisgICAgZWxzZSBpZiAodHlwZUF0dHJp
ID09ICJvbmVudGVyYmFja3dhcmQiKQorICAgICAgICB0eXBlID0gT25FbnRlckJhY2t3YXJkOwor
ICAgIGVsc2UgaWYgKHR5cGVBdHRyaSA9PSAib250aW1lciIpCisgICAgICAgIHR5cGUgPSBPblRp
bWVyOworICAgIGVsc2UgaWYgKHR5cGVBdHRyaSA9PSAib25waWNrIikKKyAgICAgICAgdHlwZSA9
IE9uUGljazsKKworICAgIGlmICh0eXBlID09IFVua25vd24pCisgICAgICAgIHJldHVybjsKKwor
ICAgIFdNTEludHJpbnNpY0V2ZW50IGV2OworICAgIGV2LnRhc2sgPSB0aGlzOworICAgIGlmICho
YXNUYWdOYW1lKGdvVGFnKSkgeworICAgICAgICBTdHJpbmcgaHJlZiA9IGdldEF0dHJpYnV0ZSgi
aHJlZiIpOworICAgICAgICBldi50YXJnZXRVUkkgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYoaHJlZiwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAgIH0KKworICAgIC8vcmVnaXN0ZXIg
aW50cmluc2ljIGV2ZW50IHRvIHRoZSBldmVudCBoYW5kbGVyIG9mIHRoZSBvd25lciBvZiBvbmV2
ZW50IGVsZW1lbnQgCisgICAgTm9kZSogcGFyZW50ID0gb25ldmVudE5vZGUtPnBhcmVudE5vZGUo
KTsKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2SGFuZGxlciA9IDA7CisgICAgaWYg
KHBhcmVudC0+aGFzVGFnTmFtZShjYXJkVGFnKSkgeworICAgICAgICBXTUxDYXJkRWxlbWVudCog
Y2FyZCA9IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4ocGFyZW50KTsKKyAgICAgICAgY2Fy
ZC0+c2V0SGFzSW50cmluc2ljRXZlbnQodHJ1ZSk7CisgICAgICAgIGV2SGFuZGxlciA9IGNhcmQt
PmV2ZW50SGFuZGxlcigpOworICAgIH0gZWxzZSBpZiAocGFyZW50LT5oYXNUYWdOYW1lKHRlbXBs
YXRlVGFnKSkgeworICAgICAgICBXTUxUZW1wbGF0ZUVsZW1lbnQqIHRlbXBsID0gc3RhdGljX2Nh
c3Q8V01MVGVtcGxhdGVFbGVtZW50Kj4ocGFyZW50KTsKKyAgICAgICAgdGVtcGwtPnNldEhhc0lu
dHJpbnNpY0V2ZW50KHRydWUpOworICAgICAgICBldkhhbmRsZXIgPSB0ZW1wbC0+ZXZlbnRIYW5k
bGVyKCk7CisgICAgfSBlbHNlIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUob3B0aW9uVGFnKSkgewor
ICAgICAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRpb25F
bGVtZW50Kj4ocGFyZW50KTsKKyAgICAgICAgb3B0aW9uLT5zZXRIYXNJbnRyaW5zaWNFdmVudCh0
cnVlKTsKKyAgICAgICAgZXZIYW5kbGVyID0gb3B0aW9uLT5ldmVudEhhbmRsZXIoKTsKKyAgICB9
CisKKyAgICBpZiAoZXZIYW5kbGVyKQorICAgICAgICBldkhhbmRsZXItPnJlZ2lzdGVySW50cmlu
c2ljRXZlbnQodHlwZSwgZXYpOworfQorCit2b2lkIFdNTFRhc2tFbGVtZW50OjppbnNlcnRlZElu
dG9UcmVlKGJvb2wgZGVlcCkgCit7CisgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2Rl
KCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKworICAgICAgICBp
ZiAocGFyZW50LT5oYXNUYWdOYW1lKGRvVGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
V01MRG9FbGVtZW50Kj4ocGFyZW50KS0+cmVnaXN0ZXJUYXNrKHRoaXMpOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAocGFyZW50LT5sb2NhbE5hbWUoKSA9PSAib25ldmVu
dCIpIHsKKyAgICAgICAgICAgIC8vYmluZGluZyB0aGlzIHRhc2sgd2l0aCBpbnRyaW5zaWMgZXZl
bnQgc3BlY2lmaWVkIGJ5IG9uZXZlbnQgdHlwZQorICAgICAgICAgICAgYmluZEludHJpbnNpY0V2
ZW50SW5PbmV2ZW50KHBhcmVudCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNl
IGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoYW5jaG9yVGFnKSkgeworICAgICAgICAgICAgc3RhdGlj
X2Nhc3Q8V01MQW5jaG9yRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyVGFzayh0aGlzKTsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9Cit9CisKK3ZvaWQgV01MVGFza0Vs
ZW1lbnQ6OnJlZ2lzdGVyU2V0dmFyRWxlbWVudChXTUxTZXR2YXJFbGVtZW50KiBlKSAKK3sKKyAg
ICBtX3NldHZhcnMuYXBwZW5kKGUpOworfQorCit2b2lkIFdNTFRhc2tFbGVtZW50OjpyZW1vdmVT
ZXR2YXJFbGVtZW50KFdNTFNldHZhckVsZW1lbnQqIGUpIAoreworICAgIHJlbW92ZUZyb21WZWN0
b3IobV9zZXR2YXJzLCBlKTsKK30KKworYm9vbCBXTUxUYXNrRWxlbWVudDo6aGFzU2V0dmFyKCkg
Y29uc3QgCit7CisgICAgcmV0dXJuICFtX3NldHZhcnMuaXNFbXB0eSgpOworfQorCit9CkluZGV4
OiB3bWwvV01MVGFza0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MVGFza0VsZW1lbnQu
aAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxUYXNrRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUYXNrRWxlbWVudF9oCisjZGVmaW5lIFdNTFRh
c2tFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXTUxTZXR2YXJFbGVtZW50OworCitjbGFzcyBXTUxUYXNrRWxlbWVudCA6
IHB1YmxpYyBXTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxUYXNrRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKTsKKyAgICB2aXJ0dWFsIH5XTUxU
YXNrRWxlbWVudCgpOworICAKKyAgICB2aXJ0dWFsIHZvaWQgZXhlYyhFdmVudCosIFN0cmluZyB1
cmkgPSBTdHJpbmcoKSkgPSAwIDsKKworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVl
KGJvb2wgZGVlcCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTZXR2YXJFbGVtZW50KFdN
TFNldHZhckVsZW1lbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2V0dmFyRWxlbWVudChX
TUxTZXR2YXJFbGVtZW50Kik7CisgICAgYm9vbCBoYXNTZXR2YXIoKSBjb25zdDsKKworcHJvdGVj
dGVkOgorICAgIFZlY3RvcjxXTUxTZXR2YXJFbGVtZW50Kj4gbV9zZXR2YXJzOworCitwcml2YXRl
OgorICAgIHZvaWQgYmluZEludHJpbnNpY0V2ZW50SW5PbmV2ZW50KE5vZGUqKTsKKworfTsKKwor
fSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHdtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQor
Kysgd21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTI5
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRlbXBsYXRlRWxlbWVu
dC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUgIlJlbmRlckFyZW5h
LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5kZXJPYmplY3QuaCIK
KyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5o
IgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2lu
Y2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAi
V01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IFdNTE5hbWVzOworCitXTUxUZW1wbGF0ZUVsZW1lbnQ6OldNTFRlbXBsYXRlRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogV01MRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2V2bnRIYW5kbGVyKDApCisgICAgLCBtX2hhc0ludHJp
bnNpY0V2ZW50KGZhbHNlKSAKK3sKK30KKworV01MVGVtcGxhdGVFbGVtZW50Ojp+V01MVGVtcGxh
dGVFbGVtZW50KCkgCit7CisgICAgaWYgKG1fZXZudEhhbmRsZXIpIHsKKyAgICAgICAgZGVsZXRl
IG1fZXZudEhhbmRsZXI7CisgICAgICAgIG1fZXZudEhhbmRsZXIgPSAwOworICAgIH0KKworfQor
Cit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKiBhdHRyKQoreworICAgIFdNTEludHJpbnNpY0V2ZW50VHlwZSBldHlwZSA9IFVua25v
d247CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG9uZW50ZXJmb3J3YXJkQXR0cikKKyAgICAg
ICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
b25lbnRlcmJhY2t3YXJkQXR0cikKKyAgICAgICAgZXR5cGUgPSBPbkVudGVyQmFja3dhcmQ7Cisg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9udGltZXJBdHRyKQorICAgICAgICBldHlwZSA9
IE9uVGltZXI7CisgICAgCisgICAgLy8gcmVnaXN0ZXIgaW50cmluc2ljIGV2ZW50IHRvIHRlbXBs
YXRlIAorICAgIGlmIChldHlwZSAhPSBVbmtub3duKSB7CisKKyAgICAgICAgaWYgKCFtX2V2bnRI
YW5kbGVyKSAKKyAgICAgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyKCk7CisKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgICAgIFF1
YWxpZmllZE5hbWUgcU5hbWUoImdvIiwgImdvIiwgIiIpOworICAgICAgICBFbGVtZW50KiBnbyA9
IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KHFOYW1lLCBkb2N1bWVudCgpLCBm
YWxzZSk7IAorICAgICAgICBTdHJpbmcgaHJlZiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJl
ZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLCAiZXNjYXBlIik7CisgICAgICAgIGdvLT5zZXRB
dHRyaWJ1dGVOUygiIiwgImhyZWYiLCBocmVmLCBlYyk7CisKKyAgICAgICAgV01MSW50cmluc2lj
RXZlbnQgZXY7CisgICAgICAgIGV2LnRhc2sgPSBzdGF0aWNfY2FzdDxXTUxHb0VsZW1lbnQqPihn
byk7CisgICAgICAgIGV2LnRhcmdldFVSSSA9IGhyZWY7IAorCisgICAgICAgIHNldEhhc0ludHJp
bnNpY0V2ZW50KHRydWUpOworICAgICAgICBtX2V2bnRIYW5kbGVyLT5yZWdpc3RlckludHJpbnNp
Y0V2ZW50KGV0eXBlLCBldik7CisgICAgfQorfQorCitXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIq
IFdNTFRlbXBsYXRlRWxlbWVudDo6ZXZlbnRIYW5kbGVyKCkKK3sKKyAgICBpZiAobV9oYXNJbnRy
aW5zaWNFdmVudCAmJiAhbV9ldm50SGFuZGxlcikKKyAgICAgICAgbV9ldm50SGFuZGxlciA9IG5l
dyBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsKKworICAgIHJldHVybiBtX2V2bnRIYW5kbGVy
OworfQorCit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6c2V0SGFzSW50cmluc2ljRXZlbnQoYm9v
bCBoYXNFdnQpCit7CisgICAgbV9oYXNJbnRyaW5zaWNFdmVudCA9IGhhc0V2dDsKK30KKworYm9v
bCBXTUxUZW1wbGF0ZUVsZW1lbnQ6Omhhc0ludHJpbnNpY0V2ZW50KCkKK3sKKyAgICByZXR1cm4g
bV9oYXNJbnRyaW5zaWNFdmVudDsKK30KKwordm9pZCBXTUxUZW1wbGF0ZUVsZW1lbnQ6OnJlZ2lz
dGVyRG9FbGVtZW50KFdNTERvRWxlbWVudCogZG9FbGVtdCkKK3sKKyAgICBpZiAoZG9FbGVtdCkg
eworICAgICAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9kb1ZlY3Mu
YmVnaW4oKTsKKyAgICAgICAgV01MRG9FbGVtZW50KiB0bXBEbyA9IDA7CisgICAgICAgIHdoaWxl
IChpdCAhPSBtX2RvVmVjcy5lbmQoKSkgeworICAgICAgICAgICAgdG1wRG8gPSBzdGF0aWNfY2Fz
dDxXTUxEb0VsZW1lbnQqPigqaXQrKyk7CisgICAgICAgICAgICBpZiAodG1wRG8tPmRvTmFtZSgp
ID09IGRvRWxlbXQtPmRvTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgV01MSGVscGVyOjp0b2tl
bml6ZXIoKS0+cmVwb3J0RXJyb3IoU2FtZU5hbWVEb0VsZW1lbnRzRXJyb3IpOworICAgICAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBtX2RvVmVj
cy5hcHBlbmQoZG9FbGVtdCk7CisgICAgfQorfQorCitWZWN0b3I8V01MRG9FbGVtZW50Kj4gV01M
VGVtcGxhdGVFbGVtZW50OjpnZXREb0VsZW1lbnRzKCkKK3sKKyAgICByZXR1cm4gbV9kb1ZlY3M7
Cit9CisKK30KSW5kZXg6IHdtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3
bWwvV01MVGVtcGxhdGVFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MVGVtcGxhdGVF
bGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTFRl
bXBsYXRlRWxlbWVudF9oCisjZGVmaW5lIFdNTFRlbXBsYXRlRWxlbWVudF9oCisKKyNpbmNsdWRl
ICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MVGFza0VsZW1lbnQ7CitjbGFzcyBXTUxE
b0VsZW1lbnQ7CisKK2NsYXNzIFdNTFRlbXBsYXRlRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50
IHsKK3B1YmxpYzoKKyAgICBXTUxUZW1wbGF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MVGVtcGxhdGVFbGVtZW50KCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisKKyAg
ICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpOworICAgIGJvb2wgaGFz
SW50cmluc2ljRXZlbnQoKTsKKyAgICB2b2lkIHNldEhhc0ludHJpbnNpY0V2ZW50KGJvb2wpOwor
CisgICAgdm9pZCByZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQqKTsKKyAgICBWZWN0b3I8
V01MRG9FbGVtZW50Kj4gZ2V0RG9FbGVtZW50cygpOworcHJpdmF0ZToKKyAgICBXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIqIG1fZXZudEhhbmRsZXI7CisgICAgYm9vbCBtX2hhc0ludHJpbnNpY0V2
ZW50OworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPiBtX2RvVmVjczsKK307CisKK30gLy9uYW1l
c3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21s
L1dNTFRleHQuY3BwCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFRleHQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldN
TFRleHQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgi
CisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV01M
VGV4dDo6V01MVGV4dChEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAgOiBU
ZXh0KGRvYywgdGV4dCkKK3sKK30KKworV01MVGV4dDo6fldNTFRleHQoKQoreworfQorCit2b2lk
IFdNTFRleHQ6OnVwZGF0ZURhdGFJZk5lZWRlZCgpIAoreworICAgIFBhZ2UgKnBhZ2UgPSBkb2N1
bWVudCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICBp
ZiAobGVuZ3RoKCkgPiAxICYmIHBhZ2UtPndtbFBhZ2VTdGF0ZSgpLT5oYXNWYXJpYWJsZXMoKSkg
eworICAgICAgICBTdHJpbmcgdGV4dCA9IGRhdGEoKTsKKyAgICAgICAgaWYgKCF0ZXh0LmltcGwo
KS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSB7CisgICAgICAgICAgICB0ZXh0ID0gV01MSGVs
cGVyOjpzdWJzdGl0dXRlVmFyUmVmKHRleHQsIGRvY3VtZW50KCkpOworCisgICAgICAgICAgICBF
eGNlcHRpb25Db2RlIGU7CisgICAgICAgICAgICBzZXREYXRhKHRleHQsIGUpOworICAgICAgICB9
CisgICAgfQorfQorCisKK30gLy9uYW1lc3BhY2UKSW5kZXg6IHdtbC9XTUxUZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gd21sL1dNTFRleHQuaAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxUZXh0LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTFRleHRfaAorI2RlZmlu
ZSBXTUxUZXh0X2gKKworI2luY2x1ZGUgIlRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgV01MVGV4dCA6IHB1YmxpYyBUZXh0IHsKK3B1Ymxp
YzoKKyAgICBXTUxUZXh0KERvY3VtZW50KiwgY29uc3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB+
V01MVGV4dCgpOworCisgICAgdm9pZCB1cGRhdGVEYXRhSWZOZWVkZWQoKTsKK307CisKK30gLy8g
bmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTFRpbWVyRWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gd21sL1dNTFRpbWVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01M
VGltZXJFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisKKyNpbmNsdWRl
ICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldN
TEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxUaW1lckVsZW1l
bnQ6OldNTFRpbWVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dCAqZG9jKQorICAgIDogV01MRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgICAsIG1fY2FyZCgw
KQorICAgICAgLCBtX3RpbWVyKHRoaXMsICZXTUxUaW1lckVsZW1lbnQ6OnRpbWVyRmlyZWQpCit7
Cit9CisKK1dNTFRpbWVyRWxlbWVudDo6fldNTFRpbWVyRWxlbWVudCgpCit7Cit9CisKK3ZvaWQg
V01MVGltZXJFbGVtZW50Ojp0aW1lckZpcmVkKFRpbWVyPFdNTFRpbWVyRWxlbWVudD4qKQorewor
ICAgIGlmICghbV9jYXJkIHx8ICFkb2N1bWVudCgpLT5wYWdlKCkpIAorICAgICAgICByZXR1cm47
CisKKyAgICAvL3doZW4gdGhlIHRpbWVyIGV4cGlyZXMsIHNldCB0aGUgbmFtZSB2YXJpYWxiZSBv
ZiB0aW1lciB0byAnMCcKKyAgICBpZiAoIW1fbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV92
YWx1ZSA9ICIwIjsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0
YXRlKCkpOworICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zdG9y
ZVZhcmlhYmxlKG1fbmFtZSwgbV92YWx1ZSk7CisgICAgfQorCisgICAgV01MSW50cmluc2ljRXZl
bnRUeXBlIGV0eXBlID0gT25UaW1lcjsKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2
SGFuZGxlciA9IG1fY2FyZC0+ZXZlbnRIYW5kbGVyKCk7CisgICAgYm9vbCBoYXNJbnRyaW5zaWNF
dmVudCA9ICBmYWxzZTsKKyAgICBpZiAoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFzSW50cmlu
c2ljRXZlbnQoZXR5cGUpKQorICAgICAgICBoYXNJbnRyaW5zaWNFdmVudCA9IHRydWU7CisgICAg
ZWxzZSBpZiAobV9jYXJkLT50ZW1wbGF0ZUVsZW1lbnQoKSkgeworICAgICAgICBldkhhbmRsZXIg
PSBtX2NhcmQtPnRlbXBsYXRlRWxlbWVudCgpLT5ldmVudEhhbmRsZXIoKTsKKyAgICAgICAgaWYg
KGV2SGFuZGxlciAmJiBldkhhbmRsZXItPmhhc0ludHJpbnNpY0V2ZW50KGV0eXBlKSkKKyAgICAg
ICAgICAgIGhhc0ludHJpbnNpY0V2ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaGFzSW50
cmluc2ljRXZlbnQpCisgICAgeworICAgICAgICBldkhhbmRsZXItPnRyaWdnZXJJbnRyaW5zaWNF
dmVudChldHlwZSk7CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVyRWxlbWVudDo6c3RhcnQoaW50
IGludGVydmFsKQoreworICAgIGlmIChtX2NhcmQgJiYgIW1fdGltZXIuaXNBY3RpdmUoKSkgewor
ICAgICAgICAKKyAgICAgICAgaWYgKChpbnRlcnZhbCA8PSAwKSAmJiAhbV9uYW1lLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgU3RyaW5nIHRpbWVvdXQgPSBkb2N1bWVudCgpLT5wYWdlKCktPndt
bFBhZ2VTdGF0ZSgpLT5nZXRWYXJpYmFsZShtX25hbWUpOyAKKyAgICAgICAgICAgIGludGVydmFs
ID0gdGltZW91dC50b0ludCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGludGVydmFsIDw9
IDApCisgICAgICAgICAgICBpbnRlcnZhbCA9IG1fdmFsdWUudG9JbnQoKTsKKworICAgICAgICBp
ZiAoaW50ZXJ2YWwgPiAwKQorICAgICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoaW50ZXJ2
YWwvMTAuMCk7CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVyRWxlbWVudDo6c3RvcCgpCit7Cisg
ICAgaWYgKG1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90aW1lci5zdG9wKCk7Cit9CisK
K3ZvaWQgV01MVGltZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUqIGF0dHIpIAoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKKyAgICAg
ICAgaWYgKCFXTUxIZWxwZXI6OmlzVmFsaWRWYXJpYWJsZU5hbWUoYXR0ci0+dmFsdWUoKSkpCisg
ICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFy
aWFibGVOYW1lRXJyb3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25hbWUgPSBhdHRy
LT52YWx1ZSgpOworCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKQor
ICAgICAgICBtX3ZhbHVlID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVl
KCksIGRvY3VtZW50KCkpOworfQorCit2b2lkIFdNTFRpbWVyRWxlbWVudDo6aW5zZXJ0ZWRJbnRv
VHJlZShib29sIGRlZXApCit7CisgICAgLy8gVGhlIHZhbHVlIG9mIHRpbWVvdXQgbXVzdCBiZSBh
IHBvc2l0aXZlIGludGVncmFsIG51bWJlciwgb3IgaWdub3JlIGl0CisgICAgaWYgKG1fdmFsdWUu
dG9JbnQoKSA+IDApIHsKKyAgICAgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7
IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlm
IChwYXJlbnQtPmhhc1RhZ05hbWUoY2FyZFRhZykpIHsKKyAgICAgICAgICAgICAgICBtX2NhcmQg
PSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgICAgICAgICAg
bV9jYXJkLT5zZXRJbnRyaW5zaWNFdmVudFRpbWVyKHRoaXMpOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVy
RWxlbWVudDo6c3RvcmVJbnRlcnZhbFRvUGFnZVN0YXRlKCkKK3sKKyAgICBpZiAobV90aW1lci5p
c0FjdGl2ZSgpKSB7CisgICAgICAgIGludCBpbnRlcnZhbCA9IHN0YXRpY19jYXN0PGludD4obV90
aW1lci5uZXh0RmlyZUludGVydmFsKCkpKjEwOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBTdHJp
bmc6Om51bWJlcihpbnRlcnZhbCk7CisKKyAgICAgICAgUGFnZSAqcGFnZSA9IGRvY3VtZW50KCkt
PnBhZ2UoKTsKKyAgICAgICAgaWYgKHBhZ2UpIAorICAgICAgICAgICAgcGFnZS0+d21sUGFnZVN0
YXRlKCktPnN0b3JlVmFyaWFibGUobV9uYW1lLCB2YWx1ZSk7CisgICAgfQorfQorCit9CkluZGV4
OiB3bWwvV01MVGltZXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFRpbWVyRWxlbWVu
dC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFRpbWVyRWxlbWVudC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUaW1lckVsZW1lbnRfaAorI2RlZmluZSBX
TUxUaW1lckVsZW1lbnRfaAorCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJXTUxFbGVt
ZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MQ2FyZEVsZW1lbnQ7Cisg
ICAgICAgICAgICAgICAgICAgICAgIAorY2xhc3MgV01MVGltZXJFbGVtZW50IDogcHVibGljIFdN
TEVsZW1lbnQgeworcHVibGljOgorICAgIFdNTFRpbWVyRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFRpbWVyRWxlbWVudCgp
OworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUq
KTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworCisgICAg
dm9pZCB0aW1lckZpcmVkKFRpbWVyPFdNTFRpbWVyRWxlbWVudD4qKTsKKyAgICB2b2lkIHN0YXJ0
KGludCBpbnRlcnZhbCA9IC0xKTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICB2b2lkIHN0b3JlSW50
ZXJ2YWxUb1BhZ2VTdGF0ZSgpOworCitwcml2YXRlOgorICAgIFdNTENhcmRFbGVtZW50KiBtX2Nh
cmQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBUaW1lcjxX
TUxUaW1lckVsZW1lbnQ+IG1fdGltZXI7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJ
bmRleDogd21sL1dNTFRva2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFRva2VuaXpl
ci5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01M
VG9rZW5pemVyLmgiCisKKyNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlw
dC5oIgorI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNp
bmNsdWRlICJDb21tZW50LmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRUeXBlLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRl
ICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxT
Y3JpcHRFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUg
IkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgor
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlByb2Nl
c3NpbmdJbnN0cnVjdGlvbi5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVk
ZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2lm
IFVTRShRWE1MU1RSRUFNKQorI2luY2x1ZGUgPFFEZWJ1Zz4KKyNlbHNlCisjaW5jbHVkZSA8bGli
eG1sL3BhcnNlci5oPgorI2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KKyNlbmRp
ZgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwor
I2lmIEVOQUJMRShYU0xUKQorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgorI2VuZGlmCisKKyNp
ZiBFTkFCTEUoU1ZHKQorI2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVF
bGVtZW50LmgiCisjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJX
TUxBY2Nlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
RWxlbWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxJ
bWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQ
RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxU
ZXh0LmgiCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOwor
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXTUxUb2tlbml6ZXI6OldN
TFRva2VuaXplcihEb2N1bWVudCogX2RvYywgRnJhbWVWaWV3KiBfdmlldykKKzogWE1MVG9rZW5p
emVyKF9kb2MsIF92aWV3KSAKK3sKKyAgICBzZXRDdXJyZW50Tm9kZShfZG9jKTsKKyAgICBtX2Vy
cm9yQ29kZSA9IE5vRXJyb3I7CisgICAgIAorICAgIFdNTEhlbHBlcjo6c2V0VG9rZW5pemVyKHRo
aXMpOworfQorCisKK1dNTFRva2VuaXplcjo6fldNTFRva2VuaXplcigpCit7CisgICAgV01MSGVs
cGVyOjpzZXRUb2tlbml6ZXIoMCk7Cit9CisKK2Jvb2wgV01MVG9rZW5pemVyOjp3cml0ZShjb25z
dCBTZWdtZW50ZWRTdHJpbmcmIHMsIGJvb2wgLyphcHBlbmREYXRhKi8pIAoreworI2lmICFVU0Uo
UVhNTFNUUkVBTSkKKyAgICBYTUxUb2tlbml6ZXI6OndyaXRlKHMsIHRydWUpOworICAgIHJldHVy
biB0cnVlOworI2Vsc2UKKworICAgIHN0YXRpYyBRWG1sU3RyZWFtUmVhZGVyOjpUb2tlblR5cGUg
b2xkVHlwZSA9IFFYbWxTdHJlYW1SZWFkZXI6Ok5vVG9rZW47CisKKyAgICBRWG1sU3RyZWFtUmVh
ZGVyICZzdHJlYW0gPSB4bWxTdHJlYW1SZWFkZXIoKTsKKyAgICBzdHJlYW0uYWRkRGF0YShRU3Ry
aW5nKHMudG9TdHJpbmcoKSkpOworCisgICAgd2hpbGUgKCFzdHJlYW0uYXRFbmQoKSkgeworICAg
ICAgICBzdHJlYW0ucmVhZE5leHQoKTsKKyAgICAgICAgc3dpdGNoIChzdHJlYW0udG9rZW5UeXBl
KCkpIHsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnREb2N1bWVudDoK
KyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRG9jdW1lbnQ6CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0
RWxlbWVudDoKKyAgICAgICAgICAgICAgICBpZiAob2xkVHlwZSAhPSBRWG1sU3RyZWFtUmVhZGVy
OjpEVEQpIHsKKyAgICAgICAgICAgICAgICAgICAgaGFuZGxlV01MRXJyb3IoRG9jVHlwZURlY2xh
cmF0aW9uTWlzc0Vycm9yKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBXTUxQYXJzZVN0YXJ0RWxlbWVudCgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVy
OjpFbmRFbGVtZW50OiAKKyAgICAgICAgICAgICAgICBXTUxQYXJzZUVuZEVsZW1lbnQoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6
Q2hhcmFjdGVyczogeworICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uaXNDREFUQSgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgZXhpdFRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICBS
ZWZQdHI8Tm9kZT4gbmV3Tm9kZSA9IG5ldyBDREFUQVNlY3Rpb24oZG9jdW1lbnQoKSwgc3RyZWFt
LnRleHQoKSk7CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Tm9kZSgpLT5hZGRD
aGlsZChuZXdOb2RlLmdldCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgICAgICAgaWYgKGZyYW1lVmlldygpICYmICFuZXdOb2RlLT5hdHRhY2hl
ZCgpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdOb2RlLT5hdHRhY2goKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUo
KS0+aXNUZXh0Tm9kZSgpIHx8IGVudGVyVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdNTFRleHQq
IHRleHQgPSBzdGF0aWNfY2FzdDxXTUxUZXh0Kj4oY3VycmVudE5vZGUoKSk7CisgICAgICAgICAg
ICAgICAgICAgICAgICB0ZXh0LT5hcHBlbmREYXRhKHN0cmVhbS50ZXh0KCksIGVjKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHRleHQtPnVwZGF0ZURhdGFJZk5lZWRlZCgpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnROb2RlKCktPmF0dGFjaGVkKCkpIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnROb2RlKCktPmF0dGFjaCgpOworCisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVudGl0
eVJlZmVyZW5jZTogeworICAgICAgICAgICAgICAgIFFTdHJpbmcgZW50aXR5ID0gc3RyZWFtLm5h
bWUoKS50b1N0cmluZygpOworICAgICAgICAgICAgICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVu
dGl0eShlbnRpdHkudG9VdGY4KCkuY29uc3REYXRhKCkpOworCisgICAgICAgICAgICAgICAgaWYg
KGN1cnJlbnROb2RlKCktPmlzVGV4dE5vZGUoKSB8fCBlbnRlclRleHQoKSkgeworICAgICAgICAg
ICAgICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgU3Ry
aW5nIHN0cigmYywgMSk7CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihj
dXJyZW50Tm9kZSgpKS0+YXBwZW5kRGF0YShzdHIsIGVjKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFY
bWxTdHJlYW1SZWFkZXI6OkNvbW1lbnQ6CisgICAgICAgICAgICAgICAgcGFyc2VDb21tZW50KCk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFk
ZXI6OlByb2Nlc3NpbmdJbnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAgICBwYXJzZVByb2Nlc3Np
bmdJbnN0cnVjdGlvbigpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQ6CisgICAgICAgICAgICAgICAgb2xkVHlwZSA9IFFYbWxT
dHJlYW1SZWFkZXI6OkRURDsKKyAgICAgICAgICAgICAgICBwYXJzZUR0ZCgpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIGlm
IChzdHJlYW0uZXJyb3IoKSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3Vt
ZW50RXJyb3IpIHsKKyAgICAgICAgICAgICAgICAgICAgRXJyb3JUeXBlIHR5cGUgPSAoc3RyZWFt
LmVycm9yKCkgPT0gUVhtbFN0cmVhbVJlYWRlcjo6Tm90V2VsbEZvcm1lZEVycm9yKSA/CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmF0YWwgOiB3YXJuaW5nOworICAgICAg
ICAgICAgICAgICAgICBoYW5kbGVFcnJvcih0eXBlLCBxUHJpbnRhYmxlKHN0cmVhbS5lcnJvclN0
cmluZygpKSwgbGluZU51bWJlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b2x1bW5OdW1iZXIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIH0gLy8gZW5kIG9mIHN3aXRjaCAoLi4uCisKKyAg
ICAgICAgaWYgKGhhc0Vycm9yKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZVdNTEVycm9yKCk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IC8vIGVuZCBvZiB3aGls
ZSAoLi4uCisKKyAgICByZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCit9CisKK3ZvaWQgV01MVG9rZW5p
emVyOjp1cGRhdGVBdHRyc0lmTmVlZGVkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
bG9jYWxOYW1lKQoreworICAgIC8vIHVwZGF0ZSBhdHJyaWJ1dGVzIG9mIG9wdG9pbiBlbGVtZW50
IGlmIG5lZWRlZAorICAgIGlmIChsb2NhbE5hbWUgPT0gIm9wdGlvbiIpCisgICAgICAgIHN0YXRp
Y19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlQXR0cnNJZk5lZWRlZCgp
OworICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSAic2VsZWN0IikKKyAgICAgICAgc3RhdGljX2Nh
c3Q8V01MU2VsZWN0RWxlbWVudCo+KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7Cisg
ICAgZWxzZSBpZiAobG9jYWxOYW1lID09ICJpbnB1dCIpCisgICAgICAgIHN0YXRpY19jYXN0PFdN
TElucHV0RWxlbWVudCo+KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxz
ZSBpZiAobG9jYWxOYW1lID09ICJpbWciKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxJbWFnZUVs
ZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlQXR0cnNJZk5lZWRlZCgpOworICAgIGVsc2UgaWYgKGxv
Y2FsTmFtZSA9PSAicCIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTFBFbGVtZW50Kj4oZWxlbWVu
dCktPnVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKK30KKworI2lmIFVTRShRWE1MU1RSRUFNKQordm9p
ZCBXTUxUb2tlbml6ZXI6OldNTFBhcnNlU3RhcnRFbGVtZW50KCkKK3sKKyAgICBleGl0VGV4dCgp
OworCisgICAgUVhtbFN0cmVhbVJlYWRlciAmc3RyZWFtID0geG1sU3RyZWFtUmVhZGVyKCk7Cisg
ICAgUVN0cmluZyBsb2NhbE5hbWUgPSBzdHJlYW0ubmFtZSgpLnRvU3RyaW5nKCk7CisgICAgUVN0
cmluZyB1cmkgICAgICAgPSBzdHJlYW0ubmFtZXNwYWNlVXJpKCkudG9TdHJpbmcoKTsKKyAgICBR
U3RyaW5nIHByZWZpeCAgICA9IHN0cmVhbS5xdWFsaWZpZWROYW1lKCkudG9TdHJpbmcoKTsKKwor
ICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkpOworICAgIEFTU0VSVChkb2N1bWVudCgpLT5w
YWdlKCktPndtbFBhZ2VTdGF0ZSgpKTsKKyAgICBpZiAobG9jYWxOYW1lID09ICJhY2Nlc3MiKQor
ICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zZXROZWVkQ2hlY2tE
ZWNrQWNjZXNzKHRydWUpOworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUXVhbGlm
aWVkTmFtZSBxTmFtZShwcmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKKyAgICBFbGVtZW50KiBuZXdF
bGVtZW50ID0gV01MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZVdNTEVsZW1lbnQocU5hbWUsIGRvY3Vt
ZW50KCksIHRydWUpIDsKKworICAgIFFYbWxTdHJlYW1BdHRyaWJ1dGVzIGF0dHJzID0gc3RyZWFt
LmF0dHJpYnV0ZXMoKTsKKyAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmNvdW50
KCk7ICsraSkgeworICAgICAgICBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlICZhdHRyID0gYXR0
cnNbaV07CisgICAgICAgIFN0cmluZyBhdHRyTG9jYWxOYW1lID0gYXR0ci5uYW1lKCk7CisgICAg
ICAgIFN0cmluZyBhdHRyVmFsdWUgICAgID0gYXR0ci52YWx1ZSgpOworICAgICAgICBTdHJpbmcg
YXR0clVSSSAgICAgICA9IGF0dHIubmFtZXNwYWNlVXJpKCkuaXNFbXB0eSgpID8gU3RyaW5nKCkg
OiBTdHJpbmcoYXR0ci5uYW1lc3BhY2VVcmkoKSk7CisgICAgICAgIFN0cmluZyBhdHRyUU5hbWUg
ICAgID0gYXR0ci5xdWFsaWZpZWROYW1lKCk7CisKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0
cmlidXRlTlMoYXR0clVSSSwgYXR0clFOYW1lLCBhdHRyVmFsdWUsIGVjKTsKKyAgICB9CisKKyAg
ICB1cGRhdGVBdHRyc0lmTmVlZGVkKG5ld0VsZW1lbnQsIGxvY2FsTmFtZSk7CisKKyAgICBpZiAo
IWN1cnJlbnROb2RlKCktPmFkZENoaWxkKG5ld0VsZW1lbnQpKSB7CisgICAgICAgIHN0b3BQYXJz
aW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2V0Q3VycmVudE5vZGUobmV3RWxl
bWVudCk7CisKKyAgICBpZiAoIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCisgICAgICAgIG5ld0Vs
ZW1lbnQtPmF0dGFjaCgpOyAKK30KKwordm9pZCBXTUxUb2tlbml6ZXI6OldNTFBhcnNlRW5kRWxl
bWVudCgpIAoreworICAgIGV4aXRUZXh0KCk7CisKKyAgICBOb2RlKiBuID0gY3VycmVudE5vZGUo
KTsKKworICAgIFJlZlB0cjxOb2RlPiBwYXJlbnQgPSBuLT5wYXJlbnROb2RlKCk7CisgICAgbi0+
ZmluaXNoUGFyc2luZ0NoaWxkcmVuKCk7CisKKyAgICBzZXRDdXJyZW50Tm9kZShwYXJlbnQuZ2V0
KCkpOworfQorI2VuZGlmCisKK3ZvaWQgV01MVG9rZW5pemVyOjpmaW5pc2goKSAKK3sKKyAgICBp
ZiAoaGFzRXJyb3IoKSB8fCAhZG9jdW1lbnQoKSB8fCAhZG9jdW1lbnQoKS0+cGFnZSgpKSB7Cisg
ICAgICAgIFhNTFRva2VuaXplcjo6ZmluaXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOworICAgIEFTU0VSVChwYWdlLT53
bWxQYWdlU3RhdGUoKSk7CisgICAgaWYgKCFwYWdlLT53bWxQYWdlU3RhdGUoKS0+aXNEZWNrQWNj
ZXNzaWJsZSgpKSB7CisgICAgICAgIFhNTFRva2VuaXplcjo6ZmluaXNoKCk7CisgICAgICAgIHBh
Z2UtPmdvQmFjaygpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gbm90aWZ5IHRo
ZSBleGlzdGFuY2Ugb2YgdGVtcGxhdGUgdG8gYWxsIHRoZSBjYXJkcyBvZiBjdXJyZW50IGRlY2sK
KyAgICBXTUxIZWxwZXI6OnJlZ2lzdGVyVGVtcGxhdGVUb0NhcmRzKGRvY3VtZW50KCkpOworCisg
ICAgLy8gZGV0ZXJtaW5lIHRoZSBkZXN0aW5hdGlvbiBjYXJkCisgICAgV01MQ2FyZEVsZW1lbnQq
IGNhcmQgPSBXTUxIZWxwZXI6OnNldERlc3RpbmF0aW9uQ2FyZChkb2N1bWVudCgpKTsKKworICAg
IGlmIChjYXJkKSB7CisgICAgICAgIC8vIHNoYWRvdyB0aGUgZGVjay1sZXZlbCBkbyBpZiBuZWVk
ZWQKKyAgICAgICAgY2FyZC0+c2hhZG93RG9FbGVtZW50SWZOZWVkZWQoKTsKKworICAgICAgICAv
L2hhbmRsZSB0aGUgaW50cmluc2ljIGV2ZW50CisgICAgICAgIGNhcmQtPmhhbmRsZUludHJpbnNp
Y0V2ZW50SWZOZWVkZWQoKTsKKworICAgICAgICBjYXJkLT51cGRhdGVUYWJsZUVsZW1lbnQoKTsK
KyAgICB9CisKKyAgICBwYWdlLT53bWxQYWdlU3RhdGUoKS0+c2V0TmVlZENoZWNrRGVja0FjY2Vz
cyhmYWxzZSk7CisKKyAgICByZXBvcnRFcnJvcihOb0Vycm9yKTsKKworICAgIFhNTFRva2VuaXpl
cjo6ZmluaXNoKCk7Cit9CisKK3ZvaWQgV01MVG9rZW5pemVyOjpyZXBvcnRFcnJvcihXTUxFcnJv
ckNvZGUgZXJyb3IpCit7CisgICAgbV9lcnJvckNvZGUgPSBlcnJvcjsKK30KKworYm9vbCBXTUxU
b2tlbml6ZXI6Omhhc0Vycm9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fZXJyb3JDb2RlICE9
IE5vRXJyb3IpOworfQorIAordm9pZCBXTUxUb2tlbml6ZXI6OmhhbmRsZVdNTEVycm9yKFdNTEVy
cm9yQ29kZSBlcnJvckNvZGUpCit7CisgICAgaWYgKGVycm9yQ29kZSAhPSBOb0Vycm9yKQorICAg
ICAgICBtX2Vycm9yQ29kZSA9IGVycm9yQ29kZTsKKworICAgIGNvbnN0IGNoYXIqIGVyck1zZyA9
IDA7CisgICAgc3dpdGNoIChtX2Vycm9yQ29kZSkgeworICAgICAgICBjYXNlIFNhbWVOYW1lRG9F
bGVtZW50c0Vycm9yOgorICAgICAgICAgICAgZXJyTXNnID0gIkVhY2ggZG8gZWxlbWVudCBtdXN0
IGhhdmUgZGlmZmVyZW50IG5hbWUgaW4gb25lIGNhcmQgb3IgdGVtcGxhdGUhXG4iOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTXVsdGlUaW1lckVsZW1lbnRzRXJyb3I6CisgICAg
ICAgICAgICBlcnJNc2cgPSAiT25seSBvbmUgdGltZXIgZWxlbWVudCBpcyBhbGxvd2VkIGluIGEg
Y2FyZCFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aUFjY2Vzc0Vs
ZW1lbnRzRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiT25seSBvbmUgYWNjZXNzIGVsZW1l
bnQgaXMgYWxsb3dlZCBpbiBhIGRlY2shXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgV3JvbmdUYXNrSW5BbmNob3JFbGVtZW50RXJyb3I6CisgICAgICAgICAgICBlcnJNc2cg
PSAiVGhlIHRhc2sgY2FuJ3QgYmUgc3BlY2lmaWVkIGluIGFuIGFuY2hvciBlbGVtZW50IVxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENvbmZsaWN0aW5nRXZlbnRCaW5kaW5n
RXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiQ29uZmxpY3RpbmcgZXZlbnQgYmluZGluZ3Mg
d2l0aGluIGFuIGVsbWVudCFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJ
bnZhbGlkVmFyaWFibGVOYW1lRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhlIHZhcmlh
YmxlIG5hbWUgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIVxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yOgorICAgICAg
ICAgICAgZXJyTXNnID0gIlRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdXNlcyBpbnZhbGlkIHN5bnRh
eCBvciBpcyBwbGFjZWQgaW4gaW52YWxpZCBsb2NhdGlvbiFcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBJbnZhbGlkQ29sdW1uc051bWJlckZvclRhYmxlRXJycm9yOgorICAg
ICAgICAgICAgZXJyTXNnID0gIlRoZSBudW1iZXIgb2YgdGFibGUgY29sdW1ucyBpcyBpbnZhbGlk
IVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIERvY1R5cGVEZWNsYXJhdGlv
bk1pc3NFcnJvcjoKKyAgICAgICAgICAgIGVyck1zZyA9ICJET0NUWVBFIGRlY2xhcmF0aW9uIGlz
IG1pc3NlZCBiZWZvcmUgcm9vdCBlbGVtZW50IVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAKKyAgICBoYW5kbGVF
cnJvcihmYXRhbCwgZXJyTXNnLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKK30KKwor
fSAgLy9uYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogd21sL1dNTFRva2VuaXplci5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHdtbC9XTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxUb2tlbml6
ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
ICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVG9rZW5p
emVyX2gKKyNkZWZpbmUgV01MVG9rZW5pemVyX2gKKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRTdHJp
bmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+CisKKyNpZiBV
U0UoUVhNTFNUUkVBTSkKKyNpbmNsdWRlIDxRdFhtbC9xeG1sc3RyZWFtLmg+CisjZWxzZQorI2lu
Y2x1ZGUgPGxpYnhtbC90cmVlLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHN0cmluZy5oPgorI2Vu
ZGlmCisKKyNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit0eXBlZGVmIGVudW0gV01MRXJyb3JDb2RlIHsgCisgICAgTm9FcnJvciA9IDAsIAorICAgIFNh
bWVOYW1lRG9FbGVtZW50c0Vycm9yLAorICAgIE11bHRpQWNjZXNzRWxlbWVudHNFcnJvciwKKyAg
ICBNdWx0aVRpbWVyRWxlbWVudHNFcnJvciwKKyAgICBXcm9uZ1Rhc2tJbkFuY2hvckVsZW1lbnRF
cnJvciwKKyAgICBDb25mbGljdGluZ0V2ZW50QmluZGluZ0Vycm9yLAorICAgIEludmFsaWRWYXJp
YWJsZU5hbWVFcnJvciwKKyAgICBJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvciwKKyAgICBJ
bnZhbGlkQ29sdW1uc051bWJlckZvclRhYmxlRXJycm9yLAorICAgIERvY1R5cGVEZWNsYXJhdGlv
bk1pc3NFcnJvciwKK30gV01MRXJyb3JDb2RlOworCitjbGFzcyBXTUxUb2tlbml6ZXIgOiBwdWJs
aWMgWE1MVG9rZW5pemVyIHsKK3B1YmxpYzoKKyAgICBXTUxUb2tlbml6ZXIoRG9jdW1lbnQqLCBG
cmFtZVZpZXcqID0gMCk7CisgICAgfldNTFRva2VuaXplcigpOworCisgICAgLy8gZnJvbSBUb2tl
bml6ZXIKKyAgICB2aXJ0dWFsIGJvb2wgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9v
bCBhcHBlbmREYXRhID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKTsKKyAgICAK
KyNpZiBVU0UoUVhNTFNUUkVBTSkKKyAgICB2b2lkIFdNTFBhcnNlU3RhcnRFbGVtZW50KCk7Cisg
ICAgdm9pZCBXTUxQYXJzZUVuZEVsZW1lbnQoKTsKKyNlbmRpZgorCisgICAgdm9pZCByZXBvcnRF
cnJvcihXTUxFcnJvckNvZGUpOworICAgIGJvb2wgaGFzRXJyb3IoKSBjb25zdDsKKyAgICB2b2lk
IGhhbmRsZVdNTEVycm9yKFdNTEVycm9yQ29kZSBjb2RlID0gTm9FcnJvcik7CisKKyAgICB2b2lk
IHVwZGF0ZUF0dHJzSWZOZWVkZWQoRWxlbWVudCosIGNvbnN0IFN0cmluZyYpOworcHJpdmF0ZToK
KyAgICBXTUxFcnJvckNvZGUgbV9lcnJvckNvZGU7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIFdNTFRva2VuaXplcl9oCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24709</attachid>
            <date>2008-10-28 04:03:45 -0700</date>
            <delta_ts>2008-11-12 11:17:27 -0800</delta_ts>
            <desc>WebCore touched by WML</desc>
            <filename>webcore_changes_for_wml_37922.patch</filename>
            <type>text/plain</type>
            <size>78864</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAk
KFdlYkNvcmUpL3htbCBcCisgICAgJChXZWJDb3JlKS93bWwgXAogICAgICQoV2ViQ29yZSkvc3Zn
IFwKICMKIApAQCAtMzg5LDYgKzM5MCw3IEBAIGFsbCA6IFwKICAgICBEb2NUeXBlU3RyaW5ncy5j
cHAgXAogICAgIEhUTUxFbnRpdHlOYW1lcy5jIFwKICAgICBIVE1MTmFtZXMuY3BwIFwKKyAgICBX
TUxOYW1lcy5jcHAgXAogICAgIEpTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCBcCiAgICAg
U1ZHRWxlbWVudEZhY3RvcnkuY3BwIFwKICAgICBTVkdOYW1lcy5jcHAgXApAQCAtNTA0LDcgKzUw
Niw3IEBAIFhQYXRoR3JhbW1hci5jcHAgOiB4bWwvWFBhdGhHcmFtbWFyLnkgJCgKIAogIyB1c2Vy
IGFnZW50IHN0eWxlIHNoZWV0cwogCi1VU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9ICQoV2ViQ29y
ZSkvY3NzL2h0bWw0LmNzcyAkKFdlYkNvcmUpL2Nzcy9xdWlya3MuY3NzICQoV2ViQ29yZSkvY3Nz
L3ZpZXctc291cmNlLmNzcyAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIAorVVNFUl9BR0VOVF9TVFlM
RV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtz
LmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3MgJChXZWJDb3JlKS9jc3Mvc3ZnLmNz
cyAkKFdlYkNvcmUpL2Nzcy93bWwuY3NzCiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIDogY3NzL21h
a2UtY3NzLWZpbGUtYXJyYXlzLnBsICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpCiAJcGVybCAk
PCAkQCBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVF
VFMpCiAKQEAgLTU0MCw2ICs1NDIsOSBAQCBlbmRpZgogWE1MTmFtZXMuY3BwIDogZG9tL21ha2Vf
bmFtZXMucGwgeG1sL3htbGF0dHJzLmluCiAJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3Nj
cmlwdHMgJDwgLS1hdHRycyAkKFdlYkNvcmUpL3htbC94bWxhdHRycy5pbgogCitXTUxOYW1lcy5j
cHAgOiBkb20vbWFrZV9uYW1lcy5wbCB3bWwvV01MVGFnTmFtZXMuaW4gd21sL1dNTEF0dHJpYnV0
ZU5hbWVzLmluCisJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS10YWdz
ICQoV2ViQ29yZSkvd21sL1dNTFRhZ05hbWVzLmluIC0tYXR0cnMgJChXZWJDb3JlKS93bWwvV01M
QXR0cmlidXRlTmFtZXMuaW4gLS1vdXRwdXQgLgorCiAjIC0tLS0tLS0tCiAKIGlmZXEgKCQoZmlu
ZHN0cmluZyBFTkFCTEVfU1ZHLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkcpCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtNjUsNiArNjUsNyBAQCB3aW4zMi1nKysgewogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9J
Q09OREFUQUJBU0U9Lik6IERFRklORVMgKz0gRU5BQkxFX0lDT05EQVRBQkFTRT0xCiAhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YUEFUSD0xCiAj
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMgKz0gRU5BQkxFX1hCTD0x
CishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dNTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV01M
PTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPS4pOiBERUZJTkVTICs9IEVOQUJMRV9T
Vkc9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0ZPTlRTPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9TVkdfRk9OVFM9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkdfRklMVEVS
Uz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZJTFRFUlM9MQpAQCAtMTU4LDYgKzE1OSw3IEBA
IElOQ0xVREVQQVRIICs9ICAkJFBXRCBcCiAgICAgICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9y
IFwKICAgICAgICAgICAgICAgICAkJFBXRC94bWwgXAogICAgICAgICAgICAgICAgICQkUFdEL2h0
bWwgXAorICAgICAgICAgICAgICAgICQkUFdEL3dtbCBcCiAgICAgICAgICAgICAgICAgJCRQV0Qv
YmluZGluZ3MvanMgXAogICAgICAgICAgICAgICAgICQkUFdEL3N2ZyBcCiAgICAgICAgICAgICAg
ICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgXApAQCAtMTMyNiw2ICsxMzI4LDUyIEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19K
QVZBU0NSSVBUICs9IEVOQUJMRV9YQkw9MQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
V01MPTEpIHsKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgd21sL1dNTERvY3VtZW50LmNwcCBc
CisgICAgICAgIHdtbC9XTUxUb2tlbml6ZXIuY3BwIFwKKyAgICAgICAgd21sL1dNTEVsZW1lbnQu
Y3BwIFwKKyAgICAgICAgd21sL1dNTENhcmRFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxB
RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MQW5jaG9yRWxlbWVudC5jcHAgXAorICAgICAg
ICB3bWwvV01MVGFza0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFByZXZFbGVtZW50LmNw
cCBcCisgICAgICAgIHdtbC9XTUxHb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFJlZnJl
c2hFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBcCisg
ICAgICAgIHdtbC9XTUxTZXR2YXJFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxFbGVtZW50
RmFjdG9yeS5jcHAgXAorICAgICAgICB3bWwvV01MUGFnZVN0YXRlLmNwcCBcCisgICAgICAgIHdt
bC9XTUxEb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFRleHQuY3BwIFwKKyAgICAgICAg
d21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyLmNwcCBcCisgICAgICAgIHdtbC9XTUxUaW1lckVsZW1lbnQuY3BwIFwKKyAgICAg
ICAgd21sL1dNTEhlbHBlci5jcHAgXAorICAgICAgICB3bWwvV01MQWNjZXNzRWxlbWVudC5jcHAg
XAorICAgICAgICB3bWwvV01MU2VsZWN0RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MT3B0
aW9uRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW5wdXRFbGVtZW50LmNwcCBcCisgICAg
ICAgIHdtbC9XTUxUYWJsZUVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTEltYWdlRWxlbWVu
dC5jcHAgXAorICAgICAgICB3bWwvV01MUEVsZW1lbnQuY3BwCisKKyAgICBGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfV01MPTEKKyAgICBERUZJTkVTICs9IEVOQUJMRV9XQlhN
TD0xCisgICAgTElCUyArPSAtbHdieG1sMiAKKworICAgIFdNTF9OQU1FUyA9ICQkUFdEL3dtbC9X
TUxUYWdOYW1lcy5pbgorCisgICAgd21sbmFtZXNfYS5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9XTUxOYW1lcy5jcHAKKyAgICB3bWxuYW1lc19hLmNvbW1hbmRzID0gcGVybCAtSSQk
UFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS10YWdzICQkUFdE
L3dtbC9XTUxUYWdOYW1lcy5pbiAtLWF0dHJzICQkUFdEL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5p
biAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAtLW91dHB1dCAkJEdFTkVSQVRF
RF9TT1VSQ0VTX0RJUgorICAgIHdtbG5hbWVzX2EuaW5wdXQgPSBXTUxfTkFNRVMKKyAgICB3bWxu
YW1lc19hLmRlcGVuZGVuY3lfdHlwZSA9IFRZUEVfQworICAgIHdtbG5hbWVzX2EuQ09ORklHID0g
dGFyZ2V0X3ByZWRlcHMKKyAgICB3bWxuYW1lc19hLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9T
T1VSQ0VTCisgICAgd21sbmFtZXNfYS5jbGVhbiA9ICR7UU1BS0VfRklMRV9PVVR9ICR7UU1BS0Vf
VkFSX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUl9TTEFTSH1XTUxOYW1lcy5oCisgICAgYWRkRXh0cmFD
b21waWxlcih3bWxuYW1lc19hKQorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEp
IHsKICAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfU1ZHPTEKIApAQCAt
MTcxMCw2ICsxNzU4LDggQEAgU09VUkNFUyArPSBcCiAgICAgICAgIHN2Z2VsZW1lbnR3cmFwcGVy
X2hlYWRlci52YXJpYWJsZV9vdXQgPSBHRU5FUkFURURfRklMRVMKICAgICAgICAgYWRkRXh0cmFD
b21waWxlcihzdmdlbGVtZW50d3JhcHBlcl9oZWFkZXIpCiAKKworCiAgICAgICAgICMgR0VORVJB
VE9SIDUtRDoKICAgICAgICAgeGxpbmtuYW1lcy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VT
X0RJUi9YTGlua05hbWVzLmNwcAogICAgICAgICB4bGlua25hbWVzLmNvbW1hbmRzID0gcGVybCAt
SSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS1hdHRycyAk
JFBXRC9zdmcveGxpbmthdHRycy5pbiAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVc
IiAtLW91dHB1dERpciAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUgpAQCAtMTg1MCw3ICsxOTAwLDcg
QEAgYWRkRXh0cmFDb21waWxlcihjb2xvcmRhdGEpCiAKICMgR0VORVJBVE9SIDk6CiBzdHlsZXNo
ZWV0cy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwCi1zdHlsZXNoZWV0cy5jb21tYW5kcyA9IHBlcmwgJCRQV0QvY3NzL21ha2UtY3Nz
LWZpbGUtYXJyYXlzLnBsIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiICQkR0VO
RVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzLmggJCRHRU5FUkFURURfU09V
UkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAkJFBXRC9jc3MvaHRtbDQuY3Nz
ICQkUFdEL2Nzcy9xdWlya3MuY3NzICQkUFdEL2Nzcy9zdmcuY3NzICQkUFdEL2Nzcy92aWV3LXNv
dXJjZS5jc3MKK3N0eWxlc2hlZXRzLmNvbW1hbmRzID0gcGVybCAkJFBXRC9jc3MvbWFrZS1jc3Mt
ZmlsZS1hcnJheXMucGwgLS1wcmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJCRHRU5F
UkFURURfU09VUkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHMuaCAkJEdFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQkUFdEL2Nzcy9odG1sNC5jc3Mg
JCRQV0QvY3NzL3F1aXJrcy5jc3MgJCRQV0QvY3NzL3N2Zy5jc3MgJCRQV0QvY3NzL3ZpZXctc291
cmNlLmNzcyAkJFBXRC9jc3Mvd21sLmNzcwogc3R5bGVzaGVldHMuaW5wdXQgPSBTVFlMRVNIRUVU
U19FTUJFRAogc3R5bGVzaGVldHMuQ09ORklHID0gdGFyZ2V0X3ByZWRlcHMKIHN0eWxlc2hlZXRz
LnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9TT1VSQ0VTCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTI1LDYg
KzUyNSw2NCBAQAogCQk0QjZGQTZGNzBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2RkE2
RjYwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCAqLzsgfTsKIAkJNEI4QUY0
QUEwQjFDRTAyQjAwNjg3NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI4QUY0QTkwQjFDRTAyQjAwNjg3
NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRCQUU5NUIxMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0
b3JEZWxldGVBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCQUU5NUIwMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JEZWxldGVBY3Rpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0QzZCOTk0
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxNjBFNTJFMzczMDA0ODdCQjcg
LyogV01MQWNjZXNzRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTRGMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVu
dC5oICovOyB9OworCQk0QzZCOTk1MDBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MTgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NTEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxOTBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1l
bnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk1MzBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUIwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQzBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmli
dXRlTmFtZXMuaW4gKi87IH07CisJCTRDNkI5OTU1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLzsgfTsKKwkJ
NEM2Qjk5NTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFFMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxCcndDb250ZXh0LmggKi87IH07CisJCTRDNkI5OTU3MEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxDYXJkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkxRjBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuY3Bw
ICovOyB9OworCQk0QzZCOTk1ODBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTIwMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1OTBFNTJF
MzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3Vt
ZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
MjBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NUIwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9F
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1
RDBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyNTBFNTJFMzczMDA0ODdCQjcgLyogV01M
RWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTVFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZC
OTkyNjBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1RjBF
NTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCAqLzsgfTsKKwkJNEM2Qjk5NjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
OTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjIw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdv
RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2MzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovOyB9OworCQk0QzZCOTk2NDBF
NTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyQzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVy
LmggKi87IH07CisJCTRDNkI5OTY1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
MkQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5
OTY2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxJbWFnZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NjcwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkyRjBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNw
cCAqLzsgfTsKKwkJNEM2Qjk5NjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzAw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2OTBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMxMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovOyB9OworCQk0QzZCOTk2QTBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzMjBFNTJFMzczMDA0ODdC
QjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi87IH07CisJCTRDNkI5OTZCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxP
cHRpb25FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTM0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTZEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzNTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2RTBFNTJFMzczMDA0
ODdCQjcgLyogV01MUEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTM2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oICov
OyB9OworCQk0QzZCOTk2RjBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkz
NzBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5jcHAgKi87IH07CisJCTRD
NkI5OTcwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzODBFNTJFMzczMDA0
ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk3MTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QzZCOTkzQTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2
Qjk5NzMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNCMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTc0MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJl
c2hFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxl
Y3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRDNkI5OTNEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5NzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNFMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc3MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxT
ZXR2YXJFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFNldHZhckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTc5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTdBMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
YWJsZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5N0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRh
Z05hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi87IH07CisJCTRD
NkI5OTdDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NDBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3RDBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGFza0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTQ1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5o
ICovOyB9OworCQk0QzZCOTk3RTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk3RjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NzBFNTJFMzczMDA0
ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTgwMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTQ4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5ODEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxUZXh0LmggKi87IH07CisJCTRDNkI5OTgyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
aW1lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgKi87
IH07CisJCTRDNkI5OTgzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTRCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5ODQwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5p
emVyLmNwcCAqLzsgfTsKKwkJNEM2Qjk5ODUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXpl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
NEQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovOyB9OworCQk0Q0Y2RDMwMTBF
NTU2RjRDMDBFRDNGNzQgLyogV01MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNENBM0FCNDkwRTU1NkYyNDAwRTlDMEMwIC8qIFdNTE5hbWVz
LmNwcCAqLzsgfTsKKwkJNENGNkQzMDIwRTU1NkY0RDAwRUQzRjc0IC8qIFdNTE5hbWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Q0EzQUI0ODBFNTU2
RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuaCAqLzsgfTsKIAkJNEUxOTU5MjEwQTM5REFCQTAwMjIw
RkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTFGMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1
cmVOYW1lcy5jcHAgKi87IH07CiAJCTRFMTk1OTIyMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZl
YXR1cmVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEUxOTU5MjAwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi87IH07
CiAJCTRFMTk1OTI5MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTIzMEEzOURBQ0MwMDIy
MEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCAqLzsgfTsKQEAgLTUyNzEsNiArNTMyOSw2NSBAQAogCQk0
QjZGQTZGNjBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hcnRSZXBsYWNlQ0YuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0QjhBRjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJk
QWNjZXNzUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJBRTk1QjAw
QjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFZGl0b3JEZWxldGVBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNEM2Qjk5MTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFjY2Vzc0VsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxNzBFNTJFMzczMDA0
ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV01MQWNjZXNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTkxODBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxBRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
QW5jaG9yRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFC
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTFDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBdHRyaWJ1dGVOYW1lcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV01MQXR0cmlidXRlTmFtZXMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxCcndD
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUUwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTEJyd0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MUYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxDYXJkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQ2FyZEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXTUxEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIy
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV01MRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MRG9FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRG9FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTI1MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5Mjcw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRWxlbWVudEZh
Y3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjkwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEdvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MR29FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV01MR29FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEhlbHBlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTJDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxw
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEhlbHBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyRDBFNTJFMzczMDA0ODdCQjcgLyogV01M
SW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxJbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTky
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5MkYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW5wdXRFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V01MSW5wdXRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMx
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMyMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTkzMzBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT3B0aW9uRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM0MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXTUxPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
NkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MUEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkzNjBFNTJFMzczMDA0ODdCQjcgLyogV01MUEVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0
ZmllbGRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxQb3N0ZmllbGRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBvc3RmaWVsZEVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxQcmV2
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNBMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MUHJldkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5M0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxSZWZyZXNoRWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxSZWZyZXNoRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
UmVmcmVzaEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0Qw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MU2VsZWN0RWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzRjBFNTJFMzczMDA0ODdC
QjcgLyogV01MU2V0dmFyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MU2V0dmFyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxTZXR2YXJFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJs
ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRh
YmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQyMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdNTFRhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFdNTFRhZ05hbWVzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTk0NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDUwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhc2tFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUYXNr
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0NjBFNTJFMzcz
MDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTk0NzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDgwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdNTFRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0OTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV01MVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0QTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTk0QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
VG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
QTNBQjQ4MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV01MTmFtZXMuaDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OworCQk0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdNTE5hbWVzLmNwcDsgcGF0aCA9IC4uL1dl
YktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTRDREU1NEVDMEU1NTc5NzgwMDg5RTI2QyAvKiB3
bWwuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB3bWwuY3NzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0RTE5NTkxRjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFt
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRmVhdHVy
ZU5hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjAwQTM5REFC
QTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUZlYXR1cmVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RTE5NTkyMzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02NTg4LDcgKzY3MDUsNyBAQAogCQk5M0VFQzFGNzA5QzI4Nzc3
MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2hlZWxF
dmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjZFMDlDMzIxODAw
MEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbnZhc1BhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzU3R5bGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJOTNGMTlCMTkwODI0
NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gSW5m
by5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUuZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMxQTA1NThDQzVDMDA4
MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliaWN1
Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7IHNvdXJjZVRyZWUg
PSAiPGFic29sdXRlPiI7IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFCOCAvKiBDb2RlR2Vu
ZXJhdG9yLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0
b3IucG07IHBhdGggPSBzY3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04OTYwLDYgKzkwNzcsNyBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFD
MDcgLyogV2ViS2l0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk0QzZCOTkxNTBFNTJFMzczMDA0ODdCQjcgLyogd21sICovLAogCQkJCTY1Qzk3QUYyMDhF
QTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEz
N0YgLyogV2ViQ29yZVByZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAv
KiBEZXJpdmVkU291cmNlcy5tYWtlICovLApAQCAtOTMyOCw2ICs5NDQ2LDY5IEBACiAJCQl0YWJX
aWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTRDNkI5OTE1MEU1MkUzNzMwMDQ4
N0JCNyAvKiB3bWwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTRDNkI5OTE2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmNwcCAqLywK
KwkJCQk0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovLAor
CQkJCTRDNkI5OTE4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5
OTFCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluICovLAorCQkJCTRDNkI5
OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLywKKwkJCQk0QzZCOTkx
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQnJ3Q29udGV4dC5oICovLAorCQkJCTRDNkI5OTFGMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MjAwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjEwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyMjBFNTJFMzczMDA0
ODdCQjcgLyogV01MRG9jdW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcg
LyogV01MRG9FbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyNDBFNTJFMzczMDA0ODdCQjcgLyog
V01MRG9FbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVs
ZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTI2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
LmggKi8sCisJCQkJNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5
LmNwcCAqLywKKwkJCQk0QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCAqLywKKwkJCQk0QzZCOTkyOTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNw
cCAqLywKKwkJCQk0QzZCOTkyQTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmggKi8s
CisJCQkJNEM2Qjk5MkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5jcHAgKi8sCisJCQkJ
NEM2Qjk5MkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5oICovLAorCQkJCTRDNkI5OTJE
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTJF
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyRjBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzMDBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi8sCisJCQkJNEM2
Qjk5MzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oICovLAor
CQkJCTRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCAqLywK
KwkJCQk0QzZCOTkzNDBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5oICovLAor
CQkJCTRDNkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTM4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggKi8sCisJCQkJ
NEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTkzQTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTkzQjBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTNEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTk0MDBFNTJFMzczMDA0ODdCQjcgLyogV01MU2V0dmFyRWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8sCisJCQkJNEM2Qjk5NDQw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhc2tFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NTBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0NjBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NzBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5NDgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwICovLAorCQkJCTRDNkI5OTQ5MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZXh0LmggKi8sCisJCQkJNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRpbWVyRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5NEIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRpbWVyRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTRDMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUb2tlbml6ZXIuY3BwICovLAorCQkJCTRDNkI5OTREMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
b2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gd21sOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NDUyLDYgKzk2
MzMsOCBAQAogCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0Q0EzQUI0ODBF
NTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuaCAqLywKKwkJCQk0Q0EzQUI0OTBFNTU2RjI0MDBF
OUMwQzAgLyogV01MTmFtZXMuY3BwICovLAogCQkJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAv
KiBDaGFyc2V0RGF0YS5jcHAgKi8sCiAJCQkJNjU2NTgxQUQwOUQxNEVFNjAwMEU2MUQ3IC8qIENv
bG9yRGF0YS5jICovLAogCQkJCTY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFy
LmNwcCAqLywKQEAgLTEzNDU1LDYgKzEzNjM4LDcgQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYz
NUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNENERTU0RUMwRTU1Nzk3ODAwODlFMjZDIC8qIHdtbC5jc3MgKi8sCiAJCQkJQTgwRTZDREEw
QTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIuaCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBC
MTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJCQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovLApAQCAtMTYxOTQsNyArMTYzNzgsNiBAQAogCQkw
ODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJC
MTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldl
YkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKIAkJCWhh
c1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xp
c2gsCkBAIC0xNjI2Nyw2ICsxNjQ1MCw4IEBACiAJCQkJODUxMzZDQTgwQUVENjY1OTAwRjkwQTNE
IC8qIHdlc3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBD
MDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJ
MUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNl
cyAqLywKKwkJCQk0QzZCOTk1NDBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmlidXRlTmFtZXMu
aW4gaW4gUmVzb3VyY2VzICovLAorCQkJCTRDNkI5OTdCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
YWdOYW1lcy5pbiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMzU0LDYgKzM1Niw5IEBAIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0U3R5
bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0eWxlOwogc3RhdGljIENTU1J1
bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwogc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRWaWV3
U291cmNlU3R5bGU7CisjaWYgRU5BQkxFKFdNTCkKK3N0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0
V21sU3R5bGUgPSAwOworI2VuZGlmCiBzdGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVs
dFN0eWxlU2hlZXQ7CiAKIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzX3N0eWxlTm90
WWV0QXZhaWxhYmxlOwpAQCAtNTI1LDYgKzUzMCwxMyBAQCBzdGF0aWMgdm9pZCBsb2FkVmlld1Nv
dXJjZVN0eWxlKCkKICAgICBBU1NFUlQoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUpOwogICAgIGRl
ZmF1bHRWaWV3U291cmNlU3R5bGUgPSBuZXcgQ1NTUnVsZVNldDsKICAgICBkZWZhdWx0Vmlld1Nv
dXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZh
bCgpKTsKKworI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKCFkZWZhdWx0V21sU3R5bGUpIHsKKyAg
ICAgICAgZGVmYXVsdFdtbFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7CisgICAgICAgIGRlZmF1bHRX
bWxTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHdtbFVzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZih3bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7Cisg
ICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xh
cmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQpAQCAtOTkwLDYgKzEwMDIs
MTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMoaW50JgogICAgICAgICA/
IGRlZmF1bHRQcmludFN0eWxlIDogZGVmYXVsdFN0eWxlOwogICAgIG1hdGNoUnVsZXModXNlckFn
ZW50U3R5bGVTaGVldCwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwogCisjaWYgRU5BQkxFKFdN
TCkKKyAgICBpZiAobV9jaGVja2VyLm1fZG9jdW1lbnQtPmlzV01MRG9jdW1lbnQoKSkKKyAgICAg
ICAgbWF0Y2hSdWxlcyhkZWZhdWx0V21sU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsK
KyNlbmRpZgorCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhl
IHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgogICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFy
c2luZykKICAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFSdWxl
LCBsYXN0VUFSdWxlKTsKQEAgLTEwNTAsNiArMTA2NywxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQor
ICAgIGlmIChtX2NoZWNrZXIubV9kb2N1bWVudC0+aXNXTUxEb2N1bWVudCgpICYmICFkZWZhdWx0
V21sU3R5bGUpIHsKKyAgICAgICAgZGVmYXVsdFdtbFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7Cisg
ICAgICAgIGRlZmF1bHRXbWxTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHdt
bFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih3bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNj
cmVlbkV2YWwoKSk7CisgICAgfQorI2VuZGlmCisKICAgICBpbnQgZmlyc3RVQVJ1bGUgPSAtMSwg
bGFzdFVBUnVsZSA9IC0xOwogICAgIGludCBmaXJzdFVzZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVs
ZSA9IC0xOwogICAgIGludCBmaXJzdEF1dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAt
MTsKSW5kZXg6IFdlYkNvcmUvY3NzL3dtbC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
d21sLmNzcwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL3dtbC5jc3MJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTUxIEBACisvKgorICogVGhlIGRlZmF1bHQgc3R5bGUgc2hlZXQgdXNlZCB0
byByZW5kZXIgSFRNTC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAg
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCitAbmFtZXNwYWNlICJodHRwOi8vd3d3Lndh
cGZvcnVtLm9yZy8iOworCit3bWwgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKKy8qIGNoaWxk
cmVuIG9mIHRoZSA8aGVhZD4gZWxlbWVudCBhbGwgaGF2ZSBkaXNwbGF5Om5vbmUgKi8KK2hlYWQg
eworICAgIGRpc3BsYXk6IG5vbmUKK30KKworbWV0YSB7CisgICAgZGlzcGxheTogbm9uZQorfQor
CithY2Nlc3MgeworICAgIGRpc3BsYXk6IG5vbmUKK30KKworLyogZ2VuZXJpYyBibG9jay1sZXZl
bCBlbGVtZW50cyAqLworCitjYXJkIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46
IDhweAorfQorCitwIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDEuMF9fcWVt
IDBweAorfQorCitkaXYgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKK2xheWVyIHsKKyAgICBk
aXNwbGF5OiBibG9jaworfQorCittYXJxdWVlIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgICAgb3ZlcmZsb3c6IC13ZWJraXQtbWFycXVlZQorfQorCithZGRyZXNzIHsKKyAgICBkaXNw
bGF5OiBibG9jaworfQorCitibG9ja3F1b3RlIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBt
YXJnaW46IDFfX3FlbSA0MHB4IDFlbSA0MHB4Cit9CisKK3EgeworICAgIGRpc3BsYXk6IGlubGlu
ZQorfQorCitxOmJlZm9yZSB7CisgICAgY29udGVudDogJyInCisgICAgLyogRklYTUU6IGNvbnRl
bnQ6IG9wZW4tcXVvdGU7ICovCit9CisKK3E6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICciJworICAg
IC8qIEZJWE1FOiBjb250ZW50OiBjbG9zZS1xdW90ZTsgKi8KK30KKworY2VudGVyIHsKKyAgICBk
aXNwbGF5OiBibG9jazsKKyAgICAvKiBzcGVjaWFsIGNlbnRlcmluZyB0byBiZSBhYmxlIHRvIGVt
dWxhdGUgdGhlIGh0bWw0L25ldHNjYXBlIGJlaGF2aW91ciAqLworICAgIHRleHQtYWxpZ246IC13
ZWJraXQtY2VudGVyCit9CisKK2hyIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46
IDAuNWVtIGF1dG87CisgICAgYm9yZGVyLXN0eWxlOiBpbnNldDsKKyAgICBib3JkZXItd2lkdGg6
IDFweAorfQorCittYXAgeworICAgIGRpc3BsYXk6IGlubGluZQorfQorCisvKiB0YWJsZXMgKi8K
KwordGFibGUgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGJvcmRlci1jb2xsYXBzZTogc2Vw
YXJhdGU7CisgICAgYm9yZGVyLXNwYWNpbmc6IDJweDsKKyAgICBib3JkZXItY29sb3I6IGdyYXkK
K30KKwordGFibGVbYWxpZ249ImNlbnRlciJdIHsKKyAgICBtYXJnaW4tbGVmdDogYXV0bzsKKyAg
ICBtYXJnaW4tcmlnaHQ6IGF1dG8KK30KKwordGhlYWQgeworICAgIGRpc3BsYXk6IHRhYmxlLWhl
YWRlci1ncm91cDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICAgIGJvcmRlci1jb2xv
cjogaW5oZXJpdAorfQorCit0Ym9keSB7CisgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOwor
ICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0Cit9
CisKK3Rmb290IHsKKyAgICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7CisgICAgdmVydGlj
YWwtYWxpZ246IG1pZGRsZTsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQKK30KKworLyogZm9y
IHRhYmxlcyB3aXRob3V0IHRhYmxlIHNlY3Rpb24gZWxlbWVudHMgKGNhbiBoYXBwZW4gd2l0aCBY
SFRNTCBvciBkeW5hbWljYWxseSBjcmVhdGVkIHRhYmxlcykgKi8KK3RhYmxlID4gdHIgeworICAg
IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKK2NvbCB7CisgICAgZGlzcGxheTogdGFibGUt
Y29sdW1uCit9CisKK2NvbGdyb3VwIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXAK
K30KKwordHIgeworICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKKyAgICB2ZXJ0aWNhbC1hbGlnbjog
aW5oZXJpdDsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQKK30KKwordGQsIHRoIHsKKyAgICBk
aXNwbGF5OiB0YWJsZS1jZWxsOworICAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0Cit9CisKK3Ro
IHsKKyAgICBmb250LXdlaWdodDogYm9sZAorfQorCitjYXB0aW9uIHsKKyAgICBkaXNwbGF5OiB0
YWJsZS1jYXB0aW9uOworICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2VudGVyCit9CisKKy8qIGxp
c3RzICovCisKK3VsLCBtZW51LCBkaXIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpc3Qt
c3R5bGUtdHlwZTogZGlzYzsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFlbSAwOworICAgIC13ZWJr
aXQtcGFkZGluZy1zdGFydDogNDBweAorfQorCitvbCB7CisgICAgZGlzcGxheTogYmxvY2s7Cisg
ICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOworICAgIG1hcmdpbjogMV9fcWVtIDAgMWVtIDA7
CisgICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiA0MHB4Cit9CisKK2xpIHsKKyAgICBkaXNwbGF5
OiBsaXN0LWl0ZW0KK30KKwordWwgdWwsIG9sIHVsIHsKKyAgICBsaXN0LXN0eWxlLXR5cGU6IGNp
cmNsZQorfQorCitvbCBvbCB1bCwgb2wgdWwgdWwsIHVsIG9sIHVsLCB1bCB1bCB1bCB7CisgICAg
bGlzdC1zdHlsZS10eXBlOiBzcXVhcmUKK30KKworZGQgeworICAgIGRpc3BsYXk6IGJsb2NrOwor
ICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiA0MHB4Cit9CisKK2RsIHsKKyAgICBkaXNwbGF5OiBi
bG9jazsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFlbSAwCit9CisKK2R0IHsKKyAgICBkaXNwbGF5
OiBibG9jaworfQorCitvbCB1bCwgdWwgb2wsIHVsIHVsLCBvbCBvbCB7CisgICAgbWFyZ2luLXRv
cDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwCit9CisKKy8qIGZvcm0gZWxlbWVudHMgKi8KKwor
Zm9ybSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luOiAwX19xZW0gMCAxZW0gMAor
fQorCitsYWJlbCB7CisgICAgY3Vyc29yOiBkZWZhdWx0OworfQorCitsZWdlbmQgeworICAgIGRp
c3BsYXk6IGJsb2NrOworICAgIHBhZGRpbmctbGVmdDogMnB4OworICAgIHBhZGRpbmctcmlnaHQ6
IDJweDsKKyAgICBib3JkZXI6IG5vbmUKK30KKworZmllbGRzZXQgeworICAgIGRpc3BsYXk6IGJs
b2NrOworICAgIG1hcmdpbi1sZWZ0OiAycHg7CisgICAgbWFyZ2luLXJpZ2h0OiAycHg7CisgICAg
cGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtOworICAgIGJvcmRlcjogMnB4IGdyb292ZSBU
aHJlZURGYWNlCit9CisKK2J1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247
Cit9CisKK2RvIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyYXk7Cit9CisKK2lucHV0
LCB0ZXh0YXJlYSwga2V5Z2VuLCBzZWxlY3QsIGJ1dHRvbiwgaXNpbmRleCB7CisgICAgbWFyZ2lu
OiAwX19xZW07CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOworICAgIGNvbG9yOiBp
bml0aWFsOworICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CisgICAgd29yZC1zcGFjaW5nOiBu
b3JtYWw7CisgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0LXRyYW5zZm9ybTogbm9u
ZTsKKyAgICB0ZXh0LWluZGVudDogMDsKKyAgICB0ZXh0LXNoYWRvdzogbm9uZTsKKyAgICBkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7CisgICAgdGV4dC1hbGlnbjogLXdlYmtpdC1hdXRvOworfQorCitp
bnB1dFt0eXBlPSJoaWRkZW4iXSB7CisgICAgZGlzcGxheTogbm9uZQorfQorCitpbnB1dCwgaW5w
dXRbdHlwZT0icGFzc3dvcmQiXSwgaW5wdXRbdHlwZT0ic2VhcmNoIl0sIGlzaW5kZXggeworICAg
IC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOworICAgIHBhZGRpbmc6IDFweDsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IDJweCBpbnNldDsKKyAgICAtd2Vi
a2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0
OworICAgIGN1cnNvcjogYXV0bzsKK30KKworaW5wdXRbdHlwZT0ic2VhcmNoIl0geworICAgIC13
ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQ7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBi
b3JkZXItYm94OworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2Fu
Y2VsLWJ1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1jYW5jZWwt
YnV0dG9uOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3Jh
dGlvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1kZWNvcmF0aW9uOwor
fQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0
aW9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3Jh
dGlvbjsKK30KKworaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMt
YnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0
dG9uOworfQorCit0ZXh0YXJlYSB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAg
ICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiB0ZXh0OworICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CisgICAgcmVzaXplOiBh
dXRvOworICAgIGN1cnNvcjogYXV0bzsKK30KKworaW5wdXRbdHlwZT0icGFzc3dvcmQiXSB7Cisg
ICAgLXdlYmtpdC10ZXh0LXNlY3VyaXR5OiBkaXNjICFpbXBvcnRhbnQ7Cit9CisKK2lucHV0W3R5
cGU9ImhpZGRlbiJdLCBpbnB1dFt0eXBlPSJpbWFnZSJdLCBpbnB1dFt0eXBlPSJmaWxlIl0gewor
ICAgIC13ZWJraXQtYXBwZWFyYW5jZTogaW5pdGlhbDsKKyAgICBwYWRkaW5nOiBpbml0aWFsOwor
ICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworfQor
CitpbnB1dFt0eXBlPSJmaWxlIl0geworICAgIC13ZWJraXQtYm94LWFsaWduOiBiYXNlbGluZTsK
K30KKworaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZB
RkZCRCAhaW1wb3J0YW50OworICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZSAhaW1wb3J0YW50Owor
fQorCitpbnB1dFt0eXBlPSJyYWRpbyJdLCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBt
YXJnaW46IDNweCAwLjVleDsKKyAgICBwYWRkaW5nOiBpbml0aWFsOworICAgIGJhY2tncm91bmQt
Y29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworfQorCitpbnB1dFt0eXBlPSJi
dXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0
W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24geworICAgIC13ZWJraXQt
YXBwZWFyYW5jZTogcHVzaC1idXR0b247CisgICAgd2hpdGUtc3BhY2U6IHByZQorfQorCitpbnB1
dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0
Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRv
biB7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgY3Vyc29yOiBkZWZhdWx0OworICAgIGNvbG9yOiBCdXR0b25UZXh0OworICAgIHBh
ZGRpbmc6IDJweCA2cHggM3B4IDZweDsKKyAgICBib3JkZXI6IDJweCBvdXRzZXQgQnV0dG9uRmFj
ZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOworICAgIC13ZWJraXQtYm94LXNp
emluZzogYm9yZGVyLWJveAorfQorCitpbnB1dFt0eXBlPSJyYW5nZSJdIHsKKyAgICAtd2Via2l0
LWFwcGVhcmFuY2U6IHNsaWRlci1ob3Jpem9udGFsOworICAgIHBhZGRpbmc6IGluaXRpYWw7Cisg
ICAgYm9yZGVyOiBpbml0aWFsOworICAgIG1hcmdpbjogMnB4OworfQorCitpbnB1dFt0eXBlPSJy
YW5nZSJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBz
bGlkZXJ0aHVtYi1ob3Jpem9udGFsOworfQorCitpbnB1dFt0eXBlPSJidXR0b24iXTpkaXNhYmxl
ZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06ZGlzYWJsZWQsIGlucHV0W3R5cGU9InJlc2V0Il06ZGlz
YWJsZWQsIGlucHV0W3R5cGU9ImZpbGUiXTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1i
dXR0b24sIGJ1dHRvbjpkaXNhYmxlZCwgc2VsZWN0OmRpc2FibGVkLCBrZXlnZW46ZGlzYWJsZWQs
IG9wdGdyb3VwOmRpc2FibGVkLCBvcHRpb246ZGlzYWJsZWQgeworICAgIGNvbG9yOiBHcmF5VGV4
dAorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXTphY3RpdmUsIGlucHV0W3R5cGU9InN1Ym1pdCJd
OmFjdGl2ZSwgaW5wdXRbdHlwZT0icmVzZXQiXTphY3RpdmUsIGlucHV0W3R5cGU9ImZpbGUiXTph
Y3RpdmU6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uLCBidXR0b246YWN0aXZlIHsKKyAgICBi
b3JkZXItc3R5bGU6IGluc2V0Cit9CisKK2lucHV0W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZTpkaXNh
YmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06YWN0aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJy
ZXNldCJdOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0iZmlsZSJdOmFjdGl2ZTpkaXNhYmxl
ZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjphY3RpdmU6ZGlzYWJsZWQgewor
ICAgIGJvcmRlci1zdHlsZTogb3V0c2V0Cit9CisKK2FyZWEsIHBhcmFtIHsKKyAgICBkaXNwbGF5
OiBub25lCit9CisKK2lucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAgIC13ZWJraXQtYXBwZWFy
YW5jZTogY2hlY2tib3g7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQor
CitpbnB1dFt0eXBlPSJyYWRpbyJdIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHJhZGlvOwor
ICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKK30KKwora2V5Z2VuLCBzZWxlY3Qg
eworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7CisgICAgLXdlYmtpdC1ib3gtc2l6
aW5nOiBib3JkZXItYm94OworICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7CisgICAgYm9y
ZGVyOiAxcHggc29saWQ7CisgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CisgICAgd2hp
dGUtc3BhY2U6IHByZTsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICBj
b2xvcjogYmxhY2s7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgY3Vyc29yOiBk
ZWZhdWx0OworfQorCitzZWxlY3Rbc2l6ZV0sCitzZWxlY3RbbXVsdGlwbGVdLAorc2VsZWN0W3Np
emVdW211bHRpcGxlXSB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBsaXN0Ym94OworICAgIC13
ZWJraXQtYm94LWFsaWduOiBzdGFydDsKKyAgICBib3JkZXI6IDFweCBpbnNldCBncmF5OworICAg
IC13ZWJraXQtYm9yZGVyLXJhZGl1czogaW5pdGlhbDsKKyAgICB3aGl0ZS1zcGFjZTogaW5pdGlh
bDsKK30KKworc2VsZWN0W3NpemU9IjAiXSwKK3NlbGVjdFtzaXplPSIxIl0geworICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsK
KyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsK
KyAgICB3aGl0ZS1zcGFjZTogcHJlOworfQorCitvcHRncm91cCB7CisgICAgZm9udC13ZWlnaHQ6
IGJvbGRlcjsKK30KKworb3B0aW9uIHsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisv
KiBpbmxpbmUgZWxlbWVudHMgKi8KKwordSwgaW5zIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZQorfQorCitzdHJvbmcsIGIgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkZXIKK30KKwor
aSwgY2l0ZSwgZW0sIHZhciwgYWRkcmVzcyB7CisgICAgZm9udC1zdHlsZTogaXRhbGljCit9CisK
K3R0LCBjb2RlLCBrYmQsIHNhbXAgeworICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UKK30KKwor
cHJlLCB4bXAsIHBsYWludGV4dCwgbGlzdGluZyB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAg
Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgIG1hcmdp
bjogMV9fcWVtIDAKK30KKworYmlnIHsKKyAgICBmb250LXNpemU6IGxhcmdlcgorfQorCitzbWFs
bCB7CisgICAgZm9udC1zaXplOiBzbWFsbGVyCit9CisKK3MsIHN0cmlrZSwgZGVsIHsKKyAgICB0
ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaAorfQorCitzdWIgeworICAgIHZlcnRpY2FsLWFs
aWduOiBzdWI7CisgICAgZm9udC1zaXplOiBzbWFsbGVyCit9CisKK3N1cCB7CisgICAgdmVydGlj
YWwtYWxpZ246IHN1cGVyOworICAgIGZvbnQtc2l6ZTogc21hbGxlcgorfQorCitub2JyIHsKKyAg
ICB3aGl0ZS1zcGFjZTogbm93cmFwCit9CisKKy8qIHN0YXRlcyAqLworCis6Zm9jdXMgeyAKKyAg
ICBvdXRsaW5lOiBhdXRvIDVweCAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IKK30KKworLyogUmVh
ZC1vbmx5IHRleHQgZmllbGRzIGRvIG5vdCBzaG93IGEgZm9jdXMgcmluZyBidXQgZG8gc3RpbGwg
cmVjZWl2ZSBmb2N1cyAqLword21sOmZvY3VzLCBjYXJkOmZvY3VzLCBpbnB1dFtyZWFkb25seV06
Zm9jdXMgeyAKKyAgICBvdXRsaW5lOiBub25lCit9CisgIAoraW5wdXQ6Zm9jdXMsIHRleHRhcmVh
OmZvY3VzLCBpc2luZGV4OmZvY3VzLCBrZXlnZW46Zm9jdXMsIHNlbGVjdDpmb2N1cyB7CisgICAg
b3V0bGluZS1vZmZzZXQ6IC0ycHgKK30KKworaW5wdXRbdHlwZT0iYnV0dG9uIl06Zm9jdXMsCitp
bnB1dFt0eXBlPSJjaGVja2JveCJdOmZvY3VzLAoraW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLAor
aW5wdXRbdHlwZT0iaGlkZGVuIl06Zm9jdXMsCitpbnB1dFt0eXBlPSJpbWFnZSJdOmZvY3VzLAor
aW5wdXRbdHlwZT0icmFkaW8iXTpmb2N1cywKK2lucHV0W3R5cGU9InJlc2V0Il06Zm9jdXMsCitp
bnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1cywKK2lucHV0W3R5cGU9InN1Ym1pdCJdOmZvY3VzLAor
aW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7Cisg
ICAgb3V0bGluZS1vZmZzZXQ6IDAKK30KKyAgICAKK2E6LXdlYmtpdC1hbnktbGluayB7CisgICAg
Y29sb3I6IC13ZWJraXQtbGluazsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30K
KworYTotd2Via2l0LWFueS1saW5rOmFjdGl2ZSB7CisgICAgY29sb3I6IC13ZWJraXQtYWN0aXZl
bGluaworfQorCithbmNob3I6LXdlYmtpdC1hbnktbGluayB7CisgICAgY29sb3I6IC13ZWJraXQt
bGluazsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworYW5jaG9yOi13ZWJr
aXQtYW55LWxpbms6YWN0aXZlIHsKKyAgICBjb2xvcjogLXdlYmtpdC1hY3RpdmVsaW5rCit9CisK
Ky8qIG90aGVyIGVsZW1lbnRzICovCisKK25vZnJhbWVzIHsKKyAgICBkaXNwbGF5OiBub25lCit9
CisKK2ZyYW1lc2V0LCBmcmFtZSB7CisgICAgZGlzcGxheTogYmxvY2sKK30KKworZnJhbWVzZXQg
eworICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCitpZnJhbWUgeworICAgIGJvcmRlcjog
MnB4IGluc2V0Cit9CisKKy8qIG5vc2NyaXB0IGlzIGhhbmRsZWQgaW50ZXJuYWxseSwgYXMgaXQg
ZGVwZW5kcyBvbiBzZXR0aW5ncyAqLwpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAko
cmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQsNiArNCw4IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAg
ICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTIsNiArNTQsMTAgQEAKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTERvY3VtZW50LmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTMwOCw2ICszMTQsMTUgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OgogICAgICAgICByZXR1cm4g
SFRNTERvY3VtZW50OjpjcmVhdGUoZnJhbWUpOwogICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlv
bi94aHRtbCt4bWwiKQogICAgICAgICByZXR1cm4gRG9jdW1lbnQ6OmNyZWF0ZVhIVE1MKGZyYW1l
KTsKKworI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKCh0eXBlID09ICJ0ZXh0L3ZuZC53YXAud21s
IikKKyNpZiBFTkFCTEUoV0JYTUwpCisgICAgICAgIHx8ICh0eXBlID09ICJhcHBsaWNhdGlvbi92
bmQud2FwLndtbGMiKQorI2VuZGlmCisgICAgICAgICkKKyAgICAgICAgcmV0dXJuIFdNTERvY3Vt
ZW50OjpjcmVhdGUoZnJhbWUpOworI2VuZGlmCiAgICAgICAgIAogI2lmIEVOQUJMRShGVFBESVIp
CiAgICAgLy8gUGx1Z2lucyBjYW5ub3QgdGFrZSBGVFAgZnJvbSB1cyBlaXRoZXIKSW5kZXg6IFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00LDYgKzQsOCBAQAogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTA4LDYgKzExMCwxMCBAQAogI2luY2x1ZGUgIldlYktpdEFuaW1hdGlvbkV2ZW50
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiV2hlZWxF
dmVudC5oIgorI2lmIEVOQUJMRShXTUwpCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3RvcnkuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2VuZGlmCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3Qu
aCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgpAQCAt
Nzc3LDYgKzc4MywxMCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVt
CiAgICAgZWxzZSBpZiAocU5hbWUubmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05hbWVz
cGFjZVVSSSkKICAgICAgICAgZSA9IFNWR0VsZW1lbnRGYWN0b3J5OjpjcmVhdGVTVkdFbGVtZW50
KHFOYW1lLCB0aGlzLCBjcmVhdGVkQnlQYXJzZXIpOwogI2VuZGlmCisjaWYgRU5BQkxFKFdNTCkK
KyAgICBlbHNlIGlmIChxTmFtZS5uYW1lc3BhY2VVUkkoKSA9PSBXTUxOYW1lczo6d21sTmFtZXNw
YWNlVVJJKQorICAgICAgICBlID0gV01MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZVdNTEVsZW1lbnQo
cU5hbWUsIHRoaXMsIGNyZWF0ZWRCeVBhcnNlcik7CisjZW5kaWYKICAgICAKICAgICBpZiAoIWUp
CiAgICAgICAgIGUgPSBuZXcgRWxlbWVudChxTmFtZSwgZG9jdW1lbnQoKSk7CkluZGV4OiBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNCw2ICs0LDggQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292
IChhcEB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI5Miw2ICsyOTQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNQbHVn
aW5Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
TWVkaWFEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjaWYgRU5BQkxFKFdNTCkK
KyAgICB2aXJ0dWFsIGJvb2wgaXNXTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisjZW5kaWYKICAgICAKICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZVNlbGVjdG9yOyB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRv
a2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAko
cmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgKHNhbUB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA4IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yODcsNiArMjg4LDE2IEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnNlcnRFcnJvck1lc3Nh
Z2VCbG8KICAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKICAgICB9CiAjZW5k
aWYKKyNpZiBFTkFCTEUoV01MKQorICAgIGVsc2UgaWYgKG1fZG9jLT5pc1dNTERvY3VtZW50KCkp
IHsKKyAgICAgICAgUmVmUHRyPE5vZGU+IHJvb3RFbGVtZW50ID0gZG9jLT5jcmVhdGVFbGVtZW50
TlMoSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSwgImh0bWwiLCBlYyk7CisgICAgICAgIFJl
ZlB0cjxOb2RlPiBib2R5ID0gZG9jLT5jcmVhdGVFbGVtZW50TlMoSFRNTE5hbWVzOjp4aHRtbE5h
bWVzcGFjZVVSSSwgImJvZHkiLCBlYyk7CisgICAgICAgIHJvb3RFbGVtZW50LT5hcHBlbmRDaGls
ZChib2R5LCBlYyk7CisgICAgICAgIGJvZHktPmFwcGVuZENoaWxkKGRvY3VtZW50RWxlbWVudCwg
ZWMpOworICAgICAgICBkb2MtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7Cisg
ICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGJvZHkuZ2V0KCk7CisgICAgfQorI2VuZGlmCiAKICAg
ICBSZWZQdHI8RWxlbWVudD4gcmVwb3J0RWxlbWVudCA9IGNyZWF0ZVhIVE1MUGFyc2VyRXJyb3JI
ZWFkZXIoZG9jLCBtX2Vycm9yTWVzc2FnZXMpOwogICAgIGRvY3VtZW50RWxlbWVudC0+aW5zZXJ0
QmVmb3JlKHJlcG9ydEVsZW1lbnQsIGRvY3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBlYyk7
CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9YTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03Myw2ICs3NCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBp
c1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQogICAgICAgICBib29sIGlz
WEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CiAKKyAg
ICAgICAgRG9jdW1lbnQgKmRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2M7IH0KKwogICAg
ICAgICAvLyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50CiAgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogZmluaXNoZWRPYmopOwogCkBAIC05MSwxMiAr
OTQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwYXJzZVN0YXJ0RWxlbWVudCgpOwogICAg
ICAgICB2b2lkIHBhcnNlRW5kRWxlbWVudCgpOwogICAgICAgICB2b2lkIHBhcnNlQ2hhcmFjdGVy
cygpOwotICAgICAgICB2b2lkIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CisgICAgICAg
IHZvaWQgZW5kRG9jdW1lbnQoKTsKICAgICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7CisgICAgICAg
IGJvb2wgaGFzRXJyb3IoKSBjb25zdDsKKyNpZiBFTkFCTEUoV01MKQorcHJvdGVjdGVkOgorI2Vu
ZGlmCisgICAgICAgIHZvaWQgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKICAgICAgICAg
dm9pZCBwYXJzZUNvbW1lbnQoKTsKLSAgICAgICAgdm9pZCBlbmREb2N1bWVudCgpOwogICAgICAg
ICB2b2lkIHBhcnNlRHRkKCk7Ci0gICAgICAgIGJvb2wgaGFzRXJyb3IoKSBjb25zdDsKICNlbHNl
CiBwdWJsaWM6CiAgICAgICAgIC8vIGNhbGxiYWNrcyBmcm9tIHBhcnNlciBTQVgKQEAgLTExMiwx
OCArMTE4LDI4IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4
bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBz
eXN0ZW1JRCk7CiAgICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKICNlbmRpZgorCisjaWYgRU5B
QkxFKFdNTCkKKyAgICBwcm90ZWN0ZWQ6CisjaWYgVVNFKFFYTUxTVFJFQU0pCisgICAgICAgIFFY
bWxTdHJlYW1SZWFkZXImIHhtbFN0cmVhbVJlYWRlcigpIHsgcmV0dXJuIG1fc3RyZWFtOyB9Cisg
ICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3OyB9Cisg
ICAgICAgIE5vZGUqIGN1cnJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Tm9kZTsg
fQorI2VuZGlmCisjZWxzZQorICAgIHByaXZhdGU6CisjZW5kaWYKKyAgICAgICAgdm9pZCBzZXRD
dXJyZW50Tm9kZShOb2RlKik7CisgICAgICAgIGJvb2wgZW50ZXJUZXh0KCk7CisgICAgICAgIHZv
aWQgZXhpdFRleHQoKTsKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgYm9vbCBwYXJzZVhN
TERvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiBjaHVuaywgRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudCk7CiAKICAgICAgICAgc3RhdGljIHZvaWQgZXZlbnR1
YWxseU1hcmtBc1BhcnNlckNyZWF0ZWQoRWxlbWVudCogZWxlbWVudCk7CiAgICAgICAgIHZvaWQg
aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgY2hhciogY2h1bmsgPSAwKTsKLSAgICAgICAg
dm9pZCBzZXRDdXJyZW50Tm9kZShOb2RlKik7CiAKICAgICAgICAgdm9pZCBpbnNlcnRFcnJvck1l
c3NhZ2VCbG9jaygpOwogCi0gICAgICAgIGJvb2wgZW50ZXJUZXh0KCk7Ci0gICAgICAgIHZvaWQg
ZXhpdFRleHQoKTsKLQogICAgICAgICB2b2lkIGRvV3JpdGUoY29uc3QgU3RyaW5nJik7CiAgICAg
ICAgIHZvaWQgZG9FbmQoKTsKIApJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAkocmV2aXNpb24g
Mzc5MjIpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2Ft
QHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5j
LiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc0
Nyw2ICs3NDgsMTQgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRHRkKCkKICAgICAgICAgfHwg
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxl
IDEuMC8vRU4iKSkpIHsKICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250
cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9yIG5vdC4KICAgICB9CisjaWYgRU5BQkxFKFdN
TCkKKyAgICBlbHNlIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVudCgpCisgICAgICAgICAgICAmJiBw
dWJsaWNJZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIikK
KyAgICAgICAgICAgICYmIHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMi8vRU4iKQorICAgICAgICAgICAgJiYgcHVibGljSWQgIT0gUUxhdGluMVN0cmlu
ZygiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIpCisgICAgICAgICAgICAmJiBwdWJsaWNJ
ZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIikpCisgICAg
ICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBEVEQgUHVibGljIElEIiwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7CisjZW5kaWYKICAgICBpZiAoIW1fcGFyc2luZ0ZyYWdtZW50
KQogICAgICAgICBtX2RvYy0+YWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2MsIG5h
bWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkpOwogICAgIApJbmRleDogV2ViQ29yZS9oaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdC5jcHAJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY0LDQgKzI2NiwxOSBAQCBib29s
IEJhY2tGb3J3YXJkTGlzdDo6Y29udGFpbnNJdGVtKEhpc3RvCiAgICAgcmV0dXJuIG1fZW50cnlI
YXNoLmNvbnRhaW5zKGVudHJ5KTsKIH0KIAorI2lmIEVOQUJMRShXTUwpCisvLyBjbGVhciB0aGUg
aGlzdG9yeSBvZiBjdXJyZW50IFdNTCBwYWdlCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJX
bWxQYWdlSGlzdG9yeSgpCit7CisgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3VyID0gY3Vy
cmVudEl0ZW0oKTsKKworICAgIGludCBzaXplID0gbV9lbnRyaWVzLnNpemUoKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZSht
X2VudHJpZXNbaV0uZ2V0KCkpOworICAgIG1fZW50cmllcy5jbGVhcigpOworICAgIG1fZW50cnlI
YXNoLmNsZWFyKCk7CisgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworfQorI2Vu
ZGlmCisKIH07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJk
TGlzdC5oCShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw2ICs3NSw5IEBAIHB1YmxpYzogCiAgICAgdm9pZCBy
ZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7CiAgICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMo
KTsKICAgICAKKyNpZiBFTkFCTEUoV01MKQorICAgIHZvaWQgY2xlYXJXbWxQYWdlSGlzdG9yeSgp
OworI2VuZGlmCiBwcml2YXRlOgogICAgIEJhY2tGb3J3YXJkTGlzdChQYWdlKik7CiAKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsOCBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAo
c2FtQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NSw2ICs0NywxNSBAQCBIVE1MQnV0
dG9uRWxlbWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQoRG9jCiB7CiB9CiAKKyNpZiBFTkFCTEUoV01M
KQorSFRNTEJ1dHRvbkVsZW1lbnQ6OkhUTUxCdXR0b25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZywgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRN
TEZvcm1Db250cm9sRWxlbWVudCh0YWcsIGRvYywgZm9ybSkKKyAgICAsIG1fdHlwZShCVVRUT04p
CisgICAgLCBtX2FjdGl2ZVN1Ym1pdChmYWxzZSkKK3sKK30KKyNlbmRpZgorCiBIVE1MQnV0dG9u
RWxlbWVudDo6fkhUTUxCdXR0b25FbGVtZW50KCkKIHsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQnV0dG9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9u
RWxlbWVudC5oCShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsOCBAQAogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTMxLDYgKzMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRN
TEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6
CiAgICAgSFRNTEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7
CisjaWYgRU5BQkxFKFdNTCkKKyAgICBIVE1MQnV0dG9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CisjZW5kaWYKICAgICB2aXJ0
dWFsIH5IVE1MQnV0dG9uRWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24g
Mzc5MjIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yLDYgKzIsOCBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE2LDYgKzExOCwxMCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3Rv
cjxTdHJpbmc+JikgY29uc3Q7CiAKKyNpZiBFTkFCTEUoV01MKQorICAgIHZpcnR1YWwgYm9vbCBp
c1dNTEltYWdlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgSFRNTEltYWdl
TG9hZGVyJiBpbWFnZUxvYWRlcigpIHsgcmV0dXJuIG1faW1hZ2VMb2FkZXI7IH0KKyNlbmRpZgog
cHJpdmF0ZToKICAgICBIVE1MSW1hZ2VMb2FkZXIgbV9pbWFnZUxvYWRlcjsKICAgICBTdHJpbmcg
dXNlbWFwOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDM3OTIyKQor
KysgV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw2ICszMCwxMSBAQAogI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
VE1MT2JqZWN0RWxlbWVudC5oIgorI2lmIEVOQUJMRShXTUwpCisjaW5jbHVkZSAiV01MSW1hZ2VF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkltYWdl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsNiArNjcsMTEgQEAgdm9pZCBIVE1M
SW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogICAgIEVsZW1lbnQqIGVsZW0gPSBlbGVt
ZW50KCk7CiAgICAgSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKGltYWdlKTsKIAorI2lmIEVO
QUJMRShXTUwpCisgICAgaWYoaW1hZ2UtPmVycm9yT2NjdXJyZWQoKSAmJiBlbGVtLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW1nVGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4o
ZWxlbSktPmlzV01MSW1hZ2VFbGVtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTEltYWdl
RWxlbWVudCo+KGVsZW0pLT5yZWxvYWRJbWFnZUJ5U3JjQXR0cigpOworI2VuZGlmCisKICAgICBp
ZiAoaW1hZ2UtPmVycm9yT2NjdXJyZWQoKSAmJiBlbGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2JqZWN0VGFnKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlbGVt
KS0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0Nyw3ICsxMDQ3LDExIEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmFjY2Vzc0tleVNldFNlbGUKICAgICAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldE11bHRpcGxlKGJvb2wgbXVsdGlwbGUpCiB7CisjaWYgRU5BQkxFKFdNTCkKKyAgICBt
X211bHRpcGxlID0gbXVsdGlwbGU7CisjZWxzZQogICAgIHNldEF0dHJpYnV0ZShtdWx0aXBsZUF0
dHIsIG11bHRpcGxlID8gIiIgOiAwKTsKKyNlbmRpZgogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpzZXRTaXplKGludCBzaXplKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJl
dmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMsNiArMyw4IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
ICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NTYsOSArNTgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50
KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5k
ZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsKIAog
ICAgIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4
KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlID0gZmFs
c2UpOwogICAgIGludCBsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTEzNywx
OSArMTM5LDMyIEBAIHB1YmxpYzoKICAgICBpbnQgYWN0aXZlU2VsZWN0aW9uRW5kTGlzdEluZGV4
KCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOworI2lmIEVOQUJM
RShXTUwpCitwcm90ZWN0ZWQ6CisgICAgaW50IGFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleDsgfQorICAgIGludCBh
Y3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9u
RW5kSW5kZXg7IH0KKyAgICBpbnQgYWN0aXZlU2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlOyB9CisgICAgdm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25T
dGF0ZShib29sIGFjdGl2ZSkgeyBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gYWN0aXZlOyB9Cisj
ZW5kaWYKIAorI2lmIEVOQUJMRShXTUwpCitwcm90ZWN0ZWQ6CisjZWxzZQogcHJpdmF0ZToKLSAg
ICB2b2lkIHJlY2FsY0xpc3RJdGVtcyhib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzID0gdHJ1ZSkg
Y29uc3Q7Ci0gICAgdm9pZCBjaGVja0xpc3RJdGVtcygpIGNvbnN0OwotCisjZW5kaWYKICAgICB2
b2lkIGRlc2VsZWN0SXRlbXMoSFRNTE9wdGlvbkVsZW1lbnQqIGV4Y2x1ZGVFbGVtZW50ID0gMCk7
CiAgICAgYm9vbCB1c2VzTWVudUxpc3QoKSBjb25zdCB7IHJldHVybiAhbV9tdWx0aXBsZSAmJiBt
X3NpemUgPD0gMTsgfQorICAgIHZvaWQgdHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50Kik7Cisg
ICAgdm9pZCBzYXZlTGFzdFNlbGVjdGlvbigpOwogICAgIGludCBuZXh0U2VsZWN0YWJsZUxpc3RJ
bmRleChpbnQgc3RhcnRJbmRleCk7CiAgICAgaW50IHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRl
eChpbnQgc3RhcnRJbmRleCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZWNhbGNMaXN0SXRlbXMo
Ym9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcyA9IHRydWUpIGNvbnN0OworICAgIHZvaWQgY2hlY2tM
aXN0SXRlbXMoKSBjb25zdDsKKwogICAgIHZvaWQgbWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50Kik7CiAgICAgdm9pZCBsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwot
ICAgIHZvaWQgdHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50Kik7Ci0gICAgdm9pZCBzYXZlTGFz
dFNlbGVjdGlvbigpOwogCiAgICAgbXV0YWJsZSBWZWN0b3I8SFRNTEVsZW1lbnQqPiBtX2xpc3RJ
dGVtczsKICAgICBWZWN0b3I8Ym9vbD4gbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbjsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsOCBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjgs
NiArMjcwLDkgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFtZSwgRgogICAg
ICwgbV9maW5pc2hlZFBhcnNpbmdEdXJpbmdMb3dCYW5kd2lkdGhEaXNwbGF5KGZhbHNlKQogICAg
ICwgbV9uZWVkVG9Td2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5KGZhbHNlKQogI2VuZGlmIAor
I2lmIEVOQUJMRShXTUwpCisgICAgLCBtX2ZvcmNlUmVsb2FkV21sRGVjayhmYWxzZSkKKyNlbmRp
ZgogewogfQogCkBAIC0xMDAxLDcgKzEwMDYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp3cml0ZShj
b25zdCBjaGFyKiBzdHIsCiAgICAgICAgICAgICB0b2tlbml6ZXItPndyaXRlUmF3RGF0YShzdHIs
IGxlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIW1fZGVjb2Rl
cikgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwog
ICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9yZXNwb25z
ZU1JTUVUeXBlLCBzZXR0aW5ncyA/IHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgp
IDogU3RyaW5nKCkpOwpAQCAtMjg3OCw4ICsyODgzLDIxIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNs
aWVudFJlZGlyZWN0ZWQoY29uc3QKICAgICBtX3F1aWNrUmVkaXJlY3RDb21pbmcgPSBsb2NrSGlz
dG9yeSAmJiBtX2RvY3VtZW50TG9hZGVyICYmICFpc0phdmFTY3JpcHRGb3JtQWN0aW9uOwogfQog
CisjaWYgRU5BQkxFKFdNTCkKK3ZvaWQgRnJhbWVMb2FkZXI6OnNldEZvcmNlUmVsb2FkV21sRGVj
ayhib29sIHJlbG9hZCkKK3sKKyAgICBtX2ZvcmNlUmVsb2FkV21sRGVjayA9IHJlbG9hZDsKK30K
KyNlbmRpZgorCiBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRSZWxvYWQoY29uc3QgS1VSTCYgY3Vy
cmVudFVSTCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25VUkwpCiB7CisjaWYgRU5BQkxFKFdNTCkK
KyAgICAvLyBBcyBmb3IgV01MIGRlY2ssIHNvbWV0aW1lcyBpdCdzIHN1cHBvc2VkIHRvIGJlIHJl
bG9hZGVkIGV2ZW4gaWYgdGhlIHNhbWUgVVJMIHdpdGggZnJhZ21lbnQKKyAgICBpZiAobV9mb3Jj
ZVJlbG9hZFdtbERlY2spCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJ1bGU6ICJEb24ndCByZWxvYWQgaWYgbmF2aWdh
dGluZyBieSBmcmFnbWVudCB3aXRoaW4KICAgICAvLyB0aGUgc2FtZSBVUkwsIGJ1dCBkbyByZWxv
YWQgaWYgZ29pbmcgdG8gYSBuZXcgVVJMIG9yIHRvIHRoZSBzYW1lIFVSTCB3aXRoIG5vCiAgICAg
Ly8gZnJhZ21lbnQgaWRlbnRpZmllciBhdCBhbGwuIgpAQCAtNDI5Myw3ICs0MzExLDExIEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiAKICAgICAvLyBjaGVjayBmb3Ig
YWxsIHRoYXQgYXMgYW4gYWRkaXRpb25hbCBvcHRpbWl6YXRpb24uCiAgICAgLy8gV2UgYWxzbyBk
byBub3QgZG8gYW5jaG9yLXN0eWxlIG5hdmlnYXRpb24gaWYgd2UncmUgcG9zdGluZyBhIGZvcm0u
CiAgICAgCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAoIWZvcm1EYXRhICYmIHVybHNNYXRjaEl0
ZW0oaXRlbSkgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmlzV01MRG9jdW1lbnQoKSkgeworI2Vs
c2UKICAgICBpZiAoIWZvcm1EYXRhICYmIHVybHNNYXRjaEl0ZW0oaXRlbSkpIHsKKyNlbmRpZgog
ICAgICAgICAvLyBNdXN0IGRvIHRoaXMgbWFpbnRlbmFuY2UgaGVyZSwgc2luY2Ugd2UgZG9uJ3Qg
Z28gdGhyb3VnaCBhIHJlYWwgcGFnZSByZWxvYWQKICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9u
QW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpKTsKIApJbmRleDog
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MSw2ICsyNjMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKGJvb2wgY2Fu
Y2VsV2l0aExvYWRJblByb2dyZXNzKTsKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdGVkKGNv
bnN0IEtVUkwmLCBkb3VibGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrSGlzdG9y
eSwgYm9vbCBpc0phdmFTY3JpcHRGb3JtQWN0aW9uKTsKICAgICAgICAgYm9vbCBzaG91bGRSZWxv
YWQoY29uc3QgS1VSTCYgY3VycmVudFVSTCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25VUkwpOwor
I2lmIEVOQUJMRShXTUwpCisgICAgICAgIHZvaWQgc2V0Rm9yY2VSZWxvYWRXbWxEZWNrKGJvb2wp
OworI2VuZGlmCiAKICAgICAgICAgYm9vbCBpc1F1aWNrUmVkaXJlY3RDb21pbmcoKSBjb25zdDsK
IApAQCAtNjgyLDYgKzY4NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmlu
ZyBtX3BlbmRpbmdTb3VyY2VJbkxvd0JhbmR3aWR0aERpc3BsYXk7ICAgICAgICAKICAgICAgICAg
SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IG1fZXh0ZXJuYWxSZXF1ZXN0c0luTG93QmFuZHdpZHRo
RGlzcGxheTsKICNlbmRpZgorCisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgYm9vbCBtX2ZvcmNl
UmVsb2FkV21sRGVjazsKKyNlbmRpZgogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTWFp
blJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2xvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQ1LDEwIEBACiAj
aW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpZiBFTkFCTEUoV0JYTUwpCisjaW5jbHVkZSAid2J4bWwu
aCIKKyNpbmNsdWRlICJ3YnhtbF9jb252LmgiCisjZW5kaWYKIAogLy8gRklYTUU6IE1vcmUgdGhh
dCBpcyBpbiBjb21tb24gd2l0aCBTdWJyZXNvdXJjZUxvYWRlciBzaG91bGQgbW92ZSB1cCBpbnRv
IFJlc291cmNlTG9hZGVyLgogCkBAIC0xNDEsNiArMTQ3LDMxIEBAIGJvb2wgTWFpblJlc291cmNl
TG9hZGVyOjppc1Bvc3RPclJlZGlyZWMKIAogdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmFkZERh
dGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgYm9vbCBhbGxBdE9uY2UpCiB7CisjaWYg
RU5BQkxFKFdCWE1MKQorICAgIGlmIChsZW5ndGggJiYgbV9yZXNwb25zZS5taW1lVHlwZSgpID09
ICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiKSB7CisgICAgICAgIHByaW50ZigiPj4+Pj4+Pj4+
Pj4+PiAgZGVjb2RlIHdieG1sIGRvY3VtZW50XG4iKTsKKyAgICAgICAgcHJpbnRmKCI+Pj4+Pj4+
Pj4+Pj4+ICBkZWNvZGUgd2J4bWwgZG9jdW1lbnRcbiIpOworICAgICAgICBwcmludGYoIj4+Pj4+
Pj4+Pj4+Pj4gIGRlY29kZSB3YnhtbCBkb2N1bWVudFxuIik7CisgICAgICAgIFdCX1VUSU5ZICp3
YnhtbCA9IChXQl9VVElOWSopZGF0YTsKKyAgICAgICAgV0JfVUxPTkcgd2J4bWxfbGVuID0gbGVu
Z3RoOworICAgICAgICBXQl9VTE9ORyB4bWxfbGVuID0gMDsKKyAgICAgICAgV0JfVVRJTlkgKnht
bCA9IDA7CisgICAgICAgIFdCWE1MRXJyb3IgcmV0ID0gV0JYTUxfT0s7IAorICAgICAgICBXQlhN
TEdlblhNTFBhcmFtcyBwYXJhbXM7CisgCisgICAgICAgIC8vIEluaXQgRGVmYXVsdCBQYXJhbWV0
ZXJzCisgICAgICAgIHBhcmFtcy5sYW5nID0gV0JYTUxfTEFOR19VTktOT1dOOworICAgICAgICBw
YXJhbXMuZ2VuX3R5cGUgPSBXQlhNTF9HRU5fWE1MX0lOREVOVDsKKyAgICAgICAgcGFyYW1zLmlu
ZGVudCA9IDE7CisgICAgICAgIHBhcmFtcy5rZWVwX2lnbm9yYWJsZV93cyA9IEZBTFNFOworIAor
ICAgICAgICByZXQgPSB3YnhtbF9jb252X3dieG1sMnhtbF93aXRobGVuKHdieG1sLCB3YnhtbF9s
ZW4sICZ4bWwsICZ4bWxfbGVuLCAmcGFyYW1zKTsKKyAgICAgICAgaWYgKHJldCAhPSBXQlhNTF9P
SykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YSA9IChjaGFyKil4bWw7CisgICAg
ICAgIGxlbmd0aCA9IHhtbF9sZW47CisgICAgfQorI2VuZGlmCiAgICAgUmVzb3VyY2VMb2FkZXI6
OmFkZERhdGEoZGF0YSwgbGVuZ3RoLCBhbGxBdE9uY2UpOwogICAgIGZyYW1lTG9hZGVyKCktPnJl
Y2VpdmVkRGF0YShkYXRhLCBsZW5ndGgpOwogfQpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMzc5MjIpCisr
KyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU0LDYgKzU2LDkgQEAKICNpbmNsdWRlIDxr
anMvSlNMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZExlYWtDb3VudGVyLmg+CisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxQYWdl
U3RhdGUuaCIKKyNlbmRpZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZS5oIgpAQCAtMTI3LDYgKzEzMiw5IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50
KiBjaHJvbWVDbGllbnQsIEMKICAgICAsIG1fcGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50Q291bnQo
MCkKICAgICAsIG1fY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSgtMSkKICAgICAsIG1fY3Vz
dG9tSFRNTFRva2VuaXplckNodW5rU2l6ZSgtMSkKKyNpZiBFTkFCTEUoV01MKQorICAgICwgbV93
bWxQYWdlU3RhdGUoMCkKKyNlbmRpZgogewogICAgIGlmICghYWxsUGFnZXMpIHsKICAgICAgICAg
YWxsUGFnZXMgPSBuZXcgSGFzaFNldDxQYWdlKj47CkBAIC01NjIsNiArNTcwLDE4IEBAIHZvaWQg
UGFnZTo6Y2hhbmdlUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW4KICAgICByZXR1cm47IAogfQogCisj
aWYgRU5BQkxFKFdNTCkKK3ZvaWQgUGFnZTo6c2V0V01MUGFnZVN0YXRlKFJlZlB0cjxXTUxQYWdl
U3RhdGU+IHBhZ2VTdGF0ZSkgCit7IAorICAgIG1fd21sUGFnZVN0YXRlID0gcGFnZVN0YXRlOyAK
K30KKworV01MUGFnZVN0YXRlKiBQYWdlOjp3bWxQYWdlU3RhdGUoKSBjb25zdCAKK3sgCisgICAg
cmV0dXJuIG1fd21sUGFnZVN0YXRlLmdldCgpOyAKK30KKyNlbmRpZgorCiB2b2lkIFBhZ2U6OnNl
dEN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJU
aW1lRGVsYXkpCiB7CiAgICAgaWYgKGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgPCAwKSB7
CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Q
YWdlLmgJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjMsNiArNjUs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2U7CiAjZW5k
aWYKICAgICBjbGFzcyBTZXR0aW5nczsKKyNpZiBFTkFCTEUoV01MKQorICAgIGNsYXNzIFdNTFBh
Z2VTdGF0ZTsKKyNlbmRpZgogCiAgICAgZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENh
c2VTZW5zaXRpdmUsIFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKICAgICBlbnVtIEZpbmREaXJlY3Rp
b24geyBGaW5kRGlyZWN0aW9uRm9yd2FyZCwgRmluZERpcmVjdGlvbkJhY2t3YXJkIH07CkBAIC0x
NjcsNiArMTcyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTZXNz
aW9uU3RvcmFnZShQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPik7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShXTUwpCisgICAgICAgIHZvaWQgc2V0V01MUGFnZVN0YXRlKFJlZlB0cjxXTUxQYWdlU3Rh
dGU+KTsKKyAgICAgICAgV01MUGFnZVN0YXRlKiB3bWxQYWdlU3RhdGUoKSBjb25zdDsKKyNlbmRp
ZgogICAgICAgICB2b2lkIHNldEN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoZG91YmxlKTsK
ICAgICAgICAgYm9vbCBoYXNDdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5ICE9IC0xOyB9CiAgICAgICAgIGRv
dWJsZSBjdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCkgY29uc3QgeyBBU1NFUlQobV9jdXN0
b21IVE1MVG9rZW5pemVyVGltZURlbGF5ICE9IC0xKTsgcmV0dXJuIG1fY3VzdG9tSFRNTFRva2Vu
aXplclRpbWVEZWxheTsgfQpAQCAtMjI2LDYgKzIzNSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAjaWYgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oV1gpICYmIGRlZmluZWQoX19XWE1TV19f
KSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFfV1NfV0lOKSkKICAgICAgICAgc3RhdGlj
IEhJTlNUQU5DRSBzX2luc3RhbmNlSGFuZGxlOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoV01MKQor
ICAgICAgICBSZWZQdHI8V01MUGFnZVN0YXRlPiBtX3dtbFBhZ2VTdGF0ZTsKKyNlbmRpZgogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTUlN
RVR5cGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlw
ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTgxLDYgKzE4MywxMiBAQCBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplU3VwcG9ydGVkSmF2YVNjcmlwCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3Vw
cG9ydGVkTm9uSW1hZ2VNaW1lVHlwZXMoKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBl
c1tdID0geworI2lmIEVOQUJMRShXTUwpCisgICAgICAgICJ0ZXh0L3ZuZC53YXAud21sIiwKKyNl
bmRpZgorI2lmIEVOQUJMRShXQlhNTCkKKyAgICAgICAgImFwcGxpY2F0aW9uL3ZuZC53YXAud21s
YyIsCisjZW5kaWYKICAgICAgICAgInRleHQvaHRtbCIsCiAgICAgICAgICJ0ZXh0L3htbCIsCiAg
ICAgICAgICJ0ZXh0L3hzbCIsCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVn
aXN0cnlRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJl
Z2lzdHJ5UXQuY3BwCShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvTUlN
RVR5cGVSZWdpc3RyeVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Miw2ICs2MywxMiBAQCBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbCiAg
ICAgeyAieHBtIiwgImltYWdlL3gteHBtIiB9LAogICAgIHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwK
ICAgICB7ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIH0sCisjaWYgRU5BQkxFKFdN
TCkKKyAgICB7ICJ3bWwiLCAidGV4dC92bmQud2FwLndtbCIgfSwKKyNlbmRpZgorI2lmIEVOQUJM
RShXQlhNTCkKKyAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIgfSwKKyNl
bmRpZgogICAgIHsgMCwgMCB9CiB9OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAKICAqICAgICAgICAgICAoQykgMjAwNiBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzM5LDcgKzM0MSwxMSBAQCB2b2lkIFJlbmRlckltYWdl
OjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgICAgICAgICBpbnQgdXNhYmxlV2lkdGggPSBj
V2lkdGggLSAyOwogICAgICAgICAgICAgaW50IHVzYWJsZUhlaWdodCA9IGNIZWlnaHQgLSAyOwog
CisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgICAgIGlmICghZG9jdW1lbnQoKS0+aXNXTUxEb2N1
bWVudCgpICYmIGVycm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2UoKS0+aXNOdWxsKCkgJiYgKHVzYWJs
ZVdpZHRoID49IGltYWdlKCktPndpZHRoKCkpICYmICh1c2FibGVIZWlnaHQgPj0gaW1hZ2UoKS0+
aGVpZ2h0KCkpKSB7CisjZWxzZQogICAgICAgICAgICAgaWYgKGVycm9yT2NjdXJyZWQoKSAmJiAh
aW1hZ2UoKS0+aXNOdWxsKCkgJiYgKHVzYWJsZVdpZHRoID49IGltYWdlKCktPndpZHRoKCkpICYm
ICh1c2FibGVIZWlnaHQgPj0gaW1hZ2UoKS0+aGVpZ2h0KCkpKSB7CisjZW5kaWYKICAgICAgICAg
ICAgICAgICAvLyBDZW50ZXIgdGhlIGVycm9yIGltYWdlLCBhY2NvdW50aW5nIGZvciBib3JkZXIg
YW5kIHBhZGRpbmcuCiAgICAgICAgICAgICAgICAgaW50IGNlbnRlclggPSAodXNhYmxlV2lkdGgg
LSBpbWFnZSgpLT53aWR0aCgpKSAvIDI7CiAgICAgICAgICAgICAgICAgaWYgKGNlbnRlclggPCAw
KQpAQCAtMzcyLDYgKzM3OCwxMCBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBh
aW50SW5mCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dCh0ZXh0UnVu
LCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHVzYWJsZVdpZHRoID49IHRleHRXaWR0aCAmJiBjSGVpZ2h0ID49IGZvbnQuaGVpZ2h0KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHRleHRSdW4sIEludFBvaW50KGF4
LCBheSArIGFzY2VudCkpOworI2lmIEVOQUJMRShXTUwpCisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoZG9jdW1lbnQoKS0+aXNXTUxEb2N1bWVudCgpICYmIHVzYWJsZVdpZHRoID49IHRleHRXaWR0
aCAtIDIgJiYgY0hlaWdodCA+PSBmb250LmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKKyNl
bmRpZgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChoYXNJbWFnZSgp
ICYmIGNXaWR0aCA+IDAgJiYgY0hlaWdodCA+IDApIHsK
</data>
<flag name="review"
          id="11387"
          type_id="1"
          status="-"
          setter="zimmermann"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24710</attachid>
            <date>2008-10-28 04:06:29 -0700</date>
            <delta_ts>2008-11-14 02:37:48 -0800</delta_ts>
            <desc>The whole submit for Adding WML</desc>
            <filename>webkit_add_wml_37922.patch</filename>
            <type>text/plain</type>
            <size>338415</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAk
KFdlYkNvcmUpL3htbCBcCisgICAgJChXZWJDb3JlKS93bWwgXAogICAgICQoV2ViQ29yZSkvc3Zn
IFwKICMKIApAQCAtMzg5LDYgKzM5MCw3IEBAIGFsbCA6IFwKICAgICBEb2NUeXBlU3RyaW5ncy5j
cHAgXAogICAgIEhUTUxFbnRpdHlOYW1lcy5jIFwKICAgICBIVE1MTmFtZXMuY3BwIFwKKyAgICBX
TUxOYW1lcy5jcHAgXAogICAgIEpTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCBcCiAgICAg
U1ZHRWxlbWVudEZhY3RvcnkuY3BwIFwKICAgICBTVkdOYW1lcy5jcHAgXApAQCAtNTA0LDcgKzUw
Niw3IEBAIFhQYXRoR3JhbW1hci5jcHAgOiB4bWwvWFBhdGhHcmFtbWFyLnkgJCgKIAogIyB1c2Vy
IGFnZW50IHN0eWxlIHNoZWV0cwogCi1VU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9ICQoV2ViQ29y
ZSkvY3NzL2h0bWw0LmNzcyAkKFdlYkNvcmUpL2Nzcy9xdWlya3MuY3NzICQoV2ViQ29yZSkvY3Nz
L3ZpZXctc291cmNlLmNzcyAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIAorVVNFUl9BR0VOVF9TVFlM
RV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtz
LmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3MgJChXZWJDb3JlKS9jc3Mvc3ZnLmNz
cyAkKFdlYkNvcmUpL2Nzcy93bWwuY3NzCiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIDogY3NzL21h
a2UtY3NzLWZpbGUtYXJyYXlzLnBsICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpCiAJcGVybCAk
PCAkQCBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVF
VFMpCiAKQEAgLTU0MCw2ICs1NDIsOSBAQCBlbmRpZgogWE1MTmFtZXMuY3BwIDogZG9tL21ha2Vf
bmFtZXMucGwgeG1sL3htbGF0dHJzLmluCiAJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3Nj
cmlwdHMgJDwgLS1hdHRycyAkKFdlYkNvcmUpL3htbC94bWxhdHRycy5pbgogCitXTUxOYW1lcy5j
cHAgOiBkb20vbWFrZV9uYW1lcy5wbCB3bWwvV01MVGFnTmFtZXMuaW4gd21sL1dNTEF0dHJpYnV0
ZU5hbWVzLmluCisJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS10YWdz
ICQoV2ViQ29yZSkvd21sL1dNTFRhZ05hbWVzLmluIC0tYXR0cnMgJChXZWJDb3JlKS93bWwvV01M
QXR0cmlidXRlTmFtZXMuaW4gLS1vdXRwdXQgLgorCiAjIC0tLS0tLS0tCiAKIGlmZXEgKCQoZmlu
ZHN0cmluZyBFTkFCTEVfU1ZHLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkcpCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtNjUsNiArNjUsNyBAQCB3aW4zMi1nKysgewogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9J
Q09OREFUQUJBU0U9Lik6IERFRklORVMgKz0gRU5BQkxFX0lDT05EQVRBQkFTRT0xCiAhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YUEFUSD0xCiAj
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMgKz0gRU5BQkxFX1hCTD0x
CishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dNTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV01M
PTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPS4pOiBERUZJTkVTICs9IEVOQUJMRV9T
Vkc9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0ZPTlRTPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9TVkdfRk9OVFM9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkdfRklMVEVS
Uz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZJTFRFUlM9MQpAQCAtMTU4LDYgKzE1OSw3IEBA
IElOQ0xVREVQQVRIICs9ICAkJFBXRCBcCiAgICAgICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9y
IFwKICAgICAgICAgICAgICAgICAkJFBXRC94bWwgXAogICAgICAgICAgICAgICAgICQkUFdEL2h0
bWwgXAorICAgICAgICAgICAgICAgICQkUFdEL3dtbCBcCiAgICAgICAgICAgICAgICAgJCRQV0Qv
YmluZGluZ3MvanMgXAogICAgICAgICAgICAgICAgICQkUFdEL3N2ZyBcCiAgICAgICAgICAgICAg
ICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgXApAQCAtMTMyNiw2ICsxMzI4LDUyIEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19K
QVZBU0NSSVBUICs9IEVOQUJMRV9YQkw9MQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
V01MPTEpIHsKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgd21sL1dNTERvY3VtZW50LmNwcCBc
CisgICAgICAgIHdtbC9XTUxUb2tlbml6ZXIuY3BwIFwKKyAgICAgICAgd21sL1dNTEVsZW1lbnQu
Y3BwIFwKKyAgICAgICAgd21sL1dNTENhcmRFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxB
RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MQW5jaG9yRWxlbWVudC5jcHAgXAorICAgICAg
ICB3bWwvV01MVGFza0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFByZXZFbGVtZW50LmNw
cCBcCisgICAgICAgIHdtbC9XTUxHb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFJlZnJl
c2hFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBcCisg
ICAgICAgIHdtbC9XTUxTZXR2YXJFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxFbGVtZW50
RmFjdG9yeS5jcHAgXAorICAgICAgICB3bWwvV01MUGFnZVN0YXRlLmNwcCBcCisgICAgICAgIHdt
bC9XTUxEb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFRleHQuY3BwIFwKKyAgICAgICAg
d21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyLmNwcCBcCisgICAgICAgIHdtbC9XTUxUaW1lckVsZW1lbnQuY3BwIFwKKyAgICAg
ICAgd21sL1dNTEhlbHBlci5jcHAgXAorICAgICAgICB3bWwvV01MQWNjZXNzRWxlbWVudC5jcHAg
XAorICAgICAgICB3bWwvV01MU2VsZWN0RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MT3B0
aW9uRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW5wdXRFbGVtZW50LmNwcCBcCisgICAg
ICAgIHdtbC9XTUxUYWJsZUVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTEltYWdlRWxlbWVu
dC5jcHAgXAorICAgICAgICB3bWwvV01MUEVsZW1lbnQuY3BwCisKKyAgICBGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfV01MPTEKKyAgICBERUZJTkVTICs9IEVOQUJMRV9XQlhN
TD0xCisgICAgTElCUyArPSAtbHdieG1sMiAKKworICAgIFdNTF9OQU1FUyA9ICQkUFdEL3dtbC9X
TUxUYWdOYW1lcy5pbgorCisgICAgd21sbmFtZXNfYS5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9XTUxOYW1lcy5jcHAKKyAgICB3bWxuYW1lc19hLmNvbW1hbmRzID0gcGVybCAtSSQk
UFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS10YWdzICQkUFdE
L3dtbC9XTUxUYWdOYW1lcy5pbiAtLWF0dHJzICQkUFdEL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5p
biAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAtLW91dHB1dCAkJEdFTkVSQVRF
RF9TT1VSQ0VTX0RJUgorICAgIHdtbG5hbWVzX2EuaW5wdXQgPSBXTUxfTkFNRVMKKyAgICB3bWxu
YW1lc19hLmRlcGVuZGVuY3lfdHlwZSA9IFRZUEVfQworICAgIHdtbG5hbWVzX2EuQ09ORklHID0g
dGFyZ2V0X3ByZWRlcHMKKyAgICB3bWxuYW1lc19hLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9T
T1VSQ0VTCisgICAgd21sbmFtZXNfYS5jbGVhbiA9ICR7UU1BS0VfRklMRV9PVVR9ICR7UU1BS0Vf
VkFSX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUl9TTEFTSH1XTUxOYW1lcy5oCisgICAgYWRkRXh0cmFD
b21waWxlcih3bWxuYW1lc19hKQorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEp
IHsKICAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfU1ZHPTEKIApAQCAt
MTcxMCw2ICsxNzU4LDggQEAgU09VUkNFUyArPSBcCiAgICAgICAgIHN2Z2VsZW1lbnR3cmFwcGVy
X2hlYWRlci52YXJpYWJsZV9vdXQgPSBHRU5FUkFURURfRklMRVMKICAgICAgICAgYWRkRXh0cmFD
b21waWxlcihzdmdlbGVtZW50d3JhcHBlcl9oZWFkZXIpCiAKKworCiAgICAgICAgICMgR0VORVJB
VE9SIDUtRDoKICAgICAgICAgeGxpbmtuYW1lcy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VT
X0RJUi9YTGlua05hbWVzLmNwcAogICAgICAgICB4bGlua25hbWVzLmNvbW1hbmRzID0gcGVybCAt
SSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS1hdHRycyAk
JFBXRC9zdmcveGxpbmthdHRycy5pbiAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVc
IiAtLW91dHB1dERpciAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUgpAQCAtMTg1MCw3ICsxOTAwLDcg
QEAgYWRkRXh0cmFDb21waWxlcihjb2xvcmRhdGEpCiAKICMgR0VORVJBVE9SIDk6CiBzdHlsZXNo
ZWV0cy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwCi1zdHlsZXNoZWV0cy5jb21tYW5kcyA9IHBlcmwgJCRQV0QvY3NzL21ha2UtY3Nz
LWZpbGUtYXJyYXlzLnBsIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiICQkR0VO
RVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzLmggJCRHRU5FUkFURURfU09V
UkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAkJFBXRC9jc3MvaHRtbDQuY3Nz
ICQkUFdEL2Nzcy9xdWlya3MuY3NzICQkUFdEL2Nzcy9zdmcuY3NzICQkUFdEL2Nzcy92aWV3LXNv
dXJjZS5jc3MKK3N0eWxlc2hlZXRzLmNvbW1hbmRzID0gcGVybCAkJFBXRC9jc3MvbWFrZS1jc3Mt
ZmlsZS1hcnJheXMucGwgLS1wcmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJCRHRU5F
UkFURURfU09VUkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHMuaCAkJEdFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQkUFdEL2Nzcy9odG1sNC5jc3Mg
JCRQV0QvY3NzL3F1aXJrcy5jc3MgJCRQV0QvY3NzL3N2Zy5jc3MgJCRQV0QvY3NzL3ZpZXctc291
cmNlLmNzcyAkJFBXRC9jc3Mvd21sLmNzcwogc3R5bGVzaGVldHMuaW5wdXQgPSBTVFlMRVNIRUVU
U19FTUJFRAogc3R5bGVzaGVldHMuQ09ORklHID0gdGFyZ2V0X3ByZWRlcHMKIHN0eWxlc2hlZXRz
LnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9TT1VSQ0VTCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTI1LDYg
KzUyNSw2NCBAQAogCQk0QjZGQTZGNzBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2RkE2
RjYwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCAqLzsgfTsKIAkJNEI4QUY0
QUEwQjFDRTAyQjAwNjg3NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI4QUY0QTkwQjFDRTAyQjAwNjg3
NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRCQUU5NUIxMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0
b3JEZWxldGVBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCQUU5NUIwMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JEZWxldGVBY3Rpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0QzZCOTk0
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxNjBFNTJFMzczMDA0ODdCQjcg
LyogV01MQWNjZXNzRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTRGMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVu
dC5oICovOyB9OworCQk0QzZCOTk1MDBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MTgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NTEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxOTBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1l
bnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk1MzBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUIwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQzBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmli
dXRlTmFtZXMuaW4gKi87IH07CisJCTRDNkI5OTU1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLzsgfTsKKwkJ
NEM2Qjk5NTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFFMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxCcndDb250ZXh0LmggKi87IH07CisJCTRDNkI5OTU3MEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxDYXJkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkxRjBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuY3Bw
ICovOyB9OworCQk0QzZCOTk1ODBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTIwMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1OTBFNTJF
MzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3Vt
ZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
MjBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NUIwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9F
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1
RDBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyNTBFNTJFMzczMDA0ODdCQjcgLyogV01M
RWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTVFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZC
OTkyNjBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1RjBF
NTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCAqLzsgfTsKKwkJNEM2Qjk5NjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
OTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjIw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdv
RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2MzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovOyB9OworCQk0QzZCOTk2NDBF
NTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyQzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVy
LmggKi87IH07CisJCTRDNkI5OTY1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
MkQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5
OTY2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxJbWFnZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NjcwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkyRjBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNw
cCAqLzsgfTsKKwkJNEM2Qjk5NjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzAw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2OTBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMxMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovOyB9OworCQk0QzZCOTk2QTBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzMjBFNTJFMzczMDA0ODdC
QjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi87IH07CisJCTRDNkI5OTZCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxP
cHRpb25FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTM0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTZEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzNTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2RTBFNTJFMzczMDA0
ODdCQjcgLyogV01MUEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTM2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oICov
OyB9OworCQk0QzZCOTk2RjBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkz
NzBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5jcHAgKi87IH07CisJCTRD
NkI5OTcwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzODBFNTJFMzczMDA0
ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk3MTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QzZCOTkzQTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2
Qjk5NzMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNCMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTc0MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJl
c2hFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxl
Y3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRDNkI5OTNEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5NzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNFMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc3MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxT
ZXR2YXJFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFNldHZhckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTc5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTdBMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
YWJsZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5N0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRh
Z05hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi87IH07CisJCTRD
NkI5OTdDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NDBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3RDBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGFza0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTQ1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5o
ICovOyB9OworCQk0QzZCOTk3RTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk3RjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NzBFNTJFMzczMDA0
ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTgwMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTQ4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5ODEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxUZXh0LmggKi87IH07CisJCTRDNkI5OTgyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
aW1lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgKi87
IH07CisJCTRDNkI5OTgzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTRCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5ODQwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5p
emVyLmNwcCAqLzsgfTsKKwkJNEM2Qjk5ODUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXpl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
NEQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovOyB9OworCQk0Q0Y2RDMwMTBF
NTU2RjRDMDBFRDNGNzQgLyogV01MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNENBM0FCNDkwRTU1NkYyNDAwRTlDMEMwIC8qIFdNTE5hbWVz
LmNwcCAqLzsgfTsKKwkJNENGNkQzMDIwRTU1NkY0RDAwRUQzRjc0IC8qIFdNTE5hbWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Q0EzQUI0ODBFNTU2
RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuaCAqLzsgfTsKIAkJNEUxOTU5MjEwQTM5REFCQTAwMjIw
RkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTFGMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1
cmVOYW1lcy5jcHAgKi87IH07CiAJCTRFMTk1OTIyMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZl
YXR1cmVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEUxOTU5MjAwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi87IH07
CiAJCTRFMTk1OTI5MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTIzMEEzOURBQ0MwMDIy
MEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCAqLzsgfTsKQEAgLTUyNzEsNiArNTMyOSw2NSBAQAogCQk0
QjZGQTZGNjBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hcnRSZXBsYWNlQ0YuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0QjhBRjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJk
QWNjZXNzUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJBRTk1QjAw
QjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFZGl0b3JEZWxldGVBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNEM2Qjk5MTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFjY2Vzc0VsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxNzBFNTJFMzczMDA0
ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV01MQWNjZXNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTkxODBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxBRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
QW5jaG9yRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFC
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTFDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBdHRyaWJ1dGVOYW1lcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV01MQXR0cmlidXRlTmFtZXMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxCcndD
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUUwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTEJyd0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MUYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxDYXJkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQ2FyZEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXTUxEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIy
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV01MRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MRG9FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRG9FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTI1MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5Mjcw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRWxlbWVudEZh
Y3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjkwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEdvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MR29FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV01MR29FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEhlbHBlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTJDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxw
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEhlbHBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyRDBFNTJFMzczMDA0ODdCQjcgLyogV01M
SW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxJbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTky
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5MkYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW5wdXRFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V01MSW5wdXRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMx
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMyMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTkzMzBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT3B0aW9uRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM0MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXTUxPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
NkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MUEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkzNjBFNTJFMzczMDA0ODdCQjcgLyogV01MUEVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0
ZmllbGRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxQb3N0ZmllbGRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBvc3RmaWVsZEVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxQcmV2
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNBMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MUHJldkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5M0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxSZWZyZXNoRWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxSZWZyZXNoRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
UmVmcmVzaEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0Qw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MU2VsZWN0RWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzRjBFNTJFMzczMDA0ODdC
QjcgLyogV01MU2V0dmFyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MU2V0dmFyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxTZXR2YXJFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJs
ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRh
YmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQyMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdNTFRhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFdNTFRhZ05hbWVzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTk0NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDUwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhc2tFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUYXNr
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0NjBFNTJFMzcz
MDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTk0NzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDgwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdNTFRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0OTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV01MVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0QTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTk0QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
VG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
QTNBQjQ4MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV01MTmFtZXMuaDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OworCQk0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdNTE5hbWVzLmNwcDsgcGF0aCA9IC4uL1dl
YktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTRDREU1NEVDMEU1NTc5NzgwMDg5RTI2QyAvKiB3
bWwuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB3bWwuY3NzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0RTE5NTkxRjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFt
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRmVhdHVy
ZU5hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjAwQTM5REFC
QTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUZlYXR1cmVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RTE5NTkyMzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02NTg4LDcgKzY3MDUsNyBAQAogCQk5M0VFQzFGNzA5QzI4Nzc3
MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2hlZWxF
dmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjZFMDlDMzIxODAw
MEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbnZhc1BhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzU3R5bGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJOTNGMTlCMTkwODI0
NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gSW5m
by5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUuZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMxQTA1NThDQzVDMDA4
MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliaWN1
Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7IHNvdXJjZVRyZWUg
PSAiPGFic29sdXRlPiI7IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFCOCAvKiBDb2RlR2Vu
ZXJhdG9yLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0
b3IucG07IHBhdGggPSBzY3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04OTYwLDYgKzkwNzcsNyBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFD
MDcgLyogV2ViS2l0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk0QzZCOTkxNTBFNTJFMzczMDA0ODdCQjcgLyogd21sICovLAogCQkJCTY1Qzk3QUYyMDhF
QTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEz
N0YgLyogV2ViQ29yZVByZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAv
KiBEZXJpdmVkU291cmNlcy5tYWtlICovLApAQCAtOTMyOCw2ICs5NDQ2LDY5IEBACiAJCQl0YWJX
aWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTRDNkI5OTE1MEU1MkUzNzMwMDQ4
N0JCNyAvKiB3bWwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTRDNkI5OTE2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmNwcCAqLywK
KwkJCQk0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovLAor
CQkJCTRDNkI5OTE4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5
OTFCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluICovLAorCQkJCTRDNkI5
OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLywKKwkJCQk0QzZCOTkx
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQnJ3Q29udGV4dC5oICovLAorCQkJCTRDNkI5OTFGMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MjAwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjEwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyMjBFNTJFMzczMDA0
ODdCQjcgLyogV01MRG9jdW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcg
LyogV01MRG9FbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyNDBFNTJFMzczMDA0ODdCQjcgLyog
V01MRG9FbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVs
ZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTI2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
LmggKi8sCisJCQkJNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5
LmNwcCAqLywKKwkJCQk0QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCAqLywKKwkJCQk0QzZCOTkyOTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNw
cCAqLywKKwkJCQk0QzZCOTkyQTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmggKi8s
CisJCQkJNEM2Qjk5MkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5jcHAgKi8sCisJCQkJ
NEM2Qjk5MkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5oICovLAorCQkJCTRDNkI5OTJE
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTJF
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyRjBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzMDBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi8sCisJCQkJNEM2
Qjk5MzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oICovLAor
CQkJCTRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCAqLywK
KwkJCQk0QzZCOTkzNDBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5oICovLAor
CQkJCTRDNkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTM4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggKi8sCisJCQkJ
NEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTkzQTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTkzQjBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTNEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTk0MDBFNTJFMzczMDA0ODdCQjcgLyogV01MU2V0dmFyRWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8sCisJCQkJNEM2Qjk5NDQw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhc2tFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NTBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0NjBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NzBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5NDgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwICovLAorCQkJCTRDNkI5OTQ5MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZXh0LmggKi8sCisJCQkJNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRpbWVyRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5NEIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRpbWVyRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTRDMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUb2tlbml6ZXIuY3BwICovLAorCQkJCTRDNkI5OTREMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
b2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gd21sOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NDUyLDYgKzk2
MzMsOCBAQAogCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0Q0EzQUI0ODBF
NTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuaCAqLywKKwkJCQk0Q0EzQUI0OTBFNTU2RjI0MDBF
OUMwQzAgLyogV01MTmFtZXMuY3BwICovLAogCQkJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAv
KiBDaGFyc2V0RGF0YS5jcHAgKi8sCiAJCQkJNjU2NTgxQUQwOUQxNEVFNjAwMEU2MUQ3IC8qIENv
bG9yRGF0YS5jICovLAogCQkJCTY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFy
LmNwcCAqLywKQEAgLTEzNDU1LDYgKzEzNjM4LDcgQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYz
NUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNENERTU0RUMwRTU1Nzk3ODAwODlFMjZDIC8qIHdtbC5jc3MgKi8sCiAJCQkJQTgwRTZDREEw
QTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIuaCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBC
MTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJCQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovLApAQCAtMTYxOTQsNyArMTYzNzgsNiBAQAogCQkw
ODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJC
MTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldl
YkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKIAkJCWhh
c1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xp
c2gsCkBAIC0xNjI2Nyw2ICsxNjQ1MCw4IEBACiAJCQkJODUxMzZDQTgwQUVENjY1OTAwRjkwQTNE
IC8qIHdlc3RSZXNpemVDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBD
MDUxRkRFMDAxMzlGNEYgLyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJ
MUFCMUFFN0IwQzA1MUZERTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNl
cyAqLywKKwkJCQk0QzZCOTk1NDBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmlidXRlTmFtZXMu
aW4gaW4gUmVzb3VyY2VzICovLAorCQkJCTRDNkI5OTdCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
YWdOYW1lcy5pbiBpbiBSZXNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNl
bGVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNw
cAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAw
NiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDcgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNywgMjAwOCBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMzU0LDYgKzM1Niw5IEBAIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0U3R5
bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVsdFF1aXJrc1N0eWxlOwogc3RhdGljIENTU1J1
bGVTZXQqIGRlZmF1bHRQcmludFN0eWxlOwogc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRWaWV3
U291cmNlU3R5bGU7CisjaWYgRU5BQkxFKFdNTCkKK3N0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0
V21sU3R5bGUgPSAwOworI2VuZGlmCiBzdGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVs
dFN0eWxlU2hlZXQ7CiAKIFJlbmRlclN0eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzX3N0eWxlTm90
WWV0QXZhaWxhYmxlOwpAQCAtNTI1LDYgKzUzMCwxMyBAQCBzdGF0aWMgdm9pZCBsb2FkVmlld1Nv
dXJjZVN0eWxlKCkKICAgICBBU1NFUlQoIWRlZmF1bHRWaWV3U291cmNlU3R5bGUpOwogICAgIGRl
ZmF1bHRWaWV3U291cmNlU3R5bGUgPSBuZXcgQ1NTUnVsZVNldDsKICAgICBkZWZhdWx0Vmlld1Nv
dXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50
U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJjZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZh
bCgpKTsKKworI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKCFkZWZhdWx0V21sU3R5bGUpIHsKKyAg
ICAgICAgZGVmYXVsdFdtbFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7CisgICAgICAgIGRlZmF1bHRX
bWxTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHdtbFVzZXJBZ2VudFN0eWxl
U2hlZXQsIHNpemVvZih3bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7Cisg
ICAgfQorI2VuZGlmCiB9CiAKIHZvaWQgQ1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xh
cmF0aW9uKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsKQpAQCAtOTkwLDYgKzEwMDIs
MTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVjdG9yOjptYXRjaFVBUnVsZXMoaW50JgogICAgICAgICA/
IGRlZmF1bHRQcmludFN0eWxlIDogZGVmYXVsdFN0eWxlOwogICAgIG1hdGNoUnVsZXModXNlckFn
ZW50U3R5bGVTaGVldCwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwogCisjaWYgRU5BQkxFKFdN
TCkKKyAgICBpZiAobV9jaGVja2VyLm1fZG9jdW1lbnQtPmlzV01MRG9jdW1lbnQoKSkKKyAgICAg
ICAgbWF0Y2hSdWxlcyhkZWZhdWx0V21sU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsK
KyNlbmRpZgorCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhl
IHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0LgogICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFy
c2luZykKICAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFSdWxl
LCBsYXN0VUFSdWxlKTsKQEAgLTEwNTAsNiArMTA2NywxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0
eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAgICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQor
ICAgIGlmIChtX2NoZWNrZXIubV9kb2N1bWVudC0+aXNXTUxEb2N1bWVudCgpICYmICFkZWZhdWx0
V21sU3R5bGUpIHsKKyAgICAgICAgZGVmYXVsdFdtbFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7Cisg
ICAgICAgIGRlZmF1bHRXbWxTdHlsZS0+YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHdt
bFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih3bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNj
cmVlbkV2YWwoKSk7CisgICAgfQorI2VuZGlmCisKICAgICBpbnQgZmlyc3RVQVJ1bGUgPSAtMSwg
bGFzdFVBUnVsZSA9IC0xOwogICAgIGludCBmaXJzdFVzZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVs
ZSA9IC0xOwogICAgIGludCBmaXJzdEF1dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAt
MTsKSW5kZXg6IFdlYkNvcmUvY3NzL3dtbC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mv
d21sLmNzcwkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvY3NzL3dtbC5jc3MJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTUxIEBACisvKgorICogVGhlIGRlZmF1bHQgc3R5bGUgc2hlZXQgdXNlZCB0
byByZW5kZXIgSFRNTC4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25v
bGxAa2RlLm9yZykKKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
VG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAg
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCitAbmFtZXNwYWNlICJodHRwOi8vd3d3Lndh
cGZvcnVtLm9yZy8iOworCit3bWwgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKKy8qIGNoaWxk
cmVuIG9mIHRoZSA8aGVhZD4gZWxlbWVudCBhbGwgaGF2ZSBkaXNwbGF5Om5vbmUgKi8KK2hlYWQg
eworICAgIGRpc3BsYXk6IG5vbmUKK30KKworbWV0YSB7CisgICAgZGlzcGxheTogbm9uZQorfQor
CithY2Nlc3MgeworICAgIGRpc3BsYXk6IG5vbmUKK30KKworLyogZ2VuZXJpYyBibG9jay1sZXZl
bCBlbGVtZW50cyAqLworCitjYXJkIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46
IDhweAorfQorCitwIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDEuMF9fcWVt
IDBweAorfQorCitkaXYgeworICAgIGRpc3BsYXk6IGJsb2NrCit9CisKK2xheWVyIHsKKyAgICBk
aXNwbGF5OiBibG9jaworfQorCittYXJxdWVlIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7
CisgICAgb3ZlcmZsb3c6IC13ZWJraXQtbWFycXVlZQorfQorCithZGRyZXNzIHsKKyAgICBkaXNw
bGF5OiBibG9jaworfQorCitibG9ja3F1b3RlIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBt
YXJnaW46IDFfX3FlbSA0MHB4IDFlbSA0MHB4Cit9CisKK3EgeworICAgIGRpc3BsYXk6IGlubGlu
ZQorfQorCitxOmJlZm9yZSB7CisgICAgY29udGVudDogJyInCisgICAgLyogRklYTUU6IGNvbnRl
bnQ6IG9wZW4tcXVvdGU7ICovCit9CisKK3E6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICciJworICAg
IC8qIEZJWE1FOiBjb250ZW50OiBjbG9zZS1xdW90ZTsgKi8KK30KKworY2VudGVyIHsKKyAgICBk
aXNwbGF5OiBibG9jazsKKyAgICAvKiBzcGVjaWFsIGNlbnRlcmluZyB0byBiZSBhYmxlIHRvIGVt
dWxhdGUgdGhlIGh0bWw0L25ldHNjYXBlIGJlaGF2aW91ciAqLworICAgIHRleHQtYWxpZ246IC13
ZWJraXQtY2VudGVyCit9CisKK2hyIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46
IDAuNWVtIGF1dG87CisgICAgYm9yZGVyLXN0eWxlOiBpbnNldDsKKyAgICBib3JkZXItd2lkdGg6
IDFweAorfQorCittYXAgeworICAgIGRpc3BsYXk6IGlubGluZQorfQorCisvKiB0YWJsZXMgKi8K
KwordGFibGUgeworICAgIGRpc3BsYXk6IHRhYmxlOworICAgIGJvcmRlci1jb2xsYXBzZTogc2Vw
YXJhdGU7CisgICAgYm9yZGVyLXNwYWNpbmc6IDJweDsKKyAgICBib3JkZXItY29sb3I6IGdyYXkK
K30KKwordGFibGVbYWxpZ249ImNlbnRlciJdIHsKKyAgICBtYXJnaW4tbGVmdDogYXV0bzsKKyAg
ICBtYXJnaW4tcmlnaHQ6IGF1dG8KK30KKwordGhlYWQgeworICAgIGRpc3BsYXk6IHRhYmxlLWhl
YWRlci1ncm91cDsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOworICAgIGJvcmRlci1jb2xv
cjogaW5oZXJpdAorfQorCit0Ym9keSB7CisgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOwor
ICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0Cit9
CisKK3Rmb290IHsKKyAgICBkaXNwbGF5OiB0YWJsZS1mb290ZXItZ3JvdXA7CisgICAgdmVydGlj
YWwtYWxpZ246IG1pZGRsZTsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQKK30KKworLyogZm9y
IHRhYmxlcyB3aXRob3V0IHRhYmxlIHNlY3Rpb24gZWxlbWVudHMgKGNhbiBoYXBwZW4gd2l0aCBY
SFRNTCBvciBkeW5hbWljYWxseSBjcmVhdGVkIHRhYmxlcykgKi8KK3RhYmxlID4gdHIgeworICAg
IHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7Cit9CisKK2NvbCB7CisgICAgZGlzcGxheTogdGFibGUt
Y29sdW1uCit9CisKK2NvbGdyb3VwIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXAK
K30KKwordHIgeworICAgIGRpc3BsYXk6IHRhYmxlLXJvdzsKKyAgICB2ZXJ0aWNhbC1hbGlnbjog
aW5oZXJpdDsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQKK30KKwordGQsIHRoIHsKKyAgICBk
aXNwbGF5OiB0YWJsZS1jZWxsOworICAgIHZlcnRpY2FsLWFsaWduOiBpbmhlcml0Cit9CisKK3Ro
IHsKKyAgICBmb250LXdlaWdodDogYm9sZAorfQorCitjYXB0aW9uIHsKKyAgICBkaXNwbGF5OiB0
YWJsZS1jYXB0aW9uOworICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2VudGVyCit9CisKKy8qIGxp
c3RzICovCisKK3VsLCBtZW51LCBkaXIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpc3Qt
c3R5bGUtdHlwZTogZGlzYzsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFlbSAwOworICAgIC13ZWJr
aXQtcGFkZGluZy1zdGFydDogNDBweAorfQorCitvbCB7CisgICAgZGlzcGxheTogYmxvY2s7Cisg
ICAgbGlzdC1zdHlsZS10eXBlOiBkZWNpbWFsOworICAgIG1hcmdpbjogMV9fcWVtIDAgMWVtIDA7
CisgICAgLXdlYmtpdC1wYWRkaW5nLXN0YXJ0OiA0MHB4Cit9CisKK2xpIHsKKyAgICBkaXNwbGF5
OiBsaXN0LWl0ZW0KK30KKwordWwgdWwsIG9sIHVsIHsKKyAgICBsaXN0LXN0eWxlLXR5cGU6IGNp
cmNsZQorfQorCitvbCBvbCB1bCwgb2wgdWwgdWwsIHVsIG9sIHVsLCB1bCB1bCB1bCB7CisgICAg
bGlzdC1zdHlsZS10eXBlOiBzcXVhcmUKK30KKworZGQgeworICAgIGRpc3BsYXk6IGJsb2NrOwor
ICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0OiA0MHB4Cit9CisKK2RsIHsKKyAgICBkaXNwbGF5OiBi
bG9jazsKKyAgICBtYXJnaW46IDFfX3FlbSAwIDFlbSAwCit9CisKK2R0IHsKKyAgICBkaXNwbGF5
OiBibG9jaworfQorCitvbCB1bCwgdWwgb2wsIHVsIHVsLCBvbCBvbCB7CisgICAgbWFyZ2luLXRv
cDogMDsKKyAgICBtYXJnaW4tYm90dG9tOiAwCit9CisKKy8qIGZvcm0gZWxlbWVudHMgKi8KKwor
Zm9ybSB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbWFyZ2luOiAwX19xZW0gMCAxZW0gMAor
fQorCitsYWJlbCB7CisgICAgY3Vyc29yOiBkZWZhdWx0OworfQorCitsZWdlbmQgeworICAgIGRp
c3BsYXk6IGJsb2NrOworICAgIHBhZGRpbmctbGVmdDogMnB4OworICAgIHBhZGRpbmctcmlnaHQ6
IDJweDsKKyAgICBib3JkZXI6IG5vbmUKK30KKworZmllbGRzZXQgeworICAgIGRpc3BsYXk6IGJs
b2NrOworICAgIG1hcmdpbi1sZWZ0OiAycHg7CisgICAgbWFyZ2luLXJpZ2h0OiAycHg7CisgICAg
cGFkZGluZzogMC4zNWVtIDAuNzVlbSAwLjYyNWVtOworICAgIGJvcmRlcjogMnB4IGdyb292ZSBU
aHJlZURGYWNlCit9CisKK2J1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247
Cit9CisKK2RvIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBsaWdodGdyYXk7Cit9CisKK2lucHV0
LCB0ZXh0YXJlYSwga2V5Z2VuLCBzZWxlY3QsIGJ1dHRvbiwgaXNpbmRleCB7CisgICAgbWFyZ2lu
OiAwX19xZW07CisgICAgZm9udDogLXdlYmtpdC1zbWFsbC1jb250cm9sOworICAgIGNvbG9yOiBp
bml0aWFsOworICAgIGxldHRlci1zcGFjaW5nOiBub3JtYWw7CisgICAgd29yZC1zcGFjaW5nOiBu
b3JtYWw7CisgICAgbGluZS1oZWlnaHQ6IG5vcm1hbDsKKyAgICB0ZXh0LXRyYW5zZm9ybTogbm9u
ZTsKKyAgICB0ZXh0LWluZGVudDogMDsKKyAgICB0ZXh0LXNoYWRvdzogbm9uZTsKKyAgICBkaXNw
bGF5OiBpbmxpbmUtYmxvY2s7CisgICAgdGV4dC1hbGlnbjogLXdlYmtpdC1hdXRvOworfQorCitp
bnB1dFt0eXBlPSJoaWRkZW4iXSB7CisgICAgZGlzcGxheTogbm9uZQorfQorCitpbnB1dCwgaW5w
dXRbdHlwZT0icGFzc3dvcmQiXSwgaW5wdXRbdHlwZT0ic2VhcmNoIl0sIGlzaW5kZXggeworICAg
IC13ZWJraXQtYXBwZWFyYW5jZTogdGV4dGZpZWxkOworICAgIHBhZGRpbmc6IDFweDsKKyAgICBi
YWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IDJweCBpbnNldDsKKyAgICAtd2Vi
a2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0
OworICAgIGN1cnNvcjogYXV0bzsKK30KKworaW5wdXRbdHlwZT0ic2VhcmNoIl0geworICAgIC13
ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQ7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBi
b3JkZXItYm94OworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2Fu
Y2VsLWJ1dHRvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1jYW5jZWwt
YnV0dG9uOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3Jh
dGlvbiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1kZWNvcmF0aW9uOwor
fQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0
aW9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3Jh
dGlvbjsKK30KKworaW5wdXRbdHlwZT0ic2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMt
YnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0
dG9uOworfQorCit0ZXh0YXJlYSB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsK
KyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAg
ICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0
OiB0ZXh0OworICAgIC13ZWJraXQtYm94LW9yaWVudDogdmVydGljYWw7CisgICAgcmVzaXplOiBh
dXRvOworICAgIGN1cnNvcjogYXV0bzsKK30KKworaW5wdXRbdHlwZT0icGFzc3dvcmQiXSB7Cisg
ICAgLXdlYmtpdC10ZXh0LXNlY3VyaXR5OiBkaXNjICFpbXBvcnRhbnQ7Cit9CisKK2lucHV0W3R5
cGU9ImhpZGRlbiJdLCBpbnB1dFt0eXBlPSJpbWFnZSJdLCBpbnB1dFt0eXBlPSJmaWxlIl0gewor
ICAgIC13ZWJraXQtYXBwZWFyYW5jZTogaW5pdGlhbDsKKyAgICBwYWRkaW5nOiBpbml0aWFsOwor
ICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworfQor
CitpbnB1dFt0eXBlPSJmaWxlIl0geworICAgIC13ZWJraXQtYm94LWFsaWduOiBiYXNlbGluZTsK
K30KKworaW5wdXQ6LXdlYmtpdC1hdXRvZmlsbCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZB
RkZCRCAhaW1wb3J0YW50OworICAgIGJhY2tncm91bmQtaW1hZ2U6bm9uZSAhaW1wb3J0YW50Owor
fQorCitpbnB1dFt0eXBlPSJyYWRpbyJdLCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBt
YXJnaW46IDNweCAwLjVleDsKKyAgICBwYWRkaW5nOiBpbml0aWFsOworICAgIGJhY2tncm91bmQt
Y29sb3I6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworfQorCitpbnB1dFt0eXBlPSJi
dXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0
W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24geworICAgIC13ZWJraXQt
YXBwZWFyYW5jZTogcHVzaC1idXR0b247CisgICAgd2hpdGUtc3BhY2U6IHByZQorfQorCitpbnB1
dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0
Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRv
biB7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICB0ZXh0LWFsaWduOiBjZW50
ZXI7CisgICAgY3Vyc29yOiBkZWZhdWx0OworICAgIGNvbG9yOiBCdXR0b25UZXh0OworICAgIHBh
ZGRpbmc6IDJweCA2cHggM3B4IDZweDsKKyAgICBib3JkZXI6IDJweCBvdXRzZXQgQnV0dG9uRmFj
ZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiBCdXR0b25GYWNlOworICAgIC13ZWJraXQtYm94LXNp
emluZzogYm9yZGVyLWJveAorfQorCitpbnB1dFt0eXBlPSJyYW5nZSJdIHsKKyAgICAtd2Via2l0
LWFwcGVhcmFuY2U6IHNsaWRlci1ob3Jpem9udGFsOworICAgIHBhZGRpbmc6IGluaXRpYWw7Cisg
ICAgYm9yZGVyOiBpbml0aWFsOworICAgIG1hcmdpbjogMnB4OworfQorCitpbnB1dFt0eXBlPSJy
YW5nZSJdOjotd2Via2l0LXNsaWRlci10aHVtYiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBz
bGlkZXJ0aHVtYi1ob3Jpem9udGFsOworfQorCitpbnB1dFt0eXBlPSJidXR0b24iXTpkaXNhYmxl
ZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06ZGlzYWJsZWQsIGlucHV0W3R5cGU9InJlc2V0Il06ZGlz
YWJsZWQsIGlucHV0W3R5cGU9ImZpbGUiXTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1i
dXR0b24sIGJ1dHRvbjpkaXNhYmxlZCwgc2VsZWN0OmRpc2FibGVkLCBrZXlnZW46ZGlzYWJsZWQs
IG9wdGdyb3VwOmRpc2FibGVkLCBvcHRpb246ZGlzYWJsZWQgeworICAgIGNvbG9yOiBHcmF5VGV4
dAorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXTphY3RpdmUsIGlucHV0W3R5cGU9InN1Ym1pdCJd
OmFjdGl2ZSwgaW5wdXRbdHlwZT0icmVzZXQiXTphY3RpdmUsIGlucHV0W3R5cGU9ImZpbGUiXTph
Y3RpdmU6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uLCBidXR0b246YWN0aXZlIHsKKyAgICBi
b3JkZXItc3R5bGU6IGluc2V0Cit9CisKK2lucHV0W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZTpkaXNh
YmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06YWN0aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJy
ZXNldCJdOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0iZmlsZSJdOmFjdGl2ZTpkaXNhYmxl
ZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjphY3RpdmU6ZGlzYWJsZWQgewor
ICAgIGJvcmRlci1zdHlsZTogb3V0c2V0Cit9CisKK2FyZWEsIHBhcmFtIHsKKyAgICBkaXNwbGF5
OiBub25lCit9CisKK2lucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAgIC13ZWJraXQtYXBwZWFy
YW5jZTogY2hlY2tib3g7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQor
CitpbnB1dFt0eXBlPSJyYWRpbyJdIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHJhZGlvOwor
ICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveDsKK30KKwora2V5Z2VuLCBzZWxlY3Qg
eworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7CisgICAgLXdlYmtpdC1ib3gtc2l6
aW5nOiBib3JkZXItYm94OworICAgIC13ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7CisgICAgYm9y
ZGVyOiAxcHggc29saWQ7CisgICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CisgICAgd2hp
dGUtc3BhY2U6IHByZTsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICBj
b2xvcjogYmxhY2s7CisgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CisgICAgY3Vyc29yOiBk
ZWZhdWx0OworfQorCitzZWxlY3Rbc2l6ZV0sCitzZWxlY3RbbXVsdGlwbGVdLAorc2VsZWN0W3Np
emVdW211bHRpcGxlXSB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBsaXN0Ym94OworICAgIC13
ZWJraXQtYm94LWFsaWduOiBzdGFydDsKKyAgICBib3JkZXI6IDFweCBpbnNldCBncmF5OworICAg
IC13ZWJraXQtYm9yZGVyLXJhZGl1czogaW5pdGlhbDsKKyAgICB3aGl0ZS1zcGFjZTogaW5pdGlh
bDsKK30KKworc2VsZWN0W3NpemU9IjAiXSwKK3NlbGVjdFtzaXplPSIxIl0geworICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsK
KyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsK
KyAgICB3aGl0ZS1zcGFjZTogcHJlOworfQorCitvcHRncm91cCB7CisgICAgZm9udC13ZWlnaHQ6
IGJvbGRlcjsKK30KKworb3B0aW9uIHsKKyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisv
KiBpbmxpbmUgZWxlbWVudHMgKi8KKwordSwgaW5zIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVu
ZGVybGluZQorfQorCitzdHJvbmcsIGIgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkZXIKK30KKwor
aSwgY2l0ZSwgZW0sIHZhciwgYWRkcmVzcyB7CisgICAgZm9udC1zdHlsZTogaXRhbGljCit9CisK
K3R0LCBjb2RlLCBrYmQsIHNhbXAgeworICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UKK30KKwor
cHJlLCB4bXAsIHBsYWludGV4dCwgbGlzdGluZyB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAg
Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgIG1hcmdp
bjogMV9fcWVtIDAKK30KKworYmlnIHsKKyAgICBmb250LXNpemU6IGxhcmdlcgorfQorCitzbWFs
bCB7CisgICAgZm9udC1zaXplOiBzbWFsbGVyCit9CisKK3MsIHN0cmlrZSwgZGVsIHsKKyAgICB0
ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaAorfQorCitzdWIgeworICAgIHZlcnRpY2FsLWFs
aWduOiBzdWI7CisgICAgZm9udC1zaXplOiBzbWFsbGVyCit9CisKK3N1cCB7CisgICAgdmVydGlj
YWwtYWxpZ246IHN1cGVyOworICAgIGZvbnQtc2l6ZTogc21hbGxlcgorfQorCitub2JyIHsKKyAg
ICB3aGl0ZS1zcGFjZTogbm93cmFwCit9CisKKy8qIHN0YXRlcyAqLworCis6Zm9jdXMgeyAKKyAg
ICBvdXRsaW5lOiBhdXRvIDVweCAtd2Via2l0LWZvY3VzLXJpbmctY29sb3IKK30KKworLyogUmVh
ZC1vbmx5IHRleHQgZmllbGRzIGRvIG5vdCBzaG93IGEgZm9jdXMgcmluZyBidXQgZG8gc3RpbGwg
cmVjZWl2ZSBmb2N1cyAqLword21sOmZvY3VzLCBjYXJkOmZvY3VzLCBpbnB1dFtyZWFkb25seV06
Zm9jdXMgeyAKKyAgICBvdXRsaW5lOiBub25lCit9CisgIAoraW5wdXQ6Zm9jdXMsIHRleHRhcmVh
OmZvY3VzLCBpc2luZGV4OmZvY3VzLCBrZXlnZW46Zm9jdXMsIHNlbGVjdDpmb2N1cyB7CisgICAg
b3V0bGluZS1vZmZzZXQ6IC0ycHgKK30KKworaW5wdXRbdHlwZT0iYnV0dG9uIl06Zm9jdXMsCitp
bnB1dFt0eXBlPSJjaGVja2JveCJdOmZvY3VzLAoraW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLAor
aW5wdXRbdHlwZT0iaGlkZGVuIl06Zm9jdXMsCitpbnB1dFt0eXBlPSJpbWFnZSJdOmZvY3VzLAor
aW5wdXRbdHlwZT0icmFkaW8iXTpmb2N1cywKK2lucHV0W3R5cGU9InJlc2V0Il06Zm9jdXMsCitp
bnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1cywKK2lucHV0W3R5cGU9InN1Ym1pdCJdOmZvY3VzLAor
aW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7Cisg
ICAgb3V0bGluZS1vZmZzZXQ6IDAKK30KKyAgICAKK2E6LXdlYmtpdC1hbnktbGluayB7CisgICAg
Y29sb3I6IC13ZWJraXQtbGluazsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30K
KworYTotd2Via2l0LWFueS1saW5rOmFjdGl2ZSB7CisgICAgY29sb3I6IC13ZWJraXQtYWN0aXZl
bGluaworfQorCithbmNob3I6LXdlYmtpdC1hbnktbGluayB7CisgICAgY29sb3I6IC13ZWJraXQt
bGluazsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworYW5jaG9yOi13ZWJr
aXQtYW55LWxpbms6YWN0aXZlIHsKKyAgICBjb2xvcjogLXdlYmtpdC1hY3RpdmVsaW5rCit9CisK
Ky8qIG90aGVyIGVsZW1lbnRzICovCisKK25vZnJhbWVzIHsKKyAgICBkaXNwbGF5OiBub25lCit9
CisKK2ZyYW1lc2V0LCBmcmFtZSB7CisgICAgZGlzcGxheTogYmxvY2sKK30KKworZnJhbWVzZXQg
eworICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCitpZnJhbWUgeworICAgIGJvcmRlcjog
MnB4IGluc2V0Cit9CisKKy8qIG5vc2NyaXB0IGlzIGhhbmRsZWQgaW50ZXJuYWxseSwgYXMgaXQg
ZGVwZW5kcyBvbiBzZXR0aW5ncyAqLwpJbmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRp
b24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAko
cmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQsNiArNCw4IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBN
dWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJp
Z2h0IChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAg
ICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YwpAQCAtNTIsNiArNTQsMTAgQEAKICNpbmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2VuZGlmCiAK
KyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTERvY3VtZW50LmgiCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgRU5BQkxFKFNWRykKQEAgLTMwOCw2ICszMTQsMTUgQEAg
UGFzc1JlZlB0cjxEb2N1bWVudD4gRE9NSW1wbGVtZW50YXRpb246OgogICAgICAgICByZXR1cm4g
SFRNTERvY3VtZW50OjpjcmVhdGUoZnJhbWUpOwogICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlv
bi94aHRtbCt4bWwiKQogICAgICAgICByZXR1cm4gRG9jdW1lbnQ6OmNyZWF0ZVhIVE1MKGZyYW1l
KTsKKworI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKCh0eXBlID09ICJ0ZXh0L3ZuZC53YXAud21s
IikKKyNpZiBFTkFCTEUoV0JYTUwpCisgICAgICAgIHx8ICh0eXBlID09ICJhcHBsaWNhdGlvbi92
bmQud2FwLndtbGMiKQorI2VuZGlmCisgICAgICAgICkKKyAgICAgICAgcmV0dXJuIFdNTERvY3Vt
ZW50OjpjcmVhdGUoZnJhbWUpOworI2VuZGlmCiAgICAgICAgIAogI2lmIEVOQUJMRShGVFBESVIp
CiAgICAgLy8gUGx1Z2lucyBjYW5ub3QgdGFrZSBGVFAgZnJvbSB1cyBlaXRoZXIKSW5kZXg6IFdl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9Eb2N1bWVu
dC5jcHAJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00LDYgKzQsOCBAQAogICogICAgICAgICAgIChDKSAyMDAxIERpcmsgTXVl
bGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAgIChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtMTA4LDYgKzExMCwxMCBAQAogI2luY2x1ZGUgIldlYktpdEFuaW1hdGlvbkV2ZW50
LmgiCiAjaW5jbHVkZSAiV2ViS2l0VHJhbnNpdGlvbkV2ZW50LmgiCiAjaW5jbHVkZSAiV2hlZWxF
dmVudC5oIgorI2lmIEVOQUJMRShXTUwpCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3RvcnkuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2VuZGlmCiAjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3Qu
aCIKICNpbmNsdWRlICJYTUxOYW1lcy5oIgogI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgpAQCAt
Nzc3LDYgKzc4MywxMCBAQCBQYXNzUmVmUHRyPEVsZW1lbnQ+IERvY3VtZW50OjpjcmVhdGVFbGVt
CiAgICAgZWxzZSBpZiAocU5hbWUubmFtZXNwYWNlVVJJKCkgPT0gU1ZHTmFtZXM6OnN2Z05hbWVz
cGFjZVVSSSkKICAgICAgICAgZSA9IFNWR0VsZW1lbnRGYWN0b3J5OjpjcmVhdGVTVkdFbGVtZW50
KHFOYW1lLCB0aGlzLCBjcmVhdGVkQnlQYXJzZXIpOwogI2VuZGlmCisjaWYgRU5BQkxFKFdNTCkK
KyAgICBlbHNlIGlmIChxTmFtZS5uYW1lc3BhY2VVUkkoKSA9PSBXTUxOYW1lczo6d21sTmFtZXNw
YWNlVVJJKQorICAgICAgICBlID0gV01MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZVdNTEVsZW1lbnQo
cU5hbWUsIHRoaXMsIGNyZWF0ZWRCeVBhcnNlcik7CisjZW5kaWYKICAgICAKICAgICBpZiAoIWUp
CiAgICAgICAgIGUgPSBuZXcgRWxlbWVudChxTmFtZSwgZG9jdW1lbnQoKSk7CkluZGV4OiBXZWJD
b3JlL2RvbS9Eb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmgJ
KHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkod29ya2luZyBjb3B5
KQpAQCAtNCw2ICs0LDggQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11
ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292
IChhcEB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3
LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAg
LTI5Miw2ICsyOTQsOSBAQCBwdWJsaWM6CiAjZW5kaWYKICAgICB2aXJ0dWFsIGJvb2wgaXNQbHVn
aW5Eb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCBib29sIGlz
TWVkaWFEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisjaWYgRU5BQkxFKFdNTCkK
KyAgICB2aXJ0dWFsIGJvb2wgaXNXTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CisjZW5kaWYKICAgICAKICAgICBDU1NTdHlsZVNlbGVjdG9yKiBzdHlsZVNlbGVjdG9yKCkgY29u
c3QgeyByZXR1cm4gbV9zdHlsZVNlbGVjdG9yOyB9CiAKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRv
a2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAko
cmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWlu
aWcgKHNhbUB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0
aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA4IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0yODcsNiArMjg4LDE2IEBAIHZvaWQgWE1MVG9rZW5pemVyOjppbnNlcnRFcnJvck1lc3Nh
Z2VCbG8KICAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9keS5nZXQoKTsKICAgICB9CiAjZW5k
aWYKKyNpZiBFTkFCTEUoV01MKQorICAgIGVsc2UgaWYgKG1fZG9jLT5pc1dNTERvY3VtZW50KCkp
IHsKKyAgICAgICAgUmVmUHRyPE5vZGU+IHJvb3RFbGVtZW50ID0gZG9jLT5jcmVhdGVFbGVtZW50
TlMoSFRNTE5hbWVzOjp4aHRtbE5hbWVzcGFjZVVSSSwgImh0bWwiLCBlYyk7CisgICAgICAgIFJl
ZlB0cjxOb2RlPiBib2R5ID0gZG9jLT5jcmVhdGVFbGVtZW50TlMoSFRNTE5hbWVzOjp4aHRtbE5h
bWVzcGFjZVVSSSwgImJvZHkiLCBlYyk7CisgICAgICAgIHJvb3RFbGVtZW50LT5hcHBlbmRDaGls
ZChib2R5LCBlYyk7CisgICAgICAgIGJvZHktPmFwcGVuZENoaWxkKGRvY3VtZW50RWxlbWVudCwg
ZWMpOworICAgICAgICBkb2MtPmFwcGVuZENoaWxkKHJvb3RFbGVtZW50LmdldCgpLCBlYyk7Cisg
ICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGJvZHkuZ2V0KCk7CisgICAgfQorI2VuZGlmCiAKICAg
ICBSZWZQdHI8RWxlbWVudD4gcmVwb3J0RWxlbWVudCA9IGNyZWF0ZVhIVE1MUGFyc2VyRXJyb3JI
ZWFkZXIoZG9jLCBtX2Vycm9yTWVzc2FnZXMpOwogICAgIGRvY3VtZW50RWxlbWVudC0+aW5zZXJ0
QmVmb3JlKHJlcG9ydEVsZW1lbnQsIGRvY3VtZW50RWxlbWVudC0+Zmlyc3RDaGlsZCgpLCBlYyk7
CkluZGV4OiBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2RvbS9YTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2RvbS9YTUxU
b2tlbml6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDcgQEAKICAqIENvcHlyaWdodCAo
QykgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC03Myw2ICs3NCw4IEBAIG5h
bWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRJc1hIVE1MRG9jdW1lbnQoYm9vbCBp
c1hIVE1MKSB7IG1faXNYSFRNTERvY3VtZW50ID0gaXNYSFRNTDsgfQogICAgICAgICBib29sIGlz
WEhUTUxEb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faXNYSFRNTERvY3VtZW50OyB9CiAKKyAg
ICAgICAgRG9jdW1lbnQgKmRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4gbV9kb2M7IH0KKwogICAg
ICAgICAvLyBmcm9tIENhY2hlZFJlc291cmNlQ2xpZW50CiAgICAgICAgIHZpcnR1YWwgdm9pZCBu
b3RpZnlGaW5pc2hlZChDYWNoZWRSZXNvdXJjZSogZmluaXNoZWRPYmopOwogCkBAIC05MSwxMiAr
OTQsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgdm9pZCBwYXJzZVN0YXJ0RWxlbWVudCgpOwogICAg
ICAgICB2b2lkIHBhcnNlRW5kRWxlbWVudCgpOwogICAgICAgICB2b2lkIHBhcnNlQ2hhcmFjdGVy
cygpOwotICAgICAgICB2b2lkIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CisgICAgICAg
IHZvaWQgZW5kRG9jdW1lbnQoKTsKICAgICAgICAgdm9pZCBwYXJzZUNkYXRhKCk7CisgICAgICAg
IGJvb2wgaGFzRXJyb3IoKSBjb25zdDsKKyNpZiBFTkFCTEUoV01MKQorcHJvdGVjdGVkOgorI2Vu
ZGlmCisgICAgICAgIHZvaWQgcGFyc2VQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKICAgICAgICAg
dm9pZCBwYXJzZUNvbW1lbnQoKTsKLSAgICAgICAgdm9pZCBlbmREb2N1bWVudCgpOwogICAgICAg
ICB2b2lkIHBhcnNlRHRkKCk7Ci0gICAgICAgIGJvb2wgaGFzRXJyb3IoKSBjb25zdDsKICNlbHNl
CiBwdWJsaWM6CiAgICAgICAgIC8vIGNhbGxiYWNrcyBmcm9tIHBhcnNlciBTQVgKQEAgLTExMiwx
OCArMTE4LDI4IEBAIHB1YmxpYzoKICAgICAgICAgdm9pZCBpbnRlcm5hbFN1YnNldChjb25zdCB4
bWxDaGFyKiBuYW1lLCBjb25zdCB4bWxDaGFyKiBleHRlcm5hbElELCBjb25zdCB4bWxDaGFyKiBz
eXN0ZW1JRCk7CiAgICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKICNlbmRpZgorCisjaWYgRU5B
QkxFKFdNTCkKKyAgICBwcm90ZWN0ZWQ6CisjaWYgVVNFKFFYTUxTVFJFQU0pCisgICAgICAgIFFY
bWxTdHJlYW1SZWFkZXImIHhtbFN0cmVhbVJlYWRlcigpIHsgcmV0dXJuIG1fc3RyZWFtOyB9Cisg
ICAgICAgIEZyYW1lVmlldyogZnJhbWVWaWV3KCkgY29uc3QgeyByZXR1cm4gbV92aWV3OyB9Cisg
ICAgICAgIE5vZGUqIGN1cnJlbnROb2RlKCkgY29uc3QgeyByZXR1cm4gbV9jdXJyZW50Tm9kZTsg
fQorI2VuZGlmCisjZWxzZQorICAgIHByaXZhdGU6CisjZW5kaWYKKyAgICAgICAgdm9pZCBzZXRD
dXJyZW50Tm9kZShOb2RlKik7CisgICAgICAgIGJvb2wgZW50ZXJUZXh0KCk7CisgICAgICAgIHZv
aWQgZXhpdFRleHQoKTsKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgYm9vbCBwYXJzZVhN
TERvY3VtZW50RnJhZ21lbnQoY29uc3QgU3RyaW5nJiBjaHVuaywgRG9jdW1lbnRGcmFnbWVudCog
ZnJhZ21lbnQsIEVsZW1lbnQqIHBhcmVudCk7CiAKICAgICAgICAgc3RhdGljIHZvaWQgZXZlbnR1
YWxseU1hcmtBc1BhcnNlckNyZWF0ZWQoRWxlbWVudCogZWxlbWVudCk7CiAgICAgICAgIHZvaWQg
aW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoY29uc3QgY2hhciogY2h1bmsgPSAwKTsKLSAgICAgICAg
dm9pZCBzZXRDdXJyZW50Tm9kZShOb2RlKik7CiAKICAgICAgICAgdm9pZCBpbnNlcnRFcnJvck1l
c3NhZ2VCbG9jaygpOwogCi0gICAgICAgIGJvb2wgZW50ZXJUZXh0KCk7Ci0gICAgICAgIHZvaWQg
ZXhpdFRleHQoKTsKLQogICAgICAgICB2b2lkIGRvV3JpdGUoY29uc3QgU3RyaW5nJik7CiAgICAg
ICAgIHZvaWQgZG9FbmQoKTsKIApJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyUXQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplclF0LmNwcAkocmV2aXNpb24g
Mzc5MjIpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTUsNiArNSw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2Ft
QHdlYmtpdC5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5k
L29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhh
bnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5j
LiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTc0
Nyw2ICs3NDgsMTQgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnBhcnNlRHRkKCkKICAgICAgICAgfHwg
KHB1YmxpY0lkID09IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgWEhUTUwgTW9iaWxl
IDEuMC8vRU4iKSkpIHsKICAgICAgICAgc2V0SXNYSFRNTERvY3VtZW50KHRydWUpOyAvLyBjb250
cm9scyBpZiB3ZSByZXBsYWNlIGVudGl0aWVzIG9yIG5vdC4KICAgICB9CisjaWYgRU5BQkxFKFdN
TCkKKyAgICBlbHNlIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVudCgpCisgICAgICAgICAgICAmJiBw
dWJsaWNJZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjMvL0VOIikK
KyAgICAgICAgICAgICYmIHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMi8vRU4iKQorICAgICAgICAgICAgJiYgcHVibGljSWQgIT0gUUxhdGluMVN0cmlu
ZygiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIpCisgICAgICAgICAgICAmJiBwdWJsaWNJ
ZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIikpCisgICAg
ICAgIGhhbmRsZUVycm9yKGZhdGFsLCAiSW52YWxpZCBEVEQgUHVibGljIElEIiwgbGluZU51bWJl
cigpLCBjb2x1bW5OdW1iZXIoKSk7CisjZW5kaWYKICAgICBpZiAoIW1fcGFyc2luZ0ZyYWdtZW50
KQogICAgICAgICBtX2RvYy0+YWRkQ2hpbGQoRG9jdW1lbnRUeXBlOjpjcmVhdGUobV9kb2MsIG5h
bWUsIHB1YmxpY0lkLCBzeXN0ZW1JZCkpOwogICAgIApJbmRleDogV2ViQ29yZS9oaXN0b3J5L0Jh
Y2tGb3J3YXJkTGlzdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdC5jcHAJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3
YXJkTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJp
Z2h0IChDKSAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjY0LDQgKzI2NiwxOSBAQCBib29s
IEJhY2tGb3J3YXJkTGlzdDo6Y29udGFpbnNJdGVtKEhpc3RvCiAgICAgcmV0dXJuIG1fZW50cnlI
YXNoLmNvbnRhaW5zKGVudHJ5KTsKIH0KIAorI2lmIEVOQUJMRShXTUwpCisvLyBjbGVhciB0aGUg
aGlzdG9yeSBvZiBjdXJyZW50IFdNTCBwYWdlCit2b2lkIEJhY2tGb3J3YXJkTGlzdDo6Y2xlYXJX
bWxQYWdlSGlzdG9yeSgpCit7CisgICAgUGFzc1JlZlB0cjxIaXN0b3J5SXRlbT4gY3VyID0gY3Vy
cmVudEl0ZW0oKTsKKworICAgIGludCBzaXplID0gbV9lbnRyaWVzLnNpemUoKTsKKyAgICBmb3Ig
KGludCBpID0gMDsgaSA8IHNpemU7ICsraSkKKyAgICAgICAgcGFnZUNhY2hlKCktPnJlbW92ZSht
X2VudHJpZXNbaV0uZ2V0KCkpOworICAgIG1fZW50cmllcy5jbGVhcigpOworICAgIG1fZW50cnlI
YXNoLmNsZWFyKCk7CisgICAgbV9jdXJyZW50ID0gTm9DdXJyZW50SXRlbUluZGV4OworfQorI2Vu
ZGlmCisKIH07IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFj
a0ZvcndhcmRMaXN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJk
TGlzdC5oCShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExp
c3QuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC03Myw2ICs3NSw5IEBAIHB1YmxpYzogCiAgICAgdm9pZCBy
ZW1vdmVJdGVtKEhpc3RvcnlJdGVtKik7CiAgICAgSGlzdG9yeUl0ZW1WZWN0b3ImIGVudHJpZXMo
KTsKICAgICAKKyNpZiBFTkFCTEUoV01MKQorICAgIHZvaWQgY2xlYXJXbWxQYWdlSGlzdG9yeSgp
OworI2VuZGlmCiBwcml2YXRlOgogICAgIEJhY2tGb3J3YXJkTGlzdChQYWdlKik7CiAKSW5kZXg6
IFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3Jl
L2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsOCBA
QAogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlh
a292IChhcEBueXBvcC5jb20pCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAo
c2FtQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC00NSw2ICs0NywxNSBAQCBIVE1MQnV0
dG9uRWxlbWVudDo6SFRNTEJ1dHRvbkVsZW1lbnQoRG9jCiB7CiB9CiAKKyNpZiBFTkFCTEUoV01M
KQorSFRNTEJ1dHRvbkVsZW1lbnQ6OkhUTUxCdXR0b25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZywgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRN
TEZvcm1Db250cm9sRWxlbWVudCh0YWcsIGRvYywgZm9ybSkKKyAgICAsIG1fdHlwZShCVVRUT04p
CisgICAgLCBtX2FjdGl2ZVN1Ym1pdChmYWxzZSkKK3sKK30KKyNlbmRpZgorCiBIVE1MQnV0dG9u
RWxlbWVudDo6fkhUTUxCdXR0b25FbGVtZW50KCkKIHsKIH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9I
VE1MQnV0dG9uRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9u
RWxlbWVudC5oCShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxl
bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zLDYgKzMsOCBAQAogICogICAgICAgICAgIChDKSAx
OTk5IEFudHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogICAgICAgICAgIChDKSAy
MDAwIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0
LCAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTMxLDYgKzMzLDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgSFRN
TEJ1dHRvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTEZvcm1Db250cm9sRWxlbWVudCB7CiBwdWJsaWM6
CiAgICAgSFRNTEJ1dHRvbkVsZW1lbnQoRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7
CisjaWYgRU5BQkxFKFdNTCkKKyAgICBIVE1MQnV0dG9uRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CisjZW5kaWYKICAgICB2aXJ0
dWFsIH5IVE1MQnV0dG9uRWxlbWVudCgpOwogCiAgICAgdmlydHVhbCBjb25zdCBBdG9taWNTdHJp
bmcmIHR5cGUoKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24g
Mzc5MjIpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlRWxlbWVudC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yLDYgKzIsOCBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xs
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMTE2LDYgKzExOCwxMCBAQCBwdWJsaWM6
CiAKICAgICB2aXJ0dWFsIHZvaWQgZ2V0U3VicmVzb3VyY2VBdHRyaWJ1dGVTdHJpbmdzKFZlY3Rv
cjxTdHJpbmc+JikgY29uc3Q7CiAKKyNpZiBFTkFCTEUoV01MKQorICAgIHZpcnR1YWwgYm9vbCBp
c1dNTEltYWdlRWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgSFRNTEltYWdl
TG9hZGVyJiBpbWFnZUxvYWRlcigpIHsgcmV0dXJuIG1faW1hZ2VMb2FkZXI7IH0KKyNlbmRpZgog
cHJpdmF0ZToKICAgICBIVE1MSW1hZ2VMb2FkZXIgbV9pbWFnZUxvYWRlcjsKICAgICBTdHJpbmcg
dXNlbWFwOwpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDM3OTIyKQor
KysgV2ViQ29yZS9odG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIs
NiArMiw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9y
ZykKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9y
ZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOCw2ICszMCwxMSBAQAogI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJI
VE1MT2JqZWN0RWxlbWVudC5oIgorI2lmIEVOQUJMRShXTUwpCisjaW5jbHVkZSAiV01MSW1hZ2VF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNlbmRpZgorI2luY2x1ZGUgIkltYWdl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNjAsNiArNjcsMTEgQEAgdm9pZCBIVE1M
SW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogICAgIEVsZW1lbnQqIGVsZW0gPSBlbGVt
ZW50KCk7CiAgICAgSW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKGltYWdlKTsKIAorI2lmIEVO
QUJMRShXTUwpCisgICAgaWYoaW1hZ2UtPmVycm9yT2NjdXJyZWQoKSAmJiBlbGVtLT5oYXNUYWdO
YW1lKEhUTUxOYW1lczo6aW1nVGFnKSAmJiBzdGF0aWNfY2FzdDxIVE1MSW1hZ2VFbGVtZW50Kj4o
ZWxlbSktPmlzV01MSW1hZ2VFbGVtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTEltYWdl
RWxlbWVudCo+KGVsZW0pLT5yZWxvYWRJbWFnZUJ5U3JjQXR0cigpOworI2VuZGlmCisKICAgICBp
ZiAoaW1hZ2UtPmVycm9yT2NjdXJyZWQoKSAmJiBlbGVtLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6
b2JqZWN0VGFnKSkKICAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTE9iamVjdEVsZW1lbnQqPihlbGVt
KS0+cmVuZGVyRmFsbGJhY2tDb250ZW50KCk7CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvSFRNTFNl
bGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0Nyw3ICsxMDQ3LDExIEBAIHZvaWQgSFRNTFNl
bGVjdEVsZW1lbnQ6OmFjY2Vzc0tleVNldFNlbGUKICAgICAKIHZvaWQgSFRNTFNlbGVjdEVsZW1l
bnQ6OnNldE11bHRpcGxlKGJvb2wgbXVsdGlwbGUpCiB7CisjaWYgRU5BQkxFKFdNTCkKKyAgICBt
X211bHRpcGxlID0gbXVsdGlwbGU7CisjZWxzZQogICAgIHNldEF0dHJpYnV0ZShtdWx0aXBsZUF0
dHIsIG11bHRpcGxlID8gIiIgOiAwKTsKKyNlbmRpZgogfQogCiB2b2lkIEhUTUxTZWxlY3RFbGVt
ZW50OjpzZXRTaXplKGludCBzaXplKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHJl
dmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtp
bmcgY29weSkKQEAgLTMsNiArMyw4IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29p
dmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVs
bGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYs
IDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
ICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAt
NTYsOSArNTgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50
KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5k
ZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsKIAog
ICAgIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4
KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlID0gZmFs
c2UpOwogICAgIGludCBsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSBjb25zdDsKIAogICAgIHZpcnR1
YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTEzNywx
OSArMTM5LDMyIEBAIHB1YmxpYzoKICAgICBpbnQgYWN0aXZlU2VsZWN0aW9uRW5kTGlzdEluZGV4
KCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOworI2lmIEVOQUJM
RShXTUwpCitwcm90ZWN0ZWQ6CisgICAgaW50IGFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleDsgfQorICAgIGludCBh
Y3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9u
RW5kSW5kZXg7IH0KKyAgICBpbnQgYWN0aXZlU2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlOyB9CisgICAgdm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25T
dGF0ZShib29sIGFjdGl2ZSkgeyBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gYWN0aXZlOyB9Cisj
ZW5kaWYKIAorI2lmIEVOQUJMRShXTUwpCitwcm90ZWN0ZWQ6CisjZWxzZQogcHJpdmF0ZToKLSAg
ICB2b2lkIHJlY2FsY0xpc3RJdGVtcyhib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzID0gdHJ1ZSkg
Y29uc3Q7Ci0gICAgdm9pZCBjaGVja0xpc3RJdGVtcygpIGNvbnN0OwotCisjZW5kaWYKICAgICB2
b2lkIGRlc2VsZWN0SXRlbXMoSFRNTE9wdGlvbkVsZW1lbnQqIGV4Y2x1ZGVFbGVtZW50ID0gMCk7
CiAgICAgYm9vbCB1c2VzTWVudUxpc3QoKSBjb25zdCB7IHJldHVybiAhbV9tdWx0aXBsZSAmJiBt
X3NpemUgPD0gMTsgfQorICAgIHZvaWQgdHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50Kik7Cisg
ICAgdm9pZCBzYXZlTGFzdFNlbGVjdGlvbigpOwogICAgIGludCBuZXh0U2VsZWN0YWJsZUxpc3RJ
bmRleChpbnQgc3RhcnRJbmRleCk7CiAgICAgaW50IHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRl
eChpbnQgc3RhcnRJbmRleCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZWNhbGNMaXN0SXRlbXMo
Ym9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcyA9IHRydWUpIGNvbnN0OworICAgIHZvaWQgY2hlY2tM
aXN0SXRlbXMoKSBjb25zdDsKKwogICAgIHZvaWQgbWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVy
KEV2ZW50Kik7CiAgICAgdm9pZCBsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwot
ICAgIHZvaWQgdHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50Kik7Ci0gICAgdm9pZCBzYXZlTGFz
dFNlbGVjdGlvbigpOwogCiAgICAgbXV0YWJsZSBWZWN0b3I8SFRNTEVsZW1lbnQqPiBtX2xpc3RJ
dGVtczsKICAgICBWZWN0b3I8Ym9vbD4gbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbjsK
SW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9s
b2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEsOCBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29y
IGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNjgs
NiArMjcwLDkgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFtZSwgRgogICAg
ICwgbV9maW5pc2hlZFBhcnNpbmdEdXJpbmdMb3dCYW5kd2lkdGhEaXNwbGF5KGZhbHNlKQogICAg
ICwgbV9uZWVkVG9Td2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5KGZhbHNlKQogI2VuZGlmIAor
I2lmIEVOQUJMRShXTUwpCisgICAgLCBtX2ZvcmNlUmVsb2FkV21sRGVjayhmYWxzZSkKKyNlbmRp
ZgogewogfQogCkBAIC0xMDAxLDcgKzEwMDYsNyBAQCB2b2lkIEZyYW1lTG9hZGVyOjp3cml0ZShj
b25zdCBjaGFyKiBzdHIsCiAgICAgICAgICAgICB0b2tlbml6ZXItPndyaXRlUmF3RGF0YShzdHIs
IGxlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAoIW1fZGVjb2Rl
cikgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0aW5ncygpOwog
ICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUobV9yZXNwb25z
ZU1JTUVUeXBlLCBzZXR0aW5ncyA/IHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29kaW5nTmFtZSgp
IDogU3RyaW5nKCkpOwpAQCAtMjg3OCw4ICsyODgzLDIxIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmNs
aWVudFJlZGlyZWN0ZWQoY29uc3QKICAgICBtX3F1aWNrUmVkaXJlY3RDb21pbmcgPSBsb2NrSGlz
dG9yeSAmJiBtX2RvY3VtZW50TG9hZGVyICYmICFpc0phdmFTY3JpcHRGb3JtQWN0aW9uOwogfQog
CisjaWYgRU5BQkxFKFdNTCkKK3ZvaWQgRnJhbWVMb2FkZXI6OnNldEZvcmNlUmVsb2FkV21sRGVj
ayhib29sIHJlbG9hZCkKK3sKKyAgICBtX2ZvcmNlUmVsb2FkV21sRGVjayA9IHJlbG9hZDsKK30K
KyNlbmRpZgorCiBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRSZWxvYWQoY29uc3QgS1VSTCYgY3Vy
cmVudFVSTCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25VUkwpCiB7CisjaWYgRU5BQkxFKFdNTCkK
KyAgICAvLyBBcyBmb3IgV01MIGRlY2ssIHNvbWV0aW1lcyBpdCdzIHN1cHBvc2VkIHRvIGJlIHJl
bG9hZGVkIGV2ZW4gaWYgdGhlIHNhbWUgVVJMIHdpdGggZnJhZ21lbnQKKyAgICBpZiAobV9mb3Jj
ZVJlbG9hZFdtbERlY2spCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJ1bGU6ICJEb24ndCByZWxvYWQgaWYgbmF2aWdh
dGluZyBieSBmcmFnbWVudCB3aXRoaW4KICAgICAvLyB0aGUgc2FtZSBVUkwsIGJ1dCBkbyByZWxv
YWQgaWYgZ29pbmcgdG8gYSBuZXcgVVJMIG9yIHRvIHRoZSBzYW1lIFVSTCB3aXRoIG5vCiAgICAg
Ly8gZnJhZ21lbnQgaWRlbnRpZmllciBhdCBhbGwuIgpAQCAtNDI5Myw3ICs0MzExLDExIEBAIHZv
aWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiAKICAgICAvLyBjaGVjayBmb3Ig
YWxsIHRoYXQgYXMgYW4gYWRkaXRpb25hbCBvcHRpbWl6YXRpb24uCiAgICAgLy8gV2UgYWxzbyBk
byBub3QgZG8gYW5jaG9yLXN0eWxlIG5hdmlnYXRpb24gaWYgd2UncmUgcG9zdGluZyBhIGZvcm0u
CiAgICAgCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAoIWZvcm1EYXRhICYmIHVybHNNYXRjaEl0
ZW0oaXRlbSkgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmlzV01MRG9jdW1lbnQoKSkgeworI2Vs
c2UKICAgICBpZiAoIWZvcm1EYXRhICYmIHVybHNNYXRjaEl0ZW0oaXRlbSkpIHsKKyNlbmRpZgog
ICAgICAgICAvLyBNdXN0IGRvIHRoaXMgbWFpbnRlbmFuY2UgaGVyZSwgc2luY2Ugd2UgZG9uJ3Qg
Z28gdGhyb3VnaCBhIHJlYWwgcGFnZSByZWxvYWQKICAgICAgICAgc2F2ZVNjcm9sbFBvc2l0aW9u
QW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpKTsKIApJbmRleDog
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2xvYWRl
ci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvbG9hZGVyL0ZyYW1l
TG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MSw2ICsyNjMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAgICAgICAgIHZvaWQgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKGJvb2wgY2Fu
Y2VsV2l0aExvYWRJblByb2dyZXNzKTsKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdGVkKGNv
bnN0IEtVUkwmLCBkb3VibGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrSGlzdG9y
eSwgYm9vbCBpc0phdmFTY3JpcHRGb3JtQWN0aW9uKTsKICAgICAgICAgYm9vbCBzaG91bGRSZWxv
YWQoY29uc3QgS1VSTCYgY3VycmVudFVSTCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25VUkwpOwor
I2lmIEVOQUJMRShXTUwpCisgICAgICAgIHZvaWQgc2V0Rm9yY2VSZWxvYWRXbWxEZWNrKGJvb2wp
OworI2VuZGlmCiAKICAgICAgICAgYm9vbCBpc1F1aWNrUmVkaXJlY3RDb21pbmcoKSBjb25zdDsK
IApAQCAtNjgyLDYgKzY4NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmlu
ZyBtX3BlbmRpbmdTb3VyY2VJbkxvd0JhbmR3aWR0aERpc3BsYXk7ICAgICAgICAKICAgICAgICAg
SGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IG1fZXh0ZXJuYWxSZXF1ZXN0c0luTG93QmFuZHdpZHRo
RGlzcGxheTsKICNlbmRpZgorCisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgYm9vbCBtX2ZvcmNl
UmVsb2FkV21sRGVjazsKKyNlbmRpZgogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNvcmUvbG9hZGVy
L01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9sb2FkZXIvTWFp
blJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL2xvYWRlci9N
YWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoK
ICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQ1LDEwIEBACiAj
aW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAj
aW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpZiBFTkFCTEUoV0JYTUwpCisjaW5jbHVkZSAid2J4bWwu
aCIKKyNpbmNsdWRlICJ3YnhtbF9jb252LmgiCisjZW5kaWYKIAogLy8gRklYTUU6IE1vcmUgdGhh
dCBpcyBpbiBjb21tb24gd2l0aCBTdWJyZXNvdXJjZUxvYWRlciBzaG91bGQgbW92ZSB1cCBpbnRv
IFJlc291cmNlTG9hZGVyLgogCkBAIC0xNDEsNiArMTQ3LDMxIEBAIGJvb2wgTWFpblJlc291cmNl
TG9hZGVyOjppc1Bvc3RPclJlZGlyZWMKIAogdm9pZCBNYWluUmVzb3VyY2VMb2FkZXI6OmFkZERh
dGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgYm9vbCBhbGxBdE9uY2UpCiB7CisjaWYg
RU5BQkxFKFdCWE1MKQorICAgIGlmIChsZW5ndGggJiYgbV9yZXNwb25zZS5taW1lVHlwZSgpID09
ICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiKSB7CisgICAgICAgIHByaW50ZigiPj4+Pj4+Pj4+
Pj4+PiAgZGVjb2RlIHdieG1sIGRvY3VtZW50XG4iKTsKKyAgICAgICAgcHJpbnRmKCI+Pj4+Pj4+
Pj4+Pj4+ICBkZWNvZGUgd2J4bWwgZG9jdW1lbnRcbiIpOworICAgICAgICBwcmludGYoIj4+Pj4+
Pj4+Pj4+Pj4gIGRlY29kZSB3YnhtbCBkb2N1bWVudFxuIik7CisgICAgICAgIFdCX1VUSU5ZICp3
YnhtbCA9IChXQl9VVElOWSopZGF0YTsKKyAgICAgICAgV0JfVUxPTkcgd2J4bWxfbGVuID0gbGVu
Z3RoOworICAgICAgICBXQl9VTE9ORyB4bWxfbGVuID0gMDsKKyAgICAgICAgV0JfVVRJTlkgKnht
bCA9IDA7CisgICAgICAgIFdCWE1MRXJyb3IgcmV0ID0gV0JYTUxfT0s7IAorICAgICAgICBXQlhN
TEdlblhNTFBhcmFtcyBwYXJhbXM7CisgCisgICAgICAgIC8vIEluaXQgRGVmYXVsdCBQYXJhbWV0
ZXJzCisgICAgICAgIHBhcmFtcy5sYW5nID0gV0JYTUxfTEFOR19VTktOT1dOOworICAgICAgICBw
YXJhbXMuZ2VuX3R5cGUgPSBXQlhNTF9HRU5fWE1MX0lOREVOVDsKKyAgICAgICAgcGFyYW1zLmlu
ZGVudCA9IDE7CisgICAgICAgIHBhcmFtcy5rZWVwX2lnbm9yYWJsZV93cyA9IEZBTFNFOworIAor
ICAgICAgICByZXQgPSB3YnhtbF9jb252X3dieG1sMnhtbF93aXRobGVuKHdieG1sLCB3YnhtbF9s
ZW4sICZ4bWwsICZ4bWxfbGVuLCAmcGFyYW1zKTsKKyAgICAgICAgaWYgKHJldCAhPSBXQlhNTF9P
SykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YSA9IChjaGFyKil4bWw7CisgICAg
ICAgIGxlbmd0aCA9IHhtbF9sZW47CisgICAgfQorI2VuZGlmCiAgICAgUmVzb3VyY2VMb2FkZXI6
OmFkZERhdGEoZGF0YSwgbGVuZ3RoLCBhbGxBdE9uY2UpOwogICAgIGZyYW1lTG9hZGVyKCktPnJl
Y2VpdmVkRGF0YShkYXRhLCBsZW5ndGgpOwogfQpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMzc5MjIpCisr
KyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAv
KgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0
cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU0LDYgKzU2LDkgQEAKICNpbmNsdWRlIDxr
anMvSlNMb2NrLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUmVm
Q291bnRlZExlYWtDb3VudGVyLmg+CisjaWYgRU5BQkxFKFdNTCkKKyNpbmNsdWRlICJXTUxQYWdl
U3RhdGUuaCIKKyNlbmRpZgogCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogI2luY2x1ZGUgIkxv
Y2FsU3RvcmFnZS5oIgpAQCAtMTI3LDYgKzEzMiw5IEBAIFBhZ2U6OlBhZ2UoQ2hyb21lQ2xpZW50
KiBjaHJvbWVDbGllbnQsIEMKICAgICAsIG1fcGVuZGluZ0JlZm9yZVVubG9hZEV2ZW50Q291bnQo
MCkKICAgICAsIG1fY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSgtMSkKICAgICAsIG1fY3Vz
dG9tSFRNTFRva2VuaXplckNodW5rU2l6ZSgtMSkKKyNpZiBFTkFCTEUoV01MKQorICAgICwgbV93
bWxQYWdlU3RhdGUoMCkKKyNlbmRpZgogewogICAgIGlmICghYWxsUGFnZXMpIHsKICAgICAgICAg
YWxsUGFnZXMgPSBuZXcgSGFzaFNldDxQYWdlKj47CkBAIC01NjIsNiArNTcwLDE4IEBAIHZvaWQg
UGFnZTo6Y2hhbmdlUGVuZGluZ0JlZm9yZVVubG9hZEV2ZW4KICAgICByZXR1cm47IAogfQogCisj
aWYgRU5BQkxFKFdNTCkKK3ZvaWQgUGFnZTo6c2V0V01MUGFnZVN0YXRlKFJlZlB0cjxXTUxQYWdl
U3RhdGU+IHBhZ2VTdGF0ZSkgCit7IAorICAgIG1fd21sUGFnZVN0YXRlID0gcGFnZVN0YXRlOyAK
K30KKworV01MUGFnZVN0YXRlKiBQYWdlOjp3bWxQYWdlU3RhdGUoKSBjb25zdCAKK3sgCisgICAg
cmV0dXJuIG1fd21sUGFnZVN0YXRlLmdldCgpOyAKK30KKyNlbmRpZgorCiB2b2lkIFBhZ2U6OnNl
dEN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJU
aW1lRGVsYXkpCiB7CiAgICAgaWYgKGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgPCAwKSB7
CkluZGV4OiBXZWJDb3JlL3BhZ2UvUGFnZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9Q
YWdlLmgJKHJldmlzaW9uIDM3OTIyKQorKysgV2ViQ29yZS9wYWdlL1BhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNjMsNiArNjUs
OSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xhc3MgU2Vzc2lvblN0b3JhZ2U7CiAjZW5k
aWYKICAgICBjbGFzcyBTZXR0aW5nczsKKyNpZiBFTkFCTEUoV01MKQorICAgIGNsYXNzIFdNTFBh
Z2VTdGF0ZTsKKyNlbmRpZgogCiAgICAgZW51bSBUZXh0Q2FzZVNlbnNpdGl2aXR5IHsgVGV4dENh
c2VTZW5zaXRpdmUsIFRleHRDYXNlSW5zZW5zaXRpdmUgfTsKICAgICBlbnVtIEZpbmREaXJlY3Rp
b24geyBGaW5kRGlyZWN0aW9uRm9yd2FyZCwgRmluZERpcmVjdGlvbkJhY2t3YXJkIH07CkBAIC0x
NjcsNiArMTcyLDEwIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBzZXRTZXNz
aW9uU3RvcmFnZShQYXNzUmVmUHRyPFNlc3Npb25TdG9yYWdlPik7CiAjZW5kaWYKIAorI2lmIEVO
QUJMRShXTUwpCisgICAgICAgIHZvaWQgc2V0V01MUGFnZVN0YXRlKFJlZlB0cjxXTUxQYWdlU3Rh
dGU+KTsKKyAgICAgICAgV01MUGFnZVN0YXRlKiB3bWxQYWdlU3RhdGUoKSBjb25zdDsKKyNlbmRp
ZgogICAgICAgICB2b2lkIHNldEN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoZG91YmxlKTsK
ICAgICAgICAgYm9vbCBoYXNDdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCkgY29uc3QgeyBy
ZXR1cm4gbV9jdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5ICE9IC0xOyB9CiAgICAgICAgIGRv
dWJsZSBjdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KCkgY29uc3QgeyBBU1NFUlQobV9jdXN0
b21IVE1MVG9rZW5pemVyVGltZURlbGF5ICE9IC0xKTsgcmV0dXJuIG1fY3VzdG9tSFRNTFRva2Vu
aXplclRpbWVEZWxheTsgfQpAQCAtMjI2LDYgKzIzNSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAjaWYgUExBVEZPUk0oV0lOKSB8fCAoUExBVEZPUk0oV1gpICYmIGRlZmluZWQoX19XWE1TV19f
KSkgfHwgKFBMQVRGT1JNKFFUKSAmJiBkZWZpbmVkKFFfV1NfV0lOKSkKICAgICAgICAgc3RhdGlj
IEhJTlNUQU5DRSBzX2luc3RhbmNlSGFuZGxlOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoV01MKQor
ICAgICAgICBSZWZQdHI8V01MUGFnZVN0YXRlPiBtX3dtbFBhZ2VTdGF0ZTsKKyNlbmRpZgogICAg
IH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vTUlN
RVR5cGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9NSU1FVHlw
ZVJlZ2lzdHJ5LmNwcAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJDb3JlL3BsYXRmb3JtL01JTUVU
eXBlUmVnaXN0cnkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiwgMjAwOCBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTgxLDYgKzE4MywxMiBAQCBzdGF0aWMgdm9p
ZCBpbml0aWFsaXplU3VwcG9ydGVkSmF2YVNjcmlwCiBzdGF0aWMgdm9pZCBpbml0aWFsaXplU3Vw
cG9ydGVkTm9uSW1hZ2VNaW1lVHlwZXMoKQogewogICAgIHN0YXRpYyBjb25zdCBjaGFyKiB0eXBl
c1tdID0geworI2lmIEVOQUJMRShXTUwpCisgICAgICAgICJ0ZXh0L3ZuZC53YXAud21sIiwKKyNl
bmRpZgorI2lmIEVOQUJMRShXQlhNTCkKKyAgICAgICAgImFwcGxpY2F0aW9uL3ZuZC53YXAud21s
YyIsCisjZW5kaWYKICAgICAgICAgInRleHQvaHRtbCIsCiAgICAgICAgICJ0ZXh0L3htbCIsCiAg
ICAgICAgICJ0ZXh0L3hzbCIsCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVn
aXN0cnlRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9xdC9NSU1FVHlwZVJl
Z2lzdHJ5UXQuY3BwCShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvcGxhdGZvcm0vcXQvTUlN
RVR5cGVSZWdpc3RyeVF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5
KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC02
Miw2ICs2MywxMiBAQCBzdGF0aWMgY29uc3QgRXh0ZW5zaW9uTWFwIGV4dGVuc2lvbk1hcCBbCiAg
ICAgeyAieHBtIiwgImltYWdlL3gteHBtIiB9LAogICAgIHsgInhzbCIsICJ0ZXh0L3hzbCIgfSwK
ICAgICB7ICJ4aHRtbCIsICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiIH0sCisjaWYgRU5BQkxFKFdN
TCkKKyAgICB7ICJ3bWwiLCAidGV4dC92bmQud2FwLndtbCIgfSwKKyNlbmRpZgorI2lmIEVOQUJM
RShXQlhNTCkKKyAgICB7ICJ3bWxjIiwgImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIgfSwKKyNl
bmRpZgogICAgIHsgMCwgMCB9CiB9OwogCkluZGV4OiBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJ
bWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3Bw
CShyZXZpc2lvbiAzNzkyMikKKysrIFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDggQEAKICAqICAgICAgICAgICAoQykgMjAwNiBBbGxh
biBTYW5kZmVsZCBKZW5zZW4gKGtkZUBjYXJld29sZi5jb20pCiAgKiAgICAgICAgICAgKEMpIDIw
MDYgU2FtdWVsIFdlaW5pZyAoc2FtLndlaW5pZ0BnbWFpbC5jb20pCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
ICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzM5LDcgKzM0MSwxMSBAQCB2b2lkIFJlbmRlckltYWdl
OjpwYWludFJlcGxhY2VkKFBhaW50SW5mCiAgICAgICAgICAgICBpbnQgdXNhYmxlV2lkdGggPSBj
V2lkdGggLSAyOwogICAgICAgICAgICAgaW50IHVzYWJsZUhlaWdodCA9IGNIZWlnaHQgLSAyOwog
CisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgICAgIGlmICghZG9jdW1lbnQoKS0+aXNXTUxEb2N1
bWVudCgpICYmIGVycm9yT2NjdXJyZWQoKSAmJiAhaW1hZ2UoKS0+aXNOdWxsKCkgJiYgKHVzYWJs
ZVdpZHRoID49IGltYWdlKCktPndpZHRoKCkpICYmICh1c2FibGVIZWlnaHQgPj0gaW1hZ2UoKS0+
aGVpZ2h0KCkpKSB7CisjZWxzZQogICAgICAgICAgICAgaWYgKGVycm9yT2NjdXJyZWQoKSAmJiAh
aW1hZ2UoKS0+aXNOdWxsKCkgJiYgKHVzYWJsZVdpZHRoID49IGltYWdlKCktPndpZHRoKCkpICYm
ICh1c2FibGVIZWlnaHQgPj0gaW1hZ2UoKS0+aGVpZ2h0KCkpKSB7CisjZW5kaWYKICAgICAgICAg
ICAgICAgICAvLyBDZW50ZXIgdGhlIGVycm9yIGltYWdlLCBhY2NvdW50aW5nIGZvciBib3JkZXIg
YW5kIHBhZGRpbmcuCiAgICAgICAgICAgICAgICAgaW50IGNlbnRlclggPSAodXNhYmxlV2lkdGgg
LSBpbWFnZSgpLT53aWR0aCgpKSAvIDI7CiAgICAgICAgICAgICAgICAgaWYgKGNlbnRlclggPCAw
KQpAQCAtMzcyLDYgKzM3OCwxMCBAQCB2b2lkIFJlbmRlckltYWdlOjpwYWludFJlcGxhY2VkKFBh
aW50SW5mCiAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dCh0ZXh0UnVu
LCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYg
KHVzYWJsZVdpZHRoID49IHRleHRXaWR0aCAmJiBjSGVpZ2h0ID49IGZvbnQuaGVpZ2h0KCkpCiAg
ICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHRleHRSdW4sIEludFBvaW50KGF4
LCBheSArIGFzY2VudCkpOworI2lmIEVOQUJMRShXTUwpCisgICAgICAgICAgICAgICAgZWxzZSBp
ZiAoZG9jdW1lbnQoKS0+aXNXTUxEb2N1bWVudCgpICYmIHVzYWJsZVdpZHRoID49IHRleHRXaWR0
aCAtIDIgJiYgY0hlaWdodCA+PSBmb250LmhlaWdodCgpKQorICAgICAgICAgICAgICAgICAgICBj
b250ZXh0LT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKKyNl
bmRpZgogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChoYXNJbWFnZSgp
ICYmIGNXaWR0aCA+IDAgJiYgY0hlaWdodCA+IDApIHsKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEFF
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MQUVs
ZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOworCitXTUxBRWxl
bWVudDo6V01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRv
YykgCisgICAgOiBXTUxFbGVtZW50KG5hbWUsIGRvYykKK3sKKyAgICBzZXRJc0xpbmsodHJ1ZSk7
Cit9CisKK1dNTEFFbGVtZW50Ojp+V01MQUVsZW1lbnQoKQoreworfQorCit2b2lkIFdNTEFFbGVt
ZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpIAoreworICAgIGJvb2wgc2hvdWxk
SGFuZGxlID0gZmFsc2U7CisgICAgaWYgKGV2dC0+dHlwZSgpID09IGNsaWNrRXZlbnQpCisgICAg
ICAgIHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgZWxzZSBpZiAoKGV2dC0+dHlwZSgpID09IGtl
eXByZXNzRXZlbnQpICYmIGV2dC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZm9jdXNlZCgpKSB7Cisg
ICAgICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5
SWRlbnRpZmllcigpOworICAgICAgICBpZiAoa2V5ID09ICJFbnRlciIpIAorICAgICAgICAgICAg
c2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICB9CisgCisgICAgaWYgKHNob3VsZEhhbmRsZSAmJiBp
c0xpbmsoKSkgeworICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoZ2V0QXR0cmlidXRlKCJo
cmVmIikpOworCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT51cmxTZWxl
Y3RlZChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLCBnZXRBdHRyaWJ1dGUoSFRNTE5hbWVz
Ojp0YXJnZXRBdHRyKSwgZXZ0LCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgZXZ0LT5zZXREZWZh
dWx0SGFuZGxlZCgpOworICAgIH0gZWxzZQorICAgICAgICBFdmVudFRhcmdldE5vZGU6OmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZ0KTsKK30KKworU3RyaW5nIFdNTEFFbGVtZW50Ojp0aXRsZSgpIGNv
bnN0Cit7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSgidGl0bGUiKTsKK30KKworYm9vbCBXTUxB
RWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QK
K3sKKyAgICByZXR1cm4gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnRhYnNU
b0xpbmtzKGV2ZW50KTsKK30KKworYm9vbCBXTUxBRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25z
dAoreworICAgIHJldHVybiB0cnVlOyAKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MQUVs
ZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MQUVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgV01MQUVsZW1lbnRfaAorI2RlZmluZSBXTUxBRWxlbWVudF9o
CisKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgV01MQUVsZW1lbnQgOiBwdWJsaWMgIFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MQUVs
ZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgfldNTEFFbGVtZW50
KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAg
IHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsK
KyAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2FibGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyB0aXRsZSgpIGNvbnN0OworCit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwv
V01MQWNjZXNzRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQWNjZXNz
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50
LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
ICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgi
CisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNs
dWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgV01MTmFtZXM7CisKK1dNTEFjY2Vzc0VsZW1lbnQ6OldNTEFjY2Vzc0VsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFdNTEVsZW1l
bnQodGFnTmFtZSwgZG9jKSAKK3sKK30KKworCitXTUxBY2Nlc3NFbGVtZW50Ojp+V01MQWNjZXNz
RWxlbWVudCgpIAoreworfQorCit2b2lkIFdNTEFjY2Vzc0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IGRvbWFpbkF0dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0
ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChXTUxIZWxwZXI6OnRva2VuaXplcigp
KTsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFs
aWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICAgICAgZG9jdW1lbnQo
KS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKS0+c2V0RGVja0FjY2Vzc0RvbWFpbihhdHRyLT52YWx1
ZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwYXRoQXR0cikgeworICAgICAg
ICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgeworICAgICAg
ICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxl
UmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCkt
PndtbFBhZ2VTdGF0ZSgpLT5zZXREZWNrQWNjZXNzUGF0aChhdHRyLT52YWx1ZSgpKTsKKyAgICB9
Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTEFjY2Vzc0VsZW1lbnQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3dtbC9XTUxBY2Nlc3NFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFdNTEFjY2Vzc0VsZW1lbnRfaAorI2RlZmluZSBXTUxBY2Nlc3NFbGVtZW50
X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBEb2N1bWVudDsKKworY2xhc3MgV01MQWNjZXNzRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVt
ZW50eworcHVibGljOgorICAgIFdNTEFjY2Vzc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
dGFnTmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxBY2Nlc3NFbGVtZW50KCk7Cisg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwor
fTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEFuY2hv
ckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFuY2hvckVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQW5jaG9yRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV01MQW5jaG9yRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2lu
Y2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1
ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2Ug
RXZlbnROYW1lczsKKworV01MQW5jaG9yRWxlbWVudDo6V01MQW5jaG9yRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKSAKKyAgICA6IEhUTUxBbmNob3JFbGVt
ZW50KG5hbWUsIGRvYyksIG1fdGFzaygwKQoreworICAgIHNldEhyZWYoIiIpOyAgICAgLy8gdGhp
cyBpcyB0aGUgaGFjayBzbyB0aGF0IGFuY2hvciByZW5kZXJzIGxpa2UgYSBsaW5rCit9CisKK1dN
TEFuY2hvckVsZW1lbnQ6On5XTUxBbmNob3JFbGVtZW50KCkKK3sKK30KKwordm9pZCBXTUxBbmNo
b3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBlKSAKK3sKKyAgICBib29sIHNo
b3VsZEhhbmRsZSA9IGZhbHNlOworICAgIGlmIChlLT50eXBlKCkgPT0gY2xpY2tFdmVudCkKKyAg
ICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICBlbHNlIGlmICgoZS0+dHlwZSgpID09IGtl
eWRvd25FdmVudCkgJiYgZS0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZm9jdXNlZCgpKSB7CisgICAg
ICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZSktPmtleUlkZW50
aWZpZXIoKTsKKyAgICAgICAgaWYgKGtleSA9PSAiRW50ZXIiKQorICAgICAgICAgICAgc2hvdWxk
SGFuZGxlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkSGFuZGxlICYmIG1fdGFzaykg
eworICAgICAgICBtX3Rhc2stPmV4ZWMoZSk7CisgICAgICAgIGUtPnNldERlZmF1bHRIYW5kbGVk
KCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICBFdmVudFRhcmdldE5vZGU6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoZSk7Cit9CisKK3ZvaWQgV01MQW5jaG9yRWxlbWVudDo6cmVnaXN0ZXJUYXNrKFdN
TFRhc2tFbGVtZW50KiB0YXNrKQoreyAKKyAgICBtX3Rhc2sgPSB0YXNrOworfQorCit9CkluZGV4
OiBXZWJDb3JlL3dtbC9XTUxBbmNob3JFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93
bWwvV01MQW5jaG9yRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQW5j
aG9yRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
ICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChD
KSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBX
TUxBbmNob3JFbGVtZW50X2gKKyNkZWZpbmUgV01MQW5jaG9yRWxlbWVudF9oCisKKyNpbmNsdWRl
ICJIVE1MQW5jaG9yRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdN
TFRhc2tFbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEFuY2hvckVs
ZW1lbnQgOiBwdWJsaWMgSFRNTEFuY2hvckVsZW1lbnQgeworcHVibGljOgorICAgIFdNTEFuY2hv
ckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0
dWFsIH5XTUxBbmNob3JFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCopOworCisgICAgdm9pZCByZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQq
KTsKKworcHJpdmF0ZToKKworICAgIFdNTFRhc2tFbGVtZW50KiBtX3Rhc2s7CisKK307CisKK30g
Ly9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxBdHRyaWJ1dGVOYW1l
cy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5pbgkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDQ0IEBACituYW1lc3BhY2U9IldNTCIKK25hbWVzcGFjZVVSST0iIgorZ3Vh
cmRGYWN0b3J5V2l0aD0iRU5BQkxFKFdNTCkiCithdHRyc051bGxOYW1lc3BhY2U9IjEiCisKK25h
bWUKK2lkCit0aXRsZQorbmV3Y29udGV4dAorb3JkZXJlZAorbGFiZWwKK29wdGlvbmFsCit0eXBl
CitocmVmCit2YWx1ZQorb25lbnRlcmZvcndhcmQKK29uZW50ZXJiYWNrd2FyZAorb250aW1lcgor
c2VuZHJlZmVyZXIKK21ldGhvZAorY2FjaGUtY29udHJvbAorZW5jdHlwZQorYWNjZXB0LWNoYXJz
ZXQKK2luYW1lCitpdmFsdWUKK211bHRpcGxlCit0YWJpbmRleAorb25waWNrCitmb3JtYXQKK2Vt
cHR5b2sKK3NpemUKK21heGxlbmd0aAorYWx0CitzcmMKK2xvY2Fsc3JjCit2c3BhY2UKK2hzcGFj
ZQorYWxpZ24KK2hlaWdodAord2lkdGgKK2NvbHVtbnMKK21vZGUKK2RvbWFpbgorcGF0aApJbmRl
eDogV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d21sL1dNTENhcmRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTENh
cmRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgor
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAi
UmVuZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnRGYWN0
b3J5LmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgi
CisjaW5jbHVkZSAiV01MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNp
bmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCisj
aW5jbHVkZSAiV01MVGFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAid3RmL1ZlY3Rvci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MQ2Fy
ZEVsZW1lbnQ6OldNTENhcmRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERv
Y3VtZW50ICpkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1faXNW
aXNpYmxlKGZhbHNlKQorICAgICwgbV9pc05ld0NvbnRleHQoZmFsc2UpCisgICAgLCBtX2lzT3Jk
ZXJlZCh0cnVlKQorICAgICwgbV90ZW1wbGF0ZSgwKQorICAgICwgbV9ldm50SGFuZGxlcigwKQor
ICAgICwgbV9oYXNJbnRyaW5zaWNFdmVudChmYWxzZSkKKyAgICAsIG1fZXZ0VGltZXIoMCkKK3sK
K30KKworV01MQ2FyZEVsZW1lbnQ6On5XTUxDYXJkRWxlbWVudCgpIAoreworICAgIGlmIChtX2V2
bnRIYW5kbGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX2V2bnRIYW5kbGVyOworICAgICAgICBtX2V2
bnRIYW5kbGVyID0gMDsKKyAgICB9CisKKyAgICBtX3RlbXBsYXRlID0gMDsKKyAgICBtX2V2dFRp
bWVyID0gMDsKK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIFdNTEludHJpbnNpY0V2ZW50VHlwZSBldHlw
ZSA9IFVua25vd247CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0cikKKyAgICAg
ICAgbV90aXRsZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBk
b2N1bWVudCgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lbnRlcmZvcndhcmRB
dHRyKQorICAgICAgICBldHlwZSA9IE9uRW50ZXJGb3J3YXJkOworICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBvbmVudGVyYmFja3dhcmRBdHRyKQorICAgICAgICBldHlwZSA9IE9uRW50ZXJC
YWNrd2FyZDsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb250aW1lckF0dHIpCisgICAg
ICAgIGV0eXBlID0gT25UaW1lcjsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmV3Y29u
dGV4dEF0dHIpCisgICAgICAgIG1faXNOZXdDb250ZXh0ID0gKGF0dHItPnZhbHVlKCkgPT0gInRy
dWUiKSA/IHRydWUgOiBmYWxzZTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb3JkZXJl
ZEF0dHIpCisgICAgICAgIG1faXNPcmRlcmVkID0gKGF0dHItPnZhbHVlKCkgPT0gInRydWUiKSA/
IHRydWUgOiBmYWxzZTsKKyAgICAKKyAgICAvLyByZWdpc3RlciBpbnRyaW5zaWMgZXZlbnQgdG8g
Y2FyZAorICAgIGlmIChldHlwZSAhPSBVbmtub3duKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUg
ZWMgPSAwOworICAgICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKCJnbyIsICJnbyIsICIiKTsKKyAg
ICAgICAgRWxlbWVudCogZ28gPSBXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChx
TmFtZSwgZG9jdW1lbnQoKSwgZmFsc2UpOyAKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBXTUxIZWxw
ZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwgImVzY2FwZSIp
OworICAgICAgICBnby0+c2V0QXR0cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwgZWMpOworCisg
ICAgICAgIFdNTEludHJpbnNpY0V2ZW50IGV2OworICAgICAgICBldi50YXNrID0gc3RhdGljX2Nh
c3Q8V01MR29FbGVtZW50Kj4oZ28pOworICAgICAgICBldi50YXJnZXRVUkkgPSBocmVmOyAKKwor
ICAgICAgICBpZiAoIW1fZXZudEhhbmRsZXIpCisgICAgICAgICAgICBtX2V2bnRIYW5kbGVyID0g
bmV3IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworCisgICAgICAgIHNldEhhc0ludHJpbnNp
Y0V2ZW50KHRydWUpOworICAgICAgICBtX2V2bnRIYW5kbGVyLT5yZWdpc3RlckludHJpbnNpY0V2
ZW50KGV0eXBlLCBldik7CisgICAgfQorfQorCitSZW5kZXJPYmplY3QqIFdNTENhcmRFbGVtZW50
OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiBzdHlsZSkgCit7Cisg
ICAgaWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoTk9ORSk7Cisg
ICAgCisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxlKTsK
K30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6c2V0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkg
Cit7CisgICAgbV9pc1Zpc2libGUgPSBpc1Zpc2libGU7Cit9CisKK2Jvb2wgV01MQ2FyZEVsZW1l
bnQ6OnZpc2libGUoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9pc1Zpc2libGU7Cit9CisKK2Jv
b2wgV01MQ2FyZEVsZW1lbnQ6OmlzTmV3Q29udGV4dCgpIGNvbnN0IAoreworICAgIHJldHVybiBt
X2lzTmV3Q29udGV4dDsKK30KKworYm9vbCBXTUxDYXJkRWxlbWVudDo6aXNPcmRlcmVkKCkgY29u
c3QgCit7CisgICAgcmV0dXJuIG1faXNPcmRlcmVkOworfQorCitTdHJpbmcgV01MQ2FyZEVsZW1l
bnQ6OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aXRsZTsgCit9CisKK3ZvaWQgV01M
Q2FyZEVsZW1lbnQ6OmJpbmRUZW1wbGF0ZShXTUxUZW1wbGF0ZUVsZW1lbnQqIHRlbXBsKSAKK3sK
KyAgICBtX3RlbXBsYXRlID0gdGVtcGw7Cit9CisKK1dNTFRlbXBsYXRlRWxlbWVudCogV01MQ2Fy
ZEVsZW1lbnQ6OnRlbXBsYXRlRWxlbWVudCgpCit7CisgICAgcmV0dXJuIG1fdGVtcGxhdGU7Cit9
CisKK1dNTEludHJpbnNpY0V2ZW50SGFuZGxlciogV01MQ2FyZEVsZW1lbnQ6OmV2ZW50SGFuZGxl
cigpCit7CisgICAgaWYgKG1faGFzSW50cmluc2ljRXZlbnQgJiYgIW1fZXZudEhhbmRsZXIpICB7
CisgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7
CisgICAgfQorICAgIHJldHVybiBtX2V2bnRIYW5kbGVyOworfQorCit2b2lkIFdNTENhcmRFbGVt
ZW50OjpzZXRIYXNJbnRyaW5zaWNFdmVudChib29sIGhhcykKK3sKKyAgICBtX2hhc0ludHJpbnNp
Y0V2ZW50ID0gaGFzOworfQorCitib29sIFdNTENhcmRFbGVtZW50OjpoYXNJbnRyaW5zaWNFdmVu
dCgpCit7CisgICAgcmV0dXJuIG1faGFzSW50cmluc2ljRXZlbnQ7Cit9CisKK3ZvaWQgV01MQ2Fy
ZEVsZW1lbnQ6OnNldEludHJpbnNpY0V2ZW50VGltZXIoV01MVGltZXJFbGVtZW50KiB0aW1lcikK
K3sKKyAgICAvLyBvbmx5IG9uZSB0aW1lciBpcyBhbGxvd2VkIGluIGEgY2FyZCAKKyAgICBpZiAo
IW1fZXZ0VGltZXIpCisgICAgICAgIG1fZXZ0VGltZXIgPSB0aW1lcjsKKyAgICBlbHNlIHsKKyAg
ICAgICAgbV9ldnRUaW1lciA9IDA7CisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJl
cG9ydEVycm9yKE11bHRpVGltZXJFbGVtZW50c0Vycm9yKTsKKyAgICB9Cit9CisKK1dNTFRpbWVy
RWxlbWVudCogV01MQ2FyZEVsZW1lbnQ6OmV2ZW50VGltZXIoKQoreworICAgIHJldHVybiBtX2V2
dFRpbWVyOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpyZWdpc3RlckRvRWxlbWVudChXTUxE
b0VsZW1lbnQqIGUpCit7CisgICAgaWYgKGUpIHsKKyAgICAgICAgVmVjdG9yPFdNTERvRWxlbWVu
dCo+OjppdGVyYXRvciBpdCA9IG1fZG9WZWNzLmJlZ2luKCk7CisgICAgICAgIFdNTERvRWxlbWVu
dCogZG9FbGVtID0gMDsKKyAgICAgICAgd2hpbGUgKGl0ICE9IG1fZG9WZWNzLmVuZCgpKSB7Cisg
ICAgICAgICAgICBkb0VsZW0gPSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPigqaXQrKyk7CisK
KyAgICAgICAgICAgIGlmIChkb0VsZW0tPmRvTmFtZSgpID09IGUtPmRvTmFtZSgpKSB7CisgICAg
ICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoU2FtZU5hbWVE
b0VsZW1lbnRzRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBtX2RvVmVjcy5hcHBlbmQoZSk7CisgICAgICAgIGUtPnNldEFj
dGl2ZSh0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnNoYWRvd0RvRWxl
bWVudElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fdGVtcGxhdGUpIAorICAgICAgICByZXR1cm47
CisKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gdGVtcGxEb05hbWVWZWNzID0gbV90ZW1wbGF0
ZS0+Z2V0RG9FbGVtZW50cygpOworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6aXRlcmF0b3Ig
Y2FyZEl0ID0gbV9kb1ZlY3MuYmVnaW4oKTsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0
ZXJhdG9yIHRlbXBsSXQgPSB0ZW1wbERvTmFtZVZlY3MuYmVnaW4oKTsgCisKKyAgICBTdHJpbmcg
dGVtcGxEb05hbWU7CisgICAgU3RyaW5nIGNhcmREb05hbWU7CisgICAgV01MRG9FbGVtZW50KiB0
ZW1wbERvID0gMDsKKyAgICBmb3IgKDsgdGVtcGxJdCAhPSB0ZW1wbERvTmFtZVZlY3MuZW5kKCk7
ICsrdGVtcGxJdCkgeworICAgICAgICB0ZW1wbERvID0gKnRlbXBsSXQ7CisgICAgICAgIHRlbXBs
RG9OYW1lID0gdGVtcGxEby0+ZG9OYW1lKCk7CisgICAgICAgIGJvb2wgaXNBY3RpdmUgPSB0cnVl
OworICAgICAgICBmb3IgKGNhcmRJdCA9IG1fZG9WZWNzLmJlZ2luKCk7IGNhcmRJdCAhPSBtX2Rv
VmVjcy5lbmQoKTsgKytjYXJkSXQpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wbERvTmFtZSA9PSAo
KmNhcmRJdCktPmRvTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSBmYWxzZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIHRlbXBsRG8tPnNldEFjdGl2ZShpc0FjdGl2ZSk7CisgICAgfQorfQorCisKK3ZvaWQgV01M
Q2FyZEVsZW1lbnQ6OmhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVkZWQoKQoreworICAgIEFTU0VS
VChkb2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsK
KyAgICBGcmFtZUxvYWRlciogbG9hZGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCk7
CisgICAgQVNTRVJUKGxvYWRlcik7CisgICAgV01MUGFnZVN0YXRlKiBwYWdlU3RhdGUgPSBkb2N1
bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIEFTU0VSVChwYWdlU3RhdGUpOwor
ICAgIGludCBjdXJIaXN0TGVuID0gbG9hZGVyLT5nZXRIaXN0b3J5TGVuZ3RoKCk7CisgICAgaW50
IG9sZEhpc3RMZW4gPSBwYWdlU3RhdGUtPmhpc3RvcnlMZW5ndGgoKTsKKworICAgIC8vIGNhbGN1
bGF0ZSB0aGUgZW50cnkgbWV0aG9kIG9mIGN1cnJlbnQgY2FyZCAKKyAgICBXTUxJbnRyaW5zaWNF
dmVudFR5cGUgZXR5cGU7CisgICAgaWYgKG9sZEhpc3RMZW4gPiBjdXJIaXN0TGVuKQorICAgICAg
ICBldHlwZSA9IE9uRW50ZXJCYWNrd2FyZDsKKyAgICBlbHNlIGlmIChvbGRIaXN0TGVuIDwgY3Vy
SGlzdExlbikKKyAgICAgICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICBlbHNlCisgICAg
ICAgIGV0eXBlID0gVW5rbm93bjsKKyAKKyAgICAvLyB1cGRhdGUgdGhlIGhoaXN0b3J5IGxlbmd0
aCBpbiB0aGUgY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICBwYWdlU3RhdGUtPnNldEhpc3Rv
cnlMZW5ndGgoY3VySGlzdExlbik7CisgCisgICAgLy8gaGFuZGxlIGludHJpbnNpYyBldmVudCwg
YW5kIHNoYWRvdyB0aGUgZGVjay1sZXZlbCBldmVudCBpZiBuZWVkZWQKKyAgICBib29sIGhhc0lu
dHJpbnNpY0V2ZW50ID0gIGZhbHNlOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogZXZI
YW5kbGVyID0gbV9ldm50SGFuZGxlcjsgCisgICAgaWYgKGV0eXBlICE9IFVua25vd24pIHsKKyAg
ICAgICAgaWYgKGV2SGFuZGxlciAmJiBldkhhbmRsZXItPmhhc0ludHJpbnNpY0V2ZW50KGV0eXBl
KSkKKyAgICAgICAgICAgIGhhc0ludHJpbnNpY0V2ZW50ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBp
ZiAobV90ZW1wbGF0ZSkgeworICAgICAgICAgICAgZXZIYW5kbGVyID0gbV90ZW1wbGF0ZS0+ZXZl
bnRIYW5kbGVyKCk7CisgICAgICAgICAgICBpZiAoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFz
SW50cmluc2ljRXZlbnQoZXR5cGUpKQorICAgICAgICAgICAgICAgIGhhc0ludHJpbnNpY0V2ZW50
ID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICBpZiAoaGFzSW50cmluc2ljRXZlbnQp
CisgICAgICAgIGV2SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2ZW50KGV0eXBlKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gc3RhcnQgdGhlIHRpbWVyIGlmIGl0IGV4aXN0cyBpbiBjdXJyZW50
IGNhcmQKKyAgICAgICAgaWYgKG1fZXZ0VGltZXIpCisgICAgICAgICAgICBtX2V2dFRpbWVyLT5z
dGFydCgpOworCisgICAgICAgIC8vaW5pdGlhbGlzZSBpbnB1dCBlbGVtZW50cyhlZy4gaW5wdXQs
IHNlbGVjdCwgZXRjKSBpbiB0aGlzIGNhcmQKKyAgICAgICAgTm9kZSogbm9kZSA9IHRoaXM7Cisg
ICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsKKyAgICAg
ICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICAgICAgICAgICAgICBz
dGF0aWNfY2FzdDxXTUxJbnB1dEVsZW1lbnQqPihub2RlKS0+aW5pdCgpOworICAgICAgICAgICAg
ZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgICAgICAgICAgICAgIHN0
YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihub2RlKS0+c2VsZWN0SW5pdGlhbE9wdGlvbnMo
KTsKKyAgICAgICAgfQorCisgICAgfQorfQorCit2b2lkIFdNTENhcmRFbGVtZW50Ojp1cGRhdGVU
YWJsZUVsZW1lbnQoKQoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzOyAKKyAgICBXTUxUYWJsZUVs
ZW1lbnQqIHRhYmxlID0gMDsKKyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHRO
b2RlKCkpKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVU
YWcpKSB7CisgICAgICAgICAgICB0YWJsZSA9IHN0YXRpY19jYXN0PFdNTFRhYmxlRWxlbWVudCo+
KG5vZGUpOworICAgICAgICAgICAgaWYgKHRhYmxlKQorICAgICAgICAgICAgICAgIHRhYmxlLT5p
bml0KCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShXTUxOYW1lczo6Y2Fy
ZFRhZykpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30KSW5kZXg6IFdlYkNvcmUv
d21sL1dNTENhcmRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQ2FyZEVs
ZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTENhcmRFbGVtZW50LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTENhcmRFbGVtZW50X2gK
KyNkZWZpbmUgV01MQ2FyZEVsZW1lbnRfaAorCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgor
I2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxUYXNrRWxlbWVudDsKK2NsYXNzIFdN
TFRpbWVyRWxlbWVudDsKK2NsYXNzIFdNTERvRWxlbWVudDsKKworY2xhc3MgV01MQ2FyZEVsZW1l
bnQgOiBwdWJsaWMgV01MRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MQ2FyZEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MQ2FyZEVsZW1l
bnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqKTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVy
QXJlbmEqLCBSZW5kZXJTdHlsZSopOworCisgICAgdm9pZCBzZXRWaXNpYmlsaXR5KGJvb2wpOwor
ICAgIGJvb2wgdmlzaWJsZSgpIGNvbnN0OworCisgICAgYm9vbCBpc05ld0NvbnRleHQoKSBjb25z
dDsKKyAgICBib29sIGlzT3JkZXJlZCgpIGNvbnN0OworCisgICAgU3RyaW5nIHRpdGxlKCkgY29u
c3Q7CisKKyAgICB2b2lkIGJpbmRUZW1wbGF0ZShXTUxUZW1wbGF0ZUVsZW1lbnQqKTsKKyAgICBX
TUxUZW1wbGF0ZUVsZW1lbnQqIHRlbXBsYXRlRWxlbWVudCgpOworCisgICAgV01MSW50cmluc2lj
RXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIoKTsKKyAgICBib29sIGhhc0ludHJpbnNpY0V2ZW50
KCk7CisgICAgdm9pZCBzZXRIYXNJbnRyaW5zaWNFdmVudChib29sKTsKKyAgICB2b2lkIGhhbmRs
ZUludHJpbnNpY0V2ZW50SWZOZWVkZWQoKTsKKworICAgIHZvaWQgc2V0SW50cmluc2ljRXZlbnRU
aW1lcihXTUxUaW1lckVsZW1lbnQqKTsKKyAgICBXTUxUaW1lckVsZW1lbnQqIGV2ZW50VGltZXIo
KTsKKworICAgIHZvaWQgcmVnaXN0ZXJEb0VsZW1lbnQoV01MRG9FbGVtZW50Kik7CisgICAgdm9p
ZCBzaGFkb3dEb0VsZW1lbnRJZk5lZWRlZCgpOworCisgICAgdm9pZCB1cGRhdGVUYWJsZUVsZW1l
bnQoKTsKK3ByaXZhdGU6CisgICAgYm9vbCBtX2lzVmlzaWJsZTsKKyAgICBTdHJpbmcgbV90aXRs
ZTsKKyAgICBib29sIG1faXNOZXdDb250ZXh0OworICAgIGJvb2wgbV9pc09yZGVyZWQ7CisgICAg
V01MVGVtcGxhdGVFbGVtZW50KiBtX3RlbXBsYXRlOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFu
ZGxlciogbV9ldm50SGFuZGxlcjsKKyAgICBib29sIG1faGFzSW50cmluc2ljRXZlbnQ7CisgICAg
V01MVGltZXJFbGVtZW50KiBtX2V2dFRpbWVyOyAKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4g
bV9kb1ZlY3M7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93
bWwvV01MRG9FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb0VsZW1l
bnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV01MRG9FbGVtZW50LmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNsdWRl
ICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNs
dWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRNTEJ1
dHRvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5o
IgorI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisj
aW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3Rh
dGUuaCIKKyNpbmNsdWRlICJXTUxQb3N0ZmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2V0
dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
VGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2
ZW50TmFtZXM7CisKK1dNTERvRWxlbWVudDo6V01MRG9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5h
bWUmIHRhZywgRG9jdW1lbnQqIGRvYywgSFRNTEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRN
TEJ1dHRvbkVsZW1lbnQodGFnLCBkb2MsIGZvcm0pCisgICAgLCBtX3Rhc2soMCkKKyAgICAsIG1f
aXNPcHRpb24oZmFsc2UpCisgICAgLCBtX2lzTm9vcChmYWxzZSkKKyAgICAsIG1faXNBY3RpdmUo
ZmFsc2UpCit7Cit9CisKK1dNTERvRWxlbWVudDo6fldNTERvRWxlbWVudCgpCit7Cit9CisKK3Zv
aWQgV01MRG9FbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBlKSAKK3sKKyAgICBp
ZiAobV9pc09wdGlvbikKKyAgICAgICAgcmV0dXJuOworIAorICAgIGJvb2wgc2hvdWxkSGFuZGxl
ID0gZmFsc2U7CisgICAgaWYgKGUtPnR5cGUoKSA9PSBjbGlja0V2ZW50KQorICAgICAgICBzaG91
bGRIYW5kbGUgPSB0cnVlOworICAgIGVsc2UgaWYgKGUtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50
KQorICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVyKGUp
OworICAgIGVsc2UgaWYgKGUtPnR5cGUoKSA9PSBrZXlkb3duRXZlbnQgJiYgZS0+aXNLZXlib2Fy
ZEV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGUpLT5rZXlJZGVudGlmaWVy
KCkgPT0gIkVudGVyIikKKyAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAKKyAgICBpZiAo
c2hvdWxkSGFuZGxlKSB7CisgCisgICAgICAgIGlmICgobV90eXBlID09ICJhY2NlcHQiKSB8fCAo
bV90eXBlID09ICJvcHRpb25zIikpIHsKKyAgICAgICAgICAgIGlmIChtX3Rhc2spCisgICAgICAg
ICAgICAgICAgbV90YXNrLT5leGVjKGUpOworICAgICAgICB9IGVsc2UgaWYgKG1fdHlwZSA9PSAi
cHJldiIpIHsKKyAgICAgICAgICAgIC8vIHN0b3AgdGhlIHRpbWVyIG9mIHRoZSBjdXJyZW50IGNh
cmQgaWYgaXQgaXMgYWN0aXZlCisgICAgICAgICAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+
cGFnZSgpOworICAgICAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gcGFnZS0+d21sUGFnZVN0YXRlKCkt
PmFjdGl2ZUNhcmQoKTsKKyAgICAgICAgICAgIGlmIChjYXJkICYmIGNhcmQtPmV2ZW50VGltZXIo
KSkKKyAgICAgICAgICAgICAgICBjYXJkLT5ldmVudFRpbWVyKCktPnN0b3AoKTsKKyAKKyAgICAg
ICAgICAgIHBhZ2UtPmdvQmFjaygpOworICAgICAgICB9IGVsc2UgaWYgKG1fdHlwZSA9PSAicmVz
ZXQiKQorICAgICAgICAgICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgICAgICAg
ICBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5yZXNldCgpOworICAgICAgICBl
bHNlIGlmIChtX3R5cGUgPT0gImRlbGV0ZSIpCisgICAgICAgICAgICA7Ly9UT0RPCisgICAgfQor
ICAgICAgICAgICAgIAorfQorCit2b2lkIFdNTERvRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShi
b29sIGRlZXApCit7CisgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7IHBhcmVu
dDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgaWYgKHBhcmVudC0+
aGFzVGFnTmFtZSh0ZW1wbGF0ZVRhZykpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFdNTFRl
bXBsYXRlRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyRG9FbGVtZW50KHRoaXMpOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGNhcmRU
YWcpKSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KHBhcmVudCkt
PnJlZ2lzdGVyRG9FbGVtZW50KHRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK1JlbmRlck9iamVjdCogV01MRG9FbGVtZW50OjpjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSogcmEsIFJlbmRlclN0eWxlKiBycykgCit7CisgICAgaWYgKCFtX2lzQWN0aXZl
IHx8IG1faXNPcHRpb24gfHwgbV9pc05vb3ApCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVu
ZGVyQnV0dG9uKiBidXR0b24gPSBuZXcgKHJhKSBSZW5kZXJCdXR0b24odGhpcyk7IAorICAgIHJz
LT5zZXRCYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OmxpZ2h0R3JheSk7CisgICAgYnV0dG9uLT5zZXRT
dHlsZShycyk7CisgICAgYnV0dG9uLT5zZXRUZXh0KG1fbGFiZWwuaXNFbXB0eSgpID8gbV9uYW1l
IDogbV9sYWJlbCk7CisgICAgcmV0dXJuIGJ1dHRvbjsKK30KKwordm9pZCBXTUxEb0VsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikgCit7CisgICAgaWYg
KGF0dHItPm5hbWUoKSA9PSB0eXBlQXR0cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNW
YXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tl
bml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV90eXBlID0gYXR0ci0+dmFs
dWUoKTsKKworICAgICAgICBpZiAobV9uYW1lLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fbmFt
ZSA9IG1fdHlwZTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7
CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7
CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlk
VmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KyAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUoKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBsYWJlbEF0dHIpCisgICAgICAgIG1fbGFiZWwgPSBXTUxIZWxwZXI6OnN1YnN0aXR1
dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSk7CisgICAgZWxzZSBpZiAoYXR0ci0+
bmFtZSgpID09IG9wdGlvbmFsQXR0cikKKyAgICAgICAgbV9pc09wdGlvbiA9IChhdHRyLT52YWx1
ZSgpID09ICJ0cnVlIiA/IHRydWUgOiBmYWxzZSk7Cit9CisKK3ZvaWQgV01MRG9FbGVtZW50Ojpy
ZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqIHRhc2spIAoreworICAgIG1fdGFzayA9IHRhc2s7
Cit9CisKK3ZvaWQgV01MRG9FbGVtZW50OjpzZXROb29wKGJvb2wgbm9vcCkgCit7CisgICAgbV9p
c05vb3AgPSBub29wOworfQorCitTdHJpbmcgV01MRG9FbGVtZW50Ojpkb05hbWUoKSBjb25zdCAK
K3sKKyAgICByZXR1cm4gbV9uYW1lOworfQorCit2b2lkIFdNTERvRWxlbWVudDo6c2V0QWN0aXZl
KGJvb2wgYWN0aXZlKQoreworICAgIG1faXNBY3RpdmUgPSBhY3RpdmU7Cit9CisgCitib29sIFdN
TERvRWxlbWVudDo6aXNBY3RpdmUoKSBjb25zdAoreworICAgIHJldHVybiBtX2lzQWN0aXZlOwor
fQorCitib29sIFdNTERvRWxlbWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50
KikgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwv
V01MRG9FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRG9FbGVtZW50LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxEb0VsZW1lbnQuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MRG9FbGVtZW50X2gKKyNkZWZpbmUgV01M
RG9FbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxCdXR0b25FbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnQ7CitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CitjbGFz
cyBXTUxUYXNrRWxlbWVudDsKKworY2xhc3MgV01MRG9FbGVtZW50IDogcHVibGljIEhUTUxCdXR0
b25FbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxEb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworICAgIHZpcnR1YWwgfldNTERv
RWxlbWVudCgpOworCisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJl
bmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsgCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50Kik7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9v
bCBkZWVwKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2
ZW50KikgY29uc3Q7CisgICAgdm9pZCByZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqKTsKKwor
ICAgIC8vcmVjb3JkIHRoZSBub29wIHRhc2sKKyAgICB2b2lkIHNldE5vb3AoYm9vbCk7CisKKyAg
ICB2b2lkIHNldEFjdGl2ZShib29sKTsKKyAgICBib29sIGlzQWN0aXZlKCkgY29uc3Q7CisgICAg
U3RyaW5nIGRvTmFtZSgpIGNvbnN0OworcHJpdmF0ZToKKyAgICBXTUxUYXNrRWxlbWVudCogbV90
YXNrOworICAgIFN0cmluZyBtX3R5cGU7CisgICAgU3RyaW5nIG1fbGFiZWw7CisgICAgU3RyaW5n
IG1fbmFtZTsKKyAgICBib29sIG1faXNPcHRpb247CisgICAgYm9vbCBtX2lzTm9vcDsKKyAgICBi
b29sIG1faXNBY3RpdmU7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS93bWwvV01MRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTERv
Y3VtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTERvY3VtZW50LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXTUxEb2N1bWVudC5oIgorCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIldN
TEhlbHBlci5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTFRva2Vu
aXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dNTERvY3VtZW50OjpXTUxEb2N1bWVu
dChGcmFtZSogZnJhbWUpCisgICAgOiBEb2N1bWVudChmcmFtZSwgZmFsc2UpIAoreworICAgIGNs
ZWFyWE1MVmVyc2lvbigpOworCisgICAgUGFnZSogcGFnZSA9IHRoaXMtPnBhZ2UoKTsKKyAgICBp
ZiAocGFnZSAmJiAhcGFnZS0+d21sUGFnZVN0YXRlKCkpIHsKKyAgICAgICAgUmVmUHRyPFdNTFBh
Z2VTdGF0ZT4gcGFnZVN0YXRlID0gbmV3IFdNTFBhZ2VTdGF0ZShwYWdlKTsKKyAgICAgICAgcGFn
ZS0+c2V0V01MUGFnZVN0YXRlKHBhZ2VTdGF0ZSk7CisgICAgfQorfQorCitXTUxEb2N1bWVudDo6
fldNTERvY3VtZW50KCkKK3sKK30KKworVG9rZW5pemVyICpXTUxEb2N1bWVudDo6Y3JlYXRlVG9r
ZW5pemVyKCkgCit7CisgICAgcmV0dXJuIG5ldyBXTUxUb2tlbml6ZXIodGhpcyk7Cit9CisKK2lu
bGluZSBib29sIFdNTERvY3VtZW50Ojppc1dNTERvY3VtZW50KCkgY29uc3QgCit7IAorICAgIHJl
dHVybiB0cnVlOyAKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwvV01MRG9j
dW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MRG9jdW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgV01MRG9jdW1lbnRfaAorI2RlZmluZSBXTUxEb2N1bWVudF9o
CisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MRG9jdW1lbnQgOiBwdWJsaWMg
RG9jdW1lbnQsIHB1YmxpYyBDYWNoZWRSZXNvdXJjZUNsaWVudCB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8V01MRG9jdW1lbnQ+IGNyZWF0ZShGcmFtZSogZnJhbWUpCisgICAgewor
ICAgICAgICByZXR1cm4gbmV3IFdNTERvY3VtZW50KGZyYW1lKTsKKyAgICB9CisgICAgV01MRG9j
dW1lbnQoRnJhbWUqKTsKKyAgICB2aXJ0dWFsIH5XTUxEb2N1bWVudCgpOworCisgICAgdmlydHVh
bCBib29sIGlzV01MRG9jdW1lbnQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFRva2VuaXplciogY3Jl
YXRlVG9rZW5pemVyKCk7Cit9OworCisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDog
V2ViQ29yZS93bWwvV01MRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJXTUxFbGVtZW50LmgiCisKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisj
aW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQu
aCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKKyNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTEJSRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkhUTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUb2tl
bml6ZXIuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKKyNpbmNsdWRlICJSZW5kZXJXb3JkQnJlYWsu
aCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJU
ZXh0SXRlcmF0b3IuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxI
ZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5o
IgorI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3Vz
aW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MRWxlbWVudDo6V01MRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogU3R5bGVkRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCit7Cit9CisKK1dNTEVsZW1lbnQ6On5XTUxFbGVtZW50KCkgCit7Cit9
CisKK3ZvaWQgV01MRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApCit7CisgICAg
aWYgKGxvY2FsTmFtZSgpID09ICJub29wIikgeworICAgICAgICBmb3IgKE5vZGUqIHBhcmVudCA9
IHBhcmVudE5vZGUoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgewor
ICAgICAgICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShkb1RhZykpIHsKKyAgICAgICAgICAg
ICAgICBXTUxEb0VsZW1lbnQqIGRvRWxlbXQgPSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPihw
YXJlbnQpOworICAgICAgICAgICAgICAgIGlmIChkb0VsZW10LT5hdHRhY2hlZCgpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGRvRWxlbXQtPmRldGFjaCgpOworICAgICAgICAgICAgICAgICAgICBk
b0VsZW10LT5zZXROb29wKHRydWUpOworICAgICAgICAgICAgICAgICAgICBkb0VsZW10LT5hdHRh
Y2goKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9IGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShhbmNob3JUYWcpKQorICAgICAgICAg
ICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKFdyb25nVGFza0luQW5j
aG9yRWxlbWVudEVycm9yKTsKKyAgICAgICAgfQorICAgIH0KK30KKworUmVuZGVyT2JqZWN0KiBX
TUxFbGVtZW50OjpjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiBzdHls
ZSkgCit7CisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxl
KTsKK30KKworYm9vbCBXTUxFbGVtZW50Ojppc0hUTUxFbGVtZW50KCkgY29uc3QgCit7IAorICAg
IHJldHVybiB0cnVlOyAKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MRWxlbWVudC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgV01MRWxlbWVudF9oCisjZGVmaW5lIFdNTEVsZW1lbnRfaAorCisjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEVsZW1lbnQgOiBwdWJs
aWMgU3R5bGVkRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTEVsZW1lbnQoKTsK
KyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBS
ZW5kZXJTdHlsZSopOworICAgIHZpcnR1YWwgYm9vbCBpc0hUTUxFbGVtZW50KCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKK307CisKK30gLy9u
YW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxFbGVtZW50RmFjdG9yeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRWxlbWVudEZhY3RvcnkuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MRWxlbWVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
TUxFbGVtZW50RmFjdG9yeS5oIgorCisjaW5jbHVkZSAiSFRNTEJSRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxCdXR0b25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiSFRNTFRhYmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50
LmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MQUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxBbmNob3JFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1
ZGUgIldNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTFBvc3RmaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQcmV2RWxlbWVudC5oIgor
I2luY2x1ZGUgIldNTFJlZnJlc2hFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2VsZWN0RWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUYWJsZUVs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxU
aW1lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxJbnB1dEVsZW1lbnQuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK3VzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwordXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU6OldNTE5hbWVzOwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU6OkhUTUxOYW1lczsKKwordHlwZWRlZiBFbGVtZW50ICooKkNv
bnN0cnVjdG9yRnVuYykoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpOwordHlw
ZWRlZiBXVEY6Okhhc2hNYXA8QXRvbWljU3RyaW5nSW1wbCosIENvbnN0cnVjdG9yRnVuYz4gRnVu
Y3Rpb25NYXA7CisKK3N0YXRpYyBGdW5jdGlvbk1hcCAqZ0Z1bmN0aW9uTWFwID0gMDsKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitFbGVtZW50ICpjYXJkQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRv
YywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxDYXJkRWxlbWVu
dChjYXJkVGFnLCBkb2MpOworfQorCitFbGVtZW50ICp3bWxfYUNvbnN0cnVjdG9yKERvY3VtZW50
ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MQUVsZW1l
bnQoV01MTmFtZXM6OmFUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKmltZ0NvbnN0cnVjdG9yKERv
Y3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01M
SW1hZ2VFbGVtZW50KEhUTUxOYW1lczo6aW1nVGFnLCBkb2MpOworfQorCitFbGVtZW50ICpickNv
bnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJl
dHVybiBuZXcgSFRNTEJSRWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICpwQ29uc3RydWN0b3Io
RG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBX
TUxQRWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICppbnB1dENvbnN0cnVjdG9yKERvY3VtZW50
ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MSW5wdXRF
bGVtZW50KFdNTE5hbWVzOjppbnB1dFRhZywgZG9jKTsKK30KKworRWxlbWVudCAqYW5jaG9yQ29u
c3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0
dXJuIG5ldyBXTUxBbmNob3JFbGVtZW50KFdNTE5hbWVzOjphbmNob3JUYWcsIGRvYyk7Cit9CisK
K0VsZW1lbnQgKnNlbGVjdENvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MU2VsZWN0RWxlbWVudChXTUxOYW1lczo6c2Vs
ZWN0VGFnLCBkb2MpOworfQorCitFbGVtZW50ICpvcHRpb25Db25zdHJ1Y3RvcihEb2N1bWVudCAq
ZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTE9wdGlvbkVs
ZW1lbnQoZG9jKTsKK30KKworRWxlbWVudCAqcHJldkNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2Ms
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MUHJldkVsZW1lbnQo
ZG9jKTsKK30KKworRWxlbWVudCAqZ29Db25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTEdvRWxlbWVudChXTUxOYW1lczo6
Z29UYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnBvc3RmaWVsZENvbnN0cnVjdG9yKERvY3VtZW50
ICpkb2MsIGJvb2wgY3JldGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxQb3N0Zmll
bGRFbGVtZW50KFdNTE5hbWVzOjpwb3N0ZmllbGRUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnNl
dHZhckNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQorewor
ICAgIHJldHVybiBuZXcgV01MU2V0dmFyRWxlbWVudChXTUxOYW1lczo6c2V0dmFyVGFnLCBkb2Mp
OworfQorCitFbGVtZW50ICp0YWJsZUNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3Jl
YXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MVGFibGVFbGVtZW50KGRvYyk7Cit9
CisKK0VsZW1lbnQgKnRyQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVSb3dFbGVtZW50KGRvYyk7Cit9CisK
K0VsZW1lbnQgKnRkQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJz
ZXIpCit7CisgICAgcmV0dXJuIG5ldyBIVE1MVGFibGVDZWxsRWxlbWVudChIVE1MTmFtZXM6OnRk
VGFnLGRvYyk7Cit9CisKK0VsZW1lbnQgKmRvQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxEb0VsZW1lbnQoZG9UYWcs
IGRvYyk7Cit9CisKK0VsZW1lbnQgKnJlZnJlc2hDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBi
b29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFJlZnJlc2hFbGVtZW50
KHJlZnJlc2hUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnRlbXBsYXRlQ29uc3RydWN0b3IoRG9j
dW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxU
ZW1wbGF0ZUVsZW1lbnQodGVtcGxhdGVUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKnRpbWVyQ29u
c3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0
dXJuIG5ldyBXTUxUaW1lckVsZW1lbnQodGltZXJUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKmFj
Y2Vzc0NvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQorewor
ICAgIHJldHVybiBuZXcgV01MQWNjZXNzRWxlbWVudChhY2Nlc3NUYWcsIGRvYyk7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBjcmVhdGVGdW5jdGlvbk1hcElmTmVjZXNzYXJ5KCkKK3sKKyAgICBp
ZiAoZ0Z1bmN0aW9uTWFwKQorICAgICAgICByZXR1cm47CisgICAgLy8gQ3JlYXRlIHRoZSB0YWJs
ZS4KKyAgICBnRnVuY3Rpb25NYXAgPSBuZXcgRnVuY3Rpb25NYXA7CisgICAgCisgICAgLy8gUG9w
dWxhdGUgaXQgd2l0aCBjb25zdHJ1Y3RvciBmdW5jdGlvbnMuCisgICAgZ0Z1bmN0aW9uTWFwLT5z
ZXQoV01MTmFtZXM6OmNhcmRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBjYXJkQ29uc3RydWN0b3Ip
OworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjphVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgd21sX2FDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoSFRNTE5hbWVzOjpp
bWdUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBpbWdDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9u
TWFwLT5zZXQoSFRNTE5hbWVzOjpiclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGJyQ29uc3RydWN0
b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpwVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgcENvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6aW5w
dXRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBpbnB1dENvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rp
b25NYXAtPnNldChXTUxOYW1lczo6YW5jaG9yVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgYW5jaG9y
Q29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpzZWxlY3RUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCBzZWxlY3RDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFw
LT5zZXQoV01MTmFtZXM6Om9wdGlvblRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIG9wdGlvbkNvbnN0
cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6cHJldlRhZy5sb2NhbE5h
bWUoKS5pbXBsKCksIHByZXZDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01M
TmFtZXM6OmdvVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgZ29Db25zdHJ1Y3Rvcik7CisgICAgZ0Z1
bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnBvc3RmaWVsZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCks
IHBvc3RmaWVsZENvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6
c2V0dmFyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgc2V0dmFyQ29uc3RydWN0b3IpOworICAgIGdG
dW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjp0YWJsZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRh
YmxlQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KEhUTUxOYW1lczo6dHJUYWcu
bG9jYWxOYW1lKCkuaW1wbCgpLCB0ckNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNl
dChIVE1MTmFtZXM6OnRkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGRDb25zdHJ1Y3Rvcik7Cisg
ICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnJlZnJlc2hUYWcubG9jYWxOYW1lKCkuaW1w
bCgpLCByZWZyZXNoQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVz
Ojpkb1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGRvQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlv
bk1hcC0+c2V0KFdNTE5hbWVzOjp0ZW1wbGF0ZVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRlbXBs
YXRlQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjp0aW1lclRh
Zy5sb2NhbE5hbWUoKS5pbXBsKCksIHRpbWVyQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1h
cC0+c2V0KFdNTE5hbWVzOjphY2Nlc3NUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBhY2Nlc3NDb25z
dHJ1Y3Rvcik7Cit9CisKK0VsZW1lbnQgKldNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVt
ZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHFOYW1lLCBEb2N1bWVudCogZG9jLCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKK3sKKworICAgIFdlYkNvcmU6OldNTE5hbWVzOjppbml0KCk7CisgICAgLy8g
RG9uJ3QgbWFrZSBlbGVtZW50cyB3aXRob3V0IGEgZG9jdW1lbnQKKyAgICBpZiAoIWRvYykKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgY3JlYXRlRnVuY3Rpb25NYXBJZk5lY2Vzc2FyeSgp
OworICAgIENvbnN0cnVjdG9yRnVuYyBmdW5jID0gZ0Z1bmN0aW9uTWFwLT5nZXQocU5hbWUubG9j
YWxOYW1lKCkuaW1wbCgpKTsKKyAgICBpZiAoZnVuYykKKyAgICAgICAgcmV0dXJuIGZ1bmMoZG9j
LCBjcmVhdGVkQnlQYXJzZXIpOworICAgIAorICAgIHJldHVybiBuZXcgV01MRWxlbWVudChxTmFt
ZSwgZG9jKTsKK30KKworfSAvLyBuYW1lc3BhY2UKKwpJbmRleDogV2ViQ29yZS93bWwvV01MRWxl
bWVudEZhY3RvcnkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50RmFjdG9y
eS5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MRWxlbWVudEZhY3RvcnkuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MRWxlbWVudEZhY3Rvcnlf
aAorI2RlZmluZSBXTUxFbGVtZW50RmFjdG9yeV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAg
ICBjbGFzcyBFbGVtZW50OworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIFF1YWxpZmll
ZE5hbWU7CisgICAgY2xhc3MgQXRvbWljU3RyaW5nOworfQorCituYW1lc3BhY2UgV2ViQ29yZQor
eworICAgIGNsYXNzIFdNTEVsZW1lbnQ7CisKKyAgICAvLyBUaGUgaWRlYSBiZWhpbmQgdGhpcyBj
bGFzcyBpcyB0aGF0IHRoZXJlIHdpbGwgZXZlbnR1YWxseSBiZSBhIG1hcHBpbmcgZnJvbSBuYW1l
c3BhY2UgVVJJcyB0byBFbGVtZW50RmFjdG9yaWVzIHRoYXQgY2FuIGRpc3BlbnNlCisgICAgLy8g
ZWxlbWVudHMuICBJbiBhIGNvbXBvdW5kIGRvY3VtZW50IHdvcmxkLCB0aGUgZ2VuZXJpYyBjcmVh
dGVFbGVtZW50IGZ1bmN0aW9uICh3aWxsIGVuZCB1cCBiZWluZyB2aXJ0dWFsKSB3aWxsIGJlIGNh
bGxlZC4KKyAgICBjbGFzcyBXTUxFbGVtZW50RmFjdG9yeQorICAgIHsKKyAgICBwdWJsaWM6Cisg
ICAgICAgIFdlYkNvcmU6OkVsZW1lbnQgKmNyZWF0ZUVsZW1lbnQoY29uc3QgV2ViQ29yZTo6UXVh
bGlmaWVkTmFtZSYgcU5hbWUsIFdlYkNvcmU6OkRvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5
UGFyc2VyID0gdHJ1ZSk7CisgICAgICAgIHN0YXRpYyBFbGVtZW50ICpjcmVhdGVXTUxFbGVtZW50
KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIHFOYW1lLCBXZWJDb3JlOjpEb2N1bWVudCAq
ZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUpOworICAgIH07Cit9CisKKyNlbmRpZgor
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxHb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTEdvRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxH
b0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM4OCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU0hl
bHBlci5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIK
KyNpbmNsdWRlICJGb3JtRGF0YS5oIgorI2luY2x1ZGUgIkZvcm1EYXRhTGlzdC5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIK
KyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAi
V01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
SGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxQb3N0ZmllbGRF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRh
c2tFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
VG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdN
TE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK3RlbXBsYXRlPGNsYXNzIFQs
IHNpemVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3RvcjxUKiwgbj4gJiB2
ZWMsIFQqIGl0ZW0pIAoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUoKTsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2ZWNbaV0gPT0gaXRl
bSkgeworICAgICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9Cit9CisKK3N0YXRpYyBpbnQgcmFuZG9tTnVtYmVyKCkKK3sKKyAgICBzdGF0aWMgYm9v
bCByYW5kb21TZWVkZWQgPSBmYWxzZTsKKyAKKyNpZiBQTEFURk9STShEQVJXSU4pCisgICAgaWYg
KCFyYW5kb21TZWVkZWQpIHsKKyAgICAgICAgc3JhbmRvbWRldigpOworICAgICAgICByYW5kb21T
ZWVkZWQgPSB0cnVlOworICAgIH0KKyAgICByZXR1cm4gcmFuZG9tKCk7CisjZWxzZQorICAgIGlm
ICghcmFuZG9tU2VlZGVkKSB7CisgICAgICAgIHNyYW5kKHN0YXRpY19jYXN0PHVuc2lnbmVkPih0
aW1lKDApKSk7CisgICAgICAgIHJhbmRvbVNlZWRlZCA9IHRydWU7CisgICAgfQorICAgIHJldHVy
biByYW5kKCk7CisjZW5kaWYKK30KKyAKKy8vIFJldHVybnMgYSAwLXRlcm1pbmF0ZWQgQyBzdHJp
bmcgaW4gdGhlIHZlY3Rvci4KK3N0YXRpYyB2b2lkIGdldFVuaXF1ZUJvdW5kYXJ5U3RyaW5nKFZl
Y3RvcjxjaGFyPiYgYm91bmRhcnkpCit7CisgICAgLy8gVGhlIFJGQyAyMDQ2IHNwZWMgc2F5cyB0
aGUgQWxwaGFOdW1lcmljIGNoYXJhY3RlcnMgcGx1cyB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMK
KyAgICAvLyBhcmUgbGVnYWwgZm9yIGJvdW5kYXJpZXM6ICAnKCkrXywtLi86PT8KKyAgICAvLyBI
b3dldmVyIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycywgdGhvdWdoIGxlZ2FsLCBjYXVzZSBzb21l
IHNpdGVzIHRvIGZhaWw6CisgICAgLy8gKCksLi86PQorICAgIC8vIGh0dHA6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTEzMzUyCisgICAgc3RhdGljIGNvbnN0IGNoYXIgQWxwaGFO
dW1lcmljRW5jTWFwWzY0XSA9CisgICAgeworICAgICAgMHg0MSwgMHg0MiwgMHg0MywgMHg0NCwg
MHg0NSwgMHg0NiwgMHg0NywgMHg0OCwKKyAgICAgIDB4NDksIDB4NEEsIDB4NEIsIDB4NEMsIDB4
NEQsIDB4NEUsIDB4NEYsIDB4NTAsCisgICAgICAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1
LCAweDU2LCAweDU3LCAweDU4LAorICAgICAgMHg1OSwgMHg1QSwgMHg2MSwgMHg2MiwgMHg2Mywg
MHg2NCwgMHg2NSwgMHg2NiwKKyAgICAgIDB4NjcsIDB4NjgsIDB4NjksIDB4NkEsIDB4NkIsIDB4
NkMsIDB4NkQsIDB4NkUsCisgICAgICAweDZGLCAweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0
LCAweDc1LCAweDc2LAorICAgICAgMHg3NywgMHg3OCwgMHg3OSwgMHg3QSwgMHgzMCwgMHgzMSwg
MHgzMiwgMHgzMywKKyAgICAgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4MzksIDB4
MkIsIDB4NDEKKyAgICAgIC8vIEZJWE1FIDxyZGFyOi8vcHJvYmxlbS81MjUyNTc3PiBnbWFpbCBk
b2VzIG5vdCBhY2NlcHQgbGVnYWwgY2hhcmFjdGVycyBpbiB0aGUgZm9ybSBib3VuZGFyeQorICAg
ICAgLy8gQXMgc3RhdGVkIGFib3ZlLCBzb21lIGxlZ2FsIGNoYXJhY3RlcnMgY2F1c2UsIHNpdGVz
IHRvIGZhaWwuIFNwZWNpZmljYWxseQorICAgICAgLy8gdGhlIC8gY2hhcmFjdGVyIHdoaWNoIHdh
cyB0aGUgbGFzdCBjaGFyYWN0ZXIgaW4gdGhlIGFib3ZlIGFycmF5LiBJIGhhdmUKKyAgICAgIC8v
IHJlcGxhY2VkIHRoZSBsYXN0IGNoYXJhY3RlciB3aXRoIGFub3RoZXIgY2hhcmFjdGVyIGFscmVh
ZHkgaW4gdGhlIGFycmF5CisgICAgICAvLyAobm90aWNlIHRoZSBmaXJzdCBhbmQgbGFzdCB2YWx1
ZXMgYXJlIGJvdGggMHg0MSwgQSkuIEluc3RlYWQgb2YgcGlja2luZworICAgICAgLy8gYW5vdGhl
ciB1bmlxdWUgbGVnYWwgY2hhcmFjdGVyIGZvciBib3VuZGFyeSBzdHJpbmdzIHRoYXQsIGJlY2F1
c2UgaXQgaGFzCisgICAgICAvLyBuZXZlciBiZWVuIHRlc3RlZCwgbWF5IG9yIG1heSBub3QgYnJl
YWsgb3RoZXIgc2l0ZXMsIEkgc2ltcGx5CisgICAgICAvLyByZXBsYWNlZCAvIHdpdGggQS4gIFRo
aXMgbWVhbnMgQSBpcyB0d2ljZSBhcyBsaWtlbHkgdG8gb2NjdXIgaW4gb3VyIGJvdW5kYXJ5Cisg
ICAgICAvLyBzdHJpbmdzIHRoYW4gYW55IG90aGVyIGNoYXJhY3RlciBidXQgSSB0aGluayB0aGlz
IGlzIGZpbmUgZm9yIHRoZSB0aW1lIGJlaW5nLgorICAgICAgLy8gVGhlIEZJWE1FIGhlcmUgaXMg
YWJvdXQgcmVzdG9yaW5nIHRoZSAvIGNoYXJhY3RlciBvbmNlIHRoZSBhZm9yZW1lbnRpb25lZAor
ICAgICAgLy8gcmFkYXIgaGFzIGJlZW4gcmVzb2x2ZWQuCisgICAgfTsKKyAKKyAgICAvLyBTdGFy
dCB3aXRoIGFuIGluZm9ybWF0aXZlIHByZWZpeC4KKyAgICBjb25zdCBjaGFyIGJvdW5kYXJ5UHJl
Zml4W10gPSAiLS0tLVdlYktpdEZvcm1Cb3VuZGFyeSI7CisgICAgYm91bmRhcnkuYXBwZW5kKGJv
dW5kYXJ5UHJlZml4LCBzdHJsZW4oYm91bmRhcnlQcmVmaXgpKTsKKyAKKyAgICAvLyBBcHBlbmQg
MTYgcmFuZG9tIDdiaXQgYXNjaWkgQWxwaGFOdW1lcmljIGNoYXJhY3RlcnMuCisgICAgVmVjdG9y
PGNoYXI+IHJhbmRvbUJ5dGVzOworIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgNDsgKytpKSB7
CisgICAgICAgIGludCByYW5kb21uZXNzID0gcmFuZG9tTnVtYmVyKCk7CisgICAgICAgIHJhbmRv
bUJ5dGVzLmFwcGVuZChBbHBoYU51bWVyaWNFbmNNYXBbKHJhbmRvbW5lc3MgPj4gMjQpICYgMHgz
Rl0pOworICAgICAgICByYW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwWyhyYW5k
b21uZXNzID4+IDE2KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhh
TnVtZXJpY0VuY01hcFsocmFuZG9tbmVzcyA+PiA4KSAmIDB4M0ZdKTsKKyAgICAgICAgcmFuZG9t
Qnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFtyYW5kb21uZXNzICYgMHgzRl0pOworICAg
IH0KKyAKKyAgICBib3VuZGFyeS5hcHBlbmQocmFuZG9tQnl0ZXMpOworICAgIGJvdW5kYXJ5LmFw
cGVuZCgwKTsgLy8gQWRkIGEgMCBhdCB0aGUgZW5kIHNvIHdlIGNhbiB1c2UgdGhpcyBhcyBhIEMt
c3R5bGUgc3RyaW5nLgorfQorCitXTUxHb0VsZW1lbnQ6OldNTEdvRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICAgIDogV01MVGFza0VsZW1lbnQo
dGFnTmFtZSwgZG9jKQorICAgICwgbV9lbmN0eXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVy
bGVuY29kZWQiKSAKKyAgICAsIG1fbXVsdGlwYXJ0KGZhbHNlKQorICAgICwgbV9wb3N0KGZhbHNl
KQoreworfQorCitXTUxHb0VsZW1lbnQ6On5XTUxHb0VsZW1lbnQoKQoreworfQorCit2b2lkIFdN
TEdvRWxlbWVudDo6cmVnaXN0ZXJQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQq
IGUpIAoreworICAgIG1fcG9zdGZpZWxkcy5hcHBlbmQoZSk7Cit9CisKK3ZvaWQgV01MR29FbGVt
ZW50OjpyZW1vdmVQb3N0ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqIGUpIAorewor
ICAgIHJlbW92ZUZyb21WZWN0b3IobV9wb3N0ZmllbGRzLCBlKTsKK30KKworYm9vbCBXTUxHb0Vs
ZW1lbnQ6Omhhc1Bvc3RmaWVsZCgpIGNvbnN0IAoreworICAgIHJldHVybiAhbV9wb3N0ZmllbGRz
LmlzRW1wdHkoKTsKK30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OnBhcnNlRW5jdHlwZShjb25zdCBT
dHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuY29udGFpbnMoIm11bHRpcGFydCIsIGZhbHNl
KSB8fCB0eXBlLmNvbnRhaW5zKCJmb3JtLWRhdGEiLCBmYWxzZSkpIHsKKyAgICAgICAgbV9lbmN0
eXBlID0gIm11bHRpcGFydC9mb3JtLWRhdGEiOworICAgICAgICBtX211bHRpcGFydCA9IHRydWU7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9lbmN0eXBlID0gImFwcGxpY2F0aW9uL3gtd3d3LWZv
cm0tdXJsZW5jb2RlZCI7CisgICAgICAgIG1fbXVsdGlwYXJ0ID0gZmFsc2U7CisgICAgfQorfQor
Cit2b2lkIFdNTEdvRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
ICphdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbWV0aG9kQXR0cikgeworICAgICAg
ICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgInBvc3QiKSkKKyAgICAgICAg
ICAgIG1fcG9zdCA9IHRydWU7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGF0
dHItPnZhbHVlKCksICJnZXQiKSkKKyAgICAgICAgICAgIG1fcG9zdCA9IGZhbHNlOworICAgIH0g
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGVuY3R5cGVBdHRyKSB7CisgICAgICAgIFN0cmluZyBl
bmN0eXBlID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3Vt
ZW50KCkpOworICAgICAgICBwYXJzZUVuY3R5cGUoZW5jdHlwZSk7CisgICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gYWNjZXB0X2NoYXJzZXRBdHRyKSB7CisgICAgICAgIC8vIHNwYWNlIHNl
cGFyYXRlZCBsaXN0IG9mIGNoYXJzZXRzIHRoZSBzZXJ2ZXJhIGFjY2VwdHMgLSBzZWUgcmZjMjA0
NQorICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkg
eworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxp
ZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIG1fYWNjZXB0Y2hhcnNldCA9IGF0dHItPnZhbHVlKCk7CisgICAgfSBlbHNlCisg
ICAgICAgIFdNTEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCitQYXNz
UmVmUHRyPEZvcm1EYXRhPiBXTUxHb0VsZW1lbnQ6OmZvcm1EYXRhKEZyYW1lTG9hZGVyKiBsb2Fk
ZXIsIGNvbnN0IGNoYXIqIGJvdW5kYXJ5KSAKK3sKKyAgICBTdHJpbmcgc3RyID0gbV9hY2NlcHRj
aGFyc2V0OworICAgIHN0ci5yZXBsYWNlKCcsJywgJyAnKTsKKworICAgIFZlY3RvcjxTdHJpbmc+
IGNoYXJzZXRzOworICAgIHN0ci5zcGxpdCgnICcsIGNoYXJzZXRzKTsKKyAgICBUZXh0RW5jb2Rp
bmcgZW5jb2Rpbmc7CisgICAgVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGVuZCA9IGNo
YXJzZXRzLmVuZCgpOworICAgIGZvciAoVmVjdG9yPFN0cmluZz46OmNvbnN0X2l0ZXJhdG9yIGl0
ID0gY2hhcnNldHMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQorICAgICAgICBpZiAoKGVuY29k
aW5nID0gVGV4dEVuY29kaW5nKCppdCkpLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGJyZWFrOwor
CisgICAgaWYgKCFlbmNvZGluZy5pc1ZhbGlkKCkpIHsKKyAgICAgICAgaWYgKGxvYWRlcikKKyAg
ICAgICAgICAgIGVuY29kaW5nID0gbG9hZGVyLT5lbmNvZGluZygpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBlbmNvZGluZyA9IExhdGluMUVuY29kaW5nKCk7CisgICAgfQorIAorICAgIFJl
ZlB0cjxGb3JtRGF0YT4gcmVzdWx0ID0gRm9ybURhdGE6OmNyZWF0ZSgpOworICAgIFN0cmluZyBl
bmNfc3RyaW5nOworIAorICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9wb3N0Zmll
bGRzLnNpemUoKTsgaSsrKSB7CisKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBtX3Bvc3RmaWVsZHNb
aV0tPm5hbWUoKTsKKyAgICAgICAgU3RyaW5nIHZhbHVlID0gbV9wb3N0ZmllbGRzW2ldLT52YWx1
ZSgpOworCisgICAgICAgIGlmICghbV9tdWx0aXBhcnQpIHsKKyAgICAgICAgICAgIGlmICghZW5j
X3N0cmluZy5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgZW5jX3N0cmluZyArPSAiJiI7CisK
KyAgICAgICAgICAgIGVuY19zdHJpbmcgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyht
X3Bvc3RmaWVsZHNbaV0tPm5hbWUoKSk7IAorICAgICAgICAgICAgZW5jX3N0cmluZyArPSAiPSI7
CisgICAgICAgICAgICBlbmNfc3RyaW5nICs9IGVuY29kZVdpdGhVUkxFc2NhcGVTZXF1ZW5jZXMo
bV9wb3N0ZmllbGRzW2ldLT52YWx1ZSgpKTsgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBTdHJpbmcgaHN0cigiLS0iKTsKKyAgICAgICAgICAgIGhzdHIgKz0gYm91bmRhcnk7CisgICAg
ICAgICAgICBoc3RyICs9ICJcclxuIjsKKyAgICAgICAgICAgIGhzdHIgKz0gIkNvbnRlbnQtRGlz
cG9zaXRpb246IGZvcm0tZGF0YTsgbmFtZT1cIiI7CisgICAgICAgICAgICBoc3RyICs9IGVuY29k
aW5nLmVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4obmFtZS5jaGFyYWN0ZXJz
KCkpLCBuYW1lLmxlbmd0aCgpLCBVUkxFbmNvZGVkRW50aXRpZXNGb3JVbmVuY29kYWJsZXMpLmRh
dGEoKTsgCisgICAgICAgICAgICBoc3RyICs9ICJcIiI7CisgICAgICAgICAgICBoc3RyICs9ICJc
clxuXHJcbiI7CisKKyAgICAgICAgICAgIC8vIGFwcGVuZCBib2R5CisgICAgICAgICAgICByZXN1
bHQtPmFwcGVuZERhdGEoaHN0ci5jaGFyYWN0ZXJzKCksIGhzdHIubGVuZ3RoKCkpOworCisgICAg
ICAgICAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgICAgIFN0cmluZyBj
c1ZhbCA9IGVuY29kaW5nLmVuY29kZShyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odmFs
dWUuY2hhcmFjdGVycygpKSwgdmFsdWUubGVuZ3RoKCksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVu
ZW5jb2RhYmxlcykuZGF0YSgpOyAKKyAgICAgICAgICAgICAgICByZXN1bHQtPmFwcGVuZERhdGEo
Y3NWYWwuY2hhcmFjdGVycygpLCBjc1ZhbC5sZW5ndGgoKSk7CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YSgiXHJcbiIsIDIpOworCisgICAgICAgICAgICAv
LyBhY2NvcmRpbmcgdG8gdGhlIHNlY3Rpb24gOS41LjEgb2Ygd2FwLTE5MS13bWwtMjAwMDAyMTkt
YS5wZGYsIAorICAgICAgICAgICAgLy8gbWFrZSB0aGUgQ29udGVudC10eXBlIGhlYWRlciBpbmNs
dWRlIHRoZSBjaGFyc2V0IHBhcmFtZXRlcgorICAgICAgICAgICAgU3RyaW5nIHN0ciA9IHJlc3Vs
dC0+ZmxhdHRlblRvU3RyaW5nKCk7CisgICAgICAgICAgICBpZiAoIWNoYXJhY3RlcnNBcmVBbGxB
U0NJSShzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCkpKSB7CisgICAgICAgICAgICAgICAg
bV9lbmN0eXBlICs9ICI7IjsKKyAgICAgICAgICAgICAgICBtX2VuY3R5cGUgKz0gZW5jb2Rpbmcu
bmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSAvLyBlbmQgb2YgZm9yICgu
Li4KKworICAgIGlmIChtX211bHRpcGFydCkgeworICAgICAgICBlbmNfc3RyaW5nID0gIi0tIjsK
KyAgICAgICAgZW5jX3N0cmluZyArPSBib3VuZGFyeTsKKyAgICAgICAgZW5jX3N0cmluZyArPSAi
LS1cclxuIjsKKworICAgIH0gZWxzZSB7CisgICAgICAgIG1fZW5jdHlwZSArPSAiOyI7CisgICAg
ICAgIG1fZW5jdHlwZSArPSBlbmNvZGluZy5uYW1lKCk7CisgICAgfQorIAorICAgIHJlc3VsdC0+
YXBwZW5kRGF0YShlbmNfc3RyaW5nLmNoYXJhY3RlcnMoKSwgZW5jX3N0cmluZy5sZW5ndGgoKSk7
CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OmV4ZWMoRXZlbnQq
IGV2dCwgU3RyaW5nIHVyaSkgCit7CisgICAgRG9jdW1lbnQqIGRvYyA9IGRvY3VtZW50KCk7Cisg
ICAgQVNTRVJUKGRvYyk7CisgICAgQVNTRVJUKGRvYy0+ZnJhbWUoKSk7CisgICAgRnJhbWVMb2Fk
ZXIqIGxvYWRlcj0gZG9jLT5mcmFtZSgpLT5sb2FkZXIoKTsKKyAgICBQYWdlKiBwYWdlID0gZG9j
LT5wYWdlKCk7CisgICAgaWYgKCFsb2FkZXIgfHwgIXBhZ2UpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIGNvbnZlcnQgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBvZiBzZXR2YXIgZWxlbWVu
dCBpZiBuZWNlc3NhcnkKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcnM7CisgICAgaWYgKGhhc1NldHZh
cigpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9zZXR2YXJzLnNp
emUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fc2V0dmFyc1tpXS0+bmFtZSgpLmlzRW1w
dHkoKSkgCisgICAgICAgICAgICAgICAgbV92YXJzLnNldChtX3NldHZhcnNbaV0tPm5hbWUoKSwg
bV9zZXR2YXJzW2ldLT52YWx1ZSgpKTsKKyAgICAgICAgfQorICAgIH0gCisKKyAgICBXTUxQYWdl
U3RhdGUqIHBhZ2VTdGF0ZSA9IHBhZ2UtPndtbFBhZ2VTdGF0ZSgpOworICAgIC8vIHVwZGF0ZSBi
cm93c2VyIGNvbnRleHQgCisgICAgaWYgKCFtX3ZhcnMuaXNFbXB0eSgpKQorICAgICAgICBwYWdl
U3RhdGUtPnN0b3JlVmFyaWFibGVzKG1fdmFycyk7CisgCisKKyAgICAvLyBzdWJzdGl0dXRlIHRh
cmdldCB1cmkgYXR0cmlidXRlIHZhbHVlCisgICAgaWYgKHVyaS5pc0VtcHR5KCkpCisgICAgICAg
IHVyaSA9IGdldEF0dHJpYnV0ZSgiaHJlZiIpOworICAgIHVyaSA9IFdNTEhlbHBlcjo6c3Vic3Rp
dHV0ZVZhclJlZih1cmksIGRvYywgImVzY2FwZSIpOworCisgICAgLy8gc3RvcCB0aGUgdGltZXIg
b2YgdGhlIGN1cnJlbnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICBXTUxDYXJkRWxlbWVudCog
Y2FyZCA9IHBhZ2VTdGF0ZS0+YWN0aXZlQ2FyZCgpOworICAgIGlmIChjYXJkICYmIGNhcmQtPmV2
ZW50VGltZXIoKSkKKyAgICAgICAgY2FyZC0+ZXZlbnRUaW1lcigpLT5zdG9wKCk7CisKKyAgICAv
LyBpZiBuZXdjb250ZXh0IGF0dHJpYnV0ZSBvZiBkZXN0IGNhcmQgaXMgdHJ1ZSwgcmVpbml0aWFs
aXplIHRoZSBjb250ZXh0CisgICAgY2FyZCA9IFdNTEhlbHBlcjo6c2V0RGVzdGluYXRpb25DYXJk
KGRvY3VtZW50KCksIHVyaSk7CisgICAgaWYgKGNhcmQgJiYgY2FyZC0+aXNOZXdDb250ZXh0KCkp
CisgICAgICAgIHBhZ2VTdGF0ZS0+cmVzZXQoKTsKKworICAgIC8vIHByZXBhcmUgZm9yIGxvYWRp
bmcgdGhlIGRlc3RpbmF0aW9uIFVSTAorICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGRhdGEgPSAw
OworICAgIEtVUkwgdXJsID0gZG9jLT5jb21wbGV0ZVVSTCh1cmkuaXNFbXB0eSgpID8gIiIgOiB1
cmkpOworICAgIFJlc291cmNlUmVxdWVzdCByZXEodXJsKTsKKyAgICBLVVJMIGRvY1VybCA9IGRv
Yy0+Y29tcGxldGVVUkwoZG9jLT5kb2N1bWVudFVSSSgpKTsKKyAgICBib29sIGluU2FtZURlY2sg
PSBkb2NVcmwucGF0aCgpID09IHVybC5wYXRoKCk7IAorCisKKyAgICBTdHJpbmcgc2VuZHJlZmVy
ZXIgPSBnZXRBdHRyaWJ1dGUoInNlbmRyZWZlcmVyIik7CisgICAgaWYgKHNlbmRyZWZlcmVyID09
ICJ0cnVlIikgeworICAgICAgICBzZW5kcmVmZXJlciA9IHVyaTsKKyAgICAgICAgcmVxLnNldEhU
VFBSZWZlcnJlcihzZW5kcmVmZXJlcik7CisgICAgfQorCisgICAgU3RyaW5nIGNhY2hlQ3RybCA9
IGdldEF0dHJpYnV0ZSgiY2FjaGVfY29udHJvbCIpOworCisgICBpZiAobV9wb3N0KSB7IC8vIFBP
U1QKKworICAgICAgIGlmIChpblNhbWVEZWNrICYmIChjYWNoZUN0cmwgIT0gIm5vLWNhY2hlIikp
IC8vaWdub3JlIGFsbCBwb3N0ZmllbGQgZWxlbWVudHMKKyAgICAgICAgICAgIHJlcS5zZXRDYWNo
ZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7CisgICAgICAgZWxzZSB7CisKKyAgICAg
ICAgICAgaWYgKG1fbXVsdGlwYXJ0KSB7IC8vIG11bHRpcGFydC9mb3JtLWRhdGEKKyAgICAgICAg
ICAgICAgICBWZWN0b3I8Y2hhcj4gYm91bmRhcnk7CisgICAgICAgICAgICAgICAgZ2V0VW5pcXVl
Qm91bmRhcnlTdHJpbmcoYm91bmRhcnkpOworICAgICAgICAgICAgICAgIGRhdGEgPSBmb3JtRGF0
YShsb2FkZXIsIGJvdW5kYXJ5LmRhdGEoKSk7CisgICAgICAgICAgICAgICAgcmVxLnNldEhUVFBD
b250ZW50VHlwZShtX2VuY3R5cGUgKyAiOyBib3VuZGFyeT0iICsgYm91bmRhcnkuZGF0YSgpKTsK
KyAgICAgICAgICAgfSBlbHNlIHsgIC8vdGV4dC9wbGFpbiBvciBhcHBsaWNhdGlvbi94LXd3dy1m
b3JtLXVybGVuY29kZWQKKyAgICAgICAgICAgICAgICBkYXRhID0gZm9ybURhdGEobG9hZGVyLCAw
KTsKKyAgICAgICAgICAgICAgICByZXEuc2V0SFRUUENvbnRlbnRUeXBlKG1fZW5jdHlwZSk7Cisg
ICAgICAgICAgIH0KKworICAgICAgICAgICByZXEuc2V0SFRUUEJvZHkoZGF0YS5nZXQoKSk7Cisg
ICAgICAgfQorCisgICAgICAgcmVxLnNldEhUVFBNZXRob2QoIlBPU1QiKTsKKworICAgfSBlbHNl
IHsgICAvLyBHRVQKKworICAgICAgICBpZiAobV9tdWx0aXBhcnQpCisgICAgICAgICAgICByZXR1
cm47CisKKyAgICAgICAgaWYgKGluU2FtZURlY2spCisgICAgICAgICAgICByZXEuc2V0Q2FjaGVQ
b2xpY3koUmV0dXJuQ2FjaGVEYXRhRG9udExvYWQpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIFN0cmluZyBzdHI7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8
IG1fcG9zdGZpZWxkcy5zaXplKCk7IGkrKykgeworICAgICAgICAgICAgICAgIGlmICghc3RyLmlz
RW1wdHkoKSkgCisgICAgICAgICAgICAgICAgICAgIHN0ciArPSAiJiI7ICAgICAgICAKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBzdHIgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNl
cXVlbmNlcyhtX3Bvc3RmaWVsZHNbaV0tPm5hbWUoKSk7CisgICAgICAgICAgICAgICAgc3RyICs9
ICI9IjsKKyAgICAgICAgICAgICAgICBzdHIgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNl
cyhtX3Bvc3RmaWVsZHNbaV0tPnZhbHVlKCkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICB1cmwuc2V0UXVlcnkoc3RyKTsKKyAgICAgICAgICAgIHJlcS5zZXRVUkwodXJsKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJlcS5zZXRIVFRQTWV0aG9kKCJHRVQiKTsKKworICAgfQorCisgICAg
Ly8gc2V0IEhUVFAgY2FjaGUtY29udHJvbCBoZWFkZXIgaWYgbmVlZGVkCisgICAgaWYgKCFjYWNo
ZUN0cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIHJlcS5zZXRIVFRQSGVhZGVyRmllbGQoImNhY2hl
LWNvbnRyb2wiLCBjYWNoZUN0cmwpOworICAgICAgICBpZiAoY2FjaGVDdHJsID09ICJuby1jYWNo
ZSIpCisgICAgICAgICAgICByZXEuc2V0Q2FjaGVQb2xpY3koUmVsb2FkSWdub3JpbmdDYWNoZURh
dGEpOworICAgIH0KKworICAgIGxvYWRlci0+bG9hZChyZXEpOworfQorCit9CisKSW5kZXg6IFdl
YkNvcmUvd21sL1dNTEdvRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEdv
RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmgJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEdvRWxlbWVudF9oCisj
ZGVmaW5lIFdNTEdvRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MQ29sbGVjdGlvbi5oIgorI2lu
Y2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RXZlbnQ7CitjbGFzcyBGb3JtRGF0YTsKK2NsYXNzIEZyYW1lTG9hZGVyOworY2xhc3MgV01MQ2Fy
ZEVsZW1lbnQ7CitjbGFzcyBXTUxQb3N0ZmllbGRFbGVtZW50OworICAgICAgICAgICAgICAgICAg
ICAgICAKK2NsYXNzIFdNTEdvRWxlbWVudCA6IHB1YmxpYyBXTUxUYXNrRWxlbWVudCB7CitwdWJs
aWM6CisgICAgV01MR29FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2MpOworICAgIHZpcnR1YWwgfldNTEdvRWxlbWVudCgpOworICAKKyAgICB2aXJ0dWFs
IHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdmlydHVh
bCB2b2lkIGV4ZWMoRXZlbnQqLCBTdHJpbmcpOworCisgICAgdm9pZCByZWdpc3RlclBvc3RmaWVs
ZEVsZW1lbnQoV01MUG9zdGZpZWxkRWxlbWVudCopOworICAgIHZvaWQgcmVtb3ZlUG9zdGZpZWxk
RWxlbWVudChXTUxQb3N0ZmllbGRFbGVtZW50Kik7CisgICAgYm9vbCBoYXNQb3N0ZmllbGQoKSBj
b25zdDsKKworcHJpdmF0ZToKKyAgICBQYXNzUmVmUHRyPEZvcm1EYXRhPiBmb3JtRGF0YShGcmFt
ZUxvYWRlciosIGNvbnN0IGNoYXIqKTsKKyAgICB2b2lkIHBhcnNlRW5jdHlwZShjb25zdCBTdHJp
bmcmKTsKKworICAgIFZlY3RvcjxXTUxQb3N0ZmllbGRFbGVtZW50Kj4gbV9wb3N0ZmllbGRzOwor
ICAgIFN0cmluZyBtX2VuY3R5cGU7CisgICAgU3RyaW5nIG1fYWNjZXB0Y2hhcnNldDsKKyAgICBi
b29sIG1fbXVsdGlwYXJ0IDogMTsKKyAgICBib29sIG1fcG9zdCA6IDE7Cit9OworCit9IC8vbmFt
ZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MSGVscGVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxIZWxwZXIuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29y
ZS93bWwvV01MSGVscGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMjkgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNs
dWRlICJOYW1lZEF0dHJNYXAuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTERvY3VtZW50
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNs
dWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAid3RmL0FTQ0lJQ1R5cGUuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXTUxUb2tlbml6ZXIqIFdNTEhlbHBlcjo6c190b2tlbml6ZXIg
PSAwOworCitXTUxUb2tlbml6ZXIqIFdNTEhlbHBlcjo6dG9rZW5pemVyKCkKK3sKKyAgICByZXR1
cm4gc190b2tlbml6ZXI7Cit9CisKK3ZvaWQgV01MSGVscGVyOjpzZXRUb2tlbml6ZXIoV01MVG9r
ZW5pemVyKiB0b2tlbml6ZXIpCit7CisgICAgc190b2tlbml6ZXIgPSB0b2tlbml6ZXI7Cit9CisK
K3N0YXRpYyBib29sIGlzVmFsaWRGb3JWYXJpYWJsZShVQ2hhciBjaCkgCit7CisgICAgY2hhciBh
ID0gc3RhdGljX2Nhc3Q8Y2hhcj4oY2gpOworICAgIHJldHVybiAoV1RGOjppc0FTQ0lJQWxwaGEo
YSkgfHwgV1RGOjppc0FTQ0lJRGlnaXQoYSkgfHwgYSA9PSAnXycpOworfQorIAorYm9vbCBXTUxI
ZWxwZXI6OmlzVmFsaWRWYXJpYWJsZU5hbWUoY29uc3QgU3RyaW5nJiB2YXJOYW1lLCBib29sIGlz
VmFyUmVmKQoreworICAgIGJvb2wgaXNWYWxpZCA9IGZhbHNlOworICAgIFVDaGFyIGNoID0gdmFy
TmFtZVswXTsKKworICAgIFN0cmluZyByZWZDaGFycyA9ICIoKTokIjsKKyAgICBpZiAoaXNWYXJS
ZWYpCisgICAgICAgIGlzVmFsaWQgPSAoKHJlZkNoYXJzLmZpbmQoY2gpICE9IC0xKSB8fCBjaCA9
PSAnXycgfHwgV1RGOjppc0FTQ0lJQWxwaGEoc3RhdGljX2Nhc3Q8Y2hhcj4oY2gpKSk7CisgICAg
ZWxzZQorICAgICAgICBpc1ZhbGlkID0gKGNoID09ICdfJyB8fCBXVEY6OmlzQVNDSUlBbHBoYShz
dGF0aWNfY2FzdDxjaGFyPihjaCkpKTsKKworICAgIGlmIChpc1ZhbGlkKSB7CisgICAgICAgIGZv
ciAodW5zaWduZWQgaT0xOyBpPHZhck5hbWUubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAg
aWYgKGlzVmFyUmVmKQorICAgICAgICAgICAgICAgIGlzVmFsaWQgPSAoKHJlZkNoYXJzLmZpbmQo
dmFyTmFtZVtpXSkgIT0gLTEpIHx8IGlzVmFsaWRGb3JWYXJpYWJsZSh2YXJOYW1lW2ldKSk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGlzVmFsaWRGb3JWYXJp
YWJsZSh2YXJOYW1lW2ldKTsKKworICAgICAgICAgICAgaWYgKCFpc1ZhbGlkKQorICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGlzVmFsaWQ7Cit9
CisKK2Jvb2wgV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihjb25zdCBTdHJpbmcmIHRleHQpCit7
CisgICAgYm9vbCBoYXNWYXJSZWYgPSBmYWxzZTsKKyAgICBpbnQgc3RhcnRQb3MgPSB0ZXh0LmZp
bmQoJyQnKTsKKyAgICBpZiAoc3RhcnRQb3MgIT0gLTEpIHsKKyAgICAgICAgdW5zaWduZWQgZW5k
UG9zID0gc3RhcnRQb3MgKyAxOworICAgICAgICB3aGlsZSAodGV4dFtlbmRQb3NdID09ICckJykK
KyAgICAgICAgICAgIGVuZFBvcysrOworCisgICAgICAgIGlmICgoKGVuZFBvcy1zdGFydFBvcykg
JSAyKSAhPSAwKQorICAgICAgICAgICAgaGFzVmFyUmVmID0gdHJ1ZTsKKyAgICB9CisKKyAgICBy
ZXR1cm4gaGFzVmFyUmVmOworfQorCitzdGF0aWMgaW50IHZhcmlhYmxlRW5kc0F0KGNvbnN0IFN0
cmluZyYgdmFyaWFibGUpIAoreworICAgIC8vIHdlIGFzc3VtZSB0aGUgdmFyaWFibGUgc3RhcnRz
IHdpdGggIiQiICwgYW5kIHRoZW4gZm9sbG93cyB3aXRoIGF0IGxlYXN0IG9uZSBxdWFsaWZpZWQg
Y2hhcmFjdGVyIGZvciB2YXJpYWJsZSBuYW1lLCBvdGhlcndpc2UsIG5vdCBhIHZhbGlkIHZhcmlh
YmxlCisgICAgaWYgKCh2YXJpYWJsZVswXSAgIT0gJyQnKSB8fCBXVEY6OmlzQVNDSUlEaWdpdCh2
YXJpYWJsZVsxXSkgfHwgIWlzVmFsaWRGb3JWYXJpYWJsZSh2YXJpYWJsZVsxXSkpCisgICAgICAg
IHJldHVybiAtMTsKKyAgICBpbnQgcG9zID0gLTE7CisgICAgZm9yIChwb3MgPSAxOyBwb3MgPCBz
dGF0aWNfY2FzdDxpbnQ+KHZhcmlhYmxlLmxlbmd0aCgpKTsgcG9zKyspIHsKKyAgICAgICAgaWYg
KCFpc1ZhbGlkRm9yVmFyaWFibGUodmFyaWFibGVbcG9zXSkpCisgICAgICAgICAgICBicmVhazsK
KyAgICB9CisgICAgcmV0dXJuIHBvczsKK30KKyAKK3N0YXRpYyBib29sIGhhc05hbWVBdHRyaWJ1
dGVXaXRoVmFsdWUoTm9kZSAqbm9kZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkgCit7CisgICAgTmFt
ZWRBdHRyTWFwICphdHRycyA9IG5vZGUtPmF0dHJpYnV0ZXMoKTsKKyAgICBpZiAoIWF0dHJzKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZWxzZSB7CisgICAgICAgIEF0dHJpYnV0ZSogYXR0
ciA9IGF0dHJzLT5nZXRBdHRyaWJ1dGVJdGVtKFdNTE5hbWVzOjpuYW1lQXR0cik7CisgICAgICAg
IGlmICghYXR0cikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIChh
dHRyLT52YWx1ZSgpID09IHZhbHVlKSA/IHRydWUgOiBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQg
V01MSGVscGVyOjpjb252ZXJ0VmFySWZOZWVkZWQoU3RyaW5nJiB2YXIsIFN0cmluZyYgY29udikg
Cit7CisgICAgaWYgKGNvbnYuaXNFbXB0eSgpIHx8IHZhci5pc0VtcHR5KCkpCisgICAgICAgIHJl
dHVybjsgCisKKyAgICBTdHJpbmcgcmVzdWx0OworICAgIFN0cmluZyBjb252ZXIgPSBjb252Lmxv
d2VyKCk7CisgICAgaWYgKChjb252ZXIgPT0gImUiKSB8fCAoY29udmVyID09ICJlc2NhcGUiKSkK
KyAgICAgICAgcmVzdWx0ID0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVlbmNlcyh2YXIpOworICAg
IGVsc2UgaWYgKChjb252ZXIgPT0gInUiKSB8fCAoY29udmVyID09ICJ1bmVzYyIpKQorICAgICAg
ICByZXN1bHQgPSBkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXModmFyKTsKKyAgICBlbHNlIGlmICgo
Y29udmVyID09ICJuIikgfHwgKGNvbnZlciA9PSAibm9lc2MiKSkKKyAgICAgICAgOy8vIGRvIG5v
dGhpbmcKKworICAgIGlmICghcmVzdWx0LmlzRW1wdHkoKSkKKyAgICAgICAgdmFyID0gcmVzdWx0
OworfQorCitTdHJpbmcgV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGNvbnN0IFN0cmluZyYg
dmFyUmVmLCBOb2RlKiBkb2N1bWVudCwgU3RyaW5nIGVzY2FwZSkgCit7CisgICAgaWYgKHZhclJl
Zi5pc0VtcHR5KCkgfHwgIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+aXNEb2N1bWVudE5vZGUoKSkg
eworICAgICAgICByZXR1cm4gdmFyUmVmOworICAgIH0KKworICAgIFN0cmluZyBvcmlnID0gdmFy
UmVmOworICAgIFN0cmluZyByZXN1bHQ7CisgICAgU3RyaW5nIHZhcmlhYmxlOworICAgIFN0cmlu
ZyBjb252OworIAorICAgIGJvb2wgaGFzRXJyb3IgPSBmYWxzZTsKKyAgICB3aGlsZSAoIW9yaWcu
aXNFbXB0eSgpKSB7CisgICAgICAgIGludCBzdGFydCA9IG9yaWcuZmluZCgiJCIpOworICAgICAg
ICBpZiAoc3RhcnQgPT0gLTEpIHsgIC8vaXQncyBub3QgYSB2YXJpYWJsZSByZWZlcmVuY2UsIG9r
IQorICAgICAgICAgICAgcmVzdWx0ICs9IG9yaWc7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgICAgICByZXN1bHQgKz0gb3JpZy5sZWZ0KHN0YXJ0KTsKKyAgICAgICAgb3JpZyA9
IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIHN0YXJ0KTsKKyAKKyAgICAgICAgLy8gY2hlY2sg
dGhlIGRvdWJsZSAnJCcgc2lnbiAsIHNraXAgdGhlbSBvdmVyCisgICAgICAgIGlmIChvcmlnWzFd
ID09ICckJykgeworICAgICAgICAgICAgcmVzdWx0ICs9ICIkIjsKKyAgICAgICAgICAgIG9yaWcg
PSBvcmlnLnJpZ2h0KG9yaWcubGVuZ3RoKCkgLSAyKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgCisgICAgICAgIGludCBlbmQgPSAwOworICAgICAgICBpZiAob3JpZ1sxXSA9
PSAnKCcpIHsKKyAgICAgICAgICAgIGVuZCA9IG9yaWcuZmluZCgiKSIpOworICAgICAgICAgICAg
aWYgKGVuZCA9PSAtMSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBvcmlnOyAgIC8vIGlm
IHdlIGZpbmQgIiQoIiBidXQgbm8gIikiLCBzdG9wIHBhcnNpbmcKKyAgICAgICAgICAgICAgICBo
YXNFcnJvciA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgIHZhcmlhYmxlID0gb3JpZy5zdWJzdHJpbmcoMiwgZW5kLTIp
OworICAgICAgICAgICAgICAgIC8vIHNlYXJjaCBjb252ZXJzaW9uIHN0cmluZworICAgICAgICAg
ICAgICAgIGludCBwb3MgPSB2YXJpYWJsZS5maW5kKCc6Jyk7CisgICAgICAgICAgICAgICAgaWYg
KHBvcyAhPSAtMSkgeworICAgICAgICAgICAgICAgICAgICBjb252ID0gdmFyaWFibGUuc3Vic3Ry
aW5nKHBvcyArIDEsIHZhcmlhYmxlLmxlbmd0aCgpIC0gcG9zIC0gMSk7CisgICAgICAgICAgICAg
ICAgICAgIHZhcmlhYmxlID0gdmFyaWFibGUubGVmdChwb3MpOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBoZXJlIHdlIHNob3VsZCBjaGVj
ayBpZiB0aGUgdmFyaWFibGUgbmFtZSBpcyB2YWxpZAorICAgICAgICAgICAgICAgIGlmIChoYXNF
cnJvciA9ICFpc1ZhbGlkVmFyaWFibGVOYW1lKHZhcmlhYmxlKSkKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBvcmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0
aCgpIC0gZW5kIC0gMSApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgZW5kID0gdmFyaWFibGVFbmRzQXQob3JpZyk7CisgICAgICAgICAgICBpZiAoZW5kIDwg
MSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCArPSBvcmlnLmxlZnQoMik7CisgICAgICAgICAg
ICAgICAgb3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIDIpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyaWFibGUgPSBvcmln
LnN1YnN0cmluZygxLCBlbmQgLSAxKTsKKyAgICAgICAgICAgIG9yaWcgPSBvcmlnLnJpZ2h0KG9y
aWcubGVuZ3RoKCkgLSBlbmQgKTsKKyAgICAgICAgfQorIAorICAgICAgICAvLyB0cmF2ZXJzZSB0
aGUgd2hvbGUgRE9NIHRyZWUgdG8gc3Vic3RpdHV0ZSB0aGUgdmFyaWFibGUgcmVmZXJlbmNlCisg
ICAgICAgIGJvb2wgaXNEb25lID0gZmFsc2U7CisgICAgICAgIFN0cmluZyBjb252VmFyOworICAg
ICAgICBOb2RlKiBub2RlID0gZG9jdW1lbnQ7IAorICAgICAgICB3aGlsZSAoKG5vZGUgPSBub2Rl
LT50cmF2ZXJzZU5leHROb2RlKCkpKSB7CisgICAgICAgICAgICBpZiAoaGFzTmFtZUF0dHJpYnV0
ZVdpdGhWYWx1ZShub2RlLCB2YXJpYWJsZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+
aGFzVGFnTmFtZShXTUxOYW1lczo6c2V0dmFyVGFnKSkgeworICAgICAgICAgICAgICAgICAgICBX
TUxTZXR2YXJFbGVtZW50KiBzZXR2YXIgPSBzdGF0aWNfY2FzdDxXTUxTZXR2YXJFbGVtZW50Kj4o
bm9kZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnZWYXIgPSBzZXR2YXItPmdldEF0dHJpYnV0
ZSgidmFsdWUiKTsKKyAgICAgICAgICAgICAgICAgICAgaXNEb25lID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgCisgICAgICAgIC8vIHRyeSB0byBnZXQgdmFyaWFibGUgc3Vic3RpdHV0ZSBmcm9t
IGN1cnJlbnQgYnJvd3NlciBjb250ZXh0CisgICAgICAgIGlmICghaXNEb25lKSB7CisgICAgICAg
ICAgICBQYWdlKiBwYWdlID0gKHN0YXRpY19jYXN0PERvY3VtZW50Kj4oZG9jdW1lbnQpKS0+cGFn
ZSgpOworICAgICAgICAgICAgaWYgKCFwYWdlKQorICAgICAgICAgICAgICAgIHJldHVybiB2YXJS
ZWY7CisKKyAgICAgICAgICAgIEFTU0VSVChwYWdlLT53bWxQYWdlU3RhdGUoKSk7CisgICAgICAg
ICAgICBjb252VmFyID0gcGFnZS0+d21sUGFnZVN0YXRlKCktPmdldFZhcmliYWxlKHZhcmlhYmxl
KTsKKyAgICAgICAgfQorCisgICAgICAgIHdoaWxlICghY29udlZhci5pc0VtcHR5KCkpIHsKKwor
ICAgICAgICAgICAgaWYgKGNvbnZWYXIuY29udGFpbnMoIiQoIikpIHsKKyAgICAgICAgICAgICAg
ICBjb252VmFyID0gc3Vic3RpdHV0ZVZhclJlZihjb252VmFyLCBkb2N1bWVudCk7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjb252
LmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBjb252ID0gZXNjYXBlOworICAgICAgICAgICAg
Y29udmVydFZhcklmTmVlZGVkKGNvbnZWYXIsIGNvbnYpOworICAgICAgICAgICAgcmVzdWx0ICs9
IGNvbnZWYXI7IAorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gCisgCisgICAgfSAvLyBl
bmQgb2Ygd2hpbGUgKCFvcmlnLmlzRW1wdHkoKSkgCisgCisgICAgaWYgKGhhc0Vycm9yICYmIFdN
TEhlbHBlcjo6dG9rZW5pemVyKCkpCisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJl
cG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKworICAgIHJldHVybiBy
ZXN1bHQuaXNFbXB0eSgpID8gdmFyUmVmIDogcmVzdWx0OworfSAKKworLy8gQWNjb3JkaW5nIHRv
IHRoZSBzZWN0aW9uIDUuMiBhbmQgMTIuNS4xIGluIHRoZSB3bWwgc3BlYzogd2FwLTE5MS13bWwt
MjAwMDAyMTktYS5wZGYKKy8vIHRoZSBkZXN0aW5hdGlvbiBjYXJkIGNhbiBiZSBzcGVjaWZpZWQg
aW4gdGhlIGZvbGxvd2luZyBjYXNlOgorLy8gMSwgdXNlIGZyYWdtZW50IGFuY2hvciB3aGljaCBp
cyBzcGVjaWZpZWQgYnkgdGhlIGRvY3VtZW50IFVSTCwgZm9sbG93ZWQgd2l0aCAnIycKKy8vIDIs
IGlmIG5vIGZyYWdtZW50IGlzIHNwZWNpZmVkIG9yIHRoZSBmcmFnbWVudCBuYW1lIGlzIHdyb25n
LCB0aGUgZmlyc3QgY2FyZCBpcyB0aGUgZGVzdCBjYXJkLgorV01MQ2FyZEVsZW1lbnQqIFdNTEhl
bHBlcjo6c2V0RGVzdGluYXRpb25DYXJkKFJlZlB0cjxEb2N1bWVudD4gZG9jLCBTdHJpbmcgdXJp
KSAKK3sKKyAgICBpZiAoIWRvYyB8fCAhZG9jLT5wYWdlKCkpCisgICAgICAgIHJldHVybiAwOwor
CisgICAgUGFnZSogcGFnZSA9IGRvYy0+cGFnZSgpOworCisgICAgaWYgKHVyaS5pc0VtcHR5KCkp
CisgICAgICAgIHVyaSA9IGRvYy0+ZG9jdW1lbnRVUkkoKTsKKyAgICAgICAgCisgICAgV01MQ2Fy
ZEVsZW1lbnQqIGNhcmQgPSAwOworICAgIGJvb2wgZm91bmREZXN0Q2FyZCA9IGZhbHNlOworICAg
IFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IG5sID0gZG9jLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgiY2Fy
ZCIpOworICAgIGlmIChubC5nZXQoKS0+bGVuZ3RoKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuIGNh
cmQ7CisKKyAgICAvL2hpZGUgYWxsIHRoZSBjYXJkcyBwcmV2aW91c2x5IAorICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGk8IG5sLmdldCgpLT5sZW5ndGgoKTsgaSsrKSB7CisgICAgICAgIGNhcmQg
PSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KG5sLmdldCgpLT5pdGVtKGkpKTsKKyAgICAg
ICAgY2FyZC0+c2V0VmlzaWJpbGl0eShmYWxzZSk7CisgICAgfQorCisgICAgaW50IGlkeCA9IHVy
aS5maW5kKCcjJyk7CisgICAgaWYgKGlkeCA+PSAwKSB7CisgICAgICAgIFN0cmluZyBhdHRySUQ7
CisgICAgICAgIFN0cmluZyBmcmFnbWVudCA9IHVyaS5zdWJzdHJpbmcoaWR4ICsgMSk7CisgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG5sLmdldCgpLT5sZW5ndGgoKS0xOyBpID4gMDsgaS0tKSB7
CisgICAgICAgICAgICBjYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihubC5nZXQo
KS0+aXRlbShpKSk7CisgICAgICAgICAgICBhdHRySUQgPSBjYXJkLT5nZXRBdHRyaWJ1dGUoImlk
Iik7CisgICAgICAgICAgICBpZiAoYXR0cklEID09IGZyYWdtZW50KSB7CisgICAgICAgICAgICAg
ICAgLy9mb3JjZSBmcmFtZSBsb2FkZXIgdG8gbG9hZCB0aGUgVVJMIHdpdGggZnJhZ21lbnQgaWRl
bnRpZmllcgorICAgICAgICAgICAgICAgIHBhZ2UtPm1haW5GcmFtZSgpLT5sb2FkZXIoKS0+c2V0
Rm9yY2VSZWxvYWRXbWxEZWNrKHRydWUpOworICAgICAgICAgICAgICAgIGNhcmQtPnNldFZpc2li
aWxpdHkodHJ1ZSk7CisgICAgICAgICAgICAgICAgZm91bmREZXN0Q2FyZCA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBpZiAoIWZvdW5kRGVzdENhcmQpIHsKKyAgICAgICAgY2FyZCA9IHN0YXRpY19jYXN0PFdNTENh
cmRFbGVtZW50Kj4obmwuZ2V0KCktPml0ZW0oMCkpOworICAgICAgICBjYXJkLT5zZXRWaXNpYmls
aXR5KHRydWUpOworICAgIH0KKworICAgIC8vIHVwZGF0ZSB0aGUgZG9jdW1lbnQncyB0aXRsZQor
ICAgIGRvYy0+c2V0VGl0bGUoY2FyZC0+dGl0bGUoKSk7CisKKyAgICAvLyBzZXQgdGhlIGF0aXZl
IGNhcmQgaW4gdGhlIGN1cnJlbnQgYnJvd3NlciBjb250ZXh0CisgICAgcGFnZS0+d21sUGFnZVN0
YXRlKCktPnNldEFjdGl2ZUNhcmQoY2FyZCk7CisKKyAgICByZXR1cm4gY2FyZDsKK30KKwordm9p
ZCBXTUxIZWxwZXI6OnJlZ2lzdGVyVGVtcGxhdGVUb0NhcmRzKERvY3VtZW50KiBkb2MpCit7Cisg
ICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybjsKKworICAgIFdNTENhcmRFbGVtZW50KiBjYXJk
ID0gMDsKKyAgICBQYXNzUmVmUHRyPE5vZGVMaXN0PiBsaXN0ID0gZG9jLT5nZXRFbGVtZW50c0J5
VGFnTmFtZSgidGVtcGxhdGUiKTsKKyAgICBXTUxUZW1wbGF0ZUVsZW1lbnQqIHRlbXBsID0gc3Rh
dGljX2Nhc3Q8V01MVGVtcGxhdGVFbGVtZW50Kj4obGlzdC5nZXQoKS0+aXRlbSgwKSk7CisgICAg
aWYgKHRlbXBsKSB7CisgICAgICAgIGxpc3QgPSBkb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJj
YXJkIik7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGk9MDsgaSA8IGxpc3QuZ2V0KCktPmxl
bmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGNhcmQgPSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxl
bWVudCo+KGxpc3QuZ2V0KCktPml0ZW0oaSkpOworICAgICAgICAgICAgY2FyZC0+YmluZFRlbXBs
YXRlKHRlbXBsKTsKKyAgICAgICAgfQorICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS93bWwv
V01MSGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSGVscGVyLmgJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxIZWxwZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgV01MSGVscGVyX2gKKyNkZWZpbmUgV01MSGVscGVyX2gKKwor
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
Q1N0cmluZzsgCitjbGFzcyBXTUxDYXJkRWxlbWVudDsKK2NsYXNzIFdNTFRva2VuaXplcjsKKwor
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgorCitXTUxIZWxwZXIgY2xhc3Msd2hpY2ggb2ZmZXJzIGNvbnZlbmllbnQgZnVuY3Rp
b25zIHRvIFdNTEVsZW1lbnQKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLworY2xhc3MgV01MSGVscGVyIHsKKworcHVibGlj
OiAKKyAgICBzdGF0aWMgYm9vbCBpc1ZhbGlkVmFyaWFibGVOYW1lKGNvbnN0IFN0cmluZyYsIGJv
b2wgaXNWYXJSZWYgPSBmYWxzZSk7CisgICAgc3RhdGljIGJvb2wgaGFzVmFyaWFibGVSZWYoY29u
c3QgU3RyaW5nJik7CisKKyAgICAvL05vZGUqIGlzIHRoZSByb290IG9mIERPTSB0cmVlIHdoaWNo
IHdpbGwgYmUgdHJhdmVyc2VkIGZvciBzZWFyY2hpbmcgdmFyaWFibGUgdmFsdWUKKyAgICBzdGF0
aWMgU3RyaW5nIHN1YnN0aXR1dGVWYXJSZWYoY29uc3QgU3RyaW5nJiwgTm9kZSosIFN0cmluZyBl
c2NhcGUgPSBTdHJpbmcoKSk7IAorICAgIHN0YXRpYyB2b2lkIGNvbnZlcnRWYXJJZk5lZWRlZChT
dHJpbmcmLCBTdHJpbmcmKTsKKworICAgIHN0YXRpYyBXTUxDYXJkRWxlbWVudCogc2V0RGVzdGlu
YXRpb25DYXJkKFJlZlB0cjxEb2N1bWVudD4sIFN0cmluZyB1cmkgPSBTdHJpbmcoKSk7CisKKyAg
ICBzdGF0aWMgdm9pZCByZWdpc3RlclRlbXBsYXRlVG9DYXJkcyhEb2N1bWVudCopOworCisgICAg
c3RhdGljIFdNTFRva2VuaXplciogdG9rZW5pemVyKCk7CisgICAgc3RhdGljIHZvaWQgc2V0VG9r
ZW5pemVyKFdNTFRva2VuaXplciopOworCitwcml2YXRlOgorICAgIHN0YXRpYyBXTUxUb2tlbml6
ZXIqIHNfdG9rZW5pemVyOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdl
YkNvcmUvd21sL1dNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MSW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEltYWdl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV01MSW1hZ2VFbGVtZW50LmgiIAorCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBIVE1MTmFtZXM7CisKK1dNTEltYWdlRWxlbWVudDo6V01MSW1hZ2VFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MSW1hZ2VF
bGVtZW50KG5hbWUsIGRvYykgCit7Cit9CisKK1dNTEltYWdlRWxlbWVudDo6fldNTEltYWdlRWxl
bWVudCgpIAoreworfQorCit2b2lkIFdNTEltYWdlRWxlbWVudDo6dXBkYXRlQXR0cnNJZk5lZWRl
ZCgpCit7CisgICAgU3RyaW5nIHN1YjsKKyAgICBTdHJpbmcgYWx0ID0gZ2V0QXR0cmlidXRlKCJh
bHQiKTsKKyAgICBpZiAoIWFsdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3ViID0gV01MSGVscGVy
OjpzdWJzdGl0dXRlVmFyUmVmKGFsdCwgZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChhbHQgIT0g
c3ViKQorICAgICAgICAgICAgc2V0QXR0cmlidXRlKGFsdEF0dHIsIHN1Yik7CisgICAgfSAgIAor
CisgICAgU3RyaW5nIHNyYyA9IGdldEF0dHJpYnV0ZSgic3JjIik7CisgICAgaWYgKCFzcmMuaXNF
bXB0eSgpKSB7CisgICAgICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihzcmMs
IGRvY3VtZW50KCkpOworICAgICAgICBpZiAoc3JjICE9IHN1YikKKyAgICAgICAgICAgIHNldEF0
dHJpYnV0ZShzcmNBdHRyLCBzdWIpOworICAgIH0KKworICAgIFN0cmluZyBsb2NhbFNyYyA9IGdl
dEF0dHJpYnV0ZSgibG9jYWxzcmMiKTsKKyAgICBpZiAoIWxvY2FsU3JjLmlzRW1wdHkoKSkgewor
ICAgICAgICAvLyBzdG9yZSB0aGUgc3JjIGF0dHJpYnV0ZSBmb3IgdXNlIGxhdGVyCisgICAgICAg
IGlmICghc3JjLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1fc3JjID0gc3ViOworCisgICAgICAg
IHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihsb2NhbFNyYywgZG9jdW1lbnQoKSk7
CisgICAgICAgIGlmICghc3ViLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgaWYgKGxvY2FsU3Jj
ICE9IHN1YikKKyAgICAgICAgICAgICAgICBzZXRBdHRyaWJ1dGUoV01MTmFtZXM6OmxvY2Fsc3Jj
QXR0ciwgc3ViKTsKKworICAgICAgICAgICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIHN1Yik7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV01MSW1hZ2VFbGVtZW50OjpyZWxvYWRJbWFnZUJ5
U3JjQXR0cigpCit7CisgICAgaWYgKG1fc3JjLmlzRW1wdHkoKSkgCisgICAgICAgIHJldHVybjsK
KworICAgIHNldEF0dHJpYnV0ZShzcmNBdHRyLCBtX3NyYyk7CisgICAgbV9zcmMgPSAiIjsKKwor
ICAgIGltYWdlTG9hZGVyKCkudXBkYXRlRnJvbUVsZW1lbnQoKTsKK30KKworYm9vbCBXTUxJbWFn
ZUVsZW1lbnQ6OmlzV01MSW1hZ2VFbGVtZW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3dtbC9XTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgV01MSW1hZ2VFbGVtZW50X2gKKyNkZWZpbmUgV01MSW1hZ2VF
bGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBXTUxJbWFnZUVsZW1lbnQgOiBwdWJsaWMgSFRNTEltYWdlRWxlbWVu
dCB7CitwdWJsaWM6CisgICAgV01MSW1hZ2VFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBE
b2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTEltYWdlRWxlbWVudCgpOworCisgICAgdmlydHVh
bCBib29sIGlzV01MSW1hZ2VFbGVtZW50KCkgY29uc3Q7CisKKyAgICB2b2lkIHVwZGF0ZUF0dHJz
SWZOZWVkZWQoKTsKKyAgICB2b2lkIHJlbG9hZEltYWdlQnlTcmNBdHRyKCk7CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIG1fc3JjOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d21sL1dNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxJ
bnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIKKworI2luY2x1ZGUg
IkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisj
aW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJNb3VzZUV2
ZW50LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisj
aW5jbHVkZSAiUmVndWxhckV4cHJlc3Npb24uaCIKKyNpbmNsdWRlICJSZW5kZXJUZXh0Q29udHJv
bC5oIgorI2luY2x1ZGUgIlRleHRFdmVudC5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgor
I2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAi
V01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAid3RmL0FTQ0lJQ1R5cGUuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2Ug
RXZlbnROYW1lczsKK3VzaW5nIHN0ZDo6bWluOworCitXTUxJbnB1dEVsZW1lbnQ6OldNTElucHV0
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIERvY3VtZW50KiBkb2MsIEhUTUxGb3Jt
RWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxJbnB1dEVsZW1lbnQodGFnLCBkb2MsIGZvcm0pCisg
ICAgLCBtX2VtcHR5T2soZmFsc2UpCisgICAgLCBtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1zKDAp
Cit7Cit9CisKK1dNTElucHV0RWxlbWVudDo6fldNTElucHV0RWxlbWVudCgpIAoreworfQorCit2
b2lkIFdNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
KiBhdHRyKSAKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IGZvcm1hdEF0dHIpIHsKKworICAg
ICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgeworICAg
ICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlh
YmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAg
ICAgICAgbV9mb3JtYXQgPSB2YWxpZGF0ZUlucHV0TWFzayhhdHRyLT52YWx1ZSgpKTsKKyAgICB9
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBlbXB0eW9rQXR0cikKKyAgICAgICAgbV9lbXB0eU9r
ID0gKChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIikgPyB0cnVlIDogZmFsc2UpOworICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgeworCisgICAgICAgIGlmIChXTUxIZWxwZXI6
Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAgICAgICAgICAgV01MSGVscGVyOjp0
b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOwor
ICAgICAgICBlbHNlIAorICAgICAgICAgICAgSFRNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7CisgCisgICAgfSBlbHNlCisgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCisKK1N0cmluZyBXTUxJbnB1dEVsZW1l
bnQ6OnZhbGlkYXRlSW5wdXRNYXNrKGNvbnN0IEF0b21pY1N0cmluZyYgaW5wdXRNYXNrKQorewor
ICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZm9ybWF0Q29kZXMgPSAiQWFOblh4TW0iOworICAgIGJv
b2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxkY2FyZCA9IGZhbHNlOworICAgIHVu
c2lnbmVkIGVzY2FwZUNoYXJDbnRzID0gMDsKKworICAgIHVuc2lnbmVkIG1hc2tMZW4gPSBpbnB1
dE1hc2subGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaWR4OworICAgIFVDaGFyIGM7IAorCisgICAg
Zm9yIChpZHggPSAwOyBpZHggPCBtYXNrTGVuOyArK2lkeCkgeworICAgICAgICBjID0gaW5wdXRN
YXNrW2lkeF07CisKKyAgICAgICAgaWYgKGZvcm1hdENvZGVzLmZpbmQoYykgPT0gLTEpIHsKKwor
ICAgICAgICAgICAgaWYgKChjID09ICcqJykgfHwgKFdURjo6aXNBU0NJSURpZ2l0KGMpICYmIChj
ICE9ICcwJykpKSB7IAorICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlIGNvZGVzIHdoaWNoIGVu
ZHMgd2l0aCAnKmYnIG9yICduZicKKyAgICAgICAgICAgICAgICBjID0gaW5wdXRNYXNrWysraWR4
XTsKKyAgICAgICAgICAgICAgICBpZiAoKGlkeCsxICE9IG1hc2tMZW4pIHx8IGZvcm1hdENvZGVz
LmZpbmQoYykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgaXNWYWxpZCA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChjID09ICdc
XCcpIHsKKyAgICAgICAgICAgICAgICAvL3NraXAgb3ZlciB0aGUgbmV4dCBtYXNrIGNoYXJhY3Rl
cgorICAgICAgICAgICAgICAgIGlkeCsrOyAgIAorICAgICAgICAgICAgICAgIGVzY2FwZUNoYXJD
bnRzKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlzVmFsaWQgPSBm
YWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gY2FsY3VsYXRlIHRoZSBudW1iZXIgb2YgY2hhciBhbGxvd2VkIHRv
IGVudGVyIGJ5IGlucHV0IG1hc2sgc3RyaW5nCisgICAgaWYgKGlzVmFsaWQpIHsKKyAgICAgICAg
bV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcyA9IG1hc2tMZW47CisKKyAgICAgICAgaWYgKGVzY2Fw
ZUNoYXJDbnRzKQorICAgICAgICAgICAgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcyAtPSBlc2Nh
cGVDaGFyQ250czsKKworICAgICAgICBpZiAoaGFzV2lsZGNhcmQgJiYgaW5wdXRNYXNrW21hc2tM
ZW4tMl0gPT0gJyonKQorICAgICAgICAgICAgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcyA9IG1h
eExlbmd0aCgpOworICAgICAgICBlbHNlIGlmIChoYXNXaWxkY2FyZCkgeworICAgICAgICAgICAg
YyA9IGlucHV0TWFza1ttYXNrTGVuLTJdOworICAgICAgICAgICAgdW5zaWduZWQgbGVmdExlbiA9
IFN0cmluZygmYykudG9JbnQoKTsKKyAgICAgICAgICAgIG1fbWFza0FsbG93c0lucHV0Q2hhck51
bXMgPSBsZWZ0TGVuICsgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcyAtIDI7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gaW5wdXRNYXNrOworICAgIH0KKyAKKyAgICByZXR1cm4gU3RyaW5n
KCk7Cit9CisKK3Vuc2lnbmVkIFdNTElucHV0RWxlbWVudDo6Y3Vyc29yUG9zVG9JZHhPZk1hc2so
dW5zaWduZWQgY3Vyc29yUG9zKQoreworICAgIFVDaGFyIG1hc2s7CisgICAgaW50IGlkeCA9IC0x
OworICAgIGN1cnNvclBvcysrOworICAgIHdoaWxlIChjdXJzb3JQb3MtLSkgeworICAgICAgICBt
YXNrID0gbV9mb3JtYXRbKytpZHhdOworICAgICAgICBpZiAobWFzayA9PSAnXFwnKQorICAgICAg
ICAgICAgaWR4Kys7CisgICAgICAgIGVsc2UgaWYgKChtYXNrID09ICcqJykgfHwgKFdURjo6aXNB
U0NJSURpZ2l0KG1hc2spICYmIChtYXNrICE9ICcwJykpKSB7CisgICAgICAgICAgICBpZHggPSBt
X2Zvcm1hdC5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAKKyAg
ICB9CisKKyAgICByZXR1cm4gaWR4OworfQorCitib29sIFdNTElucHV0RWxlbWVudDo6aXNDb25m
b3JtZWRUb0lucHV0TWFzayhTdHJpbmcmIGlucHV0KQoreworICAgIGJvb2wgYlBhc3MgPSB0cnVl
OworICAgIFVDaGFyIGluQ2hhcjsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgaSA8IGlu
cHV0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaW5DaGFyID0gaW5wdXRbaV07CisKKyAgICAg
ICAgYlBhc3MgPSBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGluQ2hhciwgaSsxLCBmYWxzZSk7Cisg
ICAgICAgIGlmICghYlBhc3MpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gYlBhc3M7Cit9CisKK2Jvb2wgV01MSW5wdXRFbGVtZW50Ojppc0NvbmZvcm1lZFRvSW5wdXRN
YXNrKFVDaGFyIGluQ2hhciwgdW5zaWduZWQgaW5wdXRDaGFyTnVtLCBib29sIGlzSW5wdXRlZEJ5
VXNyKQoreworICAgIGJvb2wgYlBhc3MgPSB0cnVlOworICAgIGlmIChtX2Zvcm1hdC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBiUGFzczsKKyAgICAKKyAgICAvLyB3ZSBzaG91bGQgbGltaXQg
dGhlIG51bWJlciBvZiBpbnB1dGVkIGNoYXJhdGVycyBhY2NvcmRpbmcgdG8gdGhlIGZvcm1hdCBh
bmQgbWF4bGVuZ3RoIGF0dHJpYnV0ZQorICAgIHVuc2lnbmVkIG1heEFsbG93SW5wdXROdW0gPSBt
aW4obV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcywgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1heExl
bmd0aCgpKSk7CisKKyAgICBpZiAoaW5wdXRDaGFyTnVtIDw9IG1heEFsbG93SW5wdXROdW0pIHsK
KyAgICAgICAgdW5zaWduZWQgaWR4T2ZNYXNrID0gMDsKKyAgICAgICAgaWYgKGlzSW5wdXRlZEJ5
VXNyKQorICAgICAgICAgICAgaWR4T2ZNYXNrID0gY3Vyc29yUG9zVG9JZHhPZk1hc2soc2VsZWN0
aW9uU3RhcnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlkeE9mTWFzayA9IGN1cnNv
clBvc1RvSWR4T2ZNYXNrKGlucHV0Q2hhck51bSAtIDEpOworCisgICAgICAgIFVDaGFyIG1hc2sg
PSBtX2Zvcm1hdFtpZHhPZk1hc2tdOworICAgICAgICAvLyBtYXRjaCB0aGUgY2hhciBpbnB1dHRl
ZCB3aXRoIGlucHV0IG1hc2sKKyAgICAgICAgaWYgKG1hc2sgPT0gJ0EnKQorICAgICAgICAgICAg
YlBhc3MgPSAhV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKSAmJiAhV1RGOjppc0FTQ0lJTG93ZXIo
aW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgZWxzZSBp
ZiAobWFzayA9PSAnYScpCisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6OmlzQVNDSUlEaWdpdChp
bkNoYXIpICYmICFXVEY6OmlzQVNDSUlVcHBlcihpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50
YWJsZShpbkNoYXIpOworICAgICAgICBlbHNlIGlmIChtYXNrID09ICdOJykKKyAgICAgICAgICAg
IGJQYXNzID0gV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKTsKKyAgICAgICAgZWxzZSBpZiAobWFz
ayA9PSAnbicpCisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6OmlzQVNDSUlBbHBoYShpbkNoYXIp
ICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBlbHNlIGlmIChtYXNr
ID09ICdYJykKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNBU0NJSUxvd2VyKGluQ2hhcikg
JiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGVsc2UgaWYgKG1hc2sg
PT0gJ3gnKQorICAgICAgICAgICAgYlBhc3MgPSAhV1RGOjppc0FTQ0lJVXBwZXIoaW5DaGFyKSAm
JiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgZWxzZSBpZiAobWFzayA9
PSAnTScpCisgICAgICAgICAgICBiUGFzcyA9IFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIp
OworICAgICAgICBlbHNlIGlmIChtYXNrID09ICdtJykKKyAgICAgICAgICAgIGJQYXNzID0gV1RG
Ojppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJQ
YXNzID0gKG1hc2sgPT0gaW5DaGFyKTsKKworICAgIH0gZWxzZSAgLy8gaW5wdXRDaGFyTnVtID4g
bWF4QWxsb3dJbnB1dE51bQorICAgICAgICBiUGFzcyA9IGZhbHNlOworCisgICAgcmV0dXJuIGJQ
YXNzOworfQorCisKK3ZvaWQgV01MSW5wdXRFbGVtZW50Ojppbml0KCkKK3sKKyAgICBpZiAoIWRv
Y3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOworICAgIFN0cmluZyBuYW1lVmFyID0g
bmFtZSgpOworICAgIFN0cmluZyB2YWwgPSB2YWx1ZSgpOworICAgIFN0cmluZyB2YXJWYWx1ZTsK
KworICAgIFdNTFBhZ2VTdGF0ZSAqcGFnZVNhdGUgPSBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBh
Z2VTdGF0ZSgpOworICAgIGlmICghbmFtZVZhci5pc0VtcHR5KCkpCisgICAgICAgIHZhclZhbHVl
ID0gcGFnZVNhdGUtPmdldFZhcmliYWxlKG5hbWVWYXIpOworICAgIAorICAgIGlmICh2YXJWYWx1
ZS5pc0VtcHR5KCkgfHwgIWlzQ29uZm9ybWVkVG9JbnB1dE1hc2sodmFyVmFsdWUpKSB7CisgICAg
ICAgIGlmIChpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKHZhbCkpCisgICAgICAgICAgICB2YXJWYWx1
ZSA9IHZhbDsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAgIHZhclZhbHVlID0gIiI7CisKKyAg
ICAgICAgcGFnZVNhdGUtPnN0b3JlVmFyaWFibGUobmFtZVZhciwgdmFyVmFsdWUpOworICAgIH0K
KworICAgIHNldFZhbHVlKHZhclZhbHVlKTsKKworCisgICAgaWYgKGdldEF0dHJpYnV0ZSgiZW1w
dHlvayIpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9mb3JtYXQuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgbV9lbXB0eU9rID0gdHJ1ZTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAv
L2NoZWNrIGlmIHRoZSBmb3JtYXQgY29kZXMgaXMgYSAiKmYiIGNvZGUKKyAgICAgICAgICAgIFN0
cmluZyBmb3JtYXRDb2RlcyA9ICJNbUFhWHhObiI7CisgICAgICAgICAgICBpZiAoKG1fZm9ybWF0
Lmxlbmd0aCgpID09IDIpICYmIChtX2Zvcm1hdFswXSA9PSAnKicpICYmIChmb3JtYXRDb2Rlcy5m
aW5kKG1fZm9ybWF0WzFdKSAhPSAtMSkpCisgICAgICAgICAgICAgICAgbV9lbXB0eU9rID0gdHJ1
ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OnVwZGF0ZUF0
dHJzSWZOZWVkZWQoKQoreworICAgIFN0cmluZyB2YWx1ZSA9IGdldEF0dHJpYnV0ZSgidmFsdWUi
KTsgCisgICAgU3RyaW5nIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZih2YWx1ZSwg
ZG9jdW1lbnQoKSk7CisgICAgaWYgKHZhbHVlICE9IHN1YikKKyAgICAgICAgc2V0VmFsdWUoc3Vi
KTsKKworICAgIFN0cmluZyB0aXRsZSA9IGdldEF0dHJpYnV0ZSgidGl0bGUiKTsKKyAgICBzdWIg
PSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUsIGRvY3VtZW50KCkpOworICAgIGlm
ICh0aXRsZSAhPSBzdWIpCisgICAgICAgIHNldEF0dHJpYnV0ZSh0aXRsZUF0dHIsIHRpdGxlKTsK
K30KKwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNoQmx1ckV2ZW50KCkKK3sKKyAgICAv
LyB1cGRhdGUgdGhlIG5hbWVkIHZhcmlhYmxlIG9mIGlucHV0IGVsZW1lbnQgCisgICAgU3RyaW5n
IG5hbWVWYXIgPSBuYW1lKCk7CisgICAgaWYgKCFuYW1lVmFyLmlzRW1wdHkoKSkgeworICAgICAg
ICBSZW5kZXJUZXh0Q29udHJvbCAqIHJ0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wq
PihyZW5kZXJlcigpKTsKKyAgICAgICAgU3RyaW5nIGlucHV0ID0gKHJ0ICE9IDAgPyBydC0+dGV4
dCgpIDogU3RyaW5nKCkpOworICAgICAgICBpZiAobV9lbXB0eU9rIHx8ICFpbnB1dC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCkpOworICAgICAgICAg
ICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCkpOworICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKS0+c3RvcmVWYXJpYWJsZShuYW1l
VmFyLCBpbnB1dCk7CisgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50OjpkaXNwYXRjaEJsdXJF
dmVudCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGZvY3VzKCk7IAorICAgIH0KK30K
Kwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkK
K3sKKyAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBldnQtPnR5cGUoKSA9PSB0ZXh0SW5wdXRFdmVu
dCAmJiBldnQtPmlzVGV4dEV2ZW50KCkpIHsKKyAgICAgICAgU3RyaW5nIGRhdGEgPSBzdGF0aWNf
Y2FzdDxUZXh0RXZlbnQqPihldnQpLT5kYXRhKCk7CisgICAgICAgIFJlbmRlclRleHRDb250cm9s
ICpydCA9IHN0YXRpY19jYXN0PFJlbmRlclRleHRDb250cm9sKj4ocmVuZGVyZXIoKSk7CisgICAg
ICAgIGlmIChydCkgeworICAgICAgICAgICAgdW5zaWduZWQgaW5wdXRDaGFyTnVtID0gcnQtPnRl
eHQoKS5sZW5ndGgoKSArIDE7CisgICAgICAgICAgICBpZiAoIWlzQ29uZm9ybWVkVG9JbnB1dE1h
c2soZGF0YVswXSwgaW5wdXRDaGFyTnVtKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBIVE1MSW5wdXRFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGV2dCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTcg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaWZuZGVmIFdNTElucHV0RWxlbWVudF9oCisjZGVmaW5lIFdNTElucHV0RWxlbWVu
dF9oCisKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgSFRNTEZvcm1FbGVtZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2Ns
YXNzIFdNTElucHV0RWxlbWVudCA6IHB1YmxpYyBIVE1MSW5wdXRFbGVtZW50IHsKK3B1YmxpYzoK
KyAgICBXTUxJbnB1dEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50KiwgSFRN
TEZvcm1FbGVtZW50KiA9IDApOworICAgIHZpcnR1YWwgfldNTElucHV0RWxlbWVudCgpOworCisg
ICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaEJsdXJFdmVudCgpOworICAgIHZpcnR1YWwgdm9pZCBk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAgICB2b2lkIGluaXQoKTsKKyAgICB2b2lk
IHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2so
U3RyaW5nJik7CisgICAgYm9vbCBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyLCB1bnNpZ25l
ZCwgYm9vbCBpc0lucHV0ZWRCeVVzciA9IHRydWUpOworCitwcml2YXRlOgorICAgIFN0cmluZyB2
YWxpZGF0ZUlucHV0TWFzayhjb25zdCBBdG9taWNTdHJpbmcmKTsKKyAgICB1bnNpZ25lZCBjdXJz
b3JQb3NUb0lkeE9mTWFzayh1bnNpZ25lZCk7CisKKyAgICBTdHJpbmcgbV9mb3JtYXQ7CisgICAg
Ym9vbCBtX2VtcHR5T2s7CisgICAgdW5zaWduZWQgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtczsK
K307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbnRy
aW5zaWNFdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEludHJp
bnNpY0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxJbnRy
aW5zaWNFdmVudEhhbmRsZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxlci5o
IgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTEludHJpbnNp
Y0V2ZW50SGFuZGxlcjo6V01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCkgCit7Cit9CisgICAgCitX
TUxJbnRyaW5zaWNFdmVudEhhbmRsZXI6On5XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKQorewor
fQorCit2b2lkIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6cmVnaXN0ZXJJbnRyaW5zaWNFdmVu
dChXTUxJbnRyaW5zaWNFdmVudFR5cGUgdHlwZSwgY29uc3QgV01MSW50cmluc2ljRXZlbnQmIGV2
KQoreworICAgIGlmIChtX2V2ZW50cy5jb250YWlucyh0eXBlKSkgeworICAgICAgICBXTUxIZWxw
ZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihDb25mbGljdGluZ0V2ZW50QmluZGluZ0Vycm9y
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2V2ZW50cy5zZXQodHlwZSwgZXYpOwor
fQorCit2b2lkIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6dHJpZ2dlckludHJpbnNpY0V2ZW50
KFdNTEludHJpbnNpY0V2ZW50VHlwZSB0eXBlKSBjb25zdAoreworICAgIFdNTEludHJpbnNpY0V2
ZW50IGV2ID0gbV9ldmVudHMuZ2V0KHR5cGUpOworICAgIGlmIChldi50YXNrKQorICAgICAgICBl
di50YXNrLT5leGVjKDAsIGV2LnRhcmdldFVSSSk7Cit9CisKK2Jvb2wgV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyOjpoYXNJbnRyaW5zaWNFdmVudChXTUxJbnRyaW5zaWNFdmVudFR5cGUgdHlwZSkg
Y29uc3QKK3sKKyAgICByZXR1cm4gbV9ldmVudHMuY29udGFpbnModHlwZSk7Cit9CisKK30KSW5k
ZXg6IFdlYkNvcmUvd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS93bWwvV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcl9oCisjZGVm
aW5lIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcl9oCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBXTUxUYXNrRWxlbWVudDsKKworZW51bSBXTUxJbnRyaW5zaWNFdmVudFR5cGUgeworICAgIFVu
a25vd24gPSAwLCBPbkVudGVyRm9yd2FyZCwgT25FbnRlckJhY2t3YXJkLCBPblRpbWVyLCBPblBp
Y2sgCit9OworCit0eXBlZGVmIHN0cnVjdCBXTUxJbnRyaW5zaWNFdmVudCB7CisgICAgV01MVGFz
a0VsZW1lbnQqIHRhc2s7CisgICAgU3RyaW5nIHRhcmdldFVSSTsKK30gV01MSW50cmluc2ljRXZl
bnQ7CisgICAgICAgICAgICAgICAgICAgICAgIAordHlwZWRlZiBIYXNoTWFwPGludCwgV01MSW50
cmluc2ljRXZlbnQ+IEludHJpbnNpY0V2bnRNYXA7CisKK2NsYXNzIFdNTEludHJpbnNpY0V2ZW50
SGFuZGxlciB7CitwdWJsaWM6CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisgICAg
dmlydHVhbCB+V01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisKKyAgICAvLyBoYW5kbGluZyBX
TUwgaW50cmluc2ljIGV2ZW50CisgICAgdm9pZCByZWdpc3RlckludHJpbnNpY0V2ZW50KFdNTElu
dHJpbnNpY0V2ZW50VHlwZSwgY29uc3QgV01MSW50cmluc2ljRXZlbnQmKTsKKyAgICB2b2lkIHRy
aWdnZXJJbnRyaW5zaWNFdmVudChXTUxJbnRyaW5zaWNFdmVudFR5cGUpIGNvbnN0OworICAgIGJv
b2wgaGFzSW50cmluc2ljRXZlbnQoV01MSW50cmluc2ljRXZlbnRUeXBlKSBjb25zdDsKKworcHJp
dmF0ZToKKyAgICBJbnRyaW5zaWNFdm50TWFwIG1fZXZlbnRzOworICAgCit9OworCit9IC8vbmFt
ZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9u
IDApCisrKyBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MT3B0
aW9uRWxlbWVudC5oIgorCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTEdv
RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTEludHJpbnNp
Y0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUGFn
ZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MU2VsZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MT3B0aW9uRWxlbWVudDo6
V01MT3B0aW9uRWxlbWVudChEb2N1bWVudCogZG9jKQorICAgIDogSFRNTE9wdGlvbkVsZW1lbnQo
ZG9jLCAwKQorICAgICwgbV9ldm50SGFuZGxlcigwKQorICAgICwgbV9oYXNJbnRyaW5zaWNFdmVu
dChmYWxzZSkKK3sKK30KKworV01MT3B0aW9uRWxlbWVudDo6fldNTE9wdGlvbkVsZW1lbnQoKSAK
K3sKKyAgICBpZiAobV9ldm50SGFuZGxlcikgeworICAgICAgICBkZWxldGUgbV9ldm50SGFuZGxl
cjsKKyAgICAgICAgbV9ldm50SGFuZGxlciA9IDA7CisgICAgfQorfQorCit2b2lkIFdNTE9wdGlv
bkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sK
KyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG9ucGlja0F0dHIpIHsKKyAgICAgICAgCisgICAgICAg
IFdNTEludHJpbnNpY0V2ZW50VHlwZSBldHlwZSA9IE9uUGljazsgCisgICAgICAgIGlmICghbV9l
dm50SGFuZGxlcikKKyAgICAgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2lj
RXZlbnRIYW5kbGVyKCk7CisgCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAg
ICBRdWFsaWZpZWROYW1lIHFOYW1lKCJnbyIsICJnbyIsICIiKTsKKyAgICAgICAgRWxlbWVudCog
Z28gPSBXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgZG9jdW1lbnQo
KSwgZmFsc2UpOworICAgICAgICBTdHJpbmcgaHJlZiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZh
clJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLCAiZXNjYXBlIik7CisgICAgICAgIGdvLT5z
ZXRBdHRyaWJ1dGVOUygiIiwgImhyZWYiLCBocmVmLCBlYyk7CisgCisgICAgICAgIFdNTEludHJp
bnNpY0V2ZW50IGV2OworICAgICAgICBldi50YXNrID0gc3RhdGljX2Nhc3Q8V01MR29FbGVtZW50
Kj4oZ28pOworICAgICAgICBldi50YXJnZXRVUkkgPSBocmVmOworIAorICAgICAgICBtX2hhc0lu
dHJpbnNpY0V2ZW50ID0gdHJ1ZTsKKyAgICAgICAgbV9ldm50SGFuZGxlci0+cmVnaXN0ZXJJbnRy
aW5zaWNFdmVudChldHlwZSwgZXYpOworCisgICAgfSBlbHNlCisgICAgICAgIEhUTUxPcHRpb25F
bGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKK30KKworV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyKiBXTUxPcHRpb25FbGVtZW50OjpldmVudEhhbmRsZXIoKSAKK3sKKyAgICBpZiAo
bV9oYXNJbnRyaW5zaWNFdmVudCAmJiAhbV9ldm50SGFuZGxlcikKKyAgICAgICAgbV9ldm50SGFu
ZGxlciA9IG5ldyBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsKKyAgICByZXR1cm4gbV9ldm50
SGFuZGxlcjsKK30KKwordm9pZCBXTUxPcHRpb25FbGVtZW50OjpzZXRIYXNJbnRyaW5zaWNFdmVu
dChib29sIGhhcykgCit7CisgICAgbV9oYXNJbnRyaW5zaWNFdmVudCA9IGhhczsKK30KKyAKK2Jv
b2wgV01MT3B0aW9uRWxlbWVudDo6aGFzSW50cmluc2ljRXZlbnQoKQoreworICAgIHJldHVybiBt
X2hhc0ludHJpbnNpY0V2ZW50OworfQorCit2b2lkIFdNTE9wdGlvbkVsZW1lbnQ6OmhhbmRsZUlu
dHJpbnNpY0V2ZW50SWZOZWVkZWQoKQoreworICAgIGlmIChtX2V2bnRIYW5kbGVyICYmIG1fZXZu
dEhhbmRsZXItPmhhc0ludHJpbnNpY0V2ZW50KE9uUGljaykpCisgICAgICAgIG1fZXZudEhhbmRs
ZXItPnRyaWdnZXJJbnRyaW5zaWNFdmVudChPblBpY2spOworfQorCit2b2lkIFdNTE9wdGlvbkVs
ZW1lbnQ6OnVwZGF0ZUF0dHJzSWZOZWVkZWQoKSAKK3sKKyAgICBTdHJpbmcgdmFsdWUgPSBnZXRB
dHRyaWJ1dGUoInZhbHVlIik7CisgICAgU3RyaW5nIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0
ZVZhclJlZih2YWx1ZSwgZG9jdW1lbnQoKSk7CisgICAgaWYgKHZhbHVlICE9IHN1YikKKyAgICAg
ICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgc3ViKTsKKworICAgIFN0cmluZyB0aXRsZSA9IGdl
dEF0dHJpYnV0ZSgidGl0bGUiKTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYodGl0bGUsIGRvY3VtZW50KCkpOworCisgICAgaWYgKHRpdGxlICE9IHN1YikKKyAgICAgICAg
c2V0QXR0cmlidXRlKHRpdGxlQXR0ciwgdGl0bGUpOworfQorCit2b2lkIFdNTE9wdGlvbkVsZW1l
bnQ6OnNldFNlbGVjdGVkU3RhdGUoYm9vbCBzZWxlY3QpCit7CisgICAgaWYgKHNlbGVjdGVkKCkg
PT0gc2VsZWN0KQorICAgICAgICByZXR1cm47CisKKyAgICBXTUxTZWxlY3RFbGVtZW50KiBzZWwg
PSBnZXRTZWxlY3QoKTsKKyAgICBpZiAoIXNlbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0
U2VsZWN0ZWQoc2VsZWN0KTsKKyAgICBpZiAoc2VsLT5tdWx0aXBsZSgpICYmIG1faGFzSW50cmlu
c2ljRXZlbnQpCisgICAgICAgIGhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVkZWQoKTsKKyAgICBl
bHNlIGlmIChtX2hhc0ludHJpbnNpY0V2ZW50ICYmIHNlbGVjdGVkKCkpCisgICAgICAgIGhhbmRs
ZUludHJpbnNpY0V2ZW50SWZOZWVkZWQoKTsKKworICAgIHNldENoYW5nZWQoKTsKK30KKworV01M
U2VsZWN0RWxlbWVudCogV01MT3B0aW9uRWxlbWVudDo6Z2V0U2VsZWN0KCkgY29uc3QKK3sKKyAg
ICBOb2RlKiBzZWxlY3QgPSBwYXJlbnROb2RlKCk7CisgICAgd2hpbGUgKHNlbGVjdCAmJiAhc2Vs
ZWN0LT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpCisgICAgICAgIHNlbGVjdCA9IHNlbGVjdC0+cGFy
ZW50Tm9kZSgpOworCisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihz
ZWxlY3QpOworfQorCit9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxPcHRpb25F
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVudC5oCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxPcHRpb25FbGVtZW50X2gKKyNkZWZp
bmUgV01MT3B0aW9uRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MT3B0aW9uRWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgV01MSW50cmlu
c2ljRXZlbnRIYW5kbGVyOworY2xhc3MgV01MU2VsZWN0RWxlbWVudDsKKworY2xhc3MgV01MT3B0
aW9uRWxlbWVudCA6IHB1YmxpYyBIVE1MT3B0aW9uRWxlbWVudHsKK3B1YmxpYzoKKyAgICBXTUxP
cHRpb25FbGVtZW50KERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MT3B0aW9uRWxlbWVudCgp
OworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSopOworICAgIHZvaWQgc2V0U2VsZWN0ZWRTdGF0ZShib29sKTsKKyAgICBXTUxTZWxlY3RFbGVt
ZW50KiBnZXRTZWxlY3QoKSBjb25zdDsKKworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciog
ZXZlbnRIYW5kbGVyKCk7CisgICAgYm9vbCBoYXNJbnRyaW5zaWNFdmVudCgpOworICAgIHZvaWQg
c2V0SGFzSW50cmluc2ljRXZlbnQoYm9vbCk7CisgICAgdm9pZCBoYW5kbGVJbnRyaW5zaWNFdmVu
dElmTmVlZGVkKCk7CisKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsgCitwcml2YXRl
OgorICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogbV9ldm50SGFuZGxlcjsKKyAgICBib29s
IG1faGFzSW50cmluc2ljRXZlbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5k
ZXg6IFdlYkNvcmUvd21sL1dNTFBFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxQRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxQRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV01MUEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFt
ZXMuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQu
aCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxQRWxlbWVu
dDo6V01MUEVsZW1lbnQoRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxQYXJhZ3JhcGhFbGVtZW50
KGRvYykgCit7Cit9CisKK1dNTFBFbGVtZW50Ojp+V01MUEVsZW1lbnQoKSAKK3sKK30KKwordm9p
ZCBXTUxQRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRy
KQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbW9kZUF0dHIpIHsKKyAgICAgICAgbV9tb2Rl
ID0gIGF0dHItPnZhbHVlKCk7CisgICAgICAgIGlmIChtX21vZGUgPT0gIndyYXAiKQorICAgICAg
ICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXb3JkV3JhcCwgQ1NTVmFsdWVC
cmVha1dvcmQpOworICAgICAgICBlbHNlIGlmIChtX21vZGUgPT0gIm5vd3JhcCIpCisgICAgICAg
ICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdoaXRlU3BhY2UsIENTU1ZhbHVl
Tm93cmFwKTsKKyAgICB9IGVsc2UKKyAgICAgICAgSFRNTFBhcmFncmFwaEVsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCit2b2lkIFdNTFBFbGVtZW50Ojp1cGRhdGVBdHRy
c0lmTmVlZGVkKCkKK3sKKyAgICAvLyBJZiBub3QgZXhwbGljaXRseSBzcGVjaWZpZWQsIHRoZSBs
aW5ld3JhcCBtb2RlIGlzIGlkZW50aWNhbCB0byAKKyAgICAvLyB0aGUgbGluZS13cmFwIG1vZGUg
b2YgdGhlIHByZXZpb3VzIHBhcmFncmFwaCBpbiB0aGUgdGV4dCBmbG93IG9mCisgICAgLy8gYSBj
YXJkLlRoZSBkZWZhdWx0IG1vZGUgZm9yIHRoZSBmaXJzdCBwYXJhZ3JhcGggaW4gYSBjYXJkIGlz
IHdyYXAKKyAgICBpZiAobV9tb2RlLmlzRW1wdHkoKSkgeworICAgICAgICBQYXNzUmVmUHRyPE5v
ZGVMaXN0PiBubCA9IGRvY3VtZW50KCktPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJwIik7CisgICAg
ICAgIGludCBuTGVuID0gbmwuZ2V0KCktPmxlbmd0aCgpOworICAgICAgICBpZiAobkxlbiA9PSAw
KQorICAgICAgICAgICAgc2V0QXR0cmlidXRlKG1vZGVBdHRyLCAid3JhcCIpOworICAgICAgICBl
bHNlIGlmIChuTGVuID4gMCkgeworICAgICAgICAgICAgV01MUEVsZW1lbnQqIHBFbCA9IHN0YXRp
Y19jYXN0PFdNTFBFbGVtZW50Kj4obmwuZ2V0KCktPml0ZW0obkxlbi0xKSk7CisgICAgICAgICAg
ICBTdHJpbmcgcHJlTW9kZSA9IHBFbC0+Z2V0QXR0cmlidXRlKCJtb2RlIik7CisgICAgICAgICAg
ICBzZXRBdHRyaWJ1dGUobW9kZUF0dHIsIHByZU1vZGUpOworICAgICAgICB9CisgICAgfQorfQor
Cit9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd21sL1dNTFBFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3Jl
L3dtbC9XTUxQRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKyNpZm5k
ZWYgV01MUEVsZW1lbnRfaAorI2RlZmluZSBXTUxQRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1M
UGFyYWdyYXBoRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3Vt
ZW50OworCitjbGFzcyBXTUxQRWxlbWVudCA6IHB1YmxpYyBIVE1MUGFyYWdyYXBoRWxlbWVudHsK
K3B1YmxpYzoKKyAgICBXTUxQRWxlbWVudChEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFBF
bGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKik7CisgICAgdm9pZCB1cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisKK3ByaXZhdGU6
CisgICAgU3RyaW5nIG1fbW9kZTsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS93bWwvV01MUGFnZVN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxQYWdlU3RhdGUuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUGFnZVN0
YXRlLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisKKyNpbmNsdWRlICJDU3RyaW5nLmgi
CisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUg
Ikhpc3RvcnlJdGVtLmgiCisjaW5jbHVkZSAiTmFtZWRBdHRyTWFwLmgiCisjaW5jbHVkZSAiTm9k
ZUxpc3QuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTERvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNp
bmNsdWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworV01MUGFnZVN0YXRlOjpXTUxQYWdlU3RhdGUoUGFnZSog
cGFnZSkKK3sKKyAgICBtX3BhZ2UgPSBwYWdlOworICAgIG1faGlzdExlbiA9IDA7CisgICAgbV9h
Y3RpdmVDYXJkID0gMDsKKyAgICBtX2hhc0RlY2tBY2Nlc3MgPSBmYWxzZTsKK30KKworV01MUGFn
ZVN0YXRlOjp+V01MUGFnZVN0YXRlKCkKK3sKKyAgICBtX3ZhcmlhYmxlcy5jbGVhcigpOworICAg
IG1fcGFnZSA9IDA7CisgICAgbV9hY3RpdmVDYXJkID0gMDsKKyAgICBtX2hhc0RlY2tBY2Nlc3Mg
PSBmYWxzZTsKK30KKwordm9pZCBXTUxQYWdlU3RhdGU6OnJlc2V0KCkKK3sKKyAgICAvL3JlbW92
ZSBhbGwgdGhlIHZhcmlhYmxlcyBpbiB0aGUgY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICBt
X3ZhcmlhYmxlcy5jbGVhcigpOworCisgICAgLy9jbGVhciB0aGUgbmF2aWdhdGlvbiBoaXN0b3J5
IHN0YXRlIAorICAgIGlmIChtX3BhZ2UpCisgICAgICAgIG1fcGFnZS0+YmFja0ZvcndhcmRMaXN0
KCktPmNsZWFyV21sUGFnZUhpc3RvcnkoKTsKKworICAgIC8vcmVzZXQgaW1wbGVtZW50YXRpb24t
c3BlY2ZpYyBzdGF0ZSBpZiBVQSBoYXMKKyAgICBtX2hpc3RMZW4gPSAxOworfQorCit2b2lkIFdN
TFBhZ2VTdGF0ZTo6c3RvcmVWYXJpYWJsZShjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmlu
ZyYgdmFsKSAKK3sKKyAgICBtX3ZhcmlhYmxlcy5zZXQobmFtZSwgdmFsKTsKK30KKwordm9pZCBX
TUxQYWdlU3RhdGU6OnN0b3JlVmFyaWFibGVzKFZhcmlhYmxlTWFwJiB2YXJzKSAKK3sKKyAgICBt
X3ZhcmlhYmxlcyA9IHZhcnM7Cit9CisKK1N0cmluZyBXTUxQYWdlU3RhdGU6OmdldFZhcmliYWxl
KGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fdmFyaWFibGVzLmdl
dChuYW1lKTsKK30KKworYm9vbCBXTUxQYWdlU3RhdGU6Omhhc1ZhcmlhYmxlcygpIGNvbnN0IAor
eworICAgIHJldHVybiBtX3ZhcmlhYmxlcy5zaXplKCk7Cit9CisKK1BhZ2UqIFdNTFBhZ2VTdGF0
ZTo6cGFnZSgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9wYWdlOworfQorCitpbnQgV01MUGFnZVN0
YXRlOjpoaXN0b3J5TGVuZ3RoKCkgY29uc3QgeworICAgIHJldHVybiBtX2hpc3RMZW47Cit9CisK
K3ZvaWQgV01MUGFnZVN0YXRlOjpzZXRIaXN0b3J5TGVuZ3RoKGludCBsZW4pIHsKKyAgICBtX2hp
c3RMZW4gPSBsZW47Cit9CisKK1dNTENhcmRFbGVtZW50KiBXTUxQYWdlU3RhdGU6OmFjdGl2ZUNh
cmQoKQoreworICAgIHJldHVybiBtX2FjdGl2ZUNhcmQ7Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRl
OjpzZXRBY3RpdmVDYXJkKFdNTENhcmRFbGVtZW50KiBjYXJkKQoreworICAgIG1fYWN0aXZlQ2Fy
ZCA9IGNhcmQ7Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRlOjpzZXREZWNrQWNjZXNzRG9tYWluKGNv
bnN0IFN0cmluZyYgZG9tYWluKQoreworICAgIG1fYWNjZXNzRG9tYWluID0gZG9tYWluOworfQor
Cit2b2lkIFdNTFBhZ2VTdGF0ZTo6c2V0RGVja0FjY2Vzc1BhdGgoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIG1fYWNjZXNzUGF0aCA9IHBhdGg7Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRlOjpz
ZXROZWVkQ2hlY2tEZWNrQWNjZXNzKGJvb2wgbmVlZCkKK3sKKyAgICBpZiAobV9oYXNEZWNrQWNj
ZXNzICYmIG5lZWQpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6dG9rZW5pemVyKCkpCisgICAg
ICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihNdWx0aUFjY2Vzc0Vs
ZW1lbnRzRXJyb3IpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faGFzRGVja0FjY2VzcyA9IG5l
ZWQ7CisgICAgICAgIG1fYWNjZXNzUGF0aCA9IFN0cmluZygpOworICAgICAgICBtX2FjY2Vzc0Rv
bWFpbiA9IFN0cmluZygpOworICAgIH0KK30KKworYm9vbCBXTUxQYWdlU3RhdGU6Omhhc0RlY2tB
Y2Nlc3MoKSBjb25zdAoreworICAgIHJldHVybiBtX2hhc0RlY2tBY2Nlc3M7Cit9CisKK2Jvb2wg
V01MUGFnZVN0YXRlOjppc0RlY2tBY2Nlc3NpYmxlKCkKK3sKKyAgICBpZiAoIW1faGFzRGVja0Fj
Y2VzcyB8fCAhbV9wYWdlIHx8ICFtX3BhZ2UtPmJhY2tGb3J3YXJkTGlzdCgpIHx8ICFtX3BhZ2Ut
PmJhY2tGb3J3YXJkTGlzdCgpLT5iYWNrSXRlbSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIEhpc3RvcnlJdGVtKiBoaXN0SXRlbSA9IG1fcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmJh
Y2tJdGVtKCk7CisgICAgS1VSTCB1cmwoaGlzdEl0ZW0tPnVybFN0cmluZygpKTsKKyAgICBTdHJp
bmcgcHJldkhvc3QgPSB1cmwuaG9zdCgpOworICAgIC8vIGZvciAnZmlsZScgVVJJLCB0aGUgaG9z
dCBwYXJ0IG1heSBiZSBlbXB0eSwgc28gd2Ugc2hvdWxkIGNvbXBsZXRlIGl0LgorICAgIGlmIChw
cmV2SG9zdC5pc0VtcHR5KCkpCisgICAgICAgIHByZXZIb3N0ID0gImxvY2FsaG9zdCI7CisgICAg
U3RyaW5nIHByZXZQYXRoID0gdXJsLnBhdGgoKTsKKworICAgIGhpc3RJdGVtID0gbV9wYWdlLT5i
YWNrRm9yd2FyZExpc3QoKS0+Y3VycmVudEl0ZW0oKTsKKyAgICBLVVJMIGN1clVybChoaXN0SXRl
bS0+dXJsU3RyaW5nKCkpOworICAgIFN0cmluZyBjdXJQYXRoID0gY3VyVXJsLnBhdGgoKTsKKwor
ICAgIGlmIChlcXVhbElnbm9yaW5nUmVmKHVybCwgY3VyVXJsKSkKKyAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGJvb2wgY2FuQWNjZXNzID0gZmFsc2U7CisgICAgLy8gIi8iIGlzIHRoZSBkZWZh
dWx0IHZhbHVlIGlmIG5vdCBzcGVjaWZpZWQKKyAgICBpZiAobV9hY2Nlc3NQYXRoLmlzRW1wdHko
KSkgIAorICAgICAgICBtX2FjY2Vzc1BhdGggPSAiLyI7CisgICAgZWxzZSBpZiAobV9hY2Nlc3NQ
YXRoLmVuZHNXaXRoKCIvIikgJiYgKG1fYWNjZXNzUGF0aCAhPSAiLyIpKQorICAgICAgICBtX2Fj
Y2Vzc1BhdGggPSBtX2FjY2Vzc1BhdGgubGVmdCgobV9hY2Nlc3NQYXRoLmxlbmd0aCgpLTEpKTsK
KworCisgICAgLy8gY3VycmVudCBkZWNrIGRvbWFpbiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBu
b3Qgc3BlY2lmaWVkCisgICAgaWYgKG1fYWNjZXNzRG9tYWluLmlzRW1wdHkoKSkKKyAgICAgICAg
bV9hY2Nlc3NEb21haW4gPSBwcmV2SG9zdDsKKworICAgIC8vY29udmVydCByZWxhdGl2ZSBVUkwg
dG8gYWJzb2x1dGUgVVJMIGJlZm9yZSBwZXJmb3JtaW5nIHBhdGggbWF0Y2hpbmcKKyAgICBpZiAo
cHJldkhvc3QgPT0gbV9hY2Nlc3NEb21haW4pIHsKKyAgICAgICAgaWYgKCFtX2FjY2Vzc1BhdGgu
c3RhcnRzV2l0aCgiLyIpKSB7CisgICAgICAgICAgIGludCBpZHggPSBjdXJQYXRoLnJldmVyc2VG
aW5kKCcvJyk7CisgICAgICAgICAgIGlmIChpZHggIT0gLTEpIHsKKyAgICAgICAgICAgICAgIGN1
clBhdGggPSBjdXJQYXRoLmxlZnQoaWR4KzEpOworICAgICAgICAgICAgICAgY3VyUGF0aCArPSBt
X2FjY2Vzc1BhdGg7CisgICAgICAgICAgICAgICBjdXJVcmwuc2V0UGF0aChjdXJQYXRoKTsKKyAg
ICAgICAgICAgICAgIG1fYWNjZXNzUGF0aCA9IGN1clVybC5wYXRoKCk7CisgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHBhdGggcHJlZml4IG1hdGNoaW5nCisgICAgaWYg
KHByZXZQYXRoLnN0YXJ0c1dpdGgobV9hY2Nlc3NQYXRoKSAmJiAKKyAgICAgICAoKHByZXZQYXRo
W21fYWNjZXNzUGF0aC5sZW5ndGgoKV0gPT0gJy8nKSB8fCAocHJldlBhdGgubGVuZ3RoKCkgPT0g
bV9hY2Nlc3NQYXRoLmxlbmd0aCgpKSkpIHsKKyAgICAgICAgY2FuQWNjZXNzID0gdHJ1ZTsKKwor
ICAgICAgICAvLyBkb21haW4gc3VmZml4IG1hdGNoaW5nCisgICAgICAgIHVuc2lnbmVkIGRvbWFp
bkxlbiA9IG1fYWNjZXNzRG9tYWluLmxlbmd0aCgpOworICAgICAgICB1bnNpZ25lZCBob3N0TGVu
ID0gcHJldkhvc3QubGVuZ3RoKCk7CisgICAgICAgIGlmIChwcmV2SG9zdC5lbmRzV2l0aChtX2Fj
Y2Vzc0RvbWFpbikgJiYgKHByZXZIb3N0W2hvc3RMZW4tZG9tYWluTGVuLTFdID09ICcuJykgfHwg
KGhvc3RMZW4gPT0gZG9tYWluTGVuKSkKKyAgICAgICAgICAgIGNhbkFjY2VzcyA9IHRydWU7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNhbkFjY2VzcyA9IGZhbHNlOworICAgIH0KKworICAg
IHJldHVybiAgY2FuQWNjZXNzOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQYWdlU3Rh
dGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxQYWdlU3RhdGUuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvd21sL1dNTFBhZ2VTdGF0ZS5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDgxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2lmbmRlZiBXTUxQYWdlU3RhdGVfaAorI2RlZmluZSBXTUxQYWdlU3RhdGVf
aAorCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBQYWdlOworY2xhc3MgV01MQ2FyZEVsZW1lbnQ7CisKK3R5cGVkZWYg
SGFzaE1hcDxTdHJpbmcsIFN0cmluZz4gVmFyaWFibGVNYXA7CisKK2NsYXNzIFdNTFBhZ2VTdGF0
ZSA6IHB1YmxpYyBSZWZDb3VudGVkPFdNTFBhZ2VTdGF0ZT4geworCitwdWJsaWM6CisgICAgV01M
UGFnZVN0YXRlKFBhZ2UqKTsKKyAgICB+V01MUGFnZVN0YXRlKCk7CisKKyAgICAvLyByZXNldCB0
aGUgYnJvd3NlciBjb250ZXh0IHdoZW4gJ05ld2NvbnRleHQnIGF0dHJpYnV0ZSBvZiBjYXJkIGVs
ZW1lbnQgaXMKKyAgICAvLyBwZXJmb3JtZWQgYXMgcGFydCBvZiBnbyB0YXNrCisgICAgdm9pZCBy
ZXNldCgpOworCisgICAgLy8gdmFyaWFibGVzIG9wZXJhdGlvbnMgCisgICAgdm9pZCBzdG9yZVZh
cmlhYmxlKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYpOworICAgIHZvaWQgc3RvcmVWYXJp
YWJsZXMoVmFyaWFibGVNYXAmKTsKKyAgICBTdHJpbmcgZ2V0VmFyaWJhbGUoY29uc3QgU3RyaW5n
JikgY29uc3Q7CisgICAgYm9vbCBoYXNWYXJpYWJsZXMoKSBjb25zdDsKKworICAgIGludCBoaXN0
b3J5TGVuZ3RoKCkgY29uc3Q7CisgICAgdm9pZCBzZXRIaXN0b3J5TGVuZ3RoKGludCk7CisKKyAg
ICBQYWdlKiBwYWdlKCkgY29uc3Q7CisKKyAgICBXTUxDYXJkRWxlbWVudCogYWN0aXZlQ2FyZCgp
OworICAgIHZvaWQgc2V0QWN0aXZlQ2FyZChXTUxDYXJkRWxlbWVudCopOworCisgICAgLy8gZGVj
ayBhY2Nlc3MgY29udHJvbAorICAgIHZvaWQgc2V0RGVja0FjY2Vzc0RvbWFpbihjb25zdCBTdHJp
bmcmKTsKKyAgICB2b2lkIHNldERlY2tBY2Nlc3NQYXRoKGNvbnN0IFN0cmluZyYpOworICAgIHZv
aWQgc2V0TmVlZENoZWNrRGVja0FjY2Vzcyhib29sKTsKKyAgICBib29sIGhhc0RlY2tBY2Nlc3Mo
KSBjb25zdDsKKyAgICBib29sIGlzRGVja0FjY2Vzc2libGUoKTsKKworcHJpdmF0ZToKKyAgICBQ
YWdlKiBtX3BhZ2U7CisgICAgVmFyaWFibGVNYXAgbV92YXJpYWJsZXM7CisgICAgaW50IG1faGlz
dExlbjsKKyAgICBXTUxDYXJkRWxlbWVudCogbV9hY3RpdmVDYXJkOworICAgIFN0cmluZyBtX2Fj
Y2Vzc0RvbWFpbjsKKyAgICBTdHJpbmcgbV9hY2Nlc3NQYXRoOworICAgIGJvb2wgbV9oYXNEZWNr
QWNjZXNzOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21s
L1dNTFBvc3RmaWVsZEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFBv
c3RmaWVsZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUG9zdGZp
ZWxkRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MUG9zdGZpZWxkRWxlbWVudC5oIgorCisjaW5jbHVk
ZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50
LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNs
dWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxv
YWRlci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5hbWVOb2RlTGlzdC5o
IgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2lu
Y2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKKworV01MUG9zdGZpZWxkRWxlbWVudDo6V01MUG9zdGZpZWxkRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKQorIDogV01MRWxlbWVu
dChuYW1lLCBkb2MpCit7Cit9CisKK1dNTFBvc3RmaWVsZEVsZW1lbnQ6On5XTUxQb3N0ZmllbGRF
bGVtZW50KCkKK3sKK30KKwordm9pZCBXTUxQb3N0ZmllbGRFbGVtZW50OjppbnNlcnRlZEludG9U
cmVlKGJvb2wgZGVlcCkKK3sKKyAgICBOb2RlKiBhbmNlc3RvciA9IHBhcmVudE5vZGUoKTsKKyAg
ICAvLyB0aGUgYW5jZXN0b3Igb2YgPHBvc3RmaWVsZD4gZ290IHRvIGJlIDxnbz4KKyAgICBpZiAo
IWFuY2VzdG9yLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpnb1RhZykpCisgICAgICAgIHJldHVybjsg
ICAgIAorCisgICAgV01MR29FbGVtZW50KiBnbyA9IDA7CisgICAgZ28gPSBzdGF0aWNfY2FzdDxX
TUxHb0VsZW1lbnQqPihhbmNlc3Rvcik7CisgICAgaWYgKGdvKQorICAgICAgICBnby0+cmVnaXN0
ZXJQb3N0ZmllbGRFbGVtZW50KHRoaXMpOworfQorCitTdHJpbmcgV01MUG9zdGZpZWxkRWxlbWVu
dDo6bmFtZSgpIAoreworICAgIHJldHVybiBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoZ2V0
QXR0cmlidXRlKCJuYW1lIiksIGRvY3VtZW50KCkpOworfQorCitTdHJpbmcgV01MUG9zdGZpZWxk
RWxlbWVudDo6dmFsdWUoKSAKK3sKKyAgICByZXR1cm4gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFy
UmVmKGdldEF0dHJpYnV0ZSgidmFsdWUiKSwgZG9jdW1lbnQoKSk7Cit9ICAgIAorCit9CisKSW5k
ZXg6IFdlYkNvcmUvd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dt
bC9XTUxQb3N0ZmllbGRFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDMgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFdNTFBvc3RmaWVsZEVsZW1lbnRfaAorI2RlZmluZSBXTUxQb3N0ZmllbGRFbGVt
ZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXTUxQb3N0ZmllbGRFbGVtZW50IDogcHVibGljICBXTUxFbGVtZW50eworcHVibGlj
OgorICAgIFdNTFBvc3RmaWVsZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9j
dW1lbnQqIGRvYyk7CisgICAgfldNTFBvc3RmaWVsZEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwg
dm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7ICAgIC8vIG5lZWQgdG8gcmVnaXN0ZXIg
bXlzZWxmIHRvIHBhcmVudHMgaGVyZSwgbGlrZSA8Z28+LCA8b25ldmVudD4KKworICAgIFN0cmlu
ZyBuYW1lKCk7ICAgIC8vIGV2ZXJ5IHBvc3RmaWVsZCB0YWcgbXVzdCBoYXZlIGEgbmFtZSBhdHRy
aWJ1dGUgYW5kIGEgdmFsaWQgYXR0cmlidXRlCisgICAgU3RyaW5nIHZhbHVlKCk7CisKK307CisK
K30KKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MUHJldkVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd21sL1dNTFByZXZFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTFByZXZFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxQcmV2RWxlbWVudC5oIgor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNp
bmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUg
IldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUaW1lckVsZW1lbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXTUxQcmV2RWxlbWVudDo6V01MUHJldkVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgOiBXTUxUYXNrRWxlbWVu
dCh0YWdOYW1lLCBkb2MpCit7Cit9CisKK1dNTFByZXZFbGVtZW50OjpXTUxQcmV2RWxlbWVudChE
b2N1bWVudCogZG9jKQorICA6IFdNTFRhc2tFbGVtZW50KFdNTE5hbWVzOjpwcmV2VGFnLCBkb2Mp
Cit7Cit9CisKK1dNTFByZXZFbGVtZW50Ojp+V01MUHJldkVsZW1lbnQoKQoreworfQorICAgICAg
ICAgICAgICAgICAgICAgICAKK3ZvaWQgV01MUHJldkVsZW1lbnQ6OmV4ZWMoRXZlbnQqIGV2dCwg
U3RyaW5nIHVyaSkKK3sKKyAgICBQYWdlKiBwYWdlID0gZG9jdW1lbnQoKS0+cGFnZSgpOworICAg
IGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gY29udmVydCB2YXJpYWJsZSBu
YW1lcyBhbmQgdmFsdWVzIG9mIHNldHZhciBlbGVtZW50IGlmIG5lY2Vzc2FyeQorICAgIFZhcmlh
YmxlTWFwIG1fdmFyczsKKyAgICBpZiAoaGFzU2V0dmFyKCkpIHsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaSA9IDA7IGkgPCBtX3NldHZhcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
IGlmICghbV9zZXR2YXJzW2ldLT5uYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1f
dmFycy5zZXQobV9zZXR2YXJzW2ldLT5uYW1lKCksIG1fc2V0dmFyc1tpXS0+dmFsdWUoKSk7Cisg
ICAgICAgIH0KKyAgICB9CisgCisgICAgLy8gdXBkYXRlIGJyb3dzZXIgY29udGV4dCAKKyAgICBp
ZiAoIW1fdmFycy5pc0VtcHR5KCkpCisgICAgICAgIHBhZ2UtPndtbFBhZ2VTdGF0ZSgpLT5zdG9y
ZVZhcmlhYmxlcyhtX3ZhcnMpOworCisgICAgLy8gc3RvcCB0aGUgdGltZXIgb2YgdGhlIGN1cnJl
bnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IHBhZ2Ut
PndtbFBhZ2VTdGF0ZSgpLT5hY3RpdmVDYXJkKCk7CisgICAgaWYgKGNhcmQgJiYgY2FyZC0+ZXZl
bnRUaW1lcigpKQorICAgICAgICBjYXJkLT5ldmVudFRpbWVyKCktPnN0b3AoKTsKKworICAgIC8v
IHByZXBhcmUgZm9yIGRpc3BsYXlpbmcgdGhlIGRlc3QgY2FyZAorICAgIHBhZ2UtPmdvQmFjaygp
OworfQorCisKK30gLy9uYW1lc3BhY2UKKwpJbmRleDogV2ViQ29yZS93bWwvV01MUHJldkVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxQcmV2RWxlbWVudC5oCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MUHJldkVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpZm5kZWYgV01MUHJldkVsZW1lbnRfaAorI2RlZmluZSBXTUxQcmV2
RWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisgICAgCitjbGFzcyBXTUxQcmV2RWxlbWVudCA6IHB1YmxpYyBXTUxUYXNrRWxlbWVu
dCB7CitwdWJsaWM6CisgICAgV01MUHJldkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvYyk7CisgICAgV01MUHJldkVsZW1lbnQoRG9jdW1lbnQqIGRvYyk7
CisgICAgdmlydHVhbCB+V01MUHJldkVsZW1lbnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQg
ZXhlYyhFdmVudCAqLCBTdHJpbmcpIDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3dtbC9XTUxSZWZyZXNoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93bWwvV01MUmVmcmVzaEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93
bWwvV01MUmVmcmVzaEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFJlZnJlc2hFbGVtZW50LmgiCisK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZl
bnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAi
V01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
VGltZXJFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV01MUmVmcmVzaEVsZW1l
bnQ6OldNTFJlZnJlc2hFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50KiBkb2MpCisgICAgICAgIDogV01MVGFza0VsZW1lbnQoIHRhZ05hbWUsIGRvYykKK3sKK30K
KworV01MUmVmcmVzaEVsZW1lbnQ6On5XTUxSZWZyZXNoRWxlbWVudCgpCit7Cit9CisKK3ZvaWQg
IFdNTFJlZnJlc2hFbGVtZW50OjpleGVjKEV2ZW50KiBldnQsIFN0cmluZyB1cmkpIAoreworICAg
IGlmICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgV01MUGFnZVN0
YXRlKiBwYWdlU3RhdGUgPSBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAg
IFdNTENhcmRFbGVtZW50KiBjYXJkID0gcGFnZVN0YXRlLT5hY3RpdmVDYXJkKCk7CisgICAgV01M
VGltZXJFbGVtZW50KiB0aW1lciA9IGNhcmQtPmV2ZW50VGltZXIoKTsKKyAgICAvLyBCZWZvcmUg
cGVyZm9ybSByZWZyZXNoIHRhc2ssIHdlIHN0b3JlIHRoZSBjdXJyZW50IHRpbWVvdXQgdmFsdWUg
CisgICAgLy8gYW5kIHRoZW4gc3RvcCB0aGUgdGltZXIKKyAgICBpZiAodGltZXIpIHsKKyAgICAg
ICAgdGltZXItPnN0b3JlSW50ZXJ2YWxUb1BhZ2VTdGF0ZSgpOworICAgICAgICB0aW1lci0+c3Rv
cCgpOworICAgIH0KKworICAgIC8vIGNvbnZlcnQgdmFyaWFibGUgbmFtZXMgYW5kIHZhbHVlcyBv
ZiBzZXR2YXIgZWxlbWVudCBpZiBuZWNlc3NhcnkKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcnM7Cisg
ICAgaWYgKGhhc1NldHZhcigpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgbV9zZXR2YXJzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoIW1fc2V0dmFyc1tp
XS0+bmFtZSgpLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBtX3ZhcnMuc2V0KG1fc2V0dmFy
c1tpXS0+bmFtZSgpLCBtX3NldHZhcnNbaV0tPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfSAg
CisKKyAgICAvLyB1cGRhdGUgYnJvd3NlciBjb250ZXh0IAorICAgIGlmICghbV92YXJzLmlzRW1w
dHkoKSkKKyAgICAgICAgcGFnZVN0YXRlLT5zdG9yZVZhcmlhYmxlcyhtX3ZhcnMpOworCisgICAg
Ly9yZWRpc3BsYXkgY3VycmVtdCBjYXJkIHdpdGggY3VycmVudCB2YXJpYWJsZSBzdGF0ZQorICAg
IGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT5yZWxvYWQoKTsKKworICAgIC8vQWZ0ZXIg
cmVmcmVzaGluZyB0YXNrLCByZXN1bWUgdGhlIHRpbWVyIGlmIGl0IGV4c2l0cyAKKyAgICBpZiAo
dGltZXIpCisgICAgICAgIHRpbWVyLT5zdGFydCgpOworfQorCit9IC8vbmFtZXNwYWNlCisKSW5k
ZXg6IFdlYkNvcmUvd21sL1dNTFJlZnJlc2hFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS93bWwvV01MUmVmcmVzaEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dN
TFJlZnJlc2hFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFdNTFJlZnJlc2hFbGVtZW50X2gKKyNkZWZpbmUgV01MUmVmcmVzaEVsZW1lbnRfaAorCisj
aW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiV01MVGFza0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgV01MTmFtZXM7CisKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFzcyBXTUxSZWZy
ZXNoRWxlbWVudCA6IHB1YmxpYyBXTUxUYXNrRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MUmVm
cmVzaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYyk7
CisgICAgdmlydHVhbCB+V01MUmVmcmVzaEVsZW1lbnQoKTsKKyAgICAKKyAgICB2aXJ0dWFsIHZv
aWQgZXhlYyhFdmVudCAqLCBTdHJpbmcpIDsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
d21sL1dNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU4OCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCisK
KyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUg
IkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5o
IgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVk
ZSAiTW91c2VFdmVudC5oIgorI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKKyNpbmNsdWRlICJS
ZW5kZXJNZW51TGlzdC5oIgorI2luY2x1ZGUgIlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMu
aCIKKyNpbmNsdWRlICJXTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRl
LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CisjaWYgUExBVEZPUk0oTUFDKQorI2RlZmluZSBBUlJPV19LRVlTX1BPUF9NRU5VIDEKKyNlbHNl
CisjZGVmaW5lIEFSUk9XX0tFWVNfUE9QX01FTlUgMAorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFj
ZSBXVEY7Cit1c2luZyBuYW1lc3BhY2UgVW5pY29kZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsK
KworV01MU2VsZWN0RWxlbWVudDo6V01MU2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWcsIERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MU2VsZWN0RWxlbWVudCh0YWcsIGRvYywg
MCkKK3sKK30KKworV01MU2VsZWN0RWxlbWVudDo6fldNTFNlbGVjdEVsZW1lbnQoKQoreworfQor
Cit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CisgICAg
ICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAgICAg
ICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxl
UmVmZXJlbmNlRXJyb3IpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgbV9uYW1lID0gYXR0
ci0+dmFsdWUoKTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikK
KyAgICAgICAgbV92YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IGluYW1lQXR0cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJl
ZihhdHRyLT52YWx1ZSgpKSkKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJl
cG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgbV9pTmFtZSA9IGF0dHItPnZhbHVlKCk7CisKKyAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBpdmFsdWVBdHRyKQorICAgICAgICBtX2lWYWx1ZSA9IGF0dHItPnZhbHVl
KCk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG11bHRpcGxlQXR0cikgeworICAgICAg
ICBib29sIG9sZE11bHRpcGxlID0gbXVsdGlwbGUoKTsKKyAgICAgICAgc2V0TXVsdGlwbGUoYXR0
ci0+dmFsdWUoKSA9PSAidHJ1ZSIpOworICAgICAgICBpZiAoKG9sZE11bHRpcGxlICE9IG11bHRp
cGxlKCkpICYmIGF0dGFjaGVkKCkpIHsKKyAgICAgICAgICAgIGRldGFjaCgpOworICAgICAgICAg
ICAgYXR0YWNoKCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBI
VE1MTmFtZXM6OnNpemVBdHRyKQorICAgICAgICA7Ly9EbyBub3RoaW5nCisgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IEhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKQorICAgICAgICA7Ly9EbyBu
b3RoaW5nCisgICAgZWxzZQorICAgICAgICBIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUoYXR0cik7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6dXBkYXRlQXR0cnNJ
Zk5lZWRlZCgpIAoreworICAgIFN0cmluZyBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYobV92YWx1ZSwgZG9jdW1lbnQoKSk7CisgICAgaWYgKG1fdmFsdWUgIT0gc3ViKSB7CisgICAg
ICAgIHNldEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHN1Yik7CisgICAgICAgIG1fdmFsdWUgPSBzdWI7
CisgICAgfQorCisgICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKG1faVZhbHVl
LCBkb2N1bWVudCgpKTsKKyAgICBpZiAobV9pVmFsdWUgIT0gc3ViKSB7CisgICAgICAgIHNldEF0
dHJpYnV0ZShpdmFsdWVBdHRyLCBzdWIpOworICAgICAgICBtX2lWYWx1ZSA9IHN1YjsKKyAgICB9
CisKKyAgICBTdHJpbmcgdGl0bGUgPSBnZXRBdHRyaWJ1dGUoInRpdGxlIik7CisgICAgc3ViID0g
V01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHRpdGxlLCBkb2N1bWVudCgpKTsKKyAgICBpZiAo
dGl0bGUgIT0gc3ViKQorICAgICAgICBzZXRBdHRyaWJ1dGUodGl0bGVBdHRyLCB0aXRsZSk7Cit9
CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5k
ZXgsIGJvb2wgZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlKQoreworICAgIGNvbnN0IFZlY3Rv
cjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGludCBsaXN0SW5kZXgg
PSBvcHRpb25Ub0xpc3RJbmRleChvcHRpb25JbmRleCk7CisgICAgV01MT3B0aW9uRWxlbWVudCog
ZWxlbWVudCA9IDA7CisKKyAgICBpZiAoIW11bHRpcGxlKCkpCisgICAgICAgIGRlc2VsZWN0ID0g
dHJ1ZTsKKworICAgIGlmIChsaXN0SW5kZXggPj0gMCkgeworICAgICAgICBpZiAoYWN0aXZlU2Vs
ZWN0aW9uQW5jaG9ySW5kZXgoKSA8IDAgfHwgZGVzZWxlY3QpCisgICAgICAgICAgICBzZXRBY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleChsaXN0SW5kZXgpOworICAgICAgICBpZiAoYWN0aXZlU2Vs
ZWN0aW9uRW5kSW5kZXgoKSA8IDAgfHwgZGVzZWxlY3QpCisgICAgICAgICAgICBzZXRBY3RpdmVT
ZWxlY3Rpb25FbmRJbmRleChsaXN0SW5kZXgpOworICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nh
c3Q8V01MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2xpc3RJbmRleF0pOworICAgICAgICBlbGVtZW50
LT5zZXRTZWxlY3RlZFN0YXRlKHRydWUpOworICAgIH0KKworICAgIGlmIChkZXNlbGVjdCkKKyAg
ICAgICAgZGVzZWxlY3RJdGVtcyhlbGVtZW50KTsKKworICAgIHNjcm9sbFRvU2VsZWN0aW9uKCk7
CisKKyAgICAvLyBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCBmaXJlT25DaGFuZ2UgZm9yIG1l
bnUgbGlzdHMuIAorICAgIGlmIChmaXJlT25DaGFuZ2UgJiYgdXNlc01lbnVMaXN0KCkpCisgICAg
ICAgIG1lbnVMaXN0T25DaGFuZ2UoKTsKK30KKworU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6OnZh
bHVlVG9JVmFsdWUoU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSAK
KyAgICAgICAgcmV0dXJuIHZhbHVlOworCisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4m
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdmFsVmVjdHM7CisgICAg
dmFsdWUuc3BsaXQoJzsnLCB2YWxWZWN0cyk7CisgICAgVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9y
IGl0ID0gdmFsVmVjdHMuYmVnaW4oKTsKKyAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAw
OyAKKyAgICBTdHJpbmcgaVZhbDsKKyAgICBTdHJpbmcgdmFsOworICAgIHdoaWxlIChpdCAhPSB2
YWxWZWN0cy5lbmQoKSkgeworICAgICAgICB2YWwgPSAqaXQ7CisgICAgICAgIGludCBvcHRJZHgg
PSAwOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKysp
IHsKKyAgICAgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsK
KyAgICAgICAgICAgICAgICBvcHRJZHgrKzsKKyAgICAgICAgICAgICAgICBvcHRpb24gPSBzdGF0
aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pOworICAgICAgICAgICAgICAgIGlm
IChvcHRpb24tPnZhbHVlKCkgPT0gdmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGlWYWwgKz0g
U3RyaW5nOjpudW1iZXIob3B0SWR4KTsKKyAgICAgICAgICAgICAgICAgICAgaVZhbCArPSAiOyI7
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICArK2l0OworICAgIH0KKworICAgIGlmIChpVmFsLmVu
ZHNXaXRoKCI7IikpIAorICAgICAgICBpVmFsID0gaVZhbC5sZWZ0KGlWYWwubGVuZ3RoKCktMSk7
CisKKyAgICByZXR1cm4gdmFsaWRhdGVJbmRleFZhbHVlKGlWYWwpOworfQorCitTdHJpbmcgV01M
U2VsZWN0RWxlbWVudDo6aXZhbHVlVG9WYWx1ZShTdHJpbmcmIGl2YWx1ZSkKK3sKKyAgICBpZiAo
aXZhbHVlLmlzRW1wdHkoKSkgCisgICAgICAgIHJldHVybiBpdmFsdWU7CisKKyAgICBXTUxPcHRp
b25FbGVtZW50KiBvcHRpb24gPSAwOyAKKyAgICBTdHJpbmcgaXZhbDsKKyAgICBTdHJpbmcgdmFs
OworICAgIGludCBvcHRJZHggPSAtMTsKKyAgICBpbnQgbGlzdElkeCA9IC0xOworICAgIGNvbnN0
IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxT
dHJpbmc+IHZhbFZlY3RzOworICAgIGl2YWx1ZS5zcGxpdCgnOycsIHZhbFZlY3RzKTsKKyAgICBW
ZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSB2YWxWZWN0cy5iZWdpbigpOworICAgIHdoaWxl
IChpdCAhPSB2YWxWZWN0cy5lbmQoKSkgeworICAgICAgICBpdmFsID0gKml0Kys7CisKKyAgICAg
ICAgb3B0SWR4ID0gaXZhbC50b0ludCgpOworICAgICAgICBpZiAoKG9wdElkeCA8IDEpIHx8IChv
cHRJZHggPiBzdGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkpKQorICAgICAgICAgICAgICAg
Y29udGludWU7IAorCisgICAgICAgIGxpc3RJZHggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRJZHgt
MSk7CisgICAgICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVt
c1tsaXN0SWR4XSk7CisKKyAgICAgICAgdmFsICs9IG9wdGlvbi0+dmFsdWUoKTsKKyAgICAgICAg
dmFsICs9ICI7IjsKKyAgICB9CisKKyAgICBpZiAodmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAg
ICB2YWwgPSB2YWwubGVmdCh2YWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsOworfQor
CitTdHJpbmcgV01MU2VsZWN0RWxlbWVudDo6dmFsaWRhdGVJbmRleFZhbHVlKFN0cmluZyYgaXZh
bCkKK3sKKyAgICBpZiAoaXZhbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBpdmFsOworCisg
ICAgYm9vbCBvayA9IHRydWU7CisgICAgU3RyaW5nIHZhbCgiIik7CisgICAgU3RyaW5nIG5ld1Zh
bDsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxWZWN0czsKKyAgICBpdmFsLnNwbGl0KCc7JywgdmFs
VmVjdHMpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsVmVjdHMuc2l6ZSgpOyArK2kp
IHsKKyAgICAgICAgdW5zaWduZWQgblZhbCA9IHZhbFZlY3RzW2ldLnRvSW50KCZvayk7CisgICAg
ICAgIGlmICghb2sgfHwgKG5WYWwgPCAxKSB8fCAoblZhbCA+IGxlbmd0aCgpKSkgeworICAgICAg
ICAgICAgdmFsVmVjdHMucmVtb3ZlKGkpOworICAgICAgICAgICAgaS0tOworICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgbmV3VmFsID0gU3RyaW5nOjpudW1iZXIoblZhbCk7CisgICAgICAg
ICAgICBpZiAoLTEgPT0gdmFsLmZpbmQobmV3VmFsKSkgeworICAgICAgICAgICAgICAgIHZhbCAr
PSBuZXdWYWw7IAorICAgICAgICAgICAgICAgIHZhbCArPSAiOyI7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICB2
YWwgPSB2YWwubGVmdCh2YWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsOworfQorCit2
b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmNhbGNEZWZhdWx0T3B0aW9uSW5kZXgoKQoreworICAgIGlm
ICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgV01MUGFnZVN0YXRl
ICpwYWdlU3RhdGUgPSBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIFN0
cmluZyB2YXI7CisgICAgaWYgKCFtX2lOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICB2YXIgPSBw
YWdlU3RhdGUtPmdldFZhcmliYWxlKG1faU5hbWUpOworICAgICAgICBpZiAoIXZhci5pc0VtcHR5
KCkpCisgICAgICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFsdWUodmFy
KTsKKyAgICB9CisKKyAgICBpZiAobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSAmJiAhbV9pVmFs
dWUuaXNFbXB0eSgpKQorICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFs
dWUobV9pVmFsdWUpOworCisgICAgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYgIW1f
bmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgdmFyID0gcGFnZVN0YXRlLT5nZXRWYXJpYmFsZSht
X25hbWUpOworICAgICAgICBpZiAoIXZhci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2RlZmF1
bHRPcHRJZHggPSB2YWx1ZVRvSVZhbHVlKHZhcik7CisgICAgfQorCisgICAgaWYgKG1fZGVmYXVs
dE9wdElkeC5pc0VtcHR5KCkgJiYgIW1fdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBtX2RlZmF1
bHRPcHRJZHggPSB2YWx1ZVRvSVZhbHVlKG1fdmFsdWUpOworCisgICAgaWYgKG1fZGVmYXVsdE9w
dElkeC5pc0VtcHR5KCkgJiYgbXVsdGlwbGUoKSkKKyAgICAgICAgbV9kZWZhdWx0T3B0SWR4ID0g
IjAiOworICAgIGVsc2UgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkpCisgICAgICAgIG1f
ZGVmYXVsdE9wdElkeCA9ICIxIjsKKworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmluaXRp
YWxpc2VWYXJpYWJsZXMoKQoreworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVt
cyA9IGxpc3RJdGVtcygpOworICAgIGlmIChpdGVtcy5zaXplKCkgPD0gMCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7CisgICAgV01MUGFnZVN0YXRl
KiBwYWdlU3RhdGUgPSBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIEFT
U0VSVChwYWdlU3RhdGUpOworICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSAmJiAhbXVsdGlwbGUo
KSkgeworCisgICAgICAgIHVuc2lnbmVkIGludCBpZHggPSBtX2RlZmF1bHRPcHRJZHgudG9JbnQo
KTsgCisgICAgICAgIGlmIChpZHggPCAxIHx8IGlkeCA+IGl0ZW1zLnNpemUoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgbGlzdElkeCA9IG9w
dGlvblRvTGlzdEluZGV4KGlkeC0xKTsKKyAgICAgICAgICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9w
dGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tsaXN0SWR4XSk7Cisg
ICAgICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobV9uYW1lLCBvcHRpb24tPnZhbHVl
KCkpOworICAgICAgICB9CisKKyAgICB9IGVsc2UgaWYgKCFtX25hbWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIFN0cmluZyBuYW1lVmFsID0gaXZhbHVlVG9WYWx1ZShtX2RlZmF1bHRPcHRJZHgpOwor
ICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobV9uYW1lLCBuYW1lVmFsKTsKKyAgICB9
CisKKyAgICBpZiAoIW1faU5hbWUuaXNFbXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0b3Jl
VmFyaWFibGUobV9pTmFtZSwgbV9kZWZhdWx0T3B0SWR4KTsKK30KKwordm9pZCBXTUxTZWxlY3RF
bGVtZW50OjpwcmVTZWxlY3RPcHRpb25zQnlEZWZhdWx0KCkKK3sKKyAgICBWZWN0b3I8U3RyaW5n
PiBpZHhWZWN0czsKKyAgICBtX2RlZmF1bHRPcHRJZHguc3BsaXQoJzsnLCBpZHhWZWN0cyk7Cisg
ICAgVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gaWR4VmVjdHMuYmVnaW4oKTsKKyAgICBp
bnQgaWR4ID0gLTE7CisgICAgaWYgKG11bHRpcGxlKCkpIHsKKyAgICAgICAgd2hpbGUgKGl0ICE9
IGlkeFZlY3RzLmVuZCgpKSB7CisgICAgICAgICAgICBpZHggPSAoKml0KS50b0ludCgpOyAKKyAg
ICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgoaWR4LTEsIGZhbHNlKTsKKyAgICAgICAgICAgICsr
aXQ7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZHggPSAoKml0KS50b0ludCgp
OyAKKyAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChpZHgtMSwgZmFsc2UpOworICAgIH0KK30KKwor
dm9pZCBXTUxTZWxlY3RFbGVtZW50OjpzZWxlY3RJbml0aWFsT3B0aW9ucygpCit7CisgICAgY2Fs
Y0RlZmF1bHRPcHRpb25JbmRleCgpOworCisgICAgaWYgKCFtX2RlZmF1bHRPcHRJZHguaXNFbXB0
eSgpKSB7CisgICAgICAgIGluaXRpYWxpc2VWYXJpYWJsZXMoKTsKKyAgICAgICAgcHJlU2VsZWN0
T3B0aW9uc0J5RGVmYXVsdCgpOworICAgIH0KK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50Ojpk
ZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCit7CisgICAgaWYgKCFtdWx0aXBsZSgpKQor
ICAgICAgICBtZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKKyAgICBlbHNlIAorICAg
ICAgICBsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworICAgIAorICAgIGlmIChldnQt
PmRlZmF1bHRIYW5kbGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldnQtPnR5cGUo
KSA9PSBrZXlwcmVzc0V2ZW50ICYmIGV2dC0+aXNLZXlib2FyZEV2ZW50KCkpIHsKKyAgICAgICAg
S2V5Ym9hcmRFdmVudCoga2V5Ym9hcmRFdmVudCA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQq
PihldnQpOworICAgIAorICAgICAgICBpZiAoIWtleWJvYXJkRXZlbnQtPmN0cmxLZXkoKSAmJiAh
a2V5Ym9hcmRFdmVudC0+YWx0S2V5KCkgJiYgIWtleWJvYXJkRXZlbnQtPm1ldGFLZXkoKSAmJgor
ICAgICAgICAgICAgaXNQcmludGFibGVDaGFyKGtleWJvYXJkRXZlbnQtPmNoYXJDb2RlKCkpKSB7
CisgICAgICAgICAgICB0eXBlQWhlYWRGaW5kKGtleWJvYXJkRXZlbnQpOworICAgICAgICAgICAg
ZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgfQorCisgICAgSFRNTEZvcm1Db250cm9sRWxlbWVudFdpdGhTdGF0ZTo6ZGVmYXVsdEV2
ZW50SGFuZGxlcihldnQpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6Om1lbnVMaXN0RGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQoreworICAgIFJlbmRlck1lbnVMaXN0KiBtZW51
TGlzdCA9IHN0YXRpY19jYXN0PFJlbmRlck1lbnVMaXN0Kj4ocmVuZGVyZXIoKSk7CisKKyAgICAv
LyBVc2Uga2V5IHByZXNzIGV2ZW50IGhlcmUgc2luY2Ugc2VuZGluZyBzaW11bGF0ZWQgbW91c2Ug
ZXZlbnRzCisgICAgLy8gb24ga2V5IGRvd24gYmxvY2tzIHRoZSBwcm9wZXIgc2VuZGluZyBvZiB0
aGUga2V5IHByZXNzIGV2ZW50LgorICAgIGlmIChldnQtPnR5cGUoKSA9PSBrZXlwcmVzc0V2ZW50
KSB7CisgICAgICAgIGlmICghcmVuZGVyZXIoKSB8fCAhZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgU3RyaW5nIGtleUlkZW50aWZpZXIgPSBzdGF0
aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5SWRlbnRpZmllcigpOworICAgICAgICBi
b29sIGhhbmRsZWQgPSBmYWxzZTsKKyNpZiBBUlJPV19LRVlTX1BPUF9NRU5VCisgICAgICAgIGlm
IChrZXlJZGVudGlmaWVyID09ICJFbnRlciIpIHsKKyAgICAgICAgICAgIG1lbnVMaXN0T25DaGFu
Z2UoKTsKKyAgICAgICAgICAgIGlmIChmb3JtKCkpCisgICAgICAgICAgICAgICAgZm9ybSgpLT5z
dWJtaXRDbGljayhldnQpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24iIHx8IGtleUlkZW50aWZpZXIgPT0g
IlVwIiB8fCBrZXlJZGVudGlmaWVyID09ICJVKzAwMjAiKSB7CisgICAgICAgICAgICBmb2N1cygp
OworICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2VsZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJl
ZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdlIGNhbGwgb25DaGFuZ2UgZHVyaW5nIHNldFNl
bGVjdGVkSW5kZXgsCisgICAgICAgICAgICAvLyB3aGljaCBnZXRzIGNhbGxlZCBmcm9tIFJlbmRl
ck1lbnVMaXN0Ojp2YWx1ZUNoYW5nZWQsIHdoaWNoIGdldHMgY2FsbGVkIGFmdGVyIHRoZSB1c2Vy
IG1ha2VzIGEgc2VsZWN0aW9uIGZyb20gdGhlIG1lbnUuCisgICAgICAgICAgICBzYXZlTGFzdFNl
bGVjdGlvbigpOworICAgICAgICAgICAgbWVudUxpc3QtPnNob3dQb3B1cCgpOworICAgICAgICAg
ICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGludCBsaXN0SW5k
ZXggPSBvcHRpb25Ub0xpc3RJbmRleChzZWxlY3RlZEluZGV4KCkpOworICAgICAgICBpZiAoa2V5
SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmllciA9PSAiUmlnaHQiKSB7CisgICAg
ICAgICAgICBpbnQgc2l6ZSA9IGxpc3RJdGVtcygpLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAo
bGlzdEluZGV4ICs9IDE7CisgICAgICAgICAgICAgICAgIGxpc3RJbmRleCA+PSAwICYmIGxpc3RJ
bmRleCA8IHNpemUgJiYgKGxpc3RJdGVtcygpW2xpc3RJbmRleF0tPmRpc2FibGVkKCkgfHwgIWxp
c3RJdGVtcygpW2xpc3RJbmRleF0tPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKTsKKyAgICAgICAg
ICAgICAgICAgKytsaXN0SW5kZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobGlz
dEluZGV4ID49IDAgJiYgbGlzdEluZGV4IDwgc2l6ZSkKKyAgICAgICAgICAgICAgICBzZXRTZWxl
Y3RlZEluZGV4KGxpc3RUb09wdGlvbkluZGV4KGxpc3RJbmRleCkpOworICAgICAgICAgICAgaGFu
ZGxlZCA9IHRydWU7CisgICAgICAgIH0gZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSAiVXAiIHx8
IGtleUlkZW50aWZpZXIgPT0gIkxlZnQiKSB7CisgICAgICAgICAgICBpbnQgc2l6ZSA9IGxpc3RJ
dGVtcygpLnNpemUoKTsKKyAgICAgICAgICAgIGZvciAobGlzdEluZGV4IC09IDE7CisgICAgICAg
ICAgICAgICAgIGxpc3RJbmRleCA+PSAwICYmIGxpc3RJbmRleCA8IHNpemUgJiYgKGxpc3RJdGVt
cygpW2xpc3RJbmRleF0tPmRpc2FibGVkKCkgfHwgIWxpc3RJdGVtcygpW2xpc3RJbmRleF0tPmhh
c0xvY2FsTmFtZShvcHRpb25UYWcpKTsKKyAgICAgICAgICAgICAgICAgLS1saXN0SW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAobGlzdEluZGV4ID49IDAgJiYgbGlzdEluZGV4
IDwgc2l6ZSkKKyAgICAgICAgICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGxpc3RUb09wdGlvbklu
ZGV4KGxpc3RJbmRleCkpOworICAgICAgICAgICAgaGFuZGxlZCA9IHRydWU7CisgICAgICAgIH0g
ZWxzZSBpZiAoa2V5SWRlbnRpZmllciA9PSAiRW50ZXIiKSB7CisgICAgICAgICAgICAvLyBsaXN0
SW5kZXggc2hvdWxkIGFscmVhZHkgYmUgc2VsZWN0ZWQsIGJ1dCB0aGlzIHdpbGwgZmlyZSB0aGUg
b25jaGFuZ2UgaGFuZGxlci4KKyAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0
aW9uSW5kZXgobGlzdEluZGV4KSwgdHJ1ZSwgdHJ1ZSk7CisgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIGlmIChoYW5kbGVkKQorICAgICAgICAg
ICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworCisgICAgfQorICAgIGlmIChldnQtPnR5cGUo
KSA9PSBtb3VzZWRvd25FdmVudCAmJiBldnQtPmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0
PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIGZv
Y3VzKCk7CisgICAgICAgIGlmIChtZW51TGlzdC0+cG9wdXBJc1Zpc2libGUoKSkKKyAgICAgICAg
ICAgIG1lbnVMaXN0LT5oaWRlUG9wdXAoKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAv
LyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2Vs
ZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwKKyAg
ICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVl
Q2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQgYWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rp
b24gZnJvbSB0aGUgbWVudS4KKyAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisgICAg
ICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVwKCk7CisgICAgICAgIH0KKyAgICAgICAgZXZ0LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0KKworICAgIC8vIHVwZGF0ZSBuYW1lIGFuZCBpbmFt
ZSB2YXJpYWJsZXMgd2l0aCBvcHRpb24ncyB2YWx1ZSBhbmQgaW5kZXgKKyAgICB1cGRhdGVWYXJp
YWJsZXMoKTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50
SGFuZGxlcihFdmVudCogZXZ0KQoreworICAgIGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgaWYgKGV2dC0+dHlwZSgpID09IG1vdXNlZG93bkV2ZW50ICYmIGV2dC0+aXNN
b3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09
IExlZnRCdXR0b24pIHsKKyAgICAgICAgZm9jdXMoKTsKKyAgICAgICAgCisgICAgICAgIE1vdXNl
RXZlbnQqIG1FdnQgPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KTsKKyAgICAgICAgaW50
IGxpc3RJbmRleCA9IHN0YXRpY19jYXN0PFJlbmRlckxpc3RCb3gqPihyZW5kZXJlcigpKS0+bGlz
dEluZGV4QXRPZmZzZXQobUV2dC0+b2Zmc2V0WCgpLCBtRXZ0LT5vZmZzZXRZKCkpOworICAgICAg
ICBpZiAobGlzdEluZGV4ID49IDApIHsKKyAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlv
biBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxs
IG9uQ2hhbmdlIGR1cmluZyBtb3VzZXVwLCBvciBhZnRlciBhdXRvc2Nyb2xsIGZpbmlzaGVzLgor
ICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKKworICAgICAgICAgICAgc2V0QWN0aXZl
U2VsZWN0aW9uU3RhdGUodHJ1ZSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGJvb2wgbXVs
dGlTZWxlY3RLZXlQcmVzc2VkID0gZmFsc2U7CisjaWYgUExBVEZPUk0oTUFDKQorICAgICAgICAg
ICAgbXVsdGlTZWxlY3RLZXlQcmVzc2VkID0gbUV2dC0+bWV0YUtleSgpOworI2Vsc2UKKyAgICAg
ICAgICAgIG11bHRpU2VsZWN0S2V5UHJlc3NlZCA9IG1FdnQtPmN0cmxLZXkoKTsKKyNlbmRpZgor
CisgICAgICAgICAgICBib29sIHNoaWZ0U2VsZWN0ID0gbXVsdGlwbGUoKSAmJiBtRXZ0LT5zaGlm
dEtleSgpOworICAgICAgICAgICAgYm9vbCBtdWx0aVNlbGVjdCA9IG11bHRpcGxlKCkgJiYgbXVs
dGlTZWxlY3RLZXlQcmVzc2VkICYmICFtRXZ0LT5zaGlmdEtleSgpOworICAgICAgICAgICAgCisg
ICAgICAgICAgICBIVE1MRWxlbWVudCogY2xpY2tlZEVsZW1lbnQgPSBsaXN0SXRlbXMoKVtsaXN0
SW5kZXhdOyAgICAgICAgICAgIAorICAgICAgICAgICAgV01MT3B0aW9uRWxlbWVudCogb3B0aW9u
ID0gMDsKKyAgICAgICAgICAgIGlmIChjbGlja2VkRWxlbWVudC0+aGFzTG9jYWxOYW1lKG9wdGlv
blRhZykpIHsKKyAgICAgICAgICAgICAgICBvcHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRpb25F
bGVtZW50Kj4oY2xpY2tlZEVsZW1lbnQpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAg
ICAgIC8vIEtlZXAgdHJhY2sgb2Ygd2hldGhlciBhbiBhY3RpdmUgc2VsZWN0aW9uIChsaWtlIGR1
cmluZyBkcmFnIHNlbGVjdGlvbiksIHNob3VsZCBzZWxlY3Qgb3IgZGVzZWxlY3QKKyAgICAgICAg
ICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25TdGF0ZSghb3B0aW9uLT5zZWxlY3RlZCgpKTsKKyAg
ICAgICAgICAgICAgICBvcHRpb24tPnNldFNlbGVjdGVkU3RhdGUoYWN0aXZlU2VsZWN0aW9uU3Rh
dGUoKSk7CisKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLy8gSWYg
d2UncmUgbm90IGluIGFueSBzcGVjaWFsIG11bHRpcGxlIHNlbGVjdGlvbiBtb2RlLCB0aGVuIGRl
c2VsZWN0IGFsbCBvdGhlciBpdGVtcywgZXhjbHVkaW5nIHRoZSBjbGlja2VkIG9wdGlvbi4KKyAg
ICAgICAgICAgIC8vIElmIG5vIG9wdGlvbiB3YXMgY2xpY2tlZCwgdGhlbiB0aGlzIHdpbGwgZGVz
ZWxlY3QgYWxsIGl0ZW1zIGluIHRoZSBsaXN0LgorICAgICAgICAgICAgaWYgKCFzaGlmdFNlbGVj
dCAmJiAhbXVsdGlTZWxlY3QpCisgICAgICAgICAgICAgICAgZGVzZWxlY3RJdGVtcyhvcHRpb24p
OworCisgICAgICAgICAgICAvLyBJZiB0aGUgYW5jaG9yIGhhc24ndCBiZWVuIHNldCwgYW5kIHdl
J3JlIGRvaW5nIGEgc2luZ2xlIHNlbGVjdGlvbiBvciBhIHNoaWZ0IHNlbGVjdGlvbiwgdGhlbiBp
bml0aWFsaXplIHRoZSBhbmNob3IgdG8gdGhlIGZpcnN0IHNlbGVjdGVkIGluZGV4LgorICAgICAg
ICAgICAgaWYgKGFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkgPCAwICYmICFtdWx0aVNlbGVj
dCkKKyAgICAgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChzZWxlY3Rl
ZEluZGV4KCkpOworCisgICAgICAgICAgICAvLyBJZiB0aGVyZSB3YXMgbm8gc2VsZWN0ZWRJbmRl
eCgpIGZvciB0aGUgcHJldmlvdXMgaW5pdGlhbGl6YXRpb24sIG9yCisgICAgICAgICAgICAvLyBJ
ZiB3ZSdyZSBkb2luZyBhIHNpbmdsZSBzZWxlY3Rpb24sIG9yIGEgbXVsdGlwbGUgc2VsZWN0aW9u
ICh1c2luZyBjbWQgb3IgY3RybCksIHRoZW4gaW5pdGlhbGl6ZSB0aGUgYW5jaG9yIGluZGV4IHRv
IHRoZSBsaXN0SW5kZXggdGhhdCBqdXN0IGdvdCBjbGlja2VkLgorICAgICAgICAgICAgaWYgKGxp
c3RJbmRleCA+PSAwICYmIChhY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCB8fCAhc2hp
ZnRTZWxlY3QpKQorICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4
KGxpc3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlv
bkVuZEluZGV4KGxpc3RJbmRleCk7CisgICAgICAgICAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9u
KCFtdWx0aVNlbGVjdCk7CisKKyAgICAgICAgICAgIGlmIChGcmFtZSogZnJhbWUgPSBkb2N1bWVu
dCgpLT5mcmFtZSgpKQorICAgICAgICAgICAgICAgIGZyYW1lLT5ldmVudEhhbmRsZXIoKS0+c2V0
TW91c2VEb3duTWF5U3RhcnRBdXRvc2Nyb2xsKCk7CisKKyAgICAgICAgICAgIGV2dC0+c2V0RGVm
YXVsdEhhbmRsZWQoKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoZXZ0LT50eXBlKCkgPT0g
bW91c2V1cEV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGljX2Nhc3Q8TW91c2VF
dmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24gJiYgZG9jdW1lbnQoKS0+ZnJhbWUo
KS0+ZXZlbnRIYW5kbGVyKCktPmF1dG9zY3JvbGxSZW5kZXJlcigpICE9IHJlbmRlcmVyKCkpCisg
ICAgICAgIC8vIFRoaXMgbWFrZXMgc3VyZSB3ZSBmaXJlIG9uQ2hhbmdlIGZvciBhIHNpbmdsZSBj
bGljay4gIEZvciBkcmFnIHNlbGVjdGlvbiwgb25DaGFuZ2Ugd2lsbCBmaXJlIHdoZW4gdGhlIGF1
dG9zY3JvbGwgdGltZXIgc3RvcHMuCisgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOworICAgIGVs
c2UgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNzRXZlbnQpIHsKKyAgICAgICAgaWYgKCFldnQt
PmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcg
a2V5SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpLT5rZXlJZGVu
dGlmaWVyKCk7CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkVudGVyIikgeworICAg
ICAgICAgICAgaWYgKGZvcm0oKSkKKyAgICAgICAgICAgICAgICBmb3JtKCktPnN1Ym1pdENsaWNr
KGV2dCk7CisgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgZW5kSW5kZXggPSAwOyAgICAgICAg
CisgICAgICAgIGludCBhY3RpdmVTZWxlY3Rpb25FbmRJZHggPSBhY3RpdmVTZWxlY3Rpb25FbmRJ
bmRleCgpOworICAgICAgICBpZiAoYWN0aXZlU2VsZWN0aW9uRW5kSWR4IDwgMCkgeworICAgICAg
ICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZW5kIGluZGV4CisgICAgICAgICAgICBpZiAoa2V5SWRl
bnRpZmllciA9PSAiRG93biIpCisgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBuZXh0U2VsZWN0
YWJsZUxpc3RJbmRleChsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSk7CisgICAgICAgICAgICBlbHNl
IGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpCisgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBw
cmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgob3B0aW9uVG9MaXN0SW5kZXgoc2VsZWN0ZWRJbmRl
eCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTZXQgdGhlIGVuZCBpbmRl
eCBiYXNlZCBvbiB0aGUgY3VycmVudCBlbmQgaW5kZXgKKyAgICAgICAgICAgIGlmIChrZXlJZGVu
dGlmaWVyID09ICJEb3duIikKKyAgICAgICAgICAgICAgICBlbmRJbmRleCA9IG5leHRTZWxlY3Rh
YmxlTGlzdEluZGV4KGFjdGl2ZVNlbGVjdGlvbkVuZElkeCk7CisgICAgICAgICAgICBlbHNlIGlm
IChrZXlJZGVudGlmaWVyID09ICJVcCIpCisgICAgICAgICAgICAgICAgZW5kSW5kZXggPSBwcmV2
aW91c1NlbGVjdGFibGVMaXN0SW5kZXgoYWN0aXZlU2VsZWN0aW9uRW5kSWR4KTsgICAgCisgICAg
ICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBr
ZXlJZGVudGlmaWVyID09ICJVcCIpIHsKKyAgICAgICAgICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlv
biBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxs
IG9uQ2hhbmdlIGltbWVkaWF0ZWx5IGFmdGVyIG1ha2luZyB0aGUgbmV3IHNlbGVjdGlvbi4KKyAg
ICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisKKyAgICAgICAgICAgIEFTU0VSVChlbmRJ
bmRleCA+PSAwICYmICh1bnNpZ25lZCllbmRJbmRleCA8IGxpc3RJdGVtcygpLnNpemUoKSk7IAor
ICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoZW5kSW5kZXgpOworICAgICAg
ICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgYW5jaG9yIGlzIHVuaXRpYWxpemVkLCBvciBp
ZiB3ZSdyZSBnb2luZyB0byBkZXNlbGVjdCBhbGwgb3RoZXIgb3B0aW9ucywgdGhlbiBzZXQgdGhl
IGFuY2hvciBpbmRleCBlcXVhbCB0byB0aGUgZW5kIGluZGV4LgorICAgICAgICAgICAgYm9vbCBk
ZXNlbGVjdE90aGVycyA9ICFtdWx0aXBsZSgpIHx8ICFzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50
Kj4oZXZ0KS0+c2hpZnRLZXkoKTsKKyAgICAgICAgICAgIGlmIChhY3RpdmVTZWxlY3Rpb25BbmNo
b3JJbmRleCgpIDwgMCB8fCBkZXNlbGVjdE90aGVycykgeworICAgICAgICAgICAgICAgIHNldEFj
dGl2ZVNlbGVjdGlvblN0YXRlKHRydWUpOworICAgICAgICAgICAgICAgIGlmIChkZXNlbGVjdE90
aGVycykKKyAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RJdGVtcygpOworICAgICAgICAgICAg
ICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGFjdGl2ZVNlbGVjdGlvbkVuZElkeCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlckxpc3RCb3gq
PihyZW5kZXJlcigpKS0+c2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5kZXgoZW5kSW5kZXgp
OworICAgICAgICAgICAgdXBkYXRlTGlzdEJveFNlbGVjdGlvbihkZXNlbGVjdE90aGVycyk7Cisg
ICAgICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKKyAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVs
dEhhbmRsZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHVwZGF0ZSBuYW1lIGFuZCBp
bmFtZSB2YXJpYWJsZXMgd2l0aCBvcHRpb24ncyB2YWx1ZSBhbmQgaW5kZXgKKyAgICB1cGRhdGVW
YXJpYWJsZXMoKTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVWYXJpYWJsZXMo
KQoreworICAgIGlmIChtX2lOYW1lLmlzRW1wdHkoKSAmJiBtX25hbWUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbmFtZTsKKyAgICBTdHJpbmcgaW5hbWU7CisgICAg
aW50IG9wdElkeCA9IDA7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsg
aSsrKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsK
KyAgICAgICAgICAgIG9wdElkeCsrOworICAgICAgICAgICAgV01MT3B0aW9uRWxlbWVudCogb3B0
aW9uID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ldKTsKKyAgICAgICAg
ICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAgICBuYW1lICs9IG9w
dGlvbi0+Z2V0QXR0cmlidXRlKCJ2YWx1ZSIpOworICAgICAgICAgICAgICAgIG5hbWUgKz0gIjsi
OworICAgICAgICAgICAgICAgIGluYW1lICs9IFN0cmluZzo6bnVtYmVyKG9wdElkeCk7CisgICAg
ICAgICAgICAgICAgaW5hbWUgKz0gIjsiOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg
fQorCisgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7CisgICAgQVNTRVJUKGRvY3VtZW50
KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCkpOworICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSkg
eworICAgICAgICB3aGlsZSAobmFtZS5lbmRzV2l0aCgiOyIpKQorICAgICAgICAgICAgbmFtZSA9
IG5hbWUubGVmdChuYW1lLmxlbmd0aCgpLTEpOworICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCkt
PndtbFBhZ2VTdGF0ZSgpLT5zdG9yZVZhcmlhYmxlKG1fbmFtZSwgbmFtZSk7CisgICAgfQorCisg
ICAgaWYgKCFtX2lOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoaW5hbWUuZW5kc1dpdGgo
IjsiKSkKKyAgICAgICAgICAgIGluYW1lID0gaW5hbWUubGVmdChpbmFtZS5sZW5ndGgoKS0xKTsK
KyAgICAgICAKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKS0+c3Rv
cmVWYXJpYWJsZShtX2lOYW1lLCBpbmFtZSk7CisgICAgfQorfQorCit9IC8vbmFtZXNwYWNlCklu
ZGV4OiBXZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS93bWwvV01MU2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01M
U2VsZWN0RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBXTUxTZWxlY3RFbGVtZW50X2gKKyNkZWZpbmUgV01MU2VsZWN0RWxlbWVudF9oCisKKyNpbmNs
dWRlICJIVE1MU2VsZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IERvY3VtZW50OworCitjbGFzcyBXTUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxTZWxlY3RF
bGVtZW50eworcHVibGljOgorICAgIFdNTFNlbGVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MU2VsZWN0RWxlbWVudCgpOworCisgICAg
dmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAg
IHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAgICB2b2lkIHNl
dFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJl
T25DaGFuZ2UgPSBmYWxzZSk7CisgICAgdm9pZCB1cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAg
dm9pZCBzZWxlY3RJbml0aWFsT3B0aW9ucygpOworCitwcml2YXRlOgorICAgIFN0cmluZyB2YWx1
ZVRvSVZhbHVlKFN0cmluZyYpOworICAgIFN0cmluZyBpdmFsdWVUb1ZhbHVlKFN0cmluZyYpOwor
ICAgIFN0cmluZyB2YWxpZGF0ZUluZGV4VmFsdWUoU3RyaW5nJik7CisgICAgdm9pZCBjYWxjRGVm
YXVsdE9wdGlvbkluZGV4KCk7CisgICAgdm9pZCBpbml0aWFsaXNlVmFyaWFibGVzKCk7CisgICAg
dm9pZCBwcmVTZWxlY3RPcHRpb25zQnlEZWZhdWx0KCk7CisgICAgdm9pZCBtZW51TGlzdERlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIGxpc3RCb3hEZWZhdWx0RXZlbnRIYW5k
bGVyKEV2ZW50Kik7CisgICAgdm9pZCB1cGRhdGVWYXJpYWJsZXMoKTsKKworICAgIFN0cmluZyBt
X25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAgU3RyaW5nIG1faU5hbWU7CisgICAgU3Ry
aW5nIG1faVZhbHVlOworICAgIFN0cmluZyBtX2RlZmF1bHRPcHRJZHg7Cit9OworCit9IC8vIG5h
bWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQuY3BwCShyZXZpc2lv
biAwKQorKysgV2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MU2V0
dmFyRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5o
IgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVk
ZSAiV01MUHJldkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxSZWZyZXNoRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcgbmFt
ZXNwYWNlIEV2ZW50TmFtZXM7CisKK1dNTFNldHZhckVsZW1lbnQ6OldNTFNldHZhckVsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvYykgCisgICAgOiBXTUxFbGVt
ZW50KG5hbWUsIGRvYykKK3sKK30KKworV01MU2V0dmFyRWxlbWVudDo6fldNTFNldHZhckVsZW1l
bnQoKQoreworfQorCit2b2lkIFdNTFNldHZhckVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9v
bCBkZWVwKQoreworICAgIFdNTFRhc2tFbGVtZW50KiBnbyA9IDA7CisgICAgTm9kZSogYW5jZXN0
b3IgPSBwYXJlbnROb2RlKCkgOworICAgIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShXTUxOYW1l
czo6Z29UYWcpKQorICAgICAgICBnbyA9IHN0YXRpY19jYXN0PFdNTEdvRWxlbWVudCo+KGFuY2Vz
dG9yKTsKKyAgICBlbHNlIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShXTUxOYW1lczo6cHJldlRh
ZykpCisgICAgICAgIGdvID0gc3RhdGljX2Nhc3Q8V01MUHJldkVsZW1lbnQqPihhbmNlc3Rvcik7
CisgICAgZWxzZSBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoV01MTmFtZXM6OnJlZnJlc2hUYWcp
KQorICAgICAgICBnbyA9IHN0YXRpY19jYXN0PFdNTFJlZnJlc2hFbGVtZW50Kj4oYW5jZXN0b3Ip
OworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuOyAKKworICAgIGlmIChnbykKKyAgICAgICAgZ28t
PnJlZ2lzdGVyU2V0dmFyRWxlbWVudCh0aGlzKTsKK30KKworCit2b2lkIFdNTFNldHZhckVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBT
dHJpbmcgYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICBpZiAoYXR0ck5h
bWUgPT0gbmFtZUF0dHIpIHsKKyAgICAgICAgaWYgKCFXTUxIZWxwZXI6OmlzVmFsaWRWYXJpYWJs
ZU5hbWUoYXR0ci0+dmFsdWUoKSwgdHJ1ZSkpCisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2Vu
aXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVOYW1lRXJyb3IpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG1fbmFtZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihh
dHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKKyAgICAgICAgICAgIGlmICghV01MSGVscGVyOjpp
c1ZhbGlkVmFyaWFibGVOYW1lKG1fbmFtZSwgdHJ1ZSkpCisgICAgICAgICAgICAgICAgV01MSGVs
cGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlTmFtZUVycm9yKTsK
KyAgICAgICAgfQorICAgIH0KK30KKworU3RyaW5nIFdNTFNldHZhckVsZW1lbnQ6Om5hbWUoKQor
eworICAgIHJldHVybiBtX25hbWU7IAorfQorCitTdHJpbmcgV01MU2V0dmFyRWxlbWVudDo6dmFs
dWUoKQoreworICAgIHJldHVybiBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoZ2V0QXR0cmli
dXRlKCJ2YWx1ZSIpLCBkb2N1bWVudCgpKTsKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01M
U2V0dmFyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1l
bnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFNldHZhckVsZW1lbnQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MU2V0dmFyRWxlbWVudF9o
CisjZGVmaW5lIFdNTFNldHZhckVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFNldHZhckVsZW1lbnQgOiBwdWJsaWMg
IFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MU2V0dmFyRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+V01MU2V0dmFyRWxlbWVudCgpOworCisgICAgdmly
dHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7IAorCisgICAgU3RyaW5nIG5h
bWUoKTsKKyAgICBTdHJpbmcgdmFsdWUoKTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9uYW1l
OworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRh
YmxlRWxlbWVudC5oIgorCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFRh
YmxlQ2VsbEVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVGFibGVSb3dFbGVtZW50LmgiCisjaW5j
bHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZS5oIgorI2luY2x1ZGUgIlJl
bmRlclRhYmxlQ2VsbC5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlU2VjdGlvbi5oIgorI2luY2x1
ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldN
TE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxUYWJsZUVsZW1lbnQ6OldNTFRh
YmxlRWxlbWVudChEb2N1bWVudCogZG9jKQorICAgIDogSFRNTFRhYmxlRWxlbWVudChkb2MpIAor
eworfQorCitXTUxUYWJsZUVsZW1lbnQ6On5XTUxUYWJsZUVsZW1lbnQoKQoreworfQorCit2b2lk
IFdNTFRhYmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBh
dHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gY29sdW1uc0F0dHIpIHsKKyAgICAgICAg
aW50IGNvbHVtbnMgPSAgYXR0ci0+dmFsdWUoKS50b0ludCgpOworICAgICAgICBpZiAoY29sdW1u
cyA8IDEpCisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJ
bnZhbGlkQ29sdW1uc051bWJlckZvclRhYmxlRXJycm9yKTsKKworICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IHRpdGxlQXR0cikgeworICAgICAgICBTdHJpbmcgdGl0bGUgPSBXTUxIZWxw
ZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSk7CisgICAgICAg
IGlmICh0aXRsZSAhPSBhdHRyLT52YWx1ZSgpKQorICAgICAgICAgICAgc2V0QXR0cmlidXRlKHRp
dGxlQXR0ciwgdGl0bGUpOworCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gYWxpZ25B
dHRyKSB7CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVl
KCkpKQorICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52
YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgIH0gZWxzZQorICAgICAgICBIVE1MVGFi
bGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKK30KKwordm9pZCBXTUxUYWJs
ZUVsZW1lbnQ6OmluaXQoKSAKK3sKKyAgICB1bnNpZ25lZCBpbnQgaWR4ID0gMDsKKyAgICBIVE1M
VGFibGVSb3dFbGVtZW50KiByb3cgPSAwOworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50KiBsYXN0
Q29sID0gMDsKKyAgICBSZWZQdHI8SFRNTFRhYmxlQ2VsbEVsZW1lbnQ+IG5ld0NlbGw7CisgICAg
UGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gY29sdW1uczsKKyAgICBFeGNlcHRpb25Db2RlIGVj
OworICAgIHVuc2lnbmVkIGFjdHVhbENvbE51bSA9IDA7CisgICAgdW5zaWduZWQgY29sTnVtID0g
Z2V0QXR0cmlidXRlKCJjb2x1bW5zIikudG9JbnQoKTsgCisgICAgaWYgKGNvbE51bSA8IDEpIAor
ICAgICAgICBjb2xOdW0gPSAxOworCisgICAgU3RyaW5nIGFsaWduID0gZ2V0QXR0cmlidXRlKCJh
bGlnbiIpOworCisgICAgUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4gcm93cyA9IGNoaWxkcmVu
KCk7CisgICAgdW5zaWduZWQgcm93TnVtID0gcm93cy0+bGVuZ3RoKCk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHJvd051bTsgKytpKSB7CisgICAgICAgIHJvdyA9IHN0YXRpY19jYXN0
PEhUTUxUYWJsZVJvd0VsZW1lbnQqPihyb3dzLT5pdGVtKGkpKTsKKyAgICAgICAgY29sdW1ucyA9
IHJvdy0+Y2VsbHMoKTsKKyAgICAgICAgYWN0dWFsQ29sTnVtID0gY29sdW1ucy0+bGVuZ3RoKCk7
CisKKyAgICAgICAgaWYgKGFjdHVhbENvbE51bSA+IGNvbE51bSkgeworICAgICAgICAgICAgbGFz
dENvbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Kj4oY29sdW1ucy0+aXRlbShj
b2xOdW0gLSAxKSk7CisKKyAgICAgICAgICAgIC8vIGFnZ3JlZ2F0ZSB0aGUgcmVkdW5kYW50IGNv
bHVtbnMgaW50byB0aGUgbGFzdCBjb2x1bW4KKyAgICAgICAgICAgIG5ld0NlbGwgPSBuZXcgSFRN
TFRhYmxlQ2VsbEVsZW1lbnQoSFRNTE5hbWVzOjp0ZFRhZywgZG9jdW1lbnQoKSk7CisgICAgICAg
ICAgICBpZiAobmV3Q2VsbCkKKyAgICAgICAgICAgICAgICBuZXdDZWxsLT5hZGRDaGlsZChsYXN0
Q29sLT5jbG9uZU5vZGUodHJ1ZSkpOworCisgICAgICAgICAgICBpZHggPSBjb2xOdW07CisgICAg
ICAgICAgICB3aGlsZSAoaWR4IDwgYWN0dWFsQ29sTnVtKQorICAgICAgICAgICAgICAgIG5ld0Nl
bGwtPmFwcGVuZENoaWxkKGNvbHVtbnMtPml0ZW0oaWR4KyspLT5jbG9uZU5vZGUodHJ1ZSksIGVj
KTsKKworICAgICAgICAgICAgLy8gcmVtb3ZlIHRoZSByZWR1bmRhbnQgY29sdW1ucworICAgICAg
ICAgICAgaWR4ID0gYWN0dWFsQ29sTnVtOworICAgICAgICAgICAgd2hpbGUgKGlkeCA+IGNvbE51
bSkKKyAgICAgICAgICAgICAgICByb3ctPmRlbGV0ZUNlbGwoLS1pZHgsIGVjKTsKKworICAgICAg
ICAgICAgcm93LT5yZXBsYWNlQ2hpbGQobmV3Q2VsbCwgbGFzdENvbCwgZWMpOworCisgICAgICAg
ICAgICAvLyBjb252ZXJ0IHRoZSBhbGlnbiBhdHRyaWJ1dGUgb2YgdGFibGUgZWxlbWVudCB0byB0
aGF0IG9mIHRkIGVsZW1lbnQKKyAgICAgICAgICAgIGNvbnZlcnRBbGlnbihjb2x1bW5zLCBjb2xO
dW0pOworICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbENvbE51bSA8IGNvbE51bSkgeworICAgICAg
ICAgICAgY29udmVydEFsaWduKGNvbHVtbnMsIGFjdHVhbENvbE51bSk7CisKKyAgICAgICAgICAg
IC8vIGFwcGVuZCBlbXB0eSBjZWxscworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpZHggPSBh
Y3R1YWxDb2xOdW07IGlkeCA8IGNvbE51bTsgKytpZHgpCisgICAgICAgICAgICAgICAgcm93LT5p
bnNlcnRDZWxsKC0xLCBlYyk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgLy8gY29udmVy
dCB0aGUgYWxpZ24gYXR0cmlidXRlIG9mIHRhYmxlIGVsZW1lbnQgdG8gdGhhdCBvZiB0ZCBlbGVt
ZW50CisgICAgICAgICAgICBjb252ZXJ0QWxpZ24oY29sdW1ucywgY29sTnVtKTsKKworICAgICAg
ICAvLyBzZXQgdGhlIGRlZmF1bHQgYWxpZ24gZm9yIGVhY2ggcm93CisgICAgICAgIHJvdy0+c2V0
QWxpZ24oImxlZnQiKTsKKworICAgIH0gLy8gZW5kIG9mIGZvciAoLi4uIAorCit9CisKK3ZvaWQg
V01MVGFibGVFbGVtZW50Ojpjb252ZXJ0QWxpZ24oUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4m
IGNvbHVtbnMsIHVuc2lnbmVkIGNlbGxOdW0pIAoreworICAgIEhUTUxUYWJsZUNlbGxFbGVtZW50
KiBjZWxsID0gMDsKKyAgICBTdHJpbmcgYWxpZ24gPSBnZXRBdHRyaWJ1dGUoImFsaWduIik7Cisg
ICAgZm9yICh1bnNpZ25lZCBpZHggPSAwOyBpZHggPCBjZWxsTnVtOyArK2lkeCkgeworICAgICAg
ICBjZWxsID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihjb2x1bW5zLT5pdGVt
KGlkeCkpOworICAgICAgICBpZiAoYWxpZ25baWR4XSA9PSAnUicgKQorICAgICAgICAgICAgY2Vs
bC0+c2V0QWxpZ24oInJpZ2h0Iik7CisgICAgICAgIGVsc2UgaWYgKGFsaWduW2lkeF0gPT0gJ0Mn
KQorICAgICAgICAgICAgY2VsbC0+c2V0QWxpZ24oImNlbnRlciIpOworICAgIH0gCit9CisKK30g
Ly9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVudC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS93bWwvV01MVGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFdNTFRhYmxlRWxlbWVudF9oCisjZGVmaW5lIFdNTFRhYmxlRWxlbWVudF9o
CisKKyNpbmNsdWRlICJIVE1MVGFibGVFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgRG9jdW1lbnQ7CisKK2NsYXNzIFdNTFRhYmxlRWxlbWVudCA6IHB1YmxpYyBIVE1M
VGFibGVFbGVtZW50eworcHVibGljOgorICAgIFdNTFRhYmxlRWxlbWVudChEb2N1bWVudCopOwor
ICAgIHZpcnR1YWwgfldNTFRhYmxlRWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNl
TWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworCisgICAgdm9pZCBpbml0KCk7Cisg
ICAgdm9pZCBjb252ZXJ0QWxpZ24oUGFzc1JlZlB0cjxIVE1MQ29sbGVjdGlvbj4mLCB1bnNpZ25l
ZCk7IAorfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxUYWdOYW1lcy5pbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUYWdOYW1lcy5pbgko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRhZ05hbWVzLmluCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDM5IEBACituYW1lc3BhY2U9IldNTCIKK25hbWVzcGFjZVVSST0iIgorZ3VhcmRG
YWN0b3J5V2l0aD0iRU5BQkxFKFdNTCkiCisKK2NhcmQKK2EKK2FjY2VzcworaGVhZAorbWV0YQor
dGVtcGxhdGUKK3dtbAorYnIKK3AKK3RhYmxlCit0ZAordHIKK2IKK2JpZworZW0KK2kKK3NtYWxs
CitzdHJvbmcKK3UKK2FuY2hvcgoraW1nCitkbworb25ldmVudAorcG9zdGZpZWxkCitnbworbm9v
cAorcHJldgorcmVmcmVzaAorZmllbGRzZXQKK2lucHV0CitvcHRncm91cAorb3B0aW9uCitzZWxl
Y3QKK3NldHZhcgordGltZXIKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRhc2tFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVt
ZW50LmgiCisKKyNpbmNsdWRlICJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQW5jaG9yRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRG9FbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25FbGVt
ZW50LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxl
bWVudC5oIgorI2luY2x1ZGUgIldNTFRlbXBsYXRlRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRv
a2VuaXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxO
YW1lczsKKwordGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IG4+IHN0YXRpYyB2b2lkIHJlbW92ZUZy
b21WZWN0b3IoVmVjdG9yPFQqLCBuPiAmIHZlYywgVCogaXRlbSkgCit7CisgICAgc2l6ZV90IHNp
emUgPSB2ZWMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkK
KyAgICAgICAgaWYgKHZlY1tpXSA9PSBpdGVtKSB7CisgICAgICAgICAgICB2ZWMucmVtb3ZlKGkp
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KK30KKyAKK1dNTFRhc2tFbGVtZW50OjpX
TUxUYXNrRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9j
KQorICAgIDogV01MRWxlbWVudCh0YWdOYW1lLCBkb2MpCit7Cit9CisKK1dNTFRhc2tFbGVtZW50
Ojp+V01MVGFza0VsZW1lbnQoKQoreworfQorCit2b2lkIFdNTFRhc2tFbGVtZW50OjpiaW5kSW50
cmluc2ljRXZlbnRJbk9uZXZlbnQoTm9kZSogb25ldmVudE5vZGUpCit7CisgICAgV01MSW50cmlu
c2ljRXZlbnRUeXBlIHR5cGUgPSBVbmtub3duOworICAgIFN0cmluZyB0eXBlQXR0cmkgPSBzdGF0
aWNfY2FzdDxXTUxFbGVtZW50Kj4ob25ldmVudE5vZGUpLT5nZXRBdHRyaWJ1dGUoInR5cGUiKTsK
KworICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKHR5cGVBdHRyaSkpIHsKKyAgICAg
ICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVm
ZXJlbmNlRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHR5cGVBdHRy
aSA9PSAib25lbnRlcmZvcndhcmQiKQorICAgICAgICB0eXBlID0gT25FbnRlckZvcndhcmQ7Cisg
ICAgZWxzZSBpZiAodHlwZUF0dHJpID09ICJvbmVudGVyYmFja3dhcmQiKQorICAgICAgICB0eXBl
ID0gT25FbnRlckJhY2t3YXJkOworICAgIGVsc2UgaWYgKHR5cGVBdHRyaSA9PSAib250aW1lciIp
CisgICAgICAgIHR5cGUgPSBPblRpbWVyOworICAgIGVsc2UgaWYgKHR5cGVBdHRyaSA9PSAib25w
aWNrIikKKyAgICAgICAgdHlwZSA9IE9uUGljazsKKworICAgIGlmICh0eXBlID09IFVua25vd24p
CisgICAgICAgIHJldHVybjsKKworICAgIFdNTEludHJpbnNpY0V2ZW50IGV2OworICAgIGV2LnRh
c2sgPSB0aGlzOworICAgIGlmIChoYXNUYWdOYW1lKGdvVGFnKSkgeworICAgICAgICBTdHJpbmcg
aHJlZiA9IGdldEF0dHJpYnV0ZSgiaHJlZiIpOworICAgICAgICBldi50YXJnZXRVUkkgPSBXTUxI
ZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoaHJlZiwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAg
IH0KKworICAgIC8vcmVnaXN0ZXIgaW50cmluc2ljIGV2ZW50IHRvIHRoZSBldmVudCBoYW5kbGVy
IG9mIHRoZSBvd25lciBvZiBvbmV2ZW50IGVsZW1lbnQgCisgICAgTm9kZSogcGFyZW50ID0gb25l
dmVudE5vZGUtPnBhcmVudE5vZGUoKTsKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2
SGFuZGxlciA9IDA7CisgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShjYXJkVGFnKSkgeworICAg
ICAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4o
cGFyZW50KTsKKyAgICAgICAgY2FyZC0+c2V0SGFzSW50cmluc2ljRXZlbnQodHJ1ZSk7CisgICAg
ICAgIGV2SGFuZGxlciA9IGNhcmQtPmV2ZW50SGFuZGxlcigpOworICAgIH0gZWxzZSBpZiAocGFy
ZW50LT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkgeworICAgICAgICBXTUxUZW1wbGF0ZUVsZW1l
bnQqIHRlbXBsID0gc3RhdGljX2Nhc3Q8V01MVGVtcGxhdGVFbGVtZW50Kj4ocGFyZW50KTsKKyAg
ICAgICAgdGVtcGwtPnNldEhhc0ludHJpbnNpY0V2ZW50KHRydWUpOworICAgICAgICBldkhhbmRs
ZXIgPSB0ZW1wbC0+ZXZlbnRIYW5kbGVyKCk7CisgICAgfSBlbHNlIGlmIChwYXJlbnQtPmhhc1Rh
Z05hbWUob3B0aW9uVGFnKSkgeworICAgICAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSBz
dGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4ocGFyZW50KTsKKyAgICAgICAgb3B0aW9uLT5z
ZXRIYXNJbnRyaW5zaWNFdmVudCh0cnVlKTsKKyAgICAgICAgZXZIYW5kbGVyID0gb3B0aW9uLT5l
dmVudEhhbmRsZXIoKTsKKyAgICB9CisKKyAgICBpZiAoZXZIYW5kbGVyKQorICAgICAgICBldkhh
bmRsZXItPnJlZ2lzdGVySW50cmluc2ljRXZlbnQodHlwZSwgZXYpOworfQorCit2b2lkIFdNTFRh
c2tFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkgCit7CisgICAgZm9yIChOb2Rl
KiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7IHBhcmVudDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnRO
b2RlKCkpIHsKKworICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGRvVGFnKSkgeworICAg
ICAgICAgICAgc3RhdGljX2Nhc3Q8V01MRG9FbGVtZW50Kj4ocGFyZW50KS0+cmVnaXN0ZXJUYXNr
KHRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAocGFyZW50LT5s
b2NhbE5hbWUoKSA9PSAib25ldmVudCIpIHsKKyAgICAgICAgICAgIC8vYmluZGluZyB0aGlzIHRh
c2sgd2l0aCBpbnRyaW5zaWMgZXZlbnQgc3BlY2lmaWVkIGJ5IG9uZXZlbnQgdHlwZQorICAgICAg
ICAgICAgYmluZEludHJpbnNpY0V2ZW50SW5PbmV2ZW50KHBhcmVudCk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoYW5jaG9yVGFnKSkg
eworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MQW5jaG9yRWxlbWVudCo+KHBhcmVudCktPnJl
Z2lzdGVyVGFzayh0aGlzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICB9
Cit9CisKK3ZvaWQgV01MVGFza0VsZW1lbnQ6OnJlZ2lzdGVyU2V0dmFyRWxlbWVudChXTUxTZXR2
YXJFbGVtZW50KiBlKSAKK3sKKyAgICBtX3NldHZhcnMuYXBwZW5kKGUpOworfQorCit2b2lkIFdN
TFRhc2tFbGVtZW50OjpyZW1vdmVTZXR2YXJFbGVtZW50KFdNTFNldHZhckVsZW1lbnQqIGUpIAor
eworICAgIHJlbW92ZUZyb21WZWN0b3IobV9zZXR2YXJzLCBlKTsKK30KKworYm9vbCBXTUxUYXNr
RWxlbWVudDo6aGFzU2V0dmFyKCkgY29uc3QgCit7CisgICAgcmV0dXJuICFtX3NldHZhcnMuaXNF
bXB0eSgpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRhc2tFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3dtbC9XTUxUYXNrRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwor
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBXTUxUYXNrRWxlbWVudF9oCisjZGVmaW5lIFdNTFRhc2tFbGVtZW50X2gK
KworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBXTUxTZXR2YXJFbGVtZW50OworCitjbGFzcyBXTUxUYXNrRWxlbWVudCA6IHB1YmxpYyBXTUxF
bGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxUYXNrRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKTsKKyAgICB2aXJ0dWFsIH5XTUxUYXNrRWxlbWVudCgp
OworICAKKyAgICB2aXJ0dWFsIHZvaWQgZXhlYyhFdmVudCosIFN0cmluZyB1cmkgPSBTdHJpbmco
KSkgPSAwIDsKKworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJTZXR2YXJFbGVtZW50KFdNTFNldHZhckVsZW1l
bnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlU2V0dmFyRWxlbWVudChXTUxTZXR2YXJFbGVt
ZW50Kik7CisgICAgYm9vbCBoYXNTZXR2YXIoKSBjb25zdDsKKworcHJvdGVjdGVkOgorICAgIFZl
Y3RvcjxXTUxTZXR2YXJFbGVtZW50Kj4gbV9zZXR2YXJzOworCitwcml2YXRlOgorICAgIHZvaWQg
YmluZEludHJpbnNpY0V2ZW50SW5PbmV2ZW50KE5vZGUqKTsKKworfTsKKworfSAvL25hbWVzcGFj
ZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGVtcGxhdGVFbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRl
bXBsYXRlRWxlbWVudC5oIgorCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgorI2luY2x1ZGUg
IlJlbmRlckFyZW5hLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJPYmplY3QuaCIKKyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxFbGVt
ZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhl
bHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgi
CisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxUZW1wbGF0ZUVsZW1lbnQ6OldNTFRlbXBsYXRl
RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAg
IDogV01MRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2V2bnRIYW5kbGVyKDApCisgICAg
LCBtX2hhc0ludHJpbnNpY0V2ZW50KGZhbHNlKSAKK3sKK30KKworV01MVGVtcGxhdGVFbGVtZW50
Ojp+V01MVGVtcGxhdGVFbGVtZW50KCkgCit7CisgICAgaWYgKG1fZXZudEhhbmRsZXIpIHsKKyAg
ICAgICAgZGVsZXRlIG1fZXZudEhhbmRsZXI7CisgICAgICAgIG1fZXZudEhhbmRsZXIgPSAwOwor
ICAgIH0KKworfQorCit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIFdNTEludHJpbnNpY0V2ZW50VHlwZSBl
dHlwZSA9IFVua25vd247CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG9uZW50ZXJmb3J3YXJk
QXR0cikKKyAgICAgICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gb25lbnRlcmJhY2t3YXJkQXR0cikKKyAgICAgICAgZXR5cGUgPSBPbkVudGVy
QmFja3dhcmQ7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9udGltZXJBdHRyKQorICAg
ICAgICBldHlwZSA9IE9uVGltZXI7CisgICAgCisgICAgLy8gcmVnaXN0ZXIgaW50cmluc2ljIGV2
ZW50IHRvIHRlbXBsYXRlIAorICAgIGlmIChldHlwZSAhPSBVbmtub3duKSB7CisKKyAgICAgICAg
aWYgKCFtX2V2bnRIYW5kbGVyKSAKKyAgICAgICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7
CisgICAgICAgIFF1YWxpZmllZE5hbWUgcU5hbWUoImdvIiwgImdvIiwgIiIpOworICAgICAgICBF
bGVtZW50KiBnbyA9IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KHFOYW1lLCBk
b2N1bWVudCgpLCBmYWxzZSk7IAorICAgICAgICBTdHJpbmcgaHJlZiA9IFdNTEhlbHBlcjo6c3Vi
c3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLCAiZXNjYXBlIik7CisgICAg
ICAgIGdvLT5zZXRBdHRyaWJ1dGVOUygiIiwgImhyZWYiLCBocmVmLCBlYyk7CisKKyAgICAgICAg
V01MSW50cmluc2ljRXZlbnQgZXY7CisgICAgICAgIGV2LnRhc2sgPSBzdGF0aWNfY2FzdDxXTUxH
b0VsZW1lbnQqPihnbyk7CisgICAgICAgIGV2LnRhcmdldFVSSSA9IGhyZWY7IAorCisgICAgICAg
IHNldEhhc0ludHJpbnNpY0V2ZW50KHRydWUpOworICAgICAgICBtX2V2bnRIYW5kbGVyLT5yZWdp
c3RlckludHJpbnNpY0V2ZW50KGV0eXBlLCBldik7CisgICAgfQorfQorCitXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXIqIFdNTFRlbXBsYXRlRWxlbWVudDo6ZXZlbnRIYW5kbGVyKCkKK3sKKyAgICBp
ZiAobV9oYXNJbnRyaW5zaWNFdmVudCAmJiAhbV9ldm50SGFuZGxlcikKKyAgICAgICAgbV9ldm50
SGFuZGxlciA9IG5ldyBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsKKworICAgIHJldHVybiBt
X2V2bnRIYW5kbGVyOworfQorCit2b2lkIFdNTFRlbXBsYXRlRWxlbWVudDo6c2V0SGFzSW50cmlu
c2ljRXZlbnQoYm9vbCBoYXNFdnQpCit7CisgICAgbV9oYXNJbnRyaW5zaWNFdmVudCA9IGhhc0V2
dDsKK30KKworYm9vbCBXTUxUZW1wbGF0ZUVsZW1lbnQ6Omhhc0ludHJpbnNpY0V2ZW50KCkKK3sK
KyAgICByZXR1cm4gbV9oYXNJbnRyaW5zaWNFdmVudDsKK30KKwordm9pZCBXTUxUZW1wbGF0ZUVs
ZW1lbnQ6OnJlZ2lzdGVyRG9FbGVtZW50KFdNTERvRWxlbWVudCogZG9FbGVtdCkKK3sKKyAgICBp
ZiAoZG9FbGVtdCkgeworICAgICAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0ZXJhdG9yIGl0
ID0gbV9kb1ZlY3MuYmVnaW4oKTsKKyAgICAgICAgV01MRG9FbGVtZW50KiB0bXBEbyA9IDA7Cisg
ICAgICAgIHdoaWxlIChpdCAhPSBtX2RvVmVjcy5lbmQoKSkgeworICAgICAgICAgICAgdG1wRG8g
PSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPigqaXQrKyk7CisgICAgICAgICAgICBpZiAodG1w
RG8tPmRvTmFtZSgpID09IGRvRWxlbXQtPmRvTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgV01M
SGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoU2FtZU5hbWVEb0VsZW1lbnRzRXJyb3Ip
OworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg
ICAgICBtX2RvVmVjcy5hcHBlbmQoZG9FbGVtdCk7CisgICAgfQorfQorCitWZWN0b3I8V01MRG9F
bGVtZW50Kj4gV01MVGVtcGxhdGVFbGVtZW50OjpnZXREb0VsZW1lbnRzKCkKK3sKKyAgICByZXR1
cm4gbV9kb1ZlY3M7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRlbXBsYXRlRWxlbWVudC5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGVtcGxhdGVFbGVtZW50LmgJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAt
MTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTFRlbXBsYXRlRWxlbWVudF9oCisjZGVm
aW5lIFdNTFRlbXBsYXRlRWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgV01MVGFza0VsZW1lbnQ7CitjbGFzcyBXTUxEb0VsZW1lbnQ7CisKK2NsYXNzIFdN
TFRlbXBsYXRlRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxU
ZW1wbGF0ZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgdmly
dHVhbCB+V01MVGVtcGxhdGVFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhh
bmRsZXIqIGV2ZW50SGFuZGxlcigpOworICAgIGJvb2wgaGFzSW50cmluc2ljRXZlbnQoKTsKKyAg
ICB2b2lkIHNldEhhc0ludHJpbnNpY0V2ZW50KGJvb2wpOworCisgICAgdm9pZCByZWdpc3RlckRv
RWxlbWVudChXTUxEb0VsZW1lbnQqKTsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gZ2V0RG9F
bGVtZW50cygpOworcHJpdmF0ZToKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIG1fZXZu
dEhhbmRsZXI7CisgICAgYm9vbCBtX2hhc0ludHJpbnNpY0V2ZW50OworICAgIFZlY3RvcjxXTUxE
b0VsZW1lbnQqPiBtX2RvVmVjczsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3dtbC9XTUxUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxU
ZXh0LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRleHQuY3BwCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IldNTFRleHQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVy
LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
V01MVGV4dDo6V01MVGV4dChEb2N1bWVudCogZG9jLCBjb25zdCBTdHJpbmcmIHRleHQpCisgICAg
OiBUZXh0KGRvYywgdGV4dCkKK3sKK30KKworV01MVGV4dDo6fldNTFRleHQoKQoreworfQorCit2
b2lkIFdNTFRleHQ6OnVwZGF0ZURhdGFJZk5lZWRlZCgpIAoreworICAgIFBhZ2UgKnBhZ2UgPSBk
b2N1bWVudCgpLT5wYWdlKCk7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAg
ICBpZiAobGVuZ3RoKCkgPiAxICYmIHBhZ2UtPndtbFBhZ2VTdGF0ZSgpLT5oYXNWYXJpYWJsZXMo
KSkgeworICAgICAgICBTdHJpbmcgdGV4dCA9IGRhdGEoKTsKKyAgICAgICAgaWYgKCF0ZXh0Lmlt
cGwoKS0+Y29udGFpbnNPbmx5V2hpdGVzcGFjZSgpKSB7CisgICAgICAgICAgICB0ZXh0ID0gV01M
SGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHRleHQsIGRvY3VtZW50KCkpOworCisgICAgICAgICAg
ICBFeGNlcHRpb25Db2RlIGU7CisgICAgICAgICAgICBzZXREYXRhKHRleHQsIGUpOworICAgICAg
ICB9CisgICAgfQorfQorCisKK30gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRl
eHQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUZXh0LmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3dtbC9XTUxUZXh0LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDIgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaWZuZGVmIFdNTFRleHRfaAorI2RlZmluZSBXTUxUZXh0X2gKKworI2luY2x1ZGUgIlRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgV01M
VGV4dCA6IHB1YmxpYyBUZXh0IHsKK3B1YmxpYzoKKyAgICBXTUxUZXh0KERvY3VtZW50KiwgY29u
c3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB+V01MVGV4dCgpOworCisgICAgdm9pZCB1cGRhdGVE
YXRhSWZOZWVkZWQoKTsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2Vi
Q29yZS93bWwvV01MVGltZXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9X
TUxUaW1lckVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGltZXJF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisKKyNpbmNsdWRlICJXTUxD
YXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTEludHJp
bnNpY0V2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01M
UGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxUaW1lckVsZW1lbnQ6OldN
TFRpbWVyRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9j
KQorICAgIDogV01MRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgICAsIG1fY2FyZCgwKQorICAg
ICAgLCBtX3RpbWVyKHRoaXMsICZXTUxUaW1lckVsZW1lbnQ6OnRpbWVyRmlyZWQpCit7Cit9CisK
K1dNTFRpbWVyRWxlbWVudDo6fldNTFRpbWVyRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgV01MVGlt
ZXJFbGVtZW50Ojp0aW1lckZpcmVkKFRpbWVyPFdNTFRpbWVyRWxlbWVudD4qKQoreworICAgIGlm
ICghbV9jYXJkIHx8ICFkb2N1bWVudCgpLT5wYWdlKCkpIAorICAgICAgICByZXR1cm47CisKKyAg
ICAvL3doZW4gdGhlIHRpbWVyIGV4cGlyZXMsIHNldCB0aGUgbmFtZSB2YXJpYWxiZSBvZiB0aW1l
ciB0byAnMCcKKyAgICBpZiAoIW1fbmFtZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgbV92YWx1ZSA9
ICIwIjsKKyAgICAgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCkp
OworICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zdG9yZVZhcmlh
YmxlKG1fbmFtZSwgbV92YWx1ZSk7CisgICAgfQorCisgICAgV01MSW50cmluc2ljRXZlbnRUeXBl
IGV0eXBlID0gT25UaW1lcjsKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2SGFuZGxl
ciA9IG1fY2FyZC0+ZXZlbnRIYW5kbGVyKCk7CisgICAgYm9vbCBoYXNJbnRyaW5zaWNFdmVudCA9
ICBmYWxzZTsKKyAgICBpZiAoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFzSW50cmluc2ljRXZl
bnQoZXR5cGUpKQorICAgICAgICBoYXNJbnRyaW5zaWNFdmVudCA9IHRydWU7CisgICAgZWxzZSBp
ZiAobV9jYXJkLT50ZW1wbGF0ZUVsZW1lbnQoKSkgeworICAgICAgICBldkhhbmRsZXIgPSBtX2Nh
cmQtPnRlbXBsYXRlRWxlbWVudCgpLT5ldmVudEhhbmRsZXIoKTsKKyAgICAgICAgaWYgKGV2SGFu
ZGxlciAmJiBldkhhbmRsZXItPmhhc0ludHJpbnNpY0V2ZW50KGV0eXBlKSkKKyAgICAgICAgICAg
IGhhc0ludHJpbnNpY0V2ZW50ID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoaGFzSW50cmluc2lj
RXZlbnQpCisgICAgeworICAgICAgICBldkhhbmRsZXItPnRyaWdnZXJJbnRyaW5zaWNFdmVudChl
dHlwZSk7CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVyRWxlbWVudDo6c3RhcnQoaW50IGludGVy
dmFsKQoreworICAgIGlmIChtX2NhcmQgJiYgIW1fdGltZXIuaXNBY3RpdmUoKSkgeworICAgICAg
ICAKKyAgICAgICAgaWYgKChpbnRlcnZhbCA8PSAwKSAmJiAhbV9uYW1lLmlzRW1wdHkoKSkgewor
ICAgICAgICAgICAgU3RyaW5nIHRpbWVvdXQgPSBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VT
dGF0ZSgpLT5nZXRWYXJpYmFsZShtX25hbWUpOyAKKyAgICAgICAgICAgIGludGVydmFsID0gdGlt
ZW91dC50b0ludCgpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGludGVydmFsIDw9IDApCisg
ICAgICAgICAgICBpbnRlcnZhbCA9IG1fdmFsdWUudG9JbnQoKTsKKworICAgICAgICBpZiAoaW50
ZXJ2YWwgPiAwKQorICAgICAgICAgICAgbV90aW1lci5zdGFydE9uZVNob3QoaW50ZXJ2YWwvMTAu
MCk7CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVyRWxlbWVudDo6c3RvcCgpCit7CisgICAgaWYg
KG1fdGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV90aW1lci5zdG9wKCk7Cit9CisKK3ZvaWQg
V01MVGltZXJFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0
dHIpIAoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsKKyAgICAgICAgaWYg
KCFXTUxIZWxwZXI6OmlzVmFsaWRWYXJpYWJsZU5hbWUoYXR0ci0+dmFsdWUoKSkpCisgICAgICAg
ICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVO
YW1lRXJyb3IpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX25hbWUgPSBhdHRyLT52YWx1
ZSgpOworCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVBdHRyKQorICAgICAg
ICBtX3ZhbHVlID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRv
Y3VtZW50KCkpOworfQorCit2b2lkIFdNTFRpbWVyRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJlZShi
b29sIGRlZXApCit7CisgICAgLy8gVGhlIHZhbHVlIG9mIHRpbWVvdXQgbXVzdCBiZSBhIHBvc2l0
aXZlIGludGVncmFsIG51bWJlciwgb3IgaWdub3JlIGl0CisgICAgaWYgKG1fdmFsdWUudG9JbnQo
KSA+IDApIHsKKyAgICAgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7IHBhcmVu
dDsgcGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChwYXJl
bnQtPmhhc1RhZ05hbWUoY2FyZFRhZykpIHsKKyAgICAgICAgICAgICAgICBtX2NhcmQgPSBzdGF0
aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgICAgICAgICAgbV9jYXJk
LT5zZXRJbnRyaW5zaWNFdmVudFRpbWVyKHRoaXMpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdNTFRpbWVyRWxlbWVu
dDo6c3RvcmVJbnRlcnZhbFRvUGFnZVN0YXRlKCkKK3sKKyAgICBpZiAobV90aW1lci5pc0FjdGl2
ZSgpKSB7CisgICAgICAgIGludCBpbnRlcnZhbCA9IHN0YXRpY19jYXN0PGludD4obV90aW1lci5u
ZXh0RmlyZUludGVydmFsKCkpKjEwOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBTdHJpbmc6Om51
bWJlcihpbnRlcnZhbCk7CisKKyAgICAgICAgUGFnZSAqcGFnZSA9IGRvY3VtZW50KCktPnBhZ2Uo
KTsKKyAgICAgICAgaWYgKHBhZ2UpIAorICAgICAgICAgICAgcGFnZS0+d21sUGFnZVN0YXRlKCkt
PnN0b3JlVmFyaWFibGUobV9uYW1lLCB2YWx1ZSk7CisgICAgfQorfQorCit9CkluZGV4OiBXZWJD
b3JlL3dtbC9XTUxUaW1lckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxU
aW1lckVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRpbWVyRWxlbWVu
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUaW1lckVs
ZW1lbnRfaAorI2RlZmluZSBXTUxUaW1lckVsZW1lbnRfaAorCisjaW5jbHVkZSAiVGltZXIuaCIK
KyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
V01MQ2FyZEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIAorY2xhc3MgV01MVGltZXJF
bGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQgeworcHVibGljOgorICAgIFdNTFRpbWVyRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwg
fldNTFRpbWVyRWxlbWVudCgpOworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShi
b29sIGRlZXApOworCisgICAgdm9pZCB0aW1lckZpcmVkKFRpbWVyPFdNTFRpbWVyRWxlbWVudD4q
KTsKKyAgICB2b2lkIHN0YXJ0KGludCBpbnRlcnZhbCA9IC0xKTsKKyAgICB2b2lkIHN0b3AoKTsK
KyAgICB2b2lkIHN0b3JlSW50ZXJ2YWxUb1BhZ2VTdGF0ZSgpOworCitwcml2YXRlOgorICAgIFdN
TENhcmRFbGVtZW50KiBtX2NhcmQ7CisgICAgU3RyaW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV92
YWx1ZTsKKyAgICBUaW1lcjxXTUxUaW1lckVsZW1lbnQ+IG1fdGltZXI7Cit9OworCit9IC8vbmFt
ZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MVG9rZW5pemVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysg
V2ViQ29yZS93bWwvV01MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzNjIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisK
KyNpbmNsdWRlICJDYWNoZS5oIgorI2luY2x1ZGUgIkNhY2hlZFNjcmlwdC5oIgorI2luY2x1ZGUg
IkNEQVRBU2VjdGlvbi5oIgorI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJDb21tZW50
LmgiCisjaW5jbHVkZSAiRG9jTG9hZGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNs
dWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUeXBlLmgiCisjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVM
b2FkZXIuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5o
IgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxTY3JpcHRFbGVtZW50Lmgi
CisjaW5jbHVkZSAiSFRNTFN0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVNlY3Rp
b25FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIk5vZGVM
aXN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlByb2Nlc3NpbmdJbnN0cnVjdGlv
bi5oIgorI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorI2lmIFVTRShRWE1MU1RSRUFN
KQorI2luY2x1ZGUgPFFEZWJ1Zz4KKyNlbHNlCisjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgor
I2luY2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIEVOQUJMRShYU0xU
KQorI2luY2x1ZGUgPGxpYnhzbHQveHNsdC5oPgorI2VuZGlmCisKKyNpZiBFTkFCTEUoU1ZHKQor
I2luY2x1ZGUgIlNWR05hbWVzLmgiCisjaW5jbHVkZSAiU1ZHU3R5bGVFbGVtZW50LmgiCisjaW5j
bHVkZSAiWExpbmtOYW1lcy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3RhdGUu
aCIKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3Rvcnku
aCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2lu
Y2x1ZGUgIldNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQRWxlbWVudC5oIgorI2lu
Y2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUZXh0LmgiCisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IEV2ZW50TmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworCisvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitXTUxUb2tlbml6ZXI6OldNTFRva2VuaXplcihEb2N1
bWVudCogX2RvYywgRnJhbWVWaWV3KiBfdmlldykKKzogWE1MVG9rZW5pemVyKF9kb2MsIF92aWV3
KSAKK3sKKyAgICBzZXRDdXJyZW50Tm9kZShfZG9jKTsKKyAgICBtX2Vycm9yQ29kZSA9IE5vRXJy
b3I7CisgICAgIAorICAgIFdNTEhlbHBlcjo6c2V0VG9rZW5pemVyKHRoaXMpOworfQorCisKK1dN
TFRva2VuaXplcjo6fldNTFRva2VuaXplcigpCit7CisgICAgV01MSGVscGVyOjpzZXRUb2tlbml6
ZXIoMCk7Cit9CisKK2Jvb2wgV01MVG9rZW5pemVyOjp3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJp
bmcmIHMsIGJvb2wgLyphcHBlbmREYXRhKi8pIAoreworI2lmICFVU0UoUVhNTFNUUkVBTSkKKyAg
ICBYTUxUb2tlbml6ZXI6OndyaXRlKHMsIHRydWUpOworICAgIHJldHVybiB0cnVlOworI2Vsc2UK
KworICAgIHN0YXRpYyBRWG1sU3RyZWFtUmVhZGVyOjpUb2tlblR5cGUgb2xkVHlwZSA9IFFYbWxT
dHJlYW1SZWFkZXI6Ok5vVG9rZW47CisKKyAgICBRWG1sU3RyZWFtUmVhZGVyICZzdHJlYW0gPSB4
bWxTdHJlYW1SZWFkZXIoKTsKKyAgICBzdHJlYW0uYWRkRGF0YShRU3RyaW5nKHMudG9TdHJpbmco
KSkpOworCisgICAgd2hpbGUgKCFzdHJlYW0uYXRFbmQoKSkgeworICAgICAgICBzdHJlYW0ucmVh
ZE5leHQoKTsKKyAgICAgICAgc3dpdGNoIChzdHJlYW0udG9rZW5UeXBlKCkpIHsKKyAgICAgICAg
ICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnREb2N1bWVudDoKKyAgICAgICAgICAgIGNh
c2UgUVhtbFN0cmVhbVJlYWRlcjo6RW5kRG9jdW1lbnQ6CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlN0YXJ0RWxlbWVudDoKKyAgICAg
ICAgICAgICAgICBpZiAob2xkVHlwZSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpEVEQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgaGFuZGxlV01MRXJyb3IoRG9jVHlwZURlY2xhcmF0aW9uTWlzc0Vycm9y
KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICBXTUxQYXJzZVN0YXJ0RWxlbWVudCgpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpFbmRFbGVtZW50OiAK
KyAgICAgICAgICAgICAgICBXTUxQYXJzZUVuZEVsZW1lbnQoKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6Q2hhcmFjdGVyczogewor
ICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uaXNDREFUQSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgZXhpdFRleHQoKTsKKyAgICAgICAgICAgICAgICAgICAgICBSZWZQdHI8Tm9kZT4gbmV3
Tm9kZSA9IG5ldyBDREFUQVNlY3Rpb24oZG9jdW1lbnQoKSwgc3RyZWFtLnRleHQoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFjdXJyZW50Tm9kZSgpLT5hZGRDaGlsZChuZXdOb2RlLmdl
dCgpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgICAgaWYgKGZyYW1lVmlldygpICYmICFuZXdOb2RlLT5hdHRhY2hlZCgpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgICBuZXdOb2RlLT5hdHRhY2goKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUoKS0+aXNUZXh0Tm9kZSgp
IHx8IGVudGVyVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBFeGNlcHRpb25Db2Rl
IGVjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIFdNTFRleHQqIHRleHQgPSBzdGF0aWNf
Y2FzdDxXTUxUZXh0Kj4oY3VycmVudE5vZGUoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0LT5hcHBlbmREYXRhKHN0cmVhbS50ZXh0KCksIGVjKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHQtPnVwZGF0ZURhdGFJZk5lZWRlZCgpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoIWN1cnJlbnROb2RlKCktPmF0dGFjaGVkKCkpIAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGN1cnJlbnROb2RlKCktPmF0dGFjaCgpOworCisgICAgICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVudGl0eVJlZmVyZW5jZTogewor
ICAgICAgICAgICAgICAgIFFTdHJpbmcgZW50aXR5ID0gc3RyZWFtLm5hbWUoKS50b1N0cmluZygp
OworICAgICAgICAgICAgICAgIFVDaGFyIGMgPSBkZWNvZGVOYW1lZEVudGl0eShlbnRpdHkudG9V
dGY4KCkuY29uc3REYXRhKCkpOworCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnROb2RlKCkt
PmlzVGV4dE5vZGUoKSB8fCBlbnRlclRleHQoKSkgeworICAgICAgICAgICAgICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgICAgICAgICAgU3RyaW5nIHN0cigmYywgMSk7
CisgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PFRleHQqPihjdXJyZW50Tm9kZSgpKS0+
YXBwZW5kRGF0YShzdHIsIGVjKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6
OkNvbW1lbnQ6CisgICAgICAgICAgICAgICAgcGFyc2VDb21tZW50KCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OlByb2Nlc3NpbmdJ
bnN0cnVjdGlvbjoKKyAgICAgICAgICAgICAgICBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVh
ZGVyOjpEVEQ6CisgICAgICAgICAgICAgICAgb2xkVHlwZSA9IFFYbWxTdHJlYW1SZWFkZXI6OkRU
RDsKKyAgICAgICAgICAgICAgICBwYXJzZUR0ZCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDogeworICAgICAgICAgICAgICAgIGlmIChzdHJlYW0uZXJyb3Io
KSAhPSBRWG1sU3RyZWFtUmVhZGVyOjpQcmVtYXR1cmVFbmRPZkRvY3VtZW50RXJyb3IpIHsKKyAg
ICAgICAgICAgICAgICAgICAgRXJyb3JUeXBlIHR5cGUgPSAoc3RyZWFtLmVycm9yKCkgPT0gUVht
bFN0cmVhbVJlYWRlcjo6Tm90V2VsbEZvcm1lZEVycm9yKSA/CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZmF0YWwgOiB3YXJuaW5nOworICAgICAgICAgICAgICAgICAgICBo
YW5kbGVFcnJvcih0eXBlLCBxUHJpbnRhYmxlKHN0cmVhbS5lcnJvclN0cmluZygpKSwgbGluZU51
bWJlcigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5OdW1iZXIoKSk7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFr
OworCisgICAgICAgIH0gLy8gZW5kIG9mIHN3aXRjaCAoLi4uCisKKyAgICAgICAgaWYgKGhhc0Vy
cm9yKCkpIHsKKyAgICAgICAgICAgIGhhbmRsZVdNTEVycm9yKCk7CisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IC8vIGVuZCBvZiB3aGlsZSAoLi4uCisKKyAgICBy
ZXR1cm4gdHJ1ZTsKKyNlbmRpZgorCit9CisKK3ZvaWQgV01MVG9rZW5pemVyOjp1cGRhdGVBdHRy
c0lmTmVlZGVkKEVsZW1lbnQqIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgbG9jYWxOYW1lKQorewor
ICAgIC8vIHVwZGF0ZSBhdHJyaWJ1dGVzIG9mIG9wdG9pbiBlbGVtZW50IGlmIG5lZWRlZAorICAg
IGlmIChsb2NhbE5hbWUgPT0gIm9wdGlvbiIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTE9wdGlv
bkVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlQXR0cnNJZk5lZWRlZCgpOworICAgIGVsc2UgaWYg
KGxvY2FsTmFtZSA9PSAic2VsZWN0IikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01MU2VsZWN0RWxl
bWVudCo+KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxzZSBpZiAobG9j
YWxOYW1lID09ICJpbnB1dCIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTElucHV0RWxlbWVudCo+
KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxzZSBpZiAobG9jYWxOYW1l
ID09ICJpbWciKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxJbWFnZUVsZW1lbnQqPihlbGVtZW50
KS0+dXBkYXRlQXR0cnNJZk5lZWRlZCgpOworICAgIGVsc2UgaWYgKGxvY2FsTmFtZSA9PSAicCIp
CisgICAgICAgIHN0YXRpY19jYXN0PFdNTFBFbGVtZW50Kj4oZWxlbWVudCktPnVwZGF0ZUF0dHJz
SWZOZWVkZWQoKTsKK30KKworI2lmIFVTRShRWE1MU1RSRUFNKQordm9pZCBXTUxUb2tlbml6ZXI6
OldNTFBhcnNlU3RhcnRFbGVtZW50KCkKK3sKKyAgICBleGl0VGV4dCgpOworCisgICAgUVhtbFN0
cmVhbVJlYWRlciAmc3RyZWFtID0geG1sU3RyZWFtUmVhZGVyKCk7CisgICAgUVN0cmluZyBsb2Nh
bE5hbWUgPSBzdHJlYW0ubmFtZSgpLnRvU3RyaW5nKCk7CisgICAgUVN0cmluZyB1cmkgICAgICAg
PSBzdHJlYW0ubmFtZXNwYWNlVXJpKCkudG9TdHJpbmcoKTsKKyAgICBRU3RyaW5nIHByZWZpeCAg
ICA9IHN0cmVhbS5xdWFsaWZpZWROYW1lKCkudG9TdHJpbmcoKTsKKworICAgIEFTU0VSVChkb2N1
bWVudCgpLT5wYWdlKCkpOworICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VT
dGF0ZSgpKTsKKyAgICBpZiAobG9jYWxOYW1lID09ICJhY2Nlc3MiKQorICAgICAgICBkb2N1bWVu
dCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zZXROZWVkQ2hlY2tEZWNrQWNjZXNzKHRydWUp
OworCisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUXVhbGlmaWVkTmFtZSBxTmFtZShw
cmVmaXgsIGxvY2FsTmFtZSwgdXJpKTsKKyAgICBFbGVtZW50KiBuZXdFbGVtZW50ID0gV01MRWxl
bWVudEZhY3Rvcnk6OmNyZWF0ZVdNTEVsZW1lbnQocU5hbWUsIGRvY3VtZW50KCksIHRydWUpIDsK
KworICAgIFFYbWxTdHJlYW1BdHRyaWJ1dGVzIGF0dHJzID0gc3RyZWFtLmF0dHJpYnV0ZXMoKTsK
KyAgICAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGF0dHJzLmNvdW50KCk7ICsraSkgeworICAg
ICAgICBjb25zdCBRWG1sU3RyZWFtQXR0cmlidXRlICZhdHRyID0gYXR0cnNbaV07CisgICAgICAg
IFN0cmluZyBhdHRyTG9jYWxOYW1lID0gYXR0ci5uYW1lKCk7CisgICAgICAgIFN0cmluZyBhdHRy
VmFsdWUgICAgID0gYXR0ci52YWx1ZSgpOworICAgICAgICBTdHJpbmcgYXR0clVSSSAgICAgICA9
IGF0dHIubmFtZXNwYWNlVXJpKCkuaXNFbXB0eSgpID8gU3RyaW5nKCkgOiBTdHJpbmcoYXR0ci5u
YW1lc3BhY2VVcmkoKSk7CisgICAgICAgIFN0cmluZyBhdHRyUU5hbWUgICAgID0gYXR0ci5xdWFs
aWZpZWROYW1lKCk7CisKKyAgICAgICAgbmV3RWxlbWVudC0+c2V0QXR0cmlidXRlTlMoYXR0clVS
SSwgYXR0clFOYW1lLCBhdHRyVmFsdWUsIGVjKTsKKyAgICB9CisKKyAgICB1cGRhdGVBdHRyc0lm
TmVlZGVkKG5ld0VsZW1lbnQsIGxvY2FsTmFtZSk7CisKKyAgICBpZiAoIWN1cnJlbnROb2RlKCkt
PmFkZENoaWxkKG5ld0VsZW1lbnQpKSB7CisgICAgICAgIHN0b3BQYXJzaW5nKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisgICAgc2V0Q3VycmVudE5vZGUobmV3RWxlbWVudCk7CisKKyAgICBp
ZiAoIW5ld0VsZW1lbnQtPmF0dGFjaGVkKCkpCisgICAgICAgIG5ld0VsZW1lbnQtPmF0dGFjaCgp
OyAKK30KKwordm9pZCBXTUxUb2tlbml6ZXI6OldNTFBhcnNlRW5kRWxlbWVudCgpIAoreworICAg
IGV4aXRUZXh0KCk7CisKKyAgICBOb2RlKiBuID0gY3VycmVudE5vZGUoKTsKKworICAgIFJlZlB0
cjxOb2RlPiBwYXJlbnQgPSBuLT5wYXJlbnROb2RlKCk7CisgICAgbi0+ZmluaXNoUGFyc2luZ0No
aWxkcmVuKCk7CisKKyAgICBzZXRDdXJyZW50Tm9kZShwYXJlbnQuZ2V0KCkpOworfQorI2VuZGlm
CisKK3ZvaWQgV01MVG9rZW5pemVyOjpmaW5pc2goKSAKK3sKKyAgICBpZiAoaGFzRXJyb3IoKSB8
fCAhZG9jdW1lbnQoKSB8fCAhZG9jdW1lbnQoKS0+cGFnZSgpKSB7CisgICAgICAgIFhNTFRva2Vu
aXplcjo6ZmluaXNoKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBQYWdlKiBwYWdl
ID0gZG9jdW1lbnQoKS0+cGFnZSgpOworICAgIEFTU0VSVChwYWdlLT53bWxQYWdlU3RhdGUoKSk7
CisgICAgaWYgKCFwYWdlLT53bWxQYWdlU3RhdGUoKS0+aXNEZWNrQWNjZXNzaWJsZSgpKSB7Cisg
ICAgICAgIFhNTFRva2VuaXplcjo6ZmluaXNoKCk7CisgICAgICAgIHBhZ2UtPmdvQmFjaygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gbm90aWZ5IHRoZSBleGlzdGFuY2Ugb2Yg
dGVtcGxhdGUgdG8gYWxsIHRoZSBjYXJkcyBvZiBjdXJyZW50IGRlY2sKKyAgICBXTUxIZWxwZXI6
OnJlZ2lzdGVyVGVtcGxhdGVUb0NhcmRzKGRvY3VtZW50KCkpOworCisgICAgLy8gZGV0ZXJtaW5l
IHRoZSBkZXN0aW5hdGlvbiBjYXJkCisgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSBXTUxIZWxw
ZXI6OnNldERlc3RpbmF0aW9uQ2FyZChkb2N1bWVudCgpKTsKKworICAgIGlmIChjYXJkKSB7Cisg
ICAgICAgIC8vIHNoYWRvdyB0aGUgZGVjay1sZXZlbCBkbyBpZiBuZWVkZWQKKyAgICAgICAgY2Fy
ZC0+c2hhZG93RG9FbGVtZW50SWZOZWVkZWQoKTsKKworICAgICAgICAvL2hhbmRsZSB0aGUgaW50
cmluc2ljIGV2ZW50CisgICAgICAgIGNhcmQtPmhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVkZWQo
KTsKKworICAgICAgICBjYXJkLT51cGRhdGVUYWJsZUVsZW1lbnQoKTsKKyAgICB9CisKKyAgICBw
YWdlLT53bWxQYWdlU3RhdGUoKS0+c2V0TmVlZENoZWNrRGVja0FjY2VzcyhmYWxzZSk7CisKKyAg
ICByZXBvcnRFcnJvcihOb0Vycm9yKTsKKworICAgIFhNTFRva2VuaXplcjo6ZmluaXNoKCk7Cit9
CisKK3ZvaWQgV01MVG9rZW5pemVyOjpyZXBvcnRFcnJvcihXTUxFcnJvckNvZGUgZXJyb3IpCit7
CisgICAgbV9lcnJvckNvZGUgPSBlcnJvcjsKK30KKworYm9vbCBXTUxUb2tlbml6ZXI6Omhhc0Vy
cm9yKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1fZXJyb3JDb2RlICE9IE5vRXJyb3IpOworfQor
IAordm9pZCBXTUxUb2tlbml6ZXI6OmhhbmRsZVdNTEVycm9yKFdNTEVycm9yQ29kZSBlcnJvckNv
ZGUpCit7CisgICAgaWYgKGVycm9yQ29kZSAhPSBOb0Vycm9yKQorICAgICAgICBtX2Vycm9yQ29k
ZSA9IGVycm9yQ29kZTsKKworICAgIGNvbnN0IGNoYXIqIGVyck1zZyA9IDA7CisgICAgc3dpdGNo
IChtX2Vycm9yQ29kZSkgeworICAgICAgICBjYXNlIFNhbWVOYW1lRG9FbGVtZW50c0Vycm9yOgor
ICAgICAgICAgICAgZXJyTXNnID0gIkVhY2ggZG8gZWxlbWVudCBtdXN0IGhhdmUgZGlmZmVyZW50
IG5hbWUgaW4gb25lIGNhcmQgb3IgdGVtcGxhdGUhXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgTXVsdGlUaW1lckVsZW1lbnRzRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cg
PSAiT25seSBvbmUgdGltZXIgZWxlbWVudCBpcyBhbGxvd2VkIGluIGEgY2FyZCFcbiI7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNdWx0aUFjY2Vzc0VsZW1lbnRzRXJyb3I6Cisg
ICAgICAgICAgICBlcnJNc2cgPSAiT25seSBvbmUgYWNjZXNzIGVsZW1lbnQgaXMgYWxsb3dlZCBp
biBhIGRlY2shXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgV3JvbmdUYXNr
SW5BbmNob3JFbGVtZW50RXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhlIHRhc2sgY2Fu
J3QgYmUgc3BlY2lmaWVkIGluIGFuIGFuY2hvciBlbGVtZW50IVxuIjsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICBjYXNlIENvbmZsaWN0aW5nRXZlbnRCaW5kaW5nRXJyb3I6CisgICAgICAg
ICAgICBlcnJNc2cgPSAiQ29uZmxpY3RpbmcgZXZlbnQgYmluZGluZ3Mgd2l0aGluIGFuIGVsbWVu
dCFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJbnZhbGlkVmFyaWFibGVO
YW1lRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhlIHZhcmlhYmxlIG5hbWUgY29udGFp
bnMgaW52YWxpZCBjaGFyYWN0ZXJzIVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yOgorICAgICAgICAgICAgZXJyTXNnID0g
IlRoZSB2YXJpYWJsZSByZWZlcmVuY2UgdXNlcyBpbnZhbGlkIHN5bnRheCBvciBpcyBwbGFjZWQg
aW4gaW52YWxpZCBsb2NhdGlvbiFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBJbnZhbGlkQ29sdW1uc051bWJlckZvclRhYmxlRXJycm9yOgorICAgICAgICAgICAgZXJyTXNn
ID0gIlRoZSBudW1iZXIgb2YgdGFibGUgY29sdW1ucyBpcyBpbnZhbGlkIVxuIjsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICBjYXNlIERvY1R5cGVEZWNsYXJhdGlvbk1pc3NFcnJvcjoKKyAg
ICAgICAgICAgIGVyck1zZyA9ICJET0NUWVBFIGRlY2xhcmF0aW9uIGlzIG1pc3NlZCBiZWZvcmUg
cm9vdCBlbGVtZW50IVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyAKKyAgICBoYW5kbGVFcnJvcihmYXRhbCwgZXJy
TXNnLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKK30KKworfSAgLy9uYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogV2ViQ29yZS93bWwvV01MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS93bWwvV01MVG9rZW5pemVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9X
TUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYg
V01MVG9rZW5pemVyX2gKKyNkZWZpbmUgV01MVG9rZW5pemVyX2gKKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJTZWdt
ZW50ZWRTdHJpbmcuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSAiVG9rZW5p
emVyLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisKKyNpZiBVU0UoUVhNTFNUUkVBTSkKKyNpbmNsdWRlIDxRdFhtbC9xeG1sc3RyZWFtLmg+Cisj
ZWxzZQorI2luY2x1ZGUgPGxpYnhtbC90cmVlLmg+CisjaW5jbHVkZSA8bGlieG1sL3htbHN0cmlu
Zy5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0eXBlZGVmIGVudW0gV01MRXJyb3JDb2RlIHsgCisgICAgTm9FcnJvciA9IDAs
IAorICAgIFNhbWVOYW1lRG9FbGVtZW50c0Vycm9yLAorICAgIE11bHRpQWNjZXNzRWxlbWVudHNF
cnJvciwKKyAgICBNdWx0aVRpbWVyRWxlbWVudHNFcnJvciwKKyAgICBXcm9uZ1Rhc2tJbkFuY2hv
ckVsZW1lbnRFcnJvciwKKyAgICBDb25mbGljdGluZ0V2ZW50QmluZGluZ0Vycm9yLAorICAgIElu
dmFsaWRWYXJpYWJsZU5hbWVFcnJvciwKKyAgICBJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJv
ciwKKyAgICBJbnZhbGlkQ29sdW1uc051bWJlckZvclRhYmxlRXJycm9yLAorICAgIERvY1R5cGVE
ZWNsYXJhdGlvbk1pc3NFcnJvciwKK30gV01MRXJyb3JDb2RlOworCitjbGFzcyBXTUxUb2tlbml6
ZXIgOiBwdWJsaWMgWE1MVG9rZW5pemVyIHsKK3B1YmxpYzoKKyAgICBXTUxUb2tlbml6ZXIoRG9j
dW1lbnQqLCBGcmFtZVZpZXcqID0gMCk7CisgICAgfldNTFRva2VuaXplcigpOworCisgICAgLy8g
ZnJvbSBUb2tlbml6ZXIKKyAgICB2aXJ0dWFsIGJvb2wgd3JpdGUoY29uc3QgU2VnbWVudGVkU3Ry
aW5nJiwgYm9vbCBhcHBlbmREYXRhID0gZmFsc2UpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2go
KTsKKyAgICAKKyNpZiBVU0UoUVhNTFNUUkVBTSkKKyAgICB2b2lkIFdNTFBhcnNlU3RhcnRFbGVt
ZW50KCk7CisgICAgdm9pZCBXTUxQYXJzZUVuZEVsZW1lbnQoKTsKKyNlbmRpZgorCisgICAgdm9p
ZCByZXBvcnRFcnJvcihXTUxFcnJvckNvZGUpOworICAgIGJvb2wgaGFzRXJyb3IoKSBjb25zdDsK
KyAgICB2b2lkIGhhbmRsZVdNTEVycm9yKFdNTEVycm9yQ29kZSBjb2RlID0gTm9FcnJvcik7CisK
KyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoRWxlbWVudCosIGNvbnN0IFN0cmluZyYpOwor
cHJpdmF0ZToKKyAgICBXTUxFcnJvckNvZGUgbV9lcnJvckNvZGU7Cit9OworCisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFdNTFRva2VuaXplcl9oCkluZGV4OiBXZWJLaXRU
b29scy9TY3JpcHRzL2J1aWxkLXdlYmtpdAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJLaXRUb29scy9TY3Jp
cHRzL2J1aWxkLXdlYmtpdAkocmV2aXNpb24gMzc5MjIpCisrKyBXZWJLaXRUb29scy9TY3JpcHRz
L2J1aWxkLXdlYmtpdAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsNyBAQCBteSAkc3ZnRm9u
dHNTdXBwb3J0ID0gMTsKIG15ICRzdmdBc0ltYWdlU3VwcG9ydCA9IDE7CiBteSAkeHBhdGhTdXBw
b3J0ID0gMTsKIG15ICR4c2x0U3VwcG9ydCA9IDE7CitteSAkd21sU3VwcG9ydCA9IDA7CiBteSAk
Y292ZXJhZ2VTdXBwb3J0ID0gMDsKIG15ICR2aWRlb1N1cHBvcnQgPSAoaXNPU1goKSB8fCBpc0N5
Z3dpbigpKTsgIyBFbmFibGUgYnkgZGVmYXVsdCBvbiBPU1ggYW5kIFdpbmRvd3MKIG15ICRzaG93
SGVscCA9IDA7CkBAIC04Myw2ICs4NCw3IEBAIFVzYWdlOiAkcHJvZ3JhbU5hbWUgW29wdGlvbnNd
IFtvcHRpb25zIHQKICAgLS1bbm8tXXN2Zy11c2UgICAgICAgICAgICAgICAgVG9nZ2xlIFNWRyB1
c2UgZWxlbWVudCBzdXBwb3J0IChkZWZhdWx0OiAkc3ZnVXNlU3VwcG9ydCwgaW1wbGllcyBTVkcg
U3VwcG9ydCkKICAgLS1bbm8tXXhwYXRoICAgICAgICAgICAgICAgICAgVG9nZ2xlIFhQYXRoIHN1
cHBvcnQgKGRlZmF1bHQ6ICR4cGF0aFN1cHBvcnQpCiAgIC0tW25vLV14c2x0ICAgICAgICAgICAg
ICAgICAgIFRvZ2dsZSBYU0xUIHN1cHBvcnQgKGRlZmF1bHQ6ICR4c2x0U3VwcG9ydCkKKyAgLS1b
bm8tXXdtbCAgICAgICAgICAgICAgICAgICAgVG9nZ2xlIFdNTCBzdXBwb3J0IChkZWZhdWx0OiAk
d21sU3VwcG9ydCkKICAgLS1bbm8tXXZpZGVvICAgICAgICAgICAgICAgICAgVG9nZ2xlIFZpZGVv
IHN1cHBvcnQgKGRlZmF1bHQ6ICR2aWRlb1N1cHBvcnQpCiAgIC0tW25vLV1jb3ZlcmFnZSAgICAg
ICAgICAgICAgIFRvZ2dsZSBjb2RlIGNvdmVyYWdlIHN1cHBvcnQgKGRlZmF1bHQ6ICRjb3ZlcmFn
ZVN1cHBvcnQpCiBFT0YKQEAgLTEwMSw2ICsxMDMsNyBAQCBHZXRPcHRpb25zKCdkYXRhYmFzZSEn
ID0+IFwkZGF0YWJhc2VTdXBwCiAgICAgICAgICAgICdzdmctdXNlIScgPT4gXCRzdmdVc2VTdXBw
b3J0LAogICAgICAgICAgICAneHBhdGghJyA9PiBcJHhwYXRoU3VwcG9ydCwKICAgICAgICAgICAg
J3hzbHQhJyA9PiBcJHhzbHRTdXBwb3J0LAorICAgICAgICAgICAnd21sIScgPT4gXCR3bWxTdXBw
b3J0LAogICAgICAgICAgICAndmlkZW8hJyA9PiBcJHZpZGVvU3VwcG9ydCwKICAgICAgICAgICAg
J2NvdmVyYWdlIScgPT4gXCRjb3ZlcmFnZVN1cHBvcnQsCiAgICAgICAgICAgICdoZWxwJyA9PiBc
JHNob3dIZWxwLApAQCAtMTY4LDYgKzE3MSw3IEBAIHB1c2ggQG92ZXJyaWRlRmVhdHVyZURlZmlu
ZXNPcHRpb24sICJFTkEKIHB1c2ggQG92ZXJyaWRlRmVhdHVyZURlZmluZXNPcHRpb24sICJFTkFC
TEVfVklERU8iIGlmICR2aWRlb1N1cHBvcnQ7CiBwdXNoIEBvdmVycmlkZUZlYXR1cmVEZWZpbmVz
T3B0aW9uLCAiRU5BQkxFX1hQQVRIIiBpZiAkeHBhdGhTdXBwb3J0OwogcHVzaCBAb3ZlcnJpZGVG
ZWF0dXJlRGVmaW5lc09wdGlvbiwgIkVOQUJMRV9YU0xUIiBpZiAkeHNsdFN1cHBvcnQ7CitwdXNo
IEBvdmVycmlkZUZlYXR1cmVEZWZpbmVzT3B0aW9uLCAiRU5BQkxFX1dNTCIgaWYgJHdtbFN1cHBv
cnQ7CiBteSAkb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc1N0cmluZyA9ICJGRUFUVVJFX0RFRklORVM9
IiAuIGpvaW4oIiAiLCBAb3ZlcnJpZGVGZWF0dXJlRGVmaW5lc09wdGlvbik7CiAKIG15IEBjb3Zl
cmFnZVN1cHBvcnRPcHRpb24gPSAoKTsKQEAgLTIyNSw2ICsyMjksNyBAQCBpZiAoaXNHdGsoKSkg
ewogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHN2Z1VzZVN1cHBvcnQsICJzdmct
dXNlLWVsZW1lbnQiKTsKICAgICBwdXNoIEBvcHRpb25zLCBhdXRvdG9vbHNGbGFnKCR4cGF0aFN1
cHBvcnQsICJ4cGF0aCIpOwogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHhzbHRT
dXBwb3J0LCAieHNsdCIpOworICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJHdtbFN1
cHBvcnQsICJ3bWwiKTsKICAgICBwdXNoIEBvcHRpb25zLCBhdXRvdG9vbHNGbGFnKCR2aWRlb1N1
cHBvcnQsICJ2aWRlbyIpOwogICAgIHB1c2ggQG9wdGlvbnMsIGF1dG90b29sc0ZsYWcoJGNvdmVy
YWdlU3VwcG9ydCwgImNvdmVyYWdlIik7CiB9CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9i
ci1lbGVtZW50LWluLXRhYmxlLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9ici1lbGVtZW50LWluLXRhYmxlLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd21sL2JyLWVsZW1lbnQtaW4tdGFibGUud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBG
T1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8x
LjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IlBhcmFncmFwaHMiPgorIDxwPiBUaGlzIHRl
c3QgY2FzZSBpcyB1c2VkIHRvIHRlc3QgYnIgZWxlbWVudCBpbiBhIHRhYmxlLiBlYWNoIGNlbGwg
aXMgYWxpZ25lZCB0byBsZWZ0LCBhbmQgdGhlIEJSIHdpbGwgYnJlYWsgdGhlICJ4eHh4eHh4eCIg
dGV4dCBpbiB0aGUgbGFzdCB0ZDwvcD4KKyA8dGFibGUgY29sdW1ucz0nMycgYWxpZ249IkxMTCI+
CisgICAgPHRyPgorICAgICA8dGQgaWQ9ImMxIj5DZWxsIG9uZTwvdGQ+CisgICAgIDx0ZCBpZD0i
YzIiPkNlbGwgdHdvPC90ZD4KKyAgICAgPHRkIGlkPSJjMyI+YzM8L3RkPgorICAgIDwvdHI+Cisg
ICAgPHRyPgorICAgICA8dGQgaWQ9ImEiPmNlbGwgYTwvdGQ+CisgICAgIDx0ZCBpZD0iYiI+Y2Vs
bCBiPC90ZD4KKyAgICAgPHRkIGlkPSJjIj54eHh4eDxici8+eHh4PC90ZD4KKyAgICA8L3RyPgor
IDwvdGFibGU+CisgPC9jYXJkPgorPC93bWw+IApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwv
YnItZWxlbWVudC1pbi10ZXh0LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dt
bC9ici1lbGVtZW50LWluLXRleHQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93bWwvYnItZWxlbWVudC1pbi10ZXh0LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEu
eG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IlBhcmFncmFwaHMiPgorIDxwPiBUaGlzIHRlc3Qg
Y2FzZSBpcyB1c2VkIHRvIHRlc3QgYnIgZWxlbWVudCBpbiB0ZXh0PC9wPgorICBUaGlzIGlzIGEg
cGllY2Ugb2YgdGV4dCA8YnIvPndpdGggYSBsaW5lIGJyZWFrCisgPC9jYXJkPgorPC93bWw+IApJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvY2FyZC1lbGVtZW50LndtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9jYXJkLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC93bWwvY2FyZC1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICIt
Ly9XQVBGT1JVTS8vRFREIFdNTCAxLjAvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEi
PlRoaXMgaXMgY2FyZCBvbmU8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJDYXJkIDIi
PlRoaXMgaXMgY2FyZCB0d288L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
d21sL2Nhc2Utc2Vuc2l0aXZpdHkud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
d21sL2Nhc2Utc2Vuc2l0aXZpdHkud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93bWwvY2FzZS1zZW5zaXRpdml0eS53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEu
eG1sIj4KKzx3bWw+CisgPGNhcmQgaWQ9J2NhcmQxJz4KKyA8cD4gVGVzdCBmb3IgQ2FzZSBzZW5z
aXRpdml0eSBpbiBXTUwgPC9wPgorIDxwPiBjb21wYXJlIHRoZSByZXN1bHQgb2YgaW5zZXJ0aW5n
ICZsdDtici8mZ3Q7IGFuZCAmbHQ7QlIvJmd0OyBpbnRvIHRoZSBzYW1lIHRleHQsIDxici8+dGhl
IGZvcm1lciBzaG91bGQgd29yaywgYW5kIHRoZSBsYXR0ZXIgZG9lc24ndC48L3A+CisgPHRhYmxl
IGJvcmRlcj0iMSI+CisgPHRyPjx0ZD5UZXN0IGNhc2UgPGJyLz5zZW5zaXRpdml0eSBpbiBXTUwg
PC90ZD48L3RyPgorIDx0cj48dGQ+VGVzdCBjYXNlIDxCUi8+c2Vuc2l0aXZpdHkgaW4gV01MIDwv
dGQ+PC90cj4KKyA8L3RhYmxlPgorIDwvY2FyZD4KKzwvd21sPgorCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9jZGF0YS1zZWN0aW9uLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9jZGF0YS1zZWN0aW9uLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd21sL2NkYXRhLXNlY3Rpb24ud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzw/
eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8v
RFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1s
Ij4KKzx3bWw+CisgPGNhcmQgaWQ9J2NhcmQxJz4KKyA8cD4gVGVzdCBmb3IgQ0RBVEEgU2VjdGlv
biBpbiBXTUw8YnIvPiBJZiBpdCBwYXNzZXMsIHlvdSBjYW4gc2VlIHRoZSBmb2xsb3dpbmcgdGV4
dCA6IDwvcD4KKyA8IVtDREFUQVsgVGhpcyBpcyA8Qj4gYSBDREFUQSB0ZXN0XV0+CisgPC9jYXJk
PgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9jb21tZW50LndtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9jb21tZW50LndtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3Qvd21sL2NvbW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9X
QVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dt
bF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4KKyAg
PHA+IFRlc3QgY29tbWVudCBpbiBXTUwsIHRoZSB0ZXh0IGluIHRoZSBjb21tZW50IHNob3VsZCBu
b3QgYmUgZGlzcGxheWVkLCBpZiBpdCBwYXNzZXMsIHlvdSBjYW4gb25seSBzZWUgdGhlIHRleHQ6
ICJIZWxsbyBXb3JsZCEiIGFmdGVyIHRoaXMgbGluZSA8L3A+CisgIDxwPgorICAgIDwhLS0gVGhp
cyBpcyBhIGNvbW1lbnQgLCBpdCBzaG91bGQgbm90IGJlIGRpc3BsYXllZC0tPgorICAgIEhlbGxv
IFdvcmxkIQorICA8L3A+CisgPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9kby1lbGVtZW50LW9wdGlvbmFsLWF0dHIud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2RvLWVsZW1lbnQtb3B0aW9uYWwtYXR0ci53bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9kby1lbGVtZW50LW9wdGlvbmFsLWF0dHIud21sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQ
RSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53
YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgaWQ9ImZpcnN0Y2Fy
ZCIgdGl0bGU9Ik9uZSI+CisgIDxwPlRlc3QgZm9yIGRvIGVsZW1lbnQgaW4gV01MIDwvcD4KKyAg
PHA+IFRoZXJlIGFyZSB0d28gZG8gZWxlbWVudCBpbiB0aGlzIGNhcmQsIHRoZSBmaXJzdCBvbmUg
d2lsbCBkaXNwbGF5LCB0aGUgc2Vjb25kIHdvbid0IGJlY2F1c2UgaXRzIG9wdGlvbmFsIGF0dHJp
YnV0ZSBpcyB0cnVlPC9wPgorICA8ZG8gbmFtZT0iZ28iIHR5cGU9ImFjY2VwdCIgbGFiZWw9IkRv
IDEiIG9wdGlvbmFsPSJmYWxzZSI+CisgIDxnbyBocmVmPSIjdGhpcmRjYXJkIi8+CisgIDwvZG8+
CisgIDxkbyBuYW1lPSJnbzIiIHR5cGU9ImFjY2VwdCIgbGFiZWw9IkRvIDIiIG9wdGlvbmFsPSJ0
cnVlIj4KKyAgPGdvIGhyZWY9IiNzZWNvbmRjYXJkIi8+CisgIDwvZG8+CisgPC9jYXJkPgorCisg
PGNhcmQgaWQ9InNlY29uZGNhcmQiIHRpdGxlPSJUd28iPgorICA8cD5UaGlzIGlzIHRoZSBzZWNv
bmQgY2FyZDwvcD4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0idGhpcmRjYXJkIiB0aXRsZT0iVGhy
ZWUiPgorICA8cD5UaGlzIGlzIHRoZSB0aGlyZCBjYXJkPC9wPgorIDwvY2FyZD4KKzwvd21sPgor
CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9kby1zaGFkb3cud21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3Qvd21sL2RvLXNoYWRvdy53bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9kby1zaGFkb3cud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQx
IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBG
T1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8x
LjEueG1sIj4KKzx3bWw+Cis8dGVtcGxhdGU+Cis8ZG8gdHlwZT0iYWNjZXB0IiBuYW1lPSJkbzEi
IGxhYmVsPSJUZW1wbGF0ZSBEbyI+Cis8cHJldi8+Cis8L2RvPgorPC90ZW1wbGF0ZT4KKworPGNh
cmQgaWQ9ImZpcnN0Ij4KKzxwPiBUZXN0IGZvciBkby1zaGFkb3cgaW4gV01MPC9wPgorPHA+VGhp
cyBpcyBmaXJzdCBjYXJkLCB3aGljaCB3b24ndCBzaGFkb3cgZGVjay1sZXZlbCBkbzwvcD4KKzxh
bmNob3I+Cis8Z28gaHJlZj0iI3NlY29uZCI+R28gdG8gY2FyZCAyPC9nbz4KKzwvYW5jaG9yPgor
PC9jYXJkPgorCis8Y2FyZCBpZD0ic2Vjb25kIj4KKzxwPmRlY2stbGV2ZWwgZG8gaXMgc2hhZG93
ZWQgd2l0aCBub29wLiBJdCBpcyBub3QgZXhwb3NlZCB0byB0aGUgdXNlciA8L3A+Cis8ZG8gdHlw
ZT0ib3B0aW9ucyIgbmFtZT0iZG8xIiBsYWJlbD0ic2Vjb25kIGRvIj4KKzxub29wLz4KKzwvZG8+
Cis8YW5jaG9yPgorPGdvIGhyZWY9IiN0aGlyZCI+R28gdG8gY2FyZCAzPC9nbz4KKzwvYW5jaG9y
PgorPC9jYXJkPgorCis8Y2FyZCBpZD0idGhpcmQiPgorPHA+ZGVjay1sZXZlbCBkbyBpcyBzaGFk
b3dlZC4gSXQgaXMgcmVwbGFjZWQgYnkgYSBjYXJkLWxldmVsIGRvIGJlY2F1c2UgdGhleSBoYXZl
IHRoZSBzYW1lIG5hbWU8L3A+Cis8cD4KKzxkbyB0eXBlPSJvcHRpb25zIiBuYW1lPSJkbzEiIGxh
YmVsPSJkbzEiPgorPGdvIGhyZWY9Ii4vdGVzdC53bWwiLz4KKzwvZG8+Cis8YnIvPgorPGFuY2hv
cj4KKzxnbyBocmVmPSIjZmlyc3QiPkdvIHRvIGNhcmQgMTwvZ28+Cis8L2FuY2hvcj4KKzwvcD4K
KzwvY2FyZD4KKzwvd21sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9kby10ZW1wbGF0
ZS53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZG8tdGVtcGxhdGUud21s
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvZG8tdGVtcGxhdGUud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMxIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8dGVtcGxhdGUgaWQ9IjIi
PgorPGRvIG5hbWU9ImdvIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJUZW1wbGF0ZSBkbyI+Cis8Z28g
aHJlZj0iI2ZpcnN0Y2FyZCIvPgorPC9kbz4KKzwvdGVtcGxhdGU+CisgPGNhcmQgaWQ9ImZpcnN0
Y2FyZCIgdGl0bGU9Ik9uZSI+CisgPHA+IFRlc3QgZm9yIGRvIGVsZW1lbnQgaW4gdGVtcGxhdGUg
aW4gV01MPC9wPgorIDxwPiBXaGljaGV2ZXIgY2FyZCB5b3UgZW50ZXJlZCwgeW91IGNhbiBzZWUg
dGhlIHRlbXBsYXRlIGRvIGJ1dHRvbiBiZWNhdXNlIGl0J3MgZ2xvYmFsPC9wPgorICA8cD5UaGlz
IGlzIHRoZSBmaXJzdCBjYXJkPC9wPgorICA8cD48YW5jaG9yPjxnbyBocmVmPSIjc2Vjb25kY2Fy
ZCIvPkdvIHRvIGNhcmQyPC9hbmNob3I+PC9wPgorIDwvY2FyZD4KKworIDxjYXJkIGlkPSJzZWNv
bmRjYXJkIiB0aXRsZT0iVHdvIj4KKyA8cD4gVGVzdCBmb3IgZG8gZWxlbWVudCBpbiB0ZW1wbGF0
ZSBpbiBXTUw8L3A+CisgPHA+IFdoaWNoZXZlciBjYXJkIHlvdSBlbnRlcmVkLCB5b3UgY2FuIHNl
ZSB0aGUgdGVtcGxhdGUgZG8gYnV0dG9uIGJlY2F1c2UgaXQncyBnbG9iYWw8L3A+CisgIDxwPlRo
aXMgaXMgdGhlIHNlY29uZCBjYXJkIDwvcD4KKyAgPGFuY2hvcj5HbyB0byBjYXJkIDMKKyAgPGdv
IGhyZWY9IiN0aGlyZGNhcmQiLz4KKyAgPC9hbmNob3I+CisgPC9jYXJkPgorCisgPGNhcmQgaWQ9
InRoaXJkY2FyZCIgdGl0bGU9IlRocmVlIj4KKyA8cD4gVGVzdCBmb3IgZG8gZWxlbWVudCBpbiB0
ZW1wbGF0ZSBpbiBXTUw8L3A+CisgPHA+IFdoaWNoZXZlciBjYXJkIHlvdSBlbnRlcmVkLCB5b3Ug
Y2FuIHNlZSB0aGUgdGVtcGxhdGUgZG8gYnV0dG9uIGJlY2F1c2UgaXQncyBnbG9iYWw8L3A+Cisg
IDxwPlRoaXMgaXMgdGhlIHRoaXJkIGNhcmQ8L3A+CisgIDxhbmNob3I+QmFjazxwcmV2Lz48L2Fu
Y2hvcj4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2VudGl0
eS53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZW50aXR5LndtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2VudGl0eS53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1
bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJubzEiIHRpdGxlPSJU
ZXN0IGVudGl0eSI+Cis8cD5UZXN0IGZvciBFbnRpdGllcyBpbiBXTUwgcGFnZTwvcD4KKyZxdW90
OyAgICAgICAmIzM0OworPGJyLz4KKyZhbXA7ICAgICAgICAmIzM4OworPGJyLz4KKyZhcG9zOyAg
ICAgICAmI3gyNzsKKzxici8+CismbHQ7ICAgICAgICAgJiM2MDsKKzxici8+CismZ3Q7ICAgICAg
ICAgJiM2MjsKKzxici8+Cis9Jm5ic3A7PSYjMTYwOz0KKzxici8+CitBQSZzaHk7QUEmIzE3MztB
QQorPGJyLz4gCis8cD4gJmx0O2hlbGxvJmd0OyA8L3A+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJj
YXJkMiIgdGl0bGU9IiQoY2FyZGlkKSB0aXRsZSI+VGhpcyBpcyBjYXJkIDI8L2NhcmQ+Cis8L3dt
bD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1ldmVudC1iaW5kaW5nLWNvbmZsaWN0
LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItZXZlbnQtYmluZGlu
Zy1jb25mbGljdC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnIt
ZXZlbnQtYmluZGluZy1jb25mbGljdC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEu
eG1sIj4KKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiPgorICA8b25ldmVudCB0eXBlPSJvbmVudGVy
Zm9yd2FyZCI+CisgIDxyZWZyZXNoLz4KKyAgPC9vbmV2ZW50PgorICA8b25ldmVudCB0eXBlPSJv
bmVudGVyZm9yd2FyZCI+CisgIDxwcmV2Lz4KKyAgPC9vbmV2ZW50PgorICA8cD4gVGVzdCBmb3Ig
dGhlIGVycm9yIGV2ZW50LWJpbmRpbmcgY29uZmxpY3Q8L3A+CisgIFlvdSBzaG91bGQgTk9UIHNl
ZSB0aGlzIHRleHQsIGJlY2F1c2Ugb2YgdGhlIGVycm9yIG9mIGV2ZW50LWJpbmRpbmcgZXJyb3Ig
aW4gY2FyZCBlbGVtZW50IAorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9lcnItaW52YWxpZC1sb2NhdGlvbi1mb3ItdmFycmVmLndtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItaW52YWxpZC1sb2NhdGlvbi1mb3ItdmFycmVmLndtbAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlkLWxvY2F0aW9u
LWZvci12YXJyZWYud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3
bWw+Cis8Y2FyZCBpZD0ibm8xIiB0aXRsZT0iQ2FyZCAxIj4gCis8cD4gVGVzdCBmb3IgdmFyaWFi
bGUgcmVmZXJlbmNlIHZhbGlkYXRpb248L3A+Cis8cD4gQW4gZXJyb3Igd2lsbCBvY2N1ciB3aGVu
IGxvYWRpbmcgdGhlIGNhcmQgYmVjYXVzZSB0aGUgdmFyaWFibGUgcmVmZXJlbmNlIGlzIHBsYWNl
ZCBpbiBhIGludmFsaWQgbG9jYXRpb248L3A+Cis8ZG8gdHlwZT0iJCh2YXIpIiBuYW1lPSJyZWZy
ZXNoIj4KKyAgPHJlZnJlc2g+CisgICAgPHNldHZhciBuYW1lPSJ2YXIiIHZhbHVlPSJ2YXJhaWJs
ZTIiLz4KKyAgPC9yZWZyZXNoPgorPC9kbz4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93bWwvZXJyLWludmFsaWQtdGFibGVjb2x1bW4tbnVtYmVyLndtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItaW52YWxpZC10YWJsZWNvbHVtbi1udW1i
ZXIud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWludmFsaWQt
dGFibGVjb2x1bW4tbnVtYmVyLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RU
RCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorCis8d21sPgorPGNhcmQgaWQ9Im5vMSIgdGl0bGU9IkNhcmQgMSI+IAorPHA+IFRlc3QgZm9y
IHRhYmxlIGNvbHVtbiBudW1iZXIgdmFsaWRhdGlvbiA8L3A+Cis8cD4gVGhlIHRhYmxlIHdvbid0
IGJlIGRpc3BsYXllZCBiZWNhdXNlIG9mIHRoZSBpbnZhbGlkIGNvbHVtbnMgYXR0cnVpYnRlIG9m
IHRhYmxlIGVsZW1lbnQ8L3A+Cis8dGFibGUgY29sdW1ucz0iMCI+Cis8dHI+PHRkPkNlbGwgMTwv
dGQ+PHRkPkNlbGwgMjwvdGQ+PC90cj4KKzwvdGFibGU+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlkLXZhcmlhYmxlLW5hbWUud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1pbnZhbGlkLXZhcmlhYmxlLW5hbWUu
d21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLWludmFsaWQtdmFy
aWFibGUtbmFtZS53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEu
MS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdt
bD4KKzxjYXJkIGlkPSJubzEiIHRpdGxlPSJDYXJkIDEiPiAKKzxwPiBUZXN0IGZvciB2YXJpYWJs
ZSBuYW1lIHZhbGlkYXRpb24gPC9wPgorPGRvIHR5cGU9ImFjY2VwdCIgbmFtZT0icmVmcmVzaCI+
CisgIDxyZWZyZXNoPgorICAgIDxzZXR2YXIgbmFtZT0iJCt2YXIiIHZhbHVlPSJ2YXJhaWJsZTIi
Lz4KKyAgPC9yZWZyZXNoPgorPC9kbz4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93bWwvZXJyLW11bHRpLWFjY2Vzcy53bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC93bWwvZXJyLW11bHRpLWFjY2Vzcy53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktYWNjZXNzLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSwxMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorPHdtbD4KKzxoZWFkPgorPGFjY2VzcyBwYXRoPSIvIiBkb21haW49ImRv
bWFpbiIvPgorPGFjY2VzcyBwYXRoPSIvcGF0aCIgZG9tYWluPSJkb21haW4iLz4KKzwvaGVhZD4K
KzxjYXJkIGlkPSJjYXJkMSI+CisgIDxwPiBUZXN0IGZvciBtdWx0aS1hY2Nlc3MgZXJyb3I8L3A+
CisgIFlvdSBzaG91bGQgbm90IHNlZSB0aGlzIHRleHQsIGJlY2F1c2Ugb2YgdGhlIGVycm9yIG9m
IG11bHRpLWFjY2VzcyBpbiBoZWFkIGVsZW1lbnQKKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC93bWwvZXJyLW11bHRpLWh0dHAtZXF1aXYtaW4tbWV0YS53bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLW11bHRpLWh0dHAtZXF1aXYtaW4tbWV0
YS53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktaHR0
cC1lcXVpdi1pbi1tZXRhLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
PHdtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBodHRwLWVxdWl2
PSJDb250ZW50LVR5cGUiIENvbnRlbnQ9InRleHQvdm5kLndhcC53bWw7IENoYXJzZXQ9Z2IyMzEy
Ii8+Cis8L2hlYWQ+CisgPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPHA+IFRlc3QgZm9yIG1ldGEgbXVs
dGktaHR0cC1lcXVpdiBlcnJvcjwvcD4KKyAgWW91IHNob3VsZCBub3Qgc2VlIHRoaXMgdGV4dCwg
YmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgbXVsdGktaHR0cC1lcXVpdiBpbiBtZXRhIGVsZW1lbnQK
KyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0aS1u
YW1lLWluLW1ldGEud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1t
dWx0aS1uYW1lLWluLW1ldGEud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93
bWwvZXJyLW11bHRpLW5hbWUtaW4tbWV0YS53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBG
T1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8x
LjEueG1sIj4KKzx3bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9IkNvbnRlbnQtVHlwZSIgbmFtZT0i
Q29udGVudC1UeXBlIiBDb250ZW50PSJ0ZXh0L3ZuZC53YXAud21sOyBDaGFyc2V0PWdiMjMxMiIv
PgorPC9oZWFkPgorIDxjYXJkIGlkPSJjYXJkMSI+CisgIDxwPiBUZXN0IGZvciBtZXRhIG11bHRp
LW5hbWUgZXJyb3I8L3A+CisgIFlvdSBzaG91bGQgbm90IHNlZSB0aGlzIHRleHQsIGJlY2F1c2Ug
b2YgdGhlIGVycm9yIG9mIG11bHRpLW5hbWUgaW4gbWV0YSBlbGVtZW50CisgPC9jYXJkPgorPC93
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktdGltZXIud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1tdWx0aS10aW1lci53bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItbXVsdGktdGltZXIud21sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDEwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZ
UEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIGlkPSJjYXJkMSIg
b250aW1lcj0idGVzdC53bWwiPgorIDx0aW1lciBpZD0idGltZXIxIiBuYW1lPSJ0MSIgdmFsdWU9
IjIwIi8+CisgPHRpbWVyIGlkPSJ0aW1lcjIiIG5hbWU9InQyIiB2YWx1ZT0iMzAiLz4KKyAgPHA+
IFRlc3QgZm9yIGVycm9yIG9mIG1ldGEgbXVsdGktdGltZXIgaW4gb25lIGNhcmQgPC9wPgorICBZ
b3Ugc2hvdWxkIE5PVCBzZWUgdGhpcyB0ZXh0LCBiZWNhdXNlIG9mIHRoZSBlcnJvciB0aGF0IG1v
cmUgdGhhbiBvbmUgdGltZXIgZXhpc3QgaW4gb25lIGNhcmQgCisgPC9jYXJkPgorPC93bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItc2FtZW5hbWUtZG8ud21sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2Vyci1zYW1lbmFtZS1kby53bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItc2FtZW5hbWUtZG8ud21sCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21s
IFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9y
dW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPGRv
IG5hbWU9ImRvIiB0eXBlPSJhY2NlcHQiPgorICA8cmVmcmVzaC8+CisgIDwvZG8+CisgIDxkbyBu
YW1lPSJkbyIgdHlwZT0iYWNjZXB0Ij4KKyAgPHJlZnJlc2gvPgorICA8L2RvPgorICA8cD4gVGVz
dCBmb3IgdGhlIGVycm9yIHRoYXQgbW9yZSB0aGFuIG9uZSBkbyBlbGVtZW50IGhhcyBzYW1lIG5h
bWU8L3A+CisgIFlvdSBzaG91bGQgTk9UIHNlZSB0aGlzIHRleHQsIGJlY2F1c2Ugb2YgdGhlIGVy
cm9yIG9mIG5hbWUtY29uZmxpY3Qgb2YgZG8gZWxlbWVudCAKKzwvY2FyZD4KKzwvd21sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLXVuYWxsb3dlZC10YXNrLWluLWFuY2hvci53bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvZXJyLXVuYWxsb3dlZC10YXNrLWlu
LWFuY2hvci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9lcnItdW5h
bGxvd2VkLXRhc2staW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSI+CisgIDxhbmNob3I+CisgIDxub29wLz4KKyAg
PC9hbmNob3I+CisgIDxwPiBUZXN0IGZvciB0aGUgZXJyb3IgdGhhdCBzcGVjaWZ5aW5nIG5vb3Ag
dGFzayB0byBhbmNob3IgZWxlbWVudDwvcD4KKyAgWW91IHNob3VsZCBOT1Qgc2VlIHRoaXMgdGV4
dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3IgdGhhdCBzcGVjaWZ5aW5nIHVuYWxsb3dlZCB0YXNrIHRv
IGFuY2hvciBlbGVtZW50IAorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbWctbG9jYWxzcmMud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ltZy1sb2NhbHNyYy53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bWctbG9jYWxzcmMud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+
CisgPGNhcmQgdGl0bGU9IlRlc3QgaW1hZ2UiPgorIDxwPiBUZXN0IGZvciBpbWcgZWxlbWVudCBp
biBXTUwgPC9wPgorIDxwPiBUaGlzIGltYWdlIGlzIHNwZWNpZmllZCBieSBsb2NhbHNyYyBhdHRy
aWJ1dGUgb2YgaW1nIGVsZW1lbnQ8L3A+CisgdGVzdCBjb2RlOjwhW0NEQVRBWworIDxwPkxvY2Fs
PGltZyBoZWlnaHQ9IjYwIiB3aWR0aD0iNDAiIHZzcGFjZT0iNDAiIGhzcGFjZT0iNjAiIGFsaWdu
PSJtaWRkbGUiIGxvY2Fsc3JjPSJyZXNvdXJjZXMvc21pbGUuZ2lmIiBhbHQ9InNtaWxlIi8+SW1h
Z2U8L3A+CisgXV0+CisgPGJyLz4KKyA8cD5Mb2NhbDxpbWcgaGVpZ2h0PSI2MCIgd2lkdGg9IjQw
IiB2c3BhY2U9IjQwIiBoc3BhY2U9IjYwIiBhbGlnbj0ibWlkZGxlIiBsb2NhbHNyYz0icmVzb3Vy
Y2VzL3NtaWxlLmdpZiIgYWx0PSJzbWlsZSIvPkltYWdlPC9wPgorIDwvY2FyZD4KKzwvd21sPiAK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ltZy1zcmMtbG9jYWxzcmMtYWx0LndtbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbWctc3JjLWxvY2Fsc3JjLWFsdC53bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbWctc3JjLWxvY2Fsc3JjLWFs
dC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJo
dHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0
aXRsZT0iVGVzdCBpbWFnZSI+CisgPHA+IFRlc3QgZm9yIGltZyBlbGVtZW50IGluIFdNTCA8L3A+
CisgPHA+IFRoaXMgaW1hZ2UgY2FuIGJlIHNwZWNpZmllZCBieSBib3RoIHNyYyBhbmQgbG9jYWxz
cmMgYXR0cmlidXRlcyBvZiBpbWcgZWxlbWVudDwvcD4KKyA8cD4gMSkgbG9jYWxzcmMgdGFrZXMg
cHJlY2VkZW5jZSBvdmVyIHNyYyBhdHRyaWJ1dGUgPGJyLz4KKyBJbWFnZTxpbWcgc3JjPSJodHRw
Oi8vd3d3LmJhaWR1LmNvbS9pbWcvYmFpZHUuZ2lmIiBsb2NhbHNyYz0icmVzb3VyY2VzL3NtaWxl
LmdpZiIgYWx0PSJJTUFHRSIvPkltYWdlCisgPGJyLz4KKyAyKSBsb2NhbHNyYyBjYW4ndCBsb2Nh
dGUgdGhlIGltYWdlLCBzcmMgd29ya3MgPGJyLz4KKyBJbWFnZTxpbWcgc3JjPSJodHRwOi8vd3d3
LmJhaWR1LmNvbS9pbWcvYmFpZHUuZ2lmIiBsb2NhbHNyYz0id3JvbmdwYXRoL3NtaWxlLmdpZiIg
YWx0PSJJTUFHRSIvPkltYWdlCisgPGJyLz4KKyAzKSBuZWl0aGVyIGxvY2Fsc3JjIG5vciBzcmMg
Y2FuIGxvY2F0ZSB0aGUgaW1hZ2UsIGFsdCB3b3JrcyA8YnIvPgorIEltYWdlPGltZyBzcmM9Imh0
dHA6Ly93d3cuYmFpZHUuY29tL3dyb25ncGF0aC9iYWlkdS5naWYiIGxvY2Fsc3JjPSJ3cm9uZ3Bh
dGgvc21pbGUuZ2lmIiBhbHQ9IklNQUdFIi8+SW1hZ2UKKyA8L3A+CisgPC9jYXJkPgorPC93bWw+
IApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW1nLXNyYy53bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC93bWwvaW1nLXNyYy53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9pbWctc3JjLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0v
L0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnht
bCI+Cis8d21sPgorIDxjYXJkIHRpdGxlPSJUZXN0IGltYWdlIj4KKyA8cD4gVGVzdCBmb3IgaW1n
IGVsZW1lbnQgaW4gV01MIDwvcD4KKyA8cD4gVGhpcyBpbWFnZSBpcyBzcGVjaWZpZWQgYnkgc3Jj
IGF0dHJpYnV0ZSBvZiBpbWcgZWxlbWVudDwvcD4KKyB0ZXN0IGNvZGU6PCFbQ0RBVEFbCisgPHA+
TmV0d29yayA8aW1nIGhlaWdodD0iNjAiIHdpZHRoPSI0MCIgdnNwYWNlPSI0MCIgaHNwYWNlPSI2
MCIgYWxpZ249Im1pZGRsZSIgc3JjPSJodHRwOi8vd2FwLmJhaWR1LmNvbS9sb2dvLmdpZiIgYWx0
PSJzbWlsZSIvPkltYWdlPC9wPgorIF1dPgorIDxici8+CisgPHA+TmV0d29yayA8aW1nIGhlaWdo
dD0iNjAiIHdpZHRoPSI0MCIgdnNwYWNlPSI0MCIgaHNwYWNlPSI2MCIgYWxpZ249Im1pZGRsZSIg
c3JjPSJodHRwOi8vd2FwLmJhaWR1LmNvbS9sb2dvLmdpZiIgYWx0PSJzbWlsZSIvPkltYWdlPC9w
PgorIDwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL3AtYWxpZ24u
d21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL3AtYWxpZ24ud21sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvcC1hbGlnbi53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvdXJt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0i
Q2FyZDEiPgorPHA+IFRlc3QgZm9yIGFsaWduIGF0dHJpYnV0ZSBvZiBwIGVsZW1lbnQgaW4gV01M
IDwvcD4KKzxici8+Cis8IVtDREFUQVsgPHAgYWxpZ249ImNlbnRlciI+XV0+Cis8cCBhbGlnbj0i
Y2VudGVyIj4KK0hlcmUgeW91IGNhbiBsZWFybiB2YXJpb3VzIG1vYmlsZSB0ZWNobm9sb2dpZXMg
bGlrZSBXQVAgLyBXQVAgMi4wLCBXTUwsIFdNTFNjcmlwdCwgWEhUTUwgTVAsIFdDU1MgLyBXQVAg
Q1NTLCBVQVByb2YgYW5kIFNNUyB0aHJvdWdoIG91ciBmcmVlIHR1dG9yaWFscywgYXJ0aWNsZXMg
YW5kIGV4YW1wbGVzLiBUaGlzIHdlYiBzaXRlIGNhbiBoZWxwIHdlYiBwcm9ncmFtbWVycyB3aG8g
d2lzaCB0byBleHRlbmQgdGhlaXIga25vd2xlZGdlIHRvIHRoZSB3aXJlbGVzcyB3b3JsZC4gCis8
YnIvPgoreHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKKzwvcD4KKzxici8+Cis8IVtD
REFUQVsgPHAgYWxpZ249InJpZ2h0Ij5dXT4KKzxwIGFsaWduPSJyaWdodCI+CitIZXJlIHlvdSBj
YW4gbGVhcm4gdmFyaW91cyBtb2JpbGUgdGVjaG5vbG9naWVzIGxpa2UgV0FQIC8gV0FQIDIuMCwg
V01MLCBXTUxTY3JpcHQsIFhIVE1MIE1QLCBXQ1NTIC8gV0FQIENTUywgVUFQcm9mIGFuZCBTTVMg
dGhyb3VnaCBvdXIgZnJlZSB0dXRvcmlhbHMsIGFydGljbGVzIGFuZCBleGFtcGxlcy4gVGhpcyB3
ZWIgc2l0ZSBjYW4gaGVscCB3ZWIgcHJvZ3JhbW1lcnMgd2hvIHdpc2ggdG8gZXh0ZW5kIHRoZWly
IGtub3dsZWRnZSB0byB0aGUgd2lyZWxlc3Mgd29ybGQuIAorPGJyLz4KK3h4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4Cis8L3A+Cis8YnIvPgorPCFbQ0RBVEFbIDxwIGFsaWduPSJsZWZ0
Ij5dXT4KKzxwIGFsaWduPSJsZWZ0Ij4KK0hlcmUgeW91IGNhbiBsZWFybiB2YXJpb3VzIG1vYmls
ZSB0ZWNobm9sb2dpZXMgbGlrZSBXQVAgLyBXQVAgMi4wLCBXTUwsIFdNTFNjcmlwdCwgWEhUTUwg
TVAsIFdDU1MgLyBXQVAgQ1NTLCBVQVByb2YgYW5kIFNNUyB0aHJvdWdoIG91ciBmcmVlIHR1dG9y
aWFscywgYXJ0aWNsZXMgYW5kIGV4YW1wbGVzLiBUaGlzIHdlYiBzaXRlIGNhbiBoZWxwIHdlYiBw
cm9ncmFtbWVycyB3aG8gd2lzaCB0byBleHRlbmQgdGhlaXIga25vd2xlZGdlIHRvIHRoZSB3aXJl
bGVzcyB3b3JsZC4gCis8YnIvPgoreHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKKzwv
cD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvcC1tb2RlLndt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9wLW1vZGUud21sCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvcC1tb2RlLndtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJ
QyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm91cm0ub3Jn
L0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJk
MSI+IAorPCFbQ0RBVEFbIDxwPiBkZWZhdWx0IG1vZGUgaXMgIndyYXAiIGZvciB0aGUgZmlyc3Qg
cCBlbGVtZW50IF1dPgorPHA+IFRlc3QgZm9yIG1vZGUgYXR0cmlidXRlIG9mIHAgZWxlbWVudCBp
biBXTUwgPC9wPgorPGJyLz4KKzwhW0NEQVRBWyA8cD4gaXQgd2lsbCB1c2UgdGhlIG1vZGUgb2Yg
cHJldmlvdXMgcGFyYWdyYXBoIGVsZW1lbnRdXT4KKzxwPgorSGVyZSB5b3UgY2FuIGxlYXJuIHZh
cmlvdXMgbW9iaWxlIHRlY2hub2xvZ2llcyBsaWtlIFdBUCAvIFdBUCAyLjAsIFdNTCwgV01MU2Ny
aXB0LCBYSFRNTCBNUCwgV0NTUyAvIFdBUCBDU1MsIFVBUHJvZiBhbmQgU01TIHRocm91Z2ggb3Vy
IGZyZWUgdHV0b3JpYWxzLCBhcnRpY2xlcyBhbmQgZXhhbXBsZXMuIFRoaXMgd2ViIHNpdGUgY2Fu
IGhlbHAgd2ViIHByb2dyYW1tZXJzIHdobyB3aXNoIHRvIGV4dGVuZCB0aGVpciBrbm93bGVkZ2Ug
dG8gdGhlIHdpcmVsZXNzIHdvcmxkLiAKKzxici8+CitISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhICis8L3A+Cis8YnIvPgorPCFbQ0RBVEFbIDxwIG1vZGU9
Im5vd3JhcCI+XV0+Cis8cCBtb2RlPSJub3dyYXAiPgorSGVyZSB5b3UgY2FuIGxlYXJuIHZhcmlv
dXMgbW9iaWxlIHRlY2hub2xvZ2llcyBsaWtlIFdBUCAvIFdBUCAyLjAsIFdNTCwgV01MU2NyaXB0
LCBYSFRNTCBNUCwgV0NTUyAvIFdBUCBDU1MsIFVBUHJvZiBhbmQgU01TIHRocm91Z2ggb3VyIGZy
ZWUgdHV0b3JpYWxzLCBhcnRpY2xlcyBhbmQgZXhhbXBsZXMuIFRoaXMgd2ViIHNpdGUgY2FuIGhl
bHAgd2ViIHByb2dyYW1tZXJzIHdobyB3aXNoIHRvIGV4dGVuZCB0aGVpciBrbm93bGVkZ2UgdG8g
dGhlIHdpcmVsZXNzIHdvcmxkLiAKKzxici8+CitISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhICis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd21sL3Nob3ctZmlyc3QtY2FyZC53bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93bWwvc2hvdy1maXJzdC1jYXJkLndtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3Qvd21sL3Nob3ctZmlyc3QtY2FyZC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8v
V0FQRk9SVU0vL0RURCBXTUwgMS4wLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9Im5vMSI+PHA+VGVzdCBmb3Igc2hvd2lu
ZyB0aGUgZmlyc3QgY2FyZCBvZiB3bWwgZGVjayBpbiBkZWZhdWx0IHdoZW4geW91IGRvZXNuJ3Qg
c3BlY2lmeSBhbnkgY29ycmVjdCBVUkwgZnJhZ21lbnQuPC9wPiBJZiB0aGUgdGVzdCBwYXNzZXMs
IHlvdSBzaG91bGQgc2VlIHRoaXMgdGV4dC48L2NhcmQ+Cis8Y2FyZCBpZD0ibm8yIj5UaGlzIGlz
IGNhcmQgMiwgeW91IHNob3VsZCBOT1Qgc2VlIHRoZXNlIHRleHQgd2hpbGUgcnVubmluZyB0aGlz
IHRlc3Q8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL3RhYmxlLWVs
ZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL3RhYmxlLWVsZW1l
bnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvdGFibGUtZWxlbWVu
dC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJo
dHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZD4K
KyA8cD4gVGVzdCBmb3IgdGFibGUgZWxlbWVudCBpbiBXTUwgPC9wPgorIDxwPiBzb3VyY2UgY29k
ZTogPC9wPgorIDwhW0NEQVRBWworICAgPHRhYmxlIGNvbHVtbnM9IjMiIGFsaWduPSJMUlIiPiAK
KyAgICA8dHI+CisgICAgIDx0ZD5DZWxsIG9uZTwvdGQ+CisgICAgIDx0ZD5DPGJyLz5lbGw8YnIv
PiB0d288L3RkPgorICAgICA8dGQ+Q2VsbCB0aHJlZTwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+
CisgICAgPHRkPiBvbmUgPC90ZD4KKyAgICA8dGQvPgorICAgIDx0ZD5DIHRocmVlPC90ZD4KKyAg
ICA8L3RyPgorICAgPC90YWJsZT4KKyBdXT4KKyA8YnIvPgorICA8cD4KKyAgIDx0YWJsZSBjb2x1
bW5zPSIzIiBhbGlnbj0iTFJSIj4gCisgICAgPHRyPgorICAgICA8dGQ+Q2VsbCBvbmU8L3RkPgor
ICAgICA8dGQ+Qzxici8+ZWxsPGJyLz4gdHdvPC90ZD4KKyAgICAgPHRkPkNlbGwgdGhyZWU8L3Rk
PgorICAgIDwvdHI+CisgICAgPHRyPgorICAgIDx0ZD4gb25lIDwvdGQ+CisgICAgPHRkLz4KKyAg
ICA8dGQ+QyB0aHJlZTwvdGQ+CisgICAgPC90cj4KKyAgIDwvdGFibGU+CisgPC9wPgorIDwvY2Fy
ZD4KKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL3Rlc3Qud21sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL3Rlc3Qud21sCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC93bWwvdGVzdC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOSBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0nY2FyZDEnPgorIDxwPiBUaGlzIHBhZ2UgaXMgYXNzaXN0
YW50IHBhZ2UuIE1hbnkgdGVzdCBwYWdlcyB3aWxsIGp1bXAgaGVyZS4gPC9wPgorIDxwPkNsaWNr
ICJCYWNrIiB0byBnbyBiYWNrIHRvIHRoZSBwcmV2aW91cyBwYWdlPC9wPgorIDxhbmNob3I+IEJh
Y2sgPHByZXYvPjwvYW5jaG9yPgorIDwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC93bWwvdGV4dC1lbXBoYXNpcy53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC93bWwvdGV4dC1lbXBoYXNpcy53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC90ZXh0LWVtcGhhc2lzLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RU
RCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+
Cis8d21sPgorIDxjYXJkIHRpdGxlPSJUZXh0IEZvcm1hdHRpbmciPgorICA8cD4gVGVzdCBmb3Ig
dGV4dCBlbXBoYXNpcyBvZiBXTUwgPC9wPgorICA8cD4KKyAgIG5vcm1hbDxici8+CisgICA8ZW0+
ZW1waGFzaXplZDwvZW0+PGJyLz4KKyAgIDxzdHJvbmc+c3Ryb25nPC9zdHJvbmc+PGJyLz4KKyAg
IDxiPmJvbGQ8L2I+PGJyLz4KKyAgIDxpPml0YWxpYzwvaT48YnIvPgorICAgPHU+dW5kZXJsaW5l
PC91Pjxici8+CisgICA8YmlnPmJpZzwvYmlnPjxici8+CisgICA8c21hbGw+c21hbGw8L3NtYWxs
PgorICA8L3A+CisgPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC92
YWxpZGF0ZS1kdGQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL3ZhbGlk
YXRlLWR0ZC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC92YWxpZGF0
ZS1kdGQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcgQEAKKzw/eG1sIHZlcnNpb249IjEu
MCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4i
ICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzxjYXJk
IGlkPSJubzEiIHRpdGxlPSJDYXJkIDEiPiAKKzxwPlRlc3QgZm9yIERURCB2YWxpZGF0aW9uIG9m
IFdNTCBmaWxlPGJyLz5JZiB0aGUgRFRDVFlQRSBpcyBpbmNvcnJlY3Qgb3IgbWlzc2luZywgdGhp
cyB0ZXN0IGZhaWxlcy48L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYS1ici1lbGVtZW50LndtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtYnItZWxlbWVudC53bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtYnIt
ZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8v
RU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8
Y2FyZCB0aXRsZT0iQSBlbGVtZW50IFRlc3QiPgorICA8cD5UZXN0IGZvciBBIGVsZW1lbnQgaW5j
bHVkaW5nIEJSIGVsZW1lbnQ8L3A+CisgIDxwPgorICAgIk5leHQgUGFnZSIgd2lsbCBiZSBicm9r
ZW4gYnkgQlIgZWxlbWVudCBiZXR3ZWVuIHRoZW08YnIvPgorICAgPGEgaHJlZj0iLi4vdGVzdC53
bWwiPk5leHQgPGJyLz4gcGFnZTwvYT4KKyAgPC9wPgorIDwvY2FyZD4KKzwvd21sPiAKKwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWVsZW1lbnQud21sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYS1lbGVt
ZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvYS1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8
d21sPgorIDxjYXJkIHRpdGxlPSJBIGVsZW1lbnQgVGVzdCI+CisgIDxwPlRlc3QgZm9yIEEgZWxl
bWVudC4gPGJyLz5XaGVuIG1vdXNlIG1vdmVzIGludG8gbGluaywgImdvIHRvIHRlc3Qud21sIiB3
aWxsIGFwcGVhciwgY2xpY2sgdGhlIGxpbmssIHdpbGwganVtcCB0byB0ZXN0LndtbDwvcD4KKyAg
CisgIDxwPgorICAgPGEgaHJlZj0iLi4vdGVzdC53bWwiIHRpdGxlPSJnbyB0byB0ZXN0LndtbCIg
Pk5leHQgcGFnZTwvYT4KKyAgPC9wPgorIDwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWltZy1lbGVtZW50LndtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtaW1nLWVsZW1l
bnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9hLWltZy1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94
bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RU
RCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+
Cis8d21sPgorIDxjYXJkIHRpdGxlPSJBIGVsZW1lbnQgVGVzdCI+CisgIDxwPlRlc3QgZm9yIEEg
ZWxlbWVudCBpbmNsdWRpbmcgaW1nIGVsZW1lbnQuIDwvcD4KKyAgPHA+CisgICA8YSBocmVmPSIu
Li90ZXN0LndtbCIgdGl0bGU9Ik5leHQgUGFnZSI+PGltZyBzcmM9Ii4uL3Jlc291cmNlcy9zbWls
ZS5naWYiLz48L2E+CisgIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4gCisKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYWNjZXNzLXRhcmdldC53bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hY2Nlc3MtdGFyZ2V0
LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvYWNjZXNzLXRhcmdldC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4K
KworPHdtbD4KKzxjYXJkIG9udGltZXI9Ii4vdGFyZ2V0ZGVjay53bWwiPgorPHRpbWVyIG5hbWU9
InQxIiB2YWx1ZT0iMzAiLz4KKzxwPiBUZXN0IGZvciBEZWNrIEFjY2VzcyBjb250cm9sIGluIFdN
TC4gPC9wPgorPHA+IElmIHRoZSB0ZXN0IHBhc3NlcywgdGhpcyBkZWNrIHdpbGwganVtcCB0byAi
dGFyZ2V0ZGVjay53bWwiIGFmdGVyIDMgc2Vjb25kPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1ici1lbGVtZW50
LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2Vz
L2FuY2hvci1ici1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWJyLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgdGl0bGU9IkFuY2hvciBUYWci
PgorPHA+IFRlc3QgZm9yIGJyIGVsZW1lbnQgZW5jbG9zZWQgd2l0aCBhbmNob3IgZWxlbWVudCA8
L3A+Cis8cD4KKzxhbmNob3I+PGdvIGhyZWY9Ii4uL3Rlc3Qud21sIi8+R28gdG8gPGJyLz50ZXN0
LndtbDwvYW5jaG9yPgorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1lbGVtZW50LndtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1lbGVtZW50Lndt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
YW5jaG9yLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdN
TCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3
bWw+CisgPGNhcmQgdGl0bGU9IkFuY2hvciBUYWciPgorICA8cD4KKyAgVGhpcyBpcyBhbiBhbmNo
b3IgYm91bmQgdG8gZ28gdGFzazxici8+CisgICA8YW5jaG9yPk5leHQgcGFnZQorICA8Z28gaHJl
Zj0iY2FyZHMud21sIi8+CisgICA8L2FuY2hvcj4KKyAgPC9wPgorCisgICA8cD4KKyAgIFRoaXMg
YW4gYW5jaG9yIGJvdW5kIHRvIHByZXYgdGFzazxici8+CisgICA8YW5jaG9yIHRpdGxlPSJQcmV2
aW91cyIgPlByZXYgcGFnZQorICAgPHByZXYvPgorICAgPC9hbmNob3I+CisgIDwvcD4KKworICAg
PHA+CisgICAgVGhpcyBhbiBhbmNob3IgYm91bmQgdG8gcmVmcmVzaCB0YXNrPGJyLz4KKyAgICA8
YW5jaG9yIHRpdGxlPSJSZWZyZXNoIj5SZWZyZXNoICR2YXIKKyAgICA8cmVmcmVzaD4gCisgICAg
PHNldHZhciBuYW1lPSJ2YXIiIHZhbHVlPSJtZSIvPgorICAgIDwvcmVmcmVzaD4KKyAgICA8L2Fu
Y2hvcj4KKyAgPC9wPgorCisgICA8cD4KKyAgIFRoaXMgaXMgYW4gYW5jaG9yIGNvbnRhaW5zIGlt
ZyBlbGVtZW50LCBib3VuZCB0byBwcmV2IHRhc2sgPGJyLz4KKyAgIDxhbmNob3IgdGl0bGU9ImNs
aWNrIHRvIGdvIGJhY2siPgorICAgPHByZXYvPgorICAgPGltZyBzcmM9Ii4uL3Jlc291cmNlcy9z
bWlsZS5naWYiIC8+CisgICA8L2FuY2hvcj4KKyAgIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4gCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1pbWctZWxl
bWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9hbmNob3ItaW1nLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hbmNob3ItaW1nLWVsZW1lbnQud21sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUg
d21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3Lndh
cGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgdGl0bGU9IkFuY2hv
ciBUYWciPgorPHA+IFRlc3QgZm9yIFdNTCBpbWcgZW5jbG9zZWQgd2l0aCBhbmNob3IgZWxlbWVu
dCwgd2hlbiB0aGUgbW91c2UgbW92ZSBpbnRvIHRoZSBpbWFnZSwgdGhlIHRpcCAiZ28gdG8gdGVz
dC53bWwiIHdpbGwgYXBwZWFyPC9wPgorPHA+Cis8YW5jaG9yIHRpdGxlPSJnbyB0byB0ZXN0Lndt
bCI+PGltZyBzcmM9Ii4uL3Jlc291cmNlcy9zbWlsZS5naWYiLz4gPGdvIGhyZWY9Ii4uL3Rlc3Qu
d21sIi8+PC9hbmNob3I+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1uZXdjb250ZXh0LWF0dHIud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1uZXdj
b250ZXh0LWF0dHIud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50
ZXJhY3RpdmVjYXNlcy9jYXJkLW5ld2NvbnRleHQtYXR0ci53bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMjAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMg
Ii0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9E
VEQvd21sXzEuMS54bWwiPgorCis8d21sPgorIDxjYXJkIGlkPSJmaXJzdGNhcmQiIHRpdGxlPSJP
bmUiPgorIDxwPiBUZXN0IGZvciBuZXdjb250ZXh0IGF0dHJpYnV0ZSBvZiBjYXJkIGVsZW1lbnQ8
L3A+CisgPHA+IFRoaXMgaXMgdGhlIGZpcnN0IGNhcmQsIENsaWNrICJHbyIgdG8gZW50ZXIgY2Fy
ZCB0d28uIDxici8+IEJlY2F1c2UgbmV3Y29udGV4dCBvZiBjYXJkIHR3byBpcyB0cnVlLCB0aGUg
aGlzdG9yeSBzdGF0ZSB3aWxsIGJlIGNsZWFuLCBhbmQgdGhlIHZhcmlhYmxlICIkdmFyMSIgd29u
J3QgYmUgcmVwbGFjZWQ8L3A+CisgPGRvIHR5cGU9ImFjY2VwdCIgbGFiZWw9IkdvIj4KKyA8Z28g
aHJlZj0iI3NlY29uZGNhcmQiPgorICAgIDxzZXR2YXIgbmFtZT0idmFyMSIgdmFsdWU9InR3byIv
PiAKKyA8L2dvPgorIDwvZG8+CisgPC9jYXJkPgorCisgPGNhcmQgaWQ9InNlY29uZGNhcmQiIHRp
dGxlPSIkdmFyMSIgbmV3Y29udGV4dD0idHJ1ZSI+CisgPHA+IFRoaXMgaXMgdGhlIGNhcmQgJHZh
cjEgPC9wPgorIDxwPiBCZWNhdXNlIG5ld2NvbnRleHQgb2YgdGhpcyBjYXJkIGlzIHRydWUsIHRo
ZSBoaXN0b3J5IHN0YXRlIHdpbGwgYmUgY2xlYW4sIGFuZCB0aGUgdmFyaWFibGUgIiR2YXIxIiB3
b24ndCBiZSByZXBsYWNlZDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4KKwpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW9uZW50ZXJiYWNrd2FyZC53bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW9u
ZW50ZXJiYWNrd2FyZC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL2NhcmQtb25lbnRlcmJhY2t3YXJkLndtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwyMiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJ
QyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQg
MSIgb25lbnRlcmJhY2t3YXJkPSIjY2FyZDMiPiAKKzxwPlRlc3QgZm9yIGNhcmQgb25lbnRlcmJh
Y2t3YXJkIGludHJpbnNpYyBldmVudDwvcD4KKzxwPiBDbGljayAiR28iIHRvIGp1bXAgdG8gdGhl
IGNhcmQyLCBpZiB5b3UgZ28gYmFjayBmcm9tIGNhcmQyLCBpdCB3aWxsIGp1bXAgdG8gY2FyZDM8
L3A+Cis8YW5jaG9yIHRpdGxlPSJnbyB0byBjYXJkMiI+Cis8Z28gaHJlZj0iI2NhcmQyIj5Hbzwv
Z28+Cis8L2FuY2hvcj4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+
IAorPHA+VGhpcyBpcyBjYXJkMixjbGljayAiQmFjayIgd2lsbCBiYWNrIHRvIHRoZSBwcmV2aW91
cyBwYWdlPC9wPiAKKzxhbmNob3I+CitCYWNrCis8cHJldiAvPgorPC9hbmNob3I+Cis8L2NhcmQ+
Cis8Y2FyZCBpZD0iY2FyZDMiIHRpdGxlPSJDYXJkIDMiID4KKzxwPlRoaXMgaXMgY2FyZDM8L3A+
Cis8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL2NhcmQtb25lbnRlcmZvcndhcmQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVyZm9yd2FyZC53bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb25l
bnRlcmZvcndhcmQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21s
PgorPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIiBvbmVudGVyZm9yd2FyZD0iI2NhcmQy
Ij4KKzxwPlRlc3QgZm9yIGNhcmQgb25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8cD5DYXJkIG9u
ZSB3aWxsIGp1bXAgdG8gY2FyZCB0d28gd2hlbiBlbnRlcmVkIGZvcndhcmQgaXQ8L3A+Cis8L2Nh
cmQ+Cis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJDYXJkIDIiPgorPHA+VGVzdCBmb3IgY2FyZCBv
bmVudGVyZm9yd2FyZCBldmVudDwvcD4KKzxwPlRoaXMgaXMgY2FyZDIsIEkgYW0gZW50ZXJlZCBi
eSBjYXJkIG9uZSBmb3J3YXJkaW5nPC9wPgorPC9jYXJkPgorPC93bWw+IAorCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb250aW1lci53bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW9udGlt
ZXIud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9jYXJkLW9udGltZXIud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE5IEBACis8P3ht
bCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFRE
IFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4K
KworPHdtbD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ2FjaGUtQ29udHJvbCIgY29udGVu
dD0ibWF4LWFnZT0wIi8+Cis8L2hlYWQ+Cis8Y2FyZCBpZD0iY2FyZDEiIG9udGltZXI9IiNjYXJk
MiIgdGl0bGU9IkNhcmQgb25lIj4KKzxwPiBUZXN0IGZvciBjYXJkIG9udGltZXIgaW50cmluc2lj
IGV2ZW50IGluIFdNTCA8L3A+Cis8dGltZXIgbmFtZT0idGltZTEiIHZhbHVlPSI1MCIvPgorPHA+
CitUaGlzIGlzIGNhcmQgb25lPGJyLz5UaGUgdGltZXIgaXMgdHJpZ2dlcmVkIGJ5IHRoZSBvbnRp
bWVyIGludHJpbnNpYyBldmVudChvbnRpbWVyIGFzIGF0dHJpYnV0ZSBvZiBjYXJkIGVsZW1lbnQp
PGJyLz5XaGVuIHRoZSB0aW1lciBpcyB0aW1lb3V0KGFmdGVyIDVzKSwgd2lsbCBqdW1wIHRvIGNh
cmQgdHdvLgorPC9wPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQyIj4KK1RoaXMgaXMgQ2FyZCB0
d28KKzwvY2FyZD4KKzwvd21sPgorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL2RlY2stYWNjZXNzLWNvbnRyb2wud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZGVjay1hY2Nlc3MtY29udHJvbC53bWwJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2RlY2st
YWNjZXNzLWNvbnRyb2wud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdN
TCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisK
Kzx3bWw+Cis8Y2FyZCBvbmVudGVyZm9yd2FyZD0idGFyZ2V0ZGVjay53bWwiPgorPHA+IFRlc3Qg
Zm9yIERlY2sgQWNjZXNzIGNvbnRyb2wgaW4gV01MLiA8L3A+Cis8cD4gVGhpcyBkZWNrIHdpbGwg
dHJ5IHRvIGp1bXAgdG8gInRhcmdldGRlY2sud21sIiB3aGVuIGl0IGlzIGxvYWRlZC4gQnV0IGl0
IHdpbGwgPHN0cm9uZz5GQUlMPC9zdHJvbmc+IGJlY2F1c2UgInRhcmdldGRlY2sud21sIiBqdXN0
IGFsbG93cyAiYWNjZXNzLXRhcmdldC53bWwiIHRvIGFjY2VzcyBpdC48L3A+Cis8cD4gWW91IGNh
biBjbGljayAnR28nIHRvIGVudGVyICdhY2Nlc3MtdGFyZ2V0LndtbCcsIGFuZCB0aGVuIGVudGVy
ICd0YXJnZXRkZWNrLndtbCcgZnJvbSB0aGVyZTwvcD4KKzxhbmNob3IgdGl0bGU9ImdvIHRvIGFj
Y2Vzcy10YXJnZXQud21sIj48Z28gaHJlZj0iLi9hY2Nlc3MtdGFyZ2V0LndtbCI+R288L2dvPjwv
YW5jaG9yPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL2dvLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZ28tZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2dvLWVsZW1lbnQud21sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQwIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQ
RSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53
YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgaWQ9ImNhcmQxIiB0
aXRsZT0iT25lIj4KKyAgPHA+IFRlc3QgZm9yIGdvIGVsZW1lbnQgaW4gV01MIDwvcD4KKyAgPGJy
Lz4KKyAgQ2FzZSAxOiBqdW1wIGFtb25nIG9uZSBkZWNrCisgIDxkbyBuYW1lPSJnbyIgdHlwZT0i
YWNjZXB0IiBsYWJlbD0iR28gdG8gY2FyZDIiPgorICAgPGdvIGhyZWY9IiNjYXJkMiIgc2VuZHJl
ZmVyZXI9InRydWUiIC8+CisgIDwvZG8+CisgIDxwLz4KKyAgQ2FzZSAyOiBqdW1wIGZyb20gb25l
IGRlY2sgdG8gYW5vdGhlciBvbmUKKyAgPGRvIG5hbWU9ImdvMiIgdHlwZT0iYWNjZXB0IiBsYWJl
bD0iR28gdG8gdGVzdC53bWwiPgorICAgPGdvIGhyZWY9Ii4uL3Rlc3Qud21sIi8+CisgIDwvZG8+
CisgIDxwLz4KKyAgQ2FzZSAzOiBqdW1wIHRvIHRlc3Qud21sIGFuZCBwb3N0IGRhdGEgd2l0aCBw
b3N0IG1ldGhvZAorICA8ZG8gbmFtZT0iZ28zIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJQb3N0IHRv
IHRlc3Qud21sIj4KKyAgIDxnbyBocmVmPSIuLi90ZXN0LndtbCIgbWV0aG9kPSJwb3N0IiBhY2Nl
cHQtY2hhcnNldD0idXRmLTgsIGxhdGluMSI+CisgICAgPHBvc3RmaWVsZCBuYW1lPSJ2YXIxIiB2
YWx1ZT0iaGVsbG8iLz4KKyAgICA8cG9zdGZpZWxkIG5hbWU9InZhcjIiIHZhbHVlPSIgd29ybGQi
Lz4KKyAgIDwvZ28+CisgIDwvZG8+CisgIDxwLz4KKyAgQ2FzZSA0OiBqdW1wIHRvIHRlc3Qud21s
IGFuZCBzZW5kIHJlcXVlc3Qgd2l0aCBnZXQgbWV0aG9kIAorICA8ZG8gbmFtZT0iZ280IiB0eXBl
PSJhY2NlcHQiIGxhYmVsPSJnZXQgZnJvbSB0ZXN0LndtbCIgc2VuZHJlZmVyZXI9InRydWUiPgor
ICAgPGdvIGhyZWY9Ii4uL3Rlc3Qud21sIiBtZXRob2Q9ImdldCIgYWNjZXB0LWNoYXJzZXQ9InV0
Zi04LGxhdGluMSxpc28tODg1OS0xIj4KKyAgICA8cG9zdGZpZWxkIG5hbWU9InZhcjEiIHZhbHVl
PSJoZWxsbyIvPgorICAgIDxwb3N0ZmllbGQgbmFtZT0idmFyMiIgdmFsdWU9ImZyaWVuZCIvPgor
ICAgPC9nbz4KKyAgPC9kbz4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJU
d28iPgorICA8cCBhbGlnbj0iY2VudGVyIj4KKyAgVGhpcyBpcyB0aGUgc2Vjb25kIGNhcmQKKyA8
L3A+CisgPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVy
YWN0aXZlY2FzZXMvaW5wdXQtZW1wdHlvay53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1lbXB0eW9rLndtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvaW5wdXQtZW1wdHlvay53
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pgor
PCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0
cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkPgor
PHA+IFRlc3QgZm9yIGlucHV0IGVtcHR5b2sgYXR0cmlidXRlIGluIFdNTCA8L3A+CitGb3IgdGhl
IGZvbGxvd2luZyBpbnB1dCBlbGVtZW50cywgaW5wdXQgaXMgcmVxdWlyZWQ6Cis8YnIvPgorZm9y
bWF0PU4qTTtlbXB0eW9rPWZhbHNlPGlucHV0IG5hbWU9IngyIiBlbXB0eW9rPSJmYWxzZSIgZm9y
bWF0PSJOKk0iLz4KKzxici8+Citmb3JtYXQ9Kk07ZW1wdHlvaz1mYWxzZTxpbnB1dCBuYW1lPSJ4
MyIgZW1wdHlvaz0iZmFsc2UiIGZvcm1hdD0iKk0iLz4KKzxici8+CitGb3IgdGhlIGZvbGxvd2lu
ZyBpbnB1dCBlbGVtZW50cywgaW5wdXQgaXMgbm90IHJlcXVpcmVkOgorPGJyLz4KK2RlZmF1bHQ8
aW5wdXQgbmFtZT0ieDQiLz4gCis8YnIvPgorZm9ybWF0PSpNPGlucHV0IG5hbWU9Ing1IiBmb3Jt
YXQ9IipNIi8+IAorPGJyLz4KK2VtcHR5b2s9dHJ1ZTxpbnB1dCBuYW1lPSJ4NiIgZW1wdHlvaz0i
dHJ1ZSIvPgorPGJyLz4KK2Zvcm1hdD1uKk07ZW1wdHlvaz10cnVlPGlucHV0IG5hbWU9Ing3IiBl
bXB0eW9rPSJ0cnVlIiBmb3JtYXQ9Im4qTSIvPgorPGJyLz4KK2Zvcm1hdD0qTTtlbXB0eW9rPXRy
dWU8aW5wdXQgbmFtZT0ieDgiIGVtcHR5b2s9InRydWUiIGZvcm1hdD0iKk0iLz4KKzwvY2FyZD4K
Kzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1
dC1mb3JtYXQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvaW5wdXQtZm9ybWF0LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zh
c3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvaW5wdXQtZm9ybWF0LndtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwzNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJ
QyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgdGl0bGU9IklucHV0Ij4KKzxwPiBU
ZXN0IGZvciBpbnB1dCBmb3JtYXQgaW4gV01MPC9wPgorPHA+CitQYXNzd29yZChkZWZhdWx0OipN
KTo8aW5wdXQgbmFtZT0iZGVmYXVsdCIvPgorPGJyLz4KK1Bhc3N3b3JkKDZNKTogPGlucHV0IG5h
bWU9IlB3ZCIgdHlwZT0icGFzc3dvcmQiIGZvcm1hdD0iNk0iLz4KKzxici8+CitQYXNzd29yZChB
QWEpOiA8aW5wdXQgbmFtZT0iUHdkMiIgdHlwZT0icGFzc3dvcmQiIGZvcm1hdD0iQUFhIi8+IAor
PGJyLz4KK29uZS1udW1lcmljK2xvd2VyY2FzZShOKmEpOjxpbnB1dCBuYW1lPSJ1cHBlciIgZm9y
bWF0PSJOKmEiLz4gCis8YnIvPgorVXBwZXJjYXNlK25vbi1udW1lcmljKEFBQTtzaXplPTgpOjxp
bnB1dCBuYW1lPSJ1cHBlciIgc2l6ZT0iOCIgZm9ybWF0PSJBQUEiLz4gCis8YnIvPgorTG93ZXJj
YXNlK25vbi1udW1lcmljKGFhYTtzaXplPTg7d2lkdGg9Mik6PGlucHV0IG5hbWU9Imxvd2VyIiBz
aXplPSI4IiB3aWR0aD0iMiIgZm9ybWF0PSJhYWEiLz4KKzxici8+CitOdW1lcmljKDVOO21heGxl
bj0zKTo8aW5wdXQgbmFtZT0ibnVtZXJpYyIgbWF4bGVuZ3RoPSIzIiBmb3JtYXQ9IjVOIi8+Cis8
YnIvPgorTnVtZWlyYytzeW1ib2xzKG5ubik6PGlucHV0IG5hbWU9Im51bWVyaWMrIiBmb3JtYXQ9
Im5ubiIvPgorPGJyLz4KK1VwcGVyY2FzZStudW1lcmljK3N5bWJvbHMoWFhYKTo8aW5wdXQgbmFt
ZT0idXBwZXIrIiBmb3JtYXQ9IlhYWCIvPgorPGJyLz4KK0xvd2VyY2FzZStudW1lcmljK3N5bWJv
bHMoeHh4KTo8aW5wdXQgbmFtZT0ibG93ZXIrIiBmb3JtYXQ9Inh4eCIvPgorPGJyLz4KK1VwcGVy
Y2FzZStudW1lcmljK3N5bWJvbHMoTU1NKTo8aW5wdXQgbmFtZT0iZGVmX3VwcGVyKyIgZm9ybWF0
PSJNTU0iLz4KKzxici8+CitMb3dlcmNhc2UrbnVtZXJpYytzeW1ib2xzKG1tbSk6PGlucHV0IG5h
bWU9ImRlZl9sb3dlcisiIGZvcm1hdD0ibW1tIi8+Cis8YnIvPgorTWl4ZWQgZGF0YShhXC1OTip4
KTxpbnB1dCBuYW1lPSJhbnkiIGZvcm1hdD0iYVwtTk4qeCIvPgorPGJyLz4KKzwvcD4KKzwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9v
bmV2ZW50LWdvLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL29uZXZlbnQtZ28ud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LWdvLndtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSwyMCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9E
VEQvd21sXzEuMS54bWwiPgorPHdtbD4KKworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAx
Ij4gCisgPG9uZXZlbnQgdHlwZT0ib25lbnRlcmZvcndhcmQiPgorICA8Z28gaHJlZj0iI2NhcmQy
Ii8+CisgPC9vbmV2ZW50PgorPHA+VGVzdCBmb3Igb25ldmVudCBlbGVtZW50IHdoaWNoIGJpbmRz
IGdvIHRhc2sgd2l0aCBvbmVudGVyZm9yd2FyZCBldmVudDwvcD4KKzxwPndoZW4gZW50ZXIgZm9y
d2FyZCB0byB0aGlzIGNhcmQsIGl0IHdpbGwganVtcCB0byBjYXJkIDI8L3A+Cis8L2NhcmQ+Cis8
Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJDYXJkIDIiPgorPHA+VGVzdCBmb3Igb25ldmVudCBlbGVt
ZW50IHdoaWNoIGJpbmRzIGdvIHRhc2sgd2l0aCBvbmVudGVyZm9yd2FyZCBldmVudDwvcD4KKzxw
PndoaWxlIGNhcmQgMSBpcyBsb2FkZWQsIGl0IHdpbGwgdHJpZ2dlciB0aGUgb25lbnRlcmZvcndh
cmQgZXZlbnQgYW5kIGp1bXAgdG8gY2FyZDIgaW1tZWRpYXRlbHk8L3A+Cis8cD5UaGlzIGlzIGNh
cmQyPC9wPgorPC9jYXJkPgorCis8L3dtbD4gCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1ub29wLndtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtbm9vcC53bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtbm9v
cC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/
PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisi
aHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisKKzxjYXJk
IGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQgMSI+IAorIDxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3
YXJkIj4KKyA8bm9vcC8+CisgPC9vbmV2ZW50PgorPHA+VGVzdCBmb3Igb25ldmVudCBlbGVtZW50
IHdoaWNoIGJpbmRzIG5vb3AgdGFzayB3aXRoIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+
d2hlbiBlbnRlciBmb3J3YXJkIHRvIHRoaXMgY2FyZCwgaXQgd29uJ3QgZG8gYW55dGhpbmcgYXMg
aWYgdGhlIG9uZW50ZXJmb3J3YXJkIGV2ZW50IHdhc24ndCB0cmlnZ2VyZWQ8L3A+Cis8L2NhcmQ+
Cis8L3dtbD4gCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
b25ldmVudC1wcmV2LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL29uZXZlbnQtcHJldi53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtcHJldi53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMjIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1
bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisKKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9
IkNhcmQgMSI+IAorPHA+VGVzdCBmb3Igb25ldmVudCBlbGVtZW50IHdoaWNoIGJpbmRzIHByZXYg
dGFzayB3aXRoIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+Q2xpY2tpbmcgIkdvIiB3aWxs
IGNhdXNlIGl0IHRvIGp1bXAgdG8gdGhlIGNhcmQyLCBidXQgd2hpY2ggYmluZHMgcHJldiB0YXNr
IHRvIG9uZW50ZXJmb3J3YXJkIGV2ZW50IHdpdGhpbiBvbmV2ZW50IGVsZW1lbnQsIGFzIGEgcmVz
dWx0LCBpdCB3aWxsIGp1bXAgYmFjayB0byBjYXJkIDE8L3A+Cis8YW5jaG9yIHRpdGxlPSJHbyB0
byBjYXJkMiI+R28KKzxnbyBocmVmPSIjY2FyZDIiLz4KKzwvYW5jaG9yPgorPC9jYXJkPgorCis8
Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJDYXJkIDIiPgorPHA+VGVzdCBmb3Igb25ldmVudCBlbGVt
ZW50IHdoaWNoIGJpbmRzIHByZXYgdGFzayB3aXRoIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgor
PHA+VGhpcyBpcyBjYXJkMi4gV2hlbiBjYXJkIDIgaXMgZW50ZXJlZCBmb3J3YXJkLCBpdCB3aWxs
IGp1bXAgYmFjayB0byB0aGUgcHJldmlvdXMgcGFnZSA8L3A+CisgPG9uZXZlbnQgdHlwZT0ib25l
bnRlcmZvcndhcmQiPgorIDxwcmV2Lz4KKyA8L29uZXZlbnQ+Cis8L2NhcmQ+Cis8L3dtbD4gCisK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1yZWZy
ZXNoLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL29uZXZlbnQtcmVmcmVzaC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtcmVmcmVzaC53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5v
cmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisKKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNh
cmQgMSI+IAorIDx0aW1lciBuYW1lPSJUIiB2YWx1ZT0iMzAiLz4KKyA8b25ldmVudCB0eXBlPSJv
bnRpbWVyIj4KKyA8cmVmcmVzaD4KKyA8c2V0dmFyIG5hbWU9InZhciIgdmFsdWU9IlZBUklBQkxF
Ii8+CisgPC9yZWZyZXNoPgorIDwvb25ldmVudD4KKzxwPlRlc3QgZm9yIG9uZXZlbnQgZWxlbWVu
dCB3aGljaCBiaW5kcyByZWZyZXNoIHRhc2sgd2l0aCBvbnRpbWVyIGV2ZW50PC9wPgorPHA+IFdo
ZW4gdGhlIHRpbWVyIHRpbWVvdXQoM3MpLCB0aGUgcGFnZSB3aWxsIGJlIHJlZnJlc2guIEFzIGEg
Y29uc2VxdWVuY2UsIHdlIGNhbiBzZWUgdGhlIGZvbGxvd2luZyB2YXJpYWJsZSByZWZlcmVuY2Ug
aGFzIGJlZW4gc3Vic3RpdHV0ZWQ8L3A+Cis8cCBhbGlnbj0iY2VudGVyIj4gSGVyZSBpcyBhIHZh
cmlhYmxlIDogdmFyID0gJHZhciA8L3A+Cis8L2NhcmQ+Cis8L3dtbD4gCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1zaGFkb3cud21sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVudC1z
aGFkb3cud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3Rp
dmVjYXNlcy9vbmV2ZW50LXNoYWRvdy53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEu
eG1sIj4KKzx3bWw+Cis8dGVtcGxhdGU+Cis8b25ldmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+
Cis8Z28gaHJlZj0iI2NhcmQyIi8+Cis8L29uZXZlbnQ+Cis8L3RlbXBsYXRlPgorPGNhcmQgaWQ9
ImNhcmQxIiB0aXRsZT0iQ2FyZCBPbmUiPgorPG9uZXZlbnQgdHlwZT0ib25lbnRlcmZvcndhcmQi
PgorPGdvIGhyZWY9IiNjYXJkMyIvPgorPC9vbmV2ZW50PgorPHA+VGVzdCBmb3Igb25ldmVudCBz
aGFkb3dpbmcgaW4gV01MPC9wPgorPHA+VGhlIGNhcmQtbGV2ZWwgb25ldmVudCB3aWxsIHNoYWRv
dyB0aGUgZGVjay1sZXZlbCBvbmV2ZW50LiBBcyBhIHJlc3VsdCwgY2FyZCAxIHdvbid0IGp1bXAg
dG8gY2FyZDIgIGJ1dCB0byBjYXJkIDMgYWNjb3JkaW5nIHRvIHRoZSBjYXJkLWxldmVsIG9uZXZl
bnQncyByZXF1aXJlbWVudC4gQWZ0ZXIgZW50ZXJlZCB0aGUgY2FyZCAzLCB0aGUgZGVjay1sZXZl
bCBvbmV2ZW50IGVsZW1lbnQgaXNuJ3Qgc2hhZG93ZWQgYnkgdGhpcyBjYXJkLCBzbyBpdCB3aWxs
IGp1bXAgdG8gY2FyZCAyIGltbWVkaWF0ZWx5LjwvcD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJk
MiIgdGl0bGU9IkNhcmQgdHdvIiA+Cis8cD5UaGlzIGlzIGNhcmQgMjwvcD4KKzwvY2FyZD4KKzxj
YXJkIGlkPSJjYXJkMyIgdGl0bGU9IkNhcmQgVGhyZWUiPgorPHA+VGhpcyBpcyBjYXJkIDM8L3A+
Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvcG9zdGZpZWxkLWdldC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0ZmllbGQtZ2V0LndtbAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvcG9zdGZpZWxkLWdldC53bWwJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NU
WVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj48d21sPgorPGNhcmQ+Cis8cD5UZXN0IGZv
ciBwb3N0ZmllbGQgZWxlbWVudCBpbiBXTUwgPC9wPgorPHA+CisgQ2xpY2sgIkdldCIgdG8gU2Vu
ZCBkYXRhIGJ5IGdldCBtZXRob2Q8YnIgLz4KKyA8ZG8gdHlwZT0iYWNjZXB0IiBsYWJlbD0iR2V0
Ij4KKyAgPGdvIGhyZWY9Ii4uL3Rlc3Qud21sIiBtZXRob2Q9ImdldCI+CisgICA8cG9zdGZpZWxk
IG5hbWU9ImkiIHZhbHVlPSIyIi8+CisgICA8cG9zdGZpZWxkIG5hbWU9ImoiIHZhbHVlPSIzMCIv
PgorICA8L2dvPgorIDwvZG8+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Bvc3RmaWVsZC1wb3N0LndtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Bvc3RmaWVsZC1w
b3N0LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvcG9zdGZpZWxkLXBvc3Qud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8v
RFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnht
bCI+Cis8d21sPgorPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iY2FyZDEiPgorPHA+VGVzdCBmb3Ig
cG9zdGZpZWxkIGVsZW1lbnQgaW4gV01MPC9wPgorPHA+CisgQ2xpY2sgIlBvc3QiIHRvIFNlbmQg
ZGF0YSB3aXRoIHBvc3QgbWV0aG9kPGJyLz4KKyA8ZG8gdHlwZT0iYWNjZXB0IiBuYW1lPSJPayIg
bGFiZWw9IlBvc3QiPgorICA8Z28gaHJlZj0iLi4vdGVzdC53bWwiIG1ldGhvZD0icG9zdCI+Cisg
ICA8cG9zdGZpZWxkIG5hbWU9ImkiIHZhbHVlPSIyIi8+CisgICA8cG9zdGZpZWxkIG5hbWU9Imoi
IHZhbHVlPSIzMCIvPgorICA8L2dvPgorIDwvZG8+Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4gCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3NlbGVjdC1lbGVtZW50
LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2Vz
L3NlbGVjdC1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvc2VsZWN0LWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDI3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICIt
Ly9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJTZWxlY3Qg
VGVzdCI+Cis8cD4gVGVzdCBmb3Igc2VsZWN0IGVsZW1lbnQgaW4gV01MIDwvcD4KKzxwPiBZb3Ug
Y2FuIHNlbGVjdCBvbmUgb3IgbW9yZSBvcHRpb25zLCBhbmQgdGhlbiBjbGljayAnQW5zd2VyJywg
dGhlIHNlY29uZCBjYXJkIHdpbGwgdGVsbCB5b3Ugd2hhdCB5b3Ugc2VsZWN0ZWQ8L3A+Cis8cD4K
KzxzZWxlY3QgbmFtZT0iY2FycyIgdGl0bGU9IlNFTEVDVCIgbXVsdGlwbGU9InRydWUiID4KKyAg
PG9wdGlvbiB2YWx1ZT0idm9sdm8iID5Wb2x2bzwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJm
aWF0Ij5GaWF0PC9vcHRpb24+CisgIDxvcHRpb24gdmFsdWU9InNhYWIiPlNhYWI8L29wdGlvbj4K
KyAgPG9wdGlvbiB2YWx1ZT0iYXVkaSI+QXVkaTwvb3B0aW9uPgorPC9zZWxlY3Q+Cis8L3A+Cis8
ZG8gdHlwZT0iYWNjZXB0IiBsYWJlbD0iQW5zd2VyIj4KKyAgPGdvIGhyZWY9IiNjYXJkMiIvPgor
PC9kbz4KKzwvY2FyZD4KKworPGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iQW5zd2VyIj4KKzxwPgor
WW91IHNlbGVjdGVkOiAkKGNhcnMpCis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvc2VsZWN0LW9ucGljay1ldmVudC53bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZWxl
Y3Qtb25waWNrLWV2ZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvc2VsZWN0LW9ucGljay1ldmVudC53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTYgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5v
cmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkPgorPHA+IFRlc3QgZm9yIHNlbGVj
dCBvbnBpY2sgaW50cmluc2ljIGV2ZW50IGluIFdNTCA8L3A+Cis8cD4gV2hlbiB5b3Ugc2VsZWN0
IHRoZSAnTGlvbicgb3B0aW9uLCB3aWxsIGp1bXAgdG8gdGVzdC53bWw8L3A+CitQbGVhc2UgY2hv
b3NlIHlvdXIgZmF2b3VyaXRlIGFuaW1hbDo8YnIvPgorPHNlbGVjdCBuYW1lPSJYIiBtdWx0aXBs
ZT0idHJ1ZSI+Cis8b3B0aW9uIHZhbHVlPSJEIj5Eb2c8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9
IkMiPkNhdDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iTCIgb25waWNrPSIuLi90ZXN0LndtbCI+
TGlvbjwvb3B0aW9uPgorPC9zZWxlY3Q+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRl
c3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvc2V0dmFyLWVsZW1lbnQud21sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvc2V0dmFyLWVsZW1l
bnQud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9zZXR2YXItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorPHdtbD4KKyA8Y2FyZCBpZD0iZmlyc3RjYXJkIiB0aXRsZT0iVGVzdCBmb3IgU2V0dmFyIGVs
ZW1lbnQiPgorIDxwPiBUZXN0IGZvciBzZXR2YXIgZWxlbWVudCBpbiBXTUwgPC9wPgorIDxwPlRo
aXMgaXMgdGhlIGZpcnN0IGNhcmQgLCBoYXMgdmFyaWFibGU6IFZBUj0nJHZhcic8L3A+CisgPHA+
Q2xpY2sgIlJlZnJlc2giIHdpbGwgdXBkYXRlIHRoZSB2YWx1ZSBvZiBWQVIgdmFyYWlibGUgd2hp
Y2ggc3BlY2lmaWVkIGJ5IHNldHZhciBlbGVtZW50PC9wPgorICA8ZG8gbmFtZT0iUmVmcmVzaCIg
dHlwZT0iYWNjZXB0Ij4gCisgICA8cmVmcmVzaD4KKyAgIDxzZXR2YXIgbmFtZT0idmFyIiB2YWx1
ZT0iVkFMVUUiLz4KKyAgIDwvcmVmcmVzaD4KKyAgPC9kbz4KKyA8L2NhcmQ+Cis8L3dtbD4KKwpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXJnZXRkZWNrLndt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rh
cmdldGRlY2sud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy90YXJnZXRkZWNrLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0v
L0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorCis8d21sPgorPGhlYWQ+Cis8YWNjZXNzIGRvbWFpbj0ibG9jYWxob3N0IiBwYXRoPSJh
Y2Nlc3MtdGFyZ2V0LndtbCIvPgorPC9oZWFkPgorPGNhcmQ+Cis8cD4gVGVzdCBmb3IgRGVjayBB
Y2Nlc3MgY29udHJvbCBpbiBXTUwuIDwvcD4KKzxwPiBUaGlzIGlzIHRoZSB0YXJnZXRkZWNrLCBv
bmx5ICcuL2FjY2Vzcy10YXJnZXQud21sIiBjYW4gYWNjZXNzIG1lIDwvcD4KKzwvY2FyZD4KKzwv
d21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLWdv
LWluLWFuY2hvci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy90YXNrLWdvLWluLWFuY2hvci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stZ28taW4tYW5jaG9yLndtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NU
WVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIHRpdGxlPSJB
bmNob3IgVGFnIj4KKzxwPiBUZXN0IGZvciBXTUwgZ28gdGFzayBlbmNsb3NlZCB3aXRoIGFuY2hv
ciBlbGVtZW50IDwvcD4KKzxwPiBjbGljayAnTmV4dCBwYWdlJyB0byBnbyB0byB0ZXN0LndtbCA8
L3A+Cis8cD4KKzxhbmNob3I+TmV4dCBwYWdlPGdvIGhyZWY9Ii4uL3Rlc3Qud21sIi8+IDwvYW5j
aG9yPgorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1kby53bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLW5vb3AtaW4tZG8ud21sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLW5v
b3AtaW4tZG8ud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+
Cis8Y2FyZCBpZD0iY2FyZDEiPgorPHA+IFRlc3QgZm9yIE5vb3AgdGFzayBpbiBkbyBlbGVtZW50
IG9mIFdNTC4gPC9wPgorPHA+IElmIGl0IHBhc3NlcywgeW91IHNob3VsZCBub3Qgc2VlIHRoZSAi
QmFjayIgYnV0dG9uPC9wPgorIDxkbyBuYW1lPSJkbyIgdHlwZT0iYWNjZXB0IiBsYWJlbD0iQmFj
ayI+CisgPG5vb3AvPgorIDwvZG8+Cis8L2NhcmQ+IAorPC93bWw+IApJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLW5vb3AtaW4tb25ldmVudC53bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLW5v
b3AtaW4tb25ldmVudC53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL3Rhc2stbm9vcC1pbi1vbmV2ZW50LndtbAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJ
QyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQ+IAorPHA+IFRlc3QgZm9yIG5vb3Ag
dGFzayBpbiBvbmV2ZW50IGVsZW1lbnQgb2YgV01MPC9wPgorPHA+IElmIGl0IHBhc3NlcywgeW91
IHdpbGwgc2VlIHRoZSBjYXJkIG9uZSBpbiB0aGlzIGRlY2s8L3A+CisgIDxvbmV2ZW50IHR5cGU9
Im9uZW50aW1lciI+CisgIDxub29wLz4KKyAgPC9vbmV2ZW50PgorPHA+IFRoaXMgaXMgQ2FyZCBv
bmUgPC9wPgorPC9jYXJkPiAKKzwvd21sPiAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvdGFzay1wcmV2LWluLWFuY2hvci53bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLXByZXYtaW4tYW5jaG9yLndt
bAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
dGFzay1wcmV2LWluLWFuY2hvci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8v
RFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnht
bCI+CisKKzx3bWw+Cis8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4gVGVzdCBmb3IgV01M
IHByZXYgdGFzayBlbmNsb3NlZCB3aXRoIGFuY2hvciBlbGVtZW50IDwvcD4KKzxwPiBjbGljayAn
cHJldiBwYWdlJyB0byBnbyB0byBwcmV2aW91cyBwYWdlIGlmIGl0IGlzIG5vdCB0aGUgZmlyc3Qg
cGFnZSBpbiBoaXN0b3J5PC9wPgorPHA+Cis8YW5jaG9yPlByZXYgcGFnZTxwcmV2Lz48L2FuY2hv
cj4KKzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50
ZXJhY3RpdmVjYXNlcy90YXNrLXJlZnJlc2gtaW4tYW5jaG9yLndtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stcmVmcmVzaC1pbi1hbmNo
b3Iud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy90YXNrLXJlZnJlc2gtaW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwx
NSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQ
Rk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxf
MS4xLnhtbCI+Cis8d21sPgorPGNhcmQgdGl0bGU9IiRUIj4KKyA8cD4gVGVzdCBmb3IgcmVmcmVz
aCB0YXNrIHdpdGhpbiBXTUwgYW5jaG9yIGVsZW1lbnQuIDxici8+IGNsaWNrICJSZWZyZXNoIiB3
aWxsIHJlZnJlc2ggdGhpcyBwYWdlLCBhcyBhIHJlc3VsdCB0aGUgcGFnZSB0aXRsZSB3aWxsIGJl
IHVwZGF0ZWQuIDwvcD4KKyAgPHA+CisgICA8YW5jaG9yPgorICAgIFJlZnJlc2gKKyAgICA8cmVm
cmVzaD4KKyAgICA8c2V0dmFyIG5hbWU9IlQiIHZhbHVlPSJUZXN0IHJlZnJlc2ggdGFzayIvPgor
ICAgIDwvcmVmcmVzaD4KKyAgIDwvYW5jaG9yPgorICA8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGVtcGxhdGUtZ28ud21s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGVt
cGxhdGUtZ28ud21sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy90ZW1wbGF0ZS1nby53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorCis8d21sPgorPHRlbXBsYXRlPgorIDxkbyBuYW1lPSJnbyIgdHlwZT0iYWNjZXB0IiBs
YWJlbD0iVGVtcGxhdGUgR28iPgorICA8Z28gaHJlZj0iI2NhcmQyIi8+CisgPC9kbz4KKzwvdGVt
cGxhdGU+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPgorPHA+VGVzdCBmb3IgdGVt
cGxhdGUgZWxlbWVudCBpbiBXTUwuIFRlbXBsYXRlIGdvIGJ1dHRvbiBpcyBnbG9iYWw8L3A+Cis8
cD4gVGhpcyBpcyBDYXJkIG9uZSwgY2xpY2sgJ1RlbXBsYXRlIEdvJyB0byBqdW1wIHRvIENhcmQg
dHdvPC9wPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iQ2FyZCAyIj4KKzxwPlRo
aXMgaXMgY2FyZCB0d28uIDxici8+VGhlIGdsb2JhbCB0ZW1wbGF0ZSBHbyBidXR0b24gaXMgc3Rp
bGwgdmlzaWJsZSBmb3IgbWU8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGVtcGxhdGUtb25ldmVudC53bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1vbmV2
ZW50LndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvdGVtcGxhdGUtb25ldmVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEu
eG1sIj4KKzx3bWw+Cis8dGVtcGxhdGU+Cis8b25ldmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+
Cis8Z28gaHJlZj0iI2NhcmQyIi8+Cis8L29uZXZlbnQ+Cis8L3RlbXBsYXRlPgorPGNhcmQgaWQ9
ImNhcmQxIj4KKzxwPlRlc3QgZm9yIHRlbXBsYXRlIGVsZW1lbnQgaW4gV01MPC9wPgorPHA+V2hl
biBvdGhlciBwYWdlIGVudGVyIGZvcndhcmQgdGhpcyBwYWdlLCBpdCBmaXJzdCBzaG93IGNhcmQg
MSwgYW5kIHRoZW4gaW1tZWRpYXRlbHkganVtcCB0byBjYXJkIDIgYmVjYXVzZSBvZiB0aGUgdGVt
cGxhdGUgb25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIi
IHRpdGxlPSJjYXJkIDIiPgorPHA+CitUaGlzIGlzIGNhcmQgMgorPC9wPgorPC9jYXJkPgorPC93
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RlbXBsYXRl
LW9udGltZXIud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvdGVtcGxhdGUtb250aW1lci53bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RlbXBsYXRlLW9udGltZXIud21sCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3
bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2Fw
Zm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPHRlbXBsYXRlIG9udGltZXI9IiNj
YXJkMiI+Cis8L3RlbXBsYXRlPgorPGNhcmQgaWQ9ImNhcmQxIj4KKzxwPlRlc3QgZm9yIHRlbXBs
YXRlIG9udGltZXIgZXZlbnQgaW4gV01MPC9wPgorPHA+VGhpcyBpcyBDYXJkIG9uZSx3ZSB3aWxs
IGp1bXAgdG8gY2FyZCAyIGFmdGVyIDVzIGJlY2F1c2Ugb2YgdGhlIHRlbXBsYXRlIG9udGltZXIg
ZXZlbnQ8L3A+Cis8dGltZXIgdmFsdWU9IjUwIi8+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIi
IHRpdGxlPSJjYXJkIDIiPgorPHA+CitUaGlzIGlzIGNhcmQgMgorPC9wPgorPC9jYXJkPgorPC93
bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RpbWVyLndt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rp
bWVyLndtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvdGltZXIud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdt
bD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ2FjaGUtQ29udHJvbCIgY29udGVudD0ibWF4
LWFnZT0wIi8+Cis8L2hlYWQ+Cis8Y2FyZCBpZD0iY2FyZDEiIG9udGltZXI9IiNjYXJkMiIgdGl0
bGU9IkNhcmQgb25lIj4KKzxwPiBUaGlzIHRlc3QgY2FzZSBpcyB1c2VkIHRvIHRlc3QgdGltZXIg
aW4gV01MIDwvcD4KKyAgICA8dGltZXIgbmFtZT0idGltZTEiIHZhbHVlPSI1MCIvPgorICAgIDxw
PgorICAgIFRoaXMgaXMgY2FyZCBvbmU8YnIvPlRoZSB0aW1lciBpcyB0cmlnZ2VyZWQgYnkgdGhl
IG9udGltZXIgaW50cmluc2ljIGV2ZW50KG9udGltZXIgYXMgYXR0cmlidXRlIG9mIGNhcmQgZWxl
bWVudCk8YnIvPldoZW4gdGhlIHRpbWVyIGlzIHRpbWVvdXQoYWZ0ZXIgNXMpLCB3aWxsIGp1bXAg
dG8gY2FyZCB0d28uCisgICAgPC9wPgorPC9jYXJkPgorCis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxl
PSJDYXJkIHR3byI+CisgICAgPG9uZXZlbnQgdHlwZT0ib250aW1lciI+CisgICAgPGdvIGhyZWY9
IiNjYXJkMSIvPgorICAgIDwvb25ldmVudD4KKyAgICA8dGltZXIgbmFtZT0idGltZXIyIiB2YWx1
ZT0iMzAiLz4KKyAgICA8cD4gCisgICAgVGhpcyBpcyBjYXJkIFR3byE8YnIvPiBUaGUgdGltZXIg
aXMgdHJpZ2dlcmVkIGJ5IHRoZSBvbnRpbWVyIGludHJpbnNpYyBldmVudChvbnRpbWVyIGlzIHNw
ZWNpZmllZCBieSBvbmV2ZW50IGVsZW1lbnQpPGJyLz5XaGVuIHRoZSB0aW1lciBpcyB0aW1lb3V0
KGFmdGVyIDNzKSwgd2lsbCBqdW1wIGJhY2sgdG8gY2FyZCBvbmUuCisgICAgPC9wPgorPC9jYXJk
PgorPC93bWw+CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
dmFyaWFibGUtc3Vic3RpdHV0aW9uLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3ZhcmlhYmxlLXN1YnN0aXR1dGlvbi53bWwJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3ZhcmlhYmxlLXN1
YnN0aXR1dGlvbi53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAgQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEu
MS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4K
KyA8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJUZXN0IHZhcmlhYmxlIHN1YnN0aXR1dGlvbiI+Cisg
PHA+IFRlc3QgZm9yIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiA8L3A+CisgPHA+IENsaWNrICJSZWZl
cnNoIiB0byByZWZyZXNoIHRoZSBjYXJkLCBhbmQgdGhlIHZhcmFpYmxlIHJlZmVyZW5jZXMgaW4g
dGhlIGNhcmQgd2lsbCBiZSBzdWJzdGl0dWVkPC9wPgorICA8YW5jaG9yPiBSZWZyZXNoIDxici8+
CisgIDxyZWZyZXNoPiAKKyAgPHNldHZhciBuYW1lPSJoaSIgdmFsdWU9ImhlbGxvIi8+CisgIDxz
ZXR2YXIgbmFtZT0ibmFtZSIgdmFsdWU9IiBZaSBjaGFvIi8+CisgIDxzZXR2YXIgbmFtZT0ibmFt
ZTIiIHZhbHVlPSIkKG5hbWU6ZSkiLz4KKyAgPHNldHZhciBuYW1lPSJuYW1lMyIgdmFsdWU9IiQo
bmFtZTI6dSkiLz4KKyAgPC9yZWZyZXNoPgorICA8L2FuY2hvcj4KKyAgPHA+c2V0IGhpID0gImhl
bGxvIiwgbmFtZSA9ICIgWWkgY2hhbyIgPGJyLz4KKyAgPCFbQ0RBVEFbJChoaSksJG5hbWVdXT4g
PT4gJChoaSksJG5hbWUgPGJyLz4KKyAgPCFbQ0RBVEFbJGhpLCQobmFtZTplc0NhcGUpXV0+ID0+
ICRoaSwkKG5hbWU6ZXNDYXBlKSA8YnIvPgorICA8IVtDREFUQVskaGksJChuYW1lOmUpXV0+ID0+
ICRoaSwkKG5hbWU6ZSkgPGJyLz4KKyAgPCFbQ0RBVEFbJGhpLCQobmFtZTpVKV1dPiA9PiAkaGks
JChuYW1lOlUpIDxici8+CisgIDwvcD4KKyAgPHA+c2V0IG5hbWUyID0gJCQobmFtZTplKSA8YnIv
PgorICA8IVtDREFUQVskKGhpKSwkKG5hbWUyKV1dPiA9PiAkKGhpKSwkKG5hbWUyKSA8YnIvPgor
ICA8IVtDREFUQVskKGhpKSwkJChuYW1lOmUpXV0+ID0+ICQoaGkpLCQkKG5hbWU6ZSkgPGJyLz4K
KyAgPC9wPgorICA8cD5zZXQgbmFtZTMgPSAkJChuYW1lMjp1KSA8YnIvPgorICA8IVtDREFUQVsk
KGhpKSwkbmFtZTNdXT4gPT4gJChoaSksJG5hbWUzPGJyLz4KKyAgPCFbQ0RBVEFbJChoaSksJChu
YW1lMzplKV1dPiA9PiAkKGhpKSwkKG5hbWUzOmUpIDxici8+CisgIDwvcD4KKyA8L2NhcmQ+Cis8
L3dtbD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25098</attachid>
            <date>2008-11-12 11:17:27 -0800</date>
            <delta_ts>2008-12-10 16:01:36 -0800</delta_ts>
            <desc>WebCore touched by WML (v2)</desc>
            <filename>UpdatedWMLPatch.diff</filename>
            <type>text/plain</type>
            <size>77663</size>
            <attacher name="Nikolas Zimmermann">zimmermann</attacher>
            
              <data encoding="base64">SW5kZXg6IERlcml2ZWRTb3VyY2VzLm1ha2UKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRGVyaXZlZFNvdXJjZXMu
bWFrZQkocmV2aXNpb24gMzgzMTgpCisrKyBEZXJpdmVkU291cmNlcy5tYWtlCSh3b3JraW5nIGNv
cHkpCkBAIC0zOCw2ICszOCw3IEBAIFZQQVRIID0gXAogICAgICQoV2ViQ29yZSkvcGx1Z2lucyBc
CiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAkKFdlYkNvcmUpL3htbCBcCisgICAgJChX
ZWJDb3JlKS93bWwgXAogICAgICQoV2ViQ29yZSkvc3ZnIFwKICMKIApAQCAtMzkxLDYgKzM5Miw3
IEBAIGFsbCA6IFwKICAgICBEb2NUeXBlU3RyaW5ncy5jcHAgXAogICAgIEhUTUxFbnRpdHlOYW1l
cy5jIFwKICAgICBIVE1MTmFtZXMuY3BwIFwKKyAgICBXTUxOYW1lcy5jcHAgXAogICAgIEpTU1ZH
RWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCBcCiAgICAgU1ZHRWxlbWVudEZhY3RvcnkuY3BwIFwK
ICAgICBTVkdOYW1lcy5jcHAgXApAQCAtNTA2LDcgKzUwOCw3IEBAIFhQYXRoR3JhbW1hci5jcHAg
OiB4bWwvWFBhdGhHcmFtbWFyLnkgJCgKIAogIyB1c2VyIGFnZW50IHN0eWxlIHNoZWV0cwogCi1V
U0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9ICQoV2ViQ29yZSkvY3NzL2h0bWw0LmNzcyAkKFdlYkNv
cmUpL2Nzcy9xdWlya3MuY3NzICQoV2ViQ29yZSkvY3NzL3ZpZXctc291cmNlLmNzcyAkKFdlYkNv
cmUpL2Nzcy9zdmcuY3NzIAorVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nz
cy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtzLmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3
LXNvdXJjZS5jc3MgJChXZWJDb3JlKS9jc3Mvc3ZnLmNzcyAkKFdlYkNvcmUpL2Nzcy93bWwuY3Nz
CiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIDogY3NzL21ha2UtY3NzLWZpbGUtYXJyYXlzLnBsICQo
VVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpCiAJcGVybCAkPCAkQCBVc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpCiAKQEAgLTU0Miw2ICs1NDQsOSBA
QCBlbmRpZgogWE1MTmFtZXMuY3BwIDogZG9tL21ha2VfbmFtZXMucGwgeG1sL3htbGF0dHJzLmlu
CiAJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS1hdHRycyAkKFdlYkNv
cmUpL3htbC94bWxhdHRycy5pbgogCitXTUxOYW1lcy5jcHAgOiBkb20vbWFrZV9uYW1lcy5wbCB3
bWwvV01MVGFnTmFtZXMuaW4gd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluCisJcGVybCAtSSAkKFdl
YkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS10YWdzICQoV2ViQ29yZSkvd21sL1dNTFRhZ05h
bWVzLmluIC0tYXR0cnMgJChXZWJDb3JlKS93bWwvV01MQXR0cmlidXRlTmFtZXMuaW4gLS1vdXRw
dXQgLgorCiAjIC0tLS0tLS0tCiAKIGlmZXEgKCQoZmluZHN0cmluZyBFTkFCTEVfU1ZHLCQoRkVB
VFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkcpCkluZGV4OiBXZWJDb3JlLnBybwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlLnBybwkocmV2aXNpb24gMzgzMTgpCisrKyBXZWJDb3JlLnBybwkod29ya2lu
ZyBjb3B5KQpAQCAtNjUsNiArNjUsNyBAQCB3aW4zMi1nKysgewogIWNvbnRhaW5zKERFRklORVMs
IEVOQUJMRV9JQ09OREFUQUJBU0U9Lik6IERFRklORVMgKz0gRU5BQkxFX0lDT05EQVRBQkFTRT0x
CiAhY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPS4pOiBERUZJTkVTICs9IEVOQUJMRV9Y
UEFUSD0xCiAjIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMgKz0gRU5B
QkxFX1hCTD0xCishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dNTD0uKTogREVGSU5FUyArPSBF
TkFCTEVfV01MPTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9TVkc9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0ZPTlRTPS4pOiBE
RUZJTkVTICs9IEVOQUJMRV9TVkdfRk9OVFM9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9T
VkdfRklMVEVSUz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZJTFRFUlM9MQpAQCAtMTYwLDYg
KzE2MSw3IEBAIElOQ0xVREVQQVRIICs9ICAkJFBXRCBcCiAgICAgICAgICAgICAgICAgJCRQV0Qv
aW5zcGVjdG9yIFwKICAgICAgICAgICAgICAgICAkJFBXRC94bWwgXAogICAgICAgICAgICAgICAg
ICQkUFdEL2h0bWwgXAorICAgICAgICAgICAgICAgICQkUFdEL3dtbCBcCiAgICAgICAgICAgICAg
ICAgJCRQV0QvYmluZGluZ3MvanMgXAogICAgICAgICAgICAgICAgICQkUFdEL3N2ZyBcCiAgICAg
ICAgICAgICAgICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgXApAQCAtMTMyOSw2ICsx
MzMxLDUyIEBAIGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9MSkgewogICAgIEZFQVRVUkVf
REVGSU5FU19KQVZBU0NSSVBUICs9IEVOQUJMRV9YQkw9MQogfQogCitjb250YWlucyhERUZJTkVT
LCBFTkFCTEVfV01MPTEpIHsKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgd21sL1dNTERvY3Vt
ZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxUb2tlbml6ZXIuY3BwIFwKKyAgICAgICAgd21sL1dN
TEVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTENhcmRFbGVtZW50LmNwcCBcCisgICAgICAg
IHdtbC9XTUxBRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MQW5jaG9yRWxlbWVudC5jcHAg
XAorICAgICAgICB3bWwvV01MVGFza0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFByZXZF
bGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxHb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21s
L1dNTFJlZnJlc2hFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxQb3N0ZmllbGRFbGVtZW50
LmNwcCBcCisgICAgICAgIHdtbC9XTUxTZXR2YXJFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9X
TUxFbGVtZW50RmFjdG9yeS5jcHAgXAorICAgICAgICB3bWwvV01MUGFnZVN0YXRlLmNwcCBcCisg
ICAgICAgIHdtbC9XTUxEb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFRleHQuY3BwIFwK
KyAgICAgICAgd21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBcCisgICAgICAgIHdtbC9XTUxUaW1lckVsZW1lbnQuY3Bw
IFwKKyAgICAgICAgd21sL1dNTEhlbHBlci5jcHAgXAorICAgICAgICB3bWwvV01MQWNjZXNzRWxl
bWVudC5jcHAgXAorICAgICAgICB3bWwvV01MU2VsZWN0RWxlbWVudC5jcHAgXAorICAgICAgICB3
bWwvV01MT3B0aW9uRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW5wdXRFbGVtZW50LmNw
cCBcCisgICAgICAgIHdtbC9XTUxUYWJsZUVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTElt
YWdlRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MUEVsZW1lbnQuY3BwCisKKyAgICBGRUFU
VVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfV01MPTEKKyAgICBERUZJTkVTICs9IEVO
QUJMRV9XQlhNTD0xCisgICAgTElCUyArPSAtbHdieG1sMiAKKworICAgIFdNTF9OQU1FUyA9ICQk
UFdEL3dtbC9XTUxUYWdOYW1lcy5pbgorCisgICAgd21sbmFtZXNfYS5vdXRwdXQgPSAkJEdFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9XTUxOYW1lcy5jcHAKKyAgICB3bWxuYW1lc19hLmNvbW1hbmRzID0g
cGVybCAtSSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS10
YWdzICQkUFdEL3dtbC9XTUxUYWdOYW1lcy5pbiAtLWF0dHJzICQkUFdEL3dtbC9XTUxBdHRyaWJ1
dGVOYW1lcy5pbiAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAtLW91dHB1dCAk
JEdFTkVSQVRFRF9TT1VSQ0VTX0RJUgorICAgIHdtbG5hbWVzX2EuaW5wdXQgPSBXTUxfTkFNRVMK
KyAgICB3bWxuYW1lc19hLmRlcGVuZGVuY3lfdHlwZSA9IFRZUEVfQworICAgIHdtbG5hbWVzX2Eu
Q09ORklHID0gdGFyZ2V0X3ByZWRlcHMKKyAgICB3bWxuYW1lc19hLnZhcmlhYmxlX291dCA9IEdF
TkVSQVRFRF9TT1VSQ0VTCisgICAgd21sbmFtZXNfYS5jbGVhbiA9ICR7UU1BS0VfRklMRV9PVVR9
ICR7UU1BS0VfVkFSX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUl9TTEFTSH1XTUxOYW1lcy5oCisgICAg
YWRkRXh0cmFDb21waWxlcih3bWxuYW1lc19hKQorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFC
TEVfU1ZHPTEpIHsKICAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfU1ZH
PTEKIApAQCAtMTcxMyw2ICsxNzYxLDggQEAgU09VUkNFUyArPSBcCiAgICAgICAgIHN2Z2VsZW1l
bnR3cmFwcGVyX2hlYWRlci52YXJpYWJsZV9vdXQgPSBHRU5FUkFURURfRklMRVMKICAgICAgICAg
YWRkRXh0cmFDb21waWxlcihzdmdlbGVtZW50d3JhcHBlcl9oZWFkZXIpCiAKKworCiAgICAgICAg
ICMgR0VORVJBVE9SIDUtRDoKICAgICAgICAgeGxpbmtuYW1lcy5vdXRwdXQgPSAkJEdFTkVSQVRF
RF9TT1VSQ0VTX0RJUi9YTGlua05hbWVzLmNwcAogICAgICAgICB4bGlua25hbWVzLmNvbW1hbmRz
ID0gcGVybCAtSSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwg
LS1hdHRycyAkJFBXRC9zdmcveGxpbmthdHRycy5pbiAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtF
X01PQ30gLUVcIiAtLW91dHB1dERpciAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUgpAQCAtMTg1Myw3
ICsxOTAzLDcgQEAgYWRkRXh0cmFDb21waWxlcihjb2xvcmRhdGEpCiAKICMgR0VORVJBVE9SIDk6
CiBzdHlsZXNoZWV0cy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRT
dHlsZVNoZWV0c0RhdGEuY3BwCi1zdHlsZXNoZWV0cy5jb21tYW5kcyA9IHBlcmwgJCRQV0QvY3Nz
L21ha2UtY3NzLWZpbGUtYXJyYXlzLnBsIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAt
RVwiICQkR0VORVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzLmggJCRHRU5F
UkFURURfU09VUkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAkJFBXRC9jc3Mv
aHRtbDQuY3NzICQkUFdEL2Nzcy9xdWlya3MuY3NzICQkUFdEL2Nzcy9zdmcuY3NzICQkUFdEL2Nz
cy92aWV3LXNvdXJjZS5jc3MKK3N0eWxlc2hlZXRzLmNvbW1hbmRzID0gcGVybCAkJFBXRC9jc3Mv
bWFrZS1jc3MtZmlsZS1hcnJheXMucGwgLS1wcmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1F
XCIgJCRHRU5FUkFURURfU09VUkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHMuaCAkJEdFTkVS
QVRFRF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQkUFdEL2Nzcy9o
dG1sNC5jc3MgJCRQV0QvY3NzL3F1aXJrcy5jc3MgJCRQV0QvY3NzL3N2Zy5jc3MgJCRQV0QvY3Nz
L3ZpZXctc291cmNlLmNzcyAkJFBXRC9jc3Mvd21sLmNzcwogc3R5bGVzaGVldHMuaW5wdXQgPSBT
VFlMRVNIRUVUU19FTUJFRAogc3R5bGVzaGVldHMuQ09ORklHID0gdGFyZ2V0X3ByZWRlcHMKIHN0
eWxlc2hlZXRzLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9TT1VSQ0VTCkluZGV4OiBXZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAzODMxOCkKKysrIFdlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTI1LDYgKzUyNSw2NCBAQAogCQk0
QjZGQTZGNzBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2RkE2RjYwQzM5RTRBMTAwMDg3
MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCAqLzsgfTsKIAkJNEI4QUY0QUEwQjFDRTAyQjAwNjg3
NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEI4QUY0QTkwQjFDRTAyQjAwNjg3NjkwIC8qIENsaXBib2Fy
ZEFjY2Vzc1BvbGljeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTRCQUU5NUIxMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JEZWxldGVBY3Rpb24u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRCQUU5NUIw
MEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JEZWxldGVBY3Rpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0QzZCOTk0RTBFNTJFMzczMDA0ODdC
QjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxNjBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxl
bWVudC5jcHAgKi87IH07CisJCTRDNkI5OTRGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovOyB9OworCQk0
QzZCOTk1MDBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MTgwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEFFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NTEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QzZCOTkxOTBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuaCAqLzsgfTsKKwkJ
NEM2Qjk5NTIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUEwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk1MzBFNTJFMzcz
MDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hv
ckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEF0dHJp
YnV0ZU5hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QzZCOTkxQzBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmlidXRlTmFtZXMuaW4gKi87
IH07CisJCTRDNkI5OTU1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFEMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NTYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250
ZXh0LmggKi87IH07CisJCTRDNkI5OTU3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZC
OTkxRjBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZC
OTk1ODBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTIwMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxDYXJkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1OTBFNTJFMzczMDA0ODdCQjcgLyog
V01MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50LmNwcCAqLzsgfTsK
KwkJNEM2Qjk5NUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyMjBFNTJFMzczMDA0ODdC
QjcgLyogV01MRG9jdW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NUIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTERvRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5NUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjQwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTERvRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1RDBFNTJFMzczMDA0ODdC
QjcgLyogV01MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkyNTBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5jcHAgKi87
IH07CisJCTRDNkI5OTVFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyNjBFNTJFMzczMDA0
ODdCQjcgLyogV01MRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1RjBFNTJFMzczMDA0ODdCQjcg
LyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0
b3J5LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRG
YWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuaCAqLzsgfTsKKwkJ
NEM2Qjk5NjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyOTBFNTJFMzczMDA0ODdC
QjcgLyogV01MR29FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjIwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEdvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oICovOyB9
OworCQk0QzZCOTk2MzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJCMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovOyB9OworCQk0QzZCOTk2NDBFNTJFMzczMDA0ODdCQjcg
LyogV01MSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QzZCOTkyQzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVyLmggKi87IH07CisJCTRD
NkI5OTY1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MkQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTY2MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1l
bnQuaCAqLzsgfTsKKwkJNEM2Qjk5NjcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVu
dC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZC
OTkyRjBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2
Qjk5NjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTElucHV0RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2OTBFNTJFMzczMDA0ODdCQjcg
LyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRy
aW5zaWNFdmVudEhhbmRsZXIuY3BwICovOyB9OworCQk0QzZCOTk2QTBFNTJFMzczMDA0ODdCQjcg
LyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzMjBFNTJFMzczMDA0ODdCQjcgLyogV01MSW50cmlu
c2ljRXZlbnRIYW5kbGVyLmggKi87IH07CisJCTRDNkI5OTZCMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNw
cCAqLzsgfTsKKwkJNEM2Qjk5NkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTE9wdGlvbkVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTM0
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi87IH07CisJCTRDNkI5OTZE
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzNTBFNTJFMzczMDA0ODdCQjcgLyogV01M
UEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2RTBFNTJFMzczMDA0ODdCQjcgLyogV01MUEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRD
NkI5OTM2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2
RjBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzNzBFNTJFMzczMDA0ODdC
QjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTcwMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzODBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9z
dGZpZWxkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk3MTBFNTJFMzczMDA0ODdCQjcgLyogV01M
UHJldkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5NzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzQTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NzMwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxSZWZy
ZXNoRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTc0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxS
ZWZyZXNoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTc1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNEMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzYw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNFMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxTZWxlY3RFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc3MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxTZXR2YXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRDNkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNw
cCAqLzsgfTsKKwkJNEM2Qjk5NzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNldHZhckVsZW1lbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQw
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc5
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRhYmxlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTdBMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDRDNkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAq
LzsgfTsKKwkJNEM2Qjk5N0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhZ05hbWVzLmluIGluIFJl
c291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0MzBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi87IH07CisJCTRDNkI5OTdDMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0Vs
ZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3RDBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0Vs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRD
NkI5OTQ1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5oICovOyB9OworCQk0QzZC
OTk3RTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ2MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3RjBFNTJFMzcz
MDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVt
cGxhdGVFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTgwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRD
NkI5OTQ4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCAqLzsgfTsKKwkJNEM2Qjk5ODEw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZXh0Lmgg
Ki87IH07CisJCTRDNkI5OTgyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NEEw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTgz
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTRCMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUaW1lckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5ODQwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA0QzZCOTk0QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5pemVyLmNwcCAqLzsgfTsK
KwkJNEM2Qjk5ODUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NEQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRva2VuaXplci5oICovOyB9OworCQk0Q0Y2RDMwMTBFNTU2RjRDMDBFRDNGNzQg
LyogV01MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNENBM0FCNDkwRTU1NkYyNDAwRTlDMEMwIC8qIFdNTE5hbWVzLmNwcCAqLzsgfTsKKwkJ
NENGNkQzMDIwRTU1NkY0RDAwRUQzRjc0IC8qIFdNTE5hbWVzLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Q0EzQUI0ODBFNTU2RjI0MDBFOUMwQzAgLyog
V01MTmFtZXMuaCAqLzsgfTsKIAkJNEUxOTU5MjEwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVh
dHVyZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRFMTk1OTFGMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5jcHAgKi87
IH07CiAJCTRFMTk1OTIyMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1cmVOYW1lcy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEUxOTU5MjAwQTM5
REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi87IH07CiAJCTRFMTk1OTI5MEEz
OURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTIzMEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1
ZXJ5LmNwcCAqLzsgfTsKQEAgLTUyODYsNiArNTM0NCw2NSBAQAogCQk0QjZGQTZGNjBDMzlFNEEx
MDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU21hcnRSZXBsYWNlQ0YuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0QjhBRjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJkQWNjZXNzUG9saWN5Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9hcmRBY2Nlc3NQb2xpY3ku
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJBRTk1QjAwQjJGQTlDRTAwQUVEOEEw
IC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBFZGl0b3JEZWxldGVBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFjY2Vzc0VsZW1lbnQuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNj
ZXNzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQWNjZXNz
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxODBFNTJFMzcz
MDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IFdNTEFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXTUxBRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQk0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MQW5jaG9yRWxlbWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFCMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXTUxBbmNob3JFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5
OTFDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBdHRyaWJ1dGVOYW1lcy5pbiAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gV01MQXR0cmlidXRlTmFtZXMuaW47IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxCcndDb250ZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUUwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TEJyd0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEJyd0Nv
bnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUYwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBXTUxDYXJkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRDNkI5OTIwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQ2FyZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxEb2N1bWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIyMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
RG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjMwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV01MRG9FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJNEM2Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRG9FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTRDNkI5OTI1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjYwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRDNkI5OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50RmFjdG9yeS5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRWxlbWVudEZhY3RvcnkuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdv
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MR29F
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MkEwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV01MR29FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5
OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEhlbHBlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTRDNkI5OTJDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEhlbHBlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTkyRDBFNTJFMzczMDA0ODdCQjcgLyogV01MSW1hZ2VFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyRTBFNTJFMzczMDA0ODdC
QjcgLyogV01MSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBXTUxJbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5
MkYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW5wdXRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzAwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MSW5wdXRFbGVtZW50
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMxMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTElu
dHJpbnNpY0V2ZW50SGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZC
OTkzMzBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT3B0aW9uRWxlbWVudC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRp
b25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxPcHRpb25F
bGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM1MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MUEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTkzNjBFNTJFMzczMDA0ODdCQjcgLyogV01MUEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTRDNkI5OTM3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxQb3N0ZmllbGRFbGVt
ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzgwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdNTFBvc3RmaWVsZEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50LmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxQcmV2RWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNBMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxQcmV2RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MUHJl
dkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0IwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxSZWZyZXNoRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTRDNkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MUmVmcmVzaEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0QwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFdNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQk0QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MU2VsZWN0RWxlbWVudC5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzRjBFNTJFMzczMDA0ODdCQjcgLyogV01MU2V0dmFy
RWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
MzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MU2V0
dmFyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQwMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBXTUxTZXR2YXJFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTRDNkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRhYmxlRWxlbWVudC5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxUYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdN
TFRhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0MzBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IFdNTFRhZ05hbWVzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0NDBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNEM2Qjk5NDUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhc2tFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUYXNrRWxlbWVudC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0NjBFNTJFMzczMDA0ODdCQjcgLyogV01M
VGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTk0NzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRleHQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0OTBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVGV4dC5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0QTBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGltZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXTUxUaW1lckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZC
OTk0QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNEM2Qjk5NEMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MVG9rZW5pemVyLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEQwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MVG9r
ZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDQTNBQjQ4MEU1NTZGMjQw
MEU5QzBDMCAvKiBXTUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
V01MTmFtZXMuaDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dl
YkNvcmUvV01MTmFtZXMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09UOyB9OworCQk0Q0EzQUI0
OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IFdNTE5hbWVzLmNwcDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVn
L0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuY3BwOyBzb3VyY2VUcmVlID0gU09VUkNF
X1JPT1Q7IH07CisJCTRDREU1NEVDMEU1NTc5NzgwMDg5RTI2QyAvKiB3bWwuY3NzICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHRleHQ7IHBhdGggPSB3bWwuY3NzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0
RTE5NTkxRjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFtZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRmVhdHVyZU5hbWVzLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjAwQTM5REFCQTAwMjIwRkU1IC8qIE1l
ZGlhRmVhdHVyZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZWRp
YUZlYXR1cmVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk0RTE5NTkyMzBB
MzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC02NjAzLDcgKzY3MjAsNyBAQAogCQk5M0VFQzFGNzA5QzI4Nzc3MDBDNTE1RDEgLyogV2hl
ZWxFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2hlZWxFdmVudC5pZGw7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjZFMDlDMzIxODAwMEM1MTVEMSAvKiBDYW52
YXNQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENhbnZh
c1BhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5M0VFQzI3MDA5QzMy
MTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ2FudmFzU3R5bGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5w
bGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJX
aWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJOTNGMTlCMTkwODI0NUU1OTAwMUU5QUJDIC8q
IEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgaW5kZW50V2lkdGggPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gSW5mby5wbGlzdDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9IDA7IH07CiAJCTkzRjE5
QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5mcmFtZXdvcms7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUuZnJhbWV3b3JrOyBzb3VyY2VUcmVlID0gQlVJ
TFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMxQTA1NThDQzVDMDA4MjFCQzAgLyogbGliaWN1
Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliaWN1Y29yZS5keWxpYjsgcGF0
aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7IHNvdXJjZVRyZWUgPSAiPGFic29sdXRlPiI7
IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFCOCAvKiBDb2RlR2VuZXJhdG9yLnBtICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0b3IucG07IHBhdGggPSBz
Y3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04
OTkwLDYgKzkxMDcsNyBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFDMDcgLyogV2ViS2l0ICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0QzZCOTkxNTBF
NTJFMzczMDA0ODdCQjcgLyogd21sICovLAogCQkJCTY1Qzk3QUYyMDhFQTkwODgwMEFDRDI3MyAv
KiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEzN0YgLyogV2ViQ29yZVBy
ZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAvKiBEZXJpdmVkU291cmNl
cy5tYWtlICovLApAQCAtOTM1OCw2ICs5NDc2LDY5IEBACiAJCQl0YWJXaWR0aCA9IDQ7CiAJCQl1
c2VzVGFicyA9IDA7CiAJCX07CisJCTRDNkI5OTE1MEU1MkUzNzMwMDQ4N0JCNyAvKiB3bWwgKi8g
PSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAorCQkJCTRDNkI5OTE2MEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkxNzBF
NTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTE4MEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MTkwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MUEwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTFCMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MUMwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluICovLAorCQkJCTRDNkI5OTFEMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLywKKwkJCQk0QzZCOTkxRTBFNTJFMzczMDA0ODdC
QjcgLyogV01MQnJ3Q29udGV4dC5oICovLAorCQkJCTRDNkI5OTFGMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxDYXJkRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MjAwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTENhcmRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TERvY3VtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyMjBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9j
dW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50
LmNwcCAqLywKKwkJCQk0QzZCOTkyNDBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9FbGVtZW50Lmgg
Ki8sCisJCQkJNEM2Qjk5MjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuY3BwICovLAor
CQkJCTRDNkI5OTI2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50LmggKi8sCisJCQkJNEM2
Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLywKKwkJCQk0
QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuaCAqLywKKwkJCQk0
QzZCOTkyOTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCAqLywKKwkJCQk0QzZC
OTkyQTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MkIw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5jcHAgKi8sCisJCQkJNEM2Qjk5MkMwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5oICovLAorCQkJCTRDNkI5OTJEMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxJbWFnZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyRjBFNTJFMzczMDA0ODdCQjcg
LyogV01MSW5wdXRFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzMDBFNTJFMzczMDA0ODdCQjcg
LyogV01MSW5wdXRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi8sCisJCQkJNEM2Qjk5MzIwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oICovLAorCQkJCTRDNkI5OTMzMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzNDBF
NTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTM1MEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MzYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzcwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTM4MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzkwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzQTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkzQjBFNTJFMzczMDA0
ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTNDMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTNEMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzRTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oICovLAorCQkJCTRDNkI5OTNGMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0MDBFNTJFMzcz
MDA0ODdCQjcgLyogV01MU2V0dmFyRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTQxMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTQyMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0MzBFNTJFMzczMDA0
ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8sCisJCQkJNEM2Qjk5NDQwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFRhc2tFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NTBFNTJFMzczMDA0ODdCQjcg
LyogV01MVGFza0VsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0NjBFNTJFMzczMDA0ODdCQjcgLyog
V01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NzBFNTJFMzczMDA0ODdCQjcg
LyogV01MVGVtcGxhdGVFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5NDgwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTFRleHQuY3BwICovLAorCQkJCTRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
ZXh0LmggKi8sCisJCQkJNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVu
dC5jcHAgKi8sCisJCQkJNEM2Qjk5NEIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVu
dC5oICovLAorCQkJCTRDNkI5OTRDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuY3Bw
ICovLAorCQkJCTRDNkI5OTREMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUb2tlbml6ZXIuaCAqLywK
KwkJCSk7CisJCQlwYXRoID0gd21sOworCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKKwkJfTsK
IAkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKIAkJCWlzYSA9
IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NDgyLDYgKzk2NjMsOCBAQAogCQk2NTY1
ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0Q0EzQUI0ODBFNTU2RjI0MDBFOUMwQzAg
LyogV01MTmFtZXMuaCAqLywKKwkJCQk0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFt
ZXMuY3BwICovLAogCQkJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAvKiBDaGFyc2V0RGF0YS5j
cHAgKi8sCiAJCQkJNjU2NTgxQUQwOUQxNEVFNjAwMEU2MUQ3IC8qIENvbG9yRGF0YS5jICovLAog
CQkJCTY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFyLmNwcCAqLywKQEAgLTEz
NDkxLDYgKzEzNjc0LDcgQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYzNUNBIC8qIGNzcyAqLyA9
IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJCQkJNENERTU0RUMwRTU1
Nzk3ODAwODlFMjZDIC8qIHdtbC5jc3MgKi8sCiAJCQkJQTgwRTZDREEwQTE5ODlDQTAwN0ZCOEM1
IC8qIENvdW50ZXIuaCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBCMTdGRTQgLyogQ291bnRl
ci5pZGwgKi8sCiAJCQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU0JvcmRlckltYWdl
VmFsdWUuY3BwICovLApAQCAtMTYyNDcsNyArMTY0MzEsNiBAQAogCQkwODY3RDY5MEZFODQwMjhG
QzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2EgPSBQQlhQcm9qZWN0Owog
CQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJCMTEwMDhBOUVGQyAvKiBC
dWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldlYkNvcmUiICovOwotCQkJ
Y29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKIAkJCWhhc1NjYW5uZWRGb3JFbmNv
ZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xpc2gsCkBAIC0xNjMyMCw2
ICsxNjUwMyw4IEBACiAJCQkJODUxMzZDQTgwQUVENjY1OTAwRjkwQTNEIC8qIHdlc3RSZXNpemVD
dXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKIAkJCQkxQUIxQUU3QTBDMDUxRkRFMDAxMzlGNEYg
Lyogem9vbUluQ3Vyc29yLnBuZyBpbiBSZXNvdXJjZXMgKi8sCiAJCQkJMUFCMUFFN0IwQzA1MUZE
RTAwMTM5RjRGIC8qIHpvb21PdXRDdXJzb3IucG5nIGluIFJlc291cmNlcyAqLywKKyAJCQkJNEM2
Qjk5NTQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluIGluIFJlc291cmNl
cyAqLywKKyAJCQkJNEM2Qjk5N0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhZ05hbWVzLmluIGlu
IFJlc291cmNlcyAqLywKIAkJCQlFMUMzNjJCQzBFQUYyOUZCMDA3NDEwQkMgLyogV29ya2VyTG9j
YXRpb24uaWRsIGluIFJlc291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVu
dFBvc3Rwcm9jZXNzaW5nID0gMDsKSW5kZXg6IGNzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBjc3MvQ1NTU3R5bGVTZWxlY3Rvci5jcHAJKHJldmlzaW9uIDM4MzE4KQorKysg
Y3NzL0NTU1N0eWxlU2VsZWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsOCBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBBbGV4ZXkgUHJvc2t1cnlha292
IDxhcEB3ZWJraXQub3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEVyaWMgU2VpZGVs
IDxlcmljQHdlYmtpdC5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zNTQsNiArMzU2LDkgQEAgc3Rh
dGljIENTU1J1bGVTZXQqIGRlZmF1bHRTdHlsZTsKIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0
UXVpcmtzU3R5bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCogZGVmYXVsdFByaW50U3R5bGU7CiBzdGF0
aWMgQ1NTUnVsZVNldCogZGVmYXVsdFZpZXdTb3VyY2VTdHlsZTsKKyNpZiBFTkFCTEUoV01MKQor
c3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRXbWxTdHlsZSA9IDA7CisjZW5kaWYKIHN0YXRpYyBD
U1NTdHlsZVNoZWV0KiBzaW1wbGVEZWZhdWx0U3R5bGVTaGVldDsKIAogUmVuZGVyU3R5bGUqIENT
U1N0eWxlU2VsZWN0b3I6OnNfc3R5bGVOb3RZZXRBdmFpbGFibGU7CkBAIC01MjUsNiArNTMwLDEz
IEBAIHN0YXRpYyB2b2lkIGxvYWRWaWV3U291cmNlU3R5bGUoKQogICAgIEFTU0VSVCghZGVmYXVs
dFZpZXdTb3VyY2VTdHlsZSk7CiAgICAgZGVmYXVsdFZpZXdTb3VyY2VTdHlsZSA9IG5ldyBDU1NS
dWxlU2V0OwogICAgIGRlZmF1bHRWaWV3U291cmNlU3R5bGUtPmFkZFJ1bGVzRnJvbVNoZWV0KHBh
cnNlVUFTaGVldChzb3VyY2VVc2VyQWdlbnRTdHlsZVNoZWV0LCBzaXplb2Yoc291cmNlVXNlckFn
ZW50U3R5bGVTaGVldCkpLCBzY3JlZW5FdmFsKCkpOworCisjaWYgRU5BQkxFKFdNTCkKKyAgICBp
ZiAoIWRlZmF1bHRXbWxTdHlsZSkgeworICAgICAgICBkZWZhdWx0V21sU3R5bGUgPSBuZXcgQ1NT
UnVsZVNldDsKKyAgICAgICAgZGVmYXVsdFdtbFN0eWxlLT5hZGRSdWxlc0Zyb21TaGVldChwYXJz
ZVVBU2hlZXQod21sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHdtbFVzZXJBZ2VudFN0eWxl
U2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKKyAgICB9CisjZW5kaWYKIH0KIAogdm9pZCBDU1NTdHls
ZVNlbGVjdG9yOjphZGRNYXRjaGVkRGVjbGFyYXRpb24oQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIGRlY2wpCkBAIC05OTAsNiArMTAwMiwxMSBAQCB2b2lkIENTU1N0eWxlU2VsZWN0b3I6Om1h
dGNoVUFSdWxlcyhpbnQmCiAgICAgICAgID8gZGVmYXVsdFByaW50U3R5bGUgOiBkZWZhdWx0U3R5
bGU7CiAgICAgbWF0Y2hSdWxlcyh1c2VyQWdlbnRTdHlsZVNoZWV0LCBmaXJzdFVBUnVsZSwgbGFz
dFVBUnVsZSk7CiAKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChtX2NoZWNrZXIubV9kb2N1bWVu
dC0+aXNXTUxEb2N1bWVudCgpKQorICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1bHRXbWxTdHlsZSwg
Zmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOworI2VuZGlmCisKICAgICAvLyBJbiBxdWlya3MgbW9k
ZSwgd2UgbWF0Y2ggcnVsZXMgZnJvbSB0aGUgcXVpcmtzIHVzZXIgYWdlbnQgc2hlZXQuCiAgICAg
aWYgKCFtX2NoZWNrZXIubV9zdHJpY3RQYXJzaW5nKQogICAgICAgICBtYXRjaFJ1bGVzKGRlZmF1
bHRRdWlya3NTdHlsZSwgZmlyc3RVQVJ1bGUsIGxhc3RVQVJ1bGUpOwpAQCAtMTA1MCw2ICsxMDY3
LDEzIEBAIFBhc3NSZWZQdHI8UmVuZGVyU3R5bGU+IENTU1N0eWxlU2VsZWN0b3IKICAgICB9CiAj
ZW5kaWYKIAorI2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fY2hlY2tlci5tX2RvY3VtZW50LT5p
c1dNTERvY3VtZW50KCkgJiYgIWRlZmF1bHRXbWxTdHlsZSkgeworICAgICAgICBkZWZhdWx0V21s
U3R5bGUgPSBuZXcgQ1NTUnVsZVNldDsKKyAgICAgICAgZGVmYXVsdFdtbFN0eWxlLT5hZGRSdWxl
c0Zyb21TaGVldChwYXJzZVVBU2hlZXQod21sVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHdt
bFVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKKyAgICB9CisjZW5kaWYKKwog
ICAgIGludCBmaXJzdFVBUnVsZSA9IC0xLCBsYXN0VUFSdWxlID0gLTE7CiAgICAgaW50IGZpcnN0
VXNlclJ1bGUgPSAtMSwgbGFzdFVzZXJSdWxlID0gLTE7CiAgICAgaW50IGZpcnN0QXV0aG9yUnVs
ZSA9IC0xLCBsYXN0QXV0aG9yUnVsZSA9IC0xOwpJbmRleDogY3NzL3dtbC5jc3MKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gY3NzL3dtbC5jc3MJKHJldmlzaW9uIDApCisrKyBjc3Mvd21sLmNzcwkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NTEgQEAKKy8qCisgKiBUaGUgZGVmYXVsdCBzdHlsZSBzaGVldCB1c2Vk
IHRvIHJlbmRlciBIVE1MLgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwMCBMYXJzIEtub2xsIChr
bm9sbEBrZGUub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKK0BuYW1lc3BhY2UgImh0dHA6Ly93d3cu
d2FwZm9ydW0ub3JnLyI7CisKK3dtbCB7CisgICAgZGlzcGxheTogYmxvY2sKK30KKworLyogY2hp
bGRyZW4gb2YgdGhlIDxoZWFkPiBlbGVtZW50IGFsbCBoYXZlIGRpc3BsYXk6bm9uZSAqLworaGVh
ZCB7CisgICAgZGlzcGxheTogbm9uZQorfQorCittZXRhIHsKKyAgICBkaXNwbGF5OiBub25lCit9
CisKK2FjY2VzcyB7CisgICAgZGlzcGxheTogbm9uZQorfQorCisvKiBnZW5lcmljIGJsb2NrLWxl
dmVsIGVsZW1lbnRzICovCisKK2NhcmQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdp
bjogOHB4Cit9CisKK3AgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbjogMS4wX19x
ZW0gMHB4Cit9CisKK2RpdiB7CisgICAgZGlzcGxheTogYmxvY2sKK30KKworbGF5ZXIgeworICAg
IGRpc3BsYXk6IGJsb2NrCit9CisKK21hcnF1ZWUgeworICAgIGRpc3BsYXk6IGlubGluZS1ibG9j
azsKKyAgICBvdmVyZmxvdzogLXdlYmtpdC1tYXJxdWVlCit9CisKK2FkZHJlc3MgeworICAgIGRp
c3BsYXk6IGJsb2NrCit9CisKK2Jsb2NrcXVvdGUgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAg
IG1hcmdpbjogMV9fcWVtIDQwcHggMWVtIDQwcHgKK30KKworcSB7CisgICAgZGlzcGxheTogaW5s
aW5lCit9CisKK3E6YmVmb3JlIHsKKyAgICBjb250ZW50OiAnIicKKyAgICAvKiBGSVhNRTogY29u
dGVudDogb3Blbi1xdW90ZTsgKi8KK30KKworcTphZnRlciB7CisgICAgY29udGVudDogJyInCisg
ICAgLyogRklYTUU6IGNvbnRlbnQ6IGNsb3NlLXF1b3RlOyAqLworfQorCitjZW50ZXIgeworICAg
IGRpc3BsYXk6IGJsb2NrOworICAgIC8qIHNwZWNpYWwgY2VudGVyaW5nIHRvIGJlIGFibGUgdG8g
ZW11bGF0ZSB0aGUgaHRtbDQvbmV0c2NhcGUgYmVoYXZpb3VyICovCisgICAgdGV4dC1hbGlnbjog
LXdlYmtpdC1jZW50ZXIKK30KKworaHIgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdp
bjogMC41ZW0gYXV0bzsKKyAgICBib3JkZXItc3R5bGU6IGluc2V0OworICAgIGJvcmRlci13aWR0
aDogMXB4Cit9CisKK21hcCB7CisgICAgZGlzcGxheTogaW5saW5lCit9CisKKy8qIHRhYmxlcyAq
LworCit0YWJsZSB7CisgICAgZGlzcGxheTogdGFibGU7CisgICAgYm9yZGVyLWNvbGxhcHNlOiBz
ZXBhcmF0ZTsKKyAgICBib3JkZXItc3BhY2luZzogMnB4OworICAgIGJvcmRlci1jb2xvcjogZ3Jh
eQorfQorCit0YWJsZVthbGlnbj0iY2VudGVyIl0geworICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwor
ICAgIG1hcmdpbi1yaWdodDogYXV0bworfQorCit0aGVhZCB7CisgICAgZGlzcGxheTogdGFibGUt
aGVhZGVyLWdyb3VwOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CisgICAgYm9yZGVyLWNv
bG9yOiBpbmhlcml0Cit9CisKK3Rib2R5IHsKKyAgICBkaXNwbGF5OiB0YWJsZS1yb3ctZ3JvdXA7
CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgICBib3JkZXItY29sb3I6IGluaGVyaXQK
K30KKwordGZvb3QgeworICAgIGRpc3BsYXk6IHRhYmxlLWZvb3Rlci1ncm91cDsKKyAgICB2ZXJ0
aWNhbC1hbGlnbjogbWlkZGxlOworICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCisvKiBm
b3IgdGFibGVzIHdpdGhvdXQgdGFibGUgc2VjdGlvbiBlbGVtZW50cyAoY2FuIGhhcHBlbiB3aXRo
IFhIVE1MIG9yIGR5bmFtaWNhbGx5IGNyZWF0ZWQgdGFibGVzKSAqLwordGFibGUgPiB0ciB7Cisg
ICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKK30KKworY29sIHsKKyAgICBkaXNwbGF5OiB0YWJs
ZS1jb2x1bW4KK30KKworY29sZ3JvdXAgeworICAgIGRpc3BsYXk6IHRhYmxlLWNvbHVtbi1ncm91
cAorfQorCit0ciB7CisgICAgZGlzcGxheTogdGFibGUtcm93OworICAgIHZlcnRpY2FsLWFsaWdu
OiBpbmhlcml0OworICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCit0ZCwgdGggeworICAg
IGRpc3BsYXk6IHRhYmxlLWNlbGw7CisgICAgdmVydGljYWwtYWxpZ246IGluaGVyaXQKK30KKwor
dGggeworICAgIGZvbnQtd2VpZ2h0OiBib2xkCit9CisKK2NhcHRpb24geworICAgIGRpc3BsYXk6
IHRhYmxlLWNhcHRpb247CisgICAgdGV4dC1hbGlnbjogLXdlYmtpdC1jZW50ZXIKK30KKworLyog
bGlzdHMgKi8KKwordWwsIG1lbnUsIGRpciB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbGlz
dC1zdHlsZS10eXBlOiBkaXNjOworICAgIG1hcmdpbjogMV9fcWVtIDAgMWVtIDA7CisgICAgLXdl
YmtpdC1wYWRkaW5nLXN0YXJ0OiA0MHB4Cit9CisKK29sIHsKKyAgICBkaXNwbGF5OiBibG9jazsK
KyAgICBsaXN0LXN0eWxlLXR5cGU6IGRlY2ltYWw7CisgICAgbWFyZ2luOiAxX19xZW0gMCAxZW0g
MDsKKyAgICAtd2Via2l0LXBhZGRpbmctc3RhcnQ6IDQwcHgKK30KKworbGkgeworICAgIGRpc3Bs
YXk6IGxpc3QtaXRlbQorfQorCit1bCB1bCwgb2wgdWwgeworICAgIGxpc3Qtc3R5bGUtdHlwZTog
Y2lyY2xlCit9CisKK29sIG9sIHVsLCBvbCB1bCB1bCwgdWwgb2wgdWwsIHVsIHVsIHVsIHsKKyAg
ICBsaXN0LXN0eWxlLXR5cGU6IHNxdWFyZQorfQorCitkZCB7CisgICAgZGlzcGxheTogYmxvY2s7
CisgICAgLXdlYmtpdC1tYXJnaW4tc3RhcnQ6IDQwcHgKK30KKworZGwgeworICAgIGRpc3BsYXk6
IGJsb2NrOworICAgIG1hcmdpbjogMV9fcWVtIDAgMWVtIDAKK30KKworZHQgeworICAgIGRpc3Bs
YXk6IGJsb2NrCit9CisKK29sIHVsLCB1bCBvbCwgdWwgdWwsIG9sIG9sIHsKKyAgICBtYXJnaW4t
dG9wOiAwOworICAgIG1hcmdpbi1ib3R0b206IDAKK30KKworLyogZm9ybSBlbGVtZW50cyAqLwor
Citmb3JtIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDBfX3FlbSAwIDFlbSAw
Cit9CisKK2xhYmVsIHsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7Cit9CisKK2xlZ2VuZCB7CisgICAg
ZGlzcGxheTogYmxvY2s7CisgICAgcGFkZGluZy1sZWZ0OiAycHg7CisgICAgcGFkZGluZy1yaWdo
dDogMnB4OworICAgIGJvcmRlcjogbm9uZQorfQorCitmaWVsZHNldCB7CisgICAgZGlzcGxheTog
YmxvY2s7CisgICAgbWFyZ2luLWxlZnQ6IDJweDsKKyAgICBtYXJnaW4tcmlnaHQ6IDJweDsKKyAg
ICBwYWRkaW5nOiAwLjM1ZW0gMC43NWVtIDAuNjI1ZW07CisgICAgYm9yZGVyOiAycHggZ3Jvb3Zl
IFRocmVlREZhY2UKK30KKworYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGJ1dHRv
bjsKK30KKworZG8geworICAgIGJhY2tncm91bmQtY29sb3I6IGxpZ2h0Z3JheTsKK30KKworaW5w
dXQsIHRleHRhcmVhLCBrZXlnZW4sIHNlbGVjdCwgYnV0dG9uLCBpc2luZGV4IHsKKyAgICBtYXJn
aW46IDBfX3FlbTsKKyAgICBmb250OiAtd2Via2l0LXNtYWxsLWNvbnRyb2w7CisgICAgY29sb3I6
IGluaXRpYWw7CisgICAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDsKKyAgICB3b3JkLXNwYWNpbmc6
IG5vcm1hbDsKKyAgICBsaW5lLWhlaWdodDogbm9ybWFsOworICAgIHRleHQtdHJhbnNmb3JtOiBu
b25lOworICAgIHRleHQtaW5kZW50OiAwOworICAgIHRleHQtc2hhZG93OiBub25lOworICAgIGRp
c3BsYXk6IGlubGluZS1ibG9jazsKKyAgICB0ZXh0LWFsaWduOiAtd2Via2l0LWF1dG87Cit9CisK
K2lucHV0W3R5cGU9ImhpZGRlbiJdIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2lucHV0LCBp
bnB1dFt0eXBlPSJwYXNzd29yZCJdLCBpbnB1dFt0eXBlPSJzZWFyY2giXSwgaXNpbmRleCB7Cisg
ICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0ZmllbGQ7CisgICAgcGFkZGluZzogMXB4OworICAg
IGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlcjogMnB4IGluc2V0OworICAgIC13
ZWJraXQtcnRsLW9yZGVyaW5nOiBsb2dpY2FsOworICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IHRl
eHQ7CisgICAgY3Vyc29yOiBhdXRvOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXSB7CisgICAg
LXdlYmtpdC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZDsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6
IGJvcmRlci1ib3g7Cit9CisKK2lucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1j
YW5jZWwtYnV0dG9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLWNhbmNl
bC1idXR0b247Cit9CisKK2lucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNv
cmF0aW9uIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNlYXJjaGZpZWxkLWRlY29yYXRpb247
Cit9CisKK2lucHV0W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1yZXN1bHRzLWRlY29y
YXRpb24geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQtcmVzdWx0cy1kZWNv
cmF0aW9uOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0
cy1idXR0b24geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNoZmllbGQtcmVzdWx0cy1i
dXR0b247Cit9CisKK3RleHRhcmVhIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHRleHRhcmVh
OworICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOworICAgIGJvcmRlcjogMXB4IHNvbGlkOwor
ICAgIC13ZWJraXQtcnRsLW9yZGVyaW5nOiBsb2dpY2FsOworICAgIC13ZWJraXQtdXNlci1zZWxl
Y3Q6IHRleHQ7CisgICAgLXdlYmtpdC1ib3gtb3JpZW50OiB2ZXJ0aWNhbDsKKyAgICByZXNpemU6
IGF1dG87CisgICAgY3Vyc29yOiBhdXRvOworfQorCitpbnB1dFt0eXBlPSJwYXNzd29yZCJdIHsK
KyAgICAtd2Via2l0LXRleHQtc2VjdXJpdHk6IGRpc2MgIWltcG9ydGFudDsKK30KKworaW5wdXRb
dHlwZT0iaGlkZGVuIl0sIGlucHV0W3R5cGU9ImltYWdlIl0sIGlucHV0W3R5cGU9ImZpbGUiXSB7
CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBpbml0aWFsOworICAgIHBhZGRpbmc6IGluaXRpYWw7
CisgICAgYmFja2dyb3VuZC1jb2xvcjogaW5pdGlhbDsKKyAgICBib3JkZXI6IGluaXRpYWw7Cit9
CisKK2lucHV0W3R5cGU9ImZpbGUiXSB7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGJhc2VsaW5l
OworfQorCitpbnB1dDotd2Via2l0LWF1dG9maWxsIHsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiAj
RkFGRkJEICFpbXBvcnRhbnQ7CisgICAgYmFja2dyb3VuZC1pbWFnZTpub25lICFpbXBvcnRhbnQ7
Cit9CisKK2lucHV0W3R5cGU9InJhZGlvIl0sIGlucHV0W3R5cGU9ImNoZWNrYm94Il0geworICAg
IG1hcmdpbjogM3B4IDAuNWV4OworICAgIHBhZGRpbmc6IGluaXRpYWw7CisgICAgYmFja2dyb3Vu
ZC1jb2xvcjogaW5pdGlhbDsKKyAgICBib3JkZXI6IGluaXRpYWw7Cit9CisKK2lucHV0W3R5cGU9
ImJ1dHRvbiJdLCBpbnB1dFt0eXBlPSJzdWJtaXQiXSwgaW5wdXRbdHlwZT0icmVzZXQiXSwgaW5w
dXRbdHlwZT0iZmlsZSJdOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7CisgICAgLXdlYmtp
dC1hcHBlYXJhbmNlOiBwdXNoLWJ1dHRvbjsKKyAgICB3aGl0ZS1zcGFjZTogcHJlCit9CisKK2lu
cHV0W3R5cGU9ImJ1dHRvbiJdLCBpbnB1dFt0eXBlPSJzdWJtaXQiXSwgaW5wdXRbdHlwZT0icmVz
ZXQiXSwgaW5wdXRbdHlwZT0iZmlsZSJdOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0
dG9uIHsKKyAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVyOworICAgIHRleHQtYWxpZ246IGNl
bnRlcjsKKyAgICBjdXJzb3I6IGRlZmF1bHQ7CisgICAgY29sb3I6IEJ1dHRvblRleHQ7CisgICAg
cGFkZGluZzogMnB4IDZweCAzcHggNnB4OworICAgIGJvcmRlcjogMnB4IG91dHNldCBCdXR0b25G
YWNlOworICAgIGJhY2tncm91bmQtY29sb3I6IEJ1dHRvbkZhY2U7CisgICAgLXdlYmtpdC1ib3gt
c2l6aW5nOiBib3JkZXItYm94Cit9CisKK2lucHV0W3R5cGU9InJhbmdlIl0geworICAgIC13ZWJr
aXQtYXBwZWFyYW5jZTogc2xpZGVyLWhvcml6b250YWw7CisgICAgcGFkZGluZzogaW5pdGlhbDsK
KyAgICBib3JkZXI6IGluaXRpYWw7CisgICAgbWFyZ2luOiAycHg7Cit9CisKK2lucHV0W3R5cGU9
InJhbmdlIl06Oi13ZWJraXQtc2xpZGVyLXRodW1iIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6
IHNsaWRlcnRodW1iLWhvcml6b250YWw7Cit9CisKK2lucHV0W3R5cGU9ImJ1dHRvbiJdOmRpc2Fi
bGVkLCBpbnB1dFt0eXBlPSJzdWJtaXQiXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0icmVzZXQiXTpk
aXNhYmxlZCwgaW5wdXRbdHlwZT0iZmlsZSJdOmRpc2FibGVkOjotd2Via2l0LWZpbGUtdXBsb2Fk
LWJ1dHRvbiwgYnV0dG9uOmRpc2FibGVkLCBzZWxlY3Q6ZGlzYWJsZWQsIGtleWdlbjpkaXNhYmxl
ZCwgb3B0Z3JvdXA6ZGlzYWJsZWQsIG9wdGlvbjpkaXNhYmxlZCB7CisgICAgY29sb3I6IEdyYXlU
ZXh0Cit9CisKK2lucHV0W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0ic3VibWl0
Il06YWN0aXZlLCBpbnB1dFt0eXBlPSJyZXNldCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0iZmlsZSJd
OmFjdGl2ZTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjphY3RpdmUgeworICAg
IGJvcmRlci1zdHlsZTogaW5zZXQKK30KKworaW5wdXRbdHlwZT0iYnV0dG9uIl06YWN0aXZlOmRp
c2FibGVkLCBpbnB1dFt0eXBlPSJzdWJtaXQiXTphY3RpdmU6ZGlzYWJsZWQsIGlucHV0W3R5cGU9
InJlc2V0Il06YWN0aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJmaWxlIl06YWN0aXZlOmRpc2Fi
bGVkOjotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiwgYnV0dG9uOmFjdGl2ZTpkaXNhYmxlZCB7
CisgICAgYm9yZGVyLXN0eWxlOiBvdXRzZXQKK30KKworYXJlYSwgcGFyYW0geworICAgIGRpc3Bs
YXk6IG5vbmUKK30KKworaW5wdXRbdHlwZT0iY2hlY2tib3giXSB7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBjaGVja2JveDsKKyAgICAtd2Via2l0LWJveC1zaXppbmc6IGJvcmRlci1ib3g7Cit9
CisKK2lucHV0W3R5cGU9InJhZGlvIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcmFkaW87
CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitrZXlnZW4sIHNlbGVj
dCB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdDsKKyAgICAtd2Via2l0LWJveC1z
aXppbmc6IGJvcmRlci1ib3g7CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICBi
b3JkZXI6IDFweCBzb2xpZDsKKyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgICB3
aGl0ZS1zcGFjZTogcHJlOworICAgIC13ZWJraXQtcnRsLW9yZGVyaW5nOiBsb2dpY2FsOworICAg
IGNvbG9yOiBibGFjazsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKKyAgICBjdXJzb3I6
IGRlZmF1bHQ7Cit9CisKK3NlbGVjdFtzaXplXSwKK3NlbGVjdFttdWx0aXBsZV0sCitzZWxlY3Rb
c2l6ZV1bbXVsdGlwbGVdIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IGxpc3Rib3g7CisgICAg
LXdlYmtpdC1ib3gtYWxpZ246IHN0YXJ0OworICAgIGJvcmRlcjogMXB4IGluc2V0IGdyYXk7Cisg
ICAgLXdlYmtpdC1ib3JkZXItcmFkaXVzOiBpbml0aWFsOworICAgIHdoaXRlLXNwYWNlOiBpbml0
aWFsOworfQorCitzZWxlY3Rbc2l6ZT0iMCJdLAorc2VsZWN0W3NpemU9IjEiXSB7CisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBtZW51bGlzdDsKKyAgICAtd2Via2l0LWJveC1hbGlnbjogY2VudGVy
OworICAgIGJvcmRlcjogMXB4IHNvbGlkOworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czogNXB4
OworICAgIHdoaXRlLXNwYWNlOiBwcmU7Cit9CisKK29wdGdyb3VwIHsKKyAgICBmb250LXdlaWdo
dDogYm9sZGVyOworfQorCitvcHRpb24geworICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7Cit9CisK
Ky8qIGlubGluZSBlbGVtZW50cyAqLworCit1LCBpbnMgeworICAgIHRleHQtZGVjb3JhdGlvbjog
dW5kZXJsaW5lCit9CisKK3N0cm9uZywgYiB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGRlcgorfQor
CitpLCBjaXRlLCBlbSwgdmFyLCBhZGRyZXNzIHsKKyAgICBmb250LXN0eWxlOiBpdGFsaWMKK30K
KwordHQsIGNvZGUsIGtiZCwgc2FtcCB7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZQorfQor
CitwcmUsIHhtcCwgcGxhaW50ZXh0LCBsaXN0aW5nIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAg
ICBmb250LWZhbWlseTogbW9ub3NwYWNlOworICAgIHdoaXRlLXNwYWNlOiBwcmU7CisgICAgbWFy
Z2luOiAxX19xZW0gMAorfQorCitiaWcgeworICAgIGZvbnQtc2l6ZTogbGFyZ2VyCit9CisKK3Nt
YWxsIHsKKyAgICBmb250LXNpemU6IHNtYWxsZXIKK30KKworcywgc3RyaWtlLCBkZWwgeworICAg
IHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoCit9CisKK3N1YiB7CisgICAgdmVydGljYWwt
YWxpZ246IHN1YjsKKyAgICBmb250LXNpemU6IHNtYWxsZXIKK30KKworc3VwIHsKKyAgICB2ZXJ0
aWNhbC1hbGlnbjogc3VwZXI7CisgICAgZm9udC1zaXplOiBzbWFsbGVyCit9CisKK25vYnIgewor
ICAgIHdoaXRlLXNwYWNlOiBub3dyYXAKK30KKworLyogc3RhdGVzICovCisKKzpmb2N1cyB7IAor
ICAgIG91dGxpbmU6IGF1dG8gNXB4IC13ZWJraXQtZm9jdXMtcmluZy1jb2xvcgorfQorCisvKiBS
ZWFkLW9ubHkgdGV4dCBmaWVsZHMgZG8gbm90IHNob3cgYSBmb2N1cyByaW5nIGJ1dCBkbyBzdGls
bCByZWNlaXZlIGZvY3VzICovCit3bWw6Zm9jdXMsIGNhcmQ6Zm9jdXMsIGlucHV0W3JlYWRvbmx5
XTpmb2N1cyB7IAorICAgIG91dGxpbmU6IG5vbmUKK30KKyAgCitpbnB1dDpmb2N1cywgdGV4dGFy
ZWE6Zm9jdXMsIGlzaW5kZXg6Zm9jdXMsIGtleWdlbjpmb2N1cywgc2VsZWN0OmZvY3VzIHsKKyAg
ICBvdXRsaW5lLW9mZnNldDogLTJweAorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXTpmb2N1cywK
K2lucHV0W3R5cGU9ImNoZWNrYm94Il06Zm9jdXMsCitpbnB1dFt0eXBlPSJmaWxlIl06Zm9jdXMs
CitpbnB1dFt0eXBlPSJoaWRkZW4iXTpmb2N1cywKK2lucHV0W3R5cGU9ImltYWdlIl06Zm9jdXMs
CitpbnB1dFt0eXBlPSJyYWRpbyJdOmZvY3VzLAoraW5wdXRbdHlwZT0icmVzZXQiXTpmb2N1cywK
K2lucHV0W3R5cGU9InNlYXJjaCJdOmZvY3VzLAoraW5wdXRbdHlwZT0ic3VibWl0Il06Zm9jdXMs
CitpbnB1dFt0eXBlPSJmaWxlIl06Zm9jdXM6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHsK
KyAgICBvdXRsaW5lLW9mZnNldDogMAorfQorICAgIAorYTotd2Via2l0LWFueS1saW5rIHsKKyAg
ICBjb2xvcjogLXdlYmtpdC1saW5rOworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwor
fQorCithOi13ZWJraXQtYW55LWxpbms6YWN0aXZlIHsKKyAgICBjb2xvcjogLXdlYmtpdC1hY3Rp
dmVsaW5rCit9CisKK2FuY2hvcjotd2Via2l0LWFueS1saW5rIHsKKyAgICBjb2xvcjogLXdlYmtp
dC1saW5rOworICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOworfQorCithbmNob3I6LXdl
YmtpdC1hbnktbGluazphY3RpdmUgeworICAgIGNvbG9yOiAtd2Via2l0LWFjdGl2ZWxpbmsKK30K
KworLyogb3RoZXIgZWxlbWVudHMgKi8KKworbm9mcmFtZXMgeworICAgIGRpc3BsYXk6IG5vbmUK
K30KKworZnJhbWVzZXQsIGZyYW1lIHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCitmcmFtZXNl
dCB7CisgICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0Cit9CisKK2lmcmFtZSB7CisgICAgYm9yZGVy
OiAycHggaW5zZXQKK30KKworLyogbm9zY3JpcHQgaXMgaGFuZGxlZCBpbnRlcm5hbGx5LCBhcyBp
dCBkZXBlbmRzIG9uIHNldHRpbmdzICovCkluZGV4OiBkb20vRE9NSW1wbGVtZW50YXRpb24uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGRvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHJldmlzaW9uIDM4MzE4
KQorKysgZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0
LDggQEAKICAqICAgICAgICAgICAoQykgMjAwMSBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9y
ZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgU2FtdWVsIFdl
aW5pZyAoc2FtQHdlYmtpdC5vcmcpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Miw2ICs1NCwxMCBAQAog
I2luY2x1ZGUgIlNWR0RvY3VtZW50LmgiCiAjZW5kaWYKIAorI2lmIEVOQUJMRShXTUwpCisjaW5j
bHVkZSAiV01MRG9jdW1lbnQuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNp
ZiBFTkFCTEUoU1ZHKQpAQCAtMzA4LDYgKzMxNCwxNSBAQCBQYXNzUmVmUHRyPERvY3VtZW50PiBE
T01JbXBsZW1lbnRhdGlvbjo6CiAgICAgICAgIHJldHVybiBIVE1MRG9jdW1lbnQ6OmNyZWF0ZShm
cmFtZSk7CiAgICAgaWYgKHR5cGUgPT0gImFwcGxpY2F0aW9uL3hodG1sK3htbCIpCiAgICAgICAg
IHJldHVybiBEb2N1bWVudDo6Y3JlYXRlWEhUTUwoZnJhbWUpOworCisjaWYgRU5BQkxFKFdNTCkK
KyAgICBpZiAodHlwZSA9PSAidGV4dC92bmQud2FwLndtbCIKKyNpZiBFTkFCTEUoV0JYTUwpCisg
ICAgICAgIHx8IHR5cGUgPT0gImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIKKyNlbmRpZgorICAg
ICAgICApCisgICAgICAgIHJldHVybiBXTUxEb2N1bWVudDo6Y3JlYXRlKGZyYW1lKTsKKyNlbmRp
ZgogICAgICAgICAKICNpZiBFTkFCTEUoRlRQRElSKQogICAgIC8vIFBsdWdpbnMgY2Fubm90IHRh
a2UgRlRQIGZyb20gdXMgZWl0aGVyCkluZGV4OiBkb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGRvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDM4MzE4KQorKysgZG9tL0RvY3VtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDggQEAKICAqICAgICAgICAgICAoQykgMjAwMSBE
aXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwNiBBbGV4
ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKQEAgLTEwNyw2ICsxMDksMTAgQEAKICNpbmNsdWRlICJXZWJLaXRBbmltYXRp
b25FdmVudC5oIgogI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5oIgogI2luY2x1ZGUg
IldoZWVsRXZlbnQuaCIKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTEVsZW1lbnRGYWN0
b3J5LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNlbmRpZgogI2luY2x1ZGUgIlhNTEh0dHBS
ZXF1ZXN0LmgiCiAjaW5jbHVkZSAiWE1MTmFtZXMuaCIKICNpbmNsdWRlICJYTUxUb2tlbml6ZXIu
aCIKQEAgLTc0NSw2ICs3NTEsMTAgQEAgUGFzc1JlZlB0cjxFbGVtZW50PiBEb2N1bWVudDo6Y3Jl
YXRlRWxlbQogICAgIGVsc2UgaWYgKHFOYW1lLm5hbWVzcGFjZVVSSSgpID09IFNWR05hbWVzOjpz
dmdOYW1lc3BhY2VVUkkpCiAgICAgICAgIGUgPSBTVkdFbGVtZW50RmFjdG9yeTo6Y3JlYXRlU1ZH
RWxlbWVudChxTmFtZSwgdGhpcywgY3JlYXRlZEJ5UGFyc2VyKTsKICNlbmRpZgorI2lmIEVOQUJM
RShXTUwpCisgICAgZWxzZSBpZiAocU5hbWUubmFtZXNwYWNlVVJJKCkgPT0gV01MTmFtZXM6Ondt
bE5hbWVzcGFjZVVSSSkKKyAgICAgICAgZSA9IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxF
bGVtZW50KHFOYW1lLCB0aGlzLCBjcmVhdGVkQnlQYXJzZXIpOworI2VuZGlmCiAgICAgCiAgICAg
aWYgKCFlKQogICAgICAgICBlID0gbmV3IEVsZW1lbnQocU5hbWUsIGRvY3VtZW50KCkpOwpJbmRl
eDogZG9tL0RvY3VtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZG9tL0RvY3VtZW50LmgJKHJldmlzaW9u
IDM4MzE4KQorKysgZG9tL0RvY3VtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw4IEBA
CiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykK
ICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxl
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0yOTUsNiArMjk3LDkgQEAg
cHVibGljOgogI2VuZGlmCiAgICAgdmlydHVhbCBib29sIGlzUGx1Z2luRG9jdW1lbnQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgYm9vbCBpc01lZGlhRG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorI2lmIEVOQUJMRShXTUwpCisgICAgdmlydHVhbCBib29s
IGlzV01MRG9jdW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorI2VuZGlmCiAgICAgCiAg
ICAgQ1NTU3R5bGVTZWxlY3Rvciogc3R5bGVTZWxlY3RvcigpIGNvbnN0IHsgcmV0dXJuIG1fc3R5
bGVTZWxlY3RvcjsgfQogCkluZGV4OiBkb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBkb20vWE1MVG9rZW5pemVyLmNwcAkocmV2aXNpb24gMzgzMTgpCisrKyBkb20vWE1MVG9rZW5p
emVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDcgQEAKICAqIENvcHlyaWdodCAoQykg
MjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAw
OCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqIENvcHly
aWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJpZ2h0IChD
KSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAq
CiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMjg3LDYgKzI4OCwxNiBAQCB2b2lkIFhNTFRva2VuaXplcjo6
aW5zZXJ0RXJyb3JNZXNzYWdlQmxvCiAgICAgICAgIGRvY3VtZW50RWxlbWVudCA9IGJvZHkuZ2V0
KCk7CiAgICAgfQogI2VuZGlmCisjaWYgRU5BQkxFKFdNTCkKKyAgICBlbHNlIGlmIChtX2RvYy0+
aXNXTUxEb2N1bWVudCgpKSB7CisgICAgICAgIFJlZlB0cjxOb2RlPiByb290RWxlbWVudCA9IGRv
Yy0+Y3JlYXRlRWxlbWVudE5TKEhUTUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkksICJodG1sIiwg
ZWMpOworICAgICAgICBSZWZQdHI8Tm9kZT4gYm9keSA9IGRvYy0+Y3JlYXRlRWxlbWVudE5TKEhU
TUxOYW1lczo6eGh0bWxOYW1lc3BhY2VVUkksICJib2R5IiwgZWMpOworICAgICAgICByb290RWxl
bWVudC0+YXBwZW5kQ2hpbGQoYm9keSwgZWMpOworICAgICAgICBib2R5LT5hcHBlbmRDaGlsZChk
b2N1bWVudEVsZW1lbnQsIGVjKTsKKyAgICAgICAgZG9jLT5hcHBlbmRDaGlsZChyb290RWxlbWVu
dC5nZXQoKSwgZWMpOworICAgICAgICBkb2N1bWVudEVsZW1lbnQgPSBib2R5LmdldCgpOworICAg
IH0KKyNlbmRpZgogCiAgICAgUmVmUHRyPEVsZW1lbnQ+IHJlcG9ydEVsZW1lbnQgPSBjcmVhdGVY
SFRNTFBhcnNlckVycm9ySGVhZGVyKGRvYywgbV9lcnJvck1lc3NhZ2VzKTsKICAgICBkb2N1bWVu
dEVsZW1lbnQtPmluc2VydEJlZm9yZShyZXBvcnRFbGVtZW50LCBkb2N1bWVudEVsZW1lbnQtPmZp
cnN0Q2hpbGQoKSwgZWMpOwpJbmRleDogZG9tL1hNTFRva2VuaXplci5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGRvbS9YTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMzgzMTgpCisrKyBkb20vWE1MVG9rZW5pemVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUs
IDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0
IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChD
KSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICog
Q29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzMsNiArNzQsOCBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgc2V0SXNYSFRNTERvY3VtZW50KGJvb2wgaXNYSFRNTCkg
eyBtX2lzWEhUTUxEb2N1bWVudCA9IGlzWEhUTUw7IH0KICAgICAgICAgYm9vbCBpc1hIVE1MRG9j
dW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2lzWEhUTUxEb2N1bWVudDsgfQogCisgICAgICAgIERv
Y3VtZW50KiBkb2N1bWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZG9jOyB9CisKICAgICAgICAgLy8g
ZnJvbSBDYWNoZWRSZXNvdXJjZUNsaWVudAogICAgICAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5Rmlu
aXNoZWQoQ2FjaGVkUmVzb3VyY2UqIGZpbmlzaGVkT2JqKTsKIApAQCAtOTEsMTIgKzk0LDE1IEBA
IHByaXZhdGU6CiAgICAgICAgIHZvaWQgcGFyc2VTdGFydEVsZW1lbnQoKTsKICAgICAgICAgdm9p
ZCBwYXJzZUVuZEVsZW1lbnQoKTsKICAgICAgICAgdm9pZCBwYXJzZUNoYXJhY3RlcnMoKTsKLSAg
ICAgICAgdm9pZCBwYXJzZVByb2Nlc3NpbmdJbnN0cnVjdGlvbigpOworICAgICAgICB2b2lkIGVu
ZERvY3VtZW50KCk7CiAgICAgICAgIHZvaWQgcGFyc2VDZGF0YSgpOworICAgICAgICBib29sIGhh
c0Vycm9yKCkgY29uc3Q7CisjaWYgRU5BQkxFKFdNTCkKK3Byb3RlY3RlZDoKKyNlbmRpZgorICAg
ICAgICB2b2lkIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CiAgICAgICAgIHZvaWQgcGFy
c2VDb21tZW50KCk7Ci0gICAgICAgIHZvaWQgZW5kRG9jdW1lbnQoKTsKICAgICAgICAgdm9pZCBw
YXJzZUR0ZCgpOwotICAgICAgICBib29sIGhhc0Vycm9yKCkgY29uc3Q7CiAjZWxzZQogcHVibGlj
OgogICAgICAgICAvLyBjYWxsYmFja3MgZnJvbSBwYXJzZXIgU0FYCkBAIC0xMTIsMTggKzExOCwy
OCBAQCBwdWJsaWM6CiAgICAgICAgIHZvaWQgaW50ZXJuYWxTdWJzZXQoY29uc3QgeG1sQ2hhciog
bmFtZSwgY29uc3QgeG1sQ2hhciogZXh0ZXJuYWxJRCwgY29uc3QgeG1sQ2hhciogc3lzdGVtSUQp
OwogICAgICAgICB2b2lkIGVuZERvY3VtZW50KCk7CiAjZW5kaWYKKworI2lmIEVOQUJMRShXTUwp
CisgICAgcHJvdGVjdGVkOgorI2lmIFVTRShRWE1MU1RSRUFNKQorICAgICAgICBRWG1sU3RyZWFt
UmVhZGVyJiB4bWxTdHJlYW1SZWFkZXIoKSB7IHJldHVybiBtX3N0cmVhbTsgfQorICAgICAgICBG
cmFtZVZpZXcqIGZyYW1lVmlldygpIGNvbnN0IHsgcmV0dXJuIG1fdmlldzsgfQorICAgICAgICBO
b2RlKiBjdXJyZW50Tm9kZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VycmVudE5vZGU7IH0KKyNlbmRp
ZgorI2Vsc2UKKyAgICBwcml2YXRlOgorI2VuZGlmCisgICAgICAgIHZvaWQgc2V0Q3VycmVudE5v
ZGUoTm9kZSopOworICAgICAgICBib29sIGVudGVyVGV4dCgpOworICAgICAgICB2b2lkIGV4aXRU
ZXh0KCk7CiAgICAgcHJpdmF0ZToKICAgICAgICAgZnJpZW5kIGJvb2wgcGFyc2VYTUxEb2N1bWVu
dEZyYWdtZW50KGNvbnN0IFN0cmluZyYgY2h1bmssIERvY3VtZW50RnJhZ21lbnQqIGZyYWdtZW50
LCBFbGVtZW50KiBwYXJlbnQpOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGV2ZW50dWFsbHlNYXJr
QXNQYXJzZXJDcmVhdGVkKEVsZW1lbnQqIGVsZW1lbnQpOwogICAgICAgICB2b2lkIGluaXRpYWxp
emVQYXJzZXJDb250ZXh0KGNvbnN0IGNoYXIqIGNodW5rID0gMCk7Ci0gICAgICAgIHZvaWQgc2V0
Q3VycmVudE5vZGUoTm9kZSopOwogCiAgICAgICAgIHZvaWQgaW5zZXJ0RXJyb3JNZXNzYWdlQmxv
Y2soKTsKIAotICAgICAgICBib29sIGVudGVyVGV4dCgpOwotICAgICAgICB2b2lkIGV4aXRUZXh0
KCk7Ci0KICAgICAgICAgdm9pZCBkb1dyaXRlKGNvbnN0IFN0cmluZyYpOwogICAgICAgICB2b2lk
IGRvRW5kKCk7CiAKSW5kZXg6IGRvbS9YTUxUb2tlbml6ZXJRdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZG9tL1hNTFRva2VuaXplclF0LmNwcAkocmV2aXNpb24gMzgzMTgpCisrKyBkb20vWE1MVG9rZW5p
emVyUXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChD
KSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQogICogQ29weXJpZ2h0IChDKSAy
MDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29w
eXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC03NDQsNiArNzQ1LDE0IEBAIHZvaWQgWE1MVG9rZW5pemVy
OjpwYXJzZUR0ZCgpCiAgICAgICAgIHx8IChwdWJsaWNJZCA9PSBRTGF0aW4xU3RyaW5nKCItLy9X
QVBGT1JVTS8vRFREIFhIVE1MIE1vYmlsZSAxLjAvL0VOIikpKSB7CiAgICAgICAgIHNldElzWEhU
TUxEb2N1bWVudCh0cnVlKTsgLy8gY29udHJvbHMgaWYgd2UgcmVwbGFjZSBlbnRpdGllcyBvciBu
b3QuCiAgICAgfQorI2lmIEVOQUJMRShXTUwpCisgICAgZWxzZSBpZiAobV9kb2MtPmlzV01MRG9j
dW1lbnQoKQorICAgICAgICAgICAgJiYgcHVibGljSWQgIT0gUUxhdGluMVN0cmluZygiLS8vV0FQ
Rk9SVU0vL0RURCBXTUwgMS4zLy9FTiIpCisgICAgICAgICAgICAmJiBwdWJsaWNJZCAhPSBRTGF0
aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjIvL0VOIikKKyAgICAgICAgICAgICYm
IHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4i
KQorICAgICAgICAgICAgJiYgcHVibGljSWQgIT0gUUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0v
L0RURCBXTUwgMS4wLy9FTiIpKQorICAgICAgICBoYW5kbGVFcnJvcihmYXRhbCwgIkludmFsaWQg
RFREIFB1YmxpYyBJRCIsIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworI2VuZGlmCiAg
ICAgaWYgKCFtX3BhcnNpbmdGcmFnbWVudCkKICAgICAgICAgbV9kb2MtPmFkZENoaWxkKERvY3Vt
ZW50VHlwZTo6Y3JlYXRlKG1fZG9jLCBuYW1lLCBwdWJsaWNJZCwgc3lzdGVtSWQpKTsKICAgICAK
SW5kZXg6IGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBoaXN0b3J5
L0JhY2tGb3J3YXJkTGlzdC5jcHAJKHJldmlzaW9uIDM4MzE4KQorKysgaGlzdG9yeS9CYWNrRm9y
d2FyZExpc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHly
aWdodCAoQykgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2NCw0ICsyNjYsMTkgQEAgYm9v
bCBCYWNrRm9yd2FyZExpc3Q6OmNvbnRhaW5zSXRlbShIaXN0bwogICAgIHJldHVybiBtX2VudHJ5
SGFzaC5jb250YWlucyhlbnRyeSk7CiB9CiAKKyNpZiBFTkFCTEUoV01MKQorLy8gY2xlYXIgdGhl
IGhpc3Rvcnkgb2YgY3VycmVudCBXTUwgcGFnZQordm9pZCBCYWNrRm9yd2FyZExpc3Q6OmNsZWFy
V21sUGFnZUhpc3RvcnkoKQoreworICAgIFBhc3NSZWZQdHI8SGlzdG9yeUl0ZW0+IGN1ciA9IGN1
cnJlbnRJdGVtKCk7CisKKyAgICBpbnQgc2l6ZSA9IG1fZW50cmllcy5zaXplKCk7CisgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBzaXplOyArK2kpCisgICAgICAgIHBhZ2VDYWNoZSgpLT5yZW1vdmUo
bV9lbnRyaWVzW2ldLmdldCgpKTsKKyAgICBtX2VudHJpZXMuY2xlYXIoKTsKKyAgICBtX2VudHJ5
SGFzaC5jbGVhcigpOworICAgIG1fY3VycmVudCA9IE5vQ3VycmVudEl0ZW1JbmRleDsKK30KKyNl
bmRpZgorCiB9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogaGlzdG9yeS9CYWNrRm9yd2Fy
ZExpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBoaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oCShyZXZpc2lv
biAzODMxOCkKKysrIGhpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
NzMsNiArNzUsOSBAQCBwdWJsaWM6IAogICAgIHZvaWQgcmVtb3ZlSXRlbShIaXN0b3J5SXRlbSop
OwogICAgIEhpc3RvcnlJdGVtVmVjdG9yJiBlbnRyaWVzKCk7CiAgICAgCisjaWYgRU5BQkxFKFdN
TCkKKyAgICB2b2lkIGNsZWFyV21sUGFnZUhpc3RvcnkoKTsKKyNlbmRpZgogcHJpdmF0ZToKICAg
ICBCYWNrRm9yd2FyZExpc3QoUGFnZSopOwogCkluZGV4OiBodG1sL0hUTUxCdXR0b25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkocmV2aXNpb24g
MzgzMTgpCisrKyBodG1sL0hUTUxCdXR0b25FbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NSw2ICs1LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiAgICAgICAgICAgKEMpIDIwMDYgQWxleGV5
IFByb3NrdXJ5YWtvdiAoYXBAbnlwb3AuY29tKQogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVl
bCBXZWluaWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNDQsNiArNDYsMTUg
QEAgSFRNTEJ1dHRvbkVsZW1lbnQ6OkhUTUxCdXR0b25FbGVtZW50KERvYwogewogfQogCisjaWYg
RU5BQkxFKFdNTCkKK0hUTUxCdXR0b25FbGVtZW50OjpIVE1MQnV0dG9uRWxlbWVudChjb25zdCBR
dWFsaWZpZWROYW1lJiB0YWcsIERvY3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkK
KyAgICA6IEhUTUxGb3JtQ29udHJvbEVsZW1lbnQodGFnLCBkb2MsIGZvcm0pCisgICAgLCBtX3R5
cGUoQlVUVE9OKQorICAgICwgbV9hY3RpdmVTdWJtaXQoZmFsc2UpCit7Cit9CisjZW5kaWYKKwog
SFRNTEJ1dHRvbkVsZW1lbnQ6On5IVE1MQnV0dG9uRWxlbWVudCgpCiB7CiB9CkluZGV4OiBodG1s
L0hUTUxCdXR0b25FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gaHRtbC9IVE1MQnV0dG9uRWxlbWVu
dC5oCShyZXZpc2lvbiAzODMxOCkKKysrIGh0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMyw2ICszLDggQEAKICAqICAgICAgICAgICAoQykgMTk5OSBBbnR0aSBLb2l2
aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAgICAgICAoQykgMjAwMCBEaXJrIE11ZWxs
ZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0z
MSw2ICszMyw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIEhUTUxCdXR0b25FbGVtZW50
IDogcHVibGljIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQgewogcHVibGljOgogICAgIEhUTUxCdXR0
b25FbGVtZW50KERvY3VtZW50KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworI2lmIEVOQUJMRShX
TUwpCisgICAgSFRNTEJ1dHRvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
KiwgSFRNTEZvcm1FbGVtZW50KiA9IDApOworI2VuZGlmCiAgICAgdmlydHVhbCB+SFRNTEJ1dHRv
bkVsZW1lbnQoKTsKIAogICAgIHZpcnR1YWwgY29uc3QgQXRvbWljU3RyaW5nJiB0eXBlKCkgY29u
c3Q7CkluZGV4OiBodG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBodG1sL0hU
TUxJbWFnZUVsZW1lbnQuaAkocmV2aXNpb24gMzgzMTgpCisrKyBodG1sL0hUTUxJbWFnZUVsZW1l
bnQuaAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDggQEAKICAqIENvcHlyaWdodCAoQykgMTk5
OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFudHRp
IEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAg
aHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTExNiw2
ICsxMTgsMTAgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIGdldFN1YnJlc291cmNlQXR0
cmlidXRlU3RyaW5ncyhWZWN0b3I8U3RyaW5nPiYpIGNvbnN0OwogCisjaWYgRU5BQkxFKFdNTCkK
KyAgICB2aXJ0dWFsIGJvb2wgaXNXTUxJbWFnZUVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBmYWxz
ZTsgfQorICAgIEhUTUxJbWFnZUxvYWRlciYgaW1hZ2VMb2FkZXIoKSB7IHJldHVybiBtX2ltYWdl
TG9hZGVyOyB9CisjZW5kaWYKIHByaXZhdGU6CiAgICAgSFRNTEltYWdlTG9hZGVyIG1faW1hZ2VM
b2FkZXI7CiAgICAgU3RyaW5nIHVzZW1hcDsKSW5kZXg6IGh0bWwvSFRNTEltYWdlTG9hZGVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBodG1sL0hUTUxJbWFnZUxvYWRlci5jcHAJKHJldmlzaW9uIDM4MzE4
KQorKysgaHRtbC9IVE1MSW1hZ2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIs
OCBAQAogICogQ29weXJpZ2h0IChDKSAxOTk5IExhcnMgS25vbGwgKGtub2xsQGtkZS5vcmcpCiAg
KiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAg
KiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjgsNiArMzAsMTEgQEAKICNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiSFRNTE9i
amVjdEVsZW1lbnQuaCIKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTEltYWdlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjZW5kaWYKKyNpbmNsdWRlICJJbWFnZS5oIgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU4LDYgKzY1LDExIEBAIHZvaWQgSFRNTEltYWdl
TG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWMKICAgICBFbGVtZW50KiBlbGVtID0gZWxlbWVudCgp
OwogICAgIEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChpbWFnZSk7CiAKKyNpZiBFTkFCTEUo
V01MKQorICAgIGlmKGltYWdlLT5lcnJvck9jY3VycmVkKCkgJiYgZWxlbS0+aGFzVGFnTmFtZShI
VE1MTmFtZXM6OmltZ1RhZykgJiYgc3RhdGljX2Nhc3Q8SFRNTEltYWdlRWxlbWVudCo+KGVsZW0p
LT5pc1dNTEltYWdlRWxlbWVudCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxJbWFnZUVsZW1l
bnQqPihlbGVtKS0+cmVsb2FkSW1hZ2VCeVNyY0F0dHIoKTsKKyNlbmRpZgorCiAgICAgaWYgKGlt
YWdlLT5lcnJvck9jY3VycmVkKCkgJiYgZWxlbS0+aGFzVGFnTmFtZShIVE1MTmFtZXM6Om9iamVj
dFRhZykpCiAgICAgICAgIHN0YXRpY19jYXN0PEhUTUxPYmplY3RFbGVtZW50Kj4oZWxlbSktPnJl
bmRlckZhbGxiYWNrQ29udGVudCgpOwogfQpJbmRleDogaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGh0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMzgzMTgp
CisrKyBodG1sL0hUTUxTZWxlY3RFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw4
IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5v
cmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
ICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNo
bW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTYsOSArNTgsOSBAQCBwdWJsaWM6
CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CiAgICAgCiAgICAgdmlydHVh
bCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0
cnVlLCBib29sIGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsKIAogICAgIGludCBzZWxlY3RlZEluZGV4
KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNl
bGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hhbmdlID0gZmFsc2UpOwogICAgIGludCBsYXN0U2Vs
ZWN0ZWRMaXN0SW5kZXgoKSBjb25zdDsKIAogICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJs
ZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KQEAgLTEzNywxOSArMTM5LDMyIEBAIHB1YmxpYzoK
ICAgICBpbnQgYWN0aXZlU2VsZWN0aW9uRW5kTGlzdEluZGV4KCkgY29uc3Q7CiAgICAgCiAgICAg
dm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOworI2lmIEVOQUJMRShXTUwpCitwcm90ZWN0ZWQ6Cisg
ICAgaW50IGFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9hY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleDsgfQorICAgIGludCBhY3RpdmVTZWxlY3Rpb25FbmRJbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9uRW5kSW5kZXg7IH0KKyAgICBpbnQg
YWN0aXZlU2VsZWN0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNlbGVjdGlvblN0
YXRlOyB9CisgICAgdm9pZCBzZXRBY3RpdmVTZWxlY3Rpb25TdGF0ZShib29sIGFjdGl2ZSkgeyBt
X2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gYWN0aXZlOyB9CisjZW5kaWYKIAorI2lmIEVOQUJMRShX
TUwpCitwcm90ZWN0ZWQ6CisjZWxzZQogcHJpdmF0ZToKLSAgICB2b2lkIHJlY2FsY0xpc3RJdGVt
cyhib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdm9pZCBjaGVj
a0xpc3RJdGVtcygpIGNvbnN0OwotCisjZW5kaWYKICAgICB2b2lkIGRlc2VsZWN0SXRlbXMoSFRN
TE9wdGlvbkVsZW1lbnQqIGV4Y2x1ZGVFbGVtZW50ID0gMCk7CiAgICAgYm9vbCB1c2VzTWVudUxp
c3QoKSBjb25zdCB7IHJldHVybiAhbV9tdWx0aXBsZSAmJiBtX3NpemUgPD0gMTsgfQorICAgIHZv
aWQgdHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50Kik7CisgICAgdm9pZCBzYXZlTGFzdFNlbGVj
dGlvbigpOwogICAgIGludCBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleChpbnQgc3RhcnRJbmRleCk7
CiAgICAgaW50IHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChpbnQgc3RhcnRJbmRleCk7CisK
K3ByaXZhdGU6CisgICAgdm9pZCByZWNhbGNMaXN0SXRlbXMoYm9vbCB1cGRhdGVTZWxlY3RlZFN0
YXRlcyA9IHRydWUpIGNvbnN0OworICAgIHZvaWQgY2hlY2tMaXN0SXRlbXMoKSBjb25zdDsKKwog
ICAgIHZvaWQgbWVudUxpc3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CiAgICAgdm9pZCBs
aXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOwotICAgIHZvaWQgdHlwZUFoZWFkRmlu
ZChLZXlib2FyZEV2ZW50Kik7Ci0gICAgdm9pZCBzYXZlTGFzdFNlbGVjdGlvbigpOwogCiAgICAg
bXV0YWJsZSBWZWN0b3I8SFRNTEVsZW1lbnQqPiBtX2xpc3RJdGVtczsKICAgICBWZWN0b3I8Ym9v
bD4gbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNlbGVjdGlvbjsKSW5kZXg6IGxvYWRlci9GcmFtZUxv
YWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNpb24g
MzgzMTgpCisrKyBsb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYg
KzEsOCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9y
YXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
VG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNjcsNiArMjY5LDkgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBm
cmFtZSwgRgogICAgICwgbV9maW5pc2hlZFBhcnNpbmdEdXJpbmdMb3dCYW5kd2lkdGhEaXNwbGF5
KGZhbHNlKQogICAgICwgbV9uZWVkVG9Td2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5KGZhbHNl
KQogI2VuZGlmIAorI2lmIEVOQUJMRShXTUwpCisgICAgLCBtX2ZvcmNlUmVsb2FkV21sRGVjayhm
YWxzZSkKKyNlbmRpZgogewogfQogCkBAIC0xMDAwLDcgKzEwMDUsNyBAQCB2b2lkIEZyYW1lTG9h
ZGVyOjp3cml0ZShjb25zdCBjaGFyKiBzdHIsCiAgICAgICAgICAgICB0b2tlbml6ZXItPndyaXRl
UmF3RGF0YShzdHIsIGxlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBp
ZiAoIW1fZGVjb2RlcikgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5z
ZXR0aW5ncygpOwogICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVh
dGUobV9yZXNwb25zZU1JTUVUeXBlLCBzZXR0aW5ncyA/IHNldHRpbmdzLT5kZWZhdWx0VGV4dEVu
Y29kaW5nTmFtZSgpIDogU3RyaW5nKCkpOwpAQCAtMjg3Nyw4ICsyODgyLDIxIEBAIHZvaWQgRnJh
bWVMb2FkZXI6OmNsaWVudFJlZGlyZWN0ZWQoY29uc3QKICAgICBtX3F1aWNrUmVkaXJlY3RDb21p
bmcgPSBsb2NrSGlzdG9yeSAmJiBtX2RvY3VtZW50TG9hZGVyICYmICFpc0phdmFTY3JpcHRGb3Jt
QWN0aW9uOwogfQogCisjaWYgRU5BQkxFKFdNTCkKK3ZvaWQgRnJhbWVMb2FkZXI6OnNldEZvcmNl
UmVsb2FkV21sRGVjayhib29sIHJlbG9hZCkKK3sKKyAgICBtX2ZvcmNlUmVsb2FkV21sRGVjayA9
IHJlbG9hZDsKK30KKyNlbmRpZgorCiBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRSZWxvYWQoY29u
c3QgS1VSTCYgY3VycmVudFVSTCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25VUkwpCiB7CisjaWYg
RU5BQkxFKFdNTCkKKyAgICAvLyBBcyBmb3IgV01MIGRlY2ssIHNvbWV0aW1lcyBpdCdzIHN1cHBv
c2VkIHRvIGJlIHJlbG9hZGVkIGV2ZW4gaWYgdGhlIHNhbWUgVVJMIHdpdGggZnJhZ21lbnQKKyAg
ICBpZiAobV9mb3JjZVJlbG9hZFdtbERlY2spCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlm
CisKICAgICAvLyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJ1bGU6ICJEb24ndCByZWxv
YWQgaWYgbmF2aWdhdGluZyBieSBmcmFnbWVudCB3aXRoaW4KICAgICAvLyB0aGUgc2FtZSBVUkws
IGJ1dCBkbyByZWxvYWQgaWYgZ29pbmcgdG8gYSBuZXcgVVJMIG9yIHRvIHRoZSBzYW1lIFVSTCB3
aXRoIG5vCiAgICAgLy8gZnJhZ21lbnQgaWRlbnRpZmllciBhdCBhbGwuIgpAQCAtNDI5Miw3ICs0
MzEwLDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiAKICAgICAv
LyBjaGVjayBmb3IgYWxsIHRoYXQgYXMgYW4gYWRkaXRpb25hbCBvcHRpbWl6YXRpb24uCiAgICAg
Ly8gV2UgYWxzbyBkbyBub3QgZG8gYW5jaG9yLXN0eWxlIG5hdmlnYXRpb24gaWYgd2UncmUgcG9z
dGluZyBhIGZvcm0uCiAgICAgCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAoIWZvcm1EYXRhICYm
IHVybHNNYXRjaEl0ZW0oaXRlbSkgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmlzV01MRG9jdW1l
bnQoKSkgeworI2Vsc2UKICAgICBpZiAoIWZvcm1EYXRhICYmIHVybHNNYXRjaEl0ZW0oaXRlbSkp
IHsKKyNlbmRpZgogICAgICAgICAvLyBNdXN0IGRvIHRoaXMgbWFpbnRlbmFuY2UgaGVyZSwgc2lu
Y2Ugd2UgZG9uJ3QgZ28gdGhyb3VnaCBhIHJlYWwgcGFnZSByZWxvYWQKICAgICAgICAgc2F2ZVNj
cm9sbFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgp
KTsKIApJbmRleDogbG9hZGVyL0ZyYW1lTG9hZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gbG9hZGVyL0Zy
YW1lTG9hZGVyLmgJKHJldmlzaW9uIDM4MzE4KQorKysgbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAg
ICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI2MSw2ICsyNjMsOSBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHZv
aWQgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVkKGJvb2wgY2FuY2VsV2l0aExvYWRJ
blByb2dyZXNzKTsKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdGVkKGNvbnN0IEtVUkwmLCBk
b3VibGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBsb2NrSGlzdG9yeSwgYm9vbCBpc0ph
dmFTY3JpcHRGb3JtQWN0aW9uKTsKICAgICAgICAgYm9vbCBzaG91bGRSZWxvYWQoY29uc3QgS1VS
TCYgY3VycmVudFVSTCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25VUkwpOworI2lmIEVOQUJMRShX
TUwpCisgICAgICAgIHZvaWQgc2V0Rm9yY2VSZWxvYWRXbWxEZWNrKGJvb2wpOworI2VuZGlmCiAK
ICAgICAgICAgYm9vbCBpc1F1aWNrUmVkaXJlY3RDb21pbmcoKSBjb25zdDsKIApAQCAtNjgyLDYg
KzY4NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIFN0cmluZyBtX3BlbmRpbmdT
b3VyY2VJbkxvd0JhbmR3aWR0aERpc3BsYXk7ICAgICAgICAKICAgICAgICAgSGFzaFNldDxDYWNo
ZWRSZXNvdXJjZSo+IG1fZXh0ZXJuYWxSZXF1ZXN0c0luTG93QmFuZHdpZHRoRGlzcGxheTsKICNl
bmRpZgorCisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgYm9vbCBtX2ZvcmNlUmVsb2FkV21sRGVj
azsKKyNlbmRpZgogICAgIH07CiAKIH0KSW5kZXg6IGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lv
biAzODMxOCkKKysrIGxvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRl
ciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTQzLDYgKzQ1LDEwIEBACiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUg
IlJlc291cmNlSGFuZGxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpZiBFTkFCTEUoV0JY
TUwpCisjaW5jbHVkZSAid2J4bWwuaCIKKyNpbmNsdWRlICJ3YnhtbF9jb252LmgiCisjZW5kaWYK
IAogLy8gRklYTUU6IE1vcmUgdGhhdCBpcyBpbiBjb21tb24gd2l0aCBTdWJyZXNvdXJjZUxvYWRl
ciBzaG91bGQgbW92ZSB1cCBpbnRvIFJlc291cmNlTG9hZGVyLgogCkBAIC0xNDEsNiArMTQ3LDMw
IEBAIGJvb2wgTWFpblJlc291cmNlTG9hZGVyOjppc1Bvc3RPclJlZGlyZWMKIAogdm9pZCBNYWlu
UmVzb3VyY2VMb2FkZXI6OmFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgYm9v
bCBhbGxBdE9uY2UpCiB7CisjaWYgRU5BQkxFKFdCWE1MKQorICAgIGlmIChsZW5ndGggJiYgbV9y
ZXNwb25zZS5taW1lVHlwZSgpID09ICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiKSB7CisgICAg
ICAgIFdCX1VUSU5ZKiB3YnhtbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0JfVVRJTlkqPihkYXRhKTsK
KyAgICAgICAgV0JfVUxPTkcgd2J4bWxfbGVuID0gbGVuZ3RoOworICAgICAgICBXQl9VTE9ORyB4
bWxfbGVuID0gMDsKKyAgICAgICAgV0JfVVRJTlkqIHhtbCA9IDA7CisgICAgICAgIFdCWE1MRXJy
b3IgcmV0ID0gV0JYTUxfT0s7IAorICAgICAgICBXQlhNTEdlblhNTFBhcmFtcyBwYXJhbXM7Cisg
CisgICAgICAgIC8vIEluaXQgZGVmYXVsdCBwYXJhbWV0ZXJzCisgICAgICAgIHBhcmFtcy5sYW5n
ID0gV0JYTUxfTEFOR19VTktOT1dOOworICAgICAgICBwYXJhbXMuZ2VuX3R5cGUgPSBXQlhNTF9H
RU5fWE1MX0lOREVOVDsKKyAgICAgICAgcGFyYW1zLmluZGVudCA9IDE7CisgICAgICAgIHBhcmFt
cy5rZWVwX2lnbm9yYWJsZV93cyA9IEZBTFNFOworIAorICAgICAgICByZXQgPSB3YnhtbF9jb252
X3dieG1sMnhtbF93aXRobGVuKHdieG1sLCB3YnhtbF9sZW4sICZ4bWwsICZ4bWxfbGVuLCAmcGFy
YW1zKTsKKyAgICAgICAgaWYgKHJldCAhPSBXQlhNTF9PSykKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oeG1sKTsKKyAgICAgICAg
bGVuZ3RoID0geG1sX2xlbjsKKyAgICB9CisjZW5kaWYKKwogICAgIFJlc291cmNlTG9hZGVyOjph
ZGREYXRhKGRhdGEsIGxlbmd0aCwgYWxsQXRPbmNlKTsKICAgICBmcmFtZUxvYWRlcigpLT5yZWNl
aXZlZERhdGEoZGF0YSwgbGVuZ3RoKTsKIH0KSW5kZXg6IHBhZ2UvUGFnZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGFnZS9QYWdlLmNwcAkocmV2aXNpb24gMzgzMTgpCisrKyBwYWdlL1BhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC01NCw2ICs1Niw5IEBACiAjaW5jbHVkZSA8cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRl
IDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4K
KyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2VuZGlmCiAKICNp
ZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVkZSAiTG9jYWxTdG9yYWdlLmgiCkBAIC0xMjcs
NiArMTMyLDkgQEAgUGFnZTo6UGFnZShDaHJvbWVDbGllbnQqIGNocm9tZUNsaWVudCwgQwogICAg
ICwgbV9wZW5kaW5nQmVmb3JlVW5sb2FkRXZlbnRDb3VudCgwKQogICAgICwgbV9jdXN0b21IVE1M
VG9rZW5pemVyVGltZURlbGF5KC0xKQogICAgICwgbV9jdXN0b21IVE1MVG9rZW5pemVyQ2h1bmtT
aXplKC0xKQorI2lmIEVOQUJMRShXTUwpCisgICAgLCBtX3dtbFBhZ2VTdGF0ZSgwKQorI2VuZGlm
CiB7CiAgICAgaWYgKCFhbGxQYWdlcykgewogICAgICAgICBhbGxQYWdlcyA9IG5ldyBIYXNoU2V0
PFBhZ2UqPjsKQEAgLTU3Nyw2ICs1ODUsMTggQEAgdm9pZCBQYWdlOjpjaGFuZ2VQZW5kaW5nQmVm
b3JlVW5sb2FkRXZlbgogICAgIHJldHVybjsgCiB9CiAKKyNpZiBFTkFCTEUoV01MKQordm9pZCBQ
YWdlOjpzZXRXTUxQYWdlU3RhdGUoUmVmUHRyPFdNTFBhZ2VTdGF0ZT4gcGFnZVN0YXRlKSAKK3sg
CisgICAgbV93bWxQYWdlU3RhdGUgPSBwYWdlU3RhdGU7IAorfQorCitXTUxQYWdlU3RhdGUqIFBh
Z2U6OndtbFBhZ2VTdGF0ZSgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gbV93bWxQYWdlU3RhdGUu
Z2V0KCk7IAorfQorI2VuZGlmCisKIHZvaWQgUGFnZTo6c2V0Q3VzdG9tSFRNTFRva2VuaXplclRp
bWVEZWxheShkb3VibGUgY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSkKIHsKICAgICBpZiAo
Y3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSA8IDApIHsKSW5kZXg6IHBhZ2UvUGFnZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBhZ2UvUGFnZS5oCShyZXZpc2lvbiAzODMxOCkKKysrIHBhZ2UvUGFnZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAw
NiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAg
ICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBA
IC02Myw2ICs2NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTZXNzaW9uU3Rv
cmFnZTsKICNlbmRpZgogICAgIGNsYXNzIFNldHRpbmdzOworI2lmIEVOQUJMRShXTUwpCisgICAg
Y2xhc3MgV01MUGFnZVN0YXRlOworI2VuZGlmCiAKICAgICBlbnVtIFRleHRDYXNlU2Vuc2l0aXZp
dHkgeyBUZXh0Q2FzZVNlbnNpdGl2ZSwgVGV4dENhc2VJbnNlbnNpdGl2ZSB9OwogICAgIGVudW0g
RmluZERpcmVjdGlvbiB7IEZpbmREaXJlY3Rpb25Gb3J3YXJkLCBGaW5kRGlyZWN0aW9uQmFja3dh
cmQgfTsKQEAgLTE3Myw2ICsxNzgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNldFNlc3Npb25TdG9yYWdlKFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+KTsKICNlbmRp
ZgogCisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgdm9pZCBzZXRXTUxQYWdlU3RhdGUoUmVmUHRy
PFdNTFBhZ2VTdGF0ZT4pOworICAgICAgICBXTUxQYWdlU3RhdGUqIHdtbFBhZ2VTdGF0ZSgpIGNv
bnN0OworI2VuZGlmCiAgICAgICAgIHZvaWQgc2V0Q3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxh
eShkb3VibGUpOwogICAgICAgICBib29sIGhhc0N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXko
KSBjb25zdCB7IHJldHVybiBtX2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgIT0gLTE7IH0K
ICAgICAgICAgZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25zdCB7IEFT
U0VSVChtX2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgIT0gLTEpOyByZXR1cm4gbV9jdXN0
b21IVE1MVG9rZW5pemVyVGltZURlbGF5OyB9CkBAIC0yMzQsNiArMjQzLDEwIEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICNpZiBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShXWCkgJiYgZGVmaW5l
ZChfX1dYTVNXX18pKSB8fCAoUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUV9XU19XSU4pKQogICAg
ICAgICBzdGF0aWMgSElOU1RBTkNFIHNfaW5zdGFuY2VIYW5kbGU7CiAjZW5kaWYKKworI2lmIEVO
QUJMRShXTUwpCisgICAgICAgIFJlZlB0cjxXTUxQYWdlU3RhdGU+IG1fd21sUGFnZVN0YXRlOwor
I2VuZGlmCiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogcGxhdGZvcm0v
TUlNRVR5cGVSZWdpc3RyeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vTUlNRVR5cGVSZWdp
c3RyeS5jcHAJKHJldmlzaW9uIDM4MzE4KQorKysgcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAy
MDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0xODEsNiArMTgzLDEyIEBAIHN0YXRpYyB2b2lkIGluaXRpYWxpemVT
dXBwb3J0ZWRKYXZhU2NyaXAKIHN0YXRpYyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWROb25JbWFn
ZU1pbWVUeXBlcygpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIqIHR5cGVzW10gPSB7CisjaWYg
RU5BQkxFKFdNTCkKKyAgICAgICAgInRleHQvdm5kLndhcC53bWwiLAorI2VuZGlmCisjaWYgRU5B
QkxFKFdCWE1MKQorICAgICAgICAiYXBwbGljYXRpb24vdm5kLndhcC53bWxjIiwKKyNlbmRpZgog
ICAgICAgICAidGV4dC9odG1sIiwKICAgICAgICAgInRleHQveG1sIiwKICAgICAgICAgInRleHQv
eHNsIiwKSW5kZXg6IHBsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gcGxhdGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAkocmV2aXNpb24gMzgzMTgp
CisrKyBwbGF0Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2Rl
Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTYyLDYgKzYzLDEyIEBAIHN0YXRpYyBjb25zdCBFeHRlbnNpb25N
YXAgZXh0ZW5zaW9uTWFwIFsKICAgICB7ICJ4cG0iLCAiaW1hZ2UveC14cG0iIH0sCiAgICAgeyAi
eHNsIiwgInRleHQveHNsIiB9LAogICAgIHsgInhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3ht
bCIgfSwKKyNpZiBFTkFCTEUoV01MKQorICAgIHsgIndtbCIsICJ0ZXh0L3ZuZC53YXAud21sIiB9
LAorI2VuZGlmCisjaWYgRU5BQkxFKFdCWE1MKQorICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24v
dm5kLndhcC53bWxjIiB9LAorI2VuZGlmCiAgICAgeyAwLCAwIH0KIH07CiAKSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAkocmV2aXNpb24gMzgzMTgpCisrKyByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01LDYgKzUsOCBAQAogICogICAgICAgICAgIChDKSAyMDA2IEFsbGFuIFNh
bmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqICAgICAgICAgICAoQykgMjAwNiBT
YW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdodCAoQykgMjAw
MywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoK
ICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCkBAIC0zMzksNyArMzQxLDExIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBh
aW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgICAgIGludCB1c2FibGVXaWR0aCA9IGNXaWR0
aCAtIDI7CiAgICAgICAgICAgICBpbnQgdXNhYmxlSGVpZ2h0ID0gY0hlaWdodCAtIDI7CiAKKyNp
ZiBFTkFCTEUoV01MKQorICAgICAgICAgICAgaWYgKCFkb2N1bWVudCgpLT5pc1dNTERvY3VtZW50
KCkgJiYgZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZSgpLT5pc051bGwoKSAmJiAodXNhYmxlV2lk
dGggPj0gaW1hZ2UoKS0+d2lkdGgoKSkgJiYgKHVzYWJsZUhlaWdodCA+PSBpbWFnZSgpLT5oZWln
aHQoKSkpIHsKKyNlbHNlCiAgICAgICAgICAgICBpZiAoZXJyb3JPY2N1cnJlZCgpICYmICFpbWFn
ZSgpLT5pc051bGwoKSAmJiAodXNhYmxlV2lkdGggPj0gaW1hZ2UoKS0+d2lkdGgoKSkgJiYgKHVz
YWJsZUhlaWdodCA+PSBpbWFnZSgpLT5oZWlnaHQoKSkpIHsKKyNlbmRpZgogICAgICAgICAgICAg
ICAgIC8vIENlbnRlciB0aGUgZXJyb3IgaW1hZ2UsIGFjY291bnRpbmcgZm9yIGJvcmRlciBhbmQg
cGFkZGluZy4KICAgICAgICAgICAgICAgICBpbnQgY2VudGVyWCA9ICh1c2FibGVXaWR0aCAtIGlt
YWdlKCktPndpZHRoKCkpIC8gMjsKICAgICAgICAgICAgICAgICBpZiAoY2VudGVyWCA8IDApCkBA
IC0zNzIsNiArMzc4LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJ
bmYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHRleHRSdW4sIElu
dFBvaW50KGF4LCBheSArIGFzY2VudCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodXNh
YmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGNIZWlnaHQgPj0gZm9udC5oZWlnaHQoKSkKICAgICAg
ICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQoYXgsIGF5
ICsgYXNjZW50KSk7CisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChk
b2N1bWVudCgpLT5pc1dNTERvY3VtZW50KCkgJiYgdXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoIC0g
MiAmJiBjSGVpZ2h0ID49IGZvbnQuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRl
eHQtPmRyYXdUZXh0KHRleHRSdW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCkpOworI2VuZGlm
CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGhhc0ltYWdlKCkgJiYg
Y1dpZHRoID4gMCAmJiBjSGVpZ2h0ID4gMCkgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25165</attachid>
            <date>2008-11-14 02:21:59 -0800</date>
            <delta_ts>2008-12-10 16:01:50 -0800</delta_ts>
            <desc>WebCore touched by WML(v3)</desc>
            <filename>webcore_changes_for_wml_38361.patch</filename>
            <type>text/plain</type>
            <size>78427</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDM4MzYxKQorKysgV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAk
KFdlYkNvcmUpL3htbCBcCisgICAgJChXZWJDb3JlKS93bWwgXAogICAgICQoV2ViQ29yZSkvc3Zn
IFwKICMKIApAQCAtMzkxLDYgKzM5Miw3IEBAIGFsbCA6IFwKICAgICBEb2NUeXBlU3RyaW5ncy5j
cHAgXAogICAgIEhUTUxFbnRpdHlOYW1lcy5jIFwKICAgICBIVE1MTmFtZXMuY3BwIFwKKyAgICBX
TUxOYW1lcy5jcHAgXAogICAgIEpTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCBcCiAgICAg
U1ZHRWxlbWVudEZhY3RvcnkuY3BwIFwKICAgICBTVkdOYW1lcy5jcHAgXApAQCAtNTA2LDcgKzUw
OCw3IEBAIFhQYXRoR3JhbW1hci5jcHAgOiB4bWwvWFBhdGhHcmFtbWFyLnkgJCgKIAogIyB1c2Vy
IGFnZW50IHN0eWxlIHNoZWV0cwogCi1VU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9ICQoV2ViQ29y
ZSkvY3NzL2h0bWw0LmNzcyAkKFdlYkNvcmUpL2Nzcy9xdWlya3MuY3NzICQoV2ViQ29yZSkvY3Nz
L3ZpZXctc291cmNlLmNzcyAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIAorVVNFUl9BR0VOVF9TVFlM
RV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtz
LmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3MgJChXZWJDb3JlKS9jc3Mvc3ZnLmNz
cyAkKFdlYkNvcmUpL2Nzcy93bWwuY3NzCiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIDogY3NzL21h
a2UtY3NzLWZpbGUtYXJyYXlzLnBsICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpCiAJcGVybCAk
PCAkQCBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVF
VFMpCiAKQEAgLTU0Miw2ICs1NDQsOSBAQCBlbmRpZgogWE1MTmFtZXMuY3BwIDogZG9tL21ha2Vf
bmFtZXMucGwgeG1sL3htbGF0dHJzLmluCiAJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3Nj
cmlwdHMgJDwgLS1hdHRycyAkKFdlYkNvcmUpL3htbC94bWxhdHRycy5pbgogCitXTUxOYW1lcy5j
cHAgOiBkb20vbWFrZV9uYW1lcy5wbCB3bWwvV01MVGFnTmFtZXMuaW4gd21sL1dNTEF0dHJpYnV0
ZU5hbWVzLmluCisJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS10YWdz
ICQoV2ViQ29yZSkvd21sL1dNTFRhZ05hbWVzLmluIC0tYXR0cnMgJChXZWJDb3JlKS93bWwvV01M
QXR0cmlidXRlTmFtZXMuaW4gLS1vdXRwdXQgLgorCiAjIC0tLS0tLS0tCiAKIGlmZXEgKCQoZmlu
ZHN0cmluZyBFTkFCTEVfU1ZHLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkcpCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHJldmlzaW9uIDM4MzYxKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtNjUsNiArNjUsNyBAQCB3aW4zMi1nKysgewogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9J
Q09OREFUQUJBU0U9Lik6IERFRklORVMgKz0gRU5BQkxFX0lDT05EQVRBQkFTRT0xCiAhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YUEFUSD0xCiAj
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMgKz0gRU5BQkxFX1hCTD0x
CishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dNTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV01M
PTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPS4pOiBERUZJTkVTICs9IEVOQUJMRV9T
Vkc9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0ZPTlRTPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9TVkdfRk9OVFM9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkdfRklMVEVS
Uz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZJTFRFUlM9MQpAQCAtMTYwLDYgKzE2MSw3IEBA
IElOQ0xVREVQQVRIICs9ICAkJFBXRCBcCiAgICAgICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9y
IFwKICAgICAgICAgICAgICAgICAkJFBXRC94bWwgXAogICAgICAgICAgICAgICAgICQkUFdEL2h0
bWwgXAorICAgICAgICAgICAgICAgICQkUFdEL3dtbCBcCiAgICAgICAgICAgICAgICAgJCRQV0Qv
YmluZGluZ3MvanMgXAogICAgICAgICAgICAgICAgICQkUFdEL3N2ZyBcCiAgICAgICAgICAgICAg
ICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgXApAQCAtMTMzMCw2ICsxMzMyLDUyIEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19K
QVZBU0NSSVBUICs9IEVOQUJMRV9YQkw9MQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
V01MPTEpIHsKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgd21sL1dNTERvY3VtZW50LmNwcCBc
CisgICAgICAgIHdtbC9XTUxUb2tlbml6ZXIuY3BwIFwKKyAgICAgICAgd21sL1dNTEVsZW1lbnQu
Y3BwIFwKKyAgICAgICAgd21sL1dNTENhcmRFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxB
RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MQW5jaG9yRWxlbWVudC5jcHAgXAorICAgICAg
ICB3bWwvV01MVGFza0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFByZXZFbGVtZW50LmNw
cCBcCisgICAgICAgIHdtbC9XTUxHb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFJlZnJl
c2hFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBcCisg
ICAgICAgIHdtbC9XTUxTZXR2YXJFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxFbGVtZW50
RmFjdG9yeS5jcHAgXAorICAgICAgICB3bWwvV01MUGFnZVN0YXRlLmNwcCBcCisgICAgICAgIHdt
bC9XTUxEb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFRleHQuY3BwIFwKKyAgICAgICAg
d21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyLmNwcCBcCisgICAgICAgIHdtbC9XTUxUaW1lckVsZW1lbnQuY3BwIFwKKyAgICAg
ICAgd21sL1dNTEhlbHBlci5jcHAgXAorICAgICAgICB3bWwvV01MQWNjZXNzRWxlbWVudC5jcHAg
XAorICAgICAgICB3bWwvV01MU2VsZWN0RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MT3B0
aW9uRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW5wdXRFbGVtZW50LmNwcCBcCisgICAg
ICAgIHdtbC9XTUxUYWJsZUVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTEltYWdlRWxlbWVu
dC5jcHAgXAorICAgICAgICB3bWwvV01MUEVsZW1lbnQuY3BwCisKKyAgICBGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfV01MPTEKKyAgICBERUZJTkVTICs9IEVOQUJMRV9XQlhN
TD0xCisgICAgTElCUyArPSAtbHdieG1sMiAKKworICAgIFdNTF9OQU1FUyA9ICQkUFdEL3dtbC9X
TUxUYWdOYW1lcy5pbgorCisgICAgd21sbmFtZXNfYS5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9XTUxOYW1lcy5jcHAKKyAgICB3bWxuYW1lc19hLmNvbW1hbmRzID0gcGVybCAtSSQk
UFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS10YWdzICQkUFdE
L3dtbC9XTUxUYWdOYW1lcy5pbiAtLWF0dHJzICQkUFdEL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5p
biAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAtLW91dHB1dCAkJEdFTkVSQVRF
RF9TT1VSQ0VTX0RJUgorICAgIHdtbG5hbWVzX2EuaW5wdXQgPSBXTUxfTkFNRVMKKyAgICB3bWxu
YW1lc19hLmRlcGVuZGVuY3lfdHlwZSA9IFRZUEVfQworICAgIHdtbG5hbWVzX2EuQ09ORklHID0g
dGFyZ2V0X3ByZWRlcHMKKyAgICB3bWxuYW1lc19hLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9T
T1VSQ0VTCisgICAgd21sbmFtZXNfYS5jbGVhbiA9ICR7UU1BS0VfRklMRV9PVVR9ICR7UU1BS0Vf
VkFSX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUl9TTEFTSH1XTUxOYW1lcy5oCisgICAgYWRkRXh0cmFD
b21waWxlcih3bWxuYW1lc19hKQorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEp
IHsKICAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfU1ZHPTEKIApAQCAt
MTcxNCw2ICsxNzYyLDggQEAgU09VUkNFUyArPSBcCiAgICAgICAgIHN2Z2VsZW1lbnR3cmFwcGVy
X2hlYWRlci52YXJpYWJsZV9vdXQgPSBHRU5FUkFURURfRklMRVMKICAgICAgICAgYWRkRXh0cmFD
b21waWxlcihzdmdlbGVtZW50d3JhcHBlcl9oZWFkZXIpCiAKKworCiAgICAgICAgICMgR0VORVJB
VE9SIDUtRDoKICAgICAgICAgeGxpbmtuYW1lcy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VT
X0RJUi9YTGlua05hbWVzLmNwcAogICAgICAgICB4bGlua25hbWVzLmNvbW1hbmRzID0gcGVybCAt
SSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS1hdHRycyAk
JFBXRC9zdmcveGxpbmthdHRycy5pbiAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVc
IiAtLW91dHB1dERpciAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUgpAQCAtMTg1NCw3ICsxOTA0LDcg
QEAgYWRkRXh0cmFDb21waWxlcihjb2xvcmRhdGEpCiAKICMgR0VORVJBVE9SIDk6CiBzdHlsZXNo
ZWV0cy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwCi1zdHlsZXNoZWV0cy5jb21tYW5kcyA9IHBlcmwgJCRQV0QvY3NzL21ha2UtY3Nz
LWZpbGUtYXJyYXlzLnBsIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiICQkR0VO
RVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzLmggJCRHRU5FUkFURURfU09V
UkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAkJFBXRC9jc3MvaHRtbDQuY3Nz
ICQkUFdEL2Nzcy9xdWlya3MuY3NzICQkUFdEL2Nzcy9zdmcuY3NzICQkUFdEL2Nzcy92aWV3LXNv
dXJjZS5jc3MKK3N0eWxlc2hlZXRzLmNvbW1hbmRzID0gcGVybCAkJFBXRC9jc3MvbWFrZS1jc3Mt
ZmlsZS1hcnJheXMucGwgLS1wcmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJCRHRU5F
UkFURURfU09VUkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHMuaCAkJEdFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQkUFdEL2Nzcy9odG1sNC5jc3Mg
JCRQV0QvY3NzL3F1aXJrcy5jc3MgJCRQV0QvY3NzL3N2Zy5jc3MgJCRQV0QvY3NzL3ZpZXctc291
cmNlLmNzcyAkJFBXRC9jc3Mvd21sLmNzcwogc3R5bGVzaGVldHMuaW5wdXQgPSBTVFlMRVNIRUVU
U19FTUJFRAogc3R5bGVzaGVldHMuQ09ORklHID0gdGFyZ2V0X3ByZWRlcHMKIHN0eWxlc2hlZXRz
LnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9TT1VSQ0VTCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYg
KzUyNyw2NCBAQAogCQk0QjZGQTZGNzBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2RkE2
RjYwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCAqLzsgfTsKIAkJNEI4QUY0
QUEwQjFDRTAyQjAwNjg3NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI4QUY0QTkwQjFDRTAyQjAwNjg3
NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRCQUU5NUIxMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0
b3JEZWxldGVBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCQUU5NUIwMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JEZWxldGVBY3Rpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0QzZCOTk0
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxNjBFNTJFMzczMDA0ODdCQjcg
LyogV01MQWNjZXNzRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTRGMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVu
dC5oICovOyB9OworCQk0QzZCOTk1MDBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MTgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NTEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxOTBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1l
bnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk1MzBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUIwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQzBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmli
dXRlTmFtZXMuaW4gKi87IH07CisJCTRDNkI5OTU1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLzsgfTsKKwkJ
NEM2Qjk5NTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFFMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxCcndDb250ZXh0LmggKi87IH07CisJCTRDNkI5OTU3MEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxDYXJkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkxRjBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuY3Bw
ICovOyB9OworCQk0QzZCOTk1ODBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTIwMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1OTBFNTJF
MzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3Vt
ZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
MjBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NUIwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9F
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1
RDBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyNTBFNTJFMzczMDA0ODdCQjcgLyogV01M
RWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTVFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZC
OTkyNjBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1RjBF
NTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCAqLzsgfTsKKwkJNEM2Qjk5NjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
OTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjIw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdv
RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2MzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovOyB9OworCQk0QzZCOTk2NDBF
NTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyQzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVy
LmggKi87IH07CisJCTRDNkI5OTY1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
MkQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5
OTY2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxJbWFnZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NjcwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkyRjBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNw
cCAqLzsgfTsKKwkJNEM2Qjk5NjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzAw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2OTBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMxMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovOyB9OworCQk0QzZCOTk2QTBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzMjBFNTJFMzczMDA0ODdC
QjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi87IH07CisJCTRDNkI5OTZCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxP
cHRpb25FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTM0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTZEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzNTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2RTBFNTJFMzczMDA0
ODdCQjcgLyogV01MUEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTM2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oICov
OyB9OworCQk0QzZCOTk2RjBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkz
NzBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5jcHAgKi87IH07CisJCTRD
NkI5OTcwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzODBFNTJFMzczMDA0
ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk3MTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QzZCOTkzQTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2
Qjk5NzMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNCMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTc0MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJl
c2hFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxl
Y3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRDNkI5OTNEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5NzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNFMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc3MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxT
ZXR2YXJFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFNldHZhckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTc5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTdBMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
YWJsZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5N0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRh
Z05hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi87IH07CisJCTRD
NkI5OTdDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NDBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3RDBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGFza0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTQ1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5o
ICovOyB9OworCQk0QzZCOTk3RTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk3RjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NzBFNTJFMzczMDA0
ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTgwMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTQ4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5ODEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxUZXh0LmggKi87IH07CisJCTRDNkI5OTgyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
aW1lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgKi87
IH07CisJCTRDNkI5OTgzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTRCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5ODQwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5p
emVyLmNwcCAqLzsgfTsKKwkJNEM2Qjk5ODUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXpl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
NEQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovOyB9OworCQk0Q0Y2RDMwMTBF
NTU2RjRDMDBFRDNGNzQgLyogV01MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNENBM0FCNDkwRTU1NkYyNDAwRTlDMEMwIC8qIFdNTE5hbWVz
LmNwcCAqLzsgfTsKKwkJNENGNkQzMDIwRTU1NkY0RDAwRUQzRjc0IC8qIFdNTE5hbWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Q0EzQUI0ODBFNTU2
RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuaCAqLzsgfTsKIAkJNEUxOTU5MjEwQTM5REFCQTAwMjIw
RkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTFGMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1
cmVOYW1lcy5jcHAgKi87IH07CiAJCTRFMTk1OTIyMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZl
YXR1cmVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEUxOTU5MjAwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi87IH07
CiAJCTRFMTk1OTI5MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTIzMEEzOURBQ0MwMDIy
MEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCAqLzsgfTsKQEAgLTUyOTAsNiArNTM0OCw2NSBAQAogCQk0
QjZGQTZGNjBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hcnRSZXBsYWNlQ0YuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0QjhBRjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJk
QWNjZXNzUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJBRTk1QjAw
QjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFZGl0b3JEZWxldGVBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNEM2Qjk5MTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFjY2Vzc0VsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxNzBFNTJFMzczMDA0
ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV01MQWNjZXNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTkxODBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxBRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
QW5jaG9yRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFC
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTFDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBdHRyaWJ1dGVOYW1lcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV01MQXR0cmlidXRlTmFtZXMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxCcndD
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUUwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTEJyd0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MUYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxDYXJkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQ2FyZEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXTUxEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIy
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV01MRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MRG9FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRG9FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTI1MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5Mjcw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRWxlbWVudEZh
Y3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjkwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEdvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MR29FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV01MR29FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEhlbHBlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTJDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxw
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEhlbHBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyRDBFNTJFMzczMDA0ODdCQjcgLyogV01M
SW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxJbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTky
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5MkYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW5wdXRFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V01MSW5wdXRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMx
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMyMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTkzMzBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT3B0aW9uRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM0MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXTUxPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
NkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MUEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkzNjBFNTJFMzczMDA0ODdCQjcgLyogV01MUEVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0
ZmllbGRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxQb3N0ZmllbGRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBvc3RmaWVsZEVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxQcmV2
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNBMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MUHJldkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5M0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxSZWZyZXNoRWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxSZWZyZXNoRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
UmVmcmVzaEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0Qw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MU2VsZWN0RWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzRjBFNTJFMzczMDA0ODdC
QjcgLyogV01MU2V0dmFyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MU2V0dmFyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxTZXR2YXJFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJs
ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRh
YmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQyMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdNTFRhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFdNTFRhZ05hbWVzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTk0NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDUwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhc2tFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUYXNr
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0NjBFNTJFMzcz
MDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTk0NzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDgwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdNTFRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0OTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV01MVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0QTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTk0QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
VG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
QTNBQjQ4MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV01MTmFtZXMuaDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OworCQk0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdNTE5hbWVzLmNwcDsgcGF0aCA9IC4uL1dl
YktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTRDREU1NEVDMEU1NTc5NzgwMDg5RTI2QyAvKiB3
bWwuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB3bWwuY3NzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0RTE5NTkxRjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFt
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRmVhdHVy
ZU5hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjAwQTM5REFC
QTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUZlYXR1cmVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RTE5NTkyMzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02NjA3LDcgKzY3MjQsNyBAQAogCQk5M0VFQzFGNzA5QzI4Nzc3
MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2hlZWxF
dmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjZFMDlDMzIxODAw
MEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbnZhc1BhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzU3R5bGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJOTNGMTlCMTkwODI0
NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gSW5m
by5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUuZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMxQTA1NThDQzVDMDA4
MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliaWN1
Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7IHNvdXJjZVRyZWUg
PSAiPGFic29sdXRlPiI7IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFCOCAvKiBDb2RlR2Vu
ZXJhdG9yLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0
b3IucG07IHBhdGggPSBzY3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04OTk0LDYgKzkxMTEsNyBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFD
MDcgLyogV2ViS2l0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk0QzZCOTkxNTBFNTJFMzczMDA0ODdCQjcgLyogd21sICovLAogCQkJCTY1Qzk3QUYyMDhF
QTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEz
N0YgLyogV2ViQ29yZVByZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAv
KiBEZXJpdmVkU291cmNlcy5tYWtlICovLApAQCAtOTM2Miw2ICs5NDgwLDY5IEBACiAJCQl0YWJX
aWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTRDNkI5OTE1MEU1MkUzNzMwMDQ4
N0JCNyAvKiB3bWwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTRDNkI5OTE2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmNwcCAqLywK
KwkJCQk0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovLAor
CQkJCTRDNkI5OTE4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5
OTFCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluICovLAorCQkJCTRDNkI5
OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLywKKwkJCQk0QzZCOTkx
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQnJ3Q29udGV4dC5oICovLAorCQkJCTRDNkI5OTFGMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MjAwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjEwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyMjBFNTJFMzczMDA0
ODdCQjcgLyogV01MRG9jdW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcg
LyogV01MRG9FbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyNDBFNTJFMzczMDA0ODdCQjcgLyog
V01MRG9FbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVs
ZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTI2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
LmggKi8sCisJCQkJNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5
LmNwcCAqLywKKwkJCQk0QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCAqLywKKwkJCQk0QzZCOTkyOTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNw
cCAqLywKKwkJCQk0QzZCOTkyQTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmggKi8s
CisJCQkJNEM2Qjk5MkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5jcHAgKi8sCisJCQkJ
NEM2Qjk5MkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5oICovLAorCQkJCTRDNkI5OTJE
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTJF
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyRjBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzMDBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi8sCisJCQkJNEM2
Qjk5MzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oICovLAor
CQkJCTRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCAqLywK
KwkJCQk0QzZCOTkzNDBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5oICovLAor
CQkJCTRDNkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTM4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggKi8sCisJCQkJ
NEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTkzQTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTkzQjBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTNEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTk0MDBFNTJFMzczMDA0ODdCQjcgLyogV01MU2V0dmFyRWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8sCisJCQkJNEM2Qjk5NDQw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhc2tFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NTBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0NjBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NzBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5NDgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwICovLAorCQkJCTRDNkI5OTQ5MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZXh0LmggKi8sCisJCQkJNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRpbWVyRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5NEIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRpbWVyRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTRDMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUb2tlbml6ZXIuY3BwICovLAorCQkJCTRDNkI5OTREMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
b2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gd21sOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NDg2LDYgKzk2
NjcsOCBAQAogCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0Q0EzQUI0ODBF
NTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuaCAqLywKKwkJCQk0Q0EzQUI0OTBFNTU2RjI0MDBF
OUMwQzAgLyogV01MTmFtZXMuY3BwICovLAogCQkJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAv
KiBDaGFyc2V0RGF0YS5jcHAgKi8sCiAJCQkJNjU2NTgxQUQwOUQxNEVFNjAwMEU2MUQ3IC8qIENv
bG9yRGF0YS5jICovLAogCQkJCTY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFy
LmNwcCAqLywKQEAgLTEzNDk3LDYgKzEzNjgwLDcgQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYz
NUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNENERTU0RUMwRTU1Nzk3ODAwODlFMjZDIC8qIHdtbC5jc3MgKi8sCiAJCQkJQTgwRTZDREEw
QTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIuaCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBC
MTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJCQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovLApAQCAtMTYyNTQsNyArMTY0MzgsNiBAQAogCQkw
ODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJC
MTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldl
YkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKIAkJCWhh
c1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xp
c2gsCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBX
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1
LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3Nr
dXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzU0LDYgKzM1Niw5
IEBAIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCog
ZGVmYXVsdFF1aXJrc1N0eWxlOwogc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxl
Owogc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7CisjaWYgRU5BQkxF
KFdNTCkKK3N0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0V21sU3R5bGUgPSAwOworI2VuZGlmCiBz
dGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7CiAKIFJlbmRlclN0
eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwpAQCAtNTI1LDYg
KzUzMCwxMyBAQCBzdGF0aWMgdm9pZCBsb2FkVmlld1NvdXJjZVN0eWxlKCkKICAgICBBU1NFUlQo
IWRlZmF1bHRWaWV3U291cmNlU3R5bGUpOwogICAgIGRlZmF1bHRWaWV3U291cmNlU3R5bGUgPSBu
ZXcgQ1NTUnVsZVNldDsKICAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJj
ZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKKworI2lmIEVOQUJMRShXTUwp
CisgICAgaWYgKCFkZWZhdWx0V21sU3R5bGUpIHsKKyAgICAgICAgZGVmYXVsdFdtbFN0eWxlID0g
bmV3IENTU1J1bGVTZXQ7CisgICAgICAgIGRlZmF1bHRXbWxTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQocGFyc2VVQVNoZWV0KHdtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih3bWxVc2VyQWdl
bnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBkZWNsKQpAQCAtOTkwLDYgKzEwMDIsMTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFVBUnVsZXMoaW50JgogICAgICAgICA/IGRlZmF1bHRQcmludFN0eWxlIDogZGVm
YXVsdFN0eWxlOwogICAgIG1hdGNoUnVsZXModXNlckFnZW50U3R5bGVTaGVldCwgZmlyc3RVQVJ1
bGUsIGxhc3RVQVJ1bGUpOwogCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAobV9jaGVja2VyLm1f
ZG9jdW1lbnQtPmlzV01MRG9jdW1lbnQoKSkKKyAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0V21s
U3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKKyNlbmRpZgorCiAgICAgLy8gSW4gcXVp
cmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0
LgogICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZykKICAgICAgICAgbWF0Y2hSdWxl
cyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKQEAgLTEwNTAs
NiArMTA2NywxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAg
ICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChtX2NoZWNrZXIubV9kb2N1
bWVudC0+aXNXTUxEb2N1bWVudCgpICYmICFkZWZhdWx0V21sU3R5bGUpIHsKKyAgICAgICAgZGVm
YXVsdFdtbFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7CisgICAgICAgIGRlZmF1bHRXbWxTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHdtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZih3bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7CisgICAgfQorI2Vu
ZGlmCisKICAgICBpbnQgZmlyc3RVQVJ1bGUgPSAtMSwgbGFzdFVBUnVsZSA9IC0xOwogICAgIGlu
dCBmaXJzdFVzZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVsZSA9IC0xOwogICAgIGludCBmaXJzdEF1
dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKSW5kZXg6IFdlYkNvcmUvY3NzL3dt
bC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mvd21sLmNzcwkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvY3NzL3dtbC5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUxIEBACisvKgor
ICogVGhlIGRlZmF1bHQgc3R5bGUgc2hlZXQgdXNlZCB0byByZW5kZXIgSFRNTC4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCitAbmFtZXNwYWNlICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8iOworCit3bWwgewor
ICAgIGRpc3BsYXk6IGJsb2NrCit9CisKKy8qIGNoaWxkcmVuIG9mIHRoZSA8aGVhZD4gZWxlbWVu
dCBhbGwgaGF2ZSBkaXNwbGF5Om5vbmUgKi8KK2hlYWQgeworICAgIGRpc3BsYXk6IG5vbmUKK30K
KworbWV0YSB7CisgICAgZGlzcGxheTogbm9uZQorfQorCithY2Nlc3MgeworICAgIGRpc3BsYXk6
IG5vbmUKK30KKworLyogZ2VuZXJpYyBibG9jay1sZXZlbCBlbGVtZW50cyAqLworCitjYXJkIHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDhweAorfQorCitwIHsKKyAgICBkaXNw
bGF5OiBibG9jazsKKyAgICBtYXJnaW46IDEuMF9fcWVtIDBweAorfQorCitkaXYgeworICAgIGRp
c3BsYXk6IGJsb2NrCit9CisKK2xheWVyIHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCittYXJx
dWVlIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgb3ZlcmZsb3c6IC13ZWJraXQt
bWFycXVlZQorfQorCithZGRyZXNzIHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCitibG9ja3F1
b3RlIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDFfX3FlbSA0MHB4IDFlbSA0
MHB4Cit9CisKK3EgeworICAgIGRpc3BsYXk6IGlubGluZQorfQorCitxOmJlZm9yZSB7CisgICAg
Y29udGVudDogJyInCisgICAgLyogRklYTUU6IGNvbnRlbnQ6IG9wZW4tcXVvdGU7ICovCit9CisK
K3E6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICciJworICAgIC8qIEZJWE1FOiBjb250ZW50OiBjbG9z
ZS1xdW90ZTsgKi8KK30KKworY2VudGVyIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICAvKiBz
cGVjaWFsIGNlbnRlcmluZyB0byBiZSBhYmxlIHRvIGVtdWxhdGUgdGhlIGh0bWw0L25ldHNjYXBl
IGJlaGF2aW91ciAqLworICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2VudGVyCit9CisKK2hyIHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDAuNWVtIGF1dG87CisgICAgYm9yZGVy
LXN0eWxlOiBpbnNldDsKKyAgICBib3JkZXItd2lkdGg6IDFweAorfQorCittYXAgeworICAgIGRp
c3BsYXk6IGlubGluZQorfQorCisvKiB0YWJsZXMgKi8KKwordGFibGUgeworICAgIGRpc3BsYXk6
IHRhYmxlOworICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgYm9yZGVyLXNwYWNp
bmc6IDJweDsKKyAgICBib3JkZXItY29sb3I6IGdyYXkKK30KKwordGFibGVbYWxpZ249ImNlbnRl
ciJdIHsKKyAgICBtYXJnaW4tbGVmdDogYXV0bzsKKyAgICBtYXJnaW4tcmlnaHQ6IGF1dG8KK30K
KwordGhlYWQgeworICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKKyAgICB2ZXJ0aWNh
bC1hbGlnbjogbWlkZGxlOworICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCit0Ym9keSB7
CisgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRk
bGU7CisgICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0Cit9CisKK3Rmb290IHsKKyAgICBkaXNwbGF5
OiB0YWJsZS1mb290ZXItZ3JvdXA7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgICBi
b3JkZXItY29sb3I6IGluaGVyaXQKK30KKworLyogZm9yIHRhYmxlcyB3aXRob3V0IHRhYmxlIHNl
Y3Rpb24gZWxlbWVudHMgKGNhbiBoYXBwZW4gd2l0aCBYSFRNTCBvciBkeW5hbWljYWxseSBjcmVh
dGVkIHRhYmxlcykgKi8KK3RhYmxlID4gdHIgeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7
Cit9CisKK2NvbCB7CisgICAgZGlzcGxheTogdGFibGUtY29sdW1uCit9CisKK2NvbGdyb3VwIHsK
KyAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXAKK30KKwordHIgeworICAgIGRpc3BsYXk6
IHRhYmxlLXJvdzsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDsKKyAgICBib3JkZXItY29s
b3I6IGluaGVyaXQKK30KKwordGQsIHRoIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAg
IHZlcnRpY2FsLWFsaWduOiBpbmhlcml0Cit9CisKK3RoIHsKKyAgICBmb250LXdlaWdodDogYm9s
ZAorfQorCitjYXB0aW9uIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uOworICAgIHRleHQt
YWxpZ246IC13ZWJraXQtY2VudGVyCit9CisKKy8qIGxpc3RzICovCisKK3VsLCBtZW51LCBkaXIg
eworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsKKyAgICBt
YXJnaW46IDFfX3FlbSAwIDFlbSAwOworICAgIC13ZWJraXQtcGFkZGluZy1zdGFydDogNDBweAor
fQorCitvbCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNp
bWFsOworICAgIG1hcmdpbjogMV9fcWVtIDAgMWVtIDA7CisgICAgLXdlYmtpdC1wYWRkaW5nLXN0
YXJ0OiA0MHB4Cit9CisKK2xpIHsKKyAgICBkaXNwbGF5OiBsaXN0LWl0ZW0KK30KKwordWwgdWws
IG9sIHVsIHsKKyAgICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZQorfQorCitvbCBvbCB1bCwgb2wg
dWwgdWwsIHVsIG9sIHVsLCB1bCB1bCB1bCB7CisgICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmUK
K30KKworZGQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0
OiA0MHB4Cit9CisKK2RsIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDFfX3Fl
bSAwIDFlbSAwCit9CisKK2R0IHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCitvbCB1bCwgdWwg
b2wsIHVsIHVsLCBvbCBvbCB7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9t
OiAwCit9CisKKy8qIGZvcm0gZWxlbWVudHMgKi8KKworZm9ybSB7CisgICAgZGlzcGxheTogYmxv
Y2s7CisgICAgbWFyZ2luOiAwX19xZW0gMCAxZW0gMAorfQorCitsYWJlbCB7CisgICAgY3Vyc29y
OiBkZWZhdWx0OworfQorCitsZWdlbmQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBhZGRp
bmctbGVmdDogMnB4OworICAgIHBhZGRpbmctcmlnaHQ6IDJweDsKKyAgICBib3JkZXI6IG5vbmUK
K30KKworZmllbGRzZXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbi1sZWZ0OiAy
cHg7CisgICAgbWFyZ2luLXJpZ2h0OiAycHg7CisgICAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAw
LjYyNWVtOworICAgIGJvcmRlcjogMnB4IGdyb292ZSBUaHJlZURGYWNlCit9CisKK2J1dHRvbiB7
CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247Cit9CisKK2RvIHsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiBsaWdodGdyYXk7Cit9CisKK2lucHV0LCB0ZXh0YXJlYSwga2V5Z2VuLCBzZWxl
Y3QsIGJ1dHRvbiwgaXNpbmRleCB7CisgICAgbWFyZ2luOiAwX19xZW07CisgICAgZm9udDogLXdl
YmtpdC1zbWFsbC1jb250cm9sOworICAgIGNvbG9yOiBpbml0aWFsOworICAgIGxldHRlci1zcGFj
aW5nOiBub3JtYWw7CisgICAgd29yZC1zcGFjaW5nOiBub3JtYWw7CisgICAgbGluZS1oZWlnaHQ6
IG5vcm1hbDsKKyAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKKyAgICB0ZXh0LWluZGVudDogMDsK
KyAgICB0ZXh0LXNoYWRvdzogbm9uZTsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAg
dGV4dC1hbGlnbjogLXdlYmtpdC1hdXRvOworfQorCitpbnB1dFt0eXBlPSJoaWRkZW4iXSB7Cisg
ICAgZGlzcGxheTogbm9uZQorfQorCitpbnB1dCwgaW5wdXRbdHlwZT0icGFzc3dvcmQiXSwgaW5w
dXRbdHlwZT0ic2VhcmNoIl0sIGlzaW5kZXggeworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4
dGZpZWxkOworICAgIHBhZGRpbmc6IDFweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK
KyAgICBib3JkZXI6IDJweCBpbnNldDsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNh
bDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIGN1cnNvcjogYXV0bzsKK30K
KworaW5wdXRbdHlwZT0ic2VhcmNoIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNo
ZmllbGQ7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitpbnB1dFt0
eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7CisgICAgLXdlYmtp
dC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uOworfQorCitpbnB1dFt0eXBl
PSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBzZWFyY2hmaWVsZC1kZWNvcmF0aW9uOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2gi
XTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uIHsKKyAgICAtd2Via2l0LWFwcGVh
cmFuY2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbjsKK30KKworaW5wdXRbdHlwZT0i
c2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uIHsKKyAgICAtd2Via2l0LWFw
cGVhcmFuY2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9uOworfQorCit0ZXh0YXJlYSB7Cisg
ICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3
aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzog
bG9naWNhbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIC13ZWJraXQtYm94
LW9yaWVudDogdmVydGljYWw7CisgICAgcmVzaXplOiBhdXRvOworICAgIGN1cnNvcjogYXV0bzsK
K30KKworaW5wdXRbdHlwZT0icGFzc3dvcmQiXSB7CisgICAgLXdlYmtpdC10ZXh0LXNlY3VyaXR5
OiBkaXNjICFpbXBvcnRhbnQ7Cit9CisKK2lucHV0W3R5cGU9ImhpZGRlbiJdLCBpbnB1dFt0eXBl
PSJpbWFnZSJdLCBpbnB1dFt0eXBlPSJmaWxlIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTog
aW5pdGlhbDsKKyAgICBwYWRkaW5nOiBpbml0aWFsOworICAgIGJhY2tncm91bmQtY29sb3I6IGlu
aXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworfQorCitpbnB1dFt0eXBlPSJmaWxlIl0gewor
ICAgIC13ZWJraXQtYm94LWFsaWduOiBiYXNlbGluZTsKK30KKworaW5wdXQ6LXdlYmtpdC1hdXRv
ZmlsbCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZBRkZCRCAhaW1wb3J0YW50OworICAgIGJh
Y2tncm91bmQtaW1hZ2U6bm9uZSAhaW1wb3J0YW50OworfQorCitpbnB1dFt0eXBlPSJyYWRpbyJd
LCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBtYXJnaW46IDNweCAwLjVleDsKKyAgICBw
YWRkaW5nOiBpbml0aWFsOworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9y
ZGVyOiBpbml0aWFsOworfQorCitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3Vi
bWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1m
aWxlLXVwbG9hZC1idXR0b24geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcHVzaC1idXR0b247
CisgICAgd2hpdGUtc3BhY2U6IHByZQorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRb
dHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6
LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbiB7CisgICAgLXdlYmtpdC1ib3gtYWxp
Z246IGNlbnRlcjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY3Vyc29yOiBkZWZhdWx0
OworICAgIGNvbG9yOiBCdXR0b25UZXh0OworICAgIHBhZGRpbmc6IDJweCA2cHggM3B4IDZweDsK
KyAgICBib3JkZXI6IDJweCBvdXRzZXQgQnV0dG9uRmFjZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBCdXR0b25GYWNlOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveAorfQorCitp
bnB1dFt0eXBlPSJyYW5nZSJdIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlci1ob3Jp
em9udGFsOworICAgIHBhZGRpbmc6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworICAg
IG1hcmdpbjogMnB4OworfQorCitpbnB1dFt0eXBlPSJyYW5nZSJdOjotd2Via2l0LXNsaWRlci10
aHVtYiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzbGlkZXJ0aHVtYi1ob3Jpem9udGFsOwor
fQorCitpbnB1dFt0eXBlPSJidXR0b24iXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06
ZGlzYWJsZWQsIGlucHV0W3R5cGU9InJlc2V0Il06ZGlzYWJsZWQsIGlucHV0W3R5cGU9ImZpbGUi
XTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjpkaXNhYmxlZCwg
c2VsZWN0OmRpc2FibGVkLCBrZXlnZW46ZGlzYWJsZWQsIG9wdGdyb3VwOmRpc2FibGVkLCBvcHRp
b246ZGlzYWJsZWQgeworICAgIGNvbG9yOiBHcmF5VGV4dAorfQorCitpbnB1dFt0eXBlPSJidXR0
b24iXTphY3RpdmUsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0icmVz
ZXQiXTphY3RpdmUsIGlucHV0W3R5cGU9ImZpbGUiXTphY3RpdmU6Oi13ZWJraXQtZmlsZS11cGxv
YWQtYnV0dG9uLCBidXR0b246YWN0aXZlIHsKKyAgICBib3JkZXItc3R5bGU6IGluc2V0Cit9CisK
K2lucHV0W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0
Il06YWN0aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJyZXNldCJdOmFjdGl2ZTpkaXNhYmxlZCwg
aW5wdXRbdHlwZT0iZmlsZSJdOmFjdGl2ZTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1i
dXR0b24sIGJ1dHRvbjphY3RpdmU6ZGlzYWJsZWQgeworICAgIGJvcmRlci1zdHlsZTogb3V0c2V0
Cit9CisKK2FyZWEsIHBhcmFtIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2lucHV0W3R5cGU9
ImNoZWNrYm94Il0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7CisgICAgLXdl
YmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitpbnB1dFt0eXBlPSJyYWRpbyJdIHsK
KyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHJhZGlvOworICAgIC13ZWJraXQtYm94LXNpemluZzog
Ym9yZGVyLWJveDsKK30KKwora2V5Z2VuLCBzZWxlY3QgeworICAgIC13ZWJraXQtYXBwZWFyYW5j
ZTogbWVudWxpc3Q7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13
ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiAxcHggc29saWQ7CisgICAgLXdl
YmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CisgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAtd2Vi
a2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICBjb2xvcjogYmxhY2s7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogd2hpdGU7CisgICAgY3Vyc29yOiBkZWZhdWx0OworfQorCitzZWxlY3Rbc2l6
ZV0sCitzZWxlY3RbbXVsdGlwbGVdLAorc2VsZWN0W3NpemVdW211bHRpcGxlXSB7CisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBsaXN0Ym94OworICAgIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDsK
KyAgICBib3JkZXI6IDFweCBpbnNldCBncmF5OworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czog
aW5pdGlhbDsKKyAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDsKK30KKworc2VsZWN0W3NpemU9IjAi
XSwKK3NlbGVjdFtzaXplPSIxIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7
CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsK
KyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOwor
fQorCitvcHRncm91cCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKK30KKworb3B0aW9uIHsK
KyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisvKiBpbmxpbmUgZWxlbWVudHMgKi8KKwor
dSwgaW5zIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZQorfQorCitzdHJvbmcsIGIg
eworICAgIGZvbnQtd2VpZ2h0OiBib2xkZXIKK30KKworaSwgY2l0ZSwgZW0sIHZhciwgYWRkcmVz
cyB7CisgICAgZm9udC1zdHlsZTogaXRhbGljCit9CisKK3R0LCBjb2RlLCBrYmQsIHNhbXAgewor
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UKK30KKworcHJlLCB4bXAsIHBsYWludGV4dCwgbGlz
dGluZyB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsK
KyAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgIG1hcmdpbjogMV9fcWVtIDAKK30KKworYmlnIHsK
KyAgICBmb250LXNpemU6IGxhcmdlcgorfQorCitzbWFsbCB7CisgICAgZm9udC1zaXplOiBzbWFs
bGVyCit9CisKK3MsIHN0cmlrZSwgZGVsIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhy
b3VnaAorfQorCitzdWIgeworICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7CisgICAgZm9udC1zaXpl
OiBzbWFsbGVyCit9CisKK3N1cCB7CisgICAgdmVydGljYWwtYWxpZ246IHN1cGVyOworICAgIGZv
bnQtc2l6ZTogc21hbGxlcgorfQorCitub2JyIHsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwCit9
CisKKy8qIHN0YXRlcyAqLworCis6Zm9jdXMgeyAKKyAgICBvdXRsaW5lOiBhdXRvIDVweCAtd2Vi
a2l0LWZvY3VzLXJpbmctY29sb3IKK30KKworLyogUmVhZC1vbmx5IHRleHQgZmllbGRzIGRvIG5v
dCBzaG93IGEgZm9jdXMgcmluZyBidXQgZG8gc3RpbGwgcmVjZWl2ZSBmb2N1cyAqLword21sOmZv
Y3VzLCBjYXJkOmZvY3VzLCBpbnB1dFtyZWFkb25seV06Zm9jdXMgeyAKKyAgICBvdXRsaW5lOiBu
b25lCit9CisgIAoraW5wdXQ6Zm9jdXMsIHRleHRhcmVhOmZvY3VzLCBpc2luZGV4OmZvY3VzLCBr
ZXlnZW46Zm9jdXMsIHNlbGVjdDpmb2N1cyB7CisgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHgKK30K
KworaW5wdXRbdHlwZT0iYnV0dG9uIl06Zm9jdXMsCitpbnB1dFt0eXBlPSJjaGVja2JveCJdOmZv
Y3VzLAoraW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLAoraW5wdXRbdHlwZT0iaGlkZGVuIl06Zm9j
dXMsCitpbnB1dFt0eXBlPSJpbWFnZSJdOmZvY3VzLAoraW5wdXRbdHlwZT0icmFkaW8iXTpmb2N1
cywKK2lucHV0W3R5cGU9InJlc2V0Il06Zm9jdXMsCitpbnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1
cywKK2lucHV0W3R5cGU9InN1Ym1pdCJdOmZvY3VzLAoraW5wdXRbdHlwZT0iZmlsZSJdOmZvY3Vz
Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7CisgICAgb3V0bGluZS1vZmZzZXQ6IDAKK30K
KyAgICAKK2E6LXdlYmtpdC1hbnktbGluayB7CisgICAgY29sb3I6IC13ZWJraXQtbGluazsKKyAg
ICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworYTotd2Via2l0LWFueS1saW5rOmFj
dGl2ZSB7CisgICAgY29sb3I6IC13ZWJraXQtYWN0aXZlbGluaworfQorCithbmNob3I6LXdlYmtp
dC1hbnktbGluayB7CisgICAgY29sb3I6IC13ZWJraXQtbGluazsKKyAgICB0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZTsKK30KKworYW5jaG9yOi13ZWJraXQtYW55LWxpbms6YWN0aXZlIHsKKyAg
ICBjb2xvcjogLXdlYmtpdC1hY3RpdmVsaW5rCit9CisKKy8qIG90aGVyIGVsZW1lbnRzICovCisK
K25vZnJhbWVzIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2ZyYW1lc2V0LCBmcmFtZSB7Cisg
ICAgZGlzcGxheTogYmxvY2sKK30KKworZnJhbWVzZXQgeworICAgIGJvcmRlci1jb2xvcjogaW5o
ZXJpdAorfQorCitpZnJhbWUgeworICAgIGJvcmRlcjogMnB4IGluc2V0Cit9CisKKy8qIG5vc2Ny
aXB0IGlzIGhhbmRsZWQgaW50ZXJuYWxseSwgYXMgaXQgZGVwZW5kcyBvbiBzZXR0aW5ncyAqLwpJ
bmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJD
b3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw4
IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsNiArNTQsMTAgQEAKICNp
bmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1
ZGUgIldNTERvY3VtZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYg
RU5BQkxFKFNWRykKQEAgLTMwOCw2ICszMTQsMTUgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9N
SW1wbGVtZW50YXRpb246OgogICAgICAgICByZXR1cm4gSFRNTERvY3VtZW50OjpjcmVhdGUoZnJh
bWUpOwogICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiKQogICAgICAgICBy
ZXR1cm4gRG9jdW1lbnQ6OmNyZWF0ZVhIVE1MKGZyYW1lKTsKKworI2lmIEVOQUJMRShXTUwpCisg
ICAgaWYgKHR5cGUgPT0gInRleHQvdm5kLndhcC53bWwiCisjaWYgRU5BQkxFKFdCWE1MKQorICAg
ICAgICB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiCisjZW5kaWYKKyAgICAg
ICAgKQorICAgICAgICByZXR1cm4gV01MRG9jdW1lbnQ6OmNyZWF0ZShmcmFtZSk7CisjZW5kaWYK
ICAgICAgICAgCiAjaWYgRU5BQkxFKEZUUERJUikKICAgICAvLyBQbHVnaW5zIGNhbm5vdCB0YWtl
IEZUUCBmcm9tIHVzIGVpdGhlcgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw4IEBACiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDcsNiArMTA5LDEwIEBACiAj
aW5jbHVkZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJXZWJLaXRUcmFuc2l0
aW9uRXZlbnQuaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCisjaWYgRU5BQkxFKFdNTCkKKyNp
bmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjZW5k
aWYKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCkBAIC03NDUsNiArNzUxLDEwIEBAIFBhc3NSZWZQdHI8
RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KICAgICBlbHNlIGlmIChxTmFtZS5uYW1lc3Bh
Y2VVUkkoKSA9PSBTVkdOYW1lczo6c3ZnTmFtZXNwYWNlVVJJKQogICAgICAgICBlID0gU1ZHRWxl
bWVudEZhY3Rvcnk6OmNyZWF0ZVNWR0VsZW1lbnQocU5hbWUsIHRoaXMsIGNyZWF0ZWRCeVBhcnNl
cik7CiAjZW5kaWYKKyNpZiBFTkFCTEUoV01MKQorICAgIGVsc2UgaWYgKHFOYW1lLm5hbWVzcGFj
ZVVSSSgpID09IFdNTE5hbWVzOjp3bWxOYW1lc3BhY2VVUkkpCisgICAgICAgIGUgPSBXTUxFbGVt
ZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgdGhpcywgY3JlYXRlZEJ5UGFyc2Vy
KTsKKyNlbmRpZgogICAgIAogICAgIGlmICghZSkKICAgICAgICAgZSA9IG5ldyBFbGVtZW50KHFO
YW1lLCBkb2N1bWVudCgpKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsOCBAQAogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjk1LDYgKzI5Nyw5IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpbkRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYURvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyNpZiBFTkFCTEUoV01MKQorICAgIHZpcnR1YWwgYm9vbCBpc1dNTERvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgogICAgIAogICAgIENTU1N0eWxl
U2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2VsZWN0b3I7
IH0KIApJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUv
ZG9tL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4Niw2ICsyODcsMTYgQEAgdm9pZCBY
TUxUb2tlbml6ZXI6Omluc2VydEVycm9yTWVzc2FnZUJsbwogICAgICAgICBkb2N1bWVudEVsZW1l
bnQgPSBib2R5LmdldCgpOwogICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShXTUwpCisgICAgZWxz
ZSBpZiAobV9kb2MtPmlzV01MRG9jdW1lbnQoKSkgeworICAgICAgICBSZWZQdHI8Tm9kZT4gcm9v
dEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnROUyhIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNl
VVJJLCAiaHRtbCIsIGVjKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IGJvZHkgPSBkb2MtPmNyZWF0
ZUVsZW1lbnROUyhIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJLCAiYm9keSIsIGVjKTsKKyAg
ICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHksIGVjKTsKKyAgICAgICAgYm9keS0+
YXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50LCBlYyk7CisgICAgICAgIGRvYy0+YXBwZW5kQ2hp
bGQocm9vdEVsZW1lbnQuZ2V0KCksIGVjKTsKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9k
eS5nZXQoKTsKKyAgICB9CisjZW5kaWYKIAogICAgIFJlZlB0cjxFbGVtZW50PiByZXBvcnRFbGVt
ZW50ID0gY3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcihkb2MsIG1fZXJyb3JNZXNzYWdlcyk7
CiAgICAgZG9jdW1lbnRFbGVtZW50LT5pbnNlcnRCZWZvcmUocmVwb3J0RWxlbWVudCwgZG9jdW1l
bnRFbGVtZW50LT5maXJzdENoaWxkKCksIGVjKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2Vu
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCShyZXZpc2lv
biAzODM2MSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2Vp
bmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTczLDYgKzc0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNldElzWEhUTUxEb2N1bWVudChib29sIGlzWEhUTUwpIHsgbV9pc1hIVE1MRG9jdW1lbnQg
PSBpc1hIVE1MOyB9CiAgICAgICAgIGJvb2wgaXNYSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pc1hIVE1MRG9jdW1lbnQ7IH0KIAorICAgICAgICBEb2N1bWVudCAqZG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2RvYzsgfQorCiAgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VD
bGllbnQKICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
KiBmaW5pc2hlZE9iaik7CiAKQEAgLTkxLDEyICs5NCwxNSBAQCBwcml2YXRlOgogICAgICAgICB2
b2lkIHBhcnNlU3RhcnRFbGVtZW50KCk7CiAgICAgICAgIHZvaWQgcGFyc2VFbmRFbGVtZW50KCk7
CiAgICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHZvaWQgcGFyc2VQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKKyAgICAgICAgdm9pZCBlbmREb2N1bWVudCgpOwogICAgICAg
ICB2b2lkIHBhcnNlQ2RhdGEoKTsKKyAgICAgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OworI2lm
IEVOQUJMRShXTUwpCitwcm90ZWN0ZWQ6CisjZW5kaWYKKyAgICAgICAgdm9pZCBwYXJzZVByb2Nl
c3NpbmdJbnN0cnVjdGlvbigpOwogICAgICAgICB2b2lkIHBhcnNlQ29tbWVudCgpOwotICAgICAg
ICB2b2lkIGVuZERvY3VtZW50KCk7CiAgICAgICAgIHZvaWQgcGFyc2VEdGQoKTsKLSAgICAgICAg
Ym9vbCBoYXNFcnJvcigpIGNvbnN0OwogI2Vsc2UKIHB1YmxpYzoKICAgICAgICAgLy8gY2FsbGJh
Y2tzIGZyb20gcGFyc2VyIFNBWApAQCAtMTEyLDE4ICsxMTgsMjggQEAgcHVibGljOgogICAgICAg
ICB2b2lkIGludGVybmFsU3Vic2V0KGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIq
IGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3RlbUlEKTsKICAgICAgICAgdm9pZCBlbmRE
b2N1bWVudCgpOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoV01MKQorICAgIHByb3RlY3RlZDoKKyNp
ZiBVU0UoUVhNTFNUUkVBTSkKKyAgICAgICAgUVhtbFN0cmVhbVJlYWRlciYgeG1sU3RyZWFtUmVh
ZGVyKCkgeyByZXR1cm4gbV9zdHJlYW07IH0KKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXco
KSBjb25zdCB7IHJldHVybiBtX3ZpZXc7IH0KKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnROb2RlOyB9CisjZW5kaWYKKyNlbHNlCisgICAgcHJpdmF0
ZToKKyNlbmRpZgorICAgICAgICB2b2lkIHNldEN1cnJlbnROb2RlKE5vZGUqKTsKKyAgICAgICAg
Ym9vbCBlbnRlclRleHQoKTsKKyAgICAgICAgdm9pZCBleGl0VGV4dCgpOwogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBib29sIHBhcnNlWE1MRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJp
bmcmIGNodW5rLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50KTsK
IAogICAgICAgICBzdGF0aWMgdm9pZCBldmVudHVhbGx5TWFya0FzUGFyc2VyQ3JlYXRlZChFbGVt
ZW50KiBlbGVtZW50KTsKICAgICAgICAgdm9pZCBpbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25z
dCBjaGFyKiBjaHVuayA9IDApOwotICAgICAgICB2b2lkIHNldEN1cnJlbnROb2RlKE5vZGUqKTsK
IAogICAgICAgICB2b2lkIGluc2VydEVycm9yTWVzc2FnZUJsb2NrKCk7CiAKLSAgICAgICAgYm9v
bCBlbnRlclRleHQoKTsKLSAgICAgICAgdm9pZCBleGl0VGV4dCgpOwotCiAgICAgICAgIHZvaWQg
ZG9Xcml0ZShjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdm9pZCBkb0VuZCgpOwogCkluZGV4OiBX
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
WE1MVG9rZW5pemVyUXQuY3BwCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvZG9tL1hNTFRv
a2VuaXplclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAq
IENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzQ0LDYgKzc0NSwxNCBAQCB2b2lkIFhNTFRva2Vu
aXplcjo6cGFyc2VEdGQoKQogICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygi
LS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgewogICAgICAgICBzZXRJ
c1hIVE1MRG9jdW1lbnQodHJ1ZSk7IC8vIGNvbnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMg
b3Igbm90LgogICAgIH0KKyNpZiBFTkFCTEUoV01MKQorICAgIGVsc2UgaWYgKG1fZG9jLT5pc1dN
TERvY3VtZW50KCkKKyAgICAgICAgICAgICYmIHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iKQorICAgICAgICAgICAgJiYgcHVibGljSWQgIT0g
UUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiIpCisgICAgICAgICAg
ICAmJiBwdWJsaWNJZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIikKKyAgICAgICAgICAgICYmIHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZP
UlVNLy9EVEQgV01MIDEuMC8vRU4iKSkKKyAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZh
bGlkIERURCBQdWJsaWMgSUQiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyNlbmRp
ZgogICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIG1fZG9jLT5hZGRDaGlsZChE
b2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7CiAg
ICAgCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAkocmV2aXNpb24gMzgzNjEp
CisrKyBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
VG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNjQsNCArMjY2LDE5IEBAIGJvb2wgQmFja0ZvcndhcmRMaXN0Ojpjb250YWluc0l0
ZW0oSGlzdG8KICAgICByZXR1cm4gbV9lbnRyeUhhc2guY29udGFpbnMoZW50cnkpOwogfQogCisj
aWYgRU5BQkxFKFdNTCkKKy8vIGNsZWFyIHRoZSBoaXN0b3J5IG9mIGN1cnJlbnQgV01MIHBhZ2UK
K3ZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbGVhcldtbFBhZ2VIaXN0b3J5KCkKK3sKKyAgICBQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiBjdXIgPSBjdXJyZW50SXRlbSgpOworCisgICAgaW50IHNpemUg
PSBtX2VudHJpZXMuc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgbV9l
bnRyaWVzLmNsZWFyKCk7CisgICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKKyAgICBtX2N1cnJlbnQg
PSBOb0N1cnJlbnRJdGVtSW5kZXg7Cit9CisjZW5kaWYKKwogfTsgLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmgJKHJldmlzaW9uIDM4MzYxKQorKysg
V2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDYg
Kzc1LDkgQEAgcHVibGljOiAKICAgICB2b2lkIHJlbW92ZUl0ZW0oSGlzdG9yeUl0ZW0qKTsKICAg
ICBIaXN0b3J5SXRlbVZlY3RvciYgZW50cmllcygpOwogICAgIAorI2lmIEVOQUJMRShXTUwpCisg
ICAgdm9pZCBjbGVhcldtbFBhZ2VIaXN0b3J5KCk7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgQmFj
a0ZvcndhcmRMaXN0KFBhZ2UqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAg
ICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHly
aWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTQ0LDYgKzQ2LDE1IEBAIEhUTUxCdXR0b25FbGVtZW50OjpIVE1MQnV0dG9uRWxlbWVu
dChEb2MKIHsKIH0KIAorI2lmIEVOQUJMRShXTUwpCitIVE1MQnV0dG9uRWxlbWVudDo6SFRNTEJ1
dHRvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnLCBEb2N1bWVudCogZG9jLCBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZywgZG9j
LCBmb3JtKQorICAgICwgbV90eXBlKEJVVFRPTikKKyAgICAsIG1fYWN0aXZlU3VibWl0KGZhbHNl
KQoreworfQorI2VuZGlmCisKIEhUTUxCdXR0b25FbGVtZW50Ojp+SFRNTEJ1dHRvbkVsZW1lbnQo
KQogewogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgJKHJldmlzaW9uIDM4MzYxKQor
KysgV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMs
NiArMyw4IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNiArMzMsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MQnV0dG9uRWxlbWVudChEb2N1
bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKKyNpZiBFTkFCTEUoV01MKQorICAgIEhUTUxC
dXR0b25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxl
bWVudCogPSAwKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgfkhUTUxCdXR0b25FbGVtZW50KCk7CiAK
ICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OwpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw4IEBACiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0xMTYsNiArMTE4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKIAorI2lmIEVO
QUJMRShXTUwpCisgICAgdmlydHVhbCBib29sIGlzV01MSW1hZ2VFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBIVE1MSW1hZ2VMb2FkZXImIGltYWdlTG9hZGVyKCkgeyByZXR1
cm4gbV9pbWFnZUxvYWRlcjsgfQorI2VuZGlmCiBwcml2YXRlOgogICAgIEhUTUxJbWFnZUxvYWRl
ciBtX2ltYWdlTG9hZGVyOwogICAgIFN0cmluZyB1c2VtYXA7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEltYWdl
TG9hZGVyLmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDggQEAKICAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI4LDYgKzMwLDExIEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCisjaWYgRU5B
QkxFKFdNTCkKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1l
cy5oIgorI2VuZGlmCisjaW5jbHVkZSAiSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01OCw2ICs2NSwxMSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQo
Q2FjCiAgICAgRWxlbWVudCogZWxlbSA9IGVsZW1lbnQoKTsKICAgICBJbWFnZUxvYWRlcjo6bm90
aWZ5RmluaXNoZWQoaW1hZ2UpOwogCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZihpbWFnZS0+ZXJy
b3JPY2N1cnJlZCgpICYmIGVsZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpICYmIHN0
YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtKS0+aXNXTUxJbWFnZUVsZW1lbnQoKSkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8V01MSW1hZ2VFbGVtZW50Kj4oZWxlbSktPnJlbG9hZEltYWdl
QnlTcmNBdHRyKCk7CisjZW5kaWYKKwogICAgIGlmIChpbWFnZS0+ZXJyb3JPY2N1cnJlZCgpICYm
IGVsZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQogICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+KGVsZW0pLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsK
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMzgzNjEpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQ2LDcgKzEwNDYsMTQgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2Vs
ZQogICAgIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0TXVsdGlwbGUoYm9vbCBtdWx0aXBs
ZSkKIHsKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChkb2N1bWVudCgpLT5pc1dNTERvY3VtZW50
KCkpCisgICAgICAgIG1fbXVsdGlwbGUgPSBtdWx0aXBsZTsKKyAgICBlbHNlCisgICAgICAgIHNl
dEF0dHJpYnV0ZShtdWx0aXBsZUF0dHIsIG11bHRpcGxlID8gIiIgOiAwKTsKKyNlbHNlCiAgICAg
c2V0QXR0cmlidXRlKG11bHRpcGxlQXR0ciwgbXVsdGlwbGUgPyAiIiA6IDApOworI2VuZGlmCiB9
CiAKIHZvaWQgSFRNTFNlbGVjdEVsZW1lbnQ6OnNldFNpemUoaW50IHNpemUpCkluZGV4OiBXZWJD
b3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTFNlbGVjdEVsZW1lbnQuaAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFNlbGVjdEVsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMyw2ICszLDggQEAKICAqICAgICAg
ICAgICAoQykgMTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqICAgICAg
ICAgICAoQykgMjAwMCBEaXJrIE11ZWxsZXIgKG11ZWxsZXJAa2RlLm9yZykKICAqIENvcHlyaWdo
dCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwog
ICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Niw5ICs1OCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKICAgICAKICAgICB2aXJ0dWFsIGJvb2wgY2FuU3Rh
cnRTZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgdm9pZCBz
ZXRTZWxlY3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmly
ZU9uQ2hhbmdlID0gZmFsc2UpOwogCiAgICAgaW50IHNlbGVjdGVkSW5kZXgoKSBjb25zdDsKLSAg
ICB2b2lkIHNldFNlbGVjdGVkSW5kZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwg
Ym9vbCBmaXJlT25DaGFuZ2UgPSBmYWxzZSk7CiAgICAgaW50IGxhc3RTZWxlY3RlZExpc3RJbmRl
eCgpIGNvbnN0OwogCiAgICAgdmlydHVhbCBib29sIGlzRW51bWVyYXRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQpAQCAtMTM3LDE5ICsxMzksMzIgQEAgcHVibGljOgogICAgIGludCBhY3Rp
dmVTZWxlY3Rpb25FbmRMaXN0SW5kZXgoKSBjb25zdDsKICAgICAKICAgICB2b2lkIHNjcm9sbFRv
U2VsZWN0aW9uKCk7CisjaWYgRU5BQkxFKFdNTCkKK3Byb3RlY3RlZDoKKyAgICBpbnQgYWN0aXZl
U2VsZWN0aW9uQW5jaG9ySW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZVNlbGVjdGlvbkFu
Y2hvckluZGV4OyB9CisgICAgaW50IGFjdGl2ZVNlbGVjdGlvbkVuZEluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9hY3RpdmVTZWxlY3Rpb25FbmRJbmRleDsgfQorICAgIGludCBhY3RpdmVTZWxlY3Rp
b25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlU2VsZWN0aW9uU3RhdGU7IH0KKyAgICB2
b2lkIHNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKGJvb2wgYWN0aXZlKSB7IG1fYWN0aXZlU2VsZWN0
aW9uU3RhdGUgPSBhY3RpdmU7IH0KKyNlbmRpZgogCisjaWYgRU5BQkxFKFdNTCkKK3Byb3RlY3Rl
ZDoKKyNlbHNlCiBwcml2YXRlOgotICAgIHZvaWQgcmVjYWxjTGlzdEl0ZW1zKGJvb2wgdXBkYXRl
U2VsZWN0ZWRTdGF0ZXMgPSB0cnVlKSBjb25zdDsKLSAgICB2b2lkIGNoZWNrTGlzdEl0ZW1zKCkg
Y29uc3Q7Ci0KKyNlbmRpZgogICAgIHZvaWQgZGVzZWxlY3RJdGVtcyhIVE1MT3B0aW9uRWxlbWVu
dCogZXhjbHVkZUVsZW1lbnQgPSAwKTsKICAgICBib29sIHVzZXNNZW51TGlzdCgpIGNvbnN0IHsg
cmV0dXJuICFtX211bHRpcGxlICYmIG1fc2l6ZSA8PSAxOyB9CisgICAgdm9pZCB0eXBlQWhlYWRG
aW5kKEtleWJvYXJkRXZlbnQqKTsKKyAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAgICAg
aW50IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KGludCBzdGFydEluZGV4KTsKICAgICBpbnQgcHJl
dmlvdXNTZWxlY3RhYmxlTGlzdEluZGV4KGludCBzdGFydEluZGV4KTsKKworcHJpdmF0ZToKKyAg
ICB2b2lkIHJlY2FsY0xpc3RJdGVtcyhib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVzID0gdHJ1ZSkg
Y29uc3Q7CisgICAgdm9pZCBjaGVja0xpc3RJdGVtcygpIGNvbnN0OworCiAgICAgdm9pZCBtZW51
TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKICAgICB2b2lkIGxpc3RCb3hEZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50Kik7Ci0gICAgdm9pZCB0eXBlQWhlYWRGaW5kKEtleWJvYXJkRXZl
bnQqKTsKLSAgICB2b2lkIHNhdmVMYXN0U2VsZWN0aW9uKCk7CiAKICAgICBtdXRhYmxlIFZlY3Rv
cjxIVE1MRWxlbWVudCo+IG1fbGlzdEl0ZW1zOwogICAgIFZlY3Rvcjxib29sPiBtX2NhY2hlZFN0
YXRlRm9yQWN0aXZlU2VsZWN0aW9uOwpJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAkocmV2aXNp
b24gMzgzNjEpCisrKyBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNiArMSw4IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBO
b2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKQEAgLTI2Nyw2ICsyNjksOSBAQCBGcmFtZUxvYWRlcjo6RnJhbWVMb2Fk
ZXIoRnJhbWUqIGZyYW1lLCBGCiAgICAgLCBtX2ZpbmlzaGVkUGFyc2luZ0R1cmluZ0xvd0JhbmR3
aWR0aERpc3BsYXkoZmFsc2UpCiAgICAgLCBtX25lZWRUb1N3aXRjaE91dExvd0JhbmR3aWR0aERp
c3BsYXkoZmFsc2UpCiAjZW5kaWYgCisjaWYgRU5BQkxFKFdNTCkKKyAgICAsIG1fZm9yY2VSZWxv
YWRXbWxEZWNrKGZhbHNlKQorI2VuZGlmCiB7CiB9CiAKQEAgLTEwMDAsNyArMTAwNSw3IEBAIHZv
aWQgRnJhbWVMb2FkZXI6OndyaXRlKGNvbnN0IGNoYXIqIHN0ciwKICAgICAgICAgICAgIHRva2Vu
aXplci0+d3JpdGVSYXdEYXRhKHN0ciwgbGVuKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICAKKwogICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAgIFNldHRpbmdzKiBzZXR0aW5ncyA9
IG1fZnJhbWUtPnNldHRpbmdzKCk7CiAgICAgICAgIG1fZGVjb2RlciA9IFRleHRSZXNvdXJjZURl
Y29kZXI6OmNyZWF0ZShtX3Jlc3BvbnNlTUlNRVR5cGUsIHNldHRpbmdzID8gc2V0dGluZ3MtPmRl
ZmF1bHRUZXh0RW5jb2RpbmdOYW1lKCkgOiBTdHJpbmcoKSk7CkBAIC0yODc3LDggKzI4ODIsMjEg
QEAgdm9pZCBGcmFtZUxvYWRlcjo6Y2xpZW50UmVkaXJlY3RlZChjb25zdAogICAgIG1fcXVpY2tS
ZWRpcmVjdENvbWluZyA9IGxvY2tIaXN0b3J5ICYmIG1fZG9jdW1lbnRMb2FkZXIgJiYgIWlzSmF2
YVNjcmlwdEZvcm1BY3Rpb247CiB9CiAKKyNpZiBFTkFCTEUoV01MKQordm9pZCBGcmFtZUxvYWRl
cjo6c2V0Rm9yY2VSZWxvYWRXbWxEZWNrKGJvb2wgcmVsb2FkKQoreworICAgIG1fZm9yY2VSZWxv
YWRXbWxEZWNrID0gcmVsb2FkOworfQorI2VuZGlmCisKIGJvb2wgRnJhbWVMb2FkZXI6OnNob3Vs
ZFJlbG9hZChjb25zdCBLVVJMJiBjdXJyZW50VVJMLCBjb25zdCBLVVJMJiBkZXN0aW5hdGlvblVS
TCkKIHsKKyNpZiBFTkFCTEUoV01MKQorICAgIC8vIEFzIGZvciBXTUwgZGVjaywgc29tZXRpbWVz
IGl0J3Mgc3VwcG9zZWQgdG8gYmUgcmVsb2FkZWQgZXZlbiBpZiB0aGUgc2FtZSBVUkwgd2l0aCBm
cmFnbWVudAorICAgIGlmIChtX2ZvcmNlUmVsb2FkV21sRGVjaykKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisjZW5kaWYKKwogICAgIC8vIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyB0aGUgcnVsZTog
IkRvbid0IHJlbG9hZCBpZiBuYXZpZ2F0aW5nIGJ5IGZyYWdtZW50IHdpdGhpbgogICAgIC8vIHRo
ZSBzYW1lIFVSTCwgYnV0IGRvIHJlbG9hZCBpZiBnb2luZyB0byBhIG5ldyBVUkwgb3IgdG8gdGhl
IHNhbWUgVVJMIHdpdGggbm8KICAgICAvLyBmcmFnbWVudCBpZGVudGlmaWVyIGF0IGFsbC4iCkBA
IC00MjkyLDcgKzQzMTAsMTEgQEAgdm9pZCBGcmFtZUxvYWRlcjo6bG9hZEl0ZW0oSGlzdG9yeUl0
ZW0qIAogICAgIC8vIGNoZWNrIGZvciBhbGwgdGhhdCBhcyBhbiBhZGRpdGlvbmFsIG9wdGltaXph
dGlvbi4KICAgICAvLyBXZSBhbHNvIGRvIG5vdCBkbyBhbmNob3Itc3R5bGUgbmF2aWdhdGlvbiBp
ZiB3ZSdyZSBwb3N0aW5nIGEgZm9ybS4KICAgICAKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmICgh
Zm9ybURhdGEgJiYgdXJsc01hdGNoSXRlbShpdGVtKSAmJiAhbV9mcmFtZS0+ZG9jdW1lbnQoKS0+
aXNXTUxEb2N1bWVudCgpKSB7CisjZWxzZQogICAgIGlmICghZm9ybURhdGEgJiYgdXJsc01hdGNo
SXRlbShpdGVtKSkgeworI2VuZGlmCiAgICAgICAgIC8vIE11c3QgZG8gdGhpcyBtYWludGVuYW5j
ZSBoZXJlLCBzaW5jZSB3ZSBkb24ndCBnbyB0aHJvdWdoIGEgcmVhbCBwYWdlIHJlbG9hZAogICAg
ICAgICBzYXZlU2Nyb2xsUG9zaXRpb25BbmRWaWV3U3RhdGVUb0l0ZW0obV9jdXJyZW50SGlzdG9y
eUl0ZW0uZ2V0KCkpOwogCkluZGV4OiBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmgJKHJldmlzaW9uIDM4MzYxKQor
KysgV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYxLDYgKzI2Myw5
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCBjbGllbnRSZWRpcmVjdENhbmNl
bGxlZE9yRmluaXNoZWQoYm9vbCBjYW5jZWxXaXRoTG9hZEluUHJvZ3Jlc3MpOwogICAgICAgICB2
b2lkIGNsaWVudFJlZGlyZWN0ZWQoY29uc3QgS1VSTCYsIGRvdWJsZSBkZWxheSwgZG91YmxlIGZp
cmVEYXRlLCBib29sIGxvY2tIaXN0b3J5LCBib29sIGlzSmF2YVNjcmlwdEZvcm1BY3Rpb24pOwog
ICAgICAgICBib29sIHNob3VsZFJlbG9hZChjb25zdCBLVVJMJiBjdXJyZW50VVJMLCBjb25zdCBL
VVJMJiBkZXN0aW5hdGlvblVSTCk7CisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgdm9pZCBzZXRG
b3JjZVJlbG9hZFdtbERlY2soYm9vbCk7CisjZW5kaWYKIAogICAgICAgICBib29sIGlzUXVpY2tS
ZWRpcmVjdENvbWluZygpIGNvbnN0OwogCkBAIC02ODIsNiArNjg3LDEwIEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIG1fcGVuZGluZ1NvdXJjZUluTG93QmFuZHdpZHRoRGlz
cGxheTsgICAgICAgIAogICAgICAgICBIYXNoU2V0PENhY2hlZFJlc291cmNlKj4gbV9leHRlcm5h
bFJlcXVlc3RzSW5Mb3dCYW5kd2lkdGhEaXNwbGF5OwogI2VuZGlmCisKKyNpZiBFTkFCTEUoV01M
KQorICAgICAgICBib29sIG1fZm9yY2VSZWxvYWRXbWxEZWNrOworI2VuZGlmCiAgICAgfTsKIAog
fQpJbmRleDogV2ViQ29yZS9sb2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCShyZXZpc2lvbiAzODM2
MSkKKysrIFdlYkNvcmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRv
cmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtNDMsNiArNDUsMTAgQEAKICNpbmNsdWRlICJSZXNvdXJjZUVycm9yLmgiCiAjaW5jbHVk
ZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2lmIEVOQUJMRShX
QlhNTCkKKyNpbmNsdWRlICJ3YnhtbC5oIgorI2luY2x1ZGUgIndieG1sX2NvbnYuaCIKKyNlbmRp
ZgogCiAvLyBGSVhNRTogTW9yZSB0aGF0IGlzIGluIGNvbW1vbiB3aXRoIFN1YnJlc291cmNlTG9h
ZGVyIHNob3VsZCBtb3ZlIHVwIGludG8gUmVzb3VyY2VMb2FkZXIuCiAKQEAgLTE0MSw2ICsxNDcs
MjggQEAgYm9vbCBNYWluUmVzb3VyY2VMb2FkZXI6OmlzUG9zdE9yUmVkaXJlYwogCiB2b2lkIE1h
aW5SZXNvdXJjZUxvYWRlcjo6YWRkRGF0YShjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoLCBi
b29sIGFsbEF0T25jZSkKIHsKKyNpZiBFTkFCTEUoV0JYTUwpCisgICAgaWYgKGxlbmd0aCAmJiBt
X3Jlc3BvbnNlLm1pbWVUeXBlKCkgPT0gImFwcGxpY2F0aW9uL3ZuZC53YXAud21sYyIpIHsKKyAg
ICAgICAgV0JfVVRJTlkgKndieG1sID0gcmVpbnRlcnByZXRfY2FzdDxXQl9VVElOWSo+KGNvbnN0
X2Nhc3Q8Y2hhcio+KGRhdGEpKTsKKyAgICAgICAgV0JfVUxPTkcgd2J4bWxfbGVuID0gbGVuZ3Ro
OworICAgICAgICBXQl9VTE9ORyB4bWxfbGVuID0gMDsKKyAgICAgICAgV0JfVVRJTlkgKnhtbCA9
IDA7CisgICAgICAgIFdCWE1MRXJyb3IgcmV0ID0gV0JYTUxfT0s7IAorICAgICAgICBXQlhNTEdl
blhNTFBhcmFtcyBwYXJhbXM7CisgCisgICAgICAgIC8vIEluaXQgRGVmYXVsdCBQYXJhbWV0ZXJz
CisgICAgICAgIHBhcmFtcy5sYW5nID0gV0JYTUxfTEFOR19VTktOT1dOOworICAgICAgICBwYXJh
bXMuZ2VuX3R5cGUgPSBXQlhNTF9HRU5fWE1MX0lOREVOVDsKKyAgICAgICAgcGFyYW1zLmluZGVu
dCA9IDE7CisgICAgICAgIHBhcmFtcy5rZWVwX2lnbm9yYWJsZV93cyA9IEZBTFNFOworIAorICAg
ICAgICByZXQgPSB3YnhtbF9jb252X3dieG1sMnhtbF93aXRobGVuKHdieG1sLCB3YnhtbF9sZW4s
ICZ4bWwsICZ4bWxfbGVuLCAmcGFyYW1zKTsKKyAgICAgICAgaWYgKHJldCAhPSBXQlhNTF9PSykK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hh
cio+KHhtbCk7CisgICAgICAgIGxlbmd0aCA9IHhtbF9sZW47CisgICAgfQorI2VuZGlmCiAgICAg
UmVzb3VyY2VMb2FkZXI6OmFkZERhdGEoZGF0YSwgbGVuZ3RoLCBhbGxBdE9uY2UpOwogICAgIGZy
YW1lTG9hZGVyKCktPnJlY2VpdmVkRGF0YShkYXRhLCBsZW5ndGgpOwogfQpJbmRleDogV2ViQ29y
ZS9wYWdlL1BhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGFnZS9QYWdlLmNwcAkocmV2
aXNpb24gMzgzNjEpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4IEFwcGxl
IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTU0LDYgKzU2LDkg
QEAKICNpbmNsdWRlIDxydW50aW1lL0pTTG9jay5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWRMZWFrQ291bnRlci5oPgorI2lmIEVOQUJMRShXTUwp
CisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjZW5kaWYKIAogI2lmIEVOQUJMRShET01fU1RP
UkFHRSkKICNpbmNsdWRlICJMb2NhbFN0b3JhZ2UuaCIKQEAgLTEyNyw2ICsxMzIsOSBAQCBQYWdl
OjpQYWdlKENocm9tZUNsaWVudCogY2hyb21lQ2xpZW50LCBDCiAgICAgLCBtX3BlbmRpbmdCZWZv
cmVVbmxvYWRFdmVudENvdW50KDApCiAgICAgLCBtX2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVs
YXkoLTEpCiAgICAgLCBtX2N1c3RvbUhUTUxUb2tlbml6ZXJDaHVua1NpemUoLTEpCisjaWYgRU5B
QkxFKFdNTCkKKyAgICAsIG1fd21sUGFnZVN0YXRlKDApCisjZW5kaWYKIHsKICAgICBpZiAoIWFs
bFBhZ2VzKSB7CiAgICAgICAgIGFsbFBhZ2VzID0gbmV3IEhhc2hTZXQ8UGFnZSo+OwpAQCAtNTc3
LDYgKzU4NSwxOCBAQCB2b2lkIFBhZ2U6OmNoYW5nZVBlbmRpbmdCZWZvcmVVbmxvYWRFdmVuCiAg
ICAgcmV0dXJuOyAKIH0KIAorI2lmIEVOQUJMRShXTUwpCit2b2lkIFBhZ2U6OnNldFdNTFBhZ2VT
dGF0ZShSZWZQdHI8V01MUGFnZVN0YXRlPiBwYWdlU3RhdGUpIAoreyAKKyAgICBtX3dtbFBhZ2VT
dGF0ZSA9IHBhZ2VTdGF0ZTsgCit9CisKK1dNTFBhZ2VTdGF0ZSogUGFnZTo6d21sUGFnZVN0YXRl
KCkgY29uc3QgCit7IAorICAgIHJldHVybiBtX3dtbFBhZ2VTdGF0ZS5nZXQoKTsgCit9CisjZW5k
aWYKKwogdm9pZCBQYWdlOjpzZXRDdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KGRvdWJsZSBj
dXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KQogewogICAgIGlmIChjdXN0b21IVE1MVG9rZW5p
emVyVGltZURlbGF5IDwgMCkgewpJbmRleDogV2ViQ29yZS9wYWdlL1BhZ2UuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5oCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvcGFn
ZS9QYWdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICogQ29weXJpZ2h0
IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTYzLDYgKzY1LDkgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIGNsYXNzIFNl
c3Npb25TdG9yYWdlOwogI2VuZGlmCiAgICAgY2xhc3MgU2V0dGluZ3M7CisjaWYgRU5BQkxFKFdN
TCkKKyAgICBjbGFzcyBXTUxQYWdlU3RhdGU7CisjZW5kaWYKIAogICAgIGVudW0gVGV4dENhc2VT
ZW5zaXRpdml0eSB7IFRleHRDYXNlU2Vuc2l0aXZlLCBUZXh0Q2FzZUluc2Vuc2l0aXZlIH07CiAg
ICAgZW51bSBGaW5kRGlyZWN0aW9uIHsgRmluZERpcmVjdGlvbkZvcndhcmQsIEZpbmREaXJlY3Rp
b25CYWNrd2FyZCB9OwpAQCAtMTczLDYgKzE3OCwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgc2V0U2Vzc2lvblN0b3JhZ2UoUGFzc1JlZlB0cjxTZXNzaW9uU3RvcmFnZT4p
OwogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQorICAgICAgICB2b2lkIHNldFdNTFBhZ2VTdGF0
ZShSZWZQdHI8V01MUGFnZVN0YXRlPik7CisgICAgICAgIFdNTFBhZ2VTdGF0ZSogd21sUGFnZVN0
YXRlKCkgY29uc3Q7CisjZW5kaWYKICAgICAgICAgdm9pZCBzZXRDdXN0b21IVE1MVG9rZW5pemVy
VGltZURlbGF5KGRvdWJsZSk7CiAgICAgICAgIGJvb2wgaGFzQ3VzdG9tSFRNTFRva2VuaXplclRp
bWVEZWxheSgpIGNvbnN0IHsgcmV0dXJuIG1fY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSAh
PSAtMTsgfQogICAgICAgICBkb3VibGUgY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSgpIGNv
bnN0IHsgQVNTRVJUKG1fY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSAhPSAtMSk7IHJldHVy
biBtX2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXk7IH0KQEAgLTIzNCw2ICsyNDMsMTAgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogI2lmIFBMQVRGT1JNKFdJTikgfHwgKFBMQVRGT1JNKFdYKSAm
JiBkZWZpbmVkKF9fV1hNU1dfXykpIHx8IChQTEFURk9STShRVCkgJiYgZGVmaW5lZChRX1dTX1dJ
TikpCiAgICAgICAgIHN0YXRpYyBISU5TVEFOQ0Ugc19pbnN0YW5jZUhhbmRsZTsKICNlbmRpZgor
CisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgUmVmUHRyPFdNTFBhZ2VTdGF0ZT4gbV93bWxQYWdl
U3RhdGU7CisjZW5kaWYKICAgICB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBX
ZWJDb3JlL3BsYXRmb3JtL01JTUVUeXBlUmVnaXN0cnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vTUlNRVR5cGVSZWdpc3RyeS5jcHAJKHJldmlzaW9uIDM4MzYxKQorKysgV2Vi
Q29yZS9wbGF0Zm9ybS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDggQXBwbGUgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTE4MSw2ICsx
ODMsMTIgQEAgc3RhdGljIHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZEphdmFTY3JpcAogc3RhdGlj
IHZvaWQgaW5pdGlhbGl6ZVN1cHBvcnRlZE5vbkltYWdlTWltZVR5cGVzKCkKIHsKICAgICBzdGF0
aWMgY29uc3QgY2hhciogdHlwZXNbXSA9IHsKKyNpZiBFTkFCTEUoV01MKQorICAgICAgICAidGV4
dC92bmQud2FwLndtbCIsCisjZW5kaWYKKyNpZiBFTkFCTEUoV0JYTUwpCisgICAgICAgICJhcHBs
aWNhdGlvbi92bmQud2FwLndtbGMiLAorI2VuZGlmCiAgICAgICAgICJ0ZXh0L2h0bWwiLAogICAg
ICAgICAidGV4dC94bWwiLAogICAgICAgICAidGV4dC94c2wiLApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9xdC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxh
dGZvcm0vcXQvTUlNRVR5cGVSZWdpc3RyeVF0LmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJD
b3JlL3BsYXRmb3JtL3F0L01JTUVUeXBlUmVnaXN0cnlRdC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIsNiArMiw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUu
b3JnPgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmln
aHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFu
ZC9vciBpdHMgc3Vic2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNjIsNiArNjMsMTIgQEAgc3RhdGljIGNvbnN0IEV4dGVuc2lvbk1h
cCBleHRlbnNpb25NYXAgWwogICAgIHsgInhwbSIsICJpbWFnZS94LXhwbSIgfSwKICAgICB7ICJ4
c2wiLCAidGV4dC94c2wiIH0sCiAgICAgeyAieGh0bWwiLCAiYXBwbGljYXRpb24veGh0bWwreG1s
IiB9LAorI2lmIEVOQUJMRShXTUwpCisgICAgeyAid21sIiwgInRleHQvdm5kLndhcC53bWwiIH0s
CisjZW5kaWYKKyNpZiBFTkFCTEUoV0JYTUwpCisgICAgeyAid21sYyIsICJhcHBsaWNhdGlvbi92
bmQud2FwLndtbGMiIH0sCisjZW5kaWYKICAgICB7IDAsIDAgfQogfTsKIApJbmRleDogV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJJbWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSw4IEBACiAgKiAgICAg
ICAgICAgKEMpIDIwMDYgQWxsYW4gU2FuZGZlbGQgSmVuc2VuIChrZGVAY2FyZXdvbGYuY29tKQog
ICogICAgICAgICAgIChDKSAyMDA2IFNhbXVlbCBXZWluaWcgKHNhbS53ZWluaWdAZ21haWwuY29t
KQogICogQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA4IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTMzOSw3ICszNDEsMTEg
QEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAg
aW50IHVzYWJsZVdpZHRoID0gY1dpZHRoIC0gMjsKICAgICAgICAgICAgIGludCB1c2FibGVIZWln
aHQgPSBjSGVpZ2h0IC0gMjsKIAorI2lmIEVOQUJMRShXTUwpCisgICAgICAgICAgICBpZiAoIWRv
Y3VtZW50KCktPmlzV01MRG9jdW1lbnQoKSAmJiBlcnJvck9jY3VycmVkKCkgJiYgIWltYWdlKCkt
PmlzTnVsbCgpICYmICh1c2FibGVXaWR0aCA+PSBpbWFnZSgpLT53aWR0aCgpKSAmJiAodXNhYmxl
SGVpZ2h0ID49IGltYWdlKCktPmhlaWdodCgpKSkgeworI2Vsc2UKICAgICAgICAgICAgIGlmIChl
cnJvck9jY3VycmVkKCkgJiYgIWltYWdlKCktPmlzTnVsbCgpICYmICh1c2FibGVXaWR0aCA+PSBp
bWFnZSgpLT53aWR0aCgpKSAmJiAodXNhYmxlSGVpZ2h0ID49IGltYWdlKCktPmhlaWdodCgpKSkg
eworI2VuZGlmCiAgICAgICAgICAgICAgICAgLy8gQ2VudGVyIHRoZSBlcnJvciBpbWFnZSwgYWNj
b3VudGluZyBmb3IgYm9yZGVyIGFuZCBwYWRkaW5nLgogICAgICAgICAgICAgICAgIGludCBjZW50
ZXJYID0gKHVzYWJsZVdpZHRoIC0gaW1hZ2UoKS0+d2lkdGgoKSkgLyAyOwogICAgICAgICAgICAg
ICAgIGlmIChjZW50ZXJYIDwgMCkKQEAgLTM3Miw2ICszNzgsMTAgQEAgdm9pZCBSZW5kZXJJbWFn
ZTo6cGFpbnRSZXBsYWNlZChQYWludEluZgogICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4
dC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQoYXgsIGF5ICsgYXNjZW50KSk7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0V2lkdGggJiYgY0hlaWdodCA+
PSBmb250LmhlaWdodCgpKQogICAgICAgICAgICAgICAgICAgICBjb250ZXh0LT5kcmF3VGV4dCh0
ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKKyNpZiBFTkFCTEUoV01MKQorICAg
ICAgICAgICAgICAgIGVsc2UgaWYgKGRvY3VtZW50KCktPmlzV01MRG9jdW1lbnQoKSAmJiB1c2Fi
bGVXaWR0aCA+PSB0ZXh0V2lkdGggLSAyICYmIGNIZWlnaHQgPj0gZm9udC5oZWlnaHQoKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQoYXgs
IGF5ICsgYXNjZW50KSk7CisjZW5kaWYKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0g
ZWxzZSBpZiAoaGFzSW1hZ2UoKSAmJiBjV2lkdGggPiAwICYmIGNIZWlnaHQgPiAwKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25166</attachid>
            <date>2008-11-14 02:30:17 -0800</date>
            <delta_ts>2008-12-10 16:02:06 -0800</delta_ts>
            <desc>WML module (v2)</desc>
            <filename>wml_dir_38361.patch</filename>
            <type>text/plain</type>
            <size>199797</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IHdtbC9XTUxBRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEFFbGVtZW50
LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxBRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MQUVs
ZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBXTUxOYW1lczsKKworV01MQUVsZW1lbnQ6OldNTEFFbGVtZW50KGNvbnN0IFF1YWxp
ZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpIAorICAgIDogV01MRWxlbWVudChuYW1lLCBk
b2MpCit7CisgICAgc2V0SXNMaW5rKHRydWUpOworfQorCitXTUxBRWxlbWVudDo6fldNTEFFbGVt
ZW50KCkKK3sKK30KKwordm9pZCBXTUxBRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCogZXZ0KSAKK3sKKyAgICBib29sIHNob3VsZEhhbmRsZSA9IGZhbHNlOworICAgIGlmIChldnQt
PnR5cGUoKSA9PSBldmVudE5hbWVzKCkuY2xpY2tFdmVudCkKKyAgICAgICAgc2hvdWxkSGFuZGxl
ID0gdHJ1ZTsKKyAgICBlbHNlIGlmICgoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXBy
ZXNzRXZlbnQpICYmIGV2dC0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZm9jdXNlZCgpKSB7CisgICAg
ICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZXZ0KS0+a2V5SWRl
bnRpZmllcigpOworICAgICAgICBpZiAoa2V5ID09ICJFbnRlciIpIAorICAgICAgICAgICAgc2hv
dWxkSGFuZGxlID0gdHJ1ZTsKKyAgICB9CisgCisgICAgaWYgKHNob3VsZEhhbmRsZSAmJiBpc0xp
bmsoKSkgeworICAgICAgICBTdHJpbmcgdXJsID0gcGFyc2VVUkwoZ2V0QXR0cmlidXRlKCJocmVm
IikpOworCisgICAgICAgIGRvY3VtZW50KCktPmZyYW1lKCktPmxvYWRlcigpLT51cmxTZWxlY3Rl
ZChkb2N1bWVudCgpLT5jb21wbGV0ZVVSTCh1cmwpLCBnZXRBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0
YXJnZXRBdHRyKSwgZXZ0LCBmYWxzZSwgdHJ1ZSk7CisKKyAgICAgICAgZXZ0LT5zZXREZWZhdWx0
SGFuZGxlZCgpOworICAgIH0gZWxzZQorICAgICAgICBFdmVudFRhcmdldE5vZGU6OmRlZmF1bHRF
dmVudEhhbmRsZXIoZXZ0KTsKK30KKworU3RyaW5nIFdNTEFFbGVtZW50Ojp0aXRsZSgpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGdldEF0dHJpYnV0ZSgidGl0bGUiKTsKK30KKworYm9vbCBXTUxBRWxl
bWVudDo6aXNLZXlib2FyZEZvY3VzYWJsZShLZXlib2FyZEV2ZW50KiBldmVudCkgY29uc3QKK3sK
KyAgICByZXR1cm4gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+ZXZlbnRIYW5kbGVyKCktPnRhYnNUb0xp
bmtzKGV2ZW50KTsKK30KKworYm9vbCBXTUxBRWxlbWVudDo6aXNGb2N1c2FibGUoKSBjb25zdAor
eworICAgIHJldHVybiB0cnVlOyAKK30KKworfQpJbmRleDogd21sL1dNTEFFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gd21sL1dNTEFFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MQUVs
ZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MQUVs
ZW1lbnRfaAorI2RlZmluZSBXTUxBRWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxFbGVtZW50Lmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MQUVsZW1lbnQgOiBwdWJsaWMgIFdN
TEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MQUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYs
IERvY3VtZW50Kik7CisgICAgfldNTEFFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9j
dXNhYmxlKEtleWJvYXJkRXZlbnQqKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaXNGb2N1c2Fi
bGUoKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyB0aXRsZSgpIGNvbnN0OworCit9OworCit9
CisKKyNlbmRpZgpJbmRleDogd21sL1dNTEFjY2Vzc0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdtbC9XTUxBY2Nlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxBY2Nlc3NF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAg
ICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXTUxBY2Nlc3NFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVs
cGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIK
KyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2lu
ZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTEFjY2Vzc0VsZW1lbnQ6OldNTEFjY2Vzc0VsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFdN
TEVsZW1lbnQodGFnTmFtZSwgZG9jKSAKK3sKK30KKworCitXTUxBY2Nlc3NFbGVtZW50Ojp+V01M
QWNjZXNzRWxlbWVudCgpIAoreworfQorCit2b2lkIFdNTEFjY2Vzc0VsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFt
ZSgpID09IGRvbWFpbkF0dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVS
ZWYoYXR0ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAgIEFTU0VSVChXTUxIZWxwZXI6OnRva2Vu
aXplcigpKTsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9y
KEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICAgICAgZG9j
dW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKS0+c2V0RGVja0FjY2Vzc0RvbWFpbihhdHRy
LT52YWx1ZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBwYXRoQXR0cikgewor
ICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1ZSgpKSkgewor
ICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZh
cmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5w
YWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zZXREZWNrQWNjZXNzUGF0aChhdHRyLT52YWx1ZSgpKTsK
KyAgICB9Cit9CisKK30KSW5kZXg6IHdtbC9XTUxBY2Nlc3NFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gd21sL1dNTEFjY2Vzc0VsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxBY2Nlc3NF
bGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTEFj
Y2Vzc0VsZW1lbnRfaAorI2RlZmluZSBXTUxBY2Nlc3NFbGVtZW50X2gKKworI2luY2x1ZGUgIldN
TEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKKwor
Y2xhc3MgV01MQWNjZXNzRWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50eworcHVibGljOgorICAg
IFdNTEFjY2Vzc0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQq
KTsKKyAgICB2aXJ0dWFsIH5XTUxBY2Nlc3NFbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHBh
cnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworfTsKKworfSAvL25hbWVzcGFj
ZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxBbmNob3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSB3bWwvV01MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MQW5jaG9y
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV01MQW5jaG9yRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NT
SGVscGVyLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRF
dmVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisK
K1dNTEFuY2hvckVsZW1lbnQ6OldNTEFuY2hvckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYg
bmFtZSwgRG9jdW1lbnQqIGRvYykgCisgICAgOiBIVE1MQW5jaG9yRWxlbWVudChuYW1lLCBkb2Mp
LCBtX3Rhc2soMCkKK3sKKyAgICBzZXRIcmVmKCIiKTsgICAgIC8vIHRoaXMgaXMgdGhlIGhhY2sg
c28gdGhhdCBhbmNob3IgcmVuZGVycyBsaWtlIGEgbGluaworfQorCitXTUxBbmNob3JFbGVtZW50
Ojp+V01MQW5jaG9yRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgV01MQW5jaG9yRWxlbWVudDo6ZGVm
YXVsdEV2ZW50SGFuZGxlcihFdmVudCogZSkgCit7CisgICAgYm9vbCBzaG91bGRIYW5kbGUgPSBm
YWxzZTsKKyAgICBpZiAoZS0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5jbGlja0V2ZW50KQorICAg
ICAgICBzaG91bGRIYW5kbGUgPSB0cnVlOworICAgIGVsc2UgaWYgKChlLT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLmtleWRvd25FdmVudCkgJiYgZS0+aXNLZXlib2FyZEV2ZW50KCkgJiYgZm9jdXNl
ZCgpKSB7CisgICAgICAgIFN0cmluZyBrZXkgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4o
ZSktPmtleUlkZW50aWZpZXIoKTsKKyAgICAgICAgaWYgKGtleSA9PSAiRW50ZXIiKQorICAgICAg
ICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoc2hvdWxkSGFuZGxl
ICYmIG1fdGFzaykgeworICAgICAgICBtX3Rhc2stPmV4ZWMoZSk7CisgICAgICAgIGUtPnNldERl
ZmF1bHRIYW5kbGVkKCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICBFdmVudFRhcmdldE5vZGU6
OmRlZmF1bHRFdmVudEhhbmRsZXIoZSk7Cit9CisKK3ZvaWQgV01MQW5jaG9yRWxlbWVudDo6cmVn
aXN0ZXJUYXNrKFdNTFRhc2tFbGVtZW50KiB0YXNrKQoreyAKKyAgICBtX3Rhc2sgPSB0YXNrOwor
fQorCit9CkluZGV4OiB3bWwvV01MQW5jaG9yRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9X
TUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MQW5jaG9yRWxlbWVudC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxBbmNob3JFbGVt
ZW50X2gKKyNkZWZpbmUgV01MQW5jaG9yRWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MQW5jaG9y
RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50
OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTEFuY2hvckVsZW1lbnQgOiBwdWJs
aWMgSFRNTEFuY2hvckVsZW1lbnQgeworcHVibGljOgorICAgIFdNTEFuY2hvckVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxBbmNo
b3JFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVu
dCopOworCisgICAgdm9pZCByZWdpc3RlclRhc2soV01MVGFza0VsZW1lbnQqKTsKKworcHJpdmF0
ZToKKworICAgIFdNTFRhc2tFbGVtZW50KiBtX3Rhc2s7CisKK307CisKK30gLy9uYW1lc3BhY2UK
KworI2VuZGlmCkluZGV4OiB3bWwvV01MQXR0cmlidXRlTmFtZXMuaW4KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
d21sL1dNTEF0dHJpYnV0ZU5hbWVzLmluCShyZXZpc2lvbiAwKQorKysgd21sL1dNTEF0dHJpYnV0
ZU5hbWVzLmluCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ0IEBACituYW1lc3BhY2U9IldNTCIK
K25hbWVzcGFjZVVSST0iIgorZ3VhcmRGYWN0b3J5V2l0aD0iRU5BQkxFKFdNTCkiCithdHRyc051
bGxOYW1lc3BhY2U9IjEiCisKK25hbWUKK2lkCit0aXRsZQorbmV3Y29udGV4dAorb3JkZXJlZAor
bGFiZWwKK29wdGlvbmFsCit0eXBlCitocmVmCit2YWx1ZQorb25lbnRlcmZvcndhcmQKK29uZW50
ZXJiYWNrd2FyZAorb250aW1lcgorc2VuZHJlZmVyZXIKK21ldGhvZAorY2FjaGUtY29udHJvbAor
ZW5jdHlwZQorYWNjZXB0LWNoYXJzZXQKK2luYW1lCitpdmFsdWUKK211bHRpcGxlCit0YWJpbmRl
eAorb25waWNrCitmb3JtYXQKK2VtcHR5b2sKK3NpemUKK21heGxlbmd0aAorYWx0CitzcmMKK2xv
Y2Fsc3JjCit2c3BhY2UKK2hzcGFjZQorYWxpZ24KK2hlaWdodAord2lkdGgKK2NvbHVtbnMKK21v
ZGUKK2RvbWFpbgorcGF0aApJbmRleDogd21sL1dNTENhcmRFbGVtZW50LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSB3bWwvV01MQ2FyZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgd21sL1dNTENhcmRF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiUmVu
ZGVyT2JqZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJUaW1lci5o
IgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnRGYWN0b3J5
LmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisj
aW5jbHVkZSAiV01MSW5wdXRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNs
dWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MVGFibGVFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50LmgiCisj
aW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAid3RmL1ZlY3Rvci5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MQ2FyZEVs
ZW1lbnQ6OldNTENhcmRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3Vt
ZW50ICpkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1faXNWaXNp
YmxlKGZhbHNlKQorICAgICwgbV9pc05ld0NvbnRleHQoZmFsc2UpCisgICAgLCBtX2lzT3JkZXJl
ZCh0cnVlKQorICAgICwgbV90ZW1wbGF0ZSgwKQorICAgICwgbV9ldm50SGFuZGxlcigwKQorICAg
ICwgbV9oYXNJbnRyaW5zaWNFdmVudChmYWxzZSkKKyAgICAsIG1fZXZ0VGltZXIoMCkKK3sKK30K
KworV01MQ2FyZEVsZW1lbnQ6On5XTUxDYXJkRWxlbWVudCgpIAoreworICAgIGlmIChtX2V2bnRI
YW5kbGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX2V2bnRIYW5kbGVyOworICAgICAgICBtX2V2bnRI
YW5kbGVyID0gMDsKKyAgICB9CisKKyAgICBtX3RlbXBsYXRlID0gMDsKKyAgICBtX2V2dFRpbWVy
ID0gMDsKK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFw
cGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIFdNTEludHJpbnNpY0V2ZW50VHlwZSBldHlwZSA9
IFVua25vd247CisKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IHRpdGxlQXR0cikKKyAgICAgICAg
bV90aXRsZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1
bWVudCgpKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lbnRlcmZvcndhcmRBdHRy
KQorICAgICAgICBldHlwZSA9IE9uRW50ZXJGb3J3YXJkOworICAgIGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBvbmVudGVyYmFja3dhcmRBdHRyKQorICAgICAgICBldHlwZSA9IE9uRW50ZXJCYWNr
d2FyZDsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb250aW1lckF0dHIpCisgICAgICAg
IGV0eXBlID0gT25UaW1lcjsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmV3Y29udGV4
dEF0dHIpCisgICAgICAgIG1faXNOZXdDb250ZXh0ID0gKGF0dHItPnZhbHVlKCkgPT0gInRydWUi
KSA/IHRydWUgOiBmYWxzZTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb3JkZXJlZEF0
dHIpCisgICAgICAgIG1faXNPcmRlcmVkID0gKGF0dHItPnZhbHVlKCkgPT0gInRydWUiKSA/IHRy
dWUgOiBmYWxzZTsKKyAgICAKKyAgICAvLyByZWdpc3RlciBpbnRyaW5zaWMgZXZlbnQgdG8gY2Fy
ZAorICAgIGlmIChldHlwZSAhPSBVbmtub3duKSB7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMg
PSAwOworICAgICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKCJnbyIsICJnbyIsICIiKTsKKyAgICAg
ICAgRWxlbWVudCogZ28gPSBXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFt
ZSwgZG9jdW1lbnQoKSwgZmFsc2UpOyAKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBXTUxIZWxwZXI6
OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOwor
ICAgICAgICBnby0+c2V0QXR0cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwgZWMpOworCisgICAg
ICAgIFdNTEludHJpbnNpY0V2ZW50IGV2OworICAgICAgICBldi50YXNrID0gc3RhdGljX2Nhc3Q8
V01MR29FbGVtZW50Kj4oZ28pOworICAgICAgICBldi50YXJnZXRVUkkgPSBocmVmOyAKKworICAg
ICAgICBpZiAoIW1fZXZudEhhbmRsZXIpCisgICAgICAgICAgICBtX2V2bnRIYW5kbGVyID0gbmV3
IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworCisgICAgICAgIHNldEhhc0ludHJpbnNpY0V2
ZW50KHRydWUpOworICAgICAgICBtX2V2bnRIYW5kbGVyLT5yZWdpc3RlckludHJpbnNpY0V2ZW50
KGV0eXBlLCBldik7CisgICAgfQorfQorCitSZW5kZXJPYmplY3QqIFdNTENhcmRFbGVtZW50Ojpj
cmVhdGVSZW5kZXJlcihSZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKiBzdHlsZSkgCit7CisgICAg
aWYgKCFtX2lzVmlzaWJsZSkKKyAgICAgICAgc3R5bGUtPnNldERpc3BsYXkoTk9ORSk7CisgICAg
CisgICAgcmV0dXJuIFJlbmRlck9iamVjdDo6Y3JlYXRlT2JqZWN0KHRoaXMsIHN0eWxlKTsKK30K
Kwordm9pZCBXTUxDYXJkRWxlbWVudDo6c2V0VmlzaWJpbGl0eShib29sIGlzVmlzaWJsZSkgCit7
CisgICAgbV9pc1Zpc2libGUgPSBpc1Zpc2libGU7Cit9CisKK2Jvb2wgV01MQ2FyZEVsZW1lbnQ6
OnZpc2libGUoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9pc1Zpc2libGU7Cit9CisKK2Jvb2wg
V01MQ2FyZEVsZW1lbnQ6OmlzTmV3Q29udGV4dCgpIGNvbnN0IAoreworICAgIHJldHVybiBtX2lz
TmV3Q29udGV4dDsKK30KKworYm9vbCBXTUxDYXJkRWxlbWVudDo6aXNPcmRlcmVkKCkgY29uc3Qg
Cit7CisgICAgcmV0dXJuIG1faXNPcmRlcmVkOworfQorCitTdHJpbmcgV01MQ2FyZEVsZW1lbnQ6
OnRpdGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90aXRsZTsgCit9CisKK3ZvaWQgV01MQ2Fy
ZEVsZW1lbnQ6OmJpbmRUZW1wbGF0ZShXTUxUZW1wbGF0ZUVsZW1lbnQqIHRlbXBsKSAKK3sKKyAg
ICBtX3RlbXBsYXRlID0gdGVtcGw7Cit9CisKK1dNTFRlbXBsYXRlRWxlbWVudCogV01MQ2FyZEVs
ZW1lbnQ6OnRlbXBsYXRlRWxlbWVudCgpCit7CisgICAgcmV0dXJuIG1fdGVtcGxhdGU7Cit9CisK
K1dNTEludHJpbnNpY0V2ZW50SGFuZGxlciogV01MQ2FyZEVsZW1lbnQ6OmV2ZW50SGFuZGxlcigp
Cit7CisgICAgaWYgKG1faGFzSW50cmluc2ljRXZlbnQgJiYgIW1fZXZudEhhbmRsZXIpICB7Cisg
ICAgICAgIG1fZXZudEhhbmRsZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7Cisg
ICAgfQorICAgIHJldHVybiBtX2V2bnRIYW5kbGVyOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50
OjpzZXRIYXNJbnRyaW5zaWNFdmVudChib29sIGhhcykKK3sKKyAgICBtX2hhc0ludHJpbnNpY0V2
ZW50ID0gaGFzOworfQorCitib29sIFdNTENhcmRFbGVtZW50OjpoYXNJbnRyaW5zaWNFdmVudCgp
Cit7CisgICAgcmV0dXJuIG1faGFzSW50cmluc2ljRXZlbnQ7Cit9CisKK3ZvaWQgV01MQ2FyZEVs
ZW1lbnQ6OnNldEludHJpbnNpY0V2ZW50VGltZXIoV01MVGltZXJFbGVtZW50KiB0aW1lcikKK3sK
KyAgICAvLyBvbmx5IG9uZSB0aW1lciBpcyBhbGxvd2VkIGluIGEgY2FyZCAKKyAgICBpZiAoIW1f
ZXZ0VGltZXIpCisgICAgICAgIG1fZXZ0VGltZXIgPSB0aW1lcjsKKyAgICBlbHNlIHsKKyAgICAg
ICAgbV9ldnRUaW1lciA9IDA7CisgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9y
dEVycm9yKE11bHRpVGltZXJFbGVtZW50c0Vycm9yKTsKKyAgICB9Cit9CisKK1dNTFRpbWVyRWxl
bWVudCogV01MQ2FyZEVsZW1lbnQ6OmV2ZW50VGltZXIoKQoreworICAgIHJldHVybiBtX2V2dFRp
bWVyOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpyZWdpc3RlckRvRWxlbWVudChXTUxEb0Vs
ZW1lbnQqIGUpCit7CisgICAgaWYgKGUpIHsKKyAgICAgICAgVmVjdG9yPFdNTERvRWxlbWVudCo+
OjppdGVyYXRvciBpdCA9IG1fZG9WZWNzLmJlZ2luKCk7CisgICAgICAgIFdNTERvRWxlbWVudCog
ZG9FbGVtID0gMDsKKyAgICAgICAgd2hpbGUgKGl0ICE9IG1fZG9WZWNzLmVuZCgpKSB7CisgICAg
ICAgICAgICBkb0VsZW0gPSBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPigqaXQrKyk7CisKKyAg
ICAgICAgICAgIGlmIChkb0VsZW0tPmRvTmFtZSgpID09IGUtPmRvTmFtZSgpKSB7CisgICAgICAg
ICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoU2FtZU5hbWVEb0Vs
ZW1lbnRzRXJyb3IpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBtX2RvVmVjcy5hcHBlbmQoZSk7CisgICAgICAgIGUtPnNldEFjdGl2
ZSh0cnVlKTsKKyAgICB9Cit9CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnNoYWRvd0RvRWxlbWVu
dElmTmVlZGVkKCkKK3sKKyAgICBpZiAoIW1fdGVtcGxhdGUpIAorICAgICAgICByZXR1cm47CisK
KyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gdGVtcGxEb05hbWVWZWNzID0gbV90ZW1wbGF0ZS0+
Z2V0RG9FbGVtZW50cygpOworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6aXRlcmF0b3IgY2Fy
ZEl0ID0gbV9kb1ZlY3MuYmVnaW4oKTsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj46Oml0ZXJh
dG9yIHRlbXBsSXQgPSB0ZW1wbERvTmFtZVZlY3MuYmVnaW4oKTsgCisKKyAgICBTdHJpbmcgdGVt
cGxEb05hbWU7CisgICAgU3RyaW5nIGNhcmREb05hbWU7CisgICAgV01MRG9FbGVtZW50KiB0ZW1w
bERvID0gMDsKKyAgICBmb3IgKDsgdGVtcGxJdCAhPSB0ZW1wbERvTmFtZVZlY3MuZW5kKCk7ICsr
dGVtcGxJdCkgeworICAgICAgICB0ZW1wbERvID0gKnRlbXBsSXQ7CisgICAgICAgIHRlbXBsRG9O
YW1lID0gdGVtcGxEby0+ZG9OYW1lKCk7CisgICAgICAgIGJvb2wgaXNBY3RpdmUgPSB0cnVlOwor
ICAgICAgICBmb3IgKGNhcmRJdCA9IG1fZG9WZWNzLmJlZ2luKCk7IGNhcmRJdCAhPSBtX2RvVmVj
cy5lbmQoKTsgKytjYXJkSXQpIHsKKyAgICAgICAgICAgIGlmICh0ZW1wbERvTmFtZSA9PSAoKmNh
cmRJdCktPmRvTmFtZSgpKSB7CisgICAgICAgICAgICAgICAgaXNBY3RpdmUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAg
IHRlbXBsRG8tPnNldEFjdGl2ZShpc0FjdGl2ZSk7CisgICAgfQorfQorCisKK3ZvaWQgV01MQ2Fy
ZEVsZW1lbnQ6OmhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVkZWQoKQoreworICAgIEFTU0VSVChk
b2N1bWVudCgpLT5mcmFtZSgpKTsKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKKyAg
ICBGcmFtZUxvYWRlciogbG9hZGVyID0gZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCk7Cisg
ICAgQVNTRVJUKGxvYWRlcik7CisgICAgV01MUGFnZVN0YXRlKiBwYWdlU3RhdGUgPSBkb2N1bWVu
dCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIEFTU0VSVChwYWdlU3RhdGUpOworICAg
IGludCBjdXJIaXN0TGVuID0gbG9hZGVyLT5nZXRIaXN0b3J5TGVuZ3RoKCk7CisgICAgaW50IG9s
ZEhpc3RMZW4gPSBwYWdlU3RhdGUtPmhpc3RvcnlMZW5ndGgoKTsKKworICAgIC8vIGNhbGN1bGF0
ZSB0aGUgZW50cnkgbWV0aG9kIG9mIGN1cnJlbnQgY2FyZCAKKyAgICBXTUxJbnRyaW5zaWNFdmVu
dFR5cGUgZXR5cGU7CisgICAgaWYgKG9sZEhpc3RMZW4gPiBjdXJIaXN0TGVuKQorICAgICAgICBl
dHlwZSA9IE9uRW50ZXJCYWNrd2FyZDsKKyAgICBlbHNlIGlmIChvbGRIaXN0TGVuIDwgY3VySGlz
dExlbikKKyAgICAgICAgZXR5cGUgPSBPbkVudGVyRm9yd2FyZDsKKyAgICBlbHNlCisgICAgICAg
IGV0eXBlID0gVW5rbm93bjsKKyAKKyAgICAvLyB1cGRhdGUgdGhlIGhoaXN0b3J5IGxlbmd0aCBp
biB0aGUgY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICBwYWdlU3RhdGUtPnNldEhpc3RvcnlM
ZW5ndGgoY3VySGlzdExlbik7CisgCisgICAgLy8gaGFuZGxlIGludHJpbnNpYyBldmVudCwgYW5k
IHNoYWRvdyB0aGUgZGVjay1sZXZlbCBldmVudCBpZiBuZWVkZWQKKyAgICBib29sIGhhc0ludHJp
bnNpY0V2ZW50ID0gIGZhbHNlOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogZXZIYW5k
bGVyID0gbV9ldm50SGFuZGxlcjsgCisgICAgaWYgKGV0eXBlICE9IFVua25vd24pIHsKKyAgICAg
ICAgaWYgKGV2SGFuZGxlciAmJiBldkhhbmRsZXItPmhhc0ludHJpbnNpY0V2ZW50KGV0eXBlKSkK
KyAgICAgICAgICAgIGhhc0ludHJpbnNpY0V2ZW50ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAo
bV90ZW1wbGF0ZSkgeworICAgICAgICAgICAgZXZIYW5kbGVyID0gbV90ZW1wbGF0ZS0+ZXZlbnRI
YW5kbGVyKCk7CisgICAgICAgICAgICBpZiAoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFzSW50
cmluc2ljRXZlbnQoZXR5cGUpKQorICAgICAgICAgICAgICAgIGhhc0ludHJpbnNpY0V2ZW50ID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICBpZiAoaGFzSW50cmluc2ljRXZlbnQpCisg
ICAgICAgIGV2SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2ZW50KGV0eXBlKTsKKyAgICBlbHNl
IHsKKyAgICAgICAgLy8gc3RhcnQgdGhlIHRpbWVyIGlmIGl0IGV4aXN0cyBpbiBjdXJyZW50IGNh
cmQKKyAgICAgICAgaWYgKG1fZXZ0VGltZXIpCisgICAgICAgICAgICBtX2V2dFRpbWVyLT5zdGFy
dCgpOworCisgICAgICAgIC8vaW5pdGlhbGlzZSBpbnB1dCBlbGVtZW50cyhlZy4gaW5wdXQsIHNl
bGVjdCwgZXRjKSBpbiB0aGlzIGNhcmQKKyAgICAgICAgTm9kZSogbm9kZSA9IHRoaXM7CisgICAg
ICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsKKyAgICAgICAg
ICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKGlucHV0VGFnKSkKKyAgICAgICAgICAgICAgICBzdGF0
aWNfY2FzdDxXTUxJbnB1dEVsZW1lbnQqPihub2RlKS0+aW5pdCgpOworICAgICAgICAgICAgZWxz
ZSBpZiAobm9kZS0+aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgICAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFdNTFNlbGVjdEVsZW1lbnQqPihub2RlKS0+c2VsZWN0SW5pdGlhbE9wdGlvbnMoKTsK
KyAgICAgICAgfQorCisgICAgfQorfQorCit2b2lkIFdNTENhcmRFbGVtZW50Ojp1cGRhdGVUYWJs
ZUVsZW1lbnQoKQoreworICAgIE5vZGUqIG5vZGUgPSB0aGlzOyAKKyAgICBXTUxUYWJsZUVsZW1l
bnQqIHRhYmxlID0gMDsKKyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2Rl
KCkpKSB7CisgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKEhUTUxOYW1lczo6dGFibGVUYWcp
KSB7CisgICAgICAgICAgICB0YWJsZSA9IHN0YXRpY19jYXN0PFdNTFRhYmxlRWxlbWVudCo+KG5v
ZGUpOworICAgICAgICAgICAgaWYgKHRhYmxlKQorICAgICAgICAgICAgICAgIHRhYmxlLT5pbml0
KCk7CisgICAgICAgIH0gZWxzZSBpZiAobm9kZS0+aGFzVGFnTmFtZShXTUxOYW1lczo6Y2FyZFRh
ZykpCisgICAgICAgICAgICBicmVhazsKKyAgICB9Cit9CisKK30KSW5kZXg6IHdtbC9XTUxDYXJk
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxDYXJkRWxlbWVudC5oCShyZXZpc2lvbiAw
KQorKysgd21sL1dNTENhcmRFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaWZuZGVmIFdNTENhcmRFbGVtZW50X2gKKyNkZWZpbmUgV01MQ2FyZEVsZW1lbnRfaAor
CisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBXTUxUYXNrRWxlbWVudDsKK2NsYXNzIFdNTFRpbWVyRWxlbWVudDsKK2NsYXNzIFdNTERv
RWxlbWVudDsKKworY2xhc3MgV01MQ2FyZEVsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudCB7Citw
dWJsaWM6CisgICAgV01MQ2FyZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CisgICAgdmlydHVhbCB+V01MQ2FyZEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBw
YXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIFJlbmRl
ck9iamVjdCogY3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOworCisg
ICAgdm9pZCBzZXRWaXNpYmlsaXR5KGJvb2wpOworICAgIGJvb2wgdmlzaWJsZSgpIGNvbnN0Owor
CisgICAgYm9vbCBpc05ld0NvbnRleHQoKSBjb25zdDsKKyAgICBib29sIGlzT3JkZXJlZCgpIGNv
bnN0OworCisgICAgU3RyaW5nIHRpdGxlKCkgY29uc3Q7CisKKyAgICB2b2lkIGJpbmRUZW1wbGF0
ZShXTUxUZW1wbGF0ZUVsZW1lbnQqKTsKKyAgICBXTUxUZW1wbGF0ZUVsZW1lbnQqIHRlbXBsYXRl
RWxlbWVudCgpOworCisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIo
KTsKKyAgICBib29sIGhhc0ludHJpbnNpY0V2ZW50KCk7CisgICAgdm9pZCBzZXRIYXNJbnRyaW5z
aWNFdmVudChib29sKTsKKyAgICB2b2lkIGhhbmRsZUludHJpbnNpY0V2ZW50SWZOZWVkZWQoKTsK
KworICAgIHZvaWQgc2V0SW50cmluc2ljRXZlbnRUaW1lcihXTUxUaW1lckVsZW1lbnQqKTsKKyAg
ICBXTUxUaW1lckVsZW1lbnQqIGV2ZW50VGltZXIoKTsKKworICAgIHZvaWQgcmVnaXN0ZXJEb0Vs
ZW1lbnQoV01MRG9FbGVtZW50Kik7CisgICAgdm9pZCBzaGFkb3dEb0VsZW1lbnRJZk5lZWRlZCgp
OworCisgICAgdm9pZCB1cGRhdGVUYWJsZUVsZW1lbnQoKTsKK3ByaXZhdGU6CisgICAgYm9vbCBt
X2lzVmlzaWJsZTsKKyAgICBTdHJpbmcgbV90aXRsZTsKKyAgICBib29sIG1faXNOZXdDb250ZXh0
OworICAgIGJvb2wgbV9pc09yZGVyZWQ7CisgICAgV01MVGVtcGxhdGVFbGVtZW50KiBtX3RlbXBs
YXRlOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogbV9ldm50SGFuZGxlcjsKKyAgICBi
b29sIG1faGFzSW50cmluc2ljRXZlbnQ7CisgICAgV01MVGltZXJFbGVtZW50KiBtX2V2dFRpbWVy
OyAKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gbV9kb1ZlY3M7Cit9OworCit9IC8vbmFtZXNw
YWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTERvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
d21sL1dNTERvRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MRG9FbGVtZW50LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAg
ICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAq
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBm
aWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJv
c3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiV01MRG9FbGVtZW50LmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNp
bmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVu
dC5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIK
KyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAi
SFRNTEJ1dHRvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNs
dWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisjaW5jbHVkZSAi
UGFnZS5oIgorI2luY2x1ZGUgIlJlbmRlckJ1dHRvbi5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxQ
YWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxQb3N0ZmllbGRFbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MVGltZXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9rZW5pemVyLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxEb0VsZW1l
bnQ6OldNTERvRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIERvY3VtZW50KiBkb2Ms
IEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxCdXR0b25FbGVtZW50KHRhZywgZG9j
LCBmb3JtKQorICAgICwgbV90YXNrKDApCisgICAgLCBtX2lzT3B0aW9uKGZhbHNlKQorICAgICwg
bV9pc05vb3AoZmFsc2UpCisgICAgLCBtX2lzQWN0aXZlKGZhbHNlKQoreworfQorCitXTUxEb0Vs
ZW1lbnQ6On5XTUxEb0VsZW1lbnQoKQoreworfQorCit2b2lkIFdNTERvRWxlbWVudDo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihFdmVudCogZSkgCit7CisgICAgaWYgKG1faXNPcHRpb24pCisgICAgICAg
IHJldHVybjsKKyAKKyAgICBib29sIHNob3VsZEhhbmRsZSA9IGZhbHNlOworICAgIGlmIChlLT50
eXBlKCkgPT0gZXZlbnROYW1lcygpLmNsaWNrRXZlbnQpCisgICAgICAgIHNob3VsZEhhbmRsZSA9
IHRydWU7CisgICAgZWxzZSBpZiAoZS0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5rZXlwcmVzc0V2
ZW50KQorICAgICAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kbGVy
KGUpOworICAgIGVsc2UgaWYgKGUtPnR5cGUoKSA9PSBldmVudE5hbWVzKCkua2V5ZG93bkV2ZW50
ICYmIGUtPmlzS2V5Ym9hcmRFdmVudCgpICYmIHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihl
KS0+a2V5SWRlbnRpZmllcigpID09ICJFbnRlciIpCisgICAgICAgIHNob3VsZEhhbmRsZSA9IHRy
dWU7CisgCisgICAgaWYgKHNob3VsZEhhbmRsZSkgeworIAorICAgICAgICBpZiAoKG1fdHlwZSA9
PSAiYWNjZXB0IikgfHwgKG1fdHlwZSA9PSAib3B0aW9ucyIpKSB7CisgICAgICAgICAgICBpZiAo
bV90YXNrKQorICAgICAgICAgICAgICAgIG1fdGFzay0+ZXhlYyhlKTsKKyAgICAgICAgfSBlbHNl
IGlmIChtX3R5cGUgPT0gInByZXYiKSB7CisgICAgICAgICAgICAvLyBzdG9wIHRoZSB0aW1lciBv
ZiB0aGUgY3VycmVudCBjYXJkIGlmIGl0IGlzIGFjdGl2ZQorICAgICAgICAgICAgUGFnZSogcGFn
ZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICAgICAgICAgIGlmICghcGFnZSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IHBhZ2Ut
PndtbFBhZ2VTdGF0ZSgpLT5hY3RpdmVDYXJkKCk7CisgICAgICAgICAgICBpZiAoY2FyZCAmJiBj
YXJkLT5ldmVudFRpbWVyKCkpCisgICAgICAgICAgICAgICAgY2FyZC0+ZXZlbnRUaW1lcigpLT5z
dG9wKCk7CisgCisgICAgICAgICAgICBwYWdlLT5nb0JhY2soKTsKKyAgICAgICAgfSBlbHNlIGlm
IChtX3R5cGUgPT0gInJlc2V0IikKKyAgICAgICAgICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkp
CisgICAgICAgICAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKS0+cmVz
ZXQoKTsKKyAgICAgICAgZWxzZSBpZiAobV90eXBlID09ICJkZWxldGUiKQorICAgICAgICAgICAg
Oy8vVE9ETworICAgIH0KKyAgICAgICAgICAgICAKK30KKwordm9pZCBXTUxEb0VsZW1lbnQ6Omlu
c2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIGZvciAoTm9kZSogcGFyZW50ID0gcGFy
ZW50Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAg
ICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKSB7CisgICAgICAgICAgICBz
dGF0aWNfY2FzdDxXTUxUZW1wbGF0ZUVsZW1lbnQqPihwYXJlbnQpLT5yZWdpc3RlckRvRWxlbWVu
dCh0aGlzKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKHBhcmVudC0+
aGFzVGFnTmFtZShjYXJkVGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8V01MQ2FyZEVs
ZW1lbnQqPihwYXJlbnQpLT5yZWdpc3RlckRvRWxlbWVudCh0aGlzKTsKKyAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICB9CisgICAgfQorfQorCitSZW5kZXJPYmplY3QqIFdNTERvRWxlbWVudDo6
Y3JlYXRlUmVuZGVyZXIoUmVuZGVyQXJlbmEqIHJhLCBSZW5kZXJTdHlsZSogcnMpIAoreworICAg
IGlmICghbV9pc0FjdGl2ZSB8fCBtX2lzT3B0aW9uIHx8IG1faXNOb29wKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIFJlbmRlckJ1dHRvbiogYnV0dG9uID0gbmV3IChyYSkgUmVuZGVyQnV0dG9u
KHRoaXMpOyAKKyAgICBycy0+c2V0QmFja2dyb3VuZENvbG9yKENvbG9yOjpsaWdodEdyYXkpOwor
ICAgIGJ1dHRvbi0+c2V0U3R5bGUocnMpOworICAgIGJ1dHRvbi0+c2V0VGV4dChtX2xhYmVsLmlz
RW1wdHkoKSA/IG1fbmFtZSA6IG1fbGFiZWwpOworICAgIHJldHVybiBidXR0b247Cit9CisKK3Zv
aWQgV01MRG9FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0
dHIpIAoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdHlwZUF0dHIpIHsKKyAgICAgICAgaWYg
KFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpIHsKKyAgICAgICAgICAg
IFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVy
ZW5jZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1f
dHlwZSA9IGF0dHItPnZhbHVlKCk7CisKKyAgICAgICAgaWYgKG1fbmFtZS5pc0VtcHR5KCkpCisg
ICAgICAgICAgICBtX25hbWUgPSBtX3R5cGU7CisKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBuYW1lQXR0cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihh
dHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVw
b3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIG1fbmFtZSA9IGF0dHItPnZhbHVlKCk7CisgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbGFiZWxBdHRyKQorICAgICAgICBtX2xhYmVsID0gV01M
SGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOworICAg
IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvcHRpb25hbEF0dHIpCisgICAgICAgIG1faXNPcHRp
b24gPSAoYXR0ci0+dmFsdWUoKSA9PSAidHJ1ZSIgPyB0cnVlIDogZmFsc2UpOworfQorCit2b2lk
IFdNTERvRWxlbWVudDo6cmVnaXN0ZXJUYXNrKFdNTFRhc2tFbGVtZW50KiB0YXNrKSAKK3sKKyAg
ICBtX3Rhc2sgPSB0YXNrOworfQorCit2b2lkIFdNTERvRWxlbWVudDo6c2V0Tm9vcChib29sIG5v
b3ApIAoreworICAgIG1faXNOb29wID0gbm9vcDsKK30KKworU3RyaW5nIFdNTERvRWxlbWVudDo6
ZG9OYW1lKCkgY29uc3QgCit7CisgICAgcmV0dXJuIG1fbmFtZTsKK30KKwordm9pZCBXTUxEb0Vs
ZW1lbnQ6OnNldEFjdGl2ZShib29sIGFjdGl2ZSkKK3sKKyAgICBtX2lzQWN0aXZlID0gYWN0aXZl
OworfQorIAorYm9vbCBXTUxEb0VsZW1lbnQ6OmlzQWN0aXZlKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gbV9pc0FjdGl2ZTsKK30KKworYm9vbCBXTUxEb0VsZW1lbnQ6OmlzS2V5Ym9hcmRGb2N1c2Fi
bGUoS2V5Ym9hcmRFdmVudCopIGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30KSW5k
ZXg6IHdtbC9XTUxEb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MRG9FbGVtZW50LmgJ
KHJldmlzaW9uIDApCisrKyB3bWwvV01MRG9FbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaWZuZGVmIFdNTERvRWxlbWVudF9oCisjZGVmaW5lIFdNTERvRWxlbWVu
dF9oCisKKyNpbmNsdWRlICJIVE1MQnV0dG9uRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEV2ZW50OworY2xhc3MgSFRNTEZvcm1FbGVtZW50OworY2xhc3MgV01MVGFz
a0VsZW1lbnQ7CisKK2NsYXNzIFdNTERvRWxlbWVudCA6IHB1YmxpYyBIVE1MQnV0dG9uRWxlbWVu
dCB7CitwdWJsaWM6CisgICAgV01MRG9FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKKyAgICB2aXJ0dWFsIH5XTUxEb0VsZW1lbnQo
KTsKKworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKik7IAorICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0
ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxl
cihFdmVudCopOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7
CisgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNv
bnN0OworICAgIHZvaWQgcmVnaXN0ZXJUYXNrKFdNTFRhc2tFbGVtZW50Kik7CisKKyAgICAvL3Jl
Y29yZCB0aGUgbm9vcCB0YXNrCisgICAgdm9pZCBzZXROb29wKGJvb2wpOworCisgICAgdm9pZCBz
ZXRBY3RpdmUoYm9vbCk7CisgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0OworICAgIFN0cmluZyBk
b05hbWUoKSBjb25zdDsKK3ByaXZhdGU6CisgICAgV01MVGFza0VsZW1lbnQqIG1fdGFzazsKKyAg
ICBTdHJpbmcgbV90eXBlOworICAgIFN0cmluZyBtX2xhYmVsOworICAgIFN0cmluZyBtX25hbWU7
CisgICAgYm9vbCBtX2lzT3B0aW9uOworICAgIGJvb2wgbV9pc05vb3A7CisgICAgYm9vbCBtX2lz
QWN0aXZlOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxEb2N1
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTERvY3VtZW50LmNwcAkocmV2aXNpb24gMCkK
KysrIHdtbC9XTUxEb2N1bWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MRG9jdW1lbnQuaCIKKworI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3Rh
dGUuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitXTUxEb2N1bWVudDo6V01MRG9jdW1lbnQoRnJhbWUqIGZyYW1lKQorICAgIDogRG9jdW1lbnQo
ZnJhbWUsIGZhbHNlKSAKK3sKKyAgICBjbGVhclhNTFZlcnNpb24oKTsKKworICAgIFBhZ2UqIHBh
Z2UgPSB0aGlzLT5wYWdlKCk7CisgICAgaWYgKHBhZ2UgJiYgIXBhZ2UtPndtbFBhZ2VTdGF0ZSgp
KSB7CisgICAgICAgIFJlZlB0cjxXTUxQYWdlU3RhdGU+IHBhZ2VTdGF0ZSA9IG5ldyBXTUxQYWdl
U3RhdGUocGFnZSk7CisgICAgICAgIHBhZ2UtPnNldFdNTFBhZ2VTdGF0ZShwYWdlU3RhdGUpOwor
ICAgIH0KK30KKworV01MRG9jdW1lbnQ6On5XTUxEb2N1bWVudCgpCit7Cit9CisKK1Rva2VuaXpl
ciAqV01MRG9jdW1lbnQ6OmNyZWF0ZVRva2VuaXplcigpIAoreworICAgIHJldHVybiBuZXcgV01M
VG9rZW5pemVyKHRoaXMpOworfQorCitpbmxpbmUgYm9vbCBXTUxEb2N1bWVudDo6aXNXTUxEb2N1
bWVudCgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gdHJ1ZTsgCit9CisKK30gLy9uYW1lc3BhY2UK
SW5kZXg6IHdtbC9XTUxEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxEb2N1bWVudC5o
CShyZXZpc2lvbiAwKQorKysgd21sL1dNTERvY3VtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaWZuZGVmIFdNTERvY3VtZW50X2gKKyNkZWZpbmUgV01MRG9jdW1lbnRf
aAorCisjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VDbGllbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTERvY3VtZW50IDogcHVibGlj
IERvY3VtZW50LCBwdWJsaWMgQ2FjaGVkUmVzb3VyY2VDbGllbnQgeworcHVibGljOgorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdNTERvY3VtZW50PiBjcmVhdGUoRnJhbWUqIGZyYW1lKQorICAgIHsK
KyAgICAgICAgcmV0dXJuIG5ldyBXTUxEb2N1bWVudChmcmFtZSk7CisgICAgfQorICAgIFdNTERv
Y3VtZW50KEZyYW1lKik7CisgICAgdmlydHVhbCB+V01MRG9jdW1lbnQoKTsKKworICAgIHZpcnR1
YWwgYm9vbCBpc1dNTERvY3VtZW50KCkgY29uc3Q7CisgICAgdmlydHVhbCBUb2tlbml6ZXIqIGNy
ZWF0ZVRva2VuaXplcigpOworfTsKKworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6
IHdtbC9XTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDApCisrKyB3bWwvV01MRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgor
CisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29y
ZHMuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIK
KyNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkhU
TUxCUkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJIVE1M
RWxlbWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJIVE1MRm9ybUVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAibWFy
a3VwLmgiCisjaW5jbHVkZSAiUmVuZGVyV29yZEJyZWFrLmgiCisjaW5jbHVkZSAiU2V0dGluZ3Mu
aCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCisjaW5jbHVk
ZSAiV01MRG9FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01M
TmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJYTUxUb2tlbml6
ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7
CisKK1dNTEVsZW1lbnQ6OldNTEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykKKyAgICA6IFN0eWxlZEVsZW1lbnQodGFnTmFtZSwgZG9jKQoreworfQor
CitXTUxFbGVtZW50Ojp+V01MRWxlbWVudCgpIAoreworfQorCit2b2lkIFdNTEVsZW1lbnQ6Omlu
c2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIGlmIChsb2NhbE5hbWUoKSA9PSAibm9v
cCIpIHsKKyAgICAgICAgZm9yIChOb2RlKiBwYXJlbnQgPSBwYXJlbnROb2RlKCk7IHBhcmVudDsg
cGFyZW50ID0gcGFyZW50LT5wYXJlbnROb2RlKCkpIHsKKyAgICAgICAgICAgIGlmIChwYXJlbnQt
Pmhhc1RhZ05hbWUoZG9UYWcpKSB7CisgICAgICAgICAgICAgICAgV01MRG9FbGVtZW50KiBkb0Vs
ZW10ID0gc3RhdGljX2Nhc3Q8V01MRG9FbGVtZW50Kj4ocGFyZW50KTsKKyAgICAgICAgICAgICAg
ICBpZiAoZG9FbGVtdC0+YXR0YWNoZWQoKSkgeworICAgICAgICAgICAgICAgICAgICBkb0VsZW10
LT5kZXRhY2goKTsKKyAgICAgICAgICAgICAgICAgICAgZG9FbGVtdC0+c2V0Tm9vcCh0cnVlKTsK
KyAgICAgICAgICAgICAgICAgICAgZG9FbGVtdC0+YXR0YWNoKCk7CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQt
Pmhhc1RhZ05hbWUoYW5jaG9yVGFnKSkKKyAgICAgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2Vu
aXplcigpLT5yZXBvcnRFcnJvcihXcm9uZ1Rhc2tJbkFuY2hvckVsZW1lbnRFcnJvcik7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK1JlbmRlck9iamVjdCogV01MRWxlbWVudDo6Y3JlYXRlUmVuZGVy
ZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSogc3R5bGUpIAoreworICAgIHJldHVybiBSZW5k
ZXJPYmplY3Q6OmNyZWF0ZU9iamVjdCh0aGlzLCBzdHlsZSk7Cit9CisKK2Jvb2wgV01MRWxlbWVu
dDo6aXNIVE1MRWxlbWVudCgpIGNvbnN0IAoreyAKKyAgICByZXR1cm4gdHJ1ZTsgCit9CisKK30K
SW5kZXg6IHdtbC9XTUxFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEVsZW1lbnQuaAko
cmV2aXNpb24gMCkKKysrIHdtbC9XTUxFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFdNTEVsZW1lbnRfaAorI2RlZmluZSBXTUxFbGVtZW50X2gKKwor
I2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiU3R5bGVkRWxlbWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFzcyBXTUxFbGVt
ZW50IDogcHVibGljIFN0eWxlZEVsZW1lbnQgeworcHVibGljOgorICAgIFdNTEVsZW1lbnQoY29u
c3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxF
bGVtZW50KCk7CisgICAgdmlydHVhbCBSZW5kZXJPYmplY3QqIGNyZWF0ZVJlbmRlcmVyKFJlbmRl
ckFyZW5hKiwgUmVuZGVyU3R5bGUqKTsKKyAgICB2aXJ0dWFsIGJvb2wgaXNIVE1MRWxlbWVudCgp
IGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCk7Cit9
OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTEVsZW1lbnRGYWN0b3J5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MRWxlbWVudEZhY3RvcnkuY3BwCShyZXZpc2lvbiAw
KQorKysgd21sL1dNTEVsZW1lbnRGYWN0b3J5LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3Rv
cnkuaCIKKworI2luY2x1ZGUgIkhUTUxCUkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MQnV0dG9u
RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZUNl
bGxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlUm93RWxlbWVudC5oIgorI2luY2x1ZGUg
IlNldHRpbmdzLmgiCisjaW5jbHVkZSAiV01MQWNjZXNzRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TEFFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MQW5jaG9yRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRG9FbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
R29FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25F
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MUEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQb3N0Zmll
bGRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MUHJldkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxS
ZWZyZXNoRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGFibGVFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MVGVtcGxhdGVFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGltZXJFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSW5wdXRFbGVtZW50
LmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCit1c2luZyBuYW1lc3BhY2UgV2ViQ29y
ZTsKK3VzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOjpXTUxOYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBX
ZWJDb3JlOjpIVE1MTmFtZXM7CisKK3R5cGVkZWYgRWxlbWVudCAqKCpDb25zdHJ1Y3RvckZ1bmMp
KERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKTsKK3R5cGVkZWYgV1RGOjpIYXNo
TWFwPEF0b21pY1N0cmluZ0ltcGwqLCBDb25zdHJ1Y3RvckZ1bmM+IEZ1bmN0aW9uTWFwOworCitz
dGF0aWMgRnVuY3Rpb25NYXAgKmdGdW5jdGlvbk1hcCA9IDA7CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworRWxlbWVudCAqY2FyZENvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRl
ZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MQ2FyZEVsZW1lbnQoY2FyZFRhZywgZG9j
KTsKK30KKworRWxlbWVudCAqd21sX2FDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTEFFbGVtZW50KFdNTE5hbWVzOjph
VGFnLCBkb2MpOworfQorCitFbGVtZW50ICppbWdDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBi
b29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTEltYWdlRWxlbWVudChI
VE1MTmFtZXM6OmltZ1RhZywgZG9jKTsKK30KKworRWxlbWVudCAqYnJDb25zdHJ1Y3RvcihEb2N1
bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxC
UkVsZW1lbnQoZG9jKTsKK30KKworRWxlbWVudCAqcENvbnN0cnVjdG9yKERvY3VtZW50ICpkb2Ms
IGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MUEVsZW1lbnQoZG9j
KTsKK30KKworRWxlbWVudCAqaW5wdXRDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNy
ZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTElucHV0RWxlbWVudChXTUxOYW1l
czo6aW5wdXRUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKmFuY2hvckNvbnN0cnVjdG9yKERvY3Vt
ZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MQW5j
aG9yRWxlbWVudChXTUxOYW1lczo6YW5jaG9yVGFnLCBkb2MpOworfQorCitFbGVtZW50ICpzZWxl
Y3RDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAg
ICByZXR1cm4gbmV3IFdNTFNlbGVjdEVsZW1lbnQoV01MTmFtZXM6OnNlbGVjdFRhZywgZG9jKTsK
K30KKworRWxlbWVudCAqb3B0aW9uQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVh
dGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxPcHRpb25FbGVtZW50KGRvYyk7Cit9
CisKK0VsZW1lbnQgKnByZXZDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFByZXZFbGVtZW50KGRvYyk7Cit9CisKK0Vs
ZW1lbnQgKmdvQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBXTUxHb0VsZW1lbnQoV01MTmFtZXM6OmdvVGFnLCBkb2MpOwor
fQorCitFbGVtZW50ICpwb3N0ZmllbGRDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNy
ZXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MUG9zdGZpZWxkRWxlbWVudChXTUxO
YW1lczo6cG9zdGZpZWxkVGFnLCBkb2MpOworfQorCitFbGVtZW50ICpzZXR2YXJDb25zdHJ1Y3Rv
cihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3
IFdNTFNldHZhckVsZW1lbnQoV01MTmFtZXM6OnNldHZhclRhZywgZG9jKTsKK30KKworRWxlbWVu
dCAqdGFibGVDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikK
K3sKKyAgICByZXR1cm4gbmV3IFdNTFRhYmxlRWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICp0
ckNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAg
IHJldHVybiBuZXcgSFRNTFRhYmxlUm93RWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICp0ZENv
bnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJl
dHVybiBuZXcgSFRNTFRhYmxlQ2VsbEVsZW1lbnQoSFRNTE5hbWVzOjp0ZFRhZyxkb2MpOworfQor
CitFbGVtZW50ICpkb0NvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFy
c2VyKQoreworICAgIHJldHVybiBuZXcgV01MRG9FbGVtZW50KGRvVGFnLCBkb2MpOworfQorCitF
bGVtZW50ICpyZWZyZXNoQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQ
YXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxSZWZyZXNoRWxlbWVudChyZWZyZXNoVGFnLCBk
b2MpOworfQorCitFbGVtZW50ICp0ZW1wbGF0ZUNvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MVGVtcGxhdGVFbGVtZW50
KHRlbXBsYXRlVGFnLCBkb2MpOworfQorCitFbGVtZW50ICp0aW1lckNvbnN0cnVjdG9yKERvY3Vt
ZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MVGlt
ZXJFbGVtZW50KHRpbWVyVGFnLCBkb2MpOworfQorCitFbGVtZW50ICphY2Nlc3NDb25zdHJ1Y3Rv
cihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3
IFdNTEFjY2Vzc0VsZW1lbnQoYWNjZXNzVGFnLCBkb2MpOworfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgY3JlYXRlRnVuY3Rpb25NYXBJZk5lY2Vzc2FyeSgpCit7CisgICAgaWYgKGdGdW5jdGlvbk1h
cCkKKyAgICAgICAgcmV0dXJuOworICAgIC8vIENyZWF0ZSB0aGUgdGFibGUuCisgICAgZ0Z1bmN0
aW9uTWFwID0gbmV3IEZ1bmN0aW9uTWFwOworICAgIAorICAgIC8vIFBvcHVsYXRlIGl0IHdpdGgg
Y29uc3RydWN0b3IgZnVuY3Rpb25zLgorICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpj
YXJkVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgY2FyZENvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rp
b25NYXAtPnNldChXTUxOYW1lczo6YVRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHdtbF9hQ29uc3Ry
dWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KEhUTUxOYW1lczo6aW1nVGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgaW1nQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KEhUTUxO
YW1lczo6YnJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBickNvbnN0cnVjdG9yKTsKKyAgICBnRnVu
Y3Rpb25NYXAtPnNldChXTUxOYW1lczo6cFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHBDb25zdHJ1
Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmlucHV0VGFnLmxvY2FsTmFt
ZSgpLmltcGwoKSwgaW5wdXRDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01M
TmFtZXM6OmFuY2hvclRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGFuY2hvckNvbnN0cnVjdG9yKTsK
KyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6c2VsZWN0VGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgc2VsZWN0Q29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVz
OjpvcHRpb25UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBvcHRpb25Db25zdHJ1Y3Rvcik7CisgICAg
Z0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnByZXZUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBw
cmV2Q29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpnb1RhZy5s
b2NhbE5hbWUoKS5pbXBsKCksIGdvQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0
KFdNTE5hbWVzOjpwb3N0ZmllbGRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBwb3N0ZmllbGRDb25z
dHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnNldHZhclRhZy5sb2Nh
bE5hbWUoKS5pbXBsKCksIHNldHZhckNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNl
dChXTUxOYW1lczo6dGFibGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCB0YWJsZUNvbnN0cnVjdG9y
KTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChIVE1MTmFtZXM6OnRyVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgdHJDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoSFRNTE5hbWVzOjp0
ZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRkQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1h
cC0+c2V0KFdNTE5hbWVzOjpyZWZyZXNoVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgcmVmcmVzaENv
bnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6ZG9UYWcubG9jYWxO
YW1lKCkuaW1wbCgpLCBkb0NvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxO
YW1lczo6dGVtcGxhdGVUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCB0ZW1wbGF0ZUNvbnN0cnVjdG9y
KTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6dGltZXJUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCB0aW1lckNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1l
czo6YWNjZXNzVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgYWNjZXNzQ29uc3RydWN0b3IpOworfQor
CitFbGVtZW50ICpXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChjb25zdCBRdWFs
aWZpZWROYW1lJiBxTmFtZSwgRG9jdW1lbnQqIGRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7
CisKKyAgICBXZWJDb3JlOjpXTUxOYW1lczo6aW5pdCgpOworICAgIC8vIERvbid0IG1ha2UgZWxl
bWVudHMgd2l0aG91dCBhIGRvY3VtZW50CisgICAgaWYgKCFkb2MpCisgICAgICAgIHJldHVybiAw
OworICAgIAorICAgIGNyZWF0ZUZ1bmN0aW9uTWFwSWZOZWNlc3NhcnkoKTsKKyAgICBDb25zdHJ1
Y3RvckZ1bmMgZnVuYyA9IGdGdW5jdGlvbk1hcC0+Z2V0KHFOYW1lLmxvY2FsTmFtZSgpLmltcGwo
KSk7CisgICAgaWYgKGZ1bmMpCisgICAgICAgIHJldHVybiBmdW5jKGRvYywgY3JlYXRlZEJ5UGFy
c2VyKTsKKyAgICAKKyAgICByZXR1cm4gbmV3IFdNTEVsZW1lbnQocU5hbWUsIGRvYyk7Cit9CisK
K30gLy8gbmFtZXNwYWNlCisKSW5kZXg6IHdtbC9XTUxFbGVtZW50RmFjdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHdtbC9XTUxFbGVtZW50RmFjdG9yeS5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTEVs
ZW1lbnRGYWN0b3J5LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVm
IFdNTEVsZW1lbnRGYWN0b3J5X2gKKyNkZWZpbmUgV01MRWxlbWVudEZhY3RvcnlfaAorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisgICAgY2xhc3MgRWxlbWVudDsKKyAgICBjbGFzcyBEb2N1bWVudDsK
KyAgICBjbGFzcyBRdWFsaWZpZWROYW1lOworICAgIGNsYXNzIEF0b21pY1N0cmluZzsKK30KKwor
bmFtZXNwYWNlIFdlYkNvcmUKK3sKKyAgICBjbGFzcyBXTUxFbGVtZW50OworCisgICAgLy8gVGhl
IGlkZWEgYmVoaW5kIHRoaXMgY2xhc3MgaXMgdGhhdCB0aGVyZSB3aWxsIGV2ZW50dWFsbHkgYmUg
YSBtYXBwaW5nIGZyb20gbmFtZXNwYWNlIFVSSXMgdG8gRWxlbWVudEZhY3RvcmllcyB0aGF0IGNh
biBkaXNwZW5zZQorICAgIC8vIGVsZW1lbnRzLiAgSW4gYSBjb21wb3VuZCBkb2N1bWVudCB3b3Js
ZCwgdGhlIGdlbmVyaWMgY3JlYXRlRWxlbWVudCBmdW5jdGlvbiAod2lsbCBlbmQgdXAgYmVpbmcg
dmlydHVhbCkgd2lsbCBiZSBjYWxsZWQuCisgICAgY2xhc3MgV01MRWxlbWVudEZhY3RvcnkKKyAg
ICB7CisgICAgcHVibGljOgorICAgICAgICBXZWJDb3JlOjpFbGVtZW50ICpjcmVhdGVFbGVtZW50
KGNvbnN0IFdlYkNvcmU6OlF1YWxpZmllZE5hbWUmIHFOYW1lLCBXZWJDb3JlOjpEb2N1bWVudCAq
ZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlciA9IHRydWUpOworICAgICAgICBzdGF0aWMgRWxlbWVu
dCAqY3JlYXRlV01MRWxlbWVudChjb25zdCBXZWJDb3JlOjpRdWFsaWZpZWROYW1lJiBxTmFtZSwg
V2ViQ29yZTo6RG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIgPSB0cnVlKTsKKyAg
ICB9OworfQorCisjZW5kaWYKKwpJbmRleDogd21sL1dNTEdvRWxlbWVudC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gd21sL1dNTEdvRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MR29FbGVt
ZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzODcgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIu
aCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRl
ICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFt
ZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5j
bHVkZSAiRm9ybURhdGEuaCIKKyNpbmNsdWRlICJGb3JtRGF0YUxpc3QuaCIKKyNpbmNsdWRlICJI
VE1MTmFtZXMuaCIKKyNpbmNsdWRlICJLVVJMLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5j
bHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTENh
cmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBl
ci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUG9zdGZpZWxkRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxl
bWVudC5oIgorI2luY2x1ZGUgIldNTFRpbWVyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRva2Vu
aXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1l
czsKKwordGVtcGxhdGU8Y2xhc3MgVCwgc2l6ZV90IG4+IHN0YXRpYyB2b2lkIHJlbW92ZUZyb21W
ZWN0b3IoVmVjdG9yPFQqLCBuPiAmIHZlYywgVCogaXRlbSkgCit7CisgICAgc2l6ZV90IHNpemUg
PSB2ZWMuc2l6ZSgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkKKyAg
ICAgICAgaWYgKHZlY1tpXSA9PSBpdGVtKSB7CisgICAgICAgICAgICB2ZWMucmVtb3ZlKGkpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KK30KKworc3RhdGljIGludCByYW5kb21OdW1i
ZXIoKQoreworICAgIHN0YXRpYyBib29sIHJhbmRvbVNlZWRlZCA9IGZhbHNlOworIAorI2lmIFBM
QVRGT1JNKERBUldJTikKKyAgICBpZiAoIXJhbmRvbVNlZWRlZCkgeworICAgICAgICBzcmFuZG9t
ZGV2KCk7CisgICAgICAgIHJhbmRvbVNlZWRlZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiBy
YW5kb20oKTsKKyNlbHNlCisgICAgaWYgKCFyYW5kb21TZWVkZWQpIHsKKyAgICAgICAgc3JhbmQo
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KHRpbWUoMCkpKTsKKyAgICAgICAgcmFuZG9tU2VlZGVkID0g
dHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHJhbmQoKTsKKyNlbmRpZgorfQorIAorLy8gUmV0dXJu
cyBhIDAtdGVybWluYXRlZCBDIHN0cmluZyBpbiB0aGUgdmVjdG9yLgorc3RhdGljIHZvaWQgZ2V0
VW5pcXVlQm91bmRhcnlTdHJpbmcoVmVjdG9yPGNoYXI+JiBib3VuZGFyeSkKK3sKKyAgICAvLyBU
aGUgUkZDIDIwNDYgc3BlYyBzYXlzIHRoZSBBbHBoYU51bWVyaWMgY2hhcmFjdGVycyBwbHVzIHRo
ZSBmb2xsb3dpbmcgY2hhcmFjdGVycworICAgIC8vIGFyZSBsZWdhbCBmb3IgYm91bmRhcmllczog
ICcoKStfLC0uLzo9PworICAgIC8vIEhvd2V2ZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzLCB0
aG91Z2ggbGVnYWwsIGNhdXNlIHNvbWUgc2l0ZXMgdG8gZmFpbDoKKyAgICAvLyAoKSwuLzo9Cisg
ICAgLy8gaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNTIKKyAgICBz
dGF0aWMgY29uc3QgY2hhciBBbHBoYU51bWVyaWNFbmNNYXBbNjRdID0KKyAgICB7CisgICAgICAw
eDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorICAgICAgMHg0
OSwgMHg0QSwgMHg0QiwgMHg0QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwKKyAgICAgIDB4NTEs
IDB4NTIsIDB4NTMsIDB4NTQsIDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCisgICAgICAweDU5LCAw
eDVBLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LAorICAgICAgMHg2NywgMHg2
OCwgMHg2OSwgMHg2QSwgMHg2QiwgMHg2QywgMHg2RCwgMHg2RSwKKyAgICAgIDB4NkYsIDB4NzAs
IDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsCisgICAgICAweDc3LCAweDc4LCAw
eDc5LCAweDdBLCAweDMwLCAweDMxLCAweDMyLCAweDMzLAorICAgICAgMHgzNCwgMHgzNSwgMHgz
NiwgMHgzNywgMHgzOCwgMHgzOSwgMHgyQiwgMHg0MQorICAgICAgLy8gRklYTUUgPHJkYXI6Ly9w
cm9ibGVtLzUyNTI1Nzc+IGdtYWlsIGRvZXMgbm90IGFjY2VwdCBsZWdhbCBjaGFyYWN0ZXJzIGlu
IHRoZSBmb3JtIGJvdW5kYXJ5CisgICAgICAvLyBBcyBzdGF0ZWQgYWJvdmUsIHNvbWUgbGVnYWwg
Y2hhcmFjdGVycyBjYXVzZSwgc2l0ZXMgdG8gZmFpbC4gU3BlY2lmaWNhbGx5CisgICAgICAvLyB0
aGUgLyBjaGFyYWN0ZXIgd2hpY2ggd2FzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgYWJvdmUg
YXJyYXkuIEkgaGF2ZQorICAgICAgLy8gcmVwbGFjZWQgdGhlIGxhc3QgY2hhcmFjdGVyIHdpdGgg
YW5vdGhlciBjaGFyYWN0ZXIgYWxyZWFkeSBpbiB0aGUgYXJyYXkKKyAgICAgIC8vIChub3RpY2Ug
dGhlIGZpcnN0IGFuZCBsYXN0IHZhbHVlcyBhcmUgYm90aCAweDQxLCBBKS4gSW5zdGVhZCBvZiBw
aWNraW5nCisgICAgICAvLyBhbm90aGVyIHVuaXF1ZSBsZWdhbCBjaGFyYWN0ZXIgZm9yIGJvdW5k
YXJ5IHN0cmluZ3MgdGhhdCwgYmVjYXVzZSBpdCBoYXMKKyAgICAgIC8vIG5ldmVyIGJlZW4gdGVz
dGVkLCBtYXkgb3IgbWF5IG5vdCBicmVhayBvdGhlciBzaXRlcywgSSBzaW1wbHkKKyAgICAgIC8v
IHJlcGxhY2VkIC8gd2l0aCBBLiAgVGhpcyBtZWFucyBBIGlzIHR3aWNlIGFzIGxpa2VseSB0byBv
Y2N1ciBpbiBvdXIgYm91bmRhcnkKKyAgICAgIC8vIHN0cmluZ3MgdGhhbiBhbnkgb3RoZXIgY2hh
cmFjdGVyIGJ1dCBJIHRoaW5rIHRoaXMgaXMgZmluZSBmb3IgdGhlIHRpbWUgYmVpbmcuCisgICAg
ICAvLyBUaGUgRklYTUUgaGVyZSBpcyBhYm91dCByZXN0b3JpbmcgdGhlIC8gY2hhcmFjdGVyIG9u
Y2UgdGhlIGFmb3JlbWVudGlvbmVkCisgICAgICAvLyByYWRhciBoYXMgYmVlbiByZXNvbHZlZC4K
KyAgICB9OworIAorICAgIC8vIFN0YXJ0IHdpdGggYW4gaW5mb3JtYXRpdmUgcHJlZml4LgorICAg
IGNvbnN0IGNoYXIgYm91bmRhcnlQcmVmaXhbXSA9ICItLS0tV2ViS2l0Rm9ybUJvdW5kYXJ5IjsK
KyAgICBib3VuZGFyeS5hcHBlbmQoYm91bmRhcnlQcmVmaXgsIHN0cmxlbihib3VuZGFyeVByZWZp
eCkpOworIAorICAgIC8vIEFwcGVuZCAxNiByYW5kb20gN2JpdCBhc2NpaSBBbHBoYU51bWVyaWMg
Y2hhcmFjdGVycy4KKyAgICBWZWN0b3I8Y2hhcj4gcmFuZG9tQnl0ZXM7CisgCisgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCA0OyArK2kpIHsKKyAgICAgICAgaW50IHJhbmRvbW5lc3MgPSByYW5kb21O
dW1iZXIoKTsKKyAgICAgICAgcmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFso
cmFuZG9tbmVzcyA+PiAyNCkgJiAweDNGXSk7CisgICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChB
bHBoYU51bWVyaWNFbmNNYXBbKHJhbmRvbW5lc3MgPj4gMTYpICYgMHgzRl0pOworICAgICAgICBy
YW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwWyhyYW5kb21uZXNzID4+IDgpICYg
MHgzRl0pOworICAgICAgICByYW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwW3Jh
bmRvbW5lc3MgJiAweDNGXSk7CisgICAgfQorIAorICAgIGJvdW5kYXJ5LmFwcGVuZChyYW5kb21C
eXRlcyk7CisgICAgYm91bmRhcnkuYXBwZW5kKDApOyAvLyBBZGQgYSAwIGF0IHRoZSBlbmQgc28g
d2UgY2FuIHVzZSB0aGlzIGFzIGEgQy1zdHlsZSBzdHJpbmcuCit9CisKK1dNTEdvRWxlbWVudDo6
V01MR29FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2Mp
CisgICAgOiBXTUxUYXNrRWxlbWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2VuY3R5cGUoImFw
cGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpIAorICAgICwgbV9tdWx0aXBhcnQoZmFs
c2UpCisgICAgLCBtX3Bvc3QoZmFsc2UpCit7Cit9CisKK1dNTEdvRWxlbWVudDo6fldNTEdvRWxl
bWVudCgpCit7Cit9CisKK3ZvaWQgV01MR29FbGVtZW50OjpyZWdpc3RlclBvc3RmaWVsZEVsZW1l
bnQoV01MUG9zdGZpZWxkRWxlbWVudCogZSkgCit7CisgICAgbV9wb3N0ZmllbGRzLmFwcGVuZChl
KTsKK30KKwordm9pZCBXTUxHb0VsZW1lbnQ6OnJlbW92ZVBvc3RmaWVsZEVsZW1lbnQoV01MUG9z
dGZpZWxkRWxlbWVudCogZSkgCit7CisgICAgcmVtb3ZlRnJvbVZlY3RvcihtX3Bvc3RmaWVsZHMs
IGUpOworfQorCitib29sIFdNTEdvRWxlbWVudDo6aGFzUG9zdGZpZWxkKCkgY29uc3QgCit7Cisg
ICAgcmV0dXJuICFtX3Bvc3RmaWVsZHMuaXNFbXB0eSgpOworfQorCit2b2lkIFdNTEdvRWxlbWVu
dDo6cGFyc2VFbmN0eXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZS5jb250
YWlucygibXVsdGlwYXJ0IiwgZmFsc2UpIHx8IHR5cGUuY29udGFpbnMoImZvcm0tZGF0YSIsIGZh
bHNlKSkgeworICAgICAgICBtX2VuY3R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7CisgICAg
ICAgIG1fbXVsdGlwYXJ0ID0gdHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2VuY3R5cGUg
PSAiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjsKKyAgICAgICAgbV9tdWx0aXBh
cnQgPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgV01MR29FbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUgKmF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBtZXRob2RBdHRyKSB7CisgICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1
ZSgpLCAicG9zdCIpKQorICAgICAgICAgICAgbV9wb3N0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBp
ZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYXR0ci0+dmFsdWUoKSwgImdldCIpKQorICAgICAgICAgICAg
bV9wb3N0ID0gZmFsc2U7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZW5jdHlwZUF0
dHIpIHsKKyAgICAgICAgU3RyaW5nIGVuY3R5cGUgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSk7CisgICAgICAgIHBhcnNlRW5jdHlwZShlbmN0
eXBlKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBhY2NlcHRfY2hhcnNldEF0dHIp
IHsKKyAgICAgICAgLy8gc3BhY2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcnNldHMgdGhlIHNlcnZl
cmEgYWNjZXB0cyAtIHNlZSByZmMyMDQ1CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1Zhcmlh
YmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXpl
cigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgbV9hY2NlcHRjaGFyc2V0ID0gYXR0ci0+
dmFsdWUoKTsKKyAgICB9IGVsc2UKKyAgICAgICAgV01MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cik7Cit9CisKK1Bhc3NSZWZQdHI8Rm9ybURhdGE+IFdNTEdvRWxlbWVudDo6Zm9y
bURhdGEoRnJhbWVMb2FkZXIqIGxvYWRlciwgY29uc3QgY2hhciogYm91bmRhcnkpIAoreworICAg
IFN0cmluZyBzdHIgPSBtX2FjY2VwdGNoYXJzZXQ7CisgICAgc3RyLnJlcGxhY2UoJywnLCAnICcp
OworCisgICAgVmVjdG9yPFN0cmluZz4gY2hhcnNldHM7CisgICAgc3RyLnNwbGl0KCcgJywgY2hh
cnNldHMpOworICAgIFRleHRFbmNvZGluZyBlbmNvZGluZzsKKyAgICBWZWN0b3I8U3RyaW5nPjo6
Y29uc3RfaXRlcmF0b3IgZW5kID0gY2hhcnNldHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3Ry
aW5nPjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBjaGFyc2V0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsr
aXQpCisgICAgICAgIGlmICgoZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKml0KSkuaXNWYWxpZCgp
KQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoIWVuY29kaW5nLmlzVmFsaWQoKSkgewor
ICAgICAgICBpZiAobG9hZGVyKQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2FkZXItPmVuY29k
aW5nKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVuY29kaW5nID0gTGF0aW4xRW5jb2Rp
bmcoKTsKKyAgICB9CisgCisgICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBGb3JtRGF0YTo6
Y3JlYXRlKCk7CisgICAgU3RyaW5nIGVuY19zdHJpbmc7CisgCisgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBtX3Bvc3RmaWVsZHMuc2l6ZSgpOyBpKyspIHsKKworICAgICAgICBTdHJp
bmcgbmFtZSA9IG1fcG9zdGZpZWxkc1tpXS0+bmFtZSgpOworICAgICAgICBTdHJpbmcgdmFsdWUg
PSBtX3Bvc3RmaWVsZHNbaV0tPnZhbHVlKCk7CisKKyAgICAgICAgaWYgKCFtX211bHRpcGFydCkg
eworICAgICAgICAgICAgaWYgKCFlbmNfc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAg
ICBlbmNfc3RyaW5nICs9ICImIjsKKworICAgICAgICAgICAgZW5jX3N0cmluZyArPSBlbmNvZGVX
aXRoVVJMRXNjYXBlU2VxdWVuY2VzKG1fcG9zdGZpZWxkc1tpXS0+bmFtZSgpKTsgCisgICAgICAg
ICAgICBlbmNfc3RyaW5nICs9ICI9IjsKKyAgICAgICAgICAgIGVuY19zdHJpbmcgKz0gZW5jb2Rl
V2l0aFVSTEVzY2FwZVNlcXVlbmNlcyhtX3Bvc3RmaWVsZHNbaV0tPnZhbHVlKCkpOyAKKyAgICAg
ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIFN0cmluZyBoc3RyKCItLSIpOworICAgICAgICAgICAg
aHN0ciArPSBib3VuZGFyeTsKKyAgICAgICAgICAgIGhzdHIgKz0gIlxyXG4iOworICAgICAgICAg
ICAgaHN0ciArPSAiQ29udGVudC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiIjsKKyAg
ICAgICAgICAgIGhzdHIgKz0gZW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VUNoYXIqPihuYW1lLmNoYXJhY3RlcnMoKSksIG5hbWUubGVuZ3RoKCksIFVSTEVuY29kZWRFbnRp
dGllc0ZvclVuZW5jb2RhYmxlcykuZGF0YSgpOyAKKyAgICAgICAgICAgIGhzdHIgKz0gIlwiIjsK
KyAgICAgICAgICAgIGhzdHIgKz0gIlxyXG5cclxuIjsKKworICAgICAgICAgICAgLy8gYXBwZW5k
IGJvZHkKKyAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5kRGF0YShoc3RyLmNoYXJhY3RlcnMoKSwg
aHN0ci5sZW5ndGgoKSk7CisKKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICAgICAgU3RyaW5nIGNzVmFsID0gZW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgVUNoYXIqPih2YWx1ZS5jaGFyYWN0ZXJzKCkpLCB2YWx1ZS5sZW5ndGgoKSwg
VVJMRW5jb2RlZEVudGl0aWVzRm9yVW5lbmNvZGFibGVzKS5kYXRhKCk7IAorICAgICAgICAgICAg
ICAgIHJlc3VsdC0+YXBwZW5kRGF0YShjc1ZhbC5jaGFyYWN0ZXJzKCksIGNzVmFsLmxlbmd0aCgp
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKCJcclxu
IiwgMik7CisKKyAgICAgICAgICAgIC8vIGFjY29yZGluZyB0byB0aGUgc2VjdGlvbiA5LjUuMSBv
ZiB3YXAtMTkxLXdtbC0yMDAwMDIxOS1hLnBkZiwgCisgICAgICAgICAgICAvLyBtYWtlIHRoZSBD
b250ZW50LXR5cGUgaGVhZGVyIGluY2x1ZGUgdGhlIGNoYXJzZXQgcGFyYW1ldGVyCisgICAgICAg
ICAgICBTdHJpbmcgc3RyID0gcmVzdWx0LT5mbGF0dGVuVG9TdHJpbmcoKTsKKyAgICAgICAgICAg
IGlmICghY2hhcmFjdGVyc0FyZUFsbEFTQ0lJKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgo
KSkpIHsKKyAgICAgICAgICAgICAgICBtX2VuY3R5cGUgKz0gIjsiOworICAgICAgICAgICAgICAg
IG1fZW5jdHlwZSArPSBlbmNvZGluZy5uYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9IC8vIGVuZCBvZiBmb3IgKC4uLgorCisgICAgaWYgKG1fbXVsdGlwYXJ0KSB7CisgICAg
ICAgIGVuY19zdHJpbmcgPSAiLS0iOworICAgICAgICBlbmNfc3RyaW5nICs9IGJvdW5kYXJ5Owor
ICAgICAgICBlbmNfc3RyaW5nICs9ICItLVxyXG4iOworCisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9lbmN0eXBlICs9ICI7IjsKKyAgICAgICAgbV9lbmN0eXBlICs9IGVuY29kaW5nLm5hbWUoKTsK
KyAgICB9CisgCisgICAgcmVzdWx0LT5hcHBlbmREYXRhKGVuY19zdHJpbmcuY2hhcmFjdGVycygp
LCBlbmNfc3RyaW5nLmxlbmd0aCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdN
TEdvRWxlbWVudDo6ZXhlYyhFdmVudCogZXZ0LCBTdHJpbmcgdXJpKSAKK3sKKyAgICBEb2N1bWVu
dCogZG9jID0gZG9jdW1lbnQoKTsKKyAgICBBU1NFUlQoZG9jKTsKKyAgICBBU1NFUlQoZG9jLT5m
cmFtZSgpKTsKKyAgICBGcmFtZUxvYWRlciogbG9hZGVyPSBkb2MtPmZyYW1lKCktPmxvYWRlcigp
OworICAgIFBhZ2UqIHBhZ2UgPSBkb2MtPnBhZ2UoKTsKKyAgICBpZiAoIWxvYWRlciB8fCAhcGFn
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gY29udmVydCB2YXJpYWJsZSBuYW1lcyBhbmQg
dmFsdWVzIG9mIHNldHZhciBlbGVtZW50IGlmIG5lY2Vzc2FyeQorICAgIFZhcmlhYmxlTWFwIG1f
dmFyczsKKyAgICBpZiAoaGFzU2V0dmFyKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQg
aSA9IDA7IGkgPCBtX3NldHZhcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9z
ZXR2YXJzW2ldLT5uYW1lKCkuaXNFbXB0eSgpKSAKKyAgICAgICAgICAgICAgICBtX3ZhcnMuc2V0
KG1fc2V0dmFyc1tpXS0+bmFtZSgpLCBtX3NldHZhcnNbaV0tPnZhbHVlKCkpOworICAgICAgICB9
CisgICAgfSAKKworICAgIFdNTFBhZ2VTdGF0ZSogcGFnZVN0YXRlID0gcGFnZS0+d21sUGFnZVN0
YXRlKCk7CisgICAgLy8gdXBkYXRlIGJyb3dzZXIgY29udGV4dCAKKyAgICBpZiAoIW1fdmFycy5p
c0VtcHR5KCkpCisgICAgICAgIHBhZ2VTdGF0ZS0+c3RvcmVWYXJpYWJsZXMobV92YXJzKTsKKyAK
KworICAgIC8vIHN1YnN0aXR1dGUgdGFyZ2V0IHVyaSBhdHRyaWJ1dGUgdmFsdWUKKyAgICBpZiAo
dXJpLmlzRW1wdHkoKSkKKyAgICAgICAgdXJpID0gZ2V0QXR0cmlidXRlKCJocmVmIik7CisgICAg
dXJpID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHVyaSwgZG9jLCAiZXNjYXBlIik7CisK
KyAgICAvLyBzdG9wIHRoZSB0aW1lciBvZiB0aGUgY3VycmVudCBjYXJkIGlmIGl0IGlzIGFjdGl2
ZQorICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gcGFnZVN0YXRlLT5hY3RpdmVDYXJkKCk7Cisg
ICAgaWYgKGNhcmQgJiYgY2FyZC0+ZXZlbnRUaW1lcigpKQorICAgICAgICBjYXJkLT5ldmVudFRp
bWVyKCktPnN0b3AoKTsKKworICAgIC8vIGlmIG5ld2NvbnRleHQgYXR0cmlidXRlIG9mIGRlc3Qg
Y2FyZCBpcyB0cnVlLCByZWluaXRpYWxpemUgdGhlIGNvbnRleHQKKyAgICBjYXJkID0gV01MSGVs
cGVyOjpzZXREZXN0aW5hdGlvbkNhcmQoZG9jdW1lbnQoKSwgdXJpKTsKKyAgICBpZiAoY2FyZCAm
JiBjYXJkLT5pc05ld0NvbnRleHQoKSkKKyAgICAgICAgcGFnZVN0YXRlLT5yZXNldCgpOworCisg
ICAgLy8gcHJlcGFyZSBmb3IgbG9hZGluZyB0aGUgZGVzdGluYXRpb24gVVJMCisgICAgUGFzc1Jl
ZlB0cjxGb3JtRGF0YT4gZGF0YSA9IDA7CisgICAgS1VSTCB1cmwgPSBkb2MtPmNvbXBsZXRlVVJM
KHVyaS5pc0VtcHR5KCkgPyAiIiA6IHVyaSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcSh1cmwp
OworICAgIEtVUkwgZG9jVXJsID0gZG9jLT5jb21wbGV0ZVVSTChkb2MtPmRvY3VtZW50VVJJKCkp
OworICAgIGJvb2wgaW5TYW1lRGVjayA9IGRvY1VybC5wYXRoKCkgPT0gdXJsLnBhdGgoKTsgCisK
KworICAgIFN0cmluZyBzZW5kcmVmZXJlciA9IGdldEF0dHJpYnV0ZSgic2VuZHJlZmVyZXIiKTsK
KyAgICBpZiAoc2VuZHJlZmVyZXIgPT0gInRydWUiKSB7CisgICAgICAgIHNlbmRyZWZlcmVyID0g
dXJpOworICAgICAgICByZXEuc2V0SFRUUFJlZmVycmVyKHNlbmRyZWZlcmVyKTsKKyAgICB9CisK
KyAgICBTdHJpbmcgY2FjaGVDdHJsID0gZ2V0QXR0cmlidXRlKCJjYWNoZV9jb250cm9sIik7CisK
KyAgIGlmIChtX3Bvc3QpIHsgLy8gUE9TVAorCisgICAgICAgaWYgKGluU2FtZURlY2sgJiYgKGNh
Y2hlQ3RybCAhPSAibm8tY2FjaGUiKSkgLy9pZ25vcmUgYWxsIHBvc3RmaWVsZCBlbGVtZW50cwor
ICAgICAgICAgICAgcmVxLnNldENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YURvbnRMb2FkKTsK
KyAgICAgICBlbHNlIHsKKworICAgICAgICAgICBpZiAobV9tdWx0aXBhcnQpIHsgLy8gbXVsdGlw
YXJ0L2Zvcm0tZGF0YQorICAgICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKKyAg
ICAgICAgICAgICAgICBnZXRVbmlxdWVCb3VuZGFyeVN0cmluZyhib3VuZGFyeSk7CisgICAgICAg
ICAgICAgICAgZGF0YSA9IGZvcm1EYXRhKGxvYWRlciwgYm91bmRhcnkuZGF0YSgpKTsKKyAgICAg
ICAgICAgICAgICByZXEuc2V0SFRUUENvbnRlbnRUeXBlKG1fZW5jdHlwZSArICI7IGJvdW5kYXJ5
PSIgKyBib3VuZGFyeS5kYXRhKCkpOworICAgICAgICAgICB9IGVsc2UgeyAgLy90ZXh0L3BsYWlu
IG9yIGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZAorICAgICAgICAgICAgICAgIGRh
dGEgPSBmb3JtRGF0YShsb2FkZXIsIDApOworICAgICAgICAgICAgICAgIHJlcS5zZXRIVFRQQ29u
dGVudFR5cGUobV9lbmN0eXBlKTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIHJlcS5zZXRI
VFRQQm9keShkYXRhLmdldCgpKTsKKyAgICAgICB9CisKKyAgICAgICByZXEuc2V0SFRUUE1ldGhv
ZCgiUE9TVCIpOworCisgICB9IGVsc2UgeyAgIC8vIEdFVAorCisgICAgICAgIGlmIChtX211bHRp
cGFydCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoaW5TYW1lRGVjaykKKyAg
ICAgICAgICAgIHJlcS5zZXRDYWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgU3RyaW5nIHN0cjsKKyAgICAgICAgICAgIGZvciAo
dW5zaWduZWQgaW50IGkgPSAwOyBpIDwgbV9wb3N0ZmllbGRzLnNpemUoKTsgaSsrKSB7CisgICAg
ICAgICAgICAgICAgaWYgKCFzdHIuaXNFbXB0eSgpKSAKKyAgICAgICAgICAgICAgICAgICAgc3Ry
ICs9ICImIjsgICAgICAgIAorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0ciAr
PSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKG1fcG9zdGZpZWxkc1tpXS0+bmFtZSgpKTsK
KyAgICAgICAgICAgICAgICBzdHIgKz0gIj0iOworICAgICAgICAgICAgICAgIHN0ciArPSBlbmNv
ZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKG1fcG9zdGZpZWxkc1tpXS0+dmFsdWUoKSk7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHVybC5zZXRRdWVyeShzdHIpOworICAgICAgICAgICAg
cmVxLnNldFVSTCh1cmwpOworICAgICAgICB9CisKKyAgICAgICAgcmVxLnNldEhUVFBNZXRob2Qo
IkdFVCIpOworCisgICB9CisKKyAgICAvLyBzZXQgSFRUUCBjYWNoZS1jb250cm9sIGhlYWRlciBp
ZiBuZWVkZWQKKyAgICBpZiAoIWNhY2hlQ3RybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVxLnNl
dEhUVFBIZWFkZXJGaWVsZCgiY2FjaGUtY29udHJvbCIsIGNhY2hlQ3RybCk7CisgICAgICAgIGlm
IChjYWNoZUN0cmwgPT0gIm5vLWNhY2hlIikKKyAgICAgICAgICAgIHJlcS5zZXRDYWNoZVBvbGlj
eShSZWxvYWRJZ25vcmluZ0NhY2hlRGF0YSk7CisgICAgfQorCisgICAgbG9hZGVyLT5sb2FkKHJl
cSk7Cit9CisKK30KKwpJbmRleDogd21sL1dNTEdvRWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdt
bC9XTUxHb0VsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxHb0VsZW1lbnQuaAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MR29FbGVtZW50X2gKKyNk
ZWZpbmUgV01MR29FbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgiCisjaW5j
bHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBF
dmVudDsKK2NsYXNzIEZvcm1EYXRhOworY2xhc3MgRnJhbWVMb2FkZXI7CitjbGFzcyBXTUxDYXJk
RWxlbWVudDsKK2NsYXNzIFdNTFBvc3RmaWVsZEVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAg
ICAgIAorY2xhc3MgV01MR29FbGVtZW50IDogcHVibGljIFdNTFRhc2tFbGVtZW50IHsKK3B1Ymxp
YzoKKyAgICBXTUxHb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1l
bnQqIGRvYyk7CisgICAgdmlydHVhbCB+V01MR29FbGVtZW50KCk7CisgIAorICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZXhlYyhFdmVudCosIFN0cmluZyk7CisKKyAgICB2b2lkIHJlZ2lzdGVyUG9zdGZpZWxk
RWxlbWVudChXTUxQb3N0ZmllbGRFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVQb3N0ZmllbGRF
bGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqKTsKKyAgICBib29sIGhhc1Bvc3RmaWVsZCgpIGNv
bnN0OworCitwcml2YXRlOgorICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRhKEZyYW1l
TG9hZGVyKiwgY29uc3QgY2hhciopOworICAgIHZvaWQgcGFyc2VFbmN0eXBlKGNvbnN0IFN0cmlu
ZyYpOworCisgICAgVmVjdG9yPFdNTFBvc3RmaWVsZEVsZW1lbnQqPiBtX3Bvc3RmaWVsZHM7Cisg
ICAgU3RyaW5nIG1fZW5jdHlwZTsKKyAgICBTdHJpbmcgbV9hY2NlcHRjaGFyc2V0OworICAgIGJv
b2wgbV9tdWx0aXBhcnQgOiAxOworICAgIGJvb2wgbV9wb3N0IDogMTsKK307CisKK30gLy9uYW1l
c3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MSGVscGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3
bWwvV01MSGVscGVyLmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxIZWxwZXIuY3BwCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDMyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9h
ZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgorI2lu
Y2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIldNTENhcmRF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIu
aCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2lu
Y2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNp
bmNsdWRlICJ3dGYvQVNDSUlDVHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dNTFRv
a2VuaXplciogV01MSGVscGVyOjpzX3Rva2VuaXplciA9IDA7CisKK1dNTFRva2VuaXplciogV01M
SGVscGVyOjp0b2tlbml6ZXIoKQoreworICAgIHJldHVybiBzX3Rva2VuaXplcjsKK30KKwordm9p
ZCBXTUxIZWxwZXI6OnNldFRva2VuaXplcihXTUxUb2tlbml6ZXIqIHRva2VuaXplcikKK3sKKyAg
ICBzX3Rva2VuaXplciA9IHRva2VuaXplcjsKK30KKworc3RhdGljIGJvb2wgaXNWYWxpZEZvclZh
cmlhYmxlKFVDaGFyIGNoKSAKK3sKKyAgICBjaGFyIGEgPSBzdGF0aWNfY2FzdDxjaGFyPihjaCk7
CisgICAgcmV0dXJuIChXVEY6OmlzQVNDSUlBbHBoYShhKSB8fCBXVEY6OmlzQVNDSUlEaWdpdChh
KSB8fCBhID09ICdfJyk7Cit9CisgCitib29sIFdNTEhlbHBlcjo6aXNWYWxpZFZhcmlhYmxlTmFt
ZShjb25zdCBTdHJpbmcmIHZhck5hbWUsIGJvb2wgaXNWYXJSZWYpCit7CisgICAgYm9vbCBpc1Zh
bGlkID0gZmFsc2U7CisgICAgVUNoYXIgY2ggPSB2YXJOYW1lWzBdOworCisgICAgU3RyaW5nIHJl
ZkNoYXJzID0gIigpOiQiOworICAgIGlmIChpc1ZhclJlZikKKyAgICAgICAgaXNWYWxpZCA9ICgo
cmVmQ2hhcnMuZmluZChjaCkgIT0gLTEpIHx8IGNoID09ICdfJyB8fCBXVEY6OmlzQVNDSUlBbHBo
YShzdGF0aWNfY2FzdDxjaGFyPihjaCkpKTsKKyAgICBlbHNlCisgICAgICAgIGlzVmFsaWQgPSAo
Y2ggPT0gJ18nIHx8IFdURjo6aXNBU0NJSUFscGhhKHN0YXRpY19jYXN0PGNoYXI+KGNoKSkpOwor
CisgICAgaWYgKGlzVmFsaWQpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpPTE7IGk8dmFyTmFt
ZS5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoaXNWYXJSZWYpCisgICAgICAgICAg
ICAgICAgaXNWYWxpZCA9ICgocmVmQ2hhcnMuZmluZCh2YXJOYW1lW2ldKSAhPSAtMSkgfHwgaXNW
YWxpZEZvclZhcmlhYmxlKHZhck5hbWVbaV0pKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgICAgICBpc1ZhbGlkID0gaXNWYWxpZEZvclZhcmlhYmxlKHZhck5hbWVbaV0pOworCisgICAg
ICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gaXNWYWxpZDsKK30KKworYm9vbCBXTUxIZWxwZXI6Omhhc1Zh
cmlhYmxlUmVmKGNvbnN0IFN0cmluZyYgdGV4dCkKK3sKKyAgICBib29sIGhhc1ZhclJlZiA9IGZh
bHNlOworICAgIGludCBzdGFydFBvcyA9IHRleHQuZmluZCgnJCcpOworICAgIGlmIChzdGFydFBv
cyAhPSAtMSkgeworICAgICAgICB1bnNpZ25lZCBlbmRQb3MgPSBzdGFydFBvcyArIDE7CisgICAg
ICAgIHdoaWxlICh0ZXh0W2VuZFBvc10gPT0gJyQnKQorICAgICAgICAgICAgZW5kUG9zKys7CisK
KyAgICAgICAgaWYgKCgoZW5kUG9zLXN0YXJ0UG9zKSAlIDIpICE9IDApCisgICAgICAgICAgICBo
YXNWYXJSZWYgPSB0cnVlOworICAgIH0KKworICAgIHJldHVybiBoYXNWYXJSZWY7Cit9CisKK3N0
YXRpYyBpbnQgdmFyaWFibGVFbmRzQXQoY29uc3QgU3RyaW5nJiB2YXJpYWJsZSkgCit7CisgICAg
Ly8gd2UgYXNzdW1lIHRoZSB2YXJpYWJsZSBzdGFydHMgd2l0aCAiJCIgLCBhbmQgdGhlbiBmb2xs
b3dzIHdpdGggYXQgbGVhc3Qgb25lIHF1YWxpZmllZCBjaGFyYWN0ZXIgZm9yIHZhcmlhYmxlIG5h
bWUsIG90aGVyd2lzZSwgbm90IGEgdmFsaWQgdmFyaWFibGUKKyAgICBpZiAoKHZhcmlhYmxlWzBd
ICAhPSAnJCcpIHx8IFdURjo6aXNBU0NJSURpZ2l0KHZhcmlhYmxlWzFdKSB8fCAhaXNWYWxpZEZv
clZhcmlhYmxlKHZhcmlhYmxlWzFdKSkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGludCBwb3Mg
PSAtMTsKKyAgICBmb3IgKHBvcyA9IDE7IHBvcyA8IHN0YXRpY19jYXN0PGludD4odmFyaWFibGUu
bGVuZ3RoKCkpOyBwb3MrKykgeworICAgICAgICBpZiAoIWlzVmFsaWRGb3JWYXJpYWJsZSh2YXJp
YWJsZVtwb3NdKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gcG9zOwor
fQorIAorc3RhdGljIGJvb2wgaGFzTmFtZUF0dHJpYnV0ZVdpdGhWYWx1ZShOb2RlICpub2RlLCBj
b25zdCBTdHJpbmcmIHZhbHVlKSAKK3sKKyAgICBOYW1lZEF0dHJNYXAgKmF0dHJzID0gbm9kZS0+
YXR0cmlidXRlcygpOworICAgIGlmICghYXR0cnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBlbHNlIHsKKyAgICAgICAgQXR0cmlidXRlKiBhdHRyID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0
ZW0oV01MTmFtZXM6Om5hbWVBdHRyKTsKKyAgICAgICAgaWYgKCFhdHRyKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKGF0dHItPnZhbHVlKCkgPT0gdmFsdWUpID8g
dHJ1ZSA6IGZhbHNlOworICAgIH0KK30KKwordm9pZCBXTUxIZWxwZXI6OmNvbnZlcnRWYXJJZk5l
ZWRlZChTdHJpbmcmIHZhciwgU3RyaW5nJiBjb252KSAKK3sKKyAgICBpZiAoY29udi5pc0VtcHR5
KCkgfHwgdmFyLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOyAKKworICAgIFN0cmluZyByZXN1
bHQ7CisgICAgU3RyaW5nIGNvbnZlciA9IGNvbnYubG93ZXIoKTsKKyAgICBpZiAoKGNvbnZlciA9
PSAiZSIpIHx8IChjb252ZXIgPT0gImVzY2FwZSIpKQorICAgICAgICByZXN1bHQgPSBlbmNvZGVX
aXRoVVJMRXNjYXBlU2VxdWVuY2VzKHZhcik7CisgICAgZWxzZSBpZiAoKGNvbnZlciA9PSAidSIp
IHx8IChjb252ZXIgPT0gInVuZXNjIikpCisgICAgICAgIHJlc3VsdCA9IGRlY29kZVVSTEVzY2Fw
ZVNlcXVlbmNlcyh2YXIpOworICAgIGVsc2UgaWYgKChjb252ZXIgPT0gIm4iKSB8fCAoY29udmVy
ID09ICJub2VzYyIpKQorICAgICAgICA7Ly8gZG8gbm90aGluZworCisgICAgaWYgKCFyZXN1bHQu
aXNFbXB0eSgpKQorICAgICAgICB2YXIgPSByZXN1bHQ7Cit9CisKK1N0cmluZyBXTUxIZWxwZXI6
OnN1YnN0aXR1dGVWYXJSZWYoY29uc3QgU3RyaW5nJiB2YXJSZWYsIE5vZGUqIGRvY3VtZW50LCBT
dHJpbmcgZXNjYXBlKSAKK3sKKyAgICBpZiAodmFyUmVmLmlzRW1wdHkoKSB8fCAhZG9jdW1lbnQg
fHwgIWRvY3VtZW50LT5pc0RvY3VtZW50Tm9kZSgpKSB7CisgICAgICAgIHJldHVybiB2YXJSZWY7
CisgICAgfQorCisgICAgU3RyaW5nIG9yaWcgPSB2YXJSZWY7CisgICAgU3RyaW5nIHJlc3VsdDsK
KyAgICBTdHJpbmcgdmFyaWFibGU7CisgICAgU3RyaW5nIGNvbnY7CisgCisgICAgYm9vbCBoYXNF
cnJvciA9IGZhbHNlOworICAgIHdoaWxlICghb3JpZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50
IHN0YXJ0ID0gb3JpZy5maW5kKCIkIik7CisgICAgICAgIGlmIChzdGFydCA9PSAtMSkgeyAgLy9p
dCdzIG5vdCBhIHZhcmlhYmxlIHJlZmVyZW5jZSwgb2shCisgICAgICAgICAgICByZXN1bHQgKz0g
b3JpZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCArPSBv
cmlnLmxlZnQoc3RhcnQpOworICAgICAgICBvcmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0aCgp
IC0gc3RhcnQpOworIAorICAgICAgICAvLyBjaGVjayB0aGUgZG91YmxlICckJyBzaWduICwgc2tp
cCB0aGVtIG92ZXIKKyAgICAgICAgaWYgKG9yaWdbMV0gPT0gJyQnKSB7CisgICAgICAgICAgICBy
ZXN1bHQgKz0gIiQiOworICAgICAgICAgICAgb3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgo
KSAtIDIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAKKyAgICAgICAgaW50
IGVuZCA9IDA7CisgICAgICAgIGlmIChvcmlnWzFdID09ICcoJykgeworICAgICAgICAgICAgZW5k
ID0gb3JpZy5maW5kKCIpIik7CisgICAgICAgICAgICBpZiAoZW5kID09IC0xKSB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ICs9IG9yaWc7ICAgLy8gaWYgd2UgZmluZCAiJCgiIGJ1dCBubyAiKSIs
IHN0b3AgcGFyc2luZworICAgICAgICAgICAgICAgIGhhc0Vycm9yID0gdHJ1ZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFy
aWFibGUgPSBvcmlnLnN1YnN0cmluZygyLCBlbmQtMik7CisgICAgICAgICAgICAgICAgLy8gc2Vh
cmNoIGNvbnZlcnNpb24gc3RyaW5nCisgICAgICAgICAgICAgICAgaW50IHBvcyA9IHZhcmlhYmxl
LmZpbmQoJzonKTsKKyAgICAgICAgICAgICAgICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnYgPSB2YXJpYWJsZS5zdWJzdHJpbmcocG9zICsgMSwgdmFyaWFibGUubGVu
Z3RoKCkgLSBwb3MgLSAxKTsKKyAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJs
ZS5sZWZ0KHBvcyk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIAorICAgICAg
ICAgICAgICAgIC8vIGhlcmUgd2Ugc2hvdWxkIGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGlz
IHZhbGlkCisgICAgICAgICAgICAgICAgaWYgKGhhc0Vycm9yID0gIWlzVmFsaWRWYXJpYWJsZU5h
bWUodmFyaWFibGUpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ICAgIG9yaWcgPSBvcmlnLnJpZ2h0KG9yaWcubGVuZ3RoKCkgLSBlbmQgLSAxICk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbmQgPSB2YXJpYWJsZUVuZHNB
dChvcmlnKTsKKyAgICAgICAgICAgIGlmIChlbmQgPCAxKSB7CisgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IG9yaWcubGVmdCgyKTsKKyAgICAgICAgICAgICAgICBvcmlnID0gb3JpZy5yaWdodChv
cmlnLmxlbmd0aCgpIC0gMik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICB2YXJpYWJsZSA9IG9yaWcuc3Vic3RyaW5nKDEsIGVuZCAtIDEpOwor
ICAgICAgICAgICAgb3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIGVuZCApOworICAg
ICAgICB9CisgCisgICAgICAgIC8vIHRyYXZlcnNlIHRoZSB3aG9sZSBET00gdHJlZSB0byBzdWJz
dGl0dXRlIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UKKyAgICAgICAgYm9vbCBpc0RvbmUgPSBmYWxz
ZTsKKyAgICAgICAgU3RyaW5nIGNvbnZWYXI7CisgICAgICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVu
dDsgCisgICAgICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsK
KyAgICAgICAgICAgIGlmIChoYXNOYW1lQXR0cmlidXRlV2l0aFZhbHVlKG5vZGUsIHZhcmlhYmxl
KSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpzZXR2
YXJUYWcpKSB7CisgICAgICAgICAgICAgICAgICAgIFdNTFNldHZhckVsZW1lbnQqIHNldHZhciA9
IHN0YXRpY19jYXN0PFdNTFNldHZhckVsZW1lbnQqPihub2RlKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udlZhciA9IHNldHZhci0+Z2V0QXR0cmlidXRlKCJ2YWx1ZSIpOworICAgICAgICAgICAg
ICAgICAgICBpc0RvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAKKyAgICAgICAgLy8gdHJ5
IHRvIGdldCB2YXJpYWJsZSBzdWJzdGl0dXRlIGZyb20gY3VycmVudCBicm93c2VyIGNvbnRleHQK
KyAgICAgICAgaWYgKCFpc0RvbmUpIHsKKyAgICAgICAgICAgIFBhZ2UqIHBhZ2UgPSAoc3RhdGlj
X2Nhc3Q8RG9jdW1lbnQqPihkb2N1bWVudCkpLT5wYWdlKCk7CisgICAgICAgICAgICBpZiAoIXBh
Z2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIHZhclJlZjsKKworICAgICAgICAgICAgQVNTRVJU
KHBhZ2UtPndtbFBhZ2VTdGF0ZSgpKTsKKyAgICAgICAgICAgIGNvbnZWYXIgPSBwYWdlLT53bWxQ
YWdlU3RhdGUoKS0+Z2V0VmFyaWJhbGUodmFyaWFibGUpOworICAgICAgICB9CisKKyAgICAgICAg
d2hpbGUgKCFjb252VmFyLmlzRW1wdHkoKSkgeworCisgICAgICAgICAgICBpZiAoY29udlZhci5j
b250YWlucygiJCgiKSkgeworICAgICAgICAgICAgICAgIGNvbnZWYXIgPSBzdWJzdGl0dXRlVmFy
UmVmKGNvbnZWYXIsIGRvY3VtZW50KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGNvbnYuaXNFbXB0eSgpKQorICAgICAgICAgICAg
ICAgIGNvbnYgPSBlc2NhcGU7CisgICAgICAgICAgICBjb252ZXJ0VmFySWZOZWVkZWQoY29udlZh
ciwgY29udik7CisgICAgICAgICAgICByZXN1bHQgKz0gY29udlZhcjsgCisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfSAKKyAKKyAgICB9IC8vIGVuZCBvZiB3aGlsZSAoIW9yaWcuaXNFbXB0
eSgpKSAKKyAKKyAgICBpZiAoaGFzRXJyb3IgJiYgV01MSGVscGVyOjp0b2tlbml6ZXIoKSkKKyAg
ICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxl
UmVmZXJlbmNlRXJyb3IpOworCisgICAgcmV0dXJuIHJlc3VsdC5pc0VtcHR5KCkgPyB2YXJSZWYg
OiByZXN1bHQ7Cit9IAorCisvLyBBY2NvcmRpbmcgdG8gdGhlIHNlY3Rpb24gNS4yIGFuZCAxMi41
LjEgaW4gdGhlIHdtbCBzcGVjOiB3YXAtMTkxLXdtbC0yMDAwMDIxOS1hLnBkZgorLy8gdGhlIGRl
c3RpbmF0aW9uIGNhcmQgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9sbG93aW5nIGNhc2U6Cisv
LyAxLCB1c2UgZnJhZ21lbnQgYW5jaG9yIHdoaWNoIGlzIHNwZWNpZmllZCBieSB0aGUgZG9jdW1l
bnQgVVJMLCBmb2xsb3dlZCB3aXRoICcjJworLy8gMiwgaWYgbm8gZnJhZ21lbnQgaXMgc3BlY2lm
ZWQgb3IgdGhlIGZyYWdtZW50IG5hbWUgaXMgd3JvbmcsIHRoZSBmaXJzdCBjYXJkIGlzIHRoZSBk
ZXN0IGNhcmQuCitXTUxDYXJkRWxlbWVudCogV01MSGVscGVyOjpzZXREZXN0aW5hdGlvbkNhcmQo
UmVmUHRyPERvY3VtZW50PiBkb2MsIFN0cmluZyB1cmkpIAoreworICAgIGlmICghZG9jIHx8ICFk
b2MtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQYWdlKiBwYWdlID0gZG9jLT5w
YWdlKCk7CisKKyAgICBpZiAodXJpLmlzRW1wdHkoKSkKKyAgICAgICAgdXJpID0gZG9jLT5kb2N1
bWVudFVSSSgpOworICAgICAgICAKKyAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IDA7CisgICAg
Ym9vbCBmb3VuZERlc3RDYXJkID0gZmFsc2U7CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbmwg
PSBkb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJjYXJkIik7CisgICAgaWYgKG5sLmdldCgpLT5s
ZW5ndGgoKSA8PSAwKQorICAgICAgICByZXR1cm4gY2FyZDsKKworICAgIC8vaGlkZSBhbGwgdGhl
IGNhcmRzIHByZXZpb3VzbHkgCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaTwgbmwuZ2V0KCkt
Pmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAgY2FyZCA9IHN0YXRpY19jYXN0PFdNTENhcmRFbGVt
ZW50Kj4obmwuZ2V0KCktPml0ZW0oaSkpOworICAgICAgICBjYXJkLT5zZXRWaXNpYmlsaXR5KGZh
bHNlKTsKKyAgICB9CisKKyAgICBpbnQgaWR4ID0gdXJpLmZpbmQoJyMnKTsKKyAgICBpZiAoaWR4
ID49IDApIHsKKyAgICAgICAgU3RyaW5nIGF0dHJJRDsKKyAgICAgICAgU3RyaW5nIGZyYWdtZW50
ID0gdXJpLnN1YnN0cmluZyhpZHggKyAxKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmwu
Z2V0KCktPmxlbmd0aCgpLTE7IGkgPiAwOyBpLS0pIHsKKyAgICAgICAgICAgIGNhcmQgPSBzdGF0
aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KG5sLmdldCgpLT5pdGVtKGkpKTsKKyAgICAgICAgICAg
IGF0dHJJRCA9IGNhcmQtPmdldEF0dHJpYnV0ZSgiaWQiKTsKKyAgICAgICAgICAgIGlmIChhdHRy
SUQgPT0gZnJhZ21lbnQpIHsKKyAgICAgICAgICAgICAgICAvL2ZvcmNlIGZyYW1lIGxvYWRlciB0
byBsb2FkIHRoZSBVUkwgd2l0aCBmcmFnbWVudCBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAg
cGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT5zZXRGb3JjZVJlbG9hZFdtbERlY2sodHJ1ZSk7
CisgICAgICAgICAgICAgICAgY2FyZC0+c2V0VmlzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgICAg
ICAgICBmb3VuZERlc3RDYXJkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghZm91bmREZXN0Q2FyZCkgewor
ICAgICAgICBjYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihubC5nZXQoKS0+aXRl
bSgwKSk7CisgICAgICAgIGNhcmQtPnNldFZpc2liaWxpdHkodHJ1ZSk7CisgICAgfQorCisgICAg
Ly8gdXBkYXRlIHRoZSBkb2N1bWVudCdzIHRpdGxlCisgICAgZG9jLT5zZXRUaXRsZShjYXJkLT50
aXRsZSgpKTsKKworICAgIC8vIHNldCB0aGUgYXRpdmUgY2FyZCBpbiB0aGUgY3VycmVudCBicm93
c2VyIGNvbnRleHQKKyAgICBwYWdlLT53bWxQYWdlU3RhdGUoKS0+c2V0QWN0aXZlQ2FyZChjYXJk
KTsKKworICAgIHJldHVybiBjYXJkOworfQorCit2b2lkIFdNTEhlbHBlcjo6cmVnaXN0ZXJUZW1w
bGF0ZVRvQ2FyZHMoRG9jdW1lbnQqIGRvYykKK3sKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0
dXJuOworCisgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSAwOworICAgIFBhc3NSZWZQdHI8Tm9k
ZUxpc3Q+IGxpc3QgPSBkb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCJ0ZW1wbGF0ZSIpOworICAg
IFdNTFRlbXBsYXRlRWxlbWVudCogdGVtcGwgPSBzdGF0aWNfY2FzdDxXTUxUZW1wbGF0ZUVsZW1l
bnQqPihsaXN0LmdldCgpLT5pdGVtKDApKTsKKyAgICBpZiAodGVtcGwpIHsKKyAgICAgICAgbGlz
dCA9IGRvYy0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoImNhcmQiKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBpbnQgaT0wOyBpIDwgbGlzdC5nZXQoKS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAg
ICAgY2FyZCA9IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4obGlzdC5nZXQoKS0+aXRlbShp
KSk7CisgICAgICAgICAgICBjYXJkLT5iaW5kVGVtcGxhdGUodGVtcGwpOworICAgICAgICB9Cisg
ICAgfQorfQorCit9CkluZGV4OiB3bWwvV01MSGVscGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dN
TEhlbHBlci5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTEhlbHBlci5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxIZWxwZXJfaAorI2RlZmluZSBXTUxIZWxw
ZXJfaAorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBDU3RyaW5nOyAKK2NsYXNzIFdNTENhcmRFbGVtZW50OworY2xhc3MgV01MVG9rZW5p
emVyOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqCisKK1dNTEhlbHBlciBjbGFzcyx3aGljaCBvZmZlcnMgY29udmVuaWVu
dCBmdW5jdGlvbnMgdG8gV01MRWxlbWVudAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjbGFzcyBXTUxIZWxwZXIgewor
CitwdWJsaWM6IAorICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYXJpYWJsZU5hbWUoY29uc3QgU3Ry
aW5nJiwgYm9vbCBpc1ZhclJlZiA9IGZhbHNlKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNWYXJpYWJs
ZVJlZihjb25zdCBTdHJpbmcmKTsKKworICAgIC8vTm9kZSogaXMgdGhlIHJvb3Qgb2YgRE9NIHRy
ZWUgd2hpY2ggd2lsbCBiZSB0cmF2ZXJzZWQgZm9yIHNlYXJjaGluZyB2YXJpYWJsZSB2YWx1ZQor
ICAgIHN0YXRpYyBTdHJpbmcgc3Vic3RpdHV0ZVZhclJlZihjb25zdCBTdHJpbmcmLCBOb2RlKiwg
U3RyaW5nIGVzY2FwZSA9IFN0cmluZygpKTsgCisgICAgc3RhdGljIHZvaWQgY29udmVydFZhcklm
TmVlZGVkKFN0cmluZyYsIFN0cmluZyYpOworCisgICAgc3RhdGljIFdNTENhcmRFbGVtZW50KiBz
ZXREZXN0aW5hdGlvbkNhcmQoUmVmUHRyPERvY3VtZW50PiwgU3RyaW5nIHVyaSA9IFN0cmluZygp
KTsKKworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVGVtcGxhdGVUb0NhcmRzKERvY3VtZW50Kik7
CisKKyAgICBzdGF0aWMgV01MVG9rZW5pemVyKiB0b2tlbml6ZXIoKTsKKyAgICBzdGF0aWMgdm9p
ZCBzZXRUb2tlbml6ZXIoV01MVG9rZW5pemVyKik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFdN
TFRva2VuaXplciogc190b2tlbml6ZXI7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJ
bmRleDogd21sL1dNTEltYWdlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEltYWdl
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MSW1hZ2VFbGVtZW50LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXTUxJbWFnZUVsZW1lbnQuaCIgCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5h
bWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1l
czsKKworV01MSW1hZ2VFbGVtZW50OjpXTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYgbmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxJbWFnZUVsZW1lbnQobmFtZSwgZG9j
KSAKK3sKK30KKworV01MSW1hZ2VFbGVtZW50Ojp+V01MSW1hZ2VFbGVtZW50KCkgCit7Cit9CisK
K3ZvaWQgV01MSW1hZ2VFbGVtZW50Ojp1cGRhdGVBdHRyc0lmTmVlZGVkKCkKK3sKKyAgICBTdHJp
bmcgc3ViOworICAgIFN0cmluZyBhbHQgPSBnZXRBdHRyaWJ1dGUoImFsdCIpOworICAgIGlmICgh
YWx0LmlzRW1wdHkoKSkgeworICAgICAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYoYWx0LCBkb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGFsdCAhPSBzdWIpCisgICAgICAgICAg
ICBzZXRBdHRyaWJ1dGUoYWx0QXR0ciwgc3ViKTsKKyAgICB9ICAgCisKKyAgICBTdHJpbmcgc3Jj
ID0gZ2V0QXR0cmlidXRlKCJzcmMiKTsKKyAgICBpZiAoIXNyYy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHNyYywgZG9jdW1lbnQoKSk7Cisg
ICAgICAgIGlmIChzcmMgIT0gc3ViKQorICAgICAgICAgICAgc2V0QXR0cmlidXRlKHNyY0F0dHIs
IHN1Yik7CisgICAgfQorCisgICAgU3RyaW5nIGxvY2FsU3JjID0gZ2V0QXR0cmlidXRlKCJsb2Nh
bHNyYyIpOworICAgIGlmICghbG9jYWxTcmMuaXNFbXB0eSgpKSB7CisgICAgICAgIC8vIHN0b3Jl
IHRoZSBzcmMgYXR0cmlidXRlIGZvciB1c2UgbGF0ZXIKKyAgICAgICAgaWYgKCFzcmMuaXNFbXB0
eSgpKQorICAgICAgICAgICAgbV9zcmMgPSBzdWI7CisKKyAgICAgICAgc3ViID0gV01MSGVscGVy
OjpzdWJzdGl0dXRlVmFyUmVmKGxvY2FsU3JjLCBkb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKCFz
dWIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobG9jYWxTcmMgIT0gc3ViKQorICAgICAg
ICAgICAgICAgIHNldEF0dHJpYnV0ZShXTUxOYW1lczo6bG9jYWxzcmNBdHRyLCBzdWIpOworCisg
ICAgICAgICAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgc3ViKTsKKyAgICAgICAgfQorICAgIH0K
K30KKwordm9pZCBXTUxJbWFnZUVsZW1lbnQ6OnJlbG9hZEltYWdlQnlTcmNBdHRyKCkKK3sKKyAg
ICBpZiAobV9zcmMuaXNFbXB0eSgpKSAKKyAgICAgICAgcmV0dXJuOworCisgICAgc2V0QXR0cmli
dXRlKHNyY0F0dHIsIG1fc3JjKTsKKyAgICBtX3NyYyA9ICIiOworCisgICAgaW1hZ2VMb2FkZXIo
KS51cGRhdGVGcm9tRWxlbWVudCgpOworfQorCitib29sIFdNTEltYWdlRWxlbWVudDo6aXNXTUxJ
bWFnZUVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vbmFtZXNw
YWNlCkluZGV4OiB3bWwvV01MSW1hZ2VFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTElt
YWdlRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTEltYWdlRWxlbWVudC5oCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxJbWFnZUVsZW1lbnRfaAor
I2RlZmluZSBXTUxJbWFnZUVsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTEltYWdlRWxlbWVudCA6IHB1Ymxp
YyBIVE1MSW1hZ2VFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxJbWFnZUVsZW1lbnQoY29uc3Qg
UXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MSW1hZ2VFbGVtZW50
KCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgaXNXTUxJbWFnZUVsZW1lbnQoKSBjb25zdDsKKworICAg
IHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZCgpOworICAgIHZvaWQgcmVsb2FkSW1hZ2VCeVNyY0F0
dHIoKTsKKworcHJpdmF0ZToKKyAgICBTdHJpbmcgbV9zcmM7Cit9OworCit9IC8vIG5hbWVzcGFj
ZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IHdtbC9XTUxJbnB1dEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgd21sL1dNTElucHV0RWxl
bWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldNTElucHV0RWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1N0cmlu
Zy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIk1vdXNlRXZlbnQuaCIK
KyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRl
ICJSZWd1bGFyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRDb250cm9sLmgiCisj
aW5jbHVkZSAiVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVk
ZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUb2tl
bml6ZXIuaCIKKyNpbmNsdWRlICJ3dGYvQVNDSUlDVHlwZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIHN0ZDo6bWluOworCitXTUxJ
bnB1dEVsZW1lbnQ6OldNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIERv
Y3VtZW50KiBkb2MsIEhUTUxGb3JtRWxlbWVudCogZm9ybSkKKyAgICA6IEhUTUxJbnB1dEVsZW1l
bnQodGFnLCBkb2MsIGZvcm0pCisgICAgLCBtX2VtcHR5T2soZmFsc2UpCisgICAgLCBtX21hc2tB
bGxvd3NJbnB1dENoYXJOdW1zKDApCit7Cit9CisKK1dNTElucHV0RWxlbWVudDo6fldNTElucHV0
RWxlbWVudCgpIAoreworfQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKSAKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IGZvcm1hdEF0dHIpIHsKKworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihh
dHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVw
b3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKKyAgICAgICAgbV9mb3JtYXQgPSB2YWxpZGF0ZUlucHV0TWFzayhh
dHRyLT52YWx1ZSgpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBlbXB0eW9rQXR0
cikKKyAgICAgICAgbV9lbXB0eU9rID0gKChhdHRyLT52YWx1ZSgpID09ICJ0cnVlIikgPyB0cnVl
IDogZmFsc2UpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgeworCisg
ICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAg
ICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlh
YmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgSFRNTElucHV0
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CisgCisgICAgfSBlbHNlCisgICAg
ICAgIEhUTUxJbnB1dEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCisK
K1N0cmluZyBXTUxJbnB1dEVsZW1lbnQ6OnZhbGlkYXRlSW5wdXRNYXNrKGNvbnN0IEF0b21pY1N0
cmluZyYgaW5wdXRNYXNrKQoreworICAgIHN0YXRpYyBBdG9taWNTdHJpbmcgZm9ybWF0Q29kZXMg
PSAiQWFOblh4TW0iOworICAgIGJvb2wgaXNWYWxpZCA9IHRydWU7CisgICAgYm9vbCBoYXNXaWxk
Y2FyZCA9IGZhbHNlOworICAgIHVuc2lnbmVkIGVzY2FwZUNoYXJDbnRzID0gMDsKKworICAgIHVu
c2lnbmVkIG1hc2tMZW4gPSBpbnB1dE1hc2subGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaWR4Owor
ICAgIFVDaGFyIGM7IAorCisgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXNrTGVuOyArK2lkeCkg
eworICAgICAgICBjID0gaW5wdXRNYXNrW2lkeF07CisKKyAgICAgICAgaWYgKGZvcm1hdENvZGVz
LmZpbmQoYykgPT0gLTEpIHsKKworICAgICAgICAgICAgaWYgKChjID09ICcqJykgfHwgKFdURjo6
aXNBU0NJSURpZ2l0KGMpICYmIChjICE9ICcwJykpKSB7IAorICAgICAgICAgICAgICAgIC8vIHZh
bGlkYXRlIGNvZGVzIHdoaWNoIGVuZHMgd2l0aCAnKmYnIG9yICduZicKKyAgICAgICAgICAgICAg
ICBjID0gaW5wdXRNYXNrWysraWR4XTsKKyAgICAgICAgICAgICAgICBpZiAoKGlkeCsxICE9IG1h
c2tMZW4pIHx8IGZvcm1hdENvZGVzLmZpbmQoYykgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAg
ICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaGFzV2lsZGNhcmQgPSB0cnVlOworICAgICAgICAg
ICAgfSBlbHNlIGlmIChjID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICAvL3NraXAgb3ZlciB0
aGUgbmV4dCBtYXNrIGNoYXJhY3RlcgorICAgICAgICAgICAgICAgIGlkeCsrOyAgIAorICAgICAg
ICAgICAgICAgIGVzY2FwZUNoYXJDbnRzKys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIGlzVmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICB9CisgICAgfQorCisgICAgLy8gY2FsY3VsYXRlIHRoZSBudW1i
ZXIgb2YgY2hhciBhbGxvd2VkIHRvIGVudGVyIGJ5IGlucHV0IG1hc2sgc3RyaW5nCisgICAgaWYg
KGlzVmFsaWQpIHsKKyAgICAgICAgbV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcyA9IG1hc2tMZW47
CisKKyAgICAgICAgaWYgKGVzY2FwZUNoYXJDbnRzKQorICAgICAgICAgICAgbV9tYXNrQWxsb3dz
SW5wdXRDaGFyTnVtcyAtPSBlc2NhcGVDaGFyQ250czsKKworICAgICAgICBpZiAoaGFzV2lsZGNh
cmQgJiYgaW5wdXRNYXNrW21hc2tMZW4tMl0gPT0gJyonKQorICAgICAgICAgICAgbV9tYXNrQWxs
b3dzSW5wdXRDaGFyTnVtcyA9IG1heExlbmd0aCgpOworICAgICAgICBlbHNlIGlmIChoYXNXaWxk
Y2FyZCkgeworICAgICAgICAgICAgYyA9IGlucHV0TWFza1ttYXNrTGVuLTJdOworICAgICAgICAg
ICAgdW5zaWduZWQgbGVmdExlbiA9IFN0cmluZygmYykudG9JbnQoKTsKKyAgICAgICAgICAgIG1f
bWFza0FsbG93c0lucHV0Q2hhck51bXMgPSBsZWZ0TGVuICsgbV9tYXNrQWxsb3dzSW5wdXRDaGFy
TnVtcyAtIDI7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gaW5wdXRNYXNrOworICAgIH0K
KyAKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3Vuc2lnbmVkIFdNTElucHV0RWxlbWVudDo6
Y3Vyc29yUG9zVG9JZHhPZk1hc2sodW5zaWduZWQgY3Vyc29yUG9zKQoreworICAgIFVDaGFyIG1h
c2s7CisgICAgaW50IGlkeCA9IC0xOworICAgIGN1cnNvclBvcysrOworICAgIHdoaWxlIChjdXJz
b3JQb3MtLSkgeworICAgICAgICBtYXNrID0gbV9mb3JtYXRbKytpZHhdOworICAgICAgICBpZiAo
bWFzayA9PSAnXFwnKQorICAgICAgICAgICAgaWR4Kys7CisgICAgICAgIGVsc2UgaWYgKChtYXNr
ID09ICcqJykgfHwgKFdURjo6aXNBU0NJSURpZ2l0KG1hc2spICYmIChtYXNrICE9ICcwJykpKSB7
CisgICAgICAgICAgICBpZHggPSBtX2Zvcm1hdC5sZW5ndGgoKSAtIDE7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfSAKKyAgICB9CisKKyAgICByZXR1cm4gaWR4OworfQorCitib29sIFdN
TElucHV0RWxlbWVudDo6aXNDb25mb3JtZWRUb0lucHV0TWFzayhTdHJpbmcmIGlucHV0KQorewor
ICAgIGJvb2wgYlBhc3MgPSB0cnVlOworICAgIFVDaGFyIGluQ2hhcjsKKyAgICBmb3IgKHVuc2ln
bmVkIGludCBpID0gMDsgaSA8IGlucHV0Lmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgaW5DaGFy
ID0gaW5wdXRbaV07CisKKyAgICAgICAgYlBhc3MgPSBpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGlu
Q2hhciwgaSsxLCBmYWxzZSk7CisgICAgICAgIGlmICghYlBhc3MpCisgICAgICAgICAgICBicmVh
azsKKyAgICB9CisKKyAgICByZXR1cm4gYlBhc3M7Cit9CisKK2Jvb2wgV01MSW5wdXRFbGVtZW50
Ojppc0NvbmZvcm1lZFRvSW5wdXRNYXNrKFVDaGFyIGluQ2hhciwgdW5zaWduZWQgaW5wdXRDaGFy
TnVtLCBib29sIGlzSW5wdXRlZEJ5VXNyKQoreworICAgIGJvb2wgYlBhc3MgPSB0cnVlOworICAg
IGlmIChtX2Zvcm1hdC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBiUGFzczsKKyAgICAKKyAg
ICAvLyB3ZSBzaG91bGQgbGltaXQgdGhlIG51bWJlciBvZiBpbnB1dGVkIGNoYXJhdGVycyBhY2Nv
cmRpbmcgdG8gdGhlIGZvcm1hdCBhbmQgbWF4bGVuZ3RoIGF0dHJpYnV0ZQorICAgIHVuc2lnbmVk
IG1heEFsbG93SW5wdXROdW0gPSBtaW4obV9tYXNrQWxsb3dzSW5wdXRDaGFyTnVtcywgc3RhdGlj
X2Nhc3Q8dW5zaWduZWQ+KG1heExlbmd0aCgpKSk7CisKKyAgICBpZiAoaW5wdXRDaGFyTnVtIDw9
IG1heEFsbG93SW5wdXROdW0pIHsKKyAgICAgICAgdW5zaWduZWQgaWR4T2ZNYXNrID0gMDsKKyAg
ICAgICAgaWYgKGlzSW5wdXRlZEJ5VXNyKQorICAgICAgICAgICAgaWR4T2ZNYXNrID0gY3Vyc29y
UG9zVG9JZHhPZk1hc2soc2VsZWN0aW9uU3RhcnQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGlkeE9mTWFzayA9IGN1cnNvclBvc1RvSWR4T2ZNYXNrKGlucHV0Q2hhck51bSAtIDEpOwor
CisgICAgICAgIFVDaGFyIG1hc2sgPSBtX2Zvcm1hdFtpZHhPZk1hc2tdOworICAgICAgICAvLyBt
YXRjaCB0aGUgY2hhciBpbnB1dHRlZCB3aXRoIGlucHV0IG1hc2sKKyAgICAgICAgaWYgKG1hc2sg
PT0gJ0EnKQorICAgICAgICAgICAgYlBhc3MgPSAhV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKSAm
JiAhV1RGOjppc0FTQ0lJTG93ZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5D
aGFyKTsKKyAgICAgICAgZWxzZSBpZiAobWFzayA9PSAnYScpCisgICAgICAgICAgICBiUGFzcyA9
ICFXVEY6OmlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFXVEY6OmlzQVNDSUlVcHBlcihpbkNoYXIp
ICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBlbHNlIGlmIChtYXNr
ID09ICdOJykKKyAgICAgICAgICAgIGJQYXNzID0gV1RGOjppc0FTQ0lJRGlnaXQoaW5DaGFyKTsK
KyAgICAgICAgZWxzZSBpZiAobWFzayA9PSAnbicpCisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6
OmlzQVNDSUlBbHBoYShpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOwor
ICAgICAgICBlbHNlIGlmIChtYXNrID09ICdYJykKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6
aXNBU0NJSUxvd2VyKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7Cisg
ICAgICAgIGVsc2UgaWYgKG1hc2sgPT0gJ3gnKQorICAgICAgICAgICAgYlBhc3MgPSAhV1RGOjpp
c0FTQ0lJVXBwZXIoaW5DaGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAg
ICAgICAgZWxzZSBpZiAobWFzayA9PSAnTScpCisgICAgICAgICAgICBiUGFzcyA9IFdURjo6aXNB
U0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBlbHNlIGlmIChtYXNrID09ICdtJykKKyAg
ICAgICAgICAgIGJQYXNzID0gV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIGJQYXNzID0gKG1hc2sgPT0gaW5DaGFyKTsKKworICAgIH0gZWxz
ZSAgLy8gaW5wdXRDaGFyTnVtID4gbWF4QWxsb3dJbnB1dE51bQorICAgICAgICBiUGFzcyA9IGZh
bHNlOworCisgICAgcmV0dXJuIGJQYXNzOworfQorCisKK3ZvaWQgV01MSW5wdXRFbGVtZW50Ojpp
bml0KCkKK3sKKyAgICBpZiAoIWRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIFN0cmluZyBuYW1lVmFyID0gbmFtZSgpOworICAgIFN0cmluZyB2YWwgPSB2YWx1ZSgpOwor
ICAgIFN0cmluZyB2YXJWYWx1ZTsKKworICAgIFdNTFBhZ2VTdGF0ZSAqcGFnZVNhdGUgPSBkb2N1
bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIGlmICghbmFtZVZhci5pc0VtcHR5
KCkpCisgICAgICAgIHZhclZhbHVlID0gcGFnZVNhdGUtPmdldFZhcmliYWxlKG5hbWVWYXIpOwor
ICAgIAorICAgIGlmICh2YXJWYWx1ZS5pc0VtcHR5KCkgfHwgIWlzQ29uZm9ybWVkVG9JbnB1dE1h
c2sodmFyVmFsdWUpKSB7CisgICAgICAgIGlmIChpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKHZhbCkp
CisgICAgICAgICAgICB2YXJWYWx1ZSA9IHZhbDsKKyAgICAgICAgZWxzZSAKKyAgICAgICAgICAg
IHZhclZhbHVlID0gIiI7CisKKyAgICAgICAgcGFnZVNhdGUtPnN0b3JlVmFyaWFibGUobmFtZVZh
ciwgdmFyVmFsdWUpOworICAgIH0KKworICAgIHNldFZhbHVlKHZhclZhbHVlKTsKKworCisgICAg
aWYgKGdldEF0dHJpYnV0ZSgiZW1wdHlvayIpLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9m
b3JtYXQuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9lbXB0eU9rID0gdHJ1ZTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvL2NoZWNrIGlmIHRoZSBmb3JtYXQgY29kZXMgaXMgYSAiKmYi
IGNvZGUKKyAgICAgICAgICAgIFN0cmluZyBmb3JtYXRDb2RlcyA9ICJNbUFhWHhObiI7CisgICAg
ICAgICAgICBpZiAoKG1fZm9ybWF0Lmxlbmd0aCgpID09IDIpICYmIChtX2Zvcm1hdFswXSA9PSAn
KicpICYmIChmb3JtYXRDb2Rlcy5maW5kKG1fZm9ybWF0WzFdKSAhPSAtMSkpCisgICAgICAgICAg
ICAgICAgbV9lbXB0eU9rID0gdHJ1ZTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBXTUxJ
bnB1dEVsZW1lbnQ6OnVwZGF0ZUF0dHJzSWZOZWVkZWQoKQoreworICAgIFN0cmluZyB2YWx1ZSA9
IGdldEF0dHJpYnV0ZSgidmFsdWUiKTsgCisgICAgU3RyaW5nIHN1YiA9IFdNTEhlbHBlcjo6c3Vi
c3RpdHV0ZVZhclJlZih2YWx1ZSwgZG9jdW1lbnQoKSk7CisgICAgaWYgKHZhbHVlICE9IHN1YikK
KyAgICAgICAgc2V0VmFsdWUoc3ViKTsKKworICAgIFN0cmluZyB0aXRsZSA9IGdldEF0dHJpYnV0
ZSgidGl0bGUiKTsKKyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUs
IGRvY3VtZW50KCkpOworICAgIGlmICh0aXRsZSAhPSBzdWIpCisgICAgICAgIHNldEF0dHJpYnV0
ZSh0aXRsZUF0dHIsIHRpdGxlKTsKK30KKwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNo
Qmx1ckV2ZW50KCkKK3sKKyAgICAvLyB1cGRhdGUgdGhlIG5hbWVkIHZhcmlhYmxlIG9mIGlucHV0
IGVsZW1lbnQgCisgICAgU3RyaW5nIG5hbWVWYXIgPSBuYW1lKCk7CisgICAgaWYgKCFuYW1lVmFy
LmlzRW1wdHkoKSkgeworICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCAqIHJ0ID0gc3RhdGljX2Nh
c3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKTsKKyAgICAgICAgU3RyaW5nIGlucHV0
ID0gKHJ0ICE9IDAgPyBydC0+dGV4dCgpIDogU3RyaW5nKCkpOworICAgICAgICBpZiAobV9lbXB0
eU9rIHx8ICFpbnB1dC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIEFTU0VSVChkb2N1bWVudCgp
LT5wYWdlKCkpOworICAgICAgICAgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFn
ZVN0YXRlKCkpOworICAgICAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUo
KS0+c3RvcmVWYXJpYWJsZShuYW1lVmFyLCBpbnB1dCk7CisgICAgICAgICAgICBIVE1MSW5wdXRF
bGVtZW50OjpkaXNwYXRjaEJsdXJFdmVudCgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAg
IGZvY3VzKCk7IAorICAgIH0KK30KKwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqIGV2dCkKK3sKKyAgICBpZiAoaXNUZXh0RmllbGQoKSAmJiBldnQtPnR5
cGUoKSA9PSBldmVudE5hbWVzKCkudGV4dElucHV0RXZlbnQgJiYgZXZ0LT5pc1RleHRFdmVudCgp
KSB7CisgICAgICAgIFN0cmluZyBkYXRhID0gc3RhdGljX2Nhc3Q8VGV4dEV2ZW50Kj4oZXZ0KS0+
ZGF0YSgpOworICAgICAgICBSZW5kZXJUZXh0Q29udHJvbCAqcnQgPSBzdGF0aWNfY2FzdDxSZW5k
ZXJUZXh0Q29udHJvbCo+KHJlbmRlcmVyKCkpOworICAgICAgICBpZiAocnQpIHsKKyAgICAgICAg
ICAgIHVuc2lnbmVkIGlucHV0Q2hhck51bSA9IHJ0LT50ZXh0KCkubGVuZ3RoKCkgKyAxOworICAg
ICAgICAgICAgaWYgKCFpc0NvbmZvcm1lZFRvSW5wdXRNYXNrKGRhdGFbMF0sIGlucHV0Q2hhck51
bSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgSFRN
TElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworfQorCit9CkluZGV4OiB3
bWwvV01MSW5wdXRFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTElucHV0RWxlbWVudC5o
CShyZXZpc2lvbiAwKQorKysgd21sL1dNTElucHV0RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxJbnB1dEVsZW1lbnRfaAorI2RlZmluZSBXTUxJ
bnB1dEVsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEhUTUxGb3JtRWxlbWVudDsKKyAgICAgICAgICAgICAgICAg
ICAgICAgCitjbGFzcyBXTUxJbnB1dEVsZW1lbnQgOiBwdWJsaWMgSFRNTElucHV0RWxlbWVudCB7
CitwdWJsaWM6CisgICAgV01MSW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1
bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKKyAgICB2aXJ0dWFsIH5XTUxJbnB1dEVsZW1l
bnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hCbHVyRXZlbnQoKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworCisgICAgdm9pZCBpbml0KCk7
CisgICAgdm9pZCB1cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgYm9vbCBpc0NvbmZvcm1lZFRv
SW5wdXRNYXNrKFN0cmluZyYpOworICAgIGJvb2wgaXNDb25mb3JtZWRUb0lucHV0TWFzayhVQ2hh
ciwgdW5zaWduZWQsIGJvb2wgaXNJbnB1dGVkQnlVc3IgPSB0cnVlKTsKKworcHJpdmF0ZToKKyAg
ICBTdHJpbmcgdmFsaWRhdGVJbnB1dE1hc2soY29uc3QgQXRvbWljU3RyaW5nJik7CisgICAgdW5z
aWduZWQgY3Vyc29yUG9zVG9JZHhPZk1hc2sodW5zaWduZWQpOworCisgICAgU3RyaW5nIG1fZm9y
bWF0OworICAgIGJvb2wgbV9lbXB0eU9rOworICAgIHVuc2lnbmVkIG1fbWFza0FsbG93c0lucHV0
Q2hhck51bXM7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTElu
dHJpbnNpY0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEludHJpbnNpY0V2
ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MSW50cmluc2ljRXZlbnRIYW5k
bGVyLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAg
ICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAw
NC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUg
dGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAor
ICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJX
TUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVG9r
ZW5pemVyLmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXI6
OldNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpIAoreworfQorICAgIAorV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyOjp+V01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCkKK3sKK30KKwordm9pZCBXTUxJ
bnRyaW5zaWNFdmVudEhhbmRsZXI6OnJlZ2lzdGVySW50cmluc2ljRXZlbnQoV01MSW50cmluc2lj
RXZlbnRUeXBlIHR5cGUsIGNvbnN0IFdNTEludHJpbnNpY0V2ZW50JiBldikKK3sKKyAgICBpZiAo
bV9ldmVudHMuY29udGFpbnModHlwZSkpIHsKKyAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIo
KS0+cmVwb3J0RXJyb3IoQ29uZmxpY3RpbmdFdmVudEJpbmRpbmdFcnJvcik7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9ldmVudHMuc2V0KHR5cGUsIGV2KTsKK30KKwordm9pZCBXTUxJ
bnRyaW5zaWNFdmVudEhhbmRsZXI6OnRyaWdnZXJJbnRyaW5zaWNFdmVudChXTUxJbnRyaW5zaWNF
dmVudFR5cGUgdHlwZSkgY29uc3QKK3sKKyAgICBXTUxJbnRyaW5zaWNFdmVudCBldiA9IG1fZXZl
bnRzLmdldCh0eXBlKTsKKyAgICBpZiAoZXYudGFzaykKKyAgICAgICAgZXYudGFzay0+ZXhlYygw
LCBldi50YXJnZXRVUkkpOworfQorCitib29sIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6aGFz
SW50cmluc2ljRXZlbnQoV01MSW50cmluc2ljRXZlbnRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAg
cmV0dXJuIG1fZXZlbnRzLmNvbnRhaW5zKHR5cGUpOworfQorCit9CkluZGV4OiB3bWwvV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTEludHJpbnNpY0V2ZW50
SGFuZGxlci5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTEludHJpbnNpY0V2ZW50SGFuZGxlci5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXJfaAorI2RlZmluZSBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXJfaAorCisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgV01MVGFza0VsZW1lbnQ7CisKK2VudW0gV01MSW50cmluc2lj
RXZlbnRUeXBlIHsKKyAgICBVbmtub3duID0gMCwgT25FbnRlckZvcndhcmQsIE9uRW50ZXJCYWNr
d2FyZCwgT25UaW1lciwgT25QaWNrIAorfTsKKwordHlwZWRlZiBzdHJ1Y3QgV01MSW50cmluc2lj
RXZlbnQgeworICAgIFdNTFRhc2tFbGVtZW50KiB0YXNrOworICAgIFN0cmluZyB0YXJnZXRVUkk7
Cit9IFdNTEludHJpbnNpY0V2ZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK3R5cGVkZWYg
SGFzaE1hcDxpbnQsIFdNTEludHJpbnNpY0V2ZW50PiBJbnRyaW5zaWNFdm50TWFwOworCitjbGFz
cyBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIgeworcHVibGljOgorICAgIFdNTEludHJpbnNpY0V2
ZW50SGFuZGxlcigpOworICAgIHZpcnR1YWwgfldNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOwor
CisgICAgLy8gaGFuZGxpbmcgV01MIGludHJpbnNpYyBldmVudAorICAgIHZvaWQgcmVnaXN0ZXJJ
bnRyaW5zaWNFdmVudChXTUxJbnRyaW5zaWNFdmVudFR5cGUsIGNvbnN0IFdNTEludHJpbnNpY0V2
ZW50Jik7CisgICAgdm9pZCB0cmlnZ2VySW50cmluc2ljRXZlbnQoV01MSW50cmluc2ljRXZlbnRU
eXBlKSBjb25zdDsKKyAgICBib29sIGhhc0ludHJpbnNpY0V2ZW50KFdNTEludHJpbnNpY0V2ZW50
VHlwZSkgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgSW50cmluc2ljRXZudE1hcCBtX2V2ZW50czsK
KyAgIAorfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxPcHRpb25F
bGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlz
aW9uIDApCisrKyB3bWwvV01MT3B0aW9uRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVs
ZW1lbnQuaCIKKworI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxJbnRyaW5zaWNFdmVu
dEhhbmRsZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0
ZS5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTE9wdGlvbkVsZW1lbnQ6OldNTE9w
dGlvbkVsZW1lbnQoRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxPcHRpb25FbGVtZW50KGRvYywg
MCkKKyAgICAsIG1fZXZudEhhbmRsZXIoMCkKKyAgICAsIG1faGFzSW50cmluc2ljRXZlbnQoZmFs
c2UpCit7Cit9CisKK1dNTE9wdGlvbkVsZW1lbnQ6On5XTUxPcHRpb25FbGVtZW50KCkgCit7Cisg
ICAgaWYgKG1fZXZudEhhbmRsZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fZXZudEhhbmRsZXI7Cisg
ICAgICAgIG1fZXZudEhhbmRsZXIgPSAwOworICAgIH0KK30KKwordm9pZCBXTUxPcHRpb25FbGVt
ZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAg
aWYgKGF0dHItPm5hbWUoKSA9PSBvbnBpY2tBdHRyKSB7CisgICAgICAgIAorICAgICAgICBXTUxJ
bnRyaW5zaWNFdmVudFR5cGUgZXR5cGUgPSBPblBpY2s7IAorICAgICAgICBpZiAoIW1fZXZudEhh
bmRsZXIpCisgICAgICAgICAgICBtX2V2bnRIYW5kbGVyID0gbmV3IFdNTEludHJpbnNpY0V2ZW50
SGFuZGxlcigpOworIAorICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICAgICAgUXVh
bGlmaWVkTmFtZSBxTmFtZSgiZ28iLCAiZ28iLCAiIik7CisgICAgICAgIEVsZW1lbnQqIGdvID0g
V01MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZVdNTEVsZW1lbnQocU5hbWUsIGRvY3VtZW50KCksIGZh
bHNlKTsKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYo
YXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAgICAgICBnby0+c2V0QXR0
cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwgZWMpOworIAorICAgICAgICBXTUxJbnRyaW5zaWNF
dmVudCBldjsKKyAgICAgICAgZXYudGFzayA9IHN0YXRpY19jYXN0PFdNTEdvRWxlbWVudCo+KGdv
KTsKKyAgICAgICAgZXYudGFyZ2V0VVJJID0gaHJlZjsKKyAKKyAgICAgICAgbV9oYXNJbnRyaW5z
aWNFdmVudCA9IHRydWU7CisgICAgICAgIG1fZXZudEhhbmRsZXItPnJlZ2lzdGVySW50cmluc2lj
RXZlbnQoZXR5cGUsIGV2KTsKKworICAgIH0gZWxzZQorICAgICAgICBIVE1MT3B0aW9uRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK1dNTEludHJpbnNpY0V2ZW50SGFu
ZGxlciogV01MT3B0aW9uRWxlbWVudDo6ZXZlbnRIYW5kbGVyKCkgCit7CisgICAgaWYgKG1faGFz
SW50cmluc2ljRXZlbnQgJiYgIW1fZXZudEhhbmRsZXIpCisgICAgICAgIG1fZXZudEhhbmRsZXIg
PSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisgICAgcmV0dXJuIG1fZXZudEhhbmRs
ZXI7Cit9CisKK3ZvaWQgV01MT3B0aW9uRWxlbWVudDo6c2V0SGFzSW50cmluc2ljRXZlbnQoYm9v
bCBoYXMpIAoreworICAgIG1faGFzSW50cmluc2ljRXZlbnQgPSBoYXM7Cit9CisgCitib29sIFdN
TE9wdGlvbkVsZW1lbnQ6Omhhc0ludHJpbnNpY0V2ZW50KCkKK3sKKyAgICByZXR1cm4gbV9oYXNJ
bnRyaW5zaWNFdmVudDsKK30KKwordm9pZCBXTUxPcHRpb25FbGVtZW50OjpoYW5kbGVJbnRyaW5z
aWNFdmVudElmTmVlZGVkKCkKK3sKKyAgICBpZiAobV9ldm50SGFuZGxlciAmJiBtX2V2bnRIYW5k
bGVyLT5oYXNJbnRyaW5zaWNFdmVudChPblBpY2spKQorICAgICAgICBtX2V2bnRIYW5kbGVyLT50
cmlnZ2VySW50cmluc2ljRXZlbnQoT25QaWNrKTsKK30KKwordm9pZCBXTUxPcHRpb25FbGVtZW50
Ojp1cGRhdGVBdHRyc0lmTmVlZGVkKCkgCit7CisgICAgU3RyaW5nIHZhbHVlID0gZ2V0QXR0cmli
dXRlKCJ2YWx1ZSIpOworICAgIFN0cmluZyBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJS
ZWYodmFsdWUsIGRvY3VtZW50KCkpOworICAgIGlmICh2YWx1ZSAhPSBzdWIpCisgICAgICAgIHNl
dEF0dHJpYnV0ZSh2YWx1ZUF0dHIsIHN1Yik7CisKKyAgICBTdHJpbmcgdGl0bGUgPSBnZXRBdHRy
aWJ1dGUoInRpdGxlIik7CisgICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHRp
dGxlLCBkb2N1bWVudCgpKTsKKworICAgIGlmICh0aXRsZSAhPSBzdWIpCisgICAgICAgIHNldEF0
dHJpYnV0ZSh0aXRsZUF0dHIsIHRpdGxlKTsKK30KKwordm9pZCBXTUxPcHRpb25FbGVtZW50Ojpz
ZXRTZWxlY3RlZFN0YXRlKGJvb2wgc2VsZWN0KQoreworICAgIGlmIChzZWxlY3RlZCgpID09IHNl
bGVjdCkKKyAgICAgICAgcmV0dXJuOworCisgICAgV01MU2VsZWN0RWxlbWVudCogc2VsID0gZ2V0
U2VsZWN0KCk7CisgICAgaWYgKCFzZWwpCisgICAgICAgIHJldHVybjsKKworICAgIHNldFNlbGVj
dGVkKHNlbGVjdCk7CisgICAgaWYgKHNlbC0+bXVsdGlwbGUoKSAmJiBtX2hhc0ludHJpbnNpY0V2
ZW50KQorICAgICAgICBoYW5kbGVJbnRyaW5zaWNFdmVudElmTmVlZGVkKCk7CisgICAgZWxzZSBp
ZiAobV9oYXNJbnRyaW5zaWNFdmVudCAmJiBzZWxlY3RlZCgpKQorICAgICAgICBoYW5kbGVJbnRy
aW5zaWNFdmVudElmTmVlZGVkKCk7CisKKyAgICBzZXRDaGFuZ2VkKCk7Cit9CisKK1dNTFNlbGVj
dEVsZW1lbnQqIFdNTE9wdGlvbkVsZW1lbnQ6OmdldFNlbGVjdCgpIGNvbnN0Cit7CisgICAgTm9k
ZSogc2VsZWN0ID0gcGFyZW50Tm9kZSgpOworICAgIHdoaWxlIChzZWxlY3QgJiYgIXNlbGVjdC0+
aGFzVGFnTmFtZShzZWxlY3RUYWcpKQorICAgICAgICBzZWxlY3QgPSBzZWxlY3QtPnBhcmVudE5v
ZGUoKTsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXTUxTZWxlY3RFbGVtZW50Kj4oc2VsZWN0
KTsKK30KKworfSAvL25hbWVzcGFjZQpJbmRleDogd21sL1dNTE9wdGlvbkVsZW1lbnQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSB3bWwvV01MT3B0aW9uRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dN
TE9wdGlvbkVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5k
ZWYgV01MT3B0aW9uRWxlbWVudF9oCisjZGVmaW5lIFdNTE9wdGlvbkVsZW1lbnRfaAorCisjaW5j
bHVkZSAiSFRNTE9wdGlvbkVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBEb2N1bWVudDsKK2NsYXNzIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcjsKK2NsYXNzIFdNTFNl
bGVjdEVsZW1lbnQ7CisKK2NsYXNzIFdNTE9wdGlvbkVsZW1lbnQgOiBwdWJsaWMgSFRNTE9wdGlv
bkVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MT3B0aW9uRWxlbWVudChEb2N1bWVudCopOworICAg
IHZpcnR1YWwgfldNTE9wdGlvbkVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1h
cHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2b2lkIHNldFNlbGVjdGVkU3Rh
dGUoYm9vbCk7CisgICAgV01MU2VsZWN0RWxlbWVudCogZ2V0U2VsZWN0KCkgY29uc3Q7CisKKyAg
ICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpOworICAgIGJvb2wgaGFz
SW50cmluc2ljRXZlbnQoKTsKKyAgICB2b2lkIHNldEhhc0ludHJpbnNpY0V2ZW50KGJvb2wpOwor
ICAgIHZvaWQgaGFuZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCgpOworCisgICAgdm9pZCB1cGRh
dGVBdHRyc0lmTmVlZGVkKCk7IAorcHJpdmF0ZToKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIqIG1fZXZudEhhbmRsZXI7CisgICAgYm9vbCBtX2hhc0ludHJpbnNpY0V2ZW50OworfTsKKwor
fSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MUEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHdtbC9XTUxQRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MUEVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldNTFBFbGVtZW50LmgiCisKKyNpbmNsdWRlICJDU1NQcm9wZXJ0
eU5hbWVzLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgorI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MUEVs
ZW1lbnQ6OldNTFBFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MUGFyYWdyYXBoRWxl
bWVudChkb2MpIAoreworfQorCitXTUxQRWxlbWVudDo6fldNTFBFbGVtZW50KCkgCit7Cit9CisK
K3ZvaWQgV01MUEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG1vZGVBdHRyKSB7CisgICAgICAgIG1f
bW9kZSA9ICBhdHRyLT52YWx1ZSgpOworICAgICAgICBpZiAobV9tb2RlID09ICJ3cmFwIikKKyAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5V29yZFdyYXAsIENTU1Zh
bHVlQnJlYWtXb3JkKTsKKyAgICAgICAgZWxzZSBpZiAobV9tb2RlID09ICJub3dyYXAiKQorICAg
ICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlXaGl0ZVNwYWNlLCBDU1NW
YWx1ZU5vd3JhcCk7CisgICAgfSBlbHNlCisgICAgICAgIEhUTUxQYXJhZ3JhcGhFbGVtZW50Ojpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKK30KKwordm9pZCBXTUxQRWxlbWVudDo6dXBkYXRl
QXR0cnNJZk5lZWRlZCgpCit7CisgICAgLy8gSWYgbm90IGV4cGxpY2l0bHkgc3BlY2lmaWVkLCB0
aGUgbGluZXdyYXAgbW9kZSBpcyBpZGVudGljYWwgdG8gCisgICAgLy8gdGhlIGxpbmUtd3JhcCBt
b2RlIG9mIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGggaW4gdGhlIHRleHQgZmxvdyBvZgorICAgIC8v
IGEgY2FyZC5UaGUgZGVmYXVsdCBtb2RlIGZvciB0aGUgZmlyc3QgcGFyYWdyYXBoIGluIGEgY2Fy
ZCBpcyB3cmFwCisgICAgaWYgKG1fbW9kZS5pc0VtcHR5KCkpIHsKKyAgICAgICAgUGFzc1JlZlB0
cjxOb2RlTGlzdD4gbmwgPSBkb2N1bWVudCgpLT5nZXRFbGVtZW50c0J5VGFnTmFtZSgicCIpOwor
ICAgICAgICBpbnQgbkxlbiA9IG5sLmdldCgpLT5sZW5ndGgoKTsKKyAgICAgICAgaWYgKG5MZW4g
PT0gMCkKKyAgICAgICAgICAgIHNldEF0dHJpYnV0ZShtb2RlQXR0ciwgIndyYXAiKTsKKyAgICAg
ICAgZWxzZSBpZiAobkxlbiA+IDApIHsKKyAgICAgICAgICAgIFdNTFBFbGVtZW50KiBwRWwgPSBz
dGF0aWNfY2FzdDxXTUxQRWxlbWVudCo+KG5sLmdldCgpLT5pdGVtKG5MZW4tMSkpOworICAgICAg
ICAgICAgU3RyaW5nIHByZU1vZGUgPSBwRWwtPmdldEF0dHJpYnV0ZSgibW9kZSIpOworICAgICAg
ICAgICAgc2V0QXR0cmlidXRlKG1vZGVBdHRyLCBwcmVNb2RlKTsKKyAgICAgICAgfQorICAgIH0K
K30KKworfSAvL25hbWVzcGFjZQpJbmRleDogd21sL1dNTFBFbGVtZW50LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gd21sL1dNTFBFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MUEVsZW1lbnQuaAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBo
dHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUg
Q09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9u
LCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisjaWZuZGVmIFdNTFBFbGVtZW50X2gKKyNk
ZWZpbmUgV01MUEVsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTFBhcmFncmFwaEVsZW1lbnQuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgV01MUEVs
ZW1lbnQgOiBwdWJsaWMgSFRNTFBhcmFncmFwaEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MUEVs
ZW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxQRWxlbWVudCgpOworCisgICAgdmly
dHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZv
aWQgdXBkYXRlQXR0cnNJZk5lZWRlZCgpOworCitwcml2YXRlOgorICAgIFN0cmluZyBtX21vZGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxQYWdlU3RhdGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxQYWdlU3RhdGUuY3BwCShyZXZpc2lvbiAwKQorKysg
d21sL1dNTFBhZ2VTdGF0ZS5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorCisjaW5jbHVk
ZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIu
aCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgor
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxEb2N1bWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldN
TE5hbWVzLmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRv
a2VuaXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dNTFBhZ2VTdGF0ZTo6V01MUGFn
ZVN0YXRlKFBhZ2UqIHBhZ2UpCit7CisgICAgbV9wYWdlID0gcGFnZTsKKyAgICBtX2hpc3RMZW4g
PSAwOworICAgIG1fYWN0aXZlQ2FyZCA9IDA7CisgICAgbV9oYXNEZWNrQWNjZXNzID0gZmFsc2U7
Cit9CisKK1dNTFBhZ2VTdGF0ZTo6fldNTFBhZ2VTdGF0ZSgpCit7CisgICAgbV92YXJpYWJsZXMu
Y2xlYXIoKTsKKyAgICBtX3BhZ2UgPSAwOworICAgIG1fYWN0aXZlQ2FyZCA9IDA7CisgICAgbV9o
YXNEZWNrQWNjZXNzID0gZmFsc2U7Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRlOjpyZXNldCgpCit7
CisgICAgLy9yZW1vdmUgYWxsIHRoZSB2YXJpYWJsZXMgaW4gdGhlIGN1cnJlbnQgYnJvd3NlciBj
b250ZXh0CisgICAgbV92YXJpYWJsZXMuY2xlYXIoKTsKKworICAgIC8vY2xlYXIgdGhlIG5hdmln
YXRpb24gaGlzdG9yeSBzdGF0ZSAKKyAgICBpZiAobV9wYWdlKQorICAgICAgICBtX3BhZ2UtPmJh
Y2tGb3J3YXJkTGlzdCgpLT5jbGVhcldtbFBhZ2VIaXN0b3J5KCk7CisKKyAgICAvL3Jlc2V0IGlt
cGxlbWVudGF0aW9uLXNwZWNmaWMgc3RhdGUgaWYgVUEgaGFzCisgICAgbV9oaXN0TGVuID0gMTsK
K30KKwordm9pZCBXTUxQYWdlU3RhdGU6OnN0b3JlVmFyaWFibGUoY29uc3QgU3RyaW5nJiBuYW1l
LCBjb25zdCBTdHJpbmcmIHZhbCkgCit7CisgICAgbV92YXJpYWJsZXMuc2V0KG5hbWUsIHZhbCk7
Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRlOjpzdG9yZVZhcmlhYmxlcyhWYXJpYWJsZU1hcCYgdmFy
cykgCit7CisgICAgbV92YXJpYWJsZXMgPSB2YXJzOworfQorCitTdHJpbmcgV01MUGFnZVN0YXRl
OjpnZXRWYXJpYmFsZShjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0IAoreworICAgIHJldHVybiBt
X3ZhcmlhYmxlcy5nZXQobmFtZSk7Cit9CisKK2Jvb2wgV01MUGFnZVN0YXRlOjpoYXNWYXJpYWJs
ZXMoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV92YXJpYWJsZXMuc2l6ZSgpOworfQorCitQYWdl
KiBXTUxQYWdlU3RhdGU6OnBhZ2UoKSBjb25zdCB7CisgICAgcmV0dXJuIG1fcGFnZTsKK30KKwor
aW50IFdNTFBhZ2VTdGF0ZTo6aGlzdG9yeUxlbmd0aCgpIGNvbnN0IHsKKyAgICByZXR1cm4gbV9o
aXN0TGVuOworfQorCit2b2lkIFdNTFBhZ2VTdGF0ZTo6c2V0SGlzdG9yeUxlbmd0aChpbnQgbGVu
KSB7CisgICAgbV9oaXN0TGVuID0gbGVuOworfQorCitXTUxDYXJkRWxlbWVudCogV01MUGFnZVN0
YXRlOjphY3RpdmVDYXJkKCkKK3sKKyAgICByZXR1cm4gbV9hY3RpdmVDYXJkOworfQorCit2b2lk
IFdNTFBhZ2VTdGF0ZTo6c2V0QWN0aXZlQ2FyZChXTUxDYXJkRWxlbWVudCogY2FyZCkKK3sKKyAg
ICBtX2FjdGl2ZUNhcmQgPSBjYXJkOworfQorCit2b2lkIFdNTFBhZ2VTdGF0ZTo6c2V0RGVja0Fj
Y2Vzc0RvbWFpbihjb25zdCBTdHJpbmcmIGRvbWFpbikKK3sKKyAgICBtX2FjY2Vzc0RvbWFpbiA9
IGRvbWFpbjsKK30KKwordm9pZCBXTUxQYWdlU3RhdGU6OnNldERlY2tBY2Nlc3NQYXRoKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3sKKyAgICBtX2FjY2Vzc1BhdGggPSBwYXRoOworfQorCit2b2lkIFdN
TFBhZ2VTdGF0ZTo6c2V0TmVlZENoZWNrRGVja0FjY2Vzcyhib29sIG5lZWQpCit7CisgICAgaWYg
KG1faGFzRGVja0FjY2VzcyAmJiBuZWVkKSB7CisgICAgICAgIGlmIChXTUxIZWxwZXI6OnRva2Vu
aXplcigpKQorICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3Io
TXVsdGlBY2Nlc3NFbGVtZW50c0Vycm9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2hhc0Rl
Y2tBY2Nlc3MgPSBuZWVkOworICAgICAgICBtX2FjY2Vzc1BhdGggPSBTdHJpbmcoKTsKKyAgICAg
ICAgbV9hY2Nlc3NEb21haW4gPSBTdHJpbmcoKTsKKyAgICB9Cit9CisKK2Jvb2wgV01MUGFnZVN0
YXRlOjpoYXNEZWNrQWNjZXNzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9oYXNEZWNrQWNjZXNz
OworfQorCitib29sIFdNTFBhZ2VTdGF0ZTo6aXNEZWNrQWNjZXNzaWJsZSgpCit7CisgICAgaWYg
KCFtX2hhc0RlY2tBY2Nlc3MgfHwgIW1fcGFnZSB8fCAhbV9wYWdlLT5iYWNrRm9yd2FyZExpc3Qo
KSB8fCAhbV9wYWdlLT5iYWNrRm9yd2FyZExpc3QoKS0+YmFja0l0ZW0oKSkKKyAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICBIaXN0b3J5SXRlbSogaGlzdEl0ZW0gPSBtX3BhZ2UtPmJhY2tGb3J3
YXJkTGlzdCgpLT5iYWNrSXRlbSgpOworICAgIEtVUkwgdXJsKGhpc3RJdGVtLT51cmxTdHJpbmco
KSk7CisgICAgU3RyaW5nIHByZXZIb3N0ID0gdXJsLmhvc3QoKTsKKyAgICAvLyBmb3IgJ2ZpbGUn
IFVSSSwgdGhlIGhvc3QgcGFydCBtYXkgYmUgZW1wdHksIHNvIHdlIHNob3VsZCBjb21wbGV0ZSBp
dC4KKyAgICBpZiAocHJldkhvc3QuaXNFbXB0eSgpKQorICAgICAgICBwcmV2SG9zdCA9ICJsb2Nh
bGhvc3QiOworICAgIFN0cmluZyBwcmV2UGF0aCA9IHVybC5wYXRoKCk7CisKKyAgICBoaXN0SXRl
bSA9IG1fcGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmN1cnJlbnRJdGVtKCk7CisgICAgS1VSTCBj
dXJVcmwoaGlzdEl0ZW0tPnVybFN0cmluZygpKTsKKyAgICBTdHJpbmcgY3VyUGF0aCA9IGN1clVy
bC5wYXRoKCk7CisKKyAgICBpZiAoZXF1YWxJZ25vcmluZ1JlZih1cmwsIGN1clVybCkpCisgICAg
ICAgcmV0dXJuIHRydWU7CisKKyAgICBib29sIGNhbkFjY2VzcyA9IGZhbHNlOworICAgIC8vICIv
IiBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc3BlY2lmaWVkCisgICAgaWYgKG1fYWNjZXNz
UGF0aC5pc0VtcHR5KCkpICAKKyAgICAgICAgbV9hY2Nlc3NQYXRoID0gIi8iOworICAgIGVsc2Ug
aWYgKG1fYWNjZXNzUGF0aC5lbmRzV2l0aCgiLyIpICYmIChtX2FjY2Vzc1BhdGggIT0gIi8iKSkK
KyAgICAgICAgbV9hY2Nlc3NQYXRoID0gbV9hY2Nlc3NQYXRoLmxlZnQoKG1fYWNjZXNzUGF0aC5s
ZW5ndGgoKS0xKSk7CisKKworICAgIC8vIGN1cnJlbnQgZGVjayBkb21haW4gaXMgdGhlIGRlZmF1
bHQgdmFsdWUgaWYgbm90IHNwZWNpZmllZAorICAgIGlmIChtX2FjY2Vzc0RvbWFpbi5pc0VtcHR5
KCkpCisgICAgICAgIG1fYWNjZXNzRG9tYWluID0gcHJldkhvc3Q7CisKKyAgICAvL2NvbnZlcnQg
cmVsYXRpdmUgVVJMIHRvIGFic29sdXRlIFVSTCBiZWZvcmUgcGVyZm9ybWluZyBwYXRoIG1hdGNo
aW5nCisgICAgaWYgKHByZXZIb3N0ID09IG1fYWNjZXNzRG9tYWluKSB7CisgICAgICAgIGlmICgh
bV9hY2Nlc3NQYXRoLnN0YXJ0c1dpdGgoIi8iKSkgeworICAgICAgICAgICBpbnQgaWR4ID0gY3Vy
UGF0aC5yZXZlcnNlRmluZCgnLycpOworICAgICAgICAgICBpZiAoaWR4ICE9IC0xKSB7CisgICAg
ICAgICAgICAgICBjdXJQYXRoID0gY3VyUGF0aC5sZWZ0KGlkeCsxKTsKKyAgICAgICAgICAgICAg
IGN1clBhdGggKz0gbV9hY2Nlc3NQYXRoOworICAgICAgICAgICAgICAgY3VyVXJsLnNldFBhdGgo
Y3VyUGF0aCk7CisgICAgICAgICAgICAgICBtX2FjY2Vzc1BhdGggPSBjdXJVcmwucGF0aCgpOwor
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBwYXRoIHByZWZpeCBtYXRj
aGluZworICAgIGlmIChwcmV2UGF0aC5zdGFydHNXaXRoKG1fYWNjZXNzUGF0aCkgJiYgCisgICAg
ICAgKChwcmV2UGF0aFttX2FjY2Vzc1BhdGgubGVuZ3RoKCldID09ICcvJykgfHwgKHByZXZQYXRo
Lmxlbmd0aCgpID09IG1fYWNjZXNzUGF0aC5sZW5ndGgoKSkpKSB7CisgICAgICAgIGNhbkFjY2Vz
cyA9IHRydWU7CisKKyAgICAgICAgLy8gZG9tYWluIHN1ZmZpeCBtYXRjaGluZworICAgICAgICB1
bnNpZ25lZCBkb21haW5MZW4gPSBtX2FjY2Vzc0RvbWFpbi5sZW5ndGgoKTsKKyAgICAgICAgdW5z
aWduZWQgaG9zdExlbiA9IHByZXZIb3N0Lmxlbmd0aCgpOworICAgICAgICBpZiAocHJldkhvc3Qu
ZW5kc1dpdGgobV9hY2Nlc3NEb21haW4pICYmIChwcmV2SG9zdFtob3N0TGVuLWRvbWFpbkxlbi0x
XSA9PSAnLicpIHx8IChob3N0TGVuID09IGRvbWFpbkxlbikpCisgICAgICAgICAgICBjYW5BY2Nl
c3MgPSB0cnVlOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjYW5BY2Nlc3MgPSBmYWxzZTsK
KyAgICB9CisKKyAgICByZXR1cm4gIGNhbkFjY2VzczsKK30KKworfQpJbmRleDogd21sL1dNTFBh
Z2VTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxQYWdlU3RhdGUuaAkocmV2aXNpb24gMCkK
KysrIHdtbC9XTUxQYWdlU3RhdGUuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgV01MUGFnZVN0YXRlX2gKKyNkZWZpbmUgV01MUGFnZVN0YXRlX2gKKworI2luY2x1
ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUGFnZTsKK2NsYXNzIFdNTENhcmRFbGVtZW50OworCit0eXBlZGVmIEhhc2hNYXA8U3Ry
aW5nLCBTdHJpbmc+IFZhcmlhYmxlTWFwOworCitjbGFzcyBXTUxQYWdlU3RhdGUgOiBwdWJsaWMg
UmVmQ291bnRlZDxXTUxQYWdlU3RhdGU+IHsKKworcHVibGljOgorICAgIFdNTFBhZ2VTdGF0ZShQ
YWdlKik7CisgICAgfldNTFBhZ2VTdGF0ZSgpOworCisgICAgLy8gcmVzZXQgdGhlIGJyb3dzZXIg
Y29udGV4dCB3aGVuICdOZXdjb250ZXh0JyBhdHRyaWJ1dGUgb2YgY2FyZCBlbGVtZW50IGlzCisg
ICAgLy8gcGVyZm9ybWVkIGFzIHBhcnQgb2YgZ28gdGFzaworICAgIHZvaWQgcmVzZXQoKTsKKwor
ICAgIC8vIHZhcmlhYmxlcyBvcGVyYXRpb25zIAorICAgIHZvaWQgc3RvcmVWYXJpYWJsZShjb25z
dCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHN0b3JlVmFyaWFibGVzKFZhcmlh
YmxlTWFwJik7CisgICAgU3RyaW5nIGdldFZhcmliYWxlKGNvbnN0IFN0cmluZyYpIGNvbnN0Owor
ICAgIGJvb2wgaGFzVmFyaWFibGVzKCkgY29uc3Q7CisKKyAgICBpbnQgaGlzdG9yeUxlbmd0aCgp
IGNvbnN0OworICAgIHZvaWQgc2V0SGlzdG9yeUxlbmd0aChpbnQpOworCisgICAgUGFnZSogcGFn
ZSgpIGNvbnN0OworCisgICAgV01MQ2FyZEVsZW1lbnQqIGFjdGl2ZUNhcmQoKTsKKyAgICB2b2lk
IHNldEFjdGl2ZUNhcmQoV01MQ2FyZEVsZW1lbnQqKTsKKworICAgIC8vIGRlY2sgYWNjZXNzIGNv
bnRyb2wKKyAgICB2b2lkIHNldERlY2tBY2Nlc3NEb21haW4oY29uc3QgU3RyaW5nJik7CisgICAg
dm9pZCBzZXREZWNrQWNjZXNzUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHNldE5lZWRD
aGVja0RlY2tBY2Nlc3MoYm9vbCk7CisgICAgYm9vbCBoYXNEZWNrQWNjZXNzKCkgY29uc3Q7Cisg
ICAgYm9vbCBpc0RlY2tBY2Nlc3NpYmxlKCk7CisKK3ByaXZhdGU6CisgICAgUGFnZSogbV9wYWdl
OworICAgIFZhcmlhYmxlTWFwIG1fdmFyaWFibGVzOworICAgIGludCBtX2hpc3RMZW47CisgICAg
V01MQ2FyZEVsZW1lbnQqIG1fYWN0aXZlQ2FyZDsKKyAgICBTdHJpbmcgbV9hY2Nlc3NEb21haW47
CisgICAgU3RyaW5nIG1fYWNjZXNzUGF0aDsKKyAgICBib29sIG1faGFzRGVja0FjY2VzczsKK307
CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MUG9zdGZpZWxkRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuY3BwCShyZXZpc2lv
biAwKQorKysgd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICog
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVT
QS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFBvc3RmaWVs
ZEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAi
RXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1l
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJOYW1lTm9kZUxpc3QuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFRh
c2tFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdN
TE5hbWVzOworCitXTUxQb3N0ZmllbGRFbGVtZW50OjpXTUxQb3N0ZmllbGRFbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpCisgOiBXTUxFbGVtZW50KG5hbWUs
IGRvYykKK3sKK30KKworV01MUG9zdGZpZWxkRWxlbWVudDo6fldNTFBvc3RmaWVsZEVsZW1lbnQo
KQoreworfQorCit2b2lkIFdNTFBvc3RmaWVsZEVsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9v
bCBkZWVwKQoreworICAgIE5vZGUqIGFuY2VzdG9yID0gcGFyZW50Tm9kZSgpOworICAgIC8vIHRo
ZSBhbmNlc3RvciBvZiA8cG9zdGZpZWxkPiBnb3QgdG8gYmUgPGdvPgorICAgIGlmICghYW5jZXN0
b3ItPmhhc1RhZ05hbWUoV01MTmFtZXM6OmdvVGFnKSkKKyAgICAgICAgcmV0dXJuOyAgICAgCisK
KyAgICBXTUxHb0VsZW1lbnQqIGdvID0gMDsKKyAgICBnbyA9IHN0YXRpY19jYXN0PFdNTEdvRWxl
bWVudCo+KGFuY2VzdG9yKTsKKyAgICBpZiAoZ28pCisgICAgICAgIGdvLT5yZWdpc3RlclBvc3Rm
aWVsZEVsZW1lbnQodGhpcyk7Cit9CisKK1N0cmluZyBXTUxQb3N0ZmllbGRFbGVtZW50OjpuYW1l
KCkgCit7CisgICAgcmV0dXJuIFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihnZXRBdHRyaWJ1
dGUoIm5hbWUiKSwgZG9jdW1lbnQoKSk7Cit9CisKK1N0cmluZyBXTUxQb3N0ZmllbGRFbGVtZW50
Ojp2YWx1ZSgpIAoreworICAgIHJldHVybiBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoZ2V0
QXR0cmlidXRlKCJ2YWx1ZSIpLCBkb2N1bWVudCgpKTsKK30gICAgCisKK30KKwpJbmRleDogd21s
L1dNTFBvc3RmaWVsZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MUG9zdGZpZWxkRWxl
bWVudC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MUG9zdGZpZWxkRWxlbWVudF9o
CisjZGVmaW5lIFdNTFBvc3RmaWVsZEVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFBvc3RmaWVsZEVsZW1lbnQgOiBw
dWJsaWMgIFdNTEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MUG9zdGZpZWxkRWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKTsKKyAgICB+V01MUG9zdGZpZWxk
RWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVw
KTsgICAgLy8gbmVlZCB0byByZWdpc3RlciBteXNlbGYgdG8gcGFyZW50cyBoZXJlLCBsaWtlIDxn
bz4sIDxvbmV2ZW50PgorCisgICAgU3RyaW5nIG5hbWUoKTsgICAgLy8gZXZlcnkgcG9zdGZpZWxk
IHRhZyBtdXN0IGhhdmUgYSBuYW1lIGF0dHJpYnV0ZSBhbmQgYSB2YWxpZCBhdHRyaWJ1dGUKKyAg
ICBTdHJpbmcgdmFsdWUoKTsKKworfTsKKworfQorI2VuZGlmCkluZGV4OiB3bWwvV01MUHJldkVs
ZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxQcmV2RWxlbWVudC5jcHAJKHJldmlzaW9u
IDApCisrKyB3bWwvV01MUHJldkVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFByZXZFbGVtZW50Lmgi
CisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAi
RnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgor
I2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVk
ZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRpbWVyRWxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1dNTFByZXZFbGVtZW50OjpXTUxQcmV2RWxlbWVudChjb25z
dCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICA6IFdNTFRhc2tFbGVt
ZW50KHRhZ05hbWUsIGRvYykKK3sKK30KKworV01MUHJldkVsZW1lbnQ6OldNTFByZXZFbGVtZW50
KERvY3VtZW50KiBkb2MpCisgIDogV01MVGFza0VsZW1lbnQoV01MTmFtZXM6OnByZXZUYWcsIGRv
YykKK3sKK30KKworV01MUHJldkVsZW1lbnQ6On5XTUxQcmV2RWxlbWVudCgpCit7Cit9CisgICAg
ICAgICAgICAgICAgICAgICAgIAordm9pZCBXTUxQcmV2RWxlbWVudDo6ZXhlYyhFdmVudCogZXZ0
LCBTdHJpbmcgdXJpKQoreworICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7Cisg
ICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBjb252ZXJ0IHZhcmlhYmxl
IG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2V0dmFyIGVsZW1lbnQgaWYgbmVjZXNzYXJ5CisgICAgVmFy
aWFibGVNYXAgbV92YXJzOworICAgIGlmIChoYXNTZXR2YXIoKSkgeworICAgICAgICBmb3IgKHVu
c2lnbmVkIGludCBpID0gMDsgaSA8IG1fc2V0dmFycy5zaXplKCk7ICsraSkgeworICAgICAgICAg
ICAgaWYgKCFtX3NldHZhcnNbaV0tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAgICAg
bV92YXJzLnNldChtX3NldHZhcnNbaV0tPm5hbWUoKSwgbV9zZXR2YXJzW2ldLT52YWx1ZSgpKTsK
KyAgICAgICAgfQorICAgIH0KKyAKKyAgICAvLyB1cGRhdGUgYnJvd3NlciBjb250ZXh0IAorICAg
IGlmICghbV92YXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcGFnZS0+d21sUGFnZVN0YXRlKCktPnN0
b3JlVmFyaWFibGVzKG1fdmFycyk7CisKKyAgICAvLyBzdG9wIHRoZSB0aW1lciBvZiB0aGUgY3Vy
cmVudCBjYXJkIGlmIGl0IGlzIGFjdGl2ZQorICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gcGFn
ZS0+d21sUGFnZVN0YXRlKCktPmFjdGl2ZUNhcmQoKTsKKyAgICBpZiAoY2FyZCAmJiBjYXJkLT5l
dmVudFRpbWVyKCkpCisgICAgICAgIGNhcmQtPmV2ZW50VGltZXIoKS0+c3RvcCgpOworCisgICAg
Ly8gcHJlcGFyZSBmb3IgZGlzcGxheWluZyB0aGUgZGVzdCBjYXJkCisgICAgcGFnZS0+Z29CYWNr
KCk7Cit9CisKKworfSAvL25hbWVzcGFjZQorCkluZGV4OiB3bWwvV01MUHJldkVsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSB3bWwvV01MUHJldkVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIHdtbC9X
TUxQcmV2RWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBXTUxQcmV2RWxlbWVudF9oCisjZGVmaW5lIFdNTFByZXZFbGVtZW50X2gKKworI2luY2x1ZGUg
IldNTFRhc2tFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFdN
TFByZXZFbGVtZW50IDogcHVibGljIFdNTFRhc2tFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxQ
cmV2RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKTsK
KyAgICBXTUxQcmV2RWxlbWVudChEb2N1bWVudCogZG9jKTsKKyAgICB2aXJ0dWFsIH5XTUxQcmV2
RWxlbWVudCgpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBleGVjKEV2ZW50ICosIFN0cmluZykg
OworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxSZWZyZXNoRWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFJlZnJlc2hFbGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIHdtbC9XTUxSZWZyZXNoRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmls
ZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MUmVmcmVzaEVs
ZW1lbnQuaCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNp
bmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgor
I2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxUaW1lckVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxS
ZWZyZXNoRWxlbWVudDo6V01MUmVmcmVzaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFn
TmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICAgICAgOiBXTUxUYXNrRWxlbWVudCggdGFnTmFtZSwg
ZG9jKQoreworfQorCitXTUxSZWZyZXNoRWxlbWVudDo6fldNTFJlZnJlc2hFbGVtZW50KCkKK3sK
K30KKwordm9pZCAgV01MUmVmcmVzaEVsZW1lbnQ6OmV4ZWMoRXZlbnQqIGV2dCwgU3RyaW5nIHVy
aSkgCit7CisgICAgaWYgKCFkb2N1bWVudCgpLT5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAg
ICBXTUxQYWdlU3RhdGUqIHBhZ2VTdGF0ZSA9IGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0
YXRlKCk7CisgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSBwYWdlU3RhdGUtPmFjdGl2ZUNhcmQo
KTsKKyAgICBXTUxUaW1lckVsZW1lbnQqIHRpbWVyID0gY2FyZC0+ZXZlbnRUaW1lcigpOworICAg
IC8vIEJlZm9yZSBwZXJmb3JtIHJlZnJlc2ggdGFzaywgd2Ugc3RvcmUgdGhlIGN1cnJlbnQgdGlt
ZW91dCB2YWx1ZSAKKyAgICAvLyBhbmQgdGhlbiBzdG9wIHRoZSB0aW1lcgorICAgIGlmICh0aW1l
cikgeworICAgICAgICB0aW1lci0+c3RvcmVJbnRlcnZhbFRvUGFnZVN0YXRlKCk7CisgICAgICAg
IHRpbWVyLT5zdG9wKCk7CisgICAgfQorCisgICAgLy8gY29udmVydCB2YXJpYWJsZSBuYW1lcyBh
bmQgdmFsdWVzIG9mIHNldHZhciBlbGVtZW50IGlmIG5lY2Vzc2FyeQorICAgIFZhcmlhYmxlTWFw
IG1fdmFyczsKKyAgICBpZiAoaGFzU2V0dmFyKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
bnQgaSA9IDA7IGkgPCBtX3NldHZhcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICgh
bV9zZXR2YXJzW2ldLT5uYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fdmFycy5z
ZXQobV9zZXR2YXJzW2ldLT5uYW1lKCksIG1fc2V0dmFyc1tpXS0+dmFsdWUoKSk7CisgICAgICAg
IH0KKyAgICB9ICAKKworICAgIC8vIHVwZGF0ZSBicm93c2VyIGNvbnRleHQgCisgICAgaWYgKCFt
X3ZhcnMuaXNFbXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGVzKG1fdmFy
cyk7CisKKyAgICAvL3JlZGlzcGxheSBjdXJyZW10IGNhcmQgd2l0aCBjdXJyZW50IHZhcmlhYmxl
IHN0YXRlCisgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnJlbG9hZCgpOworCisg
ICAgLy9BZnRlciByZWZyZXNoaW5nIHRhc2ssIHJlc3VtZSB0aGUgdGltZXIgaWYgaXQgZXhzaXRz
IAorICAgIGlmICh0aW1lcikKKyAgICAgICAgdGltZXItPnN0YXJ0KCk7Cit9CisKK30gLy9uYW1l
c3BhY2UKKwpJbmRleDogd21sL1dNTFJlZnJlc2hFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21s
L1dNTFJlZnJlc2hFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MUmVmcmVzaEVsZW1l
bnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAg
ICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0y
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhl
IGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICog
Qm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MUmVmcmVz
aEVsZW1lbnRfaAorI2RlZmluZSBXTUxSZWZyZXNoRWxlbWVudF9oCisKKyNpbmNsdWRlICJTdHls
ZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxl
bWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1l
czsKKworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTFJlZnJlc2hFbGVtZW50IDog
cHVibGljIFdNTFRhc2tFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxSZWZyZXNoRWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKTsKKyAgICB2aXJ0dWFs
IH5XTUxSZWZyZXNoRWxlbWVudCgpOworICAgIAorICAgIHZpcnR1YWwgdm9pZCBleGVjKEV2ZW50
ICosIFN0cmluZykgOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9X
TUxTZWxlY3RFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MU2VsZWN0RWxlbWVudC5j
cHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsNTg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cu
dG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldN
TFNlbGVjdEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRI
YW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1
ZGUgPG1hdGguaD4KKyNpbmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyTGlz
dEJveC5oIgorI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIK
KyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVsZW1lbnQuaCIKKyNp
bmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNs
dWRlIDx3dGYvVmVjdG9yLmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIEFSUk9XX0tF
WVNfUE9QX01FTlUgMQorI2Vsc2UKKyNkZWZpbmUgQVJST1dfS0VZU19QT1BfTUVOVSAwCisjZW5k
aWYKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MU2Vs
ZWN0RWxlbWVudDo6V01MU2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWcsIERv
Y3VtZW50KiBkb2MpCisgICAgOiBIVE1MU2VsZWN0RWxlbWVudCh0YWcsIGRvYywgMCkKK3sKK30K
KworV01MU2VsZWN0RWxlbWVudDo6fldNTFNlbGVjdEVsZW1lbnQoKQoreworfQorCit2b2lkIFdN
TFNlbGVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0
cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CisgICAgICAgIGlmIChX
TUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAgICAgICAgICAgV01M
SGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNl
RXJyb3IpOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFsdWUo
KTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVlQXR0cikKKyAgICAgICAg
bV92YWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGlu
YW1lQXR0cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52
YWx1ZSgpKSkKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9y
KEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9pTmFtZSA9IGF0dHItPnZhbHVlKCk7CisKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBpdmFsdWVBdHRyKQorICAgICAgICBtX2lWYWx1ZSA9IGF0dHItPnZhbHVlKCk7CisgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG11bHRpcGxlQXR0cikgeworICAgICAgICBib29sIG9s
ZE11bHRpcGxlID0gbXVsdGlwbGUoKTsKKyAgICAgICAgc2V0TXVsdGlwbGUoYXR0ci0+dmFsdWUo
KSA9PSAidHJ1ZSIpOworICAgICAgICBpZiAoKG9sZE11bHRpcGxlICE9IG11bHRpcGxlKCkpICYm
IGF0dGFjaGVkKCkpIHsKKyAgICAgICAgICAgIGRldGFjaCgpOworICAgICAgICAgICAgYXR0YWNo
KCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBIVE1MTmFtZXM6
OnNpemVBdHRyKQorICAgICAgICA7Ly9EbyBub3RoaW5nCisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IEhUTUxOYW1lczo6ZGlzYWJsZWRBdHRyKQorICAgICAgICA7Ly9EbyBub3RoaW5nCisg
ICAgZWxzZQorICAgICAgICBIVE1MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6dXBkYXRlQXR0cnNJZk5lZWRlZCgp
IAoreworICAgIFN0cmluZyBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYobV92YWx1
ZSwgZG9jdW1lbnQoKSk7CisgICAgaWYgKG1fdmFsdWUgIT0gc3ViKSB7CisgICAgICAgIHNldEF0
dHJpYnV0ZSh2YWx1ZUF0dHIsIHN1Yik7CisgICAgICAgIG1fdmFsdWUgPSBzdWI7CisgICAgfQor
CisgICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKG1faVZhbHVlLCBkb2N1bWVu
dCgpKTsKKyAgICBpZiAobV9pVmFsdWUgIT0gc3ViKSB7CisgICAgICAgIHNldEF0dHJpYnV0ZShp
dmFsdWVBdHRyLCBzdWIpOworICAgICAgICBtX2lWYWx1ZSA9IHN1YjsKKyAgICB9CisKKyAgICBT
dHJpbmcgdGl0bGUgPSBnZXRBdHRyaWJ1dGUoInRpdGxlIik7CisgICAgc3ViID0gV01MSGVscGVy
OjpzdWJzdGl0dXRlVmFyUmVmKHRpdGxlLCBkb2N1bWVudCgpKTsKKyAgICBpZiAodGl0bGUgIT0g
c3ViKQorICAgICAgICBzZXRBdHRyaWJ1dGUodGl0bGVBdHRyLCB0aXRsZSk7Cit9CisKK3ZvaWQg
V01MU2VsZWN0RWxlbWVudDo6c2V0U2VsZWN0ZWRJbmRleChpbnQgb3B0aW9uSW5kZXgsIGJvb2wg
ZGVzZWxlY3QsIGJvb2wgZmlyZU9uQ2hhbmdlKQoreworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxl
bWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIGludCBsaXN0SW5kZXggPSBvcHRpb25U
b0xpc3RJbmRleChvcHRpb25JbmRleCk7CisgICAgV01MT3B0aW9uRWxlbWVudCogZWxlbWVudCA9
IDA7CisKKyAgICBpZiAoIW11bHRpcGxlKCkpCisgICAgICAgIGRlc2VsZWN0ID0gdHJ1ZTsKKwor
ICAgIGlmIChsaXN0SW5kZXggPj0gMCkgeworICAgICAgICBpZiAoYWN0aXZlU2VsZWN0aW9uQW5j
aG9ySW5kZXgoKSA8IDAgfHwgZGVzZWxlY3QpCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rp
b25BbmNob3JJbmRleChsaXN0SW5kZXgpOworICAgICAgICBpZiAoYWN0aXZlU2VsZWN0aW9uRW5k
SW5kZXgoKSA8IDAgfHwgZGVzZWxlY3QpCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25F
bmRJbmRleChsaXN0SW5kZXgpOworICAgICAgICBlbGVtZW50ID0gc3RhdGljX2Nhc3Q8V01MT3B0
aW9uRWxlbWVudCo+KGl0ZW1zW2xpc3RJbmRleF0pOworICAgICAgICBlbGVtZW50LT5zZXRTZWxl
Y3RlZFN0YXRlKHRydWUpOworICAgIH0KKworICAgIGlmIChkZXNlbGVjdCkKKyAgICAgICAgZGVz
ZWxlY3RJdGVtcyhlbGVtZW50KTsKKworICAgIHNjcm9sbFRvU2VsZWN0aW9uKCk7CisKKyAgICAv
LyBUaGlzIG9ubHkgZ2V0cyBjYWxsZWQgd2l0aCBmaXJlT25DaGFuZ2UgZm9yIG1lbnUgbGlzdHMu
IAorICAgIGlmIChmaXJlT25DaGFuZ2UgJiYgdXNlc01lbnVMaXN0KCkpCisgICAgICAgIG1lbnVM
aXN0T25DaGFuZ2UoKTsKK30KKworU3RyaW5nIFdNTFNlbGVjdEVsZW1lbnQ6OnZhbHVlVG9JVmFs
dWUoU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBpZiAodmFsdWUuaXNFbXB0eSgpKSAKKyAgICAgICAg
cmV0dXJuIHZhbHVlOworCisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0g
bGlzdEl0ZW1zKCk7CisgICAgVmVjdG9yPFN0cmluZz4gdmFsVmVjdHM7CisgICAgdmFsdWUuc3Bs
aXQoJzsnLCB2YWxWZWN0cyk7CisgICAgVmVjdG9yPFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gdmFs
VmVjdHMuYmVnaW4oKTsKKyAgICBXTUxPcHRpb25FbGVtZW50KiBvcHRpb24gPSAwOyAKKyAgICBT
dHJpbmcgaVZhbDsKKyAgICBTdHJpbmcgdmFsOworICAgIHdoaWxlIChpdCAhPSB2YWxWZWN0cy5l
bmQoKSkgeworICAgICAgICB2YWwgPSAqaXQ7CisgICAgICAgIGludCBvcHRJZHggPSAwOworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgpOyBpKyspIHsKKyAgICAg
ICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpIHsKKyAgICAgICAg
ICAgICAgICBvcHRJZHgrKzsKKyAgICAgICAgICAgICAgICBvcHRpb24gPSBzdGF0aWNfY2FzdDxX
TUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pOworICAgICAgICAgICAgICAgIGlmIChvcHRpb24t
PnZhbHVlKCkgPT0gdmFsKSB7CisgICAgICAgICAgICAgICAgICAgIGlWYWwgKz0gU3RyaW5nOjpu
dW1iZXIob3B0SWR4KTsKKyAgICAgICAgICAgICAgICAgICAgaVZhbCArPSAiOyI7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICArK2l0OworICAgIH0KKworICAgIGlmIChpVmFsLmVuZHNXaXRoKCI7
IikpIAorICAgICAgICBpVmFsID0gaVZhbC5sZWZ0KGlWYWwubGVuZ3RoKCktMSk7CisKKyAgICBy
ZXR1cm4gdmFsaWRhdGVJbmRleFZhbHVlKGlWYWwpOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxl
bWVudDo6aXZhbHVlVG9WYWx1ZShTdHJpbmcmIGl2YWx1ZSkKK3sKKyAgICBpZiAoaXZhbHVlLmlz
RW1wdHkoKSkgCisgICAgICAgIHJldHVybiBpdmFsdWU7CisKKyAgICBXTUxPcHRpb25FbGVtZW50
KiBvcHRpb24gPSAwOyAKKyAgICBTdHJpbmcgaXZhbDsKKyAgICBTdHJpbmcgdmFsOworICAgIGlu
dCBvcHRJZHggPSAtMTsKKyAgICBpbnQgbGlzdElkeCA9IC0xOworICAgIGNvbnN0IFZlY3RvcjxI
VE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJdGVtcygpOworICAgIFZlY3RvcjxTdHJpbmc+IHZh
bFZlY3RzOworICAgIGl2YWx1ZS5zcGxpdCgnOycsIHZhbFZlY3RzKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPjo6aXRlcmF0b3IgaXQgPSB2YWxWZWN0cy5iZWdpbigpOworICAgIHdoaWxlIChpdCAhPSB2
YWxWZWN0cy5lbmQoKSkgeworICAgICAgICBpdmFsID0gKml0Kys7CisKKyAgICAgICAgb3B0SWR4
ID0gaXZhbC50b0ludCgpOworICAgICAgICBpZiAoKG9wdElkeCA8IDEpIHx8IChvcHRJZHggPiBz
dGF0aWNfY2FzdDxpbnQ+KGl0ZW1zLnNpemUoKSkpKQorICAgICAgICAgICAgICAgY29udGludWU7
IAorCisgICAgICAgIGxpc3RJZHggPSBvcHRpb25Ub0xpc3RJbmRleChvcHRJZHgtMSk7CisgICAg
ICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tsaXN0SWR4
XSk7CisKKyAgICAgICAgdmFsICs9IG9wdGlvbi0+dmFsdWUoKTsKKyAgICAgICAgdmFsICs9ICI7
IjsKKyAgICB9CisKKyAgICBpZiAodmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICB2YWwgPSB2
YWwubGVmdCh2YWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsOworfQorCitTdHJpbmcg
V01MU2VsZWN0RWxlbWVudDo6dmFsaWRhdGVJbmRleFZhbHVlKFN0cmluZyYgaXZhbCkKK3sKKyAg
ICBpZiAoaXZhbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBpdmFsOworCisgICAgYm9vbCBv
ayA9IHRydWU7CisgICAgU3RyaW5nIHZhbCgiIik7CisgICAgU3RyaW5nIG5ld1ZhbDsKKyAgICBW
ZWN0b3I8U3RyaW5nPiB2YWxWZWN0czsKKyAgICBpdmFsLnNwbGl0KCc7JywgdmFsVmVjdHMpOwor
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdmFsVmVjdHMuc2l6ZSgpOyArK2kpIHsKKyAgICAg
ICAgdW5zaWduZWQgblZhbCA9IHZhbFZlY3RzW2ldLnRvSW50KCZvayk7CisgICAgICAgIGlmICgh
b2sgfHwgKG5WYWwgPCAxKSB8fCAoblZhbCA+IGxlbmd0aCgpKSkgeworICAgICAgICAgICAgdmFs
VmVjdHMucmVtb3ZlKGkpOworICAgICAgICAgICAgaS0tOworICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbmV3VmFsID0gU3RyaW5nOjpudW1iZXIoblZhbCk7CisgICAgICAgICAgICBpZiAo
LTEgPT0gdmFsLmZpbmQobmV3VmFsKSkgeworICAgICAgICAgICAgICAgIHZhbCArPSBuZXdWYWw7
IAorICAgICAgICAgICAgICAgIHZhbCArPSAiOyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAodmFsLmVuZHNXaXRoKCI7IikpIAorICAgICAgICB2YWwgPSB2YWwu
bGVmdCh2YWwubGVuZ3RoKCktMSk7CisKKyAgICByZXR1cm4gdmFsOworfQorCit2b2lkIFdNTFNl
bGVjdEVsZW1lbnQ6OmNhbGNEZWZhdWx0T3B0aW9uSW5kZXgoKQoreworICAgIGlmICghZG9jdW1l
bnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgV01MUGFnZVN0YXRlICpwYWdlU3Rh
dGUgPSBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIFN0cmluZyB2YXI7
CisgICAgaWYgKCFtX2lOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICB2YXIgPSBwYWdlU3RhdGUt
PmdldFZhcmliYWxlKG1faU5hbWUpOworICAgICAgICBpZiAoIXZhci5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFsdWUodmFyKTsKKyAgICB9
CisKKyAgICBpZiAobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSAmJiAhbV9pVmFsdWUuaXNFbXB0
eSgpKQorICAgICAgICBtX2RlZmF1bHRPcHRJZHggPSB2YWxpZGF0ZUluZGV4VmFsdWUobV9pVmFs
dWUpOworCisgICAgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkgJiYgIW1fbmFtZS5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgdmFyID0gcGFnZVN0YXRlLT5nZXRWYXJpYmFsZShtX25hbWUpOwor
ICAgICAgICBpZiAoIXZhci5pc0VtcHR5KCkpCisgICAgICAgICAgICBtX2RlZmF1bHRPcHRJZHgg
PSB2YWx1ZVRvSVZhbHVlKHZhcik7CisgICAgfQorCisgICAgaWYgKG1fZGVmYXVsdE9wdElkeC5p
c0VtcHR5KCkgJiYgIW1fdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBtX2RlZmF1bHRPcHRJZHgg
PSB2YWx1ZVRvSVZhbHVlKG1fdmFsdWUpOworCisgICAgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0Vt
cHR5KCkgJiYgbXVsdGlwbGUoKSkKKyAgICAgICAgbV9kZWZhdWx0T3B0SWR4ID0gIjAiOworICAg
IGVsc2UgaWYgKG1fZGVmYXVsdE9wdElkeC5pc0VtcHR5KCkpCisgICAgICAgIG1fZGVmYXVsdE9w
dElkeCA9ICIxIjsKKworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OmluaXRpYWxpc2VWYXJp
YWJsZXMoKQoreworICAgIGNvbnN0IFZlY3RvcjxIVE1MRWxlbWVudCo+JiBpdGVtcyA9IGxpc3RJ
dGVtcygpOworICAgIGlmIChpdGVtcy5zaXplKCkgPD0gMCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7CisgICAgV01MUGFnZVN0YXRlKiBwYWdlU3Rh
dGUgPSBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpOworICAgIEFTU0VSVChwYWdl
U3RhdGUpOworICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSAmJiAhbXVsdGlwbGUoKSkgeworCisg
ICAgICAgIHVuc2lnbmVkIGludCBpZHggPSBtX2RlZmF1bHRPcHRJZHgudG9JbnQoKTsgCisgICAg
ICAgIGlmIChpZHggPCAxIHx8IGlkeCA+IGl0ZW1zLnNpemUoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBpbnQgbGlzdElkeCA9IG9wdGlvblRvTGlz
dEluZGV4KGlkeC0xKTsKKyAgICAgICAgICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IHN0
YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tsaXN0SWR4XSk7CisgICAgICAgICAg
ICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobV9uYW1lLCBvcHRpb24tPnZhbHVlKCkpOworICAg
ICAgICB9CisKKyAgICB9IGVsc2UgaWYgKCFtX25hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIFN0
cmluZyBuYW1lVmFsID0gaXZhbHVlVG9WYWx1ZShtX2RlZmF1bHRPcHRJZHgpOworICAgICAgICBw
YWdlU3RhdGUtPnN0b3JlVmFyaWFibGUobV9uYW1lLCBuYW1lVmFsKTsKKyAgICB9CisKKyAgICBp
ZiAoIW1faU5hbWUuaXNFbXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGUo
bV9pTmFtZSwgbV9kZWZhdWx0T3B0SWR4KTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50Ojpw
cmVTZWxlY3RPcHRpb25zQnlEZWZhdWx0KCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiBpZHhWZWN0
czsKKyAgICBtX2RlZmF1bHRPcHRJZHguc3BsaXQoJzsnLCBpZHhWZWN0cyk7CisgICAgVmVjdG9y
PFN0cmluZz46Oml0ZXJhdG9yIGl0ID0gaWR4VmVjdHMuYmVnaW4oKTsKKyAgICBpbnQgaWR4ID0g
LTE7CisgICAgaWYgKG11bHRpcGxlKCkpIHsKKyAgICAgICAgd2hpbGUgKGl0ICE9IGlkeFZlY3Rz
LmVuZCgpKSB7CisgICAgICAgICAgICBpZHggPSAoKml0KS50b0ludCgpOyAKKyAgICAgICAgICAg
IHNldFNlbGVjdGVkSW5kZXgoaWR4LTEsIGZhbHNlKTsKKyAgICAgICAgICAgICsraXQ7CisgICAg
ICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpZHggPSAoKml0KS50b0ludCgpOyAKKyAgICAg
ICAgc2V0U2VsZWN0ZWRJbmRleChpZHgtMSwgZmFsc2UpOworICAgIH0KK30KKwordm9pZCBXTUxT
ZWxlY3RFbGVtZW50OjpzZWxlY3RJbml0aWFsT3B0aW9ucygpCit7CisgICAgY2FsY0RlZmF1bHRP
cHRpb25JbmRleCgpOworCisgICAgaWYgKCFtX2RlZmF1bHRPcHRJZHguaXNFbXB0eSgpKSB7Cisg
ICAgICAgIGluaXRpYWxpc2VWYXJpYWJsZXMoKTsKKyAgICAgICAgcHJlU2VsZWN0T3B0aW9uc0J5
RGVmYXVsdCgpOworICAgIH0KK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50OjpkZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50KiBldnQpCit7CisgICAgaWYgKCFtdWx0aXBsZSgpKQorICAgICAgICBt
ZW51TGlzdERlZmF1bHRFdmVudEhhbmRsZXIoZXZ0KTsKKyAgICBlbHNlIAorICAgICAgICBsaXN0
Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworICAgIAorICAgIGlmIChldnQtPmRlZmF1bHRI
YW5kbGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChldnQtPnR5cGUoKSA9PSBldmVu
dE5hbWVzKCkua2V5cHJlc3NFdmVudCAmJiBldnQtPmlzS2V5Ym9hcmRFdmVudCgpKSB7CisgICAg
ICAgIEtleWJvYXJkRXZlbnQqIGtleWJvYXJkRXZlbnQgPSBzdGF0aWNfY2FzdDxLZXlib2FyZEV2
ZW50Kj4oZXZ0KTsKKyAgICAKKyAgICAgICAgaWYgKCFrZXlib2FyZEV2ZW50LT5jdHJsS2V5KCkg
JiYgIWtleWJvYXJkRXZlbnQtPmFsdEtleSgpICYmICFrZXlib2FyZEV2ZW50LT5tZXRhS2V5KCkg
JiYKKyAgICAgICAgICAgIGlzUHJpbnRhYmxlQ2hhcihrZXlib2FyZEV2ZW50LT5jaGFyQ29kZSgp
KSkgeworICAgICAgICAgICAgdHlwZUFoZWFkRmluZChrZXlib2FyZEV2ZW50KTsKKyAgICAgICAg
ICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnRXaXRoU3RhdGU6OmRlZmF1
bHRFdmVudEhhbmRsZXIoZXZ0KTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50OjptZW51TGlz
dERlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKK3sKKyAgICBSZW5kZXJNZW51TGlzdCog
bWVudUxpc3QgPSBzdGF0aWNfY2FzdDxSZW5kZXJNZW51TGlzdCo+KHJlbmRlcmVyKCkpOworCisg
ICAgLy8gVXNlIGtleSBwcmVzcyBldmVudCBoZXJlIHNpbmNlIHNlbmRpbmcgc2ltdWxhdGVkIG1v
dXNlIGV2ZW50cworICAgIC8vIG9uIGtleSBkb3duIGJsb2NrcyB0aGUgcHJvcGVyIHNlbmRpbmcg
b2YgdGhlIGtleSBwcmVzcyBldmVudC4KKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1l
cygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFldnQtPmlz
S2V5Ym9hcmRFdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcga2V5
SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpLT5rZXlJZGVudGlm
aWVyKCk7CisgICAgICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworI2lmIEFSUk9XX0tFWVNfUE9Q
X01FTlUKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkVudGVyIikgeworICAgICAgICAg
ICAgbWVudUxpc3RPbkNoYW5nZSgpOworICAgICAgICAgICAgaWYgKGZvcm0oKSkKKyAgICAgICAg
ICAgICAgICBmb3JtKCktPnN1Ym1pdENsaWNrKGV2dCk7CisgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwg
a2V5SWRlbnRpZmllciA9PSAiVXAiIHx8IGtleUlkZW50aWZpZXIgPT0gIlUrMDAyMCIpIHsKKyAg
ICAgICAgICAgIGZvY3VzKCk7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28g
aXQgY2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNo
YW5nZSBkdXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgIC8vIHdoaWNoIGdldHMg
Y2FsbGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxs
ZWQgYWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KKyAgICAg
ICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1Bv
cHVwKCk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorI2Vsc2UKKyAg
ICAgICAgaW50IGxpc3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkSW5kZXgoKSk7
CisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09
ICJSaWdodCIpIHsKKyAgICAgICAgICAgIGludCBzaXplID0gbGlzdEl0ZW1zKCkuc2l6ZSgpOwor
ICAgICAgICAgICAgZm9yIChsaXN0SW5kZXggKz0gMTsKKyAgICAgICAgICAgICAgICAgbGlzdElu
ZGV4ID49IDAgJiYgbGlzdEluZGV4IDwgc2l6ZSAmJiAobGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+
ZGlzYWJsZWQoKSB8fCAhbGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlv
blRhZykpOworICAgICAgICAgICAgICAgICArK2xpc3RJbmRleCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplKQorICAgICAg
ICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7
CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXlJZGVu
dGlmaWVyID09ICJVcCIgfHwga2V5SWRlbnRpZmllciA9PSAiTGVmdCIpIHsKKyAgICAgICAgICAg
IGludCBzaXplID0gbGlzdEl0ZW1zKCkuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChsaXN0SW5k
ZXggLT0gMTsKKyAgICAgICAgICAgICAgICAgbGlzdEluZGV4ID49IDAgJiYgbGlzdEluZGV4IDwg
c2l6ZSAmJiAobGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSB8fCAhbGlzdEl0ZW1z
KClbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpOworICAgICAgICAgICAgICAg
ICAtLWxpc3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChsaXN0SW5kZXgg
Pj0gMCAmJiBsaXN0SW5kZXggPCBzaXplKQorICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5k
ZXgobGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7CisgICAgICAgICAgICBoYW5kbGVkID0g
dHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJFbnRlciIpIHsKKyAg
ICAgICAgICAgIC8vIGxpc3RJbmRleCBzaG91bGQgYWxyZWFkeSBiZSBzZWxlY3RlZCwgYnV0IHRo
aXMgd2lsbCBmaXJlIHRoZSBvbmNoYW5nZSBoYW5kbGVyLgorICAgICAgICAgICAgc2V0U2VsZWN0
ZWRJbmRleChsaXN0VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCB0cnVlKTsKKyAgICAg
ICAgICAgIGhhbmRsZWQgPSB0cnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKGhh
bmRsZWQpCisgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICB9Cisg
ICAgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldnQt
PmlzTW91c2VFdmVudCgpICYmIHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24o
KSA9PSBMZWZ0QnV0dG9uKSB7CisgICAgICAgIGZvY3VzKCk7CisgICAgICAgIGlmIChtZW51TGlz
dC0+cG9wdXBJc1Zpc2libGUoKSkKKyAgICAgICAgICAgIG1lbnVMaXN0LT5oaWRlUG9wdXAoKTsK
KyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQg
Y2FuIGJlIGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5n
ZSBkdXJpbmcgc2V0U2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2Fs
bGVkIGZyb20gUmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQg
YWZ0ZXIgdGhlIHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KKyAgICAgICAg
ICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVw
KCk7CisgICAgICAgIH0KKyAgICAgICAgZXZ0LT5zZXREZWZhdWx0SGFuZGxlZCgpOworICAgIH0K
KworICAgIC8vIHVwZGF0ZSBuYW1lIGFuZCBpbmFtZSB2YXJpYWJsZXMgd2l0aCBvcHRpb24ncyB2
YWx1ZSBhbmQgaW5kZXgKKyAgICB1cGRhdGVWYXJpYWJsZXMoKTsKK30KKwordm9pZCBXTUxTZWxl
Y3RFbGVtZW50OjpsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCogZXZ0KQoreworICAg
IGlmICghcmVuZGVyZXIoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2dC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldnQtPmlzTW91c2VFdmVudCgpICYm
IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpLT5idXR0b24oKSA9PSBMZWZ0QnV0dG9uKSB7
CisgICAgICAgIGZvY3VzKCk7CisgICAgICAgIAorICAgICAgICBNb3VzZUV2ZW50KiBtRXZ0ID0g
c3RhdGljX2Nhc3Q8TW91c2VFdmVudCo+KGV2dCk7CisgICAgICAgIGludCBsaXN0SW5kZXggPSBz
dGF0aWNfY2FzdDxSZW5kZXJMaXN0Qm94Kj4ocmVuZGVyZXIoKSktPmxpc3RJbmRleEF0T2Zmc2V0
KG1FdnQtPm9mZnNldFgoKSwgbUV2dC0+b2Zmc2V0WSgpKTsKKyAgICAgICAgaWYgKGxpc3RJbmRl
eCA+PSAwKSB7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJl
IGNvbXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJp
bmcgbW91c2V1cCwgb3IgYWZ0ZXIgYXV0b3Njcm9sbCBmaW5pc2hlcy4KKyAgICAgICAgICAgIHNh
dmVMYXN0U2VsZWN0aW9uKCk7CisKKyAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvblN0YXRl
KHRydWUpOworICAgICAgICAgICAgCisgICAgICAgICAgICBib29sIG11bHRpU2VsZWN0S2V5UHJl
c3NlZCA9IGZhbHNlOworI2lmIFBMQVRGT1JNKE1BQykKKyAgICAgICAgICAgIG11bHRpU2VsZWN0
S2V5UHJlc3NlZCA9IG1FdnQtPm1ldGFLZXkoKTsKKyNlbHNlCisgICAgICAgICAgICBtdWx0aVNl
bGVjdEtleVByZXNzZWQgPSBtRXZ0LT5jdHJsS2V5KCk7CisjZW5kaWYKKworICAgICAgICAgICAg
Ym9vbCBzaGlmdFNlbGVjdCA9IG11bHRpcGxlKCkgJiYgbUV2dC0+c2hpZnRLZXkoKTsKKyAgICAg
ICAgICAgIGJvb2wgbXVsdGlTZWxlY3QgPSBtdWx0aXBsZSgpICYmIG11bHRpU2VsZWN0S2V5UHJl
c3NlZCAmJiAhbUV2dC0+c2hpZnRLZXkoKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgSFRN
TEVsZW1lbnQqIGNsaWNrZWRFbGVtZW50ID0gbGlzdEl0ZW1zKClbbGlzdEluZGV4XTsgICAgICAg
ICAgICAKKyAgICAgICAgICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IDA7CisgICAgICAg
ICAgICBpZiAoY2xpY2tlZEVsZW1lbnQtPmhhc0xvY2FsTmFtZShvcHRpb25UYWcpKSB7CisgICAg
ICAgICAgICAgICAgb3B0aW9uID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+KGNsaWNr
ZWRFbGVtZW50KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBLZWVwIHRy
YWNrIG9mIHdoZXRoZXIgYW4gYWN0aXZlIHNlbGVjdGlvbiAobGlrZSBkdXJpbmcgZHJhZyBzZWxl
Y3Rpb24pLCBzaG91bGQgc2VsZWN0IG9yIGRlc2VsZWN0CisgICAgICAgICAgICAgICAgc2V0QWN0
aXZlU2VsZWN0aW9uU3RhdGUoIW9wdGlvbi0+c2VsZWN0ZWQoKSk7CisgICAgICAgICAgICAgICAg
b3B0aW9uLT5zZXRTZWxlY3RlZFN0YXRlKGFjdGl2ZVNlbGVjdGlvblN0YXRlKCkpOworCisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHdlJ3JlIG5vdCBpbiBh
bnkgc3BlY2lhbCBtdWx0aXBsZSBzZWxlY3Rpb24gbW9kZSwgdGhlbiBkZXNlbGVjdCBhbGwgb3Ro
ZXIgaXRlbXMsIGV4Y2x1ZGluZyB0aGUgY2xpY2tlZCBvcHRpb24uCisgICAgICAgICAgICAvLyBJ
ZiBubyBvcHRpb24gd2FzIGNsaWNrZWQsIHRoZW4gdGhpcyB3aWxsIGRlc2VsZWN0IGFsbCBpdGVt
cyBpbiB0aGUgbGlzdC4KKyAgICAgICAgICAgIGlmICghc2hpZnRTZWxlY3QgJiYgIW11bHRpU2Vs
ZWN0KQorICAgICAgICAgICAgICAgIGRlc2VsZWN0SXRlbXMob3B0aW9uKTsKKworICAgICAgICAg
ICAgLy8gSWYgdGhlIGFuY2hvciBoYXNuJ3QgYmVlbiBzZXQsIGFuZCB3ZSdyZSBkb2luZyBhIHNp
bmdsZSBzZWxlY3Rpb24gb3IgYSBzaGlmdCBzZWxlY3Rpb24sIHRoZW4gaW5pdGlhbGl6ZSB0aGUg
YW5jaG9yIHRvIHRoZSBmaXJzdCBzZWxlY3RlZCBpbmRleC4KKyAgICAgICAgICAgIGlmIChhY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCAmJiAhbXVsdGlTZWxlY3QpCisgICAgICAgICAg
ICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoc2VsZWN0ZWRJbmRleCgpKTsKKwor
ICAgICAgICAgICAgLy8gSWYgdGhlcmUgd2FzIG5vIHNlbGVjdGVkSW5kZXgoKSBmb3IgdGhlIHBy
ZXZpb3VzIGluaXRpYWxpemF0aW9uLCBvcgorICAgICAgICAgICAgLy8gSWYgd2UncmUgZG9pbmcg
YSBzaW5nbGUgc2VsZWN0aW9uLCBvciBhIG11bHRpcGxlIHNlbGVjdGlvbiAodXNpbmcgY21kIG9y
IGN0cmwpLCB0aGVuIGluaXRpYWxpemUgdGhlIGFuY2hvciBpbmRleCB0byB0aGUgbGlzdEluZGV4
IHRoYXQganVzdCBnb3QgY2xpY2tlZC4KKyAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCAm
JiAoYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoKSA8IDAgfHwgIXNoaWZ0U2VsZWN0KSkKKyAg
ICAgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleChsaXN0SW5kZXgpOwor
ICAgICAgICAgICAgCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChsaXN0
SW5kZXgpOworICAgICAgICAgICAgdXBkYXRlTGlzdEJveFNlbGVjdGlvbighbXVsdGlTZWxlY3Qp
OworCisgICAgICAgICAgICBpZiAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQoKS0+ZnJhbWUoKSkK
KyAgICAgICAgICAgICAgICBmcmFtZS0+ZXZlbnRIYW5kbGVyKCktPnNldE1vdXNlRG93bk1heVN0
YXJ0QXV0b3Njcm9sbCgpOworCisgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGV2dC0+dHlwZSgpID09IGV2ZW50TmFtZXMoKS5t
b3VzZXVwRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2
ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiBkb2N1bWVudCgpLT5mcmFtZSgp
LT5ldmVudEhhbmRsZXIoKS0+YXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIoKSkKKyAg
ICAgICAgLy8gVGhpcyBtYWtlcyBzdXJlIHdlIGZpcmUgb25DaGFuZ2UgZm9yIGEgc2luZ2xlIGNs
aWNrLiAgRm9yIGRyYWcgc2VsZWN0aW9uLCBvbkNoYW5nZSB3aWxsIGZpcmUgd2hlbiB0aGUgYXV0
b3Njcm9sbCB0aW1lciBzdG9wcy4KKyAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7CisgICAgZWxz
ZSBpZiAoZXZ0LT50eXBlKCkgPT0gZXZlbnROYW1lcygpLmtleXByZXNzRXZlbnQpIHsKKyAgICAg
ICAgaWYgKCFldnQtPmlzS2V5Ym9hcmRFdmVudCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihl
dnQpLT5rZXlJZGVudGlmaWVyKCk7CisKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkVu
dGVyIikgeworICAgICAgICAgICAgaWYgKGZvcm0oKSkKKyAgICAgICAgICAgICAgICBmb3JtKCkt
PnN1Ym1pdENsaWNrKGV2dCk7CisgICAgICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBpbnQgZW5kSW5kZXgg
PSAwOyAgICAgICAgCisgICAgICAgIGludCBhY3RpdmVTZWxlY3Rpb25FbmRJZHggPSBhY3RpdmVT
ZWxlY3Rpb25FbmRJbmRleCgpOworICAgICAgICBpZiAoYWN0aXZlU2VsZWN0aW9uRW5kSWR4IDwg
MCkgeworICAgICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgZW5kIGluZGV4CisgICAgICAgICAg
ICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIpCisgICAgICAgICAgICAgICAgZW5kSW5kZXgg
PSBuZXh0U2VsZWN0YWJsZUxpc3RJbmRleChsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSk7CisgICAg
ICAgICAgICBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpCisgICAgICAgICAgICAgICAg
ZW5kSW5kZXggPSBwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgob3B0aW9uVG9MaXN0SW5kZXgo
c2VsZWN0ZWRJbmRleCgpKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvLyBTZXQg
dGhlIGVuZCBpbmRleCBiYXNlZCBvbiB0aGUgY3VycmVudCBlbmQgaW5kZXgKKyAgICAgICAgICAg
IGlmIChrZXlJZGVudGlmaWVyID09ICJEb3duIikKKyAgICAgICAgICAgICAgICBlbmRJbmRleCA9
IG5leHRTZWxlY3RhYmxlTGlzdEluZGV4KGFjdGl2ZVNlbGVjdGlvbkVuZElkeCk7CisgICAgICAg
ICAgICBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJVcCIpCisgICAgICAgICAgICAgICAgZW5k
SW5kZXggPSBwcmV2aW91c1NlbGVjdGFibGVMaXN0SW5kZXgoYWN0aXZlU2VsZWN0aW9uRW5kSWR4
KTsgICAgCisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGlmIChrZXlJZGVudGlmaWVyID09
ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09ICJVcCIpIHsKKyAgICAgICAgICAgIC8vIFNhdmUg
dGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5ldyBzZWxlY3Rpb24g
d2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGltbWVkaWF0ZWx5IGFmdGVyIG1ha2luZyB0aGUgbmV3IHNl
bGVjdGlvbi4KKyAgICAgICAgICAgIHNhdmVMYXN0U2VsZWN0aW9uKCk7CisKKyAgICAgICAgICAg
IEFTU0VSVChlbmRJbmRleCA+PSAwICYmICh1bnNpZ25lZCllbmRJbmRleCA8IGxpc3RJdGVtcygp
LnNpemUoKSk7IAorICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uRW5kSW5kZXgoZW5kSW5k
ZXgpOworICAgICAgICAgICAgCisgICAgICAgICAgICAvLyBJZiB0aGUgYW5jaG9yIGlzIHVuaXRp
YWxpemVkLCBvciBpZiB3ZSdyZSBnb2luZyB0byBkZXNlbGVjdCBhbGwgb3RoZXIgb3B0aW9ucywg
dGhlbiBzZXQgdGhlIGFuY2hvciBpbmRleCBlcXVhbCB0byB0aGUgZW5kIGluZGV4LgorICAgICAg
ICAgICAgYm9vbCBkZXNlbGVjdE90aGVycyA9ICFtdWx0aXBsZSgpIHx8ICFzdGF0aWNfY2FzdDxL
ZXlib2FyZEV2ZW50Kj4oZXZ0KS0+c2hpZnRLZXkoKTsKKyAgICAgICAgICAgIGlmIChhY3RpdmVT
ZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCB8fCBkZXNlbGVjdE90aGVycykgeworICAgICAgICAg
ICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKHRydWUpOworICAgICAgICAgICAgICAgIGlm
IChkZXNlbGVjdE90aGVycykKKyAgICAgICAgICAgICAgICAgICAgZGVzZWxlY3RJdGVtcygpOwor
ICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGFjdGl2ZVNlbGVj
dGlvbkVuZElkeCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFJl
bmRlckxpc3RCb3gqPihyZW5kZXJlcigpKS0+c2Nyb2xsVG9SZXZlYWxFbGVtZW50QXRMaXN0SW5k
ZXgoZW5kSW5kZXgpOworICAgICAgICAgICAgdXBkYXRlTGlzdEJveFNlbGVjdGlvbihkZXNlbGVj
dE90aGVycyk7CisgICAgICAgICAgICBsaXN0Qm94T25DaGFuZ2UoKTsKKyAgICAgICAgICAgIGV2
dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIHVwZGF0
ZSBuYW1lIGFuZCBpbmFtZSB2YXJpYWJsZXMgd2l0aCBvcHRpb24ncyB2YWx1ZSBhbmQgaW5kZXgK
KyAgICB1cGRhdGVWYXJpYWJsZXMoKTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50Ojp1cGRh
dGVWYXJpYWJsZXMoKQoreworICAgIGlmIChtX2lOYW1lLmlzRW1wdHkoKSAmJiBtX25hbWUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICBTdHJpbmcgbmFtZTsKKyAgICBTdHJpbmcg
aW5hbWU7CisgICAgaW50IG9wdElkeCA9IDA7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50
Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0
ZW1zLnNpemUoKTsgaSsrKSB7CisgICAgICAgIGlmIChpdGVtc1tpXS0+aGFzTG9jYWxOYW1lKG9w
dGlvblRhZykpIHsKKyAgICAgICAgICAgIG9wdElkeCsrOworICAgICAgICAgICAgV01MT3B0aW9u
RWxlbWVudCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2ld
KTsKKyAgICAgICAgICAgIGlmIChvcHRpb24tPnNlbGVjdGVkKCkpIHsKKyAgICAgICAgICAgICAg
ICBuYW1lICs9IG9wdGlvbi0+Z2V0QXR0cmlidXRlKCJ2YWx1ZSIpOworICAgICAgICAgICAgICAg
IG5hbWUgKz0gIjsiOworICAgICAgICAgICAgICAgIGluYW1lICs9IFN0cmluZzo6bnVtYmVyKG9w
dElkeCk7CisgICAgICAgICAgICAgICAgaW5hbWUgKz0gIjsiOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7CisgICAgQVNT
RVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCkpOworICAgIGlmICghbV9uYW1l
LmlzRW1wdHkoKSkgeworICAgICAgICB3aGlsZSAobmFtZS5lbmRzV2l0aCgiOyIpKQorICAgICAg
ICAgICAgbmFtZSA9IG5hbWUubGVmdChuYW1lLmxlbmd0aCgpLTEpOworICAgICAgICBkb2N1bWVu
dCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zdG9yZVZhcmlhYmxlKG1fbmFtZSwgbmFtZSk7
CisgICAgfQorCisgICAgaWYgKCFtX2lOYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAoaW5h
bWUuZW5kc1dpdGgoIjsiKSkKKyAgICAgICAgICAgIGluYW1lID0gaW5hbWUubGVmdChpbmFtZS5s
ZW5ndGgoKS0xKTsKKyAgICAgICAKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdl
U3RhdGUoKS0+c3RvcmVWYXJpYWJsZShtX2lOYW1lLCBpbmFtZSk7CisgICAgfQorfQorCit9IC8v
bmFtZXNwYWNlCkluZGV4OiB3bWwvV01MU2VsZWN0RWxlbWVudC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdt
bC9XTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MU2VsZWN0RWxlbWVu
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxTZWxlY3RF
bGVtZW50X2gKKyNkZWZpbmUgV01MU2VsZWN0RWxlbWVudF9oCisKKyNpbmNsdWRlICJIVE1MU2Vs
ZWN0RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50Owor
CitjbGFzcyBXTUxTZWxlY3RFbGVtZW50IDogcHVibGljIEhUTUxTZWxlY3RFbGVtZW50eworcHVi
bGljOgorICAgIFdNTFNlbGVjdEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50
Kik7CisgICAgdmlydHVhbCB+V01MU2VsZWN0RWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lk
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9p
ZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAgICB2b2lkIHNldFNlbGVjdGVkSW5k
ZXgoaW50IGluZGV4LCBib29sIGRlc2VsZWN0ID0gdHJ1ZSwgYm9vbCBmaXJlT25DaGFuZ2UgPSBm
YWxzZSk7CisgICAgdm9pZCB1cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgdm9pZCBzZWxlY3RJ
bml0aWFsT3B0aW9ucygpOworCitwcml2YXRlOgorICAgIFN0cmluZyB2YWx1ZVRvSVZhbHVlKFN0
cmluZyYpOworICAgIFN0cmluZyBpdmFsdWVUb1ZhbHVlKFN0cmluZyYpOworICAgIFN0cmluZyB2
YWxpZGF0ZUluZGV4VmFsdWUoU3RyaW5nJik7CisgICAgdm9pZCBjYWxjRGVmYXVsdE9wdGlvbklu
ZGV4KCk7CisgICAgdm9pZCBpbml0aWFsaXNlVmFyaWFibGVzKCk7CisgICAgdm9pZCBwcmVTZWxl
Y3RPcHRpb25zQnlEZWZhdWx0KCk7CisgICAgdm9pZCBtZW51TGlzdERlZmF1bHRFdmVudEhhbmRs
ZXIoRXZlbnQqKTsKKyAgICB2b2lkIGxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7
CisgICAgdm9pZCB1cGRhdGVWYXJpYWJsZXMoKTsKKworICAgIFN0cmluZyBtX25hbWU7CisgICAg
U3RyaW5nIG1fdmFsdWU7CisgICAgU3RyaW5nIG1faU5hbWU7CisgICAgU3RyaW5nIG1faVZhbHVl
OworICAgIFN0cmluZyBtX2RlZmF1bHRPcHRJZHg7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisj
ZW5kaWYKSW5kZXg6IHdtbC9XTUxTZXR2YXJFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwv
V01MU2V0dmFyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3bWwvV01MU2V0dmFyRWxlbWVu
dC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAg
ICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQt
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMK
KyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRo
ZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAq
IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NTSGVscGVy
LmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVk
ZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2lu
Y2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUg
IldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUHJldkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxS
ZWZyZXNoRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IFdNTE5hbWVzOworCitXTUxTZXR2YXJFbGVtZW50OjpXTUxTZXR2YXJFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpIAorICAgIDogV01MRWxlbWVudChuYW1l
LCBkb2MpCit7Cit9CisKK1dNTFNldHZhckVsZW1lbnQ6On5XTUxTZXR2YXJFbGVtZW50KCkKK3sK
K30KKwordm9pZCBXTUxTZXR2YXJFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkK
K3sKKyAgICBXTUxUYXNrRWxlbWVudCogZ28gPSAwOworICAgIE5vZGUqIGFuY2VzdG9yID0gcGFy
ZW50Tm9kZSgpIDsKKyAgICBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoV01MTmFtZXM6OmdvVGFn
KSkKKyAgICAgICAgZ28gPSBzdGF0aWNfY2FzdDxXTUxHb0VsZW1lbnQqPihhbmNlc3Rvcik7Cisg
ICAgZWxzZSBpZiAoYW5jZXN0b3ItPmhhc1RhZ05hbWUoV01MTmFtZXM6OnByZXZUYWcpKQorICAg
ICAgICBnbyA9IHN0YXRpY19jYXN0PFdNTFByZXZFbGVtZW50Kj4oYW5jZXN0b3IpOworICAgIGVs
c2UgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpyZWZyZXNoVGFnKSkKKyAgICAg
ICAgZ28gPSBzdGF0aWNfY2FzdDxXTUxSZWZyZXNoRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICBl
bHNlCisgICAgICAgIHJldHVybjsgCisKKyAgICBpZiAoZ28pCisgICAgICAgIGdvLT5yZWdpc3Rl
clNldHZhckVsZW1lbnQodGhpcyk7Cit9CisKKwordm9pZCBXTUxTZXR2YXJFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgU3RyaW5nIGF0
dHJOYW1lID0gYXR0ci0+bmFtZSgpLnRvU3RyaW5nKCk7CisgICAgaWYgKGF0dHJOYW1lID09IG5h
bWVBdHRyKSB7CisgICAgICAgIGlmICghV01MSGVscGVyOjppc1ZhbGlkVmFyaWFibGVOYW1lKGF0
dHItPnZhbHVlKCksIHRydWUpKQorICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+
cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlTmFtZUVycm9yKTsKKyAgICAgICAgZWxzZSB7Cisg
ICAgICAgICAgICBtX25hbWUgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFs
dWUoKSwgZG9jdW1lbnQoKSk7CisgICAgICAgICAgICBpZiAoIVdNTEhlbHBlcjo6aXNWYWxpZFZh
cmlhYmxlTmFtZShtX25hbWUsIHRydWUpKQorICAgICAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9r
ZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZU5hbWVFcnJvcik7CisgICAgICAg
IH0KKyAgICB9Cit9CisKK1N0cmluZyBXTUxTZXR2YXJFbGVtZW50OjpuYW1lKCkKK3sKKyAgICBy
ZXR1cm4gbV9uYW1lOyAKK30KKworU3RyaW5nIFdNTFNldHZhckVsZW1lbnQ6OnZhbHVlKCkKK3sK
KyAgICByZXR1cm4gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGdldEF0dHJpYnV0ZSgidmFs
dWUiKSwgZG9jdW1lbnQoKSk7Cit9CisKK30KSW5kZXg6IHdtbC9XTUxTZXR2YXJFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gd21sL1dNTFNldHZhckVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIHdt
bC9XTUxTZXR2YXJFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIFdNTFNldHZhckVsZW1lbnRfaAorI2RlZmluZSBXTUxTZXR2YXJFbGVtZW50X2gKKwor
I2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBX
TUxTZXR2YXJFbGVtZW50IDogcHVibGljICBXTUxFbGVtZW50eworcHVibGljOgorICAgIFdNTFNl
dHZhckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYsIERvY3VtZW50Kik7CisgICAgfldNTFNl
dHZhckVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9UcmVlKGJvb2wg
ZGVlcCk7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSopOyAKKworICAgIFN0cmluZyBuYW1lKCk7CisgICAgU3RyaW5nIHZhbHVlKCk7CisKK3By
aXZhdGU6CisgICAgU3RyaW5nIG1fbmFtZTsKK307CisKK30KKworI2VuZGlmCkluZGV4OiB3bWwv
V01MVGFibGVFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MVGFibGVFbGVtZW50LmNw
cAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxUYWJsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxU
YWJsZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhUTUxU
YWJsZUNlbGxFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxlUm93RWxlbWVudC5oIgorI2lu
Y2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGUuaCIKKyNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNlbGwuaCIKKyNpbmNsdWRlICJSZW5kZXJUYWJsZVNlY3Rpb24uaCIKKyNpbmNs
dWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJX
TUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MVGFibGVFbGVtZW50OjpXTUxU
YWJsZUVsZW1lbnQoRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxUYWJsZUVsZW1lbnQoZG9jKSAK
K3sKK30KKworV01MVGFibGVFbGVtZW50Ojp+V01MVGFibGVFbGVtZW50KCkKK3sKK30KKwordm9p
ZCBXTUxUYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSog
YXR0cikKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IGNvbHVtbnNBdHRyKSB7CisgICAgICAg
IGludCBjb2x1bW5zID0gIGF0dHItPnZhbHVlKCkudG9JbnQoKTsKKyAgICAgICAgaWYgKGNvbHVt
bnMgPCAxKQorICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3Io
SW52YWxpZENvbHVtbnNOdW1iZXJGb3JUYWJsZUVycnJvcik7CisKKyAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSB0aXRsZUF0dHIpIHsKKyAgICAgICAgU3RyaW5nIHRpdGxlID0gV01MSGVs
cGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOworICAgICAg
ICBpZiAodGl0bGUgIT0gYXR0ci0+dmFsdWUoKSkKKyAgICAgICAgICAgIHNldEF0dHJpYnV0ZSh0
aXRsZUF0dHIsIHRpdGxlKTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGFsaWdu
QXR0cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJlZihhdHRyLT52YWx1
ZSgpKSkKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKElu
dmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICB9IGVsc2UKKyAgICAgICAgSFRNTFRh
YmxlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK3ZvaWQgV01MVGFi
bGVFbGVtZW50Ojppbml0KCkgCit7CisgICAgdW5zaWduZWQgaW50IGlkeCA9IDA7CisgICAgSFRN
TFRhYmxlUm93RWxlbWVudCogcm93ID0gMDsKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVudCogbGFz
dENvbCA9IDA7CisgICAgUmVmUHRyPEhUTUxUYWJsZUNlbGxFbGVtZW50PiBuZXdDZWxsOworICAg
IFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IGNvbHVtbnM7CisgICAgRXhjZXB0aW9uQ29kZSBl
YzsKKyAgICB1bnNpZ25lZCBhY3R1YWxDb2xOdW0gPSAwOworICAgIHVuc2lnbmVkIGNvbE51bSA9
IGdldEF0dHJpYnV0ZSgiY29sdW1ucyIpLnRvSW50KCk7IAorICAgIGlmIChjb2xOdW0gPCAxKSAK
KyAgICAgICAgY29sTnVtID0gMTsKKworICAgIFN0cmluZyBhbGlnbiA9IGdldEF0dHJpYnV0ZSgi
YWxpZ24iKTsKKworICAgIFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+IHJvd3MgPSBjaGlsZHJl
bigpOworICAgIHVuc2lnbmVkIHJvd051bSA9IHJvd3MtPmxlbmd0aCgpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCByb3dOdW07ICsraSkgeworICAgICAgICByb3cgPSBzdGF0aWNfY2Fz
dDxIVE1MVGFibGVSb3dFbGVtZW50Kj4ocm93cy0+aXRlbShpKSk7CisgICAgICAgIGNvbHVtbnMg
PSByb3ctPmNlbGxzKCk7CisgICAgICAgIGFjdHVhbENvbE51bSA9IGNvbHVtbnMtPmxlbmd0aCgp
OworCisgICAgICAgIGlmIChhY3R1YWxDb2xOdW0gPiBjb2xOdW0pIHsKKyAgICAgICAgICAgIGxh
c3RDb2wgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KGNvbHVtbnMtPml0ZW0o
Y29sTnVtIC0gMSkpOworCisgICAgICAgICAgICAvLyBhZ2dyZWdhdGUgdGhlIHJlZHVuZGFudCBj
b2x1bW5zIGludG8gdGhlIGxhc3QgY29sdW1uCisgICAgICAgICAgICBuZXdDZWxsID0gbmV3IEhU
TUxUYWJsZUNlbGxFbGVtZW50KEhUTUxOYW1lczo6dGRUYWcsIGRvY3VtZW50KCkpOworICAgICAg
ICAgICAgaWYgKG5ld0NlbGwpCisgICAgICAgICAgICAgICAgbmV3Q2VsbC0+YWRkQ2hpbGQobGFz
dENvbC0+Y2xvbmVOb2RlKHRydWUpKTsKKworICAgICAgICAgICAgaWR4ID0gY29sTnVtOworICAg
ICAgICAgICAgd2hpbGUgKGlkeCA8IGFjdHVhbENvbE51bSkKKyAgICAgICAgICAgICAgICBuZXdD
ZWxsLT5hcHBlbmRDaGlsZChjb2x1bW5zLT5pdGVtKGlkeCsrKS0+Y2xvbmVOb2RlKHRydWUpLCBl
Yyk7CisKKyAgICAgICAgICAgIC8vIHJlbW92ZSB0aGUgcmVkdW5kYW50IGNvbHVtbnMKKyAgICAg
ICAgICAgIGlkeCA9IGFjdHVhbENvbE51bTsKKyAgICAgICAgICAgIHdoaWxlIChpZHggPiBjb2xO
dW0pCisgICAgICAgICAgICAgICAgcm93LT5kZWxldGVDZWxsKC0taWR4LCBlYyk7CisKKyAgICAg
ICAgICAgIHJvdy0+cmVwbGFjZUNoaWxkKG5ld0NlbGwsIGxhc3RDb2wsIGVjKTsKKworICAgICAg
ICAgICAgLy8gY29udmVydCB0aGUgYWxpZ24gYXR0cmlidXRlIG9mIHRhYmxlIGVsZW1lbnQgdG8g
dGhhdCBvZiB0ZCBlbGVtZW50CisgICAgICAgICAgICBjb252ZXJ0QWxpZ24oY29sdW1ucywgY29s
TnVtKTsKKyAgICAgICAgfSBlbHNlIGlmIChhY3R1YWxDb2xOdW0gPCBjb2xOdW0pIHsKKyAgICAg
ICAgICAgIGNvbnZlcnRBbGlnbihjb2x1bW5zLCBhY3R1YWxDb2xOdW0pOworCisgICAgICAgICAg
ICAvLyBhcHBlbmQgZW1wdHkgY2VsbHMKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaWR4ID0g
YWN0dWFsQ29sTnVtOyBpZHggPCBjb2xOdW07ICsraWR4KQorICAgICAgICAgICAgICAgIHJvdy0+
aW5zZXJ0Q2VsbCgtMSwgZWMpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIC8vIGNvbnZl
cnQgdGhlIGFsaWduIGF0dHJpYnV0ZSBvZiB0YWJsZSBlbGVtZW50IHRvIHRoYXQgb2YgdGQgZWxl
bWVudAorICAgICAgICAgICAgY29udmVydEFsaWduKGNvbHVtbnMsIGNvbE51bSk7CisKKyAgICAg
ICAgLy8gc2V0IHRoZSBkZWZhdWx0IGFsaWduIGZvciBlYWNoIHJvdworICAgICAgICByb3ctPnNl
dEFsaWduKCJsZWZ0Iik7CisKKyAgICB9IC8vIGVuZCBvZiBmb3IgKC4uLiAKKworfQorCit2b2lk
IFdNTFRhYmxlRWxlbWVudDo6Y29udmVydEFsaWduKFBhc3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+
JiBjb2x1bW5zLCB1bnNpZ25lZCBjZWxsTnVtKSAKK3sKKyAgICBIVE1MVGFibGVDZWxsRWxlbWVu
dCogY2VsbCA9IDA7CisgICAgU3RyaW5nIGFsaWduID0gZ2V0QXR0cmlidXRlKCJhbGlnbiIpOwor
ICAgIGZvciAodW5zaWduZWQgaWR4ID0gMDsgaWR4IDwgY2VsbE51bTsgKytpZHgpIHsKKyAgICAg
ICAgY2VsbCA9IHN0YXRpY19jYXN0PEhUTUxUYWJsZUNlbGxFbGVtZW50Kj4oY29sdW1ucy0+aXRl
bShpZHgpKTsKKyAgICAgICAgaWYgKGFsaWduW2lkeF0gPT0gJ1InICkKKyAgICAgICAgICAgIGNl
bGwtPnNldEFsaWduKCJyaWdodCIpOworICAgICAgICBlbHNlIGlmIChhbGlnbltpZHhdID09ICdD
JykKKyAgICAgICAgICAgIGNlbGwtPnNldEFsaWduKCJjZW50ZXIiKTsKKyAgICB9IAorfQorCit9
IC8vbmFtZXNwYWNlCkluZGV4OiB3bWwvV01MVGFibGVFbGVtZW50LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
d21sL1dNTFRhYmxlRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFRhYmxlRWxlbWVu
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUYWJsZUVs
ZW1lbnRfaAorI2RlZmluZSBXTUxUYWJsZUVsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTFRhYmxl
RWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworCitj
bGFzcyBXTUxUYWJsZUVsZW1lbnQgOiBwdWJsaWMgSFRNTFRhYmxlRWxlbWVudHsKK3B1YmxpYzoK
KyAgICBXTUxUYWJsZUVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxUYWJsZUVs
ZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRB
dHRyaWJ1dGUqKTsKKworICAgIHZvaWQgaW5pdCgpOworICAgIHZvaWQgY29udmVydEFsaWduKFBh
c3NSZWZQdHI8SFRNTENvbGxlY3Rpb24+JiwgdW5zaWduZWQpOyAKK307CisKK30gLy8gbmFtZXNw
YWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTFRhZ05hbWVzLmluCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdt
bC9XTUxUYWdOYW1lcy5pbgkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxUYWdOYW1lcy5pbgkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwzOSBAQAorbmFtZXNwYWNlPSJXTUwiCituYW1lc3BhY2VVUkk9
IiIKK2d1YXJkRmFjdG9yeVdpdGg9IkVOQUJMRShXTUwpIgorCitjYXJkCithCithY2Nlc3MKK2hl
YWQKK21ldGEKK3RlbXBsYXRlCit3bWwKK2JyCitwCit0YWJsZQordGQKK3RyCitiCitiaWcKK2Vt
CitpCitzbWFsbAorc3Ryb25nCit1CithbmNob3IKK2ltZworZG8KK29uZXZlbnQKK3Bvc3RmaWVs
ZAorZ28KK25vb3AKK3ByZXYKK3JlZnJlc2gKK2ZpZWxkc2V0CitpbnB1dAorb3B0Z3JvdXAKK29w
dGlvbgorc2VsZWN0CitzZXR2YXIKK3RpbWVyCkluZGV4OiB3bWwvV01MVGFza0VsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHdtbC9XTUxUYXNrRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyB3
bWwvV01MVGFza0VsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE0NiBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorCisjaW5j
bHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEFuY2hvckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxUZW1wbGF0ZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK3RlbXBs
YXRlPGNsYXNzIFQsIHNpemVfdCBuPiBzdGF0aWMgdm9pZCByZW1vdmVGcm9tVmVjdG9yKFZlY3Rv
cjxUKiwgbj4gJiB2ZWMsIFQqIGl0ZW0pIAoreworICAgIHNpemVfdCBzaXplID0gdmVjLnNpemUo
KTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSAhPSBzaXplOyArK2kpCisgICAgICAgIGlmICh2
ZWNbaV0gPT0gaXRlbSkgeworICAgICAgICAgICAgdmVjLnJlbW92ZShpKTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9Cit9CisgCitXTUxUYXNrRWxlbWVudDo6V01MVGFza0VsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IFdNTEVs
ZW1lbnQodGFnTmFtZSwgZG9jKQoreworfQorCitXTUxUYXNrRWxlbWVudDo6fldNTFRhc2tFbGVt
ZW50KCkKK3sKK30KKwordm9pZCBXTUxUYXNrRWxlbWVudDo6YmluZEludHJpbnNpY0V2ZW50SW5P
bmV2ZW50KE5vZGUqIG9uZXZlbnROb2RlKQoreworICAgIFdNTEludHJpbnNpY0V2ZW50VHlwZSB0
eXBlID0gVW5rbm93bjsKKyAgICBTdHJpbmcgdHlwZUF0dHJpID0gc3RhdGljX2Nhc3Q8V01MRWxl
bWVudCo+KG9uZXZlbnROb2RlKS0+Z2V0QXR0cmlidXRlKCJ0eXBlIik7CisKKyAgICBpZiAoV01M
SGVscGVyOjpoYXNWYXJpYWJsZVJlZih0eXBlQXR0cmkpKSB7CisgICAgICAgIFdNTEhlbHBlcjo6
dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICh0eXBlQXR0cmkgPT0gIm9uZW50ZXJm
b3J3YXJkIikKKyAgICAgICAgdHlwZSA9IE9uRW50ZXJGb3J3YXJkOworICAgIGVsc2UgaWYgKHR5
cGVBdHRyaSA9PSAib25lbnRlcmJhY2t3YXJkIikKKyAgICAgICAgdHlwZSA9IE9uRW50ZXJCYWNr
d2FyZDsKKyAgICBlbHNlIGlmICh0eXBlQXR0cmkgPT0gIm9udGltZXIiKQorICAgICAgICB0eXBl
ID0gT25UaW1lcjsKKyAgICBlbHNlIGlmICh0eXBlQXR0cmkgPT0gIm9ucGljayIpCisgICAgICAg
IHR5cGUgPSBPblBpY2s7CisKKyAgICBpZiAodHlwZSA9PSBVbmtub3duKQorICAgICAgICByZXR1
cm47CisKKyAgICBXTUxJbnRyaW5zaWNFdmVudCBldjsKKyAgICBldi50YXNrID0gdGhpczsKKyAg
ICBpZiAoaGFzVGFnTmFtZShnb1RhZykpIHsKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBnZXRBdHRy
aWJ1dGUoImhyZWYiKTsKKyAgICAgICAgZXYudGFyZ2V0VVJJID0gV01MSGVscGVyOjpzdWJzdGl0
dXRlVmFyUmVmKGhyZWYsIGRvY3VtZW50KCksICJlc2NhcGUiKTsKKyAgICB9CisKKyAgICAvL3Jl
Z2lzdGVyIGludHJpbnNpYyBldmVudCB0byB0aGUgZXZlbnQgaGFuZGxlciBvZiB0aGUgb3duZXIg
b2Ygb25ldmVudCBlbGVtZW50IAorICAgIE5vZGUqIHBhcmVudCA9IG9uZXZlbnROb2RlLT5wYXJl
bnROb2RlKCk7CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBldkhhbmRsZXIgPSAwOwor
ICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoY2FyZFRhZykpIHsKKyAgICAgICAgV01MQ2FyZEVs
ZW1lbnQqIGNhcmQgPSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KHBhcmVudCk7CisgICAg
ICAgIGNhcmQtPnNldEhhc0ludHJpbnNpY0V2ZW50KHRydWUpOworICAgICAgICBldkhhbmRsZXIg
PSBjYXJkLT5ldmVudEhhbmRsZXIoKTsKKyAgICB9IGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFt
ZSh0ZW1wbGF0ZVRhZykpIHsKKyAgICAgICAgV01MVGVtcGxhdGVFbGVtZW50KiB0ZW1wbCA9IHN0
YXRpY19jYXN0PFdNTFRlbXBsYXRlRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgIHRlbXBsLT5z
ZXRIYXNJbnRyaW5zaWNFdmVudCh0cnVlKTsKKyAgICAgICAgZXZIYW5kbGVyID0gdGVtcGwtPmV2
ZW50SGFuZGxlcigpOworICAgIH0gZWxzZSBpZiAocGFyZW50LT5oYXNUYWdOYW1lKG9wdGlvblRh
ZykpIHsKKyAgICAgICAgV01MT3B0aW9uRWxlbWVudCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8V01M
T3B0aW9uRWxlbWVudCo+KHBhcmVudCk7CisgICAgICAgIG9wdGlvbi0+c2V0SGFzSW50cmluc2lj
RXZlbnQodHJ1ZSk7CisgICAgICAgIGV2SGFuZGxlciA9IG9wdGlvbi0+ZXZlbnRIYW5kbGVyKCk7
CisgICAgfQorCisgICAgaWYgKGV2SGFuZGxlcikKKyAgICAgICAgZXZIYW5kbGVyLT5yZWdpc3Rl
ckludHJpbnNpY0V2ZW50KHR5cGUsIGV2KTsKK30KKwordm9pZCBXTUxUYXNrRWxlbWVudDo6aW5z
ZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApIAoreworICAgIGZvciAoTm9kZSogcGFyZW50ID0gcGFy
ZW50Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKSB7CisKKyAg
ICAgICAgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShkb1RhZykpIHsKKyAgICAgICAgICAgIHN0YXRp
Y19jYXN0PFdNTERvRWxlbWVudCo+KHBhcmVudCktPnJlZ2lzdGVyVGFzayh0aGlzKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKHBhcmVudC0+bG9jYWxOYW1lKCkgPT0g
Im9uZXZlbnQiKSB7CisgICAgICAgICAgICAvL2JpbmRpbmcgdGhpcyB0YXNrIHdpdGggaW50cmlu
c2ljIGV2ZW50IHNwZWNpZmllZCBieSBvbmV2ZW50IHR5cGUKKyAgICAgICAgICAgIGJpbmRJbnRy
aW5zaWNFdmVudEluT25ldmVudChwYXJlbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0gZWxzZSBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGFuY2hvclRhZykpIHsKKyAgICAgICAgICAg
IHN0YXRpY19jYXN0PFdNTEFuY2hvckVsZW1lbnQqPihwYXJlbnQpLT5yZWdpc3RlclRhc2sodGhp
cyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgfQorfQorCit2b2lkIFdN
TFRhc2tFbGVtZW50OjpyZWdpc3RlclNldHZhckVsZW1lbnQoV01MU2V0dmFyRWxlbWVudCogZSkg
Cit7CisgICAgbV9zZXR2YXJzLmFwcGVuZChlKTsKK30KKwordm9pZCBXTUxUYXNrRWxlbWVudDo6
cmVtb3ZlU2V0dmFyRWxlbWVudChXTUxTZXR2YXJFbGVtZW50KiBlKSAKK3sKKyAgICByZW1vdmVG
cm9tVmVjdG9yKG1fc2V0dmFycywgZSk7Cit9CisKK2Jvb2wgV01MVGFza0VsZW1lbnQ6Omhhc1Nl
dHZhcigpIGNvbnN0IAoreworICAgIHJldHVybiAhbV9zZXR2YXJzLmlzRW1wdHkoKTsKK30KKwor
fQpJbmRleDogd21sL1dNTFRhc2tFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFRhc2tF
bGVtZW50LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MVGFza0VsZW1lbnQuaAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGFza0VsZW1lbnRfaAorI2RlZmlu
ZSBXTUxUYXNrRWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgV01MU2V0dmFyRWxlbWVudDsKKworY2xhc3MgV01MVGFza0Vs
ZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MVGFza0VsZW1lbnQo
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqIGRvYyk7CisgICAgdmlydHVh
bCB+V01MVGFza0VsZW1lbnQoKTsKKyAgCisgICAgdmlydHVhbCB2b2lkIGV4ZWMoRXZlbnQqLCBT
dHJpbmcgdXJpID0gU3RyaW5nKCkpID0gMCA7CisKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJ
bnRvVHJlZShib29sIGRlZXApOworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyU2V0dmFyRWxl
bWVudChXTUxTZXR2YXJFbGVtZW50Kik7CisgICAgdmlydHVhbCB2b2lkIHJlbW92ZVNldHZhckVs
ZW1lbnQoV01MU2V0dmFyRWxlbWVudCopOworICAgIGJvb2wgaGFzU2V0dmFyKCkgY29uc3Q7CisK
K3Byb3RlY3RlZDoKKyAgICBWZWN0b3I8V01MU2V0dmFyRWxlbWVudCo+IG1fc2V0dmFyczsKKwor
cHJpdmF0ZToKKyAgICB2b2lkIGJpbmRJbnRyaW5zaWNFdmVudEluT25ldmVudChOb2RlKik7CisK
K307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiB3bWwvV01MVGVtcGxhdGVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSB3bWwvV01MVGVtcGxhdGVFbGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIHdtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyOSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9i
aWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBV
U0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxUZW1wbGF0
ZUVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKKyNpbmNsdWRlICJSZW5k
ZXJBcmVuYS5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiUmVuZGVyT2Jq
ZWN0LmgiCisjaW5jbHVkZSAiV01MRG9FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRWxlbWVudEZh
Y3RvcnkuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIu
aCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2lu
Y2x1ZGUgIldNTFRva2VuaXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBXTUxOYW1lczsKKworV01MVGVtcGxhdGVFbGVtZW50OjpXTUxUZW1wbGF0ZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFdN
TEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwgbV9ldm50SGFuZGxlcigwKQorICAgICwgbV9o
YXNJbnRyaW5zaWNFdmVudChmYWxzZSkgCit7Cit9CisKK1dNTFRlbXBsYXRlRWxlbWVudDo6fldN
TFRlbXBsYXRlRWxlbWVudCgpIAoreworICAgIGlmIChtX2V2bnRIYW5kbGVyKSB7CisgICAgICAg
IGRlbGV0ZSBtX2V2bnRIYW5kbGVyOworICAgICAgICBtX2V2bnRIYW5kbGVyID0gMDsKKyAgICB9
CisKK30KKwordm9pZCBXTUxUZW1wbGF0ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1h
cHBlZEF0dHJpYnV0ZSogYXR0cikKK3sKKyAgICBXTUxJbnRyaW5zaWNFdmVudFR5cGUgZXR5cGUg
PSBVbmtub3duOworCisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVudGVyZm9yd2FyZEF0dHIp
CisgICAgICAgIGV0eXBlID0gT25FbnRlckZvcndhcmQ7CisgICAgZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IG9uZW50ZXJiYWNrd2FyZEF0dHIpCisgICAgICAgIGV0eXBlID0gT25FbnRlckJhY2t3
YXJkOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnRpbWVyQXR0cikKKyAgICAgICAg
ZXR5cGUgPSBPblRpbWVyOworICAgIAorICAgIC8vIHJlZ2lzdGVyIGludHJpbnNpYyBldmVudCB0
byB0ZW1wbGF0ZSAKKyAgICBpZiAoZXR5cGUgIT0gVW5rbm93bikgeworCisgICAgICAgIGlmICgh
bV9ldm50SGFuZGxlcikgCisgICAgICAgICAgICBtX2V2bnRIYW5kbGVyID0gbmV3IFdNTEludHJp
bnNpY0V2ZW50SGFuZGxlcigpOworCisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAg
ICAgICBRdWFsaWZpZWROYW1lIHFOYW1lKCJnbyIsICJnbyIsICIiKTsKKyAgICAgICAgRWxlbWVu
dCogZ28gPSBXTUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgZG9jdW1l
bnQoKSwgZmFsc2UpOyAKKyAgICAgICAgU3RyaW5nIGhyZWYgPSBXTUxIZWxwZXI6OnN1YnN0aXR1
dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwgZG9jdW1lbnQoKSwgImVzY2FwZSIpOworICAgICAgICBn
by0+c2V0QXR0cmlidXRlTlMoIiIsICJocmVmIiwgaHJlZiwgZWMpOworCisgICAgICAgIFdNTElu
dHJpbnNpY0V2ZW50IGV2OworICAgICAgICBldi50YXNrID0gc3RhdGljX2Nhc3Q8V01MR29FbGVt
ZW50Kj4oZ28pOworICAgICAgICBldi50YXJnZXRVUkkgPSBocmVmOyAKKworICAgICAgICBzZXRI
YXNJbnRyaW5zaWNFdmVudCh0cnVlKTsKKyAgICAgICAgbV9ldm50SGFuZGxlci0+cmVnaXN0ZXJJ
bnRyaW5zaWNFdmVudChldHlwZSwgZXYpOworICAgIH0KK30KKworV01MSW50cmluc2ljRXZlbnRI
YW5kbGVyKiBXTUxUZW1wbGF0ZUVsZW1lbnQ6OmV2ZW50SGFuZGxlcigpCit7CisgICAgaWYgKG1f
aGFzSW50cmluc2ljRXZlbnQgJiYgIW1fZXZudEhhbmRsZXIpCisgICAgICAgIG1fZXZudEhhbmRs
ZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisKKyAgICByZXR1cm4gbV9ldm50
SGFuZGxlcjsKK30KKwordm9pZCBXTUxUZW1wbGF0ZUVsZW1lbnQ6OnNldEhhc0ludHJpbnNpY0V2
ZW50KGJvb2wgaGFzRXZ0KQoreworICAgIG1faGFzSW50cmluc2ljRXZlbnQgPSBoYXNFdnQ7Cit9
CisKK2Jvb2wgV01MVGVtcGxhdGVFbGVtZW50OjpoYXNJbnRyaW5zaWNFdmVudCgpCit7CisgICAg
cmV0dXJuIG1faGFzSW50cmluc2ljRXZlbnQ7Cit9CisKK3ZvaWQgV01MVGVtcGxhdGVFbGVtZW50
OjpyZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQqIGRvRWxlbXQpCit7CisgICAgaWYgKGRv
RWxlbXQpIHsKKyAgICAgICAgVmVjdG9yPFdNTERvRWxlbWVudCo+OjppdGVyYXRvciBpdCA9IG1f
ZG9WZWNzLmJlZ2luKCk7CisgICAgICAgIFdNTERvRWxlbWVudCogdG1wRG8gPSAwOworICAgICAg
ICB3aGlsZSAoaXQgIT0gbV9kb1ZlY3MuZW5kKCkpIHsKKyAgICAgICAgICAgIHRtcERvID0gc3Rh
dGljX2Nhc3Q8V01MRG9FbGVtZW50Kj4oKml0KyspOworICAgICAgICAgICAgaWYgKHRtcERvLT5k
b05hbWUoKSA9PSBkb0VsZW10LT5kb05hbWUoKSkgeworICAgICAgICAgICAgICAgIFdNTEhlbHBl
cjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKFNhbWVOYW1lRG9FbGVtZW50c0Vycm9yKTsKKyAg
ICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
bV9kb1ZlY3MuYXBwZW5kKGRvRWxlbXQpOworICAgIH0KK30KKworVmVjdG9yPFdNTERvRWxlbWVu
dCo+IFdNTFRlbXBsYXRlRWxlbWVudDo6Z2V0RG9FbGVtZW50cygpCit7CisgICAgcmV0dXJuIG1f
ZG9WZWNzOworfQorCit9CkluZGV4OiB3bWwvV01MVGVtcGxhdGVFbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gd21sL1dNTFRlbXBsYXRlRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFRl
bXBsYXRlRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0
IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRl
ZiBXTUxUZW1wbGF0ZUVsZW1lbnRfaAorI2RlZmluZSBXTUxUZW1wbGF0ZUVsZW1lbnRfaAorCisj
aW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEludHJpbnNpY0V2ZW50SGFuZGxl
ci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50OworY2xh
c3MgV01MRG9FbGVtZW50OworCitjbGFzcyBXTUxUZW1wbGF0ZUVsZW1lbnQgOiBwdWJsaWMgV01M
RWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MVGVtcGxhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTFRlbXBsYXRlRWxlbWVudCgpOwor
CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSop
OworCisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBldmVudEhhbmRsZXIoKTsKKyAgICBi
b29sIGhhc0ludHJpbnNpY0V2ZW50KCk7CisgICAgdm9pZCBzZXRIYXNJbnRyaW5zaWNFdmVudChi
b29sKTsKKworICAgIHZvaWQgcmVnaXN0ZXJEb0VsZW1lbnQoV01MRG9FbGVtZW50Kik7CisgICAg
VmVjdG9yPFdNTERvRWxlbWVudCo+IGdldERvRWxlbWVudHMoKTsKK3ByaXZhdGU6CisgICAgV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyKiBtX2V2bnRIYW5kbGVyOworICAgIGJvb2wgbV9oYXNJbnRy
aW5zaWNFdmVudDsKKyAgICBWZWN0b3I8V01MRG9FbGVtZW50Kj4gbV9kb1ZlY3M7Cit9OworCit9
IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogd21sL1dNTFRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHdtbC9XTUxUZXh0LmNwcAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxUZXh0LmNwcAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3Jj
aCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09Q
WUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBN
QSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJXTUxUZXh0LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIldNTEhl
bHBlci5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1dNTFRleHQ6OldNTFRleHQoRG9jdW1lbnQqIGRvYywgY29uc3QgU3RyaW5nJiB0ZXh0KQor
ICAgIDogVGV4dChkb2MsIHRleHQpCit7Cit9CisKK1dNTFRleHQ6On5XTUxUZXh0KCkKK3sKK30K
Kwordm9pZCBXTUxUZXh0Ojp1cGRhdGVEYXRhSWZOZWVkZWQoKSAKK3sKKyAgICBQYWdlICpwYWdl
ID0gZG9jdW1lbnQoKS0+cGFnZSgpOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgaWYgKGxlbmd0aCgpID4gMSAmJiBwYWdlLT53bWxQYWdlU3RhdGUoKS0+aGFzVmFyaWFi
bGVzKCkpIHsKKyAgICAgICAgU3RyaW5nIHRleHQgPSBkYXRhKCk7CisgICAgICAgIGlmICghdGV4
dC5pbXBsKCktPmNvbnRhaW5zT25seVdoaXRlc3BhY2UoKSkgeworICAgICAgICAgICAgdGV4dCA9
IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZih0ZXh0LCBkb2N1bWVudCgpKTsKKworICAgICAg
ICAgICAgRXhjZXB0aW9uQ29kZSBlOworICAgICAgICAgICAgc2V0RGF0YSh0ZXh0LCBlKTsKKyAg
ICAgICAgfQorICAgIH0KK30KKworCit9IC8vbmFtZXNwYWNlCkluZGV4OiB3bWwvV01MVGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHdtbC9XTUxUZXh0LmgJKHJldmlzaW9uIDApCisrKyB3bWwvV01MVGV4
dC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUZXh0X2gK
KyNkZWZpbmUgV01MVGV4dF9oCisKKyNpbmNsdWRlICJUZXh0LmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CisKK2NsYXNzIFdNTFRleHQgOiBwdWJsaWMgVGV4dCB7
CitwdWJsaWM6CisgICAgV01MVGV4dChEb2N1bWVudCosIGNvbnN0IFN0cmluZyYpOworICAgIHZp
cnR1YWwgfldNTFRleHQoKTsKKworICAgIHZvaWQgdXBkYXRlRGF0YUlmTmVlZGVkKCk7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IHdtbC9XTUxUaW1lckVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIHdtbC9XTUxUaW1lckVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysg
d21sL1dNTFRpbWVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTM4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICog
Q29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8K
KyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFRpbWVyRWxlbWVudC5oIgorCisj
aW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNs
dWRlICJXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgor
I2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MVGlt
ZXJFbGVtZW50OjpXTUxUaW1lckVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQgKmRvYykKKyAgICA6IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICAgLCBt
X2NhcmQoMCkKKyAgICAgICwgbV90aW1lcih0aGlzLCAmV01MVGltZXJFbGVtZW50Ojp0aW1lckZp
cmVkKQoreworfQorCitXTUxUaW1lckVsZW1lbnQ6On5XTUxUaW1lckVsZW1lbnQoKQoreworfQor
Cit2b2lkIFdNTFRpbWVyRWxlbWVudDo6dGltZXJGaXJlZChUaW1lcjxXTUxUaW1lckVsZW1lbnQ+
KikKK3sKKyAgICBpZiAoIW1fY2FyZCB8fCAhZG9jdW1lbnQoKS0+cGFnZSgpKSAKKyAgICAgICAg
cmV0dXJuOworCisgICAgLy93aGVuIHRoZSB0aW1lciBleHBpcmVzLCBzZXQgdGhlIG5hbWUgdmFy
aWFsYmUgb2YgdGltZXIgdG8gJzAnCisgICAgaWYgKCFtX25hbWUuaXNFbXB0eSgpKSB7CisgICAg
ICAgIG1fdmFsdWUgPSAiMCI7CisgICAgICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdlKCktPndt
bFBhZ2VTdGF0ZSgpKTsKKyAgICAgICAgZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUo
KS0+c3RvcmVWYXJpYWJsZShtX25hbWUsIG1fdmFsdWUpOworICAgIH0KKworICAgIFdNTEludHJp
bnNpY0V2ZW50VHlwZSBldHlwZSA9IE9uVGltZXI7CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5k
bGVyKiBldkhhbmRsZXIgPSBtX2NhcmQtPmV2ZW50SGFuZGxlcigpOworICAgIGJvb2wgaGFzSW50
cmluc2ljRXZlbnQgPSAgZmFsc2U7CisgICAgaWYgKGV2SGFuZGxlciAmJiBldkhhbmRsZXItPmhh
c0ludHJpbnNpY0V2ZW50KGV0eXBlKSkKKyAgICAgICAgaGFzSW50cmluc2ljRXZlbnQgPSB0cnVl
OworICAgIGVsc2UgaWYgKG1fY2FyZC0+dGVtcGxhdGVFbGVtZW50KCkpIHsKKyAgICAgICAgZXZI
YW5kbGVyID0gbV9jYXJkLT50ZW1wbGF0ZUVsZW1lbnQoKS0+ZXZlbnRIYW5kbGVyKCk7CisgICAg
ICAgIGlmIChldkhhbmRsZXIgJiYgZXZIYW5kbGVyLT5oYXNJbnRyaW5zaWNFdmVudChldHlwZSkp
CisgICAgICAgICAgICBoYXNJbnRyaW5zaWNFdmVudCA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KGhhc0ludHJpbnNpY0V2ZW50KQorICAgIHsKKyAgICAgICAgZXZIYW5kbGVyLT50cmlnZ2VySW50
cmluc2ljRXZlbnQoZXR5cGUpOworICAgIH0KK30KKwordm9pZCBXTUxUaW1lckVsZW1lbnQ6OnN0
YXJ0KGludCBpbnRlcnZhbCkKK3sKKyAgICBpZiAobV9jYXJkICYmICFtX3RpbWVyLmlzQWN0aXZl
KCkpIHsKKyAgICAgICAgCisgICAgICAgIGlmICgoaW50ZXJ2YWwgPD0gMCkgJiYgIW1fbmFtZS5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFN0cmluZyB0aW1lb3V0ID0gZG9jdW1lbnQoKS0+cGFn
ZSgpLT53bWxQYWdlU3RhdGUoKS0+Z2V0VmFyaWJhbGUobV9uYW1lKTsgCisgICAgICAgICAgICBp
bnRlcnZhbCA9IHRpbWVvdXQudG9JbnQoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbnRl
cnZhbCA8PSAwKQorICAgICAgICAgICAgaW50ZXJ2YWwgPSBtX3ZhbHVlLnRvSW50KCk7CisKKyAg
ICAgICAgaWYgKGludGVydmFsID4gMCkKKyAgICAgICAgICAgIG1fdGltZXIuc3RhcnRPbmVTaG90
KGludGVydmFsLzEwLjApOworICAgIH0KK30KKwordm9pZCBXTUxUaW1lckVsZW1lbnQ6OnN0b3Ao
KQoreworICAgIGlmIChtX3RpbWVyLmlzQWN0aXZlKCkpCisgICAgICAgIG1fdGltZXIuc3RvcCgp
OworfQorCit2b2lkIFdNTFRpbWVyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKiBhdHRyKSAKK3sKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7
CisgICAgICAgIGlmICghV01MSGVscGVyOjppc1ZhbGlkVmFyaWFibGVOYW1lKGF0dHItPnZhbHVl
KCkpKQorICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoSW52
YWxpZFZhcmlhYmxlTmFtZUVycm9yKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9uYW1l
ID0gYXR0ci0+dmFsdWUoKTsKKworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZhbHVl
QXR0cikKKyAgICAgICAgbV92YWx1ZSA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRy
LT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKK30KKwordm9pZCBXTUxUaW1lckVsZW1lbnQ6Omluc2Vy
dGVkSW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIC8vIFRoZSB2YWx1ZSBvZiB0aW1lb3V0IG11
c3QgYmUgYSBwb3NpdGl2ZSBpbnRlZ3JhbCBudW1iZXIsIG9yIGlnbm9yZSBpdAorICAgIGlmICht
X3ZhbHVlLnRvSW50KCkgPiAwKSB7CisgICAgICAgIGZvciAoTm9kZSogcGFyZW50ID0gcGFyZW50
Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgpKSB7CisgICAgICAg
ICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGNhcmRUYWcpKSB7CisgICAgICAgICAgICAgICAg
bV9jYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1lbnQqPihwYXJlbnQpOworICAgICAgICAg
ICAgICAgIG1fY2FyZC0+c2V0SW50cmluc2ljRXZlbnRUaW1lcih0aGlzKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBX
TUxUaW1lckVsZW1lbnQ6OnN0b3JlSW50ZXJ2YWxUb1BhZ2VTdGF0ZSgpCit7CisgICAgaWYgKG1f
dGltZXIuaXNBY3RpdmUoKSkgeworICAgICAgICBpbnQgaW50ZXJ2YWwgPSBzdGF0aWNfY2FzdDxp
bnQ+KG1fdGltZXIubmV4dEZpcmVJbnRlcnZhbCgpKSoxMDsKKyAgICAgICAgU3RyaW5nIHZhbHVl
ID0gU3RyaW5nOjpudW1iZXIoaW50ZXJ2YWwpOworCisgICAgICAgIFBhZ2UgKnBhZ2UgPSBkb2N1
bWVudCgpLT5wYWdlKCk7CisgICAgICAgIGlmIChwYWdlKSAKKyAgICAgICAgICAgIHBhZ2UtPndt
bFBhZ2VTdGF0ZSgpLT5zdG9yZVZhcmlhYmxlKG1fbmFtZSwgdmFsdWUpOworICAgIH0KK30KKwor
fQpJbmRleDogd21sL1dNTFRpbWVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxUaW1l
ckVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIHdtbC9XTUxUaW1lckVsZW1lbnQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGltZXJFbGVtZW50X2gKKyNk
ZWZpbmUgV01MVGltZXJFbGVtZW50X2gKKworI2luY2x1ZGUgIlRpbWVyLmgiCisjaW5jbHVkZSAi
V01MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTENhcmRFbGVt
ZW50OworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdNTFRpbWVyRWxlbWVudCA6IHB1
YmxpYyBXTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxUaW1lckVsZW1lbnQoY29uc3QgUXVh
bGlmaWVkTmFtZSYgdGFnTmFtZSwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxUaW1lckVs
ZW1lbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsK
KworICAgIHZvaWQgdGltZXJGaXJlZChUaW1lcjxXTUxUaW1lckVsZW1lbnQ+Kik7CisgICAgdm9p
ZCBzdGFydChpbnQgaW50ZXJ2YWwgPSAtMSk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgdm9pZCBz
dG9yZUludGVydmFsVG9QYWdlU3RhdGUoKTsKKworcHJpdmF0ZToKKyAgICBXTUxDYXJkRWxlbWVu
dCogbV9jYXJkOworICAgIFN0cmluZyBtX25hbWU7CisgICAgU3RyaW5nIG1fdmFsdWU7CisgICAg
VGltZXI8V01MVGltZXJFbGVtZW50PiBtX3RpbWVyOworfTsKKworfSAvL25hbWVzcGFjZQorCisj
ZW5kaWYKSW5kZXg6IHdtbC9XTUxUb2tlbml6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHdtbC9XTUxU
b2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFRva2VuaXplci5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMzYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldNTFRva2VuaXplci5oIgorCisjaW5jbHVkZSAiQ2FjaGUuaCIKKyNpbmNsdWRlICJDYWNo
ZWRTY3JpcHQuaCIKKyNpbmNsdWRlICJDREFUQVNlY3Rpb24uaCIKKyNpbmNsdWRlICJDU3RyaW5n
LmgiCisjaW5jbHVkZSAiQ29tbWVudC5oIgorI2luY2x1ZGUgIkRvY0xvYWRlci5oIgorI2luY2x1
ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFnbWVudC5oIgorI2luY2x1ZGUg
IkRvY3VtZW50VHlwZS5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCisj
aW5jbHVkZSAiSGlzdG9yeUl0ZW0uaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRl
ICJIVE1MU2NyaXB0RWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxTdHlsZUVsZW1lbnQuaCIKKyNp
bmNsdWRlICJIVE1MVGFibGVTZWN0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUb2tlbml6
ZXIuaCIKKyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRl
ICJQcm9jZXNzaW5nSW5zdHJ1Y3Rpb24uaCIKKyNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgor
I2luY2x1ZGUgIlJlc291cmNlUmVxdWVzdC5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVzcG9uc2Uu
aCIKKyNpZiBVU0UoUVhNTFNUUkVBTSkKKyNpbmNsdWRlIDxRRGVidWc+CisjZWxzZQorI2luY2x1
ZGUgPGxpYnhtbC9wYXJzZXIuaD4KKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2VySW50ZXJuYWxzLmg+
CisjZW5kaWYKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKKyNpZiBFTkFCTEUoWFNMVCkKKyNpbmNsdWRlIDxsaWJ4c2x0L3hzbHQuaD4KKyNlbmRp
ZgorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJTVkdOYW1lcy5oIgorI2luY2x1ZGUgIlNW
R1N0eWxlRWxlbWVudC5oIgorI2luY2x1ZGUgIlhMaW5rTmFtZXMuaCIKKyNlbmRpZgorCisjaW5j
bHVkZSAiV01MQWNjZXNzRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisj
aW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTEVsZW1lbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVk
ZSAiV01MSW1hZ2VFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSW5wdXRFbGVtZW50LmgiCisjaW5j
bHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxPcHRpb25FbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MUEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCisjaW5jbHVk
ZSAiV01MVGV4dC5oIgorCit1c2luZyBuYW1lc3BhY2Ugc3RkOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKy8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK1dNTFRva2VuaXplcjo6V01MVG9rZW5pemVyKERvY3VtZW50KiBf
ZG9jLCBGcmFtZVZpZXcqIF92aWV3KQorOiBYTUxUb2tlbml6ZXIoX2RvYywgX3ZpZXcpIAorewor
ICAgIHNldEN1cnJlbnROb2RlKF9kb2MpOworICAgIG1fZXJyb3JDb2RlID0gTm9FcnJvcjsKKyAg
ICAgCisgICAgV01MSGVscGVyOjpzZXRUb2tlbml6ZXIodGhpcyk7Cit9CisKKworV01MVG9rZW5p
emVyOjp+V01MVG9rZW5pemVyKCkKK3sKKyAgICBXTUxIZWxwZXI6OnNldFRva2VuaXplcigwKTsK
K30KKworYm9vbCBXTUxUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYgcywg
Ym9vbCAvKmFwcGVuZERhdGEqLykgCit7CisjaWYgIVVTRShRWE1MU1RSRUFNKQorICAgIFhNTFRv
a2VuaXplcjo6d3JpdGUocywgdHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7CisjZWxzZQorCisgICAg
c3RhdGljIFFYbWxTdHJlYW1SZWFkZXI6OlRva2VuVHlwZSBvbGRUeXBlID0gUVhtbFN0cmVhbVJl
YWRlcjo6Tm9Ub2tlbjsKKworICAgIFFYbWxTdHJlYW1SZWFkZXIgJnN0cmVhbSA9IHhtbFN0cmVh
bVJlYWRlcigpOworICAgIHN0cmVhbS5hZGREYXRhKFFTdHJpbmcocy50b1N0cmluZygpKSk7CisK
KyAgICB3aGlsZSAoIXN0cmVhbS5hdEVuZCgpKSB7CisgICAgICAgIHN0cmVhbS5yZWFkTmV4dCgp
OworICAgICAgICBzd2l0Y2ggKHN0cmVhbS50b2tlblR5cGUoKSkgeworICAgICAgICAgICAgY2Fz
ZSBRWG1sU3RyZWFtUmVhZGVyOjpTdGFydERvY3VtZW50OgorICAgICAgICAgICAgY2FzZSBRWG1s
U3RyZWFtUmVhZGVyOjpFbmREb2N1bWVudDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnRFbGVtZW50OgorICAgICAgICAgICAg
ICAgIGlmIChvbGRUeXBlICE9IFFYbWxTdHJlYW1SZWFkZXI6OkRURCkgeworICAgICAgICAgICAg
ICAgICAgICBoYW5kbGVXTUxFcnJvcihEb2NUeXBlRGVjbGFyYXRpb25NaXNzRXJyb3IpOworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIFdNTFBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVuZEVsZW1lbnQ6IAorICAgICAg
ICAgICAgICAgIFdNTFBhcnNlRW5kRWxlbWVudCgpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpDaGFyYWN0ZXJzOiB7CisgICAgICAg
ICAgICAgICAgaWYgKHN0cmVhbS5pc0NEQVRBKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBl
eGl0VGV4dCgpOworICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxOb2RlPiBuZXdOb2RlID0g
bmV3IENEQVRBU2VjdGlvbihkb2N1bWVudCgpLCBzdHJlYW0udGV4dCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgICBpZiAoIWN1cnJlbnROb2RlKCktPmFkZENoaWxkKG5ld05vZGUuZ2V0KCkpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICBp
ZiAoZnJhbWVWaWV3KCkgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCisgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSgpLT5pc1RleHROb2RlKCkgfHwgZW50
ZXJUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAw
OworICAgICAgICAgICAgICAgICAgICAgICAgV01MVGV4dCogdGV4dCA9IHN0YXRpY19jYXN0PFdN
TFRleHQqPihjdXJyZW50Tm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHQtPmFw
cGVuZERhdGEoc3RyZWFtLnRleHQoKSwgZWMpOworICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dC0+dXBkYXRlRGF0YUlmTmVlZGVkKCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgh
Y3VycmVudE5vZGUoKS0+YXR0YWNoZWQoKSkgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y3VycmVudE5vZGUoKS0+YXR0YWNoKCk7CisKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJlbmNlOiB7CisgICAgICAg
ICAgICAgICAgUVN0cmluZyBlbnRpdHkgPSBzdHJlYW0ubmFtZSgpLnRvU3RyaW5nKCk7CisgICAg
ICAgICAgICAgICAgVUNoYXIgYyA9IGRlY29kZU5hbWVkRW50aXR5KGVudGl0eS50b1V0ZjgoKS5j
b25zdERhdGEoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5vZGUoKS0+aXNUZXh0
Tm9kZSgpIHx8IGVudGVyVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyKCZjLCAxKTsKKyAgICAg
ICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCo+KGN1cnJlbnROb2RlKCkpLT5hcHBlbmRE
YXRhKHN0ciwgZWMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6Q29tbWVu
dDoKKyAgICAgICAgICAgICAgICBwYXJzZUNvbW1lbnQoKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6UHJvY2Vzc2luZ0luc3RydWN0
aW9uOgorICAgICAgICAgICAgICAgIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKCk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkRU
RDoKKyAgICAgICAgICAgICAgICBvbGRUeXBlID0gUVhtbFN0cmVhbVJlYWRlcjo6RFREOworICAg
ICAgICAgICAgICAgIHBhcnNlRHRkKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5lcnJvcigpICE9IFFY
bWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcikgeworICAgICAgICAg
ICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9IChzdHJlYW0uZXJyb3IoKSA9PSBRWG1sU3RyZWFt
UmVhZGVyOjpOb3RXZWxsRm9ybWVkRXJyb3IpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBmYXRhbCA6IHdhcm5pbmc7CisgICAgICAgICAgICAgICAgICAgIGhhbmRsZUVy
cm9yKHR5cGUsIHFQcmludGFibGUoc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBsaW5lTnVtYmVyKCks
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJlcigpKTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAg
ICAgICAgfSAvLyBlbmQgb2Ygc3dpdGNoICguLi4KKworICAgICAgICBpZiAoaGFzRXJyb3IoKSkg
eworICAgICAgICAgICAgaGFuZGxlV01MRXJyb3IoKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0gLy8gZW5kIG9mIHdoaWxlICguLi4KKworICAgIHJldHVybiB0
cnVlOworI2VuZGlmCisKK30KKwordm9pZCBXTUxUb2tlbml6ZXI6OnVwZGF0ZUF0dHJzSWZOZWVk
ZWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUpCit7CisgICAgLy8g
dXBkYXRlIGF0cnJpYnV0ZXMgb2Ygb3B0b2luIGVsZW1lbnQgaWYgbmVlZGVkCisgICAgaWYgKGxv
Y2FsTmFtZSA9PSAib3B0aW9uIikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVu
dCo+KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxzZSBpZiAobG9jYWxO
YW1lID09ICJzZWxlY3QiKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxTZWxlY3RFbGVtZW50Kj4o
ZWxlbWVudCktPnVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUg
PT0gImlucHV0IikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01MSW5wdXRFbGVtZW50Kj4oZWxlbWVu
dCktPnVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBlbHNlIGlmIChsb2NhbE5hbWUgPT0gImlt
ZyIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTEltYWdlRWxlbWVudCo+KGVsZW1lbnQpLT51cGRh
dGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxzZSBpZiAobG9jYWxOYW1lID09ICJwIikKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8V01MUEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRlQXR0cnNJZk5lZWRl
ZCgpOworfQorCisjaWYgVVNFKFFYTUxTVFJFQU0pCit2b2lkIFdNTFRva2VuaXplcjo6V01MUGFy
c2VTdGFydEVsZW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7CisKKyAgICBRWG1sU3RyZWFtUmVh
ZGVyICZzdHJlYW0gPSB4bWxTdHJlYW1SZWFkZXIoKTsKKyAgICBRU3RyaW5nIGxvY2FsTmFtZSA9
IHN0cmVhbS5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICBRU3RyaW5nIHVyaSAgICAgICA9IHN0cmVh
bS5uYW1lc3BhY2VVcmkoKS50b1N0cmluZygpOworICAgIFFTdHJpbmcgcHJlZml4ICAgID0gc3Ry
ZWFtLnF1YWxpZmllZE5hbWUoKS50b1N0cmluZygpOworCisgICAgQVNTRVJUKGRvY3VtZW50KCkt
PnBhZ2UoKSk7CisgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCkp
OworICAgIGlmIChsb2NhbE5hbWUgPT0gImFjY2VzcyIpCisgICAgICAgIGRvY3VtZW50KCktPnBh
Z2UoKS0+d21sUGFnZVN0YXRlKCktPnNldE5lZWRDaGVja0RlY2tBY2Nlc3ModHJ1ZSk7CisKKyAg
ICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBRdWFsaWZpZWROYW1lIHFOYW1lKHByZWZpeCwg
bG9jYWxOYW1lLCB1cmkpOworICAgIEVsZW1lbnQqIG5ld0VsZW1lbnQgPSBXTUxFbGVtZW50RmFj
dG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgZG9jdW1lbnQoKSwgdHJ1ZSkgOworCisgICAg
UVhtbFN0cmVhbUF0dHJpYnV0ZXMgYXR0cnMgPSBzdHJlYW0uYXR0cmlidXRlcygpOworICAgIAor
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgKytpKSB7CisgICAgICAgIGNv
bnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGUgJmF0dHIgPSBhdHRyc1tpXTsKKyAgICAgICAgU3RyaW5n
IGF0dHJMb2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKKyAgICAgICAgU3RyaW5nIGF0dHJWYWx1ZSAg
ICAgPSBhdHRyLnZhbHVlKCk7CisgICAgICAgIFN0cmluZyBhdHRyVVJJICAgICAgID0gYXR0ci5u
YW1lc3BhY2VVcmkoKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IFN0cmluZyhhdHRyLm5hbWVzcGFj
ZVVyaSgpKTsKKyAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRyLnF1YWxpZmllZE5h
bWUoKTsKKworICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyhhdHRyVVJJLCBhdHRy
UU5hbWUsIGF0dHJWYWx1ZSwgZWMpOworICAgIH0KKworICAgIHVwZGF0ZUF0dHJzSWZOZWVkZWQo
bmV3RWxlbWVudCwgbG9jYWxOYW1lKTsKKworICAgIGlmICghY3VycmVudE5vZGUoKS0+YWRkQ2hp
bGQobmV3RWxlbWVudCkpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICBzZXRDdXJyZW50Tm9kZShuZXdFbGVtZW50KTsKKworICAgIGlmICghbmV3
RWxlbWVudC0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3RWxlbWVudC0+YXR0YWNoKCk7IAorfQor
Cit2b2lkIFdNTFRva2VuaXplcjo6V01MUGFyc2VFbmRFbGVtZW50KCkgCit7CisgICAgZXhpdFRl
eHQoKTsKKworICAgIE5vZGUqIG4gPSBjdXJyZW50Tm9kZSgpOworCisgICAgUmVmUHRyPE5vZGU+
IHBhcmVudCA9IG4tPnBhcmVudE5vZGUoKTsKKyAgICBuLT5maW5pc2hQYXJzaW5nQ2hpbGRyZW4o
KTsKKworICAgIHNldEN1cnJlbnROb2RlKHBhcmVudC5nZXQoKSk7Cit9CisjZW5kaWYKKwordm9p
ZCBXTUxUb2tlbml6ZXI6OmZpbmlzaCgpIAoreworICAgIGlmIChoYXNFcnJvcigpIHx8ICFkb2N1
bWVudCgpIHx8ICFkb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgWE1MVG9rZW5pemVyOjpm
aW5pc2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBhZ2UqIHBhZ2UgPSBkb2N1
bWVudCgpLT5wYWdlKCk7CisgICAgQVNTRVJUKHBhZ2UtPndtbFBhZ2VTdGF0ZSgpKTsKKyAgICBp
ZiAoIXBhZ2UtPndtbFBhZ2VTdGF0ZSgpLT5pc0RlY2tBY2Nlc3NpYmxlKCkpIHsKKyAgICAgICAg
WE1MVG9rZW5pemVyOjpmaW5pc2goKTsKKyAgICAgICAgcGFnZS0+Z29CYWNrKCk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBub3RpZnkgdGhlIGV4aXN0YW5jZSBvZiB0ZW1wbGF0
ZSB0byBhbGwgdGhlIGNhcmRzIG9mIGN1cnJlbnQgZGVjaworICAgIFdNTEhlbHBlcjo6cmVnaXN0
ZXJUZW1wbGF0ZVRvQ2FyZHMoZG9jdW1lbnQoKSk7CisKKyAgICAvLyBkZXRlcm1pbmUgdGhlIGRl
c3RpbmF0aW9uIGNhcmQKKyAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IFdNTEhlbHBlcjo6c2V0
RGVzdGluYXRpb25DYXJkKGRvY3VtZW50KCkpOworCisgICAgaWYgKGNhcmQpIHsKKyAgICAgICAg
Ly8gc2hhZG93IHRoZSBkZWNrLWxldmVsIGRvIGlmIG5lZWRlZAorICAgICAgICBjYXJkLT5zaGFk
b3dEb0VsZW1lbnRJZk5lZWRlZCgpOworCisgICAgICAgIC8vaGFuZGxlIHRoZSBpbnRyaW5zaWMg
ZXZlbnQKKyAgICAgICAgY2FyZC0+aGFuZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCgpOworCisg
ICAgICAgIGNhcmQtPnVwZGF0ZVRhYmxlRWxlbWVudCgpOworICAgIH0KKworICAgIHBhZ2UtPndt
bFBhZ2VTdGF0ZSgpLT5zZXROZWVkQ2hlY2tEZWNrQWNjZXNzKGZhbHNlKTsKKworICAgIHJlcG9y
dEVycm9yKE5vRXJyb3IpOworCisgICAgWE1MVG9rZW5pemVyOjpmaW5pc2goKTsKK30KKwordm9p
ZCBXTUxUb2tlbml6ZXI6OnJlcG9ydEVycm9yKFdNTEVycm9yQ29kZSBlcnJvcikKK3sKKyAgICBt
X2Vycm9yQ29kZSA9IGVycm9yOworfQorCitib29sIFdNTFRva2VuaXplcjo6aGFzRXJyb3IoKSBj
b25zdAoreworICAgIHJldHVybiAobV9lcnJvckNvZGUgIT0gTm9FcnJvcik7Cit9CisgCit2b2lk
IFdNTFRva2VuaXplcjo6aGFuZGxlV01MRXJyb3IoV01MRXJyb3JDb2RlIGVycm9yQ29kZSkKK3sK
KyAgICBpZiAoZXJyb3JDb2RlICE9IE5vRXJyb3IpCisgICAgICAgIG1fZXJyb3JDb2RlID0gZXJy
b3JDb2RlOworCisgICAgY29uc3QgY2hhciogZXJyTXNnID0gMDsKKyAgICBzd2l0Y2ggKG1fZXJy
b3JDb2RlKSB7CisgICAgICAgIGNhc2UgU2FtZU5hbWVEb0VsZW1lbnRzRXJyb3I6CisgICAgICAg
ICAgICBlcnJNc2cgPSAiRWFjaCBkbyBlbGVtZW50IG11c3QgaGF2ZSBkaWZmZXJlbnQgbmFtZSBp
biBvbmUgY2FyZCBvciB0ZW1wbGF0ZSFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
Y2FzZSBNdWx0aVRpbWVyRWxlbWVudHNFcnJvcjoKKyAgICAgICAgICAgIGVyck1zZyA9ICJPbmx5
IG9uZSB0aW1lciBlbGVtZW50IGlzIGFsbG93ZWQgaW4gYSBjYXJkIVxuIjsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIE11bHRpQWNjZXNzRWxlbWVudHNFcnJvcjoKKyAgICAgICAg
ICAgIGVyck1zZyA9ICJPbmx5IG9uZSBhY2Nlc3MgZWxlbWVudCBpcyBhbGxvd2VkIGluIGEgZGVj
ayFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXcm9uZ1Rhc2tJbkFuY2hv
ckVsZW1lbnRFcnJvcjoKKyAgICAgICAgICAgIGVyck1zZyA9ICJUaGUgdGFzayBjYW4ndCBiZSBz
cGVjaWZpZWQgaW4gYW4gYW5jaG9yIGVsZW1lbnQhXG4iOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ29uZmxpY3RpbmdFdmVudEJpbmRpbmdFcnJvcjoKKyAgICAgICAgICAgIGVy
ck1zZyA9ICJDb25mbGljdGluZyBldmVudCBiaW5kaW5ncyB3aXRoaW4gYW4gZWxtZW50IVxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludmFsaWRWYXJpYWJsZU5hbWVFcnJv
cjoKKyAgICAgICAgICAgIGVyck1zZyA9ICJUaGUgdmFyaWFibGUgbmFtZSBjb250YWlucyBpbnZh
bGlkIGNoYXJhY3RlcnMhXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSW52
YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhlIHZh
cmlhYmxlIHJlZmVyZW5jZSB1c2VzIGludmFsaWQgc3ludGF4IG9yIGlzIHBsYWNlZCBpbiBpbnZh
bGlkIGxvY2F0aW9uIVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludmFs
aWRDb2x1bW5zTnVtYmVyRm9yVGFibGVFcnJyb3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiVGhl
IG51bWJlciBvZiB0YWJsZSBjb2x1bW5zIGlzIGludmFsaWQhXG4iOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGNhc2UgRG9jVHlwZURlY2xhcmF0aW9uTWlzc0Vycm9yOgorICAgICAgICAg
ICAgZXJyTXNnID0gIkRPQ1RZUEUgZGVjbGFyYXRpb24gaXMgbWlzc2VkIGJlZm9yZSByb290IGVs
ZW1lbnQhXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICByZXR1cm47CisgICAgfQorIAorICAgIGhhbmRsZUVycm9yKGZhdGFsLCBlcnJNc2csIGxp
bmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworfQorCit9ICAvL25hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiB3bWwvV01MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gd21sL1dNTFRva2VuaXpl
ci5oCShyZXZpc2lvbiAwKQorKysgd21sL1dNTFRva2VuaXplci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxUb2tlbml6ZXJfaAorI2RlZmluZSBXTUxUb2tl
bml6ZXJfaAorCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJj
ZUNsaWVudC5oIgorI2luY2x1ZGUgIlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmlu
Z0hhc2guaCIKKyNpbmNsdWRlICJUb2tlbml6ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5o
PgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KKworI2lmIFVTRShRWE1MU1RSRUFNKQorI2luY2x1
ZGUgPFF0WG1sL3F4bWxzdHJlYW0uaD4KKyNlbHNlCisjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4K
KyNpbmNsdWRlIDxsaWJ4bWwveG1sc3RyaW5nLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIlhNTFRv
a2VuaXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgZW51bSBXTUxFcnJv
ckNvZGUgeyAKKyAgICBOb0Vycm9yID0gMCwgCisgICAgU2FtZU5hbWVEb0VsZW1lbnRzRXJyb3Is
CisgICAgTXVsdGlBY2Nlc3NFbGVtZW50c0Vycm9yLAorICAgIE11bHRpVGltZXJFbGVtZW50c0Vy
cm9yLAorICAgIFdyb25nVGFza0luQW5jaG9yRWxlbWVudEVycm9yLAorICAgIENvbmZsaWN0aW5n
RXZlbnRCaW5kaW5nRXJyb3IsCisgICAgSW52YWxpZFZhcmlhYmxlTmFtZUVycm9yLAorICAgIElu
dmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yLAorICAgIEludmFsaWRDb2x1bW5zTnVtYmVyRm9y
VGFibGVFcnJyb3IsCisgICAgRG9jVHlwZURlY2xhcmF0aW9uTWlzc0Vycm9yLAorfSBXTUxFcnJv
ckNvZGU7CisKK2NsYXNzIFdNTFRva2VuaXplciA6IHB1YmxpYyBYTUxUb2tlbml6ZXIgeworcHVi
bGljOgorICAgIFdNTFRva2VuaXplcihEb2N1bWVudCosIEZyYW1lVmlldyogPSAwKTsKKyAgICB+
V01MVG9rZW5pemVyKCk7CisKKyAgICAvLyBmcm9tIFRva2VuaXplcgorICAgIHZpcnR1YWwgYm9v
bCB3cml0ZShjb25zdCBTZWdtZW50ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEgPSBmYWxzZSk7
CisgICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpOworICAgIAorI2lmIFVTRShRWE1MU1RSRUFNKQor
ICAgIHZvaWQgV01MUGFyc2VTdGFydEVsZW1lbnQoKTsKKyAgICB2b2lkIFdNTFBhcnNlRW5kRWxl
bWVudCgpOworI2VuZGlmCisKKyAgICB2b2lkIHJlcG9ydEVycm9yKFdNTEVycm9yQ29kZSk7Cisg
ICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OworICAgIHZvaWQgaGFuZGxlV01MRXJyb3IoV01MRXJy
b3JDb2RlIGNvZGUgPSBOb0Vycm9yKTsKKworICAgIHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZChF
bGVtZW50KiwgY29uc3QgU3RyaW5nJik7Citwcml2YXRlOgorICAgIFdNTEVycm9yQ29kZSBtX2Vy
cm9yQ29kZTsKK307CisKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV01M
VG9rZW5pemVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25167</attachid>
            <date>2008-11-14 02:37:48 -0800</date>
            <delta_ts>2009-07-28 08:35:48 -0700</delta_ts>
            <desc>The whole submit for Adding WML (v2)</desc>
            <filename>webcore_add_wml_38361.patch</filename>
            <type>text/plain</type>
            <size>279633</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDM4MzYxKQorKysgV2ViQ29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBAIFZQQVRIID0gXAog
ICAgICQoV2ViQ29yZSkvcGx1Z2lucyBcCiAgICAgJChXZWJDb3JlKS9zdG9yYWdlIFwKICAgICAk
KFdlYkNvcmUpL3htbCBcCisgICAgJChXZWJDb3JlKS93bWwgXAogICAgICQoV2ViQ29yZSkvc3Zn
IFwKICMKIApAQCAtMzkxLDYgKzM5Miw3IEBAIGFsbCA6IFwKICAgICBEb2NUeXBlU3RyaW5ncy5j
cHAgXAogICAgIEhUTUxFbnRpdHlOYW1lcy5jIFwKICAgICBIVE1MTmFtZXMuY3BwIFwKKyAgICBX
TUxOYW1lcy5jcHAgXAogICAgIEpTU1ZHRWxlbWVudFdyYXBwZXJGYWN0b3J5LmNwcCBcCiAgICAg
U1ZHRWxlbWVudEZhY3RvcnkuY3BwIFwKICAgICBTVkdOYW1lcy5jcHAgXApAQCAtNTA2LDcgKzUw
OCw3IEBAIFhQYXRoR3JhbW1hci5jcHAgOiB4bWwvWFBhdGhHcmFtbWFyLnkgJCgKIAogIyB1c2Vy
IGFnZW50IHN0eWxlIHNoZWV0cwogCi1VU0VSX0FHRU5UX1NUWUxFX1NIRUVUUyA9ICQoV2ViQ29y
ZSkvY3NzL2h0bWw0LmNzcyAkKFdlYkNvcmUpL2Nzcy9xdWlya3MuY3NzICQoV2ViQ29yZSkvY3Nz
L3ZpZXctc291cmNlLmNzcyAkKFdlYkNvcmUpL2Nzcy9zdmcuY3NzIAorVVNFUl9BR0VOVF9TVFlM
RV9TSEVFVFMgPSAkKFdlYkNvcmUpL2Nzcy9odG1sNC5jc3MgJChXZWJDb3JlKS9jc3MvcXVpcmtz
LmNzcyAkKFdlYkNvcmUpL2Nzcy92aWV3LXNvdXJjZS5jc3MgJChXZWJDb3JlKS9jc3Mvc3ZnLmNz
cyAkKFdlYkNvcmUpL2Nzcy93bWwuY3NzCiBVc2VyQWdlbnRTdHlsZVNoZWV0cy5oIDogY3NzL21h
a2UtY3NzLWZpbGUtYXJyYXlzLnBsICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVFVFMpCiAJcGVybCAk
PCAkQCBVc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQoVVNFUl9BR0VOVF9TVFlMRV9TSEVF
VFMpCiAKQEAgLTU0Miw2ICs1NDQsOSBAQCBlbmRpZgogWE1MTmFtZXMuY3BwIDogZG9tL21ha2Vf
bmFtZXMucGwgeG1sL3htbGF0dHJzLmluCiAJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3Nj
cmlwdHMgJDwgLS1hdHRycyAkKFdlYkNvcmUpL3htbC94bWxhdHRycy5pbgogCitXTUxOYW1lcy5j
cHAgOiBkb20vbWFrZV9uYW1lcy5wbCB3bWwvV01MVGFnTmFtZXMuaW4gd21sL1dNTEF0dHJpYnV0
ZU5hbWVzLmluCisJcGVybCAtSSAkKFdlYkNvcmUpL2JpbmRpbmdzL3NjcmlwdHMgJDwgLS10YWdz
ICQoV2ViQ29yZSkvd21sL1dNTFRhZ05hbWVzLmluIC0tYXR0cnMgJChXZWJDb3JlKS93bWwvV01M
QXR0cmlidXRlTmFtZXMuaW4gLS1vdXRwdXQgLgorCiAjIC0tLS0tLS0tCiAKIGlmZXEgKCQoZmlu
ZHN0cmluZyBFTkFCTEVfU1ZHLCQoRkVBVFVSRV9ERUZJTkVTKSksIEVOQUJMRV9TVkcpCkluZGV4
OiBXZWJDb3JlL1dlYkNvcmUucHJvCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS5wcm8J
KHJldmlzaW9uIDM4MzYxKQorKysgV2ViQ29yZS9XZWJDb3JlLnBybwkod29ya2luZyBjb3B5KQpA
QCAtNjUsNiArNjUsNyBAQCB3aW4zMi1nKysgewogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9J
Q09OREFUQUJBU0U9Lik6IERFRklORVMgKz0gRU5BQkxFX0lDT05EQVRBQkFTRT0xCiAhY29udGFp
bnMoREVGSU5FUywgRU5BQkxFX1hQQVRIPS4pOiBERUZJTkVTICs9IEVOQUJMRV9YUEFUSD0xCiAj
IWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9Lik6IERFRklORVMgKz0gRU5BQkxFX1hCTD0x
CishY29udGFpbnMoREVGSU5FUywgRU5BQkxFX1dNTD0uKTogREVGSU5FUyArPSBFTkFCTEVfV01M
PTEKICFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPS4pOiBERUZJTkVTICs9IEVOQUJMRV9T
Vkc9MQogIyFjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHX0ZPTlRTPS4pOiBERUZJTkVTICs9
IEVOQUJMRV9TVkdfRk9OVFM9MQogIWNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9TVkdfRklMVEVS
Uz0uKTogREVGSU5FUyArPSBFTkFCTEVfU1ZHX0ZJTFRFUlM9MQpAQCAtMTYwLDYgKzE2MSw3IEBA
IElOQ0xVREVQQVRIICs9ICAkJFBXRCBcCiAgICAgICAgICAgICAgICAgJCRQV0QvaW5zcGVjdG9y
IFwKICAgICAgICAgICAgICAgICAkJFBXRC94bWwgXAogICAgICAgICAgICAgICAgICQkUFdEL2h0
bWwgXAorICAgICAgICAgICAgICAgICQkUFdEL3dtbCBcCiAgICAgICAgICAgICAgICAgJCRQV0Qv
YmluZGluZ3MvanMgXAogICAgICAgICAgICAgICAgICQkUFdEL3N2ZyBcCiAgICAgICAgICAgICAg
ICAgJCRQV0QvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMgXApAQCAtMTMzMCw2ICsxMzMyLDUyIEBA
IGNvbnRhaW5zKERFRklORVMsIEVOQUJMRV9YQkw9MSkgewogICAgIEZFQVRVUkVfREVGSU5FU19K
QVZBU0NSSVBUICs9IEVOQUJMRV9YQkw9MQogfQogCitjb250YWlucyhERUZJTkVTLCBFTkFCTEVf
V01MPTEpIHsKKyAgICBTT1VSQ0VTICs9IFwKKyAgICAgICAgd21sL1dNTERvY3VtZW50LmNwcCBc
CisgICAgICAgIHdtbC9XTUxUb2tlbml6ZXIuY3BwIFwKKyAgICAgICAgd21sL1dNTEVsZW1lbnQu
Y3BwIFwKKyAgICAgICAgd21sL1dNTENhcmRFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxB
RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MQW5jaG9yRWxlbWVudC5jcHAgXAorICAgICAg
ICB3bWwvV01MVGFza0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFByZXZFbGVtZW50LmNw
cCBcCisgICAgICAgIHdtbC9XTUxHb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFJlZnJl
c2hFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxQb3N0ZmllbGRFbGVtZW50LmNwcCBcCisg
ICAgICAgIHdtbC9XTUxTZXR2YXJFbGVtZW50LmNwcCBcCisgICAgICAgIHdtbC9XTUxFbGVtZW50
RmFjdG9yeS5jcHAgXAorICAgICAgICB3bWwvV01MUGFnZVN0YXRlLmNwcCBcCisgICAgICAgIHdt
bC9XTUxEb0VsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTFRleHQuY3BwIFwKKyAgICAgICAg
d21sL1dNTFRlbXBsYXRlRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyLmNwcCBcCisgICAgICAgIHdtbC9XTUxUaW1lckVsZW1lbnQuY3BwIFwKKyAgICAg
ICAgd21sL1dNTEhlbHBlci5jcHAgXAorICAgICAgICB3bWwvV01MQWNjZXNzRWxlbWVudC5jcHAg
XAorICAgICAgICB3bWwvV01MU2VsZWN0RWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MT3B0
aW9uRWxlbWVudC5jcHAgXAorICAgICAgICB3bWwvV01MSW5wdXRFbGVtZW50LmNwcCBcCisgICAg
ICAgIHdtbC9XTUxUYWJsZUVsZW1lbnQuY3BwIFwKKyAgICAgICAgd21sL1dNTEltYWdlRWxlbWVu
dC5jcHAgXAorICAgICAgICB3bWwvV01MUEVsZW1lbnQuY3BwCisKKyAgICBGRUFUVVJFX0RFRklO
RVNfSkFWQVNDUklQVCArPSBFTkFCTEVfV01MPTEKKyAgICBERUZJTkVTICs9IEVOQUJMRV9XQlhN
TD0xCisgICAgTElCUyArPSAtbHdieG1sMiAKKworICAgIFdNTF9OQU1FUyA9ICQkUFdEL3dtbC9X
TUxUYWdOYW1lcy5pbgorCisgICAgd21sbmFtZXNfYS5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9XTUxOYW1lcy5jcHAKKyAgICB3bWxuYW1lc19hLmNvbW1hbmRzID0gcGVybCAtSSQk
UFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS10YWdzICQkUFdE
L3dtbC9XTUxUYWdOYW1lcy5pbiAtLWF0dHJzICQkUFdEL3dtbC9XTUxBdHRyaWJ1dGVOYW1lcy5p
biAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVcIiAtLW91dHB1dCAkJEdFTkVSQVRF
RF9TT1VSQ0VTX0RJUgorICAgIHdtbG5hbWVzX2EuaW5wdXQgPSBXTUxfTkFNRVMKKyAgICB3bWxu
YW1lc19hLmRlcGVuZGVuY3lfdHlwZSA9IFRZUEVfQworICAgIHdtbG5hbWVzX2EuQ09ORklHID0g
dGFyZ2V0X3ByZWRlcHMKKyAgICB3bWxuYW1lc19hLnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9T
T1VSQ0VTCisgICAgd21sbmFtZXNfYS5jbGVhbiA9ICR7UU1BS0VfRklMRV9PVVR9ICR7UU1BS0Vf
VkFSX0dFTkVSQVRFRF9TT1VSQ0VTX0RJUl9TTEFTSH1XTUxOYW1lcy5oCisgICAgYWRkRXh0cmFD
b21waWxlcih3bWxuYW1lc19hKQorfQorCiBjb250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEp
IHsKICAgICBGRUFUVVJFX0RFRklORVNfSkFWQVNDUklQVCArPSBFTkFCTEVfU1ZHPTEKIApAQCAt
MTcxNCw2ICsxNzYyLDggQEAgU09VUkNFUyArPSBcCiAgICAgICAgIHN2Z2VsZW1lbnR3cmFwcGVy
X2hlYWRlci52YXJpYWJsZV9vdXQgPSBHRU5FUkFURURfRklMRVMKICAgICAgICAgYWRkRXh0cmFD
b21waWxlcihzdmdlbGVtZW50d3JhcHBlcl9oZWFkZXIpCiAKKworCiAgICAgICAgICMgR0VORVJB
VE9SIDUtRDoKICAgICAgICAgeGxpbmtuYW1lcy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VT
X0RJUi9YTGlua05hbWVzLmNwcAogICAgICAgICB4bGlua25hbWVzLmNvbW1hbmRzID0gcGVybCAt
SSQkUFdEL2JpbmRpbmdzL3NjcmlwdHMgJCRQV0QvZG9tL21ha2VfbmFtZXMucGwgLS1hdHRycyAk
JFBXRC9zdmcveGxpbmthdHRycy5pbiAtLXByZXByb2Nlc3NvciBcIiQke1FNQUtFX01PQ30gLUVc
IiAtLW91dHB1dERpciAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUgpAQCAtMTg1NCw3ICsxOTA0LDcg
QEAgYWRkRXh0cmFDb21waWxlcihjb2xvcmRhdGEpCiAKICMgR0VORVJBVE9SIDk6CiBzdHlsZXNo
ZWV0cy5vdXRwdXQgPSAkJEdFTkVSQVRFRF9TT1VSQ0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0
c0RhdGEuY3BwCi1zdHlsZXNoZWV0cy5jb21tYW5kcyA9IHBlcmwgJCRQV0QvY3NzL21ha2UtY3Nz
LWZpbGUtYXJyYXlzLnBsIC0tcHJlcHJvY2Vzc29yIFwiJCR7UU1BS0VfTU9DfSAtRVwiICQkR0VO
RVJBVEVEX1NPVVJDRVNfRElSL1VzZXJBZ2VudFN0eWxlU2hlZXRzLmggJCRHRU5FUkFURURfU09V
UkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHNEYXRhLmNwcCAkJFBXRC9jc3MvaHRtbDQuY3Nz
ICQkUFdEL2Nzcy9xdWlya3MuY3NzICQkUFdEL2Nzcy9zdmcuY3NzICQkUFdEL2Nzcy92aWV3LXNv
dXJjZS5jc3MKK3N0eWxlc2hlZXRzLmNvbW1hbmRzID0gcGVybCAkJFBXRC9jc3MvbWFrZS1jc3Mt
ZmlsZS1hcnJheXMucGwgLS1wcmVwcm9jZXNzb3IgXCIkJHtRTUFLRV9NT0N9IC1FXCIgJCRHRU5F
UkFURURfU09VUkNFU19ESVIvVXNlckFnZW50U3R5bGVTaGVldHMuaCAkJEdFTkVSQVRFRF9TT1VS
Q0VTX0RJUi9Vc2VyQWdlbnRTdHlsZVNoZWV0c0RhdGEuY3BwICQkUFdEL2Nzcy9odG1sNC5jc3Mg
JCRQV0QvY3NzL3F1aXJrcy5jc3MgJCRQV0QvY3NzL3N2Zy5jc3MgJCRQV0QvY3NzL3ZpZXctc291
cmNlLmNzcyAkJFBXRC9jc3Mvd21sLmNzcwogc3R5bGVzaGVldHMuaW5wdXQgPSBTVFlMRVNIRUVU
U19FTUJFRAogc3R5bGVzaGVldHMuQ09ORklHID0gdGFyZ2V0X3ByZWRlcHMKIHN0eWxlc2hlZXRz
LnZhcmlhYmxlX291dCA9IEdFTkVSQVRFRF9TT1VSQ0VTCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTI3LDYg
KzUyNyw2NCBAQAogCQk0QjZGQTZGNzBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0Yu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI2RkE2
RjYwQzM5RTRBMTAwMDg3MDExIC8qIFNtYXJ0UmVwbGFjZUNGLmNwcCAqLzsgfTsKIAkJNEI4QUY0
QUEwQjFDRTAyQjAwNjg3NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEI4QUY0QTkwQjFDRTAyQjAwNjg3
NjkwIC8qIENsaXBib2FyZEFjY2Vzc1BvbGljeS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCTRCQUU5NUIxMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0
b3JEZWxldGVBY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRCQUU5NUIwMEIyRkE5Q0UwMEFFRDhBMCAvKiBFZGl0b3JEZWxldGVBY3Rpb24uaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk0QzZCOTk0
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxNjBFNTJFMzczMDA0ODdCQjcg
LyogV01MQWNjZXNzRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTRGMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxBY2Nlc3NFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVu
dC5oICovOyB9OworCQk0QzZCOTk1MDBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MTgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NTEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxOTBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1l
bnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1l
bnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk1MzBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5jaG9yRWxlbWVudC5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MUIwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NTQwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkxQzBFNTJFMzczMDA0ODdCQjcgLyogV01MQXR0cmli
dXRlTmFtZXMuaW4gKi87IH07CisJCTRDNkI5OTU1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLzsgfTsKKwkJ
NEM2Qjk5NTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTFFMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxCcndDb250ZXh0LmggKi87IH07CisJCTRDNkI5OTU3MEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxDYXJkRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkxRjBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuY3Bw
ICovOyB9OworCQk0QzZCOTk1ODBFNTJFMzczMDA0ODdCQjcgLyogV01MQ2FyZEVsZW1lbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTIwMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1OTBFNTJF
MzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3Vt
ZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
MjBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9jdW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NUIwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcgLyogV01MRG9F
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxl
bWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2
Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1
RDBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyNTBFNTJFMzczMDA0ODdCQjcgLyogV01M
RWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTVFMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVt
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZC
OTkyNjBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk1RjBF
NTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3RvcnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA0QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCAqLzsgfTsKKwkJNEM2Qjk5NjEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTky
OTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NjIw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdv
RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2MzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVy
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovOyB9OworCQk0QzZCOTk2NDBF
NTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkyQzBFNTJFMzczMDA0ODdCQjcgLyogV01MSGVscGVy
LmggKi87IH07CisJCTRDNkI5OTY1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
MkQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEltYWdlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5
OTY2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTJFMEU1MkUzNzMwMDQ4N0JCNyAv
KiBXTUxJbWFnZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5NjcwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTElucHV0RWxlbWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA0QzZCOTkyRjBFNTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNw
cCAqLzsgfTsKKwkJNEM2Qjk5NjgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzAw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5oICovOyB9OworCQk0QzZCOTk2OTBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMxMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovOyB9OworCQk0QzZCOTk2QTBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzMjBFNTJFMzczMDA0ODdC
QjcgLyogV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmggKi87IH07CisJCTRDNkI5OTZCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxP
cHRpb25FbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TE9wdGlvbkVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTM0MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTZEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzNTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUEVsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk2RTBFNTJFMzczMDA0
ODdCQjcgLyogV01MUEVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTM2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5oICov
OyB9OworCQk0QzZCOTk2RjBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkz
NzBFNTJFMzczMDA0ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5jcHAgKi87IH07CisJCTRD
NkI5OTcwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTkzODBFNTJFMzczMDA0
ODdCQjcgLyogV01MUG9zdGZpZWxkRWxlbWVudC5oICovOyB9OworCQk0QzZCOTk3MTBFNTJFMzcz
MDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0
QzZCOTkzQTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2
Qjk5NzMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNCMEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTc0MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5M0MwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJl
c2hFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxl
Y3RFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDRDNkI5OTNEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5NzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNFMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTc3MEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxT
ZXR2YXJFbGVtZW50LmNwcCAqLzsgfTsKKwkJNEM2Qjk5NzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFNldHZhckVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi87
IH07CisJCTRDNkI5OTc5MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5NDEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRhYmxlRWxlbWVudC5jcHAgKi87IH07CisJCTRDNkI5OTdBMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
YWJsZUVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5N0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRh
Z05hbWVzLmluIGluIFJlc291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA0QzZCOTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi87IH07CisJCTRD
NkI5OTdDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NDBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovOyB9OworCQk0QzZCOTk3RDBFNTJFMzczMDA0ODdC
QjcgLyogV01MVGFza0VsZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTQ1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYXNrRWxlbWVudC5o
ICovOyB9OworCQk0QzZCOTk3RTBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5
OTQ2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwICovOyB9OworCQk0
QzZCOTk3RjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0NzBFNTJFMzczMDA0
ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi87IH07CisJCTRDNkI5OTgwMEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDRDNkI5OTQ4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUZXh0LmNwcCAqLzsg
fTsKKwkJNEM2Qjk5ODEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTQ5MEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxUZXh0LmggKi87IH07CisJCTRDNkI5OTgyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
aW1lckVsZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRpbWVyRWxlbWVudC5jcHAgKi87
IH07CisJCTRDNkI5OTgzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRDNkI5OTRCMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxUaW1lckVsZW1lbnQuaCAqLzsgfTsKKwkJNEM2Qjk5ODQwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA0QzZCOTk0QzBFNTJFMzczMDA0ODdCQjcgLyogV01MVG9rZW5p
emVyLmNwcCAqLzsgfTsKKwkJNEM2Qjk5ODUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXpl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNEM2Qjk5
NEQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovOyB9OworCQk0Q0Y2RDMwMTBF
NTU2RjRDMDBFRDNGNzQgLyogV01MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNENBM0FCNDkwRTU1NkYyNDAwRTlDMEMwIC8qIFdNTE5hbWVz
LmNwcCAqLzsgfTsKKwkJNENGNkQzMDIwRTU1NkY0RDAwRUQzRjc0IC8qIFdNTE5hbWVzLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA0Q0EzQUI0ODBFNTU2
RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuaCAqLzsgfTsKIAkJNEUxOTU5MjEwQTM5REFCQTAwMjIw
RkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTFGMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZlYXR1
cmVOYW1lcy5jcHAgKi87IH07CiAJCTRFMTk1OTIyMEEzOURBQkEwMDIyMEZFNSAvKiBNZWRpYUZl
YXR1cmVOYW1lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gNEUxOTU5MjAwQTM5REFCQTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi87IH07
CiAJCTRFMTk1OTI5MEEzOURBQ0MwMDIyMEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDRFMTk1OTIzMEEzOURBQ0MwMDIy
MEZFNSAvKiBNZWRpYVF1ZXJ5LmNwcCAqLzsgfTsKQEAgLTUyOTAsNiArNTM0OCw2NSBAQAogCQk0
QjZGQTZGNjBDMzlFNEExMDAwODcwMTEgLyogU21hcnRSZXBsYWNlQ0YuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU21hcnRSZXBsYWNlQ0YuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk0QjhBRjRBOTBCMUNFMDJCMDA2ODc2OTAgLyogQ2xpcGJvYXJk
QWNjZXNzUG9saWN5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDbGlwYm9h
cmRBY2Nlc3NQb2xpY3kuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEJBRTk1QjAw
QjJGQTlDRTAwQUVEOEEwIC8qIEVkaXRvckRlbGV0ZUFjdGlvbi5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBFZGl0b3JEZWxldGVBY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNEM2Qjk5MTYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFjY2Vzc0VsZW1lbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFjY2Vzc0VsZW1l
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxNzBFNTJFMzczMDA0
ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gV01MQWNjZXNzRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0
QzZCOTkxODBFNTJFMzczMDA0ODdCQjcgLyogV01MQUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEFFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxBRWxlbWVudC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkxQTBFNTJFMzczMDA0ODdCQjcgLyogV01MQW5j
aG9yRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
QW5jaG9yRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFC
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxBbmNob3JFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTFDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBdHRyaWJ1dGVOYW1lcy5p
biAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtu
b3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV01MQXR0cmlidXRlTmFtZXMuaW47IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndD
b250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxCcndD
b250ZXh0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MUUwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEJyd0NvbnRleHQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFdNTEJyd0NvbnRleHQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MUYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxDYXJkRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MQ2FyZEVsZW1lbnQu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjEwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTERvY3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXTUxEb2N1bWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTIy
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gV01MRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MjMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MRG9FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjQwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTERvRWxlbWVu
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRG9FbGVtZW50Lmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTI1MEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxF
bGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjYwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFdNTEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5Mjcw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5LmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxFbGVtZW50RmFjdG9yeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTI4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMw
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MRWxlbWVudEZh
Y3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MjkwRTUyRTM3MzAw
NDg3QkI3IC8qIFdNTEdvRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MR29FbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5MkEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEdvRWxlbWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gV01MR29FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CisJCTRDNkI5OTJCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxwZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEhlbHBlci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTJDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxIZWxw
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTEhlbHBlci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkyRDBFNTJFMzczMDA0ODdCQjcgLyogV01M
SW1hZ2VFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxJbWFnZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTky
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MSW1hZ2VFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBXTUxJbWFnZUVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJNEM2Qjk5MkYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTElucHV0RWxlbWVudC5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MSW5wdXRFbGVtZW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzAwRTUyRTM3MzAwNDg3QkI3
IC8qIFdNTElucHV0RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
V01MSW5wdXRFbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMx
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTMyMEU1MkUzNzMwMDQ4N0JC
NyAvKiBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTkzMzBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MT3B0aW9uRWxlbWVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM0MEU1MkUzNzMwMDQ4
N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBXTUxPcHRpb25FbGVtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
NkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01MUEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTkzNjBFNTJFMzczMDA0ODdCQjcgLyogV01MUEVsZW1lbnQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTM3MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0
ZmllbGRFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBX
TUxQb3N0ZmllbGRFbGVtZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2
Qjk5MzgwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFdNTFBvc3RmaWVsZEVsZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZF
bGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAz
MDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxQcmV2
RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNBMEU1MkUz
NzMwMDQ4N0JCNyAvKiBXTUxQcmV2RWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MUHJldkVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
NEM2Qjk5M0IwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFJlZnJlc2hFbGVtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXTUxSZWZyZXNoRWxlbWVudC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxSZWZyZXNoRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01M
UmVmcmVzaEVsZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5M0Qw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFNlbGVjdEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFNlbGVjdEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQk0QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxl
bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV01MU2VsZWN0RWxlbWVu
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTkzRjBFNTJFMzczMDA0ODdC
QjcgLyogV01MU2V0dmFyRWxlbWVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV01MU2V0dmFyRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTRDNkI5OTQwMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxTZXR2YXJFbGVtZW50Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJs
ZUVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRh
YmxlRWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRDNkI5OTQyMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IFdNTFRhYmxlRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFdNTFRhZ05hbWVzLmluOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQk0QzZCOTk0NDBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdNTFRhc2tFbGVtZW50LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDUwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRhc2tFbGVtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUYXNr
RWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0NjBFNTJFMzcz
MDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQk0QzZCOTk0NzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVt
ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUZW1wbGF0ZUVsZW1l
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NDgwRTUyRTM3MzAwNDg3
QkI3IC8qIFdNTFRleHQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IFdNTFRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0OTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGV4dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gV01MVGV4dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk0QzZCOTk0QTBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQk0QzZCOTk0QjBFNTJFMzczMDA0ODdCQjcgLyogV01MVGltZXJFbGVtZW50Lmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXTUxUaW1lckVsZW1lbnQuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEMwRTUyRTM3MzAwNDg3QkI3IC8qIFdN
TFRva2VuaXplci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV01M
VG9rZW5pemVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNEM2Qjk5NEQwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTFRva2VuaXplci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gV01MVG9rZW5pemVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTRD
QTNBQjQ4MEU1NTZGMjQwMEU5QzBDMCAvKiBXTUxOYW1lcy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBuYW1lID0gV01MTmFtZXMuaDsgcGF0aCA9IC4uL1dlYktpdEJ1aWxkL0RlYnVnL0Rl
cml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuaDsgc291cmNlVHJlZSA9IFNPVVJDRV9ST09U
OyB9OworCQk0Q0EzQUI0OTBFNTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFdNTE5hbWVzLmNwcDsgcGF0aCA9IC4uL1dl
YktpdEJ1aWxkL0RlYnVnL0Rlcml2ZWRTb3VyY2VzL1dlYkNvcmUvV01MTmFtZXMuY3BwOyBzb3Vy
Y2VUcmVlID0gU09VUkNFX1JPT1Q7IH07CisJCTRDREU1NEVDMEU1NTc5NzgwMDg5RTI2QyAvKiB3
bWwuY3NzICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSB3bWwuY3NzOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk0RTE5NTkxRjBBMzlEQUJBMDAyMjBGRTUgLyogTWVkaWFGZWF0dXJlTmFt
ZXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IE1lZGlhRmVhdHVy
ZU5hbWVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNEUxOTU5MjAwQTM5REFC
QTAwMjIwRkU1IC8qIE1lZGlhRmVhdHVyZU5hbWVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBNZWRpYUZlYXR1cmVOYW1lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk0RTE5NTkyMzBBMzlEQUNDMDAyMjBGRTUgLyogTWVkaWFRdWVyeS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTWVkaWFRdWVyeS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CkBAIC02NjA3LDcgKzY3MjQsNyBAQAogCQk5M0VFQzFGNzA5QzI4Nzc3
MDBDNTE1RDEgLyogV2hlZWxFdmVudC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gV2hlZWxF
dmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTkzRUVDMjZFMDlDMzIxODAw
MEM1MTVEMSAvKiBDYW52YXNQYXR0ZXJuLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IENhbnZhc1BhdHRlcm4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk5M0VFQzI3MDA5QzMyMTg4MDBDNTE1RDEgLyogQ2FudmFzU3R5bGUuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2FudmFzU3R5bGUuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQk5M0YxOUIxOTA4MjQ1RTU5MDAxRTlBQkMgLyogSW5mby5wbGlzdCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gdGV4dC5wbGlzdC54bWw7IHBhdGggPSBJbmZvLnBsaXN0OyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB0YWJXaWR0aCA9IDg7IHVzZXNUYWJzID0gMDsgfTsKKwkJOTNGMTlCMTkwODI0
NUU1OTAwMUU5QUJDIC8qIEluZm8ucGxpc3QgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
aW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQueG1sOyBwYXRoID0gSW5m
by5wbGlzdDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB1c2VzVGFicyA9
IDA7IH07CiAJCTkzRjE5QjFBMDgyNDVFNUEwMDFFOUFCQyAvKiBXZWJDb3JlLmZyYW1ld29yayAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBleHBsaWNpdEZpbGVUeXBlID0gd3JhcHBlci5m
cmFtZXdvcms7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IFdlYkNvcmUuZnJhbWV3b3JrOyBz
b3VyY2VUcmVlID0gQlVJTFRfUFJPRFVDVFNfRElSOyB9OwogCQk5M0YxRDMxQTA1NThDQzVDMDA4
MjFCQzAgLyogbGliaWN1Y29yZS5keWxpYiAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZHlsaWIiOyBuYW1lID0gbGliaWN1
Y29yZS5keWxpYjsgcGF0aCA9IC91c3IvbGliL2xpYmljdWNvcmUuZHlsaWI7IHNvdXJjZVRyZWUg
PSAiPGFic29sdXRlPiI7IH07CiAJCTkzRjhCMzA1MEEzMDBGRTEwMEY2MUFCOCAvKiBDb2RlR2Vu
ZXJhdG9yLnBtICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dC5zY3JpcHQucGVybDsgbmFtZSA9IENvZGVHZW5lcmF0
b3IucG07IHBhdGggPSBzY3JpcHRzL0NvZGVHZW5lcmF0b3IucG07IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CkBAIC04OTk0LDYgKzkxMTEsNyBAQAogCQkwODY3RDY5MUZFODQwMjhGQzAyQUFD
MDcgLyogV2ViS2l0ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgK
KwkJCQk0QzZCOTkxNTBFNTJFMzczMDA0ODdCQjcgLyogd21sICovLAogCQkJCTY1Qzk3QUYyMDhF
QTkwODgwMEFDRDI3MyAvKiBjb25maWcuaCAqLywKIAkJCQlFREVDOTgwMjBBRUQ3RTE3MDA1OTEz
N0YgLyogV2ViQ29yZVByZWZpeC5oICovLAogCQkJCTkzMDcwNjEzMDlFMENBODIwMEIxN0ZFNCAv
KiBEZXJpdmVkU291cmNlcy5tYWtlICovLApAQCAtOTM2Miw2ICs5NDgwLDY5IEBACiAJCQl0YWJX
aWR0aCA9IDQ7CiAJCQl1c2VzVGFicyA9IDA7CiAJCX07CisJCTRDNkI5OTE1MEU1MkUzNzMwMDQ4
N0JCNyAvKiB3bWwgKi8gPSB7CisJCQlpc2EgPSBQQlhHcm91cDsKKwkJCWNoaWxkcmVuID0gKAor
CQkJCTRDNkI5OTE2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBY2Nlc3NFbGVtZW50LmNwcCAqLywK
KwkJCQk0QzZCOTkxNzBFNTJFMzczMDA0ODdCQjcgLyogV01MQWNjZXNzRWxlbWVudC5oICovLAor
CQkJCTRDNkI5OTE4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MTkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MUEwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEFuY2hvckVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5
OTFCMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxBbmNob3JFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MUMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEF0dHJpYnV0ZU5hbWVzLmluICovLAorCQkJCTRDNkI5
OTFEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxCcndDb250ZXh0LmNwcCAqLywKKwkJCQk0QzZCOTkx
RTBFNTJFMzczMDA0ODdCQjcgLyogV01MQnJ3Q29udGV4dC5oICovLAorCQkJCTRDNkI5OTFGMEU1
MkUzNzMwMDQ4N0JCNyAvKiBXTUxDYXJkRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5MjAwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTENhcmRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjEwRTUyRTM3
MzAwNDg3QkI3IC8qIFdNTERvY3VtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyMjBFNTJFMzczMDA0
ODdCQjcgLyogV01MRG9jdW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyMzBFNTJFMzczMDA0ODdCQjcg
LyogV01MRG9FbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkyNDBFNTJFMzczMDA0ODdCQjcgLyog
V01MRG9FbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MjUwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVs
ZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTI2MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxFbGVtZW50
LmggKi8sCisJCQkJNEM2Qjk5MjcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEVsZW1lbnRGYWN0b3J5
LmNwcCAqLywKKwkJCQk0QzZCOTkyODBFNTJFMzczMDA0ODdCQjcgLyogV01MRWxlbWVudEZhY3Rv
cnkuaCAqLywKKwkJCQk0QzZCOTkyOTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmNw
cCAqLywKKwkJCQk0QzZCOTkyQTBFNTJFMzczMDA0ODdCQjcgLyogV01MR29FbGVtZW50LmggKi8s
CisJCQkJNEM2Qjk5MkIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5jcHAgKi8sCisJCQkJ
NEM2Qjk5MkMwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEhlbHBlci5oICovLAorCQkJCTRDNkI5OTJE
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuY3BwICovLAorCQkJCTRDNkI5OTJF
MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxJbWFnZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTkyRjBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTkzMDBF
NTJFMzczMDA0ODdCQjcgLyogV01MSW5wdXRFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5MzEwRTUy
RTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAgKi8sCisJCQkJNEM2
Qjk5MzIwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlci5oICovLAor
CQkJCTRDNkI5OTMzMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxPcHRpb25FbGVtZW50LmNwcCAqLywK
KwkJCQk0QzZCOTkzNDBFNTJFMzczMDA0ODdCQjcgLyogV01MT3B0aW9uRWxlbWVudC5oICovLAor
CQkJCTRDNkI5OTM1MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQRWxlbWVudC5jcHAgKi8sCisJCQkJ
NEM2Qjk5MzYwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5
MzcwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFBvc3RmaWVsZEVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTM4MEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxQb3N0ZmllbGRFbGVtZW50LmggKi8sCisJCQkJ
NEM2Qjk5MzkwRTUyRTM3MzAwNDg3QkI3IC8qIFdNTFByZXZFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTkzQTBFNTJFMzczMDA0ODdCQjcgLyogV01MUHJldkVsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTkzQjBFNTJFMzczMDA0ODdCQjcgLyogV01MUmVmcmVzaEVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTNDMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxSZWZyZXNoRWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTNEMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZWxlY3RFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTkzRTBFNTJFMzczMDA0ODdCQjcgLyogV01MU2VsZWN0RWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTNGMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxTZXR2YXJFbGVtZW50LmNwcCAqLywKKwkJCQk0
QzZCOTk0MDBFNTJFMzczMDA0ODdCQjcgLyogV01MU2V0dmFyRWxlbWVudC5oICovLAorCQkJCTRD
NkI5OTQxMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuY3BwICovLAorCQkJCTRD
NkI5OTQyMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxUYWJsZUVsZW1lbnQuaCAqLywKKwkJCQk0QzZC
OTk0MzBFNTJFMzczMDA0ODdCQjcgLyogV01MVGFnTmFtZXMuaW4gKi8sCisJCQkJNEM2Qjk5NDQw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRhc2tFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NTBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGFza0VsZW1lbnQuaCAqLywKKwkJCQk0QzZCOTk0NjBFNTJF
MzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmNwcCAqLywKKwkJCQk0QzZCOTk0NzBF
NTJFMzczMDA0ODdCQjcgLyogV01MVGVtcGxhdGVFbGVtZW50LmggKi8sCisJCQkJNEM2Qjk5NDgw
RTUyRTM3MzAwNDg3QkI3IC8qIFdNTFRleHQuY3BwICovLAorCQkJCTRDNkI5OTQ5MEU1MkUzNzMw
MDQ4N0JCNyAvKiBXTUxUZXh0LmggKi8sCisJCQkJNEM2Qjk5NEEwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRpbWVyRWxlbWVudC5jcHAgKi8sCisJCQkJNEM2Qjk5NEIwRTUyRTM3MzAwNDg3QkI3IC8q
IFdNTFRpbWVyRWxlbWVudC5oICovLAorCQkJCTRDNkI5OTRDMEU1MkUzNzMwMDQ4N0JCNyAvKiBX
TUxUb2tlbml6ZXIuY3BwICovLAorCQkJCTRDNkI5OTREMEU1MkUzNzMwMDQ4N0JCNyAvKiBXTUxU
b2tlbml6ZXIuaCAqLywKKwkJCSk7CisJCQlwYXRoID0gd21sOworCQkJc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsKKwkJfTsKIAkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC05NDg2LDYgKzk2
NjcsOCBAQAogCQk2NTY1ODBFQzA5RDEyQjIwMDAwRTYxRDcgLyogRGVyaXZlZCBTb3VyY2VzICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQk0Q0EzQUI0ODBF
NTU2RjI0MDBFOUMwQzAgLyogV01MTmFtZXMuaCAqLywKKwkJCQk0Q0EzQUI0OTBFNTU2RjI0MDBF
OUMwQzAgLyogV01MTmFtZXMuY3BwICovLAogCQkJCTY1NjU4MUFDMDlEMTRFRTYwMDBFNjFENyAv
KiBDaGFyc2V0RGF0YS5jcHAgKi8sCiAJCQkJNjU2NTgxQUQwOUQxNEVFNjAwMEU2MUQ3IC8qIENv
bG9yRGF0YS5jICovLAogCQkJCTY1NjU4MTQ0MDlEMTMwNDMwMDBFNjFENyAvKiBDU1NHcmFtbWFy
LmNwcCAqLywKQEAgLTEzNDk3LDYgKzEzNjgwLDcgQEAKIAkJRjUyM0QxODQwMkRFNDJFODAxODYz
NUNBIC8qIGNzcyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCisJ
CQkJNENERTU0RUMwRTU1Nzk3ODAwODlFMjZDIC8qIHdtbC5jc3MgKi8sCiAJCQkJQTgwRTZDREEw
QTE5ODlDQTAwN0ZCOEM1IC8qIENvdW50ZXIuaCAqLywKIAkJCQk5MzA3MDVDNzA5RTBDOTVGMDBC
MTdGRTQgLyogQ291bnRlci5pZGwgKi8sCiAJCQkJQTgwRTZDQkIwQTE5ODlDQTAwN0ZCOEM1IC8q
IENTU0JvcmRlckltYWdlVmFsdWUuY3BwICovLApAQCAtMTYyNTQsNyArMTY0MzgsNiBAQAogCQkw
ODY3RDY5MEZFODQwMjhGQzAyQUFDMDcgLyogUHJvamVjdCBvYmplY3QgKi8gPSB7CiAJCQlpc2Eg
PSBQQlhQcm9qZWN0OwogCQkJYnVpbGRDb25maWd1cmF0aW9uTGlzdCA9IDE0OUMyODQzMDg5MDJC
MTEwMDhBOUVGQyAvKiBCdWlsZCBjb25maWd1cmF0aW9uIGxpc3QgZm9yIFBCWFByb2plY3QgIldl
YkNvcmUiICovOwotCQkJY29tcGF0aWJpbGl0eVZlcnNpb24gPSAiWGNvZGUgMi40IjsKIAkJCWhh
c1NjYW5uZWRGb3JFbmNvZGluZ3MgPSAxOwogCQkJa25vd25SZWdpb25zID0gKAogCQkJCUVuZ2xp
c2gsCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBX
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNlbGVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1
LDggQEAKICAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxleGV5IFByb3Nr
dXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KICAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBFcmlj
IFNlaWRlbCA8ZXJpY0B3ZWJraXQub3JnPgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzU0LDYgKzM1Niw5
IEBAIHN0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0U3R5bGU7CiBzdGF0aWMgQ1NTUnVsZVNldCog
ZGVmYXVsdFF1aXJrc1N0eWxlOwogc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRQcmludFN0eWxl
Owogc3RhdGljIENTU1J1bGVTZXQqIGRlZmF1bHRWaWV3U291cmNlU3R5bGU7CisjaWYgRU5BQkxF
KFdNTCkKK3N0YXRpYyBDU1NSdWxlU2V0KiBkZWZhdWx0V21sU3R5bGUgPSAwOworI2VuZGlmCiBz
dGF0aWMgQ1NTU3R5bGVTaGVldCogc2ltcGxlRGVmYXVsdFN0eWxlU2hlZXQ7CiAKIFJlbmRlclN0
eWxlKiBDU1NTdHlsZVNlbGVjdG9yOjpzX3N0eWxlTm90WWV0QXZhaWxhYmxlOwpAQCAtNTI1LDYg
KzUzMCwxMyBAQCBzdGF0aWMgdm9pZCBsb2FkVmlld1NvdXJjZVN0eWxlKCkKICAgICBBU1NFUlQo
IWRlZmF1bHRWaWV3U291cmNlU3R5bGUpOwogICAgIGRlZmF1bHRWaWV3U291cmNlU3R5bGUgPSBu
ZXcgQ1NTUnVsZVNldDsKICAgICBkZWZhdWx0Vmlld1NvdXJjZVN0eWxlLT5hZGRSdWxlc0Zyb21T
aGVldChwYXJzZVVBU2hlZXQoc291cmNlVXNlckFnZW50U3R5bGVTaGVldCwgc2l6ZW9mKHNvdXJj
ZVVzZXJBZ2VudFN0eWxlU2hlZXQpKSwgc2NyZWVuRXZhbCgpKTsKKworI2lmIEVOQUJMRShXTUwp
CisgICAgaWYgKCFkZWZhdWx0V21sU3R5bGUpIHsKKyAgICAgICAgZGVmYXVsdFdtbFN0eWxlID0g
bmV3IENTU1J1bGVTZXQ7CisgICAgICAgIGRlZmF1bHRXbWxTdHlsZS0+YWRkUnVsZXNGcm9tU2hl
ZXQocGFyc2VVQVNoZWV0KHdtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNpemVvZih3bWxVc2VyQWdl
bnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7CisgICAgfQorI2VuZGlmCiB9CiAKIHZvaWQg
Q1NTU3R5bGVTZWxlY3Rvcjo6YWRkTWF0Y2hlZERlY2xhcmF0aW9uKENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uKiBkZWNsKQpAQCAtOTkwLDYgKzEwMDIsMTEgQEAgdm9pZCBDU1NTdHlsZVNlbGVj
dG9yOjptYXRjaFVBUnVsZXMoaW50JgogICAgICAgICA/IGRlZmF1bHRQcmludFN0eWxlIDogZGVm
YXVsdFN0eWxlOwogICAgIG1hdGNoUnVsZXModXNlckFnZW50U3R5bGVTaGVldCwgZmlyc3RVQVJ1
bGUsIGxhc3RVQVJ1bGUpOwogCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAobV9jaGVja2VyLm1f
ZG9jdW1lbnQtPmlzV01MRG9jdW1lbnQoKSkKKyAgICAgICAgbWF0Y2hSdWxlcyhkZWZhdWx0V21s
U3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKKyNlbmRpZgorCiAgICAgLy8gSW4gcXVp
cmtzIG1vZGUsIHdlIG1hdGNoIHJ1bGVzIGZyb20gdGhlIHF1aXJrcyB1c2VyIGFnZW50IHNoZWV0
LgogICAgIGlmICghbV9jaGVja2VyLm1fc3RyaWN0UGFyc2luZykKICAgICAgICAgbWF0Y2hSdWxl
cyhkZWZhdWx0UXVpcmtzU3R5bGUsIGZpcnN0VUFSdWxlLCBsYXN0VUFSdWxlKTsKQEAgLTEwNTAs
NiArMTA2NywxMyBAQCBQYXNzUmVmUHRyPFJlbmRlclN0eWxlPiBDU1NTdHlsZVNlbGVjdG9yCiAg
ICAgfQogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChtX2NoZWNrZXIubV9kb2N1
bWVudC0+aXNXTUxEb2N1bWVudCgpICYmICFkZWZhdWx0V21sU3R5bGUpIHsKKyAgICAgICAgZGVm
YXVsdFdtbFN0eWxlID0gbmV3IENTU1J1bGVTZXQ7CisgICAgICAgIGRlZmF1bHRXbWxTdHlsZS0+
YWRkUnVsZXNGcm9tU2hlZXQocGFyc2VVQVNoZWV0KHdtbFVzZXJBZ2VudFN0eWxlU2hlZXQsIHNp
emVvZih3bWxVc2VyQWdlbnRTdHlsZVNoZWV0KSksIHNjcmVlbkV2YWwoKSk7CisgICAgfQorI2Vu
ZGlmCisKICAgICBpbnQgZmlyc3RVQVJ1bGUgPSAtMSwgbGFzdFVBUnVsZSA9IC0xOwogICAgIGlu
dCBmaXJzdFVzZXJSdWxlID0gLTEsIGxhc3RVc2VyUnVsZSA9IC0xOwogICAgIGludCBmaXJzdEF1
dGhvclJ1bGUgPSAtMSwgbGFzdEF1dGhvclJ1bGUgPSAtMTsKSW5kZXg6IFdlYkNvcmUvY3NzL3dt
bC5jc3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3Mvd21sLmNzcwkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvY3NzL3dtbC5jc3MJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTUxIEBACisvKgor
ICogVGhlIGRlZmF1bHQgc3R5bGUgc2hlZXQgdXNlZCB0byByZW5kZXIgSFRNTC4KKyAqCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDAgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCitAbmFtZXNwYWNlICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy8iOworCit3bWwgewor
ICAgIGRpc3BsYXk6IGJsb2NrCit9CisKKy8qIGNoaWxkcmVuIG9mIHRoZSA8aGVhZD4gZWxlbWVu
dCBhbGwgaGF2ZSBkaXNwbGF5Om5vbmUgKi8KK2hlYWQgeworICAgIGRpc3BsYXk6IG5vbmUKK30K
KworbWV0YSB7CisgICAgZGlzcGxheTogbm9uZQorfQorCithY2Nlc3MgeworICAgIGRpc3BsYXk6
IG5vbmUKK30KKworLyogZ2VuZXJpYyBibG9jay1sZXZlbCBlbGVtZW50cyAqLworCitjYXJkIHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDhweAorfQorCitwIHsKKyAgICBkaXNw
bGF5OiBibG9jazsKKyAgICBtYXJnaW46IDEuMF9fcWVtIDBweAorfQorCitkaXYgeworICAgIGRp
c3BsYXk6IGJsb2NrCit9CisKK2xheWVyIHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCittYXJx
dWVlIHsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAgb3ZlcmZsb3c6IC13ZWJraXQt
bWFycXVlZQorfQorCithZGRyZXNzIHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCitibG9ja3F1
b3RlIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDFfX3FlbSA0MHB4IDFlbSA0
MHB4Cit9CisKK3EgeworICAgIGRpc3BsYXk6IGlubGluZQorfQorCitxOmJlZm9yZSB7CisgICAg
Y29udGVudDogJyInCisgICAgLyogRklYTUU6IGNvbnRlbnQ6IG9wZW4tcXVvdGU7ICovCit9CisK
K3E6YWZ0ZXIgeworICAgIGNvbnRlbnQ6ICciJworICAgIC8qIEZJWE1FOiBjb250ZW50OiBjbG9z
ZS1xdW90ZTsgKi8KK30KKworY2VudGVyIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICAvKiBz
cGVjaWFsIGNlbnRlcmluZyB0byBiZSBhYmxlIHRvIGVtdWxhdGUgdGhlIGh0bWw0L25ldHNjYXBl
IGJlaGF2aW91ciAqLworICAgIHRleHQtYWxpZ246IC13ZWJraXQtY2VudGVyCit9CisKK2hyIHsK
KyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDAuNWVtIGF1dG87CisgICAgYm9yZGVy
LXN0eWxlOiBpbnNldDsKKyAgICBib3JkZXItd2lkdGg6IDFweAorfQorCittYXAgeworICAgIGRp
c3BsYXk6IGlubGluZQorfQorCisvKiB0YWJsZXMgKi8KKwordGFibGUgeworICAgIGRpc3BsYXk6
IHRhYmxlOworICAgIGJvcmRlci1jb2xsYXBzZTogc2VwYXJhdGU7CisgICAgYm9yZGVyLXNwYWNp
bmc6IDJweDsKKyAgICBib3JkZXItY29sb3I6IGdyYXkKK30KKwordGFibGVbYWxpZ249ImNlbnRl
ciJdIHsKKyAgICBtYXJnaW4tbGVmdDogYXV0bzsKKyAgICBtYXJnaW4tcmlnaHQ6IGF1dG8KK30K
KwordGhlYWQgeworICAgIGRpc3BsYXk6IHRhYmxlLWhlYWRlci1ncm91cDsKKyAgICB2ZXJ0aWNh
bC1hbGlnbjogbWlkZGxlOworICAgIGJvcmRlci1jb2xvcjogaW5oZXJpdAorfQorCit0Ym9keSB7
CisgICAgZGlzcGxheTogdGFibGUtcm93LWdyb3VwOworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRk
bGU7CisgICAgYm9yZGVyLWNvbG9yOiBpbmhlcml0Cit9CisKK3Rmb290IHsKKyAgICBkaXNwbGF5
OiB0YWJsZS1mb290ZXItZ3JvdXA7CisgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKKyAgICBi
b3JkZXItY29sb3I6IGluaGVyaXQKK30KKworLyogZm9yIHRhYmxlcyB3aXRob3V0IHRhYmxlIHNl
Y3Rpb24gZWxlbWVudHMgKGNhbiBoYXBwZW4gd2l0aCBYSFRNTCBvciBkeW5hbWljYWxseSBjcmVh
dGVkIHRhYmxlcykgKi8KK3RhYmxlID4gdHIgeworICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7
Cit9CisKK2NvbCB7CisgICAgZGlzcGxheTogdGFibGUtY29sdW1uCit9CisKK2NvbGdyb3VwIHsK
KyAgICBkaXNwbGF5OiB0YWJsZS1jb2x1bW4tZ3JvdXAKK30KKwordHIgeworICAgIGRpc3BsYXk6
IHRhYmxlLXJvdzsKKyAgICB2ZXJ0aWNhbC1hbGlnbjogaW5oZXJpdDsKKyAgICBib3JkZXItY29s
b3I6IGluaGVyaXQKK30KKwordGQsIHRoIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jZWxsOworICAg
IHZlcnRpY2FsLWFsaWduOiBpbmhlcml0Cit9CisKK3RoIHsKKyAgICBmb250LXdlaWdodDogYm9s
ZAorfQorCitjYXB0aW9uIHsKKyAgICBkaXNwbGF5OiB0YWJsZS1jYXB0aW9uOworICAgIHRleHQt
YWxpZ246IC13ZWJraXQtY2VudGVyCit9CisKKy8qIGxpc3RzICovCisKK3VsLCBtZW51LCBkaXIg
eworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIGxpc3Qtc3R5bGUtdHlwZTogZGlzYzsKKyAgICBt
YXJnaW46IDFfX3FlbSAwIDFlbSAwOworICAgIC13ZWJraXQtcGFkZGluZy1zdGFydDogNDBweAor
fQorCitvbCB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgbGlzdC1zdHlsZS10eXBlOiBkZWNp
bWFsOworICAgIG1hcmdpbjogMV9fcWVtIDAgMWVtIDA7CisgICAgLXdlYmtpdC1wYWRkaW5nLXN0
YXJ0OiA0MHB4Cit9CisKK2xpIHsKKyAgICBkaXNwbGF5OiBsaXN0LWl0ZW0KK30KKwordWwgdWws
IG9sIHVsIHsKKyAgICBsaXN0LXN0eWxlLXR5cGU6IGNpcmNsZQorfQorCitvbCBvbCB1bCwgb2wg
dWwgdWwsIHVsIG9sIHVsLCB1bCB1bCB1bCB7CisgICAgbGlzdC1zdHlsZS10eXBlOiBzcXVhcmUK
K30KKworZGQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIC13ZWJraXQtbWFyZ2luLXN0YXJ0
OiA0MHB4Cit9CisKK2RsIHsKKyAgICBkaXNwbGF5OiBibG9jazsKKyAgICBtYXJnaW46IDFfX3Fl
bSAwIDFlbSAwCit9CisKK2R0IHsKKyAgICBkaXNwbGF5OiBibG9jaworfQorCitvbCB1bCwgdWwg
b2wsIHVsIHVsLCBvbCBvbCB7CisgICAgbWFyZ2luLXRvcDogMDsKKyAgICBtYXJnaW4tYm90dG9t
OiAwCit9CisKKy8qIGZvcm0gZWxlbWVudHMgKi8KKworZm9ybSB7CisgICAgZGlzcGxheTogYmxv
Y2s7CisgICAgbWFyZ2luOiAwX19xZW0gMCAxZW0gMAorfQorCitsYWJlbCB7CisgICAgY3Vyc29y
OiBkZWZhdWx0OworfQorCitsZWdlbmQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIHBhZGRp
bmctbGVmdDogMnB4OworICAgIHBhZGRpbmctcmlnaHQ6IDJweDsKKyAgICBib3JkZXI6IG5vbmUK
K30KKworZmllbGRzZXQgeworICAgIGRpc3BsYXk6IGJsb2NrOworICAgIG1hcmdpbi1sZWZ0OiAy
cHg7CisgICAgbWFyZ2luLXJpZ2h0OiAycHg7CisgICAgcGFkZGluZzogMC4zNWVtIDAuNzVlbSAw
LjYyNWVtOworICAgIGJvcmRlcjogMnB4IGdyb292ZSBUaHJlZURGYWNlCit9CisKK2J1dHRvbiB7
CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBidXR0b247Cit9CisKK2RvIHsKKyAgICBiYWNrZ3Jv
dW5kLWNvbG9yOiBsaWdodGdyYXk7Cit9CisKK2lucHV0LCB0ZXh0YXJlYSwga2V5Z2VuLCBzZWxl
Y3QsIGJ1dHRvbiwgaXNpbmRleCB7CisgICAgbWFyZ2luOiAwX19xZW07CisgICAgZm9udDogLXdl
YmtpdC1zbWFsbC1jb250cm9sOworICAgIGNvbG9yOiBpbml0aWFsOworICAgIGxldHRlci1zcGFj
aW5nOiBub3JtYWw7CisgICAgd29yZC1zcGFjaW5nOiBub3JtYWw7CisgICAgbGluZS1oZWlnaHQ6
IG5vcm1hbDsKKyAgICB0ZXh0LXRyYW5zZm9ybTogbm9uZTsKKyAgICB0ZXh0LWluZGVudDogMDsK
KyAgICB0ZXh0LXNoYWRvdzogbm9uZTsKKyAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CisgICAg
dGV4dC1hbGlnbjogLXdlYmtpdC1hdXRvOworfQorCitpbnB1dFt0eXBlPSJoaWRkZW4iXSB7Cisg
ICAgZGlzcGxheTogbm9uZQorfQorCitpbnB1dCwgaW5wdXRbdHlwZT0icGFzc3dvcmQiXSwgaW5w
dXRbdHlwZT0ic2VhcmNoIl0sIGlzaW5kZXggeworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogdGV4
dGZpZWxkOworICAgIHBhZGRpbmc6IDFweDsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsK
KyAgICBib3JkZXI6IDJweCBpbnNldDsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzogbG9naWNh
bDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIGN1cnNvcjogYXV0bzsKK30K
KworaW5wdXRbdHlwZT0ic2VhcmNoIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogc2VhcmNo
ZmllbGQ7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitpbnB1dFt0
eXBlPSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtY2FuY2VsLWJ1dHRvbiB7CisgICAgLXdlYmtp
dC1hcHBlYXJhbmNlOiBzZWFyY2hmaWVsZC1jYW5jZWwtYnV0dG9uOworfQorCitpbnB1dFt0eXBl
PSJzZWFyY2giXTo6LXdlYmtpdC1zZWFyY2gtZGVjb3JhdGlvbiB7CisgICAgLXdlYmtpdC1hcHBl
YXJhbmNlOiBzZWFyY2hmaWVsZC1kZWNvcmF0aW9uOworfQorCitpbnB1dFt0eXBlPSJzZWFyY2gi
XTo6LXdlYmtpdC1zZWFyY2gtcmVzdWx0cy1kZWNvcmF0aW9uIHsKKyAgICAtd2Via2l0LWFwcGVh
cmFuY2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtZGVjb3JhdGlvbjsKK30KKworaW5wdXRbdHlwZT0i
c2VhcmNoIl06Oi13ZWJraXQtc2VhcmNoLXJlc3VsdHMtYnV0dG9uIHsKKyAgICAtd2Via2l0LWFw
cGVhcmFuY2U6IHNlYXJjaGZpZWxkLXJlc3VsdHMtYnV0dG9uOworfQorCit0ZXh0YXJlYSB7Cisg
ICAgLXdlYmtpdC1hcHBlYXJhbmNlOiB0ZXh0YXJlYTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3
aGl0ZTsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsKKyAgICAtd2Via2l0LXJ0bC1vcmRlcmluZzog
bG9naWNhbDsKKyAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OworICAgIC13ZWJraXQtYm94
LW9yaWVudDogdmVydGljYWw7CisgICAgcmVzaXplOiBhdXRvOworICAgIGN1cnNvcjogYXV0bzsK
K30KKworaW5wdXRbdHlwZT0icGFzc3dvcmQiXSB7CisgICAgLXdlYmtpdC10ZXh0LXNlY3VyaXR5
OiBkaXNjICFpbXBvcnRhbnQ7Cit9CisKK2lucHV0W3R5cGU9ImhpZGRlbiJdLCBpbnB1dFt0eXBl
PSJpbWFnZSJdLCBpbnB1dFt0eXBlPSJmaWxlIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTog
aW5pdGlhbDsKKyAgICBwYWRkaW5nOiBpbml0aWFsOworICAgIGJhY2tncm91bmQtY29sb3I6IGlu
aXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworfQorCitpbnB1dFt0eXBlPSJmaWxlIl0gewor
ICAgIC13ZWJraXQtYm94LWFsaWduOiBiYXNlbGluZTsKK30KKworaW5wdXQ6LXdlYmtpdC1hdXRv
ZmlsbCB7CisgICAgYmFja2dyb3VuZC1jb2xvcjogI0ZBRkZCRCAhaW1wb3J0YW50OworICAgIGJh
Y2tncm91bmQtaW1hZ2U6bm9uZSAhaW1wb3J0YW50OworfQorCitpbnB1dFt0eXBlPSJyYWRpbyJd
LCBpbnB1dFt0eXBlPSJjaGVja2JveCJdIHsKKyAgICBtYXJnaW46IDNweCAwLjVleDsKKyAgICBw
YWRkaW5nOiBpbml0aWFsOworICAgIGJhY2tncm91bmQtY29sb3I6IGluaXRpYWw7CisgICAgYm9y
ZGVyOiBpbml0aWFsOworfQorCitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRbdHlwZT0ic3Vi
bWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6LXdlYmtpdC1m
aWxlLXVwbG9hZC1idXR0b24geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogcHVzaC1idXR0b247
CisgICAgd2hpdGUtc3BhY2U6IHByZQorfQorCitpbnB1dFt0eXBlPSJidXR0b24iXSwgaW5wdXRb
dHlwZT0ic3VibWl0Il0sIGlucHV0W3R5cGU9InJlc2V0Il0sIGlucHV0W3R5cGU9ImZpbGUiXTo6
LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbiB7CisgICAgLXdlYmtpdC1ib3gtYWxp
Z246IGNlbnRlcjsKKyAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CisgICAgY3Vyc29yOiBkZWZhdWx0
OworICAgIGNvbG9yOiBCdXR0b25UZXh0OworICAgIHBhZGRpbmc6IDJweCA2cHggM3B4IDZweDsK
KyAgICBib3JkZXI6IDJweCBvdXRzZXQgQnV0dG9uRmFjZTsKKyAgICBiYWNrZ3JvdW5kLWNvbG9y
OiBCdXR0b25GYWNlOworICAgIC13ZWJraXQtYm94LXNpemluZzogYm9yZGVyLWJveAorfQorCitp
bnB1dFt0eXBlPSJyYW5nZSJdIHsKKyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHNsaWRlci1ob3Jp
em9udGFsOworICAgIHBhZGRpbmc6IGluaXRpYWw7CisgICAgYm9yZGVyOiBpbml0aWFsOworICAg
IG1hcmdpbjogMnB4OworfQorCitpbnB1dFt0eXBlPSJyYW5nZSJdOjotd2Via2l0LXNsaWRlci10
aHVtYiB7CisgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzbGlkZXJ0aHVtYi1ob3Jpem9udGFsOwor
fQorCitpbnB1dFt0eXBlPSJidXR0b24iXTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0Il06
ZGlzYWJsZWQsIGlucHV0W3R5cGU9InJlc2V0Il06ZGlzYWJsZWQsIGlucHV0W3R5cGU9ImZpbGUi
XTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b24sIGJ1dHRvbjpkaXNhYmxlZCwg
c2VsZWN0OmRpc2FibGVkLCBrZXlnZW46ZGlzYWJsZWQsIG9wdGdyb3VwOmRpc2FibGVkLCBvcHRp
b246ZGlzYWJsZWQgeworICAgIGNvbG9yOiBHcmF5VGV4dAorfQorCitpbnB1dFt0eXBlPSJidXR0
b24iXTphY3RpdmUsIGlucHV0W3R5cGU9InN1Ym1pdCJdOmFjdGl2ZSwgaW5wdXRbdHlwZT0icmVz
ZXQiXTphY3RpdmUsIGlucHV0W3R5cGU9ImZpbGUiXTphY3RpdmU6Oi13ZWJraXQtZmlsZS11cGxv
YWQtYnV0dG9uLCBidXR0b246YWN0aXZlIHsKKyAgICBib3JkZXItc3R5bGU6IGluc2V0Cit9CisK
K2lucHV0W3R5cGU9ImJ1dHRvbiJdOmFjdGl2ZTpkaXNhYmxlZCwgaW5wdXRbdHlwZT0ic3VibWl0
Il06YWN0aXZlOmRpc2FibGVkLCBpbnB1dFt0eXBlPSJyZXNldCJdOmFjdGl2ZTpkaXNhYmxlZCwg
aW5wdXRbdHlwZT0iZmlsZSJdOmFjdGl2ZTpkaXNhYmxlZDo6LXdlYmtpdC1maWxlLXVwbG9hZC1i
dXR0b24sIGJ1dHRvbjphY3RpdmU6ZGlzYWJsZWQgeworICAgIGJvcmRlci1zdHlsZTogb3V0c2V0
Cit9CisKK2FyZWEsIHBhcmFtIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2lucHV0W3R5cGU9
ImNoZWNrYm94Il0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogY2hlY2tib3g7CisgICAgLXdl
YmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworfQorCitpbnB1dFt0eXBlPSJyYWRpbyJdIHsK
KyAgICAtd2Via2l0LWFwcGVhcmFuY2U6IHJhZGlvOworICAgIC13ZWJraXQtYm94LXNpemluZzog
Ym9yZGVyLWJveDsKK30KKwora2V5Z2VuLCBzZWxlY3QgeworICAgIC13ZWJraXQtYXBwZWFyYW5j
ZTogbWVudWxpc3Q7CisgICAgLXdlYmtpdC1ib3gtc2l6aW5nOiBib3JkZXItYm94OworICAgIC13
ZWJraXQtYm94LWFsaWduOiBjZW50ZXI7CisgICAgYm9yZGVyOiAxcHggc29saWQ7CisgICAgLXdl
YmtpdC1ib3JkZXItcmFkaXVzOiA1cHg7CisgICAgd2hpdGUtc3BhY2U6IHByZTsKKyAgICAtd2Vi
a2l0LXJ0bC1vcmRlcmluZzogbG9naWNhbDsKKyAgICBjb2xvcjogYmxhY2s7CisgICAgYmFja2dy
b3VuZC1jb2xvcjogd2hpdGU7CisgICAgY3Vyc29yOiBkZWZhdWx0OworfQorCitzZWxlY3Rbc2l6
ZV0sCitzZWxlY3RbbXVsdGlwbGVdLAorc2VsZWN0W3NpemVdW211bHRpcGxlXSB7CisgICAgLXdl
YmtpdC1hcHBlYXJhbmNlOiBsaXN0Ym94OworICAgIC13ZWJraXQtYm94LWFsaWduOiBzdGFydDsK
KyAgICBib3JkZXI6IDFweCBpbnNldCBncmF5OworICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czog
aW5pdGlhbDsKKyAgICB3aGl0ZS1zcGFjZTogaW5pdGlhbDsKK30KKworc2VsZWN0W3NpemU9IjAi
XSwKK3NlbGVjdFtzaXplPSIxIl0geworICAgIC13ZWJraXQtYXBwZWFyYW5jZTogbWVudWxpc3Q7
CisgICAgLXdlYmtpdC1ib3gtYWxpZ246IGNlbnRlcjsKKyAgICBib3JkZXI6IDFweCBzb2xpZDsK
KyAgICAtd2Via2l0LWJvcmRlci1yYWRpdXM6IDVweDsKKyAgICB3aGl0ZS1zcGFjZTogcHJlOwor
fQorCitvcHRncm91cCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGRlcjsKK30KKworb3B0aW9uIHsK
KyAgICBmb250LXdlaWdodDogbm9ybWFsOworfQorCisvKiBpbmxpbmUgZWxlbWVudHMgKi8KKwor
dSwgaW5zIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZQorfQorCitzdHJvbmcsIGIg
eworICAgIGZvbnQtd2VpZ2h0OiBib2xkZXIKK30KKworaSwgY2l0ZSwgZW0sIHZhciwgYWRkcmVz
cyB7CisgICAgZm9udC1zdHlsZTogaXRhbGljCit9CisKK3R0LCBjb2RlLCBrYmQsIHNhbXAgewor
ICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2UKK30KKworcHJlLCB4bXAsIHBsYWludGV4dCwgbGlz
dGluZyB7CisgICAgZGlzcGxheTogYmxvY2s7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsK
KyAgICB3aGl0ZS1zcGFjZTogcHJlOworICAgIG1hcmdpbjogMV9fcWVtIDAKK30KKworYmlnIHsK
KyAgICBmb250LXNpemU6IGxhcmdlcgorfQorCitzbWFsbCB7CisgICAgZm9udC1zaXplOiBzbWFs
bGVyCit9CisKK3MsIHN0cmlrZSwgZGVsIHsKKyAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhy
b3VnaAorfQorCitzdWIgeworICAgIHZlcnRpY2FsLWFsaWduOiBzdWI7CisgICAgZm9udC1zaXpl
OiBzbWFsbGVyCit9CisKK3N1cCB7CisgICAgdmVydGljYWwtYWxpZ246IHN1cGVyOworICAgIGZv
bnQtc2l6ZTogc21hbGxlcgorfQorCitub2JyIHsKKyAgICB3aGl0ZS1zcGFjZTogbm93cmFwCit9
CisKKy8qIHN0YXRlcyAqLworCis6Zm9jdXMgeyAKKyAgICBvdXRsaW5lOiBhdXRvIDVweCAtd2Vi
a2l0LWZvY3VzLXJpbmctY29sb3IKK30KKworLyogUmVhZC1vbmx5IHRleHQgZmllbGRzIGRvIG5v
dCBzaG93IGEgZm9jdXMgcmluZyBidXQgZG8gc3RpbGwgcmVjZWl2ZSBmb2N1cyAqLword21sOmZv
Y3VzLCBjYXJkOmZvY3VzLCBpbnB1dFtyZWFkb25seV06Zm9jdXMgeyAKKyAgICBvdXRsaW5lOiBu
b25lCit9CisgIAoraW5wdXQ6Zm9jdXMsIHRleHRhcmVhOmZvY3VzLCBpc2luZGV4OmZvY3VzLCBr
ZXlnZW46Zm9jdXMsIHNlbGVjdDpmb2N1cyB7CisgICAgb3V0bGluZS1vZmZzZXQ6IC0ycHgKK30K
KworaW5wdXRbdHlwZT0iYnV0dG9uIl06Zm9jdXMsCitpbnB1dFt0eXBlPSJjaGVja2JveCJdOmZv
Y3VzLAoraW5wdXRbdHlwZT0iZmlsZSJdOmZvY3VzLAoraW5wdXRbdHlwZT0iaGlkZGVuIl06Zm9j
dXMsCitpbnB1dFt0eXBlPSJpbWFnZSJdOmZvY3VzLAoraW5wdXRbdHlwZT0icmFkaW8iXTpmb2N1
cywKK2lucHV0W3R5cGU9InJlc2V0Il06Zm9jdXMsCitpbnB1dFt0eXBlPSJzZWFyY2giXTpmb2N1
cywKK2lucHV0W3R5cGU9InN1Ym1pdCJdOmZvY3VzLAoraW5wdXRbdHlwZT0iZmlsZSJdOmZvY3Vz
Ojotd2Via2l0LWZpbGUtdXBsb2FkLWJ1dHRvbiB7CisgICAgb3V0bGluZS1vZmZzZXQ6IDAKK30K
KyAgICAKK2E6LXdlYmtpdC1hbnktbGluayB7CisgICAgY29sb3I6IC13ZWJraXQtbGluazsKKyAg
ICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKK30KKworYTotd2Via2l0LWFueS1saW5rOmFj
dGl2ZSB7CisgICAgY29sb3I6IC13ZWJraXQtYWN0aXZlbGluaworfQorCithbmNob3I6LXdlYmtp
dC1hbnktbGluayB7CisgICAgY29sb3I6IC13ZWJraXQtbGluazsKKyAgICB0ZXh0LWRlY29yYXRp
b246IHVuZGVybGluZTsKK30KKworYW5jaG9yOi13ZWJraXQtYW55LWxpbms6YWN0aXZlIHsKKyAg
ICBjb2xvcjogLXdlYmtpdC1hY3RpdmVsaW5rCit9CisKKy8qIG90aGVyIGVsZW1lbnRzICovCisK
K25vZnJhbWVzIHsKKyAgICBkaXNwbGF5OiBub25lCit9CisKK2ZyYW1lc2V0LCBmcmFtZSB7Cisg
ICAgZGlzcGxheTogYmxvY2sKK30KKworZnJhbWVzZXQgeworICAgIGJvcmRlci1jb2xvcjogaW5o
ZXJpdAorfQorCitpZnJhbWUgeworICAgIGJvcmRlcjogMnB4IGluc2V0Cit9CisKKy8qIG5vc2Ny
aXB0IGlzIGhhbmRsZWQgaW50ZXJuYWxseSwgYXMgaXQgZGVwZW5kcyBvbiBzZXR0aW5ncyAqLwpJ
bmRleDogV2ViQ29yZS9kb20vRE9NSW1wbGVtZW50YXRpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvZG9tL0RPTUltcGxlbWVudGF0aW9uLmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJD
b3JlL2RvbS9ET01JbXBsZW1lbnRhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw4
IEBACiAgKiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcp
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAyMDA2IFNhbXVlbCBXZWlu
aWcgKHNhbUB3ZWJraXQub3JnKQorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNTIsNiArNTQsMTAgQEAKICNp
bmNsdWRlICJTVkdEb2N1bWVudC5oIgogI2VuZGlmCiAKKyNpZiBFTkFCTEUoV01MKQorI2luY2x1
ZGUgIldNTERvY3VtZW50LmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYg
RU5BQkxFKFNWRykKQEAgLTMwOCw2ICszMTQsMTUgQEAgUGFzc1JlZlB0cjxEb2N1bWVudD4gRE9N
SW1wbGVtZW50YXRpb246OgogICAgICAgICByZXR1cm4gSFRNTERvY3VtZW50OjpjcmVhdGUoZnJh
bWUpOwogICAgIGlmICh0eXBlID09ICJhcHBsaWNhdGlvbi94aHRtbCt4bWwiKQogICAgICAgICBy
ZXR1cm4gRG9jdW1lbnQ6OmNyZWF0ZVhIVE1MKGZyYW1lKTsKKworI2lmIEVOQUJMRShXTUwpCisg
ICAgaWYgKHR5cGUgPT0gInRleHQvdm5kLndhcC53bWwiCisjaWYgRU5BQkxFKFdCWE1MKQorICAg
ICAgICB8fCB0eXBlID09ICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiCisjZW5kaWYKKyAgICAg
ICAgKQorICAgICAgICByZXR1cm4gV01MRG9jdW1lbnQ6OmNyZWF0ZShmcmFtZSk7CisjZW5kaWYK
ICAgICAgICAgCiAjaWYgRU5BQkxFKEZUUERJUikKICAgICAvLyBQbHVnaW5zIGNhbm5vdCB0YWtl
IEZUUCBmcm9tIHVzIGVpdGhlcgpJbmRleDogV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBX
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw4IEBACiAg
KiAgICAgICAgICAgKEMpIDIwMDEgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiAg
ICAgICAgICAgKEMpIDIwMDYgQWxleGV5IFByb3NrdXJ5YWtvdiAoYXBAd2Via2l0Lm9yZykKICAq
IENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0xMDcsNiArMTA5LDEwIEBACiAj
aW5jbHVkZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKICNpbmNsdWRlICJXZWJLaXRUcmFuc2l0
aW9uRXZlbnQuaCIKICNpbmNsdWRlICJXaGVlbEV2ZW50LmgiCisjaWYgRU5BQkxFKFdNTCkKKyNp
bmNsdWRlICJXTUxFbGVtZW50RmFjdG9yeS5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjZW5k
aWYKICNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdC5oIgogI2luY2x1ZGUgIlhNTE5hbWVzLmgiCiAj
aW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCkBAIC03NDUsNiArNzUxLDEwIEBAIFBhc3NSZWZQdHI8
RWxlbWVudD4gRG9jdW1lbnQ6OmNyZWF0ZUVsZW0KICAgICBlbHNlIGlmIChxTmFtZS5uYW1lc3Bh
Y2VVUkkoKSA9PSBTVkdOYW1lczo6c3ZnTmFtZXNwYWNlVVJJKQogICAgICAgICBlID0gU1ZHRWxl
bWVudEZhY3Rvcnk6OmNyZWF0ZVNWR0VsZW1lbnQocU5hbWUsIHRoaXMsIGNyZWF0ZWRCeVBhcnNl
cik7CiAjZW5kaWYKKyNpZiBFTkFCTEUoV01MKQorICAgIGVsc2UgaWYgKHFOYW1lLm5hbWVzcGFj
ZVVSSSgpID09IFdNTE5hbWVzOjp3bWxOYW1lc3BhY2VVUkkpCisgICAgICAgIGUgPSBXTUxFbGVt
ZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgdGhpcywgY3JlYXRlZEJ5UGFyc2Vy
KTsKKyNlbmRpZgogICAgIAogICAgIGlmICghZSkKICAgICAgICAgZSA9IG5ldyBFbGVtZW50KHFO
YW1lLCBkb2N1bWVudCgpKTsKSW5kZXg6IFdlYkNvcmUvZG9tL0RvY3VtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9kb20vRG9jdW1lbnQuaAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3Jl
L2RvbS9Eb2N1bWVudC5oCSh3b3JraW5nIGNvcHkpCkBAIC00LDYgKzQsOCBAQAogICogICAgICAg
ICAgIChDKSAyMDAxIERpcmsgTXVlbGxlciAobXVlbGxlckBrZGUub3JnKQogICogICAgICAgICAg
IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKiBDb3B5cmln
aHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMjk1LDYgKzI5Nyw5IEBAIHB1YmxpYzoKICNl
bmRpZgogICAgIHZpcnR1YWwgYm9vbCBpc1BsdWdpbkRvY3VtZW50KCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIGJvb2wgaXNNZWRpYURvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KKyNpZiBFTkFCTEUoV01MKQorICAgIHZpcnR1YWwgYm9vbCBpc1dNTERvY3Vt
ZW50KCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyNlbmRpZgogICAgIAogICAgIENTU1N0eWxl
U2VsZWN0b3IqIHN0eWxlU2VsZWN0b3IoKSBjb25zdCB7IHJldHVybiBtX3N0eWxlU2VsZWN0b3I7
IH0KIApJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUv
ZG9tL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSw3IEBACiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgU2FtdWVsIFdlaW5pZyAoc2FtQHdlYmtpdC5vcmcpCiAgKiBDb3B5
cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRpb24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1p
ZXMpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTI4Niw2ICsyODcsMTYgQEAgdm9pZCBY
TUxUb2tlbml6ZXI6Omluc2VydEVycm9yTWVzc2FnZUJsbwogICAgICAgICBkb2N1bWVudEVsZW1l
bnQgPSBib2R5LmdldCgpOwogICAgIH0KICNlbmRpZgorI2lmIEVOQUJMRShXTUwpCisgICAgZWxz
ZSBpZiAobV9kb2MtPmlzV01MRG9jdW1lbnQoKSkgeworICAgICAgICBSZWZQdHI8Tm9kZT4gcm9v
dEVsZW1lbnQgPSBkb2MtPmNyZWF0ZUVsZW1lbnROUyhIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNl
VVJJLCAiaHRtbCIsIGVjKTsKKyAgICAgICAgUmVmUHRyPE5vZGU+IGJvZHkgPSBkb2MtPmNyZWF0
ZUVsZW1lbnROUyhIVE1MTmFtZXM6OnhodG1sTmFtZXNwYWNlVVJJLCAiYm9keSIsIGVjKTsKKyAg
ICAgICAgcm9vdEVsZW1lbnQtPmFwcGVuZENoaWxkKGJvZHksIGVjKTsKKyAgICAgICAgYm9keS0+
YXBwZW5kQ2hpbGQoZG9jdW1lbnRFbGVtZW50LCBlYyk7CisgICAgICAgIGRvYy0+YXBwZW5kQ2hp
bGQocm9vdEVsZW1lbnQuZ2V0KCksIGVjKTsKKyAgICAgICAgZG9jdW1lbnRFbGVtZW50ID0gYm9k
eS5nZXQoKTsKKyAgICB9CisjZW5kaWYKIAogICAgIFJlZlB0cjxFbGVtZW50PiByZXBvcnRFbGVt
ZW50ID0gY3JlYXRlWEhUTUxQYXJzZXJFcnJvckhlYWRlcihkb2MsIG1fZXJyb3JNZXNzYWdlcyk7
CiAgICAgZG9jdW1lbnRFbGVtZW50LT5pbnNlcnRCZWZvcmUocmVwb3J0RWxlbWVudCwgZG9jdW1l
bnRFbGVtZW50LT5maXJzdENoaWxkKCksIGVjKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2Vu
aXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCShyZXZpc2lv
biAzODM2MSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA2LCAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwNyBTYW11ZWwgV2Vp
bmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3Jh
dGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBU
b3JjaCBNb2JpbGUgSW5jLiAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKQEAgLTczLDYgKzc0LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2
b2lkIHNldElzWEhUTUxEb2N1bWVudChib29sIGlzWEhUTUwpIHsgbV9pc1hIVE1MRG9jdW1lbnQg
PSBpc1hIVE1MOyB9CiAgICAgICAgIGJvb2wgaXNYSFRNTERvY3VtZW50KCkgY29uc3QgeyByZXR1
cm4gbV9pc1hIVE1MRG9jdW1lbnQ7IH0KIAorICAgICAgICBEb2N1bWVudCAqZG9jdW1lbnQoKSBj
b25zdCB7IHJldHVybiBtX2RvYzsgfQorCiAgICAgICAgIC8vIGZyb20gQ2FjaGVkUmVzb3VyY2VD
bGllbnQKICAgICAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUZpbmlzaGVkKENhY2hlZFJlc291cmNl
KiBmaW5pc2hlZE9iaik7CiAKQEAgLTkxLDEyICs5NCwxNSBAQCBwcml2YXRlOgogICAgICAgICB2
b2lkIHBhcnNlU3RhcnRFbGVtZW50KCk7CiAgICAgICAgIHZvaWQgcGFyc2VFbmRFbGVtZW50KCk7
CiAgICAgICAgIHZvaWQgcGFyc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHZvaWQgcGFyc2VQcm9j
ZXNzaW5nSW5zdHJ1Y3Rpb24oKTsKKyAgICAgICAgdm9pZCBlbmREb2N1bWVudCgpOwogICAgICAg
ICB2b2lkIHBhcnNlQ2RhdGEoKTsKKyAgICAgICAgYm9vbCBoYXNFcnJvcigpIGNvbnN0OworI2lm
IEVOQUJMRShXTUwpCitwcm90ZWN0ZWQ6CisjZW5kaWYKKyAgICAgICAgdm9pZCBwYXJzZVByb2Nl
c3NpbmdJbnN0cnVjdGlvbigpOwogICAgICAgICB2b2lkIHBhcnNlQ29tbWVudCgpOwotICAgICAg
ICB2b2lkIGVuZERvY3VtZW50KCk7CiAgICAgICAgIHZvaWQgcGFyc2VEdGQoKTsKLSAgICAgICAg
Ym9vbCBoYXNFcnJvcigpIGNvbnN0OwogI2Vsc2UKIHB1YmxpYzoKICAgICAgICAgLy8gY2FsbGJh
Y2tzIGZyb20gcGFyc2VyIFNBWApAQCAtMTEyLDE4ICsxMTgsMjggQEAgcHVibGljOgogICAgICAg
ICB2b2lkIGludGVybmFsU3Vic2V0KGNvbnN0IHhtbENoYXIqIG5hbWUsIGNvbnN0IHhtbENoYXIq
IGV4dGVybmFsSUQsIGNvbnN0IHhtbENoYXIqIHN5c3RlbUlEKTsKICAgICAgICAgdm9pZCBlbmRE
b2N1bWVudCgpOwogI2VuZGlmCisKKyNpZiBFTkFCTEUoV01MKQorICAgIHByb3RlY3RlZDoKKyNp
ZiBVU0UoUVhNTFNUUkVBTSkKKyAgICAgICAgUVhtbFN0cmVhbVJlYWRlciYgeG1sU3RyZWFtUmVh
ZGVyKCkgeyByZXR1cm4gbV9zdHJlYW07IH0KKyAgICAgICAgRnJhbWVWaWV3KiBmcmFtZVZpZXco
KSBjb25zdCB7IHJldHVybiBtX3ZpZXc7IH0KKyAgICAgICAgTm9kZSogY3VycmVudE5vZGUoKSBj
b25zdCB7IHJldHVybiBtX2N1cnJlbnROb2RlOyB9CisjZW5kaWYKKyNlbHNlCisgICAgcHJpdmF0
ZToKKyNlbmRpZgorICAgICAgICB2b2lkIHNldEN1cnJlbnROb2RlKE5vZGUqKTsKKyAgICAgICAg
Ym9vbCBlbnRlclRleHQoKTsKKyAgICAgICAgdm9pZCBleGl0VGV4dCgpOwogICAgIHByaXZhdGU6
CiAgICAgICAgIGZyaWVuZCBib29sIHBhcnNlWE1MRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJp
bmcmIGNodW5rLCBEb2N1bWVudEZyYWdtZW50KiBmcmFnbWVudCwgRWxlbWVudCogcGFyZW50KTsK
IAogICAgICAgICBzdGF0aWMgdm9pZCBldmVudHVhbGx5TWFya0FzUGFyc2VyQ3JlYXRlZChFbGVt
ZW50KiBlbGVtZW50KTsKICAgICAgICAgdm9pZCBpbml0aWFsaXplUGFyc2VyQ29udGV4dChjb25z
dCBjaGFyKiBjaHVuayA9IDApOwotICAgICAgICB2b2lkIHNldEN1cnJlbnROb2RlKE5vZGUqKTsK
IAogICAgICAgICB2b2lkIGluc2VydEVycm9yTWVzc2FnZUJsb2NrKCk7CiAKLSAgICAgICAgYm9v
bCBlbnRlclRleHQoKTsKLSAgICAgICAgdm9pZCBleGl0VGV4dCgpOwotCiAgICAgICAgIHZvaWQg
ZG9Xcml0ZShjb25zdCBTdHJpbmcmKTsKICAgICAgICAgdm9pZCBkb0VuZCgpOwogCkluZGV4OiBX
ZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXJRdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20v
WE1MVG9rZW5pemVyUXQuY3BwCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvZG9tL1hNTFRv
a2VuaXplclF0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNSw2ICs1LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKICAqIENvcHlyaWdodCAo
QykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAq
IENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtNzQ0LDYgKzc0NSwxNCBAQCB2b2lkIFhNTFRva2Vu
aXplcjo6cGFyc2VEdGQoKQogICAgICAgICB8fCAocHVibGljSWQgPT0gUUxhdGluMVN0cmluZygi
LS8vV0FQRk9SVU0vL0RURCBYSFRNTCBNb2JpbGUgMS4wLy9FTiIpKSkgewogICAgICAgICBzZXRJ
c1hIVE1MRG9jdW1lbnQodHJ1ZSk7IC8vIGNvbnRyb2xzIGlmIHdlIHJlcGxhY2UgZW50aXRpZXMg
b3Igbm90LgogICAgIH0KKyNpZiBFTkFCTEUoV01MKQorICAgIGVsc2UgaWYgKG1fZG9jLT5pc1dN
TERvY3VtZW50KCkKKyAgICAgICAgICAgICYmIHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4iKQorICAgICAgICAgICAgJiYgcHVibGljSWQgIT0g
UUxhdGluMVN0cmluZygiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiIpCisgICAgICAgICAg
ICAmJiBwdWJsaWNJZCAhPSBRTGF0aW4xU3RyaW5nKCItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIikKKyAgICAgICAgICAgICYmIHB1YmxpY0lkICE9IFFMYXRpbjFTdHJpbmcoIi0vL1dBUEZP
UlVNLy9EVEQgV01MIDEuMC8vRU4iKSkKKyAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZh
bGlkIERURCBQdWJsaWMgSUQiLCBsaW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyNlbmRp
ZgogICAgIGlmICghbV9wYXJzaW5nRnJhZ21lbnQpCiAgICAgICAgIG1fZG9jLT5hZGRDaGlsZChE
b2N1bWVudFR5cGU6OmNyZWF0ZShtX2RvYywgbmFtZSwgcHVibGljSWQsIHN5c3RlbUlkKSk7CiAg
ICAgCkluZGV4OiBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAkocmV2aXNpb24gMzgzNjEp
CisrKyBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMSw1ICsxLDcgQEAKIC8qCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDYgQXBwbGUgQ29t
cHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
VG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0yNjQsNCArMjY2LDE5IEBAIGJvb2wgQmFja0ZvcndhcmRMaXN0Ojpjb250YWluc0l0
ZW0oSGlzdG8KICAgICByZXR1cm4gbV9lbnRyeUhhc2guY29udGFpbnMoZW50cnkpOwogfQogCisj
aWYgRU5BQkxFKFdNTCkKKy8vIGNsZWFyIHRoZSBoaXN0b3J5IG9mIGN1cnJlbnQgV01MIHBhZ2UK
K3ZvaWQgQmFja0ZvcndhcmRMaXN0OjpjbGVhcldtbFBhZ2VIaXN0b3J5KCkKK3sKKyAgICBQYXNz
UmVmUHRyPEhpc3RvcnlJdGVtPiBjdXIgPSBjdXJyZW50SXRlbSgpOworCisgICAgaW50IHNpemUg
PSBtX2VudHJpZXMuc2l6ZSgpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgKytpKQor
ICAgICAgICBwYWdlQ2FjaGUoKS0+cmVtb3ZlKG1fZW50cmllc1tpXS5nZXQoKSk7CisgICAgbV9l
bnRyaWVzLmNsZWFyKCk7CisgICAgbV9lbnRyeUhhc2guY2xlYXIoKTsKKyAgICBtX2N1cnJlbnQg
PSBOb0N1cnJlbnRJdGVtSW5kZXg7Cit9CisjZW5kaWYKKwogfTsgLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFdlYkNvcmUvaGlzdG9yeS9CYWNrRm9yd2FyZExpc3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2hpc3RvcnkvQmFja0ZvcndhcmRMaXN0LmgJKHJldmlzaW9uIDM4MzYxKQorKysg
V2ViQ29yZS9oaXN0b3J5L0JhY2tGb3J3YXJkTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAg
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50
b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTczLDYg
Kzc1LDkgQEAgcHVibGljOiAKICAgICB2b2lkIHJlbW92ZUl0ZW0oSGlzdG9yeUl0ZW0qKTsKICAg
ICBIaXN0b3J5SXRlbVZlY3RvciYgZW50cmllcygpOwogICAgIAorI2lmIEVOQUJMRShXTUwpCisg
ICAgdm9pZCBjbGVhcldtbFBhZ2VIaXN0b3J5KCk7CisjZW5kaWYKIHByaXZhdGU6CiAgICAgQmFj
a0ZvcndhcmRMaXN0KFBhZ2UqKTsKIApJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEJ1dHRvbkVsZW1lbnQuY3Bw
CShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MQnV0dG9uRWxlbWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTUsNiArNSw4IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogICAgICAg
ICAgIChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQG55cG9wLmNvbSkKICAqIENvcHly
aWdodCAoQykgMjAwNyBTYW11ZWwgV2VpbmlnIChzYW1Ad2Via2l0Lm9yZykKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAg
ICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTQ0LDYgKzQ2LDE1IEBAIEhUTUxCdXR0b25FbGVtZW50OjpIVE1MQnV0dG9uRWxlbWVu
dChEb2MKIHsKIH0KIAorI2lmIEVOQUJMRShXTUwpCitIVE1MQnV0dG9uRWxlbWVudDo6SFRNTEJ1
dHRvbkVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnLCBEb2N1bWVudCogZG9jLCBIVE1M
Rm9ybUVsZW1lbnQqIGZvcm0pCisgICAgOiBIVE1MRm9ybUNvbnRyb2xFbGVtZW50KHRhZywgZG9j
LCBmb3JtKQorICAgICwgbV90eXBlKEJVVFRPTikKKyAgICAsIG1fYWN0aXZlU3VibWl0KGZhbHNl
KQoreworfQorI2VuZGlmCisKIEhUTUxCdXR0b25FbGVtZW50Ojp+SFRNTEJ1dHRvbkVsZW1lbnQo
KQogewogfQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgJKHJldmlzaW9uIDM4MzYxKQor
KysgV2ViQ29yZS9odG1sL0hUTUxCdXR0b25FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTMs
NiArMyw4IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkgQW50dGkgS29pdmlzdG8gKGtvaXZpc3Rv
QGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAgRGlyayBNdWVsbGVyIChtdWVsbGVyQGtk
ZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmls
ZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzEsNiArMzMsOSBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBIVE1MQnV0dG9uRWxlbWVudCA6IHB1YmxpYyBIVE1M
Rm9ybUNvbnRyb2xFbGVtZW50IHsKIHB1YmxpYzoKICAgICBIVE1MQnV0dG9uRWxlbWVudChEb2N1
bWVudCosIEhUTUxGb3JtRWxlbWVudCogPSAwKTsKKyNpZiBFTkFCTEUoV01MKQorICAgIEhUTUxC
dXR0b25FbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmLCBEb2N1bWVudCosIEhUTUxGb3JtRWxl
bWVudCogPSAwKTsKKyNlbmRpZgogICAgIHZpcnR1YWwgfkhUTUxCdXR0b25FbGVtZW50KCk7CiAK
ICAgICB2aXJ0dWFsIGNvbnN0IEF0b21pY1N0cmluZyYgdHlwZSgpIGNvbnN0OwpJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwv
SFRNTEltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvaHRtbC9IVE1M
SW1hZ2VFbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIsNiArMiw4IEBACiAgKiBDb3B5cmln
aHQgKEMpIDE5OTkgTGFycyBLbm9sbCAoa25vbGxAa2RlLm9yZykKICAqICAgICAgICAgICAoQykg
MTk5OSBBbnR0aSBLb2l2aXN0byAoa29pdmlzdG9Aa2RlLm9yZykKICAqIENvcHlyaWdodCAoQykg
MjAwNCwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
CkBAIC0xMTYsNiArMTE4LDEwIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBnZXRTdWJy
ZXNvdXJjZUF0dHJpYnV0ZVN0cmluZ3MoVmVjdG9yPFN0cmluZz4mKSBjb25zdDsKIAorI2lmIEVO
QUJMRShXTUwpCisgICAgdmlydHVhbCBib29sIGlzV01MSW1hZ2VFbGVtZW50KCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KKyAgICBIVE1MSW1hZ2VMb2FkZXImIGltYWdlTG9hZGVyKCkgeyByZXR1
cm4gbV9pbWFnZUxvYWRlcjsgfQorI2VuZGlmCiBwcml2YXRlOgogICAgIEhUTUxJbWFnZUxvYWRl
ciBtX2ltYWdlTG9hZGVyOwogICAgIFN0cmluZyB1c2VtYXA7CkluZGV4OiBXZWJDb3JlL2h0bWwv
SFRNTEltYWdlTG9hZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRNTEltYWdl
TG9hZGVyLmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3JlL2h0bWwvSFRNTEltYWdlTG9h
ZGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMiw2ICsyLDggQEAKICAqIENvcHlyaWdodCAoQykg
MTk5OSBMYXJzIEtub2xsIChrbm9sbEBrZGUub3JnKQogICogICAgICAgICAgIChDKSAxOTk5IEFu
dHRpIEtvaXZpc3RvIChrb2l2aXN0b0BrZGUub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA0LCAy
MDA1LCAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgog
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKQEAgLTI4LDYgKzMwLDExIEBACiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxPYmplY3RFbGVtZW50LmgiCisjaWYgRU5B
QkxFKFdNTCkKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1l
cy5oIgorI2VuZGlmCisjaW5jbHVkZSAiSW1hZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CkBAIC01OCw2ICs2NSwxMSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQo
Q2FjCiAgICAgRWxlbWVudCogZWxlbSA9IGVsZW1lbnQoKTsKICAgICBJbWFnZUxvYWRlcjo6bm90
aWZ5RmluaXNoZWQoaW1hZ2UpOwogCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZihpbWFnZS0+ZXJy
b3JPY2N1cnJlZCgpICYmIGVsZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjppbWdUYWcpICYmIHN0
YXRpY19jYXN0PEhUTUxJbWFnZUVsZW1lbnQqPihlbGVtKS0+aXNXTUxJbWFnZUVsZW1lbnQoKSkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8V01MSW1hZ2VFbGVtZW50Kj4oZWxlbSktPnJlbG9hZEltYWdl
QnlTcmNBdHRyKCk7CisjZW5kaWYKKwogICAgIGlmIChpbWFnZS0+ZXJyb3JPY2N1cnJlZCgpICYm
IGVsZW0tPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjpvYmplY3RUYWcpKQogICAgICAgICBzdGF0aWNf
Y2FzdDxIVE1MT2JqZWN0RWxlbWVudCo+KGVsZW0pLT5yZW5kZXJGYWxsYmFja0NvbnRlbnQoKTsK
IH0KSW5kZXg6IFdlYkNvcmUvaHRtbC9IVE1MU2VsZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50LmNwcAkocmV2aXNpb24gMzgzNjEpCisr
KyBXZWJDb3JlL2h0bWwvSFRNTFNlbGVjdEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
MDQ2LDcgKzEwNDYsMTMgQEAgdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6YWNjZXNzS2V5U2V0U2Vs
ZQogICAgIAogdm9pZCBIVE1MU2VsZWN0RWxlbWVudDo6c2V0TXVsdGlwbGUoYm9vbCBtdWx0aXBs
ZSkKIHsKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChkb2N1bWVudCgpLT5pc1dNTERvY3VtZW50
KCkpCisgICAgICAgIG1fbXVsdGlwbGUgPSBtdWx0aXBsZTsKICAgICBzZXRBdHRyaWJ1dGUobXVs
dGlwbGVBdHRyLCBtdWx0aXBsZSA/ICIiIDogMCk7CisjZWxzZQorICAgIHNldEF0dHJpYnV0ZSht
dWx0aXBsZUF0dHIsIG11bHRpcGxlID8gIiIgOiAwKTsKKyNlbmRpZgogfQogCiB2b2lkIEhUTUxT
ZWxlY3RFbGVtZW50OjpzZXRTaXplKGludCBzaXplKQpJbmRleDogV2ViQ29yZS9odG1sL0hUTUxT
ZWxlY3RFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVt
ZW50LmgJKHJldmlzaW9uIDM4MzYxKQorKysgV2ViQ29yZS9odG1sL0hUTUxTZWxlY3RFbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMsNiArMyw4IEBACiAgKiAgICAgICAgICAgKEMpIDE5OTkg
QW50dGkgS29pdmlzdG8gKGtvaXZpc3RvQGtkZS5vcmcpCiAgKiAgICAgICAgICAgKEMpIDIwMDAg
RGlyayBNdWVsbGVyIChtdWVsbGVyQGtkZS5vcmcpCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDQsIDIw
MDUsIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KICAqCiAgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYwpAQCAtNTYsOSArNTgsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNo
Qmx1ckV2ZW50KCk7CiAgICAgCiAgICAgdmlydHVhbCBib29sIGNhblN0YXJ0U2VsZWN0aW9uKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2aXJ0dWFsIHZvaWQgc2V0U2VsZWN0ZWRJbmRl
eChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29sIGZpcmVPbkNoYW5nZSA9IGZh
bHNlKTsKIAogICAgIGludCBzZWxlY3RlZEluZGV4KCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRTZWxl
Y3RlZEluZGV4KGludCBpbmRleCwgYm9vbCBkZXNlbGVjdCA9IHRydWUsIGJvb2wgZmlyZU9uQ2hh
bmdlID0gZmFsc2UpOwogICAgIGludCBsYXN0U2VsZWN0ZWRMaXN0SW5kZXgoKSBjb25zdDsKIAog
ICAgIHZpcnR1YWwgYm9vbCBpc0VudW1lcmF0YWJsZSgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0K
QEAgLTEzNywxOSArMTM5LDMyIEBAIHB1YmxpYzoKICAgICBpbnQgYWN0aXZlU2VsZWN0aW9uRW5k
TGlzdEluZGV4KCkgY29uc3Q7CiAgICAgCiAgICAgdm9pZCBzY3JvbGxUb1NlbGVjdGlvbigpOwor
I2lmIEVOQUJMRShXTUwpCitwcm90ZWN0ZWQ6CisgICAgaW50IGFjdGl2ZVNlbGVjdGlvbkFuY2hv
ckluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmVTZWxlY3Rpb25BbmNob3JJbmRleDsgfQor
ICAgIGludCBhY3RpdmVTZWxlY3Rpb25FbmRJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZl
U2VsZWN0aW9uRW5kSW5kZXg7IH0KKyAgICBpbnQgYWN0aXZlU2VsZWN0aW9uU3RhdGUoKSBjb25z
dCB7IHJldHVybiBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlOyB9CisgICAgdm9pZCBzZXRBY3RpdmVT
ZWxlY3Rpb25TdGF0ZShib29sIGFjdGl2ZSkgeyBtX2FjdGl2ZVNlbGVjdGlvblN0YXRlID0gYWN0
aXZlOyB9CisjZW5kaWYKIAorI2lmIEVOQUJMRShXTUwpCitwcm90ZWN0ZWQ6CisjZWxzZQogcHJp
dmF0ZToKLSAgICB2b2lkIHJlY2FsY0xpc3RJdGVtcyhib29sIHVwZGF0ZVNlbGVjdGVkU3RhdGVz
ID0gdHJ1ZSkgY29uc3Q7Ci0gICAgdm9pZCBjaGVja0xpc3RJdGVtcygpIGNvbnN0OwotCisjZW5k
aWYKICAgICB2b2lkIGRlc2VsZWN0SXRlbXMoSFRNTE9wdGlvbkVsZW1lbnQqIGV4Y2x1ZGVFbGVt
ZW50ID0gMCk7CiAgICAgYm9vbCB1c2VzTWVudUxpc3QoKSBjb25zdCB7IHJldHVybiAhbV9tdWx0
aXBsZSAmJiBtX3NpemUgPD0gMTsgfQorICAgIHZvaWQgdHlwZUFoZWFkRmluZChLZXlib2FyZEV2
ZW50Kik7CisgICAgdm9pZCBzYXZlTGFzdFNlbGVjdGlvbigpOwogICAgIGludCBuZXh0U2VsZWN0
YWJsZUxpc3RJbmRleChpbnQgc3RhcnRJbmRleCk7CiAgICAgaW50IHByZXZpb3VzU2VsZWN0YWJs
ZUxpc3RJbmRleChpbnQgc3RhcnRJbmRleCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCByZWNhbGNM
aXN0SXRlbXMoYm9vbCB1cGRhdGVTZWxlY3RlZFN0YXRlcyA9IHRydWUpIGNvbnN0OworICAgIHZv
aWQgY2hlY2tMaXN0SXRlbXMoKSBjb25zdDsKKwogICAgIHZvaWQgbWVudUxpc3REZWZhdWx0RXZl
bnRIYW5kbGVyKEV2ZW50Kik7CiAgICAgdm9pZCBsaXN0Qm94RGVmYXVsdEV2ZW50SGFuZGxlcihF
dmVudCopOwotICAgIHZvaWQgdHlwZUFoZWFkRmluZChLZXlib2FyZEV2ZW50Kik7Ci0gICAgdm9p
ZCBzYXZlTGFzdFNlbGVjdGlvbigpOwogCiAgICAgbXV0YWJsZSBWZWN0b3I8SFRNTEVsZW1lbnQq
PiBtX2xpc3RJdGVtczsKICAgICBWZWN0b3I8Ym9vbD4gbV9jYWNoZWRTdGF0ZUZvckFjdGl2ZVNl
bGVjdGlvbjsKSW5kZXg6IFdlYkNvcmUvbG9hZGVyL0ZyYW1lTG9hZGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL2xvYWRlci9GcmFtZUxvYWRlci5jcHAJKHJldmlzaW9uIDM4MzYxKQorKysg
V2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYgKzEs
OCBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDggTm9raWEgQ29ycG9yYXRp
b24gYW5kL29yIGl0cyBzdWJzaWRpYXJ5KC1pZXMpCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CkBAIC0yNjcsNiArMjY5LDkgQEAgRnJhbWVMb2FkZXI6OkZyYW1lTG9hZGVyKEZyYW1lKiBmcmFt
ZSwgRgogICAgICwgbV9maW5pc2hlZFBhcnNpbmdEdXJpbmdMb3dCYW5kd2lkdGhEaXNwbGF5KGZh
bHNlKQogICAgICwgbV9uZWVkVG9Td2l0Y2hPdXRMb3dCYW5kd2lkdGhEaXNwbGF5KGZhbHNlKQog
I2VuZGlmIAorI2lmIEVOQUJMRShXTUwpCisgICAgLCBtX2ZvcmNlUmVsb2FkV21sRGVjayhmYWxz
ZSkKKyNlbmRpZgogewogfQogCkBAIC0xMDAwLDcgKzEwMDUsNyBAQCB2b2lkIEZyYW1lTG9hZGVy
Ojp3cml0ZShjb25zdCBjaGFyKiBzdHIsCiAgICAgICAgICAgICB0b2tlbml6ZXItPndyaXRlUmF3
RGF0YShzdHIsIGxlbik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAo
IW1fZGVjb2RlcikgewogICAgICAgICBTZXR0aW5ncyogc2V0dGluZ3MgPSBtX2ZyYW1lLT5zZXR0
aW5ncygpOwogICAgICAgICBtX2RlY29kZXIgPSBUZXh0UmVzb3VyY2VEZWNvZGVyOjpjcmVhdGUo
bV9yZXNwb25zZU1JTUVUeXBlLCBzZXR0aW5ncyA/IHNldHRpbmdzLT5kZWZhdWx0VGV4dEVuY29k
aW5nTmFtZSgpIDogU3RyaW5nKCkpOwpAQCAtMjg3Nyw4ICsyODgyLDIxIEBAIHZvaWQgRnJhbWVM
b2FkZXI6OmNsaWVudFJlZGlyZWN0ZWQoY29uc3QKICAgICBtX3F1aWNrUmVkaXJlY3RDb21pbmcg
PSBsb2NrSGlzdG9yeSAmJiBtX2RvY3VtZW50TG9hZGVyICYmICFpc0phdmFTY3JpcHRGb3JtQWN0
aW9uOwogfQogCisjaWYgRU5BQkxFKFdNTCkKK3ZvaWQgRnJhbWVMb2FkZXI6OnNldEZvcmNlUmVs
b2FkV21sRGVjayhib29sIHJlbG9hZCkKK3sKKyAgICBtX2ZvcmNlUmVsb2FkV21sRGVjayA9IHJl
bG9hZDsKK30KKyNlbmRpZgorCiBib29sIEZyYW1lTG9hZGVyOjpzaG91bGRSZWxvYWQoY29uc3Qg
S1VSTCYgY3VycmVudFVSTCwgY29uc3QgS1VSTCYgZGVzdGluYXRpb25VUkwpCiB7CisjaWYgRU5B
QkxFKFdNTCkKKyAgICAvLyBBcyBmb3IgV01MIGRlY2ssIHNvbWV0aW1lcyBpdCdzIHN1cHBvc2Vk
IHRvIGJlIHJlbG9hZGVkIGV2ZW4gaWYgdGhlIHNhbWUgVVJMIHdpdGggZnJhZ21lbnQKKyAgICBp
ZiAobV9mb3JjZVJlbG9hZFdtbERlY2spCisgICAgICAgIHJldHVybiB0cnVlOworI2VuZGlmCisK
ICAgICAvLyBUaGlzIGZ1bmN0aW9uIGltcGxlbWVudHMgdGhlIHJ1bGU6ICJEb24ndCByZWxvYWQg
aWYgbmF2aWdhdGluZyBieSBmcmFnbWVudCB3aXRoaW4KICAgICAvLyB0aGUgc2FtZSBVUkwsIGJ1
dCBkbyByZWxvYWQgaWYgZ29pbmcgdG8gYSBuZXcgVVJMIG9yIHRvIHRoZSBzYW1lIFVSTCB3aXRo
IG5vCiAgICAgLy8gZnJhZ21lbnQgaWRlbnRpZmllciBhdCBhbGwuIgpAQCAtNDI5Miw3ICs0MzEw
LDExIEBAIHZvaWQgRnJhbWVMb2FkZXI6OmxvYWRJdGVtKEhpc3RvcnlJdGVtKiAKICAgICAvLyBj
aGVjayBmb3IgYWxsIHRoYXQgYXMgYW4gYWRkaXRpb25hbCBvcHRpbWl6YXRpb24uCiAgICAgLy8g
V2UgYWxzbyBkbyBub3QgZG8gYW5jaG9yLXN0eWxlIG5hdmlnYXRpb24gaWYgd2UncmUgcG9zdGlu
ZyBhIGZvcm0uCiAgICAgCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZiAoIWZvcm1EYXRhICYmIHVy
bHNNYXRjaEl0ZW0oaXRlbSkgJiYgIW1fZnJhbWUtPmRvY3VtZW50KCktPmlzV01MRG9jdW1lbnQo
KSkgeworI2Vsc2UKICAgICBpZiAoIWZvcm1EYXRhICYmIHVybHNNYXRjaEl0ZW0oaXRlbSkpIHsK
KyNlbmRpZgogICAgICAgICAvLyBNdXN0IGRvIHRoaXMgbWFpbnRlbmFuY2UgaGVyZSwgc2luY2Ug
d2UgZG9uJ3QgZ28gdGhyb3VnaCBhIHJlYWwgcGFnZSByZWxvYWQKICAgICAgICAgc2F2ZVNjcm9s
bFBvc2l0aW9uQW5kVmlld1N0YXRlVG9JdGVtKG1fY3VycmVudEhpc3RvcnlJdGVtLmdldCgpKTsK
IApJbmRleDogV2ViQ29yZS9sb2FkZXIvRnJhbWVMb2FkZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2xvYWRlci9GcmFtZUxvYWRlci5oCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvbG9h
ZGVyL0ZyYW1lTG9hZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgogICog
Q29weXJpZ2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgog
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI2MSw2ICsyNjMsOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgICAgICAgIHZvaWQgY2xpZW50UmVkaXJlY3RDYW5jZWxsZWRPckZpbmlzaGVk
KGJvb2wgY2FuY2VsV2l0aExvYWRJblByb2dyZXNzKTsKICAgICAgICAgdm9pZCBjbGllbnRSZWRp
cmVjdGVkKGNvbnN0IEtVUkwmLCBkb3VibGUgZGVsYXksIGRvdWJsZSBmaXJlRGF0ZSwgYm9vbCBs
b2NrSGlzdG9yeSwgYm9vbCBpc0phdmFTY3JpcHRGb3JtQWN0aW9uKTsKICAgICAgICAgYm9vbCBz
aG91bGRSZWxvYWQoY29uc3QgS1VSTCYgY3VycmVudFVSTCwgY29uc3QgS1VSTCYgZGVzdGluYXRp
b25VUkwpOworI2lmIEVOQUJMRShXTUwpCisgICAgICAgIHZvaWQgc2V0Rm9yY2VSZWxvYWRXbWxE
ZWNrKGJvb2wpOworI2VuZGlmCiAKICAgICAgICAgYm9vbCBpc1F1aWNrUmVkaXJlY3RDb21pbmco
KSBjb25zdDsKIApAQCAtNjgyLDYgKzY4NywxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIFN0cmluZyBtX3BlbmRpbmdTb3VyY2VJbkxvd0JhbmR3aWR0aERpc3BsYXk7ICAgICAgICAK
ICAgICAgICAgSGFzaFNldDxDYWNoZWRSZXNvdXJjZSo+IG1fZXh0ZXJuYWxSZXF1ZXN0c0luTG93
QmFuZHdpZHRoRGlzcGxheTsKICNlbmRpZgorCisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgYm9v
bCBtX2ZvcmNlUmVsb2FkV21sRGVjazsKKyNlbmRpZgogICAgIH07CiAKIH0KSW5kZXg6IFdlYkNv
cmUvbG9hZGVyL01haW5SZXNvdXJjZUxvYWRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9s
b2FkZXIvTWFpblJlc291cmNlTG9hZGVyLmNwcAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3Jl
L2xvYWRlci9NYWluUmVzb3VyY2VMb2FkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5j
LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQzLDYgKzQ1
LDEwIEBACiAjaW5jbHVkZSAiUmVzb3VyY2VFcnJvci5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFu
ZGxlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKKyNpZiBFTkFCTEUoV0JYTUwpCisjaW5jbHVk
ZSAid2J4bWwuaCIKKyNpbmNsdWRlICJ3YnhtbF9jb252LmgiCisjZW5kaWYKIAogLy8gRklYTUU6
IE1vcmUgdGhhdCBpcyBpbiBjb21tb24gd2l0aCBTdWJyZXNvdXJjZUxvYWRlciBzaG91bGQgbW92
ZSB1cCBpbnRvIFJlc291cmNlTG9hZGVyLgogCkBAIC0xNDEsNiArMTQ3LDI4IEBAIGJvb2wgTWFp
blJlc291cmNlTG9hZGVyOjppc1Bvc3RPclJlZGlyZWMKIAogdm9pZCBNYWluUmVzb3VyY2VMb2Fk
ZXI6OmFkZERhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCwgYm9vbCBhbGxBdE9uY2Up
CiB7CisjaWYgRU5BQkxFKFdCWE1MKQorICAgIGlmIChsZW5ndGggJiYgbV9yZXNwb25zZS5taW1l
VHlwZSgpID09ICJhcHBsaWNhdGlvbi92bmQud2FwLndtbGMiKSB7CisgICAgICAgIFdCX1VUSU5Z
ICp3YnhtbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8V0JfVVRJTlkqPihjb25zdF9jYXN0PGNoYXIqPihk
YXRhKSk7CisgICAgICAgIFdCX1VMT05HIHdieG1sX2xlbiA9IGxlbmd0aDsKKyAgICAgICAgV0Jf
VUxPTkcgeG1sX2xlbiA9IDA7CisgICAgICAgIFdCX1VUSU5ZICp4bWwgPSAwOworICAgICAgICBX
QlhNTEVycm9yIHJldCA9IFdCWE1MX09LOyAKKyAgICAgICAgV0JYTUxHZW5YTUxQYXJhbXMgcGFy
YW1zOworIAorICAgICAgICAvLyBJbml0IERlZmF1bHQgUGFyYW1ldGVycworICAgICAgICBwYXJh
bXMubGFuZyA9IFdCWE1MX0xBTkdfVU5LTk9XTjsKKyAgICAgICAgcGFyYW1zLmdlbl90eXBlID0g
V0JYTUxfR0VOX1hNTF9JTkRFTlQ7CisgICAgICAgIHBhcmFtcy5pbmRlbnQgPSAxOworICAgICAg
ICBwYXJhbXMua2VlcF9pZ25vcmFibGVfd3MgPSBGQUxTRTsKKyAKKyAgICAgICAgcmV0ID0gd2J4
bWxfY29udl93YnhtbDJ4bWxfd2l0aGxlbih3YnhtbCwgd2J4bWxfbGVuLCAmeG1sLCAmeG1sX2xl
biwgJnBhcmFtcyk7CisgICAgICAgIGlmIChyZXQgIT0gV0JYTUxfT0spCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPih4bWwpOworICAg
ICAgICBsZW5ndGggPSB4bWxfbGVuOworICAgIH0KKyNlbmRpZgogICAgIFJlc291cmNlTG9hZGVy
OjphZGREYXRhKGRhdGEsIGxlbmd0aCwgYWxsQXRPbmNlKTsKICAgICBmcmFtZUxvYWRlcigpLT5y
ZWNlaXZlZERhdGEoZGF0YSwgbGVuZ3RoKTsKIH0KSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BhZ2UvUGFnZS5jcHAJKHJldmlzaW9uIDM4MzYxKQor
KysgV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdo
dHMgUmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2Jp
bGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01NCw2ICs1Niw5IEBACiAjaW5jbHVkZSA8
cnVudGltZS9KU0xvY2suaD4KICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZDb3VudGVkTGVha0NvdW50ZXIuaD4KKyNpZiBFTkFCTEUoV01MKQorI2luY2x1ZGUgIldN
TFBhZ2VTdGF0ZS5oIgorI2VuZGlmCiAKICNpZiBFTkFCTEUoRE9NX1NUT1JBR0UpCiAjaW5jbHVk
ZSAiTG9jYWxTdG9yYWdlLmgiCkBAIC0xMjcsNiArMTMyLDkgQEAgUGFnZTo6UGFnZShDaHJvbWVD
bGllbnQqIGNocm9tZUNsaWVudCwgQwogICAgICwgbV9wZW5kaW5nQmVmb3JlVW5sb2FkRXZlbnRD
b3VudCgwKQogICAgICwgbV9jdXN0b21IVE1MVG9rZW5pemVyVGltZURlbGF5KC0xKQogICAgICwg
bV9jdXN0b21IVE1MVG9rZW5pemVyQ2h1bmtTaXplKC0xKQorI2lmIEVOQUJMRShXTUwpCisgICAg
LCBtX3dtbFBhZ2VTdGF0ZSgwKQorI2VuZGlmCiB7CiAgICAgaWYgKCFhbGxQYWdlcykgewogICAg
ICAgICBhbGxQYWdlcyA9IG5ldyBIYXNoU2V0PFBhZ2UqPjsKQEAgLTU3Nyw2ICs1ODUsMTggQEAg
dm9pZCBQYWdlOjpjaGFuZ2VQZW5kaW5nQmVmb3JlVW5sb2FkRXZlbgogICAgIHJldHVybjsgCiB9
CiAKKyNpZiBFTkFCTEUoV01MKQordm9pZCBQYWdlOjpzZXRXTUxQYWdlU3RhdGUoUmVmUHRyPFdN
TFBhZ2VTdGF0ZT4gcGFnZVN0YXRlKSAKK3sgCisgICAgbV93bWxQYWdlU3RhdGUgPSBwYWdlU3Rh
dGU7IAorfQorCitXTUxQYWdlU3RhdGUqIFBhZ2U6OndtbFBhZ2VTdGF0ZSgpIGNvbnN0IAoreyAK
KyAgICByZXR1cm4gbV93bWxQYWdlU3RhdGUuZ2V0KCk7IAorfQorI2VuZGlmCisKIHZvaWQgUGFn
ZTo6c2V0Q3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheShkb3VibGUgY3VzdG9tSFRNTFRva2Vu
aXplclRpbWVEZWxheSkKIHsKICAgICBpZiAoY3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheSA8
IDApIHsKSW5kZXg6IFdlYkNvcmUvcGFnZS9QYWdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
YWdlL1BhZ2UuaAkocmV2aXNpb24gMzgzNjEpCisrKyBXZWJDb3JlL3BhZ2UvUGFnZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAwNiwgMjAw
OCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgg
VG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC02Myw2
ICs2NSw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBjbGFzcyBTZXNzaW9uU3RvcmFnZTsK
ICNlbmRpZgogICAgIGNsYXNzIFNldHRpbmdzOworI2lmIEVOQUJMRShXTUwpCisgICAgY2xhc3Mg
V01MUGFnZVN0YXRlOworI2VuZGlmCiAKICAgICBlbnVtIFRleHRDYXNlU2Vuc2l0aXZpdHkgeyBU
ZXh0Q2FzZVNlbnNpdGl2ZSwgVGV4dENhc2VJbnNlbnNpdGl2ZSB9OwogICAgIGVudW0gRmluZERp
cmVjdGlvbiB7IEZpbmREaXJlY3Rpb25Gb3J3YXJkLCBGaW5kRGlyZWN0aW9uQmFja3dhcmQgfTsK
QEAgLTE3Myw2ICsxNzgsMTAgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNl
dFNlc3Npb25TdG9yYWdlKFBhc3NSZWZQdHI8U2Vzc2lvblN0b3JhZ2U+KTsKICNlbmRpZgogCisj
aWYgRU5BQkxFKFdNTCkKKyAgICAgICAgdm9pZCBzZXRXTUxQYWdlU3RhdGUoUmVmUHRyPFdNTFBh
Z2VTdGF0ZT4pOworICAgICAgICBXTUxQYWdlU3RhdGUqIHdtbFBhZ2VTdGF0ZSgpIGNvbnN0Owor
I2VuZGlmCiAgICAgICAgIHZvaWQgc2V0Q3VzdG9tSFRNTFRva2VuaXplclRpbWVEZWxheShkb3Vi
bGUpOwogICAgICAgICBib29sIGhhc0N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25z
dCB7IHJldHVybiBtX2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgIT0gLTE7IH0KICAgICAg
ICAgZG91YmxlIGN1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkoKSBjb25zdCB7IEFTU0VSVCht
X2N1c3RvbUhUTUxUb2tlbml6ZXJUaW1lRGVsYXkgIT0gLTEpOyByZXR1cm4gbV9jdXN0b21IVE1M
VG9rZW5pemVyVGltZURlbGF5OyB9CkBAIC0yMzQsNiArMjQzLDEwIEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKICNpZiBQTEFURk9STShXSU4pIHx8IChQTEFURk9STShXWCkgJiYgZGVmaW5lZChfX1dY
TVNXX18pKSB8fCAoUExBVEZPUk0oUVQpICYmIGRlZmluZWQoUV9XU19XSU4pKQogICAgICAgICBz
dGF0aWMgSElOU1RBTkNFIHNfaW5zdGFuY2VIYW5kbGU7CiAjZW5kaWYKKworI2lmIEVOQUJMRShX
TUwpCisgICAgICAgIFJlZlB0cjxXTUxQYWdlU3RhdGU+IG1fd21sUGFnZVN0YXRlOworI2VuZGlm
CiAgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9wbGF0Zm9y
bS9NSU1FVHlwZVJlZ2lzdHJ5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL01J
TUVUeXBlUmVnaXN0cnkuY3BwCShyZXZpc2lvbiAzODM2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
TUlNRVR5cGVSZWdpc3RyeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw3IEBACiAvKgog
ICogQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA4IEFwcGxlIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwog
ICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0xODEsNiArMTgzLDEyIEBAIHN0YXRp
YyB2b2lkIGluaXRpYWxpemVTdXBwb3J0ZWRKYXZhU2NyaXAKIHN0YXRpYyB2b2lkIGluaXRpYWxp
emVTdXBwb3J0ZWROb25JbWFnZU1pbWVUeXBlcygpCiB7CiAgICAgc3RhdGljIGNvbnN0IGNoYXIq
IHR5cGVzW10gPSB7CisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgInRleHQvdm5kLndhcC53bWwi
LAorI2VuZGlmCisjaWYgRU5BQkxFKFdCWE1MKQorICAgICAgICAiYXBwbGljYXRpb24vdm5kLndh
cC53bWxjIiwKKyNlbmRpZgogICAgICAgICAidGV4dC9odG1sIiwKICAgICAgICAgInRleHQveG1s
IiwKICAgICAgICAgInRleHQveHNsIiwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vcXQvTUlNRVR5
cGVSZWdpc3RyeVF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3F0L01JTUVU
eXBlUmVnaXN0cnlRdC5jcHAJKHJldmlzaW9uIDM4MzYxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9x
dC9NSU1FVHlwZVJlZ2lzdHJ5UXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yLDYgKzIsNyBAQAog
ICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAqIENvcHly
aWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBhbmQvb3IgaXRzIHN1YnNp
ZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
QEAgLTYyLDYgKzYzLDEyIEBAIHN0YXRpYyBjb25zdCBFeHRlbnNpb25NYXAgZXh0ZW5zaW9uTWFw
IFsKICAgICB7ICJ4cG0iLCAiaW1hZ2UveC14cG0iIH0sCiAgICAgeyAieHNsIiwgInRleHQveHNs
IiB9LAogICAgIHsgInhodG1sIiwgImFwcGxpY2F0aW9uL3hodG1sK3htbCIgfSwKKyNpZiBFTkFC
TEUoV01MKQorICAgIHsgIndtbCIsICJ0ZXh0L3ZuZC53YXAud21sIiB9LAorI2VuZGlmCisjaWYg
RU5BQkxFKFdCWE1MKQorICAgIHsgIndtbGMiLCAiYXBwbGljYXRpb24vdm5kLndhcC53bWxjIiB9
LAorI2VuZGlmCiAgICAgeyAwLCAwIH0KIH07CiAKSW5kZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHAJKHJldmlzaW9uIDM4MzYxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2Uu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01LDYgKzUsOCBAQAogICogICAgICAgICAgIChDKSAyMDA2
IEFsbGFuIFNhbmRmZWxkIEplbnNlbiAoa2RlQGNhcmV3b2xmLmNvbSkKICAqICAgICAgICAgICAo
QykgMjAwNiBTYW11ZWwgV2VpbmlnIChzYW0ud2VpbmlnQGdtYWlsLmNvbSkKICAqIENvcHlyaWdo
dCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC0zMzksNyArMzQxLDExIEBAIHZvaWQgUmVuZGVy
SW1hZ2U6OnBhaW50UmVwbGFjZWQoUGFpbnRJbmYKICAgICAgICAgICAgIGludCB1c2FibGVXaWR0
aCA9IGNXaWR0aCAtIDI7CiAgICAgICAgICAgICBpbnQgdXNhYmxlSGVpZ2h0ID0gY0hlaWdodCAt
IDI7CiAKKyNpZiBFTkFCTEUoV01MKQorICAgICAgICAgICAgaWYgKCFkb2N1bWVudCgpLT5pc1dN
TERvY3VtZW50KCkgJiYgZXJyb3JPY2N1cnJlZCgpICYmICFpbWFnZSgpLT5pc051bGwoKSAmJiAo
dXNhYmxlV2lkdGggPj0gaW1hZ2UoKS0+d2lkdGgoKSkgJiYgKHVzYWJsZUhlaWdodCA+PSBpbWFn
ZSgpLT5oZWlnaHQoKSkpIHsKKyNlbHNlCiAgICAgICAgICAgICBpZiAoZXJyb3JPY2N1cnJlZCgp
ICYmICFpbWFnZSgpLT5pc051bGwoKSAmJiAodXNhYmxlV2lkdGggPj0gaW1hZ2UoKS0+d2lkdGgo
KSkgJiYgKHVzYWJsZUhlaWdodCA+PSBpbWFnZSgpLT5oZWlnaHQoKSkpIHsKKyNlbmRpZgogICAg
ICAgICAgICAgICAgIC8vIENlbnRlciB0aGUgZXJyb3IgaW1hZ2UsIGFjY291bnRpbmcgZm9yIGJv
cmRlciBhbmQgcGFkZGluZy4KICAgICAgICAgICAgICAgICBpbnQgY2VudGVyWCA9ICh1c2FibGVX
aWR0aCAtIGltYWdlKCktPndpZHRoKCkpIC8gMjsKICAgICAgICAgICAgICAgICBpZiAoY2VudGVy
WCA8IDApCkBAIC0zNzIsNiArMzc4LDEwIEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50UmVwbGFj
ZWQoUGFpbnRJbmYKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQtPmRyYXdUZXh0KHRl
eHRSdW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCkpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZSBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGNIZWlnaHQgPj0gZm9udC5oZWlnaHQo
KSkKICAgICAgICAgICAgICAgICAgICAgY29udGV4dC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9p
bnQoYXgsIGF5ICsgYXNjZW50KSk7CisjaWYgRU5BQkxFKFdNTCkKKyAgICAgICAgICAgICAgICBl
bHNlIGlmIChkb2N1bWVudCgpLT5pc1dNTERvY3VtZW50KCkgJiYgdXNhYmxlV2lkdGggPj0gdGV4
dFdpZHRoIC0gMiAmJiBjSGVpZ2h0ID49IGZvbnQuaGVpZ2h0KCkpCisgICAgICAgICAgICAgICAg
ICAgIGNvbnRleHQtPmRyYXdUZXh0KHRleHRSdW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCkp
OworI2VuZGlmCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgaWYgKGhhc0lt
YWdlKCkgJiYgY1dpZHRoID4gMCAmJiBjSGVpZ2h0ID4gMCkgewpJbmRleDogV2ViQ29yZS93bWwv
V01MQUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmNw
cAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
TUxBRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NTSGVscGVyLmgiCisjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2lu
Y2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1l
TG9hZGVyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVu
dC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIFdNTE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEV2ZW50TmFtZXM7CisKK1dN
TEFFbGVtZW50OjpXTUxBRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVu
dCogZG9jKSAKKyAgICA6IFdNTEVsZW1lbnQobmFtZSwgZG9jKQoreworICAgIHNldElzTGluayh0
cnVlKTsKK30KKworV01MQUVsZW1lbnQ6On5XTUxBRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgV01M
QUVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkgCit7CisgICAgYm9vbCBz
aG91bGRIYW5kbGUgPSBmYWxzZTsKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gY2xpY2tFdmVudCkK
KyAgICAgICAgc2hvdWxkSGFuZGxlID0gdHJ1ZTsKKyAgICBlbHNlIGlmICgoZXZ0LT50eXBlKCkg
PT0ga2V5cHJlc3NFdmVudCkgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSAmJiBmb2N1c2VkKCkp
IHsKKyAgICAgICAgU3RyaW5nIGtleSA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQp
LT5rZXlJZGVudGlmaWVyKCk7CisgICAgICAgIGlmIChrZXkgPT0gIkVudGVyIikgCisgICAgICAg
ICAgICBzaG91bGRIYW5kbGUgPSB0cnVlOworICAgIH0KKyAKKyAgICBpZiAoc2hvdWxkSGFuZGxl
ICYmIGlzTGluaygpKSB7CisgICAgICAgIFN0cmluZyB1cmwgPSBwYXJzZVVSTChnZXRBdHRyaWJ1
dGUoImhyZWYiKSk7CisKKyAgICAgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnVy
bFNlbGVjdGVkKGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHVybCksIGdldEF0dHJpYnV0ZShIVE1M
TmFtZXM6OnRhcmdldEF0dHIpLCBldnQsIGZhbHNlLCB0cnVlKTsKKworICAgICAgICBldnQtPnNl
dERlZmF1bHRIYW5kbGVkKCk7CisgICAgfSBlbHNlCisgICAgICAgIEV2ZW50VGFyZ2V0Tm9kZTo6
ZGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworfQorCitTdHJpbmcgV01MQUVsZW1lbnQ6OnRpdGxl
KCkgY29uc3QKK3sKKyAgICByZXR1cm4gZ2V0QXR0cmlidXRlKCJ0aXRsZSIpOworfQorCitib29s
IFdNTEFFbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJkRXZlbnQqIGV2ZW50KSBj
b25zdAoreworICAgIHJldHVybiBkb2N1bWVudCgpLT5mcmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+
dGFic1RvTGlua3MoZXZlbnQpOworfQorCitib29sIFdNTEFFbGVtZW50Ojppc0ZvY3VzYWJsZSgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRydWU7IAorfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxBRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFFbGVtZW50LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxBRWxlbWVudF9oCisjZGVmaW5lIFdNTEFFbGVt
ZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBXTUxBRWxlbWVudCA6IHB1YmxpYyAgV01MRWxlbWVudHsKK3B1YmxpYzoKKyAgICBX
TUxBRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB+V01MQUVs
ZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50Kik7
CisgICAgdmlydHVhbCBib29sIGlzS2V5Ym9hcmRGb2N1c2FibGUoS2V5Ym9hcmRFdmVudCopIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBpc0ZvY3VzYWJsZSgpIGNvbnN0OworICAgIHZpcnR1YWwg
U3RyaW5nIHRpdGxlKCkgY29uc3Q7CisKK307CisKK30KKworI2VuZGlmCkluZGV4OiBXZWJDb3Jl
L3dtbC9XTUxBY2Nlc3NFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxB
Y2Nlc3NFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEFjY2Vzc0Vs
ZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAg
ICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAy
MDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNl
ZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
CisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIldNTEFjY2Vzc0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxw
ZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgor
I2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MQWNjZXNzRWxlbWVudDo6V01MQWNjZXNzRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCAqZG9jKQorICAgIDogV01M
RWxlbWVudCh0YWdOYW1lLCBkb2MpIAoreworfQorCisKK1dNTEFjY2Vzc0VsZW1lbnQ6On5XTUxB
Y2Nlc3NFbGVtZW50KCkgCit7Cit9CisKK3ZvaWQgV01MQWNjZXNzRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gZG9tYWluQXR0cikgeworICAgICAgICBpZiAoV01MSGVscGVyOjpoYXNWYXJpYWJsZVJl
ZihhdHRyLT52YWx1ZSgpKSkgeworICAgICAgICAgICAgQVNTRVJUKFdNTEhlbHBlcjo6dG9rZW5p
emVyKCkpOworICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3Io
SW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIGlmIChkb2N1bWVudCgpLT5wYWdlKCkpCisgICAgICAgICAgICBkb2N1
bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zZXREZWNrQWNjZXNzRG9tYWluKGF0dHIt
PnZhbHVlKCkpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHBhdGhBdHRyKSB7Cisg
ICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7Cisg
ICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFy
aWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKGRvY3VtZW50KCktPnBhZ2UoKSkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPnBh
Z2UoKS0+d21sUGFnZVN0YXRlKCktPnNldERlY2tBY2Nlc3NQYXRoKGF0dHItPnZhbHVlKCkpOwor
ICAgIH0KK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MQWNjZXNzRWxlbWVudC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEFjY2Vzc0VsZW1lbnQuaAkocmV2aXNpb24gMCkKKysr
IFdlYkNvcmUvd21sL1dNTEFjY2Vzc0VsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgV01MQWNjZXNzRWxlbWVudF9oCisjZGVmaW5lIFdNTEFjY2Vzc0Vs
ZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIERvY3VtZW50OworCitjbGFzcyBXTUxBY2Nlc3NFbGVtZW50IDogcHVibGljIFdN
TEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MQWNjZXNzRWxlbWVudChjb25zdCBRdWFsaWZpZWRO
YW1lJiB0YWdOYW1lLCBEb2N1bWVudCopOworICAgIHZpcnR1YWwgfldNTEFjY2Vzc0VsZW1lbnQo
KTsKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
Kik7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01M
QW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MQW5jaG9yRWxl
bWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxBbmNob3JFbGVtZW50LmNw
cAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXTUxBbmNob3JFbGVtZW50LmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZl
bnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgi
CisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJLZXlib2FyZEV2ZW50LmgiCisj
aW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOworCitXTUxBbmNob3JFbGVtZW50OjpXTUxBbmNob3JFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpIAorICAgIDogSFRNTEFuY2hv
ckVsZW1lbnQobmFtZSwgZG9jKSwgbV90YXNrKDApCit7CisgICAgc2V0SHJlZigiIik7ICAgICAv
LyB0aGlzIGlzIHRoZSBoYWNrIHNvIHRoYXQgYW5jaG9yIHJlbmRlcnMgbGlrZSBhIGxpbmsKK30K
KworV01MQW5jaG9yRWxlbWVudDo6fldNTEFuY2hvckVsZW1lbnQoKQoreworfQorCit2b2lkIFdN
TEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGUpIAoreworICAgIGJv
b2wgc2hvdWxkSGFuZGxlID0gZmFsc2U7CisgICAgaWYgKGUtPnR5cGUoKSA9PSBjbGlja0V2ZW50
KQorICAgICAgICBzaG91bGRIYW5kbGUgPSB0cnVlOworICAgIGVsc2UgaWYgKChlLT50eXBlKCkg
PT0ga2V5ZG93bkV2ZW50KSAmJiBlLT5pc0tleWJvYXJkRXZlbnQoKSAmJiBmb2N1c2VkKCkpIHsK
KyAgICAgICAgU3RyaW5nIGtleSA9IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihlKS0+a2V5
SWRlbnRpZmllcigpOworICAgICAgICBpZiAoa2V5ID09ICJFbnRlciIpCisgICAgICAgICAgICBz
aG91bGRIYW5kbGUgPSB0cnVlOworICAgIH0KKworICAgIGlmIChzaG91bGRIYW5kbGUgJiYgbV90
YXNrKSB7CisgICAgICAgIG1fdGFzay0+ZXhlYyhlKTsKKyAgICAgICAgZS0+c2V0RGVmYXVsdEhh
bmRsZWQoKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgIEV2ZW50VGFyZ2V0Tm9kZTo6ZGVmYXVs
dEV2ZW50SGFuZGxlcihlKTsKK30KKwordm9pZCBXTUxBbmNob3JFbGVtZW50OjpyZWdpc3RlclRh
c2soV01MVGFza0VsZW1lbnQqIHRhc2spCit7IAorICAgIG1fdGFzayA9IHRhc2s7Cit9CisKK30K
SW5kZXg6IFdlYkNvcmUvd21sL1dNTEFuY2hvckVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3dtbC9XTUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9X
TUxBbmNob3JFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmln
aHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZu
ZGVmIFdNTEFuY2hvckVsZW1lbnRfaAorI2RlZmluZSBXTUxBbmNob3JFbGVtZW50X2gKKworI2lu
Y2x1ZGUgIkhUTUxBbmNob3JFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgV01MVGFza0VsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAgIAorY2xhc3MgV01MQW5j
aG9yRWxlbWVudCA6IHB1YmxpYyBIVE1MQW5jaG9yRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01M
QW5jaG9yRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCopOworICAg
IHZpcnR1YWwgfldNTEFuY2hvckVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50Kik7CisKKyAgICB2b2lkIHJlZ2lzdGVyVGFzayhXTUxUYXNrRWxl
bWVudCopOworCitwcml2YXRlOgorCisgICAgV01MVGFza0VsZW1lbnQqIG1fdGFzazsKKworfTsK
KworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEF0dHJpYnV0
ZU5hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEF0dHJpYnV0ZU5hbWVzLmlu
CShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQXR0cmlidXRlTmFtZXMuaW4JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNDQgQEAKK25hbWVzcGFjZT0iV01MIgorbmFtZXNwYWNlVVJJPSIi
CitndWFyZEZhY3RvcnlXaXRoPSJFTkFCTEUoV01MKSIKK2F0dHJzTnVsbE5hbWVzcGFjZT0iMSIK
KworbmFtZQoraWQKK3RpdGxlCituZXdjb250ZXh0CitvcmRlcmVkCitsYWJlbAorb3B0aW9uYWwK
K3R5cGUKK2hyZWYKK3ZhbHVlCitvbmVudGVyZm9yd2FyZAorb25lbnRlcmJhY2t3YXJkCitvbnRp
bWVyCitzZW5kcmVmZXJlcgorbWV0aG9kCitjYWNoZS1jb250cm9sCitlbmN0eXBlCithY2NlcHQt
Y2hhcnNldAoraW5hbWUKK2l2YWx1ZQorbXVsdGlwbGUKK3RhYmluZGV4CitvbnBpY2sKK2Zvcm1h
dAorZW1wdHlvaworc2l6ZQorbWF4bGVuZ3RoCithbHQKK3NyYworbG9jYWxzcmMKK3ZzcGFjZQor
aHNwYWNlCithbGlnbgoraGVpZ2h0Cit3aWR0aAorY29sdW1ucworbW9kZQorZG9tYWluCitwYXRo
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxDYXJkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93bWwvV01MQ2FyZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwv
V01MQ2FyZEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorCisjaW5jbHVk
ZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVy
LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTm9kZUxpc3QuaCIKKyNpbmNs
dWRlICJSZW5kZXJPYmplY3QuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUg
IlRpbWVyLmgiCisjaW5jbHVkZSAiV01MRG9FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRWxlbWVu
dEZhY3RvcnkuaCIKKyNpbmNsdWRlICJXTUxHb0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxw
ZXIuaCIKKyNpbmNsdWRlICJXTUxJbnB1dEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5o
IgorI2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQu
aCIKKyNpbmNsdWRlICJXTUxUYWJsZUVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUaW1lckVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9yLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitX
TUxDYXJkRWxlbWVudDo6V01MQ2FyZEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFt
ZSwgRG9jdW1lbnQgKmRvYykKKyAgICA6IFdNTEVsZW1lbnQodGFnTmFtZSwgZG9jKQorICAgICwg
bV9pc1Zpc2libGUoZmFsc2UpCisgICAgLCBtX2lzTmV3Q29udGV4dChmYWxzZSkKKyAgICAsIG1f
aXNPcmRlcmVkKHRydWUpCisgICAgLCBtX3RlbXBsYXRlKDApCisgICAgLCBtX2V2bnRIYW5kbGVy
KDApCisgICAgLCBtX2hhc0ludHJpbnNpY0V2ZW50KGZhbHNlKQorICAgICwgbV9ldnRUaW1lcigw
KQoreworfQorCitXTUxDYXJkRWxlbWVudDo6fldNTENhcmRFbGVtZW50KCkgCit7CisgICAgaWYg
KG1fZXZudEhhbmRsZXIpIHsKKyAgICAgICAgZGVsZXRlIG1fZXZudEhhbmRsZXI7CisgICAgICAg
IG1fZXZudEhhbmRsZXIgPSAwOworICAgIH0KKworICAgIG1fdGVtcGxhdGUgPSAwOworICAgIG1f
ZXZ0VGltZXIgPSAwOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgV01MSW50cmluc2ljRXZlbnRUeXBl
IGV0eXBlID0gVW5rbm93bjsKKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyKQor
ICAgICAgICBtX3RpdGxlID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVl
KCksIGRvY3VtZW50KCkpOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVudGVyZm9y
d2FyZEF0dHIpCisgICAgICAgIGV0eXBlID0gT25FbnRlckZvcndhcmQ7CisgICAgZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9uZW50ZXJiYWNrd2FyZEF0dHIpCisgICAgICAgIGV0eXBlID0gT25F
bnRlckJhY2t3YXJkOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbnRpbWVyQXR0cikK
KyAgICAgICAgZXR5cGUgPSBPblRpbWVyOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBu
ZXdjb250ZXh0QXR0cikKKyAgICAgICAgbV9pc05ld0NvbnRleHQgPSAoYXR0ci0+dmFsdWUoKSA9
PSAidHJ1ZSIpID8gdHJ1ZSA6IGZhbHNlOworICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBv
cmRlcmVkQXR0cikKKyAgICAgICAgbV9pc09yZGVyZWQgPSAoYXR0ci0+dmFsdWUoKSA9PSAidHJ1
ZSIpID8gdHJ1ZSA6IGZhbHNlOworICAgIAorICAgIC8vIHJlZ2lzdGVyIGludHJpbnNpYyBldmVu
dCB0byBjYXJkCisgICAgaWYgKGV0eXBlICE9IFVua25vd24pIHsKKyAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgICAgIFF1YWxpZmllZE5hbWUgcU5hbWUoImdvIiwgImdvIiwgIiIp
OworICAgICAgICBFbGVtZW50KiBnbyA9IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVt
ZW50KHFOYW1lLCBkb2N1bWVudCgpLCBmYWxzZSk7IAorICAgICAgICBTdHJpbmcgaHJlZiA9IFdN
TEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpLCAiZXNj
YXBlIik7CisgICAgICAgIGdvLT5zZXRBdHRyaWJ1dGVOUygiIiwgImhyZWYiLCBocmVmLCBlYyk7
CisKKyAgICAgICAgV01MSW50cmluc2ljRXZlbnQgZXY7CisgICAgICAgIGV2LnRhc2sgPSBzdGF0
aWNfY2FzdDxXTUxHb0VsZW1lbnQqPihnbyk7CisgICAgICAgIGV2LnRhcmdldFVSSSA9IGhyZWY7
IAorCisgICAgICAgIGlmICghbV9ldm50SGFuZGxlcikKKyAgICAgICAgICAgIG1fZXZudEhhbmRs
ZXIgPSBuZXcgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKCk7CisKKyAgICAgICAgc2V0SGFzSW50
cmluc2ljRXZlbnQodHJ1ZSk7CisgICAgICAgIG1fZXZudEhhbmRsZXItPnJlZ2lzdGVySW50cmlu
c2ljRXZlbnQoZXR5cGUsIGV2KTsKKyAgICB9Cit9CisKK1JlbmRlck9iamVjdCogV01MQ2FyZEVs
ZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUqIHN0eWxlKSAK
K3sKKyAgICBpZiAoIW1faXNWaXNpYmxlKQorICAgICAgICBzdHlsZS0+c2V0RGlzcGxheShOT05F
KTsKKyAgICAKKyAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QodGhpcywgc3R5
bGUpOworfQorCit2b2lkIFdNTENhcmRFbGVtZW50OjpzZXRWaXNpYmlsaXR5KGJvb2wgaXNWaXNp
YmxlKSAKK3sKKyAgICBtX2lzVmlzaWJsZSA9IGlzVmlzaWJsZTsKK30KKworYm9vbCBXTUxDYXJk
RWxlbWVudDo6dmlzaWJsZSgpIGNvbnN0IAoreworICAgIHJldHVybiBtX2lzVmlzaWJsZTsKK30K
KworYm9vbCBXTUxDYXJkRWxlbWVudDo6aXNOZXdDb250ZXh0KCkgY29uc3QgCit7CisgICAgcmV0
dXJuIG1faXNOZXdDb250ZXh0OworfQorCitib29sIFdNTENhcmRFbGVtZW50Ojppc09yZGVyZWQo
KSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV9pc09yZGVyZWQ7Cit9CisKK1N0cmluZyBXTUxDYXJk
RWxlbWVudDo6dGl0bGUoKSBjb25zdAoreworICAgIHJldHVybiBtX3RpdGxlOyAKK30KKwordm9p
ZCBXTUxDYXJkRWxlbWVudDo6YmluZFRlbXBsYXRlKFdNTFRlbXBsYXRlRWxlbWVudCogdGVtcGwp
IAoreworICAgIG1fdGVtcGxhdGUgPSB0ZW1wbDsKK30KKworV01MVGVtcGxhdGVFbGVtZW50KiBX
TUxDYXJkRWxlbWVudDo6dGVtcGxhdGVFbGVtZW50KCkKK3sKKyAgICByZXR1cm4gbV90ZW1wbGF0
ZTsKK30KKworV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBXTUxDYXJkRWxlbWVudDo6ZXZlbnRI
YW5kbGVyKCkKK3sKKyAgICBpZiAobV9oYXNJbnRyaW5zaWNFdmVudCAmJiAhbV9ldm50SGFuZGxl
cikgIHsKKyAgICAgICAgbV9ldm50SGFuZGxlciA9IG5ldyBXTUxJbnRyaW5zaWNFdmVudEhhbmRs
ZXIoKTsKKyAgICB9CisgICAgcmV0dXJuIG1fZXZudEhhbmRsZXI7Cit9CisKK3ZvaWQgV01MQ2Fy
ZEVsZW1lbnQ6OnNldEhhc0ludHJpbnNpY0V2ZW50KGJvb2wgaGFzKQoreworICAgIG1faGFzSW50
cmluc2ljRXZlbnQgPSBoYXM7Cit9CisKK2Jvb2wgV01MQ2FyZEVsZW1lbnQ6Omhhc0ludHJpbnNp
Y0V2ZW50KCkKK3sKKyAgICByZXR1cm4gbV9oYXNJbnRyaW5zaWNFdmVudDsKK30KKwordm9pZCBX
TUxDYXJkRWxlbWVudDo6c2V0SW50cmluc2ljRXZlbnRUaW1lcihXTUxUaW1lckVsZW1lbnQqIHRp
bWVyKQoreworICAgIC8vIG9ubHkgb25lIHRpbWVyIGlzIGFsbG93ZWQgaW4gYSBjYXJkIAorICAg
IGlmICghbV9ldnRUaW1lcikKKyAgICAgICAgbV9ldnRUaW1lciA9IHRpbWVyOworICAgIGVsc2Ug
eworICAgICAgICBtX2V2dFRpbWVyID0gMDsKKyAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIo
KS0+cmVwb3J0RXJyb3IoTXVsdGlUaW1lckVsZW1lbnRzRXJyb3IpOworICAgIH0KK30KKworV01M
VGltZXJFbGVtZW50KiBXTUxDYXJkRWxlbWVudDo6ZXZlbnRUaW1lcigpCit7CisgICAgcmV0dXJu
IG1fZXZ0VGltZXI7Cit9CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnJlZ2lzdGVyRG9FbGVtZW50
KFdNTERvRWxlbWVudCogZSkKK3sKKyAgICBpZiAoZSkgeworICAgICAgICBWZWN0b3I8V01MRG9F
bGVtZW50Kj46Oml0ZXJhdG9yIGl0ID0gbV9kb1ZlY3MuYmVnaW4oKTsKKyAgICAgICAgV01MRG9F
bGVtZW50KiBkb0VsZW0gPSAwOworICAgICAgICB3aGlsZSAoaXQgIT0gbV9kb1ZlY3MuZW5kKCkp
IHsKKyAgICAgICAgICAgIGRvRWxlbSA9IHN0YXRpY19jYXN0PFdNTERvRWxlbWVudCo+KCppdCsr
KTsKKworICAgICAgICAgICAgaWYgKGRvRWxlbS0+ZG9OYW1lKCkgPT0gZS0+ZG9OYW1lKCkpIHsK
KyAgICAgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihTYW1l
TmFtZURvRWxlbWVudHNFcnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgICAgIG1fZG9WZWNzLmFwcGVuZChlKTsKKyAgICAgICAgZS0+
c2V0QWN0aXZlKHRydWUpOworICAgIH0KK30KKwordm9pZCBXTUxDYXJkRWxlbWVudDo6c2hhZG93
RG9FbGVtZW50SWZOZWVkZWQoKQoreworICAgIGlmICghbV90ZW1wbGF0ZSkgCisgICAgICAgIHJl
dHVybjsKKworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPiB0ZW1wbERvTmFtZVZlY3MgPSBtX3Rl
bXBsYXRlLT5nZXREb0VsZW1lbnRzKCk7CisgICAgVmVjdG9yPFdNTERvRWxlbWVudCo+OjppdGVy
YXRvciBjYXJkSXQgPSBtX2RvVmVjcy5iZWdpbigpOworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQq
Pjo6aXRlcmF0b3IgdGVtcGxJdCA9IHRlbXBsRG9OYW1lVmVjcy5iZWdpbigpOyAKKworICAgIFN0
cmluZyB0ZW1wbERvTmFtZTsKKyAgICBTdHJpbmcgY2FyZERvTmFtZTsKKyAgICBXTUxEb0VsZW1l
bnQqIHRlbXBsRG8gPSAwOworICAgIGZvciAoOyB0ZW1wbEl0ICE9IHRlbXBsRG9OYW1lVmVjcy5l
bmQoKTsgKyt0ZW1wbEl0KSB7CisgICAgICAgIHRlbXBsRG8gPSAqdGVtcGxJdDsKKyAgICAgICAg
dGVtcGxEb05hbWUgPSB0ZW1wbERvLT5kb05hbWUoKTsKKyAgICAgICAgYm9vbCBpc0FjdGl2ZSA9
IHRydWU7CisgICAgICAgIGZvciAoY2FyZEl0ID0gbV9kb1ZlY3MuYmVnaW4oKTsgY2FyZEl0ICE9
IG1fZG9WZWNzLmVuZCgpOyArK2NhcmRJdCkgeworICAgICAgICAgICAgaWYgKHRlbXBsRG9OYW1l
ID09ICgqY2FyZEl0KS0+ZG9OYW1lKCkpIHsKKyAgICAgICAgICAgICAgICBpc0FjdGl2ZSA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgdGVtcGxEby0+c2V0QWN0aXZlKGlzQWN0aXZlKTsKKyAgICB9Cit9CisKKwordm9p
ZCBXTUxDYXJkRWxlbWVudDo6aGFuZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCgpCit7CisgICAg
QVNTRVJUKGRvY3VtZW50KCktPmZyYW1lKCkpOworICAgIEFTU0VSVChkb2N1bWVudCgpLT5wYWdl
KCkpOworICAgIEZyYW1lTG9hZGVyKiBsb2FkZXIgPSBkb2N1bWVudCgpLT5mcmFtZSgpLT5sb2Fk
ZXIoKTsKKyAgICBBU1NFUlQobG9hZGVyKTsKKyAgICBXTUxQYWdlU3RhdGUqIHBhZ2VTdGF0ZSA9
IGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCk7CisgICAgQVNTRVJUKHBhZ2VTdGF0
ZSk7CisgICAgaW50IGN1ckhpc3RMZW4gPSBsb2FkZXItPmdldEhpc3RvcnlMZW5ndGgoKTsKKyAg
ICBpbnQgb2xkSGlzdExlbiA9IHBhZ2VTdGF0ZS0+aGlzdG9yeUxlbmd0aCgpOworCisgICAgLy8g
Y2FsY3VsYXRlIHRoZSBlbnRyeSBtZXRob2Qgb2YgY3VycmVudCBjYXJkIAorICAgIFdNTEludHJp
bnNpY0V2ZW50VHlwZSBldHlwZTsKKyAgICBpZiAob2xkSGlzdExlbiA+IGN1ckhpc3RMZW4pCisg
ICAgICAgIGV0eXBlID0gT25FbnRlckJhY2t3YXJkOworICAgIGVsc2UgaWYgKG9sZEhpc3RMZW4g
PCBjdXJIaXN0TGVuKQorICAgICAgICBldHlwZSA9IE9uRW50ZXJGb3J3YXJkOworICAgIGVsc2UK
KyAgICAgICAgZXR5cGUgPSBVbmtub3duOworIAorICAgIC8vIHVwZGF0ZSB0aGUgaGhpc3Rvcnkg
bGVuZ3RoIGluIHRoZSBjdXJyZW50IGJyb3dzZXIgY29udGV4dAorICAgIHBhZ2VTdGF0ZS0+c2V0
SGlzdG9yeUxlbmd0aChjdXJIaXN0TGVuKTsKKyAKKyAgICAvLyBoYW5kbGUgaW50cmluc2ljIGV2
ZW50LCBhbmQgc2hhZG93IHRoZSBkZWNrLWxldmVsIGV2ZW50IGlmIG5lZWRlZAorICAgIGJvb2wg
aGFzSW50cmluc2ljRXZlbnQgPSAgZmFsc2U7CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVy
KiBldkhhbmRsZXIgPSBtX2V2bnRIYW5kbGVyOyAKKyAgICBpZiAoZXR5cGUgIT0gVW5rbm93bikg
eworICAgICAgICBpZiAoZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQo
ZXR5cGUpKQorICAgICAgICAgICAgaGFzSW50cmluc2ljRXZlbnQgPSB0cnVlOworICAgICAgICBl
bHNlIGlmIChtX3RlbXBsYXRlKSB7CisgICAgICAgICAgICBldkhhbmRsZXIgPSBtX3RlbXBsYXRl
LT5ldmVudEhhbmRsZXIoKTsKKyAgICAgICAgICAgIGlmIChldkhhbmRsZXIgJiYgZXZIYW5kbGVy
LT5oYXNJbnRyaW5zaWNFdmVudChldHlwZSkpCisgICAgICAgICAgICAgICAgaGFzSW50cmluc2lj
RXZlbnQgPSB0cnVlOworICAgICAgICB9CisgICAgfQorIAorICAgIGlmIChoYXNJbnRyaW5zaWNF
dmVudCkKKyAgICAgICAgZXZIYW5kbGVyLT50cmlnZ2VySW50cmluc2ljRXZlbnQoZXR5cGUpOwor
ICAgIGVsc2UgeworICAgICAgICAvLyBzdGFydCB0aGUgdGltZXIgaWYgaXQgZXhpc3RzIGluIGN1
cnJlbnQgY2FyZAorICAgICAgICBpZiAobV9ldnRUaW1lcikKKyAgICAgICAgICAgIG1fZXZ0VGlt
ZXItPnN0YXJ0KCk7CisKKyAgICAgICAgLy9pbml0aWFsaXNlIGlucHV0IGVsZW1lbnRzKGVnLiBp
bnB1dCwgc2VsZWN0LCBldGMpIGluIHRoaXMgY2FyZAorICAgICAgICBOb2RlKiBub2RlID0gdGhp
czsKKyAgICAgICAgd2hpbGUgKChub2RlID0gbm9kZS0+dHJhdmVyc2VOZXh0Tm9kZSgpKSkgewor
ICAgICAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoaW5wdXRUYWcpKQorICAgICAgICAgICAg
ICAgIHN0YXRpY19jYXN0PFdNTElucHV0RWxlbWVudCo+KG5vZGUpLT5pbml0KCk7CisgICAgICAg
ICAgICBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKHNlbGVjdFRhZykpCisgICAgICAgICAgICAg
ICAgc3RhdGljX2Nhc3Q8V01MU2VsZWN0RWxlbWVudCo+KG5vZGUpLT5zZWxlY3RJbml0aWFsT3B0
aW9ucygpOworICAgICAgICB9CisKKyAgICB9Cit9CisKK3ZvaWQgV01MQ2FyZEVsZW1lbnQ6OnVw
ZGF0ZVRhYmxlRWxlbWVudCgpCit7CisgICAgTm9kZSogbm9kZSA9IHRoaXM7IAorICAgIFdNTFRh
YmxlRWxlbWVudCogdGFibGUgPSAwOworICAgIHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNl
TmV4dE5vZGUoKSkpIHsKKyAgICAgICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoSFRNTE5hbWVzOjp0
YWJsZVRhZykpIHsKKyAgICAgICAgICAgIHRhYmxlID0gc3RhdGljX2Nhc3Q8V01MVGFibGVFbGVt
ZW50Kj4obm9kZSk7CisgICAgICAgICAgICBpZiAodGFibGUpCisgICAgICAgICAgICAgICAgdGFi
bGUtPmluaXQoKTsKKyAgICAgICAgfSBlbHNlIGlmIChub2RlLT5oYXNUYWdOYW1lKFdNTE5hbWVz
OjpjYXJkVGFnKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KK30KKworfQpJbmRleDogV2Vi
Q29yZS93bWwvV01MQ2FyZEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxD
YXJkRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MQ2FyZEVsZW1lbnQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw4MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MQ2FyZEVsZW1l
bnRfaAorI2RlZmluZSBXTUxDYXJkRWxlbWVudF9oCisKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRlbXBsYXRlRWxlbWVu
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50OworY2xh
c3MgV01MVGltZXJFbGVtZW50OworY2xhc3MgV01MRG9FbGVtZW50OworCitjbGFzcyBXTUxDYXJk
RWxlbWVudCA6IHB1YmxpYyBXTUxFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxDYXJkRWxlbWVu
dChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxDYXJk
RWxlbWVudCgpOworCisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBl
ZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihS
ZW5kZXJBcmVuYSosIFJlbmRlclN0eWxlKik7CisKKyAgICB2b2lkIHNldFZpc2liaWxpdHkoYm9v
bCk7CisgICAgYm9vbCB2aXNpYmxlKCkgY29uc3Q7CisKKyAgICBib29sIGlzTmV3Q29udGV4dCgp
IGNvbnN0OworICAgIGJvb2wgaXNPcmRlcmVkKCkgY29uc3Q7CisKKyAgICBTdHJpbmcgdGl0bGUo
KSBjb25zdDsKKworICAgIHZvaWQgYmluZFRlbXBsYXRlKFdNTFRlbXBsYXRlRWxlbWVudCopOwor
ICAgIFdNTFRlbXBsYXRlRWxlbWVudCogdGVtcGxhdGVFbGVtZW50KCk7CisKKyAgICBXTUxJbnRy
aW5zaWNFdmVudEhhbmRsZXIqIGV2ZW50SGFuZGxlcigpOworICAgIGJvb2wgaGFzSW50cmluc2lj
RXZlbnQoKTsKKyAgICB2b2lkIHNldEhhc0ludHJpbnNpY0V2ZW50KGJvb2wpOworICAgIHZvaWQg
aGFuZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCgpOworCisgICAgdm9pZCBzZXRJbnRyaW5zaWNF
dmVudFRpbWVyKFdNTFRpbWVyRWxlbWVudCopOworICAgIFdNTFRpbWVyRWxlbWVudCogZXZlbnRU
aW1lcigpOworCisgICAgdm9pZCByZWdpc3RlckRvRWxlbWVudChXTUxEb0VsZW1lbnQqKTsKKyAg
ICB2b2lkIHNoYWRvd0RvRWxlbWVudElmTmVlZGVkKCk7CisKKyAgICB2b2lkIHVwZGF0ZVRhYmxl
RWxlbWVudCgpOworcHJpdmF0ZToKKyAgICBib29sIG1faXNWaXNpYmxlOworICAgIFN0cmluZyBt
X3RpdGxlOworICAgIGJvb2wgbV9pc05ld0NvbnRleHQ7CisgICAgYm9vbCBtX2lzT3JkZXJlZDsK
KyAgICBXTUxUZW1wbGF0ZUVsZW1lbnQqIG1fdGVtcGxhdGU7CisgICAgV01MSW50cmluc2ljRXZl
bnRIYW5kbGVyKiBtX2V2bnRIYW5kbGVyOworICAgIGJvb2wgbV9oYXNJbnRyaW5zaWNFdmVudDsK
KyAgICBXTUxUaW1lckVsZW1lbnQqIG1fZXZ0VGltZXI7IAorICAgIFZlY3RvcjxXTUxEb0VsZW1l
bnQqPiBtX2RvVmVjczsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJD
b3JlL3dtbC9XTUxEb0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTERv
RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxEb0VsZW1lbnQuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJXTUxEb0VsZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU0hlbHBlci5oIgorI2lu
Y2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50
LmgiCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgor
I2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJI
VE1MQnV0dG9uRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxGb3JtRWxlbWVudC5oIgorI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIktleWJvYXJkRXZlbnQuaCIKKyNpbmNsdWRlICJQ
YWdlLmgiCisjaW5jbHVkZSAiUmVuZGVyQnV0dG9uLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUu
aCIKKyNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNs
dWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFBh
Z2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTFBvc3RmaWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJX
TUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxUaW1lckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2luZyBuYW1lc3Bh
Y2UgRXZlbnROYW1lczsKKworV01MRG9FbGVtZW50OjpXTUxEb0VsZW1lbnQoY29uc3QgUXVhbGlm
aWVkTmFtZSYgdGFnLCBEb2N1bWVudCogZG9jLCBIVE1MRm9ybUVsZW1lbnQqIGZvcm0pCisgICAg
OiBIVE1MQnV0dG9uRWxlbWVudCh0YWcsIGRvYywgZm9ybSkKKyAgICAsIG1fdGFzaygwKQorICAg
ICwgbV9pc09wdGlvbihmYWxzZSkKKyAgICAsIG1faXNOb29wKGZhbHNlKQorICAgICwgbV9pc0Fj
dGl2ZShmYWxzZSkKK3sKK30KKworV01MRG9FbGVtZW50Ojp+V01MRG9FbGVtZW50KCkKK3sKK30K
Kwordm9pZCBXTUxEb0VsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGUpIAorewor
ICAgIGlmIChtX2lzT3B0aW9uKQorICAgICAgICByZXR1cm47CisgCisgICAgYm9vbCBzaG91bGRI
YW5kbGUgPSBmYWxzZTsKKyAgICBpZiAoZS0+dHlwZSgpID09IGNsaWNrRXZlbnQpCisgICAgICAg
IHNob3VsZEhhbmRsZSA9IHRydWU7CisgICAgZWxzZSBpZiAoZS0+dHlwZSgpID09IGtleXByZXNz
RXZlbnQpCisgICAgICAgIEhUTUxGb3JtQ29udHJvbEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRs
ZXIoZSk7CisgICAgZWxzZSBpZiAoZS0+dHlwZSgpID09IGtleWRvd25FdmVudCAmJiBlLT5pc0tl
eWJvYXJkRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxLZXlib2FyZEV2ZW50Kj4oZSktPmtleUlkZW50
aWZpZXIoKSA9PSAiRW50ZXIiKQorICAgICAgICBzaG91bGRIYW5kbGUgPSB0cnVlOworIAorICAg
IGlmIChzaG91bGRIYW5kbGUpIHsKKyAKKyAgICAgICAgaWYgKChtX3R5cGUgPT0gImFjY2VwdCIp
IHx8IChtX3R5cGUgPT0gIm9wdGlvbnMiKSkgeworICAgICAgICAgICAgaWYgKG1fdGFzaykKKyAg
ICAgICAgICAgICAgICBtX3Rhc2stPmV4ZWMoZSk7CisgICAgICAgIH0gZWxzZSBpZiAobV90eXBl
ID09ICJwcmV2IikgeworICAgICAgICAgICAgLy8gc3RvcCB0aGUgdGltZXIgb2YgdGhlIGN1cnJl
bnQgY2FyZCBpZiBpdCBpcyBhY3RpdmUKKyAgICAgICAgICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVu
dCgpLT5wYWdlKCk7CisgICAgICAgICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSBwYWdlLT53bWxQYWdlU3Rh
dGUoKS0+YWN0aXZlQ2FyZCgpOworICAgICAgICAgICAgaWYgKGNhcmQgJiYgY2FyZC0+ZXZlbnRU
aW1lcigpKQorICAgICAgICAgICAgICAgIGNhcmQtPmV2ZW50VGltZXIoKS0+c3RvcCgpOworIAor
ICAgICAgICAgICAgcGFnZS0+Z29CYWNrKCk7CisgICAgICAgIH0gZWxzZSBpZiAobV90eXBlID09
ICJyZXNldCIpCisgICAgICAgICAgICBpZiAoZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICAg
ICAgICAgIGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCktPnJlc2V0KCk7CisgICAg
ICAgIGVsc2UgaWYgKG1fdHlwZSA9PSAiZGVsZXRlIikKKyAgICAgICAgICAgIDsvL1RPRE8KKyAg
ICB9CisgICAgICAgICAgICAgCit9CisKK3ZvaWQgV01MRG9FbGVtZW50OjppbnNlcnRlZEludG9U
cmVlKGJvb2wgZGVlcCkKK3sKKyAgICBmb3IgKE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsg
cGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICBpZiAocGFy
ZW50LT5oYXNUYWdOYW1lKHRlbXBsYXRlVGFnKSkgeworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
V01MVGVtcGxhdGVFbGVtZW50Kj4ocGFyZW50KS0+cmVnaXN0ZXJEb0VsZW1lbnQodGhpcyk7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUo
Y2FyZFRhZykpIHsKKyAgICAgICAgICAgIHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4ocGFy
ZW50KS0+cmVnaXN0ZXJEb0VsZW1lbnQodGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KK30KKworUmVuZGVyT2JqZWN0KiBXTUxEb0VsZW1lbnQ6OmNyZWF0ZVJlbmRl
cmVyKFJlbmRlckFyZW5hKiByYSwgUmVuZGVyU3R5bGUqIHJzKSAKK3sKKyAgICBpZiAoIW1faXNB
Y3RpdmUgfHwgbV9pc09wdGlvbiB8fCBtX2lzTm9vcCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBSZW5kZXJCdXR0b24qIGJ1dHRvbiA9IG5ldyAocmEpIFJlbmRlckJ1dHRvbih0aGlzKTsgCisg
ICAgcnMtPnNldEJhY2tncm91bmRDb2xvcihDb2xvcjo6bGlnaHRHcmF5KTsKKyAgICBidXR0b24t
PnNldFN0eWxlKHJzKTsKKyAgICBidXR0b24tPnNldFRleHQobV9sYWJlbC5pc0VtcHR5KCkgPyBt
X25hbWUgOiBtX2xhYmVsKTsKKyAgICByZXR1cm4gYnV0dG9uOworfQorCit2b2lkIFdNTERvRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKSAKK3sKKyAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IHR5cGVBdHRyKSB7CisgICAgICAgIGlmIChXTUxIZWxwZXI6
Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6
OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBtX3R5cGUgPSBhdHRy
LT52YWx1ZSgpOworCisgICAgICAgIGlmIChtX25hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAg
bV9uYW1lID0gbV90eXBlOworCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0
dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUo
KSkpIHsKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKElu
dmFsaWRWYXJpYWJsZVJlZmVyZW5jZUVycm9yKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICBtX25hbWUgPSBhdHRyLT52YWx1ZSgpOworICAgIH0gZWxzZSBpZiAoYXR0
ci0+bmFtZSgpID09IGxhYmVsQXR0cikKKyAgICAgICAgbV9sYWJlbCA9IFdNTEhlbHBlcjo6c3Vi
c3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKKyAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gb3B0aW9uYWxBdHRyKQorICAgICAgICBtX2lzT3B0aW9uID0gKGF0dHIt
PnZhbHVlKCkgPT0gInRydWUiID8gdHJ1ZSA6IGZhbHNlKTsKK30KKwordm9pZCBXTUxEb0VsZW1l
bnQ6OnJlZ2lzdGVyVGFzayhXTUxUYXNrRWxlbWVudCogdGFzaykgCit7CisgICAgbV90YXNrID0g
dGFzazsKK30KKwordm9pZCBXTUxEb0VsZW1lbnQ6OnNldE5vb3AoYm9vbCBub29wKSAKK3sKKyAg
ICBtX2lzTm9vcCA9IG5vb3A7Cit9CisKK1N0cmluZyBXTUxEb0VsZW1lbnQ6OmRvTmFtZSgpIGNv
bnN0IAoreworICAgIHJldHVybiBtX25hbWU7Cit9CisKK3ZvaWQgV01MRG9FbGVtZW50OjpzZXRB
Y3RpdmUoYm9vbCBhY3RpdmUpCit7CisgICAgbV9pc0FjdGl2ZSA9IGFjdGl2ZTsKK30KKyAKK2Jv
b2wgV01MRG9FbGVtZW50Ojppc0FjdGl2ZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faXNBY3Rp
dmU7Cit9CisKK2Jvb2wgV01MRG9FbGVtZW50Ojppc0tleWJvYXJkRm9jdXNhYmxlKEtleWJvYXJk
RXZlbnQqKSBjb25zdAoreworICAgIHJldHVybiB0cnVlOworfQorCit9CkluZGV4OiBXZWJDb3Jl
L3dtbC9XTUxEb0VsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxEb0VsZW1l
bnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTERvRWxlbWVudC5oCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDY0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1v
YmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93
d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxEb0VsZW1lbnRfaAorI2RlZmlu
ZSBXTUxEb0VsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFdmVudDsKK2NsYXNzIEhUTUxGb3JtRWxlbWVudDsK
K2NsYXNzIFdNTFRhc2tFbGVtZW50OworCitjbGFzcyBXTUxEb0VsZW1lbnQgOiBwdWJsaWMgSFRN
TEJ1dHRvbkVsZW1lbnQgeworcHVibGljOgorICAgIFdNTERvRWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqLCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CisgICAgdmlydHVhbCB+
V01MRG9FbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogY3JlYXRlUmVuZGVy
ZXIoUmVuZGVyQXJlbmEqLCBSZW5kZXJTdHlsZSopOyAKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisgICAgdmlydHVhbCB2b2lkIGRlZmF1
bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJl
ZShib29sIGRlZXApOworICAgIHZpcnR1YWwgYm9vbCBpc0tleWJvYXJkRm9jdXNhYmxlKEtleWJv
YXJkRXZlbnQqKSBjb25zdDsKKyAgICB2b2lkIHJlZ2lzdGVyVGFzayhXTUxUYXNrRWxlbWVudCop
OworCisgICAgLy9yZWNvcmQgdGhlIG5vb3AgdGFzaworICAgIHZvaWQgc2V0Tm9vcChib29sKTsK
KworICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wpOworICAgIGJvb2wgaXNBY3RpdmUoKSBjb25zdDsK
KyAgICBTdHJpbmcgZG9OYW1lKCkgY29uc3Q7Citwcml2YXRlOgorICAgIFdNTFRhc2tFbGVtZW50
KiBtX3Rhc2s7CisgICAgU3RyaW5nIG1fdHlwZTsKKyAgICBTdHJpbmcgbV9sYWJlbDsKKyAgICBT
dHJpbmcgbV9uYW1lOworICAgIGJvb2wgbV9pc09wdGlvbjsKKyAgICBib29sIG1faXNOb29wOwor
ICAgIGJvb2wgbV9pc0FjdGl2ZTsKK307CisKK30gLy9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MRG9jdW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MRG9jdW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldNTERvY3VtZW50LmgiCisKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVk
ZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01M
VG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworV01MRG9jdW1lbnQ6OldNTERv
Y3VtZW50KEZyYW1lKiBmcmFtZSkKKyAgICA6IERvY3VtZW50KGZyYW1lLCBmYWxzZSkgCit7Cisg
ICAgY2xlYXJYTUxWZXJzaW9uKCk7CisKKyAgICBQYWdlKiBwYWdlID0gdGhpcy0+cGFnZSgpOwor
ICAgIGlmIChwYWdlICYmICFwYWdlLT53bWxQYWdlU3RhdGUoKSkgeworICAgICAgICBSZWZQdHI8
V01MUGFnZVN0YXRlPiBwYWdlU3RhdGUgPSBuZXcgV01MUGFnZVN0YXRlKHBhZ2UpOworICAgICAg
ICBwYWdlLT5zZXRXTUxQYWdlU3RhdGUocGFnZVN0YXRlKTsKKyAgICB9Cit9CisKK1dNTERvY3Vt
ZW50Ojp+V01MRG9jdW1lbnQoKQoreworfQorCitUb2tlbml6ZXIgKldNTERvY3VtZW50OjpjcmVh
dGVUb2tlbml6ZXIoKSAKK3sKKyAgICByZXR1cm4gbmV3IFdNTFRva2VuaXplcih0aGlzKTsKK30K
KworaW5saW5lIGJvb2wgV01MRG9jdW1lbnQ6OmlzV01MRG9jdW1lbnQoKSBjb25zdCAKK3sgCisg
ICAgcmV0dXJuIHRydWU7IAorfQorCit9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxEb2N1bWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTERvY3VtZW50LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxEb2N1bWVudC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxEb2N1bWVudF9oCisjZGVmaW5lIFdNTERvY3Vt
ZW50X2gKKworI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlQ2xpZW50LmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBXTUxEb2N1bWVudCA6IHB1
YmxpYyBEb2N1bWVudCwgcHVibGljIENhY2hlZFJlc291cmNlQ2xpZW50IHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxXTUxEb2N1bWVudD4gY3JlYXRlKEZyYW1lKiBmcmFtZSkKKyAg
ICB7CisgICAgICAgIHJldHVybiBuZXcgV01MRG9jdW1lbnQoZnJhbWUpOworICAgIH0KKyAgICBX
TUxEb2N1bWVudChGcmFtZSopOworICAgIHZpcnR1YWwgfldNTERvY3VtZW50KCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNXTUxEb2N1bWVudCgpIGNvbnN0OworICAgIHZpcnR1YWwgVG9rZW5pemVy
KiBjcmVhdGVUb2tlbml6ZXIoKTsKK307CisKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCklu
ZGV4OiBXZWJDb3JlL3dtbC9XTUxFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dt
bC9XTUxFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEVsZW1lbnQu
Y3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAg
ICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIw
MDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisg
KiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUg
ZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBC
b3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMu
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFn
bWVudC5oIgorI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRN
TERvY3VtZW50LmgiCisjaW5jbHVkZSAiSFRNTEVsZW1lbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAi
SFRNTEZvcm1FbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRN
TFRva2VuaXplci5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgorI2luY2x1ZGUgIlJlbmRlcldvcmRC
cmVhay5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCisjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1
ZGUgIlRleHRJdGVyYXRvci5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MVG9rZW5p
emVyLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxFbGVtZW50OjpXTUxFbGVtZW50KGNv
bnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2MpCisgICAgOiBTdHlsZWRF
bGVtZW50KHRhZ05hbWUsIGRvYykKK3sKK30KKworV01MRWxlbWVudDo6fldNTEVsZW1lbnQoKSAK
K3sKK30KKwordm9pZCBXTUxFbGVtZW50OjppbnNlcnRlZEludG9UcmVlKGJvb2wgZGVlcCkKK3sK
KyAgICBpZiAobG9jYWxOYW1lKCkgPT0gIm5vb3AiKSB7CisgICAgICAgIGZvciAoTm9kZSogcGFy
ZW50ID0gcGFyZW50Tm9kZSgpOyBwYXJlbnQ7IHBhcmVudCA9IHBhcmVudC0+cGFyZW50Tm9kZSgp
KSB7CisgICAgICAgICAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGRvVGFnKSkgeworICAgICAg
ICAgICAgICAgIFdNTERvRWxlbWVudCogZG9FbGVtdCA9IHN0YXRpY19jYXN0PFdNTERvRWxlbWVu
dCo+KHBhcmVudCk7CisgICAgICAgICAgICAgICAgaWYgKGRvRWxlbXQtPmF0dGFjaGVkKCkpIHsK
KyAgICAgICAgICAgICAgICAgICAgZG9FbGVtdC0+ZGV0YWNoKCk7CisgICAgICAgICAgICAgICAg
ICAgIGRvRWxlbXQtPnNldE5vb3AodHJ1ZSk7CisgICAgICAgICAgICAgICAgICAgIGRvRWxlbXQt
PmF0dGFjaCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGFuY2hvclRhZykpCisgICAg
ICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIoKS0+cmVwb3J0RXJyb3IoV3JvbmdUYXNr
SW5BbmNob3JFbGVtZW50RXJyb3IpOworICAgICAgICB9CisgICAgfQorfQorCitSZW5kZXJPYmpl
Y3QqIFdNTEVsZW1lbnQ6OmNyZWF0ZVJlbmRlcmVyKFJlbmRlckFyZW5hKiwgUmVuZGVyU3R5bGUq
IHN0eWxlKSAKK3sKKyAgICByZXR1cm4gUmVuZGVyT2JqZWN0OjpjcmVhdGVPYmplY3QodGhpcywg
c3R5bGUpOworfQorCitib29sIFdNTEVsZW1lbnQ6OmlzSFRNTEVsZW1lbnQoKSBjb25zdCAKK3sg
CisgICAgcmV0dXJuIHRydWU7IAorfQorCit9CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxFbGVtZW50
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MRWxlbWVudC5oCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS93bWwvV01MRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQzIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwor
ICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisg
Ki8KKworI2lmbmRlZiBXTUxFbGVtZW50X2gKKyNkZWZpbmUgV01MRWxlbWVudF9oCisKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlN0eWxlZEVsZW1lbnQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCisgICAgICAgICAgICAgICAgICAgICAgIAorY2xhc3MgV01MRWxlbWVudCA6
IHB1YmxpYyBTdHlsZWRFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MRWxlbWVu
dCgpOworICAgIHZpcnR1YWwgUmVuZGVyT2JqZWN0KiBjcmVhdGVSZW5kZXJlcihSZW5kZXJBcmVu
YSosIFJlbmRlclN0eWxlKik7CisgICAgdmlydHVhbCBib29sIGlzSFRNTEVsZW1lbnQoKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworfTsKKwor
fSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEVsZW1lbnRGYWN0
b3J5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxFbGVtZW50RmFjdG9yeS5jcHAJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50RmFjdG9yeS5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNo
IE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6
Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZ
SU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIldNTEVsZW1lbnRGYWN0b3J5LmgiCisKKyNpbmNsdWRlICJIVE1MQlJFbGVtZW50LmgiCisj
aW5jbHVkZSAiSFRNTEJ1dHRvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNp
bmNsdWRlICJIVE1MVGFibGVDZWxsRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVJvd0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgorI2luY2x1ZGUgIldNTEFjY2Vzc0VsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxBRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEFuY2hvckVsZW1l
bnQuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisj
aW5jbHVkZSAiV01MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFBFbGVtZW50LmgiCisj
aW5jbHVkZSAiV01MUG9zdGZpZWxkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFByZXZFbGVtZW50
LmgiCisjaW5jbHVkZSAiV01MUmVmcmVzaEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRh
YmxlRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRlbXBsYXRlRWxlbWVudC5oIgorI2luY2x1ZGUg
IldNTFRpbWVyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEltYWdlRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTElucHV0RWxlbWVudC5oIgorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwordXNp
bmcgbmFtZXNwYWNlIFdlYkNvcmU7Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6V01MTmFtZXM7
Cit1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTo6SFRNTE5hbWVzOworCit0eXBlZGVmIEVsZW1lbnQg
KigqQ29uc3RydWN0b3JGdW5jKShEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcik7
Cit0eXBlZGVmIFdURjo6SGFzaE1hcDxBdG9taWNTdHJpbmdJbXBsKiwgQ29uc3RydWN0b3JGdW5j
PiBGdW5jdGlvbk1hcDsKKworc3RhdGljIEZ1bmN0aW9uTWFwICpnRnVuY3Rpb25NYXAgPSAwOwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0VsZW1lbnQgKmNhcmRDb25zdHJ1Y3RvcihEb2N1bWVu
dCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTENhcmRF
bGVtZW50KGNhcmRUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKndtbF9hQ29uc3RydWN0b3IoRG9j
dW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxB
RWxlbWVudChXTUxOYW1lczo6YVRhZywgZG9jKTsKK30KKworRWxlbWVudCAqaW1nQ29uc3RydWN0
b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5l
dyBXTUxJbWFnZUVsZW1lbnQoSFRNTE5hbWVzOjppbWdUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQg
KmJyQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7Cisg
ICAgcmV0dXJuIG5ldyBIVE1MQlJFbGVtZW50KGRvYyk7Cit9CisKK0VsZW1lbnQgKnBDb25zdHJ1
Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4g
bmV3IFdNTFBFbGVtZW50KGRvYyk7Cit9CisKK0VsZW1lbnQgKmlucHV0Q29uc3RydWN0b3IoRG9j
dW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxJ
bnB1dEVsZW1lbnQoV01MTmFtZXM6OmlucHV0VGFnLCBkb2MpOworfQorCitFbGVtZW50ICphbmNo
b3JDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAg
ICByZXR1cm4gbmV3IFdNTEFuY2hvckVsZW1lbnQoV01MTmFtZXM6OmFuY2hvclRhZywgZG9jKTsK
K30KKworRWxlbWVudCAqc2VsZWN0Q29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVh
dGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxTZWxlY3RFbGVtZW50KFdNTE5hbWVz
OjpzZWxlY3RUYWcsIGRvYyk7Cit9CisKK0VsZW1lbnQgKm9wdGlvbkNvbnN0cnVjdG9yKERvY3Vt
ZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MT3B0
aW9uRWxlbWVudChkb2MpOworfQorCitFbGVtZW50ICpwcmV2Q29uc3RydWN0b3IoRG9jdW1lbnQg
KmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxQcmV2RWxl
bWVudChkb2MpOworfQorCitFbGVtZW50ICpnb0NvbnN0cnVjdG9yKERvY3VtZW50ICpkb2MsIGJv
b2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MR29FbGVtZW50KFdNTE5h
bWVzOjpnb1RhZywgZG9jKTsKK30KKworRWxlbWVudCAqcG9zdGZpZWxkQ29uc3RydWN0b3IoRG9j
dW1lbnQgKmRvYywgYm9vbCBjcmV0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTFBv
c3RmaWVsZEVsZW1lbnQoV01MTmFtZXM6OnBvc3RmaWVsZFRhZywgZG9jKTsKK30KKworRWxlbWVu
dCAqc2V0dmFyQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBXTUxTZXR2YXJFbGVtZW50KFdNTE5hbWVzOjpzZXR2YXJUYWcs
IGRvYyk7Cit9CisKK0VsZW1lbnQgKnRhYmxlQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9v
bCBjcmVhdGVkQnlQYXJzZXIpCit7CisgICAgcmV0dXJuIG5ldyBXTUxUYWJsZUVsZW1lbnQoZG9j
KTsKK30KKworRWxlbWVudCAqdHJDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0
ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxUYWJsZVJvd0VsZW1lbnQoZG9jKTsK
K30KKworRWxlbWVudCAqdGRDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRC
eVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IEhUTUxUYWJsZUNlbGxFbGVtZW50KEhUTUxOYW1l
czo6dGRUYWcsZG9jKTsKK30KKworRWxlbWVudCAqZG9Db25zdHJ1Y3RvcihEb2N1bWVudCAqZG9j
LCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3IFdNTERvRWxlbWVudChk
b1RhZywgZG9jKTsKK30KKworRWxlbWVudCAqcmVmcmVzaENvbnN0cnVjdG9yKERvY3VtZW50ICpk
b2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyKQoreworICAgIHJldHVybiBuZXcgV01MUmVmcmVzaEVs
ZW1lbnQocmVmcmVzaFRhZywgZG9jKTsKK30KKworRWxlbWVudCAqdGVtcGxhdGVDb25zdHJ1Y3Rv
cihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAgICByZXR1cm4gbmV3
IFdNTFRlbXBsYXRlRWxlbWVudCh0ZW1wbGF0ZVRhZywgZG9jKTsKK30KKworRWxlbWVudCAqdGlt
ZXJDb25zdHJ1Y3RvcihEb2N1bWVudCAqZG9jLCBib29sIGNyZWF0ZWRCeVBhcnNlcikKK3sKKyAg
ICByZXR1cm4gbmV3IFdNTFRpbWVyRWxlbWVudCh0aW1lclRhZywgZG9jKTsKK30KKworRWxlbWVu
dCAqYWNjZXNzQ29uc3RydWN0b3IoRG9jdW1lbnQgKmRvYywgYm9vbCBjcmVhdGVkQnlQYXJzZXIp
Cit7CisgICAgcmV0dXJuIG5ldyBXTUxBY2Nlc3NFbGVtZW50KGFjY2Vzc1RhZywgZG9jKTsKK30K
Kworc3RhdGljIGlubGluZSB2b2lkIGNyZWF0ZUZ1bmN0aW9uTWFwSWZOZWNlc3NhcnkoKQorewor
ICAgIGlmIChnRnVuY3Rpb25NYXApCisgICAgICAgIHJldHVybjsKKyAgICAvLyBDcmVhdGUgdGhl
IHRhYmxlLgorICAgIGdGdW5jdGlvbk1hcCA9IG5ldyBGdW5jdGlvbk1hcDsKKyAgICAKKyAgICAv
LyBQb3B1bGF0ZSBpdCB3aXRoIGNvbnN0cnVjdG9yIGZ1bmN0aW9ucy4KKyAgICBnRnVuY3Rpb25N
YXAtPnNldChXTUxOYW1lczo6Y2FyZFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGNhcmRDb25zdHJ1
Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OmFUYWcubG9jYWxOYW1lKCku
aW1wbCgpLCB3bWxfYUNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChIVE1MTmFt
ZXM6OmltZ1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGltZ0NvbnN0cnVjdG9yKTsKKyAgICBnRnVu
Y3Rpb25NYXAtPnNldChIVE1MTmFtZXM6OmJyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgYnJDb25z
dHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnBUYWcubG9jYWxOYW1l
KCkuaW1wbCgpLCBwQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVz
OjppbnB1dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGlucHV0Q29uc3RydWN0b3IpOworICAgIGdG
dW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjphbmNob3JUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBh
bmNob3JDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnNlbGVj
dFRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHNlbGVjdENvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rp
b25NYXAtPnNldChXTUxOYW1lczo6b3B0aW9uVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgb3B0aW9u
Q29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5hbWVzOjpwcmV2VGFnLmxv
Y2FsTmFtZSgpLmltcGwoKSwgcHJldkNvbnN0cnVjdG9yKTsKKyAgICBnRnVuY3Rpb25NYXAtPnNl
dChXTUxOYW1lczo6Z29UYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBnb0NvbnN0cnVjdG9yKTsKKyAg
ICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6cG9zdGZpZWxkVGFnLmxvY2FsTmFtZSgpLmlt
cGwoKSwgcG9zdGZpZWxkQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1hcC0+c2V0KFdNTE5h
bWVzOjpzZXR2YXJUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCBzZXR2YXJDb25zdHJ1Y3Rvcik7Cisg
ICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnRhYmxlVGFnLmxvY2FsTmFtZSgpLmltcGwo
KSwgdGFibGVDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoSFRNTE5hbWVzOjp0
clRhZy5sb2NhbE5hbWUoKS5pbXBsKCksIHRyQ29uc3RydWN0b3IpOworICAgIGdGdW5jdGlvbk1h
cC0+c2V0KEhUTUxOYW1lczo6dGRUYWcubG9jYWxOYW1lKCkuaW1wbCgpLCB0ZENvbnN0cnVjdG9y
KTsKKyAgICBnRnVuY3Rpb25NYXAtPnNldChXTUxOYW1lczo6cmVmcmVzaFRhZy5sb2NhbE5hbWUo
KS5pbXBsKCksIHJlZnJlc2hDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01M
TmFtZXM6OmRvVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgZG9Db25zdHJ1Y3Rvcik7CisgICAgZ0Z1
bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnRlbXBsYXRlVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwg
dGVtcGxhdGVDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0aW9uTWFwLT5zZXQoV01MTmFtZXM6OnRp
bWVyVGFnLmxvY2FsTmFtZSgpLmltcGwoKSwgdGltZXJDb25zdHJ1Y3Rvcik7CisgICAgZ0Z1bmN0
aW9uTWFwLT5zZXQoV01MTmFtZXM6OmFjY2Vzc1RhZy5sb2NhbE5hbWUoKS5pbXBsKCksIGFjY2Vz
c0NvbnN0cnVjdG9yKTsKK30KKworRWxlbWVudCAqV01MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZVdN
TEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgcU5hbWUsIERvY3VtZW50KiBkb2MsIGJvb2wg
Y3JlYXRlZEJ5UGFyc2VyKQoreworCisgICAgV2ViQ29yZTo6V01MTmFtZXM6OmluaXQoKTsKKyAg
ICAvLyBEb24ndCBtYWtlIGVsZW1lbnRzIHdpdGhvdXQgYSBkb2N1bWVudAorICAgIGlmICghZG9j
KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBjcmVhdGVGdW5jdGlvbk1hcElmTmVjZXNz
YXJ5KCk7CisgICAgQ29uc3RydWN0b3JGdW5jIGZ1bmMgPSBnRnVuY3Rpb25NYXAtPmdldChxTmFt
ZS5sb2NhbE5hbWUoKS5pbXBsKCkpOworICAgIGlmIChmdW5jKQorICAgICAgICByZXR1cm4gZnVu
Yyhkb2MsIGNyZWF0ZWRCeVBhcnNlcik7CisgICAgCisgICAgcmV0dXJuIG5ldyBXTUxFbGVtZW50
KHFOYW1lLCBkb2MpOworfQorCit9IC8vIG5hbWVzcGFjZQorCkluZGV4OiBXZWJDb3JlL3dtbC9X
TUxFbGVtZW50RmFjdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEVsZW1lbnRG
YWN0b3J5LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxFbGVtZW50RmFjdG9yeS5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxFbGVtZW50RmFj
dG9yeV9oCisjZGVmaW5lIFdNTEVsZW1lbnRGYWN0b3J5X2gKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworICAgIGNsYXNzIEVsZW1lbnQ7CisgICAgY2xhc3MgRG9jdW1lbnQ7CisgICAgY2xhc3MgUXVh
bGlmaWVkTmFtZTsKKyAgICBjbGFzcyBBdG9taWNTdHJpbmc7Cit9CisKK25hbWVzcGFjZSBXZWJD
b3JlCit7CisgICAgY2xhc3MgV01MRWxlbWVudDsKKworICAgIC8vIFRoZSBpZGVhIGJlaGluZCB0
aGlzIGNsYXNzIGlzIHRoYXQgdGhlcmUgd2lsbCBldmVudHVhbGx5IGJlIGEgbWFwcGluZyBmcm9t
IG5hbWVzcGFjZSBVUklzIHRvIEVsZW1lbnRGYWN0b3JpZXMgdGhhdCBjYW4gZGlzcGVuc2UKKyAg
ICAvLyBlbGVtZW50cy4gIEluIGEgY29tcG91bmQgZG9jdW1lbnQgd29ybGQsIHRoZSBnZW5lcmlj
IGNyZWF0ZUVsZW1lbnQgZnVuY3Rpb24gKHdpbGwgZW5kIHVwIGJlaW5nIHZpcnR1YWwpIHdpbGwg
YmUgY2FsbGVkLgorICAgIGNsYXNzIFdNTEVsZW1lbnRGYWN0b3J5CisgICAgeworICAgIHB1Ymxp
YzoKKyAgICAgICAgV2ViQ29yZTo6RWxlbWVudCAqY3JlYXRlRWxlbWVudChjb25zdCBXZWJDb3Jl
OjpRdWFsaWZpZWROYW1lJiBxTmFtZSwgV2ViQ29yZTo6RG9jdW1lbnQgKmRvYywgYm9vbCBjcmVh
dGVkQnlQYXJzZXIgPSB0cnVlKTsKKyAgICAgICAgc3RhdGljIEVsZW1lbnQgKmNyZWF0ZVdNTEVs
ZW1lbnQoY29uc3QgV2ViQ29yZTo6UXVhbGlmaWVkTmFtZSYgcU5hbWUsIFdlYkNvcmU6OkRvY3Vt
ZW50ICpkb2MsIGJvb2wgY3JlYXRlZEJ5UGFyc2VyID0gdHJ1ZSk7CisgICAgfTsKK30KKworI2Vu
ZGlmCisKSW5kZXg6IFdlYkNvcmUvd21sL1dNTEdvRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS93bWwvV01MR29FbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21s
L1dNTEdvRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzg4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTEdvRWxlbWVudC5oIgorCisjaW5jbHVkZSAi
Q1NTSGVscGVyLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRl
ci5oIgorI2luY2x1ZGUgIkZvcm1EYXRhLmgiCisjaW5jbHVkZSAiRm9ybURhdGFMaXN0LmgiCisj
aW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIlBhZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIlJlc291cmNlUmVxdWVz
dC5oIgorI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNs
dWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTFBvc3Rm
aWVsZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxTZXR2YXJFbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUaW1lckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3Bh
Y2UgV01MTmFtZXM7Cit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKKwordGVtcGxhdGU8Y2xh
c3MgVCwgc2l6ZV90IG4+IHN0YXRpYyB2b2lkIHJlbW92ZUZyb21WZWN0b3IoVmVjdG9yPFQqLCBu
PiAmIHZlYywgVCogaXRlbSkgCit7CisgICAgc2l6ZV90IHNpemUgPSB2ZWMuc2l6ZSgpOworICAg
IGZvciAoc2l6ZV90IGkgPSAwOyBpICE9IHNpemU7ICsraSkKKyAgICAgICAgaWYgKHZlY1tpXSA9
PSBpdGVtKSB7CisgICAgICAgICAgICB2ZWMucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIH0KK30KKworc3RhdGljIGludCByYW5kb21OdW1iZXIoKQoreworICAgIHN0YXRp
YyBib29sIHJhbmRvbVNlZWRlZCA9IGZhbHNlOworIAorI2lmIFBMQVRGT1JNKERBUldJTikKKyAg
ICBpZiAoIXJhbmRvbVNlZWRlZCkgeworICAgICAgICBzcmFuZG9tZGV2KCk7CisgICAgICAgIHJh
bmRvbVNlZWRlZCA9IHRydWU7CisgICAgfQorICAgIHJldHVybiByYW5kb20oKTsKKyNlbHNlCisg
ICAgaWYgKCFyYW5kb21TZWVkZWQpIHsKKyAgICAgICAgc3JhbmQoc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KHRpbWUoMCkpKTsKKyAgICAgICAgcmFuZG9tU2VlZGVkID0gdHJ1ZTsKKyAgICB9CisgICAg
cmV0dXJuIHJhbmQoKTsKKyNlbmRpZgorfQorIAorLy8gUmV0dXJucyBhIDAtdGVybWluYXRlZCBD
IHN0cmluZyBpbiB0aGUgdmVjdG9yLgorc3RhdGljIHZvaWQgZ2V0VW5pcXVlQm91bmRhcnlTdHJp
bmcoVmVjdG9yPGNoYXI+JiBib3VuZGFyeSkKK3sKKyAgICAvLyBUaGUgUkZDIDIwNDYgc3BlYyBz
YXlzIHRoZSBBbHBoYU51bWVyaWMgY2hhcmFjdGVycyBwbHVzIHRoZSBmb2xsb3dpbmcgY2hhcmFj
dGVycworICAgIC8vIGFyZSBsZWdhbCBmb3IgYm91bmRhcmllczogICcoKStfLC0uLzo9PworICAg
IC8vIEhvd2V2ZXIgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzLCB0aG91Z2ggbGVnYWwsIGNhdXNl
IHNvbWUgc2l0ZXMgdG8gZmFpbDoKKyAgICAvLyAoKSwuLzo9CisgICAgLy8gaHR0cDovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMzNTIKKyAgICBzdGF0aWMgY29uc3QgY2hhciBB
bHBoYU51bWVyaWNFbmNNYXBbNjRdID0KKyAgICB7CisgICAgICAweDQxLCAweDQyLCAweDQzLCAw
eDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorICAgICAgMHg0OSwgMHg0QSwgMHg0QiwgMHg0
QywgMHg0RCwgMHg0RSwgMHg0RiwgMHg1MCwKKyAgICAgIDB4NTEsIDB4NTIsIDB4NTMsIDB4NTQs
IDB4NTUsIDB4NTYsIDB4NTcsIDB4NTgsCisgICAgICAweDU5LCAweDVBLCAweDYxLCAweDYyLCAw
eDYzLCAweDY0LCAweDY1LCAweDY2LAorICAgICAgMHg2NywgMHg2OCwgMHg2OSwgMHg2QSwgMHg2
QiwgMHg2QywgMHg2RCwgMHg2RSwKKyAgICAgIDB4NkYsIDB4NzAsIDB4NzEsIDB4NzIsIDB4NzMs
IDB4NzQsIDB4NzUsIDB4NzYsCisgICAgICAweDc3LCAweDc4LCAweDc5LCAweDdBLCAweDMwLCAw
eDMxLCAweDMyLCAweDMzLAorICAgICAgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywgMHgzOCwgMHgz
OSwgMHgyQiwgMHg0MQorICAgICAgLy8gRklYTUUgPHJkYXI6Ly9wcm9ibGVtLzUyNTI1Nzc+IGdt
YWlsIGRvZXMgbm90IGFjY2VwdCBsZWdhbCBjaGFyYWN0ZXJzIGluIHRoZSBmb3JtIGJvdW5kYXJ5
CisgICAgICAvLyBBcyBzdGF0ZWQgYWJvdmUsIHNvbWUgbGVnYWwgY2hhcmFjdGVycyBjYXVzZSwg
c2l0ZXMgdG8gZmFpbC4gU3BlY2lmaWNhbGx5CisgICAgICAvLyB0aGUgLyBjaGFyYWN0ZXIgd2hp
Y2ggd2FzIHRoZSBsYXN0IGNoYXJhY3RlciBpbiB0aGUgYWJvdmUgYXJyYXkuIEkgaGF2ZQorICAg
ICAgLy8gcmVwbGFjZWQgdGhlIGxhc3QgY2hhcmFjdGVyIHdpdGggYW5vdGhlciBjaGFyYWN0ZXIg
YWxyZWFkeSBpbiB0aGUgYXJyYXkKKyAgICAgIC8vIChub3RpY2UgdGhlIGZpcnN0IGFuZCBsYXN0
IHZhbHVlcyBhcmUgYm90aCAweDQxLCBBKS4gSW5zdGVhZCBvZiBwaWNraW5nCisgICAgICAvLyBh
bm90aGVyIHVuaXF1ZSBsZWdhbCBjaGFyYWN0ZXIgZm9yIGJvdW5kYXJ5IHN0cmluZ3MgdGhhdCwg
YmVjYXVzZSBpdCBoYXMKKyAgICAgIC8vIG5ldmVyIGJlZW4gdGVzdGVkLCBtYXkgb3IgbWF5IG5v
dCBicmVhayBvdGhlciBzaXRlcywgSSBzaW1wbHkKKyAgICAgIC8vIHJlcGxhY2VkIC8gd2l0aCBB
LiAgVGhpcyBtZWFucyBBIGlzIHR3aWNlIGFzIGxpa2VseSB0byBvY2N1ciBpbiBvdXIgYm91bmRh
cnkKKyAgICAgIC8vIHN0cmluZ3MgdGhhbiBhbnkgb3RoZXIgY2hhcmFjdGVyIGJ1dCBJIHRoaW5r
IHRoaXMgaXMgZmluZSBmb3IgdGhlIHRpbWUgYmVpbmcuCisgICAgICAvLyBUaGUgRklYTUUgaGVy
ZSBpcyBhYm91dCByZXN0b3JpbmcgdGhlIC8gY2hhcmFjdGVyIG9uY2UgdGhlIGFmb3JlbWVudGlv
bmVkCisgICAgICAvLyByYWRhciBoYXMgYmVlbiByZXNvbHZlZC4KKyAgICB9OworIAorICAgIC8v
IFN0YXJ0IHdpdGggYW4gaW5mb3JtYXRpdmUgcHJlZml4LgorICAgIGNvbnN0IGNoYXIgYm91bmRh
cnlQcmVmaXhbXSA9ICItLS0tV2ViS2l0Rm9ybUJvdW5kYXJ5IjsKKyAgICBib3VuZGFyeS5hcHBl
bmQoYm91bmRhcnlQcmVmaXgsIHN0cmxlbihib3VuZGFyeVByZWZpeCkpOworIAorICAgIC8vIEFw
cGVuZCAxNiByYW5kb20gN2JpdCBhc2NpaSBBbHBoYU51bWVyaWMgY2hhcmFjdGVycy4KKyAgICBW
ZWN0b3I8Y2hhcj4gcmFuZG9tQnl0ZXM7CisgCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCA0OyAr
K2kpIHsKKyAgICAgICAgaW50IHJhbmRvbW5lc3MgPSByYW5kb21OdW1iZXIoKTsKKyAgICAgICAg
cmFuZG9tQnl0ZXMuYXBwZW5kKEFscGhhTnVtZXJpY0VuY01hcFsocmFuZG9tbmVzcyA+PiAyNCkg
JiAweDNGXSk7CisgICAgICAgIHJhbmRvbUJ5dGVzLmFwcGVuZChBbHBoYU51bWVyaWNFbmNNYXBb
KHJhbmRvbW5lc3MgPj4gMTYpICYgMHgzRl0pOworICAgICAgICByYW5kb21CeXRlcy5hcHBlbmQo
QWxwaGFOdW1lcmljRW5jTWFwWyhyYW5kb21uZXNzID4+IDgpICYgMHgzRl0pOworICAgICAgICBy
YW5kb21CeXRlcy5hcHBlbmQoQWxwaGFOdW1lcmljRW5jTWFwW3JhbmRvbW5lc3MgJiAweDNGXSk7
CisgICAgfQorIAorICAgIGJvdW5kYXJ5LmFwcGVuZChyYW5kb21CeXRlcyk7CisgICAgYm91bmRh
cnkuYXBwZW5kKDApOyAvLyBBZGQgYSAwIGF0IHRoZSBlbmQgc28gd2UgY2FuIHVzZSB0aGlzIGFz
IGEgQy1zdHlsZSBzdHJpbmcuCit9CisKK1dNTEdvRWxlbWVudDo6V01MR29FbGVtZW50KGNvbnN0
IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpCisgICAgOiBXTUxUYXNrRWxl
bWVudCh0YWdOYW1lLCBkb2MpCisgICAgLCBtX2VuY3R5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZv
cm0tdXJsZW5jb2RlZCIpIAorICAgICwgbV9tdWx0aXBhcnQoZmFsc2UpCisgICAgLCBtX3Bvc3Qo
ZmFsc2UpCit7Cit9CisKK1dNTEdvRWxlbWVudDo6fldNTEdvRWxlbWVudCgpCit7Cit9CisKK3Zv
aWQgV01MR29FbGVtZW50OjpyZWdpc3RlclBvc3RmaWVsZEVsZW1lbnQoV01MUG9zdGZpZWxkRWxl
bWVudCogZSkgCit7CisgICAgbV9wb3N0ZmllbGRzLmFwcGVuZChlKTsKK30KKwordm9pZCBXTUxH
b0VsZW1lbnQ6OnJlbW92ZVBvc3RmaWVsZEVsZW1lbnQoV01MUG9zdGZpZWxkRWxlbWVudCogZSkg
Cit7CisgICAgcmVtb3ZlRnJvbVZlY3RvcihtX3Bvc3RmaWVsZHMsIGUpOworfQorCitib29sIFdN
TEdvRWxlbWVudDo6aGFzUG9zdGZpZWxkKCkgY29uc3QgCit7CisgICAgcmV0dXJuICFtX3Bvc3Rm
aWVsZHMuaXNFbXB0eSgpOworfQorCit2b2lkIFdNTEdvRWxlbWVudDo6cGFyc2VFbmN0eXBlKGNv
bnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZS5jb250YWlucygibXVsdGlwYXJ0Iiwg
ZmFsc2UpIHx8IHR5cGUuY29udGFpbnMoImZvcm0tZGF0YSIsIGZhbHNlKSkgeworICAgICAgICBt
X2VuY3R5cGUgPSAibXVsdGlwYXJ0L2Zvcm0tZGF0YSI7CisgICAgICAgIG1fbXVsdGlwYXJ0ID0g
dHJ1ZTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2VuY3R5cGUgPSAiYXBwbGljYXRpb24veC13
d3ctZm9ybS11cmxlbmNvZGVkIjsKKyAgICAgICAgbV9tdWx0aXBhcnQgPSBmYWxzZTsKKyAgICB9
Cit9CisKK3ZvaWQgV01MR29FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUgKmF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBtZXRob2RBdHRyKSB7Cisg
ICAgICAgIGlmIChlcXVhbElnbm9yaW5nQ2FzZShhdHRyLT52YWx1ZSgpLCAicG9zdCIpKQorICAg
ICAgICAgICAgbV9wb3N0ID0gdHJ1ZTsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWxJZ25vcmluZ0Nh
c2UoYXR0ci0+dmFsdWUoKSwgImdldCIpKQorICAgICAgICAgICAgbV9wb3N0ID0gZmFsc2U7Cisg
ICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gZW5jdHlwZUF0dHIpIHsKKyAgICAgICAgU3Ry
aW5nIGVuY3R5cGUgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUoKSwg
ZG9jdW1lbnQoKSk7CisgICAgICAgIHBhcnNlRW5jdHlwZShlbmN0eXBlKTsKKyAgICB9IGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBhY2NlcHRfY2hhcnNldEF0dHIpIHsKKyAgICAgICAgLy8gc3Bh
Y2Ugc2VwYXJhdGVkIGxpc3Qgb2YgY2hhcnNldHMgdGhlIHNlcnZlcmEgYWNjZXB0cyAtIHNlZSBy
ZmMyMDQ1CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVl
KCkpKSB7CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJ
bnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgbV9hY2NlcHRjaGFyc2V0ID0gYXR0ci0+dmFsdWUoKTsKKyAgICB9IGVs
c2UKKyAgICAgICAgV01MRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisK
K1Bhc3NSZWZQdHI8Rm9ybURhdGE+IFdNTEdvRWxlbWVudDo6Zm9ybURhdGEoRnJhbWVMb2FkZXIq
IGxvYWRlciwgY29uc3QgY2hhciogYm91bmRhcnkpIAoreworICAgIFN0cmluZyBzdHIgPSBtX2Fj
Y2VwdGNoYXJzZXQ7CisgICAgc3RyLnJlcGxhY2UoJywnLCAnICcpOworCisgICAgVmVjdG9yPFN0
cmluZz4gY2hhcnNldHM7CisgICAgc3RyLnNwbGl0KCcgJywgY2hhcnNldHMpOworICAgIFRleHRF
bmNvZGluZyBlbmNvZGluZzsKKyAgICBWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0b3IgZW5k
ID0gY2hhcnNldHMuZW5kKCk7CisgICAgZm9yIChWZWN0b3I8U3RyaW5nPjo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBjaGFyc2V0cy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCisgICAgICAgIGlmICgo
ZW5jb2RpbmcgPSBUZXh0RW5jb2RpbmcoKml0KSkuaXNWYWxpZCgpKQorICAgICAgICAgICAgYnJl
YWs7CisKKyAgICBpZiAoIWVuY29kaW5nLmlzVmFsaWQoKSkgeworICAgICAgICBpZiAobG9hZGVy
KQorICAgICAgICAgICAgZW5jb2RpbmcgPSBsb2FkZXItPmVuY29kaW5nKCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIGVuY29kaW5nID0gTGF0aW4xRW5jb2RpbmcoKTsKKyAgICB9CisgCisg
ICAgUmVmUHRyPEZvcm1EYXRhPiByZXN1bHQgPSBGb3JtRGF0YTo6Y3JlYXRlKCk7CisgICAgU3Ry
aW5nIGVuY19zdHJpbmc7CisgCisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtX3Bv
c3RmaWVsZHMuc2l6ZSgpOyBpKyspIHsKKworICAgICAgICBTdHJpbmcgbmFtZSA9IG1fcG9zdGZp
ZWxkc1tpXS0+bmFtZSgpOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBtX3Bvc3RmaWVsZHNbaV0t
PnZhbHVlKCk7CisKKyAgICAgICAgaWYgKCFtX211bHRpcGFydCkgeworICAgICAgICAgICAgaWYg
KCFlbmNfc3RyaW5nLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICBlbmNfc3RyaW5nICs9ICIm
IjsKKworICAgICAgICAgICAgZW5jX3N0cmluZyArPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVu
Y2VzKG1fcG9zdGZpZWxkc1tpXS0+bmFtZSgpKTsgCisgICAgICAgICAgICBlbmNfc3RyaW5nICs9
ICI9IjsKKyAgICAgICAgICAgIGVuY19zdHJpbmcgKz0gZW5jb2RlV2l0aFVSTEVzY2FwZVNlcXVl
bmNlcyhtX3Bvc3RmaWVsZHNbaV0tPnZhbHVlKCkpOyAKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIFN0cmluZyBoc3RyKCItLSIpOworICAgICAgICAgICAgaHN0ciArPSBib3VuZGFyeTsK
KyAgICAgICAgICAgIGhzdHIgKz0gIlxyXG4iOworICAgICAgICAgICAgaHN0ciArPSAiQ29udGVu
dC1EaXNwb3NpdGlvbjogZm9ybS1kYXRhOyBuYW1lPVwiIjsKKyAgICAgICAgICAgIGhzdHIgKz0g
ZW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihuYW1lLmNoYXJh
Y3RlcnMoKSksIG5hbWUubGVuZ3RoKCksIFVSTEVuY29kZWRFbnRpdGllc0ZvclVuZW5jb2RhYmxl
cykuZGF0YSgpOyAKKyAgICAgICAgICAgIGhzdHIgKz0gIlwiIjsKKyAgICAgICAgICAgIGhzdHIg
Kz0gIlxyXG5cclxuIjsKKworICAgICAgICAgICAgLy8gYXBwZW5kIGJvZHkKKyAgICAgICAgICAg
IHJlc3VsdC0+YXBwZW5kRGF0YShoc3RyLmNoYXJhY3RlcnMoKSwgaHN0ci5sZW5ndGgoKSk7CisK
KyAgICAgICAgICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgU3Ry
aW5nIGNzVmFsID0gZW5jb2RpbmcuZW5jb2RlKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
Pih2YWx1ZS5jaGFyYWN0ZXJzKCkpLCB2YWx1ZS5sZW5ndGgoKSwgVVJMRW5jb2RlZEVudGl0aWVz
Rm9yVW5lbmNvZGFibGVzKS5kYXRhKCk7IAorICAgICAgICAgICAgICAgIHJlc3VsdC0+YXBwZW5k
RGF0YShjc1ZhbC5jaGFyYWN0ZXJzKCksIGNzVmFsLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgcmVzdWx0LT5hcHBlbmREYXRhKCJcclxuIiwgMik7CisKKyAgICAgICAg
ICAgIC8vIGFjY29yZGluZyB0byB0aGUgc2VjdGlvbiA5LjUuMSBvZiB3YXAtMTkxLXdtbC0yMDAw
MDIxOS1hLnBkZiwgCisgICAgICAgICAgICAvLyBtYWtlIHRoZSBDb250ZW50LXR5cGUgaGVhZGVy
IGluY2x1ZGUgdGhlIGNoYXJzZXQgcGFyYW1ldGVyCisgICAgICAgICAgICBTdHJpbmcgc3RyID0g
cmVzdWx0LT5mbGF0dGVuVG9TdHJpbmcoKTsKKyAgICAgICAgICAgIGlmICghY2hhcmFjdGVyc0Fy
ZUFsbEFTQ0lJKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSkpIHsKKyAgICAgICAgICAg
ICAgICBtX2VuY3R5cGUgKz0gIjsiOworICAgICAgICAgICAgICAgIG1fZW5jdHlwZSArPSBlbmNv
ZGluZy5uYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IC8vIGVuZCBvZiBm
b3IgKC4uLgorCisgICAgaWYgKG1fbXVsdGlwYXJ0KSB7CisgICAgICAgIGVuY19zdHJpbmcgPSAi
LS0iOworICAgICAgICBlbmNfc3RyaW5nICs9IGJvdW5kYXJ5OworICAgICAgICBlbmNfc3RyaW5n
ICs9ICItLVxyXG4iOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9lbmN0eXBlICs9ICI7IjsK
KyAgICAgICAgbV9lbmN0eXBlICs9IGVuY29kaW5nLm5hbWUoKTsKKyAgICB9CisgCisgICAgcmVz
dWx0LT5hcHBlbmREYXRhKGVuY19zdHJpbmcuY2hhcmFjdGVycygpLCBlbmNfc3RyaW5nLmxlbmd0
aCgpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFdNTEdvRWxlbWVudDo6ZXhlYyhF
dmVudCogZXZ0LCBTdHJpbmcgdXJpKSAKK3sKKyAgICBEb2N1bWVudCogZG9jID0gZG9jdW1lbnQo
KTsKKyAgICBBU1NFUlQoZG9jKTsKKyAgICBBU1NFUlQoZG9jLT5mcmFtZSgpKTsKKyAgICBGcmFt
ZUxvYWRlciogbG9hZGVyPSBkb2MtPmZyYW1lKCktPmxvYWRlcigpOworICAgIFBhZ2UqIHBhZ2Ug
PSBkb2MtPnBhZ2UoKTsKKyAgICBpZiAoIWxvYWRlciB8fCAhcGFnZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgLy8gY29udmVydCB2YXJpYWJsZSBuYW1lcyBhbmQgdmFsdWVzIG9mIHNldHZhciBl
bGVtZW50IGlmIG5lY2Vzc2FyeQorICAgIFZhcmlhYmxlTWFwIG1fdmFyczsKKyAgICBpZiAoaGFz
U2V0dmFyKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7IGkgPCBtX3NldHZh
cnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9zZXR2YXJzW2ldLT5uYW1lKCku
aXNFbXB0eSgpKSAKKyAgICAgICAgICAgICAgICBtX3ZhcnMuc2V0KG1fc2V0dmFyc1tpXS0+bmFt
ZSgpLCBtX3NldHZhcnNbaV0tPnZhbHVlKCkpOworICAgICAgICB9CisgICAgfSAKKworICAgIFdN
TFBhZ2VTdGF0ZSogcGFnZVN0YXRlID0gcGFnZS0+d21sUGFnZVN0YXRlKCk7CisgICAgLy8gdXBk
YXRlIGJyb3dzZXIgY29udGV4dCAKKyAgICBpZiAoIW1fdmFycy5pc0VtcHR5KCkpCisgICAgICAg
IHBhZ2VTdGF0ZS0+c3RvcmVWYXJpYWJsZXMobV92YXJzKTsKKyAKKworICAgIC8vIHN1YnN0aXR1
dGUgdGFyZ2V0IHVyaSBhdHRyaWJ1dGUgdmFsdWUKKyAgICBpZiAodXJpLmlzRW1wdHkoKSkKKyAg
ICAgICAgdXJpID0gZ2V0QXR0cmlidXRlKCJocmVmIik7CisgICAgdXJpID0gV01MSGVscGVyOjpz
dWJzdGl0dXRlVmFyUmVmKHVyaSwgZG9jLCAiZXNjYXBlIik7CisKKyAgICAvLyBzdG9wIHRoZSB0
aW1lciBvZiB0aGUgY3VycmVudCBjYXJkIGlmIGl0IGlzIGFjdGl2ZQorICAgIFdNTENhcmRFbGVt
ZW50KiBjYXJkID0gcGFnZVN0YXRlLT5hY3RpdmVDYXJkKCk7CisgICAgaWYgKGNhcmQgJiYgY2Fy
ZC0+ZXZlbnRUaW1lcigpKQorICAgICAgICBjYXJkLT5ldmVudFRpbWVyKCktPnN0b3AoKTsKKwor
ICAgIC8vIGlmIG5ld2NvbnRleHQgYXR0cmlidXRlIG9mIGRlc3QgY2FyZCBpcyB0cnVlLCByZWlu
aXRpYWxpemUgdGhlIGNvbnRleHQKKyAgICBjYXJkID0gV01MSGVscGVyOjpzZXREZXN0aW5hdGlv
bkNhcmQoZG9jdW1lbnQoKSwgdXJpKTsKKyAgICBpZiAoY2FyZCAmJiBjYXJkLT5pc05ld0NvbnRl
eHQoKSkKKyAgICAgICAgcGFnZVN0YXRlLT5yZXNldCgpOworCisgICAgLy8gcHJlcGFyZSBmb3Ig
bG9hZGluZyB0aGUgZGVzdGluYXRpb24gVVJMCisgICAgUGFzc1JlZlB0cjxGb3JtRGF0YT4gZGF0
YSA9IDA7CisgICAgS1VSTCB1cmwgPSBkb2MtPmNvbXBsZXRlVVJMKHVyaS5pc0VtcHR5KCkgPyAi
IiA6IHVyaSk7CisgICAgUmVzb3VyY2VSZXF1ZXN0IHJlcSh1cmwpOworICAgIEtVUkwgZG9jVXJs
ID0gZG9jLT5jb21wbGV0ZVVSTChkb2MtPmRvY3VtZW50VVJJKCkpOworICAgIGJvb2wgaW5TYW1l
RGVjayA9IGRvY1VybC5wYXRoKCkgPT0gdXJsLnBhdGgoKTsgCisKKworICAgIFN0cmluZyBzZW5k
cmVmZXJlciA9IGdldEF0dHJpYnV0ZSgic2VuZHJlZmVyZXIiKTsKKyAgICBpZiAoc2VuZHJlZmVy
ZXIgPT0gInRydWUiKSB7CisgICAgICAgIHNlbmRyZWZlcmVyID0gdXJpOworICAgICAgICByZXEu
c2V0SFRUUFJlZmVycmVyKHNlbmRyZWZlcmVyKTsKKyAgICB9CisKKyAgICBTdHJpbmcgY2FjaGVD
dHJsID0gZ2V0QXR0cmlidXRlKCJjYWNoZV9jb250cm9sIik7CisKKyAgIGlmIChtX3Bvc3QpIHsg
Ly8gUE9TVAorCisgICAgICAgaWYgKGluU2FtZURlY2sgJiYgKGNhY2hlQ3RybCAhPSAibm8tY2Fj
aGUiKSkgLy9pZ25vcmUgYWxsIHBvc3RmaWVsZCBlbGVtZW50cworICAgICAgICAgICAgcmVxLnNl
dENhY2hlUG9saWN5KFJldHVybkNhY2hlRGF0YURvbnRMb2FkKTsKKyAgICAgICBlbHNlIHsKKwor
ICAgICAgICAgICBpZiAobV9tdWx0aXBhcnQpIHsgLy8gbXVsdGlwYXJ0L2Zvcm0tZGF0YQorICAg
ICAgICAgICAgICAgIFZlY3RvcjxjaGFyPiBib3VuZGFyeTsKKyAgICAgICAgICAgICAgICBnZXRV
bmlxdWVCb3VuZGFyeVN0cmluZyhib3VuZGFyeSk7CisgICAgICAgICAgICAgICAgZGF0YSA9IGZv
cm1EYXRhKGxvYWRlciwgYm91bmRhcnkuZGF0YSgpKTsKKyAgICAgICAgICAgICAgICByZXEuc2V0
SFRUUENvbnRlbnRUeXBlKG1fZW5jdHlwZSArICI7IGJvdW5kYXJ5PSIgKyBib3VuZGFyeS5kYXRh
KCkpOworICAgICAgICAgICB9IGVsc2UgeyAgLy90ZXh0L3BsYWluIG9yIGFwcGxpY2F0aW9uL3gt
d3d3LWZvcm0tdXJsZW5jb2RlZAorICAgICAgICAgICAgICAgIGRhdGEgPSBmb3JtRGF0YShsb2Fk
ZXIsIDApOworICAgICAgICAgICAgICAgIHJlcS5zZXRIVFRQQ29udGVudFR5cGUobV9lbmN0eXBl
KTsKKyAgICAgICAgICAgfQorCisgICAgICAgICAgIHJlcS5zZXRIVFRQQm9keShkYXRhLmdldCgp
KTsKKyAgICAgICB9CisKKyAgICAgICByZXEuc2V0SFRUUE1ldGhvZCgiUE9TVCIpOworCisgICB9
IGVsc2UgeyAgIC8vIEdFVAorCisgICAgICAgIGlmIChtX211bHRpcGFydCkKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAoaW5TYW1lRGVjaykKKyAgICAgICAgICAgIHJlcS5zZXRD
YWNoZVBvbGljeShSZXR1cm5DYWNoZURhdGFEb250TG9hZCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgU3RyaW5nIHN0cjsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyBpIDwgbV9wb3N0ZmllbGRzLnNpemUoKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgaWYgKCFz
dHIuaXNFbXB0eSgpKSAKKyAgICAgICAgICAgICAgICAgICAgc3RyICs9ICImIjsgICAgICAgIAor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHN0ciArPSBlbmNvZGVXaXRoVVJMRXNj
YXBlU2VxdWVuY2VzKG1fcG9zdGZpZWxkc1tpXS0+bmFtZSgpKTsKKyAgICAgICAgICAgICAgICBz
dHIgKz0gIj0iOworICAgICAgICAgICAgICAgIHN0ciArPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2Vx
dWVuY2VzKG1fcG9zdGZpZWxkc1tpXS0+dmFsdWUoKSk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHVybC5zZXRRdWVyeShzdHIpOworICAgICAgICAgICAgcmVxLnNldFVSTCh1cmwpOwor
ICAgICAgICB9CisKKyAgICAgICAgcmVxLnNldEhUVFBNZXRob2QoIkdFVCIpOworCisgICB9CisK
KyAgICAvLyBzZXQgSFRUUCBjYWNoZS1jb250cm9sIGhlYWRlciBpZiBuZWVkZWQKKyAgICBpZiAo
IWNhY2hlQ3RybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgcmVxLnNldEhUVFBIZWFkZXJGaWVsZCgi
Y2FjaGUtY29udHJvbCIsIGNhY2hlQ3RybCk7CisgICAgICAgIGlmIChjYWNoZUN0cmwgPT0gIm5v
LWNhY2hlIikKKyAgICAgICAgICAgIHJlcS5zZXRDYWNoZVBvbGljeShSZWxvYWRJZ25vcmluZ0Nh
Y2hlRGF0YSk7CisgICAgfQorCisgICAgbG9hZGVyLT5sb2FkKHJlcSk7Cit9CisKK30KKwpJbmRl
eDogV2ViQ29yZS93bWwvV01MR29FbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MR29FbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxHb0VsZW1lbnQu
aAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAg
ICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICog
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVy
YWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZp
bGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9z
dG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MR29FbGVtZW50
X2gKKyNkZWZpbmUgV01MR29FbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxDb2xsZWN0aW9uLmgi
CisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBFdmVudDsKK2NsYXNzIEZvcm1EYXRhOworY2xhc3MgRnJhbWVMb2FkZXI7CitjbGFzcyBX
TUxDYXJkRWxlbWVudDsKK2NsYXNzIFdNTFBvc3RmaWVsZEVsZW1lbnQ7CisgICAgICAgICAgICAg
ICAgICAgICAgIAorY2xhc3MgV01MR29FbGVtZW50IDogcHVibGljIFdNTFRhc2tFbGVtZW50IHsK
K3B1YmxpYzoKKyAgICBXTUxHb0VsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYyk7CisgICAgdmlydHVhbCB+V01MR29FbGVtZW50KCk7CisgIAorICAgIHZp
cnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2
aXJ0dWFsIHZvaWQgZXhlYyhFdmVudCosIFN0cmluZyk7CisKKyAgICB2b2lkIHJlZ2lzdGVyUG9z
dGZpZWxkRWxlbWVudChXTUxQb3N0ZmllbGRFbGVtZW50Kik7CisgICAgdm9pZCByZW1vdmVQb3N0
ZmllbGRFbGVtZW50KFdNTFBvc3RmaWVsZEVsZW1lbnQqKTsKKyAgICBib29sIGhhc1Bvc3RmaWVs
ZCgpIGNvbnN0OworCitwcml2YXRlOgorICAgIFBhc3NSZWZQdHI8Rm9ybURhdGE+IGZvcm1EYXRh
KEZyYW1lTG9hZGVyKiwgY29uc3QgY2hhciopOworICAgIHZvaWQgcGFyc2VFbmN0eXBlKGNvbnN0
IFN0cmluZyYpOworCisgICAgVmVjdG9yPFdNTFBvc3RmaWVsZEVsZW1lbnQqPiBtX3Bvc3RmaWVs
ZHM7CisgICAgU3RyaW5nIG1fZW5jdHlwZTsKKyAgICBTdHJpbmcgbV9hY2NlcHRjaGFyc2V0Owor
ICAgIGJvb2wgbV9tdWx0aXBhcnQgOiAxOworICAgIGJvb2wgbV9wb3N0IDogMTsKK307CisKK30g
Ly9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxIZWxwZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTEhlbHBlci5jcHAJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3dtbC9XTUxIZWxwZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyOSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAq
IENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRv
CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiS1VSTC5oIgor
I2luY2x1ZGUgIk5hbWVkQXR0ck1hcC5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVk
ZSAiUGFnZS5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgor
I2luY2x1ZGUgIldNTFBhZ2VTdGF0ZS5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJ3dGYvQVNDSUlDVHlwZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dNTFRva2VuaXplciogV01MSGVscGVyOjpzX3Rva2Vu
aXplciA9IDA7CisKK1dNTFRva2VuaXplciogV01MSGVscGVyOjp0b2tlbml6ZXIoKQoreworICAg
IHJldHVybiBzX3Rva2VuaXplcjsKK30KKwordm9pZCBXTUxIZWxwZXI6OnNldFRva2VuaXplcihX
TUxUb2tlbml6ZXIqIHRva2VuaXplcikKK3sKKyAgICBzX3Rva2VuaXplciA9IHRva2VuaXplcjsK
K30KKworc3RhdGljIGJvb2wgaXNWYWxpZEZvclZhcmlhYmxlKFVDaGFyIGNoKSAKK3sKKyAgICBj
aGFyIGEgPSBzdGF0aWNfY2FzdDxjaGFyPihjaCk7CisgICAgcmV0dXJuIChXVEY6OmlzQVNDSUlB
bHBoYShhKSB8fCBXVEY6OmlzQVNDSUlEaWdpdChhKSB8fCBhID09ICdfJyk7Cit9CisgCitib29s
IFdNTEhlbHBlcjo6aXNWYWxpZFZhcmlhYmxlTmFtZShjb25zdCBTdHJpbmcmIHZhck5hbWUsIGJv
b2wgaXNWYXJSZWYpCit7CisgICAgYm9vbCBpc1ZhbGlkID0gZmFsc2U7CisgICAgVUNoYXIgY2gg
PSB2YXJOYW1lWzBdOworCisgICAgU3RyaW5nIHJlZkNoYXJzID0gIigpOiQiOworICAgIGlmIChp
c1ZhclJlZikKKyAgICAgICAgaXNWYWxpZCA9ICgocmVmQ2hhcnMuZmluZChjaCkgIT0gLTEpIHx8
IGNoID09ICdfJyB8fCBXVEY6OmlzQVNDSUlBbHBoYShzdGF0aWNfY2FzdDxjaGFyPihjaCkpKTsK
KyAgICBlbHNlCisgICAgICAgIGlzVmFsaWQgPSAoY2ggPT0gJ18nIHx8IFdURjo6aXNBU0NJSUFs
cGhhKHN0YXRpY19jYXN0PGNoYXI+KGNoKSkpOworCisgICAgaWYgKGlzVmFsaWQpIHsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpPTE7IGk8dmFyTmFtZS5sZW5ndGgoKTsgKytpKSB7CisgICAgICAg
ICAgICBpZiAoaXNWYXJSZWYpCisgICAgICAgICAgICAgICAgaXNWYWxpZCA9ICgocmVmQ2hhcnMu
ZmluZCh2YXJOYW1lW2ldKSAhPSAtMSkgfHwgaXNWYWxpZEZvclZhcmlhYmxlKHZhck5hbWVbaV0p
KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBpc1ZhbGlkID0gaXNWYWxpZEZv
clZhcmlhYmxlKHZhck5hbWVbaV0pOworCisgICAgICAgICAgICBpZiAoIWlzVmFsaWQpCisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gaXNWYWxp
ZDsKK30KKworYm9vbCBXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGNvbnN0IFN0cmluZyYgdGV4
dCkKK3sKKyAgICBib29sIGhhc1ZhclJlZiA9IGZhbHNlOworICAgIGludCBzdGFydFBvcyA9IHRl
eHQuZmluZCgnJCcpOworICAgIGlmIChzdGFydFBvcyAhPSAtMSkgeworICAgICAgICB1bnNpZ25l
ZCBlbmRQb3MgPSBzdGFydFBvcyArIDE7CisgICAgICAgIHdoaWxlICh0ZXh0W2VuZFBvc10gPT0g
JyQnKQorICAgICAgICAgICAgZW5kUG9zKys7CisKKyAgICAgICAgaWYgKCgoZW5kUG9zLXN0YXJ0
UG9zKSAlIDIpICE9IDApCisgICAgICAgICAgICBoYXNWYXJSZWYgPSB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBoYXNWYXJSZWY7Cit9CisKK3N0YXRpYyBpbnQgdmFyaWFibGVFbmRzQXQoY29u
c3QgU3RyaW5nJiB2YXJpYWJsZSkgCit7CisgICAgLy8gd2UgYXNzdW1lIHRoZSB2YXJpYWJsZSBz
dGFydHMgd2l0aCAiJCIgLCBhbmQgdGhlbiBmb2xsb3dzIHdpdGggYXQgbGVhc3Qgb25lIHF1YWxp
ZmllZCBjaGFyYWN0ZXIgZm9yIHZhcmlhYmxlIG5hbWUsIG90aGVyd2lzZSwgbm90IGEgdmFsaWQg
dmFyaWFibGUKKyAgICBpZiAoKHZhcmlhYmxlWzBdICAhPSAnJCcpIHx8IFdURjo6aXNBU0NJSURp
Z2l0KHZhcmlhYmxlWzFdKSB8fCAhaXNWYWxpZEZvclZhcmlhYmxlKHZhcmlhYmxlWzFdKSkKKyAg
ICAgICAgcmV0dXJuIC0xOworICAgIGludCBwb3MgPSAtMTsKKyAgICBmb3IgKHBvcyA9IDE7IHBv
cyA8IHN0YXRpY19jYXN0PGludD4odmFyaWFibGUubGVuZ3RoKCkpOyBwb3MrKykgeworICAgICAg
ICBpZiAoIWlzVmFsaWRGb3JWYXJpYWJsZSh2YXJpYWJsZVtwb3NdKSkKKyAgICAgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICByZXR1cm4gcG9zOworfQorIAorc3RhdGljIGJvb2wgaGFzTmFtZUF0
dHJpYnV0ZVdpdGhWYWx1ZShOb2RlICpub2RlLCBjb25zdCBTdHJpbmcmIHZhbHVlKSAKK3sKKyAg
ICBOYW1lZEF0dHJNYXAgKmF0dHJzID0gbm9kZS0+YXR0cmlidXRlcygpOworICAgIGlmICghYXR0
cnMpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBlbHNlIHsKKyAgICAgICAgQXR0cmlidXRl
KiBhdHRyID0gYXR0cnMtPmdldEF0dHJpYnV0ZUl0ZW0oV01MTmFtZXM6Om5hbWVBdHRyKTsKKyAg
ICAgICAgaWYgKCFhdHRyKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1
cm4gKGF0dHItPnZhbHVlKCkgPT0gdmFsdWUpID8gdHJ1ZSA6IGZhbHNlOworICAgIH0KK30KKwor
dm9pZCBXTUxIZWxwZXI6OmNvbnZlcnRWYXJJZk5lZWRlZChTdHJpbmcmIHZhciwgU3RyaW5nJiBj
b252KSAKK3sKKyAgICBpZiAoY29udi5pc0VtcHR5KCkgfHwgdmFyLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuOyAKKworICAgIFN0cmluZyByZXN1bHQ7CisgICAgU3RyaW5nIGNvbnZlciA9IGNv
bnYubG93ZXIoKTsKKyAgICBpZiAoKGNvbnZlciA9PSAiZSIpIHx8IChjb252ZXIgPT0gImVzY2Fw
ZSIpKQorICAgICAgICByZXN1bHQgPSBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKHZhcik7
CisgICAgZWxzZSBpZiAoKGNvbnZlciA9PSAidSIpIHx8IChjb252ZXIgPT0gInVuZXNjIikpCisg
ICAgICAgIHJlc3VsdCA9IGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyh2YXIpOworICAgIGVsc2Ug
aWYgKChjb252ZXIgPT0gIm4iKSB8fCAoY29udmVyID09ICJub2VzYyIpKQorICAgICAgICA7Ly8g
ZG8gbm90aGluZworCisgICAgaWYgKCFyZXN1bHQuaXNFbXB0eSgpKQorICAgICAgICB2YXIgPSBy
ZXN1bHQ7Cit9CisKK1N0cmluZyBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoY29uc3QgU3Ry
aW5nJiB2YXJSZWYsIE5vZGUqIGRvY3VtZW50LCBTdHJpbmcgZXNjYXBlKSAKK3sKKyAgICBpZiAo
dmFyUmVmLmlzRW1wdHkoKSB8fCAhZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5pc0RvY3VtZW50Tm9k
ZSgpKSB7CisgICAgICAgIHJldHVybiB2YXJSZWY7CisgICAgfQorCisgICAgU3RyaW5nIG9yaWcg
PSB2YXJSZWY7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBTdHJpbmcgdmFyaWFibGU7CisgICAg
U3RyaW5nIGNvbnY7CisgCisgICAgYm9vbCBoYXNFcnJvciA9IGZhbHNlOworICAgIHdoaWxlICgh
b3JpZy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaW50IHN0YXJ0ID0gb3JpZy5maW5kKCIkIik7Cisg
ICAgICAgIGlmIChzdGFydCA9PSAtMSkgeyAgLy9pdCdzIG5vdCBhIHZhcmlhYmxlIHJlZmVyZW5j
ZSwgb2shCisgICAgICAgICAgICByZXN1bHQgKz0gb3JpZzsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisgICAgICAgIHJlc3VsdCArPSBvcmlnLmxlZnQoc3RhcnQpOworICAgICAgICBv
cmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0aCgpIC0gc3RhcnQpOworIAorICAgICAgICAvLyBj
aGVjayB0aGUgZG91YmxlICckJyBzaWduICwgc2tpcCB0aGVtIG92ZXIKKyAgICAgICAgaWYgKG9y
aWdbMV0gPT0gJyQnKSB7CisgICAgICAgICAgICByZXN1bHQgKz0gIiQiOworICAgICAgICAgICAg
b3JpZyA9IG9yaWcucmlnaHQob3JpZy5sZW5ndGgoKSAtIDIpOworICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIH0KKyAKKyAgICAgICAgaW50IGVuZCA9IDA7CisgICAgICAgIGlmIChvcmln
WzFdID09ICcoJykgeworICAgICAgICAgICAgZW5kID0gb3JpZy5maW5kKCIpIik7CisgICAgICAg
ICAgICBpZiAoZW5kID09IC0xKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG9yaWc7ICAg
Ly8gaWYgd2UgZmluZCAiJCgiIGJ1dCBubyAiKSIsIHN0b3AgcGFyc2luZworICAgICAgICAgICAg
ICAgIGhhc0Vycm9yID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyaWFibGUgPSBvcmlnLnN1YnN0cmluZygyLCBl
bmQtMik7CisgICAgICAgICAgICAgICAgLy8gc2VhcmNoIGNvbnZlcnNpb24gc3RyaW5nCisgICAg
ICAgICAgICAgICAgaW50IHBvcyA9IHZhcmlhYmxlLmZpbmQoJzonKTsKKyAgICAgICAgICAgICAg
ICBpZiAocG9zICE9IC0xKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnYgPSB2YXJpYWJsZS5z
dWJzdHJpbmcocG9zICsgMSwgdmFyaWFibGUubGVuZ3RoKCkgLSBwb3MgLSAxKTsKKyAgICAgICAg
ICAgICAgICAgICAgdmFyaWFibGUgPSB2YXJpYWJsZS5sZWZ0KHBvcyk7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIGhlcmUgd2Ugc2hvdWxk
IGNoZWNrIGlmIHRoZSB2YXJpYWJsZSBuYW1lIGlzIHZhbGlkCisgICAgICAgICAgICAgICAgaWYg
KGhhc0Vycm9yID0gIWlzVmFsaWRWYXJpYWJsZU5hbWUodmFyaWFibGUpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIG9yaWcgPSBvcmlnLnJpZ2h0KG9yaWcu
bGVuZ3RoKCkgLSBlbmQgLSAxICk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBlbmQgPSB2YXJpYWJsZUVuZHNBdChvcmlnKTsKKyAgICAgICAgICAgIGlmIChl
bmQgPCAxKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG9yaWcubGVmdCgyKTsKKyAgICAg
ICAgICAgICAgICBvcmlnID0gb3JpZy5yaWdodChvcmlnLmxlbmd0aCgpIC0gMik7CisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB2YXJpYWJsZSA9
IG9yaWcuc3Vic3RyaW5nKDEsIGVuZCAtIDEpOworICAgICAgICAgICAgb3JpZyA9IG9yaWcucmln
aHQob3JpZy5sZW5ndGgoKSAtIGVuZCApOworICAgICAgICB9CisgCisgICAgICAgIC8vIHRyYXZl
cnNlIHRoZSB3aG9sZSBET00gdHJlZSB0byBzdWJzdGl0dXRlIHRoZSB2YXJpYWJsZSByZWZlcmVu
Y2UKKyAgICAgICAgYm9vbCBpc0RvbmUgPSBmYWxzZTsKKyAgICAgICAgU3RyaW5nIGNvbnZWYXI7
CisgICAgICAgIE5vZGUqIG5vZGUgPSBkb2N1bWVudDsgCisgICAgICAgIHdoaWxlICgobm9kZSA9
IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUoKSkpIHsKKyAgICAgICAgICAgIGlmIChoYXNOYW1lQXR0
cmlidXRlV2l0aFZhbHVlKG5vZGUsIHZhcmlhYmxlKSkgeworICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpzZXR2YXJUYWcpKSB7CisgICAgICAgICAgICAgICAg
ICAgIFdNTFNldHZhckVsZW1lbnQqIHNldHZhciA9IHN0YXRpY19jYXN0PFdNTFNldHZhckVsZW1l
bnQqPihub2RlKTsKKyAgICAgICAgICAgICAgICAgICAgY29udlZhciA9IHNldHZhci0+Z2V0QXR0
cmlidXRlKCJ2YWx1ZSIpOworICAgICAgICAgICAgICAgICAgICBpc0RvbmUgPSB0cnVlOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAKKyAgICAgICAgLy8gdHJ5IHRvIGdldCB2YXJpYWJsZSBzdWJzdGl0dXRl
IGZyb20gY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICAgICAgaWYgKCFpc0RvbmUpIHsKKyAg
ICAgICAgICAgIFBhZ2UqIHBhZ2UgPSAoc3RhdGljX2Nhc3Q8RG9jdW1lbnQqPihkb2N1bWVudCkp
LT5wYWdlKCk7CisgICAgICAgICAgICBpZiAoIXBhZ2UpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHZhclJlZjsKKworICAgICAgICAgICAgQVNTRVJUKHBhZ2UtPndtbFBhZ2VTdGF0ZSgpKTsKKyAg
ICAgICAgICAgIGNvbnZWYXIgPSBwYWdlLT53bWxQYWdlU3RhdGUoKS0+Z2V0VmFyaWJhbGUodmFy
aWFibGUpOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKCFjb252VmFyLmlzRW1wdHkoKSkg
eworCisgICAgICAgICAgICBpZiAoY29udlZhci5jb250YWlucygiJCgiKSkgeworICAgICAgICAg
ICAgICAgIGNvbnZWYXIgPSBzdWJzdGl0dXRlVmFyUmVmKGNvbnZWYXIsIGRvY3VtZW50KTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYg
KGNvbnYuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIGNvbnYgPSBlc2NhcGU7CisgICAgICAg
ICAgICBjb252ZXJ0VmFySWZOZWVkZWQoY29udlZhciwgY29udik7CisgICAgICAgICAgICByZXN1
bHQgKz0gY29udlZhcjsgCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAKKyAKKyAgICB9
IC8vIGVuZCBvZiB3aGlsZSAoIW9yaWcuaXNFbXB0eSgpKSAKKyAKKyAgICBpZiAoaGFzRXJyb3Ig
JiYgV01MSGVscGVyOjp0b2tlbml6ZXIoKSkKKyAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIo
KS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworCisgICAgcmV0
dXJuIHJlc3VsdC5pc0VtcHR5KCkgPyB2YXJSZWYgOiByZXN1bHQ7Cit9IAorCisvLyBBY2NvcmRp
bmcgdG8gdGhlIHNlY3Rpb24gNS4yIGFuZCAxMi41LjEgaW4gdGhlIHdtbCBzcGVjOiB3YXAtMTkx
LXdtbC0yMDAwMDIxOS1hLnBkZgorLy8gdGhlIGRlc3RpbmF0aW9uIGNhcmQgY2FuIGJlIHNwZWNp
ZmllZCBpbiB0aGUgZm9sbG93aW5nIGNhc2U6CisvLyAxLCB1c2UgZnJhZ21lbnQgYW5jaG9yIHdo
aWNoIGlzIHNwZWNpZmllZCBieSB0aGUgZG9jdW1lbnQgVVJMLCBmb2xsb3dlZCB3aXRoICcjJwor
Ly8gMiwgaWYgbm8gZnJhZ21lbnQgaXMgc3BlY2lmZWQgb3IgdGhlIGZyYWdtZW50IG5hbWUgaXMg
d3JvbmcsIHRoZSBmaXJzdCBjYXJkIGlzIHRoZSBkZXN0IGNhcmQuCitXTUxDYXJkRWxlbWVudCog
V01MSGVscGVyOjpzZXREZXN0aW5hdGlvbkNhcmQoUmVmUHRyPERvY3VtZW50PiBkb2MsIFN0cmlu
ZyB1cmkpIAoreworICAgIGlmICghZG9jIHx8ICFkb2MtPnBhZ2UoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisKKyAgICBQYWdlKiBwYWdlID0gZG9jLT5wYWdlKCk7CisKKyAgICBpZiAodXJpLmlzRW1w
dHkoKSkKKyAgICAgICAgdXJpID0gZG9jLT5kb2N1bWVudFVSSSgpOworICAgICAgICAKKyAgICBX
TUxDYXJkRWxlbWVudCogY2FyZCA9IDA7CisgICAgYm9vbCBmb3VuZERlc3RDYXJkID0gZmFsc2U7
CisgICAgUGFzc1JlZlB0cjxOb2RlTGlzdD4gbmwgPSBkb2MtPmdldEVsZW1lbnRzQnlUYWdOYW1l
KCJjYXJkIik7CisgICAgaWYgKG5sLmdldCgpLT5sZW5ndGgoKSA8PSAwKQorICAgICAgICByZXR1
cm4gY2FyZDsKKworICAgIC8vaGlkZSBhbGwgdGhlIGNhcmRzIHByZXZpb3VzbHkgCisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaTwgbmwuZ2V0KCktPmxlbmd0aCgpOyBpKyspIHsKKyAgICAgICAg
Y2FyZCA9IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4obmwuZ2V0KCktPml0ZW0oaSkpOwor
ICAgICAgICBjYXJkLT5zZXRWaXNpYmlsaXR5KGZhbHNlKTsKKyAgICB9CisKKyAgICBpbnQgaWR4
ID0gdXJpLmZpbmQoJyMnKTsKKyAgICBpZiAoaWR4ID49IDApIHsKKyAgICAgICAgU3RyaW5nIGF0
dHJJRDsKKyAgICAgICAgU3RyaW5nIGZyYWdtZW50ID0gdXJpLnN1YnN0cmluZyhpZHggKyAxKTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbmwuZ2V0KCktPmxlbmd0aCgpLTE7IGkgPiAwOyBp
LS0pIHsKKyAgICAgICAgICAgIGNhcmQgPSBzdGF0aWNfY2FzdDxXTUxDYXJkRWxlbWVudCo+KG5s
LmdldCgpLT5pdGVtKGkpKTsKKyAgICAgICAgICAgIGF0dHJJRCA9IGNhcmQtPmdldEF0dHJpYnV0
ZSgiaWQiKTsKKyAgICAgICAgICAgIGlmIChhdHRySUQgPT0gZnJhZ21lbnQpIHsKKyAgICAgICAg
ICAgICAgICAvL2ZvcmNlIGZyYW1lIGxvYWRlciB0byBsb2FkIHRoZSBVUkwgd2l0aCBmcmFnbWVu
dCBpZGVudGlmaWVyCisgICAgICAgICAgICAgICAgcGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigp
LT5zZXRGb3JjZVJlbG9hZFdtbERlY2sodHJ1ZSk7CisgICAgICAgICAgICAgICAgY2FyZC0+c2V0
VmlzaWJpbGl0eSh0cnVlKTsKKyAgICAgICAgICAgICAgICBmb3VuZERlc3RDYXJkID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICghZm91bmREZXN0Q2FyZCkgeworICAgICAgICBjYXJkID0gc3RhdGljX2Nhc3Q8
V01MQ2FyZEVsZW1lbnQqPihubC5nZXQoKS0+aXRlbSgwKSk7CisgICAgICAgIGNhcmQtPnNldFZp
c2liaWxpdHkodHJ1ZSk7CisgICAgfQorCisgICAgLy8gdXBkYXRlIHRoZSBkb2N1bWVudCdzIHRp
dGxlCisgICAgZG9jLT5zZXRUaXRsZShjYXJkLT50aXRsZSgpKTsKKworICAgIC8vIHNldCB0aGUg
YXRpdmUgY2FyZCBpbiB0aGUgY3VycmVudCBicm93c2VyIGNvbnRleHQKKyAgICBwYWdlLT53bWxQ
YWdlU3RhdGUoKS0+c2V0QWN0aXZlQ2FyZChjYXJkKTsKKworICAgIHJldHVybiBjYXJkOworfQor
Cit2b2lkIFdNTEhlbHBlcjo6cmVnaXN0ZXJUZW1wbGF0ZVRvQ2FyZHMoRG9jdW1lbnQqIGRvYykK
K3sKKyAgICBpZiAoIWRvYykKKyAgICAgICAgcmV0dXJuOworCisgICAgV01MQ2FyZEVsZW1lbnQq
IGNhcmQgPSAwOworICAgIFBhc3NSZWZQdHI8Tm9kZUxpc3Q+IGxpc3QgPSBkb2MtPmdldEVsZW1l
bnRzQnlUYWdOYW1lKCJ0ZW1wbGF0ZSIpOworICAgIFdNTFRlbXBsYXRlRWxlbWVudCogdGVtcGwg
PSBzdGF0aWNfY2FzdDxXTUxUZW1wbGF0ZUVsZW1lbnQqPihsaXN0LmdldCgpLT5pdGVtKDApKTsK
KyAgICBpZiAodGVtcGwpIHsKKyAgICAgICAgbGlzdCA9IGRvYy0+Z2V0RWxlbWVudHNCeVRhZ05h
bWUoImNhcmQiKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaT0wOyBpIDwgbGlzdC5nZXQo
KS0+bGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgY2FyZCA9IHN0YXRpY19jYXN0PFdNTENh
cmRFbGVtZW50Kj4obGlzdC5nZXQoKS0+aXRlbShpKSk7CisgICAgICAgICAgICBjYXJkLT5iaW5k
VGVtcGxhdGUodGVtcGwpOworICAgICAgICB9CisgICAgfQorfQorCit9CkluZGV4OiBXZWJDb3Jl
L3dtbC9XTUxIZWxwZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxIZWxwZXIuaAko
cmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEhlbHBlci5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxIZWxwZXJfaAorI2RlZmluZSBXTUxIZWxwZXJf
aAorCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBDU3RyaW5nOyAKK2NsYXNzIFdNTENhcmRFbGVtZW50OworY2xhc3MgV01MVG9rZW5pemVy
OworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCisKK1dNTEhlbHBlciBjbGFzcyx3aGljaCBvZmZlcnMgY29udmVuaWVudCBm
dW5jdGlvbnMgdG8gV01MRWxlbWVudAorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitjbGFzcyBXTUxIZWxwZXIgeworCitw
dWJsaWM6IAorICAgIHN0YXRpYyBib29sIGlzVmFsaWRWYXJpYWJsZU5hbWUoY29uc3QgU3RyaW5n
JiwgYm9vbCBpc1ZhclJlZiA9IGZhbHNlKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNWYXJpYWJsZVJl
Zihjb25zdCBTdHJpbmcmKTsKKworICAgIC8vTm9kZSogaXMgdGhlIHJvb3Qgb2YgRE9NIHRyZWUg
d2hpY2ggd2lsbCBiZSB0cmF2ZXJzZWQgZm9yIHNlYXJjaGluZyB2YXJpYWJsZSB2YWx1ZQorICAg
IHN0YXRpYyBTdHJpbmcgc3Vic3RpdHV0ZVZhclJlZihjb25zdCBTdHJpbmcmLCBOb2RlKiwgU3Ry
aW5nIGVzY2FwZSA9IFN0cmluZygpKTsgCisgICAgc3RhdGljIHZvaWQgY29udmVydFZhcklmTmVl
ZGVkKFN0cmluZyYsIFN0cmluZyYpOworCisgICAgc3RhdGljIFdNTENhcmRFbGVtZW50KiBzZXRE
ZXN0aW5hdGlvbkNhcmQoUmVmUHRyPERvY3VtZW50PiwgU3RyaW5nIHVyaSA9IFN0cmluZygpKTsK
KworICAgIHN0YXRpYyB2b2lkIHJlZ2lzdGVyVGVtcGxhdGVUb0NhcmRzKERvY3VtZW50Kik7CisK
KyAgICBzdGF0aWMgV01MVG9rZW5pemVyKiB0b2tlbml6ZXIoKTsKKyAgICBzdGF0aWMgdm9pZCBz
ZXRUb2tlbml6ZXIoV01MVG9rZW5pemVyKik7CisKK3ByaXZhdGU6CisgICAgc3RhdGljIFdNTFRv
a2VuaXplciogc190b2tlbml6ZXI7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRl
eDogV2ViQ29yZS93bWwvV01MSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3dtbC9XTUxJbWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01M
SW1hZ2VFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxJbWFnZUVsZW1lbnQuaCIgCisKKyNpbmNsdWRl
ICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTEhlbHBl
ci5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNp
bmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKworV01MSW1hZ2VFbGVtZW50OjpXTUxJbWFnZUVsZW1l
bnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgbmFtZSwgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxJ
bWFnZUVsZW1lbnQobmFtZSwgZG9jKSAKK3sKK30KKworV01MSW1hZ2VFbGVtZW50Ojp+V01MSW1h
Z2VFbGVtZW50KCkgCit7Cit9CisKK3ZvaWQgV01MSW1hZ2VFbGVtZW50Ojp1cGRhdGVBdHRyc0lm
TmVlZGVkKCkKK3sKKyAgICBTdHJpbmcgc3ViOworICAgIFN0cmluZyBhbHQgPSBnZXRBdHRyaWJ1
dGUoImFsdCIpOworICAgIGlmICghYWx0LmlzRW1wdHkoKSkgeworICAgICAgICBzdWIgPSBXTUxI
ZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoYWx0LCBkb2N1bWVudCgpKTsKKyAgICAgICAgaWYgKGFs
dCAhPSBzdWIpCisgICAgICAgICAgICBzZXRBdHRyaWJ1dGUoYWx0QXR0ciwgc3ViKTsKKyAgICB9
ICAgCisKKyAgICBTdHJpbmcgc3JjID0gZ2V0QXR0cmlidXRlKCJzcmMiKTsKKyAgICBpZiAoIXNy
Yy5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVm
KHNyYywgZG9jdW1lbnQoKSk7CisgICAgICAgIGlmIChzcmMgIT0gc3ViKQorICAgICAgICAgICAg
c2V0QXR0cmlidXRlKHNyY0F0dHIsIHN1Yik7CisgICAgfQorCisgICAgU3RyaW5nIGxvY2FsU3Jj
ID0gZ2V0QXR0cmlidXRlKCJsb2NhbHNyYyIpOworICAgIGlmICghbG9jYWxTcmMuaXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIHN0b3JlIHRoZSBzcmMgYXR0cmlidXRlIGZvciB1c2UgbGF0ZXIKKyAg
ICAgICAgaWYgKCFzcmMuaXNFbXB0eSgpKQorICAgICAgICAgICAgbV9zcmMgPSBzdWI7CisKKyAg
ICAgICAgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKGxvY2FsU3JjLCBkb2N1bWVu
dCgpKTsKKyAgICAgICAgaWYgKCFzdWIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpZiAobG9j
YWxTcmMgIT0gc3ViKQorICAgICAgICAgICAgICAgIHNldEF0dHJpYnV0ZShXTUxOYW1lczo6bG9j
YWxzcmNBdHRyLCBzdWIpOworCisgICAgICAgICAgICBzZXRBdHRyaWJ1dGUoc3JjQXR0ciwgc3Vi
KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBXTUxJbWFnZUVsZW1lbnQ6OnJlbG9hZElt
YWdlQnlTcmNBdHRyKCkKK3sKKyAgICBpZiAobV9zcmMuaXNFbXB0eSgpKSAKKyAgICAgICAgcmV0
dXJuOworCisgICAgc2V0QXR0cmlidXRlKHNyY0F0dHIsIG1fc3JjKTsKKyAgICBtX3NyYyA9ICIi
OworCisgICAgaW1hZ2VMb2FkZXIoKS51cGRhdGVGcm9tRWxlbWVudCgpOworfQorCitib29sIFdN
TEltYWdlRWxlbWVudDo6aXNXTUxJbWFnZUVsZW1lbnQoKSBjb25zdAoreworICAgIHJldHVybiB0
cnVlOworfQorCit9IC8vbmFtZXNwYWNlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxJbWFnZUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxJbWFnZUVsZW1lbnQuaAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvd21sL1dNTEltYWdlRWxlbWVudC5oCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2ht
b2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxJbWFnZUVsZW1lbnRfaAorI2RlZmluZSBXTUxJ
bWFnZUVsZW1lbnRfaAorCisjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFdNTEltYWdlRWxlbWVudCA6IHB1YmxpYyBIVE1MSW1hZ2VF
bGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxJbWFnZUVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFt
ZSYsIERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+V01MSW1hZ2VFbGVtZW50KCk7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNXTUxJbWFnZUVsZW1lbnQoKSBjb25zdDsKKworICAgIHZvaWQgdXBkYXRl
QXR0cnNJZk5lZWRlZCgpOworICAgIHZvaWQgcmVsb2FkSW1hZ2VCeVNyY0F0dHIoKTsKKworcHJp
dmF0ZToKKyAgICBTdHJpbmcgbV9zcmM7Cit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvd21sL1dNTElucHV0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS93bWwvV01MSW5wdXRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21s
L1dNTElucHV0RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzAxIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29w
eXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAq
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTElucHV0RWxlbWVudC5oIgorCisjaW5j
bHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQu
aCIKKyNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisj
aW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIk1v
dXNlRXZlbnQuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKKyNpbmNsdWRlICJSZWd1bGFyRXhwcmVzc2lvbi5oIgorI2luY2x1ZGUgIlJlbmRlclRleHRD
b250cm9sLmgiCisjaW5jbHVkZSAiVGV4dEV2ZW50LmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRl
LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNs
dWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlICJ3dGYvQVNDSUlDVHlwZS5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5hbWVz
cGFjZSBFdmVudE5hbWVzOwordXNpbmcgc3RkOjptaW47CisKK1dNTElucHV0RWxlbWVudDo6V01M
SW5wdXRFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZywgRG9jdW1lbnQqIGRvYywgSFRN
TEZvcm1FbGVtZW50KiBmb3JtKQorICAgIDogSFRNTElucHV0RWxlbWVudCh0YWcsIGRvYywgZm9y
bSkKKyAgICAsIG1fZW1wdHlPayhmYWxzZSkKKyAgICAsIG1fbWFza0FsbG93c0lucHV0Q2hhck51
bXMoMCkKK3sKK30KKworV01MSW5wdXRFbGVtZW50Ojp+V01MSW5wdXRFbGVtZW50KCkgCit7Cit9
CisKK3ZvaWQgV01MSW5wdXRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRy
aWJ1dGUqIGF0dHIpIAoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gZm9ybWF0QXR0cikgewor
CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1ZhcmlhYmxlUmVmKGF0dHItPnZhbHVlKCkpKSB7
CisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlk
VmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBtX2Zvcm1hdCA9IHZhbGlkYXRlSW5wdXRNYXNrKGF0dHItPnZhbHVlKCkpOwor
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGVtcHR5b2tBdHRyKQorICAgICAgICBtX2Vt
cHR5T2sgPSAoKGF0dHItPnZhbHVlKCkgPT0gInRydWUiKSA/IHRydWUgOiBmYWxzZSk7CisgICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7CisKKyAgICAgICAgaWYgKFdNTEhl
bHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpCisgICAgICAgICAgICBXTUxIZWxw
ZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJv
cik7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBIVE1MSW5wdXRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKKyAKKyAgICB9IGVsc2UKKyAgICAgICAgSFRNTElucHV0RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKKworU3RyaW5nIFdNTElucHV0
RWxlbWVudDo6dmFsaWRhdGVJbnB1dE1hc2soY29uc3QgQXRvbWljU3RyaW5nJiBpbnB1dE1hc2sp
Cit7CisgICAgc3RhdGljIEF0b21pY1N0cmluZyBmb3JtYXRDb2RlcyA9ICJBYU5uWHhNbSI7Cisg
ICAgYm9vbCBpc1ZhbGlkID0gdHJ1ZTsKKyAgICBib29sIGhhc1dpbGRjYXJkID0gZmFsc2U7Cisg
ICAgdW5zaWduZWQgZXNjYXBlQ2hhckNudHMgPSAwOworCisgICAgdW5zaWduZWQgbWFza0xlbiA9
IGlucHV0TWFzay5sZW5ndGgoKTsKKyAgICB1bnNpZ25lZCBpZHg7CisgICAgVUNoYXIgYzsgCisK
KyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1hc2tMZW47ICsraWR4KSB7CisgICAgICAgIGMgPSBp
bnB1dE1hc2tbaWR4XTsKKworICAgICAgICBpZiAoZm9ybWF0Q29kZXMuZmluZChjKSA9PSAtMSkg
eworCisgICAgICAgICAgICBpZiAoKGMgPT0gJyonKSB8fCAoV1RGOjppc0FTQ0lJRGlnaXQoYykg
JiYgKGMgIT0gJzAnKSkpIHsgCisgICAgICAgICAgICAgICAgLy8gdmFsaWRhdGUgY29kZXMgd2hp
Y2ggZW5kcyB3aXRoICcqZicgb3IgJ25mJworICAgICAgICAgICAgICAgIGMgPSBpbnB1dE1hc2tb
KytpZHhdOworICAgICAgICAgICAgICAgIGlmICgoaWR4KzEgIT0gbWFza0xlbikgfHwgZm9ybWF0
Q29kZXMuZmluZChjKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICBpc1ZhbGlkID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBoYXNXaWxkY2FyZCA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGMg
PT0gJ1xcJykgeworICAgICAgICAgICAgICAgIC8vc2tpcCBvdmVyIHRoZSBuZXh0IG1hc2sgY2hh
cmFjdGVyCisgICAgICAgICAgICAgICAgaWR4Kys7ICAgCisgICAgICAgICAgICAgICAgZXNjYXBl
Q2hhckNudHMrKzsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaXNWYWxp
ZCA9IGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAg
ICAgIH0KKyAgICB9CisKKyAgICAvLyBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBjaGFyIGFsbG93
ZWQgdG8gZW50ZXIgYnkgaW5wdXQgbWFzayBzdHJpbmcKKyAgICBpZiAoaXNWYWxpZCkgeworICAg
ICAgICBtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1zID0gbWFza0xlbjsKKworICAgICAgICBpZiAo
ZXNjYXBlQ2hhckNudHMpCisgICAgICAgICAgICBtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1zIC09
IGVzY2FwZUNoYXJDbnRzOworCisgICAgICAgIGlmIChoYXNXaWxkY2FyZCAmJiBpbnB1dE1hc2tb
bWFza0xlbi0yXSA9PSAnKicpCisgICAgICAgICAgICBtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1z
ID0gbWF4TGVuZ3RoKCk7CisgICAgICAgIGVsc2UgaWYgKGhhc1dpbGRjYXJkKSB7CisgICAgICAg
ICAgICBjID0gaW5wdXRNYXNrW21hc2tMZW4tMl07CisgICAgICAgICAgICB1bnNpZ25lZCBsZWZ0
TGVuID0gU3RyaW5nKCZjKS50b0ludCgpOworICAgICAgICAgICAgbV9tYXNrQWxsb3dzSW5wdXRD
aGFyTnVtcyA9IGxlZnRMZW4gKyBtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1zIC0gMjsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiBpbnB1dE1hc2s7CisgICAgfQorIAorICAgIHJldHVybiBT
dHJpbmcoKTsKK30KKwordW5zaWduZWQgV01MSW5wdXRFbGVtZW50OjpjdXJzb3JQb3NUb0lkeE9m
TWFzayh1bnNpZ25lZCBjdXJzb3JQb3MpCit7CisgICAgVUNoYXIgbWFzazsKKyAgICBpbnQgaWR4
ID0gLTE7CisgICAgY3Vyc29yUG9zKys7CisgICAgd2hpbGUgKGN1cnNvclBvcy0tKSB7CisgICAg
ICAgIG1hc2sgPSBtX2Zvcm1hdFsrK2lkeF07CisgICAgICAgIGlmIChtYXNrID09ICdcXCcpCisg
ICAgICAgICAgICBpZHgrKzsKKyAgICAgICAgZWxzZSBpZiAoKG1hc2sgPT0gJyonKSB8fCAoV1RG
Ojppc0FTQ0lJRGlnaXQobWFzaykgJiYgKG1hc2sgIT0gJzAnKSkpIHsKKyAgICAgICAgICAgIGlk
eCA9IG1fZm9ybWF0Lmxlbmd0aCgpIC0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
IAorICAgIH0KKworICAgIHJldHVybiBpZHg7Cit9CisKK2Jvb2wgV01MSW5wdXRFbGVtZW50Ojpp
c0NvbmZvcm1lZFRvSW5wdXRNYXNrKFN0cmluZyYgaW5wdXQpCit7CisgICAgYm9vbCBiUGFzcyA9
IHRydWU7CisgICAgVUNoYXIgaW5DaGFyOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyBp
IDwgaW5wdXQubGVuZ3RoKCk7ICsraSkgeworICAgICAgICBpbkNoYXIgPSBpbnB1dFtpXTsKKwor
ICAgICAgICBiUGFzcyA9IGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soaW5DaGFyLCBpKzEsIGZhbHNl
KTsKKyAgICAgICAgaWYgKCFiUGFzcykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IHJldHVybiBiUGFzczsKK30KKworYm9vbCBXTUxJbnB1dEVsZW1lbnQ6OmlzQ29uZm9ybWVkVG9J
bnB1dE1hc2soVUNoYXIgaW5DaGFyLCB1bnNpZ25lZCBpbnB1dENoYXJOdW0sIGJvb2wgaXNJbnB1
dGVkQnlVc3IpCit7CisgICAgYm9vbCBiUGFzcyA9IHRydWU7CisgICAgaWYgKG1fZm9ybWF0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGJQYXNzOworICAgIAorICAgIC8vIHdlIHNob3VsZCBs
aW1pdCB0aGUgbnVtYmVyIG9mIGlucHV0ZWQgY2hhcmF0ZXJzIGFjY29yZGluZyB0byB0aGUgZm9y
bWF0IGFuZCBtYXhsZW5ndGggYXR0cmlidXRlCisgICAgdW5zaWduZWQgbWF4QWxsb3dJbnB1dE51
bSA9IG1pbihtX21hc2tBbGxvd3NJbnB1dENoYXJOdW1zLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bWF4TGVuZ3RoKCkpKTsKKworICAgIGlmIChpbnB1dENoYXJOdW0gPD0gbWF4QWxsb3dJbnB1dE51
bSkgeworICAgICAgICB1bnNpZ25lZCBpZHhPZk1hc2sgPSAwOworICAgICAgICBpZiAoaXNJbnB1
dGVkQnlVc3IpCisgICAgICAgICAgICBpZHhPZk1hc2sgPSBjdXJzb3JQb3NUb0lkeE9mTWFzayhz
ZWxlY3Rpb25TdGFydCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWR4T2ZNYXNrID0g
Y3Vyc29yUG9zVG9JZHhPZk1hc2soaW5wdXRDaGFyTnVtIC0gMSk7CisKKyAgICAgICAgVUNoYXIg
bWFzayA9IG1fZm9ybWF0W2lkeE9mTWFza107CisgICAgICAgIC8vIG1hdGNoIHRoZSBjaGFyIGlu
cHV0dGVkIHdpdGggaW5wdXQgbWFzaworICAgICAgICBpZiAobWFzayA9PSAnQScpCisgICAgICAg
ICAgICBiUGFzcyA9ICFXVEY6OmlzQVNDSUlEaWdpdChpbkNoYXIpICYmICFXVEY6OmlzQVNDSUlM
b3dlcihpbkNoYXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBl
bHNlIGlmIChtYXNrID09ICdhJykKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNBU0NJSURp
Z2l0KGluQ2hhcikgJiYgIVdURjo6aXNBU0NJSVVwcGVyKGluQ2hhcikgJiYgV1RGOjppc0FTQ0lJ
UHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGVsc2UgaWYgKG1hc2sgPT0gJ04nKQorICAgICAg
ICAgICAgYlBhc3MgPSBXVEY6OmlzQVNDSUlEaWdpdChpbkNoYXIpOworICAgICAgICBlbHNlIGlm
IChtYXNrID09ICduJykKKyAgICAgICAgICAgIGJQYXNzID0gIVdURjo6aXNBU0NJSUFscGhhKGlu
Q2hhcikgJiYgV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGluQ2hhcik7CisgICAgICAgIGVsc2UgaWYg
KG1hc2sgPT0gJ1gnKQorICAgICAgICAgICAgYlBhc3MgPSAhV1RGOjppc0FTQ0lJTG93ZXIoaW5D
aGFyKSAmJiBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgZWxzZSBpZiAo
bWFzayA9PSAneCcpCisgICAgICAgICAgICBiUGFzcyA9ICFXVEY6OmlzQVNDSUlVcHBlcihpbkNo
YXIpICYmIFdURjo6aXNBU0NJSVByaW50YWJsZShpbkNoYXIpOworICAgICAgICBlbHNlIGlmICht
YXNrID09ICdNJykKKyAgICAgICAgICAgIGJQYXNzID0gV1RGOjppc0FTQ0lJUHJpbnRhYmxlKGlu
Q2hhcik7CisgICAgICAgIGVsc2UgaWYgKG1hc2sgPT0gJ20nKQorICAgICAgICAgICAgYlBhc3Mg
PSBXVEY6OmlzQVNDSUlQcmludGFibGUoaW5DaGFyKTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgYlBhc3MgPSAobWFzayA9PSBpbkNoYXIpOworCisgICAgfSBlbHNlICAvLyBpbnB1dENoYXJO
dW0gPiBtYXhBbGxvd0lucHV0TnVtCisgICAgICAgIGJQYXNzID0gZmFsc2U7CisKKyAgICByZXR1
cm4gYlBhc3M7Cit9CisKKwordm9pZCBXTUxJbnB1dEVsZW1lbnQ6OmluaXQoKQoreworICAgIGlm
ICghZG9jdW1lbnQoKS0+cGFnZSgpKQorICAgICAgICByZXR1cm47CisgICAgU3RyaW5nIG5hbWVW
YXIgPSBuYW1lKCk7CisgICAgU3RyaW5nIHZhbCA9IHZhbHVlKCk7CisgICAgU3RyaW5nIHZhclZh
bHVlOworCisgICAgV01MUGFnZVN0YXRlICpwYWdlU2F0ZSA9IGRvY3VtZW50KCktPnBhZ2UoKS0+
d21sUGFnZVN0YXRlKCk7CisgICAgaWYgKCFuYW1lVmFyLmlzRW1wdHkoKSkKKyAgICAgICAgdmFy
VmFsdWUgPSBwYWdlU2F0ZS0+Z2V0VmFyaWJhbGUobmFtZVZhcik7CisgICAgCisgICAgaWYgKHZh
clZhbHVlLmlzRW1wdHkoKSB8fCAhaXNDb25mb3JtZWRUb0lucHV0TWFzayh2YXJWYWx1ZSkpIHsK
KyAgICAgICAgaWYgKGlzQ29uZm9ybWVkVG9JbnB1dE1hc2sodmFsKSkKKyAgICAgICAgICAgIHZh
clZhbHVlID0gdmFsOworICAgICAgICBlbHNlIAorICAgICAgICAgICAgdmFyVmFsdWUgPSAiIjsK
KworICAgICAgICBwYWdlU2F0ZS0+c3RvcmVWYXJpYWJsZShuYW1lVmFyLCB2YXJWYWx1ZSk7Cisg
ICAgfQorCisgICAgc2V0VmFsdWUodmFyVmFsdWUpOworCisKKyAgICBpZiAoZ2V0QXR0cmlidXRl
KCJlbXB0eW9rIikuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX2Zvcm1hdC5pc0VtcHR5KCkp
CisgICAgICAgICAgICBtX2VtcHR5T2sgPSB0cnVlOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIC8vY2hlY2sgaWYgdGhlIGZvcm1hdCBjb2RlcyBpcyBhICIqZiIgY29kZQorICAgICAgICAg
ICAgU3RyaW5nIGZvcm1hdENvZGVzID0gIk1tQWFYeE5uIjsKKyAgICAgICAgICAgIGlmICgobV9m
b3JtYXQubGVuZ3RoKCkgPT0gMikgJiYgKG1fZm9ybWF0WzBdID09ICcqJykgJiYgKGZvcm1hdENv
ZGVzLmZpbmQobV9mb3JtYXRbMV0pICE9IC0xKSkKKyAgICAgICAgICAgICAgICBtX2VtcHR5T2sg
PSB0cnVlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6dXBk
YXRlQXR0cnNJZk5lZWRlZCgpCit7CisgICAgU3RyaW5nIHZhbHVlID0gZ2V0QXR0cmlidXRlKCJ2
YWx1ZSIpOyAKKyAgICBTdHJpbmcgc3ViID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFyUmVmKHZh
bHVlLCBkb2N1bWVudCgpKTsKKyAgICBpZiAodmFsdWUgIT0gc3ViKQorICAgICAgICBzZXRWYWx1
ZShzdWIpOworCisgICAgU3RyaW5nIHRpdGxlID0gZ2V0QXR0cmlidXRlKCJ0aXRsZSIpOworICAg
IHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZih0aXRsZSwgZG9jdW1lbnQoKSk7Cisg
ICAgaWYgKHRpdGxlICE9IHN1YikKKyAgICAgICAgc2V0QXR0cmlidXRlKHRpdGxlQXR0ciwgdGl0
bGUpOworfQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6ZGlzcGF0Y2hCbHVyRXZlbnQoKQorewor
ICAgIC8vIHVwZGF0ZSB0aGUgbmFtZWQgdmFyaWFibGUgb2YgaW5wdXQgZWxlbWVudCAKKyAgICBT
dHJpbmcgbmFtZVZhciA9IG5hbWUoKTsKKyAgICBpZiAoIW5hbWVWYXIuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIFJlbmRlclRleHRDb250cm9sICogcnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJUZXh0Q29u
dHJvbCo+KHJlbmRlcmVyKCkpOworICAgICAgICBTdHJpbmcgaW5wdXQgPSAocnQgIT0gMCA/IHJ0
LT50ZXh0KCkgOiBTdHJpbmcoKSk7CisgICAgICAgIGlmIChtX2VtcHR5T2sgfHwgIWlucHV0Lmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKSk7CisgICAg
ICAgICAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKSk7CisgICAg
ICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgpLT5zdG9yZVZhcmlhYmxl
KG5hbWVWYXIsIGlucHV0KTsKKyAgICAgICAgICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRpc3BhdGNo
Qmx1ckV2ZW50KCk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZm9jdXMoKTsgCisgICAg
fQorfQorCit2b2lkIFdNTElucHV0RWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCog
ZXZ0KQoreworICAgIGlmIChpc1RleHRGaWVsZCgpICYmIGV2dC0+dHlwZSgpID09IHRleHRJbnB1
dEV2ZW50ICYmIGV2dC0+aXNUZXh0RXZlbnQoKSkgeworICAgICAgICBTdHJpbmcgZGF0YSA9IHN0
YXRpY19jYXN0PFRleHRFdmVudCo+KGV2dCktPmRhdGEoKTsKKyAgICAgICAgUmVuZGVyVGV4dENv
bnRyb2wgKnJ0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyVGV4dENvbnRyb2wqPihyZW5kZXJlcigpKTsK
KyAgICAgICAgaWYgKHJ0KSB7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnB1dENoYXJOdW0gPSBy
dC0+dGV4dCgpLmxlbmd0aCgpICsgMTsKKyAgICAgICAgICAgIGlmICghaXNDb25mb3JtZWRUb0lu
cHV0TWFzayhkYXRhWzBdLCBpbnB1dENoYXJOdW0pKQorICAgICAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEhUTUxJbnB1dEVsZW1lbnQ6OmRlZmF1bHRFdmVudEhh
bmRsZXIoZXZ0KTsKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MSW5wdXRFbGVtZW50LmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3dtbC9XTUxJbnB1dEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpZm5kZWYgV01MSW5wdXRFbGVtZW50X2gKKyNkZWZpbmUgV01MSW5wdXRF
bGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBIVE1MRm9ybUVsZW1lbnQ7CisgICAgICAgICAgICAgICAgICAgICAg
IAorY2xhc3MgV01MSW5wdXRFbGVtZW50IDogcHVibGljIEhUTUxJbnB1dEVsZW1lbnQgeworcHVi
bGljOgorICAgIFdNTElucHV0RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQq
LCBIVE1MRm9ybUVsZW1lbnQqID0gMCk7CisgICAgdmlydHVhbCB+V01MSW5wdXRFbGVtZW50KCk7
CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRl
Kik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoQmx1ckV2ZW50KCk7CisgICAgdmlydHVhbCB2
b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKworICAgIHZvaWQgaW5pdCgpOworICAg
IHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZCgpOworICAgIGJvb2wgaXNDb25mb3JtZWRUb0lucHV0
TWFzayhTdHJpbmcmKTsKKyAgICBib29sIGlzQ29uZm9ybWVkVG9JbnB1dE1hc2soVUNoYXIsIHVu
c2lnbmVkLCBib29sIGlzSW5wdXRlZEJ5VXNyID0gdHJ1ZSk7CisKK3ByaXZhdGU6CisgICAgU3Ry
aW5nIHZhbGlkYXRlSW5wdXRNYXNrKGNvbnN0IEF0b21pY1N0cmluZyYpOworICAgIHVuc2lnbmVk
IGN1cnNvclBvc1RvSWR4T2ZNYXNrKHVuc2lnbmVkKTsKKworICAgIFN0cmluZyBtX2Zvcm1hdDsK
KyAgICBib29sIG1fZW1wdHlPazsKKyAgICB1bnNpZ25lZCBtX21hc2tBbGxvd3NJbnB1dENoYXJO
dW1zOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dN
TEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dN
TEludHJpbnNpY0V2ZW50SGFuZGxlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0
bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MSW50cmluc2ljRXZlbnRIYW5k
bGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5o
IgorI2luY2x1ZGUgIldNTFRva2VuaXplci5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKKworV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyOjpXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKSAKK3sKK30KKyAg
ICAKK1dNTEludHJpbnNpY0V2ZW50SGFuZGxlcjo6fldNTEludHJpbnNpY0V2ZW50SGFuZGxlcigp
Cit7Cit9CisKK3ZvaWQgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyOjpyZWdpc3RlckludHJpbnNp
Y0V2ZW50KFdNTEludHJpbnNpY0V2ZW50VHlwZSB0eXBlLCBjb25zdCBXTUxJbnRyaW5zaWNFdmVu
dCYgZXYpCit7CisgICAgaWYgKG1fZXZlbnRzLmNvbnRhaW5zKHR5cGUpKSB7CisgICAgICAgIFdN
TEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKENvbmZsaWN0aW5nRXZlbnRCaW5kaW5n
RXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1fZXZlbnRzLnNldCh0eXBlLCBl
dik7Cit9CisKK3ZvaWQgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyOjp0cmlnZ2VySW50cmluc2lj
RXZlbnQoV01MSW50cmluc2ljRXZlbnRUeXBlIHR5cGUpIGNvbnN0Cit7CisgICAgV01MSW50cmlu
c2ljRXZlbnQgZXYgPSBtX2V2ZW50cy5nZXQodHlwZSk7CisgICAgaWYgKGV2LnRhc2spCisgICAg
ICAgIGV2LnRhc2stPmV4ZWMoMCwgZXYudGFyZ2V0VVJJKTsKK30KKworYm9vbCBXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXI6Omhhc0ludHJpbnNpY0V2ZW50KFdNTEludHJpbnNpY0V2ZW50VHlwZSB0
eXBlKSBjb25zdAoreworICAgIHJldHVybiBtX2V2ZW50cy5jb250YWlucyh0eXBlKTsKK30KKwor
fQpJbmRleDogV2ViQ29yZS93bWwvV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS93bWwvV01MSW50cmluc2ljRXZlbnRIYW5kbGVyLmgJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3dtbC9XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRv
cmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIu
ICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0x
MzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyX2gK
KyNkZWZpbmUgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyX2gKKworI2luY2x1ZGUgPHd0Zi9IYXNo
TWFwLmg+CisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFdNTFRhc2tFbGVtZW50OworCitlbnVtIFdNTEludHJpbnNpY0V2ZW50VHlwZSB7Cisg
ICAgVW5rbm93biA9IDAsIE9uRW50ZXJGb3J3YXJkLCBPbkVudGVyQmFja3dhcmQsIE9uVGltZXIs
IE9uUGljayAKK307CisKK3R5cGVkZWYgc3RydWN0IFdNTEludHJpbnNpY0V2ZW50IHsKKyAgICBX
TUxUYXNrRWxlbWVudCogdGFzazsKKyAgICBTdHJpbmcgdGFyZ2V0VVJJOworfSBXTUxJbnRyaW5z
aWNFdmVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgCit0eXBlZGVmIEhhc2hNYXA8aW50LCBX
TUxJbnRyaW5zaWNFdmVudD4gSW50cmluc2ljRXZudE1hcDsKKworY2xhc3MgV01MSW50cmluc2lj
RXZlbnRIYW5kbGVyIHsKK3B1YmxpYzoKKyAgICBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsK
KyAgICB2aXJ0dWFsIH5XTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsKKworICAgIC8vIGhhbmRs
aW5nIFdNTCBpbnRyaW5zaWMgZXZlbnQKKyAgICB2b2lkIHJlZ2lzdGVySW50cmluc2ljRXZlbnQo
V01MSW50cmluc2ljRXZlbnRUeXBlLCBjb25zdCBXTUxJbnRyaW5zaWNFdmVudCYpOworICAgIHZv
aWQgdHJpZ2dlckludHJpbnNpY0V2ZW50KFdNTEludHJpbnNpY0V2ZW50VHlwZSkgY29uc3Q7Cisg
ICAgYm9vbCBoYXNJbnRyaW5zaWNFdmVudChXTUxJbnRyaW5zaWNFdmVudFR5cGUpIGNvbnN0Owor
Citwcml2YXRlOgorICAgIEludHJpbnNpY0V2bnRNYXAgbV9ldmVudHM7CisgICAKK307CisKK30g
Ly9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTE9wdGlvbkVsZW1lbnQuY3BwCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDE0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
TUxPcHRpb25FbGVtZW50LmgiCisKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAi
V01MR29FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MSW50
cmluc2ljRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJX
TUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxTZWxlY3RFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNlIFdNTE5hbWVzOworCitXTUxPcHRpb25FbGVt
ZW50OjpXTUxPcHRpb25FbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MT3B0aW9uRWxl
bWVudChkb2MsIDApCisgICAgLCBtX2V2bnRIYW5kbGVyKDApCisgICAgLCBtX2hhc0ludHJpbnNp
Y0V2ZW50KGZhbHNlKQoreworfQorCitXTUxPcHRpb25FbGVtZW50Ojp+V01MT3B0aW9uRWxlbWVu
dCgpIAoreworICAgIGlmIChtX2V2bnRIYW5kbGVyKSB7CisgICAgICAgIGRlbGV0ZSBtX2V2bnRI
YW5kbGVyOworICAgICAgICBtX2V2bnRIYW5kbGVyID0gMDsKKyAgICB9Cit9CisKK3ZvaWQgV01M
T3B0aW9uRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRy
KQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gb25waWNrQXR0cikgeworICAgICAgICAKKyAg
ICAgICAgV01MSW50cmluc2ljRXZlbnRUeXBlIGV0eXBlID0gT25QaWNrOyAKKyAgICAgICAgaWYg
KCFtX2V2bnRIYW5kbGVyKQorICAgICAgICAgICAgbV9ldm50SGFuZGxlciA9IG5ldyBXTUxJbnRy
aW5zaWNFdmVudEhhbmRsZXIoKTsKKyAKKyAgICAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Cisg
ICAgICAgIFF1YWxpZmllZE5hbWUgcU5hbWUoImdvIiwgImdvIiwgIiIpOworICAgICAgICBFbGVt
ZW50KiBnbyA9IFdNTEVsZW1lbnRGYWN0b3J5OjpjcmVhdGVXTUxFbGVtZW50KHFOYW1lLCBkb2N1
bWVudCgpLCBmYWxzZSk7CisgICAgICAgIFN0cmluZyBocmVmID0gV01MSGVscGVyOjpzdWJzdGl0
dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCksICJlc2NhcGUiKTsKKyAgICAgICAg
Z28tPnNldEF0dHJpYnV0ZU5TKCIiLCAiaHJlZiIsIGhyZWYsIGVjKTsKKyAKKyAgICAgICAgV01M
SW50cmluc2ljRXZlbnQgZXY7CisgICAgICAgIGV2LnRhc2sgPSBzdGF0aWNfY2FzdDxXTUxHb0Vs
ZW1lbnQqPihnbyk7CisgICAgICAgIGV2LnRhcmdldFVSSSA9IGhyZWY7CisgCisgICAgICAgIG1f
aGFzSW50cmluc2ljRXZlbnQgPSB0cnVlOworICAgICAgICBtX2V2bnRIYW5kbGVyLT5yZWdpc3Rl
ckludHJpbnNpY0V2ZW50KGV0eXBlLCBldik7CisKKyAgICB9IGVsc2UKKyAgICAgICAgSFRNTE9w
dGlvbkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCitXTUxJbnRyaW5z
aWNFdmVudEhhbmRsZXIqIFdNTE9wdGlvbkVsZW1lbnQ6OmV2ZW50SGFuZGxlcigpIAoreworICAg
IGlmIChtX2hhc0ludHJpbnNpY0V2ZW50ICYmICFtX2V2bnRIYW5kbGVyKQorICAgICAgICBtX2V2
bnRIYW5kbGVyID0gbmV3IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworICAgIHJldHVybiBt
X2V2bnRIYW5kbGVyOworfQorCit2b2lkIFdNTE9wdGlvbkVsZW1lbnQ6OnNldEhhc0ludHJpbnNp
Y0V2ZW50KGJvb2wgaGFzKSAKK3sKKyAgICBtX2hhc0ludHJpbnNpY0V2ZW50ID0gaGFzOworfQor
IAorYm9vbCBXTUxPcHRpb25FbGVtZW50OjpoYXNJbnRyaW5zaWNFdmVudCgpCit7CisgICAgcmV0
dXJuIG1faGFzSW50cmluc2ljRXZlbnQ7Cit9CisKK3ZvaWQgV01MT3B0aW9uRWxlbWVudDo6aGFu
ZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCgpCit7CisgICAgaWYgKG1fZXZudEhhbmRsZXIgJiYg
bV9ldm50SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQoT25QaWNrKSkKKyAgICAgICAgbV9ldm50
SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2ZW50KE9uUGljayk7Cit9CisKK3ZvaWQgV01MT3B0
aW9uRWxlbWVudDo6dXBkYXRlQXR0cnNJZk5lZWRlZCgpIAoreworICAgIFN0cmluZyB2YWx1ZSA9
IGdldEF0dHJpYnV0ZSgidmFsdWUiKTsKKyAgICBTdHJpbmcgc3ViID0gV01MSGVscGVyOjpzdWJz
dGl0dXRlVmFyUmVmKHZhbHVlLCBkb2N1bWVudCgpKTsKKyAgICBpZiAodmFsdWUgIT0gc3ViKQor
ICAgICAgICBzZXRBdHRyaWJ1dGUodmFsdWVBdHRyLCBzdWIpOworCisgICAgU3RyaW5nIHRpdGxl
ID0gZ2V0QXR0cmlidXRlKCJ0aXRsZSIpOworICAgIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0
ZVZhclJlZih0aXRsZSwgZG9jdW1lbnQoKSk7CisKKyAgICBpZiAodGl0bGUgIT0gc3ViKQorICAg
ICAgICBzZXRBdHRyaWJ1dGUodGl0bGVBdHRyLCB0aXRsZSk7Cit9CisKK3ZvaWQgV01MT3B0aW9u
RWxlbWVudDo6c2V0U2VsZWN0ZWRTdGF0ZShib29sIHNlbGVjdCkKK3sKKyAgICBpZiAoc2VsZWN0
ZWQoKSA9PSBzZWxlY3QpCisgICAgICAgIHJldHVybjsKKworICAgIFdNTFNlbGVjdEVsZW1lbnQq
IHNlbCA9IGdldFNlbGVjdCgpOworICAgIGlmICghc2VsKQorICAgICAgICByZXR1cm47CisKKyAg
ICBzZXRTZWxlY3RlZChzZWxlY3QpOworICAgIGlmIChzZWwtPm11bHRpcGxlKCkgJiYgbV9oYXNJ
bnRyaW5zaWNFdmVudCkKKyAgICAgICAgaGFuZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCgpOwor
ICAgIGVsc2UgaWYgKG1faGFzSW50cmluc2ljRXZlbnQgJiYgc2VsZWN0ZWQoKSkKKyAgICAgICAg
aGFuZGxlSW50cmluc2ljRXZlbnRJZk5lZWRlZCgpOworCisgICAgc2V0Q2hhbmdlZCgpOworfQor
CitXTUxTZWxlY3RFbGVtZW50KiBXTUxPcHRpb25FbGVtZW50OjpnZXRTZWxlY3QoKSBjb25zdAor
eworICAgIE5vZGUqIHNlbGVjdCA9IHBhcmVudE5vZGUoKTsKKyAgICB3aGlsZSAoc2VsZWN0ICYm
ICFzZWxlY3QtPmhhc1RhZ05hbWUoc2VsZWN0VGFnKSkKKyAgICAgICAgc2VsZWN0ID0gc2VsZWN0
LT5wYXJlbnROb2RlKCk7CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V01MU2VsZWN0RWxlbWVu
dCo+KHNlbGVjdCk7Cit9CisKK30gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTE9w
dGlvbkVsZW1lbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxPcHRpb25FbGVtZW50LmgJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2gg
TW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDov
L3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTE9wdGlvbkVsZW1lbnRfaAor
I2RlZmluZSBXTUxPcHRpb25FbGVtZW50X2gKKworI2luY2x1ZGUgIkhUTUxPcHRpb25FbGVtZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBXTUxJ
bnRyaW5zaWNFdmVudEhhbmRsZXI7CitjbGFzcyBXTUxTZWxlY3RFbGVtZW50OworCitjbGFzcyBX
TUxPcHRpb25FbGVtZW50IDogcHVibGljIEhUTUxPcHRpb25FbGVtZW50eworcHVibGljOgorICAg
IFdNTE9wdGlvbkVsZW1lbnQoRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxPcHRpb25FbGVt
ZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0
cmlidXRlKik7CisgICAgdm9pZCBzZXRTZWxlY3RlZFN0YXRlKGJvb2wpOworICAgIFdNTFNlbGVj
dEVsZW1lbnQqIGdldFNlbGVjdCgpIGNvbnN0OworCisgICAgV01MSW50cmluc2ljRXZlbnRIYW5k
bGVyKiBldmVudEhhbmRsZXIoKTsKKyAgICBib29sIGhhc0ludHJpbnNpY0V2ZW50KCk7CisgICAg
dm9pZCBzZXRIYXNJbnRyaW5zaWNFdmVudChib29sKTsKKyAgICB2b2lkIGhhbmRsZUludHJpbnNp
Y0V2ZW50SWZOZWVkZWQoKTsKKworICAgIHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZCgpOyAKK3By
aXZhdGU6CisgICAgV01MSW50cmluc2ljRXZlbnRIYW5kbGVyKiBtX2V2bnRIYW5kbGVyOworICAg
IGJvb2wgbV9oYXNJbnRyaW5zaWNFdmVudDsKK307CisKK30gLy8gbmFtZXNwYWNlCisKKyNlbmRp
ZgpJbmRleDogV2ViQ29yZS93bWwvV01MUEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTFBFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFBF
bGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3NSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAg
ICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykg
MjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJXTUxQRWxlbWVudC5oIgorCisjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIk5vZGVMaXN0LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTFBF
bGVtZW50OjpXTUxQRWxlbWVudChEb2N1bWVudCogZG9jKQorICAgIDogSFRNTFBhcmFncmFwaEVs
ZW1lbnQoZG9jKSAKK3sKK30KKworV01MUEVsZW1lbnQ6On5XTUxQRWxlbWVudCgpIAoreworfQor
Cit2b2lkIFdNTFBFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUq
IGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBtb2RlQXR0cikgeworICAgICAgICBt
X21vZGUgPSAgYXR0ci0+dmFsdWUoKTsKKyAgICAgICAgaWYgKG1fbW9kZSA9PSAid3JhcCIpCisg
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NQcm9wZXJ0eVdvcmRXcmFwLCBDU1NW
YWx1ZUJyZWFrV29yZCk7CisgICAgICAgIGVsc2UgaWYgKG1fbW9kZSA9PSAibm93cmFwIikKKyAg
ICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENTU1Byb3BlcnR5V2hpdGVTcGFjZSwgQ1NT
VmFsdWVOb3dyYXApOworICAgIH0gZWxzZQorICAgICAgICBIVE1MUGFyYWdyYXBoRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Cit9CisKK3ZvaWQgV01MUEVsZW1lbnQ6OnVwZGF0
ZUF0dHJzSWZOZWVkZWQoKQoreworICAgIC8vIElmIG5vdCBleHBsaWNpdGx5IHNwZWNpZmllZCwg
dGhlIGxpbmV3cmFwIG1vZGUgaXMgaWRlbnRpY2FsIHRvIAorICAgIC8vIHRoZSBsaW5lLXdyYXAg
bW9kZSBvZiB0aGUgcHJldmlvdXMgcGFyYWdyYXBoIGluIHRoZSB0ZXh0IGZsb3cgb2YKKyAgICAv
LyBhIGNhcmQuVGhlIGRlZmF1bHQgbW9kZSBmb3IgdGhlIGZpcnN0IHBhcmFncmFwaCBpbiBhIGNh
cmQgaXMgd3JhcAorICAgIGlmIChtX21vZGUuaXNFbXB0eSgpKSB7CisgICAgICAgIFBhc3NSZWZQ
dHI8Tm9kZUxpc3Q+IG5sID0gZG9jdW1lbnQoKS0+Z2V0RWxlbWVudHNCeVRhZ05hbWUoInAiKTsK
KyAgICAgICAgaW50IG5MZW4gPSBubC5nZXQoKS0+bGVuZ3RoKCk7CisgICAgICAgIGlmIChuTGVu
ID09IDApCisgICAgICAgICAgICBzZXRBdHRyaWJ1dGUobW9kZUF0dHIsICJ3cmFwIik7CisgICAg
ICAgIGVsc2UgaWYgKG5MZW4gPiAwKSB7CisgICAgICAgICAgICBXTUxQRWxlbWVudCogcEVsID0g
c3RhdGljX2Nhc3Q8V01MUEVsZW1lbnQqPihubC5nZXQoKS0+aXRlbShuTGVuLTEpKTsKKyAgICAg
ICAgICAgIFN0cmluZyBwcmVNb2RlID0gcEVsLT5nZXRBdHRyaWJ1dGUoIm1vZGUiKTsKKyAgICAg
ICAgICAgIHNldEF0dHJpYnV0ZShtb2RlQXR0ciwgcHJlTW9kZSk7CisgICAgICAgIH0KKyAgICB9
Cit9CisKK30gLy9uYW1lc3BhY2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFBFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MUEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdl
YkNvcmUvd21sL1dNTFBFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDUgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwor
ICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLwor
I2lmbmRlZiBXTUxQRWxlbWVudF9oCisjZGVmaW5lIFdNTFBFbGVtZW50X2gKKworI2luY2x1ZGUg
IkhUTUxQYXJhZ3JhcGhFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
RG9jdW1lbnQ7CisKK2NsYXNzIFdNTFBFbGVtZW50IDogcHVibGljIEhUTUxQYXJhZ3JhcGhFbGVt
ZW50eworcHVibGljOgorICAgIFdNTFBFbGVtZW50KERvY3VtZW50Kik7CisgICAgdmlydHVhbCB+
V01MUEVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShN
YXBwZWRBdHRyaWJ1dGUqKTsKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKworcHJp
dmF0ZToKKyAgICBTdHJpbmcgbV9tb2RlOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlm
CkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQYWdlU3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvd21sL1dNTFBhZ2VTdGF0ZS5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxQ
YWdlU3RhdGUuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
ICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAo
QykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5j
bHVkZSAiSGlzdG9yeUl0ZW0uaCIKKyNpbmNsdWRlICJOYW1lZEF0dHJNYXAuaCIKKyNpbmNsdWRl
ICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01M
RG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5o
IgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxQYWdlU3RhdGU6OldNTFBhZ2VTdGF0ZShQ
YWdlKiBwYWdlKQoreworICAgIG1fcGFnZSA9IHBhZ2U7CisgICAgbV9oaXN0TGVuID0gMDsKKyAg
ICBtX2FjdGl2ZUNhcmQgPSAwOworICAgIG1faGFzRGVja0FjY2VzcyA9IGZhbHNlOworfQorCitX
TUxQYWdlU3RhdGU6On5XTUxQYWdlU3RhdGUoKQoreworICAgIG1fdmFyaWFibGVzLmNsZWFyKCk7
CisgICAgbV9wYWdlID0gMDsKKyAgICBtX2FjdGl2ZUNhcmQgPSAwOworICAgIG1faGFzRGVja0Fj
Y2VzcyA9IGZhbHNlOworfQorCit2b2lkIFdNTFBhZ2VTdGF0ZTo6cmVzZXQoKQoreworICAgIC8v
cmVtb3ZlIGFsbCB0aGUgdmFyaWFibGVzIGluIHRoZSBjdXJyZW50IGJyb3dzZXIgY29udGV4dAor
ICAgIG1fdmFyaWFibGVzLmNsZWFyKCk7CisKKyAgICAvL2NsZWFyIHRoZSBuYXZpZ2F0aW9uIGhp
c3Rvcnkgc3RhdGUgCisgICAgaWYgKG1fcGFnZSkKKyAgICAgICAgbV9wYWdlLT5iYWNrRm9yd2Fy
ZExpc3QoKS0+Y2xlYXJXbWxQYWdlSGlzdG9yeSgpOworCisgICAgLy9yZXNldCBpbXBsZW1lbnRh
dGlvbi1zcGVjZmljIHN0YXRlIGlmIFVBIGhhcworICAgIG1faGlzdExlbiA9IDE7Cit9CisKK3Zv
aWQgV01MUGFnZVN0YXRlOjpzdG9yZVZhcmlhYmxlKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3Qg
U3RyaW5nJiB2YWwpIAoreworICAgIG1fdmFyaWFibGVzLnNldChuYW1lLCB2YWwpOworfQorCit2
b2lkIFdNTFBhZ2VTdGF0ZTo6c3RvcmVWYXJpYWJsZXMoVmFyaWFibGVNYXAmIHZhcnMpIAorewor
ICAgIG1fdmFyaWFibGVzID0gdmFyczsKK30KKworU3RyaW5nIFdNTFBhZ2VTdGF0ZTo6Z2V0VmFy
aWJhbGUoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdCAKK3sKKyAgICByZXR1cm4gbV92YXJpYWJs
ZXMuZ2V0KG5hbWUpOworfQorCitib29sIFdNTFBhZ2VTdGF0ZTo6aGFzVmFyaWFibGVzKCkgY29u
c3QgCit7CisgICAgcmV0dXJuIG1fdmFyaWFibGVzLnNpemUoKTsKK30KKworUGFnZSogV01MUGFn
ZVN0YXRlOjpwYWdlKCkgY29uc3QgeworICAgIHJldHVybiBtX3BhZ2U7Cit9CisKK2ludCBXTUxQ
YWdlU3RhdGU6Omhpc3RvcnlMZW5ndGgoKSBjb25zdCB7CisgICAgcmV0dXJuIG1faGlzdExlbjsK
K30KKwordm9pZCBXTUxQYWdlU3RhdGU6OnNldEhpc3RvcnlMZW5ndGgoaW50IGxlbikgeworICAg
IG1faGlzdExlbiA9IGxlbjsKK30KKworV01MQ2FyZEVsZW1lbnQqIFdNTFBhZ2VTdGF0ZTo6YWN0
aXZlQ2FyZCgpCit7CisgICAgcmV0dXJuIG1fYWN0aXZlQ2FyZDsKK30KKwordm9pZCBXTUxQYWdl
U3RhdGU6OnNldEFjdGl2ZUNhcmQoV01MQ2FyZEVsZW1lbnQqIGNhcmQpCit7CisgICAgbV9hY3Rp
dmVDYXJkID0gY2FyZDsKK30KKwordm9pZCBXTUxQYWdlU3RhdGU6OnNldERlY2tBY2Nlc3NEb21h
aW4oY29uc3QgU3RyaW5nJiBkb21haW4pCit7CisgICAgbV9hY2Nlc3NEb21haW4gPSBkb21haW47
Cit9CisKK3ZvaWQgV01MUGFnZVN0YXRlOjpzZXREZWNrQWNjZXNzUGF0aChjb25zdCBTdHJpbmcm
IHBhdGgpCit7CisgICAgbV9hY2Nlc3NQYXRoID0gcGF0aDsKK30KKwordm9pZCBXTUxQYWdlU3Rh
dGU6OnNldE5lZWRDaGVja0RlY2tBY2Nlc3MoYm9vbCBuZWVkKQoreworICAgIGlmIChtX2hhc0Rl
Y2tBY2Nlc3MgJiYgbmVlZCkgeworICAgICAgICBpZiAoV01MSGVscGVyOjp0b2tlbml6ZXIoKSkK
KyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKE11bHRpQWNj
ZXNzRWxlbWVudHNFcnJvcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbV9oYXNEZWNrQWNjZXNz
ID0gbmVlZDsKKyAgICAgICAgbV9hY2Nlc3NQYXRoID0gU3RyaW5nKCk7CisgICAgICAgIG1fYWNj
ZXNzRG9tYWluID0gU3RyaW5nKCk7CisgICAgfQorfQorCitib29sIFdNTFBhZ2VTdGF0ZTo6aGFz
RGVja0FjY2VzcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1faGFzRGVja0FjY2VzczsKK30KKwor
Ym9vbCBXTUxQYWdlU3RhdGU6OmlzRGVja0FjY2Vzc2libGUoKQoreworICAgIGlmICghbV9oYXNE
ZWNrQWNjZXNzIHx8ICFtX3BhZ2UgfHwgIW1fcGFnZS0+YmFja0ZvcndhcmRMaXN0KCkgfHwgIW1f
cGFnZS0+YmFja0ZvcndhcmRMaXN0KCktPmJhY2tJdGVtKCkpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgSGlzdG9yeUl0ZW0qIGhpc3RJdGVtID0gbV9wYWdlLT5iYWNrRm9yd2FyZExpc3Qo
KS0+YmFja0l0ZW0oKTsKKyAgICBLVVJMIHVybChoaXN0SXRlbS0+dXJsU3RyaW5nKCkpOworICAg
IFN0cmluZyBwcmV2SG9zdCA9IHVybC5ob3N0KCk7CisgICAgLy8gZm9yICdmaWxlJyBVUkksIHRo
ZSBob3N0IHBhcnQgbWF5IGJlIGVtcHR5LCBzbyB3ZSBzaG91bGQgY29tcGxldGUgaXQuCisgICAg
aWYgKHByZXZIb3N0LmlzRW1wdHkoKSkKKyAgICAgICAgcHJldkhvc3QgPSAibG9jYWxob3N0IjsK
KyAgICBTdHJpbmcgcHJldlBhdGggPSB1cmwucGF0aCgpOworCisgICAgaGlzdEl0ZW0gPSBtX3Bh
Z2UtPmJhY2tGb3J3YXJkTGlzdCgpLT5jdXJyZW50SXRlbSgpOworICAgIEtVUkwgY3VyVXJsKGhp
c3RJdGVtLT51cmxTdHJpbmcoKSk7CisgICAgU3RyaW5nIGN1clBhdGggPSBjdXJVcmwucGF0aCgp
OworCisgICAgaWYgKGVxdWFsSWdub3JpbmdSZWYodXJsLCBjdXJVcmwpKQorICAgICAgIHJldHVy
biB0cnVlOworCisgICAgYm9vbCBjYW5BY2Nlc3MgPSBmYWxzZTsKKyAgICAvLyAiLyIgaXMgdGhl
IGRlZmF1bHQgdmFsdWUgaWYgbm90IHNwZWNpZmllZAorICAgIGlmIChtX2FjY2Vzc1BhdGguaXNF
bXB0eSgpKSAgCisgICAgICAgIG1fYWNjZXNzUGF0aCA9ICIvIjsKKyAgICBlbHNlIGlmIChtX2Fj
Y2Vzc1BhdGguZW5kc1dpdGgoIi8iKSAmJiAobV9hY2Nlc3NQYXRoICE9ICIvIikpCisgICAgICAg
IG1fYWNjZXNzUGF0aCA9IG1fYWNjZXNzUGF0aC5sZWZ0KChtX2FjY2Vzc1BhdGgubGVuZ3RoKCkt
MSkpOworCisKKyAgICAvLyBjdXJyZW50IGRlY2sgZG9tYWluIGlzIHRoZSBkZWZhdWx0IHZhbHVl
IGlmIG5vdCBzcGVjaWZpZWQKKyAgICBpZiAobV9hY2Nlc3NEb21haW4uaXNFbXB0eSgpKQorICAg
ICAgICBtX2FjY2Vzc0RvbWFpbiA9IHByZXZIb3N0OworCisgICAgLy9jb252ZXJ0IHJlbGF0aXZl
IFVSTCB0byBhYnNvbHV0ZSBVUkwgYmVmb3JlIHBlcmZvcm1pbmcgcGF0aCBtYXRjaGluZworICAg
IGlmIChwcmV2SG9zdCA9PSBtX2FjY2Vzc0RvbWFpbikgeworICAgICAgICBpZiAoIW1fYWNjZXNz
UGF0aC5zdGFydHNXaXRoKCIvIikpIHsKKyAgICAgICAgICAgaW50IGlkeCA9IGN1clBhdGgucmV2
ZXJzZUZpbmQoJy8nKTsKKyAgICAgICAgICAgaWYgKGlkeCAhPSAtMSkgeworICAgICAgICAgICAg
ICAgY3VyUGF0aCA9IGN1clBhdGgubGVmdChpZHgrMSk7CisgICAgICAgICAgICAgICBjdXJQYXRo
ICs9IG1fYWNjZXNzUGF0aDsKKyAgICAgICAgICAgICAgIGN1clVybC5zZXRQYXRoKGN1clBhdGgp
OworICAgICAgICAgICAgICAgbV9hY2Nlc3NQYXRoID0gY3VyVXJsLnBhdGgoKTsKKyAgICAgICAg
ICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gcGF0aCBwcmVmaXggbWF0Y2hpbmcKKyAg
ICBpZiAocHJldlBhdGguc3RhcnRzV2l0aChtX2FjY2Vzc1BhdGgpICYmIAorICAgICAgICgocHJl
dlBhdGhbbV9hY2Nlc3NQYXRoLmxlbmd0aCgpXSA9PSAnLycpIHx8IChwcmV2UGF0aC5sZW5ndGgo
KSA9PSBtX2FjY2Vzc1BhdGgubGVuZ3RoKCkpKSkgeworICAgICAgICBjYW5BY2Nlc3MgPSB0cnVl
OworCisgICAgICAgIC8vIGRvbWFpbiBzdWZmaXggbWF0Y2hpbmcKKyAgICAgICAgdW5zaWduZWQg
ZG9tYWluTGVuID0gbV9hY2Nlc3NEb21haW4ubGVuZ3RoKCk7CisgICAgICAgIHVuc2lnbmVkIGhv
c3RMZW4gPSBwcmV2SG9zdC5sZW5ndGgoKTsKKyAgICAgICAgaWYgKHByZXZIb3N0LmVuZHNXaXRo
KG1fYWNjZXNzRG9tYWluKSAmJiAocHJldkhvc3RbaG9zdExlbi1kb21haW5MZW4tMV0gPT0gJy4n
KSB8fCAoaG9zdExlbiA9PSBkb21haW5MZW4pKQorICAgICAgICAgICAgY2FuQWNjZXNzID0gdHJ1
ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY2FuQWNjZXNzID0gZmFsc2U7CisgICAgfQor
CisgICAgcmV0dXJuICBjYW5BY2Nlc3M7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTFBh
Z2VTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFBhZ2VTdGF0ZS5oCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MUGFnZVN0YXRlLmgJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1v
YmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisg
KiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTFBhZ2VTdGF0ZV9oCisjZGVmaW5lIFdNTFBhZ2VT
dGF0ZV9oCisKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiU3RyaW5nSGFzaC5oIgorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFBhZ2U7CitjbGFzcyBXTUxDYXJkRWxlbWVudDsKKwordHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBWYXJpYWJsZU1hcDsKKworY2xhc3MgV01MUGFn
ZVN0YXRlIDogcHVibGljIFJlZkNvdW50ZWQ8V01MUGFnZVN0YXRlPiB7CisKK3B1YmxpYzoKKyAg
ICBXTUxQYWdlU3RhdGUoUGFnZSopOworICAgIH5XTUxQYWdlU3RhdGUoKTsKKworICAgIC8vIHJl
c2V0IHRoZSBicm93c2VyIGNvbnRleHQgd2hlbiAnTmV3Y29udGV4dCcgYXR0cmlidXRlIG9mIGNh
cmQgZWxlbWVudCBpcworICAgIC8vIHBlcmZvcm1lZCBhcyBwYXJ0IG9mIGdvIHRhc2sKKyAgICB2
b2lkIHJlc2V0KCk7CisKKyAgICAvLyB2YXJpYWJsZXMgb3BlcmF0aW9ucyAKKyAgICB2b2lkIHN0
b3JlVmFyaWFibGUoY29uc3QgU3RyaW5nJiwgY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBzdG9y
ZVZhcmlhYmxlcyhWYXJpYWJsZU1hcCYpOworICAgIFN0cmluZyBnZXRWYXJpYmFsZShjb25zdCBT
dHJpbmcmKSBjb25zdDsKKyAgICBib29sIGhhc1ZhcmlhYmxlcygpIGNvbnN0OworCisgICAgaW50
IGhpc3RvcnlMZW5ndGgoKSBjb25zdDsKKyAgICB2b2lkIHNldEhpc3RvcnlMZW5ndGgoaW50KTsK
KworICAgIFBhZ2UqIHBhZ2UoKSBjb25zdDsKKworICAgIFdNTENhcmRFbGVtZW50KiBhY3RpdmVD
YXJkKCk7CisgICAgdm9pZCBzZXRBY3RpdmVDYXJkKFdNTENhcmRFbGVtZW50Kik7CisKKyAgICAv
LyBkZWNrIGFjY2VzcyBjb250cm9sCisgICAgdm9pZCBzZXREZWNrQWNjZXNzRG9tYWluKGNvbnN0
IFN0cmluZyYpOworICAgIHZvaWQgc2V0RGVja0FjY2Vzc1BhdGgoY29uc3QgU3RyaW5nJik7Cisg
ICAgdm9pZCBzZXROZWVkQ2hlY2tEZWNrQWNjZXNzKGJvb2wpOworICAgIGJvb2wgaGFzRGVja0Fj
Y2VzcygpIGNvbnN0OworICAgIGJvb2wgaXNEZWNrQWNjZXNzaWJsZSgpOworCitwcml2YXRlOgor
ICAgIFBhZ2UqIG1fcGFnZTsKKyAgICBWYXJpYWJsZU1hcCBtX3ZhcmlhYmxlczsKKyAgICBpbnQg
bV9oaXN0TGVuOworICAgIFdNTENhcmRFbGVtZW50KiBtX2FjdGl2ZUNhcmQ7CisgICAgU3RyaW5n
IG1fYWNjZXNzRG9tYWluOworICAgIFN0cmluZyBtX2FjY2Vzc1BhdGg7CisgICAgYm9vbCBtX2hh
c0RlY2tBY2Nlc3M7Cit9OworCit9IC8vbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29y
ZS93bWwvV01MUG9zdGZpZWxkRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwv
V01MUG9zdGZpZWxkRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxQ
b3N0ZmllbGRFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHly
aWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxQb3N0ZmllbGRFbGVtZW50LmgiCisKKyNp
bmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAiRG9j
dW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZy
YW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiTmFtZU5vZGVM
aXN0LmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgi
CisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBXTUxOYW1lczsKK3VzaW5nIG5h
bWVzcGFjZSBFdmVudE5hbWVzOworCitXTUxQb3N0ZmllbGRFbGVtZW50OjpXTUxQb3N0ZmllbGRF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIG5hbWUsIERvY3VtZW50KiBkb2MpCisgOiBXTUxF
bGVtZW50KG5hbWUsIGRvYykKK3sKK30KKworV01MUG9zdGZpZWxkRWxlbWVudDo6fldNTFBvc3Rm
aWVsZEVsZW1lbnQoKQoreworfQorCit2b2lkIFdNTFBvc3RmaWVsZEVsZW1lbnQ6Omluc2VydGVk
SW50b1RyZWUoYm9vbCBkZWVwKQoreworICAgIE5vZGUqIGFuY2VzdG9yID0gcGFyZW50Tm9kZSgp
OworICAgIC8vIHRoZSBhbmNlc3RvciBvZiA8cG9zdGZpZWxkPiBnb3QgdG8gYmUgPGdvPgorICAg
IGlmICghYW5jZXN0b3ItPmhhc1RhZ05hbWUoV01MTmFtZXM6OmdvVGFnKSkKKyAgICAgICAgcmV0
dXJuOyAgICAgCisKKyAgICBXTUxHb0VsZW1lbnQqIGdvID0gMDsKKyAgICBnbyA9IHN0YXRpY19j
YXN0PFdNTEdvRWxlbWVudCo+KGFuY2VzdG9yKTsKKyAgICBpZiAoZ28pCisgICAgICAgIGdvLT5y
ZWdpc3RlclBvc3RmaWVsZEVsZW1lbnQodGhpcyk7Cit9CisKK1N0cmluZyBXTUxQb3N0ZmllbGRF
bGVtZW50OjpuYW1lKCkgCit7CisgICAgcmV0dXJuIFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJl
ZihnZXRBdHRyaWJ1dGUoIm5hbWUiKSwgZG9jdW1lbnQoKSk7Cit9CisKK1N0cmluZyBXTUxQb3N0
ZmllbGRFbGVtZW50Ojp2YWx1ZSgpIAoreworICAgIHJldHVybiBXTUxIZWxwZXI6OnN1YnN0aXR1
dGVWYXJSZWYoZ2V0QXR0cmlidXRlKCJ2YWx1ZSIpLCBkb2N1bWVudCgpKTsKK30gICAgCisKK30K
KwpJbmRleDogV2ViQ29yZS93bWwvV01MUG9zdGZpZWxkRWxlbWVudC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuaAkocmV2aXNpb24gMCkKKysrIFdlYkNv
cmUvd21sL1dNTFBvc3RmaWVsZEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgV01MUG9zdGZpZWxkRWxlbWVudF9oCisjZGVmaW5lIFdNTFBvc3RmaWVs
ZEVsZW1lbnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFdNTFBvc3RmaWVsZEVsZW1lbnQgOiBwdWJsaWMgIFdNTEVsZW1lbnR7Citw
dWJsaWM6CisgICAgV01MUG9zdGZpZWxkRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1l
LCBEb2N1bWVudCogZG9jKTsKKyAgICB+V01MUG9zdGZpZWxkRWxlbWVudCgpOworCisgICAgdmly
dHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKTsgICAgLy8gbmVlZCB0byByZWdp
c3RlciBteXNlbGYgdG8gcGFyZW50cyBoZXJlLCBsaWtlIDxnbz4sIDxvbmV2ZW50PgorCisgICAg
U3RyaW5nIG5hbWUoKTsgICAgLy8gZXZlcnkgcG9zdGZpZWxkIHRhZyBtdXN0IGhhdmUgYSBuYW1l
IGF0dHJpYnV0ZSBhbmQgYSB2YWxpZCBhdHRyaWJ1dGUKKyAgICBTdHJpbmcgdmFsdWUoKTsKKwor
fTsKKworfQorI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQcmV2RWxlbWVudC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MUHJldkVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQor
KysgV2ViQ29yZS93bWwvV01MUHJldkVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDg0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUu
Y29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwg
d3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4K
KyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFByZXZFbGVtZW50
LmgiCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVk
ZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJIaXN0b3J5SXRlbS5oIgorI2luY2x1ZGUgIlBh
Z2UuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5o
IgorI2luY2x1ZGUgIldNTE5hbWVzLmgiCisjaW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5j
bHVkZSAiV01MU2V0dmFyRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRpbWVyRWxlbWVudC5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dNTFByZXZFbGVtZW50OjpXTUxQcmV2RWxlbWVudChj
b25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKQorICA6IFdNTFRhc2tF
bGVtZW50KHRhZ05hbWUsIGRvYykKK3sKK30KKworV01MUHJldkVsZW1lbnQ6OldNTFByZXZFbGVt
ZW50KERvY3VtZW50KiBkb2MpCisgIDogV01MVGFza0VsZW1lbnQoV01MTmFtZXM6OnByZXZUYWcs
IGRvYykKK3sKK30KKworV01MUHJldkVsZW1lbnQ6On5XTUxQcmV2RWxlbWVudCgpCit7Cit9Cisg
ICAgICAgICAgICAgICAgICAgICAgIAordm9pZCBXTUxQcmV2RWxlbWVudDo6ZXhlYyhFdmVudCog
ZXZ0LCBTdHJpbmcgdXJpKQoreworICAgIFBhZ2UqIHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7
CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBjb252ZXJ0IHZhcmlh
YmxlIG5hbWVzIGFuZCB2YWx1ZXMgb2Ygc2V0dmFyIGVsZW1lbnQgaWYgbmVjZXNzYXJ5CisgICAg
VmFyaWFibGVNYXAgbV92YXJzOworICAgIGlmIChoYXNTZXR2YXIoKSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGludCBpID0gMDsgaSA8IG1fc2V0dmFycy5zaXplKCk7ICsraSkgeworICAgICAg
ICAgICAgaWYgKCFtX3NldHZhcnNbaV0tPm5hbWUoKS5pc0VtcHR5KCkpCisgICAgICAgICAgICAg
ICAgbV92YXJzLnNldChtX3NldHZhcnNbaV0tPm5hbWUoKSwgbV9zZXR2YXJzW2ldLT52YWx1ZSgp
KTsKKyAgICAgICAgfQorICAgIH0KKyAKKyAgICAvLyB1cGRhdGUgYnJvd3NlciBjb250ZXh0IAor
ICAgIGlmICghbV92YXJzLmlzRW1wdHkoKSkKKyAgICAgICAgcGFnZS0+d21sUGFnZVN0YXRlKCkt
PnN0b3JlVmFyaWFibGVzKG1fdmFycyk7CisKKyAgICAvLyBzdG9wIHRoZSB0aW1lciBvZiB0aGUg
Y3VycmVudCBjYXJkIGlmIGl0IGlzIGFjdGl2ZQorICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0g
cGFnZS0+d21sUGFnZVN0YXRlKCktPmFjdGl2ZUNhcmQoKTsKKyAgICBpZiAoY2FyZCAmJiBjYXJk
LT5ldmVudFRpbWVyKCkpCisgICAgICAgIGNhcmQtPmV2ZW50VGltZXIoKS0+c3RvcCgpOworCisg
ICAgLy8gcHJlcGFyZSBmb3IgZGlzcGxheWluZyB0aGUgZGVzdCBjYXJkCisgICAgcGFnZS0+Z29C
YWNrKCk7Cit9CisKKworfSAvL25hbWVzcGFjZQorCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxQcmV2
RWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFByZXZFbGVtZW50LmgJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxQcmV2RWxlbWVudC5oCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9y
Y2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4g
IElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEz
MDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxQcmV2RWxlbWVudF9oCisjZGVmaW5lIFdN
TFByZXZFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTFRhc2tFbGVtZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKyAgICAKK2NsYXNzIFdNTFByZXZFbGVtZW50IDogcHVibGljIFdNTFRhc2tF
bGVtZW50IHsKK3B1YmxpYzoKKyAgICBXTUxQcmV2RWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1l
JiB0YWdOYW1lLCBEb2N1bWVudCogZG9jKTsKKyAgICBXTUxQcmV2RWxlbWVudChEb2N1bWVudCog
ZG9jKTsKKyAgICB2aXJ0dWFsIH5XTUxQcmV2RWxlbWVudCgpOworICAgIAorICAgIHZpcnR1YWwg
dm9pZCBleGVjKEV2ZW50ICosIFN0cmluZykgOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5k
aWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFJlZnJlc2hFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL3dtbC9XTUxSZWZyZXNoRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJD
b3JlL3dtbC9XTUxSZWZyZXNoRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODYg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20v
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MUmVmcmVzaEVsZW1lbnQu
aCIKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRXZlbnQuaCIKKyNpbmNsdWRl
ICJFdmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJh
bWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNs
dWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1
ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTFNldHZhckVsZW1lbnQuaCIKKyNpbmNsdWRl
ICJXTUxUaW1lckVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitXTUxSZWZyZXNo
RWxlbWVudDo6V01MUmVmcmVzaEVsZW1lbnQoY29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSwg
RG9jdW1lbnQqIGRvYykKKyAgICAgICAgOiBXTUxUYXNrRWxlbWVudCggdGFnTmFtZSwgZG9jKQor
eworfQorCitXTUxSZWZyZXNoRWxlbWVudDo6fldNTFJlZnJlc2hFbGVtZW50KCkKK3sKK30KKwor
dm9pZCAgV01MUmVmcmVzaEVsZW1lbnQ6OmV4ZWMoRXZlbnQqIGV2dCwgU3RyaW5nIHVyaSkgCit7
CisgICAgaWYgKCFkb2N1bWVudCgpLT5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXTUxQ
YWdlU3RhdGUqIHBhZ2VTdGF0ZSA9IGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCk7
CisgICAgV01MQ2FyZEVsZW1lbnQqIGNhcmQgPSBwYWdlU3RhdGUtPmFjdGl2ZUNhcmQoKTsKKyAg
ICBXTUxUaW1lckVsZW1lbnQqIHRpbWVyID0gY2FyZC0+ZXZlbnRUaW1lcigpOworICAgIC8vIEJl
Zm9yZSBwZXJmb3JtIHJlZnJlc2ggdGFzaywgd2Ugc3RvcmUgdGhlIGN1cnJlbnQgdGltZW91dCB2
YWx1ZSAKKyAgICAvLyBhbmQgdGhlbiBzdG9wIHRoZSB0aW1lcgorICAgIGlmICh0aW1lcikgewor
ICAgICAgICB0aW1lci0+c3RvcmVJbnRlcnZhbFRvUGFnZVN0YXRlKCk7CisgICAgICAgIHRpbWVy
LT5zdG9wKCk7CisgICAgfQorCisgICAgLy8gY29udmVydCB2YXJpYWJsZSBuYW1lcyBhbmQgdmFs
dWVzIG9mIHNldHZhciBlbGVtZW50IGlmIG5lY2Vzc2FyeQorICAgIFZhcmlhYmxlTWFwIG1fdmFy
czsKKyAgICBpZiAoaGFzU2V0dmFyKCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9
IDA7IGkgPCBtX3NldHZhcnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmICghbV9zZXR2
YXJzW2ldLT5uYW1lKCkuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgIG1fdmFycy5zZXQobV9z
ZXR2YXJzW2ldLT5uYW1lKCksIG1fc2V0dmFyc1tpXS0+dmFsdWUoKSk7CisgICAgICAgIH0KKyAg
ICB9ICAKKworICAgIC8vIHVwZGF0ZSBicm93c2VyIGNvbnRleHQgCisgICAgaWYgKCFtX3ZhcnMu
aXNFbXB0eSgpKQorICAgICAgICBwYWdlU3RhdGUtPnN0b3JlVmFyaWFibGVzKG1fdmFycyk7CisK
KyAgICAvL3JlZGlzcGxheSBjdXJyZW10IGNhcmQgd2l0aCBjdXJyZW50IHZhcmlhYmxlIHN0YXRl
CisgICAgZG9jdW1lbnQoKS0+ZnJhbWUoKS0+bG9hZGVyKCktPnJlbG9hZCgpOworCisgICAgLy9B
ZnRlciByZWZyZXNoaW5nIHRhc2ssIHJlc3VtZSB0aGUgdGltZXIgaWYgaXQgZXhzaXRzIAorICAg
IGlmICh0aW1lcikKKyAgICAgICAgdGltZXItPnN0YXJ0KCk7Cit9CisKK30gLy9uYW1lc3BhY2UK
KwpJbmRleDogV2ViQ29yZS93bWwvV01MUmVmcmVzaEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxSZWZyZXNoRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93
bWwvV01MUmVmcmVzaEVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENv
cHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisK
KyNpZm5kZWYgV01MUmVmcmVzaEVsZW1lbnRfaAorI2RlZmluZSBXTUxSZWZyZXNoRWxlbWVudF9o
CisKKyNpbmNsdWRlICJTdHlsZWRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNp
bmNsdWRlICJXTUxUYXNrRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3VzaW5n
IG5hbWVzcGFjZSBXTUxOYW1lczsKKworICAgICAgICAgICAgICAgICAgICAgICAKK2NsYXNzIFdN
TFJlZnJlc2hFbGVtZW50IDogcHVibGljIFdNTFRhc2tFbGVtZW50IHsKK3B1YmxpYzoKKyAgICBX
TUxSZWZyZXNoRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVudCog
ZG9jKTsKKyAgICB2aXJ0dWFsIH5XTUxSZWZyZXNoRWxlbWVudCgpOworICAgIAorICAgIHZpcnR1
YWwgdm9pZCBleGVjKEV2ZW50ICosIFN0cmluZykgOworfTsKKworfSAvL25hbWVzcGFjZQorCisj
ZW5kaWYKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQorKysgV2Vi
Q29yZS93bWwvV01MU2VsZWN0RWxlbWVudC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTg4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29t
LworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3Jp
dGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAq
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldNTFNlbGVjdEVsZW1lbnQu
aCIKKworI2luY2x1ZGUgIkV2ZW50LmgiCisjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCisjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCisjaW5jbHVkZSAiS2V5Ym9hcmRFdmVudC5oIgorI2luY2x1ZGUgPG1hdGguaD4KKyNp
bmNsdWRlICJNb3VzZUV2ZW50LmgiCisjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgorI2luY2x1
ZGUgIlJlbmRlck1lbnVMaXN0LmgiCisjaW5jbHVkZSAiUmVuZGVyT2JqZWN0LmgiCisjaW5jbHVk
ZSAiUmVuZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxO
YW1lcy5oIgorI2luY2x1ZGUgIldNTE9wdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQYWdl
U3RhdGUuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKyNpbmNsdWRlIDx3dGYvVmVjdG9y
Lmg+CisKKyNpZiBQTEFURk9STShNQUMpCisjZGVmaW5lIEFSUk9XX0tFWVNfUE9QX01FTlUgMQor
I2Vsc2UKKyNkZWZpbmUgQVJST1dfS0VZU19QT1BfTUVOVSAwCisjZW5kaWYKKwordXNpbmcgbmFt
ZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2RlOworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3VzaW5nIG5hbWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIFdNTE5h
bWVzOworCitXTUxTZWxlY3RFbGVtZW50OjpXTUxTZWxlY3RFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZywgRG9jdW1lbnQqIGRvYykKKyAgICA6IEhUTUxTZWxlY3RFbGVtZW50KHRhZywg
ZG9jLCAwKQoreworfQorCitXTUxTZWxlY3RFbGVtZW50Ojp+V01MU2VsZWN0RWxlbWVudCgpCit7
Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVk
QXR0cmlidXRlKiBhdHRyKQoreworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gbmFtZUF0dHIpIHsK
KyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+dmFsdWUoKSkpCisg
ICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFy
aWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBtX25hbWUg
PSBhdHRyLT52YWx1ZSgpOworCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdmFsdWVB
dHRyKQorICAgICAgICBtX3ZhbHVlID0gYXR0ci0+dmFsdWUoKTsKKyAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gaW5hbWVBdHRyKSB7CisgICAgICAgIGlmIChXTUxIZWxwZXI6Omhhc1Zhcmlh
YmxlUmVmKGF0dHItPnZhbHVlKCkpKQorICAgICAgICAgICAgV01MSGVscGVyOjp0b2tlbml6ZXIo
KS0+cmVwb3J0RXJyb3IoSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3IpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX2lOYW1lID0gYXR0ci0+dmFsdWUoKTsKKworICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGl2YWx1ZUF0dHIpCisgICAgICAgIG1faVZhbHVlID0gYXR0ci0+
dmFsdWUoKTsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gbXVsdGlwbGVBdHRyKSB7Cisg
ICAgICAgIGJvb2wgb2xkTXVsdGlwbGUgPSBtdWx0aXBsZSgpOworICAgICAgICBzZXRNdWx0aXBs
ZShhdHRyLT52YWx1ZSgpID09ICJ0cnVlIik7CisgICAgICAgIGlmICgob2xkTXVsdGlwbGUgIT0g
bXVsdGlwbGUoKSkgJiYgYXR0YWNoZWQoKSkgeworICAgICAgICAgICAgZGV0YWNoKCk7CisgICAg
ICAgICAgICBhdHRhY2goKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgp
ID09IEhUTUxOYW1lczo6c2l6ZUF0dHIpCisgICAgICAgIDsvL0RvIG5vdGhpbmcKKyAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gSFRNTE5hbWVzOjpkaXNhYmxlZEF0dHIpCisgICAgICAgIDsv
L0RvIG5vdGhpbmcKKyAgICBlbHNlCisgICAgICAgIEhUTUxTZWxlY3RFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50Ojp1cGRhdGVB
dHRyc0lmTmVlZGVkKCkgCit7CisgICAgU3RyaW5nIHN1YiA9IFdNTEhlbHBlcjo6c3Vic3RpdHV0
ZVZhclJlZihtX3ZhbHVlLCBkb2N1bWVudCgpKTsKKyAgICBpZiAobV92YWx1ZSAhPSBzdWIpIHsK
KyAgICAgICAgc2V0QXR0cmlidXRlKHZhbHVlQXR0ciwgc3ViKTsKKyAgICAgICAgbV92YWx1ZSA9
IHN1YjsKKyAgICB9CisKKyAgICBzdWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYobV9p
VmFsdWUsIGRvY3VtZW50KCkpOworICAgIGlmIChtX2lWYWx1ZSAhPSBzdWIpIHsKKyAgICAgICAg
c2V0QXR0cmlidXRlKGl2YWx1ZUF0dHIsIHN1Yik7CisgICAgICAgIG1faVZhbHVlID0gc3ViOwor
ICAgIH0KKworICAgIFN0cmluZyB0aXRsZSA9IGdldEF0dHJpYnV0ZSgidGl0bGUiKTsKKyAgICBz
dWIgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodGl0bGUsIGRvY3VtZW50KCkpOworICAg
IGlmICh0aXRsZSAhPSBzdWIpCisgICAgICAgIHNldEF0dHJpYnV0ZSh0aXRsZUF0dHIsIHRpdGxl
KTsKK30KKwordm9pZCBXTUxTZWxlY3RFbGVtZW50OjpzZXRTZWxlY3RlZEluZGV4KGludCBvcHRp
b25JbmRleCwgYm9vbCBkZXNlbGVjdCwgYm9vbCBmaXJlT25DaGFuZ2UpCit7CisgICAgY29uc3Qg
VmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgaW50IGxpc3RJ
bmRleCA9IG9wdGlvblRvTGlzdEluZGV4KG9wdGlvbkluZGV4KTsKKyAgICBXTUxPcHRpb25FbGVt
ZW50KiBlbGVtZW50ID0gMDsKKworICAgIGlmICghbXVsdGlwbGUoKSkKKyAgICAgICAgZGVzZWxl
Y3QgPSB0cnVlOworCisgICAgaWYgKGxpc3RJbmRleCA+PSAwKSB7CisgICAgICAgIGlmIChhY3Rp
dmVTZWxlY3Rpb25BbmNob3JJbmRleCgpIDwgMCB8fCBkZXNlbGVjdCkKKyAgICAgICAgICAgIHNl
dEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KGxpc3RJbmRleCk7CisgICAgICAgIGlmIChhY3Rp
dmVTZWxlY3Rpb25FbmRJbmRleCgpIDwgMCB8fCBkZXNlbGVjdCkKKyAgICAgICAgICAgIHNldEFj
dGl2ZVNlbGVjdGlvbkVuZEluZGV4KGxpc3RJbmRleCk7CisgICAgICAgIGVsZW1lbnQgPSBzdGF0
aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbbGlzdEluZGV4XSk7CisgICAgICAgIGVs
ZW1lbnQtPnNldFNlbGVjdGVkU3RhdGUodHJ1ZSk7CisgICAgfQorCisgICAgaWYgKGRlc2VsZWN0
KQorICAgICAgICBkZXNlbGVjdEl0ZW1zKGVsZW1lbnQpOworCisgICAgc2Nyb2xsVG9TZWxlY3Rp
b24oKTsKKworICAgIC8vIFRoaXMgb25seSBnZXRzIGNhbGxlZCB3aXRoIGZpcmVPbkNoYW5nZSBm
b3IgbWVudSBsaXN0cy4gCisgICAgaWYgKGZpcmVPbkNoYW5nZSAmJiB1c2VzTWVudUxpc3QoKSkK
KyAgICAgICAgbWVudUxpc3RPbkNoYW5nZSgpOworfQorCitTdHJpbmcgV01MU2VsZWN0RWxlbWVu
dDo6dmFsdWVUb0lWYWx1ZShTdHJpbmcmIHZhbHVlKQoreworICAgIGlmICh2YWx1ZS5pc0VtcHR5
KCkpIAorICAgICAgICByZXR1cm4gdmFsdWU7CisKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1l
bnQqPiYgaXRlbXMgPSBsaXN0SXRlbXMoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB2YWxWZWN0czsK
KyAgICB2YWx1ZS5zcGxpdCgnOycsIHZhbFZlY3RzKTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6aXRl
cmF0b3IgaXQgPSB2YWxWZWN0cy5iZWdpbigpOworICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9wdGlv
biA9IDA7IAorICAgIFN0cmluZyBpVmFsOworICAgIFN0cmluZyB2YWw7CisgICAgd2hpbGUgKGl0
ICE9IHZhbFZlY3RzLmVuZCgpKSB7CisgICAgICAgIHZhbCA9ICppdDsKKyAgICAgICAgaW50IG9w
dElkeCA9IDA7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7
IGkrKykgeworICAgICAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFn
KSkgeworICAgICAgICAgICAgICAgIG9wdElkeCsrOworICAgICAgICAgICAgICAgIG9wdGlvbiA9
IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihpdGVtc1tpXSk7CisgICAgICAgICAgICAg
ICAgaWYgKG9wdGlvbi0+dmFsdWUoKSA9PSB2YWwpIHsKKyAgICAgICAgICAgICAgICAgICAgaVZh
bCArPSBTdHJpbmc6Om51bWJlcihvcHRJZHgpOworICAgICAgICAgICAgICAgICAgICBpVmFsICs9
ICI7IjsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICsraXQ7CisgICAgfQorCisgICAgaWYgKGlW
YWwuZW5kc1dpdGgoIjsiKSkgCisgICAgICAgIGlWYWwgPSBpVmFsLmxlZnQoaVZhbC5sZW5ndGgo
KS0xKTsKKworICAgIHJldHVybiB2YWxpZGF0ZUluZGV4VmFsdWUoaVZhbCk7Cit9CisKK1N0cmlu
ZyBXTUxTZWxlY3RFbGVtZW50OjppdmFsdWVUb1ZhbHVlKFN0cmluZyYgaXZhbHVlKQoreworICAg
IGlmIChpdmFsdWUuaXNFbXB0eSgpKSAKKyAgICAgICAgcmV0dXJuIGl2YWx1ZTsKKworICAgIFdN
TE9wdGlvbkVsZW1lbnQqIG9wdGlvbiA9IDA7IAorICAgIFN0cmluZyBpdmFsOworICAgIFN0cmlu
ZyB2YWw7CisgICAgaW50IG9wdElkeCA9IC0xOworICAgIGludCBsaXN0SWR4ID0gLTE7CisgICAg
Y29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4mIGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgVmVj
dG9yPFN0cmluZz4gdmFsVmVjdHM7CisgICAgaXZhbHVlLnNwbGl0KCc7JywgdmFsVmVjdHMpOwor
ICAgIFZlY3RvcjxTdHJpbmc+OjppdGVyYXRvciBpdCA9IHZhbFZlY3RzLmJlZ2luKCk7CisgICAg
d2hpbGUgKGl0ICE9IHZhbFZlY3RzLmVuZCgpKSB7CisgICAgICAgIGl2YWwgPSAqaXQrKzsKKwor
ICAgICAgICBvcHRJZHggPSBpdmFsLnRvSW50KCk7CisgICAgICAgIGlmICgob3B0SWR4IDwgMSkg
fHwgKG9wdElkeCA+IHN0YXRpY19jYXN0PGludD4oaXRlbXMuc2l6ZSgpKSkpCisgICAgICAgICAg
ICAgICBjb250aW51ZTsgCisKKyAgICAgICAgbGlzdElkeCA9IG9wdGlvblRvTGlzdEluZGV4KG9w
dElkeC0xKTsKKyAgICAgICAgb3B0aW9uID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+
KGl0ZW1zW2xpc3RJZHhdKTsKKworICAgICAgICB2YWwgKz0gb3B0aW9uLT52YWx1ZSgpOworICAg
ICAgICB2YWwgKz0gIjsiOworICAgIH0KKworICAgIGlmICh2YWwuZW5kc1dpdGgoIjsiKSkgCisg
ICAgICAgIHZhbCA9IHZhbC5sZWZ0KHZhbC5sZW5ndGgoKS0xKTsKKworICAgIHJldHVybiB2YWw7
Cit9CisKK1N0cmluZyBXTUxTZWxlY3RFbGVtZW50Ojp2YWxpZGF0ZUluZGV4VmFsdWUoU3RyaW5n
JiBpdmFsKQoreworICAgIGlmIChpdmFsLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGl2YWw7
CisKKyAgICBib29sIG9rID0gdHJ1ZTsKKyAgICBTdHJpbmcgdmFsKCIiKTsKKyAgICBTdHJpbmcg
bmV3VmFsOworICAgIFZlY3RvcjxTdHJpbmc+IHZhbFZlY3RzOworICAgIGl2YWwuc3BsaXQoJzsn
LCB2YWxWZWN0cyk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWxWZWN0cy5zaXplKCk7
ICsraSkgeworICAgICAgICB1bnNpZ25lZCBuVmFsID0gdmFsVmVjdHNbaV0udG9JbnQoJm9rKTsK
KyAgICAgICAgaWYgKCFvayB8fCAoblZhbCA8IDEpIHx8IChuVmFsID4gbGVuZ3RoKCkpKSB7Cisg
ICAgICAgICAgICB2YWxWZWN0cy5yZW1vdmUoaSk7CisgICAgICAgICAgICBpLS07CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBuZXdWYWwgPSBTdHJpbmc6Om51bWJlcihuVmFsKTsKKyAg
ICAgICAgICAgIGlmICgtMSA9PSB2YWwuZmluZChuZXdWYWwpKSB7CisgICAgICAgICAgICAgICAg
dmFsICs9IG5ld1ZhbDsgCisgICAgICAgICAgICAgICAgdmFsICs9ICI7IjsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh2YWwuZW5kc1dpdGgoIjsiKSkgCisgICAg
ICAgIHZhbCA9IHZhbC5sZWZ0KHZhbC5sZW5ndGgoKS0xKTsKKworICAgIHJldHVybiB2YWw7Cit9
CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6Y2FsY0RlZmF1bHRPcHRpb25JbmRleCgpCit7Cisg
ICAgaWYgKCFkb2N1bWVudCgpLT5wYWdlKCkpCisgICAgICAgIHJldHVybjsKKyAgICBXTUxQYWdl
U3RhdGUgKnBhZ2VTdGF0ZSA9IGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCk7Cisg
ICAgU3RyaW5nIHZhcjsKKyAgICBpZiAoIW1faU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIHZh
ciA9IHBhZ2VTdGF0ZS0+Z2V0VmFyaWJhbGUobV9pTmFtZSk7CisgICAgICAgIGlmICghdmFyLmlz
RW1wdHkoKSkKKyAgICAgICAgICAgIG1fZGVmYXVsdE9wdElkeCA9IHZhbGlkYXRlSW5kZXhWYWx1
ZSh2YXIpOworICAgIH0KKworICAgIGlmIChtX2RlZmF1bHRPcHRJZHguaXNFbXB0eSgpICYmICFt
X2lWYWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIG1fZGVmYXVsdE9wdElkeCA9IHZhbGlkYXRlSW5k
ZXhWYWx1ZShtX2lWYWx1ZSk7CisKKyAgICBpZiAobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSAm
JiAhbV9uYW1lLmlzRW1wdHkoKSkgeworICAgICAgICB2YXIgPSBwYWdlU3RhdGUtPmdldFZhcmli
YWxlKG1fbmFtZSk7CisgICAgICAgIGlmICghdmFyLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIG1f
ZGVmYXVsdE9wdElkeCA9IHZhbHVlVG9JVmFsdWUodmFyKTsKKyAgICB9CisKKyAgICBpZiAobV9k
ZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSAmJiAhbV92YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIG1f
ZGVmYXVsdE9wdElkeCA9IHZhbHVlVG9JVmFsdWUobV92YWx1ZSk7CisKKyAgICBpZiAobV9kZWZh
dWx0T3B0SWR4LmlzRW1wdHkoKSAmJiBtdWx0aXBsZSgpKQorICAgICAgICBtX2RlZmF1bHRPcHRJ
ZHggPSAiMCI7CisgICAgZWxzZSBpZiAobV9kZWZhdWx0T3B0SWR4LmlzRW1wdHkoKSkKKyAgICAg
ICAgbV9kZWZhdWx0T3B0SWR4ID0gIjEiOworCit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6
aW5pdGlhbGlzZVZhcmlhYmxlcygpCit7CisgICAgY29uc3QgVmVjdG9yPEhUTUxFbGVtZW50Kj4m
IGl0ZW1zID0gbGlzdEl0ZW1zKCk7CisgICAgaWYgKGl0ZW1zLnNpemUoKSA8PSAwKQorICAgICAg
ICByZXR1cm47CisKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKKyAgICBXTUxQYWdl
U3RhdGUqIHBhZ2VTdGF0ZSA9IGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCk7Cisg
ICAgQVNTRVJUKHBhZ2VTdGF0ZSk7CisgICAgaWYgKCFtX25hbWUuaXNFbXB0eSgpICYmICFtdWx0
aXBsZSgpKSB7CisKKyAgICAgICAgdW5zaWduZWQgaW50IGlkeCA9IG1fZGVmYXVsdE9wdElkeC50
b0ludCgpOyAKKyAgICAgICAgaWYgKGlkeCA8IDEgfHwgaWR4ID4gaXRlbXMuc2l6ZSgpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGludCBsaXN0SWR4
ID0gb3B0aW9uVG9MaXN0SW5kZXgoaWR4LTEpOworICAgICAgICAgICAgV01MT3B0aW9uRWxlbWVu
dCogb3B0aW9uID0gc3RhdGljX2Nhc3Q8V01MT3B0aW9uRWxlbWVudCo+KGl0ZW1zW2xpc3RJZHhd
KTsKKyAgICAgICAgICAgIHBhZ2VTdGF0ZS0+c3RvcmVWYXJpYWJsZShtX25hbWUsIG9wdGlvbi0+
dmFsdWUoKSk7CisgICAgICAgIH0KKworICAgIH0gZWxzZSBpZiAoIW1fbmFtZS5pc0VtcHR5KCkp
IHsKKyAgICAgICAgU3RyaW5nIG5hbWVWYWwgPSBpdmFsdWVUb1ZhbHVlKG1fZGVmYXVsdE9wdElk
eCk7CisgICAgICAgIHBhZ2VTdGF0ZS0+c3RvcmVWYXJpYWJsZShtX25hbWUsIG5hbWVWYWwpOwor
ICAgIH0KKworICAgIGlmICghbV9pTmFtZS5pc0VtcHR5KCkpCisgICAgICAgIHBhZ2VTdGF0ZS0+
c3RvcmVWYXJpYWJsZShtX2lOYW1lLCBtX2RlZmF1bHRPcHRJZHgpOworfQorCit2b2lkIFdNTFNl
bGVjdEVsZW1lbnQ6OnByZVNlbGVjdE9wdGlvbnNCeURlZmF1bHQoKQoreworICAgIFZlY3RvcjxT
dHJpbmc+IGlkeFZlY3RzOworICAgIG1fZGVmYXVsdE9wdElkeC5zcGxpdCgnOycsIGlkeFZlY3Rz
KTsKKyAgICBWZWN0b3I8U3RyaW5nPjo6aXRlcmF0b3IgaXQgPSBpZHhWZWN0cy5iZWdpbigpOwor
ICAgIGludCBpZHggPSAtMTsKKyAgICBpZiAobXVsdGlwbGUoKSkgeworICAgICAgICB3aGlsZSAo
aXQgIT0gaWR4VmVjdHMuZW5kKCkpIHsKKyAgICAgICAgICAgIGlkeCA9ICgqaXQpLnRvSW50KCk7
IAorICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChpZHgtMSwgZmFsc2UpOworICAgICAgICAg
ICAgKytpdDsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlkeCA9ICgqaXQpLnRv
SW50KCk7IAorICAgICAgICBzZXRTZWxlY3RlZEluZGV4KGlkeC0xLCBmYWxzZSk7CisgICAgfQor
fQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnNlbGVjdEluaXRpYWxPcHRpb25zKCkKK3sKKyAg
ICBjYWxjRGVmYXVsdE9wdGlvbkluZGV4KCk7CisKKyAgICBpZiAoIW1fZGVmYXVsdE9wdElkeC5p
c0VtcHR5KCkpIHsKKyAgICAgICAgaW5pdGlhbGlzZVZhcmlhYmxlcygpOworICAgICAgICBwcmVT
ZWxlY3RPcHRpb25zQnlEZWZhdWx0KCk7CisgICAgfQorfQorCit2b2lkIFdNTFNlbGVjdEVsZW1l
bnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqIGV2dCkKK3sKKyAgICBpZiAoIW11bHRpcGxl
KCkpCisgICAgICAgIG1lbnVMaXN0RGVmYXVsdEV2ZW50SGFuZGxlcihldnQpOworICAgIGVsc2Ug
CisgICAgICAgIGxpc3RCb3hEZWZhdWx0RXZlbnRIYW5kbGVyKGV2dCk7CisgICAgCisgICAgaWYg
KGV2dC0+ZGVmYXVsdEhhbmRsZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGV2dC0+
dHlwZSgpID09IGtleXByZXNzRXZlbnQgJiYgZXZ0LT5pc0tleWJvYXJkRXZlbnQoKSkgeworICAg
ICAgICBLZXlib2FyZEV2ZW50KiBrZXlib2FyZEV2ZW50ID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRF
dmVudCo+KGV2dCk7CisgICAgCisgICAgICAgIGlmICgha2V5Ym9hcmRFdmVudC0+Y3RybEtleSgp
ICYmICFrZXlib2FyZEV2ZW50LT5hbHRLZXkoKSAmJiAha2V5Ym9hcmRFdmVudC0+bWV0YUtleSgp
ICYmCisgICAgICAgICAgICBpc1ByaW50YWJsZUNoYXIoa2V5Ym9hcmRFdmVudC0+Y2hhckNvZGUo
KSkpIHsKKyAgICAgICAgICAgIHR5cGVBaGVhZEZpbmQoa2V5Ym9hcmRFdmVudCk7CisgICAgICAg
ICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBIVE1MRm9ybUNvbnRyb2xFbGVtZW50V2l0aFN0YXRlOjpkZWZh
dWx0RXZlbnRIYW5kbGVyKGV2dCk7Cit9CisKK3ZvaWQgV01MU2VsZWN0RWxlbWVudDo6bWVudUxp
c3REZWZhdWx0RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCit7CisgICAgUmVuZGVyTWVudUxpc3Qq
IG1lbnVMaXN0ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTWVudUxpc3QqPihyZW5kZXJlcigpKTsKKwor
ICAgIC8vIFVzZSBrZXkgcHJlc3MgZXZlbnQgaGVyZSBzaW5jZSBzZW5kaW5nIHNpbXVsYXRlZCBt
b3VzZSBldmVudHMKKyAgICAvLyBvbiBrZXkgZG93biBibG9ja3MgdGhlIHByb3BlciBzZW5kaW5n
IG9mIHRoZSBrZXkgcHJlc3MgZXZlbnQuCisgICAgaWYgKGV2dC0+dHlwZSgpID09IGtleXByZXNz
RXZlbnQpIHsKKyAgICAgICAgaWYgKCFyZW5kZXJlcigpIHx8ICFldnQtPmlzS2V5Ym9hcmRFdmVu
dCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBTdHJpbmcga2V5SWRlbnRpZmllciA9
IHN0YXRpY19jYXN0PEtleWJvYXJkRXZlbnQqPihldnQpLT5rZXlJZGVudGlmaWVyKCk7CisgICAg
ICAgIGJvb2wgaGFuZGxlZCA9IGZhbHNlOworI2lmIEFSUk9XX0tFWVNfUE9QX01FTlUKKyAgICAg
ICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkVudGVyIikgeworICAgICAgICAgICAgbWVudUxpc3RP
bkNoYW5nZSgpOworICAgICAgICAgICAgaWYgKGZvcm0oKSkKKyAgICAgICAgICAgICAgICBmb3Jt
KCktPnN1Ym1pdENsaWNrKGV2dCk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAg
ICAgfQorICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRG93biIgfHwga2V5SWRlbnRpZmll
ciA9PSAiVXAiIHx8IGtleUlkZW50aWZpZXIgPT0gIlUrMDAyMCIpIHsKKyAgICAgICAgICAgIGZv
Y3VzKCk7CisgICAgICAgICAgICAvLyBTYXZlIHRoZSBzZWxlY3Rpb24gc28gaXQgY2FuIGJlIGNv
bXBhcmVkIHRvIHRoZSBuZXcgc2VsZWN0aW9uIHdoZW4gd2UgY2FsbCBvbkNoYW5nZSBkdXJpbmcg
c2V0U2VsZWN0ZWRJbmRleCwKKyAgICAgICAgICAgIC8vIHdoaWNoIGdldHMgY2FsbGVkIGZyb20g
UmVuZGVyTWVudUxpc3Q6OnZhbHVlQ2hhbmdlZCwgd2hpY2ggZ2V0cyBjYWxsZWQgYWZ0ZXIgdGhl
IHVzZXIgbWFrZXMgYSBzZWxlY3Rpb24gZnJvbSB0aGUgbWVudS4KKyAgICAgICAgICAgIHNhdmVM
YXN0U2VsZWN0aW9uKCk7CisgICAgICAgICAgICBtZW51TGlzdC0+c2hvd1BvcHVwKCk7CisgICAg
ICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgaW50IGxp
c3RJbmRleCA9IG9wdGlvblRvTGlzdEluZGV4KHNlbGVjdGVkSW5kZXgoKSk7CisgICAgICAgIGlm
IChrZXlJZGVudGlmaWVyID09ICJEb3duIiB8fCBrZXlJZGVudGlmaWVyID09ICJSaWdodCIpIHsK
KyAgICAgICAgICAgIGludCBzaXplID0gbGlzdEl0ZW1zKCkuc2l6ZSgpOworICAgICAgICAgICAg
Zm9yIChsaXN0SW5kZXggKz0gMTsKKyAgICAgICAgICAgICAgICAgbGlzdEluZGV4ID49IDAgJiYg
bGlzdEluZGV4IDwgc2l6ZSAmJiAobGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSB8
fCAhbGlzdEl0ZW1zKClbbGlzdEluZGV4XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpOworICAg
ICAgICAgICAgICAgICArK2xpc3RJbmRleCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlm
IChsaXN0SW5kZXggPj0gMCAmJiBsaXN0SW5kZXggPCBzaXplKQorICAgICAgICAgICAgICAgIHNl
dFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0aW9uSW5kZXgobGlzdEluZGV4KSk7CisgICAgICAgICAg
ICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgfSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJV
cCIgfHwga2V5SWRlbnRpZmllciA9PSAiTGVmdCIpIHsKKyAgICAgICAgICAgIGludCBzaXplID0g
bGlzdEl0ZW1zKCkuc2l6ZSgpOworICAgICAgICAgICAgZm9yIChsaXN0SW5kZXggLT0gMTsKKyAg
ICAgICAgICAgICAgICAgbGlzdEluZGV4ID49IDAgJiYgbGlzdEluZGV4IDwgc2l6ZSAmJiAobGlz
dEl0ZW1zKClbbGlzdEluZGV4XS0+ZGlzYWJsZWQoKSB8fCAhbGlzdEl0ZW1zKClbbGlzdEluZGV4
XS0+aGFzTG9jYWxOYW1lKG9wdGlvblRhZykpOworICAgICAgICAgICAgICAgICAtLWxpc3RJbmRl
eCk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCAmJiBsaXN0
SW5kZXggPCBzaXplKQorICAgICAgICAgICAgICAgIHNldFNlbGVjdGVkSW5kZXgobGlzdFRvT3B0
aW9uSW5kZXgobGlzdEluZGV4KSk7CisgICAgICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKKyAgICAg
ICAgfSBlbHNlIGlmIChrZXlJZGVudGlmaWVyID09ICJFbnRlciIpIHsKKyAgICAgICAgICAgIC8v
IGxpc3RJbmRleCBzaG91bGQgYWxyZWFkeSBiZSBzZWxlY3RlZCwgYnV0IHRoaXMgd2lsbCBmaXJl
IHRoZSBvbmNoYW5nZSBoYW5kbGVyLgorICAgICAgICAgICAgc2V0U2VsZWN0ZWRJbmRleChsaXN0
VG9PcHRpb25JbmRleChsaXN0SW5kZXgpLCB0cnVlLCB0cnVlKTsKKyAgICAgICAgICAgIGhhbmRs
ZWQgPSB0cnVlOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgaWYgKGhhbmRsZWQpCisgICAg
ICAgICAgICBldnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisKKyAgICB9CisgICAgaWYgKGV2dC0+
dHlwZSgpID09IG1vdXNlZG93bkV2ZW50ICYmIGV2dC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2dCktPmJ1dHRvbigpID09IExlZnRCdXR0b24pIHsKKyAgICAg
ICAgZm9jdXMoKTsKKyAgICAgICAgaWYgKG1lbnVMaXN0LT5wb3B1cElzVmlzaWJsZSgpKQorICAg
ICAgICAgICAgbWVudUxpc3QtPmhpZGVQb3B1cCgpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIC8vIFNhdmUgdGhlIHNlbGVjdGlvbiBzbyBpdCBjYW4gYmUgY29tcGFyZWQgdG8gdGhlIG5l
dyBzZWxlY3Rpb24gd2hlbiB3ZSBjYWxsIG9uQ2hhbmdlIGR1cmluZyBzZXRTZWxlY3RlZEluZGV4
LAorICAgICAgICAgICAgLy8gd2hpY2ggZ2V0cyBjYWxsZWQgZnJvbSBSZW5kZXJNZW51TGlzdDo6
dmFsdWVDaGFuZ2VkLCB3aGljaCBnZXRzIGNhbGxlZCBhZnRlciB0aGUgdXNlciBtYWtlcyBhIHNl
bGVjdGlvbiBmcm9tIHRoZSBtZW51LgorICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsK
KyAgICAgICAgICAgIG1lbnVMaXN0LT5zaG93UG9wdXAoKTsKKyAgICAgICAgfQorICAgICAgICBl
dnQtPnNldERlZmF1bHRIYW5kbGVkKCk7CisgICAgfQorCisgICAgLy8gdXBkYXRlIG5hbWUgYW5k
IGluYW1lIHZhcmlhYmxlcyB3aXRoIG9wdGlvbidzIHZhbHVlIGFuZCBpbmRleAorICAgIHVwZGF0
ZVZhcmlhYmxlcygpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6Omxpc3RCb3hEZWZhdWx0
RXZlbnRIYW5kbGVyKEV2ZW50KiBldnQpCit7CisgICAgaWYgKCFyZW5kZXJlcigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoZXZ0LT50eXBlKCkgPT0gbW91c2Vkb3duRXZlbnQgJiYgZXZ0
LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9u
KCkgPT0gTGVmdEJ1dHRvbikgeworICAgICAgICBmb2N1cygpOworICAgICAgICAKKyAgICAgICAg
TW91c2VFdmVudCogbUV2dCA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldnQpOworICAgICAg
ICBpbnQgbGlzdEluZGV4ID0gc3RhdGljX2Nhc3Q8UmVuZGVyTGlzdEJveCo+KHJlbmRlcmVyKCkp
LT5saXN0SW5kZXhBdE9mZnNldChtRXZ0LT5vZmZzZXRYKCksIG1FdnQtPm9mZnNldFkoKSk7Cisg
ICAgICAgIGlmIChsaXN0SW5kZXggPj0gMCkgeworICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2Vs
ZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdl
IGNhbGwgb25DaGFuZ2UgZHVyaW5nIG1vdXNldXAsIG9yIGFmdGVyIGF1dG9zY3JvbGwgZmluaXNo
ZXMuCisgICAgICAgICAgICBzYXZlTGFzdFNlbGVjdGlvbigpOworCisgICAgICAgICAgICBzZXRB
Y3RpdmVTZWxlY3Rpb25TdGF0ZSh0cnVlKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgYm9v
bCBtdWx0aVNlbGVjdEtleVByZXNzZWQgPSBmYWxzZTsKKyNpZiBQTEFURk9STShNQUMpCisgICAg
ICAgICAgICBtdWx0aVNlbGVjdEtleVByZXNzZWQgPSBtRXZ0LT5tZXRhS2V5KCk7CisjZWxzZQor
ICAgICAgICAgICAgbXVsdGlTZWxlY3RLZXlQcmVzc2VkID0gbUV2dC0+Y3RybEtleSgpOworI2Vu
ZGlmCisKKyAgICAgICAgICAgIGJvb2wgc2hpZnRTZWxlY3QgPSBtdWx0aXBsZSgpICYmIG1FdnQt
PnNoaWZ0S2V5KCk7CisgICAgICAgICAgICBib29sIG11bHRpU2VsZWN0ID0gbXVsdGlwbGUoKSAm
JiBtdWx0aVNlbGVjdEtleVByZXNzZWQgJiYgIW1FdnQtPnNoaWZ0S2V5KCk7CisgICAgICAgICAg
ICAKKyAgICAgICAgICAgIEhUTUxFbGVtZW50KiBjbGlja2VkRWxlbWVudCA9IGxpc3RJdGVtcygp
W2xpc3RJbmRleF07ICAgICAgICAgICAgCisgICAgICAgICAgICBXTUxPcHRpb25FbGVtZW50KiBv
cHRpb24gPSAwOworICAgICAgICAgICAgaWYgKGNsaWNrZWRFbGVtZW50LT5oYXNMb2NhbE5hbWUo
b3B0aW9uVGFnKSkgeworICAgICAgICAgICAgICAgIG9wdGlvbiA9IHN0YXRpY19jYXN0PFdNTE9w
dGlvbkVsZW1lbnQqPihjbGlja2VkRWxlbWVudCk7CisgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgLy8gS2VlcCB0cmFjayBvZiB3aGV0aGVyIGFuIGFjdGl2ZSBzZWxlY3Rpb24gKGxp
a2UgZHVyaW5nIGRyYWcgc2VsZWN0aW9uKSwgc2hvdWxkIHNlbGVjdCBvciBkZXNlbGVjdAorICAg
ICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvblN0YXRlKCFvcHRpb24tPnNlbGVjdGVkKCkp
OworICAgICAgICAgICAgICAgIG9wdGlvbi0+c2V0U2VsZWN0ZWRTdGF0ZShhY3RpdmVTZWxlY3Rp
b25TdGF0ZSgpKTsKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAv
LyBJZiB3ZSdyZSBub3QgaW4gYW55IHNwZWNpYWwgbXVsdGlwbGUgc2VsZWN0aW9uIG1vZGUsIHRo
ZW4gZGVzZWxlY3QgYWxsIG90aGVyIGl0ZW1zLCBleGNsdWRpbmcgdGhlIGNsaWNrZWQgb3B0aW9u
LgorICAgICAgICAgICAgLy8gSWYgbm8gb3B0aW9uIHdhcyBjbGlja2VkLCB0aGVuIHRoaXMgd2ls
bCBkZXNlbGVjdCBhbGwgaXRlbXMgaW4gdGhlIGxpc3QuCisgICAgICAgICAgICBpZiAoIXNoaWZ0
U2VsZWN0ICYmICFtdWx0aVNlbGVjdCkKKyAgICAgICAgICAgICAgICBkZXNlbGVjdEl0ZW1zKG9w
dGlvbik7CisKKyAgICAgICAgICAgIC8vIElmIHRoZSBhbmNob3IgaGFzbid0IGJlZW4gc2V0LCBh
bmQgd2UncmUgZG9pbmcgYSBzaW5nbGUgc2VsZWN0aW9uIG9yIGEgc2hpZnQgc2VsZWN0aW9uLCB0
aGVuIGluaXRpYWxpemUgdGhlIGFuY2hvciB0byB0aGUgZmlyc3Qgc2VsZWN0ZWQgaW5kZXguCisg
ICAgICAgICAgICBpZiAoYWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoKSA8IDAgJiYgIW11bHRp
U2VsZWN0KQorICAgICAgICAgICAgICAgIHNldEFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KHNl
bGVjdGVkSW5kZXgoKSk7CisKKyAgICAgICAgICAgIC8vIElmIHRoZXJlIHdhcyBubyBzZWxlY3Rl
ZEluZGV4KCkgZm9yIHRoZSBwcmV2aW91cyBpbml0aWFsaXphdGlvbiwgb3IKKyAgICAgICAgICAg
IC8vIElmIHdlJ3JlIGRvaW5nIGEgc2luZ2xlIHNlbGVjdGlvbiwgb3IgYSBtdWx0aXBsZSBzZWxl
Y3Rpb24gKHVzaW5nIGNtZCBvciBjdHJsKSwgdGhlbiBpbml0aWFsaXplIHRoZSBhbmNob3IgaW5k
ZXggdG8gdGhlIGxpc3RJbmRleCB0aGF0IGp1c3QgZ290IGNsaWNrZWQuCisgICAgICAgICAgICBp
ZiAobGlzdEluZGV4ID49IDAgJiYgKGFjdGl2ZVNlbGVjdGlvbkFuY2hvckluZGV4KCkgPCAwIHx8
ICFzaGlmdFNlbGVjdCkpCisgICAgICAgICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9y
SW5kZXgobGlzdEluZGV4KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgc2V0QWN0aXZlU2Vs
ZWN0aW9uRW5kSW5kZXgobGlzdEluZGV4KTsKKyAgICAgICAgICAgIHVwZGF0ZUxpc3RCb3hTZWxl
Y3Rpb24oIW11bHRpU2VsZWN0KTsKKworICAgICAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50KCktPmZyYW1lKCkpCisgICAgICAgICAgICAgICAgZnJhbWUtPmV2ZW50SGFuZGxlcigp
LT5zZXRNb3VzZURvd25NYXlTdGFydEF1dG9zY3JvbGwoKTsKKworICAgICAgICAgICAgZXZ0LT5z
ZXREZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChldnQtPnR5cGUo
KSA9PSBtb3VzZXVwRXZlbnQgJiYgZXZ0LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZ0KS0+YnV0dG9uKCkgPT0gTGVmdEJ1dHRvbiAmJiBkb2N1bWVudCgpLT5m
cmFtZSgpLT5ldmVudEhhbmRsZXIoKS0+YXV0b3Njcm9sbFJlbmRlcmVyKCkgIT0gcmVuZGVyZXIo
KSkKKyAgICAgICAgLy8gVGhpcyBtYWtlcyBzdXJlIHdlIGZpcmUgb25DaGFuZ2UgZm9yIGEgc2lu
Z2xlIGNsaWNrLiAgRm9yIGRyYWcgc2VsZWN0aW9uLCBvbkNoYW5nZSB3aWxsIGZpcmUgd2hlbiB0
aGUgYXV0b3Njcm9sbCB0aW1lciBzdG9wcy4KKyAgICAgICAgbGlzdEJveE9uQ2hhbmdlKCk7Cisg
ICAgZWxzZSBpZiAoZXZ0LT50eXBlKCkgPT0ga2V5cHJlc3NFdmVudCkgeworICAgICAgICBpZiAo
IWV2dC0+aXNLZXlib2FyZEV2ZW50KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFN0
cmluZyBrZXlJZGVudGlmaWVyID0gc3RhdGljX2Nhc3Q8S2V5Ym9hcmRFdmVudCo+KGV2dCktPmtl
eUlkZW50aWZpZXIoKTsKKworICAgICAgICBpZiAoa2V5SWRlbnRpZmllciA9PSAiRW50ZXIiKSB7
CisgICAgICAgICAgICBpZiAoZm9ybSgpKQorICAgICAgICAgICAgICAgIGZvcm0oKS0+c3VibWl0
Q2xpY2soZXZ0KTsKKyAgICAgICAgICAgIGV2dC0+c2V0RGVmYXVsdEhhbmRsZWQoKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGludCBlbmRJbmRleCA9IDA7ICAg
ICAgICAKKyAgICAgICAgaW50IGFjdGl2ZVNlbGVjdGlvbkVuZElkeCA9IGFjdGl2ZVNlbGVjdGlv
bkVuZEluZGV4KCk7CisgICAgICAgIGlmIChhY3RpdmVTZWxlY3Rpb25FbmRJZHggPCAwKSB7Cisg
ICAgICAgICAgICAvLyBJbml0aWFsaXplIHRoZSBlbmQgaW5kZXgKKyAgICAgICAgICAgIGlmIChr
ZXlJZGVudGlmaWVyID09ICJEb3duIikKKyAgICAgICAgICAgICAgICBlbmRJbmRleCA9IG5leHRT
ZWxlY3RhYmxlTGlzdEluZGV4KGxhc3RTZWxlY3RlZExpc3RJbmRleCgpKTsKKyAgICAgICAgICAg
IGVsc2UgaWYgKGtleUlkZW50aWZpZXIgPT0gIlVwIikKKyAgICAgICAgICAgICAgICBlbmRJbmRl
eCA9IHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChvcHRpb25Ub0xpc3RJbmRleChzZWxlY3Rl
ZEluZGV4KCkpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8vIFNldCB0aGUgZW5k
IGluZGV4IGJhc2VkIG9uIHRoZSBjdXJyZW50IGVuZCBpbmRleAorICAgICAgICAgICAgaWYgKGtl
eUlkZW50aWZpZXIgPT0gIkRvd24iKQorICAgICAgICAgICAgICAgIGVuZEluZGV4ID0gbmV4dFNl
bGVjdGFibGVMaXN0SW5kZXgoYWN0aXZlU2VsZWN0aW9uRW5kSWR4KTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKGtleUlkZW50aWZpZXIgPT0gIlVwIikKKyAgICAgICAgICAgICAgICBlbmRJbmRleCA9
IHByZXZpb3VzU2VsZWN0YWJsZUxpc3RJbmRleChhY3RpdmVTZWxlY3Rpb25FbmRJZHgpOyAgICAK
KyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGtleUlkZW50aWZpZXIgPT0gIkRvd24i
IHx8IGtleUlkZW50aWZpZXIgPT0gIlVwIikgeworICAgICAgICAgICAgLy8gU2F2ZSB0aGUgc2Vs
ZWN0aW9uIHNvIGl0IGNhbiBiZSBjb21wYXJlZCB0byB0aGUgbmV3IHNlbGVjdGlvbiB3aGVuIHdl
IGNhbGwgb25DaGFuZ2UgaW1tZWRpYXRlbHkgYWZ0ZXIgbWFraW5nIHRoZSBuZXcgc2VsZWN0aW9u
LgorICAgICAgICAgICAgc2F2ZUxhc3RTZWxlY3Rpb24oKTsKKworICAgICAgICAgICAgQVNTRVJU
KGVuZEluZGV4ID49IDAgJiYgKHVuc2lnbmVkKWVuZEluZGV4IDwgbGlzdEl0ZW1zKCkuc2l6ZSgp
KTsgCisgICAgICAgICAgICBzZXRBY3RpdmVTZWxlY3Rpb25FbmRJbmRleChlbmRJbmRleCk7Cisg
ICAgICAgICAgICAKKyAgICAgICAgICAgIC8vIElmIHRoZSBhbmNob3IgaXMgdW5pdGlhbGl6ZWQs
IG9yIGlmIHdlJ3JlIGdvaW5nIHRvIGRlc2VsZWN0IGFsbCBvdGhlciBvcHRpb25zLCB0aGVuIHNl
dCB0aGUgYW5jaG9yIGluZGV4IGVxdWFsIHRvIHRoZSBlbmQgaW5kZXguCisgICAgICAgICAgICBi
b29sIGRlc2VsZWN0T3RoZXJzID0gIW11bHRpcGxlKCkgfHwgIXN0YXRpY19jYXN0PEtleWJvYXJk
RXZlbnQqPihldnQpLT5zaGlmdEtleSgpOworICAgICAgICAgICAgaWYgKGFjdGl2ZVNlbGVjdGlv
bkFuY2hvckluZGV4KCkgPCAwIHx8IGRlc2VsZWN0T3RoZXJzKSB7CisgICAgICAgICAgICAgICAg
c2V0QWN0aXZlU2VsZWN0aW9uU3RhdGUodHJ1ZSk7CisgICAgICAgICAgICAgICAgaWYgKGRlc2Vs
ZWN0T3RoZXJzKQorICAgICAgICAgICAgICAgICAgICBkZXNlbGVjdEl0ZW1zKCk7CisgICAgICAg
ICAgICAgICAgc2V0QWN0aXZlU2VsZWN0aW9uQW5jaG9ySW5kZXgoYWN0aXZlU2VsZWN0aW9uRW5k
SWR4KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3RhdGljX2Nhc3Q8UmVuZGVyTGlz
dEJveCo+KHJlbmRlcmVyKCkpLT5zY3JvbGxUb1JldmVhbEVsZW1lbnRBdExpc3RJbmRleChlbmRJ
bmRleCk7CisgICAgICAgICAgICB1cGRhdGVMaXN0Qm94U2VsZWN0aW9uKGRlc2VsZWN0T3RoZXJz
KTsKKyAgICAgICAgICAgIGxpc3RCb3hPbkNoYW5nZSgpOworICAgICAgICAgICAgZXZ0LT5zZXRE
ZWZhdWx0SGFuZGxlZCgpOworICAgICAgICB9CisgICAgfQorCisgICAgLy8gdXBkYXRlIG5hbWUg
YW5kIGluYW1lIHZhcmlhYmxlcyB3aXRoIG9wdGlvbidzIHZhbHVlIGFuZCBpbmRleAorICAgIHVw
ZGF0ZVZhcmlhYmxlcygpOworfQorCit2b2lkIFdNTFNlbGVjdEVsZW1lbnQ6OnVwZGF0ZVZhcmlh
YmxlcygpCit7CisgICAgaWYgKG1faU5hbWUuaXNFbXB0eSgpICYmIG1fbmFtZS5pc0VtcHR5KCkp
CisgICAgICAgIHJldHVybjsKKworICAgIFN0cmluZyBuYW1lOworICAgIFN0cmluZyBpbmFtZTsK
KyAgICBpbnQgb3B0SWR4ID0gMDsKKyAgICBjb25zdCBWZWN0b3I8SFRNTEVsZW1lbnQqPiYgaXRl
bXMgPSBsaXN0SXRlbXMoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6
ZSgpOyBpKyspIHsKKyAgICAgICAgaWYgKGl0ZW1zW2ldLT5oYXNMb2NhbE5hbWUob3B0aW9uVGFn
KSkgeworICAgICAgICAgICAgb3B0SWR4Kys7CisgICAgICAgICAgICBXTUxPcHRpb25FbGVtZW50
KiBvcHRpb24gPSBzdGF0aWNfY2FzdDxXTUxPcHRpb25FbGVtZW50Kj4oaXRlbXNbaV0pOworICAg
ICAgICAgICAgaWYgKG9wdGlvbi0+c2VsZWN0ZWQoKSkgeworICAgICAgICAgICAgICAgIG5hbWUg
Kz0gb3B0aW9uLT5nZXRBdHRyaWJ1dGUoInZhbHVlIik7CisgICAgICAgICAgICAgICAgbmFtZSAr
PSAiOyI7CisgICAgICAgICAgICAgICAgaW5hbWUgKz0gU3RyaW5nOjpudW1iZXIob3B0SWR4KTsK
KyAgICAgICAgICAgICAgICBpbmFtZSArPSAiOyI7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpKTsKKyAgICBBU1NFUlQoZG9j
dW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3RhdGUoKSk7CisgICAgaWYgKCFtX25hbWUuaXNFbXB0
eSgpKSB7CisgICAgICAgIHdoaWxlIChuYW1lLmVuZHNXaXRoKCI7IikpCisgICAgICAgICAgICBu
YW1lID0gbmFtZS5sZWZ0KG5hbWUubGVuZ3RoKCktMSk7CisgICAgICAgIGRvY3VtZW50KCktPnBh
Z2UoKS0+d21sUGFnZVN0YXRlKCktPnN0b3JlVmFyaWFibGUobV9uYW1lLCBuYW1lKTsKKyAgICB9
CisKKyAgICBpZiAoIW1faU5hbWUuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChpbmFtZS5lbmRz
V2l0aCgiOyIpKQorICAgICAgICAgICAgaW5hbWUgPSBpbmFtZS5sZWZ0KGluYW1lLmxlbmd0aCgp
LTEpOworICAgICAgIAorICAgICAgICBkb2N1bWVudCgpLT5wYWdlKCktPndtbFBhZ2VTdGF0ZSgp
LT5zdG9yZVZhcmlhYmxlKG1faU5hbWUsIGluYW1lKTsKKyAgICB9Cit9CisKK30gLy9uYW1lc3Bh
Y2UKSW5kZXg6IFdlYkNvcmUvd21sL1dNTFNlbGVjdEVsZW1lbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL3dtbC9XTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dt
bC9XTUxTZWxlY3RFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICog
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisj
aWZuZGVmIFdNTFNlbGVjdEVsZW1lbnRfaAorI2RlZmluZSBXTUxTZWxlY3RFbGVtZW50X2gKKwor
I2luY2x1ZGUgIkhUTUxTZWxlY3RFbGVtZW50LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRG9jdW1lbnQ7CisKK2NsYXNzIFdNTFNlbGVjdEVsZW1lbnQgOiBwdWJsaWMgSFRNTFNl
bGVjdEVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MU2VsZWN0RWxlbWVudChjb25zdCBRdWFsaWZp
ZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAgICB2aXJ0dWFsIH5XTUxTZWxlY3RFbGVtZW50KCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgcGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7
CisgICAgdmlydHVhbCB2b2lkIGRlZmF1bHRFdmVudEhhbmRsZXIoRXZlbnQqKTsKKworICAgIHZv
aWQgc2V0U2VsZWN0ZWRJbmRleChpbnQgaW5kZXgsIGJvb2wgZGVzZWxlY3QgPSB0cnVlLCBib29s
IGZpcmVPbkNoYW5nZSA9IGZhbHNlKTsKKyAgICB2b2lkIHVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsK
KyAgICB2b2lkIHNlbGVjdEluaXRpYWxPcHRpb25zKCk7CisKK3ByaXZhdGU6CisgICAgU3RyaW5n
IHZhbHVlVG9JVmFsdWUoU3RyaW5nJik7CisgICAgU3RyaW5nIGl2YWx1ZVRvVmFsdWUoU3RyaW5n
Jik7CisgICAgU3RyaW5nIHZhbGlkYXRlSW5kZXhWYWx1ZShTdHJpbmcmKTsKKyAgICB2b2lkIGNh
bGNEZWZhdWx0T3B0aW9uSW5kZXgoKTsKKyAgICB2b2lkIGluaXRpYWxpc2VWYXJpYWJsZXMoKTsK
KyAgICB2b2lkIHByZVNlbGVjdE9wdGlvbnNCeURlZmF1bHQoKTsKKyAgICB2b2lkIG1lbnVMaXN0
RGVmYXVsdEV2ZW50SGFuZGxlcihFdmVudCopOworICAgIHZvaWQgbGlzdEJveERlZmF1bHRFdmVu
dEhhbmRsZXIoRXZlbnQqKTsKKyAgICB2b2lkIHVwZGF0ZVZhcmlhYmxlcygpOworCisgICAgU3Ry
aW5nIG1fbmFtZTsKKyAgICBTdHJpbmcgbV92YWx1ZTsKKyAgICBTdHJpbmcgbV9pTmFtZTsKKyAg
ICBTdHJpbmcgbV9pVmFsdWU7CisgICAgU3RyaW5nIG1fZGVmYXVsdE9wdElkeDsKK307CisKK30g
Ly8gbmFtZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVu
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVudC5jcHAJKHJl
dmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxTZXR2YXJFbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2Jp
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3
LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5M
SUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJX
TUxTZXR2YXJFbGVtZW50LmgiCisKKyNpbmNsdWRlICJDU1NIZWxwZXIuaCIKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFdmVudC5oIgorI2lu
Y2x1ZGUgIkV2ZW50SGFuZGxlci5oIgorI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiV01MR29FbGVt
ZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNp
bmNsdWRlICJXTUxQcmV2RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFJlZnJlc2hFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MVGFza0VsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7Cit1c2lu
ZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKKworV01MU2V0dmFyRWxlbWVudDo6V01MU2V0dmFyRWxl
bWVudChjb25zdCBRdWFsaWZpZWROYW1lJiBuYW1lLCBEb2N1bWVudCogZG9jKSAKKyAgICA6IFdN
TEVsZW1lbnQobmFtZSwgZG9jKQoreworfQorCitXTUxTZXR2YXJFbGVtZW50Ojp+V01MU2V0dmFy
RWxlbWVudCgpCit7Cit9CisKK3ZvaWQgV01MU2V0dmFyRWxlbWVudDo6aW5zZXJ0ZWRJbnRvVHJl
ZShib29sIGRlZXApCit7CisgICAgV01MVGFza0VsZW1lbnQqIGdvID0gMDsKKyAgICBOb2RlKiBh
bmNlc3RvciA9IHBhcmVudE5vZGUoKSA7CisgICAgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKFdN
TE5hbWVzOjpnb1RhZykpCisgICAgICAgIGdvID0gc3RhdGljX2Nhc3Q8V01MR29FbGVtZW50Kj4o
YW5jZXN0b3IpOworICAgIGVsc2UgaWYgKGFuY2VzdG9yLT5oYXNUYWdOYW1lKFdNTE5hbWVzOjpw
cmV2VGFnKSkKKyAgICAgICAgZ28gPSBzdGF0aWNfY2FzdDxXTUxQcmV2RWxlbWVudCo+KGFuY2Vz
dG9yKTsKKyAgICBlbHNlIGlmIChhbmNlc3Rvci0+aGFzVGFnTmFtZShXTUxOYW1lczo6cmVmcmVz
aFRhZykpCisgICAgICAgIGdvID0gc3RhdGljX2Nhc3Q8V01MUmVmcmVzaEVsZW1lbnQqPihhbmNl
c3Rvcik7CisgICAgZWxzZQorICAgICAgICByZXR1cm47IAorCisgICAgaWYgKGdvKQorICAgICAg
ICBnby0+cmVnaXN0ZXJTZXR2YXJFbGVtZW50KHRoaXMpOworfQorCisKK3ZvaWQgV01MU2V0dmFy
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQorewor
ICAgIFN0cmluZyBhdHRyTmFtZSA9IGF0dHItPm5hbWUoKS50b1N0cmluZygpOworICAgIGlmIChh
dHRyTmFtZSA9PSBuYW1lQXR0cikgeworICAgICAgICBpZiAoIVdNTEhlbHBlcjo6aXNWYWxpZFZh
cmlhYmxlTmFtZShhdHRyLT52YWx1ZSgpLCB0cnVlKSkKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6
dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJpYWJsZU5hbWVFcnJvcik7CisgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgbV9uYW1lID0gV01MSGVscGVyOjpzdWJzdGl0dXRlVmFy
UmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCkpOworICAgICAgICAgICAgaWYgKCFXTUxIZWxw
ZXI6OmlzVmFsaWRWYXJpYWJsZU5hbWUobV9uYW1lLCB0cnVlKSkKKyAgICAgICAgICAgICAgICBX
TUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFibGVOYW1lRXJy
b3IpOworICAgICAgICB9CisgICAgfQorfQorCitTdHJpbmcgV01MU2V0dmFyRWxlbWVudDo6bmFt
ZSgpCit7CisgICAgcmV0dXJuIG1fbmFtZTsgCit9CisKK1N0cmluZyBXTUxTZXR2YXJFbGVtZW50
Ojp2YWx1ZSgpCit7CisgICAgcmV0dXJuIFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihnZXRB
dHRyaWJ1dGUoInZhbHVlIiksIGRvY3VtZW50KCkpOworfQorCit9CkluZGV4OiBXZWJDb3JlL3dt
bC9XTUxTZXR2YXJFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MU2V0dmFy
RWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MU2V0dmFyRWxlbWVudC5o
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4
IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgICAgICAgICAgICAg
IGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJpZ2h0IChDKSAyMDA0LTIwMDcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
TGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmls
ZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0
b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBXTUxTZXR2YXJFbGVt
ZW50X2gKKyNkZWZpbmUgV01MU2V0dmFyRWxlbWVudF9oCisKKyNpbmNsdWRlICJXTUxFbGVtZW50
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgV01MU2V0dmFyRWxlbWVudCA6IHB1
YmxpYyAgV01MRWxlbWVudHsKK3B1YmxpYzoKKyAgICBXTUxTZXR2YXJFbGVtZW50KGNvbnN0IFF1
YWxpZmllZE5hbWUmLCBEb2N1bWVudCopOworICAgIH5XTUxTZXR2YXJFbGVtZW50KCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgaW5zZXJ0ZWRJbnRvVHJlZShib29sIGRlZXApOworICAgIHZpcnR1YWwg
dm9pZCBwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsgCisKKyAgICBTdHJp
bmcgbmFtZSgpOworICAgIFN0cmluZyB2YWx1ZSgpOworCitwcml2YXRlOgorICAgIFN0cmluZyBt
X25hbWU7Cit9OworCit9CisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MVGFibGVFbGVt
ZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUYWJsZUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V01MVGFibGVFbGVtZW50LmgiCisKKyNpbmNsdWRlICJIVE1MTmFtZXMuaCIKKyNpbmNsdWRlICJI
VE1MVGFibGVDZWxsRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxUYWJsZVJvd0VsZW1lbnQuaCIK
KyNpbmNsdWRlICJOb2RlTGlzdC5oIgorI2luY2x1ZGUgIlJlbmRlclRhYmxlLmgiCisjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDZWxsLmgiCisjaW5jbHVkZSAiUmVuZGVyVGFibGVTZWN0aW9uLmgiCisj
aW5jbHVkZSAiV01MUGFnZVN0YXRlLmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVk
ZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTFRhYmxlRWxlbWVudDo6
V01MVGFibGVFbGVtZW50KERvY3VtZW50KiBkb2MpCisgICAgOiBIVE1MVGFibGVFbGVtZW50KGRv
YykgCit7Cit9CisKK1dNTFRhYmxlRWxlbWVudDo6fldNTFRhYmxlRWxlbWVudCgpCit7Cit9CisK
K3ZvaWQgV01MVGFibGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1
dGUqIGF0dHIpCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBjb2x1bW5zQXR0cikgeworICAg
ICAgICBpbnQgY29sdW1ucyA9ICBhdHRyLT52YWx1ZSgpLnRvSW50KCk7CisgICAgICAgIGlmIChj
b2x1bW5zIDwgMSkKKyAgICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVy
cm9yKEludmFsaWRDb2x1bW5zTnVtYmVyRm9yVGFibGVFcnJyb3IpOworCisgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gdGl0bGVBdHRyKSB7CisgICAgICAgIFN0cmluZyB0aXRsZSA9IFdN
TEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihhdHRyLT52YWx1ZSgpLCBkb2N1bWVudCgpKTsKKyAg
ICAgICAgaWYgKHRpdGxlICE9IGF0dHItPnZhbHVlKCkpCisgICAgICAgICAgICBzZXRBdHRyaWJ1
dGUodGl0bGVBdHRyLCB0aXRsZSk7CisKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBh
bGlnbkF0dHIpIHsKKyAgICAgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYoYXR0ci0+
dmFsdWUoKSkpCisgICAgICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJv
cihJbnZhbGlkVmFyaWFibGVSZWZlcmVuY2VFcnJvcik7CisgICAgfSBlbHNlCisgICAgICAgIEhU
TUxUYWJsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOworfQorCit2b2lkIFdN
TFRhYmxlRWxlbWVudDo6aW5pdCgpIAoreworICAgIHVuc2lnbmVkIGludCBpZHggPSAwOworICAg
IEhUTUxUYWJsZVJvd0VsZW1lbnQqIHJvdyA9IDA7CisgICAgSFRNTFRhYmxlQ2VsbEVsZW1lbnQq
IGxhc3RDb2wgPSAwOworICAgIFJlZlB0cjxIVE1MVGFibGVDZWxsRWxlbWVudD4gbmV3Q2VsbDsK
KyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiBjb2x1bW5zOworICAgIEV4Y2VwdGlvbkNv
ZGUgZWM7CisgICAgdW5zaWduZWQgYWN0dWFsQ29sTnVtID0gMDsKKyAgICB1bnNpZ25lZCBjb2xO
dW0gPSBnZXRBdHRyaWJ1dGUoImNvbHVtbnMiKS50b0ludCgpOyAKKyAgICBpZiAoY29sTnVtIDwg
MSkgCisgICAgICAgIGNvbE51bSA9IDE7CisKKyAgICBTdHJpbmcgYWxpZ24gPSBnZXRBdHRyaWJ1
dGUoImFsaWduIik7CisKKyAgICBQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiByb3dzID0gY2hp
bGRyZW4oKTsKKyAgICB1bnNpZ25lZCByb3dOdW0gPSByb3dzLT5sZW5ndGgoKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcm93TnVtOyArK2kpIHsKKyAgICAgICAgcm93ID0gc3RhdGlj
X2Nhc3Q8SFRNTFRhYmxlUm93RWxlbWVudCo+KHJvd3MtPml0ZW0oaSkpOworICAgICAgICBjb2x1
bW5zID0gcm93LT5jZWxscygpOworICAgICAgICBhY3R1YWxDb2xOdW0gPSBjb2x1bW5zLT5sZW5n
dGgoKTsKKworICAgICAgICBpZiAoYWN0dWFsQ29sTnVtID4gY29sTnVtKSB7CisgICAgICAgICAg
ICBsYXN0Q29sID0gc3RhdGljX2Nhc3Q8SFRNTFRhYmxlQ2VsbEVsZW1lbnQqPihjb2x1bW5zLT5p
dGVtKGNvbE51bSAtIDEpKTsKKworICAgICAgICAgICAgLy8gYWdncmVnYXRlIHRoZSByZWR1bmRh
bnQgY29sdW1ucyBpbnRvIHRoZSBsYXN0IGNvbHVtbgorICAgICAgICAgICAgbmV3Q2VsbCA9IG5l
dyBIVE1MVGFibGVDZWxsRWxlbWVudChIVE1MTmFtZXM6OnRkVGFnLCBkb2N1bWVudCgpKTsKKyAg
ICAgICAgICAgIGlmIChuZXdDZWxsKQorICAgICAgICAgICAgICAgIG5ld0NlbGwtPmFkZENoaWxk
KGxhc3RDb2wtPmNsb25lTm9kZSh0cnVlKSk7CisKKyAgICAgICAgICAgIGlkeCA9IGNvbE51bTsK
KyAgICAgICAgICAgIHdoaWxlIChpZHggPCBhY3R1YWxDb2xOdW0pCisgICAgICAgICAgICAgICAg
bmV3Q2VsbC0+YXBwZW5kQ2hpbGQoY29sdW1ucy0+aXRlbShpZHgrKyktPmNsb25lTm9kZSh0cnVl
KSwgZWMpOworCisgICAgICAgICAgICAvLyByZW1vdmUgdGhlIHJlZHVuZGFudCBjb2x1bW5zCisg
ICAgICAgICAgICBpZHggPSBhY3R1YWxDb2xOdW07CisgICAgICAgICAgICB3aGlsZSAoaWR4ID4g
Y29sTnVtKQorICAgICAgICAgICAgICAgIHJvdy0+ZGVsZXRlQ2VsbCgtLWlkeCwgZWMpOworCisg
ICAgICAgICAgICByb3ctPnJlcGxhY2VDaGlsZChuZXdDZWxsLCBsYXN0Q29sLCBlYyk7CisKKyAg
ICAgICAgICAgIC8vIGNvbnZlcnQgdGhlIGFsaWduIGF0dHJpYnV0ZSBvZiB0YWJsZSBlbGVtZW50
IHRvIHRoYXQgb2YgdGQgZWxlbWVudAorICAgICAgICAgICAgY29udmVydEFsaWduKGNvbHVtbnMs
IGNvbE51bSk7CisgICAgICAgIH0gZWxzZSBpZiAoYWN0dWFsQ29sTnVtIDwgY29sTnVtKSB7Cisg
ICAgICAgICAgICBjb252ZXJ0QWxpZ24oY29sdW1ucywgYWN0dWFsQ29sTnVtKTsKKworICAgICAg
ICAgICAgLy8gYXBwZW5kIGVtcHR5IGNlbGxzCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGlk
eCA9IGFjdHVhbENvbE51bTsgaWR4IDwgY29sTnVtOyArK2lkeCkKKyAgICAgICAgICAgICAgICBy
b3ctPmluc2VydENlbGwoLTEsIGVjKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAvLyBj
b252ZXJ0IHRoZSBhbGlnbiBhdHRyaWJ1dGUgb2YgdGFibGUgZWxlbWVudCB0byB0aGF0IG9mIHRk
IGVsZW1lbnQKKyAgICAgICAgICAgIGNvbnZlcnRBbGlnbihjb2x1bW5zLCBjb2xOdW0pOworCisg
ICAgICAgIC8vIHNldCB0aGUgZGVmYXVsdCBhbGlnbiBmb3IgZWFjaCByb3cKKyAgICAgICAgcm93
LT5zZXRBbGlnbigibGVmdCIpOworCisgICAgfSAvLyBlbmQgb2YgZm9yICguLi4gCisKK30KKwor
dm9pZCBXTUxUYWJsZUVsZW1lbnQ6OmNvbnZlcnRBbGlnbihQYXNzUmVmUHRyPEhUTUxDb2xsZWN0
aW9uPiYgY29sdW1ucywgdW5zaWduZWQgY2VsbE51bSkgCit7CisgICAgSFRNTFRhYmxlQ2VsbEVs
ZW1lbnQqIGNlbGwgPSAwOworICAgIFN0cmluZyBhbGlnbiA9IGdldEF0dHJpYnV0ZSgiYWxpZ24i
KTsKKyAgICBmb3IgKHVuc2lnbmVkIGlkeCA9IDA7IGlkeCA8IGNlbGxOdW07ICsraWR4KSB7Cisg
ICAgICAgIGNlbGwgPSBzdGF0aWNfY2FzdDxIVE1MVGFibGVDZWxsRWxlbWVudCo+KGNvbHVtbnMt
Pml0ZW0oaWR4KSk7CisgICAgICAgIGlmIChhbGlnbltpZHhdID09ICdSJyApCisgICAgICAgICAg
ICBjZWxsLT5zZXRBbGlnbigicmlnaHQiKTsKKyAgICAgICAgZWxzZSBpZiAoYWxpZ25baWR4XSA9
PSAnQycpCisgICAgICAgICAgICBjZWxsLT5zZXRBbGlnbigiY2VudGVyIik7CisgICAgfSAKK30K
KworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFibGVFbGVtZW50LmgJKHJldmlzaW9uIDApCisr
KyBXZWJDb3JlL3dtbC9XTUxUYWJsZUVsZW1lbnQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNv
bS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdy
aXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisg
KgorICovCisKKyNpZm5kZWYgV01MVGFibGVFbGVtZW50X2gKKyNkZWZpbmUgV01MVGFibGVFbGVt
ZW50X2gKKworI2luY2x1ZGUgIkhUTUxUYWJsZUVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEb2N1bWVudDsKKworY2xhc3MgV01MVGFibGVFbGVtZW50IDogcHVibGlj
IEhUTUxUYWJsZUVsZW1lbnR7CitwdWJsaWM6CisgICAgV01MVGFibGVFbGVtZW50KERvY3VtZW50
Kik7CisgICAgdmlydHVhbCB+V01MVGFibGVFbGVtZW50KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQg
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKik7CisKKyAgICB2b2lkIGluaXQo
KTsKKyAgICB2b2lkIGNvbnZlcnRBbGlnbihQYXNzUmVmUHRyPEhUTUxDb2xsZWN0aW9uPiYsIHVu
c2lnbmVkKTsgCit9OworCit9IC8vIG5hbWVzcGFjZQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUv
d21sL1dNTFRhZ05hbWVzLmluCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRhZ05hbWVz
LmluCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGFnTmFtZXMuaW4JKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEsMzkgQEAKK25hbWVzcGFjZT0iV01MIgorbmFtZXNwYWNlVVJJPSIiCitn
dWFyZEZhY3RvcnlXaXRoPSJFTkFCTEUoV01MKSIKKworY2FyZAorYQorYWNjZXNzCitoZWFkCitt
ZXRhCit0ZW1wbGF0ZQord21sCiticgorcAordGFibGUKK3RkCit0cgorYgorYmlnCitlbQoraQor
c21hbGwKK3N0cm9uZwordQorYW5jaG9yCitpbWcKK2RvCitvbmV2ZW50Citwb3N0ZmllbGQKK2dv
Citub29wCitwcmV2CityZWZyZXNoCitmaWVsZHNldAoraW5wdXQKK29wdGdyb3VwCitvcHRpb24K
K3NlbGVjdAorc2V0dmFyCit0aW1lcgpJbmRleDogV2ViQ29yZS93bWwvV01MVGFza0VsZW1lbnQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRhc2tFbGVtZW50LmNwcAkocmV2aXNp
b24gMCkKKysrIFdlYkNvcmUvd21sL1dNTFRhc2tFbGVtZW50LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3Jj
aG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
CisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAg
SWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMw
MSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV01MVGFz
a0VsZW1lbnQuaCIKKworI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxBbmNob3JF
bGVtZW50LmgiCisjaW5jbHVkZSAiV01MQ2FyZEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxEb0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxJbnRyaW5zaWNF
dmVudEhhbmRsZXIuaCIKKyNpbmNsdWRlICJXTUxOYW1lcy5oIgorI2luY2x1ZGUgIldNTE9wdGlv
bkVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxTZXR2
YXJFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MVGVtcGxhdGVFbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MVG9rZW5pemVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordXNpbmcgbmFtZXNwYWNl
IFdNTE5hbWVzOworCit0ZW1wbGF0ZTxjbGFzcyBULCBzaXplX3Qgbj4gc3RhdGljIHZvaWQgcmVt
b3ZlRnJvbVZlY3RvcihWZWN0b3I8VCosIG4+ICYgdmVjLCBUKiBpdGVtKSAKK3sKKyAgICBzaXpl
X3Qgc2l6ZSA9IHZlYy5zaXplKCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgIT0gc2l6ZTsg
KytpKQorICAgICAgICBpZiAodmVjW2ldID09IGl0ZW0pIHsKKyAgICAgICAgICAgIHZlYy5yZW1v
dmUoaSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorfQorIAorV01MVGFza0VsZW1l
bnQ6OldNTFRhc2tFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
KiBkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKK3sKK30KKworV01MVGFza0Vs
ZW1lbnQ6On5XTUxUYXNrRWxlbWVudCgpCit7Cit9CisKK3ZvaWQgV01MVGFza0VsZW1lbnQ6OmJp
bmRJbnRyaW5zaWNFdmVudEluT25ldmVudChOb2RlKiBvbmV2ZW50Tm9kZSkKK3sKKyAgICBXTUxJ
bnRyaW5zaWNFdmVudFR5cGUgdHlwZSA9IFVua25vd247CisgICAgU3RyaW5nIHR5cGVBdHRyaSA9
IHN0YXRpY19jYXN0PFdNTEVsZW1lbnQqPihvbmV2ZW50Tm9kZSktPmdldEF0dHJpYnV0ZSgidHlw
ZSIpOworCisgICAgaWYgKFdNTEhlbHBlcjo6aGFzVmFyaWFibGVSZWYodHlwZUF0dHJpKSkgewor
ICAgICAgICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihJbnZhbGlkVmFyaWFi
bGVSZWZlcmVuY2VFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAodHlw
ZUF0dHJpID09ICJvbmVudGVyZm9yd2FyZCIpCisgICAgICAgIHR5cGUgPSBPbkVudGVyRm9yd2Fy
ZDsKKyAgICBlbHNlIGlmICh0eXBlQXR0cmkgPT0gIm9uZW50ZXJiYWNrd2FyZCIpCisgICAgICAg
IHR5cGUgPSBPbkVudGVyQmFja3dhcmQ7CisgICAgZWxzZSBpZiAodHlwZUF0dHJpID09ICJvbnRp
bWVyIikKKyAgICAgICAgdHlwZSA9IE9uVGltZXI7CisgICAgZWxzZSBpZiAodHlwZUF0dHJpID09
ICJvbnBpY2siKQorICAgICAgICB0eXBlID0gT25QaWNrOworCisgICAgaWYgKHR5cGUgPT0gVW5r
bm93bikKKyAgICAgICAgcmV0dXJuOworCisgICAgV01MSW50cmluc2ljRXZlbnQgZXY7CisgICAg
ZXYudGFzayA9IHRoaXM7CisgICAgaWYgKGhhc1RhZ05hbWUoZ29UYWcpKSB7CisgICAgICAgIFN0
cmluZyBocmVmID0gZ2V0QXR0cmlidXRlKCJocmVmIik7CisgICAgICAgIGV2LnRhcmdldFVSSSA9
IFdNTEhlbHBlcjo6c3Vic3RpdHV0ZVZhclJlZihocmVmLCBkb2N1bWVudCgpLCAiZXNjYXBlIik7
CisgICAgfQorCisgICAgLy9yZWdpc3RlciBpbnRyaW5zaWMgZXZlbnQgdG8gdGhlIGV2ZW50IGhh
bmRsZXIgb2YgdGhlIG93bmVyIG9mIG9uZXZlbnQgZWxlbWVudCAKKyAgICBOb2RlKiBwYXJlbnQg
PSBvbmV2ZW50Tm9kZS0+cGFyZW50Tm9kZSgpOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxl
ciogZXZIYW5kbGVyID0gMDsKKyAgICBpZiAocGFyZW50LT5oYXNUYWdOYW1lKGNhcmRUYWcpKSB7
CisgICAgICAgIFdNTENhcmRFbGVtZW50KiBjYXJkID0gc3RhdGljX2Nhc3Q8V01MQ2FyZEVsZW1l
bnQqPihwYXJlbnQpOworICAgICAgICBjYXJkLT5zZXRIYXNJbnRyaW5zaWNFdmVudCh0cnVlKTsK
KyAgICAgICAgZXZIYW5kbGVyID0gY2FyZC0+ZXZlbnRIYW5kbGVyKCk7CisgICAgfSBlbHNlIGlm
IChwYXJlbnQtPmhhc1RhZ05hbWUodGVtcGxhdGVUYWcpKSB7CisgICAgICAgIFdNTFRlbXBsYXRl
RWxlbWVudCogdGVtcGwgPSBzdGF0aWNfY2FzdDxXTUxUZW1wbGF0ZUVsZW1lbnQqPihwYXJlbnQp
OworICAgICAgICB0ZW1wbC0+c2V0SGFzSW50cmluc2ljRXZlbnQodHJ1ZSk7CisgICAgICAgIGV2
SGFuZGxlciA9IHRlbXBsLT5ldmVudEhhbmRsZXIoKTsKKyAgICB9IGVsc2UgaWYgKHBhcmVudC0+
aGFzVGFnTmFtZShvcHRpb25UYWcpKSB7CisgICAgICAgIFdNTE9wdGlvbkVsZW1lbnQqIG9wdGlv
biA9IHN0YXRpY19jYXN0PFdNTE9wdGlvbkVsZW1lbnQqPihwYXJlbnQpOworICAgICAgICBvcHRp
b24tPnNldEhhc0ludHJpbnNpY0V2ZW50KHRydWUpOworICAgICAgICBldkhhbmRsZXIgPSBvcHRp
b24tPmV2ZW50SGFuZGxlcigpOworICAgIH0KKworICAgIGlmIChldkhhbmRsZXIpCisgICAgICAg
IGV2SGFuZGxlci0+cmVnaXN0ZXJJbnRyaW5zaWNFdmVudCh0eXBlLCBldik7Cit9CisKK3ZvaWQg
V01MVGFza0VsZW1lbnQ6Omluc2VydGVkSW50b1RyZWUoYm9vbCBkZWVwKSAKK3sKKyAgICBmb3Ig
KE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsgcGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBh
cmVudE5vZGUoKSkgeworCisgICAgICAgIGlmIChwYXJlbnQtPmhhc1RhZ05hbWUoZG9UYWcpKSB7
CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxEb0VsZW1lbnQqPihwYXJlbnQpLT5yZWdpc3Rl
clRhc2sodGhpcyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSBlbHNlIGlmIChwYXJl
bnQtPmxvY2FsTmFtZSgpID09ICJvbmV2ZW50IikgeworICAgICAgICAgICAgLy9iaW5kaW5nIHRo
aXMgdGFzayB3aXRoIGludHJpbnNpYyBldmVudCBzcGVjaWZpZWQgYnkgb25ldmVudCB0eXBlCisg
ICAgICAgICAgICBiaW5kSW50cmluc2ljRXZlbnRJbk9uZXZlbnQocGFyZW50KTsKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9IGVsc2UgaWYgKHBhcmVudC0+aGFzVGFnTmFtZShhbmNob3JU
YWcpKSB7CisgICAgICAgICAgICBzdGF0aWNfY2FzdDxXTUxBbmNob3JFbGVtZW50Kj4ocGFyZW50
KS0+cmVnaXN0ZXJUYXNrKHRoaXMpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor
ICAgIH0KK30KKwordm9pZCBXTUxUYXNrRWxlbWVudDo6cmVnaXN0ZXJTZXR2YXJFbGVtZW50KFdN
TFNldHZhckVsZW1lbnQqIGUpIAoreworICAgIG1fc2V0dmFycy5hcHBlbmQoZSk7Cit9CisKK3Zv
aWQgV01MVGFza0VsZW1lbnQ6OnJlbW92ZVNldHZhckVsZW1lbnQoV01MU2V0dmFyRWxlbWVudCog
ZSkgCit7CisgICAgcmVtb3ZlRnJvbVZlY3RvcihtX3NldHZhcnMsIGUpOworfQorCitib29sIFdN
TFRhc2tFbGVtZW50OjpoYXNTZXR2YXIoKSBjb25zdCAKK3sKKyAgICByZXR1cm4gIW1fc2V0dmFy
cy5pc0VtcHR5KCk7Cit9CisKK30KSW5kZXg6IFdlYkNvcmUvd21sL1dNTFRhc2tFbGVtZW50LmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGFza0VsZW1lbnQuaAkocmV2aXNpb24gMCkK
KysrIFdlYkNvcmUvd21sL1dNTFRhc2tFbGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5j
b20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3
cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgor
ICoKKyAqLworCisjaWZuZGVmIFdNTFRhc2tFbGVtZW50X2gKKyNkZWZpbmUgV01MVGFza0VsZW1l
bnRfaAorCisjaW5jbHVkZSAiV01MRWxlbWVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFdNTFNldHZhckVsZW1lbnQ7CisKK2NsYXNzIFdNTFRhc2tFbGVtZW50IDogcHVibGlj
IFdNTEVsZW1lbnQgeworcHVibGljOgorICAgIFdNTFRhc2tFbGVtZW50KGNvbnN0IFF1YWxpZmll
ZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50KiBkb2MpOworICAgIHZpcnR1YWwgfldNTFRhc2tFbGVt
ZW50KCk7CisgIAorICAgIHZpcnR1YWwgdm9pZCBleGVjKEV2ZW50KiwgU3RyaW5nIHVyaSA9IFN0
cmluZygpKSA9IDAgOworCisgICAgdmlydHVhbCB2b2lkIGluc2VydGVkSW50b1RyZWUoYm9vbCBk
ZWVwKTsKKworICAgIHZpcnR1YWwgdm9pZCByZWdpc3RlclNldHZhckVsZW1lbnQoV01MU2V0dmFy
RWxlbWVudCopOworICAgIHZpcnR1YWwgdm9pZCByZW1vdmVTZXR2YXJFbGVtZW50KFdNTFNldHZh
ckVsZW1lbnQqKTsKKyAgICBib29sIGhhc1NldHZhcigpIGNvbnN0OworCitwcm90ZWN0ZWQ6Cisg
ICAgVmVjdG9yPFdNTFNldHZhckVsZW1lbnQqPiBtX3NldHZhcnM7CisKK3ByaXZhdGU6CisgICAg
dm9pZCBiaW5kSW50cmluc2ljRXZlbnRJbk9uZXZlbnQoTm9kZSopOworCit9OworCit9IC8vbmFt
ZXNwYWNlCisKKyNlbmRpZgpJbmRleDogV2ViQ29yZS93bWwvV01MVGVtcGxhdGVFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuY3BwCShyZXZp
c2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGVtcGxhdGVFbGVtZW50LmNwcAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9i
aWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0cDovL3d3
dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcu
TElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIx
MTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
V01MVGVtcGxhdGVFbGVtZW50LmgiCisKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCisjaW5j
bHVkZSAiUmVuZGVyQXJlbmEuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgorI2luY2x1ZGUg
IlJlbmRlck9iamVjdC5oIgorI2luY2x1ZGUgIldNTERvRWxlbWVudC5oIgorI2luY2x1ZGUgIldN
TEVsZW1lbnRGYWN0b3J5LmgiCisjaW5jbHVkZSAiV01MR29FbGVtZW50LmgiCisjaW5jbHVkZSAi
V01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3Rh
dGUuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTFRlbXBsYXRlRWxlbWVudDo6V01MVGVt
cGxhdGVFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50ICpkb2Mp
CisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAsIG1fZXZudEhhbmRsZXIoMCkK
KyAgICAsIG1faGFzSW50cmluc2ljRXZlbnQoZmFsc2UpIAoreworfQorCitXTUxUZW1wbGF0ZUVs
ZW1lbnQ6On5XTUxUZW1wbGF0ZUVsZW1lbnQoKSAKK3sKKyAgICBpZiAobV9ldm50SGFuZGxlcikg
eworICAgICAgICBkZWxldGUgbV9ldm50SGFuZGxlcjsKKyAgICAgICAgbV9ldm50SGFuZGxlciA9
IDA7CisgICAgfQorCit9CisKK3ZvaWQgV01MVGVtcGxhdGVFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCit7CisgICAgV01MSW50cmluc2ljRXZlbnRU
eXBlIGV0eXBlID0gVW5rbm93bjsKKworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gb25lbnRlcmZv
cndhcmRBdHRyKQorICAgICAgICBldHlwZSA9IE9uRW50ZXJGb3J3YXJkOworICAgIGVsc2UgaWYg
KGF0dHItPm5hbWUoKSA9PSBvbmVudGVyYmFja3dhcmRBdHRyKQorICAgICAgICBldHlwZSA9IE9u
RW50ZXJCYWNrd2FyZDsKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb250aW1lckF0dHIp
CisgICAgICAgIGV0eXBlID0gT25UaW1lcjsKKyAgICAKKyAgICAvLyByZWdpc3RlciBpbnRyaW5z
aWMgZXZlbnQgdG8gdGVtcGxhdGUgCisgICAgaWYgKGV0eXBlICE9IFVua25vd24pIHsKKworICAg
ICAgICBpZiAoIW1fZXZudEhhbmRsZXIpIAorICAgICAgICAgICAgbV9ldm50SGFuZGxlciA9IG5l
dyBXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIoKTsKKworICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKKyAgICAgICAgUXVhbGlmaWVkTmFtZSBxTmFtZSgiZ28iLCAiZ28iLCAiIik7CisgICAg
ICAgIEVsZW1lbnQqIGdvID0gV01MRWxlbWVudEZhY3Rvcnk6OmNyZWF0ZVdNTEVsZW1lbnQocU5h
bWUsIGRvY3VtZW50KCksIGZhbHNlKTsgCisgICAgICAgIFN0cmluZyBocmVmID0gV01MSGVscGVy
OjpzdWJzdGl0dXRlVmFyUmVmKGF0dHItPnZhbHVlKCksIGRvY3VtZW50KCksICJlc2NhcGUiKTsK
KyAgICAgICAgZ28tPnNldEF0dHJpYnV0ZU5TKCIiLCAiaHJlZiIsIGhyZWYsIGVjKTsKKworICAg
ICAgICBXTUxJbnRyaW5zaWNFdmVudCBldjsKKyAgICAgICAgZXYudGFzayA9IHN0YXRpY19jYXN0
PFdNTEdvRWxlbWVudCo+KGdvKTsKKyAgICAgICAgZXYudGFyZ2V0VVJJID0gaHJlZjsgCisKKyAg
ICAgICAgc2V0SGFzSW50cmluc2ljRXZlbnQodHJ1ZSk7CisgICAgICAgIG1fZXZudEhhbmRsZXIt
PnJlZ2lzdGVySW50cmluc2ljRXZlbnQoZXR5cGUsIGV2KTsKKyAgICB9Cit9CisKK1dNTEludHJp
bnNpY0V2ZW50SGFuZGxlciogV01MVGVtcGxhdGVFbGVtZW50OjpldmVudEhhbmRsZXIoKQorewor
ICAgIGlmIChtX2hhc0ludHJpbnNpY0V2ZW50ICYmICFtX2V2bnRIYW5kbGVyKQorICAgICAgICBt
X2V2bnRIYW5kbGVyID0gbmV3IFdNTEludHJpbnNpY0V2ZW50SGFuZGxlcigpOworCisgICAgcmV0
dXJuIG1fZXZudEhhbmRsZXI7Cit9CisKK3ZvaWQgV01MVGVtcGxhdGVFbGVtZW50OjpzZXRIYXNJ
bnRyaW5zaWNFdmVudChib29sIGhhc0V2dCkKK3sKKyAgICBtX2hhc0ludHJpbnNpY0V2ZW50ID0g
aGFzRXZ0OworfQorCitib29sIFdNTFRlbXBsYXRlRWxlbWVudDo6aGFzSW50cmluc2ljRXZlbnQo
KQoreworICAgIHJldHVybiBtX2hhc0ludHJpbnNpY0V2ZW50OworfQorCit2b2lkIFdNTFRlbXBs
YXRlRWxlbWVudDo6cmVnaXN0ZXJEb0VsZW1lbnQoV01MRG9FbGVtZW50KiBkb0VsZW10KQorewor
ICAgIGlmIChkb0VsZW10KSB7CisgICAgICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPjo6aXRlcmF0
b3IgaXQgPSBtX2RvVmVjcy5iZWdpbigpOworICAgICAgICBXTUxEb0VsZW1lbnQqIHRtcERvID0g
MDsKKyAgICAgICAgd2hpbGUgKGl0ICE9IG1fZG9WZWNzLmVuZCgpKSB7CisgICAgICAgICAgICB0
bXBEbyA9IHN0YXRpY19jYXN0PFdNTERvRWxlbWVudCo+KCppdCsrKTsKKyAgICAgICAgICAgIGlm
ICh0bXBEby0+ZG9OYW1lKCkgPT0gZG9FbGVtdC0+ZG9OYW1lKCkpIHsKKyAgICAgICAgICAgICAg
ICBXTUxIZWxwZXI6OnRva2VuaXplcigpLT5yZXBvcnRFcnJvcihTYW1lTmFtZURvRWxlbWVudHNF
cnJvcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICAgIG1fZG9WZWNzLmFwcGVuZChkb0VsZW10KTsKKyAgICB9Cit9CisKK1ZlY3RvcjxX
TUxEb0VsZW1lbnQqPiBXTUxUZW1wbGF0ZUVsZW1lbnQ6OmdldERvRWxlbWVudHMoKQoreworICAg
IHJldHVybiBtX2RvVmVjczsKK30KKworfQpJbmRleDogV2ViQ29yZS93bWwvV01MVGVtcGxhdGVF
bGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS93bWwvV01MVGVtcGxhdGVFbGVtZW50LmgJ
KHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxUZW1wbGF0ZUVsZW1lbnQuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBN
b2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8v
d3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAw
MjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgV01MVGVtcGxhdGVFbGVtZW50X2gK
KyNkZWZpbmUgV01MVGVtcGxhdGVFbGVtZW50X2gKKworI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIK
KyNpbmNsdWRlICJXTUxJbnRyaW5zaWNFdmVudEhhbmRsZXIuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBXTUxUYXNrRWxlbWVudDsKK2NsYXNzIFdNTERvRWxlbWVudDsKKworY2xh
c3MgV01MVGVtcGxhdGVFbGVtZW50IDogcHVibGljIFdNTEVsZW1lbnQgeworcHVibGljOgorICAg
IFdNTFRlbXBsYXRlRWxlbWVudChjb25zdCBRdWFsaWZpZWROYW1lJiwgRG9jdW1lbnQqKTsKKyAg
ICB2aXJ0dWFsIH5XTUxUZW1wbGF0ZUVsZW1lbnQoKTsKKworICAgIHZpcnR1YWwgdm9pZCBwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqKTsKKworICAgIFdNTEludHJpbnNpY0V2
ZW50SGFuZGxlciogZXZlbnRIYW5kbGVyKCk7CisgICAgYm9vbCBoYXNJbnRyaW5zaWNFdmVudCgp
OworICAgIHZvaWQgc2V0SGFzSW50cmluc2ljRXZlbnQoYm9vbCk7CisKKyAgICB2b2lkIHJlZ2lz
dGVyRG9FbGVtZW50KFdNTERvRWxlbWVudCopOworICAgIFZlY3RvcjxXTUxEb0VsZW1lbnQqPiBn
ZXREb0VsZW1lbnRzKCk7Citwcml2YXRlOgorICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciog
bV9ldm50SGFuZGxlcjsKKyAgICBib29sIG1faGFzSW50cmluc2ljRXZlbnQ7CisgICAgVmVjdG9y
PFdNTERvRWxlbWVudCo+IG1fZG9WZWNzOworfTsKKworfSAvL25hbWVzcGFjZQorCisjZW5kaWYK
SW5kZXg6IFdlYkNvcmUvd21sL1dNTFRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTFRleHQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGV4dC5jcHAJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9y
Y2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAgICAgICAgICAgaHR0
cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3Rvbiwg
TUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiV01MVGV4dC5oIgorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJXTUxI
ZWxwZXIuaCIKKyNpbmNsdWRlICJXTUxQYWdlU3RhdGUuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitXTUxUZXh0OjpXTUxUZXh0KERvY3VtZW50KiBkb2MsIGNvbnN0IFN0cmluZyYgdGV4dCkK
KyAgICA6IFRleHQoZG9jLCB0ZXh0KQoreworfQorCitXTUxUZXh0Ojp+V01MVGV4dCgpCit7Cit9
CisKK3ZvaWQgV01MVGV4dDo6dXBkYXRlRGF0YUlmTmVlZGVkKCkgCit7CisgICAgUGFnZSAqcGFn
ZSA9IGRvY3VtZW50KCktPnBhZ2UoKTsKKyAgICBpZiAoIXBhZ2UpCisgICAgICAgIHJldHVybjsK
KworICAgIGlmIChsZW5ndGgoKSA+IDEgJiYgcGFnZS0+d21sUGFnZVN0YXRlKCktPmhhc1Zhcmlh
YmxlcygpKSB7CisgICAgICAgIFN0cmluZyB0ZXh0ID0gZGF0YSgpOworICAgICAgICBpZiAoIXRl
eHQuaW1wbCgpLT5jb250YWluc09ubHlXaGl0ZXNwYWNlKCkpIHsKKyAgICAgICAgICAgIHRleHQg
PSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYodGV4dCwgZG9jdW1lbnQoKSk7CisKKyAgICAg
ICAgICAgIEV4Y2VwdGlvbkNvZGUgZTsKKyAgICAgICAgICAgIHNldERhdGEodGV4dCwgZSk7Cisg
ICAgICAgIH0KKyAgICB9Cit9CisKKworfSAvL25hbWVzcGFjZQpJbmRleDogV2ViQ29yZS93bWwv
V01MVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRleHQuaAkocmV2aXNpb24g
MCkKKysrIFdlYkNvcmUvd21sL1dNTFRleHQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8K
KyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgor
ICovCisKKyNpZm5kZWYgV01MVGV4dF9oCisjZGVmaW5lIFdNTFRleHRfaAorCisjaW5jbHVkZSAi
VGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworCitjbGFz
cyBXTUxUZXh0IDogcHVibGljIFRleHQgeworcHVibGljOgorICAgIFdNTFRleHQoRG9jdW1lbnQq
LCBjb25zdCBTdHJpbmcmKTsKKyAgICB2aXJ0dWFsIH5XTUxUZXh0KCk7CisKKyAgICB2b2lkIHVw
ZGF0ZURhdGFJZk5lZWRlZCgpOworfTsKKworfSAvLyBuYW1lc3BhY2UKKworI2VuZGlmCkluZGV4
OiBXZWJDb3JlL3dtbC9XTUxUaW1lckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
d21sL1dNTFRpbWVyRWxlbWVudC5jcHAJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3dtbC9XTUxU
aW1lckVsZW1lbnQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KKyAqIENvcHlyaWdo
dCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5l
cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxUaW1lckVsZW1lbnQuaCIKKworI2luY2x1ZGUg
IldNTENhcmRFbGVtZW50LmgiCisjaW5jbHVkZSAiV01MSGVscGVyLmgiCisjaW5jbHVkZSAiV01M
SW50cmluc2ljRXZlbnRIYW5kbGVyLmgiCisjaW5jbHVkZSAiV01MTmFtZXMuaCIKKyNpbmNsdWRl
ICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCit1c2luZyBuYW1lc3BhY2UgV01MTmFtZXM7CisKK1dNTFRpbWVyRWxlbWVu
dDo6V01MVGltZXJFbGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50
ICpkb2MpCisgICAgOiBXTUxFbGVtZW50KHRhZ05hbWUsIGRvYykKKyAgICAgICwgbV9jYXJkKDAp
CisgICAgICAsIG1fdGltZXIodGhpcywgJldNTFRpbWVyRWxlbWVudDo6dGltZXJGaXJlZCkKK3sK
K30KKworV01MVGltZXJFbGVtZW50Ojp+V01MVGltZXJFbGVtZW50KCkKK3sKK30KKwordm9pZCBX
TUxUaW1lckVsZW1lbnQ6OnRpbWVyRmlyZWQoVGltZXI8V01MVGltZXJFbGVtZW50PiopCit7Cisg
ICAgaWYgKCFtX2NhcmQgfHwgIWRvY3VtZW50KCktPnBhZ2UoKSkgCisgICAgICAgIHJldHVybjsK
KworICAgIC8vd2hlbiB0aGUgdGltZXIgZXhwaXJlcywgc2V0IHRoZSBuYW1lIHZhcmlhbGJlIG9m
IHRpbWVyIHRvICcwJworICAgIGlmICghbV9uYW1lLmlzRW1wdHkoKSkgeworICAgICAgICBtX3Zh
bHVlID0gIjAiOworICAgICAgICBBU1NFUlQoZG9jdW1lbnQoKS0+cGFnZSgpLT53bWxQYWdlU3Rh
dGUoKSk7CisgICAgICAgIGRvY3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCktPnN0b3Jl
VmFyaWFibGUobV9uYW1lLCBtX3ZhbHVlKTsKKyAgICB9CisKKyAgICBXTUxJbnRyaW5zaWNFdmVu
dFR5cGUgZXR5cGUgPSBPblRpbWVyOworICAgIFdNTEludHJpbnNpY0V2ZW50SGFuZGxlciogZXZI
YW5kbGVyID0gbV9jYXJkLT5ldmVudEhhbmRsZXIoKTsKKyAgICBib29sIGhhc0ludHJpbnNpY0V2
ZW50ID0gIGZhbHNlOworICAgIGlmIChldkhhbmRsZXIgJiYgZXZIYW5kbGVyLT5oYXNJbnRyaW5z
aWNFdmVudChldHlwZSkpCisgICAgICAgIGhhc0ludHJpbnNpY0V2ZW50ID0gdHJ1ZTsKKyAgICBl
bHNlIGlmIChtX2NhcmQtPnRlbXBsYXRlRWxlbWVudCgpKSB7CisgICAgICAgIGV2SGFuZGxlciA9
IG1fY2FyZC0+dGVtcGxhdGVFbGVtZW50KCktPmV2ZW50SGFuZGxlcigpOworICAgICAgICBpZiAo
ZXZIYW5kbGVyICYmIGV2SGFuZGxlci0+aGFzSW50cmluc2ljRXZlbnQoZXR5cGUpKQorICAgICAg
ICAgICAgaGFzSW50cmluc2ljRXZlbnQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChoYXNJbnRy
aW5zaWNFdmVudCkKKyAgICB7CisgICAgICAgIGV2SGFuZGxlci0+dHJpZ2dlckludHJpbnNpY0V2
ZW50KGV0eXBlKTsKKyAgICB9Cit9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50OjpzdGFydChpbnQg
aW50ZXJ2YWwpCit7CisgICAgaWYgKG1fY2FyZCAmJiAhbV90aW1lci5pc0FjdGl2ZSgpKSB7Cisg
ICAgICAgIAorICAgICAgICBpZiAoKGludGVydmFsIDw9IDApICYmICFtX25hbWUuaXNFbXB0eSgp
KSB7CisgICAgICAgICAgICBTdHJpbmcgdGltZW91dCA9IGRvY3VtZW50KCktPnBhZ2UoKS0+d21s
UGFnZVN0YXRlKCktPmdldFZhcmliYWxlKG1fbmFtZSk7IAorICAgICAgICAgICAgaW50ZXJ2YWwg
PSB0aW1lb3V0LnRvSW50KCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaW50ZXJ2YWwgPD0g
MCkKKyAgICAgICAgICAgIGludGVydmFsID0gbV92YWx1ZS50b0ludCgpOworCisgICAgICAgIGlm
IChpbnRlcnZhbCA+IDApCisgICAgICAgICAgICBtX3RpbWVyLnN0YXJ0T25lU2hvdChpbnRlcnZh
bC8xMC4wKTsKKyAgICB9Cit9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50OjpzdG9wKCkKK3sKKyAg
ICBpZiAobV90aW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3RpbWVyLnN0b3AoKTsKK30KKwor
dm9pZCBXTUxUaW1lckVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0
ZSogYXR0cikgCit7CisgICAgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgeworICAgICAg
ICBpZiAoIVdNTEhlbHBlcjo6aXNWYWxpZFZhcmlhYmxlTmFtZShhdHRyLT52YWx1ZSgpKSkKKyAg
ICAgICAgICAgIFdNTEhlbHBlcjo6dG9rZW5pemVyKCktPnJlcG9ydEVycm9yKEludmFsaWRWYXJp
YWJsZU5hbWVFcnJvcik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fbmFtZSA9IGF0dHIt
PnZhbHVlKCk7CisKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSB2YWx1ZUF0dHIpCisg
ICAgICAgIG1fdmFsdWUgPSBXTUxIZWxwZXI6OnN1YnN0aXR1dGVWYXJSZWYoYXR0ci0+dmFsdWUo
KSwgZG9jdW1lbnQoKSk7Cit9CisKK3ZvaWQgV01MVGltZXJFbGVtZW50OjppbnNlcnRlZEludG9U
cmVlKGJvb2wgZGVlcCkKK3sKKyAgICAvLyBUaGUgdmFsdWUgb2YgdGltZW91dCBtdXN0IGJlIGEg
cG9zaXRpdmUgaW50ZWdyYWwgbnVtYmVyLCBvciBpZ25vcmUgaXQKKyAgICBpZiAobV92YWx1ZS50
b0ludCgpID4gMCkgeworICAgICAgICBmb3IgKE5vZGUqIHBhcmVudCA9IHBhcmVudE5vZGUoKTsg
cGFyZW50OyBwYXJlbnQgPSBwYXJlbnQtPnBhcmVudE5vZGUoKSkgeworICAgICAgICAgICAgaWYg
KHBhcmVudC0+aGFzVGFnTmFtZShjYXJkVGFnKSkgeworICAgICAgICAgICAgICAgIG1fY2FyZCA9
IHN0YXRpY19jYXN0PFdNTENhcmRFbGVtZW50Kj4ocGFyZW50KTsKKyAgICAgICAgICAgICAgICBt
X2NhcmQtPnNldEludHJpbnNpY0V2ZW50VGltZXIodGhpcyk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgV01MVGltZXJF
bGVtZW50OjpzdG9yZUludGVydmFsVG9QYWdlU3RhdGUoKQoreworICAgIGlmIChtX3RpbWVyLmlz
QWN0aXZlKCkpIHsKKyAgICAgICAgaW50IGludGVydmFsID0gc3RhdGljX2Nhc3Q8aW50PihtX3Rp
bWVyLm5leHRGaXJlSW50ZXJ2YWwoKSkqMTA7CisgICAgICAgIFN0cmluZyB2YWx1ZSA9IFN0cmlu
Zzo6bnVtYmVyKGludGVydmFsKTsKKworICAgICAgICBQYWdlICpwYWdlID0gZG9jdW1lbnQoKS0+
cGFnZSgpOworICAgICAgICBpZiAocGFnZSkgCisgICAgICAgICAgICBwYWdlLT53bWxQYWdlU3Rh
dGUoKS0+c3RvcmVWYXJpYWJsZShtX25hbWUsIHZhbHVlKTsKKyAgICB9Cit9CisKK30KSW5kZXg6
IFdlYkNvcmUvd21sL1dNTFRpbWVyRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21s
L1dNTFRpbWVyRWxlbWVudC5oCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS93bWwvV01MVGltZXJF
bGVtZW50LmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICAgICAg
ICAgICAgICAgaHR0cDovL3d3dy50b3JjaG1vYmlsZS5jb20vCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDQtMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2Vl
IHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwK
KyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIFdNTFRp
bWVyRWxlbWVudF9oCisjZGVmaW5lIFdNTFRpbWVyRWxlbWVudF9oCisKKyNpbmNsdWRlICJUaW1l
ci5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBXTUxDYXJkRWxlbWVudDsKKyAgICAgICAgICAgICAgICAgICAgICAgCitjbGFzcyBXTUxU
aW1lckVsZW1lbnQgOiBwdWJsaWMgV01MRWxlbWVudCB7CitwdWJsaWM6CisgICAgV01MVGltZXJF
bGVtZW50KGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50Kik7CisgICAgdmly
dHVhbCB+V01MVGltZXJFbGVtZW50KCk7CisgICAgdmlydHVhbCB2b2lkIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgIHZpcnR1YWwgdm9pZCBpbnNlcnRlZEludG9U
cmVlKGJvb2wgZGVlcCk7CisKKyAgICB2b2lkIHRpbWVyRmlyZWQoVGltZXI8V01MVGltZXJFbGVt
ZW50PiopOworICAgIHZvaWQgc3RhcnQoaW50IGludGVydmFsID0gLTEpOworICAgIHZvaWQgc3Rv
cCgpOworICAgIHZvaWQgc3RvcmVJbnRlcnZhbFRvUGFnZVN0YXRlKCk7CisKK3ByaXZhdGU6Cisg
ICAgV01MQ2FyZEVsZW1lbnQqIG1fY2FyZDsKKyAgICBTdHJpbmcgbV9uYW1lOworICAgIFN0cmlu
ZyBtX3ZhbHVlOworICAgIFRpbWVyPFdNTFRpbWVyRWxlbWVudD4gbV90aW1lcjsKK307CisKK30g
Ly9uYW1lc3BhY2UKKworI2VuZGlmCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvd21sL1dNTFRva2VuaXplci5jcHAJKHJldmlzaW9uIDAp
CisrKyBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsx
LDM2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUb3JjaCBNb2JpbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogICAgICAgICAgICAgICBodHRwOi8vd3d3LnRvcmNobW9iaWxl
LmNvbS8KKyAqIENvcHlyaWdodCAoQykgMjAwNC0yMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3Qs
IHdyaXRlIHRvCisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0Eu
CisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXTUxUb2tlbml6ZXIu
aCIKKworI2luY2x1ZGUgIkNhY2hlLmgiCisjaW5jbHVkZSAiQ2FjaGVkU2NyaXB0LmgiCisjaW5j
bHVkZSAiQ0RBVEFTZWN0aW9uLmgiCisjaW5jbHVkZSAiQ1N0cmluZy5oIgorI2luY2x1ZGUgIkNv
bW1lbnQuaCIKKyNpbmNsdWRlICJEb2NMb2FkZXIuaCIKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkRvY3VtZW50RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudFR5cGUuaCIK
KyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJG
cmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhpc3RvcnlJ
dGVtLmgiCisjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisjaW5jbHVkZSAiSFRNTFNjcmlwdEVsZW1l
bnQuaCIKKyNpbmNsdWRlICJIVE1MU3R5bGVFbGVtZW50LmgiCisjaW5jbHVkZSAiSFRNTFRhYmxl
U2VjdGlvbkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MVG9rZW5pemVyLmgiCisjaW5jbHVkZSAi
Tm9kZUxpc3QuaCIKKyNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUHJvY2Vzc2luZ0luc3Ry
dWN0aW9uLmgiCisjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKKyNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKKyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisjaWYgVVNFKFFYTUxT
VFJFQU0pCisjaW5jbHVkZSA8UURlYnVnPgorI2Vsc2UKKyNpbmNsdWRlIDxsaWJ4bWwvcGFyc2Vy
Lmg+CisjaW5jbHVkZSA8bGlieG1sL3BhcnNlckludGVybmFscy5oPgorI2VuZGlmCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCisjaWYgRU5BQkxF
KFhTTFQpCisjaW5jbHVkZSA8bGlieHNsdC94c2x0Lmg+CisjZW5kaWYKKworI2lmIEVOQUJMRShT
VkcpCisjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKKyNpbmNsdWRlICJTVkdTdHlsZUVsZW1lbnQuaCIK
KyNpbmNsdWRlICJYTGlua05hbWVzLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIldNTEFjY2Vzc0Vs
ZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxDYXJkRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFBhZ2VT
dGF0ZS5oIgorI2luY2x1ZGUgIldNTEVsZW1lbnQuaCIKKyNpbmNsdWRlICJXTUxFbGVtZW50RmFj
dG9yeS5oIgorI2luY2x1ZGUgIldNTEhlbHBlci5oIgorI2luY2x1ZGUgIldNTEltYWdlRWxlbWVu
dC5oIgorI2luY2x1ZGUgIldNTElucHV0RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTE5hbWVzLmgi
CisjaW5jbHVkZSAiV01MT3B0aW9uRWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFBFbGVtZW50Lmgi
CisjaW5jbHVkZSAiV01MU2VsZWN0RWxlbWVudC5oIgorI2luY2x1ZGUgIldNTFRleHQuaCIKKwor
dXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit1c2luZyBuYW1l
c3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CisKKy8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1dNTFRva2VuaXplcjo6V01MVG9rZW5pemVy
KERvY3VtZW50KiBfZG9jLCBGcmFtZVZpZXcqIF92aWV3KQorOiBYTUxUb2tlbml6ZXIoX2RvYywg
X3ZpZXcpIAoreworICAgIHNldEN1cnJlbnROb2RlKF9kb2MpOworICAgIG1fZXJyb3JDb2RlID0g
Tm9FcnJvcjsKKyAgICAgCisgICAgV01MSGVscGVyOjpzZXRUb2tlbml6ZXIodGhpcyk7Cit9CisK
KworV01MVG9rZW5pemVyOjp+V01MVG9rZW5pemVyKCkKK3sKKyAgICBXTUxIZWxwZXI6OnNldFRv
a2VuaXplcigwKTsKK30KKworYm9vbCBXTUxUb2tlbml6ZXI6OndyaXRlKGNvbnN0IFNlZ21lbnRl
ZFN0cmluZyYgcywgYm9vbCAvKmFwcGVuZERhdGEqLykgCit7CisjaWYgIVVTRShRWE1MU1RSRUFN
KQorICAgIFhNTFRva2VuaXplcjo6d3JpdGUocywgdHJ1ZSk7CisgICAgcmV0dXJuIHRydWU7Cisj
ZWxzZQorCisgICAgc3RhdGljIFFYbWxTdHJlYW1SZWFkZXI6OlRva2VuVHlwZSBvbGRUeXBlID0g
UVhtbFN0cmVhbVJlYWRlcjo6Tm9Ub2tlbjsKKworICAgIFFYbWxTdHJlYW1SZWFkZXIgJnN0cmVh
bSA9IHhtbFN0cmVhbVJlYWRlcigpOworICAgIHN0cmVhbS5hZGREYXRhKFFTdHJpbmcocy50b1N0
cmluZygpKSk7CisKKyAgICB3aGlsZSAoIXN0cmVhbS5hdEVuZCgpKSB7CisgICAgICAgIHN0cmVh
bS5yZWFkTmV4dCgpOworICAgICAgICBzd2l0Y2ggKHN0cmVhbS50b2tlblR5cGUoKSkgeworICAg
ICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpTdGFydERvY3VtZW50OgorICAgICAgICAg
ICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpFbmREb2N1bWVudDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6U3RhcnRFbGVtZW50Ogor
ICAgICAgICAgICAgICAgIGlmIChvbGRUeXBlICE9IFFYbWxTdHJlYW1SZWFkZXI6OkRURCkgewor
ICAgICAgICAgICAgICAgICAgICBoYW5kbGVXTUxFcnJvcihEb2NUeXBlRGVjbGFyYXRpb25NaXNz
RXJyb3IpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIFdNTFBhcnNlU3RhcnRFbGVtZW50KCk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJlYW1SZWFkZXI6OkVuZEVsZW1l
bnQ6IAorICAgICAgICAgICAgICAgIFdNTFBhcnNlRW5kRWxlbWVudCgpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBRWG1sU3RyZWFtUmVhZGVyOjpDaGFyYWN0ZXJz
OiB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5pc0NEQVRBKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICBleGl0VGV4dCgpOworICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxOb2Rl
PiBuZXdOb2RlID0gbmV3IENEQVRBU2VjdGlvbihkb2N1bWVudCgpLCBzdHJlYW0udGV4dCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgICBpZiAoIWN1cnJlbnROb2RlKCktPmFkZENoaWxkKG5ld05v
ZGUuZ2V0KCkpKQorICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZnJhbWVWaWV3KCkgJiYgIW5ld05vZGUtPmF0dGFjaGVkKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICAgIG5ld05vZGUtPmF0dGFjaCgpOworICAgICAgICAgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Tm9kZSgpLT5pc1RleHRO
b2RlKCkgfHwgZW50ZXJUZXh0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgV01MVGV4dCogdGV4dCA9IHN0
YXRpY19jYXN0PFdNTFRleHQqPihjdXJyZW50Tm9kZSgpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHRleHQtPmFwcGVuZERhdGEoc3RyZWFtLnRleHQoKSwgZWMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgdGV4dC0+dXBkYXRlRGF0YUlmTmVlZGVkKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmICghY3VycmVudE5vZGUoKS0+YXR0YWNoZWQoKSkgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY3VycmVudE5vZGUoKS0+YXR0YWNoKCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6RW50aXR5UmVmZXJlbmNl
OiB7CisgICAgICAgICAgICAgICAgUVN0cmluZyBlbnRpdHkgPSBzdHJlYW0ubmFtZSgpLnRvU3Ry
aW5nKCk7CisgICAgICAgICAgICAgICAgVUNoYXIgYyA9IGRlY29kZU5hbWVkRW50aXR5KGVudGl0
eS50b1V0ZjgoKS5jb25zdERhdGEoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoY3VycmVudE5v
ZGUoKS0+aXNUZXh0Tm9kZSgpIHx8IGVudGVyVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICAgICAgICAgICAgICBTdHJpbmcgc3RyKCZj
LCAxKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8VGV4dCo+KGN1cnJlbnROb2Rl
KCkpLT5hcHBlbmREYXRhKHN0ciwgZWMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJl
YWRlcjo6Q29tbWVudDoKKyAgICAgICAgICAgICAgICBwYXJzZUNvbW1lbnQoKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgUVhtbFN0cmVhbVJlYWRlcjo6UHJvY2Vz
c2luZ0luc3RydWN0aW9uOgorICAgICAgICAgICAgICAgIHBhcnNlUHJvY2Vzc2luZ0luc3RydWN0
aW9uKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFFYbWxTdHJl
YW1SZWFkZXI6OkRURDoKKyAgICAgICAgICAgICAgICBvbGRUeXBlID0gUVhtbFN0cmVhbVJlYWRl
cjo6RFREOworICAgICAgICAgICAgICAgIHBhcnNlRHRkKCk7CisgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICBkZWZhdWx0OiB7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbS5l
cnJvcigpICE9IFFYbWxTdHJlYW1SZWFkZXI6OlByZW1hdHVyZUVuZE9mRG9jdW1lbnRFcnJvcikg
eworICAgICAgICAgICAgICAgICAgICBFcnJvclR5cGUgdHlwZSA9IChzdHJlYW0uZXJyb3IoKSA9
PSBRWG1sU3RyZWFtUmVhZGVyOjpOb3RXZWxsRm9ybWVkRXJyb3IpID8KKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmYXRhbCA6IHdhcm5pbmc7CisgICAgICAgICAgICAgICAg
ICAgIGhhbmRsZUVycm9yKHR5cGUsIHFQcmludGFibGUoc3RyZWFtLmVycm9yU3RyaW5nKCkpLCBs
aW5lTnVtYmVyKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbk51bWJl
cigpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
YnJlYWs7CisKKyAgICAgICAgfSAvLyBlbmQgb2Ygc3dpdGNoICguLi4KKworICAgICAgICBpZiAo
aGFzRXJyb3IoKSkgeworICAgICAgICAgICAgaGFuZGxlV01MRXJyb3IoKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gLy8gZW5kIG9mIHdoaWxlICguLi4KKwor
ICAgIHJldHVybiB0cnVlOworI2VuZGlmCisKK30KKwordm9pZCBXTUxUb2tlbml6ZXI6OnVwZGF0
ZUF0dHJzSWZOZWVkZWQoRWxlbWVudCogZWxlbWVudCwgY29uc3QgU3RyaW5nJiBsb2NhbE5hbWUp
Cit7CisgICAgLy8gdXBkYXRlIGF0cnJpYnV0ZXMgb2Ygb3B0b2luIGVsZW1lbnQgaWYgbmVlZGVk
CisgICAgaWYgKGxvY2FsTmFtZSA9PSAib3B0aW9uIikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01M
T3B0aW9uRWxlbWVudCo+KGVsZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxz
ZSBpZiAobG9jYWxOYW1lID09ICJzZWxlY3QiKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxTZWxl
Y3RFbGVtZW50Kj4oZWxlbWVudCktPnVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBlbHNlIGlm
IChsb2NhbE5hbWUgPT0gImlucHV0IikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01MSW5wdXRFbGVt
ZW50Kj4oZWxlbWVudCktPnVwZGF0ZUF0dHJzSWZOZWVkZWQoKTsKKyAgICBlbHNlIGlmIChsb2Nh
bE5hbWUgPT0gImltZyIpCisgICAgICAgIHN0YXRpY19jYXN0PFdNTEltYWdlRWxlbWVudCo+KGVs
ZW1lbnQpLT51cGRhdGVBdHRyc0lmTmVlZGVkKCk7CisgICAgZWxzZSBpZiAobG9jYWxOYW1lID09
ICJwIikKKyAgICAgICAgc3RhdGljX2Nhc3Q8V01MUEVsZW1lbnQqPihlbGVtZW50KS0+dXBkYXRl
QXR0cnNJZk5lZWRlZCgpOworfQorCisjaWYgVVNFKFFYTUxTVFJFQU0pCit2b2lkIFdNTFRva2Vu
aXplcjo6V01MUGFyc2VTdGFydEVsZW1lbnQoKQoreworICAgIGV4aXRUZXh0KCk7CisKKyAgICBR
WG1sU3RyZWFtUmVhZGVyICZzdHJlYW0gPSB4bWxTdHJlYW1SZWFkZXIoKTsKKyAgICBRU3RyaW5n
IGxvY2FsTmFtZSA9IHN0cmVhbS5uYW1lKCkudG9TdHJpbmcoKTsKKyAgICBRU3RyaW5nIHVyaSAg
ICAgICA9IHN0cmVhbS5uYW1lc3BhY2VVcmkoKS50b1N0cmluZygpOworICAgIFFTdHJpbmcgcHJl
Zml4ICAgID0gc3RyZWFtLnF1YWxpZmllZE5hbWUoKS50b1N0cmluZygpOworCisgICAgQVNTRVJU
KGRvY3VtZW50KCktPnBhZ2UoKSk7CisgICAgQVNTRVJUKGRvY3VtZW50KCktPnBhZ2UoKS0+d21s
UGFnZVN0YXRlKCkpOworICAgIGlmIChsb2NhbE5hbWUgPT0gImFjY2VzcyIpCisgICAgICAgIGRv
Y3VtZW50KCktPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCktPnNldE5lZWRDaGVja0RlY2tBY2Nlc3Mo
dHJ1ZSk7CisKKyAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKKyAgICBRdWFsaWZpZWROYW1lIHFO
YW1lKHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOworICAgIEVsZW1lbnQqIG5ld0VsZW1lbnQgPSBX
TUxFbGVtZW50RmFjdG9yeTo6Y3JlYXRlV01MRWxlbWVudChxTmFtZSwgZG9jdW1lbnQoKSwgdHJ1
ZSkgOworCisgICAgUVhtbFN0cmVhbUF0dHJpYnV0ZXMgYXR0cnMgPSBzdHJlYW0uYXR0cmlidXRl
cygpOworICAgIAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXR0cnMuY291bnQoKTsgKytpKSB7
CisgICAgICAgIGNvbnN0IFFYbWxTdHJlYW1BdHRyaWJ1dGUgJmF0dHIgPSBhdHRyc1tpXTsKKyAg
ICAgICAgU3RyaW5nIGF0dHJMb2NhbE5hbWUgPSBhdHRyLm5hbWUoKTsKKyAgICAgICAgU3RyaW5n
IGF0dHJWYWx1ZSAgICAgPSBhdHRyLnZhbHVlKCk7CisgICAgICAgIFN0cmluZyBhdHRyVVJJICAg
ICAgID0gYXR0ci5uYW1lc3BhY2VVcmkoKS5pc0VtcHR5KCkgPyBTdHJpbmcoKSA6IFN0cmluZyhh
dHRyLm5hbWVzcGFjZVVyaSgpKTsKKyAgICAgICAgU3RyaW5nIGF0dHJRTmFtZSAgICAgPSBhdHRy
LnF1YWxpZmllZE5hbWUoKTsKKworICAgICAgICBuZXdFbGVtZW50LT5zZXRBdHRyaWJ1dGVOUyhh
dHRyVVJJLCBhdHRyUU5hbWUsIGF0dHJWYWx1ZSwgZWMpOworICAgIH0KKworICAgIHVwZGF0ZUF0
dHJzSWZOZWVkZWQobmV3RWxlbWVudCwgbG9jYWxOYW1lKTsKKworICAgIGlmICghY3VycmVudE5v
ZGUoKS0+YWRkQ2hpbGQobmV3RWxlbWVudCkpIHsKKyAgICAgICAgc3RvcFBhcnNpbmcoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzZXRDdXJyZW50Tm9kZShuZXdFbGVtZW50KTsKKwor
ICAgIGlmICghbmV3RWxlbWVudC0+YXR0YWNoZWQoKSkKKyAgICAgICAgbmV3RWxlbWVudC0+YXR0
YWNoKCk7IAorfQorCit2b2lkIFdNTFRva2VuaXplcjo6V01MUGFyc2VFbmRFbGVtZW50KCkgCit7
CisgICAgZXhpdFRleHQoKTsKKworICAgIE5vZGUqIG4gPSBjdXJyZW50Tm9kZSgpOworCisgICAg
UmVmUHRyPE5vZGU+IHBhcmVudCA9IG4tPnBhcmVudE5vZGUoKTsKKyAgICBuLT5maW5pc2hQYXJz
aW5nQ2hpbGRyZW4oKTsKKworICAgIHNldEN1cnJlbnROb2RlKHBhcmVudC5nZXQoKSk7Cit9Cisj
ZW5kaWYKKwordm9pZCBXTUxUb2tlbml6ZXI6OmZpbmlzaCgpIAoreworICAgIGlmIChoYXNFcnJv
cigpIHx8ICFkb2N1bWVudCgpIHx8ICFkb2N1bWVudCgpLT5wYWdlKCkpIHsKKyAgICAgICAgWE1M
VG9rZW5pemVyOjpmaW5pc2goKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIFBhZ2Uq
IHBhZ2UgPSBkb2N1bWVudCgpLT5wYWdlKCk7CisgICAgQVNTRVJUKHBhZ2UtPndtbFBhZ2VTdGF0
ZSgpKTsKKyAgICBpZiAoIXBhZ2UtPndtbFBhZ2VTdGF0ZSgpLT5pc0RlY2tBY2Nlc3NpYmxlKCkp
IHsKKyAgICAgICAgWE1MVG9rZW5pemVyOjpmaW5pc2goKTsKKyAgICAgICAgcGFnZS0+Z29CYWNr
KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBub3RpZnkgdGhlIGV4aXN0YW5j
ZSBvZiB0ZW1wbGF0ZSB0byBhbGwgdGhlIGNhcmRzIG9mIGN1cnJlbnQgZGVjaworICAgIFdNTEhl
bHBlcjo6cmVnaXN0ZXJUZW1wbGF0ZVRvQ2FyZHMoZG9jdW1lbnQoKSk7CisKKyAgICAvLyBkZXRl
cm1pbmUgdGhlIGRlc3RpbmF0aW9uIGNhcmQKKyAgICBXTUxDYXJkRWxlbWVudCogY2FyZCA9IFdN
TEhlbHBlcjo6c2V0RGVzdGluYXRpb25DYXJkKGRvY3VtZW50KCkpOworCisgICAgaWYgKGNhcmQp
IHsKKyAgICAgICAgLy8gc2hhZG93IHRoZSBkZWNrLWxldmVsIGRvIGlmIG5lZWRlZAorICAgICAg
ICBjYXJkLT5zaGFkb3dEb0VsZW1lbnRJZk5lZWRlZCgpOworCisgICAgICAgIC8vaGFuZGxlIHRo
ZSBpbnRyaW5zaWMgZXZlbnQKKyAgICAgICAgY2FyZC0+aGFuZGxlSW50cmluc2ljRXZlbnRJZk5l
ZWRlZCgpOworCisgICAgICAgIGNhcmQtPnVwZGF0ZVRhYmxlRWxlbWVudCgpOworICAgIH0KKwor
ICAgIHBhZ2UtPndtbFBhZ2VTdGF0ZSgpLT5zZXROZWVkQ2hlY2tEZWNrQWNjZXNzKGZhbHNlKTsK
KworICAgIHJlcG9ydEVycm9yKE5vRXJyb3IpOworCisgICAgWE1MVG9rZW5pemVyOjpmaW5pc2go
KTsKK30KKwordm9pZCBXTUxUb2tlbml6ZXI6OnJlcG9ydEVycm9yKFdNTEVycm9yQ29kZSBlcnJv
cikKK3sKKyAgICBtX2Vycm9yQ29kZSA9IGVycm9yOworfQorCitib29sIFdNTFRva2VuaXplcjo6
aGFzRXJyb3IoKSBjb25zdAoreworICAgIHJldHVybiAobV9lcnJvckNvZGUgIT0gTm9FcnJvcik7
Cit9CisgCit2b2lkIFdNTFRva2VuaXplcjo6aGFuZGxlV01MRXJyb3IoV01MRXJyb3JDb2RlIGVy
cm9yQ29kZSkKK3sKKyAgICBpZiAoZXJyb3JDb2RlICE9IE5vRXJyb3IpCisgICAgICAgIG1fZXJy
b3JDb2RlID0gZXJyb3JDb2RlOworCisgICAgY29uc3QgY2hhciogZXJyTXNnID0gMDsKKyAgICBz
d2l0Y2ggKG1fZXJyb3JDb2RlKSB7CisgICAgICAgIGNhc2UgU2FtZU5hbWVEb0VsZW1lbnRzRXJy
b3I6CisgICAgICAgICAgICBlcnJNc2cgPSAiRWFjaCBkbyBlbGVtZW50IG11c3QgaGF2ZSBkaWZm
ZXJlbnQgbmFtZSBpbiBvbmUgY2FyZCBvciB0ZW1wbGF0ZSFcbiI7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBNdWx0aVRpbWVyRWxlbWVudHNFcnJvcjoKKyAgICAgICAgICAgIGVy
ck1zZyA9ICJPbmx5IG9uZSB0aW1lciBlbGVtZW50IGlzIGFsbG93ZWQgaW4gYSBjYXJkIVxuIjsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIE11bHRpQWNjZXNzRWxlbWVudHNFcnJv
cjoKKyAgICAgICAgICAgIGVyck1zZyA9ICJPbmx5IG9uZSBhY2Nlc3MgZWxlbWVudCBpcyBhbGxv
d2VkIGluIGEgZGVjayFcbiI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBXcm9u
Z1Rhc2tJbkFuY2hvckVsZW1lbnRFcnJvcjoKKyAgICAgICAgICAgIGVyck1zZyA9ICJUaGUgdGFz
ayBjYW4ndCBiZSBzcGVjaWZpZWQgaW4gYW4gYW5jaG9yIGVsZW1lbnQhXG4iOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ29uZmxpY3RpbmdFdmVudEJpbmRpbmdFcnJvcjoKKyAg
ICAgICAgICAgIGVyck1zZyA9ICJDb25mbGljdGluZyBldmVudCBiaW5kaW5ncyB3aXRoaW4gYW4g
ZWxtZW50IVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEludmFsaWRWYXJp
YWJsZU5hbWVFcnJvcjoKKyAgICAgICAgICAgIGVyck1zZyA9ICJUaGUgdmFyaWFibGUgbmFtZSBj
b250YWlucyBpbnZhbGlkIGNoYXJhY3RlcnMhXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgSW52YWxpZFZhcmlhYmxlUmVmZXJlbmNlRXJyb3I6CisgICAgICAgICAgICBlcnJN
c2cgPSAiVGhlIHZhcmlhYmxlIHJlZmVyZW5jZSB1c2VzIGludmFsaWQgc3ludGF4IG9yIGlzIHBs
YWNlZCBpbiBpbnZhbGlkIGxvY2F0aW9uIVxuIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIEludmFsaWRDb2x1bW5zTnVtYmVyRm9yVGFibGVFcnJyb3I6CisgICAgICAgICAgICBl
cnJNc2cgPSAiVGhlIG51bWJlciBvZiB0YWJsZSBjb2x1bW5zIGlzIGludmFsaWQhXG4iOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRG9jVHlwZURlY2xhcmF0aW9uTWlzc0Vycm9y
OgorICAgICAgICAgICAgZXJyTXNnID0gIkRPQ1RZUEUgZGVjbGFyYXRpb24gaXMgbWlzc2VkIGJl
Zm9yZSByb290IGVsZW1lbnQhXG4iOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm47CisgICAgfQorIAorICAgIGhhbmRsZUVycm9yKGZhdGFs
LCBlcnJNc2csIGxpbmVOdW1iZXIoKSwgY29sdW1uTnVtYmVyKCkpOworfQorCit9ICAvL25hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3dtbC9XTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUv
d21sL1dNTFRva2VuaXplci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA4IFRvcmNoIE1vYmlsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgICAgICAgICAgICAgIGh0dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLworICogQ29weXJp
Z2h0IChDKSAyMDA0LTIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lm
bmRlZiBXTUxUb2tlbml6ZXJfaAorI2RlZmluZSBXTUxUb2tlbml6ZXJfaAorCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUNsaWVudC5oIgorI2luY2x1ZGUg
IlNlZ21lbnRlZFN0cmluZy5oIgorI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKKyNpbmNsdWRlICJU
b2tlbml6ZXIuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9Pd25Q
dHIuaD4KKworI2lmIFVTRShRWE1MU1RSRUFNKQorI2luY2x1ZGUgPFF0WG1sL3F4bWxzdHJlYW0u
aD4KKyNlbHNlCisjaW5jbHVkZSA8bGlieG1sL3RyZWUuaD4KKyNpbmNsdWRlIDxsaWJ4bWwveG1s
c3RyaW5nLmg+CisjZW5kaWYKKworI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgZW51bSBXTUxFcnJvckNvZGUgeyAKKyAgICBOb0Vycm9y
ID0gMCwgCisgICAgU2FtZU5hbWVEb0VsZW1lbnRzRXJyb3IsCisgICAgTXVsdGlBY2Nlc3NFbGVt
ZW50c0Vycm9yLAorICAgIE11bHRpVGltZXJFbGVtZW50c0Vycm9yLAorICAgIFdyb25nVGFza0lu
QW5jaG9yRWxlbWVudEVycm9yLAorICAgIENvbmZsaWN0aW5nRXZlbnRCaW5kaW5nRXJyb3IsCisg
ICAgSW52YWxpZFZhcmlhYmxlTmFtZUVycm9yLAorICAgIEludmFsaWRWYXJpYWJsZVJlZmVyZW5j
ZUVycm9yLAorICAgIEludmFsaWRDb2x1bW5zTnVtYmVyRm9yVGFibGVFcnJyb3IsCisgICAgRG9j
VHlwZURlY2xhcmF0aW9uTWlzc0Vycm9yLAorfSBXTUxFcnJvckNvZGU7CisKK2NsYXNzIFdNTFRv
a2VuaXplciA6IHB1YmxpYyBYTUxUb2tlbml6ZXIgeworcHVibGljOgorICAgIFdNTFRva2VuaXpl
cihEb2N1bWVudCosIEZyYW1lVmlldyogPSAwKTsKKyAgICB+V01MVG9rZW5pemVyKCk7CisKKyAg
ICAvLyBmcm9tIFRva2VuaXplcgorICAgIHZpcnR1YWwgYm9vbCB3cml0ZShjb25zdCBTZWdtZW50
ZWRTdHJpbmcmLCBib29sIGFwcGVuZERhdGEgPSBmYWxzZSk7CisgICAgdmlydHVhbCB2b2lkIGZp
bmlzaCgpOworICAgIAorI2lmIFVTRShRWE1MU1RSRUFNKQorICAgIHZvaWQgV01MUGFyc2VTdGFy
dEVsZW1lbnQoKTsKKyAgICB2b2lkIFdNTFBhcnNlRW5kRWxlbWVudCgpOworI2VuZGlmCisKKyAg
ICB2b2lkIHJlcG9ydEVycm9yKFdNTEVycm9yQ29kZSk7CisgICAgYm9vbCBoYXNFcnJvcigpIGNv
bnN0OworICAgIHZvaWQgaGFuZGxlV01MRXJyb3IoV01MRXJyb3JDb2RlIGNvZGUgPSBOb0Vycm9y
KTsKKworICAgIHZvaWQgdXBkYXRlQXR0cnNJZk5lZWRlZChFbGVtZW50KiwgY29uc3QgU3RyaW5n
Jik7Citwcml2YXRlOgorICAgIFdNTEVycm9yQ29kZSBtX2Vycm9yQ29kZTsKK307CisKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gV01MVG9rZW5pemVyX2gK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25168</attachid>
            <date>2008-11-14 02:49:57 -0800</date>
            <delta_ts>2008-12-10 16:02:23 -0800</delta_ts>
            <desc>Layout test cases for wml</desc>
            <filename>wml_layouttests_38361_20081114.patch</filename>
            <type>text/plain</type>
            <size>56351</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IGZhc3Qvd21sL2JyLWVsZW1lbnQtaW4tdGFibGUud21sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZh
c3Qvd21sL2JyLWVsZW1lbnQtaW4tdGFibGUud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwv
YnItZWxlbWVudC1pbi10YWJsZS53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzw/
eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9E
VEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwi
PgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iUGFyYWdyYXBocyI+CisgPHA+IFRoaXMgdGVzdCBjYXNl
IGlzIHVzZWQgdG8gdGVzdCBiciBlbGVtZW50IGluIGEgdGFibGUuIGVhY2ggY2VsbCBpcyBhbGln
bmVkIHRvIGxlZnQsIGFuZCB0aGUgQlIgd2lsbCBicmVhayB0aGUgInh4eHh4eHh4IiB0ZXh0IGlu
IHRoZSBsYXN0IHRkPC9wPgorIDx0YWJsZSBjb2x1bW5zPSczJyBhbGlnbj0iTExMIj4KKyAgICA8
dHI+CisgICAgIDx0ZCBpZD0iYzEiPkNlbGwgb25lPC90ZD4KKyAgICAgPHRkIGlkPSJjMiI+Q2Vs
bCB0d288L3RkPgorICAgICA8dGQgaWQ9ImMzIj5jMzwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+
CisgICAgIDx0ZCBpZD0iYSI+Y2VsbCBhPC90ZD4KKyAgICAgPHRkIGlkPSJiIj5jZWxsIGI8L3Rk
PgorICAgICA8dGQgaWQ9ImMiPnh4eHh4PGJyLz54eHg8L3RkPgorICAgIDwvdHI+CisgPC90YWJs
ZT4KKyA8L2NhcmQ+Cis8L3dtbD4gCkluZGV4OiBmYXN0L3dtbC9ici1lbGVtZW50LWluLXRleHQu
d21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2JyLWVsZW1lbnQtaW4tdGV4dC53bWwJKHJldmlz
aW9uIDApCisrKyBmYXN0L3dtbC9ici1lbGVtZW50LWluLXRleHQud21sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iUGFyYWdyYXBocyI+Cisg
PHA+IFRoaXMgdGVzdCBjYXNlIGlzIHVzZWQgdG8gdGVzdCBiciBlbGVtZW50IGluIHRleHQ8L3A+
CisgIFRoaXMgaXMgYSBwaWVjZSBvZiB0ZXh0IDxici8+d2l0aCBhIGxpbmUgYnJlYWsKKyA8L2Nh
cmQ+Cis8L3dtbD4gCkluZGV4OiBmYXN0L3dtbC9jYXJkLWVsZW1lbnQud21sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGZhc3Qvd21sL2NhcmQtZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9j
YXJkLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDggQEAKKzw/eG1sIHZlcnNp
b249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEu
MC8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdt
bD4KKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9IkNhcmQgMSI+VGhpcyBpcyBjYXJkIG9uZTwvY2Fy
ZD4KKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkNhcmQgMiI+VGhpcyBpcyBjYXJkIHR3bzwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwvY2FzZS1zZW5zaXRpdml0eS53bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gZmFzdC93bWwvY2FzZS1zZW5zaXRpdml0eS53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0
L3dtbC9jYXNlLXNlbnNpdGl2aXR5LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAor
PD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0nY2FyZDEnPgorIDxwPiBUZXN0IGZvciBDYXNlIHNlbnNp
dGl2aXR5IGluIFdNTCA8L3A+CisgPHA+IGNvbXBhcmUgdGhlIHJlc3VsdCBvZiBpbnNlcnRpbmcg
Jmx0O2JyLyZndDsgYW5kICZsdDtCUi8mZ3Q7IGludG8gdGhlIHNhbWUgdGV4dCwgPGJyLz50aGUg
Zm9ybWVyIHNob3VsZCB3b3JrLCBhbmQgdGhlIGxhdHRlciBkb2Vzbid0LjwvcD4KKyA8dGFibGUg
Ym9yZGVyPSIxIj4KKyA8dHI+PHRkPlRlc3QgY2FzZSA8YnIvPnNlbnNpdGl2aXR5IGluIFdNTCA8
L3RkPjwvdHI+CisgPHRyPjx0ZD5UZXN0IGNhc2UgPEJSLz5zZW5zaXRpdml0eSBpbiBXTUwgPC90
ZD48L3RyPgorIDwvdGFibGU+CisgPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IGZhc3Qvd21sL2Nk
YXRhLXNlY3Rpb24ud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2NkYXRhLXNlY3Rpb24ud21s
CShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvY2RhdGEtc2VjdGlvbi53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsOCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0nY2FyZDEnPgorIDxwPiBU
ZXN0IGZvciBDREFUQSBTZWN0aW9uIGluIFdNTDxici8+IElmIGl0IHBhc3NlcywgeW91IGNhbiBz
ZWUgdGhlIGZvbGxvd2luZyB0ZXh0IDogPC9wPgorIDwhW0NEQVRBWyBUaGlzIGlzIDxCPiBhIENE
QVRBIHRlc3RdXT4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2NvbW1lbnQud21s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2NvbW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgZmFz
dC93bWwvY29tbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTEgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01M
IDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdt
bD4KKyA8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPgorICA8cD4gVGVzdCBjb21tZW50
IGluIFdNTCwgdGhlIHRleHQgaW4gdGhlIGNvbW1lbnQgc2hvdWxkIG5vdCBiZSBkaXNwbGF5ZWQs
IGlmIGl0IHBhc3NlcywgeW91IGNhbiBvbmx5IHNlZSB0aGUgdGV4dDogIkhlbGxvIFdvcmxkISIg
YWZ0ZXIgdGhpcyBsaW5lIDwvcD4KKyAgPHA+CisgICAgPCEtLSBUaGlzIGlzIGEgY29tbWVudCAs
IGl0IHNob3VsZCBub3QgYmUgZGlzcGxheWVkLS0+CisgICAgSGVsbG8gV29ybGQhCisgIDwvcD4K
KyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2RvLWVsZW1lbnQtb3B0aW9uYWwtYXR0
ci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvZG8tZWxlbWVudC1vcHRpb25hbC1hdHRyLndt
bAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2RvLWVsZW1lbnQtb3B0aW9uYWwtYXR0ci53bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFE
T0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0iZmly
c3RjYXJkIiB0aXRsZT0iT25lIj4KKyAgPHA+VGVzdCBmb3IgZG8gZWxlbWVudCBpbiBXTUwgPC9w
PgorICA8cD4gVGhlcmUgYXJlIHR3byBkbyBlbGVtZW50IGluIHRoaXMgY2FyZCwgdGhlIGZpcnN0
IG9uZSB3aWxsIGRpc3BsYXksIHRoZSBzZWNvbmQgd29uJ3QgYmVjYXVzZSBpdHMgb3B0aW9uYWwg
YXR0cmlidXRlIGlzIHRydWU8L3A+CisgIDxkbyBuYW1lPSJnbyIgdHlwZT0iYWNjZXB0IiBsYWJl
bD0iRG8gMSIgb3B0aW9uYWw9ImZhbHNlIj4KKyAgPGdvIGhyZWY9IiN0aGlyZGNhcmQiLz4KKyAg
PC9kbz4KKyAgPGRvIG5hbWU9ImdvMiIgdHlwZT0iYWNjZXB0IiBsYWJlbD0iRG8gMiIgb3B0aW9u
YWw9InRydWUiPgorICA8Z28gaHJlZj0iI3NlY29uZGNhcmQiLz4KKyAgPC9kbz4KKyA8L2NhcmQ+
CisKKyA8Y2FyZCBpZD0ic2Vjb25kY2FyZCIgdGl0bGU9IlR3byI+CisgIDxwPlRoaXMgaXMgdGhl
IHNlY29uZCBjYXJkPC9wPgorIDwvY2FyZD4KKworIDxjYXJkIGlkPSJ0aGlyZGNhcmQiIHRpdGxl
PSJUaHJlZSI+CisgIDxwPlRoaXMgaXMgdGhlIHRoaXJkIGNhcmQ8L3A+CisgPC9jYXJkPgorPC93
bWw+CisKSW5kZXg6IGZhc3Qvd21sL2RvLXNoYWRvdy53bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93
bWwvZG8tc2hhZG93LndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2RvLXNoYWRvdy53bWwJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFE
T0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZT4KKzxk
byB0eXBlPSJhY2NlcHQiIG5hbWU9ImRvMSIgbGFiZWw9IlRlbXBsYXRlIERvIj4KKzxwcmV2Lz4K
KzwvZG8+Cis8L3RlbXBsYXRlPgorCis8Y2FyZCBpZD0iZmlyc3QiPgorPHA+IFRlc3QgZm9yIGRv
LXNoYWRvdyBpbiBXTUw8L3A+Cis8cD5UaGlzIGlzIGZpcnN0IGNhcmQsIHdoaWNoIHdvbid0IHNo
YWRvdyBkZWNrLWxldmVsIGRvPC9wPgorPGFuY2hvcj4KKzxnbyBocmVmPSIjc2Vjb25kIj5HbyB0
byBjYXJkIDI8L2dvPgorPC9hbmNob3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJzZWNvbmQiPgor
PHA+ZGVjay1sZXZlbCBkbyBpcyBzaGFkb3dlZCB3aXRoIG5vb3AuIEl0IGlzIG5vdCBleHBvc2Vk
IHRvIHRoZSB1c2VyIDwvcD4KKzxkbyB0eXBlPSJvcHRpb25zIiBuYW1lPSJkbzEiIGxhYmVsPSJz
ZWNvbmQgZG8iPgorPG5vb3AvPgorPC9kbz4KKzxhbmNob3I+Cis8Z28gaHJlZj0iI3RoaXJkIj5H
byB0byBjYXJkIDM8L2dvPgorPC9hbmNob3I+Cis8L2NhcmQ+CisKKzxjYXJkIGlkPSJ0aGlyZCI+
Cis8cD5kZWNrLWxldmVsIGRvIGlzIHNoYWRvd2VkLiBJdCBpcyByZXBsYWNlZCBieSBhIGNhcmQt
bGV2ZWwgZG8gYmVjYXVzZSB0aGV5IGhhdmUgdGhlIHNhbWUgbmFtZTwvcD4KKzxwPgorPGRvIHR5
cGU9Im9wdGlvbnMiIG5hbWU9ImRvMSIgbGFiZWw9ImRvMSI+Cis8Z28gaHJlZj0iLi90ZXN0Lndt
bCIvPgorPC9kbz4KKzxici8+Cis8YW5jaG9yPgorPGdvIGhyZWY9IiNmaXJzdCI+R28gdG8gY2Fy
ZCAxPC9nbz4KKzwvYW5jaG9yPgorPC9wPgorPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IGZhc3Qv
d21sL2RvLXRlbXBsYXRlLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9kby10ZW1wbGF0ZS53
bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9kby10ZW1wbGF0ZS53bWwJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzEgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQ
VUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzx0ZW1wbGF0ZSBpZD0iMiI+Cis8ZG8gbmFt
ZT0iZ28iIHR5cGU9ImFjY2VwdCIgbGFiZWw9IlRlbXBsYXRlIGRvIj4KKzxnbyBocmVmPSIjZmly
c3RjYXJkIi8+Cis8L2RvPgorPC90ZW1wbGF0ZT4KKyA8Y2FyZCBpZD0iZmlyc3RjYXJkIiB0aXRs
ZT0iT25lIj4KKyA8cD4gVGVzdCBmb3IgZG8gZWxlbWVudCBpbiB0ZW1wbGF0ZSBpbiBXTUw8L3A+
CisgPHA+IFdoaWNoZXZlciBjYXJkIHlvdSBlbnRlcmVkLCB5b3UgY2FuIHNlZSB0aGUgdGVtcGxh
dGUgZG8gYnV0dG9uIGJlY2F1c2UgaXQncyBnbG9iYWw8L3A+CisgIDxwPlRoaXMgaXMgdGhlIGZp
cnN0IGNhcmQ8L3A+CisgIDxwPjxhbmNob3I+PGdvIGhyZWY9IiNzZWNvbmRjYXJkIi8+R28gdG8g
Y2FyZDI8L2FuY2hvcj48L3A+CisgPC9jYXJkPgorCisgPGNhcmQgaWQ9InNlY29uZGNhcmQiIHRp
dGxlPSJUd28iPgorIDxwPiBUZXN0IGZvciBkbyBlbGVtZW50IGluIHRlbXBsYXRlIGluIFdNTDwv
cD4KKyA8cD4gV2hpY2hldmVyIGNhcmQgeW91IGVudGVyZWQsIHlvdSBjYW4gc2VlIHRoZSB0ZW1w
bGF0ZSBkbyBidXR0b24gYmVjYXVzZSBpdCdzIGdsb2JhbDwvcD4KKyAgPHA+VGhpcyBpcyB0aGUg
c2Vjb25kIGNhcmQgPC9wPgorICA8YW5jaG9yPkdvIHRvIGNhcmQgMworICA8Z28gaHJlZj0iI3Ro
aXJkY2FyZCIvPgorICA8L2FuY2hvcj4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0idGhpcmRjYXJk
IiB0aXRsZT0iVGhyZWUiPgorIDxwPiBUZXN0IGZvciBkbyBlbGVtZW50IGluIHRlbXBsYXRlIGlu
IFdNTDwvcD4KKyA8cD4gV2hpY2hldmVyIGNhcmQgeW91IGVudGVyZWQsIHlvdSBjYW4gc2VlIHRo
ZSB0ZW1wbGF0ZSBkbyBidXR0b24gYmVjYXVzZSBpdCdzIGdsb2JhbDwvcD4KKyAgPHA+VGhpcyBp
cyB0aGUgdGhpcmQgY2FyZDwvcD4KKyAgPGFuY2hvcj5CYWNrPHByZXYvPjwvYW5jaG9yPgorIDwv
Y2FyZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwvZW50aXR5LndtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBm
YXN0L3dtbC9lbnRpdHkud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvZW50aXR5LndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURP
Q1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8v
d3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9Im5v
MSIgdGl0bGU9IlRlc3QgZW50aXR5Ij4KKzxwPlRlc3QgZm9yIEVudGl0aWVzIGluIFdNTCBwYWdl
PC9wPgorJnF1b3Q7ICAgICAgICYjMzQ7Cis8YnIvPgorJmFtcDsgICAgICAgICYjMzg7Cis8YnIv
PgorJmFwb3M7ICAgICAgICYjeDI3OworPGJyLz4KKyZsdDsgICAgICAgICAmIzYwOworPGJyLz4K
KyZndDsgICAgICAgICAmIzYyOworPGJyLz4KKz0mbmJzcDs9JiMxNjA7PQorPGJyLz4KK0FBJnNo
eTtBQSYjMTczO0FBCis8YnIvPiAKKzxwPiAmbHQ7aGVsbG8mZ3Q7IDwvcD4KKzwvY2FyZD4KKwor
PGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iJChjYXJkaWQpIHRpdGxlIj5UaGlzIGlzIGNhcmQgMjwv
Y2FyZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwvZXJyLWV2ZW50LWJpbmRpbmctY29uZmxpY3Qu
d21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2Vyci1ldmVudC1iaW5kaW5nLWNvbmZsaWN0Lndt
bAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2Vyci1ldmVudC1iaW5kaW5nLWNvbmZsaWN0Lndt
bAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/Pgor
PCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRw
Oi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzxjYXJkIGlkPSJj
YXJkMSI+CisgIDxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKyAgPHJlZnJlc2gvPgor
ICA8L29uZXZlbnQ+CisgIDxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKyAgPHByZXYv
PgorICA8L29uZXZlbnQ+CisgIDxwPiBUZXN0IGZvciB0aGUgZXJyb3IgZXZlbnQtYmluZGluZyBj
b25mbGljdDwvcD4KKyAgWW91IHNob3VsZCBOT1Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0
aGUgZXJyb3Igb2YgZXZlbnQtYmluZGluZyBlcnJvciBpbiBjYXJkIGVsZW1lbnQgCis8L2NhcmQ+
Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2Vyci1pbnZhbGlkLWxvY2F0aW9uLWZvci12YXJyZWYu
d21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2Vyci1pbnZhbGlkLWxvY2F0aW9uLWZvci12YXJy
ZWYud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvZXJyLWludmFsaWQtbG9jYXRpb24tZm9y
LXZhcnJlZi53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249
IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8v
RU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4K
KzxjYXJkIGlkPSJubzEiIHRpdGxlPSJDYXJkIDEiPiAKKzxwPiBUZXN0IGZvciB2YXJpYWJsZSBy
ZWZlcmVuY2UgdmFsaWRhdGlvbjwvcD4KKzxwPiBBbiBlcnJvciB3aWxsIG9jY3VyIHdoZW4gbG9h
ZGluZyB0aGUgY2FyZCBiZWNhdXNlIHRoZSB2YXJpYWJsZSByZWZlcmVuY2UgaXMgcGxhY2VkIGlu
IGEgaW52YWxpZCBsb2NhdGlvbjwvcD4KKzxkbyB0eXBlPSIkKHZhcikiIG5hbWU9InJlZnJlc2gi
PgorICA8cmVmcmVzaD4KKyAgICA8c2V0dmFyIG5hbWU9InZhciIgdmFsdWU9InZhcmFpYmxlMiIv
PgorICA8L3JlZnJlc2g+Cis8L2RvPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9l
cnItaW52YWxpZC10YWJsZWNvbHVtbi1udW1iZXIud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21s
L2Vyci1pbnZhbGlkLXRhYmxlY29sdW1uLW51bWJlci53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0
L3dtbC9lcnItaW52YWxpZC10YWJsZWNvbHVtbi1udW1iZXIud21sCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElD
ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3Jn
L0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0ibm8xIiB0aXRsZT0iQ2FyZCAx
Ij4gCis8cD4gVGVzdCBmb3IgdGFibGUgY29sdW1uIG51bWJlciB2YWxpZGF0aW9uIDwvcD4KKzxw
PiBUaGUgdGFibGUgd29uJ3QgYmUgZGlzcGxheWVkIGJlY2F1c2Ugb2YgdGhlIGludmFsaWQgY29s
dW1ucyBhdHRydWlidGUgb2YgdGFibGUgZWxlbWVudDwvcD4KKzx0YWJsZSBjb2x1bW5zPSIwIj4K
Kzx0cj48dGQ+Q2VsbCAxPC90ZD48dGQ+Q2VsbCAyPC90ZD48L3RyPgorPC90YWJsZT4KKzwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwvZXJyLWludmFsaWQtdmFyaWFibGUtbmFtZS53bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gZmFzdC93bWwvZXJyLWludmFsaWQtdmFyaWFibGUtbmFtZS53bWwJKHJl
dmlzaW9uIDApCisrKyBmYXN0L3dtbC9lcnItaW52YWxpZC12YXJpYWJsZS1uYW1lLndtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZ
UEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3
LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9Im5vMSIg
dGl0bGU9IkNhcmQgMSI+IAorPHA+IFRlc3QgZm9yIHZhcmlhYmxlIG5hbWUgdmFsaWRhdGlvbiA8
L3A+Cis8ZG8gdHlwZT0iYWNjZXB0IiBuYW1lPSJyZWZyZXNoIj4KKyAgPHJlZnJlc2g+CisgICAg
PHNldHZhciBuYW1lPSIkK3ZhciIgdmFsdWU9InZhcmFpYmxlMiIvPgorICA8L3JlZnJlc2g+Cis8
L2RvPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9lcnItbXVsdGktYWNjZXNzLndt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9lcnItbXVsdGktYWNjZXNzLndtbAkocmV2aXNpb24g
MCkKKysrIGZhc3Qvd21sL2Vyci1tdWx0aS1hY2Nlc3Mud21sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGhlYWQ+Cis8YWNjZXNzIHBhdGg9Ii8iIGRvbWFpbj0i
ZG9tYWluIi8+Cis8YWNjZXNzIHBhdGg9Ii9wYXRoIiBkb21haW49ImRvbWFpbiIvPgorPC9oZWFk
PgorPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPHA+IFRlc3QgZm9yIG11bHRpLWFjY2VzcyBlcnJvcjwv
cD4KKyAgWW91IHNob3VsZCBub3Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Ig
b2YgbXVsdGktYWNjZXNzIGluIGhlYWQgZWxlbWVudAorPC9jYXJkPgorPC93bWw+CkluZGV4OiBm
YXN0L3dtbC9lcnItbXVsdGktaHR0cC1lcXVpdi1pbi1tZXRhLndtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBm
YXN0L3dtbC9lcnItbXVsdGktaHR0cC1lcXVpdi1pbi1tZXRhLndtbAkocmV2aXNpb24gMCkKKysr
IGZhc3Qvd21sL2Vyci1tdWx0aS1odHRwLWVxdWl2LWluLW1ldGEud21sCShyZXZpc2lvbiAwKQpA
QCAtMCwwICsxLDExIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0u
b3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJD
b250ZW50LVR5cGUiIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgQ29udGVudD0idGV4dC92bmQu
d2FwLndtbDsgQ2hhcnNldD1nYjIzMTIiLz4KKzwvaGVhZD4KKyA8Y2FyZCBpZD0iY2FyZDEiPgor
ICA8cD4gVGVzdCBmb3IgbWV0YSBtdWx0aS1odHRwLWVxdWl2IGVycm9yPC9wPgorICBZb3Ugc2hv
dWxkIG5vdCBzZWUgdGhpcyB0ZXh0LCBiZWNhdXNlIG9mIHRoZSBlcnJvciBvZiBtdWx0aS1odHRw
LWVxdWl2IGluIG1ldGEgZWxlbWVudAorIDwvY2FyZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwv
ZXJyLW11bHRpLW5hbWUtaW4tbWV0YS53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvZXJyLW11
bHRpLW5hbWUtaW4tbWV0YS53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9lcnItbXVsdGkt
bmFtZS1pbi1tZXRhLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIiA/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01M
IDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdt
bD4KKzxoZWFkPgorPG1ldGEgbmFtZT0iQ29udGVudC1UeXBlIiBuYW1lPSJDb250ZW50LVR5cGUi
IENvbnRlbnQ9InRleHQvdm5kLndhcC53bWw7IENoYXJzZXQ9Z2IyMzEyIi8+Cis8L2hlYWQ+Cisg
PGNhcmQgaWQ9ImNhcmQxIj4KKyAgPHA+IFRlc3QgZm9yIG1ldGEgbXVsdGktbmFtZSBlcnJvcjwv
cD4KKyAgWW91IHNob3VsZCBub3Qgc2VlIHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Ig
b2YgbXVsdGktbmFtZSBpbiBtZXRhIGVsZW1lbnQKKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZh
c3Qvd21sL2Vyci1tdWx0aS10aW1lci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvZXJyLW11
bHRpLXRpbWVyLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2Vyci1tdWx0aS10aW1lci53
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4K
KzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0
cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgaWQ9
ImNhcmQxIiBvbnRpbWVyPSJ0ZXN0LndtbCI+CisgPHRpbWVyIGlkPSJ0aW1lcjEiIG5hbWU9InQx
IiB2YWx1ZT0iMjAiLz4KKyA8dGltZXIgaWQ9InRpbWVyMiIgbmFtZT0idDIiIHZhbHVlPSIzMCIv
PgorICA8cD4gVGVzdCBmb3IgZXJyb3Igb2YgbWV0YSBtdWx0aS10aW1lciBpbiBvbmUgY2FyZCA8
L3A+CisgIFlvdSBzaG91bGQgTk9UIHNlZSB0aGlzIHRleHQsIGJlY2F1c2Ugb2YgdGhlIGVycm9y
IHRoYXQgbW9yZSB0aGFuIG9uZSB0aW1lciBleGlzdCBpbiBvbmUgY2FyZCAKKyA8L2NhcmQ+Cis8
L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2Vyci1zYW1lbmFtZS1kby53bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZmFzdC93bWwvZXJyLXNhbWVuYW1lLWRvLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2Vy
ci1zYW1lbmFtZS1kby53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZl
cnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdN
TCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3
bWw+Cis8Y2FyZCBpZD0iY2FyZDEiPgorICA8ZG8gbmFtZT0iZG8iIHR5cGU9ImFjY2VwdCI+Cisg
IDxyZWZyZXNoLz4KKyAgPC9kbz4KKyAgPGRvIG5hbWU9ImRvIiB0eXBlPSJhY2NlcHQiPgorICA8
cmVmcmVzaC8+CisgIDwvZG8+CisgIDxwPiBUZXN0IGZvciB0aGUgZXJyb3IgdGhhdCBtb3JlIHRo
YW4gb25lIGRvIGVsZW1lbnQgaGFzIHNhbWUgbmFtZTwvcD4KKyAgWW91IHNob3VsZCBOT1Qgc2Vl
IHRoaXMgdGV4dCwgYmVjYXVzZSBvZiB0aGUgZXJyb3Igb2YgbmFtZS1jb25mbGljdCBvZiBkbyBl
bGVtZW50IAorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9lcnItdW5hbGxvd2VkLXRh
c2staW4tYW5jaG9yLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9lcnItdW5hbGxvd2VkLXRh
c2staW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2Vyci11bmFsbG93ZWQt
dGFzay1pbi1hbmNob3Iud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8P3htbCB2
ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8
d21sPgorPGNhcmQgaWQ9ImNhcmQxIj4KKyAgPGFuY2hvcj4KKyAgPG5vb3AvPgorICA8L2FuY2hv
cj4KKyAgPHA+IFRlc3QgZm9yIHRoZSBlcnJvciB0aGF0IHNwZWNpZnlpbmcgbm9vcCB0YXNrIHRv
IGFuY2hvciBlbGVtZW50PC9wPgorICBZb3Ugc2hvdWxkIE5PVCBzZWUgdGhpcyB0ZXh0LCBiZWNh
dXNlIG9mIHRoZSBlcnJvciB0aGF0IHNwZWNpZnlpbmcgdW5hbGxvd2VkIHRhc2sgdG8gYW5jaG9y
IGVsZW1lbnQgCis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2Vyci12YWxpZGF0ZS1k
dGQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2Vyci12YWxpZGF0ZS1kdGQud21sCShyZXZp
c2lvbiAwKQorKysgZmFzdC93bWwvZXJyLXZhbGlkYXRlLWR0ZC53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsOSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IS0tCis8IURPQ1RZUEUgd21s
IFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9y
dW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CistLT4KKzx3bWw+Cis8Y2FyZCBpZD0ibm8xIiB0aXRs
ZT0iQ2FyZCAxIj4gCis8cD5UZXN0IGZvciBEVEQgdmFsaWRhdGlvbiBvZiBXTUwgZmlsZTxici8+
SWYgdGhlIERUQ1RZUEUgaXMgaW5jb3JyZWN0IG9yIG1pc3NpbmcsIHRoaXMgdGVzdCBmYWlsZXMu
PC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9pbWctbG9jYWxzcmMud21sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGZhc3Qvd21sL2ltZy1sb2NhbHNyYy53bWwJKHJldmlzaW9uIDApCisrKyBm
YXN0L3dtbC9pbWctbG9jYWxzcmMud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzIEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8v
RFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1s
Ij4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IlRlc3QgaW1hZ2UiPgorIDxwPiBUZXN0IGZvciBpbWcg
ZWxlbWVudCBpbiBXTUwgPC9wPgorIDxwPiBUaGlzIGltYWdlIGlzIHNwZWNpZmllZCBieSBsb2Nh
bHNyYyBhdHRyaWJ1dGUgb2YgaW1nIGVsZW1lbnQ8L3A+CisgdGVzdCBjb2RlOjwhW0NEQVRBWwor
IDxwPkxvY2FsPGltZyBoZWlnaHQ9IjYwIiB3aWR0aD0iNDAiIHZzcGFjZT0iNDAiIGhzcGFjZT0i
NjAiIGFsaWduPSJtaWRkbGUiIGxvY2Fsc3JjPSJyZXNvdXJjZXMvc21pbGUuZ2lmIiBhbHQ9InNt
aWxlIi8+SW1hZ2U8L3A+CisgXV0+CisgPGJyLz4KKyA8cD5Mb2NhbDxpbWcgaGVpZ2h0PSI2MCIg
d2lkdGg9IjQwIiB2c3BhY2U9IjQwIiBoc3BhY2U9IjYwIiBhbGlnbj0ibWlkZGxlIiBsb2NhbHNy
Yz0icmVzb3VyY2VzL3NtaWxlLmdpZiIgYWx0PSJzbWlsZSIvPkltYWdlPC9wPgorIDwvY2FyZD4K
Kzwvd21sPiAKSW5kZXg6IGZhc3Qvd21sL2ltZy1zcmMtbG9jYWxzcmMtYWx0LndtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBmYXN0L3dtbC9pbWctc3JjLWxvY2Fsc3JjLWFsdC53bWwJKHJldmlzaW9uIDApCisr
KyBmYXN0L3dtbC9pbWctc3JjLWxvY2Fsc3JjLWFsdC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iVGVzdCBpbWFnZSI+CisgPHA+IFRl
c3QgZm9yIGltZyBlbGVtZW50IGluIFdNTCA8L3A+CisgPHA+IFRoaXMgaW1hZ2UgY2FuIGJlIHNw
ZWNpZmllZCBieSBib3RoIHNyYyBhbmQgbG9jYWxzcmMgYXR0cmlidXRlcyBvZiBpbWcgZWxlbWVu
dDwvcD4KKyA8cD4gMSkgbG9jYWxzcmMgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHNyYyBhdHRyaWJ1
dGUgPGJyLz4KKyBJbWFnZTxpbWcgc3JjPSJodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvYmFpZHUu
Z2lmIiBsb2NhbHNyYz0icmVzb3VyY2VzL3NtaWxlLmdpZiIgYWx0PSJJTUFHRSIvPkltYWdlCisg
PGJyLz4KKyAyKSBsb2NhbHNyYyBjYW4ndCBsb2NhdGUgdGhlIGltYWdlLCBzcmMgd29ya3MgPGJy
Lz4KKyBJbWFnZTxpbWcgc3JjPSJodHRwOi8vd3d3LmJhaWR1LmNvbS9pbWcvYmFpZHUuZ2lmIiBs
b2NhbHNyYz0id3JvbmdwYXRoL3NtaWxlLmdpZiIgYWx0PSJJTUFHRSIvPkltYWdlCisgPGJyLz4K
KyAzKSBuZWl0aGVyIGxvY2Fsc3JjIG5vciBzcmMgY2FuIGxvY2F0ZSB0aGUgaW1hZ2UsIGFsdCB3
b3JrcyA8YnIvPgorIEltYWdlPGltZyBzcmM9Imh0dHA6Ly93d3cuYmFpZHUuY29tL3dyb25ncGF0
aC9iYWlkdS5naWYiIGxvY2Fsc3JjPSJ3cm9uZ3BhdGgvc21pbGUuZ2lmIiBhbHQ9IklNQUdFIi8+
SW1hZ2UKKyA8L3A+CisgPC9jYXJkPgorPC93bWw+IApJbmRleDogZmFzdC93bWwvaW1nLXNyYy53
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW1nLXNyYy53bWwJKHJldmlzaW9uIDApCisrKyBm
YXN0L3dtbC9pbWctc3JjLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8
d21sPgorIDxjYXJkIHRpdGxlPSJUZXN0IGltYWdlIj4KKyA8cD4gVGVzdCBmb3IgaW1nIGVsZW1l
bnQgaW4gV01MIDwvcD4KKyA8cD4gVGhpcyBpbWFnZSBpcyBzcGVjaWZpZWQgYnkgc3JjIGF0dHJp
YnV0ZSBvZiBpbWcgZWxlbWVudDwvcD4KKyB0ZXN0IGNvZGU6PCFbQ0RBVEFbCisgPHA+TmV0d29y
ayA8aW1nIGhlaWdodD0iNjAiIHdpZHRoPSI0MCIgdnNwYWNlPSI0MCIgaHNwYWNlPSI2MCIgYWxp
Z249Im1pZGRsZSIgc3JjPSJodHRwOi8vd2FwLmJhaWR1LmNvbS9sb2dvLmdpZiIgYWx0PSJzbWls
ZSIvPkltYWdlPC9wPgorIF1dPgorIDxici8+CisgPHA+TmV0d29yayA8aW1nIGhlaWdodD0iNjAi
IHdpZHRoPSI0MCIgdnNwYWNlPSI0MCIgaHNwYWNlPSI2MCIgYWxpZ249Im1pZGRsZSIgc3JjPSJo
dHRwOi8vd2FwLmJhaWR1LmNvbS9sb2dvLmdpZiIgYWx0PSJzbWlsZSIvPkltYWdlPC9wPgorIDwv
Y2FyZD4KKzwvd21sPiAKSW5kZXg6IGZhc3Qvd21sL3AtYWxpZ24ud21sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IGZhc3Qvd21sL3AtYWxpZ24ud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvcC1hbGlnbi53
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pgor
PCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRw
Oi8vd3d3LndhcGZvdXJtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9
ImNhcmQxIiB0aXRsZT0iQ2FyZDEiPgorPHA+IFRlc3QgZm9yIGFsaWduIGF0dHJpYnV0ZSBvZiBw
IGVsZW1lbnQgaW4gV01MIDwvcD4KKzxici8+Cis8IVtDREFUQVsgPHAgYWxpZ249ImNlbnRlciI+
XV0+Cis8cCBhbGlnbj0iY2VudGVyIj4KK0hlcmUgeW91IGNhbiBsZWFybiB2YXJpb3VzIG1vYmls
ZSB0ZWNobm9sb2dpZXMgbGlrZSBXQVAgLyBXQVAgMi4wLCBXTUwsIFdNTFNjcmlwdCwgWEhUTUwg
TVAsIFdDU1MgLyBXQVAgQ1NTLCBVQVByb2YgYW5kIFNNUyB0aHJvdWdoIG91ciBmcmVlIHR1dG9y
aWFscywgYXJ0aWNsZXMgYW5kIGV4YW1wbGVzLiBUaGlzIHdlYiBzaXRlIGNhbiBoZWxwIHdlYiBw
cm9ncmFtbWVycyB3aG8gd2lzaCB0byBleHRlbmQgdGhlaXIga25vd2xlZGdlIHRvIHRoZSB3aXJl
bGVzcyB3b3JsZC4gCis8YnIvPgoreHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHgKKzwv
cD4KKzxici8+Cis8IVtDREFUQVsgPHAgYWxpZ249InJpZ2h0Ij5dXT4KKzxwIGFsaWduPSJyaWdo
dCI+CitIZXJlIHlvdSBjYW4gbGVhcm4gdmFyaW91cyBtb2JpbGUgdGVjaG5vbG9naWVzIGxpa2Ug
V0FQIC8gV0FQIDIuMCwgV01MLCBXTUxTY3JpcHQsIFhIVE1MIE1QLCBXQ1NTIC8gV0FQIENTUywg
VUFQcm9mIGFuZCBTTVMgdGhyb3VnaCBvdXIgZnJlZSB0dXRvcmlhbHMsIGFydGljbGVzIGFuZCBl
eGFtcGxlcy4gVGhpcyB3ZWIgc2l0ZSBjYW4gaGVscCB3ZWIgcHJvZ3JhbW1lcnMgd2hvIHdpc2gg
dG8gZXh0ZW5kIHRoZWlyIGtub3dsZWRnZSB0byB0aGUgd2lyZWxlc3Mgd29ybGQuIAorPGJyLz4K
K3h4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4Cis8L3A+Cis8YnIvPgorPCFbQ0RBVEFb
IDxwIGFsaWduPSJsZWZ0Ij5dXT4KKzxwIGFsaWduPSJsZWZ0Ij4KK0hlcmUgeW91IGNhbiBsZWFy
biB2YXJpb3VzIG1vYmlsZSB0ZWNobm9sb2dpZXMgbGlrZSBXQVAgLyBXQVAgMi4wLCBXTUwsIFdN
TFNjcmlwdCwgWEhUTUwgTVAsIFdDU1MgLyBXQVAgQ1NTLCBVQVByb2YgYW5kIFNNUyB0aHJvdWdo
IG91ciBmcmVlIHR1dG9yaWFscywgYXJ0aWNsZXMgYW5kIGV4YW1wbGVzLiBUaGlzIHdlYiBzaXRl
IGNhbiBoZWxwIHdlYiBwcm9ncmFtbWVycyB3aG8gd2lzaCB0byBleHRlbmQgdGhlaXIga25vd2xl
ZGdlIHRvIHRoZSB3aXJlbGVzcyB3b3JsZC4gCis8YnIvPgoreHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4
eHh4eHh4eHh4eHgKKzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwvcC1tb2Rl
LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9wLW1vZGUud21sCShyZXZpc2lvbiAwKQorKysg
ZmFzdC93bWwvcC1tb2RlLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm91cm0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisK
Kzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkMSI+IAorPCFbQ0RBVEFbIDxwPiBk
ZWZhdWx0IG1vZGUgaXMgIndyYXAiIGZvciB0aGUgZmlyc3QgcCBlbGVtZW50IF1dPgorPHA+IFRl
c3QgZm9yIG1vZGUgYXR0cmlidXRlIG9mIHAgZWxlbWVudCBpbiBXTUwgPC9wPgorPGJyLz4KKzwh
W0NEQVRBWyA8cD4gaXQgd2lsbCB1c2UgdGhlIG1vZGUgb2YgcHJldmlvdXMgcGFyYWdyYXBoIGVs
ZW1lbnRdXT4KKzxwPgorSGVyZSB5b3UgY2FuIGxlYXJuIHZhcmlvdXMgbW9iaWxlIHRlY2hub2xv
Z2llcyBsaWtlIFdBUCAvIFdBUCAyLjAsIFdNTCwgV01MU2NyaXB0LCBYSFRNTCBNUCwgV0NTUyAv
IFdBUCBDU1MsIFVBUHJvZiBhbmQgU01TIHRocm91Z2ggb3VyIGZyZWUgdHV0b3JpYWxzLCBhcnRp
Y2xlcyBhbmQgZXhhbXBsZXMuIFRoaXMgd2ViIHNpdGUgY2FuIGhlbHAgd2ViIHByb2dyYW1tZXJz
IHdobyB3aXNoIHRvIGV4dGVuZCB0aGVpciBrbm93bGVkZ2UgdG8gdGhlIHdpcmVsZXNzIHdvcmxk
LiAKKzxici8+CitISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhICis8L3A+Cis8YnIvPgorPCFbQ0RBVEFbIDxwIG1vZGU9Im5vd3JhcCI+XV0+Cis8cCBtb2Rl
PSJub3dyYXAiPgorSGVyZSB5b3UgY2FuIGxlYXJuIHZhcmlvdXMgbW9iaWxlIHRlY2hub2xvZ2ll
cyBsaWtlIFdBUCAvIFdBUCAyLjAsIFdNTCwgV01MU2NyaXB0LCBYSFRNTCBNUCwgV0NTUyAvIFdB
UCBDU1MsIFVBUHJvZiBhbmQgU01TIHRocm91Z2ggb3VyIGZyZWUgdHV0b3JpYWxzLCBhcnRpY2xl
cyBhbmQgZXhhbXBsZXMuIFRoaXMgd2ViIHNpdGUgY2FuIGhlbHAgd2ViIHByb2dyYW1tZXJzIHdo
byB3aXNoIHRvIGV4dGVuZCB0aGVpciBrbm93bGVkZ2UgdG8gdGhlIHdpcmVsZXNzIHdvcmxkLiAK
Kzxici8+CitISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL3Nob3ctZmlyc3QtY2FyZC53
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvc2hvdy1maXJzdC1jYXJkLndtbAkocmV2aXNpb24g
MCkKKysrIGZhc3Qvd21sL3Nob3ctZmlyc3QtY2FyZC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMC8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFRE
L3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIGlkPSJubzEiPgorPHA+VGVzdCBmb3Igc2hv
d2luZyB0aGUgZmlyc3QgY2FyZCBvZiB3bWwgZGVjayBpbiBkZWZhdWx0IHdoZW4geW91IGRvZXNu
J3Qgc3BlY2lmeSBhbnkgY29ycmVjdCBVUkwgZnJhZ21lbnQuPC9wPiAKK1RoaXMgaXMgY2FyZCBv
bmUuIElmIHRoZSB0ZXN0IHBhc3NlcywgeW91IHNob3VsZCBzZWUgbWU8L2NhcmQ+Cis8Y2FyZCBp
ZD0ibm8yIj5UaGlzIGlzIGNhcmQgMiwgeW91IHNob3VsZCBOT1Qgc2VlIHRoZXNlIHRleHQgd2hp
bGUgcnVubmluZyB0aGlzIHRlc3Q8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL3RhYmxl
LWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL3RhYmxlLWVsZW1lbnQud21sCShy
ZXZpc2lvbiAwKQorKysgZmFzdC93bWwvdGFibGUtZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMzcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZD4KKyA8cD4gVGVzdCBmb3IgdGFibGUg
ZWxlbWVudCBpbiBXTUwgPC9wPgorIDxwPiBzb3VyY2UgY29kZTogPC9wPgorIDwhW0NEQVRBWwor
ICAgPHRhYmxlIGNvbHVtbnM9IjMiIGFsaWduPSJMUlIiPiAKKyAgICA8dHI+CisgICAgIDx0ZD5D
ZWxsIG9uZTwvdGQ+CisgICAgIDx0ZD5DPGJyLz5lbGw8YnIvPiB0d288L3RkPgorICAgICA8dGQ+
Q2VsbCB0aHJlZTwvdGQ+CisgICAgPC90cj4KKyAgICA8dHI+CisgICAgPHRkPiBvbmUgPC90ZD4K
KyAgICA8dGQvPgorICAgIDx0ZD5DIHRocmVlPC90ZD4KKyAgICA8L3RyPgorICAgPC90YWJsZT4K
KyBdXT4KKyA8YnIvPgorICA8cD4KKyAgIDx0YWJsZSBib3JkZXI9JzEnIGNvbHVtbnM9IjMiIGFs
aWduPSJMUlIiPiAKKyAgICA8dHI+CisgICAgIDx0ZD5DZWxsIG9uZTwvdGQ+CisgICAgIDx0ZD5D
PGJyLz5lbGw8YnIvPiB0d288L3RkPgorICAgICA8dGQ+Q2VsbCB0aHJlZTwvdGQ+CisgICAgPC90
cj4KKyAgICA8dHI+CisgICAgPHRkPiBvbmUgPC90ZD4KKyAgICA8dGQvPgorICAgIDx0ZD5DIHRo
cmVlPC90ZD4KKyAgICA8L3RyPgorICAgPC90YWJsZT4KKyA8L3A+CisgPC9jYXJkPgorPC93bWw+
IApJbmRleDogZmFzdC93bWwvdGVzdC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvdGVzdC53
bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC90ZXN0LndtbAkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSw5IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiID8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAi
LS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+Cis8d21sPgorIDxjYXJkIGlkPSdjYXJkMSc+CisgPHA+IFRoaXMgcGFn
ZSBpcyBhc3Npc3RhbnQgcGFnZS4gTWFueSB0ZXN0IHBhZ2VzIHdpbGwganVtcCBoZXJlLiA8L3A+
CisgPHA+Q2xpY2sgIkJhY2siIHRvIGdvIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2U8L3A+Cisg
PGFuY2hvcj4gQmFjayA8cHJldi8+PC9hbmNob3I+CisgPC9jYXJkPgorPC93bWw+CkluZGV4OiBm
YXN0L3dtbC90ZXh0LWVtcGhhc2lzLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC90ZXh0LWVt
cGhhc2lzLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL3RleHQtZW1waGFzaXMud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3
dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IlRl
eHQgRm9ybWF0dGluZyI+CisgIDxwPiBUZXN0IGZvciB0ZXh0IGVtcGhhc2lzIG9mIFdNTCA8L3A+
CisgIDxwPgorICAgbm9ybWFsPGJyLz4KKyAgIDxlbT5lbXBoYXNpemVkPC9lbT48YnIvPgorICAg
PHN0cm9uZz5zdHJvbmc8L3N0cm9uZz48YnIvPgorICAgPGI+Ym9sZDwvYj48YnIvPgorICAgPGk+
aXRhbGljPC9pPjxici8+CisgICA8dT51bmRlcmxpbmU8L3U+PGJyLz4KKyAgIDxiaWc+YmlnPC9i
aWc+PGJyLz4KKyAgIDxzbWFsbD5zbWFsbDwvc21hbGw+CisgIDwvcD4KKyA8L2NhcmQ+Cis8L3dt
bD4KSW5kZXg6IGZhc3Qvd21sL3ZhbGlkYXRlLWR0ZC53bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93
bWwvdmFsaWRhdGUtZHRkLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL3ZhbGlkYXRlLWR0
ZC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0
dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9
Im5vMSIgdGl0bGU9IkNhcmQgMSI+IAorPHA+VGVzdCBmb3IgRFREIHZhbGlkYXRpb24gb2YgV01M
IGZpbGU8YnIvPklmIHRoZSBEVENUWVBFIGlzIGluY29ycmVjdCBvciBtaXNzaW5nLCB0aGlzIHRl
c3QgZmFpbGVzLjwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwvaW50ZXJhY3Rp
dmVjYXNlcy9hLWJyLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvYS1ici1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2ludGVy
YWN0aXZlY2FzZXMvYS1ici1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMiBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9S
VU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4x
LnhtbCI+Cis8d21sPgorIDxjYXJkIHRpdGxlPSJBIGVsZW1lbnQgVGVzdCI+CisgIDxwPlRlc3Qg
Zm9yIEEgZWxlbWVudCBpbmNsdWRpbmcgQlIgZWxlbWVudDwvcD4KKyAgPHA+CisgICAiTmV4dCBQ
YWdlIiB3aWxsIGJlIGJyb2tlbiBieSBCUiBlbGVtZW50IGJldHdlZW4gdGhlbTxici8+CisgICA8
YSBocmVmPSIuLi90ZXN0LndtbCI+TmV4dCA8YnIvPiBwYWdlPC9hPgorICA8L3A+CisgPC9jYXJk
PgorPC93bWw+IAorCkluZGV4OiBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2EtZWxlbWVudC53
bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWVsZW1lbnQud21s
CShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hLWVsZW1lbnQud21s
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwh
RE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIiAiaHR0cDov
L3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+CisgPGNhcmQgdGl0bGU9
IkEgZWxlbWVudCBUZXN0Ij4KKyAgPHA+VGVzdCBmb3IgQSBlbGVtZW50LiA8YnIvPldoZW4gbW91
c2UgbW92ZXMgaW50byBsaW5rLCAiZ28gdG8gdGVzdC53bWwiIHdpbGwgYXBwZWFyLCBjbGljayB0
aGUgbGluaywgd2lsbCBqdW1wIHRvIHRlc3Qud21sPC9wPgorICAKKyAgPHA+CisgICA8YSBocmVm
PSIuLi90ZXN0LndtbCIgdGl0bGU9ImdvIHRvIHRlc3Qud21sIiA+TmV4dCBwYWdlPC9hPgorICA8
L3A+CisgPC9jYXJkPgorPC93bWw+IAorCkluZGV4OiBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2Vz
L2EtaW1nLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvYS1pbWctZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL2EtaW1nLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDExIEBACis8
P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8v
RFREIFdNTCAxLjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1s
Ij4KKzx3bWw+CisgPGNhcmQgdGl0bGU9IkEgZWxlbWVudCBUZXN0Ij4KKyAgPHA+VGVzdCBmb3Ig
QSBlbGVtZW50IGluY2x1ZGluZyBpbWcgZWxlbWVudC4gPC9wPgorICA8cD4KKyAgIDxhIGhyZWY9
Ii4uL3Rlc3Qud21sIiB0aXRsZT0iTmV4dCBQYWdlIj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL3Nt
aWxlLmdpZiIvPjwvYT4KKyAgPC9wPgorIDwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDogZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy9hY2Nlc3MtdGFyZ2V0LndtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FjY2Vzcy10YXJnZXQud21sCShyZXZpc2lvbiAwKQorKysg
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9hY2Nlc3MtdGFyZ2V0LndtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBV
QkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVt
Lm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNhcmQgb250aW1lcj0iLi90YXJnZXRk
ZWNrLndtbCI+Cis8dGltZXIgbmFtZT0idDEiIHZhbHVlPSIzMCIvPgorPHA+IFRlc3QgZm9yIERl
Y2sgQWNjZXNzIGNvbnRyb2wgaW4gV01MLiA8L3A+Cis8cD4gSWYgdGhlIHRlc3QgcGFzc2VzLCB0
aGlzIGRlY2sgd2lsbCBqdW1wIHRvICJ0YXJnZXRkZWNrLndtbCIgYWZ0ZXIgMyBzZWNvbmQ8L3A+
Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9y
LWJyLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
YW5jaG9yLWJyLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvaW50ZXJhY3Rp
dmVjYXNlcy9hbmNob3ItYnItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIg
QEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBG
T1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxf
MS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4gVGVzdCBm
b3IgYnIgZWxlbWVudCBlbmNsb3NlZCB3aXRoIGFuY2hvciBlbGVtZW50IDwvcD4KKzxwPgorPGFu
Y2hvcj48Z28gaHJlZj0iLi4vdGVzdC53bWwiLz5HbyB0byA8YnIvPnRlc3Qud21sPC9hbmNob3I+
Cis8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
YW5jaG9yLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvYW5jaG9yLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvaW50ZXJhY3Rp
dmVjYXNlcy9hbmNob3ItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMzYgQEAK
Kzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVN
Ly9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54
bWwiPgorPHdtbD4KKyA8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+CisgIDxwPgorICBUaGlzIGlz
IGFuIGFuY2hvciBib3VuZCB0byBnbyB0YXNrPGJyLz4KKyAgIDxhbmNob3I+TmV4dCBwYWdlCisg
IDxnbyBocmVmPSJjYXJkcy53bWwiLz4KKyAgIDwvYW5jaG9yPgorICA8L3A+CisKKyAgIDxwPgor
ICAgVGhpcyBhbiBhbmNob3IgYm91bmQgdG8gcHJldiB0YXNrPGJyLz4KKyAgIDxhbmNob3IgdGl0
bGU9IlByZXZpb3VzIiA+UHJldiBwYWdlCisgICA8cHJldi8+CisgICA8L2FuY2hvcj4KKyAgPC9w
PgorCisgICA8cD4KKyAgICBUaGlzIGFuIGFuY2hvciBib3VuZCB0byByZWZyZXNoIHRhc2s8YnIv
PgorICAgIDxhbmNob3IgdGl0bGU9IlJlZnJlc2giPlJlZnJlc2ggJHZhcgorICAgIDxyZWZyZXNo
PiAKKyAgICA8c2V0dmFyIG5hbWU9InZhciIgdmFsdWU9Im1lIi8+CisgICAgPC9yZWZyZXNoPgor
ICAgIDwvYW5jaG9yPgorICA8L3A+CisKKyAgIDxwPgorICAgVGhpcyBpcyBhbiBhbmNob3IgY29u
dGFpbnMgaW1nIGVsZW1lbnQsIGJvdW5kIHRvIHByZXYgdGFzayA8YnIvPgorICAgPGFuY2hvciB0
aXRsZT0iY2xpY2sgdG8gZ28gYmFjayI+CisgICA8cHJldi8+CisgICA8aW1nIHNyYz0iLi4vcmVz
b3VyY2VzL3NtaWxlLmdpZiIgLz4KKyAgIDwvYW5jaG9yPgorICAgPC9wPgorIDwvY2FyZD4KKzwv
d21sPiAKSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvYW5jaG9yLWltZy1lbGVtZW50
LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2FuY2hvci1pbWct
ZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2Fu
Y2hvci1pbWctZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTIgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFRE
IFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+
CisKKzx3bWw+Cis8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4gVGVzdCBmb3IgV01MIGlt
ZyBlbmNsb3NlZCB3aXRoIGFuY2hvciBlbGVtZW50LCB3aGVuIHRoZSBtb3VzZSBtb3ZlIGludG8g
dGhlIGltYWdlLCB0aGUgdGlwICJnbyB0byB0ZXN0LndtbCIgd2lsbCBhcHBlYXI8L3A+Cis8cD4K
KzxhbmNob3IgdGl0bGU9ImdvIHRvIHRlc3Qud21sIj48aW1nIHNyYz0iLi4vcmVzb3VyY2VzL3Nt
aWxlLmdpZiIvPiA8Z28gaHJlZj0iLi4vdGVzdC53bWwiLz48L2FuY2hvcj4KKzwvcD4KKzwvY2Fy
ZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJkLW5ld2NvbnRl
eHQtYXR0ci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9jYXJk
LW5ld2NvbnRleHQtYXR0ci53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL2NhcmQtbmV3Y29udGV4dC1hdHRyLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwy
MCBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQ
Rk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxf
MS4xLnhtbCI+CisKKzx3bWw+CisgPGNhcmQgaWQ9ImZpcnN0Y2FyZCIgdGl0bGU9Ik9uZSI+Cisg
PHA+IFRlc3QgZm9yIG5ld2NvbnRleHQgYXR0cmlidXRlIG9mIGNhcmQgZWxlbWVudDwvcD4KKyA8
cD4gVGhpcyBpcyB0aGUgZmlyc3QgY2FyZCwgQ2xpY2sgIkdvIiB0byBlbnRlciBjYXJkIHR3by4g
PGJyLz4gQmVjYXVzZSBuZXdjb250ZXh0IG9mIGNhcmQgdHdvIGlzIHRydWUsIHRoZSBoaXN0b3J5
IHN0YXRlIHdpbGwgYmUgY2xlYW4sIGFuZCB0aGUgdmFyaWFibGUgIiR2YXIxIiB3b24ndCBiZSBy
ZXBsYWNlZDwvcD4KKyA8ZG8gdHlwZT0iYWNjZXB0IiBsYWJlbD0iR28iPgorIDxnbyBocmVmPSIj
c2Vjb25kY2FyZCI+CisgICAgPHNldHZhciBuYW1lPSJ2YXIxIiB2YWx1ZT0idHdvIi8+IAorIDwv
Z28+CisgPC9kbz4KKyA8L2NhcmQ+CisKKyA8Y2FyZCBpZD0ic2Vjb25kY2FyZCIgdGl0bGU9IiR2
YXIxIiBuZXdjb250ZXh0PSJ0cnVlIj4KKyA8cD4gVGhpcyBpcyB0aGUgY2FyZCAkdmFyMSA8L3A+
CisgPHA+IEJlY2F1c2UgbmV3Y29udGV4dCBvZiB0aGlzIGNhcmQgaXMgdHJ1ZSwgdGhlIGhpc3Rv
cnkgc3RhdGUgd2lsbCBiZSBjbGVhbiwgYW5kIHRoZSB2YXJpYWJsZSAiJHZhcjEiIHdvbid0IGJl
IHJlcGxhY2VkPC9wPgorIDwvY2FyZD4KKzwvd21sPgorCkluZGV4OiBmYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL2NhcmQtb25lbnRlcmJhY2t3YXJkLndtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dt
bC9pbnRlcmFjdGl2ZWNhc2VzL2NhcmQtb25lbnRlcmJhY2t3YXJkLndtbAkocmV2aXNpb24gMCkK
KysrIGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVyYmFja3dhcmQud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIyIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgaWQ9ImNhcmQx
IiB0aXRsZT0iQ2FyZCAxIiBvbmVudGVyYmFja3dhcmQ9IiNjYXJkMyI+IAorPHA+VGVzdCBmb3Ig
Y2FyZCBvbmVudGVyYmFja3dhcmQgaW50cmluc2ljIGV2ZW50PC9wPgorPHA+IENsaWNrICJHbyIg
dG8ganVtcCB0byB0aGUgY2FyZDIsIGlmIHlvdSBnbyBiYWNrIGZyb20gY2FyZDIsIGl0IHdpbGwg
anVtcCB0byBjYXJkMzwvcD4KKzxhbmNob3IgdGl0bGU9ImdvIHRvIGNhcmQyIj4KKzxnbyBocmVm
PSIjY2FyZDIiPkdvPC9nbz4KKzwvYW5jaG9yPgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQyIiB0
aXRsZT0iQ2FyZCAyIj4gCis8cD5UaGlzIGlzIGNhcmQyLGNsaWNrICJCYWNrIiB3aWxsIGJhY2sg
dG8gdGhlIHByZXZpb3VzIHBhZ2U8L3A+IAorPGFuY2hvcj4KK0JhY2sKKzxwcmV2IC8+Cis8L2Fu
Y2hvcj4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMyIgdGl0bGU9IkNhcmQgMyIgPgorPHA+VGhp
cyBpcyBjYXJkMzwvcD4KKzwvY2FyZD4KKzwvd21sPiAKSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvY2FyZC1vbmVudGVyZm9yd2FyZC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy9jYXJkLW9uZW50ZXJmb3J3YXJkLndtbAkocmV2aXNpb24gMCkKKysr
IGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvY2FyZC1vbmVudGVyZm9yd2FyZC53bWwJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTQgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBF
IHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53
YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiIHRp
dGxlPSJDYXJkIDEiIG9uZW50ZXJmb3J3YXJkPSIjY2FyZDIiPgorPHA+VGVzdCBmb3IgY2FyZCBv
bmVudGVyZm9yd2FyZCBldmVudDwvcD4KKzxwPkNhcmQgb25lIHdpbGwganVtcCB0byBjYXJkIHR3
byB3aGVuIGVudGVyZWQgZm9yd2FyZCBpdDwvcD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJjYXJkMiIg
dGl0bGU9IkNhcmQgMiI+Cis8cD5UZXN0IGZvciBjYXJkIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9w
PgorPHA+VGhpcyBpcyBjYXJkMiwgSSBhbSBlbnRlcmVkIGJ5IGNhcmQgb25lIGZvcndhcmRpbmc8
L3A+Cis8L2NhcmQ+Cis8L3dtbD4gCisKSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
Y2FyZC1vbnRpbWVyLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2Vz
L2NhcmQtb250aW1lci53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL2NhcmQtb250aW1lci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTkgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
Cis8d21sPgorPGhlYWQ+Cis8bWV0YSBodHRwLWVxdWl2PSJDYWNoZS1Db250cm9sIiBjb250ZW50
PSJtYXgtYWdlPTAiLz4KKzwvaGVhZD4KKzxjYXJkIGlkPSJjYXJkMSIgb250aW1lcj0iI2NhcmQy
IiB0aXRsZT0iQ2FyZCBvbmUiPgorPHA+IFRlc3QgZm9yIGNhcmQgb250aW1lciBpbnRyaW5zaWMg
ZXZlbnQgaW4gV01MIDwvcD4KKzx0aW1lciBuYW1lPSJ0aW1lMSIgdmFsdWU9IjUwIi8+Cis8cD4K
K1RoaXMgaXMgY2FyZCBvbmU8YnIvPlRoZSB0aW1lciBpcyB0cmlnZ2VyZWQgYnkgdGhlIG9udGlt
ZXIgaW50cmluc2ljIGV2ZW50KG9udGltZXIgYXMgYXR0cmlidXRlIG9mIGNhcmQgZWxlbWVudCk8
YnIvPldoZW4gdGhlIHRpbWVyIGlzIHRpbWVvdXQoYWZ0ZXIgNXMpLCB3aWxsIGp1bXAgdG8gY2Fy
ZCB0d28uCis8L3A+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIiPgorVGhpcyBpcyBDYXJkIHR3
bworPC9jYXJkPgorPC93bWw+CisKSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvZGVj
ay1hY2Nlc3MtY29udHJvbC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9kZWNrLWFjY2Vzcy1jb250cm9sLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvZGVjay1hY2Nlc3MtY29udHJvbC53bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTIgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMg
Ii0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcv
RFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIG9uZW50ZXJmb3J3YXJkPSJ0YXJnZXRk
ZWNrLndtbCI+Cis8cD4gVGVzdCBmb3IgRGVjayBBY2Nlc3MgY29udHJvbCBpbiBXTUwuIDwvcD4K
KzxwPiBUaGlzIGRlY2sgd2lsbCB0cnkgdG8ganVtcCB0byAidGFyZ2V0ZGVjay53bWwiIHdoZW4g
aXQgaXMgbG9hZGVkLiBCdXQgaXQgd2lsbCA8c3Ryb25nPkZBSUw8L3N0cm9uZz4gYmVjYXVzZSAi
dGFyZ2V0ZGVjay53bWwiIGp1c3QgYWxsb3dzICJhY2Nlc3MtdGFyZ2V0LndtbCIgdG8gYWNjZXNz
IGl0LjwvcD4KKzxwPiBZb3UgY2FuIGNsaWNrICdHbycgdG8gZW50ZXIgJ2FjY2Vzcy10YXJnZXQu
d21sJywgYW5kIHRoZW4gZW50ZXIgJ3RhcmdldGRlY2sud21sJyBmcm9tIHRoZXJlPC9wPgorPGFu
Y2hvciB0aXRsZT0iZ28gdG8gYWNjZXNzLXRhcmdldC53bWwiPjxnbyBocmVmPSIuL2FjY2Vzcy10
YXJnZXQud21sIj5HbzwvZ28+PC9hbmNob3I+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvZ28tZWxlbWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy9nby1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvZ28tZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsNDAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJPbmUiPgorICA8
cD4gVGVzdCBmb3IgZ28gZWxlbWVudCBpbiBXTUwgPC9wPgorICA8YnIvPgorICBDYXNlIDE6IGp1
bXAgYW1vbmcgb25lIGRlY2sKKyAgPGRvIG5hbWU9ImdvIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJH
byB0byBjYXJkMiI+CisgICA8Z28gaHJlZj0iI2NhcmQyIiBzZW5kcmVmZXJlcj0idHJ1ZSIgLz4K
KyAgPC9kbz4KKyAgPHAvPgorICBDYXNlIDI6IGp1bXAgZnJvbSBvbmUgZGVjayB0byBhbm90aGVy
IG9uZQorICA8ZG8gbmFtZT0iZ28yIiB0eXBlPSJhY2NlcHQiIGxhYmVsPSJHbyB0byB0ZXN0Lndt
bCI+CisgICA8Z28gaHJlZj0iLi4vdGVzdC53bWwiLz4KKyAgPC9kbz4KKyAgPHAvPgorICBDYXNl
IDM6IGp1bXAgdG8gdGVzdC53bWwgYW5kIHBvc3QgZGF0YSB3aXRoIHBvc3QgbWV0aG9kCisgIDxk
byBuYW1lPSJnbzMiIHR5cGU9ImFjY2VwdCIgbGFiZWw9IlBvc3QgdG8gdGVzdC53bWwiPgorICAg
PGdvIGhyZWY9Ii4uL3Rlc3Qud21sIiBtZXRob2Q9InBvc3QiIGFjY2VwdC1jaGFyc2V0PSJ1dGYt
OCwgbGF0aW4xIj4KKyAgICA8cG9zdGZpZWxkIG5hbWU9InZhcjEiIHZhbHVlPSJoZWxsbyIvPgor
ICAgIDxwb3N0ZmllbGQgbmFtZT0idmFyMiIgdmFsdWU9IiB3b3JsZCIvPgorICAgPC9nbz4KKyAg
PC9kbz4KKyAgPHAvPgorICBDYXNlIDQ6IGp1bXAgdG8gdGVzdC53bWwgYW5kIHNlbmQgcmVxdWVz
dCB3aXRoIGdldCBtZXRob2QgCisgIDxkbyBuYW1lPSJnbzQiIHR5cGU9ImFjY2VwdCIgbGFiZWw9
ImdldCBmcm9tIHRlc3Qud21sIiBzZW5kcmVmZXJlcj0idHJ1ZSI+CisgICA8Z28gaHJlZj0iLi4v
dGVzdC53bWwiIG1ldGhvZD0iZ2V0IiBhY2NlcHQtY2hhcnNldD0idXRmLTgsbGF0aW4xLGlzby04
ODU5LTEiPgorICAgIDxwb3N0ZmllbGQgbmFtZT0idmFyMSIgdmFsdWU9ImhlbGxvIi8+CisgICAg
PHBvc3RmaWVsZCBuYW1lPSJ2YXIyIiB2YWx1ZT0iZnJpZW5kIi8+CisgICA8L2dvPgorICA8L2Rv
PgorIDwvY2FyZD4KKworIDxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IlR3byI+CisgIDxwIGFsaWdu
PSJjZW50ZXIiPgorICBUaGlzIGlzIHRoZSBzZWNvbmQgY2FyZAorIDwvcD4KKyA8L2NhcmQ+Cis8
L3dtbD4KKwpJbmRleDogZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1lbXB0eW9rLndt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2lucHV0LWVtcHR5b2su
d21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1lbXB0
eW9rLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNiBAQAorPD94bWwgdmVyc2lvbj0iMS4w
Ij8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIK
KyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGNh
cmQ+Cis8cD4gVGVzdCBmb3IgaW5wdXQgZW1wdHlvayBhdHRyaWJ1dGUgaW4gV01MIDwvcD4KK0Zv
ciB0aGUgZm9sbG93aW5nIGlucHV0IGVsZW1lbnRzLCBpbnB1dCBpcyByZXF1aXJlZDoKKzxici8+
Citmb3JtYXQ9TipNO2VtcHR5b2s9ZmFsc2U8aW5wdXQgbmFtZT0ieDIiIGVtcHR5b2s9ImZhbHNl
IiBmb3JtYXQ9Ik4qTSIvPgorPGJyLz4KK2Zvcm1hdD0qTTtlbXB0eW9rPWZhbHNlPGlucHV0IG5h
bWU9IngzIiBlbXB0eW9rPSJmYWxzZSIgZm9ybWF0PSIqTSIvPgorPGJyLz4KK0ZvciB0aGUgZm9s
bG93aW5nIGlucHV0IGVsZW1lbnRzLCBpbnB1dCBpcyBub3QgcmVxdWlyZWQ6Cis8YnIvPgorZGVm
YXVsdDxpbnB1dCBuYW1lPSJ4NCIvPiAKKzxici8+Citmb3JtYXQ9Kk08aW5wdXQgbmFtZT0ieDUi
IGZvcm1hdD0iKk0iLz4gCis8YnIvPgorZW1wdHlvaz10cnVlPGlucHV0IG5hbWU9Ing2IiBlbXB0
eW9rPSJ0cnVlIi8+Cis8YnIvPgorZm9ybWF0PW4qTTtlbXB0eW9rPXRydWU8aW5wdXQgbmFtZT0i
eDciIGVtcHR5b2s9InRydWUiIGZvcm1hdD0ibipNIi8+Cis8YnIvPgorZm9ybWF0PSpNO2VtcHR5
b2s9dHJ1ZTxpbnB1dCBuYW1lPSJ4OCIgZW1wdHlvaz0idHJ1ZSIgZm9ybWF0PSIqTSIvPgorPC9j
YXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL2lucHV0LWZvcm1h
dC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1mb3Jt
YXQud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9pbnB1dC1m
b3JtYXQud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM3IEBACis8P3htbCB2ZXJzaW9uPSIx
LjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VO
IgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8
Y2FyZCB0aXRsZT0iSW5wdXQiPgorPHA+IFRlc3QgZm9yIGlucHV0IGZvcm1hdCBpbiBXTUw8L3A+
Cis8cD4KK1Bhc3N3b3JkKGRlZmF1bHQ6Kk0pOjxpbnB1dCBuYW1lPSJkZWZhdWx0Ii8+Cis8YnIv
PgorUGFzc3dvcmQoNk0pOiA8aW5wdXQgbmFtZT0iUHdkIiB0eXBlPSJwYXNzd29yZCIgZm9ybWF0
PSI2TSIvPgorPGJyLz4KK1Bhc3N3b3JkKEFBYSk6IDxpbnB1dCBuYW1lPSJQd2QyIiB0eXBlPSJw
YXNzd29yZCIgZm9ybWF0PSJBQWEiLz4gCis8YnIvPgorb25lLW51bWVyaWMrbG93ZXJjYXNlKE4q
YSk6PGlucHV0IG5hbWU9InVwcGVyIiBmb3JtYXQ9Ik4qYSIvPiAKKzxici8+CitVcHBlcmNhc2Ur
bm9uLW51bWVyaWMoQUFBO3NpemU9OCk6PGlucHV0IG5hbWU9InVwcGVyIiBzaXplPSI4IiBmb3Jt
YXQ9IkFBQSIvPiAKKzxici8+CitMb3dlcmNhc2Urbm9uLW51bWVyaWMoYWFhO3NpemU9ODt3aWR0
aD0yKTo8aW5wdXQgbmFtZT0ibG93ZXIiIHNpemU9IjgiIHdpZHRoPSIyIiBmb3JtYXQ9ImFhYSIv
PgorPGJyLz4KK051bWVyaWMoNU47bWF4bGVuPTMpOjxpbnB1dCBuYW1lPSJudW1lcmljIiBtYXhs
ZW5ndGg9IjMiIGZvcm1hdD0iNU4iLz4KKzxici8+CitOdW1laXJjK3N5bWJvbHMobm5uKTo8aW5w
dXQgbmFtZT0ibnVtZXJpYysiIGZvcm1hdD0ibm5uIi8+Cis8YnIvPgorVXBwZXJjYXNlK251bWVy
aWMrc3ltYm9scyhYWFgpOjxpbnB1dCBuYW1lPSJ1cHBlcisiIGZvcm1hdD0iWFhYIi8+Cis8YnIv
PgorTG93ZXJjYXNlK251bWVyaWMrc3ltYm9scyh4eHgpOjxpbnB1dCBuYW1lPSJsb3dlcisiIGZv
cm1hdD0ieHh4Ii8+Cis8YnIvPgorVXBwZXJjYXNlK251bWVyaWMrc3ltYm9scyhNTU0pOjxpbnB1
dCBuYW1lPSJkZWZfdXBwZXIrIiBmb3JtYXQ9Ik1NTSIvPgorPGJyLz4KK0xvd2VyY2FzZStudW1l
cmljK3N5bWJvbHMobW1tKTo8aW5wdXQgbmFtZT0iZGVmX2xvd2VyKyIgZm9ybWF0PSJtbW0iLz4K
Kzxici8+CitNaXhlZCBkYXRhKGFcLU5OKngpPGlucHV0IG5hbWU9ImFueSIgZm9ybWF0PSJhXC1O
Tip4Ii8+Cis8YnIvPgorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL29uZXZlbnQtZ28ud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVy
YWN0aXZlY2FzZXMvb25ldmVudC1nby53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL29uZXZlbnQtZ28ud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIwIEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4x
LnhtbCI+Cis8d21sPgorCis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPiAKKyA8b25l
dmVudCB0eXBlPSJvbmVudGVyZm9yd2FyZCI+CisgIDxnbyBocmVmPSIjY2FyZDIiLz4KKyA8L29u
ZXZlbnQ+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgZ28gdGFzayB3
aXRoIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+d2hlbiBlbnRlciBmb3J3YXJkIHRvIHRo
aXMgY2FyZCwgaXQgd2lsbCBqdW1wIHRvIGNhcmQgMjwvcD4KKzwvY2FyZD4KKzxjYXJkIGlkPSJj
YXJkMiIgdGl0bGU9IkNhcmQgMiI+Cis8cD5UZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2gg
YmluZHMgZ28gdGFzayB3aXRoIG9uZW50ZXJmb3J3YXJkIGV2ZW50PC9wPgorPHA+d2hpbGUgY2Fy
ZCAxIGlzIGxvYWRlZCwgaXQgd2lsbCB0cmlnZ2VyIHRoZSBvbmVudGVyZm9yd2FyZCBldmVudCBh
bmQganVtcCB0byBjYXJkMiBpbW1lZGlhdGVseTwvcD4KKzxwPlRoaXMgaXMgY2FyZDI8L3A+Cis8
L2NhcmQ+CisKKzwvd21sPiAKKwpJbmRleDogZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2
ZW50LW5vb3Aud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25l
dmVudC1ub29wLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
b25ldmVudC1ub29wLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAorPD94bWwgdmVy
c2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwg
MS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdt
bD4KKworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4gCisgPG9uZXZlbnQgdHlwZT0i
b25lbnRlcmZvcndhcmQiPgorIDxub29wLz4KKyA8L29uZXZlbnQ+Cis8cD5UZXN0IGZvciBvbmV2
ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgbm9vcCB0YXNrIHdpdGggb25lbnRlcmZvcndhcmQgZXZl
bnQ8L3A+Cis8cD53aGVuIGVudGVyIGZvcndhcmQgdG8gdGhpcyBjYXJkLCBpdCB3b24ndCBkbyBh
bnl0aGluZyBhcyBpZiB0aGUgb25lbnRlcmZvcndhcmQgZXZlbnQgd2Fzbid0IHRyaWdnZXJlZDwv
cD4KKzwvY2FyZD4KKzwvd21sPiAKKwpJbmRleDogZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9v
bmV2ZW50LXByZXYud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
b25ldmVudC1wcmV2LndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvb25ldmVudC1wcmV2LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyMyBAQAorPD94bWwg
dmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBX
TUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
PHdtbD4KKworPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iQ2FyZCAxIj4gCis8cD5UZXN0IGZvciBv
bmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgcHJldiB0YXNrIHdpdGggb25lbnRlcmZvcndhcmQg
ZXZlbnQ8L3A+Cis8cD4gVGhpcyBpcyBDYXJkIG9uZTwvcD4KKzxwPkNsaWNraW5nICJHbyIgd2ls
bCBjYXVzZSBpdCB0byBqdW1wIHRvIHRoZSBjYXJkMiwgYnV0IHdoaWNoIGJpbmRzIHByZXYgdGFz
ayB0byBvbmVudGVyZm9yd2FyZCBldmVudCB3aXRoaW4gb25ldmVudCBlbGVtZW50LCBhcyBhIHJl
c3VsdCwgaXQgd2lsbCBqdW1wIGJhY2sgdG8gY2FyZCAxPC9wPgorPGFuY2hvciB0aXRsZT0iR28g
dG8gY2FyZDIiPkdvCis8Z28gaHJlZj0iI2NhcmQyIi8+Cis8L2FuY2hvcj4KKzwvY2FyZD4KKwor
PGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iQ2FyZCAyIj4KKzxwPlRlc3QgZm9yIG9uZXZlbnQgZWxl
bWVudCB3aGljaCBiaW5kcyBwcmV2IHRhc2sgd2l0aCBvbmVudGVyZm9yd2FyZCBldmVudDwvcD4K
KzxwPlRoaXMgaXMgY2FyZDIuIFdoZW4gY2FyZCAyIGlzIGVudGVyZWQgZm9yd2FyZCwgaXQgd2ls
bCBqdW1wIGJhY2sgdG8gdGhlIHByZXZpb3VzIHBhZ2UgPC9wPgorIDxvbmV2ZW50IHR5cGU9Im9u
ZW50ZXJmb3J3YXJkIj4KKyA8cHJldi8+CisgPC9vbmV2ZW50PgorPC9jYXJkPgorPC93bWw+IAor
CkluZGV4OiBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtcmVmcmVzaC53bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXJlZnJlc2gud21s
CShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9vbmV2ZW50LXJlZnJl
c2gud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE4IEBACis8P3htbCB2ZXJzaW9uPSIxLjAi
Pz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgor
Imh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorCis8Y2Fy
ZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPiAKKyA8dGltZXIgbmFtZT0iVCIgdmFsdWU9IjMw
Ii8+CisgPG9uZXZlbnQgdHlwZT0ib250aW1lciI+CisgPHJlZnJlc2g+CisgPHNldHZhciBuYW1l
PSJ2YXIiIHZhbHVlPSJWQVJJQUJMRSIvPgorIDwvcmVmcmVzaD4KKyA8L29uZXZlbnQ+Cis8cD5U
ZXN0IGZvciBvbmV2ZW50IGVsZW1lbnQgd2hpY2ggYmluZHMgcmVmcmVzaCB0YXNrIHdpdGggb250
aW1lciBldmVudDwvcD4KKzxwPiBXaGVuIHRoZSB0aW1lciB0aW1lb3V0KDNzKSwgdGhlIHBhZ2Ug
d2lsbCBiZSByZWZyZXNoLiBBcyBhIGNvbnNlcXVlbmNlLCB3ZSBjYW4gc2VlIHRoZSBmb2xsb3dp
bmcgdmFyaWFibGUgcmVmZXJlbmNlIGhhcyBiZWVuIHN1YnN0aXR1dGVkPC9wPgorPHAgYWxpZ249
ImNlbnRlciI+IEhlcmUgaXMgYSB2YXJpYWJsZSA6IHZhciA9ICR2YXIgPC9wPgorPC9jYXJkPgor
PC93bWw+IAorCkluZGV4OiBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtc2hhZG93
LndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL29uZXZlbnQtc2hh
ZG93LndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvb25ldmVu
dC1zaGFkb3cud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDIzIEBACis8P3htbCB2ZXJzaW9u
PSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEv
L0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgor
PHRlbXBsYXRlPgorPG9uZXZlbnQgdHlwZT0ib25lbnRlcmZvcndhcmQiPgorPGdvIGhyZWY9IiNj
YXJkMiIvPgorPC9vbmV2ZW50PgorPC90ZW1wbGF0ZT4KKzxjYXJkIGlkPSJjYXJkMSIgdGl0bGU9
IkNhcmQgT25lIj4KKzxvbmV2ZW50IHR5cGU9Im9uZW50ZXJmb3J3YXJkIj4KKzxnbyBocmVmPSIj
Y2FyZDMiLz4KKzwvb25ldmVudD4KKzxwPlRlc3QgZm9yIG9uZXZlbnQgc2hhZG93aW5nIGluIFdN
TDwvcD4KKzxwPlRoZSBjYXJkLWxldmVsIG9uZXZlbnQgd2lsbCBzaGFkb3cgdGhlIGRlY2stbGV2
ZWwgb25ldmVudC4gQXMgYSByZXN1bHQsIGNhcmQgMSB3b24ndCBqdW1wIHRvIGNhcmQyICBidXQg
dG8gY2FyZCAzIGFjY29yZGluZyB0byB0aGUgY2FyZC1sZXZlbCBvbmV2ZW50J3MgcmVxdWlyZW1l
bnQuIEFmdGVyIGVudGVyZWQgdGhlIGNhcmQgMywgdGhlIGRlY2stbGV2ZWwgb25ldmVudCBlbGVt
ZW50IGlzbid0IHNoYWRvd2VkIGJ5IHRoaXMgY2FyZCwgc28gaXQgd2lsbCBqdW1wIHRvIGNhcmQg
MiBpbW1lZGlhdGVseS48L3A+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJDYXJk
IHR3byIgPgorPHA+VGhpcyBpcyBjYXJkIDI8L3A+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDMi
IHRpdGxlPSJDYXJkIFRocmVlIj4KKzxwPlRoaXMgaXMgY2FyZCAzPC9wPgorPC9jYXJkPgorPC93
bWw+CkluZGV4OiBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Bvc3RmaWVsZC1nZXQud21sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvcG9zdGZpZWxkLWdldC53bWwJ
KHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Bvc3RmaWVsZC1nZXQu
d21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4K
KzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0
dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+PHdtbD4KKzxjYXJkPgorPHA+
VGVzdCBmb3IgcG9zdGZpZWxkIGVsZW1lbnQgaW4gV01MIDwvcD4KKzxwPgorIENsaWNrICJHZXQi
IHRvIFNlbmQgZGF0YSBieSBnZXQgbWV0aG9kPGJyIC8+CisgPGRvIHR5cGU9ImFjY2VwdCIgbGFi
ZWw9IkdldCI+CisgIDxnbyBocmVmPSIuLi90ZXN0LndtbCIgbWV0aG9kPSJnZXQiPgorICAgPHBv
c3RmaWVsZCBuYW1lPSJpIiB2YWx1ZT0iMiIvPgorICAgPHBvc3RmaWVsZCBuYW1lPSJqIiB2YWx1
ZT0iMzAiLz4KKyAgPC9nbz4KKyA8L2RvPgorPC9wPgorPC9jYXJkPgorPC93bWw+IApJbmRleDog
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0ZmllbGQtcG9zdC53bWwKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy9wb3N0ZmllbGQtcG9zdC53bWwJKHJldmlzaW9u
IDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Bvc3RmaWVsZC1wb3N0LndtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZ
UEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3
LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKzxjYXJkIGlkPSJjYXJkMSIg
dGl0bGU9ImNhcmQxIj4KKzxwPlRlc3QgZm9yIHBvc3RmaWVsZCBlbGVtZW50IGluIFdNTDwvcD4K
KzxwPgorIENsaWNrICJQb3N0IiB0byBTZW5kIGRhdGEgd2l0aCBwb3N0IG1ldGhvZDxici8+Cisg
PGRvIHR5cGU9ImFjY2VwdCIgbmFtZT0iT2siIGxhYmVsPSJQb3N0Ij4KKyAgPGdvIGhyZWY9Ii4u
L3Rlc3Qud21sIiBtZXRob2Q9InBvc3QiPgorICAgPHBvc3RmaWVsZCBuYW1lPSJpIiB2YWx1ZT0i
MiIvPgorICAgPHBvc3RmaWVsZCBuYW1lPSJqIiB2YWx1ZT0iMzAiLz4KKyAgPC9nbz4KKyA8L2Rv
PgorPC9wPgorPC9jYXJkPgorPC93bWw+IApJbmRleDogZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNl
cy9zZWxlY3QtZWxlbWVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy9zZWxlY3QtZWxlbWVudC53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL3NlbGVjdC1lbGVtZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNyBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9S
VU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEu
MS54bWwiPgorCis8d21sPgorPGNhcmQgaWQ9ImNhcmQxIiB0aXRsZT0iU2VsZWN0IFRlc3QiPgor
PHA+IFRlc3QgZm9yIHNlbGVjdCBlbGVtZW50IGluIFdNTCA8L3A+Cis8cD4gWW91IGNhbiBzZWxl
Y3Qgb25lIG9yIG1vcmUgb3B0aW9ucywgYW5kIHRoZW4gY2xpY2sgJ0Fuc3dlcicsIHRoZSBzZWNv
bmQgY2FyZCB3aWxsIHRlbGwgeW91IHdoYXQgeW91IHNlbGVjdGVkPC9wPgorPHA+Cis8c2VsZWN0
IG5hbWU9ImNhcnMiIHRpdGxlPSJTRUxFQ1QiIG11bHRpcGxlPSJ0cnVlIiA+CisgIDxvcHRpb24g
dmFsdWU9InZvbHZvIiA+Vm9sdm88L29wdGlvbj4KKyAgPG9wdGlvbiB2YWx1ZT0iZmlhdCI+Rmlh
dDwvb3B0aW9uPgorICA8b3B0aW9uIHZhbHVlPSJzYWFiIj5TYWFiPC9vcHRpb24+CisgIDxvcHRp
b24gdmFsdWU9ImF1ZGkiPkF1ZGk8L29wdGlvbj4KKzwvc2VsZWN0PgorPC9wPgorPGRvIHR5cGU9
ImFjY2VwdCIgbGFiZWw9IkFuc3dlciI+CisgIDxnbyBocmVmPSIjY2FyZDIiLz4KKzwvZG8+Cis8
L2NhcmQ+CisKKzxjYXJkIGlkPSJjYXJkMiIgdGl0bGU9IkFuc3dlciI+Cis8cD4KK1lvdSBzZWxl
Y3RlZDogJChjYXJzKQorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9pbnRl
cmFjdGl2ZWNhc2VzL3NlbGVjdC1vbnBpY2stZXZlbnQud21sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvc2VsZWN0LW9ucGljay1ldmVudC53bWwJKHJldmlzaW9uIDAp
CisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3NlbGVjdC1vbnBpY2stZXZlbnQud21sCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE2IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93
d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZD4KKzxwPiBU
ZXN0IGZvciBzZWxlY3Qgb25waWNrIGludHJpbnNpYyBldmVudCBpbiBXTUwgPC9wPgorPHA+IFdo
ZW4geW91IHNlbGVjdCB0aGUgJ0xpb24nIG9wdGlvbiwgd2lsbCBqdW1wIHRvIHRlc3Qud21sPC9w
PgorUGxlYXNlIGNob29zZSB5b3VyIGZhdm91cml0ZSBhbmltYWw6PGJyLz4KKzxzZWxlY3QgbmFt
ZT0iWCI+Cis8b3B0aW9uIHZhbHVlPSJEIj5Eb2c8L29wdGlvbj4KKzxvcHRpb24gdmFsdWU9IkMi
PkNhdDwvb3B0aW9uPgorPG9wdGlvbiB2YWx1ZT0iTCIgb25waWNrPSIuLi90ZXN0LndtbCI+TGlv
bjwvb3B0aW9uPgorPC9zZWxlY3Q+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2lu
dGVyYWN0aXZlY2FzZXMvc2V0dmFyLWVsZW1lbnQud21sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21s
L2ludGVyYWN0aXZlY2FzZXMvc2V0dmFyLWVsZW1lbnQud21sCShyZXZpc2lvbiAwKQorKysgZmFz
dC93bWwvaW50ZXJhY3RpdmVjYXNlcy9zZXR2YXItZWxlbWVudC53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTUgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9y
Zy9EVEQvd21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0iZmlyc3RjYXJkIiB0aXRsZT0i
VGVzdCBmb3IgU2V0dmFyIGVsZW1lbnQiPgorIDxwPiBUZXN0IGZvciBzZXR2YXIgZWxlbWVudCBp
biBXTUwgPC9wPgorIDxwPlRoaXMgaXMgdGhlIGZpcnN0IGNhcmQgLCBoYXMgdmFyaWFibGU6IFZB
Uj0nJHZhcic8L3A+CisgPHA+Q2xpY2sgIlJlZnJlc2giIHdpbGwgdXBkYXRlIHRoZSB2YWx1ZSBv
ZiBWQVIgdmFyYWlibGUgd2hpY2ggc3BlY2lmaWVkIGJ5IHNldHZhciBlbGVtZW50PC9wPgorICA8
ZG8gbmFtZT0iUmVmcmVzaCIgdHlwZT0iYWNjZXB0Ij4gCisgICA8cmVmcmVzaD4KKyAgIDxzZXR2
YXIgbmFtZT0idmFyIiB2YWx1ZT0iVkFMVUUiLz4KKyAgIDwvcmVmcmVzaD4KKyAgPC9kbz4KKyA8
L2NhcmQ+Cis8L3dtbD4KKwpJbmRleDogZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXJnZXRk
ZWNrLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RhcmdldGRl
Y2sud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXJnZXRk
ZWNrLndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4w
Ij8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIK
KyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgorCis8d21sPgorPGhl
YWQ+Cis8YWNjZXNzIGRvbWFpbj0ibG9jYWxob3N0IiBwYXRoPSJhY2Nlc3MtdGFyZ2V0LndtbCIv
PgorPC9oZWFkPgorPGNhcmQ+Cis8cD4gVGVzdCBmb3IgRGVjayBBY2Nlc3MgY29udHJvbCBpbiBX
TUwuIDwvcD4KKzxwPiBUaGlzIGlzIHRoZSB0YXJnZXRkZWNrLCBvbmx5ICcuL2FjY2Vzcy10YXJn
ZXQud21sIiBjYW4gYWNjZXNzIG1lIDwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogZmFzdC93
bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLWdvLWluLWFuY2hvci53bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
ZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLWdvLWluLWFuY2hvci53bWwJKHJldmlzaW9u
IDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stZ28taW4tYW5jaG9yLndtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiA/PgorPCFE
T0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDov
L3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdtbD4KKzxjYXJkIHRpdGxl
PSJBbmNob3IgVGFnIj4KKzxwPiBUZXN0IGZvciBXTUwgZ28gdGFzayBlbmNsb3NlZCB3aXRoIGFu
Y2hvciBlbGVtZW50IDwvcD4KKzxwPiBjbGljayAnTmV4dCBwYWdlJyB0byBnbyB0byB0ZXN0Lndt
bCA8L3A+Cis8cD4KKzxhbmNob3I+TmV4dCBwYWdlPGdvIGhyZWY9Ii4uL3Rlc3Qud21sIi8+IDwv
YW5jaG9yPgorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL3Rhc2stbm9vcC1pbi1kby53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy90YXNrLW5vb3AtaW4tZG8ud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwv
aW50ZXJhY3RpdmVjYXNlcy90YXNrLW5vb3AtaW4tZG8ud21sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEzIEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICIt
Ly9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RU
RC93bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCBpZD0iY2FyZDEiPgorPHA+IFRlc3QgZm9y
IE5vb3AgdGFzayBpbiBkbyBlbGVtZW50IG9mIFdNTC4gPC9wPgorPHA+IElmIGl0IHBhc3Nlcywg
eW91IHNob3VsZCBub3Qgc2VlIHRoZSAiQmFjayIgYnV0dG9uPC9wPgorIDxkbyBuYW1lPSJkbyIg
dHlwZT0iYWNjZXB0IiBsYWJlbD0iQmFjayI+CisgPG5vb3AvPgorIDwvZG8+Cis8L2NhcmQ+IAor
PC93bWw+IApJbmRleDogZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLW5vb3AtaW4tb25l
dmVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLW5v
b3AtaW4tb25ldmVudC53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNh
c2VzL3Rhc2stbm9vcC1pbi1vbmV2ZW50LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBA
QAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9S
VU0vL0RURCBXTUwgMS4xLy9FTiIKKyJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEu
MS54bWwiPgorCis8d21sPgorPGNhcmQ+IAorPHA+IFRlc3QgZm9yIG5vb3AgdGFzayBpbiBvbmV2
ZW50IGVsZW1lbnQgb2YgV01MPC9wPgorPHA+IElmIGl0IHBhc3NlcywgeW91IHdpbGwgc2VlIHRo
ZSBjYXJkIG9uZSBpbiB0aGlzIGRlY2s8L3A+CisgIDxvbmV2ZW50IHR5cGU9Im9uZW50aW1lciI+
CisgIDxub29wLz4KKyAgPC9vbmV2ZW50PgorPHA+IFRoaXMgaXMgQ2FyZCBvbmUgPC9wPgorPC9j
YXJkPiAKKzwvd21sPiAKSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdGFzay1wcmV2
LWluLWFuY2hvci53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90
YXNrLXByZXYtaW4tYW5jaG9yLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvdGFzay1wcmV2LWluLWFuY2hvci53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
MTMgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9X
QVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93
bWxfMS4xLnhtbCI+CisKKzx3bWw+Cis8Y2FyZCB0aXRsZT0iQW5jaG9yIFRhZyI+Cis8cD4gVGVz
dCBmb3IgV01MIHByZXYgdGFzayBlbmNsb3NlZCB3aXRoIGFuY2hvciBlbGVtZW50IDwvcD4KKzxw
PiBjbGljayAncHJldiBwYWdlJyB0byBnbyB0byBwcmV2aW91cyBwYWdlIGlmIGl0IGlzIG5vdCB0
aGUgZmlyc3QgcGFnZSBpbiBoaXN0b3J5PC9wPgorPHA+Cis8YW5jaG9yPlByZXYgcGFnZTxwcmV2
Lz48L2FuY2hvcj4KKzwvcD4KKzwvY2FyZD4KKzwvd21sPgpJbmRleDogZmFzdC93bWwvaW50ZXJh
Y3RpdmVjYXNlcy90YXNrLXJlZnJlc2gtaW4tYW5jaG9yLndtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0
L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Rhc2stcmVmcmVzaC1pbi1hbmNob3Iud21sCShyZXZpc2lv
biAwKQorKysgZmFzdC93bWwvaW50ZXJhY3RpdmVjYXNlcy90YXNrLXJlZnJlc2gtaW4tYW5jaG9y
LndtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNSBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+
Cis8IURPQ1RZUEUgd21sIFBVQkxJQyAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4xLy9FTiIgImh0
dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4xLnhtbCI+Cis8d21sPgorPGNhcmQgdGl0
bGU9IiRUIj4KKyA8cD4gVGVzdCBmb3IgcmVmcmVzaCB0YXNrIHdpdGhpbiBXTUwgYW5jaG9yIGVs
ZW1lbnQuIDxici8+IGNsaWNrICJSZWZyZXNoIiB3aWxsIHJlZnJlc2ggdGhpcyBwYWdlLCBhcyBh
IHJlc3VsdCB0aGUgcGFnZSB0aXRsZSB3aWxsIGJlIHVwZGF0ZWQuIDwvcD4KKyAgPHA+CisgICA8
YW5jaG9yPgorICAgIFJlZnJlc2gKKyAgICA8cmVmcmVzaD4KKyAgICA8c2V0dmFyIG5hbWU9IlQi
IHZhbHVlPSJUZXN0IHJlZnJlc2ggdGFzayIvPgorICAgIDwvcmVmcmVzaD4KKyAgIDwvYW5jaG9y
PgorICA8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvdGVtcGxhdGUtZ28ud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0aXZlY2Fz
ZXMvdGVtcGxhdGUtZ28ud21sCShyZXZpc2lvbiAwKQorKysgZmFzdC93bWwvaW50ZXJhY3RpdmVj
YXNlcy90ZW1wbGF0ZS1nby53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1s
IHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0vL1dBUEZPUlVNLy9EVEQg
V01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQvd21sXzEuMS54bWwiPgor
Cis8d21sPgorPHRlbXBsYXRlPgorIDxkbyBuYW1lPSJnbyIgdHlwZT0iYWNjZXB0IiBsYWJlbD0i
VGVtcGxhdGUgR28iPgorICA8Z28gaHJlZj0iI2NhcmQyIi8+CisgPC9kbz4KKzwvdGVtcGxhdGU+
Cis8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJDYXJkIDEiPgorPHA+VGVzdCBmb3IgdGVtcGxhdGUg
ZWxlbWVudCBpbiBXTUwuIFRlbXBsYXRlIGdvIGJ1dHRvbiBpcyBnbG9iYWw8L3A+Cis8cD4gVGhp
cyBpcyBDYXJkIG9uZSwgY2xpY2sgJ1RlbXBsYXRlIEdvJyB0byBqdW1wIHRvIENhcmQgdHdvPC9w
PgorPC9jYXJkPgorPGNhcmQgaWQ9ImNhcmQyIiB0aXRsZT0iQ2FyZCAyIj4KKzxwPlRoaXMgaXMg
Y2FyZCB0d28uIDxici8+VGhlIGdsb2JhbCB0ZW1wbGF0ZSBHbyBidXR0b24gaXMgc3RpbGwgdmlz
aWJsZSBmb3IgbWU8L3A+Cis8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0
aXZlY2FzZXMvdGVtcGxhdGUtb25ldmVudC53bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gZmFzdC93bWwvaW50
ZXJhY3RpdmVjYXNlcy90ZW1wbGF0ZS1vbmV2ZW50LndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qv
d21sL2ludGVyYWN0aXZlY2FzZXMvdGVtcGxhdGUtb25ldmVudC53bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsMTkgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJM
SUMgIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iCisiaHR0cDovL3d3dy53YXBmb3J1bS5v
cmcvRFREL3dtbF8xLjEueG1sIj4KKzx3bWw+Cis8dGVtcGxhdGU+Cis8b25ldmVudCB0eXBlPSJv
bmVudGVyZm9yd2FyZCI+Cis8Z28gaHJlZj0iI2NhcmQyIi8+Cis8L29uZXZlbnQ+Cis8L3RlbXBs
YXRlPgorPGNhcmQgaWQ9ImNhcmQxIj4KKzxwPlRlc3QgZm9yIHRlbXBsYXRlIGVsZW1lbnQgaW4g
V01MPC9wPgorPHA+V2hlbiBvdGhlciBwYWdlIGVudGVyIGZvcndhcmQgdGhpcyBwYWdlLCBpdCBm
aXJzdCBzaG93IGNhcmQgMSwgYW5kIHRoZW4gaW1tZWRpYXRlbHkganVtcCB0byBjYXJkIDIgYmVj
YXVzZSBvZiB0aGUgdGVtcGxhdGUgb25lbnRlcmZvcndhcmQgZXZlbnQ8L3A+Cis8L2NhcmQ+Cis8
Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJjYXJkIDIiPgorPHA+CitUaGlzIGlzIGNhcmQgMgorPC9w
PgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3RlbXBs
YXRlLW9udGltZXIud21sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMv
dGVtcGxhdGUtb250aW1lci53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFjdGl2
ZWNhc2VzL3RlbXBsYXRlLW9udGltZXIud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3IEBA
Cis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JV
TS8vRFREIFdNTCAxLjEvL0VOIgorImh0dHA6Ly93d3cud2FwZm9ydW0ub3JnL0RURC93bWxfMS4x
LnhtbCI+Cis8d21sPgorPHRlbXBsYXRlIG9udGltZXI9IiNjYXJkMiI+Cis8L3RlbXBsYXRlPgor
PGNhcmQgaWQ9ImNhcmQxIj4KKzxwPlRlc3QgZm9yIHRlbXBsYXRlIG9udGltZXIgZXZlbnQgaW4g
V01MPC9wPgorPHA+VGhpcyBpcyBDYXJkIG9uZSx3ZSB3aWxsIGp1bXAgdG8gY2FyZCAyIGFmdGVy
IDVzIGJlY2F1c2Ugb2YgdGhlIHRlbXBsYXRlIG9udGltZXIgZXZlbnQ8L3A+Cis8dGltZXIgdmFs
dWU9IjUwIi8+Cis8L2NhcmQ+Cis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxlPSJjYXJkIDIiPgorPHA+
CitUaGlzIGlzIGNhcmQgMgorPC9wPgorPC9jYXJkPgorPC93bWw+CkluZGV4OiBmYXN0L3dtbC9p
bnRlcmFjdGl2ZWNhc2VzL3RpbWVyLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL3RpbWVyLndtbAkocmV2aXNpb24gMCkKKysrIGZhc3Qvd21sL2ludGVyYWN0aXZl
Y2FzZXMvdGltZXIud21sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDI2IEBACis8P3htbCB2ZXJz
aW9uPSIxLjAiPz4KKzwhRE9DVFlQRSB3bWwgUFVCTElDICItLy9XQVBGT1JVTS8vRFREIFdNTCAx
LjEvL0VOIiAiaHR0cDovL3d3dy53YXBmb3J1bS5vcmcvRFREL3dtbF8xLjEueG1sIj4KKworPHdt
bD4KKzxoZWFkPgorPG1ldGEgaHR0cC1lcXVpdj0iQ2FjaGUtQ29udHJvbCIgY29udGVudD0ibWF4
LWFnZT0wIi8+Cis8L2hlYWQ+Cis8Y2FyZCBpZD0iY2FyZDEiIG9udGltZXI9IiNjYXJkMiIgdGl0
bGU9IkNhcmQgb25lIj4KKzxwPiBUaGlzIHRlc3QgY2FzZSBpcyB1c2VkIHRvIHRlc3QgdGltZXIg
aW4gV01MIDwvcD4KKyAgICA8dGltZXIgbmFtZT0idGltZTEiIHZhbHVlPSI1MCIvPgorICAgIDxw
PgorICAgIFRoaXMgaXMgY2FyZCBvbmU8YnIvPlRoZSB0aW1lciBpcyB0cmlnZ2VyZWQgYnkgdGhl
IG9udGltZXIgaW50cmluc2ljIGV2ZW50KG9udGltZXIgYXMgYXR0cmlidXRlIG9mIGNhcmQgZWxl
bWVudCk8YnIvPldoZW4gdGhlIHRpbWVyIGlzIHRpbWVvdXQoYWZ0ZXIgNXMpLCB3aWxsIGp1bXAg
dG8gY2FyZCB0d28uCisgICAgPC9wPgorPC9jYXJkPgorCis8Y2FyZCBpZD0iY2FyZDIiIHRpdGxl
PSJDYXJkIHR3byI+CisgICAgPG9uZXZlbnQgdHlwZT0ib250aW1lciI+CisgICAgPGdvIGhyZWY9
IiNjYXJkMSIvPgorICAgIDwvb25ldmVudD4KKyAgICA8dGltZXIgbmFtZT0idGltZXIyIiB2YWx1
ZT0iMzAiLz4KKyAgICA8cD4gCisgICAgVGhpcyBpcyBjYXJkIFR3byE8YnIvPiBUaGUgdGltZXIg
aXMgdHJpZ2dlcmVkIGJ5IHRoZSBvbnRpbWVyIGludHJpbnNpYyBldmVudChvbnRpbWVyIGlzIHNw
ZWNpZmllZCBieSBvbmV2ZW50IGVsZW1lbnQpPGJyLz5XaGVuIHRoZSB0aW1lciBpcyB0aW1lb3V0
KGFmdGVyIDNzKSwgd2lsbCBqdW1wIGJhY2sgdG8gY2FyZCBvbmUuCisgICAgPC9wPgorPC9jYXJk
PgorPC93bWw+CisKSW5kZXg6IGZhc3Qvd21sL2ludGVyYWN0aXZlY2FzZXMvdmFyaWFibGUtc3Vi
c3RpdHV0aW9uLndtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBmYXN0L3dtbC9pbnRlcmFjdGl2ZWNhc2VzL3Zh
cmlhYmxlLXN1YnN0aXR1dGlvbi53bWwJKHJldmlzaW9uIDApCisrKyBmYXN0L3dtbC9pbnRlcmFj
dGl2ZWNhc2VzL3ZhcmlhYmxlLXN1YnN0aXR1dGlvbi53bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsMzAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/PgorPCFET0NUWVBFIHdtbCBQVUJMSUMgIi0v
L1dBUEZPUlVNLy9EVEQgV01MIDEuMS8vRU4iICJodHRwOi8vd3d3LndhcGZvcnVtLm9yZy9EVEQv
d21sXzEuMS54bWwiPgorPHdtbD4KKyA8Y2FyZCBpZD0iY2FyZDEiIHRpdGxlPSJUZXN0IHZhcmlh
YmxlIHN1YnN0aXR1dGlvbiI+CisgPHA+IFRlc3QgZm9yIHZhcmlhYmxlIHN1YnN0aXR1dGlvbiA8
L3A+CisgPHA+IENsaWNrICJSZWZlcnNoIiB0byByZWZyZXNoIHRoZSBjYXJkLCBhbmQgdGhlIHZh
cmFpYmxlIHJlZmVyZW5jZXMgaW4gdGhlIGNhcmQgd2lsbCBiZSBzdWJzdGl0dWVkPC9wPgorICA8
YW5jaG9yPiBSZWZyZXNoIDxici8+CisgIDxyZWZyZXNoPiAKKyAgPHNldHZhciBuYW1lPSJoaSIg
dmFsdWU9ImhlbGxvIi8+CisgIDxzZXR2YXIgbmFtZT0ibmFtZSIgdmFsdWU9IiBZaSBjaGFvIi8+
CisgIDxzZXR2YXIgbmFtZT0ibmFtZTIiIHZhbHVlPSIkKG5hbWU6ZSkiLz4KKyAgPHNldHZhciBu
YW1lPSJuYW1lMyIgdmFsdWU9IiQobmFtZTI6dSkiLz4KKyAgPC9yZWZyZXNoPgorICA8L2FuY2hv
cj4KKyAgPHA+c2V0IGhpID0gImhlbGxvIiwgbmFtZSA9ICIgWWkgY2hhbyIgPGJyLz4KKyAgPCFb
Q0RBVEFbJChoaSksJG5hbWVdXT4gPT4gJChoaSksJG5hbWUgPGJyLz4KKyAgPCFbQ0RBVEFbJGhp
LCQobmFtZTplc0NhcGUpXV0+ID0+ICRoaSwkKG5hbWU6ZXNDYXBlKSA8YnIvPgorICA8IVtDREFU
QVskaGksJChuYW1lOmUpXV0+ID0+ICRoaSwkKG5hbWU6ZSkgPGJyLz4KKyAgPCFbQ0RBVEFbJGhp
LCQobmFtZTpVKV1dPiA9PiAkaGksJChuYW1lOlUpIDxici8+CisgIDwvcD4KKyAgPHA+c2V0IG5h
bWUyID0gJCQobmFtZTplKSA8YnIvPgorICA8IVtDREFUQVskKGhpKSwkKG5hbWUyKV1dPiA9PiAk
KGhpKSwkKG5hbWUyKSA8YnIvPgorICA8IVtDREFUQVskKGhpKSwkJChuYW1lOmUpXV0+ID0+ICQo
aGkpLCQkKG5hbWU6ZSkgPGJyLz4KKyAgPC9wPgorICA8cD5zZXQgbmFtZTMgPSAkJChuYW1lMjp1
KSA8YnIvPgorICA8IVtDREFUQVskKGhpKSwkbmFtZTNdXT4gPT4gJChoaSksJG5hbWUzPGJyLz4K
KyAgPCFbQ0RBVEFbJChoaSksJChuYW1lMzplKV1dPiA9PiAkKGhpKSwkKG5hbWUzOmUpIDxici8+
CisgIDwvcD4KKyA8L2NhcmQ+Cis8L3dtbD4KSW5kZXg6IGZhc3Qvd21sL3Rlc3Qtd2J4bWwud21s
Ywo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBl
Lgpzdm46bWltZS10eXBlID0gYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBmYXN0L3dtbC90ZXN0LXdieG1sLndtbGMKX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWlt
ZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoKQXdScUNITjFjSEJ2Y25RQWYr
YzJBMWRDV0UxTUlBQ0RBQUZnQTFSbGMzUWdabTl5SUZkaGNDQmlhVzVoY25rZ1dFMU1JQUNEQUFG
ZwpBMGxtSUhSb1pTQjBaWE4wSUdOaGMyVWdjR0Z6YzJWekxDQjViM1VnWTJGdUlITmxaU0IwYUdV
Z2RHVjRkQ3dnZDJocFkyZ2diV1ZoCmJuTWdkMko0Yld3Z1ptbHNaU0JqWVc0Z1ltVWdjR0Z5YzJW
a0lHRnVaQ0JrYVhOd2JHRjVJR052Y25KbFkzUnNlUzRBQVFFQgoKSW5kZXg6IGZhc3Qvd21sL3Jl
c291cmNlcy9waWFuby53Ym1wCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2Vk
IGFzIGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJl
YW0KClByb3BlcnR5IGNoYW5nZXMgb246IGZhc3Qvd21sL3Jlc291cmNlcy9waWFuby53Ym1wCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIGFwcGxpY2F0aW9uL29jdGV0LXN0cmVh
bQoKCkFBQWFHdi8rQThELzhmakEvOC9BUVA4d0FVRDhmQUpBOG44Q1FQYWdBVUQzQUFBQTVzQUFn
SlF3QXdCUURBd0FlUU13QUE1QXdBQUQKa0FBQXdPUUFBT0E1QUFEZ0Q0REE0UU1Cd09IQUFjRGh3
Q0hBNGRUaHdQT0g2Y0QvZytuQS8rUGh3UC8vNGNELy8vUEEKCkluZGV4OiBmYXN0L3dtbC9yZXNv
dXJjZXMvc21pbGUuZ2lmCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KQ2Fubm90IGRpc3BsYXk6IGZpbGUgbWFya2VkIGFz
IGEgYmluYXJ5IHR5cGUuCnN2bjptaW1lLXR5cGUgPSBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0K
ClByb3BlcnR5IGNoYW5nZXMgb246IGZhc3Qvd21sL3Jlc291cmNlcy9zbWlsZS5naWYKX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtCgoK
UjBsR09EbGhQQUErQU9NQUFQLy8vLy9Dd3YrTGl3QUFBUCtucC84QUFQL201di80K1AvZDNmL0x5
d0FBLy8vLy8vLy8vLy8vLy8vLwovLy8vL3lIK0VrUmxkbVZzYjNCbGNuTkliMjFsTG1OdmJRQXNB
QUFBQUR3QVBnQUFCUDRReUVtcnZUanJ6YnYvWUNpT1hTQU1hS29LCkFlbEtoRG9VZEUzTHhQc1px
dTMvQlpWQmx6bWtnRWhnNmtDc3hHYko2QStWYXdLTzBxd3RSVVNndEdBZkN1RktmTVBvMnlBeE1r
UFQKYVJRYjVIM0Q0d1B5NTN5L28vWjJmWEIvSERHQ2gwRlZSWHlJZ3dOTUdZeU5qaGs4azRnRFF4
ZVNsM2dZZ1oyREY0YWhnZ09LRTV3KwpDcXl0cFZzREZxQTFyYlcxWUxhc1VyRVVBYk1GdWJsWndi
ZElBeTBUSjBEQk5MWlJ4TTVLQWhTYzBUYkZTTkhNVTd3U3M5alg0T0c2CnErSTEzVmZMcnVya1Ar
YkE3K2pmN2U3cjlRcEo4ZFRzei9Uai9maW03SHVGYVNCQlV3WVAra21vTUE2MVh3MmpFSktnTENL
YUFkTW0KK0xKNEVWa3Fqb2xoMEhtRENQS2NTQUNrU2lZNXRVbkt1elQyeEh3aWFRMU9UWk1ZTE9V
VEJ2UG1EVTJiYUJJRHVFM01TUXBHU01LRAp4dlFsQ2tnWlV1NXN5blFscWtoS2FWSDFaK3pvVEpV
VE85UUJPU2FFRzR0eTJxanFsSmJFV0lKbGRXQzV4TVhLRTdvc3JVaEltbFhpClU3MFZlTXpWSWdS
d1ZCbGRVMXcxbk1HRURCa3NHRXVlVExteVpRd1JBQUE3Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25205</attachid>
            <date>2008-11-16 18:51:40 -0800</date>
            <delta_ts>2009-07-28 08:36:32 -0700</delta_ts>
            <desc>XMLTokenizerLibxml2.patch</desc>
            <filename>XMLTokenizerLibxml2_38361.patch</filename>
            <type>text/plain</type>
            <size>4229</size>
            <attacher name="yichao.yin">yichao.yin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCShyZXZpc2lvbiAzODM2MSkKKysr
IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplckxpYnhtbDIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA3IFNhbXVlbCBXZWluaWcgKHNhbUB3ZWJr
aXQub3JnKQogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBp
dHMgc3Vic2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBl
dGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVG9yY2ggTW9iaWxlIEluYy4gIGh0
dHA6Ly93d3cudG9yY2htb2JpbGUuY29tLwogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCkBAIC01Myw2ICs1
NCwxMyBAQAogI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KICNpbmNsdWRlIDx3dGYvVGhy
ZWFkaW5nLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lmIEVOQUJMRShXTUwpCisjaW5j
bHVkZSAiV01MRWxlbWVudEZhY3RvcnkuaCIKKyNpbmNsdWRlICJXTUxIZWxwZXIuaCIKKyNpbmNs
dWRlICJXTUxQYWdlU3RhdGUuaCIKKyNpbmNsdWRlICJXTUxUZXh0LmgiCisjaW5jbHVkZSAiV01M
VG9rZW5pemVyLmgiCisjZW5kaWYKIAogI2lmIEVOQUJMRShYU0xUKQogI2luY2x1ZGUgPGxpYnhz
bHQveHNsdC5oPgpAQCAtNjMsNiArNzEsMTAgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCisjaWYgRU5BQkxFKFdNTCkKK2Jvb2wgaGFzRG9jVHlwZURlY2wg
PSBmYWxzZTsKKyNlbmRpZgorCiBjbGFzcyBQZW5kaW5nQ2FsbGJhY2tzIHsKIHB1YmxpYzoKICAg
ICBQZW5kaW5nQ2FsbGJhY2tzKCkKQEAgLTcwOCw2ICs3MjAsMTIgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAor
I2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fZG9jLT5pc1dNTERvY3VtZW50KCkgJiYgIWhhc0Rv
Y1R5cGVEZWNsKSB7CisgICAgICAgIHN0YXRpY19jYXN0PFdNTFRva2VuaXplcio+KHRoaXMpLT5o
YW5kbGVXTUxFcnJvcihEb2NUeXBlRGVjbGFyYXRpb25NaXNzRXJyb3IpOworICAgICAgICByZXR1
cm47CisgICAgfQorI2VuZGlmCiAgICAgbV9zYXdGaXJzdEVsZW1lbnQgPSB0cnVlOwogCiAgICAg
ZXhpdFRleHQoKTsKQEAgLTcyMyw2ICs3NDEsMTIgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0
RWxlbWVudE5zKGNvbnN0IAogICAgICAgICAgICAgdXJpID0gbV9kZWZhdWx0TmFtZXNwYWNlVVJJ
OwogICAgIH0KIAorI2lmIEVOQUJMRShXTUwpCisgICAgLy8gY2hlY2sgaWYgdGhlcmUgYXJlIG1v
cmUgdGhhbiBvbmUgYWNjZXNzIGVsZW1lbnQKKyAgICBpZiAobV9kb2MtPmlzV01MRG9jdW1lbnQo
KSAmJiBtX2RvYy0+cGFnZSgpICYmIGxvY2FsTmFtZSA9PSAiYWNjZXNzIikKKyAgICAgICAgbV9k
b2MtPnBhZ2UoKS0+d21sUGFnZVN0YXRlKCktPnNldE5lZWRDaGVja0RlY2tBY2Nlc3ModHJ1ZSk7
CisjZW5kaWYKKyAKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBRdWFsaWZpZWROYW1l
IHFOYW1lKHByZWZpeCwgbG9jYWxOYW1lLCB1cmkpOwogICAgIFJlZlB0cjxFbGVtZW50PiBuZXdF
bGVtZW50ID0gbV9kb2MtPmNyZWF0ZUVsZW1lbnQocU5hbWUsIHRydWUsIGVjKTsKQEAgLTc0Nyw2
ICs3NzEsMTEgQEAgdm9pZCBYTUxUb2tlbml6ZXI6OnN0YXJ0RWxlbWVudE5zKGNvbnN0IAogICAg
ICAgICByZXR1cm47CiAgICAgfQogCisjaWYgRU5BQkxFKFdNTCkKKyAgICBpZihtX2RvYy0+aXNX
TUxEb2N1bWVudCgpKQorICAgICAgICBzdGF0aWNfY2FzdDxXTUxUb2tlbml6ZXIqPih0aGlzKS0+
dXBkYXRlQXR0cnNJZk5lZWRlZChuZXdFbGVtZW50LmdldCgpLCBsb2NhbE5hbWUpOworI2VuZGlm
CisKICAgICBpZiAoanNQcm94eSkKICAgICAgICAganNQcm94eS0+c2V0RXZlbnRIYW5kbGVyTGlu
ZW5vKDApOwogCkBAIC03NjQsNiArNzkzLDExIEBAIHZvaWQgWE1MVG9rZW5pemVyOjpzdGFydEVs
ZW1lbnROcyhjb25zdCAKICAgICBzZXRDdXJyZW50Tm9kZShuZXdFbGVtZW50LmdldCgpKTsKICAg
ICBpZiAobV92aWV3ICYmICFuZXdFbGVtZW50LT5hdHRhY2hlZCgpKQogICAgICAgICBuZXdFbGVt
ZW50LT5hdHRhY2goKTsKKworI2lmIEVOQUJMRShXTUwpCisgICAgaWYobV9kb2MtPmlzV01MRG9j
dW1lbnQoKSAmJiBzdGF0aWNfY2FzdDxXTUxUb2tlbml6ZXIqPih0aGlzKS0+aGFzRXJyb3IoKSkK
KyAgICAgICAgc3RhdGljX2Nhc3Q8V01MVG9rZW5pemVyKj4odGhpcyktPmhhbmRsZVdNTEVycm9y
KCk7CisjZW5kaWYKIH0KIAogdm9pZCBYTUxUb2tlbml6ZXI6OmVuZEVsZW1lbnROcygpCkBAIC04
MjYsNiArODYwLDE0IEBAIHZvaWQgWE1MVG9rZW5pemVyOjpjaGFyYWN0ZXJzKGNvbnN0IHhtbEMK
ICAgICB9CiAgICAgCiAgICAgaWYgKG1fY3VycmVudE5vZGUtPmlzVGV4dE5vZGUoKSB8fCBlbnRl
clRleHQoKSkKKyNpZiBFTkFCTEUoV01MKQorICAgIGlmIChtX2RvYy0+aXNXTUxEb2N1bWVudCgp
KSB7CisgICAgICAgIFdNTFRleHQqIHRleHQgPSBzdGF0aWNfY2FzdDxXTUxUZXh0Kj4obV9jdXJy
ZW50Tm9kZSk7CisgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOworICAgICAgICB0ZXh0LT5h
cHBlbmREYXRhKHRvU3RyaW5nKHMsIGxlbiksIGVjKTsKKyAgICAgICAgdGV4dC0+dXBkYXRlRGF0
YUlmTmVlZGVkKCk7CisgICAgfSBlbHNlCisjZW5kaWYKICAgICAgICAgbV9idWZmZXJlZFRleHQu
YXBwZW5kKHMsIGxlbik7CiB9CiAKQEAgLTk1MCw2ICs5OTIsMTkgQEAgdm9pZCBYTUxUb2tlbml6
ZXI6OmludGVybmFsU3Vic2V0KGNvbnN0IAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAor
I2lmIEVOQUJMRShXTUwpCisgICAgaWYgKG1fZG9jKSB7CisgICAgICAgIFN0cmluZyBleHRJZCA9
IHRvU3RyaW5nKGV4dGVybmFsSUQpOworICAgICAgICBpZiAobV9kb2MtPmlzV01MRG9jdW1lbnQo
KQorICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMy8vRU4i
CisgICAgICAgICAgICAmJiBleHRJZCAhPSAiLS8vV0FQRk9SVU0vL0RURCBXTUwgMS4yLy9FTiIK
KyAgICAgICAgICAgICYmIGV4dElkICE9ICItLy9XQVBGT1JVTS8vRFREIFdNTCAxLjEvL0VOIgor
ICAgICAgICAgICAgJiYgZXh0SWQgIT0gIi0vL1dBUEZPUlVNLy9EVEQgV01MIDEuMC8vRU4iKQor
ICAgICAgICAgICAgaGFuZGxlRXJyb3IoZmF0YWwsICJJbnZhbGlkIERURCBQdWJsaWMgSUQiLCBs
aW5lTnVtYmVyKCksIGNvbHVtbk51bWJlcigpKTsKKyAgICAgICAgZWxzZSBpZiAobV9kb2MtPmlz
V01MRG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGhhc0RvY1R5cGVEZWNsID0gdHJ1ZTsKKyAgICB9
CisjZW5kaWYKICAgICBpZiAobV9kb2MpCiAgICAgICAgIG1fZG9jLT5hZGRDaGlsZChEb2N1bWVu
dFR5cGU6OmNyZWF0ZShtX2RvYywgdG9TdHJpbmcobmFtZSksIHRvU3RyaW5nKGV4dGVybmFsSUQp
LCB0b1N0cmluZyhzeXN0ZW1JRCkpKTsKIH0KQEAgLTEwODYsNyArMTE0MSwxMSBAQCBzdGF0aWMg
eG1sRW50aXR5UHRyIGdldEVudGl0eUhhbmRsZXIodm9pCiAgICAgfQogCiAgICAgZW50ID0geG1s
R2V0RG9jRW50aXR5KGN0eHQtPm15RG9jLCBuYW1lKTsKKyNpZiBFTkFCTEUoV01MKQorICAgIGlm
ICghZW50ICYmIChnZXRUb2tlbml6ZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVudCgpIHx8IGdl
dFRva2VuaXplcihjbG9zdXJlKS0+ZG9jdW1lbnQoKS0+aXNXTUxEb2N1bWVudCgpKSkgeworI2Vs
c2UKICAgICBpZiAoIWVudCAmJiBnZXRUb2tlbml6ZXIoY2xvc3VyZSktPmlzWEhUTUxEb2N1bWVu
dCgpKSB7CisjZW5kaWYKICAgICAgICAgZW50ID0gZ2V0WEhUTUxFbnRpdHkobmFtZSk7CiAgICAg
ICAgIGlmIChlbnQpCiAgICAgICAgICAgICBlbnQtPmV0eXBlID0gWE1MX0lOVEVSTkFMX0dFTkVS
QUxfRU5USVRZOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>