<?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>20031</bug_id>
          
          <creation_ts>2008-07-13 21:29:43 -0700</creation_ts>
          <short_desc>Implement ES 3.1 JSON object</short_desc>
          <delta_ts>2011-04-27 03:24:16 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://wiki.ecmascript.org/doku.php?id=es3.1:es3.1_proposal_working_draft</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>ES5</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>26249</dependson>
    
    <dependson>26587</dependson>
    
    <dependson>26592</dependson>
          <blocked>25419</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Barth">abarth</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>arv</cc>
    
    <cc>bradneuberg</cc>
    
    <cc>cedricv</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>dglazkov</cc>
    
    <cc>emacemac7</cc>
    
    <cc>erights</cc>
    
    <cc>gavin.sharp</cc>
    
    <cc>ggaren</cc>
    
    <cc>marcus</cc>
    
    <cc>mike</cc>
    
    <cc>mjs</cc>
    
    <cc>ml</cc>
    
    <cc>ojan</cc>
    
    <cc>rik</cc>
    
    <cc>sam</cc>
    
    <cc>sriram.neelakandan</cc>
    
    <cc>timothy</cc>
    
    <cc>tony</cc>
    
    <cc>webmaster</cc>
    
    <cc>zapperlott</cc>
    
    <cc>zwarich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>85873</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-13 21:29:43 -0700</bug_when>
    <thetext>ECMAScript 3.1 provides support for native parsing and stringifying of JSON objects.  It looks like IE8 and Firefox 3.1 are going to support this as well.  Maciej wrote on es4-discuss that we would gladly accept patches for ES 3.1 features.  Let&apos;s get to it!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85874</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-13 21:31:15 -0700</bug_when>
    <thetext>This will likely take more that one patch, so it might make sense to use this as a meta bug.  I&apos;m interested in making this happen, so I thought I&apos;d start with the easy bits.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85880</commentid>
    <comment_count>2</comment_count>
      <attachid>22263</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-14 02:53:05 -0700</bug_when>
    <thetext>Created attachment 22263
Work-in-progress: Step 1: Add skeleton JSON object

I&apos;m not sure if we want to start landing these patches until we get some level of basic functionality.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85881</commentid>
    <comment_count>3</comment_count>
      <attachid>22264</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-14 02:55:11 -0700</bug_when>
    <thetext>Created attachment 22264
Work-in-progress: Step 2: Beginnings of JSON parser

This parser knows how to eat JSON and how not to eat non-JSON.  The next step is to actually build a JSObject.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85882</commentid>
    <comment_count>4</comment_count>
      <attachid>22265</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-14 03:10:27 -0700</bug_when>
    <thetext>Created attachment 22265
Work-in-progress: Step 2: Beginnings of JSON parser

Fix a few bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85911</commentid>
    <comment_count>5</comment_count>
      <attachid>22271</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-14 15:54:44 -0700</bug_when>
    <thetext>Created attachment 22271
Work-in-progress: Step 2: JSON parser front-end

Here is a reasonable front-end for the JSON parser.  We&apos;re still missing the back end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85912</commentid>
    <comment_count>6</comment_count>
      <attachid>22272</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-14 15:57:32 -0700</bug_when>
    <thetext>Created attachment 22272
Work-in-progress: Step 3: Parser frond-end tests

Tests for the parser front end.  These test cases come from Firefox.  Should these tests be in the JavaScriptCore/tests directory?  I wasn&apos;t sure (1) how to add tests there or (2) how to get these exact characters to throw at the parser without XMLHttpRequest.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85919</commentid>
    <comment_count>7</comment_count>
      <attachid>22263</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-07-14 17:16:02 -0700</bug_when>
    <thetext>Comment on attachment 22263
Work-in-progress: Step 1: Add skeleton JSON object

We usually don&apos;t use a static property map in JSC for things like this, and instead put the functions directly in the Object it self, see DateConstructor for an example of how do this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85927</commentid>
    <comment_count>8</comment_count>
      <attachid>22277</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-15 01:01:51 -0700</bug_when>
    <thetext>Created attachment 22277
Work-in-progress: Step 4: Parser back-end with tests

Here is a back-end for the parser.  Sam, I&apos;ll address your comment next time I rebase the whole patch stream.  I&apos;m going to ask Doug if he has more test cases.

Here is the Firefox native JSON bug:
https://bugzilla.mozilla.org/show_bug.cgi?id=408838</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85930</commentid>
    <comment_count>9</comment_count>
      <attachid>22271</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-07-15 02:46:51 -0700</bug_when>
    <thetext>Comment on attachment 22271
Work-in-progress: Step 2: JSON parser front-end

I didn&apos;t attempt to really review this (and the patch is not up for review anyway :) ), but here are some comments I had while skimming over.

+static inline void ws(State* state)

This definitely needs a better name, and ideally, should share code with other isWhitespace/skipWhitespace functions we have (e.g. Lexer::isWhiteSpace, isASCIIWhitespace).

+    return paddedLiteral(state, L&apos;[&apos;);

On the Mac, wchar_t is 32-bit, so we cannot use this type and its associated compiler features.

+    static const UChar falseLiteral[] = { &apos;f&apos;, &apos;a&apos;, &apos;l&apos;, &apos;s&apos;, &apos;e&apos;, &apos;\0&apos; };

I&apos;m not 100% sure, but I suspect that this array may be initialized at runtime, not compile time. If so, this initialization is not thread safe.

+        while(digit(state))

There should be a space after while.

A general question: what is the reason for writing a custom parser, and not using bison?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>85933</commentid>
    <comment_count>10</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-07-15 03:27:38 -0700</bug_when>
    <thetext>I discussed this with Sam, Geoff and Oliver at the office today. Most of us agreed that using the existing JavaScriptCore lexer along with a bison grammar would be a better approach than an ad-hoc custom parser. Geoff also argued that it would be better to use the full JS parser and then study the syntax tree to ensure that it has no JSON violations, but the rest of us thought the existing lexer plus a custom grammar would work better. (In theory though, I guess it could create the same kinds of AST nodes as the full parser and thus the back end could just consist of compiling and executing the resulting syntax tree. Or alternately the grammar could directly create JS values and combine them, but there might be GC problems with this approach).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86199</commentid>
    <comment_count>11</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-17 03:59:29 -0700</bug_when>
    <thetext>&gt; I discussed this with Sam, Geoff and Oliver at the office today. Most of us
&gt; agreed that using the existing JavaScriptCore lexer along with a bison grammar
&gt; would be a better approach than an ad-hoc custom parser.

Unfortunately, we can&apos;t reuse the existing lexer because JSON has different lexing rules.  For example, JSON only supports some of JavaScript string escape sequences.

&gt; Geoff also argued that
&gt; it would be better to use the full JS parser and then study the syntax tree to
&gt; ensure that it has no JSON violations, but the rest of us thought the existing
&gt; lexer plus a custom grammar would work better.

Just looking at the syntax tree is far too late.  There are many requirements of the JSON RFC that are lost at that point.

I&apos;ve made some amount of progress with a bison grammar for a new lexer.  I&apos;ll post a patch once I get sufficiently far to be able to handle simple examples.  It is unclear whether this approach will yield a simpler parser, but the result may be more maintainable as you folks are already used to maintaining a bison parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>86820</commentid>
    <comment_count>12</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-07-24 00:06:00 -0700</bug_when>
    <thetext>I&apos;ve gotten distracted with other things.  It will probably be a bit before I can work on this more.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95401</commentid>
    <comment_count>13</comment_count>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2008-10-15 07:28:52 -0700</bug_when>
    <thetext>It might be good to have a common parser that is used both from script and C++ side, for things like Inspector JSON transport (http://trac.webkit.org/wiki/ProposedWebInspectorRearchitecting).

I am interested in helping out with this patch, but may need guidance :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102214</commentid>
    <comment_count>14</comment_count>
    <who name="Sriram Neelakandan">sriram.neelakandan</who>
    <bug_when>2008-12-11 00:51:12 -0800</bug_when>
    <thetext>Is there any help that is required in getting this to trunk ?
Please do let me know.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102226</commentid>
    <comment_count>15</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2008-12-11 06:26:19 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; Is there any help that is required in getting this to trunk ?
&gt; Please do let me know.

The existing patches need to be fixed and attached for review.  See this web page for more details about the process (except in this case, you have some patches to start from):

http://webkit.org/coding/contributing.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102250</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2008-12-11 11:01:43 -0800</bug_when>
    <thetext>Per above comments, the consensus seems to be that the existing patches go in the wrong direction, and we&apos;d prefer not to have a custom parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>102251</commentid>
    <comment_count>17</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2008-12-11 11:09:55 -0800</bug_when>
    <thetext>&gt; Per above comments, the consensus seems to be that the existing patches go in
&gt; the wrong direction, and we&apos;d prefer not to have a custom parser.

Yes, I was working on a Yacc-based parser (which is what we use for JavaScript), but I got distracted by other things.  Please feel free to steal this bug.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>114671</commentid>
    <comment_count>18</comment_count>
      <attachid>28827</attachid>
    <who name="Husam Senussi">husam</who>
    <bug_when>2009-03-21 19:02:33 -0700</bug_when>
    <thetext>Created attachment 28827
Patch to Add JSON Object

The patch include  the changes for adding JSON object and test cases, There are few thing on the code could be changed.

1. Build the object while parsing instead of the syntax tree.
2. Move some of the code in JSONLexer to common object so it can be used by both JS lexer and JSON.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>115740</commentid>
    <comment_count>19</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2009-03-29 09:50:54 -0700</bug_when>
    <thetext>I&apos;ll try to review this soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119465</commentid>
    <comment_count>20</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2009-04-30 09:00:27 -0700</bug_when>
    <thetext>It would be good to review/land this soon, as we will need a JSON parser for bug 25419.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>119480</commentid>
    <comment_count>21</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-04-30 09:54:05 -0700</bug_when>
    <thetext>Native JSON support was recently added to V8.  It might be worthwhile cross-testing.  Here are some tests from V8:

http://code.google.com/p/v8/source/browse/trunk/test/mjsunit/json.js</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120642</commentid>
    <comment_count>22</comment_count>
      <attachid>28827</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-05-11 05:58:49 -0700</bug_when>
    <thetext>Comment on attachment 28827
Patch to Add JSON Object

This patch uses tabs, which is against the style guidelines (and will cause the commit to fail).

Please remove the tabs and re-post.  Also, I think we could review and land the tests first and then review the code.  Or at least I think they should be reviewed separately to make the review smaller.

r- for the tabs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120735</commentid>
    <comment_count>23</comment_count>
    <who name="Husam Senussi">husam</who>
    <bug_when>2009-05-11 15:18:14 -0700</bug_when>
    <thetext>I will remove tabs and post separate  patch for the test cases.

But it looks like  my changes not compatible with latest version of the source code, so I need to fix them first.

 </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121130</commentid>
    <comment_count>24</comment_count>
      <attachid>30293</attachid>
    <who name="Husam Senussi">husam</who>
    <bug_when>2009-05-13 16:01:15 -0700</bug_when>
    <thetext>Created attachment 30293
JSON test cases pacth

Test cases for JSON object, I will try and include google test case</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>121137</commentid>
    <comment_count>25</comment_count>
      <attachid>30295</attachid>
    <who name="Husam Senussi">husam</who>
    <bug_when>2009-05-13 16:28:19 -0700</bug_when>
    <thetext>Created attachment 30295
Patch to add JSON object - remove tabs

Tab is now removed from the source files, Makefiles still have the tabs because it&apos;s required</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122077</commentid>
    <comment_count>26</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-05-19 23:13:08 -0700</bug_when>
    <thetext>I have been looking at the JSON lexer grammar recently and have realised the the specified JSON lexer is much more restrictive than the standard lexer used by JS.  This means that we really need to consider whether we use a strict json lexer or the much more forgiving JS lexer in JSC, using the strict JSON lexer seems &quot;nice&quot;, but the standard json2.js library just uses eval which could mean that the strict lexer will result in failures that are not present in when using the non-native eval based implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122083</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-05-19 23:44:47 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; the standard json2.js library just uses eval which could mean
&gt; that the strict lexer will result in failures that are not present in when
&gt; using the non-native eval based implementation.

I recommend testing Firefox 3.5 and IE8 to see how their lexer behaves.  We should match them as closely as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122107</commentid>
    <comment_count>28</comment_count>
    <who name="Husam Senussi">husam</who>
    <bug_when>2009-05-20 02:20:09 -0700</bug_when>
    <thetext>&gt; I recommend testing Firefox 3.5 and IE8 to see how their lexer behaves.  We
&gt; should match them as closely as possible.
&gt; 

I did test firefox 3.5 and they are using strict lexer, but I&apos;m not sure about IE8 I don&apos;t realy use windows.

I had look at json2.js it looks like the code use regular expression on top of  eval for restriction but one thing is not clear wither it allows use of single quote with members name (i.e  {&apos;x&apos;:1}).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122180</commentid>
    <comment_count>29</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-05-20 09:16:03 -0700</bug_when>
    <thetext>&gt; I had look at json2.js it looks like the code use regular expression on top of 
&gt; eval for restriction but one thing is not clear wither it allows use of single
&gt; quote with members name (i.e  {&apos;x&apos;:1}).

json2 is much more lax than we want to be.  We should be as strict as IE8 and Firefox 3.5.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122766</commentid>
    <comment_count>30</comment_count>
      <attachid>30293</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-05-22 19:42:03 -0700</bug_when>
    <thetext>Comment on attachment 30293
JSON test cases pacth

Okay, while in general i like the tests this patch does i&apos;d like the testcases to use our &quot;standard&quot; js testcase model then tryBackend becomes
shouldBe(&quot;JSON2.stringify(JSON2.parse(text))&quot;, &quot;JSON.stringify(JSON.parse(text))&quot;), however this is optional (for now ;) )

I&apos;d also like a few tests to cover large inputs, as well as use of the replacement/reviver functions, specifically to test
 * which reviver functions get called; and
 * the order in which reviver functions are called

I&apos;ll r- this patch due to the additional testing that i&apos;d like, but by and large i like what&apos;s currently here, it just needs to be more complete.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122768</commentid>
    <comment_count>31</comment_count>
      <attachid>30295</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-05-22 19:50:36 -0700</bug_when>
    <thetext>Comment on attachment 30295
Patch to add JSON object - remove tabs

I don&apos;t like this patch, while the JSON object itself is fine, i don&apos;t believe it is necessary to use a yacc parser -- given the simplicity of the JSON grammar i believe a hand coded recursive descent parser is likely to be faster, with a little care i believe this will also make it easier to have the parser avoid ever creating an AST in the case where we do not have custom reviver functions.

(Addtionally this particular grammar tracks a lot of information that we track in the normal JS grammar which is of no value to the JSON parser) -- I&apos;m also not entirely sure i like the lexer, but certainly i prefer it over the grammar implementation.  We can in fact probably just use the literal parser we preflight eval with to achieve this.

Sorry for the delay in reviewing.

If you want to discuss more directly i tend to be on #webkit as olliej fairly continuously.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122867</commentid>
    <comment_count>32</comment_count>
    <who name="Husam Senussi">husam</who>
    <bug_when>2009-05-23 10:00:41 -0700</bug_when>
    <thetext>I agree with your comments but yhe use of bison parser instead of custom parser was based on the Comment #10 From Maciej Stachowiak and Comment #16 From Alexey Proskuryakov.

(In reply to comment #31)
&gt; (From update of attachment 30295 [review])
&gt; I don&apos;t like this patch, while the JSON object itself is fine, i don&apos;t believe
&gt; it is necessary to use a yacc parser -- given the simplicity of the JSON
&gt; grammar i believe a hand coded recursive descent parser is likely to be faster,
&gt; with a little care i believe this will also make it easier to have the parser
&gt; avoid ever creating an AST in the case where we do not have custom reviver
&gt; functions.
&gt; 
&gt; (Addtionally this particular grammar tracks a lot of information that we track
&gt; in the normal JS grammar which is of no value to the JSON parser) -- I&apos;m also
&gt; not entirely sure i like the lexer, but certainly i prefer it over the grammar
&gt; implementation.  We can in fact probably just use the literal parser we
&gt; preflight eval with to achieve this.
&gt; 
&gt; Sorry for the delay in reviewing.
&gt; 
&gt; If you want to discuss more directly i tend to be on #webkit as olliej fairly
&gt; continuously.
&gt; 

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122941</commentid>
    <comment_count>33</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2009-05-24 04:30:41 -0700</bug_when>
    <thetext>It&apos;s true that Alexey and I originally suggested that. But seeing the patch, and in light of Oliver&apos;s recent fast literal parser, I think Oliver is correct.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124246</commentid>
    <comment_count>34</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-03 16:48:07 -0700</bug_when>
    <thetext>I&apos;ve locally got the literal parser to the point where it is conformant with JSON spec behaviour, and i&apos;m working on getting Husam&apos;s JSON object hooked up to it.

Will put initial patch up in a few hours </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127576</commentid>
    <comment_count>35</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-22 22:49:50 -0700</bug_when>
    <thetext>JSON is now complete, made up with
r44550
r44813
r44923
r44924
r44929
r44931
r44968
r44974</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22263</attachid>
            <date>2008-07-14 02:53:05 -0700</date>
            <delta_ts>2008-07-14 02:53:05 -0700</delta_ts>
            <desc>Work-in-progress: Step 1: Add skeleton JSON object</desc>
            <filename>0001-JavaScriptCore.patch</filename>
            <type>text/plain</type>
            <size>19140</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">RnJvbSBhNGI2NjUyNDhiZWJhNmMwYThlMTYzOGYyMzFjNDE5ZjdmMjQ5YWQwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGFtIEJhcnRoIDxhYmFydGhAd2Via2l0Lm9yZz4KRGF0ZTog
U3VuLCAxMyBKdWwgMjAwOCAyMzowNjo1NSAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIEphdmFTY3Jp
cHRDb3JlOgoKMjAwOC0wNy0xMyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgoKICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KCiAgICAgICAgQWRkIHNrZWxldG9uIEpT
T04gb2JqZWN0LgoKICAgICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CiAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnByaToKICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2o6CiAg
ICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgogICAgICAg
ICogSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbDoKICAgICAgICAqIGtqcy9BbGxJbk9uZUZpbGUu
Y3BwOgogICAgICAgICoga2pzL0V4ZWNTdGF0ZS5oOgogICAgICAgICoga2pzL0pTR2xvYmFsRGF0
YS5jcHA6CiAgICAgICAgKEtKUzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgogICAgICAg
IChLSlM6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6CiAgICAgICAgKiBranMvSlNHbG9i
YWxEYXRhLmg6CiAgICAgICAgKiBranMvSlNHbG9iYWxPYmplY3QuY3BwOgogICAgICAgIChLSlM6
OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6CiAgICAgICAgKiBranMvSlNPTk9iamVjdC5jcHA6IEFk
ZGVkLgogICAgICAgIChLSlM6Oik6CiAgICAgICAgKEtKUzo6SlNPTk9iamVjdDo6SlNPTk9iamVj
dCk6CiAgICAgICAgKEtKUzo6SlNPTk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKICAgICAg
ICAoS0pTOjpKU09OT2JqZWN0OjpnZXRWYWx1ZVByb3BlcnR5KToKICAgICAgICAoS0pTOjpKU09O
UHJvdG9GdW5jUGFyc2UpOgogICAgICAgICoga2pzL0pTT05PYmplY3QuaDogQWRkZWQuCiAgICAg
ICAgKEtKUzo6SlNPTk9iamVjdDo6Y2xhc3NJbmZvKToKCkxheW91dFRlc3RzOgoKMjAwOC0wNy0x
MyAgQWRhbSBCYXJ0aCAgPGFiYXJ0aEB3ZWJraXQub3JnPgoKICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KCiAgICAgICAgVXBkYXRlIHdpbmRvdyBvYmplY3QgZW51bWVyYXRpb24g
dG8gc2hvdyBKU09OIG9iamVjdC4KCiAgICAgICAgKiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXBy
b3BlcnRpZXMtZXhwZWN0ZWQudHh0OgotLS0KIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHwgICAyOSArKysrKysrCiBKYXZhU2NyaXB0Q29yZS9EZXJp
dmVkU291cmNlcy5tYWtlICAgICAgICAgICAgICAgICB8ICAgIDEgKwogSmF2YVNjcmlwdENvcmUv
R05VbWFrZWZpbGUuYW0gICAgICAgICAgICAgICAgICAgICAgfCAgICAzICsKIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnByaSAgICAgICAgICAgICAgICAgIHwgICAgMiArCiAuLi4vSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qICAgICAgICAgICB8ICAgMTIgKysrCiAu
Li4vSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiAgICAgICB8ICAgIDQg
KwogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbCAgICAgICAgICAgfCAg
ICAxICsKIEphdmFTY3JpcHRDb3JlL2tqcy9BbGxJbk9uZUZpbGUuY3BwICAgICAgICAgICAgICAg
IHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmggICAgICAgICAgICAgICAg
ICAgICB8ICAgIDEgKwogSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5jcHAgICAgICAg
ICAgICAgICAgfCAgICA1ICsKIEphdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbERhdGEuaCAgICAg
ICAgICAgICAgICAgIHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmplY3Qu
Y3BwICAgICAgICAgICAgICB8ICAgIDIgKwogSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3Qu
Y3BwICAgICAgICAgICAgICAgICAgfCAgIDc5ICsrKysrKysrKysrKysrKysrKysrCiBKYXZhU2Ny
aXB0Q29yZS9ranMvSlNPTk9iamVjdC5oICAgICAgICAgICAgICAgICAgICB8ICAgNDEgKysrKysr
KysrKwogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
fCAgICA4ICsrCiAuLi4vZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVk
LnR4dCB8ICAgIDEgKwogMTYgZmlsZXMgY2hhbmdlZCwgMTkxIGluc2VydGlvbnMoKyksIDAgZGVs
ZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmpl
Y3QuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3Qu
aAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwppbmRleCA2YTA2NTc4Li42MDhlNjVkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MzIgQEAKKzIwMDgtMDctMTMgIEFkYW0gQmFydGggIDxhYmFydGhAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgc2tlbGV0b24g
SlNPTiBvYmplY3QuCisKKyAgICAgICAgKiBEZXJpdmVkU291cmNlcy5tYWtlOgorICAgICAgICAq
IEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnByaToKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNw
cm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbDoKKyAgICAgICAgKiBranMvQWxs
SW5PbmVGaWxlLmNwcDoKKyAgICAgICAgKiBranMvRXhlY1N0YXRlLmg6CisgICAgICAgICoga2pz
L0pTR2xvYmFsRGF0YS5jcHA6CisgICAgICAgIChLSlM6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKToKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAg
ICAgKiBranMvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgICoga2pzL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEtKUzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToKKyAgICAgICAgKiBranMv
SlNPTk9iamVjdC5jcHA6IEFkZGVkLgorICAgICAgICAoS0pTOjopOgorICAgICAgICAoS0pTOjpK
U09OT2JqZWN0OjpKU09OT2JqZWN0KToKKyAgICAgICAgKEtKUzo6SlNPTk9iamVjdDo6Z2V0T3du
UHJvcGVydHlTbG90KToKKyAgICAgICAgKEtKUzo6SlNPTk9iamVjdDo6Z2V0VmFsdWVQcm9wZXJ0
eSk6CisgICAgICAgIChLSlM6OkpTT05Qcm90b0Z1bmNQYXJzZSk6CisgICAgICAgICoga2pzL0pT
T05PYmplY3QuaDogQWRkZWQuCisgICAgICAgIChLSlM6OkpTT05PYmplY3Q6OmNsYXNzSW5mbyk6
CisKIDIwMDgtMDctMTMgIEFkYSBDaGFuICA8YWRhY2hhbkBhcHBsZS5jb20+CiAKICAgICAgICAg
V2luZG93cyBidWlsZCBmaXg6IEFkZCB3dGYvUmVmQ291bnRlZExlYWtDb3VudGVyIHRvIHRoZSBw
cm9qZWN0LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBi
L0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZDcwZjYyOS4uN2E1MDVh
NyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9K
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0zOCw2ICszOCw3IEBAIGFsbCA6
IFwKICAgICBEYXRlUHJvdG90eXBlLmx1dC5oIFwKICAgICBncmFtbWFyLmNwcCBcCiAgICAgbGV4
ZXIubHV0LmggXAorICAgIEpTT05PYmplY3QubHV0LmggXAogICAgIE1hdGhPYmplY3QubHV0Lmgg
XAogICAgIE51bWJlckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBSZWdFeHBDb25zdHJ1Y3Rvci5s
dXQuaCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9HTlVtYWtlZmlsZS5hbSBiL0phdmFT
Y3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IGRkN2I1MjEuLjk1YjIxOGYgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCisrKyBiL0phdmFTY3JpcHRDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC0yMCw2ICsyMCw3IEBAIGphdmFzY3JpcHRjb3JlX2hfYXBpICs9IFwK
IGphdmFzY3JpcHRjb3JlX2J1aWx0X25vc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUva2pz
L0FycmF5UHJvdG90eXBlLmx1dC5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ranMvRGF0ZVByb3RvdHlw
ZS5sdXQuaCBcCisJSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QubHV0LmggXAogCUphdmFT
Y3JpcHRDb3JlL2tqcy9NYXRoT2JqZWN0Lmx1dC5oIFwKIAlKYXZhU2NyaXB0Q29yZS9ranMvTnVt
YmVyQ29uc3RydWN0b3IubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL2tqcy9SZWdFeHBDb25zdHJ1
Y3Rvci5sdXQuaCBcCkBAIC0xMTUsNiArMTE2LDcgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJSmF2YVNjcmlwdENvcmUva2pzL0pTTG9jay5jcHAgXAogCUphdmFTY3JpcHRDb3JlL2tq
cy9KU051bWJlckNlbGwuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ranMvSlNPYmplY3QuY3BwIFwK
KwlKYXZhU2NyaXB0Q29yZS9ranMvSlNPTk9iamVjdC5jcHAgXAogCUphdmFTY3JpcHRDb3JlL2tq
cy9KU1N0cmluZy5jcHAgXAogCUphdmFTY3JpcHRDb3JlL2tqcy9KU1ZhbHVlLmNwcCBcCiAJSmF2
YVNjcmlwdENvcmUva2pzL0pTVmFyaWFibGVPYmplY3QuY3BwIFwKQEAgLTIzNSw2ICsyMzcsNyBA
QCBQcm9ncmFtc19qc2NfTERBREQgPSBcCiBDTEVBTkZJTEVTICs9IFwKIAlKYXZhU2NyaXB0Q29y
ZS9ranMvQXJyYXlQcm90b3R5cGUubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL2tqcy9EYXRlUHJv
dG90eXBlLmx1dC5oIFwKKwlKYXZhU2NyaXB0Q29yZS9ranMvSlNPTk9iamVjdC5sdXQuaCBcCiAJ
SmF2YVNjcmlwdENvcmUva2pzL01hdGhPYmplY3QubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL2tq
cy9OdW1iZXJDb25zdHJ1Y3Rvci5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUva2pzL1JlZ0V4cENv
bnN0cnVjdG9yLmx1dC5oIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnByaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQppbmRleCBiMzVmYTk1
Li4wYzJhYzQwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkK
KysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCkBAIC0xOCw2ICsxOCw3IEBA
IExVVF9GSUxFUyArPSBcCiAgICAga2pzL051bWJlckNvbnN0cnVjdG9yLmNwcCBcCiAgICAga2pz
L1N0cmluZ1Byb3RvdHlwZS5jcHAgXAogICAgIGtqcy9BcnJheVByb3RvdHlwZS5jcHAgXAorICAg
IGtqcy9KU09OT2JqZWN0LmNwcCBcCiAgICAga2pzL01hdGhPYmplY3QuY3BwIFwKICAgICBranMv
UmVnRXhwQ29uc3RydWN0b3IuY3BwIFwKICAgICBranMvUmVnRXhwT2JqZWN0LmNwcApAQCAtMTAx
LDYgKzEwMiw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGtqcy9KU0xvY2suY3BwIFwKICAgICBranMv
SlNOdW1iZXJDZWxsLmNwcCBcCiAgICAga2pzL0pTT2JqZWN0LmNwcCBcCisgICAga2pzL0pTT05P
YmplY3QuY3BwIFwKICAgICBranMvSlNTdHJpbmcuY3BwIFwKICAgICBranMvSlNWYWx1ZS5jcHAg
XAogICAgIGtqcy9KU1dyYXBwZXJPYmplY3QuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3Byb2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCmluZGV4IGQ0NDYyNjguLjI3YzVjZDMgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3Byb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvagpAQCAtNjIxLDYgKzYy
MSwxNCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxranNcSlNPTk9iamVjdC5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxranNcSlNPTk9iamVjdC5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQogCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ca2pzXEpTU3Ry
aW5nLmNwcCINCiAJCQkJPg0KIAkJCTwvRmlsZT4NCkBAIC05MzcsNiArOTQ1LDEwIEBACiAJCQkJ
CT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktp
dE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTT05PYmplY3Qu
bHV0LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZl
UGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNl
c1xNYXRoT2JqZWN0Lmx1dC5oIg0KIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBi
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggYWVlZDQwOC4uOTg1MTM4ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC02MDIsNiArNjAyLDgg
QEAKIAkJOTVFM0JDMDQwRTFBRTY4MjAwQjJEMUMxIC8qIENhbGxJZGVudGlmaWVyLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IENhbGxJZGVudGlmaWVyLmg7IHBhdGggPSBwcm9m
aWxlci9DYWxsSWRlbnRpZmllci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NUZE
RkExMzBFMjI5OThGMDAwNkZCMDAgLyogSGVhdnlQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEhlYXZ5UHJvZmlsZS5jcHA7IHBhdGggPSBwcm9maWxlci9I
ZWF2eVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5NUZERkExNTBF
MjI5OTk4MDAwNkZCMDAgLyogSGVhdnlQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IEhlYXZ5UHJvZmlsZS5oOyBwYXRoID0gcHJvZmlsZXIvSGVhdnlQcm9maWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTk3NDZGMUREMEUyQjFBOEYwMDA1QUVBRCAv
KiBKU09OT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
T05PYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk5NzQ2RjFERTBFMkIx
QThGMDAwNUFFQUQgLyogSlNPTk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBKU09OT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MjcwMDc3
MERBQzYwNTYwMEU1NDhENyAvKiBKU05vdEFuT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEpTTm90QW5PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJQTcyNzAwNzgwREFDNjA1NjAwRTU0OEQ3IC8qIEpTTm90QW5PYmplY3QuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNOb3RBbk9iamVjdC5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRp
b25IZWxwZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEV4Y2VwdGlvbkhl
bHBlcnMuaDsgcGF0aCA9IFZNL0V4Y2VwdGlvbkhlbHBlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTExNjYsNiArMTE2OCw4IEBACiAJCQkJQkM3RjhGQjgwRTE5RDFDMzAwODYz
MkMwIC8qIEpTTnVtYmVyQ2VsbC5oICovLAogCQkJCUJDMjJBMzk4MEUxNkUxNDgwMEFGMjFDOCAv
KiBKU09iamVjdC5jcHAgKi8sCiAJCQkJQkMyMkEzOTkwRTE2RTE0ODAwQUYyMUM4IC8qIEpTT2Jq
ZWN0LmggKi8sCisJCQkJOTc0NkYxREQwRTJCMUE4RjAwMDVBRUFEIC8qIEpTT05PYmplY3QuY3Bw
ICovLAorCQkJCTk3NDZGMURFMEUyQjFBOEYwMDA1QUVBRCAvKiBKU09OT2JqZWN0LmggKi8sCiAJ
CQkJQkMwMkU5QjYwRTE4NDJGQTAwMEY5Mjk3IC8qIEpTU3RyaW5nLmNwcCAqLywKIAkJCQlGNjky
QTg2MjAyNTU1OTdEMDFGRjYwRjcgLyogSlNTdHJpbmcuaCAqLywKIAkJCQkxNEFCQjQ1NDA5OUMy
QTBGMDBFMkEyNEYgLyogSlNUeXBlLmggKi8sCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVT
b3VyY2VzLmJrbAppbmRleCA1NjUyYjllLi5jMzNjNTQ2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCisrKyBiL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlU291cmNlcy5ia2wKQEAgLTg3LDYgKzg3LDcgQEAgU291cmNlIGZpbGVzIGZvciBK
U0NvcmUuCiAgICAgICAgIGtqcy9KU05vdEFuT2JqZWN0LmNwcAogICAgICAgICBranMvSlNOdW1i
ZXJDZWxsLmNwcAogICAgICAgICBranMvSlNPYmplY3QuY3BwCisgICAgICAgIGtqcy9KU09OT2Jq
ZWN0LmNwcAogICAgICAgICBranMvSlNTdHJpbmcuY3BwCiAgICAgICAgIGtqcy9KU1ZhbHVlLmNw
cAogICAgICAgICBranMvSlNWYXJpYWJsZU9iamVjdC5jcHAKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL2tqcy9BbGxJbk9uZUZpbGUuY3BwIGIvSmF2YVNjcmlwdENvcmUva2pzL0FsbEluT25l
RmlsZS5jcHAKaW5kZXggZjk0OWFlZC4uYTQ4Y2IzMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUva2pzL0FsbEluT25lRmlsZS5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL0FsbEluT25l
RmlsZS5jcHAKQEAgLTYxLDYgKzYxLDcgQEAKICNpbmNsdWRlICJpbnRlcnByZXRlci5jcHAiCiAj
aW5jbHVkZSAiSlNJbW1lZGlhdGUuY3BwIgogI2luY2x1ZGUgIkpTTG9jay5jcHAiCisjaW5jbHVk
ZSAiSlNPTk9iamVjdC5jcHAiCiAjaW5jbHVkZSAiSlNXcmFwcGVyT2JqZWN0LmNwcCIKICNpbmNs
dWRlICJsZXhlci5jcHAiCiAjaW5jbHVkZSAiQXJnTGlzdC5jcHAiCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9ranMvRXhlY1N0YXRlLmggYi9KYXZhU2NyaXB0Q29yZS9ranMvRXhlY1N0YXRl
LmgKaW5kZXggMTEwNmNhYi4uZWMwNDMxZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUva2pz
L0V4ZWNTdGF0ZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9FeGVjU3RhdGUuaApAQCAtODIs
NiArODIsNyBAQCBuYW1lc3BhY2UgS0pTICB7CiAgICAgICAgIE1hY2hpbmUqIG1hY2hpbmUoKSBj
b25zdCB7IHJldHVybiBtX2dsb2JhbERhdGEtPm1hY2hpbmU7IH0KICAgICAgICAgc3RhdGljIGNv
bnN0IEhhc2hUYWJsZSogYXJyYXlUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsgcmV0dXJuIGV4ZWMt
Pm1fZ2xvYmFsRGF0YS0+YXJyYXlUYWJsZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRh
YmxlKiBkYXRlVGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5tX2dsb2JhbERh
dGEtPmRhdGVUYWJsZTsgfQorICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBKU09OVGFi
bGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBleGVjLT5tX2dsb2JhbERhdGEtPkpTT05UYWJs
ZTsgfQogICAgICAgICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBtYXRoVGFibGUoRXhlY1N0YXRl
KiBleGVjKSB7IHJldHVybiBleGVjLT5tX2dsb2JhbERhdGEtPm1hdGhUYWJsZTsgfQogICAgICAg
ICBzdGF0aWMgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJUYWJsZShFeGVjU3RhdGUqIGV4ZWMpIHsg
cmV0dXJuIGV4ZWMtPm1fZ2xvYmFsRGF0YS0+bnVtYmVyVGFibGU7IH0KICAgICAgICAgc3RhdGlj
IGNvbnN0IEhhc2hUYWJsZSogcmVnRXhwVGFibGUoRXhlY1N0YXRlKiBleGVjKSB7IHJldHVybiBl
eGVjLT5tX2dsb2JhbERhdGEtPnJlZ0V4cFRhYmxlOyB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ranMvSlNHbG9iYWxEYXRhLmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbERh
dGEuY3BwCmluZGV4IDFkMjhmYjcuLmYzOGU3NGYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9KU0dsb2JhbERhdGEuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbERh
dGEuY3BwCkBAIC01MCw2ICs1MCw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiBleHRlcm4gY29uc3Qg
SGFzaFRhYmxlIGFycmF5VGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGRhdGVUYWJsZTsK
K2V4dGVybiBjb25zdCBIYXNoVGFibGUgSlNPTlRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJs
ZSBtYXRoVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIG51bWJlclRhYmxlOwogZXh0ZXJu
IGNvbnN0IEhhc2hUYWJsZSByZWdFeHBUYWJsZTsKQEAgLTYzLDYgKzY0LDcgQEAgSlNHbG9iYWxE
YXRhOjpKU0dsb2JhbERhdGEoYm9vbCBpc1NoYXJlZCkKICNpZiBVU0UoTVVMVElQTEVfVEhSRUFE
UykKICAgICAsIGFycmF5VGFibGUobmV3IEhhc2hUYWJsZShLSlM6OmFycmF5VGFibGUpKQogICAg
ICwgZGF0ZVRhYmxlKG5ldyBIYXNoVGFibGUoS0pTOjpkYXRlVGFibGUpKQorICAgICwgSlNPTlRh
YmxlKG5ldyBIYXNoVGFibGUoS0pTOjpKU09OVGFibGUpKQogICAgICwgbWF0aFRhYmxlKG5ldyBI
YXNoVGFibGUoS0pTOjptYXRoVGFibGUpKQogICAgICwgbnVtYmVyVGFibGUobmV3IEhhc2hUYWJs
ZShLSlM6Om51bWJlclRhYmxlKSkKICAgICAsIHJlZ0V4cFRhYmxlKG5ldyBIYXNoVGFibGUoS0pT
OjpyZWdFeHBUYWJsZSkpCkBAIC03MSw2ICs3Myw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKGJvb2wgaXNTaGFyZWQpCiAjZWxzZQogICAgICwgYXJyYXlUYWJsZSgmS0pTOjphcnJheVRh
YmxlKQogICAgICwgZGF0ZVRhYmxlKCZLSlM6OmRhdGVUYWJsZSkKKyAgICAsIEpTT05UYWJsZSgm
S0pTOjpKU09OVGFibGUpCiAgICAgLCBtYXRoVGFibGUoJktKUzo6bWF0aFRhYmxlKQogICAgICwg
bnVtYmVyVGFibGUoJktKUzo6bnVtYmVyVGFibGUpCiAgICAgLCByZWdFeHBUYWJsZSgmS0pTOjpy
ZWdFeHBUYWJsZSkKQEAgLTk2LDYgKzk5LDcgQEAgSlNHbG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRh
KCkKIAogICAgIGRlbGV0ZVtdIGFycmF5VGFibGUtPnRhYmxlOwogICAgIGRlbGV0ZVtdIGRhdGVU
YWJsZS0+dGFibGU7CisgICAgZGVsZXRlW10gSlNPTlRhYmxlLT50YWJsZTsKICAgICBkZWxldGVb
XSBtYXRoVGFibGUtPnRhYmxlOwogICAgIGRlbGV0ZVtdIG51bWJlclRhYmxlLT50YWJsZTsKICAg
ICBkZWxldGVbXSByZWdFeHBUYWJsZS0+dGFibGU7CkBAIC0xMDMsNiArMTA3LDcgQEAgSlNHbG9i
YWxEYXRhOjp+SlNHbG9iYWxEYXRhKCkKICAgICBkZWxldGVbXSBzdHJpbmdUYWJsZS0+dGFibGU7
CiAgICAgZGVsZXRlIGFycmF5VGFibGU7CiAgICAgZGVsZXRlIGRhdGVUYWJsZTsKKyAgICBkZWxl
dGUgSlNPTlRhYmxlOwogICAgIGRlbGV0ZSBtYXRoVGFibGU7CiAgICAgZGVsZXRlIG51bWJlclRh
YmxlOwogICAgIGRlbGV0ZSByZWdFeHBUYWJsZTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9KU0dsb2JhbERhdGEuaCBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU0dsb2JhbERhdGEuaApp
bmRleCA3ZTFhNDY2Li43Yjg5YTIzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvSlNH
bG9iYWxEYXRhLmgKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFsRGF0YS5oCkBAIC02
Miw2ICs2Miw3IEBAIG5hbWVzcGFjZSBLSlMgewogCiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSog
YXJyYXlUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBkYXRlVGFibGU7CisgICAgICAg
IGNvbnN0IEhhc2hUYWJsZSogSlNPTlRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIG1h
dGhUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBudW1iZXJUYWJsZTsKICAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiByZWdFeHBUYWJsZTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9KU0dsb2JhbE9iamVjdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ranMvSlNHbG9iYWxPYmpl
Y3QuY3BwCmluZGV4IDM3YzBhN2MuLmI0NjRiMDIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL0pTR2xvYmFs
T2JqZWN0LmNwcApAQCAtNDQsNiArNDQsNyBAQAogI2luY2x1ZGUgIkdsb2JhbEV2YWxGdW5jdGlv
bi5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCiAjaW5jbHVkZSAiSlNM
b2NrLmgiCisjaW5jbHVkZSAiSlNPTk9iamVjdC5oIgogI2luY2x1ZGUgIk1hY2hpbmUuaCIKICNp
bmNsdWRlICJNYXRoT2JqZWN0LmgiCiAjaW5jbHVkZSAiTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5o
IgpAQCAtMzAzLDYgKzMwNCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUq
IHByb3RvdHlwZSkKICAgICB9OwogCiAgICAgYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxz
LCBzaXplb2Yoc3RhdGljR2xvYmFscykgLyBzaXplb2YoR2xvYmFsUHJvcGVydHlJbmZvKSk7Cisg
ICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkpTT04iKSwgbmV3IChleGVjKSBKU09OT2Jq
ZWN0KGV4ZWMsIGQoKS0+b2JqZWN0UHJvdG90eXBlKSksCiAKICAgICAvLyBTZXQgZ2xvYmFsIGZ1
bmN0aW9ucy4KIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3Bw
IGIvSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjk4NTUwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ranMvSlNPTk9iamVjdC5jcHAKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMDggQWRhbSBCYXJ0aCAoYWJhcnRoQHdlYmtpdC5vcmcpCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTT05P
YmplY3QuaCIKKworI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9B
c3NlcnRpb25zLmg+CisKK25hbWVzcGFjZSBLSlMgeworCitzdGF0aWMgSlNWYWx1ZSogSlNPTlBy
b3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xp
c3QmKTsKK3N0YXRpYyBKU1ZhbHVlKiBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKKworfQorCisjaW5jbHVkZSAi
SlNPTk9iamVjdC5sdXQuaCIKKworbmFtZXNwYWNlIEtKUyB7CisKKy8vIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLSBKU09OT2JqZWN0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2NvbnN0IENsYXNzSW5mbyBKU09OT2JqZWN0OjppbmZvID0geyAiSlNPTiIsIDAsIDAs
IEV4ZWNTdGF0ZTo6SlNPTlRhYmxlIH07CisKKy8qIFNvdXJjZSBmb3IgSlNPTk9iamVjdC5sdXQu
aAorQGJlZ2luIEpTT05UYWJsZQorICBwYXJzZSAgICAgICAgIEpTT05Qcm90b0Z1bmNQYXJzZSAg
ICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAyCisgIHN0cmluZ2lmeSAgICAgSlNPTlByb3Rv
RnVuY1N0cmluZ2lmeSAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDMKK0BlbmQKKyovCisKK0pT
T05PYmplY3Q6OkpTT05PYmplY3QoRXhlY1N0YXRlKiwgT2JqZWN0UHJvdG90eXBlKiBvYmplY3RQ
cm90b3R5cGUpCisgICAgOiBKU09iamVjdChvYmplY3RQcm90b3R5cGUpCit7Cit9CisKKy8vIEVD
TUEgMTUuMTIKKworYm9vbCBKU09OT2JqZWN0OjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRl
KiBleGVjLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCAmc2xv
dCkKK3sKKyAgICByZXR1cm4gZ2V0U3RhdGljUHJvcGVydHlTbG90PEpTT05PYmplY3QsIEpTT2Jq
ZWN0PihleGVjLCBFeGVjU3RhdGU6OkpTT05UYWJsZShleGVjKSwgdGhpcywgcHJvcGVydHlOYW1l
LCBzbG90KTsKK30KKworSlNWYWx1ZSogSlNPTk9iamVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUqLCBpbnQpIGNvbnN0Cit7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0
dXJuIDA7Cit9CisKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9u
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKU1ZhbHVlKiBKU09OUHJvdG9G
dW5jUGFyc2UoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYp
Cit7CisgICAgcmV0dXJuIGpzTnVsbCgpOworfQorCitKU1ZhbHVlKiBKU09OUHJvdG9GdW5jU3Ry
aW5naWZ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlz
dCYpCit7CisgICAgcmV0dXJuIGpzU3RyaW5nKGV4ZWMsICJOb3QgSW1wbGVtZW50ZWQgKFlldCku
Iik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEtKUwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
a2pzL0pTT05PYmplY3QuaCBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU09OT2JqZWN0LmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiZGU0MgotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRDb3JlL2tqcy9KU09OT2JqZWN0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDggQWRhbSBCYXJ0aCAoYWJhcnRoQHdlYmtpdC5vcmcpCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqCisgKi8KKworI2lmbmRlZiBKU09OT2JqZWN0X2gKKyNk
ZWZpbmUgSlNPTk9iamVjdF9oCisKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgImxv
b2t1cC5oIgorCituYW1lc3BhY2UgS0pTIHsKKworICAgIGNsYXNzIEpTT05PYmplY3QgOiBwdWJs
aWMgSlNPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNPTk9iamVjdChFeGVjU3RhdGUq
LCBPYmplY3RQcm90b3R5cGUqKTsKKworICAgICAgICBib29sIGdldE93blByb3BlcnR5U2xvdChF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90Jik7CisgICAgICAgIEpT
VmFsdWUqIGdldFZhbHVlUHJvcGVydHkoRXhlY1N0YXRlKiwgaW50IHRva2VuKSBjb25zdDsKKwor
ICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyByZXR1
cm4gJmluZm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBpbmZvOworICAgIH07
CisKK30gLy8gbmFtZXNwYWNlIEtKUworCisjZW5kaWYgLy8gSlNPTk9iamVjdF9oCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
MTM5MDBhOS4uNGNlZjdmNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBi
L0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDExIEBACisyMDA4LTA3LTEzICBBZGFt
IEJhcnRoICA8YWJhcnRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVXBkYXRlIHdpbmRvdyBvYmplY3QgZW51bWVyYXRpb24gdG8g
c2hvdyBKU09OIG9iamVjdC4KKworICAgICAgICAqIGZhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJv
cGVydGllcy1leHBlY3RlZC50eHQ6CisKIDIwMDgtMDctMTIgIFNhbSBXZWluaWcgIDxzYW1Ad2Vi
a2l0Lm9yZz4KIAogICAgICAgICBSdWJiZXItc3RhbXBlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0CmluZGV4IDFkYzQ5ODEuLjY0OWJiMDUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4
dApAQCAtODY5LDYgKzg2OSw3IEBAIHdpbmRvdy5IVE1MVUxpc3RFbGVtZW50LnByb3RvdHlwZSBb
cHJpbnRlZCBhYm92ZSBhcyB3aW5kb3cuRWxlbWVudC5wcm90b3R5cGVdCiB3aW5kb3cuSFRNTFZp
ZGVvRWxlbWVudCBbb2JqZWN0IEhUTUxWaWRlb0VsZW1lbnRDb25zdHJ1Y3Rvcl0KIHdpbmRvdy5I
VE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZSBbcHJpbnRlZCBhYm92ZSBhcyB3aW5kb3cuRWxlbWVu
dC5wcm90b3R5cGVdCiB3aW5kb3cuSW1hZ2UgW29iamVjdCBJbWFnZUNvbnN0cnVjdG9yXQord2lu
ZG93LkpTT04gW29iamVjdCBKU09OXQogd2luZG93LktleWJvYXJkRXZlbnQgW29iamVjdCBLZXli
b2FyZEV2ZW50Q29uc3RydWN0b3JdCiB3aW5kb3cuS2V5Ym9hcmRFdmVudC5wcm90b3R5cGUgW3By
aW50ZWQgYWJvdmUgYXMgd2luZG93LkV2ZW50LnByb3RvdHlwZV0KIHdpbmRvdy5NZWRpYUVycm9y
IFtvYmplY3QgTWVkaWFFcnJvckNvbnN0cnVjdG9yXQotLSAKMS41LjUuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22264</attachid>
            <date>2008-07-14 02:55:11 -0700</date>
            <delta_ts>2008-07-14 03:10:27 -0700</delta_ts>
            <desc>Work-in-progress: Step 2: Beginnings of JSON parser</desc>
            <filename>0002-first-cut-at-parser.patch</filename>
            <type>text/plain</type>
            <size>12800</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">RnJvbSA1NDJiNzdhMDE5YjIyZWZjZjhkMTcyM2JhZWRlNWYwNmQ0N2JjZjE3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGFtIEJhcnRoIDxhYmFydGhAd2Via2l0Lm9yZz4KRGF0ZTog
TW9uLCAxNCBKdWwgMjAwOCAwMjo1MDowNyAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGZpcnN0IGN1
dCBhdCBwYXJzZXIKCi0tLQogSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3BwIHwgIDQx
MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAxIGZpbGVzIGNoYW5nZWQs
IDQxMSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL2tqcy9KU09OT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU09OT2JqZWN0
LmNwcAppbmRleCA5ODU1MGU0Li5mM2ExNDcwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9r
anMvSlNPTk9iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3Bw
CkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogCiBuYW1lc3Bh
Y2UgS0pTIHsKIApAQCAtNjMsMTIgKzY0LDQyMCBAQCBKU1ZhbHVlKiBKU09OT2JqZWN0OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEpTT05QYXJzZXIgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCituYW1lc3BhY2UgSlNPTlBhcnNlciB7CisKK3N0cnVjdCBT
dGF0ZSB7CisgICAgY29uc3QgVUNoYXIqIHBvczsKKyAgICBjb25zdCBVQ2hhciogZW5kOworfTsK
KworZW51bSBDb250ZXh0IHsKKyAgICBUZXh0LAorICAgIFZhbHVlLAorICAgIEJlZ2luT2JqZWN0
LAorICAgIENvbnRpbnVlT2JqZWN0LAorICAgIEJlZ2luQXJyYXksCisgICAgQ29udGludWVBcnJh
eQorfTsKKworc3RhdGljIGlubGluZSBib29sIGVuc3VyZShTdGF0ZSogc3RhdGUsIGludCBzaXpl
KQoreworICAgIHJldHVybiBzdGF0ZS0+cG9zICsgc2l6ZSA8PSBzdGF0ZS0+ZW5kOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgbGl0ZXJhbChTdGF0ZSogc3RhdGUsIFVDaGFyIGNoKQoreworICAg
IGlmICghZW5zdXJlKHN0YXRlLCAxKSB8fCAoKnN0YXRlLT5wb3MgIT0gY2gpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZS0+cG9zKys7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBsaXRlcmFsKFN0YXRlKiBzdGF0ZSwgY29uc3QgVUNoYXIqIHN0
cikKK3sKKyAgICBjb25zdCBVQ2hhciogcG9zID0gc3RhdGUtPnBvczsKKyAgICB3aGlsZSAocG9z
IDwgc3RhdGUtPmVuZCkgeworICAgICAgICBpZiAoKnN0ciA9PSAnXDAnKSB7CisgICAgICAgICAg
ICBzdGF0ZS0+cG9zID0gcG9zOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCpwb3MrKyAhPSAqc3RyKyspCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbGl0ZXJhbFJhbmdl
KFN0YXRlKiBzdGF0ZSwgVUNoYXIgbWluLCBVQ2hhciBtYXgpCit7CisgICAgaWYgKCFlbnN1cmUo
c3RhdGUsIDEpIHx8ICpzdGF0ZS0+cG9zIDwgbWluIHx8ICpzdGF0ZS0+cG9zID4gbWF4KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZS0+cG9zKys7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIHdzID0gKigKKy8vICAgICAgICAgICAleDIwIC8gICAgICAgICAgICAgIDsgU3Bh
Y2UKKy8vICAgICAgICAgICAleDA5IC8gICAgICAgICAgICAgIDsgSG9yaXpvbnRhbCB0YWIKKy8v
ICAgICAgICAgICAleDBBIC8gICAgICAgICAgICAgIDsgTGluZSBmZWVkIG9yIE5ldyBsaW5lCisv
LyAgICAgICAgICAgJXgwRCAgICAgICAgICAgICAgICA7IENhcnJpYWdlIHJldHVybgorLy8gICAg
ICAgKQorc3RhdGljIGlubGluZSB2b2lkIHdzKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICB3aGlsZSAo
c3RhdGUtPnBvcyA8IHN0YXRlLT5lbmQpIHsKKyAgICAgICAgY29uc3QgVUNoYXIgY2ggPSAqc3Rh
dGUtPnBvczsKKyAgICAgICAgaWYgKGNoICE9ICcgJyAmJiBjaCAhPSAnXHQnICYmIGNoICE9ICdc
bicgJiYgY2ggIT0gJ1xyJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdGF0ZS0+cG9z
Kys7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcGFkZGVkTGl0ZXJhbChTdGF0ZSog
c3RhdGUsIFVDaGFyIGNoKQoreworICAgIHdzKHN0YXRlKTsKKyAgICBpZiAoIWxpdGVyYWwoc3Rh
dGUsIGNoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHdzKHN0YXRlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8gTGl0ZXJhbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBiZWdpbi1hcnJh
eSAgICAgPSB3cyAleDVCIHdzICA7IFsgbGVmdCBzcXVhcmUgYnJhY2tldAorc3RhdGljIGlubGlu
ZSBib29sIGJlZ2luQXJyYXkoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBwYWRkZWRMaXRl
cmFsKHN0YXRlLCBMJ1snKTsKK30KKworLy8gYmVnaW4tb2JqZWN0ICAgID0gd3MgJXg3QiB3cyAg
OyB7IGxlZnQgY3VybHkgYnJhY2tldAorc3RhdGljIGlubGluZSBib29sIGJlZ2luT2JqZWN0KFN0
YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gcGFkZGVkTGl0ZXJhbChzdGF0ZSwgTCd7Jyk7Cit9
CisKKy8vIGVuZC1hcnJheSAgICAgICA9IHdzICV4NUQgd3MgIDsgXSByaWdodCBzcXVhcmUgYnJh
Y2tldAorc3RhdGljIGlubGluZSBib29sIGVuZEFycmF5KFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBy
ZXR1cm4gcGFkZGVkTGl0ZXJhbChzdGF0ZSwgTCddJyk7Cit9CisKKy8vIGVuZC1vYmplY3QgICAg
ICA9IHdzICV4N0Qgd3MgIDsgfSByaWdodCBjdXJseSBicmFja2V0CitzdGF0aWMgaW5saW5lIGJv
b2wgZW5kT2JqZWN0KFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gcGFkZGVkTGl0ZXJhbChz
dGF0ZSwgTCd9Jyk7Cit9CisKKy8vIG5hbWUtc2VwYXJhdG9yICA9IHdzICV4M0Egd3MgIDsgOiBj
b2xvbgorc3RhdGljIGlubGluZSBib29sIG5hbWVTZXBhcmF0b3IoU3RhdGUqIHN0YXRlKQorewor
ICAgIHJldHVybiBwYWRkZWRMaXRlcmFsKHN0YXRlLCBMJzonKTsKK30KKworLy8gdmFsdWUtc2Vw
YXJhdG9yID0gd3MgJXgyQyB3cyAgOyAsIGNvbW1hCitzdGF0aWMgaW5saW5lIGJvb2wgdmFsdWVT
ZXBhcmF0b3IoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBwYWRkZWRMaXRlcmFsKHN0YXRl
LCBMJywnKTsKK30KKworLy8gZmFsc2UgPSAleDY2LjYxLjZjLjczLjY1ICAgOyBmYWxzZQorc3Rh
dGljIGlubGluZSBib29sIGxpdGVyYWxGYWxzZShTdGF0ZSogc3RhdGUpCit7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGZhbHNlTGl0ZXJhbFtdID0geyAnZicsICdhJywgJ2wnLCAncycsICdlJywg
J1wwJyB9OworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCBmYWxzZUxpdGVyYWwpOworfQorCisv
LyBudWxsICA9ICV4NmUuNzUuNmMuNmMgICAgICA7IG51bGwKK3N0YXRpYyBpbmxpbmUgYm9vbCBs
aXRlcmFsTnVsbChTdGF0ZSogc3RhdGUpCit7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIG51bGxM
aXRlcmFsW10gPSB7ICduJywgJ3UnLCAnbCcsICdsJywgJ1wwJyB9OworICAgIHJldHVybiBsaXRl
cmFsKHN0YXRlLCBudWxsTGl0ZXJhbCk7Cit9CisKKy8vIHRydWUgID0gJXg3NC43Mi43NS42NSAg
ICAgIDsgdHJ1ZQorc3RhdGljIGlubGluZSBib29sIGxpdGVyYWxUcnVlKFN0YXRlKiBzdGF0ZSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdHJ1ZUxpdGVyYWxbXSA9IHsgJ3QnLCAncicsICd1
JywgJ2UnLCAnXDAnIH07CisgICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsIHRydWVMaXRlcmFsKTsK
K30KKworLy8gTnVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBkZWNpbWFsLXBvaW50ID0gJXgy
RSAgICAgICA7IC4KK3N0YXRpYyBpbmxpbmUgYm9vbCBkZWNpbWFsUG9pbnQoU3RhdGUqIHN0YXRl
KQoreworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCAnLicpOworfQorCisvLyBkaWdpdDEtOSA9
ICV4MzEtMzkgICAgICAgICA7IDEtOQorc3RhdGljIGlubGluZSBib29sIGRpZ2l0MTkoU3RhdGUq
IHN0YXRlKQoreworICAgIHJldHVybiBsaXRlcmFsUmFuZ2Uoc3RhdGUsICcxJywgJzknKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGRpZ2l0KFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4g
bGl0ZXJhbFJhbmdlKHN0YXRlLCAnMCcsICc5Jyk7Cit9CisKKy8vIGUgPSAleDY1IC8gJXg0NSAg
ICAgICAgICAgIDsgZSBFCitzdGF0aWMgaW5saW5lIGJvb2wgZShTdGF0ZSogc3RhdGUpCit7Cisg
ICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsICdlJykgfHwgbGl0ZXJhbChzdGF0ZSwgJ0UnKTsKK30K
KworLy8gbWludXMgPSAleDJEICAgICAgICAgICAgICAgOyAtCitzdGF0aWMgaW5saW5lIGJvb2wg
bWludXMoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCAnMCcpOwor
fQorCisvLyBwbHVzID0gJXgyQiAgICAgICAgICAgICAgICA7ICsKK3N0YXRpYyBpbmxpbmUgYm9v
bCBwbHVzKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gbGl0ZXJhbChzdGF0ZSwgJysnKTsK
K30KKworLy8gemVybyA9ICV4MzAgICAgICAgICAgICAgICAgOyAwCitzdGF0aWMgaW5saW5lIGJv
b2wgemVybyhTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsICcwJyk7
Cit9CisKKy8vIGZyYWMgPSBkZWNpbWFsLXBvaW50IDEqRElHSVQKK3N0YXRpYyBpbmxpbmUgYm9v
bCBmcmFjKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBTdGF0ZSBsb2NhbFN0YXRlID0gKnN0YXRlOwor
ICAgIGlmIChkZWNpbWFsUG9pbnQoJmxvY2FsU3RhdGUpICYmIGRpZ2l0KCZsb2NhbFN0YXRlKSkg
eworICAgICAgICB3aGlsZShkaWdpdCgmbG9jYWxTdGF0ZSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgKnN0YXRlID0gbG9jYWxTdGF0ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gaW50ID0gemVybyAvICggZGlnaXQxLTkg
KkRJR0lUICkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlZ2VyKFN0YXRlKiBzdGF0ZSkKK3sKKyAg
ICBpZiAoemVybyhzdGF0ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChkaWdpdDE5
KHN0YXRlKSkgeworICAgICAgICB3aGlsZShkaWdpdChzdGF0ZSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gZXhwID0gZSBbIG1pbnVzIC8gcGx1cyBdIDEqRElHSVQKK3N0YXRpYyBpbmxpbmUgYm9v
bCBleHAoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCAnZScpOwor
fQorCisvLyBudW1iZXIgPSBbIG1pbnVzIF0gaW50IFsgZnJhYyBdIFsgZXhwIF0KK3N0YXRpYyBp
bmxpbmUgYm9vbCBudW1iZXIoU3RhdGUqIHN0YXRlKQoreworICAgIG1pbnVzKHN0YXRlKTsKKyAg
ICBpZiAoIWludGVnZXIoc3RhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZnJhYyhz
dGF0ZSk7CisgICAgZXhwKHN0YXRlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gU3RyaW5n
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCisvLyBxdW90YXRpb24tbWFyayA9ICV4MjIgICAgICA7ICIKK3N0
YXRpYyBpbmxpbmUgYm9vbCBxdW90YXRpb25NYXJrKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1
cm4gbGl0ZXJhbChzdGF0ZSwgJyInKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGhleGRpZyhT
dGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIGRpZ2l0KHN0YXRlKSB8fCBsaXRlcmFsUmFuZ2Uo
c3RhdGUsICdhJywgJ2YnKSB8fCBsaXRlcmFsUmFuZ2Uoc3RhdGUsICdBJywgJ0YnKTsKK30KKwor
Ly8gc3RyaW5nID0gcXVvdGF0aW9uLW1hcmsgKmNoYXIgcXVvdGF0aW9uLW1hcmsKKy8vIGNoYXIg
PSB1bmVzY2FwZWQgLworLy8gICAgICAgIGVzY2FwZSAoCisvLyAgICAgICAgICAgICV4MjIgLyAg
ICAgICAgICA7ICIgICAgcXVvdGF0aW9uIG1hcmsgIFUrMDAyMgorLy8gICAgICAgICAgICAleDVD
IC8gICAgICAgICAgOyBcICAgIHJldmVyc2Ugc29saWR1cyBVKzAwNUMKKy8vICAgICAgICAgICAg
JXgyRiAvICAgICAgICAgIDsgLyAgICBzb2xpZHVzICAgICAgICAgVSswMDJGCisvLyAgICAgICAg
ICAgICV4NjIgLyAgICAgICAgICA7IGIgICAgYmFja3NwYWNlICAgICAgIFUrMDAwOAorLy8gICAg
ICAgICAgICAleDY2IC8gICAgICAgICAgOyBmICAgIGZvcm0gZmVlZCAgICAgICBVKzAwMEMKKy8v
ICAgICAgICAgICAgJXg2RSAvICAgICAgICAgIDsgbiAgICBsaW5lIGZlZWQgICAgICAgVSswMDBB
CisvLyAgICAgICAgICAgICV4NzIgLyAgICAgICAgICA7IHIgICAgY2FycmlhZ2UgcmV0dXJuIFUr
MDAwRAorLy8gICAgICAgICAgICAleDc0IC8gICAgICAgICAgOyB0ICAgIHRhYiAgICAgICAgICAg
ICBVKzAwMDkKKy8vICAgICAgICAgICAgJXg3NSA0SEVYRElHICkgIDsgdVhYWFggICAgICAgICAg
ICAgICAgVStYWFhYCisvLyBlc2NhcGUgPSAleDVDICAgICAgICAgICAgICA7IFwgICAgICAgLy8g
QWRkIHNwYWNlcyB0byBtYWtlIEMrKyBwYXJzZXIgaGFwcHkuCisvLyBxdW90YXRpb24tbWFyayA9
ICV4MjIgICAgICA7ICIKKy8vIHVuZXNjYXBlZCA9ICV4MjAtMjEgLyAleDIzLTVCIC8gJXg1RC0x
MEZGRkYKK3N0YXRpYyBib29sIHN0cmluZyhTdGF0ZSogc3RhdGUpIHsKKyAgICAvLyBNYW51YWxs
eSBoYW5kbGUgdGhlIHBhcnNpbmcgb2Ygc3RyaW5nLiAgV2UgZG8gdGhpcyB0byBvcHRpbWl6ZSBh
d2F5CisgICAgLy8gbXVsdGlwbGUgY29tcGFyZXMgb2YgfHBvc3wgYW5kIHxlbmR8LgorICAgIFN0
YXRlIGxvY2FsU3RhdGUgPSAqc3RhdGU7CisgICAgaWYgKHF1b3RhdGlvbk1hcmsoJmxvY2FsU3Rh
dGUpKSB7CisgICAgICAgIHdoaWxlIChsb2NhbFN0YXRlLnBvcyA8IGxvY2FsU3RhdGUuZW5kKSB7
CisgICAgICAgICAgICBjb25zdCBVQ2hhciBjaCA9ICpsb2NhbFN0YXRlLnBvcysrOworICAgICAg
ICAgICAgaWYgKGNoID09ICciJykgeworICAgICAgICAgICAgICAgICpzdGF0ZSA9IGxvY2FsU3Rh
dGU7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9IGVsc2UgaWYg
KGNoID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgJyInOgorICAgICAgICAgICAgICAgICAgICBjYXNlICdcXCc6CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgJy8nOgorICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
J24nOgorICAgICAgICAgICAgICAgICAgICBjYXNlICd0JzoKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIChoZXhkaWcoJmxvY2FsU3RhdGUpICYmIGhleGRpZygmbG9jYWxTdGF0
ZSkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhkaWcoJmxvY2FsU3RhdGUpICYm
IGhleGRpZygmbG9jYWxTdGF0ZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAg
ICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHZlcnkg
c3RyaWN0LiAgV2Ugc2hvdWxkIGNvbnNpZGVyIGFjY2VwdGluZworICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gbW9yZSBlc2NhcGVkIGNoYXJhY3RlcnMuCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlm
IChjaCA9PSAnXHgyMCcgfHwgY2ggPT0gJ1x4MjEnIHx8CisgICAgICAgICAgICAgICAgICAgICAg
IChjaCA+PSAnXHgyMycgJiYgY2ggPD0gJ1x4NUInKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICBjaCA+PSAnXHg1QicpIHsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogd2hhdCBhYm91dCB8
Y2ggPD0gTCdceDEwRkZGRid8ID8KKyAgICAgICAgICAgICAgICBjb250aW51ZTsgIC8vIFRoZSBj
b21tb24gY2FzZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsgIC8v
IFdlIGhpdCBhbiBpbGxlZ2FsIGNoYXJhY3Rlci4KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1
cm4gZmFsc2U7ICAvLyBVbnRlcm1pbmF0ZWQgc3RyaW5nLgorfQorCisvLyBWYWx1ZXMgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKKy8vIG9iamVjdCA9IGJlZ2luLW9iamVjdCBbIG1lbWJlciAqKCB2YWx1ZS1z
ZXBhcmF0b3IgbWVtYmVyICkgXSBlbmQtb2JqZWN0CisvLyBtZW1iZXIgPSBzdHJpbmcgbmFtZS1z
ZXBhcmF0b3IgdmFsdWUKKy8vIGFycmF5ID0gYmVnaW4tYXJyYXkgWyB2YWx1ZSAqKCB2YWx1ZS1z
ZXBhcmF0b3IgdmFsdWUgKSBdIGVuZC1hcnJheQorLy8gdmFsdWUgPSBmYWxzZSAvIG51bGwgLyB0
cnVlIC8gb2JqZWN0IC8gYXJyYXkgLyBudW1iZXIgLyBzdHJpbmcKKy8vIEpTT04tdGV4dCA9IG9i
amVjdCAvIGFycmF5CisKK3N0YXRpYyBib29sIEpTT05UZXh0KFN0YXRlKiBzdGF0ZSkKK3sKKyAg
ICBEZXF1ZTxDb250ZXh0PiBzdGFjazsKKyAgICBzdGFjay5wcmVwZW5kKFRleHQpOworICAgIHdo
aWxlICghc3RhY2suaXNFbXB0eSgpKSB7CisgICAgICAgIHN3aXRjaCAoc3RhY2suZmlyc3QoKSkg
eworICAgICAgICAgICAgY2FzZSBUZXh0OgorICAgICAgICAgICAgICAgIGlmIChiZWdpbk9iamVj
dChzdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlRmlyc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhY2sucHJlcGVuZChCZWdpbk9iamVjdCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAg
aWYgKGJlZ2luQXJyYXkoc3RhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92
ZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLnByZXBlbmQoQmVnaW5BcnJheSk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGNhc2UgQmVnaW5PYmplY3Q6
CisgICAgICAgICAgICAgICAgaWYgKGVuZE9iamVjdChzdGF0ZSkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgc3RhY2sucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghc3RyaW5nKHN0YXRlKSB8
fCAhbmFtZVNlcGFyYXRvcihzdGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBzdGFjay5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAg
IHN0YWNrLnByZXBlbmQoQ29udGludWVPYmplY3QpOworICAgICAgICAgICAgICAgIHN0YWNrLnBy
ZXBlbmQoVmFsdWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBj
YXNlIENvbnRpbnVlT2JqZWN0OgorICAgICAgICAgICAgICAgIGlmIChlbmRPYmplY3Qoc3RhdGUp
KSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoIXZhbHVlU2VwYXJhdG9yKHN0YXRlKSB8fCAhc3RyaW5nKHN0YXRlKSB8fCAhbmFtZVNlcGFy
YXRvcihzdGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBzdGFjay5wcmVwZW5kKFZhbHVlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KworICAgICAgICAgICAgY2FzZSBCZWdpbkFycmF5OgorICAgICAgICAgICAgICAgIGlmIChlbmRB
cnJheShzdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlRmlyc3QoKTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIHN0YWNrLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgc3RhY2sucHJl
cGVuZChDb250aW51ZUFycmF5KTsKKyAgICAgICAgICAgICAgICBzdGFjay5wcmVwZW5kKFZhbHVl
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY2FzZSBDb250aW51
ZUFycmF5OgorICAgICAgICAgICAgICAgIGlmIChlbmRBcnJheShzdGF0ZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhY2sucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICghdmFsdWVTZXBh
cmF0b3Ioc3RhdGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
ICAgICAgICAgc3RhY2sucHJlcGVuZChWYWx1ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7
CisKKyAgICAgICAgICAgIGNhc2UgVmFsdWU6CisgICAgICAgICAgICAgICAgaWYgKGxpdGVyYWxG
YWxzZShzdGF0ZSkgfHwgbGl0ZXJhbE51bGwoc3RhdGUpIHx8IGxpdGVyYWxUcnVlKHN0YXRlKSkg
eworICAgICAgICAgICAgICAgICAgICBzdGFjay5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYg
KG51bWJlcihzdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlRmlyc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmIChzdHJpbmcoc3RhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0
YWNrLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoYmVnaW5PYmplY3Qoc3RhdGUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICAgICAg
ICAgIHN0YWNrLnByZXBlbmQoQmVnaW5PYmplY3QpOworICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGJlZ2luQXJyYXko
c3RhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUZpcnN0KCk7CisgICAg
ICAgICAgICAgICAgICAgIHN0YWNrLnByZXBlbmQoQmVnaW5BcnJheSk7CisgICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKyAgICAvLyBXZSd2ZSBzdWNjZWVkZWQgaW4gcGFyc2luZyB0aGUgdGV4dCBpZiB3
ZSd2ZSBleGhhdXN0ZWQgaXRzIGNvbnRlbnRzLgorICAgIHJldHVybiBzdGF0ZS0+cG9zID09IHN0
YXRlLT5lbmQ7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IFVTdHJpbmcmIHRleHQpCit7
CisgICAgU3RhdGUgc3RhdGU7CisgICAgc3RhdGUucG9zID0gdGV4dC5kYXRhKCk7CisgICAgc3Rh
dGUuZW5kID0gc3RhdGUucG9zICsgdGV4dC5zaXplKCk7CisgICAgcmV0dXJuIEpTT05UZXh0KCZz
dGF0ZSk7Cit9CisKK30gLy8gSlNPTlBhcnNlcgogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUpT
VmFsdWUqIEpTT05Qcm90b0Z1bmNQYXJzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUq
LCBjb25zdCBBcmdMaXN0JikKK0pTVmFsdWUqIEpTT05Qcm90b0Z1bmNQYXJzZShFeGVjU3RhdGUq
IGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCiB7Ci0gICAg
cmV0dXJuIGpzTnVsbCgpOworICAgIGNvbnN0IFVTdHJpbmcmIHRleHQgPSBhcmdzWzBdLT50b1N0
cmluZyhleGVjKTsKKyAgICByZXR1cm4gSlNPTlBhcnNlcjo6cGFyc2UodGV4dCkgPyBqc1N0cmlu
ZyhleGVjLCAiWWVzLiIpIDoganNTdHJpbmcoZXhlYywgIk5vLiIpOwogfQogCiBKU1ZhbHVlKiBK
U09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVl
KiwgY29uc3QgQXJnTGlzdCYpCi0tIAoxLjUuNS4zCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22265</attachid>
            <date>2008-07-14 03:10:27 -0700</date>
            <delta_ts>2008-07-14 15:54:44 -0700</delta_ts>
            <desc>Work-in-progress: Step 2: Beginnings of JSON parser</desc>
            <filename>0002-first-cut-at-parser.patch</filename>
            <type>text/plain</type>
            <size>13099</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">RnJvbSBlODE0ZGMzY2ZmYThlMDQ2MjFlZGQwYmQxZTI5NjUwZjg1MzQ1YmQ5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGFtIEJhcnRoIDxhYmFydGhAd2Via2l0Lm9yZz4KRGF0ZTog
TW9uLCAxNCBKdWwgMjAwOCAwMjo1MDowNyAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIGZpcnN0IGN1
dCBhdCBwYXJzZXIKCi0tLQogSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3BwIHwgIDQy
MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAxIGZpbGVzIGNoYW5nZWQs
IDQyMSBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL2tqcy9KU09OT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU09OT2JqZWN0
LmNwcAppbmRleCA5ODU1MGU0Li5iMTk3ZWU0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9r
anMvSlNPTk9iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3Bw
CkBAIC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogCiBuYW1lc3Bh
Y2UgS0pTIHsKIApAQCAtNjMsMTIgKzY0LDQzMCBAQCBKU1ZhbHVlKiBKU09OT2JqZWN0OjpnZXRW
YWx1ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAor
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEpTT05QYXJzZXIgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCituYW1lc3BhY2UgSlNPTlBhcnNlciB7CisKK3N0cnVjdCBT
dGF0ZSB7CisgICAgY29uc3QgVUNoYXIqIHBvczsKKyAgICBjb25zdCBVQ2hhciogZW5kOworfTsK
KworZW51bSBDb250ZXh0IHsKKyAgICBUZXh0LAorICAgIFZhbHVlLAorICAgIEJlZ2luT2JqZWN0
LAorICAgIENvbnRpbnVlT2JqZWN0LAorICAgIEJlZ2luQXJyYXksCisgICAgQ29udGludWVBcnJh
eQorfTsKKworc3RhdGljIGlubGluZSBib29sIGVuc3VyZShTdGF0ZSogc3RhdGUsIGludCBzaXpl
KQoreworICAgIHJldHVybiBzdGF0ZS0+cG9zICsgc2l6ZSA8PSBzdGF0ZS0+ZW5kOworfQorCitz
dGF0aWMgaW5saW5lIGJvb2wgbGl0ZXJhbChTdGF0ZSogc3RhdGUsIFVDaGFyIGNoKQoreworICAg
IGlmICghZW5zdXJlKHN0YXRlLCAxKSB8fCAoKnN0YXRlLT5wb3MgIT0gY2gpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZS0+cG9zKys7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3N0YXRpYyBpbmxpbmUgYm9vbCBsaXRlcmFsKFN0YXRlKiBzdGF0ZSwgY29uc3QgVUNoYXIqIHN0
cikKK3sKKyAgICBjb25zdCBVQ2hhciogcG9zID0gc3RhdGUtPnBvczsKKyAgICB3aGlsZSAocG9z
IDwgc3RhdGUtPmVuZCkgeworICAgICAgICBpZiAoKnN0ciA9PSAnXDAnKSB7CisgICAgICAgICAg
ICBzdGF0ZS0+cG9zID0gcG9zOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K
KyAgICAgICAgaWYgKCpwb3MrKyAhPSAqc3RyKyspCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgbGl0ZXJhbFJhbmdl
KFN0YXRlKiBzdGF0ZSwgVUNoYXIgbWluLCBVQ2hhciBtYXgpCit7CisgICAgaWYgKCFlbnN1cmUo
c3RhdGUsIDEpIHx8ICpzdGF0ZS0+cG9zIDwgbWluIHx8ICpzdGF0ZS0+cG9zID4gbWF4KQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBzdGF0ZS0+cG9zKys7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIHdzID0gKigKKy8vICAgICAgICAgICAleDIwIC8gICAgICAgICAgICAgIDsgU3Bh
Y2UKKy8vICAgICAgICAgICAleDA5IC8gICAgICAgICAgICAgIDsgSG9yaXpvbnRhbCB0YWIKKy8v
ICAgICAgICAgICAleDBBIC8gICAgICAgICAgICAgIDsgTGluZSBmZWVkIG9yIE5ldyBsaW5lCisv
LyAgICAgICAgICAgJXgwRCAgICAgICAgICAgICAgICA7IENhcnJpYWdlIHJldHVybgorLy8gICAg
ICAgKQorc3RhdGljIGlubGluZSB2b2lkIHdzKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICB3aGlsZSAo
c3RhdGUtPnBvcyA8IHN0YXRlLT5lbmQpIHsKKyAgICAgICAgY29uc3QgVUNoYXIgY2ggPSAqc3Rh
dGUtPnBvczsKKyAgICAgICAgaWYgKGNoICE9ICcgJyAmJiBjaCAhPSAnXHQnICYmIGNoICE9ICdc
bicgJiYgY2ggIT0gJ1xyJykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzdGF0ZS0+cG9z
Kys7CisgICAgfQorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgcGFkZGVkTGl0ZXJhbChTdGF0ZSog
c3RhdGUsIFVDaGFyIGNoKQoreworICAgIHdzKHN0YXRlKTsKKyAgICBpZiAoIWxpdGVyYWwoc3Rh
dGUsIGNoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHdzKHN0YXRlKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworLy8gTGl0ZXJhbHMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBiZWdpbi1hcnJh
eSAgICAgPSB3cyAleDVCIHdzICA7IFsgbGVmdCBzcXVhcmUgYnJhY2tldAorc3RhdGljIGlubGlu
ZSBib29sIGJlZ2luQXJyYXkoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBwYWRkZWRMaXRl
cmFsKHN0YXRlLCBMJ1snKTsKK30KKworLy8gYmVnaW4tb2JqZWN0ICAgID0gd3MgJXg3QiB3cyAg
OyB7IGxlZnQgY3VybHkgYnJhY2tldAorc3RhdGljIGlubGluZSBib29sIGJlZ2luT2JqZWN0KFN0
YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gcGFkZGVkTGl0ZXJhbChzdGF0ZSwgTCd7Jyk7Cit9
CisKKy8vIGVuZC1hcnJheSAgICAgICA9IHdzICV4NUQgd3MgIDsgXSByaWdodCBzcXVhcmUgYnJh
Y2tldAorc3RhdGljIGlubGluZSBib29sIGVuZEFycmF5KFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBy
ZXR1cm4gcGFkZGVkTGl0ZXJhbChzdGF0ZSwgTCddJyk7Cit9CisKKy8vIGVuZC1vYmplY3QgICAg
ICA9IHdzICV4N0Qgd3MgIDsgfSByaWdodCBjdXJseSBicmFja2V0CitzdGF0aWMgaW5saW5lIGJv
b2wgZW5kT2JqZWN0KFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gcGFkZGVkTGl0ZXJhbChz
dGF0ZSwgTCd9Jyk7Cit9CisKKy8vIG5hbWUtc2VwYXJhdG9yICA9IHdzICV4M0Egd3MgIDsgOiBj
b2xvbgorc3RhdGljIGlubGluZSBib29sIG5hbWVTZXBhcmF0b3IoU3RhdGUqIHN0YXRlKQorewor
ICAgIHJldHVybiBwYWRkZWRMaXRlcmFsKHN0YXRlLCBMJzonKTsKK30KKworLy8gdmFsdWUtc2Vw
YXJhdG9yID0gd3MgJXgyQyB3cyAgOyAsIGNvbW1hCitzdGF0aWMgaW5saW5lIGJvb2wgdmFsdWVT
ZXBhcmF0b3IoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBwYWRkZWRMaXRlcmFsKHN0YXRl
LCBMJywnKTsKK30KKworLy8gZmFsc2UgPSAleDY2LjYxLjZjLjczLjY1ICAgOyBmYWxzZQorc3Rh
dGljIGlubGluZSBib29sIGxpdGVyYWxGYWxzZShTdGF0ZSogc3RhdGUpCit7CisgICAgc3RhdGlj
IGNvbnN0IFVDaGFyIGZhbHNlTGl0ZXJhbFtdID0geyAnZicsICdhJywgJ2wnLCAncycsICdlJywg
J1wwJyB9OworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCBmYWxzZUxpdGVyYWwpOworfQorCisv
LyBudWxsICA9ICV4NmUuNzUuNmMuNmMgICAgICA7IG51bGwKK3N0YXRpYyBpbmxpbmUgYm9vbCBs
aXRlcmFsTnVsbChTdGF0ZSogc3RhdGUpCit7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIG51bGxM
aXRlcmFsW10gPSB7ICduJywgJ3UnLCAnbCcsICdsJywgJ1wwJyB9OworICAgIHJldHVybiBsaXRl
cmFsKHN0YXRlLCBudWxsTGl0ZXJhbCk7Cit9CisKKy8vIHRydWUgID0gJXg3NC43Mi43NS42NSAg
ICAgIDsgdHJ1ZQorc3RhdGljIGlubGluZSBib29sIGxpdGVyYWxUcnVlKFN0YXRlKiBzdGF0ZSkK
K3sKKyAgICBzdGF0aWMgY29uc3QgVUNoYXIgdHJ1ZUxpdGVyYWxbXSA9IHsgJ3QnLCAncicsICd1
JywgJ2UnLCAnXDAnIH07CisgICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsIHRydWVMaXRlcmFsKTsK
K30KKworLy8gTnVtYmVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBkZWNpbWFsLXBvaW50ID0gJXgy
RSAgICAgICA7IC4KK3N0YXRpYyBpbmxpbmUgYm9vbCBkZWNpbWFsUG9pbnQoU3RhdGUqIHN0YXRl
KQoreworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCAnLicpOworfQorCisvLyBkaWdpdDEtOSA9
ICV4MzEtMzkgICAgICAgICA7IDEtOQorc3RhdGljIGlubGluZSBib29sIGRpZ2l0MTkoU3RhdGUq
IHN0YXRlKQoreworICAgIHJldHVybiBsaXRlcmFsUmFuZ2Uoc3RhdGUsICcxJywgJzknKTsKK30K
Kworc3RhdGljIGlubGluZSBib29sIGRpZ2l0KFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4g
bGl0ZXJhbFJhbmdlKHN0YXRlLCAnMCcsICc5Jyk7Cit9CisKKy8vIGUgPSAleDY1IC8gJXg0NSAg
ICAgICAgICAgIDsgZSBFCitzdGF0aWMgaW5saW5lIGJvb2wgZShTdGF0ZSogc3RhdGUpCit7Cisg
ICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsICdlJykgfHwgbGl0ZXJhbChzdGF0ZSwgJ0UnKTsKK30K
KworLy8gbWludXMgPSAleDJEICAgICAgICAgICAgICAgOyAtCitzdGF0aWMgaW5saW5lIGJvb2wg
bWludXMoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCAnLScpOwor
fQorCisvLyBwbHVzID0gJXgyQiAgICAgICAgICAgICAgICA7ICsKK3N0YXRpYyBpbmxpbmUgYm9v
bCBwbHVzKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gbGl0ZXJhbChzdGF0ZSwgJysnKTsK
K30KKworLy8gemVybyA9ICV4MzAgICAgICAgICAgICAgICAgOyAwCitzdGF0aWMgaW5saW5lIGJv
b2wgemVybyhTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsICcwJyk7
Cit9CisKKy8vIGZyYWMgPSBkZWNpbWFsLXBvaW50IDEqRElHSVQKK3N0YXRpYyBpbmxpbmUgYm9v
bCBmcmFjKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBTdGF0ZSBsb2NhbFN0YXRlID0gKnN0YXRlOwor
ICAgIGlmIChkZWNpbWFsUG9pbnQoJmxvY2FsU3RhdGUpICYmIGRpZ2l0KCZsb2NhbFN0YXRlKSkg
eworICAgICAgICB3aGlsZShkaWdpdCgmbG9jYWxTdGF0ZSkpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgKnN0YXRlID0gbG9jYWxTdGF0ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gaW50ID0gemVybyAvICggZGlnaXQxLTkg
KkRJR0lUICkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpbnRlZ2VyKFN0YXRlKiBzdGF0ZSkKK3sKKyAg
ICBpZiAoemVybyhzdGF0ZSkpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGlmIChkaWdpdDE5
KHN0YXRlKSkgeworICAgICAgICB3aGlsZShkaWdpdChzdGF0ZSkpCisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30K
KworLy8gZXhwID0gZSBbIG1pbnVzIC8gcGx1cyBdIDEqRElHSVQKK3N0YXRpYyBpbmxpbmUgYm9v
bCBleHAoU3RhdGUqIHN0YXRlKQoreworICAgIGlmIChlKHN0YXRlKSAmJgorICAgICAgICAobWlu
dXMoc3RhdGUpIHx8IHBsdXMoc3RhdGUpIHx8IHRydWUpICYmCisgICAgICAgIGRpZ2l0KHN0YXRl
KSkgeworICAgICAgICB3aGlsZShkaWdpdChzdGF0ZSkpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8g
bnVtYmVyID0gWyBtaW51cyBdIGludCBbIGZyYWMgXSBbIGV4cCBdCitzdGF0aWMgaW5saW5lIGJv
b2wgbnVtYmVyKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBtaW51cyhzdGF0ZSk7CisgICAgaWYgKCFp
bnRlZ2VyKHN0YXRlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFN0YXRlIGxvY2FsU3Rh
dGUgPSAqc3RhdGU7CisgICAgaWYgKGZyYWMoJmxvY2FsU3RhdGUpKQorICAgICAgICAqc3RhdGUg
PSBsb2NhbFN0YXRlOworICAgIGxvY2FsU3RhdGUgPSAqc3RhdGU7CisgICAgaWYgKGV4cCgmbG9j
YWxTdGF0ZSkpCisgICAgICAgICpzdGF0ZSA9IGxvY2FsU3RhdGU7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKKy8vIFN0cmluZ3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLy8gcXVvdGF0aW9uLW1hcmsgPSAl
eDIyICAgICAgOyAiCitzdGF0aWMgaW5saW5lIGJvb2wgcXVvdGF0aW9uTWFyayhTdGF0ZSogc3Rh
dGUpCit7CisgICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsICciJyk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgYm9vbCBoZXhkaWcoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBkaWdpdChzdGF0ZSkg
fHwgbGl0ZXJhbFJhbmdlKHN0YXRlLCAnYScsICdmJykgfHwgbGl0ZXJhbFJhbmdlKHN0YXRlLCAn
QScsICdGJyk7Cit9CisKKy8vIHN0cmluZyA9IHF1b3RhdGlvbi1tYXJrICpjaGFyIHF1b3RhdGlv
bi1tYXJrCisvLyBjaGFyID0gdW5lc2NhcGVkIC8KKy8vICAgICAgICBlc2NhcGUgKAorLy8gICAg
ICAgICAgICAleDIyIC8gICAgICAgICAgOyAiICAgIHF1b3RhdGlvbiBtYXJrICBVKzAwMjIKKy8v
ICAgICAgICAgICAgJXg1QyAvICAgICAgICAgIDsgXCAgICByZXZlcnNlIHNvbGlkdXMgVSswMDVD
CisvLyAgICAgICAgICAgICV4MkYgLyAgICAgICAgICA7IC8gICAgc29saWR1cyAgICAgICAgIFUr
MDAyRgorLy8gICAgICAgICAgICAleDYyIC8gICAgICAgICAgOyBiICAgIGJhY2tzcGFjZSAgICAg
ICBVKzAwMDgKKy8vICAgICAgICAgICAgJXg2NiAvICAgICAgICAgIDsgZiAgICBmb3JtIGZlZWQg
ICAgICAgVSswMDBDCisvLyAgICAgICAgICAgICV4NkUgLyAgICAgICAgICA7IG4gICAgbGluZSBm
ZWVkICAgICAgIFUrMDAwQQorLy8gICAgICAgICAgICAleDcyIC8gICAgICAgICAgOyByICAgIGNh
cnJpYWdlIHJldHVybiBVKzAwMEQKKy8vICAgICAgICAgICAgJXg3NCAvICAgICAgICAgIDsgdCAg
ICB0YWIgICAgICAgICAgICAgVSswMDA5CisvLyAgICAgICAgICAgICV4NzUgNEhFWERJRyApICA7
IHVYWFhYICAgICAgICAgICAgICAgIFUrWFhYWAorLy8gZXNjYXBlID0gJXg1QyAgICAgICAgICAg
ICAgOyBcICAgICAgIC8vIEFkZCBzcGFjZXMgdG8gbWFrZSBDKysgcGFyc2VyIGhhcHB5LgorLy8g
cXVvdGF0aW9uLW1hcmsgPSAleDIyICAgICAgOyAiCisvLyB1bmVzY2FwZWQgPSAleDIwLTIxIC8g
JXgyMy01QiAvICV4NUQtMTBGRkZGCitzdGF0aWMgYm9vbCBzdHJpbmcoU3RhdGUqIHN0YXRlKSB7
CisgICAgLy8gTWFudWFsbHkgaGFuZGxlIHRoZSBwYXJzaW5nIG9mIHN0cmluZy4gIFdlIGRvIHRo
aXMgdG8gb3B0aW1pemUgYXdheQorICAgIC8vIG11bHRpcGxlIGNvbXBhcmVzIG9mIHxwb3N8IGFu
ZCB8ZW5kfC4KKyAgICBTdGF0ZSBsb2NhbFN0YXRlID0gKnN0YXRlOworICAgIGlmIChxdW90YXRp
b25NYXJrKCZsb2NhbFN0YXRlKSkgeworICAgICAgICB3aGlsZSAobG9jYWxTdGF0ZS5wb3MgPCBs
b2NhbFN0YXRlLmVuZCkgeworICAgICAgICAgICAgY29uc3QgVUNoYXIgY2ggPSAqbG9jYWxTdGF0
ZS5wb3MrKzsKKyAgICAgICAgICAgIGlmIChjaCA9PSAnIicpIHsKKyAgICAgICAgICAgICAgICAq
c3RhdGUgPSBsb2NhbFN0YXRlOworICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICAgICAgfSBlbHNlIGlmIChjaCA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChj
aCkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAnXFwnOgorICAgICAgICAgICAgICAgICAgICBjYXNlICcvJzoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAnYic6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlICduJzoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6CisgICAg
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAn
dSc6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaGV4ZGlnKCZsb2NhbFN0YXRlKSAmJiBo
ZXhkaWcoJmxvY2FsU3RhdGUpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4ZGln
KCZsb2NhbFN0YXRlKSAmJiBoZXhkaWcoJmxvY2FsU3RhdGUpKQorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBpcyB2ZXJ5IHN0cmljdC4gIFdlIHNob3VsZCBjb25zaWRlciBhY2NlcHRpbmcKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIG1vcmUgZXNjYXBlZCBjaGFyYWN0ZXJzLgorICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1x4MjAnIHx8IGNoID09ICdceDIxJyB8fAorICAgICAg
ICAgICAgICAgICAgICAgICAoY2ggPj0gJ1x4MjMnICYmIGNoIDw9ICdceDVCJykgfHwKKyAgICAg
ICAgICAgICAgICAgICAgICAgY2ggPj0gJ1x4NUInKSB7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IHdoYXQgYWJvdXQgfGNoIDw9IEwnXHgxMEZGRkYnfCA/CisgICAgICAgICAgICAgICAgY29u
dGludWU7ICAvLyBUaGUgY29tbW9uIGNhc2UuCisgICAgICAgICAgICB9CisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7ICAvLyBXZSBoaXQgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOyAgLy8gVW50ZXJtaW5hdGVkIHN0cmluZy4KK30KKwor
Ly8gSlNPTlRleHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisvLyBvYmplY3QgPSBiZWdpbi1vYmplY3QgWyBt
ZW1iZXIgKiggdmFsdWUtc2VwYXJhdG9yIG1lbWJlciApIF0gZW5kLW9iamVjdAorLy8gbWVtYmVy
ID0gc3RyaW5nIG5hbWUtc2VwYXJhdG9yIHZhbHVlCisvLyBhcnJheSA9IGJlZ2luLWFycmF5IFsg
dmFsdWUgKiggdmFsdWUtc2VwYXJhdG9yIHZhbHVlICkgXSBlbmQtYXJyYXkKKy8vIHZhbHVlID0g
ZmFsc2UgLyBudWxsIC8gdHJ1ZSAvIG9iamVjdCAvIGFycmF5IC8gbnVtYmVyIC8gc3RyaW5nCisv
LyBKU09OLXRleHQgPSBvYmplY3QgLyBhcnJheQorc3RhdGljIGJvb2wgSlNPTlRleHQoU3RhdGUq
IHN0YXRlKQoreworICAgIERlcXVlPENvbnRleHQ+IHN0YWNrOworICAgIHN0YWNrLnByZXBlbmQo
VGV4dCk7CisgICAgd2hpbGUgKCFzdGFjay5pc0VtcHR5KCkpIHsKKyAgICAgICAgc3dpdGNoIChz
dGFjay5maXJzdCgpKSB7CisgICAgICAgICAgICBjYXNlIFRleHQ6CisgICAgICAgICAgICAgICAg
aWYgKGJlZ2luT2JqZWN0KHN0YXRlKSkgeworICAgICAgICAgICAgICAgICAgICBzdGFjay5yZW1v
dmVGaXJzdCgpOworICAgICAgICAgICAgICAgICAgICBzdGFjay5wcmVwZW5kKEJlZ2luT2JqZWN0
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSAKKyAg
ICAgICAgICAgICAgICBpZiAoYmVnaW5BcnJheShzdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgc3RhY2sucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucHJlcGVu
ZChCZWdpbkFycmF5KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgY2Fz
ZSBCZWdpbk9iamVjdDoKKyAgICAgICAgICAgICAgICBpZiAoZW5kT2JqZWN0KHN0YXRlKSkgewor
ICAgICAgICAgICAgICAgICAgICBzdGFjay5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFz
dHJpbmcoc3RhdGUpIHx8ICFuYW1lU2VwYXJhdG9yKHN0YXRlKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUZpcnN0KCk7Cisg
ICAgICAgICAgICAgICAgc3RhY2sucHJlcGVuZChDb250aW51ZU9iamVjdCk7CisgICAgICAgICAg
ICAgICAgc3RhY2sucHJlcGVuZChWYWx1ZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgICAgIGNhc2UgQ29udGludWVPYmplY3Q6CisgICAgICAgICAgICAgICAgaWYgKGVu
ZE9iamVjdChzdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlRmlyc3Qo
KTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICghdmFsdWVTZXBhcmF0b3Ioc3RhdGUpIHx8ICFzdHJpbmcoc3RhdGUp
IHx8ICFuYW1lU2VwYXJhdG9yKHN0YXRlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICAgICAgICAgIHN0YWNrLnByZXBlbmQoVmFsdWUpOworICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjYXNlIEJlZ2luQXJyYXk6CisgICAgICAgICAg
ICAgICAgaWYgKGVuZEFycmF5KHN0YXRlKSkgeworICAgICAgICAgICAgICAgICAgICBzdGFjay5y
ZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB9CisgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAg
ICAgICBzdGFjay5wcmVwZW5kKENvbnRpbnVlQXJyYXkpOworICAgICAgICAgICAgICAgIHN0YWNr
LnByZXBlbmQoVmFsdWUpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAg
ICBjYXNlIENvbnRpbnVlQXJyYXk6CisgICAgICAgICAgICAgICAgaWYgKGVuZEFycmF5KHN0YXRl
KSkgeworICAgICAgICAgICAgICAgICAgICBzdGFjay5yZW1vdmVGaXJzdCgpOworICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
aWYgKCF2YWx1ZVNlcGFyYXRvcihzdGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgICAgICAgICBzdGFjay5wcmVwZW5kKFZhbHVlKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgY2FzZSBWYWx1ZToKKyAgICAgICAgICAgICAg
ICBpZiAobGl0ZXJhbEZhbHNlKHN0YXRlKSB8fCBsaXRlcmFsTnVsbChzdGF0ZSkgfHwgbGl0ZXJh
bFRydWUoc3RhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgIHN0YWNrLnJlbW92ZUZpcnN0KCk7
CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICBpZiAobnVtYmVyKHN0YXRlKSkgeworICAgICAgICAgICAgICAgICAgICBzdGFj
ay5yZW1vdmVGaXJzdCgpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHN0cmluZyhzdGF0ZSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgc3RhY2sucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChiZWdpbk9iamVj
dChzdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVtb3ZlRmlyc3QoKTsKKyAg
ICAgICAgICAgICAgICAgICAgc3RhY2sucHJlcGVuZChCZWdpbk9iamVjdCk7CisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoYmVnaW5BcnJheShzdGF0ZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucmVtb3Zl
Rmlyc3QoKTsKKyAgICAgICAgICAgICAgICAgICAgc3RhY2sucHJlcGVuZChCZWdpbkFycmF5KTsK
KyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSAKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIC8vIFdlJ3ZlIHN1Y2NlZWRlZCBpbiBwYXJzaW5n
IHRoZSB0ZXh0IGlmIHdlJ3ZlIGV4aGF1c3RlZCBpdHMgY29udGVudHMuCisgICAgcmV0dXJuIHN0
YXRlLT5wb3MgPT0gc3RhdGUtPmVuZDsKK30KKworc3RhdGljIGJvb2wgcGFyc2UoY29uc3QgVVN0
cmluZyYgdGV4dCkKK3sKKyAgICBTdGF0ZSBzdGF0ZTsKKyAgICBzdGF0ZS5wb3MgPSB0ZXh0LmRh
dGEoKTsKKyAgICBzdGF0ZS5lbmQgPSBzdGF0ZS5wb3MgKyB0ZXh0LnNpemUoKTsKKyAgICByZXR1
cm4gSlNPTlRleHQoJnN0YXRlKTsKK30KKworfSAvLyBKU09OUGFyc2VyCiAKIC8vIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotSlNWYWx1ZSogSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSosIEpTT2Jq
ZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogSlNPTlByb3RvRnVuY1Bh
cnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYg
YXJncykKIHsKLSAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY29uc3QgVVN0cmluZyYgdGV4dCA9
IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOworICAgIHJldHVybiBKU09OUGFyc2VyOjpwYXJzZSh0
ZXh0KSA/IGpzU3RyaW5nKGV4ZWMsICJZZXMuIikgOiBqc1N0cmluZyhleGVjLCAiTm8uIik7CiB9
CiAKIEpTVmFsdWUqIEpTT05Qcm90b0Z1bmNTdHJpbmdpZnkoRXhlY1N0YXRlKiBleGVjLCBKU09i
amVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JikKLS0gCjEuNS41LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22271</attachid>
            <date>2008-07-14 15:54:44 -0700</date>
            <delta_ts>2008-07-14 15:54:44 -0700</delta_ts>
            <desc>Work-in-progress: Step 2: JSON parser front-end</desc>
            <filename>0002-parser-front-end.patch</filename>
            <type>text/plain</type>
            <size>14826</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">RnJvbSBjNWM5M2UwMmYxZjk3MDFkNzMyYjQ4MjM5Y2FlMDdmZGU3ZDU1M2YyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGFtIEJhcnRoIDxhYmFydGhAd2Via2l0Lm9yZz4KRGF0ZTog
TW9uLCAxNCBKdWwgMjAwOCAwMjo1MDowNyAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIHBhcnNlciBm
cm9udC1lbmQKCi0tLQogSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3BwIHwgIDUxNiAr
KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiAxIGZpbGVzIGNoYW5nZWQsIDUx
NCBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2tqcy9KU09OT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU09OT2JqZWN0LmNw
cAppbmRleCA5ODU1MGU0Li41MmYyMmYzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMv
SlNPTk9iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3BwCkBA
IC0yMiw2ICsyMiw3IEBACiAKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPHd0Zi9EZXF1ZS5oPgogCiBuYW1lc3BhY2Ug
S0pTIHsKIApAQCAtNjMsMTIgKzY0LDUyMyBAQCBKU1ZhbHVlKiBKU09OT2JqZWN0OjpnZXRWYWx1
ZVByb3BlcnR5KEV4ZWNTdGF0ZSosIGludCkgY29uc3QKICAgICByZXR1cm4gMDsKIH0KIAorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEpTT05QYXJzZXIgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorCituYW1lc3BhY2UgSlNPTlBhcnNlciB7CisKK2VudW0gQ29udGV4
dCB7CisgICAgVGV4dCwKKyAgICBWYWx1ZSwKKyAgICBPYmplY3QsCisgICAgQ29udGludWVPYmpl
Y3QsCisgICAgQXJyYXksCisgICAgQ29udGludWVBcnJheQorfTsKKworc3RydWN0IFN0YXRlIHsK
KyAgICBjb25zdCBVQ2hhciogcG9zOworICAgIGNvbnN0IFVDaGFyKiBlbmQ7CisgICAgRGVxdWU8
Q29udGV4dD4gc3RhY2s7Cit9OworCitjbGFzcyBTY29wZWRUcmFuc2FjdGlvbiB7CisgICAgcHVi
bGljOgorICAgICAgICBTY29wZWRUcmFuc2FjdGlvbihTdGF0ZSogc3RhdGUpCisgICAgICAgICAg
ICA6IG1fc3RhdGUoc3RhdGUpCisgICAgICAgICAgICAsIG1fcG9zKHN0YXRlLT5wb3MpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlKTsKKyAgICAgICAgfQorCisgICAgICAg
IH5TY29wZWRUcmFuc2FjdGlvbigpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3N0YXRl
KQorICAgICAgICAgICAgICAgIHJvbGxCYWNrKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IHJvbGxCYWNrKCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUpOworICAg
ICAgICAgICAgbV9zdGF0ZS0+cG9zID0gbV9wb3M7CisgICAgICAgICAgICBtX3N0YXRlID0gMDsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY29tbWl0KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG1fc3RhdGUpOworICAgICAgICAgICAgbV9zdGF0ZSA9IDA7CisgICAgICAgIH0K
KworICAgIHByaXZhdGU6CisgICAgICAgIC8vIFRoZSBwYXJzZXIgc3RhdGUgYXNzb2NpYXRlZCB3
aXRoIHRoaXMgdHJhbnNhY3Rpb24uICBUaGlzIG1lbWJlciBpcworICAgICAgICAvLyBudWxsIGlm
IHRoZSB0cmFuc2FjdGlvbiBoYXMgYWxyZWFkeSBiZWVuIGNvbW1pdHRlZCBvciBhYm9ydGVkLgor
ICAgICAgICBTdGF0ZSogbV9zdGF0ZTsKKworICAgICAgICAvLyBUaGUgfHBvc3wgc3RhdGUgb2Yg
dGhlIHBhcnNlIHdoZW4gdGhlIHRyYW5zYWN0aW9uIGJlZ2Fpbi4gIFRoaXMKKyAgICAgICAgLy8g
dmFsdWUgd2lsbCBiZSByZXN0b3JlZCB0byB8bV9zdGF0ZS0+cG9zfCBpZiB0aGUgdHJhbnNhY3Rp
b24gaXMKKyAgICAgICAgLy8gcm9sbGVkIGJhY2suCisgICAgICAgIGNvbnN0IFVDaGFyKiBtX3Bv
czsKK307CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBlbnN1cmUoU3RhdGUqIHN0YXRlLCBpbnQgc2l6
ZSkKK3sKKyAgICByZXR1cm4gc3RhdGUtPnBvcyArIHNpemUgPD0gc3RhdGUtPmVuZDsKK30KKwor
c3RhdGljIGlubGluZSBib29sIGxpdGVyYWwoU3RhdGUqIHN0YXRlLCBVQ2hhciBjaCkKK3sKKyAg
ICBpZiAoIWVuc3VyZShzdGF0ZSwgMSkgfHwgKCpzdGF0ZS0+cG9zICE9IGNoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgc3RhdGUtPnBvcysrOworICAgIHJldHVybiB0cnVlOworfQor
CitzdGF0aWMgaW5saW5lIGJvb2wgbGl0ZXJhbChTdGF0ZSogc3RhdGUsIGNvbnN0IFVDaGFyKiBz
dHIpCit7CisgICAgU2NvcGVkVHJhbnNhY3Rpb24gdHJhbnNhY3Rpb24oc3RhdGUpOworICAgIHdo
aWxlIChzdGF0ZS0+cG9zIDwgc3RhdGUtPmVuZCkgeworICAgICAgICBpZiAoKnN0ciA9PSAnXDAn
KSB7CisgICAgICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICB9CisgICAgICAgIGlmICgqc3RhdGUtPnBvcysrICE9ICpzdHIrKykK
KyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyBpbmxpbmUgYm9vbCBsaXRlcmFsUmFuZ2UoU3RhdGUqIHN0YXRlLCBVQ2hhciBtaW4sIFVDaGFy
IG1heCkKK3sKKyAgICBpZiAoIWVuc3VyZShzdGF0ZSwgMSkgfHwgKnN0YXRlLT5wb3MgPCBtaW4g
fHwgKnN0YXRlLT5wb3MgPiBtYXgpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHN0YXRl
LT5wb3MrKzsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gd3MgPSAqKAorLy8gICAgICAgICAg
ICV4MjAgLyAgICAgICAgICAgICAgOyBTcGFjZQorLy8gICAgICAgICAgICV4MDkgLyAgICAgICAg
ICAgICAgOyBIb3Jpem9udGFsIHRhYgorLy8gICAgICAgICAgICV4MEEgLyAgICAgICAgICAgICAg
OyBMaW5lIGZlZWQgb3IgTmV3IGxpbmUKKy8vICAgICAgICAgICAleDBEICAgICAgICAgICAgICAg
IDsgQ2FycmlhZ2UgcmV0dXJuCisvLyAgICAgICApCitzdGF0aWMgaW5saW5lIHZvaWQgd3MoU3Rh
dGUqIHN0YXRlKQoreworICAgIHdoaWxlIChzdGF0ZS0+cG9zIDwgc3RhdGUtPmVuZCkgeworICAg
ICAgICBjb25zdCBVQ2hhciBjaCA9ICpzdGF0ZS0+cG9zOworICAgICAgICBpZiAoY2ggIT0gJyAn
ICYmIGNoICE9ICdcdCcgJiYgY2ggIT0gJ1xuJyAmJiBjaCAhPSAnXHInKQorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIHN0YXRlLT5wb3MrKzsKKyAgICB9Cit9CisKKy8vIExpdGVyYWxzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworc3RhdGljIGlubGluZSBib29sIHBhZGRlZExpdGVyYWwoU3RhdGUqIHN0
YXRlLCBVQ2hhciBjaCkKK3sKKyAgICBTY29wZWRUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzdGF0
ZSk7CisgICAgd3Moc3RhdGUpOworICAgIGlmICghbGl0ZXJhbChzdGF0ZSwgY2gpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgd3Moc3RhdGUpOworICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgp
OworICAgIHJldHVybiB0cnVlOworfQorCisvLyBiZWdpbi1hcnJheSAgICAgPSB3cyAleDVCIHdz
ICA7IFsgbGVmdCBzcXVhcmUgYnJhY2tldAorc3RhdGljIGlubGluZSBib29sIGJlZ2luQXJyYXko
U3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBwYWRkZWRMaXRlcmFsKHN0YXRlLCBMJ1snKTsK
K30KKworLy8gYmVnaW4tb2JqZWN0ICAgID0gd3MgJXg3QiB3cyAgOyB7IGxlZnQgY3VybHkgYnJh
Y2tldAorc3RhdGljIGlubGluZSBib29sIGJlZ2luT2JqZWN0KFN0YXRlKiBzdGF0ZSkKK3sKKyAg
ICByZXR1cm4gcGFkZGVkTGl0ZXJhbChzdGF0ZSwgTCd7Jyk7Cit9CisKKy8vIGVuZC1hcnJheSAg
ICAgICA9IHdzICV4NUQgd3MgIDsgXSByaWdodCBzcXVhcmUgYnJhY2tldAorc3RhdGljIGlubGlu
ZSBib29sIGVuZEFycmF5KFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gcGFkZGVkTGl0ZXJh
bChzdGF0ZSwgTCddJyk7Cit9CisKKy8vIGVuZC1vYmplY3QgICAgICA9IHdzICV4N0Qgd3MgIDsg
fSByaWdodCBjdXJseSBicmFja2V0CitzdGF0aWMgaW5saW5lIGJvb2wgZW5kT2JqZWN0KFN0YXRl
KiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gcGFkZGVkTGl0ZXJhbChzdGF0ZSwgTCd9Jyk7Cit9CisK
Ky8vIG5hbWUtc2VwYXJhdG9yICA9IHdzICV4M0Egd3MgIDsgOiBjb2xvbgorc3RhdGljIGlubGlu
ZSBib29sIG5hbWVTZXBhcmF0b3IoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBwYWRkZWRM
aXRlcmFsKHN0YXRlLCBMJzonKTsKK30KKworLy8gdmFsdWUtc2VwYXJhdG9yID0gd3MgJXgyQyB3
cyAgOyAsIGNvbW1hCitzdGF0aWMgaW5saW5lIGJvb2wgdmFsdWVTZXBhcmF0b3IoU3RhdGUqIHN0
YXRlKQoreworICAgIHJldHVybiBwYWRkZWRMaXRlcmFsKHN0YXRlLCBMJywnKTsKK30KKworLy8g
ZmFsc2UgPSAleDY2LjYxLjZjLjczLjY1ICAgOyBmYWxzZQorc3RhdGljIGlubGluZSBib29sIGxp
dGVyYWxGYWxzZShTdGF0ZSogc3RhdGUpCit7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIGZhbHNl
TGl0ZXJhbFtdID0geyAnZicsICdhJywgJ2wnLCAncycsICdlJywgJ1wwJyB9OworICAgIHJldHVy
biBsaXRlcmFsKHN0YXRlLCBmYWxzZUxpdGVyYWwpOworfQorCisvLyBudWxsICA9ICV4NmUuNzUu
NmMuNmMgICAgICA7IG51bGwKK3N0YXRpYyBpbmxpbmUgYm9vbCBsaXRlcmFsTnVsbChTdGF0ZSog
c3RhdGUpCit7CisgICAgc3RhdGljIGNvbnN0IFVDaGFyIG51bGxMaXRlcmFsW10gPSB7ICduJywg
J3UnLCAnbCcsICdsJywgJ1wwJyB9OworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCBudWxsTGl0
ZXJhbCk7Cit9CisKKy8vIHRydWUgID0gJXg3NC43Mi43NS42NSAgICAgIDsgdHJ1ZQorc3RhdGlj
IGlubGluZSBib29sIGxpdGVyYWxUcnVlKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBzdGF0aWMgY29u
c3QgVUNoYXIgdHJ1ZUxpdGVyYWxbXSA9IHsgJ3QnLCAncicsICd1JywgJ2UnLCAnXDAnIH07Cisg
ICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsIHRydWVMaXRlcmFsKTsKK30KKworLy8gTnVtYmVycyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCisvLyBkZWNpbWFsLXBvaW50ID0gJXgyRSAgICAgICA7IC4KK3N0YXRp
YyBpbmxpbmUgYm9vbCBkZWNpbWFsUG9pbnQoU3RhdGUqIHN0YXRlKQoreworICAgIHJldHVybiBs
aXRlcmFsKHN0YXRlLCAnLicpOworfQorCisvLyBkaWdpdDEtOSA9ICV4MzEtMzkgICAgICAgICA7
IDEtOQorc3RhdGljIGlubGluZSBib29sIGRpZ2l0MTkoU3RhdGUqIHN0YXRlKQoreworICAgIHJl
dHVybiBsaXRlcmFsUmFuZ2Uoc3RhdGUsICcxJywgJzknKTsKK30KKworc3RhdGljIGlubGluZSBi
b29sIGRpZ2l0KFN0YXRlKiBzdGF0ZSkKK3sKKyAgICByZXR1cm4gbGl0ZXJhbFJhbmdlKHN0YXRl
LCAnMCcsICc5Jyk7Cit9CisKKy8vIGUgPSAleDY1IC8gJXg0NSAgICAgICAgICAgIDsgZSBFCitz
dGF0aWMgaW5saW5lIGJvb2wgZShTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJuIGxpdGVyYWwo
c3RhdGUsICdlJykgfHwgbGl0ZXJhbChzdGF0ZSwgJ0UnKTsKK30KKworLy8gbWludXMgPSAleDJE
ICAgICAgICAgICAgICAgOyAtCitzdGF0aWMgaW5saW5lIGJvb2wgbWludXMoU3RhdGUqIHN0YXRl
KQoreworICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCAnLScpOworfQorCisvLyBwbHVzID0gJXgy
QiAgICAgICAgICAgICAgICA7ICsKK3N0YXRpYyBpbmxpbmUgYm9vbCBwbHVzKFN0YXRlKiBzdGF0
ZSkKK3sKKyAgICByZXR1cm4gbGl0ZXJhbChzdGF0ZSwgJysnKTsKK30KKworLy8gemVybyA9ICV4
MzAgICAgICAgICAgICAgICAgOyAwCitzdGF0aWMgaW5saW5lIGJvb2wgemVybyhTdGF0ZSogc3Rh
dGUpCit7CisgICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsICcwJyk7Cit9CisKKy8vIGZyYWMgPSBk
ZWNpbWFsLXBvaW50IDEqRElHSVQKK3N0YXRpYyBpbmxpbmUgYm9vbCBmcmFjKFN0YXRlKiBzdGF0
ZSkKK3sKKyAgICBTY29wZWRUcmFuc2FjdGlvbiB0cmFuc2FjdGlvbihzdGF0ZSk7CisgICAgaWYg
KGRlY2ltYWxQb2ludChzdGF0ZSkgJiYgZGlnaXQoc3RhdGUpKSB7CisgICAgICAgIHdoaWxlKGRp
Z2l0KHN0YXRlKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsK
K30KKworLy8gaW50ID0gemVybyAvICggZGlnaXQxLTkgKkRJR0lUICkKK3N0YXRpYyBpbmxpbmUg
Ym9vbCBpbnRlZ2VyKFN0YXRlKiBzdGF0ZSkKK3sKKyAgICBTY29wZWRUcmFuc2FjdGlvbiB0cmFu
c2FjdGlvbihzdGF0ZSk7CisgICAgaWYgKHplcm8oc3RhdGUpKSB7CisgICAgICAgIHRyYW5zYWN0
aW9uLmNvbW1pdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYgKGRpZ2l0
MTkoc3RhdGUpKSB7CisgICAgICAgIHdoaWxlKGRpZ2l0KHN0YXRlKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICB0cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gZXhwID0gZSBbIG1pbnVzIC8g
cGx1cyBdIDEqRElHSVQKK3N0YXRpYyBpbmxpbmUgYm9vbCBleHAoU3RhdGUqIHN0YXRlKQorewor
ICAgIFNjb3BlZFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKHN0YXRlKTsKKyAgICBpZiAoZShzdGF0
ZSkgJiYKKyAgICAgICAgKG1pbnVzKHN0YXRlKSB8fCBwbHVzKHN0YXRlKSB8fCB0cnVlKSAmJgor
ICAgICAgICBkaWdpdChzdGF0ZSkpIHsKKyAgICAgICAgd2hpbGUoZGlnaXQoc3RhdGUpKQorICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIHRyYW5zYWN0aW9uLmNvbW1pdCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCisvLyBudW1iZXIg
PSBbIG1pbnVzIF0gaW50IFsgZnJhYyBdIFsgZXhwIF0KK3N0YXRpYyBpbmxpbmUgYm9vbCBudW1i
ZXIoU3RhdGUqIHN0YXRlKQoreworICAgIFNjb3BlZFRyYW5zYWN0aW9uIHRyYW5zYWN0aW9uKHN0
YXRlKTsKKyAgICBtaW51cyhzdGF0ZSk7CisgICAgaWYgKCFpbnRlZ2VyKHN0YXRlKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIGZyYWMoc3RhdGUpOworICAgIGV4cChzdGF0ZSk7CisgICAg
dHJhbnNhY3Rpb24uY29tbWl0KCk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8vIFN0cmluZ3Mg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KKworLy8gcXVvdGF0aW9uLW1hcmsgPSAleDIyICAgICAgOyAiCitzdGF0
aWMgaW5saW5lIGJvb2wgcXVvdGF0aW9uTWFyayhTdGF0ZSogc3RhdGUpCit7CisgICAgcmV0dXJu
IGxpdGVyYWwoc3RhdGUsICciJyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBoZXhkaWcoU3Rh
dGUqIHN0YXRlKQoreworICAgIHJldHVybiBkaWdpdChzdGF0ZSkgfHwgbGl0ZXJhbFJhbmdlKHN0
YXRlLCAnYScsICdmJykgfHwgbGl0ZXJhbFJhbmdlKHN0YXRlLCAnQScsICdGJyk7Cit9CisKKy8v
IHN0cmluZyA9IHF1b3RhdGlvbi1tYXJrICpjaGFyIHF1b3RhdGlvbi1tYXJrCisvLyBjaGFyID0g
dW5lc2NhcGVkIC8KKy8vICAgICAgICBlc2NhcGUgKAorLy8gICAgICAgICAgICAleDIyIC8gICAg
ICAgICAgOyAiICAgIHF1b3RhdGlvbiBtYXJrICBVKzAwMjIKKy8vICAgICAgICAgICAgJXg1QyAv
ICAgICAgICAgIDsgXCAgICByZXZlcnNlIHNvbGlkdXMgVSswMDVDCisvLyAgICAgICAgICAgICV4
MkYgLyAgICAgICAgICA7IC8gICAgc29saWR1cyAgICAgICAgIFUrMDAyRgorLy8gICAgICAgICAg
ICAleDYyIC8gICAgICAgICAgOyBiICAgIGJhY2tzcGFjZSAgICAgICBVKzAwMDgKKy8vICAgICAg
ICAgICAgJXg2NiAvICAgICAgICAgIDsgZiAgICBmb3JtIGZlZWQgICAgICAgVSswMDBDCisvLyAg
ICAgICAgICAgICV4NkUgLyAgICAgICAgICA7IG4gICAgbGluZSBmZWVkICAgICAgIFUrMDAwQQor
Ly8gICAgICAgICAgICAleDcyIC8gICAgICAgICAgOyByICAgIGNhcnJpYWdlIHJldHVybiBVKzAw
MEQKKy8vICAgICAgICAgICAgJXg3NCAvICAgICAgICAgIDsgdCAgICB0YWIgICAgICAgICAgICAg
VSswMDA5CisvLyAgICAgICAgICAgICV4NzUgNEhFWERJRyApICA7IHVYWFhYICAgICAgICAgICAg
ICAgIFUrWFhYWAorLy8gZXNjYXBlID0gJXg1QyAgICAgICAgICAgICAgOyBcICAgICAgIC8vIEFk
ZCBzcGFjZXMgdG8gbWFrZSBDKysgcGFyc2VyIGhhcHB5LgorLy8gcXVvdGF0aW9uLW1hcmsgPSAl
eDIyICAgICAgOyAiCisvLyB1bmVzY2FwZWQgPSAleDIwLTIxIC8gJXgyMy01QiAvICV4NUQtMTBG
RkZGCitzdGF0aWMgYm9vbCBzdHJpbmcoU3RhdGUqIHN0YXRlKSB7CisgICAgU2NvcGVkVHJhbnNh
Y3Rpb24gdHJhbnNhY3Rpb24oc3RhdGUpOworICAgIGJvb2wgZXNjYXBlZCA9IGZhbHNlOworICAg
IGlmICghcXVvdGF0aW9uTWFyayhzdGF0ZSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IHdoaWxlIChzdGF0ZS0+cG9zIDwgc3RhdGUtPmVuZCkgeworICAgICAgICBjb25zdCBVQ2hhciBj
aCA9ICpzdGF0ZS0+cG9zKys7CisgICAgICAgIGlmIChlc2NhcGVkKSB7CisgICAgICAgICAgICBl
c2NhcGVkID0gZmFsc2U7CisgICAgICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSAnIic6CisgICAgICAgICAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgICAg
IGNhc2UgJy8nOgorICAgICAgICAgICAgICAgIGNhc2UgJ2InOgorICAgICAgICAgICAgICAgIGNh
c2UgJ2YnOgorICAgICAgICAgICAgICAgIGNhc2UgJ24nOgorICAgICAgICAgICAgICAgIGNhc2Ug
J3InOgorICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgorICAgICAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgICAgICAgICAgaWYg
KGhleGRpZyhzdGF0ZSkgJiYgaGV4ZGlnKHN0YXRlKSAmJgorICAgICAgICAgICAgICAgICAgICAg
ICAgaGV4ZGlnKHN0YXRlKSAmJiBoZXhkaWcoc3RhdGUpKQorICAgICAgICAgICAgICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyInKSB7CisgICAgICAgICAgICB0
cmFuc2FjdGlvbi5jb21taXQoKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICB9
IGVsc2UgaWYgKGNoID09ICdcXCcpIHsKKyAgICAgICAgICAgIGVzY2FwZWQgPSB0cnVlOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJ1x4MjAnIHx8IGNo
ID09ICdceDIxJyB8fAorICAgICAgICAgICAgICAgICAgIChjaCA+PSAnXHgyMycgJiYgY2ggPD0g
J1x4NUInKSB8fAorICAgICAgICAgICAgICAgICAgIGNoID49ICdceDVCJykgeworICAgICAgICAg
ICAgLy8gRklYTUU6IHdoYXQgYWJvdXQgfGNoIDw9IEwnXHgxMEZGRkYnfCA/CisgICAgICAgICAg
ICBjb250aW51ZTsgIC8vIFRoZSBjb21tb24gY2FzZS4KKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7ICAvLyBXZSBoaXQgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsgIC8vIFVudGVybWluYXRlZCBzdHJpbmcuCit9CisKKy8vIE1haW4gbG9vcCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworLy8gUTogRG8gd2UgbmVlZCB0cmFuc2FjdGlvbnMgZm9yIHRoZXNlIGhl
bHAgZnVuY3Rpb25zPworLy8gQTogTm8uICBXaGVuIHRoZXkgcmV0dXJuIGZhbHNlLCB3ZSBhYm9y
dCB0aGUgZW50aXJlIHBhcnNlLiAgVGhlcmUgaXMgbm8gbmVlZAorLy8gICAgdG8gcm9sbCBiYWNr
IHRoZSBzdGF0ZSBvZiB0aGUgcGFyc2VyLiAgSWYgd2UgZW5kIHVwIHVzaW5nIHxydW58IGZvcgor
Ly8gICAgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIG1haW4gcGFyc2VyIGxvb3AsIHdlJ2xsIG5l
ZWQgdG8gYWRkIHRyYW5zYWN0aW9ucy4KKworLy8gb2JqZWN0ID0gYmVnaW4tb2JqZWN0IFsgbWVt
YmVyICooIHZhbHVlLXNlcGFyYXRvciBtZW1iZXIgKSBdIGVuZC1vYmplY3QKKy8vIG1lbWJlciA9
IHN0cmluZyBuYW1lLXNlcGFyYXRvciB2YWx1ZQorc3RhdGljIGlubGluZSBib29sIG9iamVjdChT
dGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlLT5zdGFjay5maXJzdCgpID09IE9iamVj
dCk7CisgICAgaWYgKGVuZE9iamVjdChzdGF0ZSkpIHsKKyAgICAgICAgc3RhdGUtPnN0YWNrLnJl
bW92ZUZpcnN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoIXN0cmlu
ZyhzdGF0ZSkgfHwgIW5hbWVTZXBhcmF0b3Ioc3RhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgc3RhdGUtPnN0YWNrLnJlbW92ZUZpcnN0KCk7CisgICAgc3RhdGUtPnN0YWNrLnByZXBl
bmQoQ29udGludWVPYmplY3QpOworICAgIHN0YXRlLT5zdGFjay5wcmVwZW5kKFZhbHVlKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGlubGluZSBib29sIGNvbnRpbnVlT2JqZWN0KFN0
YXRlKiBzdGF0ZSkKK3sKKyAgICBBU1NFUlQoc3RhdGUtPnN0YWNrLmZpcnN0KCkgPT0gQ29udGlu
dWVPYmplY3QpOworICAgIGlmIChlbmRPYmplY3Qoc3RhdGUpKSB7CisgICAgICAgIHN0YXRlLT5z
dGFjay5yZW1vdmVGaXJzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgaWYg
KCF2YWx1ZVNlcGFyYXRvcihzdGF0ZSkgfHwgIXN0cmluZyhzdGF0ZSkgfHwgIW5hbWVTZXBhcmF0
b3Ioc3RhdGUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGUtPnN0YWNrLnByZXBl
bmQoVmFsdWUpOworICAgIHJldHVybiB0cnVlOworfQorCisvLyBhcnJheSA9IGJlZ2luLWFycmF5
IFsgdmFsdWUgKiggdmFsdWUtc2VwYXJhdG9yIHZhbHVlICkgXSBlbmQtYXJyYXkKK3N0YXRpYyBp
bmxpbmUgYm9vbCBhcnJheShTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlLT5zdGFj
ay5maXJzdCgpID09IEFycmF5KTsKKyAgICBpZiAoZW5kQXJyYXkoc3RhdGUpKSB7CisgICAgICAg
IHN0YXRlLT5zdGFjay5yZW1vdmVGaXJzdCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisgICAgc3RhdGUtPnN0YWNrLnJlbW92ZUZpcnN0KCk7CisgICAgc3RhdGUtPnN0YWNrLnByZXBl
bmQoQ29udGludWVBcnJheSk7CisgICAgc3RhdGUtPnN0YWNrLnByZXBlbmQoVmFsdWUpOworICAg
IHJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgY29udGludWVBcnJheShTdGF0
ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRlLT5zdGFjay5maXJzdCgpID09IENvbnRpbnVl
QXJyYXkpOworICAgIGlmIChlbmRBcnJheShzdGF0ZSkpIHsKKyAgICAgICAgc3RhdGUtPnN0YWNr
LnJlbW92ZUZpcnN0KCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICBpZiAoIXZh
bHVlU2VwYXJhdG9yKHN0YXRlKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRlLT5z
dGFjay5wcmVwZW5kKFZhbHVlKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gdmFsdWUgPSBm
YWxzZSAvIG51bGwgLyB0cnVlIC8gb2JqZWN0IC8gYXJyYXkgLyBudW1iZXIgLyBzdHJpbmcKK3N0
YXRpYyBpbmxpbmUgYm9vbCB2YWx1ZShTdGF0ZSogc3RhdGUpCit7CisgICAgQVNTRVJUKHN0YXRl
LT5zdGFjay5maXJzdCgpID09IFZhbHVlKTsKKyAgICBpZiAobGl0ZXJhbEZhbHNlKHN0YXRlKSB8
fCBsaXRlcmFsTnVsbChzdGF0ZSkgfHwgbGl0ZXJhbFRydWUoc3RhdGUpIHx8IG51bWJlcihzdGF0
ZSkgfHwgc3RyaW5nKHN0YXRlKSkgeworICAgICAgICBzdGF0ZS0+c3RhY2sucmVtb3ZlRmlyc3Qo
KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIGlmIChiZWdpbk9iamVjdChzdGF0
ZSkpIHsKKyAgICAgICAgc3RhdGUtPnN0YWNrLnJlbW92ZUZpcnN0KCk7CisgICAgICAgIHN0YXRl
LT5zdGFjay5wcmVwZW5kKE9iamVjdCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAg
ICBpZiAoYmVnaW5BcnJheShzdGF0ZSkpIHsKKyAgICAgICAgc3RhdGUtPnN0YWNrLnJlbW92ZUZp
cnN0KCk7CisgICAgICAgIHN0YXRlLT5zdGFjay5wcmVwZW5kKEFycmF5KTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfSAKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKKy8vIEpTT04tdGV4dCA9
IG9iamVjdCAvIGFycmF5CitzdGF0aWMgaW5saW5lIGJvb2wgSlNPTlRleHQoU3RhdGUqIHN0YXRl
KQoreworICAgIEFTU0VSVChzdGF0ZS0+c3RhY2suZmlyc3QoKSA9PSBUZXh0KTsKKyAgICBpZiAo
YmVnaW5PYmplY3Qoc3RhdGUpKSB7CisgICAgICAgIHN0YXRlLT5zdGFjay5yZW1vdmVGaXJzdCgp
OworICAgICAgICBzdGF0ZS0+c3RhY2sucHJlcGVuZChPYmplY3QpOworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9IAorICAgIGlmIChiZWdpbkFycmF5KHN0YXRlKSkgeworICAgICAgICBzdGF0
ZS0+c3RhY2sucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAgc3RhdGUtPnN0YWNrLnByZXBlbmQoQXJy
YXkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQor
CitzdGF0aWMgYm9vbCBydW4oU3RhdGUqIHN0YXRlKQoreworICAgIHdoaWxlICghc3RhdGUtPnN0
YWNrLmlzRW1wdHkoKSkgeworICAgICAgICBzd2l0Y2ggKHN0YXRlLT5zdGFjay5maXJzdCgpKSB7
CisgICAgICAgICAgICBjYXNlIFRleHQ6CisgICAgICAgICAgICAgICAgaWYgKCFKU09OVGV4dChz
dGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgT2JqZWN0OgorICAgICAgICAgICAgICAgIGlmICgh
b2JqZWN0KHN0YXRlKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDb250aW51ZU9iamVjdDoKKyAgICAg
ICAgICAgICAgICBpZiAoIWNvbnRpbnVlT2JqZWN0KHN0YXRlKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBBcnJheToKKyAgICAgICAgICAgICAgICBpZiAoIWFycmF5KHN0YXRlKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgY2FzZSBDb250aW51ZUFycmF5OgorICAgICAgICAgICAgICAgIGlmICghY29udGludWVBcnJh
eShzdGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgVmFsdWU6CisgICAgICAgICAgICAgICAgaWYg
KCF2YWx1ZShzdGF0ZSkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyBib29sIHBhcnNlKGNvbnN0IFVT
dHJpbmcmIHRleHQpCit7CisgICAgU3RhdGUgc3RhdGU7CisgICAgc3RhdGUucG9zID0gdGV4dC5k
YXRhKCk7CisgICAgc3RhdGUuZW5kID0gc3RhdGUucG9zICsgdGV4dC5zaXplKCk7CisgICAgc3Rh
dGUuc3RhY2sucHJlcGVuZChUZXh0KTsKKyAgICBpZiAoIXJ1bigmc3RhdGUpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgLy8gV2UndmUgc3VjY2VlZGVkIGluIHBhcnNpbmcgdGhlIHRleHQg
aWYgd2UndmUgZXhoYXVzdGVkIGl0cyBjb250ZW50cy4KKyAgICByZXR1cm4gc3RhdGUucG9zID09
IHN0YXRlLmVuZDsKK30KKworfSAvLyBKU09OUGFyc2VyCiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotSlNWYWx1ZSogSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNW
YWx1ZSosIGNvbnN0IEFyZ0xpc3QmKQorSlNWYWx1ZSogSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYgYXJncykKIHsK
LSAgICByZXR1cm4ganNOdWxsKCk7CisgICAgY29uc3QgVVN0cmluZyYgdGV4dCA9IGFyZ3NbMF0t
PnRvU3RyaW5nKGV4ZWMpOworCisgICAgaWYgKCFKU09OUGFyc2VyOjpwYXJzZSh0ZXh0KSkKKyAg
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJpbnZhbGlkIEpTT04g
c3RyaW5nIik7CisKKyAgICByZXR1cm4ganNOdWxsKCk7ICAvLyBGSVhNRTogUmV0dXJuIGFjdHVh
bCBKU09OIG9iamVjdC4KIH0KIAogSlNWYWx1ZSogSlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVj
U3RhdGUqIGV4ZWMsIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKQotLSAKMS41
LjUuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22272</attachid>
            <date>2008-07-14 15:57:32 -0700</date>
            <delta_ts>2008-07-14 15:57:32 -0700</delta_ts>
            <desc>Work-in-progress: Step 3: Parser frond-end tests</desc>
            <filename>0003-parser-tests.patch</filename>
            <type>text/plain</type>
            <size>19902</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">RnJvbSA0YjhlNmEwOWFhNzU5NzBkZjFmNGNhM2M1MGRmZDg1ZTg3YmJjNWI1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGFtIEJhcnRoIDxhYmFydGhAd2Via2l0Lm9yZz4KRGF0ZTog
TW9uLCAxNCBKdWwgMjAwOCAxMjoyNjoxMCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIHBhcnNlciB0
ZXN0cwoKLS0tCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3BhcnNlci1leHBlY3RlZC50eHQg
ICAgICB8ICAgNDAgKysrKysrKysrKysKIExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcGFyc2Vy
Lmh0bWwgICAgICAgICAgICAgIHwgICA3MiArKysrKysrKysrKysrKysrKysrKwogTGF5b3V0VGVz
dHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEuanNvbiAgICAgfCAgICAxICsKIExheW91
dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxMC5qc29uICAgIHwgICAgMSArCiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMTEuanNvbiAgICB8ICAgIDEg
KwogTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEyLmpzb24gICAgfCAg
ICAxICsKIExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxMy5qc29uICAg
IHwgICAgMSArCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMTQuanNv
biAgICB8ICAgIDEgKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDE1
Lmpzb24gICAgfCAgICAxICsKIExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2Zh
aWwxNi5qc29uICAgIHwgICAgMSArCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNl
cy9mYWlsMTcuanNvbiAgICB8ICAgIDEgKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNv
dXJjZXMvZmFpbDE5Lmpzb24gICAgfCAgICAxICsKIExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04v
cmVzb3VyY2VzL2ZhaWwyLmpzb24gICAgIHwgICAgMSArCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9K
U09OL3Jlc291cmNlcy9mYWlsMjAuanNvbiAgICB8ICAgIDEgKwogTGF5b3V0VGVzdHMvZmFzdC9k
b20vSlNPTi9yZXNvdXJjZXMvZmFpbDIxLmpzb24gICAgfCAgICAxICsKIExheW91dFRlc3RzL2Zh
c3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyMi5qc29uICAgIHwgICAgMSArCiBMYXlvdXRUZXN0
cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjMuanNvbiAgICB8ICAgIDEgKwogTGF5b3V0
VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDI0Lmpzb24gICAgfCAgICAxICsKIExh
eW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyNS5qc29uICAgIHwgICAgMSAr
CiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjYuanNvbiAgICB8ICAg
IDEgKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDI3Lmpzb24gICAg
fCAgICAyICsKIExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyOC5qc29u
ICAgIHwgICAgMiArCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjku
anNvbiAgICB8ICAgIDEgKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFp
bDMuanNvbiAgICAgfCAgICAxICsKIExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2Vz
L2ZhaWwzMC5qc29uICAgIHwgICAgMSArCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291
cmNlcy9mYWlsMzEuanNvbiAgICB8ICAgIDEgKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9y
ZXNvdXJjZXMvZmFpbDMyLmpzb24gICAgfCAgICAxICsKIExheW91dFRlc3RzL2Zhc3QvZG9tL0pT
T04vcmVzb3VyY2VzL2ZhaWwzMy5qc29uICAgIHwgICAgMSArCiBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9KU09OL3Jlc291cmNlcy9mYWlsMzQuanNvbiAgICB8ICAgIDEgKwogTGF5b3V0VGVzdHMvZmFz
dC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDQuanNvbiAgICAgfCAgICAxICsKIExheW91dFRlc3Rz
L2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWw1Lmpzb24gICAgIHwgICAgMSArCiBMYXlvdXRU
ZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsNi5qc29uICAgICB8ICAgIDEgKwogTGF5
b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDcuanNvbiAgICAgfCAgICAxICsK
IExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWw4Lmpzb24gICAgIHwgICAg
MSArCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsOS5qc29uICAgICB8
ICAgIDEgKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvcGFzczEuanNvbiAg
ICAgfCAgIDU4ICsrKysrKysrKysrKysrKysKIExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVz
b3VyY2VzL3Bhc3MzLmpzb24gICAgIHwgICAgNyArKwogLi4uL2Zhc3QvZG9tL0pTT04vcmVzb3Vy
Y2VzL3dlYmtpdC5wYXNzMS5qc29uICAgICAgfCAgICAxICsKIDM4IGZpbGVzIGNoYW5nZWQsIDIx
MyBpbnNlcnRpb25zKCspLCAwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91
dFRlc3RzL2Zhc3QvZG9tL0pTT04vcGFyc2VyLWV4cGVjdGVkLnR4dAogY3JlYXRlIG1vZGUgMTAw
NjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcGFyc2VyLmh0bWwKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMS5qc29uCiBjcmVh
dGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEw
Lmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291
cmNlcy9mYWlsMTEuanNvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9t
L0pTT04vcmVzb3VyY2VzL2ZhaWwxMi5qc29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVz
dHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEzLmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0
NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMTQuanNvbgogY3JlYXRl
IG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxNS5q
c29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJj
ZXMvZmFpbDE2Lmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9K
U09OL3Jlc291cmNlcy9mYWlsMTcuanNvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3Rz
L2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxOS5qc29uCiBjcmVhdGUgbW9kZSAxMDA2NDQg
TGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDIuanNvbgogY3JlYXRlIG1v
ZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyMC5qc29u
CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMv
ZmFpbDIxLmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09O
L3Jlc291cmNlcy9mYWlsMjIuanNvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zh
c3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyMy5qc29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5
b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDI0Lmpzb24KIGNyZWF0ZSBtb2Rl
IDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjUuanNvbgog
Y3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2Zh
aWwyNi5qc29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9y
ZXNvdXJjZXMvZmFpbDI3Lmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjguanNvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91
dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyOS5qc29uCiBjcmVhdGUgbW9kZSAx
MDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDMuanNvbgogY3Jl
YXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwz
MC5qc29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNv
dXJjZXMvZmFpbDMxLmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2Rv
bS9KU09OL3Jlc291cmNlcy9mYWlsMzIuanNvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRl
c3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwzMy5qc29uCiBjcmVhdGUgbW9kZSAxMDA2
NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDM0Lmpzb24KIGNyZWF0
ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsNC5q
c29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJj
ZXMvZmFpbDUuanNvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL0pT
T04vcmVzb3VyY2VzL2ZhaWw2Lmpzb24KIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsNy5qc29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5
b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDguanNvbgogY3JlYXRlIG1vZGUg
MTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWw5Lmpzb24KIGNy
ZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9wYXNz
MS5qc29uCiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNv
dXJjZXMvcGFzczMuanNvbgogY3JlYXRlIG1vZGUgMTAwNjQ0IExheW91dFRlc3RzL2Zhc3QvZG9t
L0pTT04vcmVzb3VyY2VzL3dlYmtpdC5wYXNzMS5qc29uCgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vSlNPTi9wYXJzZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSlNPTi9wYXJzZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAuLmRkOTU3NjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9K
U09OL3BhcnNlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw0MCBAQAorLS0tIFRlc3QgYmVnaW5z
LiAtLS0KK2ZhaWwxLmpzb246IE5vLgorZmFpbDIuanNvbjogTm8uCitmYWlsMy5qc29uOiBOby4K
K2ZhaWw0Lmpzb246IE5vLgorZmFpbDUuanNvbjogTm8uCitmYWlsNi5qc29uOiBOby4KK2ZhaWw3
Lmpzb246IE5vLgorZmFpbDguanNvbjogTm8uCitmYWlsOS5qc29uOiBOby4KK2ZhaWwxMC5qc29u
OiBOby4KK2ZhaWwxMS5qc29uOiBOby4KK2ZhaWwxMi5qc29uOiBOby4KK2ZhaWwxMy5qc29uOiBO
by4KK2ZhaWwxNC5qc29uOiBOby4KK2ZhaWwxNS5qc29uOiBOby4KK2ZhaWwxNi5qc29uOiBOby4K
K2ZhaWwxNy5qc29uOiBOby4KK2ZhaWwxOS5qc29uOiBOby4KK2ZhaWwyMC5qc29uOiBOby4KK2Zh
aWwyMS5qc29uOiBOby4KK2ZhaWwyMi5qc29uOiBOby4KK2ZhaWwyMy5qc29uOiBOby4KK2ZhaWwy
NC5qc29uOiBOby4KK2ZhaWwyNS5qc29uOiBOby4KK2ZhaWwyNi5qc29uOiBOby4KK2ZhaWwyNy5q
c29uOiBOby4KK2ZhaWwyOC5qc29uOiBOby4KK2ZhaWwyOS5qc29uOiBOby4KK2ZhaWwzMC5qc29u
OiBOby4KK2ZhaWwzMS5qc29uOiBOby4KK2ZhaWwzMi5qc29uOiBOby4KK2ZhaWwzMy5qc29uOiBO
by4KK2ZhaWwzNC5qc29uOiBOby4KK3Bhc3MxLmpzb246IFllcy4KK3Bhc3MzLmpzb246IFllcy4K
K3dlYmtpdC5wYXNzMS5qc29uOiBZZXMuCistLS0gVGVzdCBlbmRzLiAtLS0KKworCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3BhcnNlci5odG1sIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vSlNPTi9wYXJzZXIuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41NmMwZjNmCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNP
Ti9wYXJzZXIuaHRtbApAQCAtMCwwICsxLDcyIEBACis8aHRtbD4KKzxib2R5PgorPHByZT4KKzxz
Y3JpcHQ+CitmdW5jdGlvbiB0cnlQYXJzZSh0ZXh0KSB7CisgIHRyeSB7CisgICAgSlNPTi5wYXJz
ZSh0ZXh0KTsKKyAgICByZXR1cm4gIlllcy4iOworICB9IGNhdGNoIChleCkgeworICAgIHJldHVy
biAiTm8uIjsKKyAgfQorfQorCitmdW5jdGlvbiB0ZXN0KG5hbWUpIHsKKyAgdmFyIHhociA9IG5l
dyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIub3BlbignR0VUJywgJ3Jlc291cmNlcy8nICsgbmFt
ZSwgZmFsc2UpOworICB4aHIuc2VuZChudWxsKTsKKyAgZG9jdW1lbnQud3JpdGVsbihuYW1lICsg
JzogJyArIHRyeVBhcnNlKHhoci5yZXNwb25zZVRleHQpKTsKK30KKworaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwor
Citkb2N1bWVudC53cml0ZWxuKCctLS0gVGVzdCBiZWdpbnMuIC0tLScpOworCitpZiAoIXdpbmRv
dy5KU09OKQorICBkb2N1bWVudC53cml0ZWxuKCdGQUlMOiBObyB3aW5kb3cuSlNPTiBvYmplY3Qu
Jyk7CisKK3Rlc3QoJ2ZhaWwxLmpzb24nKTsKK3Rlc3QoJ2ZhaWwyLmpzb24nKTsKK3Rlc3QoJ2Zh
aWwzLmpzb24nKTsKK3Rlc3QoJ2ZhaWw0Lmpzb24nKTsKK3Rlc3QoJ2ZhaWw1Lmpzb24nKTsKK3Rl
c3QoJ2ZhaWw2Lmpzb24nKTsKK3Rlc3QoJ2ZhaWw3Lmpzb24nKTsKK3Rlc3QoJ2ZhaWw4Lmpzb24n
KTsKK3Rlc3QoJ2ZhaWw5Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwxMC5qc29uJyk7Cit0ZXN0KCdmYWls
MTEuanNvbicpOwordGVzdCgnZmFpbDEyLmpzb24nKTsKK3Rlc3QoJ2ZhaWwxMy5qc29uJyk7Cit0
ZXN0KCdmYWlsMTQuanNvbicpOwordGVzdCgnZmFpbDE1Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwxNi5q
c29uJyk7Cit0ZXN0KCdmYWlsMTcuanNvbicpOwordGVzdCgnZmFpbDE5Lmpzb24nKTsKK3Rlc3Qo
J2ZhaWwyMC5qc29uJyk7Cit0ZXN0KCdmYWlsMjEuanNvbicpOwordGVzdCgnZmFpbDIyLmpzb24n
KTsKK3Rlc3QoJ2ZhaWwyMy5qc29uJyk7Cit0ZXN0KCdmYWlsMjQuanNvbicpOwordGVzdCgnZmFp
bDI1Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwyNi5qc29uJyk7Cit0ZXN0KCdmYWlsMjcuanNvbicpOwor
dGVzdCgnZmFpbDI4Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwyOS5qc29uJyk7Cit0ZXN0KCdmYWlsMzAu
anNvbicpOwordGVzdCgnZmFpbDMxLmpzb24nKTsKK3Rlc3QoJ2ZhaWwzMi5qc29uJyk7Cit0ZXN0
KCdmYWlsMzMuanNvbicpOwordGVzdCgnZmFpbDM0Lmpzb24nKTsKK3Rlc3QoJ3Bhc3MxLmpzb24n
KTsKK3Rlc3QoJ3Bhc3MzLmpzb24nKTsKKy8vIEZpcmVmb3ggZmFpbHMgdG8gcGFyc2UgdGhpcyB0
ZXN0IGNhc2UsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoZSBzYW1lIGRlcHRoCisvLyBsaW1pdCBhcyB0
aGV5IGRvLgordGVzdCgnd2Via2l0LnBhc3MxLmpzb24nKTsKKworZG9jdW1lbnQud3JpdGVsbign
LS0tIFRlc3QgZW5kcy4gLS0tJyk7Cis8L3NjcmlwdD4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1s
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEu
anNvbiBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxLmpzb24KbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIxNmI4NgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxLmpzb24KQEAgLTAs
MCArMSBAQAorIkEgSlNPTiBwYXlsb2FkIHNob3VsZCBiZSBhbiBvYmplY3Qgb3IgYXJyYXksIG5v
dCBhIHN0cmluZy4iClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEwLmpzb24gYi9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMTAuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41ZDhjMDA0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEwLmpzb24KQEAgLTAsMCArMSBAQAoreyJFeHRy
YSB2YWx1ZSBhZnRlciBjbG9zZSI6IHRydWV9ICJtaXNwbGFjZWQgcXVvdGVkIHZhbHVlIgpcIE5v
IG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9t
L0pTT04vcmVzb3VyY2VzL2ZhaWwxMS5qc29uIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9y
ZXNvdXJjZXMvZmFpbDExLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
NzZlYjk1YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVz
b3VyY2VzL2ZhaWwxMS5qc29uCkBAIC0wLDAgKzEgQEAKK3siSWxsZWdhbCBleHByZXNzaW9uIjog
MSArIDJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEyLmpzb24gYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMTIuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi43NzU4MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSlNPTi9yZXNvdXJjZXMvZmFpbDEyLmpzb24KQEAgLTAsMCArMSBAQAoreyJJbGxlZ2FsIGlu
dm9jYXRpb24iOiBhbGVydCgpfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxMy5qc29uIGIvTGF5
b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDEzLmpzb24KbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzc5NDA2YgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxMy5qc29uCkBAIC0wLDAgKzEgQEAK
K3siTnVtYmVycyBjYW5ub3QgaGF2ZSBsZWFkaW5nIHplcm9lcyI6IDAxM30KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jl
c291cmNlcy9mYWlsMTQuanNvbiBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2Vz
L2ZhaWwxNC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlZDM2NmIK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9m
YWlsMTQuanNvbgpAQCAtMCwwICsxIEBACit7Ik51bWJlcnMgY2Fubm90IGJlIGhleCI6IDB4MTR9
ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFz
dC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDE1Lmpzb24gYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9K
U09OL3Jlc291cmNlcy9mYWlsMTUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5mYzgzNzZiCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNP
Ti9yZXNvdXJjZXMvZmFpbDE1Lmpzb24KQEAgLTAsMCArMSBAQAorWyJJbGxlZ2FsIGJhY2tzbGFz
aCBlc2NhcGU6IFx4MTUiXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxNi5qc29uIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDE2Lmpzb24KbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZlMjFkNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxNi5qc29uCkBAIC0wLDAgKzEgQEAKK1tc
bmFrZWRdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDE3Lmpzb24gYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMTcuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi42MmI5MjE0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSlNPTi9yZXNvdXJjZXMvZmFpbDE3Lmpzb24KQEAgLTAsMCArMSBAQAorWyJJbGxlZ2FsIGJh
Y2tzbGFzaCBlc2NhcGU6IFwwMTciXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxOS5qc29uIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDE5Lmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5YzQ2ZgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwxOS5qc29uCkBAIC0wLDAgKzEg
QEAKK3siTWlzc2luZyBjb2xvbiIgbnVsbH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMi5qc29u
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDIuanNvbgpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjdjMTFlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDIuanNvbgpAQCAtMCwwICsx
IEBACitbIlVuY2xvc2VkIGFycmF5IgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyMC5qc29uIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDIwLmpzb24KbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdjMWFmMwotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyMC5qc29uCkBAIC0wLDAgKzEg
QEAKK3siRG91YmxlIGNvbG9uIjo6IG51bGx9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDIxLmpz
b24gYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjEuanNvbgpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjQ3NDU3Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDIxLmpzb24KQEAgLTAs
MCArMSBAQAoreyJDb21tYSBpbnN0ZWFkIG9mIGNvbG9uIiwgbnVsbH0KXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291
cmNlcy9mYWlsMjIuanNvbiBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2Zh
aWwyMi5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NzUyNTgKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWls
MjIuanNvbgpAQCAtMCwwICsxIEBACitbIkNvbG9uIGluc3RlYWQgb2YgY29tbWEiOiBmYWxzZV0K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjMuanNvbiBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pT
T04vcmVzb3VyY2VzL2ZhaWwyMy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjQ5NGFkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09O
L3Jlc291cmNlcy9mYWlsMjMuanNvbgpAQCAtMCwwICsxIEBACitbIkJhZCB2YWx1ZSIsIHRydXRo
XQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zh
c3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyNC5qc29uIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
SlNPTi9yZXNvdXJjZXMvZmFpbDI0Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMC4uY2FmZjIzOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pT
T04vcmVzb3VyY2VzL2ZhaWwyNC5qc29uCkBAIC0wLDAgKzEgQEAKK1snc2luZ2xlIHF1b3RlJ10K
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjUuanNvbiBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pT
T04vcmVzb3VyY2VzL2ZhaWwyNS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjhiN2FkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09O
L3Jlc291cmNlcy9mYWlsMjUuanNvbgpAQCAtMCwwICsxIEBACitbIgl0YWIJY2hhcmFjdGVyCWlu
CXN0cmluZwkiXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyNi5qc29uIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDI2Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uODQ1ZDI2YQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zh
c3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyNi5qc29uCkBAIC0wLDAgKzEgQEAKK1sidGFiXCAg
IGNoYXJhY3RlclwgICBpblwgIHN0cmluZ1wgICJdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDI3
Lmpzb24gYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjcuanNvbgpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjAxYTJjCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDI3Lmpzb24KQEAg
LTAsMCArMSwyIEBACitbImxpbmUKK2JyZWFrIl0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjgu
anNvbiBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyOC5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyMWEwMTAKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjguanNvbgpAQCAt
MCwwICsxLDIgQEAKK1sibGluZVwKK2JyZWFrIl0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjku
anNvbiBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwyOS5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWM0MjEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMjkuanNvbgpAQCAt
MCwwICsxIEBACitbMGVdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDMuanNvbiBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwzLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uMTY4YzgxZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwzLmpzb24KQEAgLTAsMCArMSBAQAore3VucXVv
dGVkX2tleTogImtleXMgbXVzdCBiZSBxdW90ZWQifQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwz
MC5qc29uIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDMwLmpzb24K
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFiMGJjNAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwzMC5qc29uCkBA
IC0wLDAgKzEgQEAKK1swZStdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDMxLmpzb24gYi9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMzEuanNvbgpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2NlNjAyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDMxLmpzb24KQEAgLTAsMCArMSBAQAor
WzBlKy0xXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwzMi5qc29uIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDMyLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNDVjYmE3MwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3Qv
ZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwzMi5qc29uCkBAIC0wLDAgKzEgQEAKK3siQ29tbWEgaW5z
dGVhZCBpZiBjbG9zaW5nIGJyYWNlIjogdHJ1ZSwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMzMu
anNvbiBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwzMy5qc29uCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNhNWViMTkKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMzMuanNvbgpAQCAt
MCwwICsxIEBACitbIm1pc21hdGNoIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMzQuanNvbiBi
L0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWwzNC5qc29uCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZjQwYjkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsMzQuanNvbgpAQCAtMCwwICsx
IEBACiswewpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWw0Lmpzb24gYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsNC5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjlkZTE2OGIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2Rv
bS9KU09OL3Jlc291cmNlcy9mYWlsNC5qc29uCkBAIC0wLDAgKzEgQEAKK1siZXh0cmEgY29tbWEi
LF0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsNS5qc29uIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
SlNPTi9yZXNvdXJjZXMvZmFpbDUuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi5kZGYzY2UzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNP
Ti9yZXNvdXJjZXMvZmFpbDUuanNvbgpAQCAtMCwwICsxIEBACitbImRvdWJsZSBleHRyYSBjb21t
YSIsLF0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsNi5qc29uIGIvTGF5b3V0VGVzdHMvZmFzdC9k
b20vSlNPTi9yZXNvdXJjZXMvZmFpbDYuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5lZDkxNTgwCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20v
SlNPTi9yZXNvdXJjZXMvZmFpbDYuanNvbgpAQCAtMCwwICsxIEBACitbICAgLCAiPC0tIG1pc3Np
bmcgdmFsdWUiXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWw3Lmpzb24gYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsNy5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjhhOTZhZjMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsNy5qc29uCkBAIC0wLDAgKzEgQEAKK1siQ29tbWEgYWZ0
ZXIgdGhlIGNsb3NlIl0sClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvZmFpbDguanNvbiBiL0xheW91dFRl
c3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWw4Lmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMC4uYjI4NDc5YwotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWw4Lmpzb24KQEAgLTAsMCArMSBAQAorWyJFeHRy
YSBjbG9zZSJdXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL2ZhaWw5Lmpzb24gYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsOS5qc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAuLjU4MTU1NzQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0
L2RvbS9KU09OL3Jlc291cmNlcy9mYWlsOS5qc29uCkBAIC0wLDAgKzEgQEAKK3siRXh0cmEgY29t
bWEiOiB0cnVlLH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNlcy9wYXNzMS5qc29uIGIvTGF5b3V0VGVzdHMv
ZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvcGFzczEuanNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwLi4yYzEwZjIyCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFz
dC9kb20vSlNPTi9yZXNvdXJjZXMvcGFzczEuanNvbgpAQCAtMCwwICsxLDU4IEBACitbCisgICAg
IkpTT04gVGVzdCBQYXR0ZXJuIHBhc3MxIiwKKyAgICB7Im9iamVjdCB3aXRoIDEgbWVtYmVyIjpb
ImFycmF5IHdpdGggMSBlbGVtZW50Il19LAorICAgIHt9LAorICAgIFtdLAorICAgIC00MiwKKyAg
ICB0cnVlLAorICAgIGZhbHNlLAorICAgIG51bGwsCisgICAgeworICAgICAgICAiaW50ZWdlciI6
IDEyMzQ1Njc4OTAsCisgICAgICAgICJyZWFsIjogLTk4NzYuNTQzMjEwLAorICAgICAgICAiZSI6
IDAuMTIzNDU2Nzg5ZS0xMiwKKyAgICAgICAgIkUiOiAxLjIzNDU2Nzg5MEUrMzQsCisgICAgICAg
ICIiOiAgMjM0NTY3ODkwMTJFNjYsCisgICAgICAgICJ6ZXJvIjogMCwKKyAgICAgICAgIm9uZSI6
IDEsCisgICAgICAgICJzcGFjZSI6ICIgIiwKKyAgICAgICAgInF1b3RlIjogIlwiIiwKKyAgICAg
ICAgImJhY2tzbGFzaCI6ICJcXCIsCisgICAgICAgICJjb250cm9scyI6ICJcYlxmXG5cclx0IiwK
KyAgICAgICAgInNsYXNoIjogIi8gJiBcLyIsCisgICAgICAgICJhbHBoYSI6ICJhYmNkZWZnaGlq
a2xtbm9wcXJzdHV2d3l6IiwKKyAgICAgICAgIkFMUEhBIjogIkFCQ0RFRkdISUpLTE1OT1BRUlNU
VVZXWVoiLAorICAgICAgICAiZGlnaXQiOiAiMDEyMzQ1Njc4OSIsCisgICAgICAgICIwMTIzNDU2
Nzg5IjogImRpZ2l0IiwKKyAgICAgICAgInNwZWNpYWwiOiAiYDF+IUAjJCVeJiooKV8rLT17Jzpb
LF19fDsuPC8+PyIsCisgICAgICAgICJoZXgiOiAiXHUwMTIzXHU0NTY3XHU4OUFCXHVDREVGXHVh
YmNkXHVlZjRBIiwKKyAgICAgICAgInRydWUiOiB0cnVlLAorICAgICAgICAiZmFsc2UiOiBmYWxz
ZSwKKyAgICAgICAgIm51bGwiOiBudWxsLAorICAgICAgICAiYXJyYXkiOlsgIF0sCisgICAgICAg
ICJvYmplY3QiOnsgIH0sCisgICAgICAgICJhZGRyZXNzIjogIjUwIFN0LiBKYW1lcyBTdHJlZXQi
LAorICAgICAgICAidXJsIjogImh0dHA6Ly93d3cuSlNPTi5vcmcvIiwKKyAgICAgICAgImNvbW1l
bnQiOiAiLy8gLyogPCEtLSAtLSIsCisgICAgICAgICIjIC0tIC0tPiAqLyI6ICIgIiwKKyAgICAg
ICAgIiBzIHAgYSBjIGUgZCAiIDpbMSwyICwgMworCissCisKKzQgLCA1ICAgICAgICAsICAgICAg
ICAgIDYgICAgICAgICAgICw3ICAgICAgICBdLCJjb21wYWN0IjpbMSwyLDMsNCw1LDYsN10sCisg
ICAgICAgICJqc29udGV4dCI6ICJ7XCJvYmplY3Qgd2l0aCAxIG1lbWJlclwiOltcImFycmF5IHdp
dGggMSBlbGVtZW50XCJdfSIsCisgICAgICAgICJxdW90ZXMiOiAiJiMzNDsgXHUwMDIyICUyMiAw
eDIyIDAzNCAmI3gyMjsiLAorICAgICAgICAiXC9cXFwiXHVDQUZFXHVCQUJFXHVBQjk4XHVGQ0RF
XHViY2RhXHVlZjRBXGJcZlxuXHJcdGAxfiFAIyQlXiYqKClfKy09W117fXw7OicsLi88Pj8iCis6
ICJBIGtleSBjYW4gYmUgYW55IHN0cmluZyIKKyAgICB9LAorICAgIDAuNSAsOTguNgorLAorOTku
NDQKKywKKworMTA2NiwKKzFlMSwKKzAuMWUxLAorMWUtMSwKKzFlMDAsMmUrMDAsMmUtMDAKKywi
cm9zZWJ1ZCJdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jlc291cmNl
cy9wYXNzMy5qc29uIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvcGFzczMu
anNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg2NTg3Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvcGFzczMuanNv
bgpAQCAtMCwwICsxLDcgQEAKK3sKKyAgICAiSlNPTiBUZXN0IFBhdHRlcm4gcGFzczMiOiB7Cisg
ICAgICAgICJUaGUgb3V0ZXJtb3N0IHZhbHVlIjogIm11c3QgYmUgYW4gb2JqZWN0IG9yIGFycmF5
LiIsCisgICAgICAgICJJbiB0aGlzIHRlc3QiOiAiSXQgaXMgYW4gb2JqZWN0LiIKKyAgICB9Cit9
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL3dlYmtp
dC5wYXNzMS5qc29uIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9yZXNvdXJjZXMvd2Via2l0
LnBhc3MxLmpzb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRhYzkyNwot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVzb3VyY2VzL3dl
YmtpdC5wYXNzMS5qc29uCkBAIC0wLDAgKzEgQEAKK1tbW1tbW1tbW1tbW1tbW1tbW1tbIlRvbyBk
ZWVwIl1dXV1dXV1dXV1dXV1dXV1dXV1dClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLSAK
MS41LjUuMwoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>22277</attachid>
            <date>2008-07-15 01:01:51 -0700</date>
            <delta_ts>2008-07-15 01:01:51 -0700</delta_ts>
            <desc>Work-in-progress: Step 4: Parser back-end with tests</desc>
            <filename>0004-parser-backend.patch</filename>
            <type>text/plain</type>
            <size>35011</size>
            <attacher name="Adam Barth">abarth</attacher>
            
              <data encoding="base64">RnJvbSBmM2E5MTU1NWM2MjA0NjQ0YmY2MDI4YTQyNGY3NzYyNDhiYTMxY2ZkIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBBZGFtIEJhcnRoIDxhYmFydGhAd2Via2l0Lm9yZz4KRGF0ZTog
TW9uLCAxNCBKdWwgMjAwOCAyMToxMDoxNCAtMDcwMApTdWJqZWN0OiBbUEFUQ0hdIHBhcnNlciBi
YWNrZW5kCgotLS0KIEphdmFTY3JpcHRDb3JlL2tqcy9KU09OT2JqZWN0LmNwcCAgICAgICAgICAg
ICAgICAgIHwgIDMxOCArKysrKysrKysrKystCiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL2Jh
Y2tlbmQtZXhwZWN0ZWQudHh0ICAgICB8ICAgIDcgKwogTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNP
Ti9iYWNrZW5kLmh0bWwgICAgICAgICAgICAgfCAgIDUyICsrKwogLi4uL2Zhc3QvZG9tL0pTT04v
cmVzb3VyY2VzL21vZGlmaWVkLWpzb24yLmpzICAgICAgfCAgNDc1ICsrKysrKysrKysrKysrKysr
KysrCiA0IGZpbGVzIGNoYW5nZWQsIDgyNyBpbnNlcnRpb25zKCspLCAyNSBkZWxldGlvbnMoLSkK
IGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL2JhY2tlbmQtZXhw
ZWN0ZWQudHh0CiBjcmVhdGUgbW9kZSAxMDA2NDQgTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9i
YWNrZW5kLmh0bWwKIGNyZWF0ZSBtb2RlIDEwMDY0NCBMYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09O
L3Jlc291cmNlcy9tb2RpZmllZC1qc29uMi5qcwoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L2tqcy9KU09OT2JqZWN0LmNwcCBiL0phdmFTY3JpcHRDb3JlL2tqcy9KU09OT2JqZWN0LmNwcApp
bmRleCA1MmYyMmYzLi43MDg0MzZlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ranMvSlNP
Tk9iamVjdC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUva2pzL0pTT05PYmplY3QuY3BwCkBAIC02
OCw2ICs2OCwyMDQgQEAgSlNWYWx1ZSogSlNPTk9iamVjdDo6Z2V0VmFsdWVQcm9wZXJ0eShFeGVj
U3RhdGUqLCBpbnQpIGNvbnN0CiAKIG5hbWVzcGFjZSBKU09OUGFyc2VyIHsKIAorY2xhc3MgQnVp
bGRlciA6IHB1YmxpYyBSZWZDb3VudGVkPEJ1aWxkZXI+IHsKKyAgICBwdWJsaWM6CisgICAgICAg
IHZpcnR1YWwgfkJ1aWxkZXIoKSB7IH0KKyAgICAgICAgdmlydHVhbCBKU09iamVjdCogcmVsZWFz
ZU9iamVjdCgpID0gMDsKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbnN1bWVWYWx1ZShKU1ZhbHVl
KiB2YWx1ZSkgPSAwOworICAgICAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZU9iamVjdChKU09iamVj
dCogb2JqZWN0KSA9IDA7CisgICAgICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lU3RyaW5nKGNvbnN0
IFVTdHJpbmcmIHN0cmluZykgPSAwOworfTsKKworY2xhc3MgSlNPTkJ1aWxkZXIgOiBwdWJsaWMg
QnVpbGRlciB7CisgICAgcHVibGljOgorICAgICAgICBKU09OQnVpbGRlcigpIHsgfQorCisgICAg
ICAgIHZpcnR1YWwgSlNPYmplY3QqIHJlbGVhc2VPYmplY3QoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9vYmplY3QucmVsZWFzZSgpOworICAgICAgICB9CisKKyAgICAgICAgdmly
dHVhbCB2b2lkIGNvbnN1bWVWYWx1ZShKU1ZhbHVlKikKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQg
Y29uc3VtZU9iamVjdChKU09iamVjdCogb2JqZWN0KQorICAgICAgICB7CisgICAgICAgICAgICBt
X29iamVjdC5zZXQob2JqZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBj
b25zdW1lU3RyaW5nKGNvbnN0IFVTdHJpbmcmKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgT3du
UHRyPEpTT2JqZWN0PiBtX29iamVjdDsKK307CisKK2NsYXNzIE9iamVjdEJ1aWxkZXIgOiBwdWJs
aWMgQnVpbGRlciB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBPYmplY3RCdWlsZGVy
KEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgICAgIDogbV9leGVjKGV4ZWMpCisgICAgICAgICAg
ICAsIG1fb2JqZWN0KGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpKQorICAgICAgICAgICAgLCBt
X3N0YXRlKFdhaXRpbmdGb3JQcm9wZXJ0eU5hbWUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIHZpcnR1YWwgSlNPYmplY3QqIHJlbGVhc2VPYmplY3QoKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQobV9vYmplY3QpOworICAgICAgICAgICAgQVNTRVJUKG1fc3RhdGUgPT0g
V2FpdGluZ0ZvclByb3BlcnR5TmFtZSk7CisgICAgICAgICAgICByZXR1cm4gbV9vYmplY3QucmVs
ZWFzZSgpOworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbnN1bWVWYWx1ZShK
U1ZhbHVlKiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fb2JqZWN0KTsK
KyAgICAgICAgICAgIEFTU0VSVChtX3N0YXRlID09IFdhaXRpbmdGb3JQcm9wZXJ0eVZhbHVlKTsK
KyAgICAgICAgICAgIG1fb2JqZWN0LT5wdXQobV9leGVjLCBtX25leHRQcm9wZXJ0eU5hbWUsIHZh
bHVlKTsKKyAgICAgICAgICAgIG1fc3RhdGUgPSBXYWl0aW5nRm9yUHJvcGVydHlOYW1lOworICAg
ICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbnN1bWVPYmplY3QoSlNPYmplY3QqIG9i
amVjdCkKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3VtZVZhbHVlKG9iamVjdCk7CisgICAg
ICAgIH0KKworICAgICAgICB2aXJ0dWFsIHZvaWQgY29uc3VtZVN0cmluZyhjb25zdCBVU3RyaW5n
JiBzdHJpbmcpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX29iamVjdCk7CisgICAg
ICAgICAgICBpZiAobV9zdGF0ZSA9PSBXYWl0aW5nRm9yUHJvcGVydHlOYW1lKSB7CisgICAgICAg
ICAgICAgICAgbV9uZXh0UHJvcGVydHlOYW1lID0gSWRlbnRpZmllcihtX2V4ZWMsIHN0cmluZyk7
CisgICAgICAgICAgICAgICAgbV9zdGF0ZSA9IFdhaXRpbmdGb3JQcm9wZXJ0eVZhbHVlOworICAg
ICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBjb25zdW1lVmFsdWUoanNTdHJpbmco
bV9leGVjLCBzdHJpbmcpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgcHJpdmF0
ZToKKyAgICAgICAgZW51bSBTdGF0ZSB7CisgICAgICAgICAgICBXYWl0aW5nRm9yUHJvcGVydHlO
YW1lLAorICAgICAgICAgICAgV2FpdGluZ0ZvclByb3BlcnR5VmFsdWUKKyAgICAgICAgfTsKKwor
ICAgICAgICBFeGVjU3RhdGUqIG1fZXhlYzsKKyAgICAgICAgT3duUHRyPEpTT2JqZWN0PiBtX29i
amVjdDsKKyAgICAgICAgU3RhdGUgbV9zdGF0ZTsKKyAgICAgICAgSWRlbnRpZmllciBtX25leHRQ
cm9wZXJ0eU5hbWU7Cit9OworCitjbGFzcyBBcnJheUJ1aWxkZXIgOiBwdWJsaWMgQnVpbGRlciB7
CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBBcnJheUJ1aWxkZXIoRXhlY1N0YXRlKiBl
eGVjKQorICAgICAgICAgICAgOiBtX2V4ZWMoZXhlYykKKyAgICAgICAgICAgICwgbV9hcnJheShj
b25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAg
ICB2aXJ0dWFsIEpTT2JqZWN0KiByZWxlYXNlT2JqZWN0KCkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG1fYXJyYXkpOworICAgICAgICAgICAgcmV0dXJuIG1fYXJyYXkucmVsZWFzZSgp
OworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbnN1bWVWYWx1ZShKU1ZhbHVl
KiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG1fYXJyYXkpOworICAgICAg
ICAgICAgbV9hcnJheS0+cHV0KG1fZXhlYywgbV9hcnJheS0+Z2V0TGVuZ3RoKCksIHZhbHVlKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZpcnR1YWwgdm9pZCBjb25zdW1lT2JqZWN0KEpTT2JqZWN0
KiBvYmplY3QpCisgICAgICAgIHsKKyAgICAgICAgICAgIGNvbnN1bWVWYWx1ZShvYmplY3QpOwor
ICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCB2b2lkIGNvbnN1bWVTdHJpbmcoY29uc3QgVVN0
cmluZyYgc3RyaW5nKQorICAgICAgICB7CisgICAgICAgICAgICBjb25zdW1lVmFsdWUoanNTdHJp
bmcobV9leGVjLCBzdHJpbmcpKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAg
RXhlY1N0YXRlKiBtX2V4ZWM7CisgICAgICAgIE93blB0cjxKU0FycmF5PiBtX2FycmF5OworfTsK
KworY2xhc3MgQmFja2VuZCB7CisgICAgcHVibGljOgorICAgICAgICBleHBsaWNpdCBCYWNrZW5k
KEV4ZWNTdGF0ZSogZXhlYykKKyAgICAgICAgICAgIDogbV9leGVjKGV4ZWMpCisgICAgICAgIHsK
KyAgICAgICAgICAgIG1fYnVpbGRlcnMucHJlcGVuZChuZXcgSlNPTkJ1aWxkZXIoKSk7CisgICAg
ICAgIH0KKworICAgICAgICBKU09iamVjdCogcmVsZWFzZU9iamVjdCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2J1aWxkZXJzLmZpcnN0KCktPnJlbGVhc2VP
YmplY3QoKTsKKyAgICAgICAgICAgIG1fYnVpbGRlcnMucmVtb3ZlRmlyc3QoKTsKKyAgICAgICAg
ICAgIEFTU0VSVChvYmplY3QpOworICAgICAgICAgICAgQVNTRVJUKG1fYnVpbGRlcnMuaXNFbXB0
eSgpKTsKKyAgICAgICAgICAgIHJldHVybiBvYmplY3Q7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGJlZ2luT2JqZWN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKCFtX2J1aWxk
ZXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBtX2J1aWxkZXJzLnByZXBlbmQobmV3IE9iamVj
dEJ1aWxkZXIobV9leGVjKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGVuZE9iamVjdCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEpTT2JqZWN0KiBvYmplY3QgPSBtX2J1aWxkZXJzLmZp
cnN0KCktPnJlbGVhc2VPYmplY3QoKTsKKyAgICAgICAgICAgIG1fYnVpbGRlcnMucmVtb3ZlRmly
c3QoKTsKKyAgICAgICAgICAgIG1fYnVpbGRlcnMuZmlyc3QoKS0+Y29uc3VtZU9iamVjdChvYmpl
Y3QpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBiZWdpbkFycmF5KCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKCFtX2J1aWxkZXJzLmlzRW1wdHkoKSk7CisgICAgICAgICAgICBt
X2J1aWxkZXJzLnByZXBlbmQobmV3IEFycmF5QnVpbGRlcihtX2V4ZWMpKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgZW5kQXJyYXkoKQorICAgICAgICB7CisgICAgICAgICAgICBKU09iamVj
dCogb2JqZWN0ID0gbV9idWlsZGVycy5maXJzdCgpLT5yZWxlYXNlT2JqZWN0KCk7CisgICAgICAg
ICAgICBtX2J1aWxkZXJzLnJlbW92ZUZpcnN0KCk7CisgICAgICAgICAgICBtX2J1aWxkZXJzLmZp
cnN0KCktPmNvbnN1bWVPYmplY3Qob2JqZWN0KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
ZW1pdE51bGwoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1aWxkZXJzLmZpcnN0KCktPmNv
bnN1bWVWYWx1ZShqc051bGwoKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGVtaXRUcnVl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWlsZGVycy5maXJzdCgpLT5jb25zdW1lVmFs
dWUoanNCb29sZWFuKHRydWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW1pdEZhbHNl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWlsZGVycy5maXJzdCgpLT5jb25zdW1lVmFs
dWUoanNCb29sZWFuKGZhbHNlKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGVtaXROdW1i
ZXIoY29uc3QgVUNoYXIqIHN0YXJ0LCBjb25zdCBVQ2hhciogZW5kKQorICAgICAgICB7CisgICAg
ICAgICAgICBkb3VibGUgbnVtYmVyID0gVVN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpLnRvRG91
YmxlKCk7CisgICAgICAgICAgICBtX2J1aWxkZXJzLmZpcnN0KCktPmNvbnN1bWVWYWx1ZShqc051
bWJlcihtX2V4ZWMsIG51bWJlcikpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBlbWl0U3Ry
aW5nKGNvbnN0IFVTdHJpbmcmIHN0cmluZykKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWls
ZGVycy5maXJzdCgpLT5jb25zdW1lU3RyaW5nKHN0cmluZyk7CisgICAgICAgIH0KKworICAgIHBy
aXZhdGU6CisgICAgICAgIEV4ZWNTdGF0ZSogbV9leGVjOworICAgICAgICBEZXF1ZTxSZWZQdHI8
QnVpbGRlcj4gPiBtX2J1aWxkZXJzOworfTsKKwogZW51bSBDb250ZXh0IHsKICAgICBUZXh0LAog
ICAgIFZhbHVlLApAQCAtODEsMTMgKzI3OSwxNCBAQCBzdHJ1Y3QgU3RhdGUgewogICAgIGNvbnN0
IFVDaGFyKiBwb3M7CiAgICAgY29uc3QgVUNoYXIqIGVuZDsKICAgICBEZXF1ZTxDb250ZXh0PiBz
dGFjazsKKyAgICBPd25QdHI8QmFja2VuZD4gYmFja2VuZDsKIH07CiAKIGNsYXNzIFNjb3BlZFRy
YW5zYWN0aW9uIHsKICAgICBwdWJsaWM6CiAgICAgICAgIFNjb3BlZFRyYW5zYWN0aW9uKFN0YXRl
KiBzdGF0ZSkKICAgICAgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgICAgICwgbV9w
b3Moc3RhdGUtPnBvcykKKyAgICAgICAgICAgICwgbV9zdGFydChzdGF0ZS0+cG9zKQogICAgICAg
ICB7CiAgICAgICAgICAgICBBU1NFUlQobV9zdGF0ZSk7CiAgICAgICAgIH0KQEAgLTk4LDEwICsy
OTcsMTIgQEAgY2xhc3MgU2NvcGVkVHJhbnNhY3Rpb24gewogICAgICAgICAgICAgICAgIHJvbGxC
YWNrKCk7CiAgICAgICAgIH0KIAorICAgICAgICBjb25zdCBVQ2hhciogZ2V0U3RhcnQoKSB7IHJl
dHVybiBtX3N0YXJ0OyB9CisKICAgICAgICAgdm9pZCByb2xsQmFjaygpCiAgICAgICAgIHsKICAg
ICAgICAgICAgIEFTU0VSVChtX3N0YXRlKTsKLSAgICAgICAgICAgIG1fc3RhdGUtPnBvcyA9IG1f
cG9zOworICAgICAgICAgICAgbV9zdGF0ZS0+cG9zID0gbV9zdGFydDsKICAgICAgICAgICAgIG1f
c3RhdGUgPSAwOwogICAgICAgICB9CiAKQEAgLTExOSw3ICszMjAsNyBAQCBjbGFzcyBTY29wZWRU
cmFuc2FjdGlvbiB7CiAgICAgICAgIC8vIFRoZSB8cG9zfCBzdGF0ZSBvZiB0aGUgcGFyc2Ugd2hl
biB0aGUgdHJhbnNhY3Rpb24gYmVnYWluLiAgVGhpcwogICAgICAgICAvLyB2YWx1ZSB3aWxsIGJl
IHJlc3RvcmVkIHRvIHxtX3N0YXRlLT5wb3N8IGlmIHRoZSB0cmFuc2FjdGlvbiBpcwogICAgICAg
ICAvLyByb2xsZWQgYmFjay4KLSAgICAgICAgY29uc3QgVUNoYXIqIG1fcG9zOworICAgICAgICBj
b25zdCBVQ2hhciogbV9zdGFydDsKIH07CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBlbnN1cmUoU3Rh
dGUqIHN0YXRlLCBpbnQgc2l6ZSkKQEAgLTE5MSwyNSArMzkyLDM3IEBAIHN0YXRpYyBpbmxpbmUg
Ym9vbCBwYWRkZWRMaXRlcmFsKFN0YXRlKiBzdGF0ZSwgVUNoYXIgY2gpCiAvLyBiZWdpbi1hcnJh
eSAgICAgPSB3cyAleDVCIHdzICA7IFsgbGVmdCBzcXVhcmUgYnJhY2tldAogc3RhdGljIGlubGlu
ZSBib29sIGJlZ2luQXJyYXkoU3RhdGUqIHN0YXRlKQogewotICAgIHJldHVybiBwYWRkZWRMaXRl
cmFsKHN0YXRlLCBMJ1snKTsKKyAgICBpZiAoIXBhZGRlZExpdGVyYWwoc3RhdGUsIEwnWycpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGUtPmJhY2tlbmQtPmJlZ2luQXJyYXkoKTsK
KyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gYmVnaW4tb2JqZWN0ICAgID0gd3MgJXg3QiB3cyAg
OyB7IGxlZnQgY3VybHkgYnJhY2tldAogc3RhdGljIGlubGluZSBib29sIGJlZ2luT2JqZWN0KFN0
YXRlKiBzdGF0ZSkKIHsKLSAgICByZXR1cm4gcGFkZGVkTGl0ZXJhbChzdGF0ZSwgTCd7Jyk7Cisg
ICAgaWYgKCFwYWRkZWRMaXRlcmFsKHN0YXRlLCBMJ3snKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIHN0YXRlLT5iYWNrZW5kLT5iZWdpbk9iamVjdCgpOworICAgIHJldHVybiB0cnVlOwog
fQogCiAvLyBlbmQtYXJyYXkgICAgICAgPSB3cyAleDVEIHdzICA7IF0gcmlnaHQgc3F1YXJlIGJy
YWNrZXQKIHN0YXRpYyBpbmxpbmUgYm9vbCBlbmRBcnJheShTdGF0ZSogc3RhdGUpCiB7Ci0gICAg
cmV0dXJuIHBhZGRlZExpdGVyYWwoc3RhdGUsIEwnXScpOworICAgIGlmICghcGFkZGVkTGl0ZXJh
bChzdGF0ZSwgTCddJykpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBzdGF0ZS0+YmFja2Vu
ZC0+ZW5kQXJyYXkoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gZW5kLW9iamVjdCAgICAg
ID0gd3MgJXg3RCB3cyAgOyB9IHJpZ2h0IGN1cmx5IGJyYWNrZXQKIHN0YXRpYyBpbmxpbmUgYm9v
bCBlbmRPYmplY3QoU3RhdGUqIHN0YXRlKQogewotICAgIHJldHVybiBwYWRkZWRMaXRlcmFsKHN0
YXRlLCBMJ30nKTsKKyAgICBpZiAoIXBhZGRlZExpdGVyYWwoc3RhdGUsIEwnfScpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGUtPmJhY2tlbmQtPmVuZE9iamVjdCgpOworICAgIHJl
dHVybiB0cnVlOwogfQogCiAvLyBuYW1lLXNlcGFyYXRvciAgPSB3cyAleDNBIHdzICA7IDogY29s
b24KQEAgLTIyOCwyMSArNDQxLDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCB2YWx1ZVNlcGFyYXRv
cihTdGF0ZSogc3RhdGUpCiBzdGF0aWMgaW5saW5lIGJvb2wgbGl0ZXJhbEZhbHNlKFN0YXRlKiBz
dGF0ZSkKIHsKICAgICBzdGF0aWMgY29uc3QgVUNoYXIgZmFsc2VMaXRlcmFsW10gPSB7ICdmJywg
J2EnLCAnbCcsICdzJywgJ2UnLCAnXDAnIH07Ci0gICAgcmV0dXJuIGxpdGVyYWwoc3RhdGUsIGZh
bHNlTGl0ZXJhbCk7CisgICAgaWYgKCFsaXRlcmFsKHN0YXRlLCBmYWxzZUxpdGVyYWwpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGUtPmJhY2tlbmQtPmVtaXRGYWxzZSgpOworICAg
IHJldHVybiB0cnVlOwogfQogCiAvLyBudWxsICA9ICV4NmUuNzUuNmMuNmMgICAgICA7IG51bGwK
IHN0YXRpYyBpbmxpbmUgYm9vbCBsaXRlcmFsTnVsbChTdGF0ZSogc3RhdGUpCiB7CiAgICAgc3Rh
dGljIGNvbnN0IFVDaGFyIG51bGxMaXRlcmFsW10gPSB7ICduJywgJ3UnLCAnbCcsICdsJywgJ1ww
JyB9OwotICAgIHJldHVybiBsaXRlcmFsKHN0YXRlLCBudWxsTGl0ZXJhbCk7CisgICAgaWYgKCFs
aXRlcmFsKHN0YXRlLCBudWxsTGl0ZXJhbCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBz
dGF0ZS0+YmFja2VuZC0+ZW1pdE51bGwoKTsKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogLy8gdHJ1
ZSAgPSAleDc0LjcyLjc1LjY1ICAgICAgOyB0cnVlCiBzdGF0aWMgaW5saW5lIGJvb2wgbGl0ZXJh
bFRydWUoU3RhdGUqIHN0YXRlKQogewogICAgIHN0YXRpYyBjb25zdCBVQ2hhciB0cnVlTGl0ZXJh
bFtdID0geyAndCcsICdyJywgJ3UnLCAnZScsICdcMCcgfTsKLSAgICByZXR1cm4gbGl0ZXJhbChz
dGF0ZSwgdHJ1ZUxpdGVyYWwpOworICAgIGlmICghbGl0ZXJhbChzdGF0ZSwgdHJ1ZUxpdGVyYWwp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgc3RhdGUtPmJhY2tlbmQtPmVtaXRUcnVlKCk7
CisgICAgcmV0dXJuIHRydWU7CiB9CiAKIC8vIE51bWJlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTM0
Miw2ICs1NjQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgbnVtYmVyKFN0YXRlKiBzdGF0ZSkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGZyYWMoc3RhdGUpOwogICAgIGV4cChzdGF0ZSk7Cisg
ICAgc3RhdGUtPmJhY2tlbmQtPmVtaXROdW1iZXIodHJhbnNhY3Rpb24uZ2V0U3RhcnQoKSwgc3Rh
dGUtPnBvcyk7CiAgICAgdHJhbnNhY3Rpb24uY29tbWl0KCk7CiAgICAgcmV0dXJuIHRydWU7CiB9
CkBAIC0zNTksNiArNTgyLDI1IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBoZXhkaWcoU3RhdGUqIHN0
YXRlKQogICAgIHJldHVybiBkaWdpdChzdGF0ZSkgfHwgbGl0ZXJhbFJhbmdlKHN0YXRlLCAnYScs
ICdmJykgfHwgbGl0ZXJhbFJhbmdlKHN0YXRlLCAnQScsICdGJyk7CiB9CiAKK3N0YXRpYyBpbmxp
bmUgVUNoYXIgZGVjb2RlSGV4KGNvbnN0IFVDaGFyKiBzdGFydCwgY29uc3QgVUNoYXIqIGVuZCkK
K3sKKyAgICBBU1NFUlQoc3RhcnQgKyA0ID09IGVuZCk7CisgICAgVUNoYXIgcmVzdWx0ID0gMDsK
KyAgICB3aGlsZSAoc3RhcnQgPCBlbmQpIHsKKyAgICAgICAgcmVzdWx0ICo9IDE2OworICAgICAg
ICBjb25zdCBVQ2hhciBjaCA9ICpzdGFydCsrOworICAgICAgICBpZiAoY2ggPj0gJzAnICYmIGNo
IDw9ICc5JykKKyAgICAgICAgICAgIHJlc3VsdCArPSBjaCAtICcwJzsKKyAgICAgICAgZWxzZSBp
ZiAoY2ggPj0gJ2EnICYmIGNoIDw9ICdmJykKKyAgICAgICAgICAgIHJlc3VsdCArPSBjaCAtICdh
JyArIDEwOworICAgICAgICBlbHNlIGlmIChjaCA+PSAnQScgJiYgY2ggPD0gJ0YnKQorICAgICAg
ICAgICAgcmVzdWx0ICs9IGNoIC0gJ0EnICsgMTA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCiAv
LyBzdHJpbmcgPSBxdW90YXRpb24tbWFyayAqY2hhciBxdW90YXRpb24tbWFyawogLy8gY2hhciA9
IHVuZXNjYXBlZCAvCiAvLyAgICAgICAgZXNjYXBlICgKQEAgLTM4MCw0MSArNjIyLDY3IEBAIHN0
YXRpYyBib29sIHN0cmluZyhTdGF0ZSogc3RhdGUpIHsKICAgICBpZiAoIXF1b3RhdGlvbk1hcmso
c3RhdGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKKyAgICBWZWN0b3I8VUNoYXI+IGJ1ZmZl
cjsKKyAgICBjb25zdCBVQ2hhciogZmlyc3RVbmJ1ZmZlcmVkID0gc3RhdGUtPnBvczsKICAgICB3
aGlsZSAoc3RhdGUtPnBvcyA8IHN0YXRlLT5lbmQpIHsKICAgICAgICAgY29uc3QgVUNoYXIgY2gg
PSAqc3RhdGUtPnBvcysrOwogICAgICAgICBpZiAoZXNjYXBlZCkgewotICAgICAgICAgICAgZXNj
YXBlZCA9IGZhbHNlOworICAgICAgICAgICAgVUNoYXIgdW5lc2NhcGVkQ2hhcjsKICAgICAgICAg
ICAgIHN3aXRjaCAoY2gpIHsKICAgICAgICAgICAgICAgICBjYXNlICciJzoKKyAgICAgICAgICAg
ICAgICAgICAgdW5lc2NhcGVkQ2hhciA9ICdcIic7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgICAgICAgICAgdW5lc2Nh
cGVkQ2hhciA9ICdcXCc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIGNhc2UgJy8nOgorICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWRDaGFyID0gJy8nOwor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlICdiJzoKKyAg
ICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkQ2hhciA9ICdcYic7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgJ2YnOgorICAgICAgICAgICAgICAgICAg
ICB1bmVzY2FwZWRDaGFyID0gJ1xmJzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICAgICAgY2FzZSAnbic6CisgICAgICAgICAgICAgICAgICAgIHVuZXNjYXBlZENoYXIg
PSAnXG4nOworICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNl
ICdyJzoKKyAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkQ2hhciA9ICdccic7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgJ3QnOgotICAgICAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgdW5lc2NhcGVkQ2hhciA9
ICdcdCc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2Ug
J3UnOgotICAgICAgICAgICAgICAgICAgICBpZiAoaGV4ZGlnKHN0YXRlKSAmJiBoZXhkaWcoc3Rh
dGUpICYmCi0gICAgICAgICAgICAgICAgICAgICAgICBoZXhkaWcoc3RhdGUpICYmIGhleGRpZyhz
dGF0ZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICAgICAgY29uc3QgVUNoYXIqIGhleCA9IHN0YXRlLT5wb3M7CisgICAgICAgICAgICAgICAgICAg
IGlmIChoZXhkaWcoc3RhdGUpICYmIGhleGRpZyhzdGF0ZSkgJiYgaGV4ZGlnKHN0YXRlKSAmJiBo
ZXhkaWcoc3RhdGUpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB1bmVzY2FwZWRDaGFyID0g
ZGVjb2RlSGV4KGhleCwgc3RhdGUtPnBvcyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCh1bmVzY2Fw
ZWRDaGFyKTsKKyAgICAgICAgICAgIGVzY2FwZWQgPSBmYWxzZTsKKyAgICAgICAgICAgIGZpcnN0
VW5idWZmZXJlZCA9IHN0YXRlLT5wb3M7CiAgICAgICAgIH0gZWxzZSBpZiAoY2ggPT0gJyInKSB7
CisgICAgICAgICAgICBidWZmZXIuYXBwZW5kKGZpcnN0VW5idWZmZXJlZCwgc3RhdGUtPnBvcyAt
IGZpcnN0VW5idWZmZXJlZCAtIDEpOworICAgICAgICAgICAgc3RhdGUtPmJhY2tlbmQtPmVtaXRT
dHJpbmcoVVN0cmluZzo6YWRvcHQoYnVmZmVyKSk7CiAgICAgICAgICAgICB0cmFuc2FjdGlvbi5j
b21taXQoKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKGNo
ID09ICdcXCcpIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQoZmlyc3RVbmJ1ZmZlcmVkLCBz
dGF0ZS0+cG9zIC0gZmlyc3RVbmJ1ZmZlcmVkIC0gMSk7CiAgICAgICAgICAgICBlc2NhcGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9IGVsc2UgaWYgKGNoID09ICdc
eDIwJyB8fCBjaCA9PSAnXHgyMScgfHwKICAgICAgICAgICAgICAgICAgICAoY2ggPj0gJ1x4MjMn
ICYmIGNoIDw9ICdceDVCJykgfHwKICAgICAgICAgICAgICAgICAgICBjaCA+PSAnXHg1QicpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiB3aGF0IGFib3V0IHxjaCA8PSBMJ1x4MTBGRkZGJ3wgPwog
ICAgICAgICAgICAgY29udGludWU7ICAvLyBUaGUgY29tbW9uIGNhc2UuCisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICAvLyBXZSBoaXQgYW4gaWxsZWdhbCBjaGFyYWN0ZXIuCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGZhbHNlOyAgLy8g
V2UgaGl0IGFuIGlsbGVnYWwgY2hhcmFjdGVyLgogICAgIH0KICAgICByZXR1cm4gZmFsc2U7ICAv
LyBVbnRlcm1pbmF0ZWQgc3RyaW5nLgogfQpAQCAtNTU3LDE2ICs4MjUsMTcgQEAgc3RhdGljIGJv
b2wgcnVuKFN0YXRlKiBzdGF0ZSkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGJvb2wg
cGFyc2UoY29uc3QgVVN0cmluZyYgdGV4dCkKK3N0YXRpYyBKU09iamVjdCogcGFyc2UoRXhlY1N0
YXRlKiBleGVjLCBjb25zdCBVU3RyaW5nJiB0ZXh0KQogewogICAgIFN0YXRlIHN0YXRlOwogICAg
IHN0YXRlLnBvcyA9IHRleHQuZGF0YSgpOwogICAgIHN0YXRlLmVuZCA9IHN0YXRlLnBvcyArIHRl
eHQuc2l6ZSgpOwogICAgIHN0YXRlLnN0YWNrLnByZXBlbmQoVGV4dCk7Ci0gICAgaWYgKCFydW4o
JnN0YXRlKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHN0YXRlLmJhY2tlbmQuc2V0KG5l
dyBCYWNrZW5kKGV4ZWMpKTsKICAgICAvLyBXZSd2ZSBzdWNjZWVkZWQgaW4gcGFyc2luZyB0aGUg
dGV4dCBpZiB3ZSd2ZSBleGhhdXN0ZWQgaXRzIGNvbnRlbnRzLgotICAgIHJldHVybiBzdGF0ZS5w
b3MgPT0gc3RhdGUuZW5kOworICAgIGlmICghcnVuKCZzdGF0ZSkgfHwgc3RhdGUucG9zICE9IHN0
YXRlLmVuZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHN0YXRlLmJhY2tlbmQtPnJl
bGVhc2VPYmplY3QoKTsKIH0KIAogfSAvLyBKU09OUGFyc2VyCkBAIC01NzUsMTIgKzg0NCwxMSBA
QCBzdGF0aWMgYm9vbCBwYXJzZShjb25zdCBVU3RyaW5nJiB0ZXh0KQogCiBKU1ZhbHVlKiBKU09O
UHJvdG9GdW5jUGFyc2UoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25z
dCBBcmdMaXN0JiBhcmdzKQogewotICAgIGNvbnN0IFVTdHJpbmcmIHRleHQgPSBhcmdzWzBdLT50
b1N0cmluZyhleGVjKTsKLQotICAgIGlmICghSlNPTlBhcnNlcjo6cGFyc2UodGV4dCkpCisgICAg
SlNPYmplY3QqIHJhd09iamVjdCA9IEpTT05QYXJzZXI6OnBhcnNlKGV4ZWMsIGFyZ3NbMF0tPnRv
U3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAoIXJhd09iamVjdCkKICAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJpbnZhbGlkIEpTT04gc3RyaW5nIik7CiAKLSAgICBy
ZXR1cm4ganNOdWxsKCk7ICAvLyBGSVhNRTogUmV0dXJuIGFjdHVhbCBKU09OIG9iamVjdC4KKyAg
ICByZXR1cm4gcmF3T2JqZWN0OwogfQogCiBKU1ZhbHVlKiBKU09OUHJvdG9GdW5jU3RyaW5naWZ5
KEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL2JhY2tlbmQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9iYWNrZW5kLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWUzNjYzCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9iYWNrZW5kLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDcgQEAKKy0tLSBUZXN0IGJlZ2lucy4gLS0tCitwYXNzMS5qc29uOiBQQVNTOiBTdHJpbmdzIG1h
dGNoLgorcGFzczMuanNvbjogUEFTUzogU3RyaW5ncyBtYXRjaC4KK3dlYmtpdC5wYXNzMS5qc29u
OiBQQVNTOiBTdHJpbmdzIG1hdGNoLgorLS0tIFRlc3QgZW5kcy4gLS0tCisKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNPTi9iYWNrZW5kLmh0bWwgYi9MYXlvdXRUZXN0cy9m
YXN0L2RvbS9KU09OL2JhY2tlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41MWE5N2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvZmFzdC9kb20vSlNP
Ti9iYWNrZW5kLmh0bWwKQEAgLTAsMCArMSw1MiBAQAorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQg
c3JjPSJyZXNvdXJjZXMvbW9kaWZpZWQtanNvbjIuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJv
ZHk+Cis8cHJlPgorPHNjcmlwdD4KK2Z1bmN0aW9uIHRyeUJhY2tlbmQodGV4dCkgeworICB2YXIg
b3VyX29iamVjdCA9IEpTT04ucGFyc2UodGV4dCk7CisgIHZhciBkb3Vnc19vYmplY3QgPSBKU09O
Mi5wYXJzZSh0ZXh0KTsKKworICB2YXIgb3VyX3N0cmluZyA9IEpTT04yLnN0cmluZ2lmeShvdXJf
b2JqZWN0KTsKKyAgdmFyIGRvdWdzX3N0cmluZyA9IEpTT04yLnN0cmluZ2lmeShkb3Vnc19vYmpl
Y3QpOworCisgIGlmIChvdXJfc3RyaW5nID09IGRvdWdzX3N0cmluZykgeworICAgIGRvY3VtZW50
LndyaXRlbG4oJ1BBU1M6IFN0cmluZ3MgbWF0Y2guJyk7CisgIH0gZWxzZSB7CisgICAgZG9jdW1l
bnQud3JpdGVsbignRkFJTDogU3RyaW5ncyBkbyBub3QgbWF0Y2guJyk7CisgICAgZG9jdW1lbnQu
d3JpdGVsbignLS0tIEJlZ2luIG91cl9zdHJpbmcuIC0tLScpOworICAgIGRvY3VtZW50LndyaXRl
bG4ob3VyX3N0cmluZyk7CisgICAgZG9jdW1lbnQud3JpdGVsbignLS0tIEVuZCBvdXJfc3RyaW5n
LiAtLS0nKTsKKyAgICBkb2N1bWVudC53cml0ZWxuKCctLS0tIEJlZ2luIGRvdWdzX3N0cmluZy4g
LS0tJyk7CisgICAgZG9jdW1lbnQud3JpdGVsbihkb3Vnc19zdHJpbmcpOworICAgIGRvY3VtZW50
LndyaXRlbG4oJy0tLSBFbmQgZG91Z3Nfc3RyaW5nLiAtLS0nKTsKKyAgfQorfQorCitmdW5jdGlv
biB0ZXN0KG5hbWUpIHsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIu
b3BlbignR0VUJywgJ3Jlc291cmNlcy8nICsgbmFtZSwgZmFsc2UpOworICB4aHIuc2VuZChudWxs
KTsKKyAgZG9jdW1lbnQud3JpdGUobmFtZSArICc6ICcpCisgIHRyeUJhY2tlbmQoeGhyLnJlc3Bv
bnNlVGV4dCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgIGxheW91
dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZG9jdW1lbnQud3JpdGVsbignLS0tIFRl
c3QgYmVnaW5zLiAtLS0nKTsKKworaWYgKCF3aW5kb3cuSlNPTikKKyAgZG9jdW1lbnQud3JpdGVs
bignRkFJTDogTm8gd2luZG93LkpTT04gb2JqZWN0LicpOworCit0ZXN0KCdwYXNzMS5qc29uJyk7
Cit0ZXN0KCdwYXNzMy5qc29uJyk7Cit0ZXN0KCd3ZWJraXQucGFzczEuanNvbicpOworCitkb2N1
bWVudC53cml0ZWxuKCctLS0gVGVzdCBlbmRzLiAtLS0nKTsKKzwvc2NyaXB0PgorPC9wcmU+Cis8
L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09OL3Jl
c291cmNlcy9tb2RpZmllZC1qc29uMi5qcyBiL0xheW91dFRlc3RzL2Zhc3QvZG9tL0pTT04vcmVz
b3VyY2VzL21vZGlmaWVkLWpzb24yLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjgyMzNmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9mYXN0L2RvbS9KU09O
L3Jlc291cmNlcy9tb2RpZmllZC1qc29uMi5qcwpAQCAtMCwwICsxLDQ3NSBAQAorLyoKKyAgICBo
dHRwOi8vd3d3LkpTT04ub3JnL2pzb24yLmpzCisgICAgMjAwOC0wNy0wOQorCisgICAgUHVibGlj
IERvbWFpbi4KKworICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQg
WU9VUiBPV04gUklTSy4KKworICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWwKKwor
ICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdv
IG1ldGhvZHM6IHN0cmluZ2lmeQorICAgIGFuZCBwYXJzZS4KKworICAgICAgICBKU09OLnN0cmlu
Z2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKQorICAgICAgICAgICAgdmFsdWUgICAgICAgYW55
IEphdmFTY3JpcHQgdmFsdWUsIHVzdWFsbHkgYW4gb2JqZWN0IG9yIGFycmF5LgorCisgICAgICAg
ICAgICByZXBsYWNlciAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhv
dyBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQg
Zm9yIG9iamVjdHMgd2l0aG91dCBhIHRvSlNPTgorICAgICAgICAgICAgICAgICAgICAgICAgbWV0
aG9kLiBJdCBjYW4gYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS4KKworICAgICAgICAgICAgc3Bh
Y2UgICAgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRh
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0
IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBh
Y2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRv
IGluZGVudCBhdCBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMg
YSBzdHJpbmcgKHN1Y2ggYXMgJ1x0JyBvciAnJm5ic3A7JyksCisgICAgICAgICAgICAgICAgICAg
ICAgICBpdCBjb250YWlucyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGVudCBhdCBlYWNoIGxl
dmVsLgorCisgICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIEpTT04gdGV4dCBmcm9t
IGEgSmF2YVNjcmlwdCB2YWx1ZS4KKworICAgICAgICAgICAgV2hlbiBhbiBvYmplY3QgdmFsdWUg
aXMgZm91bmQsIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYSB0b0pTT04KKyAgICAgICAgICAgIG1l
dGhvZCwgaXRzIHRvSlNPTiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSByZXN1bHQgd2ls
bCBiZQorICAgICAgICAgICAgc3RyaW5naWZpZWQuIEEgdG9KU09OIG1ldGhvZCBkb2VzIG5vdCBz
ZXJpYWxpemU6IGl0IHJldHVybnMgdGhlCisgICAgICAgICAgICB2YWx1ZSByZXByZXNlbnRlZCBi
eSB0aGUgbmFtZS92YWx1ZSBwYWlyIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQsCisgICAgICAg
ICAgICBvciB1bmRlZmluZWQgaWYgbm90aGluZyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIHRv
SlNPTiBtZXRob2QKKyAgICAgICAgICAgIHdpbGwgYmUgcGFzc2VkIHRoZSBrZXkgYXNzb2NpYXRl
ZCB3aXRoIHRoZSB2YWx1ZSwgYW5kIHRoaXMgd2lsbCBiZQorICAgICAgICAgICAgYm91bmQgdG8g
dGhlIG9iamVjdCBob2xkaW5nIHRoZSBrZXkuCisKKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0
aGlzIHdvdWxkIHNlcmlhbGl6ZSBEYXRlcyBhcyBJU08gc3RyaW5ncy4KKworICAgICAgICAgICAg
ICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gZihuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Jt
YXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSAg
ICsgJy0nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSAr
IDEpICsgJy0nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDRGF0ZSgp
KSAgICAgICsgJ1QnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91
cnMoKSkgICAgICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRD
TWludXRlcygpKSAgICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0
VVRDU2Vjb25kcygpKSAgICsgJ1onOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbCByZXBsYWNlciBtZXRob2QuIEl0IHdpbGwgYmUg
cGFzc2VkIHRoZQorICAgICAgICAgICAga2V5IGFuZCB2YWx1ZSBvZiBlYWNoIG1lbWJlciwgd2l0
aCB0aGlzIGJvdW5kIHRvIHRoZSBjb250YWluaW5nCisgICAgICAgICAgICBvYmplY3QuIFRoZSB2
YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZyb20geW91ciBtZXRob2Qgd2lsbCBiZQorICAgICAgICAg
ICAgc2VyaWFsaXplZC4gSWYgeW91ciBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQsIHRoZW4gdGhl
IG1lbWJlciB3aWxsCisgICAgICAgICAgICBiZSBleGNsdWRlZCBmcm9tIHRoZSBzZXJpYWxpemF0
aW9uLgorCisgICAgICAgICAgICBJZiB0aGUgcmVwbGFjZXIgcGFyYW1ldGVyIGlzIGFuIGFycmF5
LCB0aGVuIGl0IHdpbGwgYmUgdXNlZCB0bworICAgICAgICAgICAgc2VsZWN0IHRoZSBtZW1iZXJz
IHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3VsdHMgc3VjaAorICAgICAgICAg
ICAgdGhhdCBvbmx5IG1lbWJlcnMgd2l0aCBrZXlzIGxpc3RlZCBpbiB0aGUgcmVwbGFjZXIgYXJy
YXkgYXJlCisgICAgICAgICAgICBzdHJpbmdpZmllZC4KKworICAgICAgICAgICAgVmFsdWVzIHRo
YXQgZG8gbm90IGhhdmUgSlNPTiByZXByZXNlbnRhdGlvbnMsIHN1Y2ggYXMgdW5kZWZpbmVkIG9y
CisgICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFs
dWVzIGluIG9iamVjdHMgd2lsbCBiZQorICAgICAgICAgICAgZHJvcHBlZDsgaW4gYXJyYXlzIHRo
ZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4gdXNlCisgICAgICAgICAgICBh
IHJlcGxhY2VyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhvc2Ugd2l0aCBKU09OIHZhbHVlcy4KKyAg
ICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuCisK
KyAgICAgICAgICAgIFRoZSBvcHRpb25hbCBzcGFjZSBwYXJhbWV0ZXIgcHJvZHVjZXMgYSBzdHJp
bmdpZmljYXRpb24gb2YgdGhlCisgICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRo
IGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0CisgICAgICAgICAgICBlYXNp
ZXIgdG8gcmVhZC4KKworICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5v
bi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbAorICAgICAgICAgICAgYmUgdXNl
ZCBmb3IgaW5kZW50YXRpb24uIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRo
ZW4KKyAgICAgICAgICAgIHRoZSBpbmRlbnRhdGlvbiB3aWxsIGJlIHRoYXQgbWFueSBzcGFjZXMu
CisKKyAgICAgICAgICAgIEV4YW1wbGU6CisKKyAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmlu
Z2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTsKKyAgICAgICAgICAgIC8vIHRleHQgaXMg
J1siZSIseyJwbHVyaWJ1cyI6InVudW0ifV0nCisKKworICAgICAgICAgICAgdGV4dCA9IEpTT04u
c3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0sIG51bGwsICdcdCcpOworICAgICAg
ICAgICAgLy8gdGV4dCBpcyAnW1xuXHQiZSIsXG5cdHtcblx0XHQicGx1cmlidXMiOiAidW51bSJc
blx0fVxuXScKKworICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFtuZXcgRGF0ZSgp
XSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tr
ZXldIGluc3RhbmNlb2YgRGF0ZSA/CisgICAgICAgICAgICAgICAgICAgICdEYXRlKCcgKyB0aGlz
W2tleV0gKyAnKScgOiB2YWx1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgLy8gdGV4
dCBpcyAnWyJEYXRlKC0tLWN1cnJlbnQgdGltZS0tLSkiXScKKworCisgICAgICAgIEpTT04ucGFy
c2UodGV4dCwgcmV2aXZlcikKKyAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04g
dGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS4KKyAgICAgICAgICAgIEl0IGNhbiB0
aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi4KKworICAgICAgICAgICAgVGhlIG9wdGlvbmFs
IHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZAorICAg
ICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBr
ZXlzIGFuZCB2YWx1ZXMsCisgICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2Vk
IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLgorICAgICAgICAgICAgSWYgaXQgcmV0dXJu
cyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLgor
ICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRl
bGV0ZWQuCisKKyAgICAgICAgICAgIEV4YW1wbGU6CisKKyAgICAgICAgICAgIC8vIFBhcnNlIHRo
ZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsCisgICAg
ICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLgorCisgICAgICAgICAgICBt
eURhdGEgPSBKU09OLnBhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGE7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0
cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgYSA9CisvXihcZHs0fSktKFxkezJ9KS0oXGR7
Mn0pVChcZHsyfSk6KFxkezJ9KTooXGR7Mn0oPzpcLlxkKik/KVokLy5leGVjKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UoJ1siRGF0
ZSgwOS8wOS8yMDAxKSJdJywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZDsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgNSkgPT09ICdEYXRlKCcg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKC0xKSA9PT0gJyknKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGQgPSBuZXcgRGF0ZSh2YWx1ZS5zbGljZSg1LCAtMSkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgfSk7CisKKworICAgIFRoaXMgaXMgYSBy
ZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9y
CisgICAgcmVkaXN0cmlidXRlLgorCisgICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBi
ZWZvcmUgZGVwbG95bWVudC4KKyAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNv
bS9qc21pbi5odG1sCisKKyAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVO
V0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBETworICAgIE5PVCBDT05UUk9MLgor
Ki8KKworLypqc2xpbnQgZXZpbDogdHJ1ZSAqLworCisvKmdsb2JhbCBKU09OICovCisKKy8qbWVt
YmVycyAiIiwgIlxiIiwgIlx0IiwgIlxuIiwgIlxmIiwgIlxyIiwgIlwiIiwgSlNPTiwgIlxcIiwg
Y2FsbCwKKyAgICBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxsWWVhciwgZ2V0VVRD
SG91cnMsIGdldFVUQ01pbnV0ZXMsCisgICAgZ2V0VVRDTW9udGgsIGdldFVUQ1NlY29uZHMsIGhh
c093blByb3BlcnR5LCBqb2luLCBsYXN0SW5kZXgsIGxlbmd0aCwKKyAgICBwYXJzZSwgcHJvcGVy
dHlJc0VudW1lcmFibGUsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2UsIHN0cmluZ2lm
eSwKKyAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nCisqLworCitpZiAoIXRoaXMuSlNPTjIpIHsK
KworLy8gQ3JlYXRlIGEgSlNPTiBvYmplY3Qgb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBl
eGlzdC4gV2UgY3JlYXRlIHRoZQorLy8gb2JqZWN0IGluIGEgY2xvc3VyZSB0byBhdm9pZCBjcmVh
dGluZyBnbG9iYWwgdmFyaWFibGVzLgorCisgICAgSlNPTjIgPSBmdW5jdGlvbiAoKSB7CisKKyAg
ICAgICAgZnVuY3Rpb24gZihuKSB7CisgICAgICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8g
aGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLgorICAgICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcw
JyArIG4gOiBuOworICAgICAgICB9CisKKyAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0g
ZnVuY3Rpb24gKGtleSkgeworCisgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVVENGdWxsWWVh
cigpICAgKyAnLScgKworICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEp
ICsgJy0nICsKKyAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdU
JyArCisgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENIb3VycygpKSAgICAgKyAnOicgKwor
ICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTWludXRlcygpKSAgICsgJzonICsKKyAgICAg
ICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJzsKKyAgICAgICAgfTsK
KworICAgICAgICBTdHJpbmcucHJvdG90eXBlLnRvSlNPTiA9CisgICAgICAgIE51bWJlci5wcm90
b3R5cGUudG9KU09OID0KKyAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rp
b24gKGtleSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpOworICAgICAgICB9
OworCisgICAgICAgIHZhciBjeCA9IC9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1
MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1
ZmZmMC1cdWZmZmZdL2csCisgICAgICAgICAgICBlc2NhcGVhYmxlID0gL1tcXFwiXHgwMC1ceDFm
XHg3Zi1ceDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIw
MGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csCisgICAg
ICAgICAgICBnYXAsCisgICAgICAgICAgICBpbmRlbnQsCisgICAgICAgICAgICBtZXRhID0geyAg
ICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucworICAgICAgICAgICAgICAgICdc
Yic6ICdcXGInLAorICAgICAgICAgICAgICAgICdcdCc6ICdcXHQnLAorICAgICAgICAgICAgICAg
ICdcbic6ICdcXG4nLAorICAgICAgICAgICAgICAgICdcZic6ICdcXGYnLAorICAgICAgICAgICAg
ICAgICdccic6ICdcXHInLAorICAgICAgICAgICAgICAgICciJyA6ICdcXCInLAorICAgICAgICAg
ICAgICAgICdcXCc6ICdcXFxcJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlcDsKKwor
CisgICAgICAgIGZ1bmN0aW9uIHF1b3RlKHN0cmluZykgeworCisvLyBJZiB0aGUgc3RyaW5nIGNv
bnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5v
CisvLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBx
dW90ZXMgYXJvdW5kIGl0LgorLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBv
ZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlCisvLyBzZXF1ZW5jZXMuCisKKyAg
ICAgICAgICAgIGVzY2FwZWFibGUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgICAgIHJldHVybiBl
c2NhcGVhYmxlLnRlc3Qoc3RyaW5nKSA/CisgICAgICAgICAgICAgICAgJyInICsgc3RyaW5nLnJl
cGxhY2UoZXNjYXBlYWJsZSwgZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGMgPSBtZXRhW2FdOworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGMgPT09ICdzdHJp
bmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdScgKyAoJzAwMDAnICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKyhhLmNoYXJDb2RlQXQoMCkpKS50b1N0cmluZygx
NikpLnNsaWNlKC00KTsKKyAgICAgICAgICAgICAgICB9KSArICciJyA6CisgICAgICAgICAgICAg
ICAgJyInICsgc3RyaW5nICsgJyInOworICAgICAgICB9CisKKworICAgICAgICBmdW5jdGlvbiBz
dHIoa2V5LCBob2xkZXIpIHsKKworLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXld
LgorCisgICAgICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci4KKyAg
ICAgICAgICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS4KKyAgICAgICAgICAg
ICAgICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLgorICAgICAgICAgICAgICAgIGxl
bmd0aCwKKyAgICAgICAgICAgICAgICBtaW5kID0gZ2FwLAorICAgICAgICAgICAgICAgIHBhcnRp
YWwsCisgICAgICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTsKKworLy8gSWYgdGhlIHZh
bHVlIGhhcyBhIHRvSlNPTiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQg
dmFsdWUuCisKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmpl
Y3QnICYmCisgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5j
dGlvbicpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpOworICAg
ICAgICAgICAgfQorCisvLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rp
b24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG8KKy8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZh
bHVlLgorCisgICAgICAgICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgICAgICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTsKKyAgICAg
ICAgICAgIH0KKworLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0
eXBlLgorCisgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAgICAgICAgICAg
Y2FzZSAnc3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpOworCisg
ICAgICAgICAgICBjYXNlICdudW1iZXInOgorCisvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5p
dGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC4KKworICAgICAgICAgICAgICAg
IHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnOworCisgICAg
ICAgICAgICBjYXNlICdib29sZWFuJzoKKyAgICAgICAgICAgIGNhc2UgJ251bGwnOgorCisvLyBJ
ZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcu
IE5vdGU6CisvLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2Ug
aXMgaW5jbHVkZWQgaGVyZSBpbgorLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMg
Zml4ZWQgc29tZWRheS4KKworICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOwor
CisvLyBJZiB0aGUgdHlwZSBpcyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFu
IG9iamVjdCBvciBhbiBhcnJheSBvcgorLy8gbnVsbC4KKworICAgICAgICAgICAgY2FzZSAnb2Jq
ZWN0JzoKKworLy8gRHVlIHRvIGEgc3BlY2lmaWNhdGlvbiBibHVuZGVyIGluIEVDTUFTY3JpcHQs
IHR5cGVvZiBudWxsIGlzICdvYmplY3QnLAorLy8gc28gd2F0Y2ggb3V0IGZvciB0aGF0IGNhc2Uu
CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAnbnVsbCc7CisgICAgICAgICAgICAgICAgfQorCisvLyBNYWtlIGFuIGFycmF5IHRvIGhv
bGQgdGhlIHBhcnRpYWwgcmVzdWx0cyBvZiBzdHJpbmdpZnlpbmcgdGhpcyBvYmplY3QgdmFsdWUu
CisKKyAgICAgICAgICAgICAgICBnYXAgKz0gaW5kZW50OworICAgICAgICAgICAgICAgIHBhcnRp
YWwgPSBbXTsKKworLy8gSWYgdGhlIG9iamVjdCBoYXMgYSBkb250RW51bSBsZW5ndGggcHJvcGVy
dHksIHdlJ2xsIHRyZWF0IGl0IGFzIGFuIGFycmF5LgorCisgICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAhKHZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCdsZW5ndGgnKSkpIHsKKworLy8gVGhlIG9i
amVjdCBpcyBhbiBhcnJheS4gU3RyaW5naWZ5IGV2ZXJ5IGVsZW1lbnQuIFVzZSBudWxsIGFzIGEg
cGxhY2Vob2xkZXIKKy8vIGZvciBub24tSlNPTiB2YWx1ZXMuCisKKyAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbGVuZ3RoOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxb
aV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisv
LyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1h
cywgYW5kIHdyYXAgdGhlbSBpbgorLy8gYnJhY2tldHMuCisKKyAgICAgICAgICAgICAgICAgICAg
diA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ1tdJyA6CisgICAgICAgICAgICAgICAgICAgICAg
ICBnYXAgPyAnW1xuJyArIGdhcCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnRpYWwuam9pbignLFxuJyArIGdhcCkgKyAnXG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1pbmQgKyAnXScgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7CisgICAgICAgICAgICAgICAgICAgIGdhcCA9
IG1pbmQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICAgICAgICAgIH0K
KworLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBt
ZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLgorCisgICAgICAgICAgICAgICAgaWYgKHJlcCAmJiB0
eXBlb2YgcmVwID09PSAnb2JqZWN0JykgeworICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBy
ZXAubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBp
ICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSwgcmVwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0
aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisvLyBPdGhlcndpc2UsIGl0
ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC4KKworICAgICAgICAg
ICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlLCByZXApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRp
YWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJl
ciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLAorLy8gYW5kIHdyYXAgdGhl
bSBpbiBicmFjZXMuCisKKyAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAg
PyAne30nIDoKKyAgICAgICAgICAgICAgICAgICAgZ2FwID8gJ3tcbicgKyBnYXAgKyBwYXJ0aWFs
LmpvaW4oJyxcbicgKyBnYXApICsgJ1xuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWluZCArICd9JyA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nOworICAgICAgICAgICAg
ICAgIGdhcCA9IG1pbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHY7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworLy8gUmV0dXJuIHRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSBz
dHJpbmdpZnkgYW5kIHBhcnNlIG1ldGhvZHMuCisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHsKKworLy8g
VGhlIHN0cmluZ2lmeSBtZXRob2QgdGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFj
ZXIsIGFuZCBhbiBvcHRpb25hbAorLy8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpT
T04gdGV4dC4gVGhlIHJlcGxhY2VyIGNhbiBiZSBhIGZ1bmN0aW9uCisvLyB0aGF0IGNhbiByZXBs
YWNlIHZhbHVlcywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBr
ZXlzLgorLy8gQSBkZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBv
ZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGNhbgorLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBl
YXNpbHkgcmVhZGFibGUuCisKKyAgICAgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAgICAg
ICBnYXAgPSAnJzsKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSAnJzsKKworLy8gSWYgdGhlIHNw
YWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5p
bmcgdGhhdAorLy8gbWFueSBzcGFjZXMuCisKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNw
YWNlID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
c3BhY2U7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICcgJzsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEg
c3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuCisKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7CisgICAgICAgICAgICAgICAgfQorCisvLyBJZiB0
aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuCisv
LyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLgorCisgICAgICAgICAgICAgICAgcmVwID0gcmVw
bGFjZXI7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAh
PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiByZXBsYWNl
ciAhPT0gJ29iamVjdCcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVwbGFj
ZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdKU09OLnN0cmluZ2lmeScpOworICAgICAgICAgICAgICAgIH0KKworLy8gTWFrZSBh
IGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAn
Jy4KKy8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuCisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7CisgICAgICAgICAgICB9
LAorCisKKyAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodGV4dCwgcmV2aXZlcikgeworCisv
LyBUaGUgcGFyc2UgbWV0aG9kIHRha2VzIGEgdGV4dCBhbmQgYW4gb3B0aW9uYWwgcmV2aXZlciBm
dW5jdGlvbiwgYW5kIHJldHVybnMKKy8vIGEgSmF2YVNjcmlwdCB2YWx1ZSBpZiB0aGUgdGV4dCBp
cyBhIHZhbGlkIEpTT04gdGV4dC4KKworICAgICAgICAgICAgICAgIHZhciBqOworCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkgeworCisvLyBUaGUgd2FsayBtZXRo
b2QgaXMgdXNlZCB0byByZWN1cnNpdmVseSB3YWxrIHRoZSByZXN1bHRpbmcgc3RydWN0dXJlIHNv
CisvLyB0aGF0IG1vZGlmaWNhdGlvbnMgY2FuIGJlIG1hZGUuCisKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGssIHYsIHZhbHVlID0gaG9sZGVyW2tleV07CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHZhbHVlW2tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwo
aG9sZGVyLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisKKworLy8gUGFyc2luZyBo
YXBwZW5zIGluIGZvdXIgc3RhZ2VzLiBJbiB0aGUgZmlyc3Qgc3RhZ2UsIHdlIHJlcGxhY2UgY2Vy
dGFpbgorLy8gVW5pY29kZSBjaGFyYWN0ZXJzIHdpdGggZXNjYXBlIHNlcXVlbmNlcy4gSmF2YVNj
cmlwdCBoYW5kbGVzIG1hbnkgY2hhcmFjdGVycworLy8gaW5jb3JyZWN0bHksIGVpdGhlciBzaWxl
bnRseSBkZWxldGluZyB0aGVtLCBvciB0cmVhdGluZyB0aGVtIGFzIGxpbmUgZW5kaW5ncy4KKwor
ICAgICAgICAgICAgICAgIGN4Lmxhc3RJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGN4
LnRlc3QodGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShj
eCwgZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFx1JyAr
ICgnMDAwMCcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKyhhLmNoYXJDb2Rl
QXQoMCkpKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgfQorCisvLyBJbiB0aGUgc2Vjb25kIHN0YWdlLCB3ZSBydW4gdGhl
IHRleHQgYWdhaW5zdCByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbG9vaworLy8gZm9yIG5vbi1K
U09OIHBhdHRlcm5zLiBXZSBhcmUgZXNwZWNpYWxseSBjb25jZXJuZWQgd2l0aCAnKCknIGFuZCAn
bmV3JworLy8gYmVjYXVzZSB0aGV5IGNhbiBjYXVzZSBpbnZvY2F0aW9uLCBhbmQgJz0nIGJlY2F1
c2UgaXQgY2FuIGNhdXNlIG11dGF0aW9uLgorLy8gQnV0IGp1c3QgdG8gYmUgc2FmZSwgd2Ugd2Fu
dCB0byByZWplY3QgYWxsIHVuZXhwZWN0ZWQgZm9ybXMuCisKKy8vIFdlIHNwbGl0IHRoZSBzZWNv
bmQgc3RhZ2UgaW50byA0IHJlZ2V4cCBvcGVyYXRpb25zIGluIG9yZGVyIHRvIHdvcmsgYXJvdW5k
CisvLyBjcmlwcGxpbmcgaW5lZmZpY2llbmNpZXMgaW4gSUUncyBhbmQgU2FmYXJpJ3MgcmVnZXhw
IGVuZ2luZXMuIEZpcnN0IHdlCisvLyByZXBsYWNlIHRoZSBKU09OIGJhY2tzbGFzaCBwYWlycyB3
aXRoICdAJyAoYSBub24tSlNPTiBjaGFyYWN0ZXIpLiBTZWNvbmQsIHdlCisvLyByZXBsYWNlIGFs
bCBzaW1wbGUgdmFsdWUgdG9rZW5zIHdpdGggJ10nIGNoYXJhY3RlcnMuIFRoaXJkLCB3ZSBkZWxl
dGUgYWxsCisvLyBvcGVuIGJyYWNrZXRzIHRoYXQgZm9sbG93IGEgY29sb24gb3IgY29tbWEgb3Ig
dGhhdCBiZWdpbiB0aGUgdGV4dC4gRmluYWxseSwKKy8vIHdlIGxvb2sgdG8gc2VlIHRoYXQgdGhl
IHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBvbmx5IHdoaXRlc3BhY2Ugb3IgJ10nIG9yCisvLyAn
LCcgb3IgJzonIG9yICd7JyBvciAnfScuIElmIHRoYXQgaXMgc28sIHRoZW4gdGhlIHRleHQgaXMg
c2FmZSBmb3IgZXZhbC4KKworICAgICAgICAgICAgICAgIGlmICgvXltcXSw6e31cc10qJC8uCit0
ZXN0KHRleHQucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAn
QCcpLgorcmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxk
Kik/KD86W2VFXVsrXC1dP1xkKyk/L2csICddJykuCityZXBsYWNlKC8oPzpefDp8LCkoPzpccypc
WykrL2csICcnKSkpIHsKKworLy8gSW4gdGhlIHRoaXJkIHN0YWdlIHdlIHVzZSB0aGUgZXZhbCBm
dW5jdGlvbiB0byBjb21waWxlIHRoZSB0ZXh0IGludG8gYQorLy8gSmF2YVNjcmlwdCBzdHJ1Y3R1
cmUuIFRoZSAneycgb3BlcmF0b3IgaXMgc3ViamVjdCB0byBhIHN5bnRhY3RpYyBhbWJpZ3VpdHkK
Ky8vIGluIEphdmFTY3JpcHQ6IGl0IGNhbiBiZWdpbiBhIGJsb2NrIG9yIGFuIG9iamVjdCBsaXRl
cmFsLiBXZSB3cmFwIHRoZSB0ZXh0CisvLyBpbiBwYXJlbnMgdG8gZWxpbWluYXRlIHRoZSBhbWJp
Z3VpdHkuCisKKyAgICAgICAgICAgICAgICAgICAgaiA9IGV2YWwoJygnICsgdGV4dCArICcpJyk7
CisKKy8vIEluIHRoZSBvcHRpb25hbCBmb3VydGggc3RhZ2UsIHdlIHJlY3Vyc2l2ZWx5IHdhbGsg
dGhlIG5ldyBzdHJ1Y3R1cmUsIHBhc3NpbmcKKy8vIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIGEg
cmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGUgdHJhbnNmb3JtYXRpb24uCisKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nID8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHdhbGsoeycnOiBqfSwgJycpIDogajsKKyAgICAgICAgICAgICAg
ICB9CisKKy8vIElmIHRoZSB0ZXh0IGlzIG5vdCBKU09OIHBhcnNlYWJsZSwgdGhlbiBhIFN5bnRh
eEVycm9yIGlzIHRocm93bi4KKworICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJv
cignSlNPTi5wYXJzZScpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0oKTsKK30K
LS0gCjEuNS41LjMKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>28827</attachid>
            <date>2009-03-21 19:02:33 -0700</date>
            <delta_ts>2009-05-13 16:01:15 -0700</delta_ts>
            <desc>Patch to Add JSON Object</desc>
            <filename>json.patch</filename>
            <type>text/plain</type>
            <size>104409</size>
            <attacher name="Husam Senussi">husam</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQxODk0KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzAgQEAKKzIwMDktMDMtMjEgIEh1c2FtIFNl
bnVzc2kgIDxodXNhbUBzZW51c3NpLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgSlNPTiBPYmplY3QKKworICAgICAgICAqIEFsbEluT25l
RmlsZS5jcHA6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUuc2NvbnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlU291
cmNlcy5ia2w6CisgICAgICAgICogSnNvbi5jcHA6IEFkZGVkLgorICAgICAgICAqIHBhcnNlci9K
U09OR3JhbW1hci55OiBBZGRlZC4KKyAgICAgICAgKiBwYXJzZXIvSlNPTkxleGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OmlzV2hpdGVTcGFjZSk6CisgICAgICAgIChKU0M6OmlzRGlnaXQp
OgorICAgICAgICAoSlNDOjppc0hleCk6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6SlNPTkxl
eGVyKToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjpzZXRDb2RlKToKKyAgICAgICAgKEpTQzo6
SlNPTkxleGVyOjpjbGVhcik6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6c2tpcGVXaGl0ZVNw
YWNlcyk6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6c2hpZnQpOgorICAgICAgICAoSlNDOjpK
U09OTGV4ZXI6OmxleCk6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6cmVhZERpZ2l0cyk6Cisg
ICAgICAgIChKU0M6OkpTT05MZXhlcjo6cmVhZE51bWJlcik6CisgICAgICAgIChKU0M6OkpTT05M
ZXhlcjo6cmVhZFN0cmluZyk6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6YWRkVW5pY29kZSk6
CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6YWRkQXNjaWkpOgorICAgICAgICAoSlNDOjpKU09O
TGV4ZXI6OmNvbnZlcnRIZXgpOgorICAgICAgICAoSlNDOjpKU09OTGV4ZXI6OmNvbnZlcnRVbmlj
b2RlKToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjptYWtlSWRlbnRpZmllcik6CisgICAgICAg
ICogcGFyc2VyL0pTT05MZXhlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjp+
SlNPTkxleGVyKToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjpsaW5lTm8pOgorICAgICAgICAo
SlNDOjpKU09OTGV4ZXI6OmNvbHVtbk5vKToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjpzZXRH
bG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjpzYXdFcnJvcik6CisgICAgICAg
ICogcGFyc2VyL0pTT05QYXJzZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNPTlBhcnNl
cjo6cGFyc2UpOgorICAgICAgICAoSlNDOjpKU09OUGFyc2VyOjpkaWRGaW5pc2hQYXJzaW5nKToK
KyAgICAgICAgKEpTQzo6SlNPTlBhcnNlcjo6bG9nKToKKyAgICAgICAgKiBwYXJzZXIvSlNPTlBh
cnNlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNPTlBhcnNlcjo6Z2V0TGV4ZXIpOgorICAg
ICAgICAoSlNDOjpKU09OUGFyc2VyOjpwYXJzZSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2Jh
bERhdGEuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YSk6Cisg
ICAgICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6fkpTR2xvYmFsRGF0YSk6CisgICAgICAgICogcnVu
dGltZS9KU0dsb2JhbERhdGEuaDoKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJlc2V0KToKKyAgICAgICAgKiBydW50
aW1lL0pTT05PYmplY3QuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6KToKKyAgICAgICAgKEpT
Qzo6SlNPTk9iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KToKKyAgICAgICAgKEpTQzo6Y2FsbFJl
dml2ZXIpOgorICAgICAgICAoSlNDOjpidWlsZFN0cmluZyk6CisgICAgICAgIChKU0M6OnRvSlNP
Tik6CisgICAgICAgIChKU0M6OnN0cmluZ2lmeSk6CisgICAgICAgIChKU0M6OkpTT05Qcm90b0Z1
bmNQYXJzZSk6CisgICAgICAgIChKU0M6OkpTT05Qcm90b0Z1bmNTdHJpbmdpZnkpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SlNPTk9iamVj
dDo6OkpTT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y2xhc3NJbmZvKToKKyAg
ICAgICAgKEpTQzo6SlNPTk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlKToKKwogMjAwOS0wMy0yMSAg
T2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
cmsgUm93ZS4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FsbEluT25lRmlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvQWxsSW5PbmVGaWxlLmNwcAkocmV2aXNpb24gNDE4OTIpCisr
KyBKYXZhU2NyaXB0Q29yZS9BbGxJbk9uZUZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2
ICs3MCw3IEBACiAjaW5jbHVkZSAicnVudGltZS9BcmdMaXN0LmNwcCIKICNpbmNsdWRlICJydW50
aW1lL0xvb2t1cC5jcHAiCiAjaW5jbHVkZSAicnVudGltZS9NYXRoT2JqZWN0LmNwcCIKKyNpbmNs
dWRlICJydW50aW1lL0pTT05PYmplY3QuY3BwIgogI2luY2x1ZGUgInJ1bnRpbWUvTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAiCiAjaW5jbHVkZSAicnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlw
ZS5jcHAiCiAjaW5jbHVkZSAicnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAiCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3Jp
cHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDQxODkyKQorKysgSmF2YVNjcmlw
dENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTAg
QEAgYWxsIDogXAogICAgIGNoYXJ0YWJsZXMuYyBcCiAgICAgRGF0ZVByb3RvdHlwZS5sdXQuaCBc
CiAgICAgR3JhbW1hci5jcHAgXAorCUpTT05HcmFtbWFyLmNwcCBcCiAgICAgTGV4ZXIubHV0Lmgg
XAogICAgIE1hdGhPYmplY3QubHV0LmggXAorCUpTT05PYmplY3QubHV0LmggXAogICAgIE51bWJl
ckNvbnN0cnVjdG9yLmx1dC5oIFwKICAgICBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAg
UmVnRXhwT2JqZWN0Lmx1dC5oIFwKQEAgLTY2LDYgKzY4LDE2IEBAIEdyYW1tYXIuY3BwOiBHcmFt
bWFyLnkKIAljYXQgR3JhbW1hci5jcHAuaCBHcmFtbWFyLmhwcCA+IEdyYW1tYXIuaAogCXJtIC1m
IEdyYW1tYXIuY3BwLmggR3JhbW1hci5ocHAgYmlzb25fb3V0LnR4dAogCisjIEpTT04gZ3JhbW1h
cgorCitKU09OR3JhbW1hci5jcHA6IEpTT05HcmFtbWFyLnkKKwliaXNvbiAtZCAtcCBqc29ueXkg
JDwgLW8gJEAgPiBqc29uX2Jpc29uX291dC50eHQgMj4mMQorCXBlcmwgLXAgLWUgJ0VORCB7IGlm
ICgkJGNvbmZsaWN0KSB7IHVubGluayAiSlNPTkdyYW1tYXIuY3BwIjsgZGllOyB9IH0gJCRjb25m
bGljdCB8fD0gL2NvbmZsaWN0LycgPCBqc29uX2Jpc29uX291dC50eHQKKwl0b3VjaCBKU09OR3Jh
bW1hci5jcHAuaAorCXRvdWNoIEpTT05HcmFtbWFyLmhwcAorCWNhdCBKU09OR3JhbW1hci5jcHAu
aCBKU09OR3JhbW1hci5ocHAgPiBKU09OR3JhbW1hci5oCisJcm0gLWYgSlNPTkdyYW1tYXIuY3Bw
LmggSlNPTkdyYW1tYXIuaHBwIGpzb25fYmlzb25fb3V0LnR4dAorCiAjIGNoYXJhY3RlciB0YWJs
ZXMgZm9yIFBDUkUKIAogY2hhcnRhYmxlcy5jIDogZGZ0YWJsZXMKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2Vm
aWxlLmFtCShyZXZpc2lvbiA0MTg5MikKKysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFt
CSh3b3JraW5nIGNvcHkpCkBAIC0zNCw2ICszNCw3IEBAIGphdmFzY3JpcHRjb3JlX2J1aWx0X25v
c291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5sdXQu
aCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmx1dC5oIFwKIAlKYXZh
U2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QubHV0LmggXAorCUphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNPTk9iamVjdC5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJD
b25zdHJ1Y3Rvci5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1
Y3Rvci5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QubHV0Lmgg
XApAQCAtMjczLDcgKzI3NCw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogaWYgRU5B
QkxFX0RFQlVHCiBqYXZhc2NyaXB0Y29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291
cmNlcy9HcmFtbWFyLmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvR3JhbW1hci5oCisJRGVyaXZlZFNv
dXJjZXMvR3JhbW1hci5oIFwKKwlEZXJpdmVkU291cmNlcy9KU09OR3JhbW1hci5jcHAgXAorCURl
cml2ZWRTb3VyY2VzL0pTT05HcmFtbWFyLmgKIAogamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBc
CiAJSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcCBcCkBAIC0yODMs
NiArMjg2LDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0xhYmVsU2NvcGUuaCBcCiAJSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVi
dWdnZXIuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oIFwKKwlKYXZh
U2NyaXB0Q29yZS9wYXJzZXIvSlNPTkxleGVyLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0pTT05MZXhlci5oIFwKIAlKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwIFwKIAlKYXZh
U2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaCBcCiAJSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVJ
bmZvLmggXApAQCAtMjkwLDYgKzI5NSw4IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAog
CUphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oIFwKIAlKYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oIFwKKwlKYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvSlNPTlBhcnNlci5jcHAgXAorCUphdmFTY3JpcHRDb3JlL3BhcnNlci9K
U09OUGFyc2VyLmggXAkKIAlKYXZhU2NyaXB0Q29yZS9wYXJzZXIvUmVzdWx0VHlwZS5oIFwKIAlK
YXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZS5oIFwKIAlKYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlUHJvdmlkZXIuaCBcCkBAIC0zODEsNiArMzg4LDggQEAgamF2YXNjcmlwdGNvcmVf
c291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9Mb29rdXAuaCBcCiAJSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXRoT2JqZWN0LmggXAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5jcHAg
XAorCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5oIFwKIAlKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL05hdGl2ZUVycm9yQ29uc3RydWN0b3IuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9OYXRpdmVFcnJvclByb3RvdHlwZS5jcHAgXApAQCAtNDQwLDEwICs0NDksMTMgQEAgamF2YXNj
cmlwdGNvcmVfc291cmNlcyArPSBcCiBlbHNlCiBqYXZhc2NyaXB0Y29yZV9idWlsdF9ub3NvdXJj
ZXMgKz0gXAogCURlcml2ZWRTb3VyY2VzL0dyYW1tYXIuY3BwIFwKLQlEZXJpdmVkU291cmNlcy9H
cmFtbWFyLmgKKwlEZXJpdmVkU291cmNlcy9HcmFtbWFyLmggXAorCURlcml2ZWRTb3VyY2VzL0pT
T05HcmFtbWFyLmNwcCBcCisJRGVyaXZlZFNvdXJjZXMvSlNPTkdyYW1tYXIuaAogCiBqYXZhc2Ny
aXB0Y29yZV9zb3VyY2VzICs9IFwKLQlKYXZhU2NyaXB0Q29yZS9BbGxJbk9uZUZpbGUuY3BwCisJ
SmF2YVNjcmlwdENvcmUvQWxsSW5PbmVGaWxlLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvSnNvbi5j
cHAKIGVuZGlmICMgRU5EIEVOQUJMRV9ERUJVRwogCiBEZXJpdmVkU291cmNlcy9HcmFtbWFyLmg6
IERlcml2ZWRTb3VyY2VzL0dyYW1tYXIuY3BwOwpAQCAtNDU0LDYgKzQ2NiwxNSBAQCBEZXJpdmVk
U291cmNlcy9HcmFtbWFyLmNwcDogJChzcmNkaXIpL0phCiAJY2F0ICQoR0VOU09VUkNFUykvR3Jh
bW1hci5ocHAgPiAkKEdFTlNPVVJDRVMpL0dyYW1tYXIuaAogCXJtIC1mICQoR0VOU09VUkNFUykv
R3JhbW1hci5ocHAgYmlzb25fb3V0LnR4dAogCisKK0Rlcml2ZWRTb3VyY2VzL0pTT05HcmFtbWFy
Lmg6IERlcml2ZWRTb3VyY2VzL0pTT05HcmFtbWFyLmNwcDsKKworRGVyaXZlZFNvdXJjZXMvSlNP
TkdyYW1tYXIuY3BwOiAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTT05HcmFtbWFy
LnkKKwkkKEJJU09OKSAtZCAtcCBqc29ueXkgJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9KU09OR3JhbW1hci55IC1vICRAID4ganNvbl9iaXNvbl9vdXQudHh0IDI+JjEKKwkkKFBFUkwp
IC1wIC1lICdFTkQgeyBpZiAoJCRjb25mbGljdCkgeyB1bmxpbmsgIkpTT05HcmFtbWFyLmNwcCI7
IGRpZTsgfSB9ICQkY29uZmxpY3QgfHw9IC9jb25mbGljdC8nIDwganNvbl9iaXNvbl9vdXQudHh0
CisJY2F0ICQoR0VOU09VUkNFUykvSlNPTkdyYW1tYXIuaHBwID4gJChHRU5TT1VSQ0VTKS9KU09O
R3JhbW1hci5oCisJcm0gLWYgJChHRU5TT1VSQ0VTKS9KU09OR3JhbW1hci5ocHAganNvbl9iaXNv
bl9vdXQudHh0CisKIERlcml2ZWRTb3VyY2VzL0xleGVyLmx1dC5oOiAkKENSRUFURV9IQVNIX1RB
QkxFKSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0tleXdvcmRzLnRhYmxlCiAJJChQ
RVJMKSAkXiA+ICRACiAKQEAgLTUyOSw2ICs1NTAsNyBAQCBqYXZhc2NyaXB0Y29yZV9kaXN0ICs9
IFwKIAlKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzIFwKIAlKYXZhU2NyaXB0Q29yZS9wY3Jl
L3VjcHRhYmxlLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcGFyc2VyL0dyYW1tYXIueSBcCisJSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0pTT05HcmFtbWFyLnkgXAogCUphdmFTY3JpcHRDb3JlL3BhcnNl
ci9LZXl3b3Jkcy50YWJsZQogCiAjIENsZWFuIHJ1bGVzIGZvciBKYXZhU2NyaXB0Q29yZQpAQCAt
NTM2LDYgKzU1OCw3IEBAIENMRUFORklMRVMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJyYXlQcm90b3R5cGUubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3Rv
dHlwZS5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0Lmx1dC5oIFwK
KwlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QubHV0LmggXAogCUphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL3J1
bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
UmVnRXhwT2JqZWN0Lmx1dC5oIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnByaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHJl
dmlzaW9uIDQxODkyKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNyw2ICszNyw3IEBAIExVVF9GSUxFUyArPSBcCiAgICAgcnVudGltZS9T
dHJpbmdQcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcCBcCiAg
ICAgcnVudGltZS9NYXRoT2JqZWN0LmNwcCBcCisJcnVudGltZS9KU09OT2JqZWN0LmNwcCBcCiAg
ICAgcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwT2Jq
ZWN0LmNwcAogCkBAIC00NCw3ICs0NSw4IEBAIEtFWVdPUkRMVVRfRklMRVMgKz0gXAogICAgIHBh
cnNlci9LZXl3b3Jkcy50YWJsZQogCiBKU0NCSVNPTiArPSBcCi0gICAgcGFyc2VyL0dyYW1tYXIu
eQorICAgIHBhcnNlci9HcmFtbWFyLnkgXAorCXBhcnNlci9KU09OR3JhbW1hci55CiAKIFNPVVJD
RVMgKz0gXAogICAgIHd0Zi9Bc3NlcnRpb25zLmNwcCBcCkBAIC0xNDgsOSArMTUwLDExIEBAIFNP
VVJDRVMgKz0gXAogICAgIHJ1bnRpbWUvSlNTdHJpbmcuY3BwIFwKICAgICBydW50aW1lL0pTVmFs
dWUuY3BwIFwKICAgICBydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgXAorCXBhcnNlci9KU09O
TGV4ZXIuY3BwIFwKICAgICBwYXJzZXIvTGV4ZXIuY3BwIFwKICAgICBydW50aW1lL0xvb2t1cC5j
cHAgXAogICAgIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHAgXAorCXJ1bnRpbWUvSlNPTk9iamVjdC5j
cHAgXAogICAgIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRp
bWUvTmF0aXZlRXJyb3JQcm90b3R5cGUuY3BwIFwKICAgICBwYXJzZXIvTm9kZXMuY3BwIFwKSW5k
ZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnNjb25zCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnNjb25zCShyZXZpc2lvbiA0MTg5MikKKysrIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnNjb25zCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw2
ICsyMyw3IEBAIHNvdXJjZXNbJ2RlYnVnZ2VyJ10gPSBbCiAgICAgJ2RlYnVnZ2VyL0RlYnVnZ2Vy
Q2FsbEZyYW1lLmNwcCcsCiBdCiBzb3VyY2VzWydwYXJzZXInXSA9IFsKKwkncGFyc2VyL0pTT05M
ZXhlci5jcHAnLAogICAgICdwYXJzZXIvTGV4ZXIuY3BwJywKICAgICAncGFyc2VyL05vZGVzLmNw
cCcsCiAgICAgJ3BhcnNlci9QYXJzZXIuY3BwJywKQEAgLTkyLDYgKzkzLDcgQEAgc291cmNlc1sn
cnVudGltZSddID0gWwogICAgICdydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAnLAogICAgICdy
dW50aW1lL0xvb2t1cC5jcHAnLAogICAgICdydW50aW1lL01hdGhPYmplY3QuY3BwJywKKwkncnVu
dGltZS9KU09OT2JqZWN0LmNwcCcsCiAgICAgJ3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAnLAogICAgICdydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmNwcCcsCiAgICAgJ3J1
bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IuY3BwJywKQEAgLTIwNyw2ICsyMDksNyBAQCBkZXJpdmVk
X3NvdXJjZXNfcmVzdWx0cyA9IG1hcChEZXJpdmVkU291CiAgICAgJ0FycmF5UHJvdG90eXBlLmx1
dC5oJywKICAgICAnRGF0ZVByb3RvdHlwZS5sdXQuaCcsCiAgICAgJ01hdGhPYmplY3QubHV0Lmgn
LAorCSdKU09OT2JqZWN0Lmx1dC5oJywKICAgICAnTnVtYmVyQ29uc3RydWN0b3IubHV0LmgnLAog
ICAgICdSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCcsCiAgICAgJ1JlZ0V4cE9iamVjdC5sdXQuaCcs
CkBAIC0yMjEsMTIgKzIyNCwxNSBAQCBkZXJpdmVkX3NvdXJjZXNfc291cmNlcyA9IFsKICAgICAn
cnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAnLAogICAgICdydW50aW1lL0RhdGVQcm90b3R5cGUu
Y3BwJywKICAgICAncnVudGltZS9NYXRoT2JqZWN0LmNwcCcsCisJJ3J1bnRpbWUvSlNPTk9iamVj
dC5jcHAnLAogICAgICdydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcCcsCiAgICAgJ3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwJywKICAgICAncnVudGltZS9SZWdFeHBPYmplY3QuY3Bw
JywKICAgICAncnVudGltZS9TdHJpbmdQcm90b3R5cGUuY3BwJywKICAgICAncGFyc2VyL0dyYW1t
YXIueScsCisJJ3BhcnNlci9KU09OR3JhbW1hci55JywKICAgICAncGFyc2VyL0xleGVyLmNwcCcs
CisJJ3BhcnNlci9KU09OTGV4ZXIuY3BwJywKIF0KIAogIyBHZW5lcmF0ZSBEZXJpdmVkU291cmNl
cwpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCShyZXZpc2lv
biA0MTg5MikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHdv
cmtpbmcgY29weSkKQEAgLTYxLDYgKzYxLDcgQEAgU291cmNlIGZpbGVzIGZvciBKU0NvcmUuCiAg
ICAgICAgIHBjcmUvcGNyZV94Y2xhc3MuY3BwCiAgICAgPC9zZXQ+CiAgICAgPHNldCBhcHBlbmQ9
IjEiIHZhcj0iSlNDT1JFX1BBUlNFUl9TT1VSQ0VTIj4KKwkJcGFyc2VyL0pTT05MZXhlci5jcHAK
ICAgICAgICAgcGFyc2VyL0xleGVyLmNwcAogICAgICAgICBwYXJzZXIvTm9kZXMuY3BwCiAgICAg
ICAgIHBhcnNlci9QYXJzZXIuY3BwCkBAIC0xMjMsNiArMTI0LDcgQEAgU291cmNlIGZpbGVzIGZv
ciBKU0NvcmUuCiAgICAgICAgIHJ1bnRpbWUvSlNXcmFwcGVyT2JqZWN0LmNwcAogICAgICAgICBy
dW50aW1lL0xvb2t1cC5jcHAKICAgICAgICAgcnVudGltZS9NYXRoT2JqZWN0LmNwcAorCQlydW50
aW1lL0pTT05PYmplY3QuY3BwCiAgICAgICAgIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rv
ci5jcHAKICAgICAgICAgcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5jcHAKICAgICAgICAg
cnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0pzb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0pzb24uY3BwCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvSnNvbi5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09N
UFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01Q
VVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqCisgKi8KKyNpbmNsdWRlICJKU09OR3JhbW1hci5jcHAiCisjaW5jbHVkZSAicGFyc2Vy
L0pTT05MZXhlci5jcHAiCisjaW5jbHVkZSAicGFyc2VyL0pTT05QYXJzZXIuY3BwIgpJbmRleDog
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qCShyZXZpc2lv
biA0MTg5MikKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvai9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTY3Myw2ICs2
NzMsMjIgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0
aD0iLi5cLi5ccnVudGltZVxKU09OT2JqZWN0LmNwcCINCisJCQkJPgkNCisJCQk8L0ZpbGU+DQor
CQkJPGZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTT05PYmplY3QuaCIN
CisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4u
XHJ1bnRpbWVcSlNPTk9iamVjdC5jcHAiDQorCQkJCT4JDQorCQkJPC9GaWxlPg0KKwkJCTxmaWxl
DQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxKU09OT2JqZWN0LmgiDQorCQkJCT4N
CisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxydW50aW1l
XE5hdGl2ZUVycm9yQ29uc3RydWN0b3IuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KQEAgLTk1
Myw2ICs5NjksMTQgQEAKIAkJCQkJPg0KIAkJCQk8L0ZpbGU+DQogCQkJCTxGaWxlDQorCQkJCQlS
ZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcSlNPTk9iamVjdC5sdXQuaCINCisJCQkJCT4NCisJCQkJPC9GaWxlPg0KKwkJCQk8
RmlsZQ0KKwkJCQkJUmVsYXRpdmVQYXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVj
dE5hbWUpXERlcml2ZWRTb3VyY2VzXEpTT05PYmplY3QubHV0LmgiDQorCQkJCQk+DQorCQkJCTwv
RmlsZT4NCisJCQkJPEZpbGUNCiAJCQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIp
XG9ialwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xOdW1iZXJDb25zdHJ1Y3Rvci5sdXQu
aCINCiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KQEAgLTExOTQsNiArMTIxOCwxNCBAQAogCQkJCT4N
CiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwYXJzZXJc
SlNPTkxleGVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KKwkJCQlSZWxh
dGl2ZVBhdGg9Ii4uXC4uXHBhcnNlclxKU09OTGV4ZXIuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBhcnNlclxMZXhlci5jcHAiDQog
CQkJCT4NCiAJCQk8L0ZpbGU+DQpJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA0MTg5MikK
KysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2oJKHdvcmtpbmcgY29weSkKQEAgLTQyLDYgKzQyLDcgQEAKIAkJMEIxRjkyMUQwRjE3NTM1MDAw
MzY0NjhFIC8qIFB0ckFuZEZsYWdzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwQjFGOTIxQjBGMTc1MDJEMDAzNjQ2OEUgLyogUHRyQW5kRmxhZ3MuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwQjMzMEMy
NzBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjMzMEMyNjBGMzhDNjIzMDA2OTJERTMgLyogVHlw
ZVRyYWl0cy5jcHAgKi87IH07CiAJCTBCNEQ3RTYzMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJh
aXRzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwQjRE
N0U2MjBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBEREE2QzNCMEY2RDdEMTAwMDgyNjE1MCAv
KiBKc29uLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBEREE2QzNBMEY2RDdEMTAwMDgyNjE1MCAvKiBKc29uLmNwcCAqLzsgfTsKIAkJMTQwQjdEMUQw
REM2OUFGNzAwOUM0MkI4IC8qIEpTQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNERBODE4RjBEOTlGRDIwMDBCMEE0RkIgLyogSlNB
Y3RpdmF0aW9uLmNwcCAqLzsgfTsKIAkJMTQwRDE3RDcwRThBRDRBOTAwMENEMTdEIC8qIEpTQmFz
ZVByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRlLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMTQxMjExMzEwQTQ4Nzk0RDAw
NDgwMjU1IC8qIEphdmFTY3JpcHRDb3JlLmZyYW1ld29yayBpbiBGcmFtZXdvcmtzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDkzMkY1QkQ5MDgyMkExQzcwMDczNjk3NSAvKiBK
YXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgKi87IH07CkBAIC00MzgsNiArNDM5LDE0IEBACiAJCTBC
MUY5MjFCMEYxNzUwMkQwMDM2NDY4RSAvKiBQdHJBbmRGbGFncy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBQdHJBbmRGbGFncy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwQjMzMEMyNjBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUeXBlVHJhaXRzLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEI0RDdFNjIwRjMxOUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFpdHMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVHlwZVRyYWl0cy5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRDUxMTMzQjBGNzQ1NzZCMDBCMkRDRTEgLyogSlNPTkxl
eGVyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT05MZXhlci5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBENTExMzNDMEY3NDU3NkIwMEIyRENF
MSAvKiBKU09OTGV4ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPTkxl
eGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBEREE2QzJEMEY2RDdDODMwMDgy
NjE1MCAvKiBKU09OR3JhbW1hci55ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS55YWNjOyBwYXRoID0g
SlNPTkdyYW1tYXIueTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEREQTZDMkUwRjZE
N0M4MzAwODI2MTUwIC8qIEpTT05QYXJzZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSlNPTlBhcnNlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBEREE2QzJGMEY2RDdDODMwMDgyNjE1MCAvKiBKU09OUGFyc2VyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTT05QYXJzZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJMEREQTZDM0EwRjZEN0QxMDAwODI2MTUwIC8qIEpzb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSnNvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CisJCTBEREE2QzNDMEY2RDdENjMwMDgyNjE1MCAvKiBKU09OT2JqZWN0LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTT05PYmplY3QuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRERBNkMzRDBGNkQ3RDYzMDA4MjYxNTAgLyogSlNPTk9iamVj
dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU09OT2JqZWN0Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MEQxN0Q2MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jh
c2VQcml2YXRlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQmFzZVByaXZh
dGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMjExMDIwQTQ4NzgwOTAwNDgw
MjU1IC8qIG1pbmlkb20uYyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5jOyBuYW1lID0gbWluaWRv
bS5jOyBwYXRoID0gdGVzdHMvbWluaWRvbS5jOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkxNDEyMTEwRDBBNDg3ODg3MDA0ODAyNTUgLyogbWluaWRvbS5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgbmFtZSA9IG1pbmlkb20uanM7IHBhdGggPSB0ZXN0cy9taW5pZG9t
LmpzOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTEyLDYgKzkyMSw3IEBACiAJCQkJ
RjY5MkE4NTQwMjU1NTk3RDAxRkY2MEY3IC8qIGNyZWF0ZV9oYXNoX3RhYmxlICovLAogCQkJCTE0
QjhFQ0E2MEE1NjUzOTgwMDYyQkU1NCAvKiBKYXZhU2NyaXB0Q29yZS5leHAgKi8sCiAJCQkJRjVD
MjkwRTYwMjg0Rjk4RTAxODYzNUNBIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggKi8sCisJCQkJ
MEREQTZDM0EwRjZEN0QxMDAwODI2MTUwIC8qIEpzb24uY3BwICovLAogCQkJCTY1OTEyNkJDMEJE
RDE3MjgwMDE5MjFGQiAvKiBBbGxJbk9uZUZpbGUuY3BwICovLAogCQkJCTQ1RTEyRDg4MDZBNDlC
MEYwMEU5REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAv
KiBjb25maWcuaCAqLywKQEAgLTEyMTMsNiArMTIyMywxMSBAQAogCQk3RTM5RDgzNzBFQzNBMzg4
MDAzQUYxMUEgLyogcGFyc2VyICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJl
biA9ICgKKwkJCQkwRDUxMTMzQjBGNzQ1NzZCMDBCMkRDRTEgLyogSlNPTkxleGVyLmNwcCAqLywK
KwkJCQkwRDUxMTMzQzBGNzQ1NzZCMDBCMkRDRTEgLyogSlNPTkxleGVyLmggKi8sCisJCQkJMERE
QTZDMkQwRjZEN0M4MzAwODI2MTUwIC8qIEpTT05HcmFtbWFyLnkgKi8sCisJCQkJMEREQTZDMkUw
RjZEN0M4MzAwODI2MTUwIC8qIEpTT05QYXJzZXIuY3BwICovLAorCQkJCTBEREE2QzJGMEY2RDdD
ODMwMDgyNjE1MCAvKiBKU09OUGFyc2VyLmggKi8sCiAJCQkJOTMzQTM0OTkwMzhBRTdDNjAwODYz
NUNFIC8qIEdyYW1tYXIueSAqLywKIAkJCQk5M0YxOTgxQTA4MjQ1QUFFMDAxRTlBQkMgLyogS2V5
d29yZHMudGFibGUgKi8sCiAJCQkJRjY5MkE4NjUwMjU1NTk3RDAxRkY2MEY3IC8qIExleGVyLmNw
cCAqLywKQEAgLTEyMzIsNiArMTI0Nyw4IEBACiAJCTdFRjZFMEJCMEVCN0ExRUMwMDc5QUZBRiAv
KiBydW50aW1lICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJ
CQkwRERBNkMzQzBGNkQ3RDYzMDA4MjYxNTAgLyogSlNPTk9iamVjdC5jcHAgKi8sCisJCQkJMERE
QTZDM0QwRjZEN0Q2MzAwODI2MTUwIC8qIEpTT05PYmplY3QuaCAqLywKIAkJCQlCQ0Y2MDUxMTBF
MjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5jcHAgKi8sCiAJCQkJQkNGNjA1MTIwRTIwM0VGODAw
QjlBNjREIC8qIEFyZ0xpc3QuaCAqLywKIAkJCQlCQzI1N0RFNTBFMUY1MUM1MDAxNkI2QzkgLyog
QXJndW1lbnRzLmNwcCAqLywKQEAgLTIxMDMsNiArMjEyMCw3IEBACiAJCQkJQkMzMTM1NjUwRjMw
MkZBMzAwM0RGRDNBIC8qIERlYnVnZ2VyQWN0aXZhdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkwQjMzMEMyNzBGMzhDNjIzMDA2OTJERTMgLyogVHlwZVRyYWl0cy5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQkxNEE0MkUzRjBGNEY2MEVFMDA1OTkwOTkgLyogVGltZW91dENoZWNrZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJMEREQTZDM0IwRjZEN0QxMDAwODI2MTUwIC8qIEpzb24uY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNPTkdyYW1tYXIueQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNPTkdyYW1tYXIueQkocmV2aXNp
b24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9KU09OR3JhbW1hci55CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIwMiBAQAorJXB1cmVfcGFyc2VyCisKKyV7CisKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1
ZGUgIk5vZGVzLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxEYXRhLmgiCisjaW5jbHVkZSAiTm9kZUlu
Zm8uaCIKKyNpbmNsdWRlICJKU09OUGFyc2VyLmgiCisjaW5jbHVkZSAiSlNPTkxleGVyLmgiCisK
KyNkZWZpbmUgWVlNQVhERVBUSCAxMDAwMAorI2RlZmluZSBZWUVOQUJMRV9OTFMgMAorCisvKiBk
ZWZhdWx0IHZhbHVlcyBmb3IgYmlzb24gKi8KKyNkZWZpbmUgWVlERUJVRyAwIC8vIFNldCB0byAx
IHRvIGRlYnVnIGEgcGFyc2UgZXJyb3IuCisjZGVmaW5lIGpzY3l5ZGVidWcgMCAvLyBTZXQgdG8g
MSB0byBkZWJ1ZyBhIHBhcnNlIGVycm9yLgorI2lmICFQTEFURk9STShEQVJXSU4pCisgICAgLy8g
YXZvaWQgdHJpZ2dlcmluZyB3YXJuaW5ncyBpbiBvbGRlciBiaXNvbgorI2RlZmluZSBZWUVSUk9S
X1ZFUkJPU0UKKyNlbmRpZgorCitpbnQganNvbnl5bGV4KHZvaWQqIGx2YWxwLCB2b2lkKiBsbG9j
cCwgdm9pZCogZ2xvYmFsUHRyKTsKK2ludCBqc29ueXllcnJvcihjb25zdCBjaGFyKik7CisKKyNk
ZWZpbmUgR0xPQkFMX0RBVEEgc3RhdGljX2Nhc3Q8SlNHbG9iYWxEYXRhKj4oZ2xvYmFsUHRyKQor
Cit1c2luZyBuYW1lc3BhY2UgSlNDOwordXNpbmcgbmFtZXNwYWNlIHN0ZDsKKworI2lmIENPTVBJ
TEVSKE1TVkMpCisKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MDY1KQorI3ByYWdtYSB3YXJu
aW5nKGRpc2FibGU6IDQyNDQpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDcwMikKKworLy8g
QXQgbGVhc3Qgc29tZSBvZiB0aGUgdGltZSwgdGhlIGRlY2xhcmF0aW9ucyBvZiBtYWxsb2MgYW5k
IGZyZWUgdGhhdCBiaXNvbgorLy8gZ2VuZXJhdGVzIGFyZSBjYXVzaW5nIHdhcm5pbmdzLiBBIHdh
eSB0byBhdm9pZCB0aGlzIGlzIHRvIGV4cGxpY2l0bHkgZGVmaW5lCisvLyB0aGUgbWFjcm9zIHNv
IHRoYXQgYmlzb24gZG9lc24ndCB0cnkgdG8gZGVjbGFyZSBtYWxsb2MgYW5kIGZyZWUuCisjZGVm
aW5lIFlZTUFMTE9DIG1hbGxvYworI2RlZmluZSBZWUZSRUUgZnJlZQorCisjZW5kaWYKKworI2Rl
ZmluZSBZWVBBUlNFX1BBUkFNIGdsb2JhbFB0cgorI2RlZmluZSBZWUxFWF9QQVJBTSBnbG9iYWxQ
dHIKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+IE5vZGVEZWNsYXJhdGlvbkluZm88VD4gY3JlYXRl
Tm9kZURlY2xhcmF0aW9uSW5mbyhUIG5vZGUsIENvZGVGZWF0dXJlcyBpbmZvLCBpbnQgbnVtQ29u
c3RhbnRzKQoreworICAgIEFTU0VSVCgoaW5mbyAmIH5BbGxGZWF0dXJlcykgPT0gMCk7CisgICAg
Tm9kZURlY2xhcmF0aW9uSW5mbzxUPiByZXN1bHQgPSB7bm9kZSwgaW5mbywgbnVtQ29uc3RhbnRz
fTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gTm9kZUlu
Zm88VD4gY3JlYXRlTm9kZUluZm8oVCBub2RlLCBDb2RlRmVhdHVyZXMgaW5mbywgaW50IG51bUNv
bnN0YW50cykKK3sKKyAgICBBU1NFUlQoKGluZm8gJiB+QWxsRmVhdHVyZXMpID09IDApOworICAg
IE5vZGVJbmZvPFQ+IHJlc3VsdCA9IHtub2RlLCBpbmZvLCBudW1Db25zdGFudHN9OworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKKyV9CisKKyV1bmlvbiB7CisgICAgaW50ICAgICAgICAgICAgICAg
ICBpbnRWYWx1ZTsKKyAgICBkb3VibGUgICAgICAgICAgICAgIGRvdWJsZVZhbHVlOworICAgIElk
ZW50aWZpZXIqICAgICAgICAgaWRlbnQ7CisKKyAgICAvLyBleHByZXNzaW9uIHN1YnRyZWVzCisg
ICAgRXhwcmVzc2lvbk5vZGVJbmZvICBleHByZXNzaW9uTm9kZTsKKyAgICBQcm9wZXJ0eU5vZGVJ
bmZvICAgIHByb3BlcnR5Tm9kZTsKKworICAgIFByb3BlcnR5TGlzdEluZm8gICAgcHJvcGVydHlM
aXN0OworICAgIEVsZW1lbnRMaXN0SW5mbyAgICAgZWxlbWVudExpc3Q7CisKKyAgICBTdGF0ZW1l
bnROb2RlSW5mbyAgIHN0YXRlbWVudE5vZGU7CisgICAgU291cmNlRWxlbWVudHNJbmZvICBzb3Vy
Y2VFbGVtZW50czsKK30KKworJXN0YXJ0IEpTT05PYmplY3QKKworLyogbGl0ZXJhbHMgKi8KKyV0
b2tlbiBOVUxMVE9LRU4gVFJVRVRPS0VOIEZBTFNFVE9LRU4KKworLyogdGVybWluYWwgdHlwZXMg
Ki8KKyV0b2tlbiA8ZG91YmxlVmFsdWU+IE5VTUJFUgorJXRva2VuIDxpZGVudD4gSURFTlQgU1RS
SU5HCisKKy8qIGF1dG9tYXRpY2FsbHkgaW5zZXJ0ZWQgc2VtaWNvbG9uICovCisldG9rZW4gQVVU
T1BMVVNQTFVTIEFVVE9NSU5VU01JTlVTCisKKy8qIG5vbi10ZXJtaW5hbCB0eXBlcyAqLworJXR5
cGUgPGV4cHJlc3Npb25Ob2RlPiAgQXJyYXkKKyV0eXBlIDxleHByZXNzaW9uTm9kZT4gIFZhbHVl
CisldHlwZSA8ZXhwcmVzc2lvbk5vZGU+ICBPYmplY3QKKworJXR5cGUgPGVsZW1lbnRMaXN0PiAg
ICAgRWxlbWVudHMKKyV0eXBlIDxwcm9wZXJ0eU5vZGU+ICAgIE1lbWJlcgorJXR5cGUgPHByb3Bl
cnR5TGlzdD4gICAgTWVtYmVycworJXR5cGUgPHNvdXJjZUVsZW1lbnRzPiAgSlNPTk9iamVjdAor
JSUKKworVmFsdWUgOgorICAgICAgICBOVUxMVE9LRU4gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPEV4cHJlc3Npb25Ob2RlKj4obmV3IE51bGxOb2Rl
KEdMT0JBTF9EQVRBKSwgMCwgMSk7IH0KKyAgICB8ICAgVFJVRVRPS0VOICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5l
dyBCb29sZWFuTm9kZShHTE9CQUxfREFUQSwgdHJ1ZSksIDAsIDEpOyB9CisgICAgfCAgIEZBTFNF
VE9LRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88
RXhwcmVzc2lvbk5vZGUqPihuZXcgQm9vbGVhbk5vZGUoR0xPQkFMX0RBVEEsIGZhbHNlKSwgMCwg
MSk7IH0KKyAgICB8ICAgTlVNQkVSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsg
JCQgPSBjcmVhdGVOb2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyBOdW1iZXJOb2RlKEdMT0JB
TF9EQVRBLCAkMSksIDAsIDEpO30KKyAgICB8ICAgU1RSSU5HICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyBT
dHJpbmdOb2RlKEdMT0JBTF9EQVRBLCAqJDEpLCAwLCAxKTt9CisgICAgfCAgIE9iamVjdAorICAg
IHwgICBBcnJheQorOworCisKK0FycmF5IDoKKyAgICAgICAgJ1snJ10nICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+
KG5ldyBBcnJheU5vZGUoR0xPQkFMX0RBVEEsIE5VTEwpLCAwLCAwKTsgfQorICAgIHwgICAnWycg
RWxlbWVudHMgJ10nICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZv
PEV4cHJlc3Npb25Ob2RlKj4obmV3IEFycmF5Tm9kZShHTE9CQUxfREFUQSwgJDIubV9ub2RlLmhl
YWQpLCAkMi5tX2ZlYXR1cmVzLCAkMi5tX251bUNvbnN0YW50cyk7IH0KKzsKKworRWxlbWVudHMg
OgorICAgICAgICBWYWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5t
X25vZGUuaGVhZCA9IG5ldyBFbGVtZW50Tm9kZShHTE9CQUxfREFUQSwgMCwgJDEubV9ub2RlKTsg
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1f
bm9kZS50YWlsID0gJCQubV9ub2RlLmhlYWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICQkLm1fZmVhdHVyZXMgPSAkMS5tX2ZlYXR1cmVzOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9udW1D
b25zdGFudHMgPSAkMS5tX251bUNvbnN0YW50czsgfQorICAgIHwgICBFbGVtZW50cyAnLCcgVmFs
dWUgICAgICAgICAgICAgICAgICAgICAgeyAkJC5tX25vZGUuaGVhZCA9ICQxLm1fbm9kZS5oZWFk
OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5t
X25vZGUudGFpbCA9IG5ldyBFbGVtZW50Tm9kZShHTE9CQUxfREFUQSwgJDEubV9ub2RlLnRhaWws
IDAsICQzLm1fbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICQkLm1fZmVhdHVyZXMgPSAkMS5tX2ZlYXR1cmVzIHwgJDMubV9mZWF0dXJlczsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9u
dW1Db25zdGFudHMgPSAkMS5tX251bUNvbnN0YW50cyArICQzLm1fbnVtQ29uc3RhbnRzOyB9IAor
OworCitPYmplY3Q6CisgICAgICAgICd7Jyd9JyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88RXhwcmVzc2lvbk5vZGUqPihuZXcgT2JqZWN0TGl0
ZXJhbE5vZGUoR0xPQkFMX0RBVEEpLCAwLCAwKTsgfQorICAgIHwgICAneycgTWVtYmVycyAnfScg
ICAgICAgICAgICAgICAgICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPEV4cHJlc3Npb25O
b2RlKj4obmV3IE9iamVjdExpdGVyYWxOb2RlKEdMT0JBTF9EQVRBLCAkMi5tX25vZGUuaGVhZCks
ICQyLm1fZmVhdHVyZXMsICQyLm1fbnVtQ29uc3RhbnRzKTt9Cis7CisKK01lbWJlcnMgOgorICAg
ICAgICBNZW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5tX25vZGUu
aGVhZCA9IG5ldyBQcm9wZXJ0eUxpc3ROb2RlKEdMT0JBTF9EQVRBLCAkMS5tX25vZGUpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX25vZGUu
dGFpbCA9ICQkLm1fbm9kZS5oZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAkJC5tX2ZlYXR1cmVzID0gJDEubV9mZWF0dXJlczsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9udW1Db25zdGFu
dHMgPSAkMS5tX251bUNvbnN0YW50czt9CisgICAgfCAgIE1lbWJlcnMgJywnIE1lbWJlciAgICAg
ICAgICAgICAgICAgICAgICB7ICQkLm1fbm9kZS5oZWFkID0gJDEubV9ub2RlLmhlYWQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9kZS50
YWlsID0gbmV3IFByb3BlcnR5TGlzdE5vZGUoR0xPQkFMX0RBVEEsICQzLm1fbm9kZSwgJDEubV9u
b2RlLnRhaWwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAkJC5tX2ZlYXR1cmVzID0gJDEubV9mZWF0dXJlcyB8ICQzLm1fZmVhdHVyZXM7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbnVtQ29u
c3RhbnRzID0gJDEubV9udW1Db25zdGFudHMgKyAkMy5tX251bUNvbnN0YW50czsgfQorOworCitN
ZW1iZXIgOgorICAgIFNUUklORyAnOicgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAg
eyAkJCA9IGNyZWF0ZU5vZGVJbmZvPFByb3BlcnR5Tm9kZSo+KG5ldyBQcm9wZXJ0eU5vZGUoR0xP
QkFMX0RBVEEsICokMSwgJDMubV9ub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSwgJDMubV9m
ZWF0dXJlcywgJDMubV9udW1Db25zdGFudHMpO30KKzsKKworSlNPTk9iamVjdCA6CisgICAgICAg
IEFycmF5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLm1fbm9kZSA9IG5l
dyBTb3VyY2VFbGVtZW50cyhHTE9CQUxfREFUQSk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9kZS0+YXBwZW5kKG5ldyBFeHByU3RhdGVt
ZW50Tm9kZShHTE9CQUxfREFUQSwgJDEubV9ub2RlKSk7CisgICAgCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdMT0JBTF9EQVRBLT5qc29uUGFyc2Vy
LT5kaWRGaW5pc2hQYXJzaW5nKCQkLm1fbm9kZSwgJDEubV9mZWF0dXJlcywgQDEubGFzdF9saW5l
LCAkMS5tX251bUNvbnN0YW50cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgfCAgIE9iamVjdCAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB7ICQkLm1fbm9kZSA9IG5ldyBTb3VyY2VFbGVtZW50cyhHTE9CQUxfREFUQSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9k
ZS0+YXBwZW5kKG5ldyBFeHByU3RhdGVtZW50Tm9kZShHTE9CQUxfREFUQSwgJDEubV9ub2RlKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJICAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0xPQkFMX0RBVEEtPmpz
b25QYXJzZXItPmRpZEZpbmlzaFBhcnNpbmcoJCQubV9ub2RlLCAkMS5tX2ZlYXR1cmVzLCBAMS5s
YXN0X2xpbmUsICQxLm1fbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKzsKKworJSUKKworCisvKiBjYWxsZWQgYnkgeXlwYXJz
ZSBvbiBlcnJvciAqLworaW50IHl5ZXJyb3IoY29uc3QgY2hhciAqKQoreworICAgIHJldHVybiAx
OworfQorCisvLyBhIGJyaWRnZSBmb3IgeWFjYyBmcm9tIHRoZSBDIHdvcmxkIHRvIEMrKworaW50
IGpzb255eWxleCh2b2lkKiBsdmFscCwgdm9pZCogbGxvY3AsIHZvaWQqIGdsb2JhbERhdGEpCit7
CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEpTR2xvYmFsRGF0YSo+KGdsb2JhbERhdGEpLT5qc29u
UGFyc2VyLT5nZXRMZXhlcigpLmxleChsdmFscCwgbGxvY3ApOworfQorCisjdW5kZWYgR0xPQkFM
X0RBVEEKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9KU09OTGV4ZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9KU09OTGV4ZXIuY3BwCShyZXZpc2lvbiAwKQor
KysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTT05MZXhlci5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMzc0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRl
biAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LCAyMDA3LCAyMDA4LCAy
MDA5IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MDcgQ2FtZXJvbiBad2FyaWNoIChjd3p3YXJpY2hAdXdhdGVybG9vLmNhKQorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisg
KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpTT05MZXhlci5oIgorCisjaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgorI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmgiCisj
aW5jbHVkZSAiTm9kZUluZm8uaCIKKyNpbmNsdWRlICJOb2Rlcy5oIgorI2luY2x1ZGUgImR0b2Eu
aCIKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0
cmluZy5oPgorI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KKwordXNpbmcgbmFtZXNwYWNlIFdURjsKK3VzaW5nIG5hbWVzcGFjZSBVbmljb2Rl
OworCisvLyB3ZSBjYW4ndCBzcGVjaWZ5IHRoZSBuYW1lc3BhY2UgaW4geWFjYydzIEMgb3V0cHV0
LCBzbyBkbyBpdCBoZXJlCit1c2luZyBuYW1lc3BhY2UgSlNDOworCisjaWZuZGVmIEtERV9VU0Vf
RklOQUwKKyNpbmNsdWRlICJKU09OR3JhbW1hci5oIgorI2VuZGlmCisKK25hbWVzcGFjZSBKU0Mg
eworCitzdGF0aWMgaW5saW5lIGJvb2wgaXNXaGl0ZVNwYWNlKGludCBjaCkKK3sKKyAgICByZXR1
cm4gKCAgIGNoID09ICcgJworICAgICAgICAgICAgfHwgY2ggPT0gJ1x0JworICAgICAgICAgICAg
fHwgY2ggPT0gJ1xyJworICAgICAgICAgICAgfHwgY2ggPT0gJ1xuJyk7CisgICAgICAgICAgICAK
K30KKworc3RhdGljIGlubGluZSBib29sIGlzRGlnaXQoaW50IGNoKQoreworICAgIHJldHVybiAo
Y2ggPj0gJzAnICYmIGNoIDw9ICc5Jyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc0hleChp
bnQgY2gpCit7CisgICAgcmV0dXJuICggICAoY2ggPj0nMCcgJiYgY2ggPD0nOScpCisgICAgICAg
ICAgICB8fCAoY2ggPj0nQScgJiYgY2ggPD0nRicpCisgICAgICAgICAgICB8fCAoY2ggPj0nYScg
JiYgY2ggPD0nZicpKTsKK30KKworCitKU09OTGV4ZXI6OkpTT05MZXhlcigpCisgICAgOiBtX3Bv
c2l0aW9uKDApCisgICAgLCBtX2NvZGUoMCkKKyAgICAsIG1fbGVuZ3RoKDApCisgICAgLCBtX2N1
cnJlbnQoMCkKKyAgICAsIG1fbmV4dDEoMCkKKyAgICAsIG1fbmV4dDIoMCkKKyAgICAsIG1fbmV4
dDMoMCkKKyAgICAsIG1fbmV4dDQoMCkKKyAgICAsIG1fY29sdW1uKDApCisgICAgLCBtX2xpbmUo
MCkKKyAgICAsIG1fZ2xvYmFsRGF0YShOVUxMKQorICAgICwgbV9lcnJvcihmYWxzZSkKK3sKKyAg
ICBtX2FzY2lpQnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOworICAgIG1fdW5pY29k
ZUJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKK30KKwordm9pZCBKU09OTGV4ZXI6
OnNldENvZGUoY29uc3QgU291cmNlQ29kZSYgc291cmNlKQoreworICAgIG1fbGluZSA9IHNvdXJj
ZS5maXJzdExpbmUoKTsKKyAgICBtX2NvbHVtbiA9IDA7CisKKyAgICBtX3Bvc2l0aW9uID0gc291
cmNlLnN0YXJ0T2Zmc2V0KCk7CisgICAgbV9zb3VyY2UgPSAmc291cmNlOworICAgIG1fY29kZSA9
IHNvdXJjZS5wcm92aWRlcigpLT5kYXRhKCk7CisgICAgbV9sZW5ndGggPSBzb3VyY2UuZW5kT2Zm
c2V0KCk7CisgICAgbV9lcnJvciA9IGZhbHNlOworCisgICAgLy8gcmVhZCBmaXJzdCBjaGFyYWN0
ZXJzCisgICAgc2hpZnQoNSk7Cit9CisKK3ZvaWQgSlNPTkxleGVyOjpjbGVhcigpCit7CisgICAg
bV9pZGVudGlmaWVycy5jbGVhcigpOworCisgICAgVmVjdG9yPGNoYXI+IG5ld0J1ZmZlcjg7Cisg
ICAgbmV3QnVmZmVyOC5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMyKTsKKyAgICBtX2FzY2lpQnVm
ZmVyLnN3YXAobmV3QnVmZmVyOCk7CisKKyAgICBWZWN0b3I8VUNoYXI+IG5ld0J1ZmZlcjE2Owor
ICAgIG5ld0J1ZmZlcjE2LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOworICAgIG1fdW5pY29k
ZUJ1ZmZlci5zd2FwKG5ld0J1ZmZlcjE2KTsKK30KKworaW50IEpTT05MZXhlcjo6c2tpcGVXaGl0
ZVNwYWNlcygpCit7CisgICAgd2hpbGUgKGlzV2hpdGVTcGFjZShtX2N1cnJlbnQpKSB7CisgICAg
ICAgIGlmIChtX2N1cnJlbnQgPT0gJ1xuJykgeworICAgICAgICAgICAgbV9jb2x1bW4gPSAwOwor
ICAgICAgICAgICAgbV9saW5lKys7CisgICAgICAgIH0KKyAgICAgICAgbV9jb2x1bW4rKzsKKyAg
ICAgICAgc2hpZnQoMSk7CisgICAgfQorCisgICAgcmV0dXJuIG1fY3VycmVudDsKK30KKworaW50
IEpTT05MZXhlcjo6c2hpZnQoaW50IGNvdW50KSB7CisgICAgd2hpbGUgKGNvdW50LS0pIHsKKyAg
ICAgICAgbV9jdXJyZW50ID0gbV9uZXh0MTsKKyAgICAgICAgbV9uZXh0MSAgID0gbV9uZXh0MjsK
KyAgICAgICAgbV9uZXh0MiAgID0gbV9uZXh0MzsKKyAgICAgICAgbV9uZXh0MyAgID0gbV9uZXh0
NDsKKyAgICAgICAgbV9uZXh0NCAgID0gKG1fcG9zaXRpb24gPCBtX2xlbmd0aCk/IG1fY29kZVtt
X3Bvc2l0aW9uKytdIDogLTE7CisKKyAgICAgICAgbV9jb2x1bW4rKzsKKyAgICB9CisKKyAgICBy
ZXR1cm4gbV9jdXJyZW50OworfQorCitpbnQgSlNPTkxleGVyOjpsZXgodm9pZCogcDEsIHZvaWQq
IHAyKQoreworICAgIFlZU1RZUEUqIGx2YWxwID0gc3RhdGljX2Nhc3Q8WVlTVFlQRSo+KHAxKTsK
KyAgICBZWUxUWVBFKiBsbG9jcCA9IHN0YXRpY19jYXN0PFlZTFRZUEUqPihwMik7CisgICAgaW50
IHRva2VuID0gLTE7CisKKyAgICBtX3VuaWNvZGVCdWZmZXIuY2xlYXIoKTsKKyAgICBtX2FzY2lp
QnVmZmVyLmNsZWFyKCk7CisgICAgCisgICAgaWYgKHNraXBlV2hpdGVTcGFjZXMoKSA9PSAtMSkK
KyAgICAgICAgLy8gRU9GIHJlYWNoZWQuCisgICAgICAgIHJldHVybiAwOworCisgICAgc3dpdGNo
IChtX2N1cnJlbnQpIHsKKyAgICBjYXNlICdcIic6CisgICAgICAgIC8qIFN0cmluZyB2YWx1ZSAq
LworICAgICAgICB0b2tlbiA9IHJlYWRTdHJpbmcoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAneyc6CisgICAgY2FzZSAnfSc6CisgICAgY2FzZSAnWyc6CisgICAgY2FzZSAnXSc6CisgICAg
Y2FzZSAnOic6CisgICAgY2FzZSAnLCc6CisgICAgICAgIHRva2VuID0gbV9jdXJyZW50OworICAg
ICAgICBzaGlmdCgxKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAndCc6CisgICAgICAgIGlm
IChtX2N1cnJlbnQgPT0gJ3QnICYmIG1fbmV4dDEgPT0gJ3InICYmIG1fbmV4dDIgPT0gJ3UnICYm
IG1fbmV4dDMgPT0gJ2UnKSB7CisgICAgICAgICAgICB0b2tlbiA9IFRSVUVUT0tFTjsKKyAgICAg
ICAgICAgIHNoaWZ0KDQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2Yn
OgorICAgICAgICBpZiAobV9jdXJyZW50ID09ICdmJyAmJiBtX25leHQxID09ICdhJyAmJiBtX25l
eHQyID09ICdsJyAmJiBtX25leHQzID09ICdzJyAmJiBtX25leHQ0ID09ICdlJykgeworICAgICAg
ICAgICAgc2hpZnQoNSk7CisgICAgICAgICAgICB0b2tlbiA9IEZBTFNFVE9LRU47CisgICAgICAg
IH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnbic6CisgICAgICAgIGlmIChtX2N1cnJlbnQg
PT0gJ24nICYmIG1fbmV4dDEgPT0gJ3UnICYmIG1fbmV4dDIgPT0gJ2wnICYmIG1fbmV4dDMgPT0g
J2wnKSB7CisgICAgICAgICAgICB0b2tlbiA9IE5VTExUT0tFTjsKKyAgICAgICAgICAgIHNoaWZ0
KDQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlm
IChtX2N1cnJlbnQgPT0gJy0nIHx8IGlzRGlnaXQobV9jdXJyZW50KSkKKyAgICAgICAgICAgIHRv
a2VuID0gcmVhZE51bWJlcigpOworICAgICAgICBlbHNlCisgICAgICAgICAgICAvLyBTeW50YXgg
ZXJyb3IuICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICB0b2tlbiA9IC0xOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgCisgICAgbGxvY3AtPmZpcnN0X2xpbmUgPSBtX2xpbmU7Cisg
ICAgbGxvY3AtPmxhc3RfbGluZSA9IG1fbGluZTsKKyAgICBsbG9jcC0+Zmlyc3RfY29sdW1uID0g
bV9jb2x1bW47CisgICAgbGxvY3AtPmxhc3RfY29sdW1uID0gbV9jb2x1bW47CisKKyAgICBpZiAo
dG9rZW4gPT0gTlVNQkVSKSB7CisgICAgICAgIG1fYXNjaWlCdWZmZXIuYXBwZW5kKDApOworICAg
ICAgICBsdmFscC0+ZG91YmxlVmFsdWUgPSBXVEY6OnN0cnRvZChtX2FzY2lpQnVmZmVyLmRhdGEo
KSwgMEwpOworICAgIH0gZWxzZSBpZiAodG9rZW4gPT0gU1RSSU5HKSB7CisgICAgICAgIGx2YWxw
LT5pZGVudCA9IG1ha2VJZGVudGlmaWVyKG1fdW5pY29kZUJ1ZmZlcik7CisgICAgfSBlbHNlIGlm
KHRva2VuID09IC0xKSB7CisgICAgICAgIG1fZXJyb3IgPSB0cnVlOworICAgIH0KKyAgICByZXR1
cm4gdG9rZW47Cit9CisKK3ZvaWQgSlNPTkxleGVyOjpyZWFkRGlnaXRzKCkKK3sKKyAgICB3aGls
ZShpc0RpZ2l0KG1fY3VycmVudCkpIHsKKyAgICAgICAgYWRkQXNjaWkobV9jdXJyZW50KTsKKyAg
ICAgICAgc2hpZnQoMSk7ICAgICAKKyAgICB9Cit9CisKK2ludCBKU09OTGV4ZXI6OnJlYWROdW1i
ZXIoKQoreworICAgIGlmIChtX2N1cnJlbnQgPT0gJy0nKSB7CisgICAgICAgIGFkZEFzY2lpKG1f
Y3VycmVudCk7CisgICAgICAgIHNoaWZ0KDEpOworICAgIH0KKyAgICAgICAgCisgICAgc3dpdGNo
KG1fY3VycmVudCkgeworICAgIGNhc2UgJzAnOgorICAgICAgICAvKiBMZWFkaW5nIHplcm8gaXMg
bm90IGFsbG93ZWQgaW4gSlNPTjoKKyAgICAgICAgICogaS5lICgwMSwgMEUrMSwgMGUrMSkKKyAg
ICAgICAgICovCisgICAgICAgIGlmIChtX25leHQxICE9ICcuJyAKKyAgICAgICAgICAgICYmICht
X25leHQxID09ICdFJyB8fCBtX25leHQxID09ICdlJyB8fCBpc0RpZ2l0KG1fbmV4dDEpKSkKKyAg
ICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgYWRkQXNjaWkobV9jdXJyZW50KTsKKyAgICAg
ICAgc2hpZnQoMSk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmICht
X2N1cnJlbnQgPCAnMScgfHwgIG1fY3VycmVudCA+ICc5JykKKyAgICAgICAgICAgIHJldHVybiAt
MTsKKyAgICAgICAgcmVhZERpZ2l0cygpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAobV9jdXJyZW50ID09ICcuJyAmJiAhaXNEaWdpdChtX25leHQxKSkKKyAgICAgICAgcmV0dXJu
IC0xOworICAgIGVsc2UgaWYgKG1fY3VycmVudCA9PSAnLicpIHsKKyAgICAgICAgYWRkQXNjaWko
bV9jdXJyZW50KTsKKyAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIHJlYWREaWdpdHMoKTsKKyAg
ICB9CisKKyAgICBpZiAobV9jdXJyZW50ID09ICdlJyB8fCBtX2N1cnJlbnQgPT0gJ0UnKSB7Cisg
ICAgICAgaWYgKCFpc0RpZ2l0KG1fbmV4dDEpCisgICAgICAgICAgJiYgKG1fbmV4dDEgIT0gJysn
ICYmIG1fbmV4dDEgIT0gJysnICYmICFpc0RpZ2l0KG1fbmV4dDIpKSkKKyAgICAgICAgICAgIHJl
dHVybiAtMTsKKyAgICAgICAgYWRkQXNjaWkobV9jdXJyZW50KTsKKyAgICAgICAgYWRkQXNjaWko
bV9uZXh0MSk7CisgICAgICAgIHNoaWZ0KDIpOworICAgICAgICByZWFkRGlnaXRzKCk7CisgICAg
fQorICAgIHJldHVybiBOVU1CRVI7Cit9CisKK2ludCBKU09OTGV4ZXI6OnJlYWRTdHJpbmcoKQor
eworICAgIGJvb2wgZG9uZSA9IGZhbHNlOworICAgIGludCB0b2tlbiA9IC0xOworCisgICAgc2hp
ZnQoMSk7CisgICAgd2hpbGUgKCFkb25lKSB7CisgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ1xc
JykgeworICAgICAgICAgICAgc2hpZnQoMSk7CisgICAgICAgICAgICBpZiAobV9jdXJyZW50ID09
ICduJykgeworICAgICAgICAgICAgICAgIGFkZFVuaWNvZGUoJ1xuJyk7CisgICAgICAgICAgICAg
ICAgc2hpZnQoMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCA9PSAncicpIHsK
KyAgICAgICAgICAgICAgICBhZGRVbmljb2RlKCdccicpOworICAgICAgICAgICAgICAgIHNoaWZ0
KDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJ2InKSB7CisgICAgICAg
ICAgICAgICAgYWRkVW5pY29kZSgnXGInKTsKKyAgICAgICAgICAgICAgICBzaGlmdCgxKTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ID09ICd0JykgeworICAgICAgICAgICAgICAg
IGFkZFVuaWNvZGUoJ1x0Jyk7CisgICAgICAgICAgICAgICAgc2hpZnQoMSk7CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKG1fY3VycmVudCA9PSAnXFwnKSB7CisgICAgICAgICAgICAgICAgYWRkVW5p
Y29kZSgnXFwnKTsKKyAgICAgICAgICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAobV9jdXJyZW50ID09ICcvJykgeworICAgICAgICAgICAgICAgIGFkZFVuaWNvZGUoJy8n
KTsKKyAgICAgICAgICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9j
dXJyZW50ID09ICdmJykgeworICAgICAgICAgICAgICAgIGFkZFVuaWNvZGUoJ1xmJyk7CisgICAg
ICAgICAgICAgICAgc2hpZnQoMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCA9
PSAnXCInKSB7CisgICAgICAgICAgICAgICAgYWRkVW5pY29kZSgnXCInKTsKKyAgICAgICAgICAg
ICAgICBzaGlmdCgxKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ID09ICd1Jykg
eworICAgICAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgICAgICAgIGlmIChpc0hleCht
X2N1cnJlbnQpICYmIGlzSGV4KG1fbmV4dDEpICYmIGlzSGV4KG1fbmV4dDIpICYmIGlzSGV4KG1f
bmV4dDMpKSB7CisgICAgICAgICAgICAgICAgICAgIGFkZFVuaWNvZGUoY29udmVydFVuaWNvZGUo
bV9jdXJyZW50LCBtX25leHQxLCBtX25leHQyLCBtX25leHQzKSk7CisgICAgICAgICAgICAgICAg
ICAgIHNoaWZ0KDQpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
ICAgIC8vIFVuaWNvZGUgc2hvdWxkIGJlIFx1WFhYWAorICAgICAgICAgICAgICAgICAgICBkb25l
ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgdG9rZW49IC0xOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgZG9uZSA9IHRydWU7Cisg
ICAgICAgICAgICAgICAgdG9rZW49IC0xOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2Ug
aWYgKG1fY3VycmVudCA9PSAnXCInKSB7CisgICAgICAgICAgICBkb25lID0gdHJ1ZTsKKyAgICAg
ICAgICAgIHRva2VuPSBTVFJJTkc7CisgICAgICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgfSBl
bHNlIGlmIChpc0FTQ0lJUHJpbnRhYmxlKG1fY3VycmVudCkpIHsKKyAgICAgICAgICAgIGFkZFVu
aWNvZGUobV9jdXJyZW50KTsKKyAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgZG9uZSAgPSB0cnVlOworICAgICAgICAgICAgdG9rZW4gPSAtMTsKKyAg
ICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0b2tlbjsKK30KKwordm9pZCBKU09OTGV4ZXI6
OmFkZFVuaWNvZGUoaW50IGMpCit7CisgICAgYWRkVW5pY29kZShzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBzaG9ydD4oYykpOworfQordm9pZCBKU09OTGV4ZXI6OmFkZFVuaWNvZGUoVUNoYXIgYykKK3sK
KyAgICBtX3VuaWNvZGVCdWZmZXIuYXBwZW5kKGMpOworfQorCit2b2lkIEpTT05MZXhlcjo6YWRk
QXNjaWkoaW50IGMpCit7CisgICAgQVNTRVJUKGMgPj0gMCk7CisgICAgQVNTRVJUKGMgPD0gMHhm
Zik7CisgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoc3RhdGljX2Nhc3Q8Y2hhcj4oYykpOworfQor
Cit1bnNpZ25lZCBjaGFyIEpTT05MZXhlcjo6Y29udmVydEhleChpbnQgYykKK3sKKyAgICBpZiAo
YyA+PSAnMCcgJiYgYyA8PSAnOScpCisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l
ZCBjaGFyPihjIC0gJzAnKTsKKyAgICBpZiAoYyA+PSAnYScgJiYgYyA8PSAnZicpCisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjIC0gJ2EnICsgMTApOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihjIC0gJ0EnICsgMTApOworfQorCit1bnNp
Z25lZCBjaGFyIEpTT05MZXhlcjo6Y29udmVydEhleChpbnQgYzEsIGludCBjMikKK3sKKyAgICBy
ZXR1cm4gKChjb252ZXJ0SGV4KGMxKSA8PCA0KSArIGNvbnZlcnRIZXgoYzIpKTsKK30KKworVUNo
YXIgSlNPTkxleGVyOjpjb252ZXJ0VW5pY29kZShpbnQgYzEsIGludCBjMiwgaW50IGMzLCBpbnQg
YzQpCit7CisgICAgdW5zaWduZWQgY2hhciBoaWdoQnl0ZSA9IChjb252ZXJ0SGV4KGMxKSA8PCA0
KSArIGNvbnZlcnRIZXgoYzIpOworICAgIHVuc2lnbmVkIGNoYXIgbG93Qnl0ZSA9IChjb252ZXJ0
SGV4KGMzKSA8PCA0KSArIGNvbnZlcnRIZXgoYzQpOworICAgIHJldHVybiAoaGlnaEJ5dGUgPDwg
OCB8IGxvd0J5dGUpOworfQorCitKU0M6OklkZW50aWZpZXIqIEpTT05MZXhlcjo6bWFrZUlkZW50
aWZpZXIoY29uc3QgVmVjdG9yPFVDaGFyPiYgYnVmZmVyKQoreworICAgIG1faWRlbnRpZmllcnMu
YXBwZW5kKEpTQzo6SWRlbnRpZmllcihtX2dsb2JhbERhdGEsIGJ1ZmZlci5kYXRhKCksIGJ1ZmZl
ci5zaXplKCkpKTsKKyAgICByZXR1cm4gJm1faWRlbnRpZmllcnMubGFzdCgpOworfQorCit9Cklu
ZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNPTkxleGVyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2
YVNjcmlwdENvcmUvcGFyc2VyL0pTT05MZXhlci5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlw
dENvcmUvcGFyc2VyL0pTT05MZXhlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDkzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBV
VEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVU
RVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKgorICovCisjaWZuZGVmIEpTT05MZXhlcl9oCisjZGVmaW5lIEpTT05MZXhlcl9oCisKKyNp
bmNsdWRlICJJZGVudGlmaWVyLmgiCisjaW5jbHVkZSAiU2VnbWVudGVkVmVjdG9yLmgiCisjaW5j
bHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvdW5pY29kZS9Vbmljb2RlLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisgICAgY2xhc3MgSlNP
TkxleGVyIDogTm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNPTkxleGVyKCk7
CisgICAgICAgIH5KU09OTGV4ZXIoKSB7fTsKKworICAgICAgICB2b2lkIGNsZWFyKCk7CisgICAg
ICAgIHZvaWQgc2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJik7CisgICAgICAgIGludCBsZXgodm9p
ZCogbHZhbHAsIHZvaWQqIGxsb2NwKTsKKworICAgICAgICBpbnQgbGluZU5vKCkgY29uc3QgeyBy
ZXR1cm4gbV9saW5lOyB9CisgICAgICAgIGludCBjb2x1bW5ObygpIGNvbnN0IHsgcmV0dXJuIG1f
Y29sdW1uOyB9CisKKyAgICAgICAgdm9pZCBzZXRHbG9iYWxEYXRhKEpTR2xvYmFsRGF0YSAqZ2xv
YmFsRGF0YSkgeyBtX2dsb2JhbERhdGEgPSBnbG9iYWxEYXRhOyB9CisgICAgICAgIGJvb2wgc2F3
RXJyb3IoKSBjb25zdCB7IHJldHVybiBtX2Vycm9yOyB9CisgICAgcHJpdmF0ZToKKyAgICAgICAg
VmVjdG9yPFVDaGFyPiBtX3VuaWNvZGVCdWZmZXI7CisgICAgICAgIFZlY3RvcjxjaGFyPiBtX2Fz
Y2lpQnVmZmVyOworCisgICAgICAgIHVuc2lnbmVkIGludCBtX3Bvc2l0aW9uOworICAgICAgICBj
b25zdCBVQ2hhciAqbV9jb2RlOworICAgICAgICB1bnNpZ25lZCBpbnQgbV9sZW5ndGg7CisgICAg
ICAgIGNvbnN0IFNvdXJjZUNvZGUqIG1fc291cmNlOworCisgICAgICAgIGludCBtX2N1cnJlbnQ7
CisgICAgICAgIGludCBtX25leHQxOworICAgICAgICBpbnQgbV9uZXh0MjsKKyAgICAgICAgaW50
IG1fbmV4dDM7CisgICAgICAgIGludCBtX25leHQ0OworCisgICAgICAgIGludCBtX2NvbHVtbjsK
KyAgICAgICAgaW50IG1fbGluZTsKKyAgICAgICAgCisgICAgICAgIEpTR2xvYmFsRGF0YSogbV9n
bG9iYWxEYXRhOworICAgICAgICBib29sIG1fZXJyb3I7CisKKyAgICAgICAgU2VnbWVudGVkVmVj
dG9yPEpTQzo6SWRlbnRpZmllciwgNjQ+IG1faWRlbnRpZmllcnM7CisgICAgICAgIAorICAgICAg
ICB2b2lkIGFkZEFzY2lpKGludCBjKTsKKyAgICAgICAgdm9pZCBhZGRVbmljb2RlKGludCBjaCk7
CisgICAgICAgIHZvaWQgYWRkVW5pY29kZShVQ2hhciBjaCk7CisKKyAgICAgICAgdW5zaWduZWQg
Y2hhciBjb252ZXJ0SGV4KGludCBjMSwgaW50IGMyKTsKKyAgICAgICAgdW5zaWduZWQgY2hhciBj
b252ZXJ0SGV4KGludCBjKTsKKyAgICAgICAgVUNoYXIgY29udmVydFVuaWNvZGUoaW50IGMxLCBp
bnQgYzIsIGludCBjMywgaW50IGM0KTsKKworICAgICAgICBpbnQgc2hpZnQoaW50KTsKKyAgICAg
ICAgaW50IHNraXBlV2hpdGVTcGFjZXMoKTsKKworICAgICAgICBpbnQgcmVhZFN0cmluZygpOwor
ICAgICAgICBpbnQgcmVhZE51bWJlcigpOworICAgICAgICB2b2lkIHJlYWREaWdpdHMoKTsKKwor
ICAgICAgICBKU0M6OklkZW50aWZpZXIqIG1ha2VJZGVudGlmaWVyKGNvbnN0IFZlY3RvcjxVQ2hh
cj4mIGJ1ZmZlcik7CisgICAgfTsKK30KKworI2VuZGlmCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9w
YXJzZXIvSlNPTlBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L0pTT05QYXJzZXIuY3BwCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pT
T05QYXJzZXIuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDg1IEBACisvKgorICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCisgKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElC
LiAgSWYgbm90LCB3cml0ZSB0bworICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9uLCBNQSAwMjEx
MC0xMzAxLCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U09OUGFyc2VyLmgiCisKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0Zi9W
ZWN0b3IuaD4KKyNpbmNsdWRlIDxtZW1vcnk+CisKK3VzaW5nIHN0ZDo6YXV0b19wdHI7CisKKyNp
Zm5kZWYgeXlwYXJzZQorZXh0ZXJuIGludCBqc29ueXlwYXJzZSh2b2lkKik7CisjZW5kaWYgCisK
KworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgSlNPTlBhcnNlcjo6cGFyc2UoSlNHbG9iYWxEYXRh
KiBnbG9iYWxEYXRhLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcqIGVyck1zZykKK3sKKyAgICBBU1NF
UlQoIW1fc291cmNlRWxlbWVudHMpOworCisgICAgaW50IGRlZmF1bHRFcnJMaW5lOworICAgIFVT
dHJpbmcgZGVmYXVsdEVyck1zZzsKKworICAgIGlmICghZXJyTGluZSkKKyAgICAgICAgZXJyTGlu
ZSA9ICZkZWZhdWx0RXJyTGluZTsKKyAgICBpZiAoIWVyck1zZykKKyAgICAgICAgZXJyTXNnID0g
JmRlZmF1bHRFcnJNc2c7CisKKyAgICAqZXJyTGluZSA9IC0xOworICAgICplcnJNc2cgPSAwOwor
CisgICAgbV9sZXhlci5zZXRDb2RlKCptX3NvdXJjZSk7CisgICAgbV9sZXhlci5zZXRHbG9iYWxE
YXRhKGdsb2JhbERhdGEpOworCisgICAgaW50IHBhcnNlRXJyb3IgPSBqc29ueXlwYXJzZShnbG9i
YWxEYXRhKTsKKyAgICBib29sIGxleEVycm9yID0gbV9sZXhlci5zYXdFcnJvcigpOworICAgIG1f
bGV4ZXIuY2xlYXIoKTsKKworICAgIFBhcnNlclJlZkNvdW50ZWQ6OmRlbGV0ZU5ld09iamVjdHMo
Z2xvYmFsRGF0YSk7CisKKyAgICBpZiAocGFyc2VFcnJvciB8fCBsZXhFcnJvcikgeworICAgICAg
ICAqZXJyTGluZSA9IG1fbGV4ZXIubGluZU5vKCk7CisgICAgICAgICplcnJNc2cgPSAiSlNPTi5w
YXJzZXIiOworICAgICAgICBtX3NvdXJjZUVsZW1lbnRzLmNsZWFyKCk7CisgICAgfQorfQorCit2
b2lkIEpTT05QYXJzZXI6OmRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqIHNvdXJjZUVs
ZW1lbnRzLCBDb2RlRmVhdHVyZXMgZmVhdHVyZXMsIGludCBsYXN0TGluZSwgaW50IG51bUNvbnN0
YW50cykKK3sKKyAgICBtX3NvdXJjZUVsZW1lbnRzID0gc291cmNlRWxlbWVudHM7CisgICAgbV9m
ZWF0dXJlcyA9IGZlYXR1cmVzOworICAgIG1fbGFzdExpbmUgPSBsYXN0TGluZTsKKyAgICBtX251
bUNvbnN0YW50cyA9IG51bUNvbnN0YW50czsKK30KKwordm9pZCBKU09OUGFyc2VyOjpsb2coY29u
c3QgY2hhciAqaW5mbykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLCBpbmZvKTsKKyAg
ICBmZmx1c2goc3RkZXJyKTsKK30KKworCit9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IEphdmFT
Y3JpcHRDb3JlL3BhcnNlci9KU09OUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENv
cmUvcGFyc2VyL0pTT05QYXJzZXIuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3Bh
cnNlci9KU09OUGFyc2VyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2lmbmRlZiBKU09OUGFyc2VyX2gKKyNkZWZp
bmUgSlNPTlBhcnNlcl9oCisKKyNpbmNsdWRlICJKU09OTGV4ZXIuaCIKKyNpbmNsdWRlICJTb3Vy
Y2VQcm92aWRlci5oIgorI2luY2x1ZGUgIk5vZGVzLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+
CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNz
IFVTdHJpbmc7CisgICAgY2xhc3MgSlNPTkxleGVyOworCisgICAgY2xhc3MgSlNPTlBhcnNlciA6
IE5vbmNvcHlhYmxlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJz
ZWROb2RlPiBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IHBhcnNlKEV4ZWNTdGF0ZSosIGNvbnN0IFNv
dXJjZUNvZGUmLCBpbnQqIGVyckxpbmUgPSAwLCBVU3RyaW5nKiBlcnJNc2cgPSAwKTsKKyAgICAg
ICAgdm9pZCBkaWRGaW5pc2hQYXJzaW5nKFNvdXJjZUVsZW1lbnRzKiwgQ29kZUZlYXR1cmVzIGZl
YXR1cmVzLCBpbnQgbGFzdExpbmUsIGludCBudW1Db25zdGFudHMpOworICAgICAgICB2b2lkIGxv
Zyhjb25zdCBjaGFyICppbmZvKTsKKyAgICAgICAgSlNPTkxleGVyJiBnZXRMZXhlcigpIHsgcmV0
dXJuIG1fbGV4ZXI7IH0KKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHBhcnNlKEpTR2xvYmFs
RGF0YSosIGludCogZXJyTGluZSwgVVN0cmluZyogZXJyTXNnKTsKKworICAgICAgICBjb25zdCBT
b3VyY2VDb2RlKiBtX3NvdXJjZTsKKyAgICAgICAgUmVmUHRyPFNvdXJjZUVsZW1lbnRzPiBtX3Nv
dXJjZUVsZW1lbnRzOworICAgICAgICBDb2RlRmVhdHVyZXMgbV9mZWF0dXJlczsKKyAgICAgICAg
aW50IG1fbGFzdExpbmU7CisgICAgICAgIGludCBtX251bUNvbnN0YW50czsKKyAgICAgICAgSlNP
TkxleGVyIG1fbGV4ZXI7CisgICAgfTsKKworICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2Rl
PiBQYXNzUmVmUHRyPFBhcnNlZE5vZGU+IEpTT05QYXJzZXI6OnBhcnNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBpbnQqIGVyckxpbmUsIFVTdHJpbmcqIGVyck1z
ZykKKyAgICB7CisgICAgICAgIG1fc291cmNlID0gJnNvdXJjZTsKKyAgICAgICAgcGFyc2UoJmV4
ZWMtPmdsb2JhbERhdGEoKSwgZXJyTGluZSwgZXJyTXNnKTsKKyAgICAgICAgUmVmUHRyPFBhcnNl
ZE5vZGU+IHJlc3VsdDsKKyAgICAgICAgaWYgKG1fc291cmNlRWxlbWVudHMpIHsKKyAgICAgICAg
ICAgIHJlc3VsdCA9IFBhcnNlZE5vZGU6OmNyZWF0ZSgmZXhlYy0+Z2xvYmFsRGF0YSgpLAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NvdXJjZUVsZW1lbnRzLmdl
dCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqbV9zb3VyY2UsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZmVhdHVyZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbnVtQ29uc3RhbnRzKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0
TG9jKG1fc291cmNlLT5maXJzdExpbmUoKSwgbV9sYXN0TGluZSk7CisgICAgICAgIH0KKworICAg
ICAgICBtX3NvdXJjZSA9IDA7CisgICAgICAgIG1fc291cmNlRWxlbWVudHMgPSAwOworCisgICAg
ICAgIHJldHVybiByZXN1bHQucmVsZWFzZSgpOworICAgIH0KK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSlNPTlBhcnNlcl9oCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
R2xvYmFsRGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0ds
b2JhbERhdGEuY3BwCShyZXZpc2lvbiA0MTg5MikKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxEYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1
ZGUgIkpTTm90QW5PYmplY3QuaCIKICNpbmNsdWRlICJKU1N0YXRpY1Njb3BlT2JqZWN0LmgiCiAj
aW5jbHVkZSAiUGFyc2VyLmgiCisjaW5jbHVkZSAiSlNPTlBhcnNlci5oIgogI2luY2x1ZGUgIkxl
eGVyLmgiCiAjaW5jbHVkZSAiTG9va3VwLmgiCiAjaW5jbHVkZSAiTm9kZXMuaCIKQEAgLTYwLDYg
KzYxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgYXJyYXlU
YWJsZTsKIGV4dGVybiBjb25zdCBIYXNoVGFibGUgZGF0ZVRhYmxlOworZXh0ZXJuIGNvbnN0IEhh
c2hUYWJsZSBqc29uVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIG1hdGhUYWJsZTsKIGV4
dGVybiBjb25zdCBIYXNoVGFibGUgbnVtYmVyVGFibGU7CiBleHRlcm4gY29uc3QgSGFzaFRhYmxl
IHJlZ0V4cFRhYmxlOwpAQCAtMTA0LDYgKzEwNiw3IEBAIEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxE
YXRhKGJvb2wgaXNTaGFyZWQKICAgICAsIGNsaWVudERhdGEoMCkKICAgICAsIGFycmF5VGFibGUo
bmV3IEhhc2hUYWJsZShKU0M6OmFycmF5VGFibGUpKQogICAgICwgZGF0ZVRhYmxlKG5ldyBIYXNo
VGFibGUoSlNDOjpkYXRlVGFibGUpKQorICAgICwganNvblRhYmxlKG5ldyBIYXNoVGFibGUoSlND
Ojpqc29uVGFibGUpKQogICAgICwgbWF0aFRhYmxlKG5ldyBIYXNoVGFibGUoSlNDOjptYXRoVGFi
bGUpKQogICAgICwgbnVtYmVyVGFibGUobmV3IEhhc2hUYWJsZShKU0M6Om51bWJlclRhYmxlKSkK
ICAgICAsIHJlZ0V4cFRhYmxlKG5ldyBIYXNoVGFibGUoSlNDOjpyZWdFeHBUYWJsZSkpCkBAIC0x
MjcsNiArMTMwLDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEoYm9vbCBpc1NoYXJlZAog
ICAgICwgZW1wdHlMaXN0KG5ldyBBcmdMaXN0KQogICAgICwgbGV4ZXIobmV3IExleGVyKHRoaXMp
KQogICAgICwgcGFyc2VyKG5ldyBQYXJzZXIpCisgICAgLCBqc29uUGFyc2VyKG5ldyBKU09OUGFy
c2VyKQogICAgICwgaW50ZXJwcmV0ZXIobmV3IEludGVycHJldGVyKQogI2lmIEVOQUJMRShKSVQp
CiAgICAgLCBqaXRTdHVicyh0aGlzKQpAQCAtMTU4LDYgKzE2Miw3IEBAIEpTR2xvYmFsRGF0YTo6
fkpTR2xvYmFsRGF0YSgpCiAgICAgYXJyYXlUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBkYXRl
VGFibGUtPmRlbGV0ZVRhYmxlKCk7CiAgICAgbWF0aFRhYmxlLT5kZWxldGVUYWJsZSgpOworICAg
IGpzb25UYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBudW1iZXJUYWJsZS0+ZGVsZXRlVGFibGUo
KTsKICAgICByZWdFeHBUYWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICByZWdFeHBDb25zdHJ1Y3Rv
clRhYmxlLT5kZWxldGVUYWJsZSgpOwpAQCAtMTY1LDExICsxNzAsMTMgQEAgSlNHbG9iYWxEYXRh
Ojp+SlNHbG9iYWxEYXRhKCkKICAgICBkZWxldGUgYXJyYXlUYWJsZTsKICAgICBkZWxldGUgZGF0
ZVRhYmxlOwogICAgIGRlbGV0ZSBtYXRoVGFibGU7CisgICAgZGVsZXRlIGpzb25UYWJsZTsKICAg
ICBkZWxldGUgbnVtYmVyVGFibGU7CiAgICAgZGVsZXRlIHJlZ0V4cFRhYmxlOwogICAgIGRlbGV0
ZSByZWdFeHBDb25zdHJ1Y3RvclRhYmxlOwogICAgIGRlbGV0ZSBzdHJpbmdUYWJsZTsKIAorICAg
IGRlbGV0ZSBqc29uUGFyc2VyOwogICAgIGRlbGV0ZSBwYXJzZXI7CiAgICAgZGVsZXRlIGxleGVy
OwogCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDQx
ODkyKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBj
b3B5KQpAQCAtNTQsNiArNTQsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBKU09iamVj
dDsKICAgICBjbGFzcyBMZXhlcjsKICAgICBjbGFzcyBQYXJzZXI7CisgICAgY2xhc3MgSlNPTlBh
cnNlcjsKICAgICBjbGFzcyBQYXJzZXJSZWZDb3VudGVkOwogICAgIGNsYXNzIFNjb3BlTm9kZTsK
ICAgICBjbGFzcyBTdHJ1Y3R1cmU7CkBAIC04NCw2ICs4NSw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIGNvbnN0IEhhc2hUYWJsZSogYXJyYXlUYWJsZTsKICAgICAgICAgY29uc3QgSGFz
aFRhYmxlKiBkYXRlVGFibGU7CisgICAgICAgIGNvbnN0IEhhc2hUYWJsZSoganNvblRhYmxlOwog
ICAgICAgICBjb25zdCBIYXNoVGFibGUqIG1hdGhUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRh
YmxlKiBudW1iZXJUYWJsZTsKICAgICAgICAgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBUYWJsZTsK
QEAgLTExNiw2ICsxMTgsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICBMZXhlciogbGV4
ZXI7CiAgICAgICAgIFBhcnNlciogcGFyc2VyOworICAgICAgICBKU09OUGFyc2VyICpqc29uUGFy
c2VyOwogICAgICAgICBJbnRlcnByZXRlciogaW50ZXJwcmV0ZXI7CiAjaWYgRU5BQkxFKEpJVCkK
ICAgICAgICAgSklUU3R1YnMgaml0U3R1YnM7CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gNDE4OTIpCisrKyBKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBA
QAogI2luY2x1ZGUgIlN0cmluZ0NvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU3RyaW5nUHJvdG90
eXBlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKKyNpbmNsdWRlICJKU09OT2JqZWN0LmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC0zMDgsNiArMzA5LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVj
dDo6cmVzZXQoSlNWYWx1ZVB0ciBwcgogCiAgICAgLy8gU2V0IGdsb2JhbCB2YWx1ZXMuCiAgICAg
R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKKyAgICAgICAgR2xvYmFsUHJv
cGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIkpTT04iKSwgbmV3IChleGVjKSBKU09OT2JqZWN0
KEpTT05PYmplY3Q6OmNyZWF0ZVN0cnVjdHVyZShkKCktPm9iamVjdFByb3RvdHlwZSkpLCBEb250
RW51bSB8IERvbnREZWxldGUpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8oSWRlbnRpZmll
cihleGVjLCAiTWF0aCIpLCBuZXcgKGV4ZWMpIE1hdGhPYmplY3QoZXhlYywgTWF0aE9iamVjdDo6
Y3JlYXRlU3RydWN0dXJlKGQoKS0+b2JqZWN0UHJvdG90eXBlKSksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJOYU4i
KSwganNOYU4oZXhlYyksIERvbnRFbnVtIHwgRG9udERlbGV0ZSksCiAgICAgICAgIEdsb2JhbFBy
b3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJJbmZpbml0eSIpLCBqc051bWJlcihleGVjLCBJ
bmYpLCBEb250RW51bSB8IERvbnREZWxldGUpLApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU09OT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
T05PYmplY3QuY3BwCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09O
T2JqZWN0LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwzMTkgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJKU09OT2JqZWN0LmgiCisjaW5jbHVkZSAiSlNPTlBhcnNlci5oIgorI2luY2x1ZGUg
Ik5vZGVzLmgiCisKKyNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJPcGVy
YXRpb25zLmgiCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworCituYW1lc3BhY2UgSlNDIHsKKworQVNT
RVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChKU09OT2JqZWN0KTsKKworc3RhdGljIEpTVmFsdWVQdHIg
SlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZVB0ciwgY29u
c3QgQXJnTGlzdCYpOworc3RhdGljIEpTVmFsdWVQdHIgSlNPTlByb3RvRnVuY1N0cmluZ2lmeShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWVQdHIsIGNvbnN0IEFyZ0xpc3QmKTsKKworfQor
CisjaW5jbHVkZSAiSlNPTk9iamVjdC5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBKU09OT2JqZWN0IC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK2NvbnN0IENsYXNzSW5mbyBKU09OT2JqZWN0OjppbmZvID0geyAi
SlNPTiIsIDAsIDAsIEV4ZWNTdGF0ZTo6anNvblRhYmxlIH07CisKKy8qIFNvdXJjZSBmb3IgSlNP
Tk9iamVjdC5sdXQuaAorQGJlZ2luIGpzb25UYWJsZQorICBwYXJzZSAgICAgICAgIEpTT05Qcm90
b0Z1bmNQYXJzZSAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHN0cmluZ2lmeSAg
ICAgSlNPTlByb3RvRnVuY1N0cmluZ2lmeSAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEKK0Bl
bmQKKyovCisKKy8vIEVDTUEgMTUuOAorCitib29sIEpTT05PYmplY3Q6OmdldE93blByb3BlcnR5
U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgUHJv
cGVydHlTbG90ICZzbG90KQoreworICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBFeGVjU3Rh
dGU6Ompzb25UYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKKworICAgIGlm
ICghZW50cnkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90KGV4
ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisKKyAgICBBU1NFUlQoZW50cnktPmF0dHJpYnV0ZXMo
KSAmIEZ1bmN0aW9uKTsKKyAgICBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChleGVjLCBlbnRyeSwg
dGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGVscGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBKU1ZhbHVlUHRyIGNhbGxSZXZpdmVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZVB0ciB0aGlzT2JqZWN0LCBKU1ZhbHVlUHRyIGpzVmFsdWUsIEpTVmFsdWVQ
dHIganNLZXksIEpTRnVuY3Rpb24gKnJldml2ZXIpCit7CisgICAgaWYgKCFqc1ZhbHVlLmlzTnVs
bCgpICYmIGpzVmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAvLyBPYmplY3QgLyBBcnJheQor
ICAgICAgICBKU09iamVjdCAqb2JqID0ganNWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICAgICAg
UHJvcGVydHlOYW1lQXJyYXkgbmFtZXMoZXhlYyk7CisgICAgICAgIAorICAgICAgICAvLyBHZXQg
bGlzdCBvZiBwcm9wZXJ0eSBuYW1lcy4KKyAgICAgICAgb2JqLT5nZXRQcm9wZXJ0eU5hbWVzKGV4
ZWMsIG5hbWVzKTsKKworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3Ig
Y3VycmVudCA9IG5hbWVzLmJlZ2luKCk7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25z
dF9pdGVyYXRvciBlbmQgICAgID0gbmFtZXMuZW5kKCk7CisKKyAgICAgICAgZm9yICg7IGN1cnJl
bnQgIT0gZW5kOyBjdXJyZW50KyspIHsKKyAgICAgICAgICAgIEpTVmFsdWVQdHIgbmFtZSA9IGpz
T3duZWRTdHJpbmcoZXhlYywgY3VycmVudC0+dXN0cmluZygpKTsKKyAgICAgICAgICAgIEpTVmFs
dWVQdHIgdmFsdWU9IG9iai0+Z2V0KGV4ZWMsICpjdXJyZW50KTsKKworCisgICAgICAgICAgICBK
U1ZhbHVlUHRyIHJlc3VsdCA9IGNhbGxSZXZpdmVyKGV4ZWMsIHRoaXNPYmplY3QsIHZhbHVlLCBu
YW1lLCByZXZpdmVyKTsKKworICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgICAgIHJldHVybiBleGVjLT5leGNlcHRpb24oKTsKKworICAgICAgICAgICAg
aWYgKHJlc3VsdC5pc1VuZGVmaW5lZCgpKXsKKyAgICAgICAgICAgICAgICBvYmotPmRlbGV0ZVBy
b3BlcnR5KGV4ZWMsICpjdXJyZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CisgICAgICAgICAgICAgICAgb2JqLT5wdXQoZXhl
YywgKCpjdXJyZW50KSwgcmVzdWx0LCBzbG90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
ICAgIH0KKworCisgICAgQXJnTGlzdCBhcmdzOworCisgICAgYXJncy5hcHBlbmQoanNLZXkpOwor
ICAgIGFyZ3MuYXBwZW5kKGpzVmFsdWUpOworCisgICAgLy8gQ2FsbCByZXZpdmVyCisgICAgcmV0
dXJuIHJldml2ZXItPmNhbGwoZXhlYywgdGhpc09iamVjdCwgYXJncyk7Cit9CisKK3N0YXRpYyB2
b2lkIGJ1aWxkU3RyaW5nKFVTdHJpbmcgdmFsdWUsIFVTdHJpbmcmIHJlc3VsdCkKK3sKKyAgICBp
bnQgbGVuZ3RoICA9IHZhbHVlLnNpemUoKTsKKyAgICBjb25zdCBVQ2hhciAqZGF0YSA9IHZhbHVl
LmRhdGEoKTsKKyAgICBpbnQgaW5kZXg7CisKKyAgICByZXN1bHQuYXBwZW5kKCdcIicpOworICAg
IGZvciAoaW5kZXggPSAwOyBpbmRleCA8IGxlbmd0aDsgaW5kZXgrKykgeworICAgICAgICBzd2l0
Y2goZGF0YVtpbmRleF0peworICAgICAgICBjYXNlICdcdCc6CisgICAgICAgICAgICByZXN1bHQu
YXBwZW5kKCJcXHQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdccic6Cisg
ICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXHIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlICdcbic6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXG4iKTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcZic6CisgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKCJcXGYiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdcYic6CisgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKCJcXGIiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlICdcIic6CisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKCJcXFwiIik7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXFwnOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVu
ZCgiXFxcXCIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50PihkYXRhW2luZGV4XSkgPj0gMHgxZikKKyAgICAgICAg
ICAgICAgICByZXN1bHQuYXBwZW5kKGRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgICAgICAvKiBDb252ZXJ0IGFueSBub24gcHJpbnRhYmxlIGNoYXJhY3RlciB0
bworICAgICAgICAgICAgICAgICAqIFx1WFhYWCBmb3JtYXQuCisgICAgICAgICAgICAgICAgICov
IAorICAgICAgICAgICAgICAgIGNoYXIgb2N0WzhdOworICAgICAgICAgICAgICAgIHNwcmludGYo
b2N0LCAiXFx1JTA0eCIsIGRhdGFbaW5kZXhdKTsKKyAgICAgICAgICAgICAgICByZXN1bHQuYXBw
ZW5kKG9jdCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmVzdWx0LmFwcGVuZCgnXCInKTsKK30KKworc3RhdGljIEpTVmFsdWVQdHIg
dG9KU09OKEV4ZWNTdGF0ZSAqZXhlYywgSlNWYWx1ZVB0ciBqc0tleSwgSlNWYWx1ZVB0ciBqc1Zh
bHVlKQoreworICAgIElkZW50aWZpZXIgbmFtZShleGVjLCAidG9KU09OIik7CisKKyAgICBpZigh
anNWYWx1ZS5pc09iamVjdCgpIHx8ICFhc09iamVjdChqc1ZhbHVlKS0+aGFzUHJvcGVydHkoZXhl
YywgbmFtZSkpCisgICAgeworICAgICAgICAvKiBEbyBub3RoaW5nIGlmIAorICAgICAgICAgKiAx
LiBUaGUgdmFsdWUgaXMgbm90IE9iamVjdC4KKyAgICAgICAgICogMi4gdmFsdWUgaXMgdW5kZWZp
bmVkIG9yIE51bGwuCisgICAgICAgICAqIDMuIE9iamVjdCBkb2Vzbid0IGhhdmUgdG9KU09OIG1l
dGhvZC4KKyAgICAgICAgICovCisgICAgICAgIHJldHVybiBqc1ZhbHVlOworICAgIH0KKyAgICAK
KyAgICAvLyBHZXQgcmVmZXJlbmNlIHRvIHRvSlNPTiBtZXRob2QuCisgICAgSlNWYWx1ZVB0ciBq
c3RvSlNPTiA9IGFzT2JqZWN0KGpzVmFsdWUpLT5nZXQoZXhlYywgbmFtZSk7CisKKyAgICAvLyBN
YWtlIHN1cmUgdGhpcyBhIGZ1bmN0aW9uLgorICAgIGlmICghanN0b0pTT04uaXNPYmplY3QoKSB8
fCAhYXNPYmplY3QoanN0b0pTT04pLT5pbmhlcml0cygmSlNGdW5jdGlvbjo6aW5mbykpCisgICAg
ICAgIHJldHVybiBqc1ZhbHVlOworCisgICAgLy8gTm93IGNhbGwgdGhlIG13dGhvZCBhbmQgcmV0
dXJuIHJlc3VsdC4KKyAgICBBcmdMaXN0IGFyZ3M7CisgICAgYXJncy5hcHBlbmQoanNLZXkpOwor
ICAgIHJldHVybiBhc0Z1bmN0aW9uKGpzdG9KU09OKS0+Y2FsbChleGVjLCBqc1ZhbHVlLCBhcmdz
KTsKK30KKworc3RhdGljIGJvb2wgc3RyaW5naWZ5KEV4ZWNTdGF0ZSAqZXhlYywgSlNWYWx1ZVB0
ciBqc0tleSwgSlNWYWx1ZVB0ciBqc1ZhbHVlLCBVU3RyaW5nJiBidWZmZXIsIGJvb2wgaXNBcnJh
eU9iamVjdCA9IGZhbHNlLCBib29sIGlzRmlyc3RWYWx1ZSA9IHRydWUpCit7CisgICAgLyogU2Vl
IGlmIGl0J3MgYW5kIG9iamVjdCBpdCB0aGUgb2JqZWN0IGhhcworICAgICAqIHRvSlNPTiBtZXRo
b2QuCisgICAgICovCisgICAganNWYWx1ZSA9IHRvSlNPTihleGVjLCBqc0tleSwganNWYWx1ZSk7
CisKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIGlmIChqc1ZhbHVlLmlzVW5kZWZpbmVkKCkgJiYgaXNBcnJheU9iamVjdCkgeworICAg
ICAgICAvLyBGb3IgYXJyYXkgcmVwbGFjZSB1bmRlZmluZWQgd2l0aCBudWxsCisgICAgICAgIGpz
VmFsdWUgPSBqc051bGwoKTsKKyAgICB9IGVsc2UgaWYgKGpzVmFsdWUuaXNVbmRlZmluZWQoKSB8
fCAoanNWYWx1ZS5pc09iamVjdCgpICYmIGFzT2JqZWN0KGpzVmFsdWUpLT5pbmhlcml0cygmSlNG
dW5jdGlvbjo6aW5mbykpKSB7CisgICAgICAgIC8qIElnbm9yZSB0aGUgdmFsdWUgaWYgcmVzdWx0
IHdhcyBmdW5jdGlvbiBvciAKKyAgICAgICAgICogdW5kZWZpbmVkLgorICAgICAgICAgKi8KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKCFpc0ZpcnN0VmFsdWUpIHsKKyAg
ICAgICAgLy8gVGhpcyBpcyBub3QgdGhlIGZpcnN0IHZhbHVlLgorICAgICAgICBidWZmZXIuYXBw
ZW5kKCcsJyk7CisgICAgfQorCisgICAgaWYgKCFqc0tleS5pc1VuZGVmaW5lZCgpICYmICFpc0Fy
cmF5T2JqZWN0KSB7CisgICAgICAgIC8qIFdlIG5lZWQgdG8gaW5jbHVkZSB0aGUgcHJvcHJ0eSBu
YW1lIGZvciAKKyAgICAgICAgICogb2JqZWN0cy4KKyAgICAgICAgICovCisgICAgICAgIGJ1aWxk
U3RyaW5nKGpzS2V5LmdldFN0cmluZygpLCBidWZmZXIpOworICAgICAgICBidWZmZXIuYXBwZW5k
KCI6Iik7ICAKKyAgICB9CisgICAgCisgICAgaWYgKGpzVmFsdWUuaXNOdWxsKCkpIHsKKyAgICAg
ICAgYnVmZmVyLmFwcGVuZCgibnVsbCIpOworICAgIH0gZWxzZSBpZiAoanNWYWx1ZS5pc09iamVj
dCgpKXsKKyAgICAgICAgLy8gV2FsayB0aHJvdyB0aHcgdGhlIG9iamVjdCBwcm9wcmllcworICAg
ICAgICBib29sIGlzQXJyYXkgPSBpc0pTQXJyYXkoJmV4ZWMtPmdsb2JhbERhdGEoKSwganNWYWx1
ZSk7CisgICAgICAgIGJvb2wgaXNGaXJzdCA9IHRydWU7CisKKyAgICAgICAgYnVmZmVyLmFwcGVu
ZChpc0FycmF5PyAnWyc6J3snKTsKKworICAgICAgICBKU09iamVjdCAqb2JqID0ganNWYWx1ZS50
b09iamVjdChleGVjKTsKKyAgICAgICAgUHJvcGVydHlOYW1lQXJyYXkgbmFtZXMoZXhlYyk7CisK
KyAgICAgICAgLy8gR2V0IGxpc3Qgb2YgcHJvcGVydHkgbmFtZXMuCisgICAgICAgIG9iai0+Z2V0
UHJvcGVydHlOYW1lcyhleGVjLCBuYW1lcyk7CisKKyAgICAgICAgUHJvcGVydHlOYW1lQXJyYXk6
OmNvbnN0X2l0ZXJhdG9yIGN1cnJlbnQgPSBuYW1lcy5iZWdpbigpOworICAgICAgICBQcm9wZXJ0
eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgZW5kICAgICA9IG5hbWVzLmVuZCgpOworCisgICAg
ICAgIGZvciAoOyBjdXJyZW50ICE9IGVuZDsgY3VycmVudCsrKSB7CisgICAgICAgICAgICBKU1Zh
bHVlUHRyIG5hbWUgPSBqc093bmVkU3RyaW5nKGV4ZWMsIGN1cnJlbnQtPnVzdHJpbmcoKSk7Cisg
ICAgICAgICAgICBKU1ZhbHVlUHRyIHZhbHVlPSBvYmotPmdldChleGVjLCAqY3VycmVudCk7CisK
KyAgICAgICAgICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpIHx8ICh2YWx1ZS5pc09iamVjdCgp
ICYmIGFzT2JqZWN0KHZhbHVlKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgaWYgKCFzdHJpbmdpZnkoZXhlYywg
bmFtZSwgdmFsdWUsIGJ1ZmZlciwgaXNBcnJheSwgaXNGaXJzdCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoaXNGaXJzdCkKKyAgICAgICAgICAgICAg
ICBpc0ZpcnN0ID0gZmFsc2U7CisgICAgICAgIH0KKworICAgICAgICBidWZmZXIuYXBwZW5kKGlz
QXJyYXk/ICddJzonfScpOyAKKyAgICB9IGVsc2UgaWYgKGpzVmFsdWUuaXNCb29sZWFuKCkpIHsK
KyAgICAgICAgYnVmZmVyLmFwcGVuZChqc1ZhbHVlLnRvU3RyaW5nKGV4ZWMpKTsgCisgICAgfSBl
bHNlIGlmIChqc1ZhbHVlLmlzU3RyaW5nKCkpIHsKKyAgICAgICAgYnVpbGRTdHJpbmcoanNWYWx1
ZS5nZXRTdHJpbmcoKSwgYnVmZmVyKTsKKyAgICB9IGVsc2UgaWYgKGpzVmFsdWUuaXNOdW1iZXIo
KSkgeworICAgICAgICBkb3VibGUgdmFsID0ganNWYWx1ZS50b051bWJlcihleGVjKTsKKyAgICAg
ICAgaWYgKHZhbCAhPSB2YWwpeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZCgibnVsbCIpOwor
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYnVmZmVyLmFwcGVuZChqc1ZhbHVlLnRvU3Ry
aW5nKGV4ZWMpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisv
LyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK0pTVmFsdWVQdHIgSlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNT
dGF0ZSogZXhlYywgSlNPYmplY3QgKnRoaXNPYmplY3QsIEpTVmFsdWVQdHIgLCBjb25zdCBBcmdM
aXN0JiBhcmdzKQoreworCWlmIChhcmdzLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHRocm93
RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiTm8gaW5wdXQgdG8gcGFyc2UiKTsKKworICAgIEpT
VmFsdWVQdHIgb2JqID0gYXJncy5hdChleGVjLCAwKTsKKyAgICBpZiAoIW9iai5pc1N0cmluZygp
KQorICAgICAgICByZXR1cm4gb2JqOworCisgICAgVVN0cmluZyBzID0gb2JqLnRvU3RyaW5nKGV4
ZWMpOworCisgICAgaW50IGVyckxpbmU7CisgICAgVVN0cmluZyBlcnJNc2c7CisKKyAgICBTb3Vy
Y2VDb2RlIHNvdXJjZSA9IG1ha2VTb3VyY2Uocyk7CisgICAgUmVmUHRyPEV2YWxOb2RlPiBldmFs
Tm9kZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5qc29uUGFyc2VyLT5wYXJzZTxFdmFsTm9kZT4oZXhl
Yywgc291cmNlLCAmZXJyTGluZSwgJmVyck1zZyk7CisKKyAgICBpZiAoIWV2YWxOb2RlKQorICAg
ICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJvciwgZXJyTXNnLCBlcnJMaW5l
LCBzb3VyY2UucHJvdmlkZXIoKS0+YXNJRCgpLCBOVUxMKTsKKworICAgIEpTVmFsdWVQdHIgcmVz
dWx0ID0gZXhlYy0+aW50ZXJwcmV0ZXIoKS0+ZXhlY3V0ZShldmFsTm9kZS5nZXQoKSwgZXhlYywg
TlVMTCwgZXhlYy0+c2NvcGVDaGFpbigpLCBleGVjLT5leGNlcHRpb25TbG90KCkpOworCisgICAg
SlNWYWx1ZVB0ciByZXZpdmVyID0gYXJncy5hdChleGVjLCAxKTsKKyAgICBpZiAoIXJlc3VsdC5p
c051bGwoKSAKKyAgICAgICAgJiYgIXJldml2ZXIuaXNVbmRlZmluZWRPck51bGwoKSAKKyAgICAg
ICAgJiYgYXNPYmplY3QocmV2aXZlciktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjppbmZvKSkKKyAg
ICAgICAgcmVzdWx0ID0gY2FsbFJldml2ZXIoZXhlYywgdGhpc09iamVjdCwgcmVzdWx0LCBqc1Vu
ZGVmaW5lZCgpLCBhc0Z1bmN0aW9uKHJldml2ZXIpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKKworSlNWYWx1ZVB0ciBKU09OUHJvdG9GdW5jU3RyaW5naWZ5KEV4ZWNTdGF0ZSogZXhlYywg
SlNPYmplY3QqLCBKU1ZhbHVlUHRyLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworCWlmIChhcmdz
LmlzRW1wdHkoKSkKKwkJcmV0dXJuIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCAiTm8g
aW5wdXQgdG8gc3RyaW5naWZ5Iik7CisKKyAgICBKU1ZhbHVlUHRyIG9iamVjdCA9IGFyZ3MuYXQo
ZXhlYywgMCk7CisgICAgaWYgKG9iamVjdC5pc1VuZGVmaW5lZE9yTnVsbCgpKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIFVTdHJpbmcgYnVmZmVyOworICAgIHN0cmluZ2lm
eShleGVjLCBqc1VuZGVmaW5lZCgpLCBvYmplY3QsIGJ1ZmZlcik7CisgICAgCisgICAgcmV0dXJu
IChleGVjLT5oYWRFeGNlcHRpb24oKSk/IGV4ZWMtPmV4Y2VwdGlvbigpIDoganNTdHJpbmcoZXhl
YywgYnVmZmVyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBKYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTT05PYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTT05PYmplY3QuaAkocmV2aXNpb24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNPTk9iamVjdC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICoKKyAqLworCisjaWZuZGVmIEpTT05PYmplY3RfaAorI2RlZmlu
ZSBKU09OT2JqZWN0X2gKKworI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mg
eworCisgICAgY2xhc3MgSlNPTk9iamVjdCA6IHB1YmxpYyBKU09iamVjdCB7CisgICAgcHVibGlj
OgorICAgICAgICBKU09OT2JqZWN0KFBhc3NSZWZQdHI8U3RydWN0dXJlPiBzdHJ1Y3R1cmUpCisJ
CQk6SlNPYmplY3Qoc3RydWN0dXJlKQorCQl7CisJCX0KKworICAgICAgICB2aXJ0dWFsIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEV4ZWNTdGF0ZSosIGNvbnN0IElkZW50aWZpZXImLCBQcm9wZXJ0
eVNsb3QmKTsKKworICAgICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkg
Y29uc3QgeyByZXR1cm4gJmluZm87IH0KKyAgICAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5mbyBp
bmZvOworCisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPFN0cnVjdHVyZT4gY3JlYXRlU3RydWN0
dXJlKEpTVmFsdWVQdHIgcHJvdG90eXBlKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
U3RydWN0dXJlOjpjcmVhdGUocHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7CisgICAg
ICAgIH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpTT05PYmpl
Y3RfaApJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNDE4OTQpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2NCBAQAorMjAwOS0wMy0yMSAgSHVzYW0gU2VudXNz
aSAgPGh1c2FtQHNlbnVzc2kuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIEFkZCBKU09OIE9iamVjdAorCisgICAgICAgICogZmFzdC9qcy9KU09O
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vYmFja2VuZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9iYWNrZW5kLmh0bWw6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvanMvSlNPTi9wYXJzZXItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2pzL0pTT04vcGFyc2VyLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9y
ZXNvdXJjZXM6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDEu
anNvbjogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTAuanNv
bjogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTEuanNvbjog
QWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTIuanNvbjogQWRk
ZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTMuanNvbjogQWRkZWQu
CisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTQuanNvbjogQWRkZWQuCisg
ICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTUuanNvbjogQWRkZWQuCisgICAg
ICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTYuanNvbjogQWRkZWQuCisgICAgICAg
ICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTcuanNvbjogQWRkZWQuCisgICAgICAgICog
ZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTkuanNvbjogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L0pTT04vcmVzb3VyY2VzL2ZhaWwyMC5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pT
T04vcmVzb3VyY2VzL2ZhaWwyMS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04v
cmVzb3VyY2VzL2ZhaWwyMi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVz
b3VyY2VzL2ZhaWwyMy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWwyNC5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2Vz
L2ZhaWwyNS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2Zh
aWwyNi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwy
Ny5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyOC5q
c29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyOS5qc29u
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwzLmpzb246IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMwLmpzb246IEFkZGVk
LgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMxLmpzb246IEFkZGVkLgor
ICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMyLmpzb246IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMzLmpzb246IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDM0Lmpzb246IEFkZGVkLgorICAgICAgICAq
IGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDQuanNvbjogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9KU09OL3Jlc291cmNlcy9mYWlsNS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L0pTT04vcmVzb3VyY2VzL2ZhaWw2Lmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNP
Ti9yZXNvdXJjZXMvZmFpbDcuanNvbjogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jl
c291cmNlcy9mYWlsOC5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWw5Lmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMv
bW9kaWZpZWQtanNvbjIuanM6IEFkZGVkLgorICAgICAgICAoLkpTT04yKToKKyAgICAgICAgKC5K
U09OMi5EYXRlLnByb3RvdHlwZS50b0pTT04pOgorICAgICAgICAoLkpTT04yLlN0cmluZy5wcm90
b3R5cGUudG9KU09OLk51bWJlci5wcm90b3R5cGUudG9KU09OLkJvb2xlYW4ucHJvdG90eXBlLnRv
SlNPTik6CisgICAgICAgICguSlNPTjIucXVvdGUpOgorICAgICAgICAoLkpTT04yLnN0cik6Cisg
ICAgICAgICguSlNPTjIucmV0dXJuLnN0cmluZ2lmeSk6CisgICAgICAgICguSlNPTjIucmV0dXJu
LnBhcnNlLndhbGspOgorICAgICAgICAoLkpTT04yLnJldHVybi5wYXJzZS5pZik6CisgICAgICAg
ICguSlNPTjIucmV0dXJuLnBhcnNlKToKKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2Vz
L3Bhc3MxLmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvcGFz
czMuanNvbjogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy93ZWJraXQu
cGFzczEuanNvbjogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3N0cmluZ2lmeS1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9zdHJpbmdpZnkuaHRtbDog
QWRkZWQuCisKIDIwMDktMDMtMjAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBBbGV4ZXkgUHJvc2t1cnlha292LgpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9KU09OL2JhY2tlbmQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvSlNPTi9iYWNrZW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9iYWNrZW5kLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSw3IEBACistLS0gVGVzdCBiZWdpbnMuIC0tLQorcGFzczEuanNvbjogUEFT
UzogU3RyaW5ncyBtYXRjaC4KK3Bhc3MzLmpzb246IFBBU1M6IFN0cmluZ3MgbWF0Y2guCit3ZWJr
aXQucGFzczEuanNvbjogUEFTUzogU3RyaW5ncyBtYXRjaC4KKy0tLSBUZXN0IGVuZHMuIC0tLQor
CisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9iYWNrZW5kLmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL2JhY2tlbmQuaHRtbAkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9iYWNrZW5kLmh0bWwJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNTIgQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL21v
ZGlmaWVkLWpzb24yLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHByZT4KKzxzY3Jp
cHQ+CitmdW5jdGlvbiB0cnlCYWNrZW5kKHRleHQpIHsKKyAgdmFyIG91cl9vYmplY3QgPSBKU09O
LnBhcnNlKHRleHQpOworICB2YXIgZG91Z3Nfb2JqZWN0ID0gSlNPTjIucGFyc2UodGV4dCk7CisK
KyAgdmFyIG91cl9zdHJpbmcgPSBKU09OMi5zdHJpbmdpZnkob3VyX29iamVjdCk7CisgIHZhciBk
b3Vnc19zdHJpbmcgPSBKU09OMi5zdHJpbmdpZnkoZG91Z3Nfb2JqZWN0KTsKKworICBpZiAob3Vy
X3N0cmluZyA9PSBkb3Vnc19zdHJpbmcpIHsKKyAgICBkb2N1bWVudC53cml0ZWxuKCdQQVNTOiBT
dHJpbmdzIG1hdGNoLicpOworICB9IGVsc2UgeworICAgIGRvY3VtZW50LndyaXRlbG4oJ0ZBSUw6
IFN0cmluZ3MgZG8gbm90IG1hdGNoLicpOworICAgIGRvY3VtZW50LndyaXRlbG4oJy0tLSBCZWdp
biBvdXJfc3RyaW5nLiAtLS0nKTsKKyAgICBkb2N1bWVudC53cml0ZWxuKG91cl9zdHJpbmcpOwor
ICAgIGRvY3VtZW50LndyaXRlbG4oJy0tLSBFbmQgb3VyX3N0cmluZy4gLS0tJyk7CisgICAgZG9j
dW1lbnQud3JpdGVsbignLS0tLSBCZWdpbiBkb3Vnc19zdHJpbmcuIC0tLScpOworICAgIGRvY3Vt
ZW50LndyaXRlbG4oZG91Z3Nfc3RyaW5nKTsKKyAgICBkb2N1bWVudC53cml0ZWxuKCctLS0gRW5k
IGRvdWdzX3N0cmluZy4gLS0tJyk7CisgIH0KK30KKworZnVuY3Rpb24gdGVzdChuYW1lKSB7Cisg
IHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgeGhyLm9wZW4oJ0dFVCcsICdyZXNv
dXJjZXMvJyArIG5hbWUsIGZhbHNlKTsKKyAgeGhyLnNlbmQobnVsbCk7CisgIGRvY3VtZW50Lndy
aXRlKG5hbWUgKyAnOiAnKQorICB0cnlCYWNrZW5kKHhoci5yZXNwb25zZVRleHQpOworfQorCitp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisKK2RvY3VtZW50LndyaXRlbG4oJy0tLSBUZXN0IGJlZ2lucy4gLS0tJyk7
CisKK2lmICghd2luZG93LkpTT04pCisgIGRvY3VtZW50LndyaXRlbG4oJ0ZBSUw6IE5vIHdpbmRv
dy5KU09OIG9iamVjdC4nKTsKKwordGVzdCgncGFzczEuanNvbicpOwordGVzdCgncGFzczMuanNv
bicpOwordGVzdCgnd2Via2l0LnBhc3MxLmpzb24nKTsKKworZG9jdW1lbnQud3JpdGVsbignLS0t
IFRlc3QgZW5kcy4gLS0tJyk7Cis8L3NjcmlwdD4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3BhcnNlci1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3BhcnNlci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcGFyc2VyLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw0MCBAQAorLS0tIFRlc3QgYmVnaW5zLiAtLS0KK2Zh
aWwxLmpzb246IE5vLgorZmFpbDIuanNvbjogTm8uCitmYWlsMy5qc29uOiBOby4KK2ZhaWw0Lmpz
b246IE5vLgorZmFpbDUuanNvbjogTm8uCitmYWlsNi5qc29uOiBOby4KK2ZhaWw3Lmpzb246IE5v
LgorZmFpbDguanNvbjogTm8uCitmYWlsOS5qc29uOiBOby4KK2ZhaWwxMC5qc29uOiBOby4KK2Zh
aWwxMS5qc29uOiBOby4KK2ZhaWwxMi5qc29uOiBOby4KK2ZhaWwxMy5qc29uOiBOby4KK2ZhaWwx
NC5qc29uOiBOby4KK2ZhaWwxNS5qc29uOiBOby4KK2ZhaWwxNi5qc29uOiBOby4KK2ZhaWwxNy5q
c29uOiBOby4KK2ZhaWwxOS5qc29uOiBOby4KK2ZhaWwyMC5qc29uOiBOby4KK2ZhaWwyMS5qc29u
OiBOby4KK2ZhaWwyMi5qc29uOiBOby4KK2ZhaWwyMy5qc29uOiBOby4KK2ZhaWwyNC5qc29uOiBO
by4KK2ZhaWwyNS5qc29uOiBOby4KK2ZhaWwyNi5qc29uOiBOby4KK2ZhaWwyNy5qc29uOiBOby4K
K2ZhaWwyOC5qc29uOiBOby4KK2ZhaWwyOS5qc29uOiBOby4KK2ZhaWwzMC5qc29uOiBOby4KK2Zh
aWwzMS5qc29uOiBOby4KK2ZhaWwzMi5qc29uOiBOby4KK2ZhaWwzMy5qc29uOiBOby4KK2ZhaWwz
NC5qc29uOiBOby4KK3Bhc3MxLmpzb246IFllcy4KK3Bhc3MzLmpzb246IFllcy4KK3dlYmtpdC5w
YXNzMS5qc29uOiBZZXMuCistLS0gVGVzdCBlbmRzLiAtLS0KKworCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL0pTT04vcGFyc2VyLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9qcy9KU09OL3BhcnNlci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9KU09OL3BhcnNlci5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcyIEBACis8aHRtbD4K
Kzxib2R5PgorPHByZT4KKzxzY3JpcHQ+CitmdW5jdGlvbiB0cnlQYXJzZSh0ZXh0KSB7CisgIHRy
eSB7CisgICAgSlNPTi5wYXJzZSh0ZXh0KTsKKyAgICByZXR1cm4gIlllcy4iOworICB9IGNhdGNo
IChleCkgeworICAgIHJldHVybiAiTm8uIjsKKyAgfQorfQorCitmdW5jdGlvbiB0ZXN0KG5hbWUp
IHsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICB4aHIub3BlbignR0VUJywg
J3Jlc291cmNlcy8nICsgbmFtZSwgZmFsc2UpOworICB4aHIuc2VuZChudWxsKTsKKyAgZG9jdW1l
bnQud3JpdGVsbihuYW1lICsgJzogJyArIHRyeVBhcnNlKHhoci5yZXNwb25zZVRleHQpKTsKK30K
KworaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgbGF5b3V0VGVzdENvbnRyb2xs
ZXIuZHVtcEFzVGV4dCgpOworCitkb2N1bWVudC53cml0ZWxuKCctLS0gVGVzdCBiZWdpbnMuIC0t
LScpOworCitpZiAoIXdpbmRvdy5KU09OKQorICBkb2N1bWVudC53cml0ZWxuKCdGQUlMOiBObyB3
aW5kb3cuSlNPTiBvYmplY3QuJyk7CisKK3Rlc3QoJ2ZhaWwxLmpzb24nKTsKK3Rlc3QoJ2ZhaWwy
Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwzLmpzb24nKTsKK3Rlc3QoJ2ZhaWw0Lmpzb24nKTsKK3Rlc3Qo
J2ZhaWw1Lmpzb24nKTsKK3Rlc3QoJ2ZhaWw2Lmpzb24nKTsKK3Rlc3QoJ2ZhaWw3Lmpzb24nKTsK
K3Rlc3QoJ2ZhaWw4Lmpzb24nKTsKK3Rlc3QoJ2ZhaWw5Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwxMC5q
c29uJyk7Cit0ZXN0KCdmYWlsMTEuanNvbicpOwordGVzdCgnZmFpbDEyLmpzb24nKTsKK3Rlc3Qo
J2ZhaWwxMy5qc29uJyk7Cit0ZXN0KCdmYWlsMTQuanNvbicpOwordGVzdCgnZmFpbDE1Lmpzb24n
KTsKK3Rlc3QoJ2ZhaWwxNi5qc29uJyk7Cit0ZXN0KCdmYWlsMTcuanNvbicpOwordGVzdCgnZmFp
bDE5Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwyMC5qc29uJyk7Cit0ZXN0KCdmYWlsMjEuanNvbicpOwor
dGVzdCgnZmFpbDIyLmpzb24nKTsKK3Rlc3QoJ2ZhaWwyMy5qc29uJyk7Cit0ZXN0KCdmYWlsMjQu
anNvbicpOwordGVzdCgnZmFpbDI1Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwyNi5qc29uJyk7Cit0ZXN0
KCdmYWlsMjcuanNvbicpOwordGVzdCgnZmFpbDI4Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwyOS5qc29u
Jyk7Cit0ZXN0KCdmYWlsMzAuanNvbicpOwordGVzdCgnZmFpbDMxLmpzb24nKTsKK3Rlc3QoJ2Zh
aWwzMi5qc29uJyk7Cit0ZXN0KCdmYWlsMzMuanNvbicpOwordGVzdCgnZmFpbDM0Lmpzb24nKTsK
K3Rlc3QoJ3Bhc3MxLmpzb24nKTsKK3Rlc3QoJ3Bhc3MzLmpzb24nKTsKKy8vIEZpcmVmb3ggZmFp
bHMgdG8gcGFyc2UgdGhpcyB0ZXN0IGNhc2UsIGJ1dCB3ZSBkb24ndCBoYXZlIHRoZSBzYW1lIGRl
cHRoCisvLyBsaW1pdCBhcyB0aGV5IGRvLgordGVzdCgnd2Via2l0LnBhc3MxLmpzb24nKTsKKwor
ZG9jdW1lbnQud3JpdGVsbignLS0tIFRlc3QgZW5kcy4gLS0tJyk7Cis8L3NjcmlwdD4KKzwvcHJl
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3N0cmlu
Z2lmeS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09O
L3N0cmluZ2lmeS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2pzL0pTT04vc3RyaW5naWZ5LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3
IEBACistLS0gVGVzdCBiZWdpbnMuIC0tLQorcGFzczEuanNvbjogUEFTUzogT2JqZWN0cyBtYXRj
aC4KK3Bhc3MzLmpzb246IFBBU1M6IE9iamVjdHMgbWF0Y2guCit3ZWJraXQucGFzczEuanNvbjog
UEFTUzogT2JqZWN0cyBtYXRjaC4KKy0tLSBUZXN0IGVuZHMuIC0tLQorCisKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvSlNPTi9zdHJpbmdpZnkuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL0pTT04vc3RyaW5naWZ5Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2pzL0pTT04vc3RyaW5naWZ5Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEs
NjggQEAKKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL21vZGlmaWVkLWpz
b24yLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHByZT4KKzxzY3JpcHQ+CitmdW5j
dGlvbiBpc0VxdWFsKG8xLCBvMikKK3sKKyAgICBpZiAodHlwZW9mIG8xICE9ICdvYmplY3QnIHx8
IHR5cGVvZiBvMiAhPSAnb2JqZWN0JykKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAKKworICAgIGZv
ciAoa2V5IGluIG8xKSB7CisgICAgICAgIGlmIChvMltrZXldID09PSB1bmRlZmluZWQpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGVsc2UgaWYgKHR5cGVvZiBvMVtrZXldICE9
IHR5cGVvZiBvMltrZXldKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNl
IGlmICh0eXBlb2YgbzFba2V5XSA9PT0gJ29iamVjdCcpeworICAgICAgICAgICAgaWYoaXNFcXVh
bChvMVtrZXldLCBvMltrZXldKSA9PSBmYWxzZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH1lbHNlIGlmIChvMVtrZXldICE9IG8yW2tleV0pCisgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZm9yIChrZXkgaW4gbzIpIHsKKyAgICAgICAgaWYg
KG8xW2tleV0gPT09IHVuZGVmaW5lZCkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9
CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gdHJ5QmFja2VuZCh0ZXh0KSB7Cisg
IHZhciBvYmogPSBKU09OMi5wYXJzZSh0ZXh0KTsKKyAgdmFyIG91cl9vYmogPSBKU09OMi5wYXJz
ZShKU09OLnN0cmluZ2lmeShvYmopKTsKKworICBpZiAoaXNFcXVhbChvdXJfb2JqLCBvYmopKSB7
CisgICAgZG9jdW1lbnQud3JpdGVsbignUEFTUzogT2JqZWN0cyBtYXRjaC4nKTsKKyAgfSBlbHNl
IHsKKyAgICBkb2N1bWVudC53cml0ZWxuKCdGQUlMOiBPYmplY3RzIGRvIG5vdCBtYXRjaC4nKTsK
KyAgfQorfQorCitmdW5jdGlvbiB0ZXN0KG5hbWUpIHsKKyAgdmFyIHhociA9IG5ldyBYTUxIdHRw
UmVxdWVzdCgpOworICB4aHIub3BlbignR0VUJywgJ3Jlc291cmNlcy8nICsgbmFtZSwgZmFsc2Up
OworICB4aHIuc2VuZChudWxsKTsKKyAgZG9jdW1lbnQud3JpdGUobmFtZSArICc6ICcpCisgIHRy
eUJhY2tlbmQoeGhyLnJlc3BvbnNlVGV4dCk7Cit9CisKK2lmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpCisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworZG9jdW1l
bnQud3JpdGVsbignLS0tIFRlc3QgYmVnaW5zLiAtLS0nKTsKKworaWYgKCF3aW5kb3cuSlNPTikK
KyAgZG9jdW1lbnQud3JpdGVsbignRkFJTDogTm8gd2luZG93LkpTT04gb2JqZWN0LicpOworCit0
ZXN0KCdwYXNzMS5qc29uJyk7Cit0ZXN0KCdwYXNzMy5qc29uJyk7Cit0ZXN0KCd3ZWJraXQucGFz
czEuanNvbicpOworCitkb2N1bWVudC53cml0ZWxuKCctLS0gVGVzdCBlbmRzLiAtLS0nKTsKKzwv
c2NyaXB0PgorPC9wcmU+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0
L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMS5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMS5qc29uCShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxIEBACisiQSBKU09OIHBheWxvYWQgc2hvdWxkIGJlIGFuIG9iamVjdCBvciBhcnJheSwg
bm90IGEgc3RyaW5nLiIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRU
ZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyLmpzb24KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMi5qc29uCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMi5qc29uCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxIEBACitbIlVuY2xvc2VkIGFycmF5IgpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMu
anNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2Zh
aWwzLmpzb24JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWwzLmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK3t1bnF1b3RlZF9rZXk6
ICJrZXlzIG11c3QgYmUgcXVvdGVkIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWw0Lmpzb24KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsNC5qc29uCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsNC5qc29u
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitbImV4dHJhIGNvbW1hIixdClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNl
cy9mYWlsNS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNv
dXJjZXMvZmFpbDUuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNP
Ti9yZXNvdXJjZXMvZmFpbDUuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyJkb3Vi
bGUgZXh0cmEgY29tbWEiLCxdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsNi5qc29uCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDYuanNvbgkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDYuanNvbgkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyAgICwgIjwtLSBtaXNzaW5nIHZhbHVlIl0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVz
b3VyY2VzL2ZhaWw3Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09O
L3Jlc291cmNlcy9mYWlsNy5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9KU09OL3Jlc291cmNlcy9mYWlsNy5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitb
IkNvbW1hIGFmdGVyIHRoZSBjbG9zZSJdLApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDguanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWw4Lmpzb24JKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWw4Lmpz
b24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1siRXh0cmEgY2xvc2UiXV0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWw5Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jl
c291cmNlcy9mYWlsOS5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9K
U09OL3Jlc291cmNlcy9mYWlsOS5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACit7IkV4
dHJhIGNvbW1hIjogdHJ1ZSx9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTAuanNvbgo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxMC5qc29uCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTAuanNvbgko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAoreyJFeHRyYSB2YWx1ZSBhZnRlciBjbG9zZSI6IHRy
dWV9ICJtaXNwbGFjZWQgcXVvdGVkIHZhbHVlIgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDExLmpzb24KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTEuanNv
bgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFp
bDExLmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK3siSWxsZWdhbCBleHByZXNzaW9u
IjogMSArIDJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTIuanNvbgo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxMi5qc29uCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTIuanNvbgkocmV2aXNpb24g
MCkKQEAgLTAsMCArMSBAQAoreyJJbGxlZ2FsIGludm9jYXRpb24iOiBhbGVydCgpfQpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNv
dXJjZXMvZmFpbDEzLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09O
L3Jlc291cmNlcy9mYWlsMTMuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3Qv
anMvSlNPTi9yZXNvdXJjZXMvZmFpbDEzLmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAK
K3siTnVtYmVycyBjYW5ub3QgaGF2ZSBsZWFkaW5nIHplcm9lcyI6IDAxM30KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2Vz
L2ZhaWwxNC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNv
dXJjZXMvZmFpbDE0Lmpzb24JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pT
T04vcmVzb3VyY2VzL2ZhaWwxNC5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACit7Ik51
bWJlcnMgY2Fubm90IGJlIGhleCI6IDB4MTR9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJ
bmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTUuanNvbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxNS5qc29u
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWls
MTUuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyJJbGxlZ2FsIGJhY2tzbGFzaCBl
c2NhcGU6IFx4MTUiXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE2Lmpzb24KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTYuanNvbgkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE2Lmpzb24JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEgQEAKK1tcbmFrZWRdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmls
ZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTcuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxNy5q
c29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9m
YWlsMTcuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyJJbGxlZ2FsIGJhY2tzbGFz
aCBlc2NhcGU6IFwwMTciXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE5Lmpzb24KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTkuanNvbgkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE5Lmpzb24JKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK3siTWlzc2luZyBjb2xvbiIgbnVsbH0KXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWwyMC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9y
ZXNvdXJjZXMvZmFpbDIwLmpzb24JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L0pTT04vcmVzb3VyY2VzL2ZhaWwyMC5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACit7
IkRvdWJsZSBjb2xvbiI6OiBudWxsfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDIxLmpzb24KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjEuanNvbgkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDIxLmpz
b24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK3siQ29tbWEgaW5zdGVhZCBvZiBjb2xvbiIs
IG51bGx9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjIuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyMi5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjIuanNvbgkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSBAQAorWyJDb2xvbiBpbnN0ZWFkIG9mIGNvbW1hIjogZmFsc2VdClwgTm8gbmV3
bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291
cmNlcy9mYWlsMjMuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04v
cmVzb3VyY2VzL2ZhaWwyMy5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9q
cy9KU09OL3Jlc291cmNlcy9mYWlsMjMuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAor
WyJCYWQgdmFsdWUiLCB0cnV0aF0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyNC5qc29uCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI0Lmpzb24JKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyNC5qc29u
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitbJ3NpbmdsZSBxdW90ZSddClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNl
cy9mYWlsMjUuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVz
b3VyY2VzL2ZhaWwyNS5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9K
U09OL3Jlc291cmNlcy9mYWlsMjUuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyIJ
dGFiCWNoYXJhY3RlcglpbglzdHJpbmcJIl0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyNi5qc29uCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI2Lmpzb24J
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwy
Ni5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitbInRhYlwgICBjaGFyYWN0ZXJcICAg
aW5cICBzdHJpbmdcICAiXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI3Lmpzb24KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjcuanNvbgkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI3Lmpzb24JKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorWyJsaW5lCiticmVhayJdClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9m
YWlsMjguanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWwyOC5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09O
L3Jlc291cmNlcy9mYWlsMjguanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyIEBACitbImxp
bmVcCiticmVhayJdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVz
dHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjkuanNvbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyOS5qc29uCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjkuanNvbgkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSBAQAorWzBlXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMwLmpzb24KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMzAuanNvbgko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMw
Lmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1swZStdClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWls
MzEuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2Vz
L2ZhaWwzMS5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jl
c291cmNlcy9mYWlsMzEuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWzBlKy0xXQpc
IE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNP
Ti9yZXNvdXJjZXMvZmFpbDMyLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9q
cy9KU09OL3Jlc291cmNlcy9mYWlsMzIuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMyLmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEgQEAKK3siQ29tbWEgaW5zdGVhZCBpZiBjbG9zaW5nIGJyYWNlIjogdHJ1ZSwKXCBObyBuZXds
aW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWwzMy5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9y
ZXNvdXJjZXMvZmFpbDMzLmpzb24JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pz
L0pTT04vcmVzb3VyY2VzL2ZhaWwzMy5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitb
Im1pc21hdGNoIn0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwzNC5qc29uCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDM0Lmpzb24JKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwzNC5qc29uCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxIEBACiswewpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvbW9kaWZpZWQtanNvbjIuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9tb2RpZmllZC1q
c29uMi5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJj
ZXMvbW9kaWZpZWQtanNvbjIuanMJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNDc1IEBACisvKgor
ICAgIGh0dHA6Ly93d3cuSlNPTi5vcmcvanNvbjIuanMKKyAgICAyMDA4LTA3LTA5CisKKyAgICBQ
dWJsaWMgRG9tYWluLgorCisgICAgTk8gV0FSUkFOVFkgRVhQUkVTU0VEIE9SIElNUExJRUQuIFVT
RSBBVCBZT1VSIE9XTiBSSVNLLgorCisgICAgU2VlIGh0dHA6Ly93d3cuSlNPTi5vcmcvanMuaHRt
bAorCisgICAgVGhpcyBmaWxlIGNyZWF0ZXMgYSBnbG9iYWwgSlNPTiBvYmplY3QgY29udGFpbmlu
ZyB0d28gbWV0aG9kczogc3RyaW5naWZ5CisgICAgYW5kIHBhcnNlLgorCisgICAgICAgIEpTT04u
c3RyaW5naWZ5KHZhbHVlLCByZXBsYWNlciwgc3BhY2UpCisgICAgICAgICAgICB2YWx1ZSAgICAg
ICBhbnkgSmF2YVNjcmlwdCB2YWx1ZSwgdXN1YWxseSBhbiBvYmplY3Qgb3IgYXJyYXkuCisKKyAg
ICAgICAgICAgIHJlcGxhY2VyICAgIGFuIG9wdGlvbmFsIHBhcmFtZXRlciB0aGF0IGRldGVybWlu
ZXMgaG93IG9iamVjdAorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVzIGFyZSBzdHJpbmdp
ZmllZCBmb3Igb2JqZWN0cyB3aXRob3V0IGEgdG9KU09OCisgICAgICAgICAgICAgICAgICAgICAg
ICBtZXRob2QuIEl0IGNhbiBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LgorCisgICAgICAgICAg
ICBzcGFjZSAgICAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBzcGVjaWZpZXMgdGhlIGlu
ZGVudGF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICBvZiBuZXN0ZWQgc3RydWN0dXJlcy4g
SWYgaXQgaXMgb21pdHRlZCwgdGhlIHRleHQgd2lsbAorICAgICAgICAgICAgICAgICAgICAgICAg
YmUgcGFja2VkIHdpdGhvdXQgZXh0cmEgd2hpdGVzcGFjZS4gSWYgaXQgaXMgYSBudW1iZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgICBpdCB3aWxsIHNwZWNpZnkgdGhlIG51bWJlciBvZiBzcGFj
ZXMgdG8gaW5kZW50IGF0IGVhY2gKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsLiBJZiBp
dCBpcyBhIHN0cmluZyAoc3VjaCBhcyAnXHQnIG9yICcmbmJzcDsnKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGl0IGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXJzIHVzZWQgdG8gaW5kZW50IGF0IGVh
Y2ggbGV2ZWwuCisKKyAgICAgICAgICAgIFRoaXMgbWV0aG9kIHByb2R1Y2VzIGEgSlNPTiB0ZXh0
IGZyb20gYSBKYXZhU2NyaXB0IHZhbHVlLgorCisgICAgICAgICAgICBXaGVuIGFuIG9iamVjdCB2
YWx1ZSBpcyBmb3VuZCwgaWYgdGhlIG9iamVjdCBjb250YWlucyBhIHRvSlNPTgorICAgICAgICAg
ICAgbWV0aG9kLCBpdHMgdG9KU09OIG1ldGhvZCB3aWxsIGJlIGNhbGxlZCBhbmQgdGhlIHJlc3Vs
dCB3aWxsIGJlCisgICAgICAgICAgICBzdHJpbmdpZmllZC4gQSB0b0pTT04gbWV0aG9kIGRvZXMg
bm90IHNlcmlhbGl6ZTogaXQgcmV0dXJucyB0aGUKKyAgICAgICAgICAgIHZhbHVlIHJlcHJlc2Vu
dGVkIGJ5IHRoZSBuYW1lL3ZhbHVlIHBhaXIgdGhhdCBzaG91bGQgYmUgc2VyaWFsaXplZCwKKyAg
ICAgICAgICAgIG9yIHVuZGVmaW5lZCBpZiBub3RoaW5nIHNob3VsZCBiZSBzZXJpYWxpemVkLiBU
aGUgdG9KU09OIG1ldGhvZAorICAgICAgICAgICAgd2lsbCBiZSBwYXNzZWQgdGhlIGtleSBhc3Nv
Y2lhdGVkIHdpdGggdGhlIHZhbHVlLCBhbmQgdGhpcyB3aWxsIGJlCisgICAgICAgICAgICBib3Vu
ZCB0byB0aGUgb2JqZWN0IGhvbGRpbmcgdGhlIGtleS4KKworICAgICAgICAgICAgRm9yIGV4YW1w
bGUsIHRoaXMgd291bGQgc2VyaWFsaXplIERhdGVzIGFzIElTTyBzdHJpbmdzLgorCisgICAgICAg
ICAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gKGtleSkgeworICAgICAg
ICAgICAgICAgICAgICBmdW5jdGlvbiBmKG4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v
IEZvcm1hdCBpbnRlZ2VycyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuCisgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gbiA8IDEwID8gJzAnICsgbiA6IG47CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVVENGdWxsWWVh
cigpICAgKyAnLScgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNb250
aCgpICsgMSkgKyAnLScgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENE
YXRlKCkpICAgICAgKyAnVCcgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRV
VENIb3VycygpKSAgICAgKyAnOicgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhpcy5n
ZXRVVENNaW51dGVzKCkpICAgKyAnOicgKworICAgICAgICAgICAgICAgICAgICAgICAgIGYodGhp
cy5nZXRVVENTZWNvbmRzKCkpICAgKyAnWic7CisgICAgICAgICAgICAgICAgfTsKKworICAgICAg
ICAgICAgWW91IGNhbiBwcm92aWRlIGFuIG9wdGlvbmFsIHJlcGxhY2VyIG1ldGhvZC4gSXQgd2ls
bCBiZSBwYXNzZWQgdGhlCisgICAgICAgICAgICBrZXkgYW5kIHZhbHVlIG9mIGVhY2ggbWVtYmVy
LCB3aXRoIHRoaXMgYm91bmQgdG8gdGhlIGNvbnRhaW5pbmcKKyAgICAgICAgICAgIG9iamVjdC4g
VGhlIHZhbHVlIHRoYXQgaXMgcmV0dXJuZWQgZnJvbSB5b3VyIG1ldGhvZCB3aWxsIGJlCisgICAg
ICAgICAgICBzZXJpYWxpemVkLiBJZiB5b3VyIG1ldGhvZCByZXR1cm5zIHVuZGVmaW5lZCwgdGhl
biB0aGUgbWVtYmVyIHdpbGwKKyAgICAgICAgICAgIGJlIGV4Y2x1ZGVkIGZyb20gdGhlIHNlcmlh
bGl6YXRpb24uCisKKyAgICAgICAgICAgIElmIHRoZSByZXBsYWNlciBwYXJhbWV0ZXIgaXMgYW4g
YXJyYXksIHRoZW4gaXQgd2lsbCBiZSB1c2VkIHRvCisgICAgICAgICAgICBzZWxlY3QgdGhlIG1l
bWJlcnMgdG8gYmUgc2VyaWFsaXplZC4gSXQgZmlsdGVycyB0aGUgcmVzdWx0cyBzdWNoCisgICAg
ICAgICAgICB0aGF0IG9ubHkgbWVtYmVycyB3aXRoIGtleXMgbGlzdGVkIGluIHRoZSByZXBsYWNl
ciBhcnJheSBhcmUKKyAgICAgICAgICAgIHN0cmluZ2lmaWVkLgorCisgICAgICAgICAgICBWYWx1
ZXMgdGhhdCBkbyBub3QgaGF2ZSBKU09OIHJlcHJlc2VudGF0aW9ucywgc3VjaCBhcyB1bmRlZmlu
ZWQgb3IKKyAgICAgICAgICAgIGZ1bmN0aW9ucywgd2lsbCBub3QgYmUgc2VyaWFsaXplZC4gU3Vj
aCB2YWx1ZXMgaW4gb2JqZWN0cyB3aWxsIGJlCisgICAgICAgICAgICBkcm9wcGVkOyBpbiBhcnJh
eXMgdGhleSB3aWxsIGJlIHJlcGxhY2VkIHdpdGggbnVsbC4gWW91IGNhbiB1c2UKKyAgICAgICAg
ICAgIGEgcmVwbGFjZXIgZnVuY3Rpb24gdG8gcmVwbGFjZSB0aG9zZSB3aXRoIEpTT04gdmFsdWVz
LgorICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkodW5kZWZpbmVkKSByZXR1cm5zIHVuZGVmaW5l
ZC4KKworICAgICAgICAgICAgVGhlIG9wdGlvbmFsIHNwYWNlIHBhcmFtZXRlciBwcm9kdWNlcyBh
IHN0cmluZ2lmaWNhdGlvbiBvZiB0aGUKKyAgICAgICAgICAgIHZhbHVlIHRoYXQgaXMgZmlsbGVk
IHdpdGggbGluZSBicmVha3MgYW5kIGluZGVudGF0aW9uIHRvIG1ha2UgaXQKKyAgICAgICAgICAg
IGVhc2llciB0byByZWFkLgorCisgICAgICAgICAgICBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlz
IGEgbm9uLWVtcHR5IHN0cmluZywgdGhlbiB0aGF0IHN0cmluZyB3aWxsCisgICAgICAgICAgICBi
ZSB1c2VkIGZvciBpbmRlbnRhdGlvbi4gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG51bWJl
ciwgdGhlbgorICAgICAgICAgICAgdGhlIGluZGVudGF0aW9uIHdpbGwgYmUgdGhhdCBtYW55IHNw
YWNlcy4KKworICAgICAgICAgICAgRXhhbXBsZToKKworICAgICAgICAgICAgdGV4dCA9IEpTT04u
c3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0pOworICAgICAgICAgICAgLy8gdGV4
dCBpcyAnWyJlIix7InBsdXJpYnVzIjoidW51bSJ9XScKKworCisgICAgICAgICAgICB0ZXh0ID0g
SlNPTi5zdHJpbmdpZnkoWydlJywge3BsdXJpYnVzOiAndW51bSd9XSwgbnVsbCwgJ1x0Jyk7Cisg
ICAgICAgICAgICAvLyB0ZXh0IGlzICdbXG5cdCJlIixcblx0e1xuXHRcdCJwbHVyaWJ1cyI6ICJ1
bnVtIlxuXHR9XG5dJworCisgICAgICAgICAgICB0ZXh0ID0gSlNPTi5zdHJpbmdpZnkoW25ldyBE
YXRlKCldLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAgICAgICAgICAgICAgIHJldHVybiB0
aGlzW2tleV0gaW5zdGFuY2VvZiBEYXRlID8KKyAgICAgICAgICAgICAgICAgICAgJ0RhdGUoJyAr
IHRoaXNba2V5XSArICcpJyA6IHZhbHVlOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICAv
LyB0ZXh0IGlzICdbIkRhdGUoLS0tY3VycmVudCB0aW1lLS0tKSJdJworCisKKyAgICAgICAgSlNP
Ti5wYXJzZSh0ZXh0LCByZXZpdmVyKQorICAgICAgICAgICAgVGhpcyBtZXRob2QgcGFyc2VzIGEg
SlNPTiB0ZXh0IHRvIHByb2R1Y2UgYW4gb2JqZWN0IG9yIGFycmF5LgorICAgICAgICAgICAgSXQg
Y2FuIHRocm93IGEgU3ludGF4RXJyb3IgZXhjZXB0aW9uLgorCisgICAgICAgICAgICBUaGUgb3B0
aW9uYWwgcmV2aXZlciBwYXJhbWV0ZXIgaXMgYSBmdW5jdGlvbiB0aGF0IGNhbiBmaWx0ZXIgYW5k
CisgICAgICAgICAgICB0cmFuc2Zvcm0gdGhlIHJlc3VsdHMuIEl0IHJlY2VpdmVzIGVhY2ggb2Yg
dGhlIGtleXMgYW5kIHZhbHVlcywKKyAgICAgICAgICAgIGFuZCBpdHMgcmV0dXJuIHZhbHVlIGlz
IHVzZWQgaW5zdGVhZCBvZiB0aGUgb3JpZ2luYWwgdmFsdWUuCisgICAgICAgICAgICBJZiBpdCBy
ZXR1cm5zIHdoYXQgaXQgcmVjZWl2ZWQsIHRoZW4gdGhlIHN0cnVjdHVyZSBpcyBub3QgbW9kaWZp
ZWQuCisgICAgICAgICAgICBJZiBpdCByZXR1cm5zIHVuZGVmaW5lZCB0aGVuIHRoZSBtZW1iZXIg
aXMgZGVsZXRlZC4KKworICAgICAgICAgICAgRXhhbXBsZToKKworICAgICAgICAgICAgLy8gUGFy
c2UgdGhlIHRleHQuIFZhbHVlcyB0aGF0IGxvb2sgbGlrZSBJU08gZGF0ZSBzdHJpbmdzIHdpbGwK
KyAgICAgICAgICAgIC8vIGJlIGNvbnZlcnRlZCB0byBEYXRlIG9iamVjdHMuCisKKyAgICAgICAg
ICAgIG15RGF0YSA9IEpTT04ucGFyc2UodGV4dCwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAg
ICAgICAgICAgICAgICB2YXIgYTsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09
PSAnc3RyaW5nJykgeworICAgICAgICAgICAgICAgICAgICBhID0KKy9eKFxkezR9KS0oXGR7Mn0p
LShcZHsyfSlUKFxkezJ9KTooXGR7Mn0pOihcZHsyfSg/OlwuXGQqKT8pWiQvLmV4ZWModmFsdWUp
OworICAgICAgICAgICAgICAgICAgICBpZiAoYSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIG5ldyBEYXRlKERhdGUuVVRDKCthWzFdLCArYVsyXSAtIDEsICthWzNdLCArYVs0XSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICArYVs1XSwgK2FbNl0pKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gdmFs
dWU7CisgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgbXlEYXRhID0gSlNPTi5wYXJzZSgn
WyJEYXRlKDA5LzA5LzIwMDEpIl0nLCBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHZhciBkOworICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJp
bmcnICYmCisgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS5zbGljZSgwLCA1KSA9PT0gJ0Rh
dGUoJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoLTEpID09PSAnKScp
IHsKKyAgICAgICAgICAgICAgICAgICAgZCA9IG5ldyBEYXRlKHZhbHVlLnNsaWNlKDUsIC0xKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gdmFsdWU7CisgICAgICAgICAgICB9KTsKKworCisgICAgVGhpcyBp
cyBhIHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbi4gWW91IGFyZSBmcmVlIHRvIGNvcHksIG1vZGlm
eSwgb3IKKyAgICByZWRpc3RyaWJ1dGUuCisKKyAgICBUaGlzIGNvZGUgc2hvdWxkIGJlIG1pbmlm
aWVkIGJlZm9yZSBkZXBsb3ltZW50LgorICAgIFNlZSBodHRwOi8vamF2YXNjcmlwdC5jcm9ja2Zv
cmQuY29tL2pzbWluLmh0bWwKKworICAgIFVTRSBZT1VSIE9XTiBDT1BZLiBJVCBJUyBFWFRSRU1F
TFkgVU5XSVNFIFRPIExPQUQgQ09ERSBGUk9NIFNFUlZFUlMgWU9VIERPCisgICAgTk9UIENPTlRS
T0wuCisqLworCisvKmpzbGludCBldmlsOiB0cnVlICovCisKKy8qZ2xvYmFsIEpTT04gKi8KKwor
LyptZW1iZXJzICIiLCAiXGIiLCAiXHQiLCAiXG4iLCAiXGYiLCAiXHIiLCAiXCIiLCBKU09OLCAi
XFwiLCBjYWxsLAorICAgIGNoYXJDb2RlQXQsIGdldFVUQ0RhdGUsIGdldFVUQ0Z1bGxZZWFyLCBn
ZXRVVENIb3VycywgZ2V0VVRDTWludXRlcywKKyAgICBnZXRVVENNb250aCwgZ2V0VVRDU2Vjb25k
cywgaGFzT3duUHJvcGVydHksIGpvaW4sIGxhc3RJbmRleCwgbGVuZ3RoLAorICAgIHBhcnNlLCBw
cm9wZXJ0eUlzRW51bWVyYWJsZSwgcHJvdG90eXBlLCBwdXNoLCByZXBsYWNlLCBzbGljZSwgc3Ry
aW5naWZ5LAorICAgIHRlc3QsIHRvSlNPTiwgdG9TdHJpbmcKKyovCisKK2lmICghdGhpcy5KU09O
MikgeworCisvLyBDcmVhdGUgYSBKU09OIG9iamVjdCBvbmx5IGlmIG9uZSBkb2VzIG5vdCBhbHJl
YWR5IGV4aXN0LiBXZSBjcmVhdGUgdGhlCisvLyBvYmplY3QgaW4gYSBjbG9zdXJlIHRvIGF2b2lk
IGNyZWF0aW5nIGdsb2JhbCB2YXJpYWJsZXMuCisKKyAgICBKU09OMiA9IGZ1bmN0aW9uICgpIHsK
KworICAgICAgICBmdW5jdGlvbiBmKG4pIHsKKyAgICAgICAgICAgIC8vIEZvcm1hdCBpbnRlZ2Vy
cyB0byBoYXZlIGF0IGxlYXN0IHR3byBkaWdpdHMuCisgICAgICAgICAgICByZXR1cm4gbiA8IDEw
ID8gJzAnICsgbiA6IG47CisgICAgICAgIH0KKworICAgICAgICBEYXRlLnByb3RvdHlwZS50b0pT
T04gPSBmdW5jdGlvbiAoa2V5KSB7CisKKyAgICAgICAgICAgIHJldHVybiB0aGlzLmdldFVUQ0Z1
bGxZZWFyKCkgICArICctJyArCisgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNb250aCgp
ICsgMSkgKyAnLScgKworICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDRGF0ZSgpKSAgICAg
ICsgJ1QnICsKKyAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0hvdXJzKCkpICAgICArICc6
JyArCisgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENNaW51dGVzKCkpICAgKyAnOicgKwor
ICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDU2Vjb25kcygpKSAgICsgJ1onOworICAgICAg
ICB9OworCisgICAgICAgIFN0cmluZy5wcm90b3R5cGUudG9KU09OID0KKyAgICAgICAgTnVtYmVy
LnByb3RvdHlwZS50b0pTT04gPQorICAgICAgICBCb29sZWFuLnByb3RvdHlwZS50b0pTT04gPSBm
dW5jdGlvbiAoa2V5KSB7CisgICAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZU9mKCk7CisgICAg
ICAgIH07CisKKyAgICAgICAgdmFyIGN4ID0gL1tcdTAwMDBcdTAwYWRcdTA2MDAtXHUwNjA0XHUw
NzBmXHUxN2I0XHUxN2I1XHUyMDBjLVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVm
ZWZmXHVmZmYwLVx1ZmZmZl0vZywKKyAgICAgICAgICAgIGVzY2FwZWFibGUgPSAvW1xcXCJceDAw
LVx4MWZceDdmLVx4OWZcdTAwYWRcdTA2MDAtXHUwNjA0XHUwNzBmXHUxN2I0XHUxN2I1XHUyMDBj
LVx1MjAwZlx1MjAyOC1cdTIwMmZcdTIwNjAtXHUyMDZmXHVmZWZmXHVmZmYwLVx1ZmZmZl0vZywK
KyAgICAgICAgICAgIGdhcCwKKyAgICAgICAgICAgIGluZGVudCwKKyAgICAgICAgICAgIG1ldGEg
PSB7ICAgIC8vIHRhYmxlIG9mIGNoYXJhY3RlciBzdWJzdGl0dXRpb25zCisgICAgICAgICAgICAg
ICAgJ1xiJzogJ1xcYicsCisgICAgICAgICAgICAgICAgJ1x0JzogJ1xcdCcsCisgICAgICAgICAg
ICAgICAgJ1xuJzogJ1xcbicsCisgICAgICAgICAgICAgICAgJ1xmJzogJ1xcZicsCisgICAgICAg
ICAgICAgICAgJ1xyJzogJ1xccicsCisgICAgICAgICAgICAgICAgJyInIDogJ1xcIicsCisgICAg
ICAgICAgICAgICAgJ1xcJzogJ1xcXFwnCisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcmVw
OworCisKKyAgICAgICAgZnVuY3Rpb24gcXVvdGUoc3RyaW5nKSB7CisKKy8vIElmIHRoZSBzdHJp
bmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBh
bmQgbm8KKy8vIGJhY2tzbGFzaCBjaGFyYWN0ZXJzLCB0aGVuIHdlIGNhbiBzYWZlbHkgc2xhcCBz
b21lIHF1b3RlcyBhcm91bmQgaXQuCisvLyBPdGhlcndpc2Ugd2UgbXVzdCBhbHNvIHJlcGxhY2Ug
dGhlIG9mZmVuZGluZyBjaGFyYWN0ZXJzIHdpdGggc2FmZSBlc2NhcGUKKy8vIHNlcXVlbmNlcy4K
KworICAgICAgICAgICAgZXNjYXBlYWJsZS5sYXN0SW5kZXggPSAwOworICAgICAgICAgICAgcmV0
dXJuIGVzY2FwZWFibGUudGVzdChzdHJpbmcpID8KKyAgICAgICAgICAgICAgICAnIicgKyBzdHJp
bmcucmVwbGFjZShlc2NhcGVhYmxlLCBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgICAg
ICB2YXIgYyA9IG1ldGFbYV07CisgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYyA9PT0g
J3N0cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFx1JyArICgnMDAwMCcg
KworICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrKGEuY2hhckNvZGVBdCgwKSkpLnRvU3Ry
aW5nKDE2KSkuc2xpY2UoLTQpOworICAgICAgICAgICAgICAgIH0pICsgJyInIDoKKyAgICAgICAg
ICAgICAgICAnIicgKyBzdHJpbmcgKyAnIic7CisgICAgICAgIH0KKworCisgICAgICAgIGZ1bmN0
aW9uIHN0cihrZXksIGhvbGRlcikgeworCisvLyBQcm9kdWNlIGEgc3RyaW5nIGZyb20gaG9sZGVy
W2tleV0uCisKKyAgICAgICAgICAgIHZhciBpLCAgICAgICAgICAvLyBUaGUgbG9vcCBjb3VudGVy
LgorICAgICAgICAgICAgICAgIGssICAgICAgICAgIC8vIFRoZSBtZW1iZXIga2V5LgorICAgICAg
ICAgICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuCisgICAgICAgICAgICAg
ICAgbGVuZ3RoLAorICAgICAgICAgICAgICAgIG1pbmQgPSBnYXAsCisgICAgICAgICAgICAgICAg
cGFydGlhbCwKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IGhvbGRlcltrZXldOworCisvLyBJZiB0
aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNl
bWVudCB2YWx1ZS4KKworICAgICAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0g
J29iamVjdCcgJiYKKyAgICAgICAgICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0g
J2Z1bmN0aW9uJykgeworICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUudG9KU09OKGtleSk7
CisgICAgICAgICAgICB9CisKKy8vIElmIHdlIHdlcmUgY2FsbGVkIHdpdGggYSByZXBsYWNlciBm
dW5jdGlvbiwgdGhlbiBjYWxsIHRoZSByZXBsYWNlciB0bworLy8gb2J0YWluIGEgcmVwbGFjZW1l
bnQgdmFsdWUuCisKKyAgICAgICAgICAgIGlmICh0eXBlb2YgcmVwID09PSAnZnVuY3Rpb24nKSB7
CisgICAgICAgICAgICAgICAgdmFsdWUgPSByZXAuY2FsbChob2xkZXIsIGtleSwgdmFsdWUpOwor
ICAgICAgICAgICAgfQorCisvLyBXaGF0IGhhcHBlbnMgbmV4dCBkZXBlbmRzIG9uIHRoZSB2YWx1
ZSdzIHR5cGUuCisKKyAgICAgICAgICAgIHN3aXRjaCAodHlwZW9mIHZhbHVlKSB7CisgICAgICAg
ICAgICBjYXNlICdzdHJpbmcnOgorICAgICAgICAgICAgICAgIHJldHVybiBxdW90ZSh2YWx1ZSk7
CisKKyAgICAgICAgICAgIGNhc2UgJ251bWJlcic6CisKKy8vIEpTT04gbnVtYmVycyBtdXN0IGJl
IGZpbml0ZS4gRW5jb2RlIG5vbi1maW5pdGUgbnVtYmVycyBhcyBudWxsLgorCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGlzRmluaXRlKHZhbHVlKSA/IFN0cmluZyh2YWx1ZSkgOiAnbnVsbCc7CisK
KyAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgorICAgICAgICAgICAgY2FzZSAnbnVsbCc6CisK
Ky8vIElmIHRoZSB2YWx1ZSBpcyBhIGJvb2xlYW4gb3IgbnVsbCwgY29udmVydCBpdCB0byBhIHN0
cmluZy4gTm90ZToKKy8vIHR5cGVvZiBudWxsIGRvZXMgbm90IHByb2R1Y2UgJ251bGwnLiBUaGUg
Y2FzZSBpcyBpbmNsdWRlZCBoZXJlIGluCisvLyB0aGUgcmVtb3RlIGNoYW5jZSB0aGF0IHRoaXMg
Z2V0cyBmaXhlZCBzb21lZGF5LgorCisgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyh2YWx1
ZSk7CisKKy8vIElmIHRoZSB0eXBlIGlzICdvYmplY3QnLCB3ZSBtaWdodCBiZSBkZWFsaW5nIHdp
dGggYW4gb2JqZWN0IG9yIGFuIGFycmF5IG9yCisvLyBudWxsLgorCisgICAgICAgICAgICBjYXNl
ICdvYmplY3QnOgorCisvLyBEdWUgdG8gYSBzcGVjaWZpY2F0aW9uIGJsdW5kZXIgaW4gRUNNQVNj
cmlwdCwgdHlwZW9mIG51bGwgaXMgJ29iamVjdCcsCisvLyBzbyB3YXRjaCBvdXQgZm9yIHRoYXQg
Y2FzZS4KKworICAgICAgICAgICAgICAgIGlmICghdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuICdudWxsJzsKKyAgICAgICAgICAgICAgICB9CisKKy8vIE1ha2UgYW4gYXJyYXkg
dG8gaG9sZCB0aGUgcGFydGlhbCByZXN1bHRzIG9mIHN0cmluZ2lmeWluZyB0aGlzIG9iamVjdCB2
YWx1ZS4KKworICAgICAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7CisgICAgICAgICAgICAgICAg
cGFydGlhbCA9IFtdOworCisvLyBJZiB0aGUgb2JqZWN0IGhhcyBhIGRvbnRFbnVtIGxlbmd0aCBw
cm9wZXJ0eSwgd2UnbGwgdHJlYXQgaXQgYXMgYW4gYXJyYXkuCisKKyAgICAgICAgICAgICAgICBp
ZiAodHlwZW9mIHZhbHVlLmxlbmd0aCA9PT0gJ251bWJlcicgJiYKKyAgICAgICAgICAgICAgICAg
ICAgICAgICEodmFsdWUucHJvcGVydHlJc0VudW1lcmFibGUoJ2xlbmd0aCcpKSkgeworCisvLyBU
aGUgb2JqZWN0IGlzIGFuIGFycmF5LiBTdHJpbmdpZnkgZXZlcnkgZWxlbWVudC4gVXNlIG51bGwg
YXMgYSBwbGFjZWhvbGRlcgorLy8gZm9yIG5vbi1KU09OIHZhbHVlcy4KKworICAgICAgICAgICAg
ICAgICAgICBsZW5ndGggPSB2YWx1ZS5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGZvciAo
aSA9IDA7IGkgPCBsZW5ndGg7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcGFy
dGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnOworICAgICAgICAgICAgICAgICAgICB9
CisKKy8vIEpvaW4gYWxsIG9mIHRoZSBlbGVtZW50cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGgg
Y29tbWFzLCBhbmQgd3JhcCB0aGVtIGluCisvLyBicmFja2V0cy4KKworICAgICAgICAgICAgICAg
ICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAnW10nIDoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGdhcCA/ICdbXG4nICsgZ2FwICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFydGlhbC5qb2luKCcsXG4nICsgZ2FwKSArICdcbicgKworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWluZCArICddJyA6CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAnWycgKyBwYXJ0aWFsLmpvaW4oJywnKSArICddJzsKKyAgICAgICAgICAgICAgICAgICAg
Z2FwID0gbWluZDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHY7CisgICAgICAgICAgICAg
ICAgfQorCisvLyBJZiB0aGUgcmVwbGFjZXIgaXMgYW4gYXJyYXksIHVzZSBpdCB0byBzZWxlY3Qg
dGhlIG1lbWJlcnMgdG8gYmUgc3RyaW5naWZpZWQuCisKKyAgICAgICAgICAgICAgICBpZiAocmVw
ICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgICAgICAgIGxlbmd0
aCA9IHJlcC5sZW5ndGg7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW5n
dGg7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgayA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlLCByZXApOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisKKy8vIE90aGVyd2lz
ZSwgaXRlcmF0ZSB0aHJvdWdoIGFsbCBvZiB0aGUga2V5cyBpbiB0aGUgb2JqZWN0LgorCisgICAg
ICAgICAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKHZhbHVlLCBrKSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHYgPSBzdHIoaywgdmFsdWUsIHJlcCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisvLyBKb2luIGFsbCBvZiB0aGUg
bWVtYmVyIHRleHRzIHRvZ2V0aGVyLCBzZXBhcmF0ZWQgd2l0aCBjb21tYXMsCisvLyBhbmQgd3Jh
cCB0aGVtIGluIGJyYWNlcy4KKworICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9
PT0gMCA/ICd7fScgOgorICAgICAgICAgICAgICAgICAgICBnYXAgPyAne1xuJyArIGdhcCArIHBh
cnRpYWwuam9pbignLFxuJyArIGdhcCkgKyAnXG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtaW5kICsgJ30nIDogJ3snICsgcGFydGlhbC5qb2luKCcsJykgKyAnfSc7CisgICAgICAg
ICAgICAgICAgZ2FwID0gbWluZDsKKyAgICAgICAgICAgICAgICByZXR1cm4gdjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorCisvLyBSZXR1cm4gdGhlIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcg
dGhlIHN0cmluZ2lmeSBhbmQgcGFyc2UgbWV0aG9kcy4KKworICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgc3RyaW5naWZ5OiBmdW5jdGlvbiAodmFsdWUsIHJlcGxhY2VyLCBzcGFjZSkgewor
CisvLyBUaGUgc3RyaW5naWZ5IG1ldGhvZCB0YWtlcyBhIHZhbHVlIGFuZCBhbiBvcHRpb25hbCBy
ZXBsYWNlciwgYW5kIGFuIG9wdGlvbmFsCisvLyBzcGFjZSBwYXJhbWV0ZXIsIGFuZCByZXR1cm5z
IGEgSlNPTiB0ZXh0LiBUaGUgcmVwbGFjZXIgY2FuIGJlIGEgZnVuY3Rpb24KKy8vIHRoYXQgY2Fu
IHJlcGxhY2UgdmFsdWVzLCBvciBhbiBhcnJheSBvZiBzdHJpbmdzIHRoYXQgd2lsbCBzZWxlY3Qg
dGhlIGtleXMuCisvLyBBIGRlZmF1bHQgcmVwbGFjZXIgbWV0aG9kIGNhbiBiZSBwcm92aWRlZC4g
VXNlIG9mIHRoZSBzcGFjZSBwYXJhbWV0ZXIgY2FuCisvLyBwcm9kdWNlIHRleHQgdGhhdCBpcyBt
b3JlIGVhc2lseSByZWFkYWJsZS4KKworICAgICAgICAgICAgICAgIHZhciBpOworICAgICAgICAg
ICAgICAgIGdhcCA9ICcnOworICAgICAgICAgICAgICAgIGluZGVudCA9ICcnOworCisvLyBJZiB0
aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29u
dGFpbmluZyB0aGF0CisvLyBtYW55IHNwYWNlcy4KKworICAgICAgICAgICAgICAgIGlmICh0eXBl
b2Ygc3BhY2UgPT09ICdudW1iZXInKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7
IGkgPCBzcGFjZTsgaSArPSAxKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbmRlbnQgKz0g
JyAnOworICAgICAgICAgICAgICAgICAgICB9CisKKy8vIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIg
aXMgYSBzdHJpbmcsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgaW5kZW50IHN0cmluZy4KKworICAg
ICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHNwYWNlID09PSAnc3RyaW5nJykgeworICAg
ICAgICAgICAgICAgICAgICBpbmRlbnQgPSBzcGFjZTsKKyAgICAgICAgICAgICAgICB9CisKKy8v
IElmIHRoZXJlIGlzIGEgcmVwbGFjZXIsIGl0IG11c3QgYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJh
eS4KKy8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuCisKKyAgICAgICAgICAgICAgICByZXAg
PSByZXBsYWNlcjsKKyAgICAgICAgICAgICAgICBpZiAocmVwbGFjZXIgJiYgdHlwZW9mIHJlcGxh
Y2VyICE9PSAnZnVuY3Rpb24nICYmCisgICAgICAgICAgICAgICAgICAgICAgICAodHlwZW9mIHJl
cGxhY2VyICE9PSAnb2JqZWN0JyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVvZiBy
ZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkgeworICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7CisgICAgICAgICAgICAgICAgfQorCisvLyBN
YWtlIGEgZmFrZSByb290IG9iamVjdCBjb250YWluaW5nIG91ciB2YWx1ZSB1bmRlciB0aGUga2V5
IG9mICcnLgorLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS4K
KworICAgICAgICAgICAgICAgIHJldHVybiBzdHIoJycsIHsnJzogdmFsdWV9KTsKKyAgICAgICAg
ICAgIH0sCisKKworICAgICAgICAgICAgcGFyc2U6IGZ1bmN0aW9uICh0ZXh0LCByZXZpdmVyKSB7
CisKKy8vIFRoZSBwYXJzZSBtZXRob2QgdGFrZXMgYSB0ZXh0IGFuZCBhbiBvcHRpb25hbCByZXZp
dmVyIGZ1bmN0aW9uLCBhbmQgcmV0dXJucworLy8gYSBKYXZhU2NyaXB0IHZhbHVlIGlmIHRoZSB0
ZXh0IGlzIGEgdmFsaWQgSlNPTiB0ZXh0LgorCisgICAgICAgICAgICAgICAgdmFyIGo7CisKKyAg
ICAgICAgICAgICAgICBmdW5jdGlvbiB3YWxrKGhvbGRlciwga2V5KSB7CisKKy8vIFRoZSB3YWxr
IG1ldGhvZCBpcyB1c2VkIHRvIHJlY3Vyc2l2ZWx5IHdhbGsgdGhlIHJlc3VsdGluZyBzdHJ1Y3R1
cmUgc28KKy8vIHRoYXQgbW9kaWZpY2F0aW9ucyBjYW4gYmUgbWFkZS4KKworICAgICAgICAgICAg
ICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHdhbGsodmFsdWUsIGspOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpZiAodiAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZVtrXSA9IHY7CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkZWxldGUgdmFsdWVba107CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldml2ZXIu
Y2FsbChob2xkZXIsIGtleSwgdmFsdWUpOworICAgICAgICAgICAgICAgIH0KKworCisvLyBQYXJz
aW5nIGhhcHBlbnMgaW4gZm91ciBzdGFnZXMuIEluIHRoZSBmaXJzdCBzdGFnZSwgd2UgcmVwbGFj
ZSBjZXJ0YWluCisvLyBVbmljb2RlIGNoYXJhY3RlcnMgd2l0aCBlc2NhcGUgc2VxdWVuY2VzLiBK
YXZhU2NyaXB0IGhhbmRsZXMgbWFueSBjaGFyYWN0ZXJzCisvLyBpbmNvcnJlY3RseSwgZWl0aGVy
IHNpbGVudGx5IGRlbGV0aW5nIHRoZW0sIG9yIHRyZWF0aW5nIHRoZW0gYXMgbGluZSBlbmRpbmdz
LgorCisgICAgICAgICAgICAgICAgY3gubGFzdEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBp
ZiAoY3gudGVzdCh0ZXh0KSkgeworICAgICAgICAgICAgICAgICAgICB0ZXh0ID0gdGV4dC5yZXBs
YWNlKGN4LCBmdW5jdGlvbiAoYSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdc
XHUnICsgKCcwMDAwJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgrKGEuY2hh
ckNvZGVBdCgwKSkpLnRvU3RyaW5nKDE2KSkuc2xpY2UoLTQpOworICAgICAgICAgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgICAgICB9CisKKy8vIEluIHRoZSBzZWNvbmQgc3RhZ2UsIHdlIHJ1
biB0aGUgdGV4dCBhZ2FpbnN0IHJlZ3VsYXIgZXhwcmVzc2lvbnMgdGhhdCBsb29rCisvLyBmb3Ig
bm9uLUpTT04gcGF0dGVybnMuIFdlIGFyZSBlc3BlY2lhbGx5IGNvbmNlcm5lZCB3aXRoICcoKScg
YW5kICduZXcnCisvLyBiZWNhdXNlIHRoZXkgY2FuIGNhdXNlIGludm9jYXRpb24sIGFuZCAnPScg
YmVjYXVzZSBpdCBjYW4gY2F1c2UgbXV0YXRpb24uCisvLyBCdXQganVzdCB0byBiZSBzYWZlLCB3
ZSB3YW50IHRvIHJlamVjdCBhbGwgdW5leHBlY3RlZCBmb3Jtcy4KKworLy8gV2Ugc3BsaXQgdGhl
IHNlY29uZCBzdGFnZSBpbnRvIDQgcmVnZXhwIG9wZXJhdGlvbnMgaW4gb3JkZXIgdG8gd29yayBh
cm91bmQKKy8vIGNyaXBwbGluZyBpbmVmZmljaWVuY2llcyBpbiBJRSdzIGFuZCBTYWZhcmkncyBy
ZWdleHAgZW5naW5lcy4gRmlyc3Qgd2UKKy8vIHJlcGxhY2UgdGhlIEpTT04gYmFja3NsYXNoIHBh
aXJzIHdpdGggJ0AnIChhIG5vbi1KU09OIGNoYXJhY3RlcikuIFNlY29uZCwgd2UKKy8vIHJlcGxh
Y2UgYWxsIHNpbXBsZSB2YWx1ZSB0b2tlbnMgd2l0aCAnXScgY2hhcmFjdGVycy4gVGhpcmQsIHdl
IGRlbGV0ZSBhbGwKKy8vIG9wZW4gYnJhY2tldHMgdGhhdCBmb2xsb3cgYSBjb2xvbiBvciBjb21t
YSBvciB0aGF0IGJlZ2luIHRoZSB0ZXh0LiBGaW5hbGx5LAorLy8gd2UgbG9vayB0byBzZWUgdGhh
dCB0aGUgcmVtYWluaW5nIGNoYXJhY3RlcnMgYXJlIG9ubHkgd2hpdGVzcGFjZSBvciAnXScgb3IK
Ky8vICcsJyBvciAnOicgb3IgJ3snIG9yICd9Jy4gSWYgdGhhdCBpcyBzbywgdGhlbiB0aGUgdGV4
dCBpcyBzYWZlIGZvciBldmFsLgorCisgICAgICAgICAgICAgICAgaWYgKC9eW1xdLDp7fVxzXSok
Ly4KK3Rlc3QodGV4dC5yZXBsYWNlKC9cXCg/OlsiXFxcL2JmbnJ0XXx1WzAtOWEtZkEtRl17NH0p
L2csICdAJykuCityZXBsYWNlKC8iW14iXFxcblxyXSoifHRydWV8ZmFsc2V8bnVsbHwtP1xkKyg/
OlwuXGQqKT8oPzpbZUVdWytcLV0/XGQrKT8vZywgJ10nKS4KK3JlcGxhY2UoLyg/Ol58OnwsKSg/
OlxzKlxbKSsvZywgJycpKSkgeworCisvLyBJbiB0aGUgdGhpcmQgc3RhZ2Ugd2UgdXNlIHRoZSBl
dmFsIGZ1bmN0aW9uIHRvIGNvbXBpbGUgdGhlIHRleHQgaW50byBhCisvLyBKYXZhU2NyaXB0IHN0
cnVjdHVyZS4gVGhlICd7JyBvcGVyYXRvciBpcyBzdWJqZWN0IHRvIGEgc3ludGFjdGljIGFtYmln
dWl0eQorLy8gaW4gSmF2YVNjcmlwdDogaXQgY2FuIGJlZ2luIGEgYmxvY2sgb3IgYW4gb2JqZWN0
IGxpdGVyYWwuIFdlIHdyYXAgdGhlIHRleHQKKy8vIGluIHBhcmVucyB0byBlbGltaW5hdGUgdGhl
IGFtYmlndWl0eS4KKworICAgICAgICAgICAgICAgICAgICBqID0gZXZhbCgnKCcgKyB0ZXh0ICsg
JyknKTsKKworLy8gSW4gdGhlIG9wdGlvbmFsIGZvdXJ0aCBzdGFnZSwgd2UgcmVjdXJzaXZlbHkg
d2FsayB0aGUgbmV3IHN0cnVjdHVyZSwgcGFzc2luZworLy8gZWFjaCBuYW1lL3ZhbHVlIHBhaXIg
dG8gYSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZSB0cmFuc2Zvcm1hdGlvbi4KKworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPwor
ICAgICAgICAgICAgICAgICAgICAgICAgd2Fsayh7Jyc6IGp9LCAnJykgOiBqOworICAgICAgICAg
ICAgICAgIH0KKworLy8gSWYgdGhlIHRleHQgaXMgbm90IEpTT04gcGFyc2VhYmxlLCB0aGVuIGEg
U3ludGF4RXJyb3IgaXMgdGhyb3duLgorCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRh
eEVycm9yKCdKU09OLnBhcnNlJyk7CisgICAgICAgICAgICB9CisgICAgICAgIH07CisgICAgfSgp
OworfQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9wYXNzMS5qc29u
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvcGFzczEu
anNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMv
cGFzczEuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw1OCBAQAorWworICAgICJKU09OIFRl
c3QgUGF0dGVybiBwYXNzMSIsCisgICAgeyJvYmplY3Qgd2l0aCAxIG1lbWJlciI6WyJhcnJheSB3
aXRoIDEgZWxlbWVudCJdfSwKKyAgICB7fSwKKyAgICBbXSwKKyAgICAtNDIsCisgICAgdHJ1ZSwK
KyAgICBmYWxzZSwKKyAgICBudWxsLAorICAgIHsKKyAgICAgICAgImludGVnZXIiOiAxMjM0NTY3
ODkwLAorICAgICAgICAicmVhbCI6IC05ODc2LjU0MzIxMCwKKyAgICAgICAgImUiOiAwLjEyMzQ1
Njc4OWUtMTIsCisgICAgICAgICJFIjogMS4yMzQ1Njc4OTBFKzM0LAorICAgICAgICAiIjogIDIz
NDU2Nzg5MDEyRTY2LAorICAgICAgICAiemVybyI6IDAsCisgICAgICAgICJvbmUiOiAxLAorICAg
ICAgICAic3BhY2UiOiAiICIsCisgICAgICAgICJxdW90ZSI6ICJcIiIsCisgICAgICAgICJiYWNr
c2xhc2giOiAiXFwiLAorICAgICAgICAiY29udHJvbHMiOiAiXGJcZlxuXHJcdCIsCisgICAgICAg
ICJzbGFzaCI6ICIvICYgXC8iLAorICAgICAgICAiYWxwaGEiOiAiYWJjZGVmZ2hpamtsbW5vcHFy
c3R1dnd5eiIsCisgICAgICAgICJBTFBIQSI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1laIiwK
KyAgICAgICAgImRpZ2l0IjogIjAxMjM0NTY3ODkiLAorICAgICAgICAiMDEyMzQ1Njc4OSI6ICJk
aWdpdCIsCisgICAgICAgICJzcGVjaWFsIjogImAxfiFAIyQlXiYqKClfKy09eyc6WyxdfXw7Ljwv
Pj8iLAorICAgICAgICAiaGV4IjogIlx1MDEyM1x1NDU2N1x1ODlBQlx1Q0RFRlx1YWJjZFx1ZWY0
QSIsCisgICAgICAgICJ0cnVlIjogdHJ1ZSwKKyAgICAgICAgImZhbHNlIjogZmFsc2UsCisgICAg
ICAgICJudWxsIjogbnVsbCwKKyAgICAgICAgImFycmF5IjpbICBdLAorICAgICAgICAib2JqZWN0
Ijp7ICB9LAorICAgICAgICAiYWRkcmVzcyI6ICI1MCBTdC4gSmFtZXMgU3RyZWV0IiwKKyAgICAg
ICAgInVybCI6ICJodHRwOi8vd3d3LkpTT04ub3JnLyIsCisgICAgICAgICJjb21tZW50IjogIi8v
IC8qIDwhLS0gLS0iLAorICAgICAgICAiIyAtLSAtLT4gKi8iOiAiICIsCisgICAgICAgICIgcyBw
IGEgYyBlIGQgIiA6WzEsMiAsIDMKKworLAorCis0ICwgNSAgICAgICAgLCAgICAgICAgICA2ICAg
ICAgICAgICAsNyAgICAgICAgXSwiY29tcGFjdCI6WzEsMiwzLDQsNSw2LDddLAorICAgICAgICAi
anNvbnRleHQiOiAie1wib2JqZWN0IHdpdGggMSBtZW1iZXJcIjpbXCJhcnJheSB3aXRoIDEgZWxl
bWVudFwiXX0iLAorICAgICAgICAicXVvdGVzIjogIiYjMzQ7IFx1MDAyMiAlMjIgMHgyMiAwMzQg
JiN4MjI7IiwKKyAgICAgICAgIlwvXFxcIlx1Q0FGRVx1QkFCRVx1QUI5OFx1RkNERVx1YmNkYVx1
ZWY0QVxiXGZcblxyXHRgMX4hQCMkJV4mKigpXystPVtde318OzonLC4vPD4/IgorOiAiQSBrZXkg
Y2FuIGJlIGFueSBzdHJpbmciCisgICAgfSwKKyAgICAwLjUgLDk4LjYKKywKKzk5LjQ0CissCisK
KzEwNjYsCisxZTEsCiswLjFlMSwKKzFlLTEsCisxZTAwLDJlKzAwLDJlLTAwCissInJvc2VidWQi
XQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9wYXNzMy5qc29uCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvcGFzczMuanNv
bgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvcGFz
czMuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3IEBACit7CisgICAgIkpTT04gVGVzdCBQ
YXR0ZXJuIHBhc3MzIjogeworICAgICAgICAiVGhlIG91dGVybW9zdCB2YWx1ZSI6ICJtdXN0IGJl
IGFuIG9iamVjdCBvciBhcnJheS4iLAorICAgICAgICAiSW4gdGhpcyB0ZXN0IjogIkl0IGlzIGFu
IG9iamVjdC4iCisgICAgfQorfQorCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVz
b3VyY2VzL3dlYmtpdC5wYXNzMS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvSlNPTi9yZXNvdXJjZXMvd2Via2l0LnBhc3MxLmpzb24JKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL3dlYmtpdC5wYXNzMS5qc29uCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxIEBACitbW1tbW1tbW1tbW1tbW1tbW1tbWyJUb28gZGVlcCJdXV1dXV1d
XV1dXV1dXV1dXV1dXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUK
</data>
<flag name="review"
          id="14231"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30293</attachid>
            <date>2009-05-13 16:01:15 -0700</date>
            <delta_ts>2009-05-22 19:42:03 -0700</delta_ts>
            <desc>JSON test cases pacth</desc>
            <filename>json-test-cases.patch</filename>
            <type>text/plain</type>
            <size>41647</size>
            <attacher name="Husam Senussi">husam</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDQzNjY2KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsNjQgQEAKKzIwMDktMDUtMTMgIEh1c2FtIFNlbnVzc2kgIDxo
dXNhbUBzZW51c3NpLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBBZGQgSlNPTiBPYmplY3QuCisKKyAgICAgICAgKiBmYXN0L2pzL0pTT046IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9iYWNrZW5kLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogZmFzdC9qcy9KU09OL2JhY2tlbmQuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9qcy9KU09OL3BhcnNlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3Qv
anMvSlNPTi9wYXJzZXIuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291
cmNlczogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMS5qc29u
OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxMC5qc29uOiBB
ZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxMS5qc29uOiBBZGRl
ZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxMi5qc29uOiBBZGRlZC4K
KyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxMy5qc29uOiBBZGRlZC4KKyAg
ICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxNC5qc29uOiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxNS5qc29uOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxNi5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxNy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0
L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxOS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L0pTT04vcmVzb3VyY2VzL2ZhaWwyLmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNP
Ti9yZXNvdXJjZXMvZmFpbDIwLmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9y
ZXNvdXJjZXMvZmFpbDIxLmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNv
dXJjZXMvZmFpbDIyLmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJj
ZXMvZmFpbDIzLmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMv
ZmFpbDI0Lmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFp
bDI1Lmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI2
Lmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI3Lmpz
b246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI4Lmpzb246
IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI5Lmpzb246IEFk
ZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMuanNvbjogQWRkZWQu
CisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMzAuanNvbjogQWRkZWQuCisg
ICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMzEuanNvbjogQWRkZWQuCisgICAg
ICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMzIuanNvbjogQWRkZWQuCisgICAgICAg
ICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMzMuanNvbjogQWRkZWQuCisgICAgICAgICog
ZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMzQuanNvbjogQWRkZWQuCisgICAgICAgICogZmFz
dC9qcy9KU09OL3Jlc291cmNlcy9mYWlsNC5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pz
L0pTT04vcmVzb3VyY2VzL2ZhaWw1Lmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNP
Ti9yZXNvdXJjZXMvZmFpbDYuanNvbjogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jl
c291cmNlcy9mYWlsNy5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWw4Lmpzb246IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMv
ZmFpbDkuanNvbjogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9tb2Rp
ZmllZC1qc29uMi5qczogQWRkZWQuCisgICAgICAgICguSlNPTjIpOgorICAgICAgICAoLkpTT04y
LkRhdGUucHJvdG90eXBlLnRvSlNPTik6CisgICAgICAgICguSlNPTjIuU3RyaW5nLnByb3RvdHlw
ZS50b0pTT04uTnVtYmVyLnByb3RvdHlwZS50b0pTT04uQm9vbGVhbi5wcm90b3R5cGUudG9KU09O
KToKKyAgICAgICAgKC5KU09OMi5xdW90ZSk6CisgICAgICAgICguSlNPTjIuc3RyKToKKyAgICAg
ICAgKC5KU09OMi5yZXR1cm4uc3RyaW5naWZ5KToKKyAgICAgICAgKC5KU09OMi5yZXR1cm4ucGFy
c2Uud2Fsayk6CisgICAgICAgICguSlNPTjIucmV0dXJuLnBhcnNlLmlmKToKKyAgICAgICAgKC5K
U09OMi5yZXR1cm4ucGFyc2UpOgorICAgICAgICAqIGZhc3QvanMvSlNPTi9yZXNvdXJjZXMvcGFz
czEuanNvbjogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3Jlc291cmNlcy9wYXNzMy5q
c29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vcmVzb3VyY2VzL3dlYmtpdC5wYXNz
MS5qc29uOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL0pTT04vc3RyaW5naWZ5LWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICogZmFzdC9qcy9KU09OL3N0cmluZ2lmeS5odG1sOiBBZGRl
ZC4KKwogMjAwOS0wNS0xMyAgSmVyZW15IE1vc2tvdmljaCAgPGplcmVteUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGF2ZSBIeWF0dC4KSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvSlNPTi9iYWNrZW5kLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL0pTT04vYmFja2VuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9mYXN0L2pzL0pTT04vYmFja2VuZC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEsNyBAQAorLS0tIFRlc3QgYmVnaW5zLiAtLS0KK3Bhc3MxLmpzb246IFBBU1M6IFN0
cmluZ3MgbWF0Y2guCitwYXNzMy5qc29uOiBQQVNTOiBTdHJpbmdzIG1hdGNoLgord2Via2l0LnBh
c3MxLmpzb246IFBBU1M6IFN0cmluZ3MgbWF0Y2guCistLS0gVGVzdCBlbmRzLiAtLS0KKworCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vYmFja2VuZC5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9iYWNrZW5kLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vYmFja2VuZC5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDUyIEBACis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9tb2RpZmll
ZC1qc29uMi5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwcmU+Cis8c2NyaXB0Pgor
ZnVuY3Rpb24gdHJ5QmFja2VuZCh0ZXh0KSB7CisgIHZhciBvdXJfb2JqZWN0ID0gSlNPTi5wYXJz
ZSh0ZXh0KTsKKyAgdmFyIGRvdWdzX29iamVjdCA9IEpTT04yLnBhcnNlKHRleHQpOworCisgIHZh
ciBvdXJfc3RyaW5nID0gSlNPTjIuc3RyaW5naWZ5KG91cl9vYmplY3QpOworICB2YXIgZG91Z3Nf
c3RyaW5nID0gSlNPTjIuc3RyaW5naWZ5KGRvdWdzX29iamVjdCk7CisKKyAgaWYgKG91cl9zdHJp
bmcgPT0gZG91Z3Nfc3RyaW5nKSB7CisgICAgZG9jdW1lbnQud3JpdGVsbignUEFTUzogU3RyaW5n
cyBtYXRjaC4nKTsKKyAgfSBlbHNlIHsKKyAgICBkb2N1bWVudC53cml0ZWxuKCdGQUlMOiBTdHJp
bmdzIGRvIG5vdCBtYXRjaC4nKTsKKyAgICBkb2N1bWVudC53cml0ZWxuKCctLS0gQmVnaW4gb3Vy
X3N0cmluZy4gLS0tJyk7CisgICAgZG9jdW1lbnQud3JpdGVsbihvdXJfc3RyaW5nKTsKKyAgICBk
b2N1bWVudC53cml0ZWxuKCctLS0gRW5kIG91cl9zdHJpbmcuIC0tLScpOworICAgIGRvY3VtZW50
LndyaXRlbG4oJy0tLS0gQmVnaW4gZG91Z3Nfc3RyaW5nLiAtLS0nKTsKKyAgICBkb2N1bWVudC53
cml0ZWxuKGRvdWdzX3N0cmluZyk7CisgICAgZG9jdW1lbnQud3JpdGVsbignLS0tIEVuZCBkb3Vn
c19zdHJpbmcuIC0tLScpOworICB9Cit9CisKK2Z1bmN0aW9uIHRlc3QobmFtZSkgeworICB2YXIg
eGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIHhoci5vcGVuKCdHRVQnLCAncmVzb3VyY2Vz
LycgKyBuYW1lLCBmYWxzZSk7CisgIHhoci5zZW5kKG51bGwpOworICBkb2N1bWVudC53cml0ZShu
YW1lICsgJzogJykKKyAgdHJ5QmFja2VuZCh4aHIucmVzcG9uc2VUZXh0KTsKK30KKworaWYgKHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFz
VGV4dCgpOworCitkb2N1bWVudC53cml0ZWxuKCctLS0gVGVzdCBiZWdpbnMuIC0tLScpOworCitp
ZiAoIXdpbmRvdy5KU09OKQorICBkb2N1bWVudC53cml0ZWxuKCdGQUlMOiBObyB3aW5kb3cuSlNP
TiBvYmplY3QuJyk7CisKK3Rlc3QoJ3Bhc3MxLmpzb24nKTsKK3Rlc3QoJ3Bhc3MzLmpzb24nKTsK
K3Rlc3QoJ3dlYmtpdC5wYXNzMS5qc29uJyk7CisKK2RvY3VtZW50LndyaXRlbG4oJy0tLSBUZXN0
IGVuZHMuIC0tLScpOworPC9zY3JpcHQ+Cis8L3ByZT4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9wYXJzZXItZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9wYXJzZXItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3BhcnNlci1leHBlY3RlZC50eHQJKHJl
dmlzaW9uIDApCkBAIC0wLDAgKzEsNDAgQEAKKy0tLSBUZXN0IGJlZ2lucy4gLS0tCitmYWlsMS5q
c29uOiBOby4KK2ZhaWwyLmpzb246IE5vLgorZmFpbDMuanNvbjogTm8uCitmYWlsNC5qc29uOiBO
by4KK2ZhaWw1Lmpzb246IE5vLgorZmFpbDYuanNvbjogTm8uCitmYWlsNy5qc29uOiBOby4KK2Zh
aWw4Lmpzb246IE5vLgorZmFpbDkuanNvbjogTm8uCitmYWlsMTAuanNvbjogTm8uCitmYWlsMTEu
anNvbjogTm8uCitmYWlsMTIuanNvbjogTm8uCitmYWlsMTMuanNvbjogTm8uCitmYWlsMTQuanNv
bjogTm8uCitmYWlsMTUuanNvbjogTm8uCitmYWlsMTYuanNvbjogTm8uCitmYWlsMTcuanNvbjog
Tm8uCitmYWlsMTkuanNvbjogTm8uCitmYWlsMjAuanNvbjogTm8uCitmYWlsMjEuanNvbjogTm8u
CitmYWlsMjIuanNvbjogTm8uCitmYWlsMjMuanNvbjogTm8uCitmYWlsMjQuanNvbjogTm8uCitm
YWlsMjUuanNvbjogTm8uCitmYWlsMjYuanNvbjogTm8uCitmYWlsMjcuanNvbjogTm8uCitmYWls
MjguanNvbjogTm8uCitmYWlsMjkuanNvbjogTm8uCitmYWlsMzAuanNvbjogTm8uCitmYWlsMzEu
anNvbjogTm8uCitmYWlsMzIuanNvbjogTm8uCitmYWlsMzMuanNvbjogTm8uCitmYWlsMzQuanNv
bjogTm8uCitwYXNzMS5qc29uOiBZZXMuCitwYXNzMy5qc29uOiBZZXMuCit3ZWJraXQucGFzczEu
anNvbjogWWVzLgorLS0tIFRlc3QgZW5kcy4gLS0tCisKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9KU09OL3BhcnNlci5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMv
SlNPTi9wYXJzZXIuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNP
Ti9wYXJzZXIuaHRtbAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MiBAQAorPGh0bWw+Cis8Ym9k
eT4KKzxwcmU+Cis8c2NyaXB0PgorZnVuY3Rpb24gdHJ5UGFyc2UodGV4dCkgeworICB0cnkgewor
ICAgIEpTT04ucGFyc2UodGV4dCk7CisgICAgcmV0dXJuICJZZXMuIjsKKyAgfSBjYXRjaCAoZXgp
IHsKKyAgICByZXR1cm4gIk5vLiI7CisgIH0KK30KKworZnVuY3Rpb24gdGVzdChuYW1lKSB7Cisg
IHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgeGhyLm9wZW4oJ0dFVCcsICdyZXNv
dXJjZXMvJyArIG5hbWUsIGZhbHNlKTsKKyAgeGhyLnNlbmQobnVsbCk7CisgIGRvY3VtZW50Lndy
aXRlbG4obmFtZSArICc6ICcgKyB0cnlQYXJzZSh4aHIucmVzcG9uc2VUZXh0KSk7Cit9CisKK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgIGxheW91dFRlc3RDb250cm9sbGVyLmR1
bXBBc1RleHQoKTsKKworZG9jdW1lbnQud3JpdGVsbignLS0tIFRlc3QgYmVnaW5zLiAtLS0nKTsK
KworaWYgKCF3aW5kb3cuSlNPTikKKyAgZG9jdW1lbnQud3JpdGVsbignRkFJTDogTm8gd2luZG93
LkpTT04gb2JqZWN0LicpOworCit0ZXN0KCdmYWlsMS5qc29uJyk7Cit0ZXN0KCdmYWlsMi5qc29u
Jyk7Cit0ZXN0KCdmYWlsMy5qc29uJyk7Cit0ZXN0KCdmYWlsNC5qc29uJyk7Cit0ZXN0KCdmYWls
NS5qc29uJyk7Cit0ZXN0KCdmYWlsNi5qc29uJyk7Cit0ZXN0KCdmYWlsNy5qc29uJyk7Cit0ZXN0
KCdmYWlsOC5qc29uJyk7Cit0ZXN0KCdmYWlsOS5qc29uJyk7Cit0ZXN0KCdmYWlsMTAuanNvbicp
OwordGVzdCgnZmFpbDExLmpzb24nKTsKK3Rlc3QoJ2ZhaWwxMi5qc29uJyk7Cit0ZXN0KCdmYWls
MTMuanNvbicpOwordGVzdCgnZmFpbDE0Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwxNS5qc29uJyk7Cit0
ZXN0KCdmYWlsMTYuanNvbicpOwordGVzdCgnZmFpbDE3Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwxOS5q
c29uJyk7Cit0ZXN0KCdmYWlsMjAuanNvbicpOwordGVzdCgnZmFpbDIxLmpzb24nKTsKK3Rlc3Qo
J2ZhaWwyMi5qc29uJyk7Cit0ZXN0KCdmYWlsMjMuanNvbicpOwordGVzdCgnZmFpbDI0Lmpzb24n
KTsKK3Rlc3QoJ2ZhaWwyNS5qc29uJyk7Cit0ZXN0KCdmYWlsMjYuanNvbicpOwordGVzdCgnZmFp
bDI3Lmpzb24nKTsKK3Rlc3QoJ2ZhaWwyOC5qc29uJyk7Cit0ZXN0KCdmYWlsMjkuanNvbicpOwor
dGVzdCgnZmFpbDMwLmpzb24nKTsKK3Rlc3QoJ2ZhaWwzMS5qc29uJyk7Cit0ZXN0KCdmYWlsMzIu
anNvbicpOwordGVzdCgnZmFpbDMzLmpzb24nKTsKK3Rlc3QoJ2ZhaWwzNC5qc29uJyk7Cit0ZXN0
KCdwYXNzMS5qc29uJyk7Cit0ZXN0KCdwYXNzMy5qc29uJyk7CisvLyBGaXJlZm94IGZhaWxzIHRv
IHBhcnNlIHRoaXMgdGVzdCBjYXNlLCBidXQgd2UgZG9uJ3QgaGF2ZSB0aGUgc2FtZSBkZXB0aAor
Ly8gbGltaXQgYXMgdGhleSBkby4KK3Rlc3QoJ3dlYmtpdC5wYXNzMS5qc29uJyk7CisKK2RvY3Vt
ZW50LndyaXRlbG4oJy0tLSBUZXN0IGVuZHMuIC0tLScpOworPC9zY3JpcHQ+Cis8L3ByZT4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9zdHJpbmdpZnkt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9zdHJp
bmdpZnktZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9K
U09OL3N0cmluZ2lmeS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAor
LS0tIFRlc3QgYmVnaW5zLiAtLS0KK3Bhc3MxLmpzb246IFBBU1M6IE9iamVjdHMgbWF0Y2guCitw
YXNzMy5qc29uOiBQQVNTOiBPYmplY3RzIG1hdGNoLgord2Via2l0LnBhc3MxLmpzb246IFBBU1M6
IE9iamVjdHMgbWF0Y2guCistLS0gVGVzdCBlbmRzLiAtLS0KKworCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL0pTT04vc3RyaW5naWZ5Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9KU09OL3N0cmluZ2lmeS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9qcy9KU09OL3N0cmluZ2lmeS5odG1sCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDY4IEBA
Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9tb2RpZmllZC1qc29uMi5q
cyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxwcmU+Cis8c2NyaXB0PgorZnVuY3Rpb24g
aXNFcXVhbChvMSwgbzIpCit7CisgICAgaWYgKHR5cGVvZiBvMSAhPSAnb2JqZWN0JyB8fCB0eXBl
b2YgbzIgIT0gJ29iamVjdCcpCisgICAgICAgIHJldHVybiBmYWxzZTsgCisKKyAgICBmb3IgKGtl
eSBpbiBvMSkgeworICAgICAgICBpZiAobzJba2V5XSA9PT0gdW5kZWZpbmVkKQorICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICBlbHNlIGlmICh0eXBlb2YgbzFba2V5XSAhPSB0eXBl
b2YgbzJba2V5XSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgZWxzZSBpZiAo
dHlwZW9mIG8xW2tleV0gPT09ICdvYmplY3QnKXsKKyAgICAgICAgICAgIGlmKGlzRXF1YWwobzFb
a2V5XSwgbzJba2V5XSkgPT0gZmFsc2UpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9ZWxzZSBpZiAobzFba2V5XSAhPSBvMltrZXldKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIGZvciAoa2V5IGluIG8yKSB7CisgICAgICAgIGlmIChvMVtr
ZXldID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Z1bmN0aW9uIHRyeUJhY2tlbmQodGV4dCkgeworICB2YXIg
b2JqID0gSlNPTjIucGFyc2UodGV4dCk7CisgIHZhciBvdXJfb2JqID0gSlNPTjIucGFyc2UoSlNP
Ti5zdHJpbmdpZnkob2JqKSk7CisKKyAgaWYgKGlzRXF1YWwob3VyX29iaiwgb2JqKSkgeworICAg
IGRvY3VtZW50LndyaXRlbG4oJ1BBU1M6IE9iamVjdHMgbWF0Y2guJyk7CisgIH0gZWxzZSB7Cisg
ICAgZG9jdW1lbnQud3JpdGVsbignRkFJTDogT2JqZWN0cyBkbyBub3QgbWF0Y2guJyk7CisgIH0K
K30KKworZnVuY3Rpb24gdGVzdChuYW1lKSB7CisgIHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVl
c3QoKTsKKyAgeGhyLm9wZW4oJ0dFVCcsICdyZXNvdXJjZXMvJyArIG5hbWUsIGZhbHNlKTsKKyAg
eGhyLnNlbmQobnVsbCk7CisgIGRvY3VtZW50LndyaXRlKG5hbWUgKyAnOiAnKQorICB0cnlCYWNr
ZW5kKHhoci5yZXNwb25zZVRleHQpOworfQorCitpZiAod2luZG93LmxheW91dFRlc3RDb250cm9s
bGVyKQorICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisKK2RvY3VtZW50Lndy
aXRlbG4oJy0tLSBUZXN0IGJlZ2lucy4gLS0tJyk7CisKK2lmICghd2luZG93LkpTT04pCisgIGRv
Y3VtZW50LndyaXRlbG4oJ0ZBSUw6IE5vIHdpbmRvdy5KU09OIG9iamVjdC4nKTsKKwordGVzdCgn
cGFzczEuanNvbicpOwordGVzdCgncGFzczMuanNvbicpOwordGVzdCgnd2Via2l0LnBhc3MxLmpz
b24nKTsKKworZG9jdW1lbnQud3JpdGVsbignLS0tIFRlc3QgZW5kcy4gLS0tJyk7Cis8L3Njcmlw
dD4KKzwvcHJlPgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9K
U09OL3Jlc291cmNlcy9mYWlsMS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
anMvSlNPTi9yZXNvdXJjZXMvZmFpbDEuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDEuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSBAQAorIkEgSlNPTiBwYXlsb2FkIHNob3VsZCBiZSBhbiBvYmplY3Qgb3IgYXJyYXksIG5vdCBh
IHN0cmluZy4iClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMv
ZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMi5qc29uCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDIuanNvbgkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDIuanNvbgkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSBAQAorWyJVbmNsb3NlZCBhcnJheSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwzLmpzb24K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMy5q
c29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9m
YWlsMy5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACit7dW5xdW90ZWRfa2V5OiAia2V5
cyBtdXN0IGJlIHF1b3RlZCJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsNC5qc29uCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDQuanNvbgkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDQuanNvbgkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyJleHRyYSBjb21tYSIsXQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFp
bDUuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2Vz
L2ZhaWw1Lmpzb24JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVz
b3VyY2VzL2ZhaWw1Lmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1siZG91YmxlIGV4
dHJhIGNvbW1hIiwsXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDYuanNvbgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWw2Lmpzb24JKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWw2Lmpzb24JKHJldmlzaW9u
IDApCkBAIC0wLDAgKzEgQEAKK1sgICAsICI8LS0gbWlzc2luZyB2YWx1ZSJdClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNl
cy9mYWlsNy5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNv
dXJjZXMvZmFpbDcuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNP
Ti9yZXNvdXJjZXMvZmFpbDcuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyJDb21t
YSBhZnRlciB0aGUgY2xvc2UiXSwKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWw4Lmpzb24KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsOC5qc29uCShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsOC5qc29uCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitbIkV4dHJhIGNsb3NlIl1dClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9m
YWlsOS5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJj
ZXMvZmFpbDkuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9y
ZXNvdXJjZXMvZmFpbDkuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAoreyJFeHRyYSBj
b21tYSI6IHRydWUsfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDEwLmpzb24KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTAuanNvbgkocmV2aXNpb24gMCkK
KysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDEwLmpzb24JKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEgQEAKK3siRXh0cmEgdmFsdWUgYWZ0ZXIgY2xvc2UiOiB0cnVlfSAi
bWlzcGxhY2VkIHF1b3RlZCB2YWx1ZSIKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4
OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxMS5qc29uCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDExLmpzb24JKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxMS5q
c29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACit7IklsbGVnYWwgZXhwcmVzc2lvbiI6IDEg
KyAyfQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qv
anMvSlNPTi9yZXNvdXJjZXMvZmFpbDEyLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTIuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDEyLmpzb24JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEgQEAKK3siSWxsZWdhbCBpbnZvY2F0aW9uIjogYWxlcnQoKX0KXCBObyBuZXdsaW5l
IGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2Vz
L2ZhaWwxMy5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNv
dXJjZXMvZmFpbDEzLmpzb24JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pT
T04vcmVzb3VyY2VzL2ZhaWwxMy5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACit7Ik51
bWJlcnMgY2Fubm90IGhhdmUgbGVhZGluZyB6ZXJvZXMiOiAwMTN9ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWls
MTQuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2Vz
L2ZhaWwxNC5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jl
c291cmNlcy9mYWlsMTQuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAoreyJOdW1iZXJz
IGNhbm5vdCBiZSBoZXgiOiAweDE0fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE1Lmpzb24KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTUuanNvbgkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE1Lmpz
b24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1siSWxsZWdhbCBiYWNrc2xhc2ggZXNjYXBl
OiBceDE1Il0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxNi5qc29uCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE2Lmpzb24JKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxNi5qc29uCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxIEBACitbXG5ha2VkXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE3Lmpzb24KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMTcuanNvbgko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE3
Lmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1siSWxsZWdhbCBiYWNrc2xhc2ggZXNj
YXBlOiBcMDE3Il0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxOS5qc29uCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDE5Lmpzb24JKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwxOS5qc29uCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxIEBACit7Ik1pc3NpbmcgY29sb24iIG51bGx9ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9m
YWlsMjAuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWwyMC5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09O
L3Jlc291cmNlcy9mYWlsMjAuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAoreyJEb3Vi
bGUgY29sb24iOjogbnVsbH0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyMS5qc29uCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDIxLmpzb24JKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyMS5qc29uCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACit7IkNvbW1hIGluc3RlYWQgb2YgY29sb24iLCBudWxs
fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMv
SlNPTi9yZXNvdXJjZXMvZmFpbDIyLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjIuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDIyLmpzb24JKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEgQEAKK1siQ29sb24gaW5zdGVhZCBvZiBjb21tYSI6IGZhbHNlXQpcIE5vIG5ld2xpbmUg
YXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMv
ZmFpbDIzLmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291
cmNlcy9mYWlsMjMuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNP
Ti9yZXNvdXJjZXMvZmFpbDIzLmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1siQmFk
IHZhbHVlIiwgdHJ1dGhdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjQuanNvbgo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyNC5qc29uCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjQuanNvbgkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWydzaW5nbGUgcXVvdGUnXQpcIE5vIG5ld2xpbmUgYXQg
ZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFp
bDI1Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNl
cy9mYWlsMjUuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9y
ZXNvdXJjZXMvZmFpbDI1Lmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1siCXRhYglj
aGFyYWN0ZXIJaW4Jc3RyaW5nCSJdClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjYuanNvbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyNi5qc29uCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjYuanNv
bgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyJ0YWJcICAgY2hhcmFjdGVyXCAgIGluXCAg
c3RyaW5nXCAgIl0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0
cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyNy5qc29uCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI3Lmpzb24JKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwyNy5qc29uCShyZXZpc2lv
biAwKQpAQCAtMCwwICsxLDIgQEAKK1sibGluZQorYnJlYWsiXQpcIE5vIG5ld2xpbmUgYXQgZW5k
IG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI4
Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9m
YWlsMjguanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNv
dXJjZXMvZmFpbDI4Lmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMiBAQAorWyJsaW5lXAor
YnJlYWsiXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zh
c3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI5Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMjkuanNvbgkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDI5Lmpzb24JKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEgQEAKK1swZV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwzMC5qc29uCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMwLmpzb24JKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwzMC5qc29u
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBACitbMGUrXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9m
IGZpbGUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvZmFpbDMxLmpz
b24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWls
MzEuanNvbgkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJj
ZXMvZmFpbDMxLmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEgQEAKK1swZSstMV0KXCBObyBu
ZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVz
b3VyY2VzL2ZhaWwzMi5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNP
Ti9yZXNvdXJjZXMvZmFpbDMyLmpzb24JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwzMi5qc29uCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxIEBA
Cit7IkNvbW1hIGluc3RlYWQgaWYgY2xvc2luZyBicmFjZSI6IHRydWUsClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9m
YWlsMzMuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3Vy
Y2VzL2ZhaWwzMy5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09O
L3Jlc291cmNlcy9mYWlsMzMuanNvbgkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorWyJtaXNt
YXRjaCJ9ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMzQuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL2ZhaWwzNC5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy9mYWlsMzQuanNvbgkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSBAQAorMHsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlv
dXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL21vZGlmaWVkLWpzb24yLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvbW9kaWZpZWQtanNvbjIu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL21v
ZGlmaWVkLWpzb24yLmpzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ3NSBAQAorLyoKKyAgICBo
dHRwOi8vd3d3LkpTT04ub3JnL2pzb24yLmpzCisgICAgMjAwOC0wNy0wOQorCisgICAgUHVibGlj
IERvbWFpbi4KKworICAgIE5PIFdBUlJBTlRZIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBVU0UgQVQg
WU9VUiBPV04gUklTSy4KKworICAgIFNlZSBodHRwOi8vd3d3LkpTT04ub3JnL2pzLmh0bWwKKwor
ICAgIFRoaXMgZmlsZSBjcmVhdGVzIGEgZ2xvYmFsIEpTT04gb2JqZWN0IGNvbnRhaW5pbmcgdHdv
IG1ldGhvZHM6IHN0cmluZ2lmeQorICAgIGFuZCBwYXJzZS4KKworICAgICAgICBKU09OLnN0cmlu
Z2lmeSh2YWx1ZSwgcmVwbGFjZXIsIHNwYWNlKQorICAgICAgICAgICAgdmFsdWUgICAgICAgYW55
IEphdmFTY3JpcHQgdmFsdWUsIHVzdWFsbHkgYW4gb2JqZWN0IG9yIGFycmF5LgorCisgICAgICAg
ICAgICByZXBsYWNlciAgICBhbiBvcHRpb25hbCBwYXJhbWV0ZXIgdGhhdCBkZXRlcm1pbmVzIGhv
dyBvYmplY3QKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlcyBhcmUgc3RyaW5naWZpZWQg
Zm9yIG9iamVjdHMgd2l0aG91dCBhIHRvSlNPTgorICAgICAgICAgICAgICAgICAgICAgICAgbWV0
aG9kLiBJdCBjYW4gYmUgYSBmdW5jdGlvbiBvciBhbiBhcnJheS4KKworICAgICAgICAgICAgc3Bh
Y2UgICAgICAgYW4gb3B0aW9uYWwgcGFyYW1ldGVyIHRoYXQgc3BlY2lmaWVzIHRoZSBpbmRlbnRh
dGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgb2YgbmVzdGVkIHN0cnVjdHVyZXMuIElmIGl0
IGlzIG9taXR0ZWQsIHRoZSB0ZXh0IHdpbGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlIHBh
Y2tlZCB3aXRob3V0IGV4dHJhIHdoaXRlc3BhY2UuIElmIGl0IGlzIGEgbnVtYmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgaXQgd2lsbCBzcGVjaWZ5IHRoZSBudW1iZXIgb2Ygc3BhY2VzIHRv
IGluZGVudCBhdCBlYWNoCisgICAgICAgICAgICAgICAgICAgICAgICBsZXZlbC4gSWYgaXQgaXMg
YSBzdHJpbmcgKHN1Y2ggYXMgJ1x0JyBvciAnJm5ic3A7JyksCisgICAgICAgICAgICAgICAgICAg
ICAgICBpdCBjb250YWlucyB0aGUgY2hhcmFjdGVycyB1c2VkIHRvIGluZGVudCBhdCBlYWNoIGxl
dmVsLgorCisgICAgICAgICAgICBUaGlzIG1ldGhvZCBwcm9kdWNlcyBhIEpTT04gdGV4dCBmcm9t
IGEgSmF2YVNjcmlwdCB2YWx1ZS4KKworICAgICAgICAgICAgV2hlbiBhbiBvYmplY3QgdmFsdWUg
aXMgZm91bmQsIGlmIHRoZSBvYmplY3QgY29udGFpbnMgYSB0b0pTT04KKyAgICAgICAgICAgIG1l
dGhvZCwgaXRzIHRvSlNPTiBtZXRob2Qgd2lsbCBiZSBjYWxsZWQgYW5kIHRoZSByZXN1bHQgd2ls
bCBiZQorICAgICAgICAgICAgc3RyaW5naWZpZWQuIEEgdG9KU09OIG1ldGhvZCBkb2VzIG5vdCBz
ZXJpYWxpemU6IGl0IHJldHVybnMgdGhlCisgICAgICAgICAgICB2YWx1ZSByZXByZXNlbnRlZCBi
eSB0aGUgbmFtZS92YWx1ZSBwYWlyIHRoYXQgc2hvdWxkIGJlIHNlcmlhbGl6ZWQsCisgICAgICAg
ICAgICBvciB1bmRlZmluZWQgaWYgbm90aGluZyBzaG91bGQgYmUgc2VyaWFsaXplZC4gVGhlIHRv
SlNPTiBtZXRob2QKKyAgICAgICAgICAgIHdpbGwgYmUgcGFzc2VkIHRoZSBrZXkgYXNzb2NpYXRl
ZCB3aXRoIHRoZSB2YWx1ZSwgYW5kIHRoaXMgd2lsbCBiZQorICAgICAgICAgICAgYm91bmQgdG8g
dGhlIG9iamVjdCBob2xkaW5nIHRoZSBrZXkuCisKKyAgICAgICAgICAgIEZvciBleGFtcGxlLCB0
aGlzIHdvdWxkIHNlcmlhbGl6ZSBEYXRlcyBhcyBJU08gc3RyaW5ncy4KKworICAgICAgICAgICAg
ICAgIERhdGUucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIChrZXkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gZihuKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvLyBGb3Jt
YXQgaW50ZWdlcnMgdG8gaGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLgorICAgICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcwJyArIG4gOiBuOworICAgICAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0VVRDRnVsbFllYXIoKSAg
ICsgJy0nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSAr
IDEpICsgJy0nICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDRGF0ZSgp
KSAgICAgICsgJ1QnICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDSG91
cnMoKSkgICAgICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRD
TWludXRlcygpKSAgICsgJzonICsKKyAgICAgICAgICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0
VVRDU2Vjb25kcygpKSAgICsgJ1onOworICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAg
IFlvdSBjYW4gcHJvdmlkZSBhbiBvcHRpb25hbCByZXBsYWNlciBtZXRob2QuIEl0IHdpbGwgYmUg
cGFzc2VkIHRoZQorICAgICAgICAgICAga2V5IGFuZCB2YWx1ZSBvZiBlYWNoIG1lbWJlciwgd2l0
aCB0aGlzIGJvdW5kIHRvIHRoZSBjb250YWluaW5nCisgICAgICAgICAgICBvYmplY3QuIFRoZSB2
YWx1ZSB0aGF0IGlzIHJldHVybmVkIGZyb20geW91ciBtZXRob2Qgd2lsbCBiZQorICAgICAgICAg
ICAgc2VyaWFsaXplZC4gSWYgeW91ciBtZXRob2QgcmV0dXJucyB1bmRlZmluZWQsIHRoZW4gdGhl
IG1lbWJlciB3aWxsCisgICAgICAgICAgICBiZSBleGNsdWRlZCBmcm9tIHRoZSBzZXJpYWxpemF0
aW9uLgorCisgICAgICAgICAgICBJZiB0aGUgcmVwbGFjZXIgcGFyYW1ldGVyIGlzIGFuIGFycmF5
LCB0aGVuIGl0IHdpbGwgYmUgdXNlZCB0bworICAgICAgICAgICAgc2VsZWN0IHRoZSBtZW1iZXJz
IHRvIGJlIHNlcmlhbGl6ZWQuIEl0IGZpbHRlcnMgdGhlIHJlc3VsdHMgc3VjaAorICAgICAgICAg
ICAgdGhhdCBvbmx5IG1lbWJlcnMgd2l0aCBrZXlzIGxpc3RlZCBpbiB0aGUgcmVwbGFjZXIgYXJy
YXkgYXJlCisgICAgICAgICAgICBzdHJpbmdpZmllZC4KKworICAgICAgICAgICAgVmFsdWVzIHRo
YXQgZG8gbm90IGhhdmUgSlNPTiByZXByZXNlbnRhdGlvbnMsIHN1Y2ggYXMgdW5kZWZpbmVkIG9y
CisgICAgICAgICAgICBmdW5jdGlvbnMsIHdpbGwgbm90IGJlIHNlcmlhbGl6ZWQuIFN1Y2ggdmFs
dWVzIGluIG9iamVjdHMgd2lsbCBiZQorICAgICAgICAgICAgZHJvcHBlZDsgaW4gYXJyYXlzIHRo
ZXkgd2lsbCBiZSByZXBsYWNlZCB3aXRoIG51bGwuIFlvdSBjYW4gdXNlCisgICAgICAgICAgICBh
IHJlcGxhY2VyIGZ1bmN0aW9uIHRvIHJlcGxhY2UgdGhvc2Ugd2l0aCBKU09OIHZhbHVlcy4KKyAg
ICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHVuZGVmaW5lZCkgcmV0dXJucyB1bmRlZmluZWQuCisK
KyAgICAgICAgICAgIFRoZSBvcHRpb25hbCBzcGFjZSBwYXJhbWV0ZXIgcHJvZHVjZXMgYSBzdHJp
bmdpZmljYXRpb24gb2YgdGhlCisgICAgICAgICAgICB2YWx1ZSB0aGF0IGlzIGZpbGxlZCB3aXRo
IGxpbmUgYnJlYWtzIGFuZCBpbmRlbnRhdGlvbiB0byBtYWtlIGl0CisgICAgICAgICAgICBlYXNp
ZXIgdG8gcmVhZC4KKworICAgICAgICAgICAgSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIG5v
bi1lbXB0eSBzdHJpbmcsIHRoZW4gdGhhdCBzdHJpbmcgd2lsbAorICAgICAgICAgICAgYmUgdXNl
ZCBmb3IgaW5kZW50YXRpb24uIElmIHRoZSBzcGFjZSBwYXJhbWV0ZXIgaXMgYSBudW1iZXIsIHRo
ZW4KKyAgICAgICAgICAgIHRoZSBpbmRlbnRhdGlvbiB3aWxsIGJlIHRoYXQgbWFueSBzcGFjZXMu
CisKKyAgICAgICAgICAgIEV4YW1wbGU6CisKKyAgICAgICAgICAgIHRleHQgPSBKU09OLnN0cmlu
Z2lmeShbJ2UnLCB7cGx1cmlidXM6ICd1bnVtJ31dKTsKKyAgICAgICAgICAgIC8vIHRleHQgaXMg
J1siZSIseyJwbHVyaWJ1cyI6InVudW0ifV0nCisKKworICAgICAgICAgICAgdGV4dCA9IEpTT04u
c3RyaW5naWZ5KFsnZScsIHtwbHVyaWJ1czogJ3VudW0nfV0sIG51bGwsICdcdCcpOworICAgICAg
ICAgICAgLy8gdGV4dCBpcyAnW1xuXHQiZSIsXG5cdHtcblx0XHQicGx1cmlidXMiOiAidW51bSJc
blx0fVxuXScKKworICAgICAgICAgICAgdGV4dCA9IEpTT04uc3RyaW5naWZ5KFtuZXcgRGF0ZSgp
XSwgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gdGhpc1tr
ZXldIGluc3RhbmNlb2YgRGF0ZSA/CisgICAgICAgICAgICAgICAgICAgICdEYXRlKCcgKyB0aGlz
W2tleV0gKyAnKScgOiB2YWx1ZTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAgICAgLy8gdGV4
dCBpcyAnWyJEYXRlKC0tLWN1cnJlbnQgdGltZS0tLSkiXScKKworCisgICAgICAgIEpTT04ucGFy
c2UodGV4dCwgcmV2aXZlcikKKyAgICAgICAgICAgIFRoaXMgbWV0aG9kIHBhcnNlcyBhIEpTT04g
dGV4dCB0byBwcm9kdWNlIGFuIG9iamVjdCBvciBhcnJheS4KKyAgICAgICAgICAgIEl0IGNhbiB0
aHJvdyBhIFN5bnRheEVycm9yIGV4Y2VwdGlvbi4KKworICAgICAgICAgICAgVGhlIG9wdGlvbmFs
IHJldml2ZXIgcGFyYW1ldGVyIGlzIGEgZnVuY3Rpb24gdGhhdCBjYW4gZmlsdGVyIGFuZAorICAg
ICAgICAgICAgdHJhbnNmb3JtIHRoZSByZXN1bHRzLiBJdCByZWNlaXZlcyBlYWNoIG9mIHRoZSBr
ZXlzIGFuZCB2YWx1ZXMsCisgICAgICAgICAgICBhbmQgaXRzIHJldHVybiB2YWx1ZSBpcyB1c2Vk
IGluc3RlYWQgb2YgdGhlIG9yaWdpbmFsIHZhbHVlLgorICAgICAgICAgICAgSWYgaXQgcmV0dXJu
cyB3aGF0IGl0IHJlY2VpdmVkLCB0aGVuIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IG1vZGlmaWVkLgor
ICAgICAgICAgICAgSWYgaXQgcmV0dXJucyB1bmRlZmluZWQgdGhlbiB0aGUgbWVtYmVyIGlzIGRl
bGV0ZWQuCisKKyAgICAgICAgICAgIEV4YW1wbGU6CisKKyAgICAgICAgICAgIC8vIFBhcnNlIHRo
ZSB0ZXh0LiBWYWx1ZXMgdGhhdCBsb29rIGxpa2UgSVNPIGRhdGUgc3RyaW5ncyB3aWxsCisgICAg
ICAgICAgICAvLyBiZSBjb252ZXJ0ZWQgdG8gRGF0ZSBvYmplY3RzLgorCisgICAgICAgICAgICBt
eURhdGEgPSBKU09OLnBhcnNlKHRleHQsIGZ1bmN0aW9uIChrZXksIHZhbHVlKSB7CisgICAgICAg
ICAgICAgICAgdmFyIGE7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0
cmluZycpIHsKKyAgICAgICAgICAgICAgICAgICAgYSA9CisvXihcZHs0fSktKFxkezJ9KS0oXGR7
Mn0pVChcZHsyfSk6KFxkezJ9KTooXGR7Mn0oPzpcLlxkKik/KVokLy5leGVjKHZhbHVlKTsKKyAg
ICAgICAgICAgICAgICAgICAgaWYgKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy
biBuZXcgRGF0ZShEYXRlLlVUQygrYVsxXSwgK2FbMl0gLSAxLCArYVszXSwgK2FbNF0sCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgK2FbNV0sICthWzZdKSk7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlOwor
ICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIG15RGF0YSA9IEpTT04ucGFyc2UoJ1siRGF0
ZSgwOS8wOS8yMDAxKSJdJywgZnVuY3Rpb24gKGtleSwgdmFsdWUpIHsKKyAgICAgICAgICAgICAg
ICB2YXIgZDsKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAm
JgorICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUuc2xpY2UoMCwgNSkgPT09ICdEYXRlKCcg
JiYKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLnNsaWNlKC0xKSA9PT0gJyknKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGQgPSBuZXcgRGF0ZSh2YWx1ZS5zbGljZSg1LCAtMSkpOworICAg
ICAgICAgICAgICAgICAgICBpZiAoZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu
IGQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgcmV0dXJuIHZhbHVlOworICAgICAgICAgICAgfSk7CisKKworICAgIFRoaXMgaXMgYSBy
ZWZlcmVuY2UgaW1wbGVtZW50YXRpb24uIFlvdSBhcmUgZnJlZSB0byBjb3B5LCBtb2RpZnksIG9y
CisgICAgcmVkaXN0cmlidXRlLgorCisgICAgVGhpcyBjb2RlIHNob3VsZCBiZSBtaW5pZmllZCBi
ZWZvcmUgZGVwbG95bWVudC4KKyAgICBTZWUgaHR0cDovL2phdmFzY3JpcHQuY3JvY2tmb3JkLmNv
bS9qc21pbi5odG1sCisKKyAgICBVU0UgWU9VUiBPV04gQ09QWS4gSVQgSVMgRVhUUkVNRUxZIFVO
V0lTRSBUTyBMT0FEIENPREUgRlJPTSBTRVJWRVJTIFlPVSBETworICAgIE5PVCBDT05UUk9MLgor
Ki8KKworLypqc2xpbnQgZXZpbDogdHJ1ZSAqLworCisvKmdsb2JhbCBKU09OICovCisKKy8qbWVt
YmVycyAiIiwgIlxiIiwgIlx0IiwgIlxuIiwgIlxmIiwgIlxyIiwgIlwiIiwgSlNPTiwgIlxcIiwg
Y2FsbCwKKyAgICBjaGFyQ29kZUF0LCBnZXRVVENEYXRlLCBnZXRVVENGdWxsWWVhciwgZ2V0VVRD
SG91cnMsIGdldFVUQ01pbnV0ZXMsCisgICAgZ2V0VVRDTW9udGgsIGdldFVUQ1NlY29uZHMsIGhh
c093blByb3BlcnR5LCBqb2luLCBsYXN0SW5kZXgsIGxlbmd0aCwKKyAgICBwYXJzZSwgcHJvcGVy
dHlJc0VudW1lcmFibGUsIHByb3RvdHlwZSwgcHVzaCwgcmVwbGFjZSwgc2xpY2UsIHN0cmluZ2lm
eSwKKyAgICB0ZXN0LCB0b0pTT04sIHRvU3RyaW5nCisqLworCitpZiAoIXRoaXMuSlNPTjIpIHsK
KworLy8gQ3JlYXRlIGEgSlNPTiBvYmplY3Qgb25seSBpZiBvbmUgZG9lcyBub3QgYWxyZWFkeSBl
eGlzdC4gV2UgY3JlYXRlIHRoZQorLy8gb2JqZWN0IGluIGEgY2xvc3VyZSB0byBhdm9pZCBjcmVh
dGluZyBnbG9iYWwgdmFyaWFibGVzLgorCisgICAgSlNPTjIgPSBmdW5jdGlvbiAoKSB7CisKKyAg
ICAgICAgZnVuY3Rpb24gZihuKSB7CisgICAgICAgICAgICAvLyBGb3JtYXQgaW50ZWdlcnMgdG8g
aGF2ZSBhdCBsZWFzdCB0d28gZGlnaXRzLgorICAgICAgICAgICAgcmV0dXJuIG4gPCAxMCA/ICcw
JyArIG4gOiBuOworICAgICAgICB9CisKKyAgICAgICAgRGF0ZS5wcm90b3R5cGUudG9KU09OID0g
ZnVuY3Rpb24gKGtleSkgeworCisgICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRVVENGdWxsWWVh
cigpICAgKyAnLScgKworICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTW9udGgoKSArIDEp
ICsgJy0nICsKKyAgICAgICAgICAgICAgICAgZih0aGlzLmdldFVUQ0RhdGUoKSkgICAgICArICdU
JyArCisgICAgICAgICAgICAgICAgIGYodGhpcy5nZXRVVENIb3VycygpKSAgICAgKyAnOicgKwor
ICAgICAgICAgICAgICAgICBmKHRoaXMuZ2V0VVRDTWludXRlcygpKSAgICsgJzonICsKKyAgICAg
ICAgICAgICAgICAgZih0aGlzLmdldFVUQ1NlY29uZHMoKSkgICArICdaJzsKKyAgICAgICAgfTsK
KworICAgICAgICBTdHJpbmcucHJvdG90eXBlLnRvSlNPTiA9CisgICAgICAgIE51bWJlci5wcm90
b3R5cGUudG9KU09OID0KKyAgICAgICAgQm9vbGVhbi5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rp
b24gKGtleSkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXMudmFsdWVPZigpOworICAgICAgICB9
OworCisgICAgICAgIHZhciBjeCA9IC9bXHUwMDAwXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1
MTdiNFx1MTdiNVx1MjAwYy1cdTIwMGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1
ZmZmMC1cdWZmZmZdL2csCisgICAgICAgICAgICBlc2NhcGVhYmxlID0gL1tcXFwiXHgwMC1ceDFm
XHg3Zi1ceDlmXHUwMGFkXHUwNjAwLVx1MDYwNFx1MDcwZlx1MTdiNFx1MTdiNVx1MjAwYy1cdTIw
MGZcdTIwMjgtXHUyMDJmXHUyMDYwLVx1MjA2Zlx1ZmVmZlx1ZmZmMC1cdWZmZmZdL2csCisgICAg
ICAgICAgICBnYXAsCisgICAgICAgICAgICBpbmRlbnQsCisgICAgICAgICAgICBtZXRhID0geyAg
ICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucworICAgICAgICAgICAgICAgICdc
Yic6ICdcXGInLAorICAgICAgICAgICAgICAgICdcdCc6ICdcXHQnLAorICAgICAgICAgICAgICAg
ICdcbic6ICdcXG4nLAorICAgICAgICAgICAgICAgICdcZic6ICdcXGYnLAorICAgICAgICAgICAg
ICAgICdccic6ICdcXHInLAorICAgICAgICAgICAgICAgICciJyA6ICdcXCInLAorICAgICAgICAg
ICAgICAgICdcXCc6ICdcXFxcJworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlcDsKKwor
CisgICAgICAgIGZ1bmN0aW9uIHF1b3RlKHN0cmluZykgeworCisvLyBJZiB0aGUgc3RyaW5nIGNv
bnRhaW5zIG5vIGNvbnRyb2wgY2hhcmFjdGVycywgbm8gcXVvdGUgY2hhcmFjdGVycywgYW5kIG5v
CisvLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBx
dW90ZXMgYXJvdW5kIGl0LgorLy8gT3RoZXJ3aXNlIHdlIG11c3QgYWxzbyByZXBsYWNlIHRoZSBv
ZmZlbmRpbmcgY2hhcmFjdGVycyB3aXRoIHNhZmUgZXNjYXBlCisvLyBzZXF1ZW5jZXMuCisKKyAg
ICAgICAgICAgIGVzY2FwZWFibGUubGFzdEluZGV4ID0gMDsKKyAgICAgICAgICAgIHJldHVybiBl
c2NhcGVhYmxlLnRlc3Qoc3RyaW5nKSA/CisgICAgICAgICAgICAgICAgJyInICsgc3RyaW5nLnJl
cGxhY2UoZXNjYXBlYWJsZSwgZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgdmFy
IGMgPSBtZXRhW2FdOworICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGMgPT09ICdzdHJp
bmcnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYzsKKyAgICAgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ1xcdScgKyAoJzAwMDAnICsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAoKyhhLmNoYXJDb2RlQXQoMCkpKS50b1N0cmluZygx
NikpLnNsaWNlKC00KTsKKyAgICAgICAgICAgICAgICB9KSArICciJyA6CisgICAgICAgICAgICAg
ICAgJyInICsgc3RyaW5nICsgJyInOworICAgICAgICB9CisKKworICAgICAgICBmdW5jdGlvbiBz
dHIoa2V5LCBob2xkZXIpIHsKKworLy8gUHJvZHVjZSBhIHN0cmluZyBmcm9tIGhvbGRlcltrZXld
LgorCisgICAgICAgICAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci4KKyAg
ICAgICAgICAgICAgICBrLCAgICAgICAgICAvLyBUaGUgbWVtYmVyIGtleS4KKyAgICAgICAgICAg
ICAgICB2LCAgICAgICAgICAvLyBUaGUgbWVtYmVyIHZhbHVlLgorICAgICAgICAgICAgICAgIGxl
bmd0aCwKKyAgICAgICAgICAgICAgICBtaW5kID0gZ2FwLAorICAgICAgICAgICAgICAgIHBhcnRp
YWwsCisgICAgICAgICAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTsKKworLy8gSWYgdGhlIHZh
bHVlIGhhcyBhIHRvSlNPTiBtZXRob2QsIGNhbGwgaXQgdG8gb2J0YWluIGEgcmVwbGFjZW1lbnQg
dmFsdWUuCisKKyAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmpl
Y3QnICYmCisgICAgICAgICAgICAgICAgICAgIHR5cGVvZiB2YWx1ZS50b0pTT04gPT09ICdmdW5j
dGlvbicpIHsKKyAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpOworICAg
ICAgICAgICAgfQorCisvLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rp
b24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG8KKy8vIG9idGFpbiBhIHJlcGxhY2VtZW50IHZh
bHVlLgorCisgICAgICAgICAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykgeworICAg
ICAgICAgICAgICAgIHZhbHVlID0gcmVwLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTsKKyAgICAg
ICAgICAgIH0KKworLy8gV2hhdCBoYXBwZW5zIG5leHQgZGVwZW5kcyBvbiB0aGUgdmFsdWUncyB0
eXBlLgorCisgICAgICAgICAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkgeworICAgICAgICAgICAg
Y2FzZSAnc3RyaW5nJzoKKyAgICAgICAgICAgICAgICByZXR1cm4gcXVvdGUodmFsdWUpOworCisg
ICAgICAgICAgICBjYXNlICdudW1iZXInOgorCisvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5p
dGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC4KKworICAgICAgICAgICAgICAg
IHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnOworCisgICAg
ICAgICAgICBjYXNlICdib29sZWFuJzoKKyAgICAgICAgICAgIGNhc2UgJ251bGwnOgorCisvLyBJ
ZiB0aGUgdmFsdWUgaXMgYSBib29sZWFuIG9yIG51bGwsIGNvbnZlcnQgaXQgdG8gYSBzdHJpbmcu
IE5vdGU6CisvLyB0eXBlb2YgbnVsbCBkb2VzIG5vdCBwcm9kdWNlICdudWxsJy4gVGhlIGNhc2Ug
aXMgaW5jbHVkZWQgaGVyZSBpbgorLy8gdGhlIHJlbW90ZSBjaGFuY2UgdGhhdCB0aGlzIGdldHMg
Zml4ZWQgc29tZWRheS4KKworICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmcodmFsdWUpOwor
CisvLyBJZiB0aGUgdHlwZSBpcyAnb2JqZWN0Jywgd2UgbWlnaHQgYmUgZGVhbGluZyB3aXRoIGFu
IG9iamVjdCBvciBhbiBhcnJheSBvcgorLy8gbnVsbC4KKworICAgICAgICAgICAgY2FzZSAnb2Jq
ZWN0JzoKKworLy8gRHVlIHRvIGEgc3BlY2lmaWNhdGlvbiBibHVuZGVyIGluIEVDTUFTY3JpcHQs
IHR5cGVvZiBudWxsIGlzICdvYmplY3QnLAorLy8gc28gd2F0Y2ggb3V0IGZvciB0aGF0IGNhc2Uu
CisKKyAgICAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgIHJl
dHVybiAnbnVsbCc7CisgICAgICAgICAgICAgICAgfQorCisvLyBNYWtlIGFuIGFycmF5IHRvIGhv
bGQgdGhlIHBhcnRpYWwgcmVzdWx0cyBvZiBzdHJpbmdpZnlpbmcgdGhpcyBvYmplY3QgdmFsdWUu
CisKKyAgICAgICAgICAgICAgICBnYXAgKz0gaW5kZW50OworICAgICAgICAgICAgICAgIHBhcnRp
YWwgPSBbXTsKKworLy8gSWYgdGhlIG9iamVjdCBoYXMgYSBkb250RW51bSBsZW5ndGggcHJvcGVy
dHksIHdlJ2xsIHRyZWF0IGl0IGFzIGFuIGFycmF5LgorCisgICAgICAgICAgICAgICAgaWYgKHR5
cGVvZiB2YWx1ZS5sZW5ndGggPT09ICdudW1iZXInICYmCisgICAgICAgICAgICAgICAgICAgICAg
ICAhKHZhbHVlLnByb3BlcnR5SXNFbnVtZXJhYmxlKCdsZW5ndGgnKSkpIHsKKworLy8gVGhlIG9i
amVjdCBpcyBhbiBhcnJheS4gU3RyaW5naWZ5IGV2ZXJ5IGVsZW1lbnQuIFVzZSBudWxsIGFzIGEg
cGxhY2Vob2xkZXIKKy8vIGZvciBub24tSlNPTiB2YWx1ZXMuCisKKyAgICAgICAgICAgICAgICAg
ICAgbGVuZ3RoID0gdmFsdWUubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAw
OyBpIDwgbGVuZ3RoOyBpICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWxb
aV0gPSBzdHIoaSwgdmFsdWUpIHx8ICdudWxsJzsKKyAgICAgICAgICAgICAgICAgICAgfQorCisv
LyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1h
cywgYW5kIHdyYXAgdGhlbSBpbgorLy8gYnJhY2tldHMuCisKKyAgICAgICAgICAgICAgICAgICAg
diA9IHBhcnRpYWwubGVuZ3RoID09PSAwID8gJ1tdJyA6CisgICAgICAgICAgICAgICAgICAgICAg
ICBnYXAgPyAnW1xuJyArIGdhcCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBh
cnRpYWwuam9pbignLFxuJyArIGdhcCkgKyAnXG4nICsKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1pbmQgKyAnXScgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
J1snICsgcGFydGlhbC5qb2luKCcsJykgKyAnXSc7CisgICAgICAgICAgICAgICAgICAgIGdhcCA9
IG1pbmQ7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB2OworICAgICAgICAgICAgICAgIH0K
KworLy8gSWYgdGhlIHJlcGxhY2VyIGlzIGFuIGFycmF5LCB1c2UgaXQgdG8gc2VsZWN0IHRoZSBt
ZW1iZXJzIHRvIGJlIHN0cmluZ2lmaWVkLgorCisgICAgICAgICAgICAgICAgaWYgKHJlcCAmJiB0
eXBlb2YgcmVwID09PSAnb2JqZWN0JykgeworICAgICAgICAgICAgICAgICAgICBsZW5ndGggPSBy
ZXAubGVuZ3RoOworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBp
ICs9IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGsgPSByZXBbaV07CisgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAodHlwZW9mIGsgPT09ICdzdHJpbmcnKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSwgcmVwKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAodikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJ0
aWFsLnB1c2gocXVvdGUoaykgKyAoZ2FwID8gJzogJyA6ICc6JykgKyB2KTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworCisvLyBPdGhlcndpc2UsIGl0
ZXJhdGUgdGhyb3VnaCBhbGwgb2YgdGhlIGtleXMgaW4gdGhlIG9iamVjdC4KKworICAgICAgICAg
ICAgICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChPYmplY3QuaGFzT3duUHJvcGVydHkuY2FsbCh2YWx1ZSwgaykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlLCByZXApOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICh2KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRp
YWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKworLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJl
ciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLAorLy8gYW5kIHdyYXAgdGhl
bSBpbiBicmFjZXMuCisKKyAgICAgICAgICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAg
PyAne30nIDoKKyAgICAgICAgICAgICAgICAgICAgZ2FwID8gJ3tcbicgKyBnYXAgKyBwYXJ0aWFs
LmpvaW4oJyxcbicgKyBnYXApICsgJ1xuJyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bWluZCArICd9JyA6ICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nOworICAgICAgICAgICAg
ICAgIGdhcCA9IG1pbmQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHY7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKworLy8gUmV0dXJuIHRoZSBKU09OIG9iamVjdCBjb250YWluaW5nIHRoZSBz
dHJpbmdpZnkgYW5kIHBhcnNlIG1ldGhvZHMuCisKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHN0cmluZ2lmeTogZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHsKKworLy8g
VGhlIHN0cmluZ2lmeSBtZXRob2QgdGFrZXMgYSB2YWx1ZSBhbmQgYW4gb3B0aW9uYWwgcmVwbGFj
ZXIsIGFuZCBhbiBvcHRpb25hbAorLy8gc3BhY2UgcGFyYW1ldGVyLCBhbmQgcmV0dXJucyBhIEpT
T04gdGV4dC4gVGhlIHJlcGxhY2VyIGNhbiBiZSBhIGZ1bmN0aW9uCisvLyB0aGF0IGNhbiByZXBs
YWNlIHZhbHVlcywgb3IgYW4gYXJyYXkgb2Ygc3RyaW5ncyB0aGF0IHdpbGwgc2VsZWN0IHRoZSBr
ZXlzLgorLy8gQSBkZWZhdWx0IHJlcGxhY2VyIG1ldGhvZCBjYW4gYmUgcHJvdmlkZWQuIFVzZSBv
ZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGNhbgorLy8gcHJvZHVjZSB0ZXh0IHRoYXQgaXMgbW9yZSBl
YXNpbHkgcmVhZGFibGUuCisKKyAgICAgICAgICAgICAgICB2YXIgaTsKKyAgICAgICAgICAgICAg
ICBnYXAgPSAnJzsKKyAgICAgICAgICAgICAgICBpbmRlbnQgPSAnJzsKKworLy8gSWYgdGhlIHNw
YWNlIHBhcmFtZXRlciBpcyBhIG51bWJlciwgbWFrZSBhbiBpbmRlbnQgc3RyaW5nIGNvbnRhaW5p
bmcgdGhhdAorLy8gbWFueSBzcGFjZXMuCisKKyAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHNw
YWNlID09PSAnbnVtYmVyJykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwg
c3BhY2U7IGkgKz0gMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5kZW50ICs9ICcgJzsK
KyAgICAgICAgICAgICAgICAgICAgfQorCisvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEg
c3RyaW5nLCBpdCB3aWxsIGJlIHVzZWQgYXMgdGhlIGluZGVudCBzdHJpbmcuCisKKyAgICAgICAg
ICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHsKKyAgICAgICAg
ICAgICAgICAgICAgaW5kZW50ID0gc3BhY2U7CisgICAgICAgICAgICAgICAgfQorCisvLyBJZiB0
aGVyZSBpcyBhIHJlcGxhY2VyLCBpdCBtdXN0IGJlIGEgZnVuY3Rpb24gb3IgYW4gYXJyYXkuCisv
LyBPdGhlcndpc2UsIHRocm93IGFuIGVycm9yLgorCisgICAgICAgICAgICAgICAgcmVwID0gcmVw
bGFjZXI7CisgICAgICAgICAgICAgICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAh
PT0gJ2Z1bmN0aW9uJyAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHR5cGVvZiByZXBsYWNl
ciAhPT0gJ29iamVjdCcgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgcmVwbGFj
ZXIubGVuZ3RoICE9PSAnbnVtYmVyJykpIHsKKyAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCdKU09OLnN0cmluZ2lmeScpOworICAgICAgICAgICAgICAgIH0KKworLy8gTWFrZSBh
IGZha2Ugcm9vdCBvYmplY3QgY29udGFpbmluZyBvdXIgdmFsdWUgdW5kZXIgdGhlIGtleSBvZiAn
Jy4KKy8vIFJldHVybiB0aGUgcmVzdWx0IG9mIHN0cmluZ2lmeWluZyB0aGUgdmFsdWUuCisKKyAg
ICAgICAgICAgICAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7CisgICAgICAgICAgICB9
LAorCisKKyAgICAgICAgICAgIHBhcnNlOiBmdW5jdGlvbiAodGV4dCwgcmV2aXZlcikgeworCisv
LyBUaGUgcGFyc2UgbWV0aG9kIHRha2VzIGEgdGV4dCBhbmQgYW4gb3B0aW9uYWwgcmV2aXZlciBm
dW5jdGlvbiwgYW5kIHJldHVybnMKKy8vIGEgSmF2YVNjcmlwdCB2YWx1ZSBpZiB0aGUgdGV4dCBp
cyBhIHZhbGlkIEpTT04gdGV4dC4KKworICAgICAgICAgICAgICAgIHZhciBqOworCisgICAgICAg
ICAgICAgICAgZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkgeworCisvLyBUaGUgd2FsayBtZXRo
b2QgaXMgdXNlZCB0byByZWN1cnNpdmVseSB3YWxrIHRoZSByZXN1bHRpbmcgc3RydWN0dXJlIHNv
CisvLyB0aGF0IG1vZGlmaWNhdGlvbnMgY2FuIGJlIG1hZGUuCisKKyAgICAgICAgICAgICAgICAg
ICAgdmFyIGssIHYsIHZhbHVlID0gaG9sZGVyW2tleV07CisgICAgICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSAmJiB0eXBlb2YgdmFsdWUgPT09ICdvYmplY3QnKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBmb3IgKGsgaW4gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
ZiAoT2JqZWN0Lmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2OworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVs
ZXRlIHZhbHVlW2tdOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwo
aG9sZGVyLCBrZXksIHZhbHVlKTsKKyAgICAgICAgICAgICAgICB9CisKKworLy8gUGFyc2luZyBo
YXBwZW5zIGluIGZvdXIgc3RhZ2VzLiBJbiB0aGUgZmlyc3Qgc3RhZ2UsIHdlIHJlcGxhY2UgY2Vy
dGFpbgorLy8gVW5pY29kZSBjaGFyYWN0ZXJzIHdpdGggZXNjYXBlIHNlcXVlbmNlcy4gSmF2YVNj
cmlwdCBoYW5kbGVzIG1hbnkgY2hhcmFjdGVycworLy8gaW5jb3JyZWN0bHksIGVpdGhlciBzaWxl
bnRseSBkZWxldGluZyB0aGVtLCBvciB0cmVhdGluZyB0aGVtIGFzIGxpbmUgZW5kaW5ncy4KKwor
ICAgICAgICAgICAgICAgIGN4Lmxhc3RJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGN4
LnRlc3QodGV4dCkpIHsKKyAgICAgICAgICAgICAgICAgICAgdGV4dCA9IHRleHQucmVwbGFjZShj
eCwgZnVuY3Rpb24gKGEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnXFx1JyAr
ICgnMDAwMCcgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKyhhLmNoYXJDb2Rl
QXQoMCkpKS50b1N0cmluZygxNikpLnNsaWNlKC00KTsKKyAgICAgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgICAgICAgICAgfQorCisvLyBJbiB0aGUgc2Vjb25kIHN0YWdlLCB3ZSBydW4gdGhl
IHRleHQgYWdhaW5zdCByZWd1bGFyIGV4cHJlc3Npb25zIHRoYXQgbG9vaworLy8gZm9yIG5vbi1K
U09OIHBhdHRlcm5zLiBXZSBhcmUgZXNwZWNpYWxseSBjb25jZXJuZWQgd2l0aCAnKCknIGFuZCAn
bmV3JworLy8gYmVjYXVzZSB0aGV5IGNhbiBjYXVzZSBpbnZvY2F0aW9uLCBhbmQgJz0nIGJlY2F1
c2UgaXQgY2FuIGNhdXNlIG11dGF0aW9uLgorLy8gQnV0IGp1c3QgdG8gYmUgc2FmZSwgd2Ugd2Fu
dCB0byByZWplY3QgYWxsIHVuZXhwZWN0ZWQgZm9ybXMuCisKKy8vIFdlIHNwbGl0IHRoZSBzZWNv
bmQgc3RhZ2UgaW50byA0IHJlZ2V4cCBvcGVyYXRpb25zIGluIG9yZGVyIHRvIHdvcmsgYXJvdW5k
CisvLyBjcmlwcGxpbmcgaW5lZmZpY2llbmNpZXMgaW4gSUUncyBhbmQgU2FmYXJpJ3MgcmVnZXhw
IGVuZ2luZXMuIEZpcnN0IHdlCisvLyByZXBsYWNlIHRoZSBKU09OIGJhY2tzbGFzaCBwYWlycyB3
aXRoICdAJyAoYSBub24tSlNPTiBjaGFyYWN0ZXIpLiBTZWNvbmQsIHdlCisvLyByZXBsYWNlIGFs
bCBzaW1wbGUgdmFsdWUgdG9rZW5zIHdpdGggJ10nIGNoYXJhY3RlcnMuIFRoaXJkLCB3ZSBkZWxl
dGUgYWxsCisvLyBvcGVuIGJyYWNrZXRzIHRoYXQgZm9sbG93IGEgY29sb24gb3IgY29tbWEgb3Ig
dGhhdCBiZWdpbiB0aGUgdGV4dC4gRmluYWxseSwKKy8vIHdlIGxvb2sgdG8gc2VlIHRoYXQgdGhl
IHJlbWFpbmluZyBjaGFyYWN0ZXJzIGFyZSBvbmx5IHdoaXRlc3BhY2Ugb3IgJ10nIG9yCisvLyAn
LCcgb3IgJzonIG9yICd7JyBvciAnfScuIElmIHRoYXQgaXMgc28sIHRoZW4gdGhlIHRleHQgaXMg
c2FmZSBmb3IgZXZhbC4KKworICAgICAgICAgICAgICAgIGlmICgvXltcXSw6e31cc10qJC8uCit0
ZXN0KHRleHQucmVwbGFjZSgvXFwoPzpbIlxcXC9iZm5ydF18dVswLTlhLWZBLUZdezR9KS9nLCAn
QCcpLgorcmVwbGFjZSgvIlteIlxcXG5ccl0qInx0cnVlfGZhbHNlfG51bGx8LT9cZCsoPzpcLlxk
Kik/KD86W2VFXVsrXC1dP1xkKyk/L2csICddJykuCityZXBsYWNlKC8oPzpefDp8LCkoPzpccypc
WykrL2csICcnKSkpIHsKKworLy8gSW4gdGhlIHRoaXJkIHN0YWdlIHdlIHVzZSB0aGUgZXZhbCBm
dW5jdGlvbiB0byBjb21waWxlIHRoZSB0ZXh0IGludG8gYQorLy8gSmF2YVNjcmlwdCBzdHJ1Y3R1
cmUuIFRoZSAneycgb3BlcmF0b3IgaXMgc3ViamVjdCB0byBhIHN5bnRhY3RpYyBhbWJpZ3VpdHkK
Ky8vIGluIEphdmFTY3JpcHQ6IGl0IGNhbiBiZWdpbiBhIGJsb2NrIG9yIGFuIG9iamVjdCBsaXRl
cmFsLiBXZSB3cmFwIHRoZSB0ZXh0CisvLyBpbiBwYXJlbnMgdG8gZWxpbWluYXRlIHRoZSBhbWJp
Z3VpdHkuCisKKyAgICAgICAgICAgICAgICAgICAgaiA9IGV2YWwoJygnICsgdGV4dCArICcpJyk7
CisKKy8vIEluIHRoZSBvcHRpb25hbCBmb3VydGggc3RhZ2UsIHdlIHJlY3Vyc2l2ZWx5IHdhbGsg
dGhlIG5ldyBzdHJ1Y3R1cmUsIHBhc3NpbmcKKy8vIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIGEg
cmV2aXZlciBmdW5jdGlvbiBmb3IgcG9zc2libGUgdHJhbnNmb3JtYXRpb24uCisKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiByZXZpdmVyID09PSAnZnVuY3Rpb24nID8KKyAgICAg
ICAgICAgICAgICAgICAgICAgIHdhbGsoeycnOiBqfSwgJycpIDogajsKKyAgICAgICAgICAgICAg
ICB9CisKKy8vIElmIHRoZSB0ZXh0IGlzIG5vdCBKU09OIHBhcnNlYWJsZSwgdGhlbiBhIFN5bnRh
eEVycm9yIGlzIHRocm93bi4KKworICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJv
cignSlNPTi5wYXJzZScpOworICAgICAgICAgICAgfQorICAgICAgICB9OworICAgIH0oKTsKK30K
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvcGFzczEuanNvbgo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL3Bhc3MxLmpzb24J
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL3Bhc3Mx
Lmpzb24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNTggQEAKK1sKKyAgICAiSlNPTiBUZXN0IFBh
dHRlcm4gcGFzczEiLAorICAgIHsib2JqZWN0IHdpdGggMSBtZW1iZXIiOlsiYXJyYXkgd2l0aCAx
IGVsZW1lbnQiXX0sCisgICAge30sCisgICAgW10sCisgICAgLTQyLAorICAgIHRydWUsCisgICAg
ZmFsc2UsCisgICAgbnVsbCwKKyAgICB7CisgICAgICAgICJpbnRlZ2VyIjogMTIzNDU2Nzg5MCwK
KyAgICAgICAgInJlYWwiOiAtOTg3Ni41NDMyMTAsCisgICAgICAgICJlIjogMC4xMjM0NTY3ODll
LTEyLAorICAgICAgICAiRSI6IDEuMjM0NTY3ODkwRSszNCwKKyAgICAgICAgIiI6ICAyMzQ1Njc4
OTAxMkU2NiwKKyAgICAgICAgInplcm8iOiAwLAorICAgICAgICAib25lIjogMSwKKyAgICAgICAg
InNwYWNlIjogIiAiLAorICAgICAgICAicXVvdGUiOiAiXCIiLAorICAgICAgICAiYmFja3NsYXNo
IjogIlxcIiwKKyAgICAgICAgImNvbnRyb2xzIjogIlxiXGZcblxyXHQiLAorICAgICAgICAic2xh
c2giOiAiLyAmIFwvIiwKKyAgICAgICAgImFscGhhIjogImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3
eXoiLAorICAgICAgICAiQUxQSEEiOiAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldZWiIsCisgICAg
ICAgICJkaWdpdCI6ICIwMTIzNDU2Nzg5IiwKKyAgICAgICAgIjAxMjM0NTY3ODkiOiAiZGlnaXQi
LAorICAgICAgICAic3BlY2lhbCI6ICJgMX4hQCMkJV4mKigpXystPXsnOlssXX18Oy48Lz4/IiwK
KyAgICAgICAgImhleCI6ICJcdTAxMjNcdTQ1NjdcdTg5QUJcdUNERUZcdWFiY2RcdWVmNEEiLAor
ICAgICAgICAidHJ1ZSI6IHRydWUsCisgICAgICAgICJmYWxzZSI6IGZhbHNlLAorICAgICAgICAi
bnVsbCI6IG51bGwsCisgICAgICAgICJhcnJheSI6WyAgXSwKKyAgICAgICAgIm9iamVjdCI6eyAg
fSwKKyAgICAgICAgImFkZHJlc3MiOiAiNTAgU3QuIEphbWVzIFN0cmVldCIsCisgICAgICAgICJ1
cmwiOiAiaHR0cDovL3d3dy5KU09OLm9yZy8iLAorICAgICAgICAiY29tbWVudCI6ICIvLyAvKiA8
IS0tIC0tIiwKKyAgICAgICAgIiMgLS0gLS0+ICovIjogIiAiLAorICAgICAgICAiIHMgcCBhIGMg
ZSBkICIgOlsxLDIgLCAzCisKKywKKworNCAsIDUgICAgICAgICwgICAgICAgICAgNiAgICAgICAg
ICAgLDcgICAgICAgIF0sImNvbXBhY3QiOlsxLDIsMyw0LDUsNiw3XSwKKyAgICAgICAgImpzb250
ZXh0IjogIntcIm9iamVjdCB3aXRoIDEgbWVtYmVyXCI6W1wiYXJyYXkgd2l0aCAxIGVsZW1lbnRc
Il19IiwKKyAgICAgICAgInF1b3RlcyI6ICImIzM0OyBcdTAwMjIgJTIyIDB4MjIgMDM0ICYjeDIy
OyIsCisgICAgICAgICJcL1xcXCJcdUNBRkVcdUJBQkVcdUFCOThcdUZDREVcdWJjZGFcdWVmNEFc
YlxmXG5cclx0YDF+IUAjJCVeJiooKV8rLT1bXXt9fDs6JywuLzw+PyIKKzogIkEga2V5IGNhbiBi
ZSBhbnkgc3RyaW5nIgorICAgIH0sCisgICAgMC41ICw5OC42CissCis5OS40NAorLAorCisxMDY2
LAorMWUxLAorMC4xZTEsCisxZS0xLAorMWUwMCwyZSswMCwyZS0wMAorLCJyb3NlYnVkIl0KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvSlNPTi9yZXNvdXJjZXMvcGFzczMuanNvbgo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL3Bhc3MzLmpzb24JKHJl
dmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL0pTT04vcmVzb3VyY2VzL3Bhc3MzLmpz
b24JKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNyBAQAoreworICAgICJKU09OIFRlc3QgUGF0dGVy
biBwYXNzMyI6IHsKKyAgICAgICAgIlRoZSBvdXRlcm1vc3QgdmFsdWUiOiAibXVzdCBiZSBhbiBv
YmplY3Qgb3IgYXJyYXkuIiwKKyAgICAgICAgIkluIHRoaXMgdGVzdCI6ICJJdCBpcyBhbiBvYmpl
Y3QuIgorICAgIH0KK30KKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9qcy9KU09OL3Jlc291cmNl
cy93ZWJraXQucGFzczEuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL0pT
T04vcmVzb3VyY2VzL3dlYmtpdC5wYXNzMS5qc29uCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9qcy9KU09OL3Jlc291cmNlcy93ZWJraXQucGFzczEuanNvbgkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSBAQAorW1tbW1tbW1tbW1tbW1tbW1tbW1siVG9vIGRlZXAiXV1dXV1dXV1dXV1d
XV1dXV1dXV0KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>
<flag name="review"
          id="15244"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>30295</attachid>
            <date>2009-05-13 16:28:19 -0700</date>
            <delta_ts>2009-05-22 19:50:36 -0700</delta_ts>
            <desc>Patch to add JSON object - remove tabs</desc>
            <filename>add-json-object.patch</filename>
            <type>text/plain</type>
            <size>63045</size>
            <attacher name="Husam Senussi">husam</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDQzNjY4KQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNzEgQEAKKzIwMDktMDUtMTMgIEh1c2FtIFNl
bnVzc2kgIDxodXNhbUBzZW51c3NpLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBBZGQgSlNPTiBvYmplY3QKKworICAgICAgICAqIEFsbEluT25l
RmlsZS5jcHA6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6CisgICAgICAgICogSmF2
YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvajoK
KyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAg
ICAgICAqIEphdmFTY3JpcHRDb3JlU291cmNlcy5ia2w6CisgICAgICAgICogSnNvbi5jcHA6IEFk
ZGVkLgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxGcmFtZS5oOgorICAgICAgICAoSlNDOjpF
eGVjU3RhdGU6Ompzb25UYWJsZSk6CisgICAgICAgICogcGFyc2VyL0pTT05HcmFtbWFyLnk6IEFk
ZGVkLgorICAgICAgICAqIHBhcnNlci9KU09OTGV4ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6aXNXaGl0ZVNwYWNlKToKKyAgICAgICAgKEpTQzo6aXNEaWdpdCk6CisgICAgICAgIChKU0M6
OmlzSGV4KToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjpKU09OTGV4ZXIpOgorICAgICAgICAo
SlNDOjpKU09OTGV4ZXI6OnNldENvZGUpOgorICAgICAgICAoSlNDOjpKU09OTGV4ZXI6OmNsZWFy
KToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjpza2lwZVdoaXRlU3BhY2VzKToKKyAgICAgICAg
KEpTQzo6SlNPTkxleGVyOjpzaGlmdCk6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6bGV4KToK
KyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjpyZWFkRGlnaXRzKToKKyAgICAgICAgKEpTQzo6SlNP
TkxleGVyOjpyZWFkTnVtYmVyKToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjpyZWFkU3RyaW5n
KToKKyAgICAgICAgKEpTQzo6SlNPTkxleGVyOjphZGRVbmljb2RlKToKKyAgICAgICAgKEpTQzo6
SlNPTkxleGVyOjphZGRBc2NpaSk6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6Y29udmVydEhl
eCk6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6Y29udmVydFVuaWNvZGUpOgorICAgICAgICAo
SlNDOjpKU09OTGV4ZXI6Om1ha2VJZGVudGlmaWVyKToKKyAgICAgICAgKiBwYXJzZXIvSlNPTkxl
eGVyLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU09OTGV4ZXI6On5KU09OTGV4ZXIpOgorICAg
ICAgICAoSlNDOjpKU09OTGV4ZXI6OmxpbmVObyk6CisgICAgICAgIChKU0M6OkpTT05MZXhlcjo6
Y29sdW1uTm8pOgorICAgICAgICAoSlNDOjpKU09OTGV4ZXI6OnNldEdsb2JhbERhdGEpOgorICAg
ICAgICAoSlNDOjpKU09OTGV4ZXI6OnNhd0Vycm9yKToKKyAgICAgICAgKiBwYXJzZXIvSlNPTlBh
cnNlci5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU09OUGFyc2VyOjpwYXJzZSk6CisgICAg
ICAgIChKU0M6OkpTT05QYXJzZXI6OmRpZEZpbmlzaFBhcnNpbmcpOgorICAgICAgICAoSlNDOjpK
U09OUGFyc2VyOjpsb2cpOgorICAgICAgICAqIHBhcnNlci9KU09OUGFyc2VyLmg6IEFkZGVkLgor
ICAgICAgICAoSlNDOjpKU09OUGFyc2VyOjpnZXRMZXhlcik6CisgICAgICAgIChKU0M6OkpTT05Q
YXJzZXI6OnBhcnNlKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0YS5jcHA6CisgICAg
ICAgIChKU0M6OkpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKEpTQzo6SlNH
bG9iYWxEYXRhOjp+SlNHbG9iYWxEYXRhKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsRGF0
YS5oOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlND
OjpKU0dsb2JhbE9iamVjdDo6cmVzZXQpOgorICAgICAgICAqIHJ1bnRpbWUvSlNPTk9iamVjdC5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjopOgorICAgICAgICAoSlNDOjpKU09OT2JqZWN0Ojpn
ZXRPd25Qcm9wZXJ0eVNsb3QpOgorICAgICAgICAoSlNDOjpjYWxsUmV2aXZlcik6CisgICAgICAg
IChKU0M6OmJ1aWxkU3RyaW5nKToKKyAgICAgICAgKEpTQzo6dG9KU09OKToKKyAgICAgICAgKEpT
Qzo6c3RyaW5naWZ5KToKKyAgICAgICAgKEpTQzo6SlNPTlByb3RvRnVuY1BhcnNlKToKKyAgICAg
ICAgKEpTQzo6SlNPTlByb3RvRnVuY1N0cmluZ2lmeSk6CisgICAgICAgICogcnVudGltZS9KU09O
T2JqZWN0Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpKU09OT2JqZWN0Ojo6SlNPYmplY3QpOgor
ICAgICAgICAoSlNDOjpKU09OT2JqZWN0OjpjbGFzc0luZm8pOgorICAgICAgICAoSlNDOjpKU09O
T2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmUpOgorCiAyMDA5LTA1LTEzICBHYXZpbiBCYXJyYWNsb3Vn
aCAgPGJhcnJhY2xvdWdoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIg
SHVudC4KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0FsbEluT25lRmlsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvQWxsSW5PbmVGaWxlLmNwcAkocmV2aXNpb24gNDM2NjcpCisrKyBK
YXZhU2NyaXB0Q29yZS9BbGxJbk9uZUZpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MCw2ICs3
MCw3IEBACiAjaW5jbHVkZSAicnVudGltZS9BcmdMaXN0LmNwcCIKICNpbmNsdWRlICJydW50aW1l
L0xvb2t1cC5jcHAiCiAjaW5jbHVkZSAicnVudGltZS9NYXRoT2JqZWN0LmNwcCIKKyNpbmNsdWRl
ICJydW50aW1lL0pTT05PYmplY3QuY3BwIgogI2luY2x1ZGUgInJ1bnRpbWUvTmF0aXZlRXJyb3JD
b25zdHJ1Y3Rvci5jcHAiCiAjaW5jbHVkZSAicnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5j
cHAiCiAjaW5jbHVkZSAicnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAiCkluZGV4OiBKYXZh
U2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRD
b3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UJKHJldmlzaW9uIDQzNjY3KQorKysgSmF2YVNjcmlwdENv
cmUvRGVyaXZlZFNvdXJjZXMubWFrZQkod29ya2luZyBjb3B5KQpAQCAtNDAsOCArNDAsMTAgQEAg
YWxsIDogXAogICAgIGNoYXJ0YWJsZXMuYyBcCiAgICAgRGF0ZVByb3RvdHlwZS5sdXQuaCBcCiAg
ICAgR3JhbW1hci5jcHAgXAorCUpTT05HcmFtbWFyLmNwcCBcCiAgICAgTGV4ZXIubHV0LmggXAog
ICAgIE1hdGhPYmplY3QubHV0LmggXAorCUpTT05PYmplY3QubHV0LmggXAogICAgIE51bWJlckNv
bnN0cnVjdG9yLmx1dC5oIFwKICAgICBSZWdFeHBDb25zdHJ1Y3Rvci5sdXQuaCBcCiAgICAgUmVn
RXhwT2JqZWN0Lmx1dC5oIFwKQEAgLTY2LDYgKzY4LDE2IEBAIEdyYW1tYXIuY3BwOiBHcmFtbWFy
LnkKIAljYXQgR3JhbW1hci5jcHAuaCBHcmFtbWFyLmhwcCA+IEdyYW1tYXIuaAogCXJtIC1mIEdy
YW1tYXIuY3BwLmggR3JhbW1hci5ocHAgYmlzb25fb3V0LnR4dAogCisjIEpTT04gZ3JhbW1hcgor
CitKU09OR3JhbW1hci5jcHA6IEpTT05HcmFtbWFyLnkKKwliaXNvbiAtZCAtcCBqc29ueXkgJDwg
LW8gJEAgPiBqc29uX2Jpc29uX291dC50eHQgMj4mMQorCXBlcmwgLXAgLWUgJ0VORCB7IGlmICgk
JGNvbmZsaWN0KSB7IHVubGluayAiSlNPTkdyYW1tYXIuY3BwIjsgZGllOyB9IH0gJCRjb25mbGlj
dCB8fD0gL2NvbmZsaWN0LycgPCBqc29uX2Jpc29uX291dC50eHQKKwl0b3VjaCBKU09OR3JhbW1h
ci5jcHAuaAorCXRvdWNoIEpTT05HcmFtbWFyLmhwcAorCWNhdCBKU09OR3JhbW1hci5jcHAuaCBK
U09OR3JhbW1hci5ocHAgPiBKU09OR3JhbW1hci5oCisJcm0gLWYgSlNPTkdyYW1tYXIuY3BwLmgg
SlNPTkdyYW1tYXIuaHBwIGpzb25fYmlzb25fb3V0LnR4dAorCiAjIGNoYXJhY3RlciB0YWJsZXMg
Zm9yIFBDUkUKIAogY2hhcnRhYmxlcy5jIDogZGZ0YWJsZXMKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiA0MzY2NykKKysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBAIGphdmFzY3JpcHRjb3JlX2J1aWx0X25vc291
cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5sdXQuaCBc
CiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9EYXRlUHJvdG90eXBlLmx1dC5oIFwKIAlKYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QubHV0LmggXAorCUphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNPTk9iamVjdC5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9OdW1iZXJDb25z
dHJ1Y3Rvci5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rv
ci5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdFeHBPYmplY3QubHV0LmggXApA
QCAtMjg3LDcgKzI4OCw5IEBAIGphdmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogaWYgRU5BQkxF
X0RFQlVHCiBqYXZhc2NyaXB0Y29yZV9idWlsdF9zb3VyY2VzICs9IFwKIAlEZXJpdmVkU291cmNl
cy9HcmFtbWFyLmNwcCBcCi0JRGVyaXZlZFNvdXJjZXMvR3JhbW1hci5oCisJRGVyaXZlZFNvdXJj
ZXMvR3JhbW1hci5oIFwKKwlEZXJpdmVkU291cmNlcy9KU09OR3JhbW1hci5jcHAgXAorCURlcml2
ZWRTb3VyY2VzL0pTT05HcmFtbWFyLmgKIAogamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJ
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvUmVnaXN0ZXJGaWxlLmNwcCBcCkBAIC0yOTcsNiAr
MzAwLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyArPSBcCiAJSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0xhYmVsU2NvcGUuaCBcCiAJSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdn
ZXIuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlci5oIFwKKwlKYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvSlNPTkxleGVyLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pT
T05MZXhlci5oIFwKIAlKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuY3BwIFwKIAlKYXZhU2Ny
aXB0Q29yZS9wYXJzZXIvTGV4ZXIuaCBcCiAJSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVDb25z
dHJ1Y3RvcnMuaCBcCkBAIC0zMDUsNiArMzEwLDggQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggXAogCUphdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmggXAorCUph
dmFTY3JpcHRDb3JlL3BhcnNlci9KU09OUGFyc2VyLmNwcCBcCisJSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0pTT05QYXJzZXIuaCBcCQogCUphdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5j
cHAgXAogCUphdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJBcmVuYS5oIFwKIAlKYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUmVzdWx0VHlwZS5oIFwKQEAgLTM5OCw2ICs0MDUsOCBAQCBqYXZhc2NyaXB0
Y29yZV9zb3VyY2VzICs9IFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0xvb2t1cC5oIFwKIAlK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hdGhPYmplY3QuaCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmNwcCBcCisJSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmggXAogCUphdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgXAogCUphdmFTY3JpcHRD
b3JlL3J1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5oIFwKIAlKYXZhU2NyaXB0Q29yZS9y
dW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmNwcCBcCkBAIC00NTksMTAgKzQ2OCwxMyBAQCBq
YXZhc2NyaXB0Y29yZV9zb3VyY2VzICs9IFwKIGVsc2UKIGphdmFzY3JpcHRjb3JlX2J1aWx0X25v
c291cmNlcyArPSBcCiAJRGVyaXZlZFNvdXJjZXMvR3JhbW1hci5jcHAgXAotCURlcml2ZWRTb3Vy
Y2VzL0dyYW1tYXIuaAorCURlcml2ZWRTb3VyY2VzL0dyYW1tYXIuaCBcCisJRGVyaXZlZFNvdXJj
ZXMvSlNPTkdyYW1tYXIuY3BwIFwKKwlEZXJpdmVkU291cmNlcy9KU09OR3JhbW1hci5oCiAKIGph
dmFzY3JpcHRjb3JlX3NvdXJjZXMgKz0gXAogCUphdmFTY3JpcHRDb3JlL0FsbEluT25lRmlsZS5j
cHAgXAorICAgIEphdmFTY3JpcHRDb3JlL0pzb24uY3BwCiAJSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L1BhcnNlckFyZW5hLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlckFyZW5hLmgK
IGVuZGlmICMgRU5EIEVOQUJMRV9ERUJVRwpAQCAtNDc1LDYgKzQ4NywxNSBAQCBEZXJpdmVkU291
cmNlcy9HcmFtbWFyLmNwcDogJChzcmNkaXIpL0phCiAJY2F0ICQoR0VOU09VUkNFUykvR3JhbW1h
ci5ocHAgPiAkKEdFTlNPVVJDRVMpL0dyYW1tYXIuaAogCXJtIC1mICQoR0VOU09VUkNFUykvR3Jh
bW1hci5ocHAgYmlzb25fb3V0LnR4dAogCisKK0Rlcml2ZWRTb3VyY2VzL0pTT05HcmFtbWFyLmg6
IERlcml2ZWRTb3VyY2VzL0pTT05HcmFtbWFyLmNwcDsKKworRGVyaXZlZFNvdXJjZXMvSlNPTkdy
YW1tYXIuY3BwOiAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTT05HcmFtbWFyLnkK
KwkkKEJJU09OKSAtZCAtcCBqc29ueXkgJChzcmNkaXIpL0phdmFTY3JpcHRDb3JlL3BhcnNlci9K
U09OR3JhbW1hci55IC1vICRAID4ganNvbl9iaXNvbl9vdXQudHh0IDI+JjEKKwkkKFBFUkwpIC1w
IC1lICdFTkQgeyBpZiAoJCRjb25mbGljdCkgeyB1bmxpbmsgIkpTT05HcmFtbWFyLmNwcCI7IGRp
ZTsgfSB9ICQkY29uZmxpY3QgfHw9IC9jb25mbGljdC8nIDwganNvbl9iaXNvbl9vdXQudHh0CisJ
Y2F0ICQoR0VOU09VUkNFUykvSlNPTkdyYW1tYXIuaHBwID4gJChHRU5TT1VSQ0VTKS9KU09OR3Jh
bW1hci5oCisJcm0gLWYgJChHRU5TT1VSQ0VTKS9KU09OR3JhbW1hci5ocHAganNvbl9iaXNvbl9v
dXQudHh0CisKIERlcml2ZWRTb3VyY2VzL0xleGVyLmx1dC5oOiAkKENSRUFURV9IQVNIX1RBQkxF
KSAkKHNyY2RpcikvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0tleXdvcmRzLnRhYmxlCiAJJChQRVJM
KSAkXiA+ICRACiAKQEAgLTU1MCw2ICs1NzEsNyBAQCBqYXZhc2NyaXB0Y29yZV9kaXN0ICs9IFwK
IAlKYXZhU2NyaXB0Q29yZS9wY3JlL2RmdGFibGVzIFwKIAlKYXZhU2NyaXB0Q29yZS9wY3JlL3Vj
cHRhYmxlLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcGFyc2VyL0dyYW1tYXIueSBcCisJSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0pTT05HcmFtbWFyLnkgXAogCUphdmFTY3JpcHRDb3JlL3BhcnNlci9L
ZXl3b3Jkcy50YWJsZQogCiAjIENsZWFuIHJ1bGVzIGZvciBKYXZhU2NyaXB0Q29yZQpAQCAtNTU3
LDYgKzU3OSw3IEBAIENMRUFORklMRVMgKz0gXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJy
YXlQcm90b3R5cGUubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvRGF0ZVByb3RvdHlw
ZS5sdXQuaCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0Lmx1dC5oIFwKKwlK
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QubHV0LmggXAogCUphdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTnVtYmVyQ29uc3RydWN0b3IubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUmVnRXhwQ29uc3RydWN0b3IubHV0LmggXAogCUphdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVn
RXhwT2JqZWN0Lmx1dC5oIFwKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnBy
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHJldmlz
aW9uIDQzNjY3KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw2ICs3Miw3IEBAIExVVF9GSUxFUyArPSBcCiAgICAgcnVudGltZS9TdHJp
bmdQcm90b3R5cGUuY3BwIFwKICAgICBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcCBcCiAgICAg
cnVudGltZS9NYXRoT2JqZWN0LmNwcCBcCisJcnVudGltZS9KU09OT2JqZWN0LmNwcCBcCiAgICAg
cnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUvUmVnRXhwT2JqZWN0
LmNwcAogCkBAIC03OSw3ICs4MCw4IEBAIEtFWVdPUkRMVVRfRklMRVMgKz0gXAogICAgIHBhcnNl
ci9LZXl3b3Jkcy50YWJsZQogCiBKU0NCSVNPTiArPSBcCi0gICAgcGFyc2VyL0dyYW1tYXIueQor
ICAgIHBhcnNlci9HcmFtbWFyLnkgXAorCXBhcnNlci9KU09OR3JhbW1hci55CiAKIFNPVVJDRVMg
Kz0gXAogICAgIHd0Zi9Bc3NlcnRpb25zLmNwcCBcCkBAIC0xODUsOSArMTg3LDExIEBAIFNPVVJD
RVMgKz0gXAogICAgIHJ1bnRpbWUvSlNTdHJpbmcuY3BwIFwKICAgICBydW50aW1lL0pTVmFsdWUu
Y3BwIFwKICAgICBydW50aW1lL0pTV3JhcHBlck9iamVjdC5jcHAgXAorCXBhcnNlci9KU09OTGV4
ZXIuY3BwIFwKICAgICBwYXJzZXIvTGV4ZXIuY3BwIFwKICAgICBydW50aW1lL0xvb2t1cC5jcHAg
XAogICAgIHJ1bnRpbWUvTWF0aE9iamVjdC5jcHAgXAorCXJ1bnRpbWUvSlNPTk9iamVjdC5jcHAg
XAogICAgIHJ1bnRpbWUvTmF0aXZlRXJyb3JDb25zdHJ1Y3Rvci5jcHAgXAogICAgIHJ1bnRpbWUv
TmF0aXZlRXJyb3JQcm90b3R5cGUuY3BwIFwKICAgICBwYXJzZXIvTm9kZXMuY3BwIFwKSW5kZXg6
IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAkocmV2aXNpb24gNDM2Njcp
CisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCSh3b3JraW5nIGNv
cHkpCkBAIC02MSw2ICs2MSw3IEBAIFNvdXJjZSBmaWxlcyBmb3IgSlNDb3JlLgogICAgICAgICBw
Y3JlL3BjcmVfeGNsYXNzLmNwcAogICAgIDwvc2V0PgogICAgIDxzZXQgYXBwZW5kPSIxIiB2YXI9
IkpTQ09SRV9QQVJTRVJfU09VUkNFUyI+CisJCXBhcnNlci9KU09OTGV4ZXIuY3BwCiAgICAgICAg
IHBhcnNlci9MZXhlci5jcHAKICAgICAgICAgcGFyc2VyL05vZGVzLmNwcAogICAgICAgICBwYXJz
ZXIvUGFyc2VyLmNwcApAQCAtMTI1LDYgKzEyNiw3IEBAIFNvdXJjZSBmaWxlcyBmb3IgSlNDb3Jl
LgogICAgICAgICBydW50aW1lL0xpdGVyYWxQYXJzZXIuY3BwCiAgICAgICAgIHJ1bnRpbWUvTG9v
a3VwLmNwcAogICAgICAgICBydW50aW1lL01hdGhPYmplY3QuY3BwCisJCXJ1bnRpbWUvSlNPTk9i
amVjdC5jcHAKICAgICAgICAgcnVudGltZS9OYXRpdmVFcnJvckNvbnN0cnVjdG9yLmNwcAogICAg
ICAgICBydW50aW1lL05hdGl2ZUVycm9yUHJvdG90eXBlLmNwcAogICAgICAgICBydW50aW1lL051
bWJlckNvbnN0cnVjdG9yLmNwcApJbmRleDogSmF2YVNjcmlwdENvcmUvSnNvbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSnNvbi5jcHAJKHJldmlzaW9uIDApCisrKyBKYXZhU2Ny
aXB0Q29yZS9Kc29uLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICoKKyAq
LworI2luY2x1ZGUgIkpTT05HcmFtbWFyLmNwcCIKKyNpbmNsdWRlICJwYXJzZXIvSlNPTkxleGVy
LmNwcCIKKyNpbmNsdWRlICJwYXJzZXIvSlNPTlBhcnNlci5jcHAiCkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
dmNwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJv
ai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHJldmlzaW9uIDQzNjY3KQor
KysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjcHJvagkod29ya2luZyBjb3B5KQpAQCAtNzUzLDYgKzc1MywyMiBAQAog
CQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxy
dW50aW1lXEpTT05PYmplY3QuY3BwIg0KKwkJCQk+CQ0KKwkJCTwvRmlsZT4NCisJCQk8ZmlsZQ0K
KwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcSlNPTk9iamVjdC5oIg0KKwkJCQk+DQor
CQkJPC9GaWxlPg0KKwkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccnVudGltZVxK
U09OT2JqZWN0LmNwcCINCisJCQkJPgkNCisJCQk8L0ZpbGU+DQorCQkJPGZpbGUNCisJCQkJUmVs
YXRpdmVQYXRoPSIuLlwuLlxydW50aW1lXEpTT05PYmplY3QuaCINCisJCQkJPg0KKwkJCTwvRmls
ZT4NCisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHJ1bnRpbWVcTmF0aXZlRXJy
b3JDb25zdHJ1Y3Rvci5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpAQCAtMTA0MCw2ICsxMDU2
LDE0IEBACiAJCQkJCT4NCiAJCQkJPC9GaWxlPg0KIAkJCQk8RmlsZQ0KKwkJCQkJUmVsYXRpdmVQ
YXRoPSIkKFdlYktpdE91dHB1dERpcilcb2JqXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2Vz
XEpTT05PYmplY3QubHV0LmgiDQorCQkJCQk+DQorCQkJCTwvRmlsZT4NCisJCQkJPEZpbGUNCisJ
CQkJCVJlbGF0aXZlUGF0aD0iJChXZWJLaXRPdXRwdXREaXIpXG9ialwkKFByb2plY3ROYW1lKVxE
ZXJpdmVkU291cmNlc1xKU09OT2JqZWN0Lmx1dC5oIg0KKwkJCQkJPg0KKwkJCQk8L0ZpbGU+DQor
CQkJCTxGaWxlDQogCQkJCQlSZWxhdGl2ZVBhdGg9IiQoV2ViS2l0T3V0cHV0RGlyKVxvYmpcJChQ
cm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcTnVtYmVyQ29uc3RydWN0b3IubHV0LmgiDQogCQkJ
CQk+DQogCQkJCTwvRmlsZT4NCkBAIC0xMjgxLDYgKzEzMDUsMTQgQEAKIAkJCQk+DQogCQkJPC9G
aWxlPg0KIAkJCTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccGFyc2VyXEpTT05MZXhl
ci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRo
PSIuLlwuLlxwYXJzZXJcSlNPTkxleGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZp
bGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwYXJzZXJcTGV4ZXIuY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gNDM2NjcpCisrKyBKYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Miw2ICs0Miw3IEBACiAJCTBCMUY5MjFEMEYxNzUzNTAwMDM2NDY4RSAv
KiBQdHJBbmRGbGFncy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEIxRjkyMUIwRjE3NTAyRDAwMzY0NjhFIC8qIFB0ckFuZEZsYWdzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEIzMzBDMjcwRjM4QzYy
MzAwNjkyREUzIC8qIFR5cGVUcmFpdHMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEIzMzBDMjYwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMu
Y3BwICovOyB9OwogCQkwQjREN0U2MzBGMzE5QUM4MDBBRDdFNTggLyogVHlwZVRyYWl0cy5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEI0RDdFNjIwRjMx
OUFDODAwQUQ3RTU4IC8qIFR5cGVUcmFpdHMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OworCQkwRERBNkMzQjBGNkQ3RDEwMDA4MjYxNTAgLyogSnNvbi5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRERBNkMz
QTBGNkQ3RDEwMDA4MjYxNTAgLyogSnNvbi5jcHAgKi87IH07CiAJCTE0MEI3RDFEMERDNjlBRjcw
MDlDNDJCOCAvKiBKU0FjdGl2YXRpb24uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMTREQTgxOEYwRDk5RkQyMDAwQjBBNEZCIC8qIEpTQWN0aXZhdGlv
bi5jcHAgKi87IH07CiAJCTE0MEQxN0Q3MEU4QUQ0QTkwMDBDRDE3RCAvKiBKU0Jhc2VQcml2YXRl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAxNDBEMTdE
NjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0ZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTE0MTIxMTMxMEE0ODc5NEQwMDQ4MDI1NSAv
KiBKYXZhU2NyaXB0Q29yZS5mcmFtZXdvcmsgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA5MzJGNUJEOTA4MjJBMUM3MDA3MzY5NzUgLyogSmF2YVNjcmlw
dENvcmUuZnJhbWV3b3JrICovOyB9OwpAQCAtNDUyLDYgKzQ1MywxNCBAQAogCQkwQjFGOTIxQjBG
MTc1MDJEMDAzNjQ2OEUgLyogUHRyQW5kRmxhZ3MuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHRyQW5kRmxhZ3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEIz
MzBDMjYwRjM4QzYyMzAwNjkyREUzIC8qIFR5cGVUcmFpdHMuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVHlwZVRyYWl0cy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBCNEQ3RTYyMEYzMTlBQzgwMEFEN0U1OCAvKiBUeXBlVHJhaXRzLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFR5cGVUcmFpdHMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEQ1MTEzM0IwRjc0NTc2QjAwQjJEQ0UxIC8qIEpTT05MZXhlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09OTGV4ZXIuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRDUxMTMzQzBGNzQ1NzZCMDBCMkRDRTEgLyogSlNP
TkxleGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTT05MZXhlci5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRERBNkMyRDBGNkQ3QzgzMDA4MjYxNTAgLyog
SlNPTkdyYW1tYXIueSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUueWFjYzsgcGF0aCA9IEpTT05HcmFt
bWFyLnk7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBEREE2QzJFMEY2RDdDODMwMDgy
NjE1MCAvKiBKU09OUGFyc2VyLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEpTT05QYXJzZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRERBNkMy
RjBGNkQ3QzgzMDA4MjYxNTAgLyogSlNPTlBhcnNlci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBKU09OUGFyc2VyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBE
REE2QzNBMEY2RDdEMTAwMDgyNjE1MCAvKiBKc29uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IEpzb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RERBNkMzQzBGNkQ3RDYzMDA4MjYxNTAgLyogSlNPTk9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU09OT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJMEREQTZDM0QwRjZEN0Q2MzAwODI2MTUwIC8qIEpTT05PYmplY3QuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNPTk9iamVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkxNDBEMTdENjBFOEFENEE5MDAwQ0QxN0QgLyogSlNCYXNlUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0Jhc2VQcml2YXRlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTE0MTIxMTAyMEE0ODc4MDkwMDQ4MDI1NSAvKiBt
aW5pZG9tLmMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuYzsgbmFtZSA9IG1pbmlkb20uYzsgcGF0
aCA9IHRlc3RzL21pbmlkb20uYzsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMTQxMjEx
MEQwQTQ4Nzg4NzAwNDgwMjU1IC8qIG1pbmlkb20uanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmph
dmFzY3JpcHQ7IG5hbWUgPSBtaW5pZG9tLmpzOyBwYXRoID0gdGVzdHMvbWluaWRvbS5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk0Niw2ICs5NTUsNyBAQAogCQkJCTE0QjhFQ0E2
MEE1NjUzOTgwMDYyQkU1NCAvKiBKYXZhU2NyaXB0Q29yZS5leHAgKi8sCiAJCQkJRjVDMjkwRTYw
Mjg0Rjk4RTAxODYzNUNBIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggKi8sCiAJCQkJNjU5MTI2
QkMwQkREMTcyODAwMTkyMUZCIC8qIEFsbEluT25lRmlsZS5jcHAgKi8sCisJCQkJMEREQTZDM0Ew
RjZEN0QxMDAwODI2MTUwIC8qIEpzb24uY3BwICovLAogCQkJCTQ1RTEyRDg4MDZBNDlCMEYwMEU5
REY4NCAvKiBqc2MuY3BwICovLAogCQkJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25m
aWcuaCAqLywKIAkJCQkxNDMyRUJENzBBMzRDQUQ0MDA3MTdCOUYgLyogQVBJICovLApAQCAtMTI1
Niw2ICsxMjY2LDExIEBACiAJCTdFMzlEODM3MEVDM0EzODgwMDNBRjExQSAvKiBwYXJzZXIgKi8g
PSB7CiAJCQlpc2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBENTExMzNCMEY3
NDU3NkIwMEIyRENFMSAvKiBKU09OTGV4ZXIuY3BwICovLAorCQkJCTBENTExMzNDMEY3NDU3NkIw
MEIyRENFMSAvKiBKU09OTGV4ZXIuaCAqLywKKwkJCQkwRERBNkMyRDBGNkQ3QzgzMDA4MjYxNTAg
LyogSlNPTkdyYW1tYXIueSAqLywKKwkJCQkwRERBNkMyRTBGNkQ3QzgzMDA4MjYxNTAgLyogSlNP
TlBhcnNlci5jcHAgKi8sCisJCQkJMEREQTZDMkYwRjZEN0M4MzAwODI2MTUwIC8qIEpTT05QYXJz
ZXIuaCAqLywKIAkJCQk5MzNBMzQ5OTAzOEFFN0M2MDA4NjM1Q0UgLyogR3JhbW1hci55ICovLAog
CQkJCTkzRjE5ODFBMDgyNDVBQUUwMDFFOUFCQyAvKiBLZXl3b3Jkcy50YWJsZSAqLywKIAkJCQlG
NjkyQTg2NTAyNTU1OTdEMDFGRjYwRjcgLyogTGV4ZXIuY3BwICovLApAQCAtMTI3OCw2ICsxMjkz
LDggQEAKIAkJN0VGNkUwQkIwRUI3QTFFQzAwNzlBRkFGIC8qIHJ1bnRpbWUgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTBEREE2QzNDMEY2RDdENjMwMDgy
NjE1MCAvKiBKU09OT2JqZWN0LmNwcCAqLywKKwkJCQkwRERBNkMzRDBGNkQ3RDYzMDA4MjYxNTAg
LyogSlNPTk9iamVjdC5oICovLAogCQkJCUJDRjYwNTExMEUyMDNFRjgwMEI5QTY0RCAvKiBBcmdM
aXN0LmNwcCAqLywKIAkJCQlCQ0Y2MDUxMjBFMjAzRUY4MDBCOUE2NEQgLyogQXJnTGlzdC5oICov
LAogCQkJCUJDMjU3REU1MEUxRjUxQzUwMDE2QjZDOSAvKiBBcmd1bWVudHMuY3BwICovLApAQCAt
MjE3MCw2ICsyMTg3LDcgQEAKIAkJCQlCQzMxMzU2NTBGMzAyRkEzMDAzREZEM0EgLyogRGVidWdn
ZXJBY3RpdmF0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBCMzMwQzI3MEYzOEM2MjMwMDY5
MkRFMyAvKiBUeXBlVHJhaXRzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0QTQyRTNGMEY0RjYw
RUUwMDU5OTA5OSAvKiBUaW1lb3V0Q2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRERB
NkMzQjBGNkQ3RDEwMDA4MjYxNTAgLyogSnNvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkVB
QzQ5NTBGOTNFOEQxMDA4RUM5NDggLyogUmVnZXhDb21waWxlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkVBQzQ5NzBGOTNFOEQxMDA4RUM5NDggLyogUmVnZXhJbnRlcnByZXRlci5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk4NkVBQzQ5OTBGOTNFOEQxMDA4RUM5NDggLyogUmVnZXhKSVQuY3Bw
IGluIFNvdXJjZXMgKi8sCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUu
aAkocmV2aXNpb24gNDM2NjcpCisrKyBKYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAkod29ya2luZyBjb3B5KQpAQCAtOTAsNiArOTAsNyBAQCBuYW1lc3BhY2UgSlNDICB7CiAg
ICAgICAgIHN0YXRpYyBjb25zdCBIYXNoVGFibGUqIGFycmF5VGFibGUoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpIHsgcmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLmFycmF5VGFibGU7IH0KICAg
ICAgICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogZGF0ZVRhYmxlKENhbGxGcmFtZSogY2FsbEZy
YW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5kYXRlVGFibGU7IH0KICAgICAg
ICAgc3RhdGljIGNvbnN0IEhhc2hUYWJsZSogbWF0aFRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1l
KSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5tYXRoVGFibGU7IH0KKyAgICAgICAg
c3RhdGljIGNvbnN0IEhhc2hUYWJsZSoganNvblRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7
IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5qc29uVGFibGU7IH0KICAgICAgICAgc3Rh
dGljIGNvbnN0IEhhc2hUYWJsZSogbnVtYmVyVGFibGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIHsg
cmV0dXJuIGNhbGxGcmFtZS0+Z2xvYmFsRGF0YSgpLm51bWJlclRhYmxlOyB9CiAgICAgICAgIHN0
YXRpYyBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxlKENhbGxGcmFtZSogY2FsbEZyYW1lKSB7
IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5yZWdFeHBUYWJsZTsgfQogICAgICAgICBz
dGF0aWMgY29uc3QgSGFzaFRhYmxlKiByZWdFeHBDb25zdHJ1Y3RvclRhYmxlKENhbGxGcmFtZSog
Y2FsbEZyYW1lKSB7IHJldHVybiBjYWxsRnJhbWUtPmdsb2JhbERhdGEoKS5yZWdFeHBDb25zdHJ1
Y3RvclRhYmxlOyB9CkluZGV4OiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNPTkdyYW1tYXIueQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNPTkdyYW1tYXIueQkocmV2aXNp
b24gMCkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9KU09OR3JhbW1hci55CShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDIwNyBAQAorJXB1cmVfcGFyc2VyCisKKyV7CisKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAxOTk5LTIwMDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAwNyBFcmljIFNlaWRlbCA8ZXJpY0B3ZWJraXQu
b3JnPgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1
ZGUgIkpTVmFsdWUuaCIKKyNpbmNsdWRlICJKU09iamVjdC5oIgorI2luY2x1ZGUgIk5vZGVDb25z
dHJ1Y3RvcnMuaCIKKyNpbmNsdWRlICJKU09OTGV4ZXIuaCIKKyNpbmNsdWRlICJKU1N0cmluZy5o
IgorI2luY2x1ZGUgIkpTR2xvYmFsRGF0YS5oIgorI2luY2x1ZGUgIkNvbW1vbklkZW50aWZpZXJz
LmgiCisjaW5jbHVkZSAiTm9kZUluZm8uaCIKKyNpbmNsdWRlICJKU09OUGFyc2VyLmgiCisjaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworI2RlZmluZSBZWU1BWERFUFRIIDEwMDAwCisjZGVm
aW5lIFlZRU5BQkxFX05MUyAwCisKKy8qIGRlZmF1bHQgdmFsdWVzIGZvciBiaXNvbiAqLworI2Rl
ZmluZSBZWURFQlVHIDAgLy8gU2V0IHRvIDEgdG8gZGVidWcgYSBwYXJzZSBlcnJvci4KKyNkZWZp
bmUganNjeXlkZWJ1ZyAwIC8vIFNldCB0byAxIHRvIGRlYnVnIGEgcGFyc2UgZXJyb3IuCisjaWYg
IVBMQVRGT1JNKERBUldJTikKKyAgICAvLyBhdm9pZCB0cmlnZ2VyaW5nIHdhcm5pbmdzIGluIG9s
ZGVyIGJpc29uCisjZGVmaW5lIFlZRVJST1JfVkVSQk9TRQorI2VuZGlmCisKK2ludCBqc29ueXls
ZXgodm9pZCogbHZhbHAsIHZvaWQqIGxsb2NwLCB2b2lkKiBnbG9iYWxQdHIpOworaW50IGpzb255
eWVycm9yKGNvbnN0IGNoYXIqKTsKKworI2RlZmluZSBHTE9CQUxfREFUQSBzdGF0aWNfY2FzdDxK
U0dsb2JhbERhdGEqPihnbG9iYWxQdHIpCisKK3VzaW5nIG5hbWVzcGFjZSBKU0M7Cit1c2luZyBu
YW1lc3BhY2Ugc3RkOworCisjaWYgQ09NUElMRVIoTVNWQykKKworI3ByYWdtYSB3YXJuaW5nKGRp
c2FibGU6IDQwNjUpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDI0NCkKKyNwcmFnbWEgd2Fy
bmluZyhkaXNhYmxlOiA0NzAyKQorCisvLyBBdCBsZWFzdCBzb21lIG9mIHRoZSB0aW1lLCB0aGUg
ZGVjbGFyYXRpb25zIG9mIG1hbGxvYyBhbmQgZnJlZSB0aGF0IGJpc29uCisvLyBnZW5lcmF0ZXMg
YXJlIGNhdXNpbmcgd2FybmluZ3MuIEEgd2F5IHRvIGF2b2lkIHRoaXMgaXMgdG8gZXhwbGljaXRs
eSBkZWZpbmUKKy8vIHRoZSBtYWNyb3Mgc28gdGhhdCBiaXNvbiBkb2Vzbid0IHRyeSB0byBkZWNs
YXJlIG1hbGxvYyBhbmQgZnJlZS4KKyNkZWZpbmUgWVlNQUxMT0MgbWFsbG9jCisjZGVmaW5lIFlZ
RlJFRSBmcmVlCisKKyNlbmRpZgorCisjZGVmaW5lIFlZUEFSU0VfUEFSQU0gZ2xvYmFsUHRyCisj
ZGVmaW5lIFlZTEVYX1BBUkFNIGdsb2JhbFB0cgorCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gTm9k
ZURlY2xhcmF0aW9uSW5mbzxUPiBjcmVhdGVOb2RlRGVjbGFyYXRpb25JbmZvKFQgbm9kZSwgQ29k
ZUZlYXR1cmVzIGluZm8sIGludCBudW1Db25zdGFudHMpCit7CisgICAgQVNTRVJUKChpbmZvICYg
fkFsbEZlYXR1cmVzKSA9PSAwKTsKKyAgICBOb2RlRGVjbGFyYXRpb25JbmZvPFQ+IHJlc3VsdCA9
IHtub2RlLCBpbmZvLCBudW1Db25zdGFudHN9OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3Rl
bXBsYXRlIDx0eXBlbmFtZSBUPiBOb2RlSW5mbzxUPiBjcmVhdGVOb2RlSW5mbyhUIG5vZGUsIENv
ZGVGZWF0dXJlcyBpbmZvLCBpbnQgbnVtQ29uc3RhbnRzKQoreworICAgIEFTU0VSVCgoaW5mbyAm
IH5BbGxGZWF0dXJlcykgPT0gMCk7CisgICAgTm9kZUluZm88VD4gcmVzdWx0ID0ge25vZGUsIGlu
Zm8sIG51bUNvbnN0YW50c307CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworJX0KKworJXVuaW9u
IHsKKyAgICBpbnQgICAgICAgICAgICAgICAgIGludFZhbHVlOworICAgIGRvdWJsZSAgICAgICAg
ICAgICAgZG91YmxlVmFsdWU7CisgICAgSWRlbnRpZmllciogICAgICAgICBpZGVudDsKKworICAg
IC8vIGV4cHJlc3Npb24gc3VidHJlZXMKKyAgICBFeHByZXNzaW9uTm9kZUluZm8gIGV4cHJlc3Np
b25Ob2RlOworICAgIFByb3BlcnR5Tm9kZUluZm8gICAgcHJvcGVydHlOb2RlOworCisgICAgUHJv
cGVydHlMaXN0SW5mbyAgICBwcm9wZXJ0eUxpc3Q7CisgICAgRWxlbWVudExpc3RJbmZvICAgICBl
bGVtZW50TGlzdDsKKworICAgIFN0YXRlbWVudE5vZGVJbmZvICAgc3RhdGVtZW50Tm9kZTsKKyAg
ICBTb3VyY2VFbGVtZW50c0luZm8gIHNvdXJjZUVsZW1lbnRzOworfQorCislc3RhcnQgSlNPTk9i
amVjdAorCisvKiBsaXRlcmFscyAqLworJXRva2VuIE5VTExUT0tFTiBUUlVFVE9LRU4gRkFMU0VU
T0tFTgorCisvKiB0ZXJtaW5hbCB0eXBlcyAqLworJXRva2VuIDxkb3VibGVWYWx1ZT4gTlVNQkVS
CisldG9rZW4gPGlkZW50PiBJREVOVCBTVFJJTkcKKworLyogYXV0b21hdGljYWxseSBpbnNlcnRl
ZCBzZW1pY29sb24gKi8KKyV0b2tlbiBBVVRPUExVU1BMVVMgQVVUT01JTlVTTUlOVVMKKworLyog
bm9uLXRlcm1pbmFsIHR5cGVzICovCisldHlwZSA8ZXhwcmVzc2lvbk5vZGU+ICBBcnJheQorJXR5
cGUgPGV4cHJlc3Npb25Ob2RlPiAgVmFsdWUKKyV0eXBlIDxleHByZXNzaW9uTm9kZT4gIE9iamVj
dAorCisldHlwZSA8ZWxlbWVudExpc3Q+ICAgICBFbGVtZW50cworJXR5cGUgPHByb3BlcnR5Tm9k
ZT4gICAgTWVtYmVyCisldHlwZSA8cHJvcGVydHlMaXN0PiAgICBNZW1iZXJzCisldHlwZSA8c291
cmNlRWxlbWVudHM+ICBKU09OT2JqZWN0CislJQorCitWYWx1ZSA6CisgICAgICAgIE5VTExUT0tF
TiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88RXhw
cmVzc2lvbk5vZGUqPihuZXcgKEdMT0JBTF9EQVRBKSBOdWxsTm9kZShHTE9CQUxfREFUQSksIDAs
IDEpOyB9CisgICAgfCAgIFRSVUVUT0tFTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7
ICQkID0gY3JlYXRlTm9kZUluZm88RXhwcmVzc2lvbk5vZGUqPihuZXcgKEdMT0JBTF9EQVRBKSBC
b29sZWFuTm9kZShHTE9CQUxfREFUQSwgdHJ1ZSksIDAsIDEpOyB9CisgICAgfCAgIEZBTFNFVE9L
RU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88RXhw
cmVzc2lvbk5vZGUqPihuZXcgKEdMT0JBTF9EQVRBKSBCb29sZWFuTm9kZShHTE9CQUxfREFUQSwg
ZmFsc2UpLCAwLCAxKTsgfQorICAgIHwgICBOVU1CRVIgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgeyAkJCA9IGNyZWF0ZU5vZGVJbmZvPEV4cHJlc3Npb25Ob2RlKj4obmV3IChHTE9C
QUxfREFUQSkgTnVtYmVyTm9kZShHTE9CQUxfREFUQSwgJDEpLCAwLCAxKTt9CisgICAgfCAgIFNU
UklORyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUlu
Zm88RXhwcmVzc2lvbk5vZGUqPihuZXcgKEdMT0JBTF9EQVRBKSBTdHJpbmdOb2RlKEdMT0JBTF9E
QVRBLCAqJDEpLCAwLCAxKTt9CisgICAgfCAgIE9iamVjdAorICAgIHwgICBBcnJheQorOworCisK
K0FycmF5IDoKKyAgICAgICAgJ1snJ10nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyAoR0xPQkFMX0RBVEEp
IEFycmF5Tm9kZShHTE9CQUxfREFUQSwgTlVMTCksIDAsIDApOyB9CisgICAgfCAgICdbJyBFbGVt
ZW50cyAnXScgICAgICAgICAgICAgICAgICAgICAgICB7ICQkID0gY3JlYXRlTm9kZUluZm88RXhw
cmVzc2lvbk5vZGUqPihuZXcgKEdMT0JBTF9EQVRBKSBBcnJheU5vZGUoR0xPQkFMX0RBVEEsICQy
Lm1fbm9kZS5oZWFkKSwgJDIubV9mZWF0dXJlcywgJDIubV9udW1Db25zdGFudHMpOyB9Cis7CisK
K0VsZW1lbnRzIDoKKyAgICAgICAgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHsgJCQubV9ub2RlLmhlYWQgPSBuZXcgKEdMT0JBTF9EQVRBKSBFbGVtZW50Tm9kZShHTE9C
QUxfREFUQSwgMCwgJDEubV9ub2RlKTsgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICQkLm1fbm9kZS50YWlsID0gJCQubV9ub2RlLmhlYWQ7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fZmVhdHVy
ZXMgPSAkMS5tX2ZlYXR1cmVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJCQubV9udW1Db25zdGFudHMgPSAkMS5tX251bUNvbnN0YW50czsgfQor
ICAgIHwgICBFbGVtZW50cyAnLCcgVmFsdWUgICAgICAgICAgICAgICAgICAgICAgeyAkJC5tX25v
ZGUuaGVhZCA9ICQxLm1fbm9kZS5oZWFkOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAkJC5tX25vZGUudGFpbCA9IG5ldyAoR0xPQkFMX0RBVEEpIEVs
ZW1lbnROb2RlKEdMT0JBTF9EQVRBLCAkMS5tX25vZGUudGFpbCwgMCwgJDMubV9ub2RlKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mZWF0
dXJlcyA9ICQxLm1fZmVhdHVyZXMgfCAkMy5tX2ZlYXR1cmVzOworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX251bUNvbnN0YW50cyA9ICQxLm1f
bnVtQ29uc3RhbnRzICsgJDMubV9udW1Db25zdGFudHM7IH0gCis7CisKK09iamVjdDoKKyAgICAg
ICAgJ3snJ30nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVO
b2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+KG5ldyAoR0xPQkFMX0RBVEEpIE9iamVjdExpdGVyYWxO
b2RlKEdMT0JBTF9EQVRBKSwgMCwgMCk7IH0KKyAgICB8ICAgJ3snIE1lbWJlcnMgJ30nICAgICAg
ICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5mbzxFeHByZXNzaW9uTm9kZSo+
KG5ldyAoR0xPQkFMX0RBVEEpIE9iamVjdExpdGVyYWxOb2RlKEdMT0JBTF9EQVRBLCAkMi5tX25v
ZGUuaGVhZCksICQyLm1fZmVhdHVyZXMsICQyLm1fbnVtQ29uc3RhbnRzKTt9Cis7CisKK01lbWJl
cnMgOgorICAgICAgICBNZW1iZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAk
JC5tX25vZGUuaGVhZCA9IG5ldyAoR0xPQkFMX0RBVEEpIFByb3BlcnR5TGlzdE5vZGUoR0xPQkFM
X0RBVEEsICQxLm1fbm9kZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICQkLm1fbm9kZS50YWlsID0gJCQubV9ub2RlLmhlYWQ7CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fZmVhdHVyZXMgPSAk
MS5tX2ZlYXR1cmVzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAkJC5tX251bUNvbnN0YW50cyA9ICQxLm1fbnVtQ29uc3RhbnRzO30KKyAgICB8ICAg
TWVtYmVycyAnLCcgTWVtYmVyICAgICAgICAgICAgICAgICAgICAgIHsgJCQubV9ub2RlLmhlYWQg
PSAkMS5tX25vZGUuaGVhZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgJCQubV9ub2RlLnRhaWwgPSBuZXcgKEdMT0JBTF9EQVRBKSBQcm9wZXJ0eUxp
c3ROb2RlKEdMT0JBTF9EQVRBLCAkMy5tX25vZGUsICQxLm1fbm9kZS50YWlsKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9mZWF0dXJlcyA9
ICQxLm1fZmVhdHVyZXMgfCAkMy5tX2ZlYXR1cmVzOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAkJC5tX251bUNvbnN0YW50cyA9ICQxLm1fbnVtQ29u
c3RhbnRzICsgJDMubV9udW1Db25zdGFudHM7IH0KKzsKKworTWVtYmVyIDoKKyAgICBTVFJJTkcg
JzonIFZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgJCQgPSBjcmVhdGVOb2RlSW5m
bzxQcm9wZXJ0eU5vZGUqPihuZXcgKEdMT0JBTF9EQVRBKSBQcm9wZXJ0eU5vZGUoR0xPQkFMX0RB
VEEsICokMSwgJDMubV9ub2RlLCBQcm9wZXJ0eU5vZGU6OkNvbnN0YW50KSwgJDMubV9mZWF0dXJl
cywgJDMubV9udW1Db25zdGFudHMpO30KKzsKKworSlNPTk9iamVjdCA6CisgICAgICAgIEFycmF5
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7ICQkLm1fbm9kZSA9IG5ldyAoR0xP
QkFMX0RBVEEpIFNvdXJjZUVsZW1lbnRzKEdMT0JBTF9EQVRBKTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJCQubV9ub2RlLT5hcHBlbmQobmV3IChH
TE9CQUxfREFUQSkgRXhwclN0YXRlbWVudE5vZGUoR0xPQkFMX0RBVEEsICQxLm1fbm9kZSkpOwor
ICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBH
TE9CQUxfREFUQS0+anNvblBhcnNlci0+ZGlkRmluaXNoUGFyc2luZygkJC5tX25vZGUsICQxLm1f
ZmVhdHVyZXMsIEAxLmxhc3RfbGluZSwgJDEubV9udW1Db25zdGFudHMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgIHwgICBPYmplY3QgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAkJC5tX25vZGUgPSBuZXcgKEdMT0JBTF9E
QVRBKSBTb3VyY2VFbGVtZW50cyhHTE9CQUxfREFUQSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICQkLm1fbm9kZS0+YXBwZW5kKG5ldyAoR0xPQkFM
X0RBVEEpIEV4cHJTdGF0ZW1lbnROb2RlKEdMT0JBTF9EQVRBLCAkMS5tX25vZGUpKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHTE9CQUxfREFU
QS0+anNvblBhcnNlci0+ZGlkRmluaXNoUGFyc2luZygkJC5tX25vZGUsICQxLm1fZmVhdHVyZXMs
IEAxLmxhc3RfbGluZSwgJDEubV9udW1Db25zdGFudHMpOworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorOworCislJQorCisKKy8qIGNhbGxlZCBieSB5
eXBhcnNlIG9uIGVycm9yICovCitpbnQgeXllcnJvcihjb25zdCBjaGFyICopCit7CisgICAgcmV0
dXJuIDE7Cit9CisKKy8vIGEgYnJpZGdlIGZvciB5YWNjIGZyb20gdGhlIEMgd29ybGQgdG8gQysr
CitpbnQganNvbnl5bGV4KHZvaWQqIGx2YWxwLCB2b2lkKiBsbG9jcCwgdm9pZCogZ2xvYmFsRGF0
YSkKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8SlNHbG9iYWxEYXRhKj4oZ2xvYmFsRGF0YSkt
Pmpzb25QYXJzZXItPmdldExleGVyKCkubGV4KGx2YWxwLCBsbG9jcCk7Cit9CisKKyN1bmRlZiBH
TE9CQUxfREFUQQpJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTT05MZXhlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2VyL0pTT05MZXhlci5jcHAJKHJldmlzaW9u
IDApCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNPTkxleGVyLmNwcAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwzNzQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LTIwMDAgSGFycmkg
UG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAwNyBDYW1lcm9uIFp3YXJpY2ggKGN3endhcmljaEB1d2F0ZXJsb28uY2EpCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICoK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNPTkxleGVyLmgiCisKKyNp
bmNsdWRlICJKU0Z1bmN0aW9uLmgiCisjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMu
aCIKKyNpbmNsdWRlICJOb2RlSW5mby5oIgorI2luY2x1ZGUgIk5vZGVzLmgiCisjaW5jbHVkZSAi
ZHRvYS5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVk
ZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8d3RmL0FTQ0lJQ1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCit1c2luZyBuYW1lc3BhY2UgV1RGOwordXNpbmcgbmFtZXNwYWNlIFVu
aWNvZGU7CisKKy8vIHdlIGNhbid0IHNwZWNpZnkgdGhlIG5hbWVzcGFjZSBpbiB5YWNjJ3MgQyBv
dXRwdXQsIHNvIGRvIGl0IGhlcmUKK3VzaW5nIG5hbWVzcGFjZSBKU0M7CisKKyNpZm5kZWYgS0RF
X1VTRV9GSU5BTAorI2luY2x1ZGUgIkpTT05HcmFtbWFyLmgiCisjZW5kaWYKKworbmFtZXNwYWNl
IEpTQyB7CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1doaXRlU3BhY2UoaW50IGNoKQoreworICAg
IHJldHVybiAoICAgY2ggPT0gJyAnCisgICAgICAgICAgICB8fCBjaCA9PSAnXHQnCisgICAgICAg
ICAgICB8fCBjaCA9PSAnXHInCisgICAgICAgICAgICB8fCBjaCA9PSAnXG4nKTsKKyAgICAgICAg
ICAgIAorfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNEaWdpdChpbnQgY2gpCit7CisgICAgcmV0
dXJuIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKTsKK30KKworc3RhdGljIGlubGluZSBib29sIGlz
SGV4KGludCBjaCkKK3sKKyAgICByZXR1cm4gKCAgIChjaCA+PScwJyAmJiBjaCA8PSc5JykKKyAg
ICAgICAgICAgIHx8IChjaCA+PSdBJyAmJiBjaCA8PSdGJykKKyAgICAgICAgICAgIHx8IChjaCA+
PSdhJyAmJiBjaCA8PSdmJykpOworfQorCisKK0pTT05MZXhlcjo6SlNPTkxleGVyKCkKKyAgICA6
IG1fcG9zaXRpb24oMCkKKyAgICAsIG1fY29kZSgwKQorICAgICwgbV9sZW5ndGgoMCkKKyAgICAs
IG1fY3VycmVudCgwKQorICAgICwgbV9uZXh0MSgwKQorICAgICwgbV9uZXh0MigwKQorICAgICwg
bV9uZXh0MygwKQorICAgICwgbV9uZXh0NCgwKQorICAgICwgbV9jb2x1bW4oMCkKKyAgICAsIG1f
bGluZSgwKQorICAgICwgbV9nbG9iYWxEYXRhKE5VTEwpCisgICAgLCBtX2Vycm9yKGZhbHNlKQor
eworICAgIG1fYXNjaWlCdWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7CisgICAgbV91
bmljb2RlQnVmZmVyLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOworfQorCit2b2lkIEpTT05M
ZXhlcjo6c2V0Q29kZShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UpCit7CisgICAgbV9saW5lID0g
c291cmNlLmZpcnN0TGluZSgpOworICAgIG1fY29sdW1uID0gMDsKKworICAgIG1fcG9zaXRpb24g
PSBzb3VyY2Uuc3RhcnRPZmZzZXQoKTsKKyAgICBtX3NvdXJjZSA9ICZzb3VyY2U7CisgICAgbV9j
b2RlID0gc291cmNlLnByb3ZpZGVyKCktPmRhdGEoKTsKKyAgICBtX2xlbmd0aCA9IHNvdXJjZS5l
bmRPZmZzZXQoKTsKKyAgICBtX2Vycm9yID0gZmFsc2U7CisKKyAgICAvLyByZWFkIGZpcnN0IGNo
YXJhY3RlcnMKKyAgICBzaGlmdCg1KTsKK30KKwordm9pZCBKU09OTGV4ZXI6OmNsZWFyKCkKK3sK
KyAgICBtX2lkZW50aWZpZXJzLmNsZWFyKCk7CisKKyAgICBWZWN0b3I8Y2hhcj4gbmV3QnVmZmVy
ODsKKyAgICBuZXdCdWZmZXI4LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMzIpOworICAgIG1fYXNj
aWlCdWZmZXIuc3dhcChuZXdCdWZmZXI4KTsKKworICAgIFZlY3RvcjxVQ2hhcj4gbmV3QnVmZmVy
MTY7CisgICAgbmV3QnVmZmVyMTYucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzMik7CisgICAgbV91
bmljb2RlQnVmZmVyLnN3YXAobmV3QnVmZmVyMTYpOworfQorCitpbnQgSlNPTkxleGVyOjpza2lw
ZVdoaXRlU3BhY2VzKCkKK3sKKyAgICB3aGlsZSAoaXNXaGl0ZVNwYWNlKG1fY3VycmVudCkpIHsK
KyAgICAgICAgaWYgKG1fY3VycmVudCA9PSAnXG4nKSB7CisgICAgICAgICAgICBtX2NvbHVtbiA9
IDA7CisgICAgICAgICAgICBtX2xpbmUrKzsKKyAgICAgICAgfQorICAgICAgICBtX2NvbHVtbisr
OworICAgICAgICBzaGlmdCgxKTsKKyAgICB9CisKKyAgICByZXR1cm4gbV9jdXJyZW50OworfQor
CitpbnQgSlNPTkxleGVyOjpzaGlmdChpbnQgY291bnQpIHsKKyAgICB3aGlsZSAoY291bnQtLSkg
eworICAgICAgICBtX2N1cnJlbnQgPSBtX25leHQxOworICAgICAgICBtX25leHQxICAgPSBtX25l
eHQyOworICAgICAgICBtX25leHQyICAgPSBtX25leHQzOworICAgICAgICBtX25leHQzICAgPSBt
X25leHQ0OworICAgICAgICBtX25leHQ0ICAgPSAobV9wb3NpdGlvbiA8IG1fbGVuZ3RoKT8gbV9j
b2RlW21fcG9zaXRpb24rK10gOiAtMTsKKworICAgICAgICBtX2NvbHVtbisrOworICAgIH0KKwor
ICAgIHJldHVybiBtX2N1cnJlbnQ7Cit9CisKK2ludCBKU09OTGV4ZXI6OmxleCh2b2lkKiBwMSwg
dm9pZCogcDIpCit7CisgICAgWVlTVFlQRSogbHZhbHAgPSBzdGF0aWNfY2FzdDxZWVNUWVBFKj4o
cDEpOworICAgIFlZTFRZUEUqIGxsb2NwID0gc3RhdGljX2Nhc3Q8WVlMVFlQRSo+KHAyKTsKKyAg
ICBpbnQgdG9rZW4gPSAtMTsKKworICAgIG1fdW5pY29kZUJ1ZmZlci5jbGVhcigpOworICAgIG1f
YXNjaWlCdWZmZXIuY2xlYXIoKTsKKyAgICAKKyAgICBpZiAoc2tpcGVXaGl0ZVNwYWNlcygpID09
IC0xKQorICAgICAgICAvLyBFT0YgcmVhY2hlZC4KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBz
d2l0Y2ggKG1fY3VycmVudCkgeworICAgIGNhc2UgJ1wiJzoKKyAgICAgICAgLyogU3RyaW5nIHZh
bHVlICovCisgICAgICAgIHRva2VuID0gcmVhZFN0cmluZygpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlICd7JzoKKyAgICBjYXNlICd9JzoKKyAgICBjYXNlICdbJzoKKyAgICBjYXNlICddJzoK
KyAgICBjYXNlICc6JzoKKyAgICBjYXNlICcsJzoKKyAgICAgICAgdG9rZW4gPSBtX2N1cnJlbnQ7
CisgICAgICAgIHNoaWZ0KDEpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICd0JzoKKyAgICAg
ICAgaWYgKG1fY3VycmVudCA9PSAndCcgJiYgbV9uZXh0MSA9PSAncicgJiYgbV9uZXh0MiA9PSAn
dScgJiYgbV9uZXh0MyA9PSAnZScpIHsKKyAgICAgICAgICAgIHRva2VuID0gVFJVRVRPS0VOOwor
ICAgICAgICAgICAgc2hpZnQoNCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSAnZic6CisgICAgICAgIGlmIChtX2N1cnJlbnQgPT0gJ2YnICYmIG1fbmV4dDEgPT0gJ2EnICYm
IG1fbmV4dDIgPT0gJ2wnICYmIG1fbmV4dDMgPT0gJ3MnICYmIG1fbmV4dDQgPT0gJ2UnKSB7Cisg
ICAgICAgICAgICBzaGlmdCg1KTsKKyAgICAgICAgICAgIHRva2VuID0gRkFMU0VUT0tFTjsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgICAgaWYgKG1fY3Vy
cmVudCA9PSAnbicgJiYgbV9uZXh0MSA9PSAndScgJiYgbV9uZXh0MiA9PSAnbCcgJiYgbV9uZXh0
MyA9PSAnbCcpIHsKKyAgICAgICAgICAgIHRva2VuID0gTlVMTFRPS0VOOworICAgICAgICAgICAg
c2hpZnQoNCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgaWYgKG1fY3VycmVudCA9PSAnLScgfHwgaXNEaWdpdChtX2N1cnJlbnQpKQorICAgICAgICAg
ICAgdG9rZW4gPSByZWFkTnVtYmVyKCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFN5
bnRheCBlcnJvci4gICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIHRva2VuID0gLTE7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICAKKyAgICBsbG9jcC0+Zmlyc3RfbGluZSA9IG1fbGlu
ZTsKKyAgICBsbG9jcC0+bGFzdF9saW5lID0gbV9saW5lOworICAgIGxsb2NwLT5maXJzdF9jb2x1
bW4gPSBtX2NvbHVtbjsKKyAgICBsbG9jcC0+bGFzdF9jb2x1bW4gPSBtX2NvbHVtbjsKKworICAg
IGlmICh0b2tlbiA9PSBOVU1CRVIpIHsKKyAgICAgICAgbV9hc2NpaUJ1ZmZlci5hcHBlbmQoMCk7
CisgICAgICAgIGx2YWxwLT5kb3VibGVWYWx1ZSA9IFdURjo6c3RydG9kKG1fYXNjaWlCdWZmZXIu
ZGF0YSgpLCAwTCk7CisgICAgfSBlbHNlIGlmICh0b2tlbiA9PSBTVFJJTkcpIHsKKyAgICAgICAg
bHZhbHAtPmlkZW50ID0gbWFrZUlkZW50aWZpZXIobV91bmljb2RlQnVmZmVyKTsKKyAgICB9IGVs
c2UgaWYodG9rZW4gPT0gLTEpIHsKKyAgICAgICAgbV9lcnJvciA9IHRydWU7CisgICAgfQorICAg
IHJldHVybiB0b2tlbjsKK30KKwordm9pZCBKU09OTGV4ZXI6OnJlYWREaWdpdHMoKQoreworICAg
IHdoaWxlKGlzRGlnaXQobV9jdXJyZW50KSkgeworICAgICAgICBhZGRBc2NpaShtX2N1cnJlbnQp
OworICAgICAgICBzaGlmdCgxKTsgICAgIAorICAgIH0KK30KKworaW50IEpTT05MZXhlcjo6cmVh
ZE51bWJlcigpCit7CisgICAgaWYgKG1fY3VycmVudCA9PSAnLScpIHsKKyAgICAgICAgYWRkQXNj
aWkobV9jdXJyZW50KTsKKyAgICAgICAgc2hpZnQoMSk7CisgICAgfQorICAgICAgICAKKyAgICBz
d2l0Y2gobV9jdXJyZW50KSB7CisgICAgY2FzZSAnMCc6CisgICAgICAgIC8qIExlYWRpbmcgemVy
byBpcyBub3QgYWxsb3dlZCBpbiBKU09OOgorICAgICAgICAgKiBpLmUgKDAxLCAwRSsxLCAwZSsx
KQorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG1fbmV4dDEgIT0gJy4nIAorICAgICAgICAgICAg
JiYgKG1fbmV4dDEgPT0gJ0UnIHx8IG1fbmV4dDEgPT0gJ2UnIHx8IGlzRGlnaXQobV9uZXh0MSkp
KQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBhZGRBc2NpaShtX2N1cnJlbnQpOwor
ICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
aWYgKG1fY3VycmVudCA8ICcxJyB8fCAgbV9jdXJyZW50ID4gJzknKQorICAgICAgICAgICAgcmV0
dXJuIC0xOworICAgICAgICByZWFkRGlnaXRzKCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor
ICAgIGlmIChtX2N1cnJlbnQgPT0gJy4nICYmICFpc0RpZ2l0KG1fbmV4dDEpKQorICAgICAgICBy
ZXR1cm4gLTE7CisgICAgZWxzZSBpZiAobV9jdXJyZW50ID09ICcuJykgeworICAgICAgICBhZGRB
c2NpaShtX2N1cnJlbnQpOworICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgcmVhZERpZ2l0cygp
OworICAgIH0KKworICAgIGlmIChtX2N1cnJlbnQgPT0gJ2UnIHx8IG1fY3VycmVudCA9PSAnRScp
IHsKKyAgICAgICBpZiAoIWlzRGlnaXQobV9uZXh0MSkKKyAgICAgICAgICAmJiAobV9uZXh0MSAh
PSAnKycgJiYgbV9uZXh0MSAhPSAnKycgJiYgIWlzRGlnaXQobV9uZXh0MikpKQorICAgICAgICAg
ICAgcmV0dXJuIC0xOworICAgICAgICBhZGRBc2NpaShtX2N1cnJlbnQpOworICAgICAgICBhZGRB
c2NpaShtX25leHQxKTsKKyAgICAgICAgc2hpZnQoMik7CisgICAgICAgIHJlYWREaWdpdHMoKTsK
KyAgICB9CisgICAgcmV0dXJuIE5VTUJFUjsKK30KKworaW50IEpTT05MZXhlcjo6cmVhZFN0cmlu
ZygpCit7CisgICAgYm9vbCBkb25lID0gZmFsc2U7CisgICAgaW50IHRva2VuID0gLTE7CisKKyAg
ICBzaGlmdCgxKTsKKyAgICB3aGlsZSAoIWRvbmUpIHsKKyAgICAgICAgaWYgKG1fY3VycmVudCA9
PSAnXFwnKSB7CisgICAgICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgICAgIGlmIChtX2N1cnJl
bnQgPT0gJ24nKSB7CisgICAgICAgICAgICAgICAgYWRkVW5pY29kZSgnXG4nKTsKKyAgICAgICAg
ICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ID09ICdy
JykgeworICAgICAgICAgICAgICAgIGFkZFVuaWNvZGUoJ1xyJyk7CisgICAgICAgICAgICAgICAg
c2hpZnQoMSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKG1fY3VycmVudCA9PSAnYicpIHsKKyAg
ICAgICAgICAgICAgICBhZGRVbmljb2RlKCdcYicpOworICAgICAgICAgICAgICAgIHNoaWZ0KDEp
OworICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJ3QnKSB7CisgICAgICAgICAg
ICAgICAgYWRkVW5pY29kZSgnXHQnKTsKKyAgICAgICAgICAgICAgICBzaGlmdCgxKTsKKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAobV9jdXJyZW50ID09ICdcXCcpIHsKKyAgICAgICAgICAgICAgICBh
ZGRVbmljb2RlKCdcXCcpOworICAgICAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChtX2N1cnJlbnQgPT0gJy8nKSB7CisgICAgICAgICAgICAgICAgYWRkVW5pY29k
ZSgnLycpOworICAgICAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgICAgfSBlbHNlIGlm
IChtX2N1cnJlbnQgPT0gJ2YnKSB7CisgICAgICAgICAgICAgICAgYWRkVW5pY29kZSgnXGYnKTsK
KyAgICAgICAgICAgICAgICBzaGlmdCgxKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAobV9jdXJy
ZW50ID09ICdcIicpIHsKKyAgICAgICAgICAgICAgICBhZGRVbmljb2RlKCdcIicpOworICAgICAg
ICAgICAgICAgIHNoaWZ0KDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChtX2N1cnJlbnQgPT0g
J3UnKSB7CisgICAgICAgICAgICAgICAgc2hpZnQoMSk7CisgICAgICAgICAgICAgICAgaWYgKGlz
SGV4KG1fY3VycmVudCkgJiYgaXNIZXgobV9uZXh0MSkgJiYgaXNIZXgobV9uZXh0MikgJiYgaXNI
ZXgobV9uZXh0MykpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkVW5pY29kZShjb252ZXJ0VW5p
Y29kZShtX2N1cnJlbnQsIG1fbmV4dDEsIG1fbmV4dDIsIG1fbmV4dDMpKTsKKyAgICAgICAgICAg
ICAgICAgICAgc2hpZnQoNCk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgLy8gVW5pY29kZSBzaG91bGQgYmUgXHVYWFhYCisgICAgICAgICAgICAgICAgICAg
IGRvbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB0b2tlbj0gLTE7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBkb25lID0gdHJ1
ZTsKKyAgICAgICAgICAgICAgICB0b2tlbj0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0g
ZWxzZSBpZiAobV9jdXJyZW50ID09ICdcIicpIHsKKyAgICAgICAgICAgIGRvbmUgPSB0cnVlOwor
ICAgICAgICAgICAgdG9rZW49IFNUUklORzsKKyAgICAgICAgICAgIHNoaWZ0KDEpOworICAgICAg
ICB9IGVsc2UgaWYgKGlzQVNDSUlQcmludGFibGUobV9jdXJyZW50KSkgeworICAgICAgICAgICAg
YWRkVW5pY29kZShtX2N1cnJlbnQpOworICAgICAgICAgICAgc2hpZnQoMSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBkb25lICA9IHRydWU7CisgICAgICAgICAgICB0b2tlbiA9IC0x
OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHRva2VuOworfQorCit2b2lkIEpTT05M
ZXhlcjo6YWRkVW5pY29kZShpbnQgYykKK3sKKyAgICBhZGRVbmljb2RlKHN0YXRpY19jYXN0PHVu
c2lnbmVkIHNob3J0PihjKSk7Cit9Cit2b2lkIEpTT05MZXhlcjo6YWRkVW5pY29kZShVQ2hhciBj
KQoreworICAgIG1fdW5pY29kZUJ1ZmZlci5hcHBlbmQoYyk7Cit9CisKK3ZvaWQgSlNPTkxleGVy
OjphZGRBc2NpaShpbnQgYykKK3sKKyAgICBBU1NFUlQoYyA+PSAwKTsKKyAgICBBU1NFUlQoYyA8
PSAweGZmKTsKKyAgICBtX2FzY2lpQnVmZmVyLmFwcGVuZChzdGF0aWNfY2FzdDxjaGFyPihjKSk7
Cit9CisKK3Vuc2lnbmVkIGNoYXIgSlNPTkxleGVyOjpjb252ZXJ0SGV4KGludCBjKQoreworICAg
IGlmIChjID49ICcwJyAmJiBjIDw9ICc5JykKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXI+KGMgLSAnMCcpOworICAgIGlmIChjID49ICdhJyAmJiBjIDw9ICdmJykKKyAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMgLSAnYScgKyAxMCk7Cisg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGMgLSAnQScgKyAxMCk7Cit9CisK
K3Vuc2lnbmVkIGNoYXIgSlNPTkxleGVyOjpjb252ZXJ0SGV4KGludCBjMSwgaW50IGMyKQorewor
ICAgIHJldHVybiAoKGNvbnZlcnRIZXgoYzEpIDw8IDQpICsgY29udmVydEhleChjMikpOworfQor
CitVQ2hhciBKU09OTGV4ZXI6OmNvbnZlcnRVbmljb2RlKGludCBjMSwgaW50IGMyLCBpbnQgYzMs
IGludCBjNCkKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGhpZ2hCeXRlID0gKGNvbnZlcnRIZXgoYzEp
IDw8IDQpICsgY29udmVydEhleChjMik7CisgICAgdW5zaWduZWQgY2hhciBsb3dCeXRlID0gKGNv
bnZlcnRIZXgoYzMpIDw8IDQpICsgY29udmVydEhleChjNCk7CisgICAgcmV0dXJuIChoaWdoQnl0
ZSA8PCA4IHwgbG93Qnl0ZSk7Cit9CisKK0pTQzo6SWRlbnRpZmllciogSlNPTkxleGVyOjptYWtl
SWRlbnRpZmllcihjb25zdCBWZWN0b3I8VUNoYXI+JiBidWZmZXIpCit7CisgICAgbV9pZGVudGlm
aWVycy5hcHBlbmQoSlNDOjpJZGVudGlmaWVyKG1fZ2xvYmFsRGF0YSwgYnVmZmVyLmRhdGEoKSwg
YnVmZmVyLnNpemUoKSkpOworICAgIHJldHVybiAmbV9pZGVudGlmaWVycy5sYXN0KCk7Cit9CisK
K30KSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9KU09OTGV4ZXIuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvSlNPTkxleGVyLmgJKHJldmlzaW9uIDApCisrKyBKYXZh
U2NyaXB0Q29yZS9wYXJzZXIvSlNPTkxleGVyLmgJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsOTMg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
Q09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqCisgKi8KKyNpZm5kZWYgSlNPTkxleGVyX2gKKyNkZWZpbmUgSlNPTkxleGVyX2gK
KworI2luY2x1ZGUgIklkZW50aWZpZXIuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRWZWN0b3IuaCIK
KyNpbmNsdWRlICJTb3VyY2VDb2RlLmgiCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1
ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKKyAgICBjbGFz
cyBKU09OTGV4ZXIgOiBOb25jb3B5YWJsZSB7CisgICAgcHVibGljOgorICAgICAgICBKU09OTGV4
ZXIoKTsKKyAgICAgICAgfkpTT05MZXhlcigpIHt9OworCisgICAgICAgIHZvaWQgY2xlYXIoKTsK
KyAgICAgICAgdm9pZCBzZXRDb2RlKGNvbnN0IFNvdXJjZUNvZGUmKTsKKyAgICAgICAgaW50IGxl
eCh2b2lkKiBsdmFscCwgdm9pZCogbGxvY3ApOworCisgICAgICAgIGludCBsaW5lTm8oKSBjb25z
dCB7IHJldHVybiBtX2xpbmU7IH0KKyAgICAgICAgaW50IGNvbHVtbk5vKCkgY29uc3QgeyByZXR1
cm4gbV9jb2x1bW47IH0KKworICAgICAgICB2b2lkIHNldEdsb2JhbERhdGEoSlNHbG9iYWxEYXRh
ICpnbG9iYWxEYXRhKSB7IG1fZ2xvYmFsRGF0YSA9IGdsb2JhbERhdGE7IH0KKyAgICAgICAgYm9v
bCBzYXdFcnJvcigpIGNvbnN0IHsgcmV0dXJuIG1fZXJyb3I7IH0KKyAgICBwcml2YXRlOgorICAg
ICAgICBWZWN0b3I8VUNoYXI+IG1fdW5pY29kZUJ1ZmZlcjsKKyAgICAgICAgVmVjdG9yPGNoYXI+
IG1fYXNjaWlCdWZmZXI7CisKKyAgICAgICAgdW5zaWduZWQgaW50IG1fcG9zaXRpb247CisgICAg
ICAgIGNvbnN0IFVDaGFyICptX2NvZGU7CisgICAgICAgIHVuc2lnbmVkIGludCBtX2xlbmd0aDsK
KyAgICAgICAgY29uc3QgU291cmNlQ29kZSogbV9zb3VyY2U7CisKKyAgICAgICAgaW50IG1fY3Vy
cmVudDsKKyAgICAgICAgaW50IG1fbmV4dDE7CisgICAgICAgIGludCBtX25leHQyOworICAgICAg
ICBpbnQgbV9uZXh0MzsKKyAgICAgICAgaW50IG1fbmV4dDQ7CisKKyAgICAgICAgaW50IG1fY29s
dW1uOworICAgICAgICBpbnQgbV9saW5lOworICAgICAgICAKKyAgICAgICAgSlNHbG9iYWxEYXRh
KiBtX2dsb2JhbERhdGE7CisgICAgICAgIGJvb2wgbV9lcnJvcjsKKworICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8SlNDOjpJZGVudGlmaWVyLCA2ND4gbV9pZGVudGlmaWVyczsKKyAgICAgICAgCisg
ICAgICAgIHZvaWQgYWRkQXNjaWkoaW50IGMpOworICAgICAgICB2b2lkIGFkZFVuaWNvZGUoaW50
IGNoKTsKKyAgICAgICAgdm9pZCBhZGRVbmljb2RlKFVDaGFyIGNoKTsKKworICAgICAgICB1bnNp
Z25lZCBjaGFyIGNvbnZlcnRIZXgoaW50IGMxLCBpbnQgYzIpOworICAgICAgICB1bnNpZ25lZCBj
aGFyIGNvbnZlcnRIZXgoaW50IGMpOworICAgICAgICBVQ2hhciBjb252ZXJ0VW5pY29kZShpbnQg
YzEsIGludCBjMiwgaW50IGMzLCBpbnQgYzQpOworCisgICAgICAgIGludCBzaGlmdChpbnQpOwor
ICAgICAgICBpbnQgc2tpcGVXaGl0ZVNwYWNlcygpOworCisgICAgICAgIGludCByZWFkU3RyaW5n
KCk7CisgICAgICAgIGludCByZWFkTnVtYmVyKCk7CisgICAgICAgIHZvaWQgcmVhZERpZ2l0cygp
OworCisgICAgICAgIEpTQzo6SWRlbnRpZmllciogbWFrZUlkZW50aWZpZXIoY29uc3QgVmVjdG9y
PFVDaGFyPiYgYnVmZmVyKTsKKyAgICB9OworfQorCisjZW5kaWYKSW5kZXg6IEphdmFTY3JpcHRD
b3JlL3BhcnNlci9KU09OUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9w
YXJzZXIvSlNPTlBhcnNlci5jcHAJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvSlNPTlBhcnNlci5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODMgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAxOTk5LTIwMDEgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMDEgUGV0ZXIgS2VsbHkgKHBta0Bwb3N0LmNvbSkKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMDMsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMaWJyYXJ5IEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlO
Ry5MSUIuICBJZiBub3QsIHdyaXRlIHRvCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqICBCb3N0b24sIE1B
IDAyMTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTT05QYXJzZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVkZSA8
d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPG1lbW9yeT4KKwordXNpbmcgc3RkOjphdXRvX3B0cjsK
KworI2lmbmRlZiB5eXBhcnNlCitleHRlcm4gaW50IGpzb255eXBhcnNlKHZvaWQqKTsKKyNlbmRp
ZiAKKworCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBKU09OUGFyc2VyOjpwYXJzZShKU0dsb2Jh
bERhdGEqIGdsb2JhbERhdGEsIGludCogZXJyTGluZSwgVVN0cmluZyogZXJyTXNnKQoreworICAg
IG1fc291cmNlRWxlbWVudHMgID0gMDsKKworICAgIGludCBkZWZhdWx0RXJyTGluZTsKKyAgICBV
U3RyaW5nIGRlZmF1bHRFcnJNc2c7CisKKyAgICBpZiAoIWVyckxpbmUpCisgICAgICAgIGVyckxp
bmUgPSAmZGVmYXVsdEVyckxpbmU7CisgICAgaWYgKCFlcnJNc2cpCisgICAgICAgIGVyck1zZyA9
ICZkZWZhdWx0RXJyTXNnOworCisgICAgKmVyckxpbmUgPSAtMTsKKyAgICAqZXJyTXNnID0gMDsK
KworICAgIG1fbGV4ZXIuc2V0Q29kZSgqbV9zb3VyY2UpOworICAgIG1fbGV4ZXIuc2V0R2xvYmFs
RGF0YShnbG9iYWxEYXRhKTsKKworICAgIGludCBwYXJzZUVycm9yID0ganNvbnl5cGFyc2UoZ2xv
YmFsRGF0YSk7CisgICAgYm9vbCBsZXhFcnJvciA9IG1fbGV4ZXIuc2F3RXJyb3IoKTsKKyAgICBt
X2xleGVyLmNsZWFyKCk7CisKKyAgICBpZiAocGFyc2VFcnJvciB8fCBsZXhFcnJvcikgeworICAg
ICAgICAqZXJyTGluZSA9IG1fbGV4ZXIubGluZU5vKCk7CisgICAgICAgICplcnJNc2cgPSAiSlNP
Ti5wYXJzZXIiOworICAgICAgICBtX3NvdXJjZUVsZW1lbnRzID0gMDsKKyAgICB9Cit9CisKK3Zv
aWQgSlNPTlBhcnNlcjo6ZGlkRmluaXNoUGFyc2luZyhTb3VyY2VFbGVtZW50cyogc291cmNlRWxl
bWVudHMsIENvZGVGZWF0dXJlcyBmZWF0dXJlcywgaW50IGxhc3RMaW5lLCBpbnQgbnVtQ29uc3Rh
bnRzKQoreworICAgIG1fc291cmNlRWxlbWVudHMgPSBzb3VyY2VFbGVtZW50czsKKyAgICBtX2Zl
YXR1cmVzID0gZmVhdHVyZXM7CisgICAgbV9sYXN0TGluZSA9IGxhc3RMaW5lOworICAgIG1fbnVt
Q29uc3RhbnRzID0gbnVtQ29uc3RhbnRzOworfQorCit2b2lkIEpTT05QYXJzZXI6OmxvZyhjb25z
dCBjaGFyICppbmZvKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiJXNcbiIsIGluZm8pOworICAg
IGZmbHVzaChzdGRlcnIpOworfQorCisKK30gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNj
cmlwdENvcmUvcGFyc2VyL0pTT05QYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29y
ZS9wYXJzZXIvSlNPTlBhcnNlci5oCShyZXZpc2lvbiAwKQorKysgSmF2YVNjcmlwdENvcmUvcGFy
c2VyL0pTT05QYXJzZXIuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OSBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICog
IENvcHlyaWdodCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExpYnJhcnkgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorICogIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIEpTT05QYXJzZXJfaAorI2RlZmlu
ZSBKU09OUGFyc2VyX2gKKworI2luY2x1ZGUgIkpTT05MZXhlci5oIgorI2luY2x1ZGUgIlNvdXJj
ZVByb3ZpZGVyLmgiCisjaW5jbHVkZSAiTm9kZXMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4K
KyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisgICAgY2xhc3Mg
VVN0cmluZzsKKyAgICBjbGFzcyBKU09OTGV4ZXI7CisKKyAgICBjbGFzcyBKU09OUGFyc2VyIDog
Tm9uY29weWFibGUgeworICAgIHB1YmxpYzoKKyAgICAgICAgdGVtcGxhdGUgPGNsYXNzIFBhcnNl
ZE5vZGU+IFBhc3NSZWZQdHI8UGFyc2VkTm9kZT4gcGFyc2UoRXhlY1N0YXRlKiwgY29uc3QgU291
cmNlQ29kZSYsIGludCogZXJyTGluZSA9IDAsIFVTdHJpbmcqIGVyck1zZyA9IDApOworICAgICAg
ICB2b2lkIGRpZEZpbmlzaFBhcnNpbmcoU291cmNlRWxlbWVudHMqLCBDb2RlRmVhdHVyZXMgZmVh
dHVyZXMsIGludCBsYXN0TGluZSwgaW50IG51bUNvbnN0YW50cyk7CisgICAgICAgIHZvaWQgbG9n
KGNvbnN0IGNoYXIgKmluZm8pOworICAgICAgICBKU09OTGV4ZXImIGdldExleGVyKCkgeyByZXR1
cm4gbV9sZXhlcjsgfQorICAgIHByaXZhdGU6CisgICAgICAgIHZvaWQgcGFyc2UoSlNHbG9iYWxE
YXRhKiwgaW50KiBlcnJMaW5lLCBVU3RyaW5nKiBlcnJNc2cpOworCisgICAgICAgIGNvbnN0IFNv
dXJjZUNvZGUqIG1fc291cmNlOworICAgICAgICBTb3VyY2VFbGVtZW50cyogbV9zb3VyY2VFbGVt
ZW50czsKKyAgICAgICAgQ29kZUZlYXR1cmVzIG1fZmVhdHVyZXM7CisgICAgICAgIGludCBtX2xh
c3RMaW5lOworICAgICAgICBpbnQgbV9udW1Db25zdGFudHM7CisgICAgICAgIEpTT05MZXhlciBt
X2xleGVyOworICAgIH07CisKKyAgICB0ZW1wbGF0ZSA8Y2xhc3MgUGFyc2VkTm9kZT4gUGFzc1Jl
ZlB0cjxQYXJzZWROb2RlPiBKU09OUGFyc2VyOjpwYXJzZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0
IFNvdXJjZUNvZGUmIHNvdXJjZSwgaW50KiBlcnJMaW5lLCBVU3RyaW5nKiBlcnJNc2cpCisgICAg
eworICAgICAgICBtX3NvdXJjZSA9ICZzb3VyY2U7CisgICAgICAgIHBhcnNlKCZleGVjLT5nbG9i
YWxEYXRhKCksIGVyckxpbmUsIGVyck1zZyk7CisgICAgICAgIFJlZlB0cjxQYXJzZWROb2RlPiBy
ZXN1bHQ7CisgICAgICAgIGlmIChtX3NvdXJjZUVsZW1lbnRzKSB7CisgICAgICAgICAgICByZXN1
bHQgPSBQYXJzZWROb2RlOjpjcmVhdGUoJmV4ZWMtPmdsb2JhbERhdGEoKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zb3VyY2VFbGVtZW50cywKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgKm1fc291cmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBtX2ZlYXR1cmVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtX251bUNvbnN0YW50cyk7CisgICAgICAgICAgICByZXN1bHQtPnNldExvYyhtX3NvdXJjZS0+
Zmlyc3RMaW5lKCksIG1fbGFzdExpbmUpOworICAgICAgICB9CisKKyAgICAgICAgbV9zb3VyY2Ug
PSAwOworICAgICAgICBtX3NvdXJjZUVsZW1lbnRzID0gMDsKKworICAgICAgICByZXR1cm4gcmVz
dWx0LnJlbGVhc2UoKTsKKyAgICB9Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEpT
T05QYXJzZXJfaApJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAko
cmV2aXNpb24gNDM2NjcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYgKzQzLDcgQEAKICNpbmNsdWRlICJKU05vdEFuT2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiSlNTdGF0aWNTY29wZU9iamVjdC5oIgogI2luY2x1ZGUgIlBhcnNl
ci5oIgorI2luY2x1ZGUgIkpTT05QYXJzZXIuaCIKICNpbmNsdWRlICJMZXhlci5oIgogI2luY2x1
ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCkBAIC02MSw2ICs2Miw3IEBAIG5hbWVz
cGFjZSBKU0MgewogCiBleHRlcm4gY29uc3QgSGFzaFRhYmxlIGFycmF5VGFibGU7CiBleHRlcm4g
Y29uc3QgSGFzaFRhYmxlIGRhdGVUYWJsZTsKK2V4dGVybiBjb25zdCBIYXNoVGFibGUganNvblRh
YmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSBtYXRoVGFibGU7CiBleHRlcm4gY29uc3QgSGFz
aFRhYmxlIG51bWJlclRhYmxlOwogZXh0ZXJuIGNvbnN0IEhhc2hUYWJsZSByZWdFeHBUYWJsZTsK
QEAgLTEwNSw2ICsxMDcsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xvYmFsRGF0YShib29sIGlzU2hh
cmVkCiAgICAgLCBjbGllbnREYXRhKDApCiAgICAgLCBhcnJheVRhYmxlKG5ldyBIYXNoVGFibGUo
SlNDOjphcnJheVRhYmxlKSkKICAgICAsIGRhdGVUYWJsZShuZXcgSGFzaFRhYmxlKEpTQzo6ZGF0
ZVRhYmxlKSkKKyAgICAsIGpzb25UYWJsZShuZXcgSGFzaFRhYmxlKEpTQzo6anNvblRhYmxlKSkK
ICAgICAsIG1hdGhUYWJsZShuZXcgSGFzaFRhYmxlKEpTQzo6bWF0aFRhYmxlKSkKICAgICAsIG51
bWJlclRhYmxlKG5ldyBIYXNoVGFibGUoSlNDOjpudW1iZXJUYWJsZSkpCiAgICAgLCByZWdFeHBU
YWJsZShuZXcgSGFzaFRhYmxlKEpTQzo6cmVnRXhwVGFibGUpKQpAQCAtMTI4LDYgKzEzMSw3IEBA
IEpTR2xvYmFsRGF0YTo6SlNHbG9iYWxEYXRhKGJvb2wgaXNTaGFyZWQKICAgICAsIGVtcHR5TGlz
dChuZXcgTWFya2VkQXJndW1lbnRCdWZmZXIpCiAgICAgLCBsZXhlcihuZXcgTGV4ZXIodGhpcykp
CiAgICAgLCBwYXJzZXIobmV3IFBhcnNlcikKKyAgICAsIGpzb25QYXJzZXIobmV3IEpTT05QYXJz
ZXIpCiAgICAgLCBpbnRlcnByZXRlcihuZXcgSW50ZXJwcmV0ZXIpCiAjaWYgRU5BQkxFKEpJVCkK
ICAgICAsIGppdFN0dWJzKHRoaXMpCkBAIC0xNTYsNiArMTYwLDcgQEAgSlNHbG9iYWxEYXRhOjp+
SlNHbG9iYWxEYXRhKCkKICAgICBhcnJheVRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIGRhdGVU
YWJsZS0+ZGVsZXRlVGFibGUoKTsKICAgICBtYXRoVGFibGUtPmRlbGV0ZVRhYmxlKCk7CisgICAg
anNvblRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIG51bWJlclRhYmxlLT5kZWxldGVUYWJsZSgp
OwogICAgIHJlZ0V4cFRhYmxlLT5kZWxldGVUYWJsZSgpOwogICAgIHJlZ0V4cENvbnN0cnVjdG9y
VGFibGUtPmRlbGV0ZVRhYmxlKCk7CkBAIC0xNjcsMTEgKzE3MiwxMyBAQCBKU0dsb2JhbERhdGE6
On5KU0dsb2JhbERhdGEoKQogICAgIGRlbGV0ZSBhcnJheVRhYmxlOwogICAgIGRlbGV0ZSBkYXRl
VGFibGU7CiAgICAgZGVsZXRlIG1hdGhUYWJsZTsKKyAgICBkZWxldGUganNvblRhYmxlOwogICAg
IGRlbGV0ZSBudW1iZXJUYWJsZTsKICAgICBkZWxldGUgcmVnRXhwVGFibGU7CiAgICAgZGVsZXRl
IHJlZ0V4cENvbnN0cnVjdG9yVGFibGU7CiAgICAgZGVsZXRlIHN0cmluZ1RhYmxlOwogCisgICAg
ZGVsZXRlIGpzb25QYXJzZXI7CiAgICAgZGVsZXRlIHBhcnNlcjsKICAgICBkZWxldGUgbGV4ZXI7
CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkocmV2aXNpb24gNDM2
NjcpCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01Myw2ICs1Myw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEpTT2JqZWN0
OwogICAgIGNsYXNzIExleGVyOwogICAgIGNsYXNzIFBhcnNlcjsKKyAgICBjbGFzcyBKU09OUGFy
c2VyOwogICAgIGNsYXNzIFNjb3BlTm9kZTsKICAgICBjbGFzcyBTdHJ1Y3R1cmU7CiAgICAgY2xh
c3MgVVN0cmluZzsKQEAgLTgyLDYgKzgzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAg
Y29uc3QgSGFzaFRhYmxlKiBhcnJheVRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIGRh
dGVUYWJsZTsKKyAgICAgICAgY29uc3QgSGFzaFRhYmxlKiBqc29uVGFibGU7CiAgICAgICAgIGNv
bnN0IEhhc2hUYWJsZSogbWF0aFRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIG51bWJl
clRhYmxlOwogICAgICAgICBjb25zdCBIYXNoVGFibGUqIHJlZ0V4cFRhYmxlOwpAQCAtMTE0LDYg
KzExNiw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIExleGVyKiBsZXhlcjsKICAgICAg
ICAgUGFyc2VyKiBwYXJzZXI7CisgICAgICAgIEpTT05QYXJzZXIgKmpzb25QYXJzZXI7CiAgICAg
ICAgIEludGVycHJldGVyKiBpbnRlcnByZXRlcjsKICNpZiBFTkFCTEUoSklUKQogICAgICAgICBK
SVRTdHVicyBqaXRTdHViczsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiA0MzY2NykKKysrIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw2ICs2OCw3IEBACiAjaW5jbHVk
ZSAiU3RyaW5nQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTdHJpbmdQcm90b3R5cGUuaCIKICNp
bmNsdWRlICJEZWJ1Z2dlci5oIgorI2luY2x1ZGUgIkpTT05PYmplY3QuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKQEAgLTMxMyw2ICszMTQsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChK
U1ZhbHVlIHByb3RvCiAKICAgICAvLyBTZXQgZ2xvYmFsIHZhbHVlcy4KICAgICBHbG9iYWxQcm9w
ZXJ0eUluZm8gc3RhdGljR2xvYmFsc1tdID0geworICAgICAgICBHbG9iYWxQcm9wZXJ0eUluZm8o
SWRlbnRpZmllcihleGVjLCAiSlNPTiIpLCBuZXcgKGV4ZWMpIEpTT05PYmplY3QoSlNPTk9iamVj
dDo6Y3JlYXRlU3RydWN0dXJlKGQoKS0+b2JqZWN0UHJvdG90eXBlKSksIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSksCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyhJZGVudGlmaWVyKGV4ZWMsICJN
YXRoIiksIG5ldyAoZXhlYykgTWF0aE9iamVjdChleGVjLCBNYXRoT2JqZWN0OjpjcmVhdGVTdHJ1
Y3R1cmUoZCgpLT5vYmplY3RQcm90b3R5cGUpKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKICAg
ICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKElkZW50aWZpZXIoZXhlYywgIk5hTiIpLCBqc05hTihl
eGVjKSwgRG9udEVudW0gfCBEb250RGVsZXRlKSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KElkZW50aWZpZXIoZXhlYywgIkluZmluaXR5IiksIGpzTnVtYmVyKGV4ZWMsIEluZiksIERvbnRF
bnVtIHwgRG9udERlbGV0ZSksCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmpl
Y3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNPTk9iamVjdC5j
cHAJKHJldmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuY3Bw
CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5
OTktMjAwMCBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkpT
T05PYmplY3QuaCIKKyNpbmNsdWRlICJKU09OUGFyc2VyLmgiCisjaW5jbHVkZSAiTm9kZXMuaCIK
KyNpbmNsdWRlICJQcm9wZXJ0eU5hbWVBcnJheS5oIgorI2luY2x1ZGUgIkpTQXJyYXkuaCIKKwor
I2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgorI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKKyNp
bmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgorCisKK25hbWVzcGFjZSBKU0MgeworCitBU1NFUlRfQ0xBU1NfRklU
U19JTl9DRUxMKEpTT05PYmplY3QpOworCitzdGF0aWMgSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpT
T05Qcm90b0Z1bmNQYXJzZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFy
Z0xpc3QmKTsKK3N0YXRpYyBKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmlu
Z2lmeShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUsIGNvbnN0IEFyZ0xpc3QmKTsKKwor
fQorCisjaW5jbHVkZSAiSlNPTk9iamVjdC5sdXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8v
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBKU09OT2JqZWN0IC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisKK2NvbnN0IENsYXNzSW5mbyBKU09OT2JqZWN0OjppbmZvID0g
eyAiSlNPTiIsIDAsIDAsIEV4ZWNTdGF0ZTo6anNvblRhYmxlIH07CisKKy8qIFNvdXJjZSBmb3Ig
SlNPTk9iamVjdC5sdXQuaAorQGJlZ2luIGpzb25UYWJsZQorICBwYXJzZSAgICAgICAgIEpTT05Q
cm90b0Z1bmNQYXJzZSAgICAgICAgICAgICBEb250RW51bXxGdW5jdGlvbiAxCisgIHN0cmluZ2lm
eSAgICAgSlNPTlByb3RvRnVuY1N0cmluZ2lmeSAgICAgICAgIERvbnRFbnVtfEZ1bmN0aW9uIDEK
K0BlbmQKKyovCisKKy8vIEVDTUEgMTUuOAorCitib29sIEpTT05PYmplY3Q6OmdldE93blByb3Bl
cnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90ICZzbG90KQoreworICAgIGNvbnN0IEhhc2hFbnRyeSogZW50cnkgPSBFeGVj
U3RhdGU6Ompzb25UYWJsZShleGVjKS0+ZW50cnkoZXhlYywgcHJvcGVydHlOYW1lKTsKKworICAg
IGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBKU09iamVjdDo6Z2V0T3duUHJvcGVydHlTbG90
KGV4ZWMsIHByb3BlcnR5TmFtZSwgc2xvdCk7CisKKyAgICBBU1NFUlQoZW50cnktPmF0dHJpYnV0
ZXMoKSAmIEZ1bmN0aW9uKTsKKyAgICBzZXRVcFN0YXRpY0Z1bmN0aW9uU2xvdChleGVjLCBlbnRy
eSwgdGhpcywgcHJvcGVydHlOYW1lLCBzbG90KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSGVscGVyIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK3N0YXRpYyBKU1ZhbHVlIGNhbGxSZXZpdmVyKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB0aGlzT2JqZWN0LCBKU1ZhbHVlIGpzVmFsdWUsIEpTVmFsdWUganNLZXks
IEpTRnVuY3Rpb24gKnJldml2ZXIpCit7CisgICAgaWYgKCFqc1ZhbHVlLmlzTnVsbCgpICYmIGpz
VmFsdWUuaXNPYmplY3QoKSkgeworICAgICAgICAvLyBPYmplY3QgLyBBcnJheQorICAgICAgICBK
U09iamVjdCAqb2JqID0ganNWYWx1ZS50b09iamVjdChleGVjKTsKKyAgICAgICAgUHJvcGVydHlO
YW1lQXJyYXkgbmFtZXMoZXhlYyk7CisgICAgICAgIAorICAgICAgICAvLyBHZXQgbGlzdCBvZiBw
cm9wZXJ0eSBuYW1lcy4KKyAgICAgICAgb2JqLT5nZXRQcm9wZXJ0eU5hbWVzKGV4ZWMsIG5hbWVz
KTsKKworICAgICAgICBQcm9wZXJ0eU5hbWVBcnJheTo6Y29uc3RfaXRlcmF0b3IgY3VycmVudCA9
IG5hbWVzLmJlZ2luKCk7CisgICAgICAgIFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRv
ciBlbmQgICAgID0gbmFtZXMuZW5kKCk7CisKKyAgICAgICAgZm9yICg7IGN1cnJlbnQgIT0gZW5k
OyBjdXJyZW50KyspIHsKKyAgICAgICAgICAgIEpTVmFsdWUgbmFtZSA9IGpzT3duZWRTdHJpbmco
ZXhlYywgY3VycmVudC0+dXN0cmluZygpKTsKKyAgICAgICAgICAgIEpTVmFsdWUgdmFsdWU9IG9i
ai0+Z2V0KGV4ZWMsICpjdXJyZW50KTsKKworCisgICAgICAgICAgICBKU1ZhbHVlIHJlc3VsdCA9
IGNhbGxSZXZpdmVyKGV4ZWMsIHRoaXNPYmplY3QsIHZhbHVlLCBuYW1lLCByZXZpdmVyKTsKKwor
ICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBleGVjLT5leGNlcHRpb24oKTsKKworICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1VuZGVm
aW5lZCgpKXsKKyAgICAgICAgICAgICAgICBvYmotPmRlbGV0ZVByb3BlcnR5KGV4ZWMsICpjdXJy
ZW50KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgUHV0UHJvcGVydHlT
bG90IHNsb3Q7CisgICAgICAgICAgICAgICAgb2JqLT5wdXQoZXhlYywgKCpjdXJyZW50KSwgcmVz
dWx0LCBzbG90KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworCisgICAgSlNW
YWx1ZSBsaXN0WzJdOworICAgIGxpc3RbMF0gPSBqc0tleTsKKyAgICBsaXN0WzFdID0ganNWYWx1
ZTsKKworICAgIEFyZ0xpc3QgYXJncyhsaXN0LCAyKTsKKworICAgIC8vIENhbGwgcmV2aXZlcgor
ICAgIHJldHVybiByZXZpdmVyLT5jYWxsKGV4ZWMsIHRoaXNPYmplY3QsIGFyZ3MpOworfQorCitz
dGF0aWMgdm9pZCBidWlsZFN0cmluZyhVU3RyaW5nIHZhbHVlLCBVU3RyaW5nJiByZXN1bHQpCit7
CisgICAgaW50IGxlbmd0aCAgPSB2YWx1ZS5zaXplKCk7CisgICAgY29uc3QgVUNoYXIgKmRhdGEg
PSB2YWx1ZS5kYXRhKCk7CisgICAgaW50IGluZGV4OworCisgICAgcmVzdWx0LmFwcGVuZCgnXCIn
KTsKKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKKyAgICAg
ICAgc3dpdGNoKGRhdGFbaW5kZXhdKXsKKyAgICAgICAgY2FzZSAnXHQnOgorICAgICAgICAgICAg
cmVzdWx0LmFwcGVuZCgiXFx0Iik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAn
XHInOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXFxyIik7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAnXG4nOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXFxuIik7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXGYnOgorICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZCgiXFxmIik7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnXGIn
OgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXFxiIik7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAnXCInOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCgiXFxcIiIpOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1xcJzoKKyAgICAgICAgICAgIHJlc3Vs
dC5hcHBlbmQoIlxcXFwiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgaWYgKHN0YXRpY19jYXN0PGludD4oZGF0YVtpbmRleF0pID49IDB4MWYpCisg
ICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChkYXRhW2luZGV4XSk7CisgICAgICAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAgICAgLyogQ29udmVydCBhbnkgbm9uIHByaW50YWJsZSBjaGFy
YWN0ZXIgdG8KKyAgICAgICAgICAgICAgICAgKiBcdVhYWFggZm9ybWF0LgorICAgICAgICAgICAg
ICAgICAqLyAKKyAgICAgICAgICAgICAgICBjaGFyIG9jdFs4XTsKKyAgICAgICAgICAgICAgICBz
cHJpbnRmKG9jdCwgIlxcdSUwNHgiLCBkYXRhW2luZGV4XSk7CisgICAgICAgICAgICAgICAgcmVz
dWx0LmFwcGVuZChvY3QpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgfQorICAgIHJlc3VsdC5hcHBlbmQoJ1wiJyk7Cit9CisKK3N0YXRpYyBKU1Zh
bHVlIHRvSlNPTihFeGVjU3RhdGUgKmV4ZWMsIEpTVmFsdWUganNLZXksIEpTVmFsdWUganNWYWx1
ZSkKK3sKKyAgICBJZGVudGlmaWVyIG5hbWUoZXhlYywgInRvSlNPTiIpOworCisgICAgaWYoIWpz
VmFsdWUuaXNPYmplY3QoKSB8fCAhYXNPYmplY3QoanNWYWx1ZSktPmhhc1Byb3BlcnR5KGV4ZWMs
IG5hbWUpKQorICAgIHsKKyAgICAgICAgLyogRG8gbm90aGluZyBpZiAKKyAgICAgICAgICogMS4g
VGhlIHZhbHVlIGlzIG5vdCBPYmplY3QuCisgICAgICAgICAqIDIuIHZhbHVlIGlzIHVuZGVmaW5l
ZCBvciBOdWxsLgorICAgICAgICAgKiAzLiBPYmplY3QgZG9lc24ndCBoYXZlIHRvSlNPTiBtZXRo
b2QuCisgICAgICAgICAqLworICAgICAgICByZXR1cm4ganNWYWx1ZTsKKyAgICB9CisgICAgCisg
ICAgLy8gR2V0IHJlZmVyZW5jZSB0byB0b0pTT04gbWV0aG9kLgorICAgIEpTVmFsdWUganN0b0pT
T04gPSBhc09iamVjdChqc1ZhbHVlKS0+Z2V0KGV4ZWMsIG5hbWUpOworCisgICAgLy8gTWFrZSBz
dXJlIHRoaXMgYSBmdW5jdGlvbi4KKyAgICBpZiAoIWpzdG9KU09OLmlzT2JqZWN0KCkgfHwgIWFz
T2JqZWN0KGpzdG9KU09OKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pKQorICAgICAgICBy
ZXR1cm4ganNWYWx1ZTsKKworICAgIC8vIE5vdyBjYWxsIHRoZSBtd3Rob2QgYW5kIHJldHVybiBy
ZXN1bHQuCisgICAgSlNWYWx1ZSBsaXN0WzFdOworICAgIGxpc3RbMF0gPSBqc0tleTsKKworICAg
IEFyZ0xpc3QgYXJncyhsaXN0LCAxKTsKKyAgICByZXR1cm4gYXNGdW5jdGlvbihqc3RvSlNPTikt
PmNhbGwoZXhlYywganNWYWx1ZSwgYXJncyk7Cit9CisKK3N0YXRpYyBib29sIHN0cmluZ2lmeShF
eGVjU3RhdGUgKmV4ZWMsIEpTVmFsdWUganNLZXksIEpTVmFsdWUganNWYWx1ZSwgVVN0cmluZyYg
YnVmZmVyLCBib29sIGlzQXJyYXlPYmplY3QgPSBmYWxzZSwgYm9vbCBpc0ZpcnN0VmFsdWUgPSB0
cnVlKQoreworICAgIC8qIFNlZSBpZiBpdCdzIGFuZCBvYmplY3QgaXQgdGhlIG9iamVjdCBoYXMK
KyAgICAgKiB0b0pTT04gbWV0aG9kLgorICAgICAqLworICAgIGpzVmFsdWUgPSB0b0pTT04oZXhl
YywganNLZXksIGpzVmFsdWUpOworCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBpZiAoanNWYWx1ZS5pc1VuZGVmaW5lZCgpICYmIGlz
QXJyYXlPYmplY3QpIHsKKyAgICAgICAgLy8gRm9yIGFycmF5IHJlcGxhY2UgdW5kZWZpbmVkIHdp
dGggbnVsbAorICAgICAgICBqc1ZhbHVlID0ganNOdWxsKCk7CisgICAgfSBlbHNlIGlmIChqc1Zh
bHVlLmlzVW5kZWZpbmVkKCkgfHwgKGpzVmFsdWUuaXNPYmplY3QoKSAmJiBhc09iamVjdChqc1Zh
bHVlKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pKSkgeworICAgICAgICAvKiBJZ25vcmUg
dGhlIHZhbHVlIGlmIHJlc3VsdCB3YXMgZnVuY3Rpb24gb3IgCisgICAgICAgICAqIHVuZGVmaW5l
ZC4KKyAgICAgICAgICovCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmICgh
aXNGaXJzdFZhbHVlKSB7CisgICAgICAgIC8vIFRoaXMgaXMgbm90IHRoZSBmaXJzdCB2YWx1ZS4K
KyAgICAgICAgYnVmZmVyLmFwcGVuZCgnLCcpOworICAgIH0KKworICAgIGlmICghanNLZXkuaXNV
bmRlZmluZWQoKSAmJiAhaXNBcnJheU9iamVjdCkgeworICAgICAgICAvKiBXZSBuZWVkIHRvIGlu
Y2x1ZGUgdGhlIHByb3BydHkgbmFtZSBmb3IgCisgICAgICAgICAqIG9iamVjdHMuCisgICAgICAg
ICAqLworICAgICAgICBidWlsZFN0cmluZyhqc0tleS5nZXRTdHJpbmcoKSwgYnVmZmVyKTsKKyAg
ICAgICAgYnVmZmVyLmFwcGVuZCgiOiIpOyAgCisgICAgfQorICAgIAorICAgIGlmIChqc1ZhbHVl
LmlzTnVsbCgpKSB7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoIm51bGwiKTsKKyAgICB9IGVsc2Ug
aWYgKGpzVmFsdWUuaXNPYmplY3QoKSl7CisgICAgICAgIC8vIFdhbGsgdGhyb3cgdGh3IHRoZSBv
YmplY3QgcHJvcHJpZXMKKyAgICAgICAgYm9vbCBpc0FycmF5ID0gaXNKU0FycmF5KCZleGVjLT5n
bG9iYWxEYXRhKCksIGpzVmFsdWUpOworICAgICAgICBib29sIGlzRmlyc3QgPSB0cnVlOworCisg
ICAgICAgIGJ1ZmZlci5hcHBlbmQoaXNBcnJheT8gJ1snOid7Jyk7CisKKyAgICAgICAgSlNPYmpl
Y3QgKm9iaiA9IGpzVmFsdWUudG9PYmplY3QoZXhlYyk7CisgICAgICAgIFByb3BlcnR5TmFtZUFy
cmF5IG5hbWVzKGV4ZWMpOworCisgICAgICAgIC8vIEdldCBsaXN0IG9mIHByb3BlcnR5IG5hbWVz
LgorICAgICAgICBvYmotPmdldFByb3BlcnR5TmFtZXMoZXhlYywgbmFtZXMpOworCisgICAgICAg
IFByb3BlcnR5TmFtZUFycmF5Ojpjb25zdF9pdGVyYXRvciBjdXJyZW50ID0gbmFtZXMuYmVnaW4o
KTsKKyAgICAgICAgUHJvcGVydHlOYW1lQXJyYXk6OmNvbnN0X2l0ZXJhdG9yIGVuZCAgICAgPSBu
YW1lcy5lbmQoKTsKKworICAgICAgICBmb3IgKDsgY3VycmVudCAhPSBlbmQ7IGN1cnJlbnQrKykg
eworICAgICAgICAgICAgSlNWYWx1ZSBuYW1lID0ganNPd25lZFN0cmluZyhleGVjLCBjdXJyZW50
LT51c3RyaW5nKCkpOworICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZT0gb2JqLT5nZXQoZXhlYywg
KmN1cnJlbnQpOworCisgICAgICAgICAgICBpZiAodmFsdWUuaXNVbmRlZmluZWQoKSB8fCAodmFs
dWUuaXNPYmplY3QoKSAmJiBhc09iamVjdCh2YWx1ZSktPmluaGVyaXRzKCZKU0Z1bmN0aW9uOjpp
bmZvKSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICghc3Ry
aW5naWZ5KGV4ZWMsIG5hbWUsIHZhbHVlLCBidWZmZXIsIGlzQXJyYXksIGlzRmlyc3QpKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaWYgKGlzRmlyc3QpCisg
ICAgICAgICAgICAgICAgaXNGaXJzdCA9IGZhbHNlOworICAgICAgICB9CisKKyAgICAgICAgYnVm
ZmVyLmFwcGVuZChpc0FycmF5PyAnXSc6J30nKTsgCisgICAgfSBlbHNlIGlmIChqc1ZhbHVlLmlz
Qm9vbGVhbigpKSB7CisgICAgICAgIGJ1ZmZlci5hcHBlbmQoanNWYWx1ZS50b1N0cmluZyhleGVj
KSk7IAorICAgIH0gZWxzZSBpZiAoanNWYWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIGJ1aWxk
U3RyaW5nKGpzVmFsdWUuZ2V0U3RyaW5nKCksIGJ1ZmZlcik7CisgICAgfSBlbHNlIGlmIChqc1Zh
bHVlLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgZG91YmxlIHZhbCA9IGpzVmFsdWUudG9OdW1iZXIo
ZXhlYyk7CisgICAgICAgIGlmICh2YWwgIT0gdmFsKXsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBl
bmQoIm51bGwiKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJ1ZmZlci5hcHBlbmQo
anNWYWx1ZS50b1N0cmluZyhleGVjKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNPTlByb3RvRnVuY1BhcnNlKEV4ZWNTdGF0ZSogZXhlYywgSlNPYmplY3QgKnRoaXNPYmplY3Qs
IEpTVmFsdWUgdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JiBhcmdzKQoreworICAgIFVOVVNFRF9Q
QVJBTSh0aGlzVmFsdWUpOworCisgICAgaWYgKGFyZ3MuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsICJObyBpbnB1dCB0byBwYXJzZSIpOwor
CisgICAgSlNWYWx1ZSBvYmogPSBhcmdzLmF0KDApOworICAgIGlmICghb2JqLmlzU3RyaW5nKCkp
CisgICAgICAgIHJldHVybiBvYmo7CisKKyAgICBVU3RyaW5nIHMgPSBvYmoudG9TdHJpbmcoZXhl
Yyk7CisKKyAgICBpbnQgZXJyTGluZTsKKyAgICBVU3RyaW5nIGVyck1zZzsKKworICAgIFNvdXJj
ZUNvZGUgc291cmNlID0gbWFrZVNvdXJjZShzKTsKKyAgICBSZWZQdHI8RXZhbE5vZGU+IGV2YWxO
b2RlID0gZXhlYy0+Z2xvYmFsRGF0YSgpLmpzb25QYXJzZXItPnBhcnNlPEV2YWxOb2RlPihleGVj
LCBzb3VyY2UsICZlcnJMaW5lLCAmZXJyTXNnKTsKKworICAgIGlmICghZXZhbE5vZGUpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIFN5bnRheEVycm9yLCBlcnJNc2csIGVyckxpbmUs
IHNvdXJjZS5wcm92aWRlcigpLT5hc0lEKCksIE5VTEwpOworCisgICAgSlNWYWx1ZSByZXN1bHQg
PSBleGVjLT5pbnRlcnByZXRlcigpLT5leGVjdXRlKGV2YWxOb2RlLmdldCgpLCBleGVjLCBOVUxM
LCBleGVjLT5zY29wZUNoYWluKCksIGV4ZWMtPmV4Y2VwdGlvblNsb3QoKSk7CisKKyAgICBKU1Zh
bHVlIHJldml2ZXIgPSBhcmdzLmF0KDEpOworICAgIGlmICghcmVzdWx0LmlzTnVsbCgpIAorICAg
ICAgICAmJiAhcmV2aXZlci5pc1VuZGVmaW5lZE9yTnVsbCgpIAorICAgICAgICAmJiBhc09iamVj
dChyZXZpdmVyKS0+aW5oZXJpdHMoJkpTRnVuY3Rpb246OmluZm8pKQorICAgICAgICByZXN1bHQg
PSBjYWxsUmV2aXZlcihleGVjLCB0aGlzT2JqZWN0LCByZXN1bHQsIGpzVW5kZWZpbmVkKCksIGFz
RnVuY3Rpb24ocmV2aXZlcikpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworCitKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNPTlByb3RvRnVuY1N0cmluZ2lmeShFeGVjU3RhdGUqIGV4ZWMsIEpT
T2JqZWN0KiwgSlNWYWx1ZSB0aGlzVmFsdWUsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7CisgICAg
VU5VU0VEX1BBUkFNKHRoaXNWYWx1ZSk7CisKKyAgICBpZiAoYXJncy5pc0VtcHR5KCkpCisgICAg
ICAgIHJldHVybiB0aHJvd0Vycm9yKGV4ZWMsIEdlbmVyYWxFcnJvciwgIk5vIGlucHV0IHRvIHN0
cmluZ2lmeSIpOworCisgICAgSlNWYWx1ZSBvYmplY3QgPSBhcmdzLmF0KDApOworICAgIGlmIChv
YmplY3QuaXNVbmRlZmluZWRPck51bGwoKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisKKyAgICBVU3RyaW5nIGJ1ZmZlcjsKKyAgICBzdHJpbmdpZnkoZXhlYywganNVbmRlZmluZWQo
KSwgb2JqZWN0LCBidWZmZXIpOworICAgIAorICAgIHJldHVybiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpPyBleGVjLT5leGNlcHRpb24oKSA6IGpzU3RyaW5nKGV4ZWMsIGJ1ZmZlcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU09OT2JqZWN0LmgJKHJl
dmlzaW9uIDApCisrKyBKYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTT05PYmplY3QuaAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBI
YXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQorICogIENvcHlyaWdodCAoQykgMjAwOCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
CisgKi8KKworI2lmbmRlZiBKU09OT2JqZWN0X2gKKyNkZWZpbmUgSlNPTk9iamVjdF9oCisKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNzIEpTT05P
YmplY3QgOiBwdWJsaWMgSlNPYmplY3QgeworICAgIHB1YmxpYzoKKyAgICAgICAgSlNPTk9iamVj
dChQYXNzUmVmUHRyPFN0cnVjdHVyZT4gc3RydWN0dXJlKQorICAgICAgICAgICAgOkpTT2JqZWN0
KHN0cnVjdHVyZSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgdmlydHVhbCBib29s
IGdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVy
dHlTbG90Jik7CisKKyAgICAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNzSW5mbygp
IGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CisgICAgICAgIHN0YXRpYyBjb25zdCBDbGFzc0luZm8g
aW5mbzsKKworICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1Y3R1cmU+IGNyZWF0ZVN0cnVj
dHVyZShKU1ZhbHVlIHByb3RvdHlwZSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIFN0
cnVjdHVyZTo6Y3JlYXRlKHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0VHlwZSkpOworICAgICAg
ICB9CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBKU09OT2JqZWN0
X2gK
</data>
<flag name="review"
          id="15246"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>